之前读了周志华的《机器学习》,学习了决策树这一章的相关内容,觉得收获很大。尤其是作者提出的这个数据集,以它为例进行了非常精彩的论述。本文决定也采用《机器学习》书上的例子—-西瓜数据集。
数据集介绍
西瓜数据集是作者自己独创的一个数据集,也是书的封面插图。数据集可以描述如下:
训练集
1 | 青绿,蜷缩,浊响,清晰,凹陷,硬滑,是 |
测试集
1 | 青绿,蜷缩,沉闷,清晰,凹陷,硬滑,是 |
数据集处理
关于数据集的处理,还是和我们之前的套路一样,需要将它转换为Weka能够处理的格式—-arff文件。所以,我们需要在文件上加上这一个头,以便于Weka中的决策树实现J48训练器能够识别这个数据集。
数据集头部
1 | @RELATION watermelon |
注意数据部分前面别忘记添加@DATA
啦。
关于属性类型为String报错的问题
我之前的写法是下面这样的:
1 | @RELATION watermelon |
结果报错说不能识别String类型的属性,我就很郁闷了[老鸟别喷~],排查了很久才发现这个地方应该是Nominal类型,也就是分类类型。其实大家可以看到这些属性的值都是在几个值之间切换的,所以它们是相对固定的,切记不要写成了String类型。
训练模型
模型的训练我们使用的是J48分类器实现的,J48是是C4.5算法在Weka中的实现。针对ID3算法的不足做了很多优化。具体使用代码如下:
1 | package com.qinjiangbo.algorithms.decisiontree; |
测试模型
选择了两个实例来对模型进行测试,其实上面的代码已经给出了,分别是青绿,蜷缩,沉闷,清晰,凹陷,硬滑 [是]
和浅白,蜷缩,浊响,模糊,平坦,软粘 [否]
。
第一组测试
数据实例:青绿,蜷缩,沉闷,清晰,凹陷,硬滑 [是]
,输出结果如下:
1 | class of data is: 是 |
第二组测试
数据实例:浅白,蜷缩,浊响,模糊,平坦,软粘 [否]
,输出结果如下:
1 | class of data is: 否 |
总结
这个例子比较简单,主要是利用决策树对数据进行预测和分类,从这个实践的过程能学习到数据的预处理和一些评价的标准,比如准确率和召回率等等,关于这两部分后面的文章中我会进行对应地介绍。机器学习能帮助我们解决很多我们常规方式解决不了的东西。