【机器学习】决策树

一、背景及概念

  • 决策树是一种在机器学习和数据挖掘领域广泛应用的预测模型,它代表的是对象属性与对象值之间的一种映射关系。最早的决策树算法是由Hunt等人于1966年提出,称为Hunt算法,它成为了许多决策树算法的基础,包括ID3、C4.5和CART等。
  • 在20世纪70年代后期和80年代初期,机器学习研究者J.Ross Quinlan提出了ID3算法,之后又提出了C4.5,成为新的监督学习算法。1984年,几位统计学家提出了CART分类算法。ID3和CART算法几乎同时被提出,但都是采用类似的方法从训练样本中学习决策树。
  • 决策树具有直观易懂的特点,能较好地解释数据生成的机制和过程,因此在实际应用中具有广泛的应用价值。

二、原理

        决策树算法是一种有监督学习算法,利用分类的思想,根据数据的特征构建数学模型,从而达到数据的筛选,决策的目标。决策树(Decision Tree)又称为判定树,是数据挖掘技术中的一种重要的分类与回归方法,它是一种以树结构(包括二叉树和多叉树)形式来表达的预测分析模型

(如上图所示)决策树是一种树形结构,一般,一棵决策树包含一个根节点,若干个内部结点和若干个叶结点

叶结点对应于决策结果,其他每个结点对应于一个属性测试。每个结点包含的样本集合根据属性测试的结果划分到子结点中,根结点包含样本全集,从根结点到每个叶结点的路径对应了一个判定的测试序列。决策树学习的目的是产生一棵泛化能力强,即处理未见示例强的决策树。

使用决策树进行决策的过程就是从根节点开始,测试待分类项中相应的特征属性,并按照其值选择输出分支,直到到达叶子节点,将叶子节点存放的类别作为决策结果。

决策树是一种非参数的有监督学习方法,可以用于分类和回归任务。它具有直观易懂、易于理解和解释的优点,同时也能够处理大量的输入变量和复杂的交互作用。但是,决策树也存在着一些缺点,例如容易过拟合、对噪声敏感等。为了解决这些问题,可以采用集成学习方法,如随机森林、梯度提升决策树等。

三、构建步骤

  1. 选取最优划分特征:根据某种准则,从所有可用的特征中选择最优划分特征,将数据集划分成子集。
  2. 生成决策树:根据最优划分特征,生成决策树,即按照划分准则,将每个节点都划分成若干个子节点,直到无法继续划分为止。
  3. 剪枝:为了防止过拟合,需要对决策树进行剪枝,将一些不必要的分支剪去,以提高模型的泛化能力。

四、划分选择

        熵:物理意义是体系混乱程度的度量。

        信息熵:表示事物不确定性的度量标准,可以根据数学中的概率计算,出现的概率就大,出现的机会就多,不确定性就小(信息熵小)。

        (1)信息增益

  • 在进行决策树划分时,通过选择某个特征进行划分,能够使得数据集的不确定性减少的程度。信息增益越大,说明划分的效果越好,即通过该特征的划分能够使得数据集的不确定性更小
  • 在决策树中,信息增益的计算是基于信息熵和条件熵的概念。信息熵表示随机变量的不确定性,条件熵表示在给定某个条件下的不确定性。信息增益等于信息熵减去条件熵,表示在给定条件下的不确定性减少的程度。

假设训练数据集和特征,根据如下步骤计算信息增益:

        第一步:计算数据集D的经验熵:

        其中,|Ck|为第类样本的数目,|D|为数据集D的数目。

        第二步:计算特征A对数据集D的经验条件熵:H(D|A)

        第三步:计算信息增益:

一般而言,信息增益越大,则意味着使用属性来进行划分所获得的“纯度提升” 越大。因此,我们可使用信息增益来进行决策树的划分属性选择。ID3决策树学习算法就是以信息增益为准则来选择划分属性的。

        (2)信息增益率

特征A对于数据集D的信息增益比定义为:

{g_R}(D,A) = \frac{​{g(D,A)}}{​{​{H_A}(D)}}

        其中,{H_A}(D) = - \sum\limits_{i = 1}^n {\frac{​{|{D_i}|}}{​{|D|}}{​{\log }_2}\frac{​{|{D_i}|}}{​{|D|}}}称为数据集D关于A的取值熵。

增益率准则就可取值数目较少的属性有所偏好,因此,C4.5算法并不是直接选择增益率最大的候选划分属性,而是使用了一个启发式:先从候选划分属性中找出信息增益高于平均水平的属性,再从中选择增益率最高的。

        (3)基尼指数

分类问题中,假设有K个类,样本点k属于的概率Pk,则概率分布的基尼指数:

二分类问题:

对给定的样本集合D,基尼指数:

CART决策树使用“基尼指数”来选择划分属性。数据集的纯度可用基尼值来度量,越小,则数据集的纯度越高。CART生成的是二叉树,计算量相对来说不是很大,可以处理连续和离散变量,能够对缺失值进行处理。

五、剪枝处理

  • 决策树的剪枝处理是决策树学习算法解决过拟合问题的一种手段。在决策树的学习过程中,为了尽可能正确地分类训练样本,节点划分会不断重复,有时会造成决策树的分支过多,导致过拟合。因此,可以主动去掉一些分支以降低过拟合的风险。
  • 决策树的剪枝分为预剪枝和后剪枝。预剪枝基于“贪心”本质禁止这些分支的展开,给预剪枝决策树带来欠拟合的风险。后剪枝将验证集输入到决策树算法,计算出剪枝前的验证精度。然后,找到最底下的非叶子结点,(模拟)将其领先的分支去除,取其中数量最大的分类作为该节点的判别标记。然后计算剪枝后的验证精度。通过对比剪枝前后的验证精度,来确定是否需要进行剪枝。
  • 总的来说,后剪枝决策树通常比预剪枝决策树保留更多的分支,一般情形下,后剪枝决策树的欠拟合风险小,泛化能力往往优于预剪枝。但后剪枝决策树训练开销比预剪枝大得多。

示例代码:

from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
# 加载数据集
iris = load_iris()
X = iris.data
y = iris.target
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练决策树模型
clf = DecisionTreeClassifier(random_state=42)
clf.fit(X_train, y_train)
# 预测测试集
y_pred = clf.predict(X_test)
# 计算模型精度
accuracy = accuracy_score(y_test, y_pred)
print("未剪枝前精度:", accuracy)
# 剪枝处理
path = clf.cost_complexity_pruning_path(X_train, y_train)
ccp_alphas, impurities = path.ccp_alphas, path.impurities
clfs = []
for ccp_alpha in ccp_alphas:
    clf = DecisionTreeClassifier(random_state=0, ccp_alpha=ccp_alpha)
    clf.fit(X_train, y_train)
    clfs.append(clf)
print("剪枝后的决策树数量:", len(clfs))
# 预测测试集并计算精度
for clf in clfs:
    y_pred = clf.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)
    print("剪枝后精度:", accuracy)

六、决策树的优缺点

(一)优点:

  1. 易于理解和解释,树的结构可视化。
  2. 训练时需要的数据少,训练过程简单。
  3. 能够处理数值型数据和分类数据。
  4. 能够处理多路输出问题。
  5. 对缺失值不敏感。
  6. 可以处理不相关特征数据。
  7. 效率高,只需要一次构建,反复使用。

(二)缺点:

  1. 容易产生过拟合,需要使用剪枝等策略来避免过拟合。
  2. 对于连续性的字段比较难预测。
  3. 当类别太多时,错误可能就会增加的比较快。
  4. 在处理特征关联性比较强的数据时表现得不是太好。
  5. 对于各类别样本数量不一致的数据,在决策树当中,信息增益的结果偏向于那些具有更多数值的特征。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值