【机器学习】决策树

【机器学习】决策树_第1张图片

一、原理

典型的决策树

【机器学习】决策树_第2张图片

分类树与回归树

【机器学习】决策树_第3张图片

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

【机器学习】决策树_第4张图片

分裂规则  不纯度

【机器学习】决策树_第5张图片

各种不纯度指标定义

【机器学习】决策树_第6张图片

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

【机器学习】决策树_第7张图片

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

【机器学习】决策树_第8张图片

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

【机器学习】决策树_第9张图片

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

【机器学习】决策树_第10张图片

决策树的剪枝算法

【机器学习】决策树_第11张图片

代价-复杂度剪枝算法

【机器学习】决策树_第12张图片

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

【机器学习】决策树_第13张图片

二、示例代码

【机器学习】决策树_第14张图片

# 导入必要的库
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()

【机器学习】决策树_第15张图片

三、决策树的应用场景

【机器学习】决策树_第16张图片

参考网址:

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

你可能感兴趣的:(机器学习,决策树,人工智能,算法,数据挖掘)