1、貝葉斯定理(Bayes Theorem)
樸素貝葉斯分類(Naive Bayes Classifier)
貝葉斯分類算法,是統計學的一種分類方法,它是利用貝葉斯定理的概率統計知識,對離散型的數據進行分類的算法
2、貝葉斯算法的類型
sklearn包naive_bayes模塊
GaussianNB 高斯貝葉斯
BernoulliNB 伯努利貝葉斯
MultionmialNB 多項式貝葉斯 (需要知道具體每個特徵的數值大小)
一般應用於文本分類
3、實踐案例
import codecs
import os.path
# 根據文件建立字典
classDict={
'C000007': '汽車',
'C000008': '財經',
'C000010': 'IT',
'C000013': '健康',
'C000014': '體育',
'C000016': '旅遊',
'C000020': '教育',
'C000022': '招聘',
'C000023': '文化',
'C000024': '軍事'
}
rootDir = "D:\\DATA\\pycase\\number2\\5.2\\SogouC.mini\\Sample"
# 語料庫的搭建
classes=[]
filePaths=[]
fileContents=[]
for c in classDict.keys():
fileDir=os.path.join(rootDir,c)
for root,dirs,files in os.walk(fileDir):
for name in files:
filePath=os.path.join(fileDir,name)
classes.append(classDict[c])
filePaths.append(filePath)
f=codecs.open(filePath,'r','utf-8')
fileContent=f.read()
f.close()
fileContents.append(fileContent)
import pandas
# 創建數據框
corps=pandas.DataFrame({
'class':classes,
'filePath':filePaths,
'fileContent':fileContents
})
# 2 文本向量搭建,構建特徵值
import re
# 匹配中文的分詞
zhPattern=re.compile('[\u4e00-\u9fa5]+')
# 導入jieba分詞工具
import jieba
segments=[]
filePaths=[]
# 遍歷文件夾進行分詞,對corps文件進行處理
for index,row in corps.iterrows():
segments=[] # 初始化,避免詞彙累計導入下一個文件夾
filePath=row['filePath']
fileContent=row['fileContent']
segs=jieba.cut(fileContent)
for seg in segs:
if zhPattern.search(seg):
segments.append(seg)
filePaths.append(filePath)
row['fileContent']=" ".join(segments)
# stopword 自己根據自己的業務情況搭建詞庫
stopwords = pandas.read_csv(
"D:\\DATA\\pycase\\number2\\5.2\\StopwordsCN.txt",
encoding='utf8',
index_col=False,
quoting=3,
sep="\t"
)
# 導入向量方法,移除停用詞
from sklearn.feature_extraction.text import CountVectorizer
countVectorizer = CountVectorizer(
stop_words=list(stopwords['stopword'].values),
min_df=0, token_pattern=r"\b\w+\b"
)
textVector = countVectorizer.fit_transform(corps['fileContent'])
# 3對文本進行分類操作,利用貝葉斯多項式分類操作
from sklearn.naive_bayes import MultinomialNB
MNBModel = MultinomialNB()
MNBModel.fit(textVector, corps['class'])
MNBModel.score(textVector, corps['class']) # 貝葉斯分類的得分
# 4 對文本進行分類預測
newTexts = ["""
據介紹,EliteBook 840 G4是一款採用14英寸1080p屏幕的商務筆記本,
硬件配置方面,入門級的EliteBook 840 G4搭載Intel Core i3-7100處理器,
配備4GB內存和500GB機械硬盤,預裝Windows 10操作系統。
高端機型可選擇更大容量的內存和SSD固態硬盤。
機身四周提供了USB 3.0、USB-C、DisplayPort、15針迷你D-Sub,
支持藍牙4.2和802.11ac Wi-Fi。
整機重1.48千克。
"""]
for i in range(len(newTexts)):
newTexts[i] = " ".join(jieba.cut(newTexts[i])) # 遍歷文本進行分詞
newTextVector = countVectorizer.transform(newTexts) # 移除停用詞
MNBModel.predict(newTextVector)