具有特定验证d的Gridsearch

2024-04-20 09:04:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一种在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)

Tags: 数据方法网格示例参数foldsklearncs
2条回答
clf = GridSearchCV(clf_,dict(C=Cs,gamma=Gammas),cv=???, # validate on X2,y2,n_jobs=8,verbose=10)
  1. n_jobs>;1没有任何意义。如果n_jobs=-1,则表示处理将使用计算机上的所有核心。如果是1,则只使用一个核心。

  2. 如果cv=5,它将为每个迭代运行五次交叉验证。

  3. 在您的例子中,总的迭代次数是9(Cs的大小)*5(gammas的大小)*5(CV的值)

    1. 如果使用交叉验证,则保留数据以重新检查模型没有任何意义。如果你对性能没有信心,你可以增加cv来获得更好的拟合度。在

这将是非常耗时的,特别是对于支持向量机,我建议您使用RandomSearchCV,它允许您给出您希望模型随机选择的迭代次数。在

使用hypoptPython包(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))

相关问题 更多 >