Сохранение модели TfIdf и ее загрузка для проверки нового набора данных - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь сохранить векторизатор / модель TfIdf (не знаю, правильное ли это слово или нет), полученный после обучения набора данных и последующей загрузки сохраненной модели, чтобы соответствовать новому набору данных.Модель хранится и загружается с использованием pickle

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

def Savetfidf(df):
    vectorizer = TfidfVectorizer(min_df=0.0, analyzer="char", sublinear_tf=True, ngram_range=(1,2))
    X = pd.SparseDataFrame(vectorizer.fit_transform(df), columns = vectorizer.get_feature_names(), default_fill_value = 0)
    pickle.dump(vectorizer.vocabulary_, open("features.pkl", "wb"))
    return X

def Loadtfidf(df):
    vectorizer = TfidfVectorizer(min_df=0.0, analyzer="char", sublinear_tf=True, ngram_range=(1,2))
    vocabulary = pickle.load(open(feature, 'rb'))
    vectorizer.vocabulary_ = vocabulary
    X = pd.SparseDataFrame(vectorizer.transform(df), columns = vectorizer.get_feature_names(), default_fill_value = 0)
    return X

Я получаю сообщение об ошибке

"sklearn.exceptions.NotFittedError: idf vector not fit"

Насколько я знаю, он пытается сохранить целое 'X' отдельно, используя idf_ и vocabulary_.Но я просто хочу сохранить модель / векторизатор (не знаю), чтобы при следующей загрузке модели / векторизатора мне просто нужно было вызывать vectorizer.fit () для тестовых данных, не нужно использовать обучающие данныевызвать fit_transform ().Есть ли способ сделать это?

1 Ответ

0 голосов
/ 24 января 2019

Следуя инструкциям здесь , вы можете (не) выбрать выбранный объект vectorizer напрямую, и он позаботится о правильной (де) сериализации самостоятельно.

...