决策树之ID3算法

来源:互联网 发布:win7软件中文乱码 编辑:程序博客网 时间:2024/05/17 07:17

“喂,你的避孕套。”

“不,是你的避孕套。”


-----------------------------------------------------------------------------------------------------------------------


你对你的避孕套满意吗?让我用决策树告诉你哪种才是你想要的。

 

在此之前,需要给各位科普下相关知识(→_→)

评价一个避孕套的指标有:


1. 尺寸


2.厚度


3.外表,咳咳


下表是10条样例数据集,乍一看,好像没什么大不了的哦。

没错,我们就从这里出发,相信我,你会喜欢这个探索过程的。(贱笑)




你问我什么是决策树?

好幼稚的问题,树你没见过?(这个逼装的成功不?)


总之你需要知道的是,决策树这玩意会把数据集划分成一类一类,然后就能用来预测了。


多说两句,这个图中的圆叫内部结点,代表一个属性,方框叫叶结点,代表一个类。



然后你就忍不住了,这跟我的避孕套有个毛线关系啊?!

不要急,就知道你喜欢这一套,简单粗暴,没错,我也喜欢。

 

前面那张表你也看见了,只有10条数据,这可不是一般的少呐,因为我们一般拿到的数据,动辄会上百万,上亿。

所以说我只能告诉你方法,告诉不了你最终答案的。(大爷留步啊 T_T)

决策树会根据权重,自顶向下贪婪搜索遍历可能的决策树空间,最后分类出几类最受人们欢迎的避孕套,这就是问啥我要用决策树的原因了。

具体呢,我使用了ID3算法来解决问题。(装逼+1)

 

第一个要解决的问题就是,权重。

衡量属性价值的一个好的标准是什么呢?是什么呢?哦,可不就是“熵”嘛。

如果给定一个样例集S,那么S的布尔分类的熵是这么计算的:


在我们的避孕套数据里,有10个数据对吧,其中有6个的使用结果是满意的,有四个的使用结果是不满意。所以,可以这么写:S=[6+,4-]。

它的熵就是Entropy(S)=-(6/10)log2(6/10)-(4/10)log2(4/10)=0.97

 

哭哭哭,这得按多少下计算器才能出结果啊,所以懒惰的我写了个小小的C程序,就是它。

#include <stdio.h>#include <stdlib.h>#include <math.h>int main(void) {//50次,够用了吧for(int i = 0;i<50;i++){float x,y,z;float result;scanf("%d %d",&x,&y);z=x+y;//奔跑吧,皮卡丘result=((y/z)*(log(y/z))/(log(2))+(x/z)*(log(x/z))/(log(2)))*(-1);printf("result=%f\n",result);}return 0;}

知道了“熵”是不够的,还有个叫“信息增益”你也得知道。它写做Gain(S,A),代表了一个属性A相对样例集合S的信息增益。

熵和信息增益的关系是,“一个属性的信息增益就是使用这个属性分割样例而导致的期望熵降低”。


在避孕套属性“尺寸”中:

S(大) = [2+,1-]=0.918

S(中) = [1+,3-]=0.811

S(小) = [2+]=0

S(特小) = [1+]=0

Gain(样例集合, 尺寸) = Entropy(S)-(3/10)Entropy(S大)-(4/10)Entropy(S中)- (2/10)Entropy(S小)-(1/10)Entropy(S特小)

                                 = 0.97-0.3*0.918-0.4*0.811=0.370

 

以此类推:

            “厚度”:

                           S(普通型) = [3+,1-]=0.811

                           S(薄型) = [1+,1-]=1

                           S(超薄型) = [2+,2-]=1

                           Gain(样例集合,厚度)=0.97-0.4*0.811-0.2-0.4=0.04

 

 

         “外表”:

                           S(光滑) = [3+,2-]=0.971

                           S(颗粒) = [2+,1-]=0.918

                           S(螺纹) = [1+,1-]=1

                           Gain(样例集合,外表)=0.97-0.5*0.971-0.3*0.918-0.2=0.01

        

相传,ID3算法在计算每个候选属性(尺寸,厚度,外表)的信息增益时,选择信息增益最高的一个,即,尺寸

好了,该画决策树了。


那么问题来了,谁该先放在第一个结点上?

按照上面的思路,决策树还要继续算下去

 

Gain(S大,厚度)=0.918-1/3*0.811-1/3-1/3=-0.019

Gain(S大,外表)=0.918-0.971=-0.053

 

所以,我懂了,第一个该是厚度,厚度为王嘛,越结实越耐用,对不对?



至此,你看出来了吧,要想让自己获得极致体验,避孕套一定要选择大号普通款或者中号光滑款。

小号和特小号嘛,我估计我是用不上了。





1 0