文本表示方法
采用词袋模型进行文本表示,使用sklearn中CountVectorizer函数
from sklearn.feature_extraction.text import TfidfVectorizer
corpus = [
'This is the first document.',
'This is the second second document.',
'And the third one.',
'Is this the first document?',
]
vectorizer= CountVectorizer(max_features=3)
X=vectorizer.fit_transform(corpus) # fit_transform 数据预处理
print(X.toarray())
print(vectorizer.get_feature_names()) #输出所有文本的关键字
同时,也可以使用sklearn中TfidfVectorizer函数
vectorizer= TfidfVectorizer(ngram_range=(1,3),max_features=3000)
ngram_range(min,max)为n-gram的大小。
基于机器学习的文本分类
首先采用教程给出的线性回归进行分类,由于电脑性能,选用1500条数据,1000条训练,500条测试。
import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.linear_model import RidgeClassifier
from sklearn.metrics import f1_score
train_df = pd.read_csv(r"E:\data\datawhale\train_set.csv", sep='\t', nrows=1500)
vectorizer = CountVectorizer(max_features=3000)
train_test = vectorizer.fit_transform(train_df['text'])
clf = RidgeClassifier()
clf.fit(train_test[:1000], train_df['label'].values[:1000])
val_pred = clf.predict(train_test[1000:])
print(f1_score(train_df['label'].values[1000:], val_pred, average='macro'))
得出F1值为0.64
然后采用xgboost训练,得出f1值为0.68,对比线性回归有一定提升。
from xgboost import XGBClassifier
model = XGBClassifier() # 载入模型(模型命名为model)
model.fit(train_test[:1000], train_df['label'].values[:1000]) # 训练模型(训练集)
y_pred = model.predict(train_test[1000:]) # 模型预测(测试集),y_pred为预测结果
print(f1_score(train_df['label'].values[1000:], y_pred, average='macro'))