从零开始:scikit-learn决策树分类实战

在这个大数据和人工智能盛行的时代,机器学习已经成为了人们日常生活中不可或缺的一部分。从推荐系统到自动驾驶,背后都有机器学习的身影。今天,我们将一起探索一种简单却强大的机器学习算法------决策树,并使用Python中的scikit-learn库来实现对经典的鸢尾花数据集进行分类。

一、鸢尾花数据集简介

鸢尾花数据集(Iris dataset)是机器学习领域中最著名的数据集之一,由英国统计学家和生物学家Ronald Fisher于1936年整理发布。该数据集包含了150个样本,每个样本有四个特征:萼片长度、萼片宽度、花瓣长度和花瓣宽度,以及一个标签,指示该样本属于三种鸢尾花中的哪一种(Setosa、Versicolor、Virginica)。

二、决策树算法概述

决策树是一种监督学习算法,可用于分类和回归任务。它通过递归地将数据集划分成多个子集,直到每个子集中的样本都属于同一类别为止。决策树的每个内部节点表示一个特征上的测试,每个分支代表一个测试输出,而每个叶子节点则表示一个类别。

在scikit-learn中,决策树算法有两个主要实现:DecisionTreeClassifier用于分类任务,DecisionTreeRegressor用于回归任务。本文将专注于分类任务。

三、使用scikit-learn构建决策树

3.1 准备环境

首先,确保安装了Python和scikit-learn。如果还没有安装,可以使用pip命令安装:

bash 复制代码
pip install scikit-learn

3.2 导入必要的库

python 复制代码
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt
from sklearn.tree import plot_tree

3.3 加载数据集

python 复制代码
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target

3.4 数据集划分

复制代码
# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

3.5 构建决策树模型

python 复制代码
# 创建决策树分类器实例
clf = DecisionTreeClassifier(random_state=42)

# 训练模型
clf.fit(X_train, y_train)

3.6 模型评估

python 复制代码
# 预测测试集的结果
y_pred = clf.predict(X_test)

# 输出准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")

3.7 可视化决策树

python 复制代码
plt.figure(figsize=(20, 10))
plot_tree(clf, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)
plt.show()

四、代码解析

让我们快速回顾一下上述代码的关键部分:

  1. 加载数据集 :我们使用了load_iris()函数直接从scikit-learn中加载鸢尾花数据集。
  2. 数据集划分 :使用train_test_split()函数将数据集划分为训练集和测试集,其中测试集占30%。
  3. 模型训练 :创建了一个DecisionTreeClassifier实例,并使用训练数据对其进行训练。
  4. 模型评估:通过比较模型预测结果与真实标签来计算准确率。
  5. 可视化 :最后,我们使用plot_tree()函数来可视化决策树,以便更好地理解决策路径。

五、结论

通过简单的几步,我们已经成功地使用scikit-learn构建了一个决策树模型,并且对鸢尾花数据集进行了分类。决策树不仅易于理解和实现,而且能够产生很好的可视化效果,非常适合初学者入门。

希望这篇文章能激发你对机器学习的兴趣,并鼓励你探索更多有趣的数据集和算法。现在,你可以试着修改决策树的参数,比如最大深度、最小样本数等,看看这些变化如何影响模型的表现吧!

相关推荐
这张生成的图像能检测吗11 小时前
(论文速读)ClassBD:让盲反卷积与故障分类器协同学习的抗噪轴承诊断方法
分类·信号处理·故障诊断·去噪
SL-staff1 天前
JVS-Rules金融风控实践:四大原生能力的技术实现与可落地配置指南
java·决策树·规则引擎·函数计算·金融风控·jvs-rules·数据源抽象
2301_32241428041 天前
基于SpringBoot+Vue的休闲零食超市管理系统的设计与实现59004-计算机毕设 原创(免费领源码+部署教程+开发环境)
java·vue.js·spring boot·redis·mysql·决策树·推荐算法
虎鲸不是鱼2 天前
AI 自动化逆向(十二)AI 有分类冲动:非要找二元判据
人工智能·分类·自动化·逆向·ai逆向
邹霍梁@开源软件GoodERP2 天前
【出海 ERP】进口主料直采还是集团代购?两条采购链在系统里怎么接口
决策树·开源软件·制造
jay神2 天前
基于 YOLOv8 的垃圾分类识别系统
人工智能·深度学习·yolo·机器学习·目标跟踪·分类·计算机毕业设计
lzhdim2 天前
AI的分类
人工智能·算法·机器学习·分类·数据挖掘
ViperL13 天前
[高光谱]DADnet-基于对抗生成的单源域泛化分类
人工智能·分类·数据挖掘
邹霍梁@开源软件GoodERP3 天前
【出海 ERP】内销外销 × 内采外采:四种经营组合,主数据怎么建才不糊账?
决策树·开源软件·制造
邹霍梁@开源软件GoodERP4 天前
【出海 ERP】本地没库存时:自产自销还是转口贸易?一张决策树给财务和 IT
算法·决策树·机器学习