Ich habe begonnen, scikit lernen für die Extraktion von Texten zu verwenden. Wenn ich Standardfunktion CountVectorizer und TfidfTransformer in einer Pipeline verwende und wenn ich versuche, mit neuen Features (eine Konkatenz der Matrix) zu kombinieren, habe ich ein Problem Zeilendimension.FeatureUnion in scikit klearn und inkompatible Zeilendimension
Dies ist meine Pipeline:
pipeline = Pipeline([('feats', FeatureUnion([
('ngram_tfidf', Pipeline([('vect', CountVectorizer()),'tfidf', TfidfTransformer())])),
('addned', AddNed()),])), ('clf', SGDClassifier()),])
Dies ist meine Klasse AddNEd, die auf jedes Dokument (Probe) 30 Nachrichten Funktionen hinzuzufügen.
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
Und der erste Teil meines Hauptprogrammes
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)
Aber ich habe dieses Ergebnis:
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)
Und natürlich eine Indexerror Ausnahme
return np.concatenate((X_np, x_new_feat), axis = 1)
IndexError: axis 1 out of bounds [0, 1
Als ich habe die params X in transform functio n (Klasse AddNed), warum ich kein numpy Array (486, 3000) für X habe. Ich habe nur (323,) Form. Ich verstehe das nicht, denn wenn ich Feature Union und AddNed() -Pipeline lösche, funktionieren CountVectorizer und tf_idf ordnungsgemäß mit den richtigen Features und der richtigen Form. Wenn jemand eine Idee hat? Vielen Dank.
gefunden. Sie können Zeilen innerhalb einer Pipeline nicht entfernen, da Ihre Transformationen nur 'X' und nicht' y' betreffen. – David
Sorry, vielleicht vermisse ich etwas, aber ich entferne keine Zeilen ... denke ich. Ich mag eine (486, 30) neue Matrix mit neuen Features (AddNed Pipeline) zu einer (486,3000) Matrix (Pipeline Zählung vectorizer + tdf_idf) hinzuzufügen. Das Problem ist, dass ich zu laden (load_files) 486 Dateien, ich verarbeiten sie zu (vectorizer + tdf_idf), aber ich habe keine 486 Proben (nur 323). – mathieu
Ich verstehe nicht, was vor sich geht, besonders in 'do_something'. Wenn Sie ein reproduzierbares Beispiel erstellen können, sind wir sicher, dass wir Ihnen helfen können. – David