您的位置:首页 > 其它

决策树

2015-12-18 17:00 176 查看
一.综述

决策树其实原理上来说是比较简单的,估计很不好实现。。

决策树就是说对于训练集D和特征集合A,每一次从A中选取一个最优的特征用来划分集合D(选取最优的方法一般是通过信息增益或者信息增益比),划分到D1,D2,D3...

Dk之后,再次对于这些子集合进行特征选取,只不过这次是从A-Ag中选取,因为Ag已经在上次用过了。但是还是有几个地方需要注意的:

①特征集用完了

特征集合用完了,但是却还没有进行完全的划分,那么这个时候就选择直接统计当前集合Di所有的样本,看看其中最多的点属于哪一类,就把这个Di变成叶节点,并且

标注为该标签。

②Di全部属于一类,那么就不用再挑选特征了,直接画标签就好了

③对于子集合Di,里面剩下的所有特征{A},对于这个集合的信息增益都很少,小于某个阈值,那么就把这一坨集合归成叶节点,标注的方法同①,找样本点所在最多的分类

二.信息增益计算

说到决策树,看看信息增益,







这三个公式可能看起来挺复杂,但是相对于其他的公式来说简单太多了。。

第一个是信息增益,第二个是原来什么都不知道的条件下D的熵,H(D|A)就是条件熵。

这里需要注意的是不要弄混H(D|A)里面的,是一开始就根据A的取值来分类,然后里面的Di再根据D原先的分类1-K,来进行处理,一开始很容易搞混。

比如说吧



这个样例来说,在一开始选取根节点的时候就判断到底哪个信息增益最大,那么在判断的时候就要做到求H(D|A)

比如说对于是否有自己的房子,求H(D|A),也就是求当选取是否有房子作为分类特征的熵,对于这个特征,只有两种情况,有无,所以

H(D|A)=P(A=有房子)*H(D|A=有房子)+P(A=没有房子)*H(D|A=有房子)

这里就是先根据特征进行分类!!!!然后在求解H(D|A=有房子),H(D|A=没有房子)里面的时候

比如对于H(D|A=有房子),这个来说,数据集合就是那些有房子的人,也就是一共6个人,进行决策是否贷款,这时候再划分成

H(D|A=有房子)=-1*(P(贷款)*Log(P(贷款))+P(不贷款)*Log(P(不贷款)))   这里的数据集只有6个人

                                =-1*((6/6)*log(6/6)+(0/6)*log(0/6))=0;

再对于H(D|A=没有房子),一共9个人,决策是否贷款,划分

H(D|A=没有房子)=-1*(P(贷款)*log(P(贷款) +P(不贷款)*log(P(不贷款))))

                              =-1*((3/9)*log(3/9)+(6/9)*log(6/9));

就这样子算

那么,对于有无房子这个特征的条件熵为H(D|A)=p(有房子)*H(D|A=有房子)+p(没有房子)*H(D|A=没有房子)

则g(D,A)=H(D)-H(D|A)=0.420

以上所有的计算要注意的是数据集合的切换!!!比如说之前的6个人,9个人的切换

H(D|A=有房子),相当于就是说在已经有房子的6个人里面,对于这6个人来说,每个人有可能能拿到贷款也有可能拿不到,这样子的不确定性的总和就是这个熵的意义 !!!!

三.剪枝

剪枝的判断公式为



 Ht(T)表示是这棵树的误差值总计,α|T|则是用来限制这棵树的复杂度的,一开始想不明白为什么Ht(T)可以表示误差,后面才明白,原来t作为叶节点,里面有着Nt个样本点,Ntk个属于k类的节点,但是由于这个是叶节点,实际上已经被我们归类到某一个类里面去了,但是实际上还是属于很多的类,所以这个熵用来表示误差!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: