3 Stimmen

Die Feature-Zahlen stimmen nicht überein.

Ich verwende Scikit, um eine einfache Klassifizierungsaufgabe durchzuführen. Ich habe einen Test- und einen Trainingsdatensatz, ihre Formen sind wie folgt: train = (1000, 69917) und test = (1073, 49429). Wenn ich etwas wie folgt mache:

clf.fit(X_train, Y_train)
predicted = clf.predict(X_test)

Erhalte ich den folgenden Fehler:

ValueError: X hat 49429 Merkmale pro Sample; erwartet werden 69917

8voto

YS-L Punkte 14498

Da X_train zur Schulung des Modells verwendet wird, erwartet das Modell während der Vorhersagephase, dass X_test die genau gleiche Merkmalsdimension (d.h. Anzahl der Spalten) aufweist.

Sie haben erwähnt, dass X_train und X_test mithilfe eines CountVectorizers erstellt werden. Eine wahrscheinliche Ursache für dieses Problem ist, dass Sie fit (oder fit_transform) zweimal aufgerufen haben, was zwei verschiedene Transformationen erzeugt hat. Um dies zu verhindern, stellen Sie sicher, dass es nur einen Aufruf von fit gibt:

from sklearn.feature_extraction.text import CountVectorizer
vec = CountVectorizer()
X_train = vec.fit_transform(X_train_raw)
X_test = vec.transform(X_test_raw) # Nicht fit_transform!

Auf diese Weise werden die Testdaten mithilfe genau desselben Vokabulars transformiert, das aus den Trainingsdaten gelernt wurde.

0voto

user4815162342 Punkte 1554

Sie müssen Ihre Test- und Trainingssätze aufteilen, sodass sie jeweils eine unterschiedliche Anzahl von Werten, aber die gleiche Anzahl von Merkmalen haben.

-1voto

gatapia Punkte 3392

X_train und y_train müssen die gleiche Anzahl an Zeilen haben. Das heißt, für jedes Trainingsbeispiel benötigt der Klassifikator ein Ziel zum Lernen.

Sie werden auch auf Probleme stoßen, wenn Sie 'vorhersagen', da Trainings- und Testdaten die gleiche Anzahl von Spalten haben sollten.

Ich empfehle Ihnen, einen guten Einführungstext zu lesen, bevor Sie weitermachen. Dies ist gut: http://scikit-learn.org/stable/tutorial/basic/tutorial.html

Bearbeiten: Frage falsch verstanden. Ignorieren Sie abweichende Zeilen in y_train. Sie müssen nur sicherstellen, dass Trainings- und Testdaten die gleiche Anzahl von Spalten haben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X