机器学习分类算法之朴素贝叶斯算法
作者头像
  • IoTF物博会
  • 2019-12-16 09:07:45 8

朴素贝叶斯算法是机器学习中的一个重要算法。本文将介绍其原理及实际应用。

概率基础

定义

概率是指某一事件发生的可能性。例如,投掷一枚硬币,结果正面朝上的概率是50%。

联合概率和条件概率

联合概率是指多个条件同时成立的概率,记作 P(A, B)。其特性为 P(A, B) = P(A) * P(B)。

条件概率是指在某一事件B已经发生的情况下,事件A发生的概率,记作 P(A|B)。其特性为 P(A1, A2|B) = P(A1|B) * P(A2|B)。注意,这里的联合事件和条件事件的前提是 A1 和 A2 互相独立,即它们之间互不影响。

案例示例

  1. 女神喜欢的概率是多少? 解答:P(喜欢) = 4/7

  2. 职业是程序员并且体型匀称的概率是多少? 解答:由于各条件相互独立,所以是联合概率 P(程序员, 匀称) = P(程序员) * P(匀称) = 3/7 * 4/7 = 12/49

  3. 在女神喜欢的条件下,职业是程序员的概率是多少? 解答:P(程序员|喜欢) = 2/4 = 1/2

  4. 在女神喜欢的条件下,职业是产品并且体重超重的概率是多少? 解答:P(产品, 超重|喜欢) = P(产品|喜欢) * P(超重|喜欢) = 1/2 * 1/4 = 1/8

贝叶斯公式

贝叶斯公式

贝叶斯公式用于根据已知条件预测未知事件的发生概率。公式如下:

[ P(C|W) = frac{P(W|C) cdot P(C)}{sum{i} P(W|Ci) cdot P(C_i)} ]

其中,W 是给定文档的特征值,C 是文档类别。

贝叶斯公式的简化

假设 W 是被预测文档中的特征词,C 是文档类别。公式分为三部分: 1. P(C):每个文档类别的概率,即某文档类别词数 / 总文档词数。 2. P(W|C):给定类别下特征词的概率,即在 C 类别所有文档中出现的次数 / 所属类别 C 下的所有词出现的次数和。

示例

假设有一篇被预测的文档,出现了“影院”、“支付宝”、“云计算”等词语。这些词可能属于“科技”或“文娱”两类。

  1. 计算“科技”的概率: [ P(text{影院, 支付宝, 云计算}|text{科技}) cdot P(text{科技}) = (8/100) cdot (20/100) cdot (63/100) cdot (100/221) = 0.00456109 ]

  2. 计算“文娱”的概率: [ P(text{影院, 支付宝, 云计算}|text{文娱}) cdot P(text{文娱}) = (56/121) cdot (15/121) cdot (0/121) cdot (121/221) = 0 ]

由于某些词频为零,导致结果不合理。解决方法是采用拉普拉斯平滑系数。

拉普拉斯平滑系数

通常将平滑系数 a 设为 1,m 为训练文档中统计出的特征词个数。

示例中,“文娱”的概率修正为: [ ((56+1)/(121+14)) cdot ((15+1)/(121+14)) cdot ((1+0)/(121+14)) cdot ((121+1)/(221+14)) = 0.001 ]

实际案例

朴素贝叶斯案例流程

  1. 加载 20 新闻组数据,并进行分割。
  2. 生成文章特征词。
  3. 使用朴素贝叶斯算法进行预测。

```python def naivebayes(): """ 使用朴素贝叶斯进行文本分类 :return: None """ news = fetch20newsgroups(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)
mlt.fit(x_train, y_train)

y_predict = mlt.predict(x_test)

print("预测的文章类别为:", y_predict)

# 准确率
print("准确率为:", mlt.score(x_test, y_test))

# 分类报告
print("每个类别的准确率和召回率:", classification_report(y_test, y_predict, target_names=news.target_names))

return None

```

该算法的准确率为 84.02%,相比 K-近邻算法有了显著提升。朴素贝叶斯算法没有超参数,优化主要依赖于样本数量和质量。

后续计划

未来将继续推出更多关于机器学习的文章,感兴趣的读者可以关注我的文章,及时了解人工智能领域的最新进展。

    本文来源:图灵汇
责任编辑: : IoTF物博会
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
叶斯算法朴素机器学习分类
    下一篇