模型評估的步驟、scikit-learn函數及實例說明
1. 數據劃分(Train-Test Split)
函數 :train_test_split
使用場景 :將數據分為訓練集和測試集,避免模型過擬合。作用 :確保模型在未見過的數據上驗證性能。示例 :from sklearn. model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size= 0.2 , random_state= 42 )
2. 模型訓練與預測
3. 評估指標計算
函數 :accuracy_score
, classification_report
, confusion_matrix
使用場景 :量化模型性能,分析分類結果的詳細指標(如精確率、召回率)。作用 :全面評估模型的準確性和潛在缺陷(如類別偏差)。示例 :from sklearn. metrics import accuracy_score, classification_report, confusion_matrix
print ( "Accuracy:" , accuracy_score( y_test, y_pred) )
print ( "Classification Report:\n" , classification_report( y_test, y_pred) )
print ( "Confusion Matrix:\n" , confusion_matrix( y_test, y_pred) )
4. 調參與交叉驗證
函數 :GridSearchCV
使用場景 :尋找最佳超參數組合,避免手動試錯。作用 :提高模型泛化能力,減少過擬合風險。示例 :from sklearn. model_selection import GridSearchCV
param_grid = { 'C' : [ 0.1 , 1 , 10 ] , 'penalty' : [ 'l1' , 'l2' ] }
grid_search = GridSearchCV( LogisticRegression( ) , param_grid, cv= 5 )
grid_search. fit( X_train, y_train)
best_model = grid_search. best_estimator_
5. 交叉驗證(Cross-Validation)
函數 :cross_val_score
使用場景 :評估模型在不同數據子集上的穩定性。作用 :減少數據劃分的隨機性對結果的影響。示例 :from sklearn. model_selection import cross_val_score
scores = cross_val_score( model, X, y, cv= 5 , scoring= 'accuracy' )
print ( "Cross-Validation Accuracy: %0.2f (+/- %0.2f)" % ( scores. mean( ) , scores. std( ) * 2 ) )
完整評估實例(使用鳶尾花數據集)
import numpy as np
from sklearn import datasets
from sklearn. model_selection import train_test_split, GridSearchCV, cross_val_score
from sklearn. linear_model import LogisticRegression
from sklearn. metrics import accuracy_score, classification_report
iris = datasets. load_iris( )
X, y = iris. data, iris. target
X_train, X_test, y_train, y_test = train_test_split( X, y, test_size= 0.2 , random_state= 42 )
model = LogisticRegression( max_iter= 200 )
model. fit( X_train, y_train)
y_pred = model. predict( X_test)
print ( "Accuracy:" , accuracy_score( y_test, y_pred) )
print ( "Classification Report:\n" , classification_report( y_test, y_pred) )
param_grid = { 'C' : [ 0.1 , 1 , 10 ] , 'penalty' : [ 'l1' , 'l2' ] }
grid_search = GridSearchCV( LogisticRegression( ) , param_grid, cv= 5 )
grid_search. fit( X_train, y_train)
print ( "Best Parameters:" , grid_search. best_params_)
print ( "Best Cross-Validation Score:" , grid_search. best_score_)
cv_scores = cross_val_score( model, X, y, cv= 5 , scoring= 'accuracy' )
print ( "Overall Cross-Validation Accuracy:" , np. mean( cv_scores) )
輸出示例
Accuracy: 0.9666666666666667
Classification Report:precision recall f1-score support0 1.00 1.00 1.00 91 1.00 0.93 0.96 152 0.92 1.00 0.96 12accuracy 0.97 36macro avg 0.97 0.98 0.97 36
weighted avg 0.97 0.97 0.97 36Best Parameters: {'C': 1, 'penalty': 'l2'}
Best Cross-Validation Score: 0.9666666666666666
Overall Cross-Validation Accuracy: 0.9533333333333334
關鍵點總結
數據劃分 :避免模型在訓練集上過擬合。評估指標 :結合準確率、分類報告和混淆矩陣,全面分析模型表現。調參與交叉驗證 :通過網格搜索和交叉驗證優化超參數,確保模型泛化能力。完整流程 :從數據劃分到最終評估,形成閉環驗證。