机器学习实战:鸢尾花分类

项目目标

使用经典的鸢尾花数据集(Iris Dataset),通过支持向量机(SVM)算法训练一个分类模型,能够根据花瓣和萼片的测量数据预测鸢尾花的种类。

环境准备

 
  

Python

# 需要安装的库(在终端运行)
pip install numpy pandas matplotlib scikit-learn

完整代码实现

# 1. 导入必要的库
import numpy as np
import pandas as pd
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
import joblib  # 用于模型保存

# 2. 加载数据集
iris = datasets.load_iris()
X = iris.data  # 特征数据(萼片长宽,花瓣长宽)
y = iris.target  # 目标值(0: Setosa, 1: Versicolour, 2: Virginica)

# 3. 数据预处理
# 标准化特征值(使数据均值为0,方差为1)
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 4. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
    X_scaled, y, test_size=0.3, random_state=42)

# 5. 创建并训练模型
model = SVC(kernel='linear', C=1.0)  # 使用线性核的SVM
model.fit(X_train, y_train)

# 6. 预测测试集
y_pred = model.predict(X_test)

# 7. 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.2%}")

# 8. 保存模型和标准化器(可选)
joblib.dump(model, 'iris_classifier.pkl')
joblib.dump(scaler, 'iris_scaler.pkl')

分步骤解析

1. 数据准备

  • 使用Scikit-learn内置的鸢尾花数据集
  • 包含150个样本,4个特征(单位:厘米):
    • 萼片长度
    • 萼片宽度
    • 花瓣长度
    • 花瓣宽度
  • 目标类别(3种鸢尾花):
    • 0: Setosa
    • 1: Versicolour
    • 2: Virginica

2. 数据预处理

  • 标准化:将特征数据缩放到均值为0,方差为1的分布,消除不同量纲的影响
  • 数据集划分:70%训练集,30%测试集

3. 模型选择与训练

  • 使用支持向量机(SVM)分类器
  • 选择线性核函数(适合线性可分数据)
  • 正则化参数C=1.0(平衡间隔大小和分类正确率)

4. 模型评估

  • 使用准确率(Accuracy)作为评估指标
  • 典型结果应达到95%以上的准确率

5. 模型部署(可选)

  • 使用joblib保存训练好的模型和标准化器
  • 后续可以通过加载模型进行新数据预测

扩展应用示例

加载保存的模型进行预测:

# 加载模型和标准化器
loaded_model = joblib.load('iris_classifier.pkl')
loaded_scaler = joblib.load('iris_scaler.pkl')

# 新数据示例(需要是二维数组)
new_data = [[5.1, 3.5, 1.4, 0.2]]  # 萼片长宽,花瓣长宽

# 预处理新数据
new_data_scaled = loaded_scaler.transform(new_data)

# 进行预测
prediction = loaded_model.predict(new_data_scaled)
print(f"预测类别: {iris.target_names[prediction]}")

项目扩展方向

  1. 尝试其他分类算法(如KNN、决策树、随机森林等)
  2. 添加数据可视化(使用Matplotlib展示特征分布)
  3. 实现超参数调优(使用GridSearchCV)
  4. 添加交叉验证功能
  5. 部署为简单的Web应用(使用Flask框架)

这个项目涵盖了机器学习的基本流程:数据加载 → 预处理 → 模型训练 → 评估 → 部署,非常适合机器学习入门实践。可以通过更换数据集(如手写数字识别、房价预测等)应用于其他分类/回归任务。

关注博主,有些文章只有粉丝可见!

你可能感兴趣的:(Python,机器学习,分类,人工智能)