【发布时间】:2020-02-19 23:49:48
【问题描述】:
我有一个sklearn 管道,它提取三个不同的特征。
manual_feats = Pipeline([
('FeatureUnion', FeatureUnion([
('segmenting_pip1', Pipeline([
('A_features', A_features()),
('segmentation', segmentation())
])),
('segmenting_pip2', Pipeline([
('B_features', B_features(),
('segmentation', segmentation())
])),
('segmenting_pip3', Pipeline([
('Z_features', Z_features()),
('segmentation', segmentation())
])),
])),
])
鉴于特征 A 和 B 每个返回一个暗淡数组(记录数,10、20),而 Z 返回(记录数,10、15 )。
当我使用所有功能安装管道时,我收到此错误:
File "C:\Python35\lib\site-packages\sklearn\pipeline.py", line 451, in _transform
Xt = transform.transform(Xt)
File "C:\Python35\lib\site-packages\sklearn\pipeline.py", line 829, in transform
Xs = np.hstack(Xs)
File "C:\Python35\lib\site-packages\numpy\core\shape_base.py", line 340, in hstack
return _nx.concatenate(arrs, 1)
ValueError: all the input array dimensions except for the concatenation axis must match exactly
但是,如果我排除功能 Z,管道可以工作,但在轴上应用的串联 = 1 暗淡(记录数,20、20)。我想要的是获得一个 (# of records, 10, 40) 维度的数组,其中连接过程应用于axis=2。
如何在不编辑库源代码的情况下使用Pipeline 获得我想要的内容?
编辑:
我提到A 和B 的串联会产生一个(记录数,10、40)DIM 数组。这不正确;它产生一个 DIM 数组(记录数,20、20)。我将编辑问题。
【问题讨论】:
-
查看
Pipeline代码,并尝试弄清楚您的输入是如何转换为Xt和Xs的。它必须假设Xs是二维数组的列表或数组,应该在最后一个轴上连接。第一个轴必须匹配,但它不匹配(出于某种原因)。 -
谢谢@hpaulj,但我不想更改
pipeline代码中的某些内容,我可以用Xs = np.concatenate(Xs, axis=-1)更改Xs = np.hstack(Xs)行,它可以工作。我可以在那里更改连接过程的轴,但我想在我的代码中添加一些东西。
标签: python numpy scikit-learn concatenation pipeline