决策树
知识点:是一个树型的结构,根节点、决策点、叶子节点
阶段
首先了解熵:物体内部的混乱程度
:两个事件A、B发生的概率为PA、PB,HA、HB代表A、B事件发生的不确定性
,怎么去解释——>PA越大,HA越小,PA越小,HA越大
①、举例:两个集合A、B,A里面各类都有[1、2、3、4、5、6、7、8、9、10],B里面基本都是1[1、1、1、1、2、1、1、1、1、1],那很明显B的纯度高,A的纯度低,也就是A的熵值高,B的熵值低
那利用数学的思想,其实熵值的计算是有这样一个公式
如何理解这个公式?根据上面的例子,明显集合A各类
的概率P都是0.1,套上公式为(-(0.1*ln(0.1))*(0.1*ln(0.1))…),对于集合B来说(-(0.9*ln(0.9))*(0.1*ln(0.1))),那很明显有个负号,所以A的熵值大
还有一个名词叫做
基尼系数
,也是同样的道理,同样拿上面集合举例,A的基尼系数(1-(0.1*0.1+0.1*0.1+…))明显大于B的基尼系数(1-(0.19*0.9+0.1*0.1))
由此引入决策树的基本想法——>构造树的基本想法是随着树深度的增加,节点的熵迅速地降低,下降越快越好,也就是树越矮越好
②、举例:14个样本,天气的4个指标导致最后有没有打球(play)
play作为label(标签值,也就是最后分类的结果值),目前主要的就是思考哪一个指标作为树的根节点,给出客观条件(没有任何天气信息时,一天打球的概率为9/14,不打为5/14),客观条件下熵值用上面计算公式:(-(9/14*ln(9/14))*(5/14*ln(5/14)))=0.940(log底数不太影响,一般用log2)
所以后面计算计算每个指标的熵,首先对于outlook:
outlook | Yes | No | 熵值 |
---|---|---|---|
sunny | 2/5 | 3/5 | 0.971 |
overcast | 1 | 0 | 0 |
rainy | 3/5 | 2/5 | 0.971 |
其次就是三种的概率sunny(5/14)、overcast(4/14)、rainy(5/14)
总的熵值等于:5/14 * 0.971 + 4/14 * 0 + 5/14 * 0.971 = 0.693
最后对比发现原来熵值为0.940,现在是0.693,那么得出初步结论:熵值下降,混乱效果下降,纯度上升,分类效果强,那么引入一个新的概念:信息增溢
,就是原始熵值-现在的熵值=0.247,那我们当然希望分类效果越强越好,也就是熵值下降越大越好,那就是信息增溢值越大越好,那就得计算其他指标的信息增溢值,这就是选出根节点的方法
算出其他三个指标的信息增溢值:temperature=0.029、humidity=0.152、windy=0.048,比较outlook,发现还是outlook值最大,因此选择outlook作为根节点
那问题来了?这样的算法没有问题嘛?
我们设想一种情况,如何指标列种有一列其实和最后结果毫无关系,比如就是一个id,那每一行数据唯一id,这样去算id指标的熵值是不是为0,那信息增溢值是不是最大?这样肯定不是我们想要的,所以引入新的名词——>信息增溢比
:算出指标的信息增溢后,除以自身的信息增溢(拿刚才id举例(-(1/14*ln(1/14))*(1/14*ln(1/14))…),这个值一定很大),最后的结果一定很小
那问题来了 ?我们如何评价这棵树建的好不好呢?引入评价函数:
上述公式的Ht是熵值或者基尼系数值,Nt值是指这个叶子节点有几个样本,为什么要用这个函数,可以这样理解,我们想找出好的分类效果,那就得保证每次每类后纯度要高,就是熵值得小,公式内熵值越小不就是最后结果值越小
拓展
连续值切分点怎么切分?
排序后:60 70 75 85 90 95 100 120 125 220,进行二分,比如在75和85之前切,计算左右两个的熵值
回归到本来的问题,不希望决策树的高度太高,其实也是因为如果细分太多,也会出现问题(过拟合的问题),这就涉及到两个知识点,并且引入全新的评价函数
预剪枝:在构建决策树的过程时,提前停止
后剪枝:决策树构建好后,然后才开始裁剪
上述公式的α是人为自定义的,Tleaf是叶子节点个数,Ct是之前的评价函数,最终的结果就是全新的评价函数,也就是越低越好
随机森林
引入概念,有放回的采样;随机森林相当于构造多棵决策树,每棵树都能单独出结果,最后再综合所有的结果,随机是什么意思?
1、样本(数据)随机:指的是每次以某个比例去抽取数据并且是有放回的,并不是抽全部数据,避免异常值影响
2、特征(指标)随机:比如之前的天气特征,随机选取其中两个特征,这种也是随机,这没有不放回的说法