优缺点

  • 优点:
    • 朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
    • 对缺失数据不太敏感,算法也比较简单,常用于文本分类。
    • 分类准确度高,速度快。
  • 缺点:
    • 由于使用了样本属性独立性的假设,所以如果样本属性有关联时效果不好。

联合概率和条件概率

联合概率

包含多个条件,且所有条件同时成立的概率。

记作: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相互独立的结果。

贝叶斯公式

注:w为给定文档的特征值(频数统计,预测文档提供),c为文档类别

公式可以理解为:

其中c可以是不同 类别

公式分为三部分:

  • P(C):每个文档类别的概率(某文档类别数/总文档数量)
  • P(W|C):给定类别下特征(被预测文档中出现的词)的概率
    • 计算方法:P(F1|C) = Ni/N(训练文档中去计算)
    • Ni为该词在C类别所有文档中出现的次数
    • N为所属类别C下文档所有词出现的次数和
  • P(F1,F2,…)预测文档中每个词的概率
示例

拉普拉斯平滑

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

方法:拉普拉斯平滑系数

sklearn朴素贝叶斯实现API:
sklearn.naive_bayes.MultinomialNB

算法案例

  • sklearn20类新闻分类
  • 20个新闻组数据集包含20个主题的18000个新闻组帖子

案例流程

  1. 加载20类新闻数据,并进行分割
  2. 生成文章特征词
  3. 朴素贝叶斯estimator流程进行预估
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 naviebayes():
    '''
    朴素贝叶斯进行文本分类
    :return: None
    '''
    # 获取数据
    news = fetch_20newsgroups(subset='all')
    # 进行数据分割  
    x_train,x_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.25)
    # 对数据集进行特征抽取
    tf = TfidfVectorizer()
    # 以训练集当中的词的列表进行每篇文章重要性统计
    x_train = tf.fit_transform(x_train)
    print(tf.get_feature_names())
    x_test = tf.transform(x_test)
    # 进行朴素贝叶斯算法的预测
    mlt = MultinomialNB(alpha=1.0)
    print(x_train.toarray())
    mlt.fit(x_train,y_train)
    y_predict = mlt.predict(x_test)
    print('预测的文章类别为:',y_predict)
    # 得出准确率
    print('准确率为:',mlt.score(x_test,y_test))
    return None

if __name__ == '__main__':
    naviebayes()
# 运行结果
nd', 'dependable', 'dependances', 'dependant', 'depended', 'dependence', 'dependencies', 'dependency',...
[[0.         0.         0.         ... 0.         0.         0.        ]
 [0.         0.         0.         ... 0.         0.         0.        ]
 [0.         0.02792651 0.         ... 0.         0.         0.        ]
 ...
 [0.         0.         0.         ... 0.         0.         0.        ]
 [0.         0.         0.         ... 0.         0.         0.        ]
 [0.         0.         0.         ... 0.         0.         0.        ]]
预测的文章类别为: [ 9 15  8 ... 14 15  1]
准确率为: 0.8361629881154499

发表回复