我正在对RandomizedSearchCV进行拟合,这是我的管道和参数网格
我将此作为估计值传递:
pipe_rand_svc=MyPipeline(steps=[('standardscaler',StandardScaler()),
('randsc',RandomizedSearchCV(SVC(probability=True),
param_grid))])
我把它作为参数传递
param_grid={'randsc__estimator__C':[1E-2,1E-1,1,10,100],'randsc__estimator__gamma':[1E-2,1E-1,1,10,100]}
以上是我从跑步中得到的名字
pipe_rand_svc.get_params().keys()
但我仍然会犯这样的错误:
ValueError: Invalid parameter randsc for estimator SVC(C=1, break_ties=False, cache_size=200, class_weight=None,
coef0=0.0, decision_function_shape='ovr', degree=3,
gamma=1, kernel='rbf', max_iter=-1, probability=True,
random_state=None, shrinking=True, tol=0.001, verbose=False). Check the list of available parameters with `estimator.get_params().keys()`.
如果您有任何建议,我将不胜感激
编辑:
S示例代码:
X1,y1=make_classification()
param_grid={'C':[1E-2,1E-1,1,10,100],'gamma':[1E-2,1E-1,1,10,100]}
pipe_rand_svc=MyPipeline(steps=[('standardscaler',StandardScaler()),('randsc',RandomizedSearchCV(SVC(probability=True),param_grid))])
a=RandomizedSearchCV(estimator=pipe_rand_svc,param_distributions=param_grid)
a=a.fit(X1,y1)
编辑2:
奇怪的是,这就像一个符咒:
param_grid={'svc__C':[1E-2,1E-1,1,10,100],'svc__gamma':[1E-2,1E-1,1,10,100]}
pipe_svc=MyPipeline(steps=[('standardscaler',StandardScaler()),('svc',SVC(probability=True))])
b=GridSearchCV(estimator=pipe_svc,param_grid=param_grid)
b=b.fit(X1,y1)
编辑3:
好的,我知道我做了什么。将RandomizedSearchCV传递到管道中,然后再次尝试运行RandomizedSearchCV。。。为所有相关人员道歉。睡眠恶化正在造成损失
您是否尝试过删除
randsc__estimator__
前缀?我试着运行你的代码(做了一些修改),但它没有前缀从对象实例
pipe_rand_svc
的角度来看,它确实有一个名为randsc
的管道对象,其中包含一个RandomizedSearchCV
和一个接受参数C
的估计器estimator
,因此randsc__estimator__C
是有意义的但是,如果您只看以下内容:
当
RandomizedSearchCV
被实例化时,它不知道或不关心它是否在管道中。从它的角度来看,它直接处理SVC
分类器,因此params字典只需要使用分类器超参数的名称,例如:C
和gamma
另一方面,如果您将管道传递到
RandomizedSearchCV
(而不仅仅是分类器),那么您需要更具体的语法。例如:这里,我将一个管道传递到
GridSearchCV
,所以现在我需要更具体地说明我所指的参数在某些特殊情况下,您需要使用
estimator__
。例如,如果您的分类器被包装在OneVsRestClassifier
中,estimator
将引用OneVsRestClassifier
实例,您将引用SVC
实例的C
超参数,如下所示:因此,一般的结论是,将
pipeline.get_params().keys()
中的参数名用作grid_params
确实是正确的解决方案。这个问题是因为我犯了一个可怕的错误,不确定我是否应该删除它(多余的-关于这个主题已经提出了几个问题,我认为这是一个不同的情况,但事实证明这只是我在代码的不同部分犯的错误)相关问题 更多 >
编程相关推荐