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. 強調工程化思維(如參數化、可復現性)