# 朴素贝叶斯模型:简单背后蕴含的有效

回顾一下

基于逻辑回归的传统机器学习与深度学习(主线)

所以之前讲解逻辑回归时非常的细,因为很重要,作为深度学习的基础

深度学习理解为是个大脑逻辑回归理解为神经元

所以在逻辑回归主要研究神经元的构造,在深度学习则研究神经元之间的一种联系

image-20220318133806501

w1x1+w2x2+w3x3+w0这个式子有何缺点?

image-20220318134323068

比如中X(x1,x2,x3)是相亲市场评测数据,用来判别人在相亲市场的受欢迎程度

x1=身高x2=体重x3=收入这里需要很多的数据,难免会有一项数据缺失,实际场景中数据不全的问题

比如:x2这一项根本不知道数据是什么,那么逻辑回归是不是就没办法使用了?那么有什么解决方案吗?

这就要探究逻辑回归最大的问题是耦合,即f(x1,x2,x3)不能把这些x单独拆出来,如下图,耦合在一起了

image-20220318135223564

所以说目的是解耦

那么就要探究一下,逻辑回归耦合的根本原因是什么?

答:高斯分布即正态分布

分类最终是要求解这个概率P(y=1|x)

根据贝叶斯公式: image-20220318142151797

最终代数运算得出: image-20220318142258485

前面讲解到P(x|y=1)P(x|y=0)是个正态分布

多元正态分布

image-20220318142553920

根本原因:可以看出,是多元正态分布,将P(x1,x2,x3)耦合在一起了,导致逻辑函数中也是耦合的

所以要想解耦就得从正态分布上解耦

开始解耦:

最简单的方法是假设x1x2相互独立,那么P(x1,x2)=P(x1)*P(x2)

因此这样就将式子分解耦开来了,只要独立,即便不是正态分布也可以

image-20220318143330006

小结一下:

  1. 数据缺失导致逻辑回归不能使用
  2. 不能使用的问题是多维数据(x1,x2,x3)耦合在一起
  3. 耦合的根本原因是多元正态分布P(x1,x2,x3)耦合
  4. 那么要解耦这个概率,假设多维数据(x1,x2,x3)彼此独立,这样就能达到解耦目的

那么这个多维数据(x1,x2,x3)彼此独立的可能性大吗?

答:不大,比如:身高与体重不可能独立;因此这个独立是个非常强(苛刻)的条件,这也是朴素贝叶斯适用性不强的原因之一,就是因为它太粗暴的认为这三个概率独立了,但是带来的好处就是当数据缺失时,它可以解耦,所以说没有最完美的模型

假设多维数据(x1,x2,x3)彼此独立,将这个代入公式: image-20220318145036418

image-20220318144928577

再推导: image-20220318145403341

那么当我知道x时,判断分类,其实就是看P(y=1|x)P(y=0|x)谁大谁小了

上面公式中P(x_1|y=1) P(x_2|y=1) P(x_3|y=1)是未知的,需要通过训练样本学习,将这些概率学出来

再看一下这个公式的优点:

如果x2缺失了怎么办?

那么就将P(x_2|y=1) P(x_2|y=0)忽略掉就行了,就当作不存在

那么现在就只需要求解P(x_1|y=1) P(x_2|y=1) P(x_3|y=1)P(x_1|y=0) P(x_2|y=0) P(x_3|y=0)这些项,通过训练集来求解

比如说:x1 x2 x3是三枚不同的硬币,然后他们只有两个取值

x1=0 or =1

x2=0 or =1

x3=0 or =1

Y x1 x2 x3
1 1 0 1
1 1 1 0
0 0 1 1
0 1 0 1

上面表格每行代表一个样本

概率可以理解为频率,即:概率最终用数字表示

P(x_1,y=1)x_1和y=1共同出现的概率

P(x_1|y=1)y=1成立后,x_1的概率 image-20220318151444074

本质上是拿频率推出概率,因此通过训练样本可以把P(x_1|y=1) P(x_2|y=1) P(x_3|y=1)P(x_1|y=0) P(x_2|y=0) P(x_3|y=0)这些估计出来,那么这个过程就没有学习反复迭代的过程了,直接拿到训练样本直接统计计数就行了,用统计的方式直接计算出来

花样扩展

image-20220318152133322

这样计算概率有什么问题吗?就是样本少误差就大

比如说:我抛两次硬币,很大可能两次都抛上,基于这个样本去估计概率,正面的概率为1,反面为0

那么这个公式如何改造呢?

改造公式如下:

加入了n个样本,克服样本量少的问题 image-20220318153230156

n趋近正无穷时,Count()就不起作用了

Count()n很大时,Count()起作用

分子为什么是n/2要保证相加等于1

image-20220318152616172

将这个公式代入例子中:

上面例子说到,实际抛出硬币两次都是正面,那么P(正)=1

代入改造的式子:假想抛出1000次(n=100)硬币,有500次正面,实际抛出硬币两次都是正面

P(正)=(2+500)/(2+1000)=502/1002约等于0.5

这样就和客观事实近似了

image-20220318153519667

那么加入的这个n就是先验概率,就是主观的东西,比如看到人穿裙子,就判断该人是个女人一样,硬塞的概率,以克服样本少,而不准

概率=数据+先验

先验是主观想要的概率

数据是客观存在的数据

当数据大时,概率更倾向于客观

当数据小时,概率更倾向于主观

image-20220318154404609

任何场景都要有先验

比如说面试,面试官要对我有评价

能力=面试表现+先验

面试表现里面试时长很大,说明他收集你的信息很大,评价的越准确

面试时长很短,它就取决于先验,比如工作背景、毕业学校、工作经历

image-20220318154910375

再比如:之前逻辑回归中的损失函数

L=KL+||W||

其中KL就是数据作为支撑

||W||也能理解为是个先验

我们先验的认为这个w应该要小

image-20220318155215919

总结:

  • 逻辑回归有缺陷,不能解耦
  • 要用频率统计概率
  • 用频率统计概率如果样本量很小会出现概率不准的问题,解决方案:加入先验

比如:推荐系统用到先验

推荐=用户画像+内容

当我刚刚注册那个网站,还没有用户画像,那么就要从内容中的先验,即:拿最热门的数据推送给我

image-20220318160433013

x1=x3二维向量X(x1,x2)变为三维向量X(x1,x2,x3),那么x3就是冗余项

这种操作在线性回归与逻辑回归中会影响判断结果吗?答:不会影响,可以抗冗余

那么在朴素贝叶斯中就有影响,从公式上来看多乘以一项,

从它的前提彼此独立来看,已经决定不能冗余,这也是朴素贝叶斯的缺点

image-20220318205956461

像上面x取值,只有两种,不是0就是1,它的概率P(x)就是二项分布

image-20220318210535567

那么有了二项分布自然就有多项分布

image-20220318211005819

说到从物理意义上,判断有无均值

下图所示,右边的物理意义表达上,所以它是没有均值的,左边的物理意义表达是有均值的

不是男中间有过渡的状态

但是它是无法平均的

所以说计算均值一定要考虑它的物理意义

image-20220318211230266

再比如说:扔骰子,是比大小的,那么就有均值,

但是如果每一点代表一种状态或者决策,就没有均值

并不是所有的概率都有均值的,它的物理意义支持着它有均值才行

image-20220318211911666

因此:多项分布也能通过之前的Count()来统计

若是x为连续值,那么假设(先验)它是正态分布,就是把均值均方差给估计出来,就能把概率求解出来了

image-20220318212800581

朴素贝叶斯中,之前的那个w需要反复迭代,但在朴素贝叶斯中变为了一个统计的算法

这里要澄清:

反复迭代w并不是目的,只是手段

真正目的是找到那个合适的w,只不过没有方法可以通过解方程的办法解出来,所以才只能用不同的迭代学习的方法,在朴素贝叶斯中,已经能够一步把它搞出来了,所以就不需要用那种迭代方法了

常见的朴素贝叶斯分布和假设一般是:

  • 二项分布
  • 正态分布
  • 多项分布

这三项的参数,都是通过统计出来的

image-20220318213700594

代码示例(分别展示二项分布、正态分布、多项分布):

#coding=utf-8
import numpy as np
from sklearn.naive_bayes import BernoulliNB
from sklearn.naive_bayes import GaussianNB
from sklearn.naive_bayes import MultinomialNB
X = np.random.randint(2, size=(6, 100))  # 生成一个X[6][100]的数组,数组的值是0或者1的随机数,这[100]相当于属性值
Y = np.array([1, 2, 3, 4, 4, 5])         # Y[6],相当于类标
clf = BernoulliNB()
clf.fit(X, Y)
print X[2:3]
print clf.predict_proba(X[2:3]) # 像这样随机生成的(独立),二值化的(伯努利分布),推荐使用这种朴素贝叶斯
'''
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
Y = np.array([1, 1, 1, 2, 2, 2])
clf = GaussianNB()            # 正态分布
clf.fit(X, Y)
print(clf.predict([[-0.8, -1]]))
clf_pf = GaussianNB()
clf_pf.partial_fit(X, Y, np.unique(Y))
print(clf_pf.predict([[-0.8, -1]]))


X = np.random.randint(5, size=(6, 100)) 
Y = np.array([1, 2, 3, 4, 5, 6])
clf = MultinomialNB()       # 多项分布
clf.fit(X, Y)
print(clf.predict(X[2:3]))
'''
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

接下来讲解下信息论的一些东西

香农与图灵齐名的人,他提出的信息论

前面说过,做什么东西时,要把它量化,比如长度、重量等都能够量化

那么信息怎么量化呢?比如说:什么东西信息量大,什么东西信息量小?

比方说:

  1. 明天太阳将从东方升起(事件发生的概率大=1)
  2. 明天要下雨(事件发生的概率小)

以上两句话哪个信息量大呢?答:当然是第二句,应该它说的这个事件发生的概率小

得出结论:如果告诉你是个确定性的信息,那么信息量小,反之若是告诉你非常不确定的信息,那么信息量大

image-20220318214948591

就像推荐领域中有个叫新(新颖)、奇(奇怪)、特(特别),这种小概率事件,信息量很大

因此香农就很厉害,他把信息量定义为

I(x=1)=(x=1)的信息量

P(x=1)=(x=1)的概率,当它越大时,I(x=1)越小

P(x=1)=1时,I(x=1)=0 image-20220318215707531

image-20220318215656274

知道了信息量的定义,还有个对应的概念叫信息熵

刚才讲到比如x是个二项分布,P(x=1)x=1时的信息量,那么想要衡量x本身怎么办?

那么就要把P(x=1)P(x=0)这两个都要考虑进来

因此这个叫信息熵 H(x) 熵entropy热力学第二定律里面的熵

公式如下: image-20220318220732704

相当于x它的平均信息量

如果x是个二项分布,当概率取什么值,H(x)信息量最大?

答:P(x=1)=P(x=0)=0.5

当各发生一半时,这时是最混乱的时候

image-20220318221140533

那么P(x,y)是个多元变量,它的信息量为H(x,y) image-20220318221734535

image-20220318221723649

Y已经知道的情况下,变为条件概率了,求X的信息量?

那么就是从联合概率P(x,y)变为了条件概率P(x|y)

image-20220318222041283

那么来看它H(x|y)的信息量公式: image-20220318222247029

那么H(x|y)H(x)谁大谁小呢?

y出现后与x无任何关系,则不会影响到x的信息量,那么就与H(x)相等

y出现后与x有关系,则会影响到x的信息量,因为y的出现让x会确定一点,所以信息量会减少

综上所述H(x|y)<=H(x)

比如说:H(x)是机器学习课程的信息量,当没有学习时,这个信息量很大,H(x|y)中的y是老师讲解的课程,讲完课后,很多不确定及拿不准的东西都确定了,如果再讲重复内容时,就没有信息量了。

image-20220318223302281

如果从机器学习的角度考虑:

x通过模型预测y

如果说没有这个模型,那么y对于我们来说非常随机,所以y基本上靠瞎猜,H(y)信息量会很大

如果说我通过机器学习,H(y|模型)这个y就没有那么混乱了,概率进一步确定了,信息量就变小了

所以说,越好的模型就是让y越确定

以上就是通过信息论的角度解释了机器学习

所以说模型是工具,背后的思维才是本质

image-20220318224106456

以前知识点答疑 image-20220318225056102

损失函数L越小越好,当确定分类的前提下,让KL越来越小,则w的绝对值会越来越大

image-20220318225325341是让w的绝对值往小走

所以说这两个相互制约(矛盾),让w趋于中间的方向

image-20220318225829632

也是trade-off权衡的事情

image-20220318230012267

先验n怎么取值?

n是对圆圈部分的信任程度

对它越信任,则n值取小

对它越不信任,则n值根据以往的经验取大

image-20220318230227759