嚴華 发表于 2024-11-1 11:42:09

分类算法——决策树 详解

决策树的底层原理

        决策树是一种常用的分类和回归算法,其根本原理是通过一系列的简单决策,将数据集划分为多个子集,从而实现分类。决策树的核心思想是通过树形结构表现决策过程,节点代表特性,边代表决策,叶子节点代表类别。
        下面是一个决策树例子(用挑选好西瓜来举例,最终结果为判定是好瓜还是坏瓜):
https://i-blog.csdnimg.cn/direct/5a5a2184db484271958e28883db5240b.png
1. 决策树的根本结构



[*]根节点:表现整个数据集。
[*]内部节点:表现根据某一特性进行的决策。
[*]叶子节点:表现最终的分类结果或回归值。
决策树的构建

        决策树的构建过程通常采用递归的方式,核心步骤包括特性选择、数据划分和停止条件。
2. 特性选择

在每个节点上,需要选择一个特性来划分数据集,常用的特性选择标准包括:


[*] 信息增益:基于香农信息论,信息增益是划分前后信息的不确定性减少量。公式为:
https://latex.csdn.net/eq?IG%28D%2CA%29%3DH%28D%29-%5Csum_%7Bv%5Cin%20A%7D%5E%7B%7D%20%5Cfrac%7B%5Cleft%20%7C%20D_%7Bv%7D%20%5Cright%20%7C%7D%7B%5Cleft%20%7C%20D%20%5Cright%20%7C%7DH%28D_%7Bv%7D%29
其中,H(D) 为数据集 D 的熵,https://latex.csdn.net/eq?D_%7Bv%7D​ 为特性 A 取值为 v 的子集。
[*] 信息增益率:为相识决信息增益偏向于选择取值较多的特性的标题,信息增益率在信息增益的基础上进行归一化:
https://latex.csdn.net/eq?GainRatio%28D%2CA%29%3D%20%5Cfrac%7BIG%28D%2CA%29%7D%7BH%28A%29%7D
[*] 基尼指数:主要用于 CART(Classification and Regression Trees)算法,计算某个特性的基尼指数,公式为:

https://latex.csdn.net/eq?Gini%28D%29%3D1-%5Csum_%7Bi%3D1%7D%5E%7BC%7Dp_%7Bi%7D%5E%7B2%7D
其中,https://latex.csdn.net/eq?p_%7Bi%7D​ 为类 https://latex.csdn.net/eq?i 在数据集 D 中的比例。
3. 数据划分

        根据选择的特性,将数据集划分为多个子集。对于连续特性,通常会选取一个阈值,将数据集分为小于阈值和大于阈值两部分;对于分类特性,则根据每个取值进行划分。
4. 停止条件

决策树的构建过程需要设定停止条件,常见的条件包括:


[*]到达最大深度。
[*]节点样本数低于某一阈值。
[*]信息增益或基尼指数的减少低于某一阈值。
决策树的剪枝

为相识决过拟合标题,决策树通常会进行剪枝,分为预剪枝和后剪枝:


[*]预剪枝:在树的构建过程中,及时评估当前分裂的结果,决定是否继续分裂。
[*]后剪枝:先构建完整的树,再从叶子节点向上进行剪枝,去掉一些不必要的分支。
决策树的算法

决策树的构建算法主要有 ID3、C4.5、CART 等。


[*]ID3:使用信息增益作为特性选择的标准,适用于分类任务。
[*]C4.5:改进了 ID3,使用信息增益率作为标准,支持连续特性和缺失值。
[*]CART:使用基尼指数进行特性选择,支持分类和回归任务。
决策树的优缺点

长处:


[*]直观易懂:决策树模子易于理解和可视化。
[*]无需特性缩放:对特性的缩放和归一化不敏感。
[*]适用性广:可以处理分类和回归标题,且对数据类型没有强要求。
缺点:


[*]过拟合:决策树轻易在练习数据上过拟合,尤其是深度较大的树。
[*]不稳定性:对练习数据的微小变化敏感,可能导致树的结构有较大差异。
[*]偏向于某些特性:使用信息增益时,可能偏向于选择取值较多的特性。
决策树的实现

在 Python 中,使用 scikit-learn 库可以非常方便地实现决策树。以下是一个根本的实现示例:
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn import tree
import matplotlib.pyplot as plt

# 加载数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 构建决策树模型
clf = DecisionTreeClassifier(criterion='gini', max_depth=3)
clf.fit(X_train, y_train)

# 预测
y_pred = clf.predict(X_test)

# 可视化决策树
plt.figure(figsize=(12, 8))
tree.plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)
plt.show()
决策树的应用

决策树广泛应用于金融、医疗、市场分析等多个领域,如:


[*]信用评分:评估客户的信用风险。
[*]医学诊断:帮助医生进行疾病预测和诊断。
[*]客户分类:根据客户特性进行市场细分。
总结

        决策树是一种强盛的分类和回归模子,通过树形结构进行决策。其构建过程包括特性选择、数据划分、剪枝等步骤,易于理解和实现,但需注意过拟合和模子稳定性的标题。在实际应用中,可以根据详细场景选择合适的决策树算法和参数设置。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 分类算法——决策树 详解