簡體   English   中英

如何使用預訓練模型對新數據進行分類 - Python 文本分類(NLTK 和 Scikit)

[英]How to classify new data using a pre-trained model - Python Text Classification (NLTK and Scikit)

我對文本分類非常陌生,我正在嘗試根據一些預定義的主題對由 twitter 評論組成的數據集的每一行進行分類。

我在 Jupyter Notebook 中使用下面的代碼來構建和訓練帶有訓練數據集的模型。 我選擇在帶有 NLTK 和 Scikit 的 Python 中使用有監督的方法,因為無監督的方法(如 LDA)並沒有給我帶來好的結果。

到目前為止,我遵循了這些步驟:

  1. 手動分類訓練數據集的主題;
  2. 將訓練數據集應用到下面的代碼並對其進行訓練,從而獲得了 aprox 的准確度。 82%。

現在,我想使用這個模型來自動對另一個數據集(即我的測試數據集)的主題進行分類 大多數帖子只涵蓋訓練部分,因此對於新手來說,了解如何獲得訓練好的模型並實際使用它是非常令人沮喪的。

因此,問題是:使用下面的代碼,我現在如何使用經過訓練的模型對新數據集進行分類?

我感謝您的幫助。

這個教程很好,我用它作為下面代碼的參考: https ://medium.com/@ishan16.d/text-classification-in-python-with-scikit-learn-and-nltk-891aa2d0ac4b

我的模型構建和訓練代碼:

#Do library and methods import

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
from nltk.tokenize import RegexpTokenizer
from nltk import WordNetLemmatizer
from nltk.stem import PorterStemmer
from nltk.sentiment.vader import SentimentIntensityAnalyzer
import nltk as nltk
from sklearn.feature_extraction.text import CountVectorizer, TfidfVectorizer
from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV
from sklearn.pipeline import Pipeline
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.svm import SVC
from sklearn.naive_bayes import MultinomialNB
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
import regex as re
import requests


# Import dataset

df = pd.read_csv(r'C:\Users\user_name\Downloads\Train_data.csv', delimiter=';')


# Tokenize

def tokenize(x):
 tokenizer = RegexpTokenizer(r'\w+')
 return tokenizer.tokenize(x)
df['tokens'] = df['Tweet'].map(tokenize)


# Stem and Lemmatize

nltk.download('wordnet')
nltk.download('omw-1.4')

def stemmer(x):
 stemmer = PorterStemmer()
 return ' '.join([stemmer.stem(word) for word in x])
 
def lemmatize(x):
 lemmatizer = WordNetLemmatizer()
 return ' '.join([lemmatizer.lemmatize(word) for word in x])
df['lemma'] = df['tokens'].map(lemmatize)
df['stems'] = df['tokens'].map(stemmer)


# set up feature matrix and target column

X = df['lemma']
y = df['Topic']
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state = 13)


# Create out pipeline with a vectorizer and our naive Bayes classifier

pipe_mnnb = Pipeline(steps = [('tf', TfidfVectorizer()), ('mnnb', MultinomialNB())])


# Create parameter grid

pgrid_mnnb = {
 'tf__max_features' : [1000, 2000, 3000],
 'tf__stop_words' : ['english', None],
 'tf__ngram_range' : [(1,1),(1,2)],
 'tf__use_idf' : [True, False],
 'mnnb__alpha' : [0.1, 0.5, 1]
}


# Set up the grid search and fit the model

gs_mnnb = GridSearchCV(pipe_mnnb,pgrid_mnnb,cv=5,n_jobs=-1)
gs_mnnb.fit(X_train, y_train)


# Check the score

gs_mnnb.score(X_train, y_train)
gs_mnnb.score(X_test, y_test)


# Check the parameters

gs_mnnb.best_params_


# Get predictions

preds_mnnb = gs_mnnb.predict(X)
df['preds'] = preds_mnnb


# Print resulting dataset

print(df.shape)
df.head()

似乎在訓練之后,您只需要直接使用網格搜索器進行驗證步驟,在 sklearn 庫中,網格搜索器也在訓練后用作采用最佳超參數的模型。 所以拿一個 X 這是你想要評估和運行的東西

preds_mnnb = gs_mnnb.predict(X)

preds_mnnb 應該包含您期望的內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM