В сообщении об ошибке говорится, что ваша модель ожидает вход с размером 38011, в то время как ваш векторизатор TF-IDF выводит векторы с размером 7148. Здесь у вас есть несоответствие модели / препроцессора, т.е. ваша модель обучена на векторах, которые являются 38011-мернымив то время как ваш TF-IDF выводит векторы, которые имеют размер 7148.
Хороший способ избежать этого несоответствия предварительной обработки / модели - использовать scikit-learn pipelines . Например, здесь вы можете обучить вашу модель и вашего векторизатора TF-IDF следующим фрагментом кода (пример с логистической регрессией здесь):
from sklearn.preprocessing import make_pipeline
vectorizer = TfidfVectorizer(...your TF-IDF arguments...)
model = LogisticRegression(...your model arguments...)
pipeline = make_pipeline(vectorizer, model)
pipeline.fit(X, y)
И затем вы можете сериализовать изагрузите ваш конвейер pickle или joblib (например, pickle.dump(pipeline, open('spam_pipeline.pickle', 'wb'))
, затем pipeline = pickle.load(open('spam_pipeline.pickle', 'rb'))
, аналогично тому, что вы уже делали.
Вы можете напрямую использовать метод predict
конвейера, чтобы получить прогноз.
Дайте мне знать, если вам нужно больше деталей.