如何复制 GridSearchCV 结果?
How to replicate GridSearchCV result?
使用 GridSearchCV
,我尝试最大化 AUC
以获得 LogisticRegression Classifier
clf_log = LogisticRegression(C=1, random_state=0).fit(X_train, y_train)
from sklearn.model_selection import GridSearchCV
grid_params = {'penalty': ['l1','l2'], 'C': [0.001,0.01,0.1,1,10,100], 'max_iter' : [100]}
gs = GridSearchCV(clf_log, grid_params, scoring='roc_auc', cv=5)
gs.fit(X_train, y_train)`
我得到了0.7630647186779661
的gs.best_score_
和gs.best_estimator_
和gs.best_params_
,分别如下:
<< LogisticRegression(C=10, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, l1_ratio=None, max_iter=100,
multi_class='auto', n_jobs=None, penalty='l2',
random_state=0, solver='lbfgs', tol=0.0001, verbose=0,
warm_start=False) >>
{'C': 10, 'max_iter': 100, 'penalty': 'l2'}
然而,当我将这些参数重新引入我原来的 clf_log
时,我只得到了 0.5359918677005525
的 AUC
。我错过了什么(我认为:简历部分)?我怎样才能得到和复制相同的结果?谢谢!
Grid Search CV使用K折交叉验证,即当你使用fit
方法时,它将数据分为测试集和训练集(cv=5表示测试集是数据集的1/5)这完成了 cv
次(在本例中为 5 次)。因此,您不应该使用 X_train
和 y_train
,而是使用 X
和 y
(假设您不想要第三个验证集),因为拆分是在内部完成的.
gs.fit(X, y)
之后假设您的最佳参数是 {'C': 10, 'max_iter': 100, 'penalty': 'l2'}
。现在说你想申请这个。如果想复制 GridSearchCV 的输出,那么您需要再次使用 k 折交叉验证(如果您使用 train_test_split
,您的结果会略有不同)。
from sklearn.model_selection import cross_val_score
np.average(cross_val_score(LogisticRegression(C=10, max_iter=100, penalty='l2'), X, y, scoring='roc_auc', cv=10))
有了这个你应该得到相同的 AUC。你可以参考这个video
使用 GridSearchCV
,我尝试最大化 AUC
以获得 LogisticRegression Classifier
clf_log = LogisticRegression(C=1, random_state=0).fit(X_train, y_train)
from sklearn.model_selection import GridSearchCV
grid_params = {'penalty': ['l1','l2'], 'C': [0.001,0.01,0.1,1,10,100], 'max_iter' : [100]}
gs = GridSearchCV(clf_log, grid_params, scoring='roc_auc', cv=5)
gs.fit(X_train, y_train)`
我得到了0.7630647186779661
的gs.best_score_
和gs.best_estimator_
和gs.best_params_
,分别如下:
<< LogisticRegression(C=10, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, l1_ratio=None, max_iter=100,
multi_class='auto', n_jobs=None, penalty='l2',
random_state=0, solver='lbfgs', tol=0.0001, verbose=0,
warm_start=False) >>
{'C': 10, 'max_iter': 100, 'penalty': 'l2'}
然而,当我将这些参数重新引入我原来的 clf_log
时,我只得到了 0.5359918677005525
的 AUC
。我错过了什么(我认为:简历部分)?我怎样才能得到和复制相同的结果?谢谢!
Grid Search CV使用K折交叉验证,即当你使用fit
方法时,它将数据分为测试集和训练集(cv=5表示测试集是数据集的1/5)这完成了 cv
次(在本例中为 5 次)。因此,您不应该使用 X_train
和 y_train
,而是使用 X
和 y
(假设您不想要第三个验证集),因为拆分是在内部完成的.
gs.fit(X, y)
之后假设您的最佳参数是 {'C': 10, 'max_iter': 100, 'penalty': 'l2'}
。现在说你想申请这个。如果想复制 GridSearchCV 的输出,那么您需要再次使用 k 折交叉验证(如果您使用 train_test_split
,您的结果会略有不同)。
from sklearn.model_selection import cross_val_score
np.average(cross_val_score(LogisticRegression(C=10, max_iter=100, penalty='l2'), X, y, scoring='roc_auc', cv=10))
有了这个你应该得到相同的 AUC。你可以参考这个video