1 数据挖掘的学习——以分类为例
1.1 学习材料
学习材料(附件1)是数据挖掘方面最经典的一本教材《Data Mining:Concepts and Techniques》的翻译版《数据挖掘:概念与技术》,加拿大华人韩嘉炜(Jiawei Han)老师的一本书。韩老师是数据挖掘界公认的大牛。
数据挖掘应用中最多的要数分类算法,而决策树算法(decision tree)又是分类算法中较为经典的一个。所以给大家发一个附件,是这本书的第一版的翻译版,网上还能下载到英文版的第二版。大家用一周的课余时间学习一下其中的“第七章分类和预测” 的前三小节,7.1和7.1是介绍性的,也即是重点学习“7.3 用判定树归纳分类”。不理解的概念可google或者查阅书中前面章节的可能有助于理解的部分。
1.2 练习题
下面的题目是某一个数据集的简化版,请把解答写在题目的后面。
题目:下表是一个某种体育运动的天气条件的数据集,天气问题有4个属性:阴晴、温度、湿度和刮风,结论是是否能玩。
RID | 阴晴 | 温度 | 湿度 | 刮风 | 玩 |
1 | sunny | hot | high | false | no |
2 | sunny | hot | high | true | no |
3 | overcast | hot | high | false | yes |
4 | rainy | mild | high | false | yes |
5 | rainy | cool | normal | false | yes |
6 | rainy | cool | normal | true | no |
7 | overcast | cool | normal | true | yes |
8 | sunny | mild | high | false | no |
9 | sunny | cool | normal | false | yes |
10 | rainy | mild | normal | false | yes |
11 | sunny | mild | normal | true | yes |
12 | overcast | mild | high | true | yes |
13 | overcast | hot | normal | false | yes |
14 | rainy | mild | high | true | no |
(1)根据图7.3的判定树算法(ID 3),分析该数据集,要求写出每一步的详细的过程(模仿课本节选部分内容写)。画出最后够造出来的判定树,并写出由得到的判定树产生分类规则。
(2)对一个上表中没有的新样例进行判断:阴晴=sunny, 温度=hot, 湿度= normal, 刮风=false, 玩=?
(3)思考一下,假如这个数据集中的数据采用数值属性,如下表,如何进行分析,说说你的想法。
RID | 阴晴 | 温度 | 湿度 | 刮风 | 玩 |
1 | sunny | 85 | 85 | false | no |
2 | sunny | 80 | 90 | true | no |
3 | overcast | 83 | 86 | false | yes |
4 | rainy | 70 | 96 | false | yes |
5 | rainy | 68 | 80 | false | yes |
6 | rainy | 65 | 70 | true | no |
7 | overcast | 64 | 65 | true | yes |
8 | sunny | 72 | 95 | false | no |
9 | sunny | 69 | 70 | false | yes |
10 | rainy | 75 | 80 | false | yes |
11 | sunny | 75 | 70 | true | yes |
12 | overcast | 72 | 90 | true | yes |
13 | overcast | 81 | 75 | false | yes |
14 | rainy | 71 | 91 | true | no |
解答:
(一)表中给出了取自一个某种体育运动的天气条件的数据集。类标号属性“玩”有两个不同值(即, {yes, no}),因此有两个不同的类(m = 2)。设类C1对应于yes,而类C2对应于no。类yes有9个样本,类no有5个样本。为计算每个属性的信息增益,我们首先使用(7.1)式,计算对给定样本分类所需的期望信息:
RID | 阴晴 | 温度 | 湿度 | 刮风 | 玩 |
1 | sunny | hot | high | false | no |
2 | sunny | hot | high | true | no |
3 | overcast | hot | high | false | yes |
4 | rainy | mild | high | false | yes |
5 | rainy | cool | normal | false | yes |
6 | rainy | cool | normal | true | no |
7 | overcast | cool | normal | true | yes |
8 | sunny | mild | high | false | no |
9 | sunny | cool | normal | false | yes |
10 | rainy | mild | normal | false | yes |
11 | sunny | mild | normal | true | yes |
12 | overcast | mild | high | true | yes |
13 | overcast | hot | normal | false | yes |
14 | rainy | mild | high | true | no |
下一步,我们需要计算每个属性的熵。让我们从属性“阴晴”开始。我们需要观察“阴晴”的每个样本值的yes和no分布。我们对每个分布计算期望信息。
对于:
Sunny:s11=2,s21=3,I(s11,s21) = 0.971
Overcast: s12=4,s22=0,I(s12,s22) =0
Rainy: s13=3,s23=2,I(s13,s23) = 0.971
使用(7.2)式,如果样本按“阴晴”划分,对一个给定的样本分类所需的期望信息为:
因此,这种划分的信息增益是
类似地,我们可以计算Gain(温度) = 0.029, Gain(湿度) = 0.151和Gain(刮风) = 0.048。由于“阴晴”在属性中具有最高信息增益,它被选作测试属性。创建一个结点,用“阴晴”标记,并对于每个属性值,引出一个分枝。样本据此划分,如图所示,落在分区阴晴= “overcast”的样本都属于同一类。由于它们都属于同一类yes,因此要在该分枝的端点创建一个树叶,并用yes标记。为图1
分别对sunny部分与及rainy部分递归,进一步分类,此时,发现出现终止递归的条件,在此情况下,使用多数表决(步骤5)。这涉及将给定的结点转换成树叶,并用样本中的多数所在的类标记它。替换地,可以存放结点样本的类分布。
最后,生成的判定树为图2
分类规则如下:
IF “阴晴”=sunnyAND 湿度=normal
THAN “玩”=YES
IF “阴晴”=sunny AND 湿度=normal
THAN “玩”=YES
IF “阴晴=”overcast
THAN “玩”=YES
IF “阴晴”=rainy, 刮风=true
THAN “玩”=NO,
IF “阴晴”=rainy,刮风=false,
THAN “玩”=YES
(二)“玩”=YES
(三)当数据采用数值属性时, 我们得到的数据更加详细了,准确率应当有所提升。我们可以将数值属性按到不同的比例分类,使得s的值更多,可以是60到65,65到70,….一直到90, 也可以是60到70, 70到80,80到90,,按不同的公差分类,公差越小,准确率越高,但是,将数据划分成越来越小的部分,判定树归纳可能面临碎片、重复和复制问题。碎片,可以用创建二叉判定树解决,或者用属性构造解决这3个问题。
还有其他的方法,通过修改算法,给定A的值v,确定V时考虑v-1个可能的分割。通常,考虑每对相邻值的中间值。如果这些值已预先排序,则只需要扫描一次这些值。
信息增益度量有倾斜,它倾向于适合具有许多值的属性。已经提出了一些替代的方法,如增益率,它考虑每个属性值的概率。还有一些其它选择度量,包括Gini索引,c2相依表统计和G-统计。(这些内容感觉跟问题相关,但是看不太懂~~)。