【从零入门人工智能】决策树实战_数据集:iris_data.csv

本文通过实战案例,介绍如何利用Python的sklearn库构建决策树模型,并对模型进行可视化展示。通过调整min_samples_leaf参数,观察决策树结构的变化及其对模型准确性的影响。
部署运行你感兴趣的模型镜像

实验目标

  1. 基于iris_data.csv数据,建立决策树模型,评估模型表现
  2. 可视化决策树结构
  3. 修改min_samples_leaf参数,对比模型结果

数据集:百度云盘链接,提取码:fp8s

使用到的第三方库

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn import tree
from sklearn.metrics import accuracy_score

导入数据

# 导入数据
data = pd.read_csv("./dataset/iris_data.csv")
data.head()

数据预览

使用 sklearn 自带的数据集

本次实验使用的数据集已经在 sklean 中包含了,可以直接使用,使用方法如下

# 导入数据集,scikit-learn 中已经包含了当前数据集
from sklearn.datasets import load_iris
iris = load_iris()
# pd.DataFrame(iris.data).head()
print(iris)

数据预览

建立决策树模型

我们使用从本地导入数据的方式建立决策树模型,使用 sklearn 自带的数据集导入方式可以自行探索

# 建立决策树模型
dc_tree = tree.DecisionTreeClassifier(criterion='entropy', min_samples_leaf=5)
dc_tree.fit(x, y)

# 查看预测的准确性
accuracy = accuracy_score(y,dc_tree.predict(x))
print(f"模型预测的准确性为 >>> {accuracy}")

模型预测准确性
通过实验我们可以知道,决策树的预测准确性为:97.34%

参数解释:

  • min_samples_leaf:叶子节点所需最少样本数,默认为1。如果达不到这个阈值,则同一父节点的所有叶子节点均被剪枝,
  • criterion:选择使用什么算法作为结点分裂的依据。默认:gini。可选gini(基尼系数)或者entropy(信息增益)。

决策树模型 sklearn.tree.DecisionTreeClassifier 中还有很多默认参数,具体的可以参考官方文档

决策树可视化

# 可视化决策树
fig = plt.figure(figsize=(10,10))
tree.plot_tree(
	dc_tree, 
	feature_names=['Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width'], 
	class_names=['setosa', 'versicolor', 'virginica'], 
	filled=True
)

sklearn.tree.plot_tree 具体的参数解释,参考官方文档
决策树可视化1

修改建立决策树模型参数后再次可视化决策树

# 建立决策树模型
dc_tree = tree.DecisionTreeClassifier(criterion='entropy', min_samples_leaf=1)
dc_tree.fit(x, y)
# 可视化决策树
fig = plt.figure(figsize=(15,15))
tree.plot_tree(
		dc_tree, 
		feature_names=['Sepal.Length', 'Sepal.Width', 'Petal.Length', 'Petal.Width'],
		class_names=['setosa', 'versicolor', 'virginica'], 
		filled=True
)

决策树可视化2
我们将决策树模型建立时叶子结点所需的最小样本数量改为1之后,(即:min_samples_leaf=1),决策树的深度相较之前加深了 1 ,结点数量也增加了。

通过实验我们可以知道,修改 min_samples_leaf 参数可以使模型的更加 "匹配" 训练集合,但是 min_samples_leaf 设置的过小,可能会导致过拟合的情况,从而使得模型的预测准确性下降。

总结

  1. 本次实验通过建立决策树,实现对标签数据的有效分类;
  2. 通过修改叶子节点最少样本数对应参数 min_samples_leaf,可调控制树的分支深度;
  3. 决策树是一种比较简单的分类方法,具有容易理解、容易处理分类特征等优点,但是也存在容易出现过拟合的问题。
  4. 核心算法参考链接:sklearn.tree.DecisionTreeClassifier

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### Iris 数据集简介 Iris 数据集是一个经典的机器学习数据集,通常用于分类任务的研究和教学。该数据集由 Ronald Fisher 在 1936 年首次引入,包含了三种不同类型的鸢尾花(Setosa、Versicolor 和 Virginica),每种类型有 50 个样本,共计 150 条记录[^4]。 每一行代表一朵鸢尾花的测量值,共有四个特征: - 萼片长度 (Sepal Length) - 萼片宽度 (Sepal Width) - 宠片长度 (Petal Length) - 宠片宽度 (Petal Width) 目标变量是鸢尾花的具体种类标签。 --- ### 下载方法 可以从多个公开资源下载 `iris_dataset.csv` 文件: #### 方法一:通过 Scikit-Learn 加载 Scikit-Learn 提供了一个内置函数来加载 Iris 数据集,无需手动下载文件。以下是代码示例: ```python from sklearn.datasets import load_iris import pandas as pd # 使用 scikit-learn 的 load_iris 函数获取数据 iris_data = load_iris() df = pd.DataFrame(data=iris_data.data, columns=iris_data.feature_names) df['target'] = iris_data.target print(df.head()) ``` 如果需要保存为 CSV 文件以便后续使用,可以运行以下命令: ```python df.to_csv('iris_dataset.csv', index=False) ``` #### 方法二:从 UCI Machine Learning Repository 获取 可以直接访问 UCI Machine Learning Repository 中的数据集页面并下载原始文件: [https://archive.ics.uci.edu/ml/datasets/iris](https://archive.ics.uci.edu/ml/datasets/iris) 或者直接通过 URL 请求下载: ```python import pandas as pd url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data" column_names = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width', 'class'] data = pd.read_csv(url, header=None, names=column_names) data.to_csv('iris_dataset.csv', index=False) print(data.head()) ``` --- ### 数据集用途 Iris 数据集广泛应用于以下几个领域: 1. **监督学习中的分类问题** - 可以用来训练和支持向量机 (SVM)[^5]、决策树 (Decision Tree)[^6] 或 K 近邻算法 (KNN)[^7] 等模型。 2. **聚类分析** - 当不提供类别标签时,可以用作无监督学习的任务,比如 K-Means 聚类[^8]。 3. **降维技术展示** - 常被用作主成分分析 (PCA)[^9] 和线性判别分析 (LDA)[^10] 的演示案例。 4. **可视化工具测试** - 利用其低维度特性,适合绘制散点图矩阵或平行坐标图等图表。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值