<p>您是否尝试过删除<code>randsc__estimator__</code>前缀?我试着运行你的代码(做了一些修改),但它没有前缀</p>
<pre><code>param_grid={'C':[1E-2,1E-1,1,10,100],'gamma':[1E-2,1E-1,1,10,100]}
</code></pre>
<p>从对象实例<code>pipe_rand_svc</code>的角度来看,它确实有一个名为<code>randsc</code>的管道对象,其中包含一个<code>RandomizedSearchCV</code>和一个接受参数<code>C</code>的估计器<code>estimator</code>,因此<code>randsc__estimator__C</code>是有意义的</p>
<p>但是,如果您只看以下内容:</p>
<pre><code>RandomizedSearchCV(SVC(probability=True), param_grid))
</code></pre>
<p>当<code>RandomizedSearchCV</code>被实例化时,它不知道或不关心它是否在管道中。从它的角度来看,它直接处理<code>SVC</code>分类器,因此params字典只需要使用分类器超参数的名称,例如:<code>C</code>和<code>gamma</code></p>
<p>另一方面,如果您将管道传递到<code>RandomizedSearchCV</code>(而不仅仅是分类器),那么您需要更具体的语法。例如:</p>
<pre><code>params_C = numpy.linspace(0, 2, 40)
ppl = Pipeline([('preprocessor', preprocessor),
('classifier', LogisticRegression(max_iter=500))])
gs = GridSearchCV(ppl,
param_grid={'classifier__C': params_C},
cv=KFold(10, shuffle=True))
</code></pre>
<p>这里,我将一个管道传递到<code>GridSearchCV</code>,所以现在我需要更具体地说明我所指的参数</p>
<p>在某些特殊情况下,您需要使用<code>estimator__</code>。例如,如果您的分类器被包装在<code>OneVsRestClassifier</code>中,<code>estimator</code>将引用<code>OneVsRestClassifier</code>实例,您将引用<code>SVC</code>实例的<code>C</code>超参数,如下所示:</p>
<pre><code>ppl = Pipeline([('clf', OneVsRestClassifier(SVC(verbose=True)))])
GridSearchCV(ppl, {'clf__estimator__C': [0.01, 0.1, 1]})
</code></pre>