jwa*_*lex 12 python classification scikit-learn text-classification
我正在尝试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)
]))
])
Run Code Online (Sandbox Code Playgroud)
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())
])
)])
Run Code Online (Sandbox Code Playgroud)
我不知道这是否适用于您的问题,但我们在略有不同的情况下遇到了相同的错误,并且刚刚解决了它。
我们的f1条目都是 15 个数值的列表,我们需要在 上执行 tf-idf f2。这会产生关于不兼容的行尺寸的相同错误。
通过调试器运行后,我们发现矩阵的形状hstack()在FeatureUnion: (2569,)和 中的调用中略有不同(2659, 706)。
如果我们转换f1为 2D numpy 数组,形状将更改为(2659, 15)并且hstack调用有效。
演员阵容是这样的:f1 = np.array(list(f1))。
| 归档时间: |
|
| 查看次数: |
4320 次 |
| 最近记录: |