决策树
决策树-熵
P(X,Y)=P(X)*P(Y) X和Y两个事件相互独立 Log(XY)=Log(X)+Log(Y)
H(X),H(Y)当成它们发生的不确定性
P(几率越大)->H(X)值越小
P(几率越小)->H(X)值越大
- 这里的P(i)指的就是事情发生的概率,也就是说内部越混乱,每一件事情发送的概率越低,熵就越大
构造决策树的基本想法
是随着树深度的增加,节点的熵迅速地降低,熵减低地速度越快越好,这样才有望得到一个高度最矮的决策树
举个例子
从上面的数据可以看到,在没有给定任何天气信息时,根据历史数据,新的一天打球的概率为9/14,不打的概率为5/14,此时的熵为:-9/14log(2)9/14-5/14log(2)5/14=0.940
下面做一些划分
则当outlook=sunny时,entropy=0.971
outlook=overcast entropy=0
outlook=rainy entropy=0.971
所以当outlook取值为sunny,overcast,rainy的概率分别为5/14 4/14 5/14
所以当已变量为outlook,信息熵为:5/14×0.971+4/14×0+5/14×0.971=0.693
- 这样的话系统熵就从0.940下降到了0.693,信息增益gain(outlook)为
0.940-0.693=0.247
同理可以计算的gain(temperature)=0.029;gain(humidity)=0.152;gain(windy)=0.048
gain(outlook)最大(即outlook在第一步使系统的信息熵下降的最快),所以决策树的根节点 就选择了outlook - 存在的缺陷:如果以每一次的活动id决定来作为14个分支节点,算出来熵为0,则信息增益最大化,那么此时可以是不行的,因为id与是否决定活动没有任何关系,所以引入“信息增益率”
- C4.5:信息增益率=信息增益/自身的熵值。即如果自身的熵值非常大,也就是说不纯度越高,那么信息增益率也越低
- 评价函数:C(T)=∑(releaf) Nt·H(t)
所有叶子节点的累加和,H(t)是每一个叶子节点的熵值
(希望它越小越好,类似损失函数)
得到决策树之后,如何得到高度最矮的决策树
- 预剪枝:就是当指定树的深度是3的时候,当达到指定深度时就停止,提前停止,防止过拟合
- 后剪枝:当决策树构建好之后,通过评价函数来算剪裁效果,然后开始剪裁
随机森林
- Bootstraping:有放回的采样
- Bagging:有放回采集n个样本一共建立分类器
- 森林就是有多棵树可以用来测试数据并且得到结果,随机森林就是构建了多棵决策树,每棵决策树都能单独地执行自己的操作,最后的结果是所有的树统一在一起得出来的
- 随机性体现在
- 数据的选择上,构造每一棵树的时候并不是要把每一棵树都放进来,每次都要选取一定比例,并且是有放回的采样
- 特征的选择
过拟合和欠拟合
看到一个有意思的说法:不是狗的模型说是狗是欠拟合,是狗的模型说不是狗是过拟合
- 欠拟合:模型太简单无法抓住数据点与数据点之间的差异性
- 过拟合:真实值和预测值的差异太大