在 GridSearchCV 中,如何只传递 param_grid 中的默认参数?
Posted
技术标签:
【中文标题】在 GridSearchCV 中,如何只传递 param_grid 中的默认参数?【英文标题】:In GridSearchCV, how do I pass only the default parameters in param_grid? 【发布时间】:2017-12-11 22:54:24 【问题描述】:我是初学者,下面有以下代码。
from sklearn.naive_bayes import GaussianNB
from sklearn.decomposition import PCA
pca = PCA()
model = GaussianNB()
steps = [('pca', pca), ('model', model)]
pipeline = Pipeline(steps)
cv = StratifiedShuffleSplit(n_splits=5, test_size=0.2, random_state=42)
modelwithpca = GridSearchCV(pipeline, param_grid= ,cv=cv)
modelwithpca.fit(X_train,y_train)
这是一个本地测试,我想要完成的是,
我。对数据集执行 PCA
二。仅使用默认参数使用高斯朴素贝叶斯
三。使用 StratifiedShuffleSplit
所以最后我希望将上述步骤转移到另一个转储分类器、数据集和特征列表的函数中,以测试性能。
dump_classifier_and_data(modelwithpca, dataset, features)
在 param_grid 部分,我不想测试任何参数列表。如果有意义的话,我只想在高斯朴素贝叶斯中使用默认参数。我要改变什么?
关于我如何实例化分类器对象也应该有任何改变吗?
【问题讨论】:
【参考方案1】:GridSearchCV
的目的是针对管道中的至少一件事使用不同的参数进行测试(如果您不想测试不同的参数,则不需要使用GridSearchCV
)。
所以,一般来说,如果你想测试不同的PCA
n_components
。
使用GridSearchCV
的管道格式如下:
gscv = GridSearchCV(pipeline, param_grid='step_name__parameter_name': [possible values], cv=cv)
例如:
# this would perform cv for the 3 different values of n_components for pca
gscv = GridSearchCV(pipeline, param_grid='pca__n_components': [3, 6, 10], cv=cv)
如果您如上所述使用GridSearchCV
调整PCA
,这当然意味着您的模型将具有默认值。
如果您不需要参数调整,那么GridSearchCV
不是要走的路,因为像这样为 GridSearchCV 使用模型的默认参数,只会产生一个组合的参数网格,所以它就像只表演简历。 这样做没有意义 - 如果我正确理解了你的问题:
from sklearn.naive_bayes import GaussianNB
from sklearn.decomposition import PCA
from sklearn.pipeline import Pipeline
pca = PCA()
model = GaussianNB()
steps = [('pca', pca), ('model', model)]
pipeline = Pipeline(steps)
cv = StratifiedShuffleSplit(n_splits=5, test_size=0.2, random_state=42)
# get the default parameters of your model and use them as a param_grid
modelwithpca = GridSearchCV(pipeline, param_grid='model__' + k: [v] for k, v in model.get_params().items(), cv=cv)
# will run 5 times as your cv is configured
modelwithpca.fit(X_train,y_train)
希望这有帮助,祝你好运!
【讨论】:
以上是关于在 GridSearchCV 中,如何只传递 param_grid 中的默认参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何将最佳参数(使用 GridSearchCV)从管道传递到另一个管道
将 Sklearn GridSearchCV 与 Pipeline 一起使用时如何传递权重
GridsearchCV:尝试在参数中传递 lambda 时无法腌制函数错误
sklearn 管道有没有办法在网格搜索期间进行有步骤和无步骤的训练?我可以删除步骤,但如何将其传递给 GridSearchCV?