机器学习朴素贝叶斯 SVC对新闻文本进行分类
朴素贝叶斯分类器模型(Naive Bayles)
Model basic introduction:
朴素贝叶斯分类器是通过数学家贝叶斯的贝叶斯理论构造的,下面先简单介绍贝叶斯的几个公式:
先验概率: P(X) or P(Y)
条件概率: P(X|Y)=P(XY)\P(Y) => P(XY)=P(X|Y)*P(Y) ①
后验概率: P(Y|X)=P(YX)\P(X) 结合①式可以推导=> P(Y|X)=P(X|Y)*P(Y)\P(X)
朴素贝叶斯分类器:它可以计算数据的每一个维度 被分到某一个类的概率。倘若一个数据有n个维度的特征,用X={x1,x2,x3,x4,x5,….,xn}来表示,类别有K个,用Y={y1,y2,y3,y4,y5,…,yk}来表示。那么X被分到i类的概率就可以用一个公式来表示:
P(Y=y(i) | X) = P(X | Y=y(i) ) *P( Y=y(i) ) \ P(X)
朴素贝叶斯的目的就是找到向量X属于最大概率的类别,所以 argmax P(Y|X)=argmaxP(x1,x2,x3,x4…|Y)*P(Y) 因为朴素贝叶斯的每个特征假设都是独立的,所以将每个特征进行单独计算。
利用SVC分类器对文本进行分类:
对文本单词进行统计,统计出所有单词(去除重复的),然后将这些单词作为特征向量,将行数作为维度。
① :分割数据集
② :使用特征向量化库对文本进行 特征向量转化(将文本转化成多维度的特征向量)
③ :初始化SVC模型,用分割好的训练数据,训练模型,使模型get到参数
④ :用训练好的模型,预测X_test
⑤ :用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