如何在scikit learn中将参数仅传递给管道对象的一部分?

我需要将参数sample\u weight传递给我的RandomForestClassifier,如下所示:

X=np.数组([[2.0,2.0,1.0,0.0,1.0,3.0,3.0,1.0,0.0,0.0,0.0,0.0,,
1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 5.0, 3.0,
2.0, '0'],
[15.0, 2.0, 5.0, 5.0, 0.466666666667, 4.0, 3.0, 2.0, 0.0, 0.0, 0.0,
0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0,
7.0, 14.0, 2.0, '0'],
[3.0, 4.0, 3.0, 1.0, 1.33333333333, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0,
9.0, 8.0, 2.0, '0'],
[3.0, 2.0, 3.0, 0.0, 0.666666666667, 2.0, 2.0, 1.0, 0.0, 0.0, 0.0,
0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0,
5.0,3.0,1.0,'0']],数据类型=对象)
y=np.数组([0,0,1,0.]))
m=sklearn.employ.random分类器(
随机_状态=0,
oob_分数=真,
n_估计量=100,
最小样本叶=5,
最大深度=10)
m、 拟合(X,y,样本重量=np.数组([3,4,2,3]))

上面的代码工作得非常好。然后,我尝试在管道对象中这样做,使用管道对象而不是仅使用随机林:

m=sklearn.pipeline.pipeline([
('feature_selection',sklearn.feature_selection.SelectKBest(
score\u func=sklearn.feature\u selection.f\u回归,
k=25),
('model',sklearn.essemble.random)(
随机_状态=0,
oob_分数=真,
n_估计值=500,
最小样本叶=5,
最大深度=10))])
m、 拟合(X,y,样本重量=np.数组([3,4,2,3]))

现在,这在fit方法中使用“ValueError:需要超过1个值才能解包”

ValueError回溯(最近一次调用)
<ipython-input-212-c4299f5b3008>在<模块>()
25最大深度=10)])
26
---&燃气轮机;27 m.拟合(X,y,样本权重=np.数组([3,4,2,3]))
/usr/local/lib/python2.7/dist-packages/sklearn/pipeline.pyc-in-fit(self,X,y,**fit_参数)
128个数据,然后使用最终估计器拟合转换后的数据。
129         """
-->130 Xt,拟合参数=self.\u pre\u变换(X,y,**拟合参数)
131 self.steps[-1][-1].fit(Xt,y,**fit_参数)
132回归自我
/usr/local/lib/python2.7/dist-packages/sklearn/pipeline.pyc in_pre_transform(self,X,y,**fit_参数)
113 fit_params_steps=dict((步骤,{})表示步骤,u在self.steps中)
pname为114,pval为六个。标准(配合参数):
-->115步骤,参数=名称拆分(“1”)
116拟合参数步骤[步骤][参数]=pval
117 Xt=X
ValueError:需要超过1个值才能解包

我正在使用sklearn版本0.14
我认为问题在于管道中的F选择步骤不包含样本权重的参数。我如何通过运行“fit”将此参数仅传递给管道中的一个步骤?谢谢

从文件中:

管道的目的是组装几个可以安装的步骤
在设置不同参数时进行交叉验证。为此,
它允许使用各个步骤的名称设置各个步骤的参数
参数名由“_uu”分隔,如下例所示

因此,您只需在要传递给您的'model'步骤的任何拟合参数kwargs前面插入model

m.fit(X,y,模型样本重量=np.数组([3,4,2,3]))

发表评论