机器学习经典算法笔记之二:朴素贝叶斯

机器学习经典算法笔记之二:朴素贝叶斯

  • 什么是朴素贝叶斯算法
    • 实例:用朴素贝叶斯实现新闻文本分类
    • 算法需要注意的细节
      • 1、P(Fx|C)=0的处理方式
    • 需要理清的概念
      • 1、朴素贝叶斯用途
      • 2、联合概率、条件概率、事件独立
      • 3、朴素贝叶斯使用场景

什么是朴素贝叶斯算法

朴素贝叶斯方法是一种以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)不要求有较高的分类精度

你可能感兴趣的:(机器学习十大经典算法,机器学习,算法,sklearn)