⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kdd.java

📁 特征选择算法的改进...比较实践证明是个优秀的算法
💻 JAVA
字号:
//package test;

import java.sql.*;
import java.io.*;
import java.io.InputStream;
/*import org.jfree.data.*;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;*/



public class Kdd{
    public static Connection conn;
    public static Statement stmt;
    public static ResultSet res;
    public static int rowNumber;
    public static int columnNumber;
    public static ResultSetMetaData rsmd;
    public static final double UPPER = 10;
    public static final double LOWER = 1;
 public static void main(String avg[])
  {
    try
    {
      //数据库连接
      connect();
      //显示读取数据的行数
      showrow();
      //显示属性字段的列数
      showcolumn();
      //数据规范化处理
      double x[][]=new double[rowNumber+1][columnNumber+1];
	  dispose(x);
      res.close();
      //算法计算
      double R[]=new double[columnNumber];
      R = kdd(x);
      //属性相关系数排序并可视化输出
      bubbleSort(R);
 
    }catch (Exception ex)
    {
      System.out.println("Error : " + ex.toString());
    }  
  } 

 
 
public static void connect(){
	try{
	//加载Connector/J驱动
    Class.forName("com.mysql.jdbc.Driver");
   //建立到MySQL的连接
    conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/rawdata?user=root&password=me");
   //执行SQL语句
    stmt = conn.createStatement();
    res = stmt.executeQuery("select * from rawdata");
    rsmd = res.getMetaData();
	}catch (Exception ex){
      System.out.println("Error : " + ex.toString());
    } 
}

public static void showrow(){
    //显示数据行数
	try{
        ResultSet resultset=stmt.executeQuery("select count(*) from rawdata");
        resultset.next();
        rowNumber=resultset.getInt(1);
        System.out.print(rowNumber+"行\t");
	}catch (Exception ex){
          System.out.println("Error : " + ex.toString());
        } 
}

public static void showcolumn(){
	try{
		 //列数
	     columnNumber=rsmd.getColumnCount();
	     System.out.print(columnNumber+"列");
	     System.out.println();
	     for(int i=1;i<columnNumber+1;i++){
	         String columnName=rsmd.getColumnName(i);
	         System.out.print(columnName+'\n');           
	      }
		
	}catch (Exception ex){
	System.out.println("Error : " + ex.toString());
}
}

 static double[][] dispose(double x[][]){
	 //处理数据
	 int i=0;
	 InputStream asc;
	 try{
     res = stmt.executeQuery("select * from rawdata");
     while (res.next())
     {
      for(int j=1;j<columnNumber+1;j++){
    	  asc = res.getAsciiStream(j);
      	  x[i][j-1] = asc.read();
       }
     i++;
     }
     double min[] = new double[columnNumber+1];
     double max[] = new double[columnNumber+1];
     String columnName;
     for(int k=1;k<columnNumber+1;k++){
     columnName=rsmd.getColumnName(k);
     res = stmt.executeQuery("select "+columnName+" from rawdata where group by "+columnName);
     res.first();
     min[k] = res.getAsciiStream(1).read();
     res.last();
     max[k] = res.getAsciiStream(1).read();
     if(min[k]==max[k])
    	 max[k] = min[k]+1;
     res.close();
     }
     standard(x,min,max);
     
  }catch(Exception e){
	  e.printStackTrace();
  }
    return x; 
 }
 
public static double[][] standard(double x[][],double min[],double max[]){
	 //标准化数据
	 double temp;
	 int i,j;
	 i=j=1;
	 for(;j<columnNumber;j++)
	     for(;i<rowNumber;i++){
	         temp = (x[i][j]-min[j])/(max[j]-min[j]);
	         x[i][j] = LOWER+(UPPER-LOWER)*temp;
	     }
	 return x;
   }


public static double[] kdd(double x[][]){
	//计算属性相关系数并排序
	double a,b;
    double R[]=new double[columnNumber];
    for(int i=0;i<columnNumber;i++){
       double temp1 = 0.0;
       double temp2 = 0.0;
       double temp3 = 0.0;
       for(int k=0;k<rowNumber;k++)
          {//System.out.println("x["+i+"]="+average(x,i));
           //if(x[k][columnNumber-1] != 0)
              // System.out.println("y["+k+"]="+x[k][columnNumber-1]);
      	   temp1+=(x[k][i]-average(x,i))*(x[k][columnNumber-1]-average(x,columnNumber-1));
      	   temp2+=pow((x[k][i]-average(x,i)));
      	   temp3+=pow((x[k][columnNumber-1]-average(x,columnNumber-1)));
           /*System.out.println("temp1="+temp1);
           System.out.println("temp2="+temp2);
           System.out.println("temp3="+temp3);*/
           
          }
       a = pow(temp1);
       b = temp2*temp3;
       //System.out.println("a="+a);
       //System.out.println("b="+b);
       R[i]=a/b;
       System.out.println("R["+i+"]="+R[i]+"\t");
    }
    return R;
}

static double pow(double d){
	 //平方值
	 return d*d;
}


static double sum(double x[][],int i){
	 //合计
	 int M = x.length;
	 double total = 0.0;
     for(int k=0;k<M;k++)  
   	 total+=x[k][i];
     return total;
}

static double average(double x[][],int i){
	 //计算均值
	 int M = x.length;
	 double ave_x = sum(x,i)/M;
     return ave_x;
}

static void bubbleSort(double []R){ 
	 //冒泡法排序
	 double t;
	 int mid;
	 int R_index[]=new int[R.length];
	 for(int i=0;i<R.length;i++){
		 R_index[i]=i+1;
	 }
	 for(int i=0;i<R.length;i++) 
	 { 
	 for(int j=0;j<R.length-i-1;j++) 
     //升序排列用大于,降序排列用小于,此处为降序排列。 
	 if(R[j]<R[j+1]){
	     t=R[j];R[j]=R[j+1];R[j+1]=t;
	     mid=R_index[j];
	     R_index[j]=R_index[j+1];
	     R_index[j+1]=mid;
	     } 
	 }
	 for(int i=0;i<R.length;i++) {
		 
	 System.out.println(R[i]+"\t"+R_index[i]);
	 }
	 //柱状图显示
	 chart(R,R_index);
	 } 

public static void chart (double R[],int R_index[]){
	
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    int M = R.length;
    	for(int i = 0;i<M;i++)
			 {String s = String.valueOf(R_index[i]);
			  dataset.setValue(R[i],"第"+s+"属性","第"+s+"属性");
			 }
	JFreeChart chart =  ChartFactory.createBarChart3D("属性x(i)和输出变量y之间的依赖度表", "属性X[i]","依赖度R[i]",dataset,PlotOrientation.HORIZONTAL,true,false,false);
	ChartFrame BarFrame = new ChartFrame("属性x(i)和输出变量y之间的依赖度表",chart);
	BarFrame.pack();
	BarFrame.setVisible(true);
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -