weka实际操作--构建分类、回归模型(比较详细)

转载已授权,原始链接:http://blog.csdn.net/qq_38663729/article/details/77253165


weka提供了几种处理数据的方式,其中分类和回归是平时用到最多的,也是非常容易理解的,分类就是在已有的数据基础上学习出一个分类函数或者构造出一个分类模型。这个函数或模型能够把数据集中地映射到某个给定的类别上,从而进行数据的预测。就是通过一系列的算法,将看起来本来分散的数据,给划分成一个个不同的类,我们可以知道某个数据为什么要划分到这个类别,后来的数据通过这个过程就可以知道把它划分到哪个类别,从而进行了数据的预测。

要进行分类,我们根据什么分类,这就需要把数据分为训练集和测试集两个部分,先分析训练集的数据的特点构建出分类模型。然后利用构建好的分类模型对测试集的数据进行分类,评估分类的准确性,从而进行分类器的选择。

常用的分类器也是最好容易理解的就是决策树,决策树的结构非常好理解,构建出来的决策树,用户也容易根据数据人工进行分类处理。决策树分类算法是将数据进行分类,生成一棵二叉或者多叉的树状结构。有一个根节点,没有入边(度),可能有多条出边,在树的内部的节点只有一个入边,没有出边的节点称为叶子节点,从根节点到叶子节点的一条路径是一条分类规则,一棵决策树有多条分类规则。


打开weka,选择Explorer

点击进去之后,在第一个选项卡下(Preprocess),选择Open file选择要打开的文件,注意:weka识别的文件只是arff后缀的文件,

arff格式文件主要由两个部分构成,头部定义和数据区。这种格式的文件以%开头的是注释,@attribute开头说明是属性,后面是属性名,属性取值或者属性值的类型,@data后的是数据集,以行为单位,一行代表一条数据,以逗号隔开每个属性值,注意用合适的软件打开,用记事本打开的时候,文件中的换行符号不识别,格式很难看,建议用EditPlus。

在weka的安装文件中有一个data文件夹,里面是weka自带的一些测试数据,我们可以利用他们进行练习,打开weather.nominal.arff文件,可以看到一些基本的信息,也可以利用Save按钮将csv格式的文件保存成arff格式的

,在这之前先将数据进行一下处理,利用提供的数据改成测试数据,从而对数据进行预测。把文件中的play属性值都变成?占位符,否则是无法识别的。选择第二个选项卡Classify分类

单击choose,在trees目录下选择J48,这是决策树的一个构建类,后期可以通过java调用完成这个操作,Test options中有四个单选按钮,选择第二个,单击右面的set按钮,设置测试数据集,Open file打开之前修改的测试数据集,单击Start,开始运行,右下角的那只鸟如果来回走动表示正在执行,可以看到右面的文本框输出信息

[plain]  view plain  copy
  1. === Run information ===  
  2.   
  3. Scheme:       weka.classifiers.trees.J48 -C 0.25 -M 2  
  4. Relation:     weather.symbolic  
  5. Instances:    14  
  6. Attributes:   5  
  7.               outlook  
  8.               temperature  
  9.               humidity  
  10.               windy  
  11.               play  
  12. Test mode:    user supplied test set:  size unknown (reading incrementally)  
  13.   
  14. === Classifier model (full training set) ===  
  15.   
  16. J48 pruned tree  
  17. ------------------  
  18.   
  19. outlook = sunny  
  20. |   humidity = high: no (3.0)  
  21. |   humidity = normal: yes (2.0)  
  22. outlook = overcast: yes (4.0)  
  23. outlook = rainy  
  24. |   windy = TRUE: no (2.0)  
  25. |   windy = FALSE: yes (3.0)  
  26.   
  27. Number of Leaves  :     5  
  28.   
  29. Size of the tree :  8  
  30.   
  31.   
  32. Time taken to build model: 0 seconds  
  33.   
  34. === Evaluation on test set ===  
  35.   
  36. Time taken to test model on supplied test set: 0 seconds  
  37.   
  38. === Summary ===  
  39.   
  40. Total Number of Instances                0       
  41. Ignored Class Unknown Instances                 14       
  42.   
  43. === Detailed Accuracy By Class ===  
  44.   
  45.                  TP Rate  FP Rate  Precision  Recall   F-Measure  MCC      ROC Area  PRC Area  Class  
  46.                  0.000    0.000    0.000      0.000    0.000      0.000    ?         ?         yes  
  47.                  0.000    0.000    0.000      0.000    0.000      0.000    ?         ?         no  
  48. Weighted Avg.    NaN      NaN      NaN        NaN      NaN        NaN      NaN       NaN         
  49.   
  50. === Confusion Matrix ===  
  51.   
  52.  a b   <-- classified as  
  53.  0 0 | a = yes  
  54.  0 0 | b = no  

主要的我们看到输出了决策树的结构,我们可以根据输出的信息自己画出树的结构,也可以通过软件查看树的结构,在文本中在同一缩进距离的信息代表同一层的条件,

右键点击Result list中的选项,并选择visualize tree查看决策树的图形化结构,后期用户可以根据这个人工进行决策


右键点击Result list中的选项,并选择visualize classifier errors。

在出现的窗口中点击Sava按钮,保存输出的文件,之后我们打开输出的文件查看输出的结果,系统在文件中插入了两列数据,其中一列就是预测的值

通过对比结果,正确率100%


用weka创建一个简单的回归模型:


准备了一组数据,是所在城市一个商圈附近的二手房价(从二手房网站上抓到),houseSize房屋面积,bedrooms卧室数量,livingrooms客厅数量,restrooms卫生间数量,hardcover是否是精装修(0否,1是)


单击 Classify 选项卡,单击 Choose 按钮,然后扩展 functions 分支,选择 LinearRegression 。在同一个分支还有另外一个选项,称为 SimpleLinearRegression 简单回归,简单回归只有一个变量,我们有多个变量,所以使用LinearRegression,和上面的一样,单击Start,构建模型,得到一个输出文本


有三个选择是:Supplied test set 允许提供一个不同的数据集来构建模型; Cross-validation 让 WEKA 基于所提供的数据的子集构建一个模型,然后求出它们的平均值来创建最终的模型;Percentage split WEKA 取所提供数据的百分之一来构建一个最终的模型。这些不同的选择对于不同的模型非常有用。对于回归,我们可以选择 Use training set。这会告诉weka为了构建我们想要的模型,可以使用我们在 ARFF 文件中提供的那些数据。

我们通过weka构建了一个房屋价格的模型,通过这个沃恩可以分析得到,房屋价格主要与房子面积和卧室数量有关,至于客厅数量和卫生间数量,因为大多数房子只有一个客厅和卫生间,进而对总面积影响小。对于是否是精装修,分析可能原因是,房子都处于商圈附近,房子的精装修并不能带动整体的房价。

[plain]  view plain  copy
  1. sellingPrice =  
  2.   
  3.       1.9285 * houseSize +  
  4.     -30.4737 * bedrooms +  
  5.     -20.2685  

我们可以通过以上得到的模型大致预测出其他房屋的价格,但是,房屋价格受各个方面影响太多,只能是估计,可能和实际相差巨大。


如有不对,欢迎指正!

参考:
《数据挖掘与机器学习 WEKA应用技术与实践》--袁梅宇
https://www.ibm.com/developerworks/cn/opensource/os-weka1/
  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性回归算法是一种常见的机器学习算法,可以用于实现高血压预测模型。在 Java 中,可以使用多种工具包来实现线性回归算法,如Weka、Apache Commons Math等。下面我们以使用 Apache Commons Math 工具包为例,介绍如何在 Java 中实现高血压预测模型。 首先,我们需要准备训练数据和测试数据。训练数据应该包含多个特征(如年龄、体重、血糖等)和一个目标变量(即是否患有高血压)。测试数据应该只包含特征,用于预测目标变量。这里我们假设数据已经准备好,并存储在 CSV 文件中。 接下来,我们可以使用 Apache Commons Math 工具包中的线性回归类(SimpleRegression)来构建模型。具体步骤如下: 1. 创建一个 SimpleRegression 对象。 ``` SimpleRegression regression = new SimpleRegression(); ``` 2. 读取训练数据文件,并将数据逐行加入到 SimpleRegression 对象中。 ``` CSVFormat csvFormat = CSVFormat.DEFAULT.withHeader().withDelimiter(','); try (Reader in = new FileReader("train.csv")) { Iterable<CSVRecord> records = csvFormat.parse(in); for (CSVRecord record : records) { double[] features = new double[record.size() - 1]; for (int i = 0; i < features.length; i++) { features[i] = Double.parseDouble(record.get(i)); } double target = Double.parseDouble(record.get(record.size() - 1)); regression.addData(features, target); } } ``` 3. 使用 SimpleRegression 对象进行预测。 ``` double[] features = {50, 70, 5.5, 120}; double predictedTarget = regression.predict(features); ``` 在上面的代码中,我们假设要预测的样本特征为年龄50岁、体重70公斤、血糖5.5mmol/L、收缩压120mmHg,将这些特征存储在一个数组中,并使用 predict 方法进行预测。 最后,我们可以使用测试数据来评估模型的准确性。具体步骤如下: 1. 读取测试数据文件,并将数据逐行加入到 SimpleRegression 对象中。 ``` CSVFormat csvFormat = CSVFormat.DEFAULT.withHeader().withDelimiter(','); try (Reader in = new FileReader("test.csv")) { Iterable<CSVRecord> records = csvFormat.parse(in); for (CSVRecord record : records) { double[] features = new double[record.size()]; for (int i = 0; i < features.length; i++) { features[i] = Double.parseDouble(record.get(i)); } double target = Double.parseDouble(record.get(record.size() - 1)); double predictedTarget = regression.predict(features); // 计算误差 double error = Math.abs(target - predictedTarget); System.out.println("实际值:" + target + ",预测值:" + predictedTarget + ",误差:" + error); } } ``` 在上面的代码中,我们逐行读取测试数据文件,并将每行数据的特征和目标变量加入到 SimpleRegression 对象中。然后,使用 predict 方法预测目标变量,并计算预测误差。 以上就是使用线性回归算法实现高血压预测模型的 Java 代码示例。需要注意的是,这只是一个简单的示例,实际应用中可能需要使用更复杂的特征工程、模型选择和优化方法来提高模型的准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值