本文介绍: 一、原理典型的决策树分类树与回归如何训练样本建立决策树分裂规则 不纯度各种不纯度指标定义对于数值特征和分类型特征分别详述确定分裂阈值和分裂特征过程对于分类树和回归如何确定叶子节点的值对于样本特征向量属性缺失情况如何处理对于属性缺失情况,使用替代分裂规则,如何确定替代分裂特征和替代分裂阈值决策树剪枝算法代价-复杂度剪枝算法决策树输出特征向量的重要性二、示例代码# 导入必要的库impo

69bef402f3d0b60f085b798c17fb0447.png

一、原理

典型的决策树

dde79d6d6fe66fcb3b70af7e2bfa23ca.png

分类树与回归

2ff7437e9d9ede33cd1c0febeb735004.png

如何用训练样本建立决策树

6d1a16d5605c5b72f894bfd6cbbb2417.png

分裂规则  不纯度

a7b68aba66cb1c53f84e1ec838b67380.png

各种不纯度指标定义

334359445c9240b4760568a804aaf719.png

对于数值特征和分类型特征分别详述确定分裂阈值和分裂特征的过程

4cc56d03a899149af14aef4342d270d1.png

对于分类树和回归树如何确定叶子节点的值

835e4984ea1ad2eae28100bb848866c3.png

对于样本特征向量属性缺失情况如何处理

ca1e480d7fd762e6ed1547548c4abbb0.png

对于属性缺失情况,使用替代分裂规则,如何确定替代分裂特征和替代分裂阈值

05054f52bbc55a77d26b2401d16c8c8a.png

决策树的剪枝算法

bc29fe3c1398a7e2851c16df28ce854e.png

代价-复杂度剪枝算法

e77b5b24748a68fd87b2e5a72363e14e.png

决策树输出特征向量的重要性

b63f5435f3180ebdd103300803732efc.png

二、示例代码

6610aaa8464a86e1490efe68d29c6e4f.png

# 导入必要的库
import numpy as np  # 用于处理数值计算
import matplotlib.pyplot as plt  # 用于绘图
from sklearn import datasets  # 用于加载数据集
from sklearn import tree  # 用于构建决策树
#import matplotlib  # 用于设置绘图风格    import matplotlib
#%matplotlib inline  # 在 Jupyter Notebook 中直接显示图表




# 定义函数生成所有测试样本def make_meshgrid(x, y, h=.02):
    # 计算x轴和y轴的范围
    x_min, x_max = x.min() - 1, x.max() + 1
    y_min, y_max = y.min() - 1, y.max() + 1


    # 生成网格数据
    xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                         np.arange(y_min, y_max, h))
    # 返回网格数据
    return xx, yy


# 定义函数:对测试样本进行预测,并显示
def plot_test_results(ax, clf, xx, yy, **params):
    # 对网格数据进行预测
    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])


    # 将预测结果转换二维数组
    Z = Z.reshape(xx.shape)


    # 使用指定参数绘制预测结果
    ax.contourf(xx, yy, Z, **params)


# 载入iris数据iris = datasets.load_iris()


# 只使用前面两个特征
X = iris.data[:, :2]


# 样本标签值
y = iris.target


# 创建训练决策树
clf = tree.DecisionTreeClassifier()
clf.fit(X, y)


# 设置标题
title = ('DecisionTreeClassifier')


# 创建图形并调整子图间距
fig, ax = plt.subplots(figsize=(5, 5))
plt.subplots_adjust(wspace=0.4, hspace=0.4)


# 获取特征1和特征2的值
X0, X1 = X[:, 0], X[:, 1]


# 生成所有测试样本点
xx, yy = make_meshgrid(X0, X1)


# 显示测试样本的分类结果
plot_test_results(ax, clf, xx, yy, cmap=plt.cm.coolwarm, alpha=0.8)


# 显示训练样本
""" X0 和 X1:这些是表示训练数据点 x 和 y 坐标数组c=y:此参数根据 y 数组中的相应标签指定每个数据点的颜色cmap=plt.cm.coolwarm 参数设置用于将标签映射颜色颜色映射。
s=20:此参数指定每个数据点的大小单位平方像素edgecolors='k':此参数指定每个数据边缘颜色。在本例中,颜色设置为黑色 ('k')。"""
ax.scatter(X0, X1, c=y, cmap=plt.cm.coolwarm, s=20, edgecolors='k')


# 设置x轴和y轴的范围
ax.set_xlim(xx.min(), xx.max())
ax.set_ylim(yy.min(), yy.max())


# 设置x轴和y轴的标签
ax.set_xlabel('x1')
ax.set_ylabel('x2')


# 隐藏x轴和y轴的刻度
ax.set_xticks(())
ax.set_yticks(())


# 设置标题
ax.set_title(title)


# 显示图形
plt.show()

0455f33eb9013ce01c04cdc063f661b5.png

三、决策树的应用场景

2f7e31a616e143533e198edea86b9f15.png

参考网址

https://zhuanlan.zhihu.com/p/30296061 谢小娇包教包会决策树之决策树剪枝 – 知乎 (zhihu.com)

https://blog.csdn.net/moxibingdao/article/details/118617855 关于决策树,你一定要知道知识点!-CSDN博客

https://zhuanlan.zhihu.com/p/93936294 模型算法基础——决策树剪枝算法(三) – 知乎 (zhihu.com)

https://scikit-learn.org/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier sklearn.tree.DecisionTreeClassifier — scikit-learn 1.3.2 documentation 

https://sklearn.apachecn.org/ 【布客】sklearn 中文翻译 (apachecn.org)

The End

原文地址:https://blog.csdn.net/cxyhjl/article/details/134636256

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_25376.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注