Ошибка при запуске обученной модели машинного обучения - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть набор данных, содержащий столбцы 'studentDetails' и 'studentId'.Я натренировал свою модель на этом наборе данных и сохранил ее.Когда я тренирую модель и сохраняю обученную модель, а затем загружаю обученную модель для прогнозирования, она успешно дает мне результат.Но когда я загружаю сохраненную модель в автономном режиме и прогнозирую, используя ее, она выдает мне сообщение «CountVectorizer - Vocabulary не установлен»

Вот код, который я использую:

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
import pickle
from sklearn.svm import LinearSVC 

X_train, X_test, y_train, y_test = train_test_split(df['studentDetails'], df['studentId'], random_state = 0)
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(X_train)
tfidf_transformer = TfidfTransformer()
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts) 
classificationModel = LinearSVC().fit(X_train_tfidf, y_train) 
filename = 'finalized_model.sav'
pickle.dump(classificationModel, open(filename, 'wb'))

Теперь загружаем модель и прогнозируем:

from sklearn.feature_extraction.text import CountVectorizer
data_to_be_predicted="Alicia Scott is from United States"
filename = 'finalized_model.sav'
loaded_model = pickle.load(open(filename, 'rb'))
count_vect = CountVectorizer()
result = loaded_model.predict(count_vect.transform([data_to_be_predicted]))
print(result)

вывод:

94120

Когда я запускаю только второй фрагмент кода, он выдает ошибку

ошибка:

CountVectorizer - Vocabulary wasn't fitted

Мне просто интересно, почему я получаю ошибку во втором случае, потому что я не переопределяю count_vect = CountVectorizer () где-либо в первом случае, когда я получаюправильный результат.

1 Ответ

0 голосов
/ 15 декабря 2018

Проблема со вторым фрагментом состоит в том, что вы не используете встроенный CounVectorizer, он новый, поэтому он не установлен.

Я буду рекомендовать использовать fit вместо fit_transform , это вернет вам CountVectorizer, уже установленный, а затем вы можете сохранить его, как вы делаете с вашей моделью.

 from sklearn.model_selection import train_test_split
 from sklearn.feature_extraction.text import CountVectorizer
 from sklearn.feature_extraction.text import TfidfTransformer
 import pickle
 from sklearn.svm import LinearSVC 

 X_train, X_test, y_train, y_test = train_test_split(df['studentDetails'], df['studentId'], random_state = 0)
 count_vect = CountVectorizer().fit(X_train)
 X_train_counts = count_vect.transform(X_train)
 tfidf_transformer = TfidfTransformer().fit(X_train_counts)
 X_train_tfidf = tfidf_transformer.transform(X_train_counts) 
 classificationModel = LinearSVC().fit(X_train_tfidf, y_train) 
 filename = 'finalized_model.sav'
 pickle.dump(classificationModel, open(filename, 'wb'))
 pickle.dump(count_vect, open('count_vect, 'wb'))
 pickle.dump(tfidf_transformer, open('tfidf_transformer, 'wb'))

И теперь вы можете загрузить 3 из них, когда вы хотитеделать прогнозы:

from sklearn.feature_extraction.text import CountVectorizer
data_to_be_predicted="Alicia Scott is from United States"
filename = 'finalized_model.sav'
loaded_model = pickle.load(open(filename, 'rb'))
count_vect = pickle.load(open('count_vect', 'rb'))
result = loaded_model.predict(count_vect.transform([data_to_be_predicted]))
print(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...