朴素贝叶斯算法

何谓朴素?特征与特征之间相互独立

应用场景

  • 文本分类
  • 单词作为特征

优点

  • 分类准确度高,速度快
  • 对缺失值不敏感

缺点

  • 样本相互独立,若样本有关联则效果不佳

联合概率、条件概率与相互独立#

  • 联合概率:包含多个条件,且所有条件同时成立
  • 条件概率:事件A在另一个事件B已经发生的条件下的发生概率
  • 相互独立:P(A,B)=P(A)P(B)

贝叶斯公式#

基本公式#

  • 在条件W的条件下发生条件C的概率为P(C|W)

扩展公式#

具体计算方式详见概率论知识

拉普拉斯平滑系数#

防止计算出的分类概率为0

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

贝叶斯算法的API#

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

具体应用#

  1. 获取数据
  2. 划分数据集
  3. 特征工程 文本特征抽取
  4. 朴素贝叶斯预估器流程
  5. 模型评估
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
def nb_news():
"""
用朴素贝叶斯算法对新闻进行分类
:return:
"""
# 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)模型评估
# 方法1:直接比对真实值和预测值
y_predict = estimator.predict(x_test)
print("y_predict:\n", y_predict)
print("直接比对真实值和预测值:\n", y_test == y_predict)

# 方法2:计算准确率
score = estimator.score(x_test, y_test)
print("准确率为:\n", score)

return None