Почему возникает ошибка ValueError?
Я натренировал Random Forest Classifier
. Сохранил модель, используя pickle
. После, в другом python
-файле, загрузил модель и передал ей предложение, которое ввёл.
Возникает ошибка:
ValueError: X has 14 features, but RandomForestClassifier is expecting 148409 features as input".
Вот формы данных:
train dataset features size: (23588, 148409)
train dataset label size: (23588,)
test dataset features size: (10110, 148409)
test dataset label size: (10110,)
Вот форма одного предложения:
text_test shape (15, 14)
Код в файле с постройкой модели:
from sklearn.feature_extraction.text import CountVectorizer, TfidTransformer
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
vectorizer = CountVectorizer()
BoW_transformer = vectorizer.fit(data['Text'])
BoW_data = BoW_transformer.transform(data['Text'])
tf_idf_transformer = TfidfTransformer().fit(BoW_data)
data_tf_idf = tf_idf_transformer.transform(BoW_data)
text_train, text_test, label_train, label_test = train_test_split(
data_tf_idf, data['Label'], test_size=0.3
)
print(f"train dataset features size: {text_train.shape}")
print(f"train dataset label size: {label_train.shape}")
print(f"test dataset features size: {text_test.shape}")
print(f"test dataset label size: {label_test.shape}")
RF_classifier = RandomForestClassifier()
RF_classifier.fit(text_train, label_train)
predict_train = RF_classifier.predict(text_train)
predict_test = RF_classifier.predict(text_test)
Код в файле с входными данными:
import pickle
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfTransformer, CountVectorizer
vectorizer = CountVectorizer()
BoW_transformer = vectorizer.fit(input_string)
BoW_data = BoW_transformer.transform(input_string)
tf_idf_transformer = TfidfTransformer().fit(BoW_data)
data_tf_idf = tf_idf_transformer.transform(BoW_data)
text_test, label_test = train_test_split(
data_tf_idf, test_size=1
)
print("text_test shape", text_test.shape)
with open("saved_model.pickle", 'rb') as f:
RF_classifier = pickle.load(f)
predict_test = RF_classifier.predict(text_test)
Проблема, видимо, в том, что векторизатор имеет разные словари в разных файлах. Но как сделать иначе, я не знаю.