[英]GridSearchCV on LogisticRegression in scikit-learn
[英]scikit-learn GridSearchCV with multiple repetitions
我正在嘗試為SVR模型獲取最佳參數集。 我想在不同的C
值上使用GridSearchCV
。 但是,從之前的測試中我發現,分成訓練/測試集高可影響整體表現(在這種情況下為r2)。 為了解決這個問題,我想實現重復的5倍交叉驗證(10 x 5CV)。 是否有使用GridSearchCV
執行它的內置方式?
快速解決方案:
遵循sci-kit 官方文檔中提出的想法,快速解決方案代表:
NUM_TRIALS = 10
scores = []
for i in range(NUM_TRIALS):
cv = KFold(n_splits=5, shuffle=True, random_state=i)
clf = GridSearchCV(estimator=svr, param_grid=p_grid, cv=cv)
scores.append(clf.best_score_)
print "Average Score: {0} STD: {1}".format(numpy.mean(scores), numpy.std(scores))
這稱為嵌套的cross_validation。 您可以查看官方文檔示例,以指導您進入正確的方向,並在此處查看我的其他答案,以獲得類似的方法。
您可以根據需要調整步驟:
svr = SVC(kernel="rbf")
c_grid = {"C": [1, 10, 100, ... ]}
# CV Technique "LabelKFold", "LeaveOneOut", "LeaveOneLabelOut", etc.
# To be used within GridSearch (5 in your case)
inner_cv = KFold(n_splits=5, shuffle=True, random_state=i)
# To be used in outer CV (you asked for 10)
outer_cv = KFold(n_splits=10, shuffle=True, random_state=i)
# Non_nested parameter search and scoring
clf = GridSearchCV(estimator=svr, param_grid=c_grid, cv=inner_cv)
clf.fit(X_iris, y_iris)
non_nested_score = clf.best_score_
# Pass the gridSearch estimator to cross_val_score
# This will be your required 10 x 5 cvs
# 10 for outer cv and 5 for gridSearch's internal CV
clf = GridSearchCV(estimator=svr, param_grid=c_grid, cv=inner_cv)
nested_score = cross_val_score(clf, X=X_iris, y=y_iris, cv=outer_cv).mean()
編輯 - 使用cross_val_score()
和GridSearchCV()
描述嵌套交叉驗證
clf, X, y, outer_cv
給cross_val_score
X
將使用outer_cv
分為X_outer_train, X_outer_test
outer_cv
。 同樣的y。 X_outer_test
將被保留, X_outer_train
將傳遞給clf for fit()(在我們的例子中為GridSearchCV)。 假設X_outer_train
從此處被稱為X_inner
,因為它被傳遞給內部估計器 ,假設y_outer_train
是y_inner
。 X_inner
現在將分成X_inner_train
和X_inner_test
使用inner_cv
在GridSearchCV。 同樣的y X_inner_train
和y_train_inner
訓練gridSearch估算器,並使用X_inner_test
和y_inner_test
。 (X_inner_train, X_inner_test)
的平均得分最好的超參數被傳遞給clf.best_estimator_
並適合所有數據,即X_outer_train
。 X_outer_test
和y_outer_test
對該clf
( gridsearch.best_estimator_
)進行評分。 cross_val_score
返回分數數組 nested_score
。 您可以為GridSearchCV
提供不同的交叉驗證生成器。 二元或多類分類問題的默認值是StratifiedKFold
。 否則,它使用KFold
。 但是你可以提供自己的。 在您的情況下,看起來您需要RepeatedKFold
或RepeatedStratifiedKFold
。
from sklearn.model_selection import GridSearchCV, RepeatedStratifiedKFold
# Define svr here
...
# Specify cross-validation generator, in this case (10 x 5CV)
cv = RepeatedKFold(n_splits=5, n_repeats=10)
clf = GridSearchCV(estimator=svr, param_grid=p_grid, cv=cv)
# Continue as usual
clf.fit(...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.