scikit-learn机器学习笔记——朴素贝叶斯算法

首页 » 算法 » 正文

朴素贝叶斯算法

贝叶斯公式

P

(

C

W

)

=

P

(

W

C

)

P

(

C

)

P

(

W

)

P(C /mid W)=/frac{P(W /mid C) P(C)}{P(W)}

P(CW)=P(W)P(WC)P(C)
注:w为给定文档的特征值(频数统计,预测文档提供),c为文档类别
公式可以理解为:

P

(

C

F

1

,

F

2

,

)

=

P

(

F

1

,

F

2

,

C

)

P

(

C

)

P

(

F

1

,

F

2

,

)

P(C /mid F 1, F 2, /ldots)=/frac{P(F 1, F 2, /ldots /mid C) P(C)}{P(F 1, F 2, /ldots)}

P(CF1,F2,)=P(F1,F2,)P(F1,F2,C)P(C)
其中c可以是不同类别。

公式分为三个部分:

  • P

    (

    C

    )

    :

    P(C):

    P(C): 每个文档类别的概率(某文档类别词数 / 总文档词数)。

  • P

    (

    W

    C

    )

    P(W /mid C)

    P(WC) : 给定类别下特征(被预测文档中出现的词)的概率
    计算方法:

    P

    (

    F

    1

    C

    )

    =

    N

    i

    /

    N

    P(F 1 /mid C)=N i / N

    P(F1C)=Ni/N (训练文档中去计算)。

    N

    i

    N i

    Ni 为该F1词在C类别所有文档中出现的次数。

    N

    N

    N为所属类别C下的文档所有词出现的次数和。

  • P

    (

    F

    1

    ,

    F

    2

    ,

    )

    P(F 1, F 2, /ldots)

    P(F1,F2,) 预测文档中每个词的概率。

拉普拉斯平滑

P

(

F

1

C

)

=

N

i

+

α

N

+

α

m

P(F 1 /mid C)=/frac{N i+/alpha}{N+/alpha m}

P(F1C)=N+αmNi+α

α

/alpha

α 为指定的系数一般为1,m为训练文档中统计出的特征词个数

朴素贝叶斯分类优缺点

优点:
• 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
• 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
• 分类准确度高,速度快。

缺点:
• 需要知道先验概率P(F1,F2,…|C),因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。

sklearn朴素贝叶斯实现API

  • sklearn.naive_bayes.MultinomialNB

MultinomialNB

  • sklearn.naive_bayes.MultinomialNB(alpha = 1.0)
    • 朴素贝叶斯分类
    • alpha:拉普拉斯平滑系数

分类模型评估

• estimator.score()
• 一般最常见使用的是准确率,即预测结果正确的百分比

混淆矩阵

  在分类任务下,预测结果(Predicted Condition)与正确标 记(True Condition)之间存在四种不同的组合,构成混淆 矩阵(适用于多分类)。
scikit-learn机器学习笔记——朴素贝叶斯算法

精确率(Precision)与召回率(Recall)

精确率:预测结果为正例样本中真实为正例的比例(查准率)

scikit-learn机器学习笔记——朴素贝叶斯算法
召回率:真实为正例的样本中预测结果为正例的比例(查全率,对 正样本的区分能力)
scikit-learn机器学习笔记——朴素贝叶斯算法
F1-score,反映了模型的稳健型

F

1

=

2

T

P

2

T

P

+

F

N

+

F

P

=

2

 Precision 

 Recall 

 Precision 

+

 Recall 

F 1=/frac{2 T P}{2 T P+F N+F P}=/frac{2 /cdot /text { Precision } /cdot /text { Recall }}{/text { Precision }+/text { Recall }}

F1=2TP+FN+FP2TP= Precision + Recall 2 Precision  Recall 

分类模型评估API

  • sklearn.metrics.classification_report

  • sklearn.metrics.classification_report(y_true, y_pred, target_names=None)
    • y_true:真实目标值
    • y_pred:估计器预测目标值
    • target_names:目标类别名称
    • return:每个类别精确率与召回率

朴素贝叶斯算法实例-sklearn20类新闻分类

  20个新闻组数据集包含20个主题的18000个新闻组帖子
代码示例:

from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import classification_report
from sklearn.datasets import fetch_20newsgroups
from sklearn.model_selection import train_test_split


def naive_bayes():
    news = fetch_20newsgroups()

    # 进行数据分割
    X_train, X_test, y_train, y_test = train_test_split(news.data, news.target)

    # 对数据集进行特征抽取
    td = TfidfVectorizer()

    # 以训练集当中的词的列表进行每篇文章重要性统计['a','b','c','d']
    X_train = td.fit_transform(X_train)

    print(td.get_feature_names())

    X_test = td.transform(X_test)

    #实例化贝叶斯
    nb = MultinomialNB(alpha=1)

    nb.fit(X_train, y_train)

    y_predict = nb.predict(X_test)

    print("预测准确率为:", nb.score(X_test, y_test))

    classification_report(y_test, y_predict, target_names=news.target_names)


if __name__ == '__main__':
    naive_bayes()

未经允许不得转载:作者:1495-冯同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《scikit-learn机器学习笔记——朴素贝叶斯算法》 发布于2021-02-07

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录