贝叶斯算法 - 学习笔记

本文深入探讨了贝叶斯算法的概念和用途,通过实例解释了如何使用贝叶斯公式解决概率问题,如拼写纠错和邮件分类。案例分析展示了在垃圾邮件识别和产品经理体重问题上的应用,强调了在数据不足时朴素贝叶斯算法的重要性。文章还提供了Python代码实现邮件分类的贝叶斯模型,并讨论了特征独立性的假设。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

贝叶斯

贝叶斯简介
总结的概括:贝叶斯算法,其实它就是解决一个关于概率的问题。

为什么使用贝叶斯呢?
现实世界本身就是不确定的,人类的观察能力是有局限性的;我们日常所观察到的只是事物表面的结果,因此我们需要提供一个猜测。

贝叶斯概述
写这篇文章的时候,我参考了很多博客和文章,大多都是以生动的例子直接引入问题,我也考虑到这点,为了形象的表达贝叶斯算法,直接以故事图例的方式来阐述贝叶斯算法。在此之前,先了解一下正向概率和逆向概率:
正向概率:假设袋子里面有N个白球,M个黑球,你伸手进去摸一把,摸出黑球的概率是多大。
逆向概率:如果我们事先并不知道袋子里面黑白球的比例,而是闭着眼睛摸出一个或者几个球,观察这些取出来的球的颜色之后,那么我们可以就此对袋子里面的黑白球的比例做出什么样的推测。
1 问题导入
图1
讨论:假设学校里面的总人数为 U 个,其中男生占60%,女生占40%。另外男生都穿长裤,女生则一半穿长裤一半穿裙子。那么可得
在这里插入图片描述
穿长裤的男生的人数是: U * P(Boy) * P(Pants|Boy) = U × 60% × 1 = 0.6U
在这里插入图片描述
穿长裤的女生的人数是: U * P(Girl) * P(Pants|Girl) = U × 40% × 1/2 = 0.2U

问题:穿长裤的人里面女生占比多少呢?
首先计算穿长裤人数的总数:
在这里插入图片描述
穿长裤总人数: U * P(Boy) * P(Pants|boy) + U * P(Girl) * P(Pants|Girl) = 0.6U + 0.2U = 0.8U
已知穿长裤的总人数,穿长裤的女生占比为:
在这里插入图片描述
女生占穿长裤的总数概率为:1/4

到这里可能很多小伙伴感觉这个例子也太太太简单了,哈哈,为什么这么简单的式子我都配了公式的相关图片,仔细看上图最后的公式:容易发现公式的分子和分母可以约去总人数 U ,也就是和校园内人的总数是无关的,可以消去。消去后得到:
在这里插入图片描述
根据上式,就可以得到最终的贝叶斯公式了。
在这里插入图片描述
总结:贝叶斯公式我们知道了,贝叶斯算法其实就是解决生活中的概率问题,接下来,我们就从实际的案例进行分析,感受贝叶斯算法。

2 案例分析(1)
这是一个 ‘拼写数字纠正’ 的实例:
问题:我们看到用户输入了一个不再字典中的单词,我们需要去猜测:这个家伙到底真正想输入的单词是什么?(猜测用户到底输入的是什么单词,就涉及到概率,比如用户输入H,他可能接下来输入:ello,也可能输入:i,我们通过贝叶斯算法模型预测,假如用户输入的 Hello 概率为70%,输入 Hi 的概率为50%,那么我们就可以断定他要输入 Hello)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可得贝叶斯公式为:
在这里插入图片描述
先验概率:
在这里插入图片描述
模型比较理论:
最大似然估计:最符合观测数据的(即P(D|h)最大的)最有优势
奥卡姆剃刀:P(h)较大的模型有较大的优势
掷一个硬币,观察到的是“正”,根据最大似然估计的原理,我们应该猜测这枚硬币掷出“正”的概率是1,因为这个才能最大化P(D|h)的那个猜测。

如果平面上有N个点,近似构成一条直线,但绝不精确地位于一条直线上。这时我们既可以用直线来拟合(模型1),也可以用二阶多项式(模型2)拟合,也可以用三阶多项式(模型3),特别地,用N-1阶多项式便能够保证肯定能完美通过N个数据点。(到这里肯定还有很多小伙伴看的云里雾里,那么我们接下来用最经典的例子来说明贝叶斯算法)

3 案例分析-邮件分类(2)

问题:给定一封邮件,判定邮件是否属于垃圾邮件
D表示这封邮件,注意D由N个单词组成。我们用 h+ 来表示垃圾邮件,h- 表示正常邮件,根据贝叶斯公式则有:
在这里插入图片描述
先验概率 : P(h+) 和 P(h-) 这两个先验概率都是很容易求出来的(如果不理解先验概率,也可以说他们的概率各为 1/2 ,应该很好理解),然后只需要计算一个邮件库里面垃圾邮件和正常邮件的比例就行了。

D 里面含有N个单词d1,d2,d3……dn,那么 : P(D|h+)= P(d1,d2,d3……dn | h+),p(d1,d2,d3….dn | h+)就是说在垃圾邮件当中出现跟我们目前这封邮件一模一样的一封邮件的概率是多大! p(d1,d2,d3….dn|h+)公式又可以变换为:
在这里插入图片描述可以理解为:
在这里插入图片描述
这里说到的朴素贝叶斯下面的案例分析会说到,其实朴素贝叶斯在这里用到的核心就是特征与特征之间是相互独立的,所以拿上式来说,就可以把若干的特征分开来求概率,可能到这里贝叶斯算法有些朋友还不是很明白,这里要说一下,比如:P(D | h+)是不是直接可以根据P(D) 和 P(h+) 求得呢?这是不能的,贝叶斯算法中的概率值全部都是大量样本中统计出的概率值,是根据实际得来的。所以在应用贝叶斯算法解决问题的前提就是,你要有数据集才可以。

4 “垃圾邮件分类”代码实现

import re,collections
def words(text):return re.findall('[a-z]+',text.lower())
def train(features):
    model = collections.defaultdict(lambda:1)
    for f in features:
        model[f] += 1
    return model
NWORDS = train(words(open('big.txt').read()))

alphabet = 'abcdefghijklmnopqrstuvwxyz'
def editsl(word):
    n = len(word)
    return set([word[0:i]+word[i+1:] for i in range(n)]+
               [word[0:i]+word[i+1]+word[i]+word[i+2] for i in range(n-1)]+
               [word[0:i]+c+word[i+1:] for i in range(n) for c in alphabet]+
               [word[0:i]+c+word[i:] for i in range(n+1) for c in alphabet])
def know_edits2(word):
    return set(e2 for e1 in editsl(word) for e2 in editsl(e1) if e2 in NWORDS)

def known(words):return set(w for w in words if w in NWORDS)

def correct(word):
    candidates = known([word]) or known(editsl(word)) or know_edits2(word) or [word]
    return max(candidates,key=lambda w:NWORDS[w])
correct('morw')#输出

5 案例分析(3)
已知小明是产品经理,体重超重,是否会被女神喜欢? (这是一个二分类问题)
在这里插入图片描述
问题:
分析:程序员的概率:P(程序员) = 3/7 匀称的概率:P(匀称) = 4/7

  1. 女神喜欢的概率? 解:根据表中7个样本数,不难发现 P(喜欢) = 4/7
  2. 职业是程序员并且体型匀称的概率? 解:在7个样本中职业是程序员并且体型匀称的样本只有一个,P(程序员,匀称) = 1/7
  3. 在女神喜欢的条件下,职业是程序员的概率? 解:此时只看喜欢的样本,不看不喜欢的样本,P(程序员 | 喜欢) = 2/4 = 1/2
  4. 在女神喜欢的条件下,职业是程序员,体重是超重的概率? 解:P(程序员,超重 | 喜欢) = 1/4

根据以上的分析,都很容易计算出它的概率分布,对于一个模型,要解决的问题而言,我们不是根据已有的数据分析已经存在的情况,而是根据已有的数据去预测未知的情况,这才是机器学习要做的事情,那么我们根据样本怎么能够知道:职业是产品经理,体型超重,是否会被女神喜欢的概率为多少呢?
根据问题,应用贝叶斯计算公式可得:
在这里插入图片描述
根据贝叶斯公式,分析问题可得:
在这里插入图片描述
分子、分母可得:
在这里插入图片描述
总结:如果是贝叶斯,这里我理解就是针对这个问题,职业是产品经理然后体型超重,在文本中没有出现,概率就是0,这个结果是不是太绝对了,主要原因就是样本数太少,所以引出了朴素贝叶斯算法。朴素贝叶斯算法的核心就是:特征和特征之间是相互独立的。那么就有:
在这里插入图片描述
产品经理这个特征和产品的特征相互独立,这样就可以根据贝叶斯算法公式得:
P(产品,超重) = P(产品) * P(超重) = 2/7 * 3/7 = 6/49
P(产品,超重 | 喜欢) = P(产品 | 喜欢) * P(超重 | 喜欢) = 1/2 * 1/4 = 1/8

贝叶斯公式可得职业是产品经理,体型超重,被女神喜欢的概率为:
P(喜欢 | 产品,超重) = P(产品,超重 | 喜欢) * P(喜欢) / P(产品,超重) = 1/8 * 4/7 / 6/49 = 4/56 / 6/49 = 0.58333~

综上:朴素贝叶斯算法原理:朴素 + 贝叶斯 = 假定特征与特征之间是相互独立的 + 贝叶斯公式

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勇敢牛牛@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值