圣诞节总结一下决策树的知识点 > > > > > >
决策树有两个问题:
1)每个节点在哪个维度做划分?
2)某个维度在哪个值上做划分?
熵在信息论中代表,随机变量不确定度的度量。
熵越大,数据的不确定性越高;
熵越小,数据的不确定性越低。
熵计算公式:
H = − ∑ i = 1 k p i l o g ( p i ) 1 ) 对 于 一 个 节 点 首 先 判 断 包 含 的 种 类 及 各 自 的 数 量 ( c o u t e r ) ; 2 ) 第 一 层 循 环 实 现 维 度 遍 历 ; 3 ) 第 二 层 循 环 实 现 在 当 前 维 度 上 值 遍 历 ; 4 ) 计 算 熵 , 同 时 计 算 成 本 函 数 。 H=-\sum^{k} _{i=1}p_ilog(p_i) \\ 1)对于一个节点首先判断包含的种类及各自的数量(couter); \\ 2)第一层循环实现维度遍历; \\ 3)第二层循环实现在当前维度上值遍历; \\ 4)计算熵,同时计算成本函数。 H=−i=1∑kpilog(pi)1)对于一个节点首先判断包含的种类及各自的数量(couter);2)第一层循环实现维度遍历;3)第二层循环实现在当前维度上值遍历;4)计算熵,同时计算成本函数。
对于某个事件而言,它有k个可能值, p k p_k pk表示第k个可能值的发生概率。
故,信息熵反映的是某个事件所有可能值的熵和。
如上计算的是单个事件在不同取值下的熵,如果需要基于其他事件计算某个事件的熵,就称==条件熵==。
需要注意:条件熵 ≠ ≠ =条件概率,它是已知事件各取值下条件熵的期望,即:
条 件 熵 : H ( D ∣ A ) = ∑ i , k P ( A i ) H ( D k ∣ A i ) = − ∑ i = 1 n P ( A i ) ∑ k = 1 K P ( D k ∣ A i ) l o g 2 P ( D k ∣ A i ) 条件熵:H(D|A)=\sum_{i,k}P(A_i)H(D_k|A_i)\\ =-\sum_{i=1}^{n}P(A_i)\sum_{k=1}^{K}P(D_k|A_i)log_2P(D_k|A_i) 条件熵:H(D∣A)=i,k∑P(Ai)H(Dk∣Ai)=−i=1∑nP(Ai)k=1∑KP(Dk∣Ai)log2P(Dk∣Ai)
条件熵其实就是基于某一特征值(A)将样本数据集分类,比如选择特征值为年龄:青年,老年。然后分别计算青年中购买人数的信息熵,和老年中购买人数的信息熵。上面公式的第一个 P ( A i ) P(A_i) P(Ai)是年龄取各种值得频率,即权重。总而言之,就是年龄取各种值下购买行为的条件熵。
若自变量为连续的数值型,同样可以计算信息熵,只不过分割点的选择问题?
操作方式如下:(假设数值型变量x含有n个观测)
1)首先对样本进行升序或降序操作;
2)计算相邻两个数值之间的均值 x ˉ \bar x xˉ,从而可以得到n-1个值;(需要注意:万一相邻两个数值是一样大,则均值不变,作为分割点会出错。所以需要在求均值之前加上一个预判。)
3)计算信息熵。
信息熵是下降的过程,每一步下降的量就成为信息增益,计算公式:
G a i n A ( D ) = H ( D ) − H ( D ∣ A ) Gain_A(D)=H(D)-H(D|A) GainA(D)=H(D)−H(D∣A)
由上述公式可知,对于已知的事件A来说,事件D的信息增益就是D的信息熵与A事件下D的条件熵之差,事件A对事件D的影响越大,条件熵 H ( D ∣ A ) H(D|A) H(D∣A)就会越小(在事件A的影响下,事件D被划分的越纯净),体现在信息增益上就是差值越大,进而说明事件D的信息熵下降的越多。所以,在维度选择上,选择各自变量下因变量信息增益最大的。
在信息增益的基础上,进行相应的惩罚。即,
G a i n _ R a t i o n A ( D ) = G a i n A ( D ) H ( A ) 其 中 , H ( A ) 为 事 件 A 的 信 息 熵 。 事 件 A 的 取 值 越 多 , G a i n A ( D ) 可 能 越 大 , 但 同 时 H ( A ) 也 会 越 大 , 这 样 就 以 商 的 形 式 实 现 了 惩 罚 。 Gain\_Ration_A(D)=\frac {Gain_A(D)}{H(A)} \\其中,H(A)为事件A的信息熵。 \\事件A的取值越多,Gain_A(D)可能越大,\\但同时H(A)也会越大,这样就以商的形式实现了惩罚。 Gain_RationA(D)=H(A)GainA(D)其中,H(A)为事件A的信息熵。事件A的取值越多,GainA(D)可能越大,但同时H(A)也会越大,这样就以商的形式实现了惩罚。
计算公式:
G i n i = 1 − ∑ k = 1 K p k 2 p k 表 示 某 事 件 第 k 个 可 能 发 生 的 概 率 。 Gini=1-\sum_{k=1}^{K}p_k^2 \\p_k表示某事件第k个可能发生的概率。 Gini=1−k=1∑Kpk2pk表示某事件第k个可能发生的概率。
记录一下,以便后面忘记:
当时对于信息熵和信息增益理解混淆,主要是由于离散型和连续型的不清晰。
首先,我们将数据分为自变量和因变量,然后变量又分为离散型和连续型。
分以下三种情况:
1)离散型(连续型)自变量,离散型因变量
这种情况下,节点在选择维度时可以使用信息熵或信息增益,选择出变化最大的维度。
离散型自变量会使该节点产生多个分支,每个分支对应一个离散值。如:自变量是学历,那么产生的分支就有三个——本科,硕士,博士。其中这种情况下,仅仅需要比较维度。
但对于连续型变量,产生的分支就只有两个。为什么?
补充:
前面我们提到的信息熵和信息增益的计算公式,可以直接用于计算离散型变量,因为我们可以使用经验概率替换。但是对于连续型变量我们需要在这之前做一些处理,如下:
1)假设数值型(连续型)变量x含有n个观测,首先对其做升序或降序操作;
2)计算相邻两个数值之间的均值 x ˉ \bar x xˉ,从而可以得到n-1个均值;
3)以均值 x ˉ \bar x xˉ作为判断值,将数据集划分为两部分,一部分小于均值,另一部分大于等于均值;
4)计算左右两部分各自的信息熵,即可。
现在明白为什么只有两个分支了吧!
2)离散型(连续型)自变量,连续型因变量
前面提到的信息熵和信息增益都只能针对离散型因变量进行分类,要预测连续型因变量,需要使用新的计算方法——基尼系数。
还有一点:
如果使用信息熵或基尼系数计算时,还需要配合成本函数才能确定哪个维度更合适。
但是采用信息增益,可以直接比较信息增益的大小,判断选择哪个维度进行划分。
奥卡姆剃刀——be simple;
ID3算法(迭代二叉树3代):越是小型的决策树越优于大的决策树。这是一个启发式算法。
ID3算法以信息增益度量维度选择,选择分裂后信息增益最大的维度进行分裂。该算法采用自顶向下的贪婪搜索遍历可能的决策空间。
ID3算法的改进,改进如下:
1)用信息增益率来选择属性。ID3选择属性用的是子树的信息增益,这里可以用很多方法来定义信息,ID3使用的是熵(entropy,熵是一种不纯度度量准则),也就是熵的变化值,而C4.5用的是信息增益率。对,区别就在于一个是信息增益,一个是信息增益率。
2)在树构造过程中进行剪枝,在构造决策树的时候,那些挂着几个元素的节点,不考虑最好,不然容易导致overfitting。
3)对非离散数据也能处理。
4)能够对不完整数据进行处理。
为什么要使用信息增益率?
ID3算法中使用信息增益存在一个明显的缺点:信息增益会偏向取值较多的字段。举个例子:
某数据集共10个观测,其中某个维度(属性)有10种类别,即有10种取值,这种情况下去计算信息增益,会发现该维度的信息增益最大。但是这样一个维度作为节点划分标准会产生10个分支,显然是不合理的,因为没有意义,该变量不具有普适性。
为什么信息增益率可以避免上述情况?
信息增益率以商的形式对信息增益进行了惩罚,具体看前面的计算公式。
sklearn使用分类与回归树(CART)算法训练决策树。
CART分类成本函数:
J ( k , t k ) = m l e f t m G l e f t + m r i g h t m G r i g h t 其 中 , G — 衡 量 左 右 子 集 的 不 纯 度 ; m — 是 左 右 子 集 的 实 例 数 量 。 J(k,t_k)=\frac {m_{left}}{m}G_{left}+\frac {m_{right}}{m}G_{right} \\其中,G—衡量左右子集的不纯度;\\m—是左右子集的实例数量。 J(k,tk)=mmleftGleft+mmrightGright其中,G—衡量左右子集的不纯度;m—是左右子集的实例数量。