智健blog

机器学习朴素贝叶斯 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

  

 

posted @ 2019-11-01 10:42  智健  阅读(808)  评论(0编辑  收藏  举报