Выполнение прогноза в склеарне на маринованных данных

Я пытаюсь учиться, экспериментируя с набором данных newsgroup20. Моя тренировочная модель работает нормально, в части предсказания у меня есть проблема. Теперь я пытаюсь сохранить тренировочную модель (с использованием маринада) в одной функции и выполнить прогнозирование маринованных данных в другой функции. Все учебники, которые я нахожу, дают мне, как сохранять и загружать файлы pickle, но не как извлекать X_train и y_train. Было бы здорово, если бы кто-нибудь мог помочь. Вот мой код

def classifier(): 
    twenty_train = fetch_20newsgroups(subset='train', shuffle=True, random_state=42)
    X_train, X_test, y_train, y_test = train_test_split(twenty_train.data, twenty_train.target, test_size=0.4, random_state=0)

    naive_clf = Pipeline([('vect', CountVectorizer()),
                         ('tfidf', TfidfTransformer()),
                         ('clf', MultinomialNB()),
    ])
    naive_clf.fit(X_train, y_train)  
    filename = 'finalized_model.sav'
    pickle.dump(naive_clf, open(filename, 'wb'))


def predictions(): # need help in first 3 lines and last print statement

    loaded_model = pickle.load(open('finalized_model.sav', 'rb'))
    result = loaded_model.score(X_test, y_test)
    print(result)

    #parsing my file as string for prediction(works fine)
    with open("/home/ubuntu/Desktop/text_classifier/dataset/predict/file,txt", "r") as myfile:
        file=myfile.readlines()
        file = ''.join(file)

    print('belongs to class {} according to naive bayes'.format(twenty_train.target_names[loaded_model.predict([file])[0]]))`

1 ответ

Решение

Когда вы используете pickle для сохранения модели, вы сохраняете только саму модель, но не данные, которые использовались для обучения. Поэтому, если вы хотите загрузить данные с помощью pickle, вам нужно сохранить их отдельно. Например:

data = {'train': X_train, 'target': y_train}
with open('data.pkl', 'wb') as f:
    pickle.dump(data, f)

with open('data.pkl', 'rb') as f:
    data = pickle.load(f)
X_train = data['train']
y_train = data['target']
Другие вопросы по тегам