喜欢的话别忘了点赞、收藏加关注哦(关注即可查看全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)

本文紧承 3.1. 决策树理论(基础) 和 3.2. 决策树理论(进阶),没看过的建议先看理论分析。
在这里插入图片描述

3.5.1. Iris数据集

这一章所讲的技术在实战时大部分都使用Iris数据集。Iris鸢尾花数据集是一个非常经典的数据集,在统计学和机器学习领域都经常被用作示例。

下面所示的这个花叫做鸢尾花:
请添加图片描述

  • Petal指的是花萼
  • Sepal指的是花瓣

这个数据集总共会有三种共150条记录,每类各50个数据。每条各50个数据,每条记录都有4项特征:

  • 花萼长度(Sepal Length)
  • 花萼宽度(Sepal Width)
  • 花瓣长度(Petal Length)
  • 花瓣宽度(Petal Width)

我们会通过花萼和花瓣的这4个特征来对花进行分类:

  • iris-setosa(在数据集中的标签是0)
  • iris-versicolour(在数据集中的标签是1)
  • iris-virginica(在数据集中的标签是2)

以下是Iris数据集里的部分数据:

花萼长度 花萼宽度 花瓣长度 花瓣宽度 属种
5.1 3.5 1.4 0.2 setosa
4.9 3.0 1.4 0.2 setosa
4.7 3.2 1.3 0.2 setosa
4.6 3.1 1.5 0.2 setosa
5.0 3.6 1.4 0.2 setosa
5.4 3.9 1.7 0.4 setosa
4.6 3.4 1.4 0.3 setosa
5.0 3.4 1.5 0.2 setosa

3.5.2. 实战前的准备工作

接下来,请你确保你的Python环境中有pandasmatplotlibscikit-learnnumpy这几个包,如果没有,请在终端输入指令以下载和安装:

pip install pandas matplotlib scikit-learn numpy

Iris数据集在scikit-learn中内置有,不需要额外安装。

3.5.3. 读取数据及赋值操作

我们可以使用sklearn.datasetsload_iris来加载,顺便把xy赋值:

# 加载数据集  
from sklearn.datasets import load_iris  
iris = load_iris()  
x, y = iris.data, iris.target

3.5.4. 建立决策树

拆分训练数据

接下来我们需要对训练数据进行拆分,一部分用作训练,一部分用作测试:

# 划分测试集和训练集  
from sklearn.model_selection import train_test_split  
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2)
  • train_test_split函数可以让我们轻易地拆分数据
  • test_size=0.2告诉程序80%数据用于训练,20%用于测试

倒入模型

首先我们要建立决策树模型,并使用训练集进行训练:

# 训练决策树  
from sklearn import tree  
clf = tree.DecisionTreeClassifier(criterion='entropy', min_samples_leaf=5)  
clf.fit(x_train, y_train)
  • criterion的不同值让我们可以选择如何选择顶点节点,这里我填的是'entropy',对应ID3算法(详见 3.2. 决策树理论(进阶))
  • min_samples_leaf让我们得以决定叶子节点所需的最小样本数,如果某分裂所生成的子节点中的样本数少于指定的min_samples_leaf值,那么这次分裂将不会发生。
    选择一个合适的值非常重要,因为如果值太小会导致过拟合(不具有普适性),值太大会导致划分不全。

可视化决策树

接下来我们来可视化决策树:

# 可视化决策树  
import matplotlib.pyplot as plt  
f_names = ['sepal length', 'sepal width', 'petal length', 'petal width']  
c_names = ['setosa', 'versicolor', 'virginica']  
tree.plot_tree(clf, filled=True, feature_names=f_names, class_names=c_names)  
plt.show()

filled=True

  • 指定决策树节点是否填充颜色
  • 如果设置为 True,每个节点的填充颜色将反映数据的分类比例或类别
  • 颜色深浅可以帮助直观地表示决策树中的输出类别或信息增益

feature_names=f_names

  • 定义决策树中显示的特征名称。
  • 代码中设置的值为f_names = ['sepal length', 'sepal width', 'petal length', 'petal width'],对应于鸢尾花数据集特征的名称
  • 这些名称将显示在决策树节点中,帮助理解特征在分类决策中的作用

class_names=c_names

  • 定义决策树中显示的类别名称
  • 代码中设置的值为 c_names = ['setosa', 'versicolor', 'virginica'],对应于鸢尾花数据集的三种类别名称
  • 这些名称将显示在叶子节点中,指示决策树预测的结果类别

plot_tree是基于matplotlib动态绘图的,显示图像得使用plt.show()

图片输出:
请添加图片描述

计算准确率

我们接下来会把测试集的数据传给训练好的决策树,把决策树的分类和标签做比较:

# 计算模型在测试集上的准确率  
accuracy = clf.score(x_test, y_test)  
print(f"测试集准确率: {accuracy:.2f}")

输出:

测试集准确率: 0.93
Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐