Java集成Weka做逻辑回归(Logistic Regression)
从搜索引擎脑补可以得知,“逻辑回归”是一种分类器,通过样本集合的训练之后,可以简单做二元(或多元)分类。看了一下有用Weka做的,来来,咱也试一下。
以下给出Java集成Weka的工程。
准备
Weka的jar包
把Weka的jar包搞一个下来。网络上很多blog讲的都是用Weka工具怎么操作,也有一些代码,但奇怪似乎没有人提到weka的jar包在哪里。在下载weka安装程序的时候,发现是从sourceforge上下载,于是顺藤摸瓜,找到下载地址。
找样本数据
懒的编样本了,百度大法……从优快云某位朋友的贡献得到实验数据(仅数据哦)。等等,给weka使用之前,得编辑一下,修改成weka能读取的arff文件。
@RELATION mylogic
@ATTRIBUTE A REAL
@ATTRIBUTE B REAL
@ATTRIBUTE C {0,1}
@DATA
34.62365962451697,78.0246928153624,0
30.28671076822607,43.89499752400101,0
35.84740876993872,72.90219802708364,0
60.18259938620976,86.30855209546826,1
79.0327360507101,75.3443764369103,1
45.08327747668339,56.3163717815305,0
61.10666453684766,96.51142588489624,1
75.02474556738889,46.55401354116538,1
76.09878670226257,87.42056971926803,1
84.43281996120035,43.53339331072109,1
……
代码
起个工程
用Eclipse新建一个Java Application工程,然后添加weka的jar包。
添加可执行类
package wekaTest;
import java.io.File;
import java.io.IOException;
import weka.classifiers.functions.Logistic;
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.ArffLoader;
public class LogisticRegression {
// 训练得到分类器
static Logistic trainModel(String arffFile) throws Exception {
File inputFile = new File("data/LogisticRegression.arff"); //训练语料文件
ArffLoader loader = new ArffLoader();
loader.setFile(inputFile);
Instances insTrain = loader.getDataSet(); // 读入训练文件
insTrain.setClassIndex(2);
Logistic logic=new Logistic();
logic.buildClassifier(insTrain);//根据训练数据构造分类器
return logic;
}
public static void main(String[] args) throws Exception {
final String arffFilePath = "data/LogisticRegression.arff";
Logistic logic = trainModel(arffFilePath);
ArffLoader loader = new ArffLoader();
loader.setFile(new File(arffFilePath)); //测试语料文件
Instances insTest =loader.getDataSet(); // 读入测试文件
insTest.setClassIndex(2); //设置分类属性所在行号(第一行为0号)
double sum = insTest.numInstances(); //测试语料实例数
double right=0.0f;
for(int i=0;i<sum;i++){
Instance ins = insTest.instance(i);
if(logic.classifyInstance(ins)==ins.classValue()) {
right++;
System.out.println("No.\t" + i + "\t" + ins.classValue() + " RIGHT");
}
else {
System.out.println("No.\t" + i + "\t" + ins.classValue() + " WRONG");
}
}
// 打印出分类的精确度
System.out.println("classification precision:" + (right/sum));
}
}
运行
执行这个类的main函数,得到:
No. 0 2.0 WRONG
No. 1 0.0 RIGHT
No. 2 0.0 RIGHT
No. 3 1.0 RIGHT
No. 4 1.0 RIGHT
No. 5 0.0 RIGHT
No. 6 1.0 RIGHT
No. 7 1.0 WRONG
No. 8 1.0 RIGHT
No. 9 1.0 RIGHT
No. 10 0.0 WRONG
……
classification precision:0.89
顺便说说weka工具怎么玩。
下载了weka-3-8-0jre-x64.exe (Windows版),然后安装,然后启动……然后我点了Explorer按钮:
然后选择Logistic
然后确认因变量,开始运行
参考:
- 【云深不知处的】优快云博客
- 【bdss58的专栏】优快云博客
下载:
- weka安装程序
- weka3.8的jar包
- 实验数据下载
本文介绍了如何在Java中集成Weka库进行逻辑回归分析。首先,需要获取Weka的jar包,并将数据转换为arff文件。接着,在Eclipse中创建Java应用,导入Weka库并编写代码。运行程序后,可以看到逻辑回归分类的结果。同时,文章还提供了Weka工具的简单操作指南。
662

被折叠的 条评论
为什么被折叠?



