模型選擇與訓練步驟及示例
1. 數據準備與探索
步驟說明:加載數據并初步探索其分布、缺失值、異常值等。
注意事項:
- 檢查數據類型(數值/類別)、缺失值和異常值。
- 對類別型特征進行編碼(如獨熱編碼)。
實例:鳶尾花數據集(load_iris()
)。
函數及參數: sklearn.datasets.load_iris()
:加載數據集。
2. 數據預處理
步驟說明:標準化/歸一化特征,處理缺失值,分割訓練/測試集。
注意事項:
- 特征縮放(如標準化)對許多算法(如SVM、邏輯回歸)至關重要。
- 避免在測試集上泄漏信息(如先分割數據再標準化)。
實例:標準化鳶尾花特征。
函數及參數: sklearn.preprocessing.StandardScaler()
:with_mean=True, with_std=True
。sklearn.model_selection.train_test_split()
:test_size=0.2, random_state=42
。
3. 模型選擇
步驟說明:根據問題類型(分類/回歸/聚類)選擇算法。
注意事項:
- 分類問題:邏輯回歸、隨機森林、SVM。
- 回歸問題:線性回歸、決策樹回歸。
- 簡單問題可用線性模型,復雜問題可嘗試集成模型。
實例:鳶尾花分類選擇邏輯回歸。
函數及參數: sklearn.linear_model.LogisticRegression()
:C=1.0, solver='lbfgs'
(正則化參數C
控制模型復雜度)。
4. 模型訓練
步驟說明:用訓練集擬合模型。
注意事項:
- 確保輸入數據已預處理且無缺失值。
- 對于分類問題,需確保標簽是整數或獨熱編碼。
實例:訓練邏輯回歸模型。
函數及參數: model.fit(X_train, y_train)
:擬合數據。
5. 模型評估
步驟說明:在測試集上評估性能,選擇合適的指標。
注意事項:
- 分類問題常用準確率(accuracy)、F1分數;回歸問題用均方誤差(MSE)、R2分數。
- 避免僅依賴單一指標(如精度可能因類別不平衡誤導)。
實例:計算邏輯回歸的準確率。
函數及參數: sklearn.metrics.accuracy_score(y_true, y_pred)
。
6. 模型調優
步驟說明:通過交叉驗證和超參數搜索優化模型。
注意事項:
- 使用
GridSearchCV
或RandomizedSearchCV
系統搜索超參數。 - 交叉驗證(如5折)避免過擬合。
實例:調優邏輯回歸的正則化參數C
。
函數及參數: sklearn.model_selection.GridSearchCV(estimator=model, param_grid={'C': [0.1, 1, 10]}, cv=5)
。
7. 模型部署
步驟說明:保存模型并用于預測新數據。
注意事項:
- 使用
joblib
或pickle
保存模型。 - 預測前需對新數據進行與訓練數據相同的預處理。
函數及參數: joblib.dump(model, 'model.pkl')
。
完整代碼示例(鳶尾花分類)
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.model_selection import GridSearchCV
from sklearn.externals import joblib # 1. 加載數據
iris = datasets.load_iris()
X, y = iris.data, iris.target # 2. 數據分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 3. 特征標準化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test) # 4. 模型訓練
model = LogisticRegression(C=1.0, solver='lbfgs', max_iter=200)
model.fit(X_train_scaled, y_train) # 5. 模型評估
y_pred = model.predict(X_test_scaled)
print(f"Accuracy: {accuracy_score(y_test, y_pred):.2f}") # 6. 超參數調優
param_grid = {'C': [0.1, 1, 10]}
grid_search = GridSearchCV(model, param_grid, cv=5)
grid_search.fit(X_train_scaled, y_train)
print(f"Best C: {grid_search.best_params_}") # 7. 保存模型
joblib.dump(model, 'iris_model.pkl')
關鍵點總結
- 預處理:標準化是多數模型的必要步驟。
- 超參數調優:通過交叉驗證避免過擬合。
- 評估指標:根據任務選擇合適的指標(如分類 vs 回歸)。