繁体   English   中英

由于尺寸不同,无法在scikit-learn中使用FeatureUnion

[英]unable to use FeatureUnion in scikit-learn due to different dimensions

我正在尝试使用FeatureUnion从数据结构中提取不同的功能,但由于尺寸不同而失败: ValueError: blocks[0,:] has incompatible row dimensions


Implementaion

我的FeatureUnion按以下方式构建:

    features = FeatureUnion([
        ('f1', Pipeline([
            ('get', GetItemTransformer('f1')),
            ('transform', vectorizer_f1)
        ])),
        ('f2', Pipeline([
            ('get', GetItemTransformer('f2')),
            ('transform', vectorizer_f1)
        ]))
    ])

GetItemTransformer用于从同一结构中获取不同的数据部分。 我们的想法是说明这里在scikit学习问题跟踪器。

结构本身存储为{'f1': data_f1, 'f2': data_f2} ,其中data_f1是具有不同长度的不同列表。


由于Y-Vector与数据字段不同,我假设发生了错误,但是如何缩放矢量以适应两种情况?

这对我有用:

class ArrayCaster(BaseEstimator, TransformerMixin):
  def fit(self, x, y=None):
    return self

  def transform(self, data):
    print data.shape
    print np.transpose(np.matrix(data)).shape
    return np.transpose(np.matrix(data))

FeatureUnion([('text', Pipeline([
            ('selector', ItemSelector(key='text')),
            ('vect', CountVectorizer(ngram_range=(1,1), binary=True, min_df=3)),
            ('tfidf', TfidfTransformer())
          ])
        ),

        ('other data', Pipeline([
            ('selector', ItemSelector(key='has_foriegn_char')),
            ('caster', ArrayCaster())
          ])
        )])

我不知道这是否适用于您的问题,但我们在稍微不同的情况下遇到了同样的错误并且解决了它。

我们的f1条目是每个15个数值的列表,我们需要在f2上执行tf-idf。 这会产生与不兼容的行维度相同的错误。

在通过调试器运行之后,我们发现我们的矩阵的形状在FeatureUnion(2569,)(2659, 706) hstack()进入hstack()调用时FeatureUnion不同。

如果我们将f1转换为2D numpy数组,则形状更改为(2659, 15) hstack (2659, 15)并且hstack调用有效。

演员是这样的: f1 = np.array(list(f1))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM