机器学习算法之朴素贝叶斯模型
基本原理
从统计学知识回到我们的数据分析。假如我们的分类模型样本是:
即我们有m个样本,每个样本有n个特征,特征输出有k个类别,定义为C1,C2,…,Ck,。从样本我们可以学习得到朴素贝叶斯的先验分布P(Y=Ck)(k=1,2,…,K),接着学习到条件概率分布P(X=x|Y=Ck)=P(X1=x1,X2=x2,…,Xn=xn|Y=Ck),然后我们就可以用贝叶斯公式得到X和Y的联合分布P(X,Y)了。联合分布P(X,Y)定义为:
从上面的式子可以看出P(Y=Ck)比较容易通过最大似然法求出,得到的P(Y=Ck)就是类别Ck在训练集里出现的频数。但是P(X=x|Y=Ck)=P(X1=x1,X2=x2,…,Xn=xn|Y=Ck)很难求出,这是一个超级复杂的有n个维度的条件分布。朴素贝叶斯模型在这里做了一个大胆的假设,即X的n个维度之间相互独立,这样就可以得出:
从上式可以看出,这个很难的条件分布大大简化了,但是这也可能带来预测的不准确性。如果特征之间非常不独立怎么办?如果真是非常不独立的话,那就尽量不要使用朴素贝叶斯模型,而考
虑使用其他的分类方法比较好。但是一般情况下,样本的特征之间独立这个条件的确是弱成立的,尤其是数据量非常大的时候。虽然牺牲了准确性,但是模型的条件分布的计算大大简化了,这就是贝叶斯模型的选择。
最后回到我们要解决的问题,我们的问题是给定测试集的一个新样本特征(X1(test),X2(test),…,Xn(test)),我们如何判断它属于哪个类型?
既然是贝叶斯模型,当然是用后验概率最大化来判断分类了。只要计算出所有的k个条件概率P(Y=Ck|X=X(test)),然后找出最大的条件概率对应的类别,这就是朴素贝叶斯的预测了。
推导过程
我们预测的类别Cresult是使P(Y=Ck|X=X(test))最大化的类别,数学表达式为:
由于对于所有的类别计算P(Y=Ck|X=X(test))时,上式的分母是一样的,都是P(X=X(test)) ,因此,预测公式可以简化为:
接着,利用朴素贝叶斯的独立性假设,就可以得到通常意义上的朴素贝叶斯推断公式:
朴素贝叶斯的参数估计
只要求出P(Y=Ck)和P(Xi=Xi(test)|Y=Ck)(i=1,2,…,n),通过
比较就可以得到朴素贝叶斯的推断结果。那么,如何通过训练集计算这两个概率呢?
对于P(Y=Ck),比较简单,通过极大似然估计很容易得到P(Y=Ck)为样本类别Ck出现的概率,即样本类别Ck出现的次数mk除以样本总数m。
对于P(Xi=Xi(test)|Y=Ck)(i=1,2,…,n),取决于先验条件:
(1)如果Xj是离散值,可以假设Xj符合多项式分布,得到P(Xi=Xi(test)|Y=Ck)是在样本类别Ck中,Xi(test)出现的概率。即:
其中mk为样本类别Ck出现的次数,而mkI(test)为类别为Ck的样本中,第i维特征Xi(test)出现的次数。
某些时候,可能某些类别在样本中没有出现,这样可能导致P(Xi=Xi(test)|Y=Ck)为0,这样会影响后验的估计,为解决这种情况,引入了拉普拉斯平滑,即此时有:
其中 λ \lambda λ为一个大于0的常数,常取为1。 O!为第i特征的取值个数。
(2)如果Xi是非常稀疏的离散值,即各个特征出现的概率很低,可以假设Xi符合伯努利分布,即特征Xi出现记为1,不出现记为0。即只要Xi出现即可,不关注Xi的次数。这样得到P(Xi=XI(test)|Y=Ck)是在样本类别Ck中,Xi(test)出现的概率。此时有:
其中,Xi(test)取值为0和1。
(3)如果Xi是连续值,可以有两种方法。
第一种是把连续型变量分成j个箱,把连续型强行变成分类型变量。分箱后,将每个箱中的均值 x i ˉ \bar{x_i} xiˉ当作一个特征Xi上的取值,然后计算箱j中Y=1所占的比例,就是P(xi|Y=1)。这个过程的主要问题是,箱子不能太大也不能太小,如果箱子太大,就失去了分箱的基本意义,如果箱子太小,可能每个箱子里就没有足够的样本来帮助计算P(xi|Y),因此必须要适当地衡量分箱效果。
但其实,没有必要这样做,因为可以直接通过概率论中来计算连续型变量的概率分布。在分类型变量的情况中,比如掷骰⼦子的情况,有且仅有六种可能的结果1~6,并且每种结果的可能性为1/6。此时每个基本的随机事件发生的概率都是相等的,所以可以使1/N用来表示有N个基本随机事件可以发生的情况。
基于此,来思考一个简单的问题:汉堡王向客户承诺说他们的汉堡⾄至少是100g一个,但如果去汉堡王买个汉堡,可以预料到它肯定不是标准的100g。设汉堡重量为特征Xi,100g就是取值,买到一个汉堡是100g的概率P(100g|Y)是多少呢?如果买n个汉堡,很可能n个汉堡都不一样重,只要称重足够精确,100.000001g和100.00002gi就可以是不一致的。这种情况下,买无限个汉堡,可能得到无限个重量,有无限个基本随机事件的发生,所以有:
P(100g|Y) = lim n → ∞ 1 N \lim_{n\to\infty}\large\frac1{N} limn→∞N1 = 0
即买到的汉堡刚好是100g概率为0。当⼀一个特征下有无数种可能发生的事件时,这个特征的取值就是连续型的,比如现在的特征“汉堡的重量”。从上面的例子可以看得出,当特征为连续型时,随机取到某一个事件发生的概率就为0。
换一个问题,随机买一个汉堡,汉堡的重量量在98g~102g之间的概率是多少?
求解概率P(98g<x<102g)。随机购买100个汉堡,称重后记下所有重量在98g~102g之间的汉堡个数,假设为m,则有:
P(98g<x<102g)=m/100
如果基于100个汉堡绘制直方图,并规定每4g为一个区间,横坐标为汉堡的重量分布,纵坐标为区间上汉堡的个数。
可以看到最左边的图。m就是中间的浅绿⾊色区间中所对应的纵坐标轴。则对于概率,可以变换为:
P(98g<x<102g)= m ∗ 4 100 ∗ 4 \Large\frac{m*4}{100*4} 100∗4m∗4= 浅 绿 色 区 间 的 面 积 直 方 图 中 所 有 区 间 的 面 积 \large\frac{浅绿色区间的面积}{直方图中所有区间的面积} 直方图中所有区间的面积浅绿色区间的面积
如果我们购买一万个汉堡并绘制直方图(如中间的图),将直方图上的区间缩小,P(98g<x<102g)依然是所有浅绿色区域的面积除以所有柱状图的面积,直方图变得更更加平滑,更像一座山了。假设购买10W个,或者无限个汉堡,则可以想象直方图最终会变成仿佛一条曲线,而汉堡重量的概率P(98g<x<102g)依然是所有浅绿色柱子的面积除以曲线下所有柱状图的总面积。当购买无数个汉堡的时候形成的这条曲线就叫做概率密度曲线(probability density function,PDF)。
一条曲线下的面积,就是这条曲线所代表的函数的积分。如果定义曲线可以用函数f(x)来表示,整条曲线下的面积就是:
∫ − ∞ + ∞ f ( x ) d x \int_{-\infty}^{+\infty}f(x)dx ∫−∞+∞f(x)dx
其中dx是f(x)在x上的微分。在某些特定的f(x)下,可以证明,上述积分等于1。总面积是1,这说明一个连续型特征X的取值x取到某个区间[ xi, xi+ ϵ \epsilon ϵ ]之内的概率,为这个区间上概率密度曲线下的面积,所以特征Xi在区间[ xi, xi+ ϵ \epsilon ϵ ]中取值的概率可以表示为:
非常幸运的是,在后验概率的计算过程中,可以将常量 ϵ \epsilon ϵ抵消掉,然后就可以利用的f(xi)的某种变化来估计P(xi|Y)了。现在,就将求解连续型变量下某个点取值的概率问题,转化成了求解一个函数f(x)在点xi上的取值问题。接下来,只要找到f(x),就可以求解出不同的条件概率了。
在现实中,我们往往假设f(x)是满足某种统计学中的分布的,最常见的就是高斯分布(正态分布,像购买汉堡的例子),常用的还有伯努利分布,多项式分布。这些分布对应着不同的贝叶斯算法,其实他们的本质都是相同的,只不过计算的f(x)不同。每个f(x)都对应着一系列需要去估计的参数,因此在贝叶斯中,fit过程其实是在估计对应分布的参数,predict过程是在该参数下的分布中去进行概率预测。
机器学习算法之朴素贝叶斯模型相关推荐
- 机器学习算法基础——朴素贝叶斯算法
26.朴素贝叶斯算法原理 联合概率和条件概率 联合概率:包含多个条件,且所有条件同时成立的概率 记作:P(A,B) P(A,B)=P(A)P(B) 条件概率:就是事件A在另外一个事件B已经发生条件下的 ...
- 人工智能算法一朴素贝叶斯模型
简介 朴素贝叶斯模型主要是解决逻辑回归多维不能解耦的情况. 前提描述 在讲解朴素贝叶斯模型的时候先回归下逻辑回归的函数. 如果计算多维的时候比如在婚恋网的预测的时候,根据x1身高,x2体重,x3收入, ...
- 机器学习算法总结--朴素贝叶斯
这次需要总结的是朴素贝叶斯算法,参考文章: <统计学习方法> 机器学习常见算法个人总结(面试用) 朴素贝叶斯理论推导与三种常见模型 朴素贝叶斯的三个常用模型:高斯.多项式.伯努利 简介 朴 ...
- 朴素贝叶斯基础【机器学习算法一朴素贝叶斯1】
基础知识回顾 (上述内容引自李航<统计学习方法>) 过去的7天当中,有3天下雨,4天没有下雨.用0代表灭有下雨,而1代表下雨,我们可以用一个数组来表示: y=[0,1,1,0,1,0,0] ...
- 朴素贝叶斯实例(肿瘤良性与恶性)【机器学习算法一朴素贝叶斯5】
import matplotlib.pyplot as plt import numpy as np#导入肿瘤数据集 from sklearn.datasets import load_breast_ ...
- 伯努利朴素贝叶斯【机器学习算法一朴素贝叶斯2】
伯努利朴素贝叶斯方法适合于伯努利分布(即二项分布或0-1分布)的数据集. import numpy as np from sklearn.naive_bayes import BernoulliNB ...
- 机器学习第六章之朴素贝叶斯模型
朴素贝叶斯模型(了解) 6.1 朴素贝叶斯模型算法原理 6.1.1 一维特征向量下的贝叶斯模型 6.1.2 二维特征向量下的贝叶斯模型 6.1.3 n维特征向量下的贝叶斯模型 6.1.4 朴素贝叶斯模 ...
- 机器学习:朴素贝叶斯模型算法原理(含实战案例)
机器学习:朴素贝叶斯模型算法原理 作者:i阿极 作者简介:Python领域新星作者.多项比赛获奖者:博主个人首页
- 一步步教你轻松学朴素贝叶斯模型算法理论篇1
一步步教你轻松学朴素贝叶斯模型理论篇1 (白宁超2018年9月3日17:51:32) 导读:朴素贝叶斯模型是机器学习常用的模型算法之一,其在文本分类方面简单易行,且取得不错的分类效果.所以很受欢迎,对 ...
最新文章
- 多花5美元提速500%,树莓派新品Zero 2 W发布
- 十亿级视频播放技术优化揭密
- 诺曼门的十个产品_用户决策与产品设计
- 现在还有没有人不学 Python 的?
- 解决php的It is not safe to rely on the system’s timezone settings的问题
- how to find data source of F4 help in web client UI
- 关于new handler与default、delete关键字
- iSCSI存储设备的udev绑定 以及iscsi重启卡住解决方法
- PAT A 1065. A+B and C (64bit) (20)
- VS2019添加自定义发布本地的Nuget(.nupkg文件)
- SIM900A—基础指令
- ROS激光雷达小车自主导航学习(一)(持续更新中)
- mzy git学习,禁用Fast forward的普通合并(六)
- 拿到offer后 还应该继续去面试?
- Asuswrt RT-AC68U 华硕路由器文件删除漏洞 栈溢出
- 2009 year English Inprovement for IT developments
- 对 iOS 14.2 糟糕的音乐控制界面的思考
- 微信小程序时间格式转换
- ESP32编译运行ADF音频库
- 网站常用的favicon.ico文件