项目目标
使用经典的鸢尾花数据集(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: Setosa1: Versicolour2: 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]}")
项目扩展方向
尝试其他分类算法(如KNN、决策树、随机森林等)添加数据可视化(使用Matplotlib展示特征分布)实现超参数调优(使用GridSearchCV)添加交叉验证功能部署为简单的Web应用(使用Flask框架)这个项目涵盖了机器学习的基本流程:数据加载 → 预处理 → 模型训练 → 评估 → 部署,非常适合机器学习入门实践。可以通过更换数据集(如手写数字识别、房价预测等)应用于其他分类/回归任务。
关注博主,有些文章只有粉丝可见!