利用DM工具Weka进行数据挖掘(分类)的完整过程:

(有关Weka的使用详见:ML 与 DM 工具 Weka 的使用

 

0  问题背景

  • 任务:根据给定数据集创建分类器。
  • 训练数据集:100 predictive attributes A1,…,A100和一个类标C。每一个属性是介于0-1之间的浮点数。类标C有三个可能的值{0,1,2}。给定的数据文件有101列,6270行。
  • 测试数据集:100 predictive attributes A1,…,A100 ,每一个属性是介于0-1之间的浮点数。给定的数据文件有10列,500行。

训练数据如下图所示:

利用DM工具Weka进行数据挖掘(分类)的完整过程

 

测试数据如下图所示:

利用DM工具Weka进行数据挖掘(分类)的完整过程

 

1  使用平台

   Weka 3-8-1  + Eclipse

2  数据预处理

对于数据挖掘的数据预处理部分,一般有数据清理、数据集成、数据集成和数据规约等处理。由于实验提供的数据已经进行了归一化处理,不存在缺失值,异常值等情况,不需要进行数据清理和集成等工作。

(1)实验数据为txt格式,需要转换成weka支持的arff格式,利用Java编程实现简单的数据格式转换,具体代码见txt2arff.Java。

package dmtask1;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class txt2arff {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
                try {
                    BufferedReader br=new BufferedReader(new FileReader("./ExperimentalData/kddtest2017.txt"));
//                    BufferedReader br=new BufferedReader(new FileReader("./ExperimentalData/kddtrain2017.txt"));
                    String line=null;
                    BufferedWriter bw=new BufferedWriter(new FileWriter("./ExperimentalData/kddtest2017.arff"));
//                    BufferedWriter bw=new BufferedWriter(new FileWriter("./ExperimentalData/kddtrain2017.arff"));
                    bw.write("@relation kddtest2017");
//                    bw.write("@relation kddtrain2017");
                    bw.newLine();
                    for(int i=0;i<100;i++){
                        bw.write("@attribute Feature"+i+" real");
                        bw.newLine();
                    }
                    bw.write("@attribute class {0,1,2}");
                    bw.newLine();
                    bw.write("@data");
                    bw.newLine();
                    while((line=br.readLine() )!= null){
                        
                        //------------------------test--                        
                        String[] str=line.split("\t");//test 文件是\t分割
                        for(int i=0;i<str.length;i++){
                            bw.write(str[i]+",");
                        }
                        bw.write("?");
                        //------------------------test--
                        
                        //------------------------train--                    
//                        String[] str=line.split("\n");//train 文件是空格分割
//                        for(int i=0;i<str.length;i++){
//                            if (i == 0){
//                                bw.write(str[i]);
//                            }
//                            else{
//                                bw.write(","+str[i]);
//                            }
//                        }
                        //------------------------train--
                        
                        bw.newLine();
                    }
                    br.close();
                    bw.close();
                    System.out.println("OK! Finished!!");
                } catch (FileNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }catch (IOException e) {
                    // TODO: handle exception
                    e.printStackTrace();
                }
    }
}
txt2arff.Java

相关文章: