我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

鸢尾花数据集是机器学习的经典样本,而决策树模型也是经典的分类器算法。那么,两者的碰撞将会出现什么样的火花呢?本文主体还是由chatgpt生成,生成用时三秒。然后由苏南大叔整理文章,用时三小时。本文中将要使用机器学习的决策树模型来对类鸢尾花数据集进行预测。

苏南大叔:sklearn,如何利用决策树分类器模型预测类鸢尾花数据集? - 决策树分类器预测鸢尾花数据集
sklearn,如何利用决策树分类器模型预测类鸢尾花数据集?(图4-1)

大家好,这里是苏南大叔的“平行空间笔记本”博客,记录苏南大叔的代码经验文章。本文使用的是决策树模型对数据集进行分析。测试环境:win10python@3.11.0sklearn@1.2.2

决策树基本原理

决策树是一种基于树形结构进行分类和预测的算法,其基本思想是将所有数据都划分成一些小的、单一的区域,然后将不同区域内的数据分成不同类别或预测结果。以下是决策树算法的主要过程:

1、特征选择。在决策树算法中,通过特征选择来确定最佳的划分属性。通常采用信息增益、信息增益比或基尼指数等指标来衡量划分属性的好坏。

2、决策树生成。通过对特征选择结果的迭代,不断生成决策树的过程。通过递归地建立子树来构造决策树,直到所有的训练样本都被正确地分类或没有更多特征可供选择时停止。

3、决策树剪枝。由于决策树容易出现过拟合的问题,所以需要对生成的决策树进行剪枝。这个过程的目标是减少树的复杂性,同时保留树的泛化性能。(就是减少if的出现次数,但是又对主体结论影响不大)

苏南大叔:sklearn,如何利用决策树分类器模型预测类鸢尾花数据集? - 决策树剪枝
sklearn,如何利用决策树分类器模型预测类鸢尾花数据集?(图4-2)

决策树原理举例

假设要使用决策树算法来预测一个人是否会购买某种产品。根据已有的数据,我们可以将人的性别、年龄、收入、教育程度等特征作为划分条件来创建一棵决策树。例如,我们可以通过将性别作为第一个节点进行划分,然后根据年龄、收入、教育程度等特征进行进一步划分,一直到每个叶子节点都代表一种预测结果(购买或不购买)。

在这个例子中,我们将人的性别作为第一个节点进行划分。如果一个人是女性,则跳到A节点,判断其年龄是否大于等于40岁;如果是男性,则跳到B节点,判断其年龄是否大于等于30岁。如果年龄满足条件,则继续判断收入是否高于10万;否则,直接预测不购买。最终,根据叶子节点的预测结果,我们可以得出这个人是否会购买该产品的结论。

下面的图是一个是否接受一个工作offer的决策树算法示意,实际上就是无数个if语句的嵌套。

苏南大叔:sklearn,如何利用决策树分类器模型预测类鸢尾花数据集? - 决策树范例
sklearn,如何利用决策树分类器模型预测类鸢尾花数据集?(图4-3)

在实际应用中,决策树算法常常用于分类和预测任务,如信用评级、股票涨跌预测、酒店推荐等。

决策树预测范例

这里苏南大叔还是选用前几篇文章里面的鸢尾花数据集,数据集切分是80%作为训练集,20%作为测试集。随机种子启蒙值设置为8。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier

# data = load_iris()
# X = data["data"]
# y = data["target"]

import pandas as pd
data = pd.read_csv("iris.csv",skiprows=1,names=["a","b","c","d","label"])
X = data.iloc[:,:-1]
y = data.iloc[:,-1:]

# 创建决策树模型
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=8)
tree = DecisionTreeClassifier(random_state=0)
tree.fit(X_train, y_train)

# 预测测试集数据
tree.predict(X_test)
print("预测准确度:", tree.score(X_test, y_test))

苏南大叔:sklearn,如何利用决策树分类器模型预测类鸢尾花数据集? - 决策树算法代码
sklearn,如何利用决策树分类器模型预测类鸢尾花数据集?(图4-4)

所以,有关决策树部分的代码就是:

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=8)
tree = DecisionTreeClassifier(random_state=0)
tree.fit(X_train, y_train)
tree.predict(X_test)
print("预测准确度:", tree.score(X_test, y_test))

这个tree.score(),就是用于验证准确度的。

参考文献

本文的核心内容是,在python里面如何使用决策树选择器(DecisionTreeClassifier)。但是实际的应用里面,这些代码显然是不够的,比如:

一、在其它的网络上流行的鸢尾花例子里面,必然是使用sklearn自带的load_iris()函数来加载数据,但是,这个并不通用对不?数据库不可能都自带的。参考文字:
https://seosn.com/say/sklearn-csv.html

二、关于train_test_split()函数,值得说明的是,random_state适用于控制随机的状态的,相同的random_state那么被随机后的数据相同。对,是的,这是个可控的随机过程。更多详细参数,请参考文字:
https://seosn.com/say/sklearn-train_test_split.html

三、实际应用中,模型是先训练然后保存成文件的,并不会直接使用。参考苏南大叔的文章:
https://seosn.com/say/python-joblib.html

总结

从代码上看的话,除了方法名字,其实看不出任何有关决策树算法有关的特殊之处,这也许就是算法包装的魅力了。更多sklearn经典文章,请参考苏南大叔的博客文章:
https://seosn.com/tag/sklearn/

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python    sklearn