Как сохранить модель классификации текста и проверить ее позже на новых невидимых данных - PullRequest
0 голосов
/ 12 июня 2019

Я новичок в Python и работаю над проблемой классификации двоичного текста. Я разработал модель классификации текста. Теперь я хочу сохранить эту обученную модель и перезагрузить ее снова, чтобы протестировать в новом файле тестовых данных.

Я пытался использовать pickle и joblib для этой задачи и некоторые другие предложенные здесь методы при переполнении стека, но не смог этого сделать. С помощью одного метода я успешно сохранил свою модель, но не смог протестировать ее в новом файле тестовых данных. Любая помощь будет высоко оценена. Извиняюсь, если я не смог объяснить проблему хорошо, поскольку я новичок в Python.

Dataset = pd.read_csv('trainingdata.csv')
my_types = ['Requirement','Non-Requirement']


X_train, X_test, y_train, y_test = model_selection.train_test_split(Dataset['description'],Dataset['types'],test_size=0.0, random_state=45)

tfidf_vect_ngram = TfidfVectorizer(analyzer='word', 
token_pattern=r'\w{1,}', ngram_range=(1,1), max_features=5000)
tfidf_vect_ngram.fit(Dataset['description'])
X_train_Tfidf =  tfidf_vect_ngram.transform(X_train)

logreg = LogisticRegression(n_jobs=1, C=1e5)
logreg.fit(X_train_Tfidf, y_train)

import pickle
filename = 'finalized_model.sav'
pickle.dump(logreg, open(filename, 'wb'))

loaded_model = pickle.load(open(filename, 'rb'))
result = loaded_model.score('testdata.csv')
print(result)    

Я тоже пробовал это.

with open('text_classifier', 'wb') as picklefile:  
    pickle.dump(logreg,picklefile)

with open('text_classifier', 'rb') as training_model:  
    model = pickle.load(training_model)

result = model.predict('testdata.csv')
print(result)

Я попробовал еще одно решение.

from keras.models import load_model

logreg.save('my_model.h5') 
del logreg

model = load_model('my_model.h5')
result=model('projectay.csv')
print(result)

Несмотря на то, что я попробовал несколько решений, я не смог получить требуемых результатов. Возможно, я совершаю грубую ошибку из-за своего меньшего опыта в машинном обучении и питоне. Может кто-нибудь, пожалуйста, укажите, где я делаю ошибку. Спасибо в ожидании.

1 Ответ

0 голосов
/ 12 июня 2019

Во-первых, модель логистической регрессии, которую вы обучили и сохранили, подходит для массива значений tfidf.Так почему же после загрузки модели вы прогнозируете файл .csv?Разве вы не должны сначала загрузить CSV-файл пандами и пропустить его через tfidf_vect_ngram, а затем передать массив / столбец загруженной модели?Так что вам нужно сохранить tfidf_vect_ngram.В основном

X_test_tfidf = tfidf_vect_ngram.transform(X_test) # X_test can be the entire column if you are loading from a separate file
result = loaded_model.predict(X_test_tfidf)
score = loaded_model.score(X_test_tfidf, y_test)

Если это не проблема, вы можете также опубликовать журнал ошибок / вывод вместо того, чтобы просто сказать, что он не работает.Таким образом, мы можем выяснить, где именно проблема.

...