机器学习经典算法笔记之二:朴素贝叶斯
什么是朴素贝叶斯算法
朴素贝叶斯方法是一种以01概率的形式展现分类结果的方法,常适用于文本分类领域。通过运用贝叶斯公式,从而计算预测样本的target概率值。
(大白话:朴素贝叶斯=朴素+贝叶斯)
什么是贝叶斯
P(C|W)=P(W|C)*P( C)/P(W)
说明:在W条件下C发生的概率,可以采用在C条件下W发生的概率与C的概率乘积,再与W的概率求商。
(建议自行使用条件概率公式推导,一推就明白了)
什么是朴素
鉴于P(W)可能是一个多重条件即P(F1,F2,F3,…,Fn),此处引入“朴素的概念”,即各个指标F1,F2,…,Fn相互独立。
故有:P(F1,F2,…,Fn)=P(F1)*P(F2)…*P(Fn)
P(F1,F2,…,Fn|C)=P(F1|C)*P(F2|C)…*P(Fn|C)
实例:用朴素贝叶斯实现新闻文本分类
# 导入数据集
from sklearn.datasets import fetch_20newsgroups
# 导入分割数据集
from sklearn.model_selection import train_test_split
# 文本特征抽取
from sklearn.feature_extraction.text import TfidfVectorizer
# 朴素贝叶斯算法
from sklearn.naive_bayes import MultinomialNB
def bayes_news():
'''用朴素贝叶斯算法实现文本分类'''
# 1 获取数据
news = fetch_20newsgroups(subset="all")
# 2 划分数据
x_train,x_test,y_train,y_test = train_test_split(news.data,news.target)
# 3 特征工程:文本特征提取tfidf
transfer=TfidfVectorizer()
x_train=transfer.fit_transform(x_train)
x_test=transfer.transform(x_test)
# 4 朴素贝叶斯
estimator = MultinomialNB()
estimator.fit(x_train,y_train)
# 5 模型评估
score = estimator.score(x_test,y_test)
print(score)
if __name__ == '__main__':
print('朴素贝叶斯算法进行新闻文本分类')
bayes_news()
算法需要注意的细节
1、P(Fx|C)=0的处理方式
平滑处理之拉普拉斯系数P(FX|C)=(Ni+α)/(N+αm)
其中:
Ni/N表示原来处理前的值
α表示平滑系数
m表示特征值的个数
需要理清的概念
1、朴素贝叶斯用途
对先验概率的估计,后验概率
2、联合概率、条件概率、事件独立
事件独立做乘法
条件概率做除法
联合概率求交集
3、朴素贝叶斯使用场景
(1)训练数据集较大
(2)实例具有几个属性
(3)给定分类参数,描述实例的属性应该是条件独立的
(4)不要求有较高的分类精度