Python 实现机器学习小项目实战教程*
markdown
复制
Python 实现机器学习小项目实战教程
本教程将通过一个完整的机器学习项目案例,从数据预处理到模型部署,帮助初学者快速掌握机器学习核心流程。项目以经典的鸢尾花分类为例,使用 Scikit-learn 库实现。
1. 项目概述
目标
构建一个能准确分类鸢尾花品种(Setosa/Versicolor/Virginica)的机器学习模型
技术栈
- Python 3.8+
- Scikit-learn 1.0+
- Pandas/Numpy
- Matplotlib/Seaborn
2. 环境准备
# 安装必要库
pip install scikit-learn pandas matplotlib numpy seaborn
# 验证安装
import sklearn
print(sklearn.__version__) # 应显示 ≥1.0
3. 完整实现步骤
(1) 数据加载与探索
python
复制
from sklearn.datasets import load_iris
import pandas as pd
# 加载数据
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df['target'] = iris.target_names[iris.target]
# 数据概览
print(df.head())
print(f"\n类别分布:\n{df['target'].value_counts()}")
关键输出说明:
4个特征:花萼/花瓣的长度宽度
3个类别:各50条样本
(2) 可视化分析
python
复制
import seaborn as sns
import matplotlib.pyplot as plt
# 特征分布矩阵图
sns.pairplot(df, hue='target', markers=['o', 's', 'D'])
plt.show()
# 热力图分析相关性
plt.figure(figsize=(8,6))
sns.heatmap(df.corr(numeric_only=True), annot=True)
plt.show()
可视化价值:
花瓣长度与类别相关性最高
Setosa与其他两类区分明显
(3) 数据预处理
python
复制
from sklearn.model_selection import train_test_split
# 划分特征/标签
X = iris.data
y = iris.target
# 分割训练/测试集 (7:3)
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42, stratify=y)
注意事项:
stratify 保证类别比例一致
random_state 确保可复现性
(4) 模型训练与评估
python
复制
from sklearn.svm import SVC
from sklearn.metrics import classification_report
# 初始化SVM分类器
model = SVC(kernel='linear', C=1.0)
# 训练模型
model.fit(X_train, y_train)
# 预测测试集
y_pred = model.predict(X_test)
# 输出评估报告
print(classification_report(y_test, y_pred))
典型输出示例:
precision recall f1-score support
0 1.00 1.00 1.00 15
1 0.94 1.00 0.97 15
2 1.00 0.93 0.97 15
accuracy 0.98 45
(5) 模型优化(进阶)
python
复制
from sklearn.model_selection import GridSearchCV
# 定义参数网格
param_grid = {
'C': [0.1, 1, 10],
'kernel': ['linear', 'rbf']
}
# 网格搜索
grid = GridSearchCV(SVC(), param_grid, cv=5)
grid.fit(X_train, y_train)
# 输出最佳参数
print(f"最佳参数: {grid.best_params_}")
4. 项目扩展方向
部署为Web服务
使用Flask构建预测API:
python
复制
from flask import Flask, request
app = Flask(__name__)
@app.route('/predict', methods=['POST'])
def predict():
data = request.json
prediction = model.predict([data['features']])
return {'class': iris.target_names[prediction[0]]}
开发GUI界面
用Tkinter/PyQt创建可视化操作界面
探索其他算法
尝试决策树、随机森林等对比效果
5. 学习资源推荐
官方文档:scikit-learn.org
进阶书籍:《Python机器学习手册》
实战平台:Kaggle竞赛
更新时间:2025年3月27日 11:03(农历乙巳蛇年二月廿八,星期四)
本教程完整代码已托管至 GitHub示例仓库
该教程特点:
1. 包含从数据探索到模型优化的完整闭环
2. 每个步骤都有可视化验证环节
3. 提供实际可运行的代码片段
4. 给出明确的扩展方向
5. 强调工程化思维(如参数化、可复现性)