8、python多項式貝葉斯文本分類(完整)

1、貝葉斯定理(Bayes Theorem)

P(A|B)=P(A\cap B)/P(B)=P(B|A)P(A)/P(B)

樸素貝葉斯分類(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)          
            
            
            

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章