我對比較最佳 GridSearchCV 模型和基線有點困惑。
例如,我們有分類問題。
作為基線,我們將擬合一個具有默認設定的模型(讓它成為邏輯回歸):
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
baseline = LogisticRegression()
baseline.fit(X_train, y_train)
pred = baseline.predict(X_train)
print(accuracy_score(y_train, pred))
因此,基線使用整個訓練樣本為我們提供了準確性。
接下來,GridSearchCV:
from sklearn.model_selection import cross_val_score, GridSearchCV, StratifiedKFold
X_val, X_test_val,y_val,y_test_val = train_test_split(X_train, y_train, test_size=0.3, random_state=42)
cv = StratifiedKFold(n_splits=5, random_state=0, shuffle=True)
parameters = [ ... ]
best_model = GridSearchCV(LogisticRegression(parameters,scoring='accuracy' ,cv=cv))
best_model.fit(X_val, y_val)
print(best_model.best_score_)
在這里,我們有基于驗證樣本的準確性。
我的問題是:
- 這些準確度分數是否具有可比性?一般來說,在沒有任何交叉驗證的情況下比較 GridSearchCV 和模型是否公平?
- 對于基線,也使用驗證樣本(而不是整個訓練樣本)不是更好嗎?
uj5u.com熱心網友回復:
不,它們沒有可比性。
您的基線模型用于X_train擬合模型。然后您使用擬合模型對X_train樣本進行評分。這就像作弊,因為模型已經表現得最好,因為您是根據它已經看到的資料對其進行評估的。
網格搜索模型處于劣勢,因為:
- 由于您拆分了
X_train樣本,因此它使用的資料較少。 - 由于 5 折(
X_val每折僅 4/5 的訓練),它使用更少的資料進行訓練,這一事實使這一點更加復雜。
所以你的網格搜索分數會比你的基線差。
現在您可能會問,“那么 有什么意義best_model.best_score_?嗯,該分數用于比較在搜索空間中搜索最佳超引數時使用的所有模型,但絕不應該用于與經過訓練的模型進行比較在網格搜索背景關系之外。
那么應該如何進行公平的比較呢?
- 為兩種模型拆分訓練資料。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
- 使用
X_train.
# fit baseline
baseline.fit(X_train, y_train)
# fit using grid search
best_model.fit(X_train, y_train)
- 評估模型
X_test。
# baseline
baseline_pred = baseline.predict(X_test)
print(accuracy_score(y_test, baseline_pred))
# grid search
grid_pred = best_model.predict(X_test)
print(accuracy_score(y_test, grid_pred))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/351858.html
標籤:机器学习 scikit 学习 交叉验证 网格搜索 基线
下一篇:C 條件執行取決于型別
