赞
踩
大纲
1.背景介绍
2.文本特征提取
3.朴素贝叶斯主题分类实战
贝叶斯讲的是一种”逆向概率“,当我们没有上帝视角时,无法准确的预知一个事物本质的时候,可以依靠和事物本质相关的事件来进行推断。一个典型的问题:检测试剂呈阳性时,该患者真的患该病的几率有多大?
一些常见的术语:
朴素贝叶斯:假设每个输入变量是独立的,即P(C1C2C3|A)=P(C1|A)P(C2|A)P(C3|A)
贝叶斯分类模型涉及两种概率:每种类别的概率和每种类别下个属性取值的条件概率
模型的训练过程就是在训练集上计算上述概率值,然后测试时用相应的概率计算待分类样本所属各个类别的概率,以最大的概率进行分类。因此预测过程简单快捷高效。
对数据的处理:
离散数据:
取值类别有限或可数的特征,计算概率十分简单就是数数,计算在某一条件下某一个特征出现的概率即为求解条件概率。
连续数据
取值连续的特征,朴素贝叶斯在处理时默认各个连续特征都服从正态分布,根据训练数据计算每个特征的均值和方差,做测试集预测时,带入正态分布的概率密度公直接计算概率密度值作为该特征出现的概率。PS:如果最总的分类数有N中,那么对每个连续特征而言就有N套(均值,方差)分别对应不同的分类类别。
**
**
提取文本特征一般有三种常用的模型:词袋模型、TF-IDF、word2vector
简单介绍:
数据详情:train test stop三个文件夹
train和test文件夹中的目录为:
文本内容示例:
具体步骤:
import os
import jieba
import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn import metrics
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import BernoulliNB
def loadfile(filepath,leibie):
'''加载文件内容和标签'''
filelist = os.listdir(filepath)
content = []
label = []
for file in filelist:
with open(filepath+"/"+file,encoding='gb18030')as f:
content.append("".join(jieba.cut(f.read())))
label.append(leibie)
return content,label
wenbendir = ['train','test'] currentdir = os.getcwd() traincontent = [] trainlabel = [] testcontent = [] testlabel = [] for wenben in wenbendir:#['train','test'] # os.chdir(wenben) wenbenlist = os.listdir(wenben)#【女性,体育,文学,校园】 for leibie in wenbenlist: content,label=loadfile(wenben+"/"+leibie,leibie) if wenben=="train": traincontent += content trainlabel +=label elif wenben=='test': testcontent += content testlabel +=label os.chdir(currentdir)
with open('stop/stopword.txt',encoding='utf-8')as file:
stopwords = file.read().split("\n")
stopwords
tfidf = TfidfVectorizer(stop_words=stopwords,max_df=0.5)
traindata = tfidf.fit_transform(traincontent)
testdata = tfidf.transform(testcontent)
#多项式朴素贝叶斯
nb_model = MultinomialNB(alpha=0.001)
nb_model.fit(traindata,trainlabel)
predict_test = nb_model.predict(testdata)
print("多项式朴素贝叶斯文本分类的准确率为:",metrics.accuracy_score(predict_test,testlabel))
#bernoulli朴素贝叶斯
from sklearn.naive_bayes import BernoulliNB
ber_model = BernoulliNB(alpha=0.001)
ber_model.fit(traindata,trainlabel)
ber_predict = ber_model.predict(testdata)
print("bernoulli贝叶斯文本分类的准确率为:",metrics.accuracy_score(ber_predict,testlabel))
#高斯贝叶斯分类器
gauss_model = GaussianNB()
gauss_model.fit(traindata.toarray(),trainlabel)
gauss_predict = ber_model.predict(testdata.toarray())
print("GaussianNB贝叶斯文本分类的准确率为:",metrics.accuracy_score(gauss_predict,testlabel))
测试结果展示:
小结:完成了《数据分析实战45讲》关于贝叶斯算法的实战部分,这里小结一下sklearn中提供的三种贝叶斯模型:GaussianNB BernoulliNB MultinomialNB;高斯朴素贝叶斯适用于处理连续特征的情况,默认各个连续的特征服从正态分布,计算均值和方差;BernoulliNB适用于特征取值为0/1的情况,用于标识该特征是否出现;MultinomialNB适用于离散特征,符合多项式分布,特征取值为TF-IDF或者具体的出现次数等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。