决策树(Decision Tree)
博客地址: https://xiaoxiablogs.top
决策树
决策树是一种常见的机器学习算法.
所谓决策树,其实就是通过某种方法选择特征的筛选顺序,然后对每一个特征进行分分支,也就相当于将每个特征都做成if-else
语句.
简单的说,决策树就是多个if-else
组合在一起,只是哪一个特征先进行if-else
由我们的判定方法决定,而常见的判定方法有: 信息增益, 增益率, 基尼指数
在我们使用代码实现决策树的时候,其实就是一个递归过程.下面请看西瓜书的决策树伪代码:
输入: 训练集 \(D={(x_1, y_1), (x_2, y_2),...,(x_m, y_m)}\)
属性集 \(A={a_1, a_2,...,a_m}\)
过程: 函数TreeGenerate(D,A)
生成结点node;
if \(D\)中样本全属于同一类别别\(C\) then
将node标记为\(C\)类叶结点; then
end if
if \(A\neq\varnothing\) OR \(D\)中样本数在\(A\)上取值相同 then
从\(A\)中选择最优划分属性\(a_*\);
for \(a_*\)的每一个值\(a_*^v\) do
为node生成一个分支;令\(D\)中样本最多的类;return
end if
从\(A\)中选择最优划分属性\(a_*\);
for \(a_*\)的每一个值\(a_*\) do
为node生成一个分支;令\(D_v\)表示\(D\)在\(a_*\)上取值为\(a_*^v\)的样本子集;
if \(D_v\)为空 then
将分支结点标记为叶结点,其类别标记为\(D\)中样本最多的类;return
else
以TreeGenerate(\(D_v\),\(A\)\{\(a_*\)})为分支结点
end if
end for
信息熵
信息熵(information entropy)是度量样本集合纯度最常用的一种指标.
假设当前样本集\(D\)中第\(k\)类样本所占比例为\(p_k(k=1,2,3,...,n)\),则D的信息熵为:
\(Ent(D)\)的值越小,则\(D\)的纯度越高
ID3
决策树的ID3算法就是以信息增益为判定方法的.
信息增益就是属性\(a\)对样本集\(D\)进行划分所获得的:
一般而言,信息增益越大,则意味着使用属性\(a\)来进行划分所获得的纯度提升越大.
在进行划分时,我们就需要选择信息增益最大的特征来进行处理.
C4.5
C4.5与ID3的区别就在与其使用的是增益率(Ggain ratio)
由于信息增益准则对可取值树木较多的属性有所偏好,所以我们需要引入增益率:
\(IV(a)\)称为属性\(a\)的固有值,属性\(a\)的可能取值数目越多,则\(IV(a)\)的值通常越大,所以可以解决我们上述问题.
CRAT
CART所使用的就不再是信息熵,而是使用基尼指数来进行划分.
由于信息熵的计算有大量的耗时的熵模型,因此我们引入了悉尼指数代替熵模型
数据集\(D\)的悉尼值为:
直观的说,\(Gini(D)\)反映了从数据集\(D\)中随机抽取两个样本,其类别标记不一致的概率.因此,\(Gini(D)\)越小,则数据集\(D\)的纯度越高.
属性\(a\)的基尼指数为:
我们需要选择那个使划分后基尼系数最小的属性,即\(a_*=\arg \min_{a\in A} Gini_index(D,a)\)