用Python实现鸢尾花分类:机器学习入门实战教程
一、项目背景
机器学习最基础的应用场景之一就是分类任务。
今天我们用经典的鸢尾花数据集,通过支持向量机(SVM)算法实现花卉种类分类。这个项目能让大家快速掌握机器学习从数据处理到模型训练的全流程,即使是零基础也能轻松跟上。
二、准备工作
首先安装必要的库,打开终端输入:
pip install scikit-learn numpy pandas matplotlib
三、代码实现与详解
1. 导入工具库
# 导入数据加载工具
from sklearn.datasets import load_iris
# 导入数据拆分工具
from sklearn.model_selection import train_test_split
# 导入支持向量机分类器
from sklearn.svm import SVC
# 导入评估指标
from sklearn.metrics import classification_report, confusion_matrix
# 导入数据处理工具
import pandas as pd
import numpy as np
代码解释:这里引入了数据加载、模型训练、结果评估需要的各种工具,其中scikit-learn
是机器学习常用库,包含大量数据集和算法模型。
2. 加载并查看数据
# 加载鸢尾花数据集
iris = load_iris()
# 把数据转成DataFrame格式方便查看
data = pd.DataFrame(iris.data, columns=iris.feature_names)
data['target'] = iris.target
# 查看前5行数据
print("数据前5行:")
print(data.head())
# 查看数据统计信息
print("\n数据统计信息:")
print(data.describe())
运行结果解读:
- 数据包含花萼长度、花萼宽度、花瓣长度、花瓣宽度4个特征
target
字段是标签,0代表山鸢尾,1代表变色鸢尾,2代表维吉尼亚鸢尾- 通过
describe()
能看到每个特征的均值、标准差、最值等信息,了解数据分布
3. 拆分训练集和测试集
# 特征数据(花的各项尺寸)
X = iris.data
# 标签数据(花卉种类)
y = iris.target
# 拆分数据,70%训练,30%测试
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
关键参数说明:
test_size=0.3
:表示30%数据作为测试集random_state=42
:固定随机种子,保证每次运行拆分结果一致,方便复现
4. 训练支持向量机模型
# 初始化支持向量机分类器
model = SVC(kernel='linear') # 使用线性核函数
# 训练模型
model.fit(X_train, y_train)
模型选择思路:
- SVM适合中小规模数据集,鸢尾花数据量小(150条)非常适合
kernel='linear'
表示使用线性核,处理线性可分数据效率高
5. 模型预测与评估
# 用测试集做预测
y_pred = model.predict(X_test)
# 输出混淆矩阵
print("混淆矩阵:")
print(confusion_matrix(y_test, y_pred))
# 输出分类报告
print("\n分类报告:")
print(classification_report(y_test, y_pred))
结果分析:
- 混淆矩阵:行是真实标签,列是预测标签。对角线数值越高,说明分类越准
- 分类报告:
precision
:精确率,预测为某类中真实属于该类的比例recall
:召回率,真实某类中被正确预测的比例f1-score
:精确率和召回率的调和平均,越接近1越好- 从结果看,模型对三类花卉的分类准确率都很高,说明效果很好
四、完整代码整合
# 完整代码
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import classification_report, confusion_matrix
import pandas as pd
# 加载数据
iris = load_iris()
data = pd.DataFrame(iris.data, columns=iris.feature_names)
data['target'] = iris.target
# 拆分数据
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
# 训练模型
model = SVC(kernel='linear')
model.fit(X_train, y_train)
# 评估模型
y_pred = model.predict(X_test)
print("混淆矩阵:")
print(confusion_matrix(y_test, y_pred))
print("\n分类报告:")
print(classification_report(y_test, y_pred))
五、项目扩展思考
- 换算法尝试:可以把SVM换成随机森林(
RandomForestClassifier
)、K近邻(KNeighborsClassifier
),对比不同算法效果 - 数据可视化:用
matplotlib
把花的特征可视化,比如绘制花瓣长度和宽度的散点图,观察不同类别分布 - 调参优化:调整SVM的
C
参数(正则化系数),尝试不同核函数(如kernel='rbf'
),看模型表现是否提升
通过这个项目,我们掌握了机器学习的标准流程:数据加载→数据预处理→模型训练→结果评估。鸢尾花分类只是入门,后续可以尝试更复杂的数据集,比如手写数字识别、房价预测等,但核心流程都是相通的。现在就动手运行代码,感受机器学习的魅力吧!