Я относительно новичок в области sk-learning и машинного обучения, поэтому прощаю любое возможное невежество.Я делаю модель для классификации активов на основе текстового описания (в Python).Существует только один предиктор (текст) и одна прогнозируемая (категория) переменная.Для меток, я делю на категории, их около 30, поэтому каждая из них представлена числом от 0 до 29. Для функций я использую оценку tf-idf.Моделирование и точность в порядке, и я сохраняю модель, используя дамп рассола.
Однако модель должна быть многократно используемой, поэтому она должна иметь возможность загружаться снова в какой-то момент времени, чтобы пометитьновый набор данных.Пожалуйста, ознакомьтесь с кодом для сохранения / загрузки модели ниже.
## Save the linear SVC model
filename = 'SVM_model.sav'
pickle.dump(model, open(filename, 'wb'))
## Load model and test prediction accuracy
tfidf = TfidfVectorizer(analyzer='word',sublinear_tf=True, min_df=3,
norm='l2', ngram_range=(1, 2), encoding='latin-1', stop_words='english')
testdf=pd.read_excel('learning_df.xlsx').tail(54068)
testdf['input']=testdf['item_description'].astype(str)+'-
'+testdf['category_name_client'].astype(str)
testdf=testdf[['input','category_id_D&P']].dropna()
testdf['factor']=testdf['category_id_D&P'].apply(lambda x: cat_dict[x])
loaded_model = pickle.load(open(filename, 'rb'))
X_test1=tfidf.fit_transform(testdf.input).toarray()
y_test1=testdf['factor']
result = loaded_model.score(X_test1, y_test1)
print(result)
Обратите внимание, что настройки векторизатора tfidf в точности совпадают с настройками обучения / проверки модели.Cat_dict - это начальная факторизация категорий, и здесь я просто проверяю, чтобы текстовые категории были преобразованы в те же числа, что и модель, на которой обучалась / проверялась.
Когда я попытался это сделать, я пришелк этой ошибке:
ValueError: X has 24008 features per sample; expecting 20012
, что понятно, потому что tf-idf нового набора данных не дает того же числа функций, что и первоначально использованный набор данных обучения / проверки.
Итак, яИнтересно, есть ли обходной путь для этого?Разве я не должен использовать tf-idf в первую очередь при обучении модели?Если нет, то каковы альтернативные способы выбора функций, которые впоследствии не привели бы к этой проблеме?
Заранее спасибо и еще раз извините, если я упускаю что-то очевидное.