【Python机器学习】3.5. 决议树实战:基于Iris数据集

打印 上一主题 下一主题

主题 924|帖子 924|积分 2772

喜欢的话别忘了点赞、收藏加关注哦(关注即可检察全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)
本文紧承 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.13.51.40.2setosa4.93.01.40.2setosa4.73.21.30.2setosa4.63.11.50.2setosa5.03.61.40.2setosa5.43.91.70.4setosa4.63.41.40.3setosa5.03.41.50.2setosa 3.5.2. 实战前的预备工作

接下来,请你确保你的Python环境中有pandas、matplotlib、scikit-learn和numpy这几个包,假如没有,请在终端输入指令以下载和安装:
  1. pip install pandas matplotlib scikit-learn numpy
复制代码
Iris数据集在scikit-learn中内置有,不需要额外安装。
3.5.3. 读取数据及赋值操作

我们可以使用sklearn.datasets的load_iris来加载,趁便把x和y赋值:
  1. # 加载数据集  
  2. from sklearn.datasets import load_iris  
  3. iris = load_iris()  
  4. x, y = iris.data, iris.target
复制代码
3.5.4. 创建决议树

拆分训练数据

接下来我们需要对训练数据进行拆分,一部分用作训练,一部分用作测试:
  1. # 划分测试集和训练集  
  2. from sklearn.model_selection import train_test_split  
  3. 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%用于测试
倒入模型

首先我们要创建决议树模型,并使用训练集进行训练:
  1. # 训练决策树  
  2. from sklearn import tree  
  3. clf = tree.DecisionTreeClassifier(criterion='entropy', min_samples_leaf=5)  
  4. clf.fit(x_train, y_train)
复制代码


  • criterion的差异值让我们可以选择如何选择顶点节点,这里我填的是'entropy',对应ID3算法(详见 3.2. 决议树理论(进阶))
  • min_samples_leaf让我们得以决定叶子节点所需的最小样本数,假如某分裂所生成的子节点中的样本数少于指定的min_samples_leaf值,那么这次分裂将不会发生。
    选择一个合适的值非常重要,因为假如值太小会导致过拟合(不具有普适性),值太大会导致分别不全。
可视化决议树

接下来我们来可视化决议树:
  1. # 可视化决策树  
  2. import matplotlib.pyplot as plt  
  3. f_names = ['sepal length', 'sepal width', 'petal length', 'petal width']  
  4. c_names = ['setosa', 'versicolor', 'virginica']  
  5. tree.plot_tree(clf, filled=True, feature_names=f_names, class_names=c_names)  
  6. 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()
图片输出:

计算精确率

我们接下来会把测试集的数据传给训练好的决议树,把决议树的分类和标签做比较:
  1. # 计算模型在测试集上的准确率  
  2. accuracy = clf.score(x_test, y_test)  
  3. print(f"测试集准确率: {accuracy:.2f}")
复制代码
输出:
  1. 测试集准确率: 0.93
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

光之使者

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表