我已经开始使用 scikit learn 进行文本提取。当我在管道中使用标准函数 CountVectorizer 和 TfidfTransformer 并且尝试与新功能(矩阵的串联)结合时,我遇到了行维度问题。
这是我的管道:
pipeline = Pipeline([('feats', FeatureUnion([
('ngram_tfidf', Pipeline([('vect', CountVectorizer()),'tfidf', TfidfTransformer())])),
('addned', AddNed()),])), ('clf', SGDClassifier()),])
这是我的 AddNEd 类,它在每个文档(示例)上添加 30 个新闻功能。
class AddNed(BaseEstimator, TransformerMixin):
def __init__(self):
pass
def transform (self, X, **transform_params):
do_something
x_new_feat = np.array(list_feat)
print(type(X))
X_np = np.array(X)
print(X_np.shape, x_new_feat.shape)
return np.concatenate((X_np, x_new_feat), axis = 1)
def fit(self, X, y=None):
return self
我的主程序的第一部分
data = load_files('HO_without_tag')
grid_search = GridSearchCV(pipeline, parameters, n_jobs = 1, verbose = 20)
print(len(data.data), len(data.target))
grid_search.fit(X, Y).transform(X)
但我得到了这个结果:
486 486
Fitting 3 folds for each of 3456 candidates, totalling 10368 fits
[CV]feats__ngram_tfidf__vect__max_features=3000....
323
<class 'list'>
(323,) (486, 30)
当然还有 Indexerror 异常
return np.concatenate((X_np, x_new_feat), axis = 1)
IndexError: axis 1 out of bounds [0, 1
当我在变换函数(AddNed 类)中有参数 X 时,为什么我没有 X 的 numpy 数组 (486, 3000) 形状。我只有 (323,) 形状。我不明白,因为如果我删除 Feature Union 和 AddNed() 管道,CountVectorizer 和 tf_idf 可以使用正确的功能和正确的形状正常工作。如果有人有想法?非常感谢。