svmtest

svmtest

Classifier m_classifier = new LibSVM();

使用父类 分类器 实例化svm类

ArffLoader atf = new ArffLoader();

arff文件装载器

装载arff分两种,第一种训练模型用的训练文件,第二种测试模型用的测试文件,这里训练文件为test,测试文件为test2

atf.setFile(inputFile);

arff文件装载器,第一步设置文件路径,然后使用getDataSet()方法获取文件中的数据集合,数据集合放在weka自定义的数据结构Instances中

Instances instancesTrain = atf.getDataSet();

数据集.numAttributes()获取数据集的列数
数据集.numInstances()获取数据集的行数

instancesTrain.setClassIndex(instancesTrain.numAttributes()-1);

获取数据集后,需要设置数据集中的指针,将其指向数据集中列的最后一位。因为调用算法处理时,算法只会处理指针范围内的列,也就是说,如果一张表有50列,指针指向8,那么算法只会处理1-8,具体到数据中的下标,就是0-7,这也是需要获取列数后-1的原因。

m_classifier.buildClassifier(instancesTrain); //训练

调用算法,输入数据集,通过数据训练形成模型

m_classifier.classifyInstance(instancesTest.instance(i))

分类器给定的实例测试方法,输入单条数据,返回0 1


固定代码块

输出arff文件

//设置输出文档路径
File file2=new File("E://java//test.arff");
//实例化操作类
ArffSaver saver=new ArffSaver();
//获取数据源
saver.setInstances(dataInsatnces);
//建立输出文件
saver.setFile(file2);
//打印数据源数据到目标文件
saver.writeBatch();


zk.classifiers.Classifier cModel = new zk.classifiers.bayes.NaiveBayes();

cModel.buildClassifier(dataInsatnces);

//4.测试分类器
  
Evaluation eTest = new Evaluation(dataInsatnces);

eTest.evaluateModel(cModel, dataInsatnces);
  
//打印测试结果
System.out.println(eTest.toSummaryString());

 


logistic.java

建立模型函数
buildClassifier(Instances train)

获取测试类的实例化对象,在调用测试方法来测试传入的数据集
getCapabilities().testWithFail(train);

将数据集中,所有有缺失数据的记录删除,自带的清洗功能
train = new Instances(train);
train.deleteWithMissingClass();


获取过滤规则
m_ReplaceMissingValues = new ReplaceMissingValues();

设定过滤规则对象
m_ReplaceMissingValues.setInputFormat(train);

静态过滤器装载过滤对象及过滤规则
train = Filter.useFilter(train, m_ReplaceMissingValues);

 

 

 

 

 

 

 

 

 

 

posted @ 2013-09-05 11:21  传说中那只猫  阅读(600)  评论(0编辑  收藏  举报