如何使用带有预定义拆分折叠的显式验证集?
how to use an explicit validation set with predefined split fold?
我有明确的训练、测试和验证集作为二维数组:
X_train.shape
(1400, 38785)
X_val.shape
(200, 38785)
X_test.shape
(400, 38785)
我正在调整 alpha 参数,需要有关如何在其中使用预定义验证集的建议:
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import GridSearchCV, PredefinedSplit
nb = MultinomialNB()
nb.fit(X_train, y_train)
params = {'alpha': [0.1, 1, 3, 5, 10,12,14]}
# how to use on my validation set?
# ps = PredefinedSplit(test_fold=?)
gs = GridSearchCV(nb, param_grid=params, cv = ps, return_train_score=True, scoring='f1')
gs.fit(X_train, y_train)
目前我的结果如下。
# on my validation set, alpha = 5
gs.fit(X_val, y_val)
print('Grid best parameter', gs.best_params_)
Grid best parameter: {'alpha': 5}
# on my training set, alpha = 10
Grid best parameter: {'alpha': 10}
我已阅读以下问题和文档,但我不确定如何在我的案例中使用 PredefinedSplit()。谢谢。
https://scikit-learn.org/stable/modules/cross_validation.html#predefined-fold-splits-validation-sets
您可以通过合并 X_train
和 X_val
并传递 PredefinedSplit
标签列表来实现您想要的结果,-1
表示训练数据,1
表示验证数据。即,
X = np.concatenate((X_train, X_val))
y = np.concatenate((y_train, y_val))
ps = PredefinedSplit(np.concatenate((np.zeros(len(x_train) - 1, np.ones(len(x_val))))
gs = GridSearchCV(nb, param_grid=params, cv = ps, return_train_score=True, scoring='f1')
gs.fit(X, y) # not X_train, y_train
但是,除非有很好的理由让您保留一个单独的验证集,否则如果您使用 k-fold 交叉验证来调整超参数而不是使用专用验证集,您可能会减少过度拟合.
我有明确的训练、测试和验证集作为二维数组:
X_train.shape
(1400, 38785)
X_val.shape
(200, 38785)
X_test.shape
(400, 38785)
我正在调整 alpha 参数,需要有关如何在其中使用预定义验证集的建议:
from sklearn.naive_bayes import MultinomialNB
from sklearn.model_selection import GridSearchCV, PredefinedSplit
nb = MultinomialNB()
nb.fit(X_train, y_train)
params = {'alpha': [0.1, 1, 3, 5, 10,12,14]}
# how to use on my validation set?
# ps = PredefinedSplit(test_fold=?)
gs = GridSearchCV(nb, param_grid=params, cv = ps, return_train_score=True, scoring='f1')
gs.fit(X_train, y_train)
目前我的结果如下。
# on my validation set, alpha = 5
gs.fit(X_val, y_val)
print('Grid best parameter', gs.best_params_)
Grid best parameter: {'alpha': 5}
# on my training set, alpha = 10
Grid best parameter: {'alpha': 10}
我已阅读以下问题和文档,但我不确定如何在我的案例中使用 PredefinedSplit()。谢谢。
https://scikit-learn.org/stable/modules/cross_validation.html#predefined-fold-splits-validation-sets
您可以通过合并 X_train
和 X_val
并传递 PredefinedSplit
标签列表来实现您想要的结果,-1
表示训练数据,1
表示验证数据。即,
X = np.concatenate((X_train, X_val))
y = np.concatenate((y_train, y_val))
ps = PredefinedSplit(np.concatenate((np.zeros(len(x_train) - 1, np.ones(len(x_val))))
gs = GridSearchCV(nb, param_grid=params, cv = ps, return_train_score=True, scoring='f1')
gs.fit(X, y) # not X_train, y_train
但是,除非有很好的理由让您保留一个单独的验证集,否则如果您使用 k-fold 交叉验证来调整超参数而不是使用专用验证集,您可能会减少过度拟合.