Я начал использовать scikit для изучения извлечения текста. Когда я использую стандартную функцию CountVectorizer и TfidfTransformer в конвейере, и когда я пытаюсь объединиться с новыми функциями (конкатенацией матрицы), у меня возникает проблема измерения строк.FeatureUnion in scikit klearn и несовместимый размер строки
Это мой трубопровод:
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
Когда я имеют параметры X в функции преобразования n (класс AddNed), почему у меня нет формы numpy array (486, 3000) для X. У меня есть только форма (323,). Я не понимаю, потому что, если я удаляю конвейер Feature Union и AddNed(), CountVectorizer и tf_idf работают правильно с правильными функциями и правильной формой. Если у кого-то есть идея? Большое спасибо.
Вы не можете удалять строки внутри Pipeline, потому что ваши преобразования влияют только на 'X', а не' y'. – David
Извините, может быть, я что-то пропустил, но я не удаляю строки ... Думаю. Я хочу добавить (486, 30) новую матрицу с новой функцией (AddNed Pipeline) в матрицу (486,3000) (счетчик счетчиков трубопроводов + tdf_idf). Проблема в том, что я загружаю (load_files) 486 файлов, обрабатываю их (vectorizer + tdf_idf), но у меня нет 486 выборок (всего 323). – mathieu
Я не понимаю, что происходит, особенно в 'do_something'. Если вы можете создать воспроизводимый пример, я уверен, что мы можем помочь. – David