朴素贝叶斯算法

朴素贝叶斯算法 👉 naive_bayes.MultinomialNB

朴素贝叶斯算法,主要用于分类. 例如:需要对垃圾邮件进行分类

 

分类思想 , 如何分类 , 分类的评判标准???

 

 

 

 预测文章的类别概率, 预测某个样本属于 N个目标分类的相应概率,找出最大的可能性.也就是找出准确率最高的.

 


 

概率基础 :

  概率定义为 一件事情发生的可能性. 例如: 扔一枚硬币,结果是头像朝上. 又或者 明天是晴天

  有这样一个样本数据,要我们算出如下结果.

 

 

  1. 女神喜欢的概率? (4/7)
  2. 职业是程序员, 并且体型匀称的概率? (3/7*4/7)
  3. 在女神喜欢的条件下,职业是程序员的概率? (2/4)
  4. 在女神喜欢的条件下,职业是产品, 体重是超重的概率? (2/4*1/4=1/8)

联合概率和条件概率:

  联合概率 :

    包含多个条件,且所有条件同时成立的概率,记作: P(A,B) ; P(A,B)=P(A)P(B)

  条件概率:

    事件A在另外一个事件B已经发生条件下的发生概率,记作P(A|B);P(A1,A2|B)=P(A1|B)P(A2|B)

    此条件概率的成立, 是由于A1,A2相互独立的结果. (即所有特征之间是条件独立的)


朴素贝叶斯介绍

  • 前提就是  特征独立
  • 最常用在文档分类的问题中. P(科技|文档), P(娱乐|文档)...

贝叶斯公式:

 

 

 公式分为三部分:

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

  P(W|C) : 给定类别下的特征 (被预测文档中出现的词) 的概率.

计算方法:

  P(F1|C) = Ni/N (训练文档中去计算)

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

  N 为所属类别C下的文档所有词出现的次数和P(F1,F2,...)预测文档中每个词的概率.

 


 

 

 

从上面的例子我们得到娱乐概率为0, 这是不合理的. 如果词频列表里面有很多出现次数都为0. 很可能计算结果都为零!!!

解决方法 : 拉普拉斯平滑

 

 

 添加了拉普拉斯平滑系数,那么值会变大,但是不影响结果并改变了结果为0的值不为零.


sklearn 朴素贝叶斯API

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

 

案例 :案例 :案例 :案例 :

 

# 案例: sklearn 20类新闻分类
# 20个新闻组数据集包含20个主题的18000个帖子

# 流程
# 1. 加载20类新闻数据,并进行分割
# 2. 生成文章特征词
# 3. 朴素贝叶斯estimator 流程进行预估

# 代码
from sklearn.datasets import fetch_20newsgroups   # 20类新闻数据
from sklearn.model_selection import train_test_split   # 数据分割API
from sklearn.feature_extraction.text import TfidfVectorizer  # 特征抽取API
from sklearn.naive_bayes import MultinomialNB  # 朴素贝叶斯API
# 1.获取所有数据 news = fetch_20newsgroups(subset='all') # 2.进行数据分割 x_train, x_test, y_train, y_test = train_test_split(news.data, news.target, test_size=0.25)
# 👆 先分割是因为不知道要预测哪些值,所以先分割
# 3.对数据集进行特征抽取 tf = TfidfVectorizer() # 以训练集当中的词的列表进行每篇文章重要性统计 x_train = tf.fit_transform(x_train) x_test = tf.transform(x_test) # 4.进行朴素贝叶斯算法 bys = MultinomialNB(alpha=0.1) bys.fit(x_train, y_train) # 5.进行预测 y_predict = bys.predict(x_test) print("预测的文章类别为:", y_predict) print("准确率为:", bys.score(x_test, y_test))

 

 

 


 

 

朴素贝叶斯算法总结:

优点:

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

缺点:

  • 由于使用样本独立性假设,所以 如果样本属性有关联时 其效果不好。
  • 因为是使用训练集中的数据进行统计词,所以训练集的准确度对结果的影响很大。
posted @ 2019-12-22 21:43  逍遥大帝  阅读(774)  评论(0编辑  收藏  举报