Java集成Weka做逻辑回归(Logistic Regression)

本文介绍了如何在Java中集成Weka库进行逻辑回归分析。首先,需要获取Weka的jar包,并将数据转换为arff文件。接着,在Eclipse中创建Java应用,导入Weka库并编写代码。运行程序后,可以看到逻辑回归分类的结果。同时,文章还提供了Weka工具的简单操作指南。

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包
- 实验数据下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值