代码之家  ›  专栏  ›  技术社区  ›  Chaitanya

在sklearn中对酸洗数据执行预测

  •  0
  • Chaitanya  · 技术社区  · 7 年前

    我试图通过在newsgroup20数据集上进行实验来学习。我的训练模型工作得很好,预测部分是我有问题的地方。现在我要做的是在一个函数中保存训练模型(使用pickle),并在另一个函数中对pickle数据进行预测。我找到的所有教程都告诉我如何保存和加载pickle文件,但没有告诉我如何提取X\u train和y\u 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 回复  |  直到 7 年前
        1
  •  5
  •   Andrey Lukyanenko    7 年前

    使用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']