一、实验室名称:
无
二、实验项目名称:
认识数据与数据预处理
三、实验学时:
6
四、实验原理:
1、数据属性最小最大归一化(可尝试其它方法:如 ZSCORE)
其中v是属性A的某个观测值,minA和maxA分别是属性A的最小值和最大值
上述公式将A属性的取值映射到区间[new_minA,new_maxA]
如果令new_maxA = 1, new_minA = 0,则将A属性映射到区间[0,1],实现了数据归一化
2、缺失值处理
对于数据中属性的缺失值,使用该属性的平均值来填补缺失值
3、特征筛选
信息增益是用来进行特征筛选的常用算法,基本思想是选择那些特征对分类变量Y信息增益大,删除那些对分类无用的特征。
五、实验目的:
1、了解Weka工具包及Eclipse编程平台
2、认识和了解数据
3、对数据能进行简单的预处理
六、实验内容:
1、安装并配置Java、Eclipse和Weka(已配置)
2、使用图形界面的Weka工具包,完成数据归一化、缺失值处理、特征筛选的数据预处理操作
3、在Eclipse下调用Weka.jar包,完成数据归一化、缺失值处理、特征筛选的数据预处理操作
七、实验器材(设备、元器件):
Windows eclipse
八、实验步骤:
1. 配置实验环境
2. 使用Weka图形界面工具完成数据归一化,缺失值处理,特征筛选
- 打开Weka GUI工具
- 选择Explorer
- 点击Open file
- 选择数据文件iris.arff
- 在Filter栏目下,选择Choose
- 选择weka->filters->unsupervised->attribute->Normalize
- 点击“Normalize –S 1.0 –T 0.0”所在区域可以调整参数,由于本例选择将数据归一化到[0,1],使用默认的参数即可实现,点击Apply将数据归一化
- 查看数据各个属性的值,已经归一化到[0,1](注:其中class不是数据属性,而是数据类别标签,不会被归一化),将实验结果截图放入实验报告中
使用Weka图形界面工具完成数据缺失值处理
使用Weka图形界面工具完成特征筛选
3. 在Eclipse下调用Weka.jar包完成数据归一化,缺失值处理,特征筛选
完整代码如下:
package shuwa1;
import weka.core.Attribute;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSink;
import weka.core.converters.ConverterUtils.DataSource;
import weka.filters.Filter;
import weka.filters.unsupervised.attribute.Normalize;
public class test {
public static void main(String[] args)throws Exception{
//读取数据
System.out.println("1. read:");
DataSource source=new DataSource("D:/study_godforename/数据挖掘/Weka-3-8-4/data/iris.arff");
Instances instances=source.getDataSet();
//归一化
System.out.println("2. one:");
Normalize norm=new Normalize();
norm.setInputFormat(instances);
Instances newInstances=Filter.useFilter(instances,norm);
//打印属性名
int numOfAttributes=newInstances.numAttributes();
for(int i=0;i<numOfAttributes;++i) {
Attribute attribute=newInstances.attribute(i);
System.out.println(attribute.name()+" ");
}
System.out.println();
//打印实例
int numOfInstance=newInstances.numInstances();
for(int i=0;i<numOfAttributes;++i) {
Instance instance=newInstances.instance(i);
System.out.println(instance.toString()+" ");
System.out.println();
}
//save
DataSink.write("D:/1.arff", newInstances);
}
}
在Eclipse下调用Weka.jar包完成数据缺失值处理
源数据:
处理后数据:
源代码:
package shuwa1;
import weka.core.Attribute;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSink;
import weka.core.converters.ConverterUtils.DataSource;
import weka.filters.Filter;
import weka.filters.unsupervised.attribute.Normalize;
public class test {
public static void main(String[] args)throws Exception{
//读取数据
System.out.println("1. read:");
String fn="D:/study_godforename/数据挖掘/Weka-3-8-4/data/laborMissing.arff";
DataSource source=new DataSource(fn);
Instances instances=source.getDataSet();
int dim=instances.numAttributes();
int num=instances.numInstances();
//缺失数据处理
double[] meanV=new double[dim];
for(int i=0;i<dim;i++) {
meanV[i]=0;
int count=0;
for(int j=0;j<num;j++) {
if(!instances.instance(j).isMissing(i)) {
meanV[i]+=instances.instance(j).value(i);
count++;
}
}
meanV[i]=meanV[i]/count;
}
//全局平均代表缺失值
for(int i=0;i<dim;i++) {
for(int j=0;j<num;j++) {
if(instances.instance(j).isMissing(i)) {
instances.instance(j).setValue(i, meanV[i]);
}
}
}
System.out.println("3. save");
DataSink.write(fn.substring(0,fn.length()-6)+"_handle.arff", instances);
}
}
特征筛选
源数据:
处理后数据:
源代码:
package shuwa1;
import weka.attributeSelection.ASEvaluation;
import weka.attributeSelection.InfoGainAttributeEval;
import weka.attributeSelection.Ranker;
import weka.classifiers.meta.AttributeSelectedClassifier;
import weka.core.Attribute;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSink;
import weka.core.converters.ConverterUtils.DataSource;
import weka.filters.Filter;
import weka.filters.supervised.attribute.AttributeSelection;
import weka.filters.unsupervised.attribute.Normalize;
public class test {
public static void main(String[] args)throws Exception{
//读取数据
System.out.println("1. read:");
String fn="D:/study_godforename/数据挖掘/Weka-3-8-4/data/iris.arff";
DataSource source=new DataSource(fn);
Instances instances=source.getDataSet();
//特征筛选
System.out.println("2. 特征筛选");
int k=2;
AttributeSelection as=new AttributeSelection();
Ranker rank=new Ranker();
rank.setThreshold(0.0);
rank.setNumToSelect(k);
ASEvaluation ae=new InfoGainAttributeEval();
as.setEvaluator(ae);
as.setSearch(rank);
as.setInputFormat(instances);
Instances reductdata=Filter.useFilter(instances, as);
System.out.println("3. save");
DataSink.write(fn.substring(0,fn.length()-6)+"_reducted.arff", reductdata);
System.out.println("Finsh");
}
}
九、实验数据及结果分析:
归一化数据:
缺失值处理如实验步骤图
特征筛选如实验步骤图
十、实验结论:
无
十一、总结及心得体会:
较为熟练的掌握了weka的图形化处理和java调用处理,进行数据归一化,缺失值处理,特征筛选的方法
十二、对本实验过程及方法、手段的改进建议:
无
暂无评论