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);