机器学习-使用决策树DecisionTreeClassifier()对鸢尾花数据集进行分类

本文介绍了决策树回归的基础概念,如信息增益、平均误差和Gini系数,并通过Python实现鸢尾花数据集分类。重点讲解了如何使用基尼系数划分节点,以及如何通过网格搜索优化max_depth、min_samples_split和min_samples_leaf参数。最终,展示了混淆矩阵和可视化结果,以评估模型性能并达到预期目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1决策树回归的工作基础

主要任务是首先介绍什么时决策树和信息增益,平均误差,Gini系数等一些基础概念,之后手动推演和上机实践实现决策树的分类与回归
代码:机器学习决策树算法对鸢尾花iris测试集百分百识别

1.2决策树分类的实验条件

使用了python作为主要工具。

1.3 设计思想

使用基尼系数作为划分标准,基尼系数越小,则不纯度越低,区分的越彻底。
假设一个数据集中有K个类别,第K个类别的概率为pk,则基尼系数表达式为:
在这里插入图片描述

对于个给定的样本D,假设有K个类别,第k个类别的数量为CkCk,则样本D的基尼系数表达式为:
在这里插入图片描述

1.4运行结果及分析

首先,通过键盘交互式按键“T”,开始训练;训练集和测试集按4:1进行划分,前四份用于训练,后一份用于测试,并用混淆矩阵来评判分类后的结果。
通过掉用封装好的决策树API接口,默认的参数虽然是最优的担并不适用于任何数据集,不用的需求也相应着模型的参数不同。通过网格搜索交叉验证的方式来寻找模型的最优参数,以下为对max_depth;min_samples_split ;min_samples_leaf 这三个参数进行调优。
注:①max_depth(树的最大深度):默认为None,此时决策树在建立子树的时候不会限制子树的深度。也可以设置具体的整数,一般来说,数据少或者特征少的时候可以不管这个值。如果模型样本量多,特征也多的情况下,推荐限制这个最大深度,具体的取值取决于数据的分布
在这里插入图片描述

②min_samples_split(分割内部节点所需的最小样本数):意思就是只要在某个结点里有k个以上的样本,这个节点才需要继续划分,这个参数的默认值为2,也就是说只要有2个以上的样本被划分在一个节点,如果这两个样本还可以细分,这个节点就会继续细分

在这里插入图片描述
③min_samples_leaf(叶子节点上的最小样本数):当你划分给某个叶子节点的样本少于设定的个数时,这个叶子节点会被剪枝,这样可以去除一些明显异常的噪声数据。默认为1,也就是说只有有两个样本类别不一样,就会继续划分。
在这里插入图片描述

交叉验证后得出的是模型最后的得分结果,我们选择最大深度为3,此刻得分最高。同时在最优深度的条件下进行对分割内部节点数进行调优。

混淆矩阵是评判分类结果的好坏,通过下图可以看出0类和2类分类全部正确,1类有其中一个样本被误判为2类导使的分类错数;整个模型经过调参后效果达到预期目标。
在这里插入图片描述

决策树的可视化,选用Gini系数作为树分割的依据,通过可视化的结果也能看出深度为3时,分类结果最好。
在这里插入图片描述
识别结果
在这里插入图片描述

### 使用决策树鸢尾花数据集进行分类 为了实现基于决策树鸢尾花数据集分类,可以采用 `scikit-learn` 库中的 `DecisionTreeClassifier` 模型。以下是详细的说明以及代码示例。 #### 数据准备 鸢尾花数据集是一个经典的多类别分类问题,包含三个类别的花朵(Setosa、Versicolor 和 Virginica)。每个样本有四个特征:萼片长度 (sepal length)、萼片宽度 (sepal width)、花瓣长度 (petal length) 和花瓣宽度 (petal width)[^3]。 #### 实现过程 通过加载数据集、划分训练集和测试集、构建决策树模型并评估其性能来完成整个流程。 ```python from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score # 加载数据集 data = load_iris() X, y = data.data, data.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 初始化决策树分类器 clf = DecisionTreeClassifier(random_state=42) # 训练模型 clf.fit(X_train, y_train) # 预测 y_pred = clf.predict(X_test) # 评估准确性 accuracy = accuracy_score(y_test, y_pred) print(f"Accuracy of the model: {accuracy * 100:.2f}%") ``` 此代码片段展示了如何利用 `scikit-learn` 的内置函数快速建立一个基本的决策树分类器,并计算预测精度。 #### 提升模型复杂度的方法 如果希望进一步提升模型的表现力,可以通过调整参数或者引入集成方法来增强单一决策树的能力。例如,增加树的最大深度 (`max_depth`) 或者减少最小分割样本数 (`min_samples_split`) 可以让单棵树更加灵活;而随机森林(Random Forests)则是另一种有效的方式,它通过对多个独立生长的小规模决策树取平均值从而降低过拟合风险[^1]。 #### 结果解释 最终得到的结果应该能够很好地反映所选算法对于该特定任务的有效性。通常情况下,在这种简单且清晰的数据分布上,标准配置下的决策树就能达到较高的准确率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leon在努力啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值