数据集:sklearn的新闻抓取器fetch_20newsgroups
预处理:删除标点符号,对文本单词进行统计,统计出所有单词(去除重复的),然后将这些单词作为特征向量,将行数作为维度。
① :分割数据集,分为训练集和测试集
② :使用TfidfVectorizer(文本特征提取)对文本进行特征向量转化(将文本转化成多维度的特征向量)
③ :初始化SVC模型,用分割好的训练数据,训练SVC模型
④ :用训练好的模型,预测测试集
⑤ :用svc自带的评估来评估模型,用classification_report对预测结果(分类器性能)评估
from sklearn.datasets import fetch_20newsgroups
news = fetch_20newsgroups(subset='all')
from string import punctuation
table = str.maketrans(' ',' ',punctuation)
st = [w.translate(table) for w in news.data]
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.25,random_state=33,stratify=news.target)
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfVectorizer,TfidfTransformer
from sklearn.metrics import classification_report
#运用tfidf来特征向量化
tfidf_filter_vec=TfidfVectorizer(max_df=0.045,binary=True,stop_words='english',ngram_range=(1,2),smooth_idf=True,sublinear_tf=True)
X_tfidf_filter_train = tfidf_filter_vec.fit_transform(X_train)
X_tfidf_filter_test = tfidf_filter_vec.transform(X_test)
#svc
from sklearn.svm import LinearSVC
svc=LinearSVC()
svc.fit(X_tfidf_filter_train,y_train)
svc_pred = svc.predict(X_tfidf_filter_test)
print('svc',svc.score(X_tfidf_filter_test,y_test))
SVC模型最终测试结果为0.941213921901528,比课本上运用朴素贝叶斯进行分类的结果高4%