Классификация int и string txt throws ValueError: Количество объектов модели должно соответствовать входным данным. Модель n_features - PullRequest
0 голосов
/ 22 марта 2020

Я довольно новичок в машинном обучении, извините заранее, я пытаюсь прочитать из txt-файла, который имеет образцы поездов как таковые:

123 это длинная текстовая строка

325 другой текст

и мой файл label.txt такой:

123 1

325 2

Так что после многих попыток мне удалось прочитать их с помощью pandas:

train_labels = pd.read_csv('train_labels.txt', nrows=200, dtype=str, delimiter="\t", header=None)

train_samples = pd.read_csv('train_samples.txt', nrows=200, dtype=str, encoding="UTF-8", delimiter="\t", header=None)

И я преобразовал столбец строки в моих выборках поезда с помощью векторизатора

from sklearn.feature_extraction.text import TfidfVectorizer

tfidfconverter = TfidfVectorizer(max_features=1500, min_df=5, max_df=0.7, stop_words=stop_words)

X = tfidfconverter.fit_transform(train_samples.iloc[:, 1]).toarray()

Затем я пытаюсь приспособить мой классификатор к случайному лесу

clf = RandomForestClassifier(n_estimators=1000, random_state=0)

clf.fit(X, train_labels) -> error

Затем я читаю образцы, чтобы вычислить мой показатель точности

validation_source_samples = pd.read_csv('validation_source_samples.txt', nrows=200, dtype=str, encoding="UTF-8", delimiter="\t", header=None)

validation_source_labels = pd.read_csv('validation_source_labels.txt', nrows=200, dtype=str, delimiter="\t", header=None)

T = tfidfconverter.fit_transform(validation_source_samples.iloc[:, 1]).toarray()


pred = clf.predict(T)

on clf.predict Я получаю сообщение об ошибке:

`ValueError: Number of features of the model must match the input`. 

Модель n_features равна 780, а ввод n_features равен 879

Я искал ответы для этого типа из-за ошибки, но, похоже, ничто не соответствовало моим фактическим файлам ввода и проблеме. Извините заранее, если на него уже отвечали.

1 Ответ

0 голосов
/ 22 марта 2020

Это потому, что вы подгоняете векторизатор снова к данным проверки, в то время как модель узнала подгонку векторизатора по данным поезда, вы можете исправить это, изменив fit_transform в строке проверки на transform вот так:

T = tfidfconverter.transform(validation_source_samples.iloc[:, 1]).toarray()
...