我正在寻找一种在sklearn中搜索超参数的方法,而不使用K-fold验证。即我希望我的网格在特定数据集(下例中的X1,y1)上进行训练,并在特定的保持数据集(下例中的X2,y2)上进行验证。
X1,y2 =列车数据
X2,y2 =验证数据
clf_ = SVC(kernel='rbf',cache_size=1000)
Cs = [1,10.0,50,100.0,]
Gammas = [ 0.4,0.42,0.44,0.46,0.48,0.5,0.52,0.54,0.56]
clf = GridSearchCV(clf_,dict(C=Cs,gamma=Gammas),
cv=???, # validate on X2,y2
n_jobs=8,verbose=10)
clf.fit(X1, y1)
答案 0 :(得分:1)
使用hypopt
Python程序包(pip install hypopt
)。这是一个专门为使用验证集进行参数优化而创建的专业软件包。它可以与任何现成的scikit学习模型一起使用,也可以与Tensorflow,PyTorch,Caffe2等一起使用。
# Code from https://github.com/cgnorthcutt/hypopt
# Assuming you already have train, test, val sets and a model.
from hypopt import GridSearch
param_grid = [
{'C': [1, 10, 100], 'kernel': ['linear']},
{'C': [1, 10, 100], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']},
]
# Grid-search all parameter combinations using a validation set.
opt = GridSearch(model = SVR(), param_grid = param_grid)
opt.fit(X_train, y_train, X_val, y_val)
print('Test Score for Optimized Parameters:', opt.score(X_test, y_test))
答案 1 :(得分:0)
clf = GridSearchCV(clf_,dict(C=Cs,gamma=Gammas),cv=???, # validate on X2,y2,n_jobs=8,verbose=10)
n_jobs> 1没有任何意义。如果n_jobs = -1,则表示处理将使用计算机上的所有核心。如果是1,则仅使用一个核心。
如果cv = 5,它将为每次迭代运行五次交叉验证。
在您的情况下,总迭代次数将为9(Cs的大小)* 5(gammas的大小)* 5(CV的值)
这对于SVM来说非常耗时,我建议您使用RandomSearchCV,它允许您给出模型随机选择的迭代次数。