【问题标题】:unable to use FeatureUnion in scikit-learn due to different dimensions由于尺寸不同,无法在 scikit-learn 中使用 FeatureUnion
【发布时间】:2014-11-05 21:05:14
【问题描述】:

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


实施

我的FeatureUnion 是按以下方式构建的:

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

GetItemTransformer 用于从同一结构中获取不同部分的数据。该想法在 scikit-learn 问题跟踪器中描述为 here

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


问题

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

【问题讨论】:

  • 一个简短而丑陋的解决方案是将data_f1data_f2 连接到data_f2 的长度,并将Y 向量的长度设置为data_f2

标签: python scikit-learn classification text-classification


【解决方案1】:

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

我们的f1 条目是每个包含 15 个数值的列表,我们需要在 f2 上执行 tf-idf。这对不兼容的行尺寸产生了相同的错误。

在通过调试器运行它之后,我们发现在FeatureUnion 中的hstack() 调用中,我们的矩阵形状略有不同:(2569,)(2659, 706)

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

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

【讨论】:

    【解决方案2】:

    这对我有用:

    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())
              ])
            )])
    

    【讨论】:

      猜你喜欢
      • 2019-01-12
      • 1970-01-01
      • 2016-04-15
      • 2019-02-06
      • 1970-01-01
      • 2016-08-30
      • 2020-12-26
      • 2015-02-06
      相关资源
      最近更新 更多