美文网首页
数据挖掘-朴素贝叶斯算法

数据挖掘-朴素贝叶斯算法

作者: 花讽院_和狆 | 来源:发表于2020-03-16 17:40 被阅读0次

用途

朴素贝叶斯算法,主要用于对相互独立的属性的类变量的分类预测。(各个属性/特征之间完全没有关系,叫做相互独立,事实上这很难存在,但是这个方法依然比较有效。)

贝叶斯定理

大学的概率论里一般都学过这个贝叶斯定理,简单阐述如下:

设有两个相互独立的随机变量X,Y,则P(X=x,Y=y)是指X变量取x且Y变量取y的概率,P(Y=y|X=x)指的是在X取x的情况下,Y取y的概率,叫做条件概率,根据以上说法,有公式P(X,Y) = P(Y|X)*P(X) = P(X|Y)*P(Y)
变化一下可以得到:P(Y|X) = \frac{P(X|Y)*P(Y)}{P(X)}
其中P(X)就是X发生的概率,Y就是Y发生的概率,由于是相互独立的,可以不考虑其他因素,通常来说,求P(X)需要用到全概率公式

全概率公式

若事件X_1X_2,…构成一个事件且都有正概率,则对任意一个事件Y,有如下公式成立:则有P(Y) = \sum^n_{i=1}{P(X_i)P(Y|X_i)}

先验概率和后验概率

如果X表示特征/属性,Y表示类变量,如果类变量和属性之间的关系不确定,那么X和Y可以视作随机变量,则P(Y|X)为Y的后验概率,P(Y)为Y的先验概率。
以图为例:

图片摘自[https://blog.csdn.net/qiu_zhi_liao/article/details/90671932]

我们需要根据身高、体重、鞋码判断是男是女,则Y就是性别,X就是(身高、体重、鞋码)这一组特征。如果我们要先算是男的概率,则先验概率就是P(Y=男)=4/8=0.5,而后验概率则是我们未来将要输入的一组特征已知的情况下,Y=男的概率(要预测的分类的概率),这样的话,根据贝叶斯定理,我们就可以用P(X|Y)、P(X)、P(Y)来求出P(Y|X),这就是贝叶斯定理在预测中的应用。

朴素贝叶斯

假设Y变量取y值时概率为P(Y=y),X中的各个特征相互独立,则有公式如下:P(X|Y=y) = \prod_{i=1}^d{P(X_i|Y=y)}
其中每个特征集X包含d个特征。
根据公式,对比上面的图来说,如果性别是男的时候,身高是高,体重是重,鞋码为大的概率就等于

性别男时身高为高的概率*性别男时体重为重的概率*性别男时鞋码为大的概率。

有了这个公式,结合之前的贝叶斯公式,就能得到给定一组特征值的情况下, 这组特征属于什么样的类别的概率公式:P(Y|X) = \frac{P(Y)\prod^d_{i=1}P(X_i|Y)}{P(X)}
其中的X代表一组特征,X_i代表一组中的一个。
对于所有的Y来说,P(X)时固定的,因此只要找出使分子P(Y)\prod^d_{i=1}P(X_i|Y)最大的类别就可以判断预测的类别了。

P(X_i|Y)的概率分为两种情况来区别,一种是对分类特征的概率确定,一种是连续特征的概率确定。

接下来借用《数据挖掘导论》上的例子来说明概率确定的方式。

Tid 有房 婚姻状况 年收入 拖欠贷款
1 单身 125K
2 已婚 100K
3 单身 70K
4 已婚 120K
5 离婚 95K
6 已婚 60K
7 离婚 220K
8 单身 85K
9 已婚 75K
10 单身 90K

对分类特征的概率确定

对于分类的特征,可以首先找到训练集中为y值的个数,然后根据不同的特征类型占这些个数中的比例作为分类特征的概率。
例如上表中求不拖欠贷款的情况下,有房的人数就是P(X_{有房}=是|Y=否)=3/7,不拖欠贷款的有7个,其中有房的是3个。以此类推可以求出婚姻状况的条件概率。
年收入是连续特征,需要区分对待。

对连续特征的概率确定

  1. 把每个属性离散化,然后每个值落入哪个离散区间,就用该区间替换值,离散化的方法有:

    • 非监督离散化
      · 等宽
      · 等频率
      · 等深
      · 聚类
    • 监督离散化
      ·基于信息熵
      这样的话,根据离散化区间就可以按照对分类特征的概率确定方式来求条件概率,估计误差取决于离散化的方式和区间的数目,如果每个区间中的数据太少,则做不出可靠的预测,如果区间太少,则预测可能不准确。
  2. 可以假设连续特征符合某种分布,然后使用数据估计分布的参数,一般采用正态分布(高斯分布)来表示连续属性的条件概率分布,该分布有两个参数,均值μ和方差σ^2。对于每个类y_i,特征X_i的条件概率表示为:P(X_i=x_i|Y=y_j)=\frac{{1}}{{\sqrt{2\pi}σ_{ij}}}e^{-\frac{(x_i-μ_{ij})^2}{2σ_{ij}^2}}
    μ_{ij}可以用y_j下所有训练数据关于X_i的样均值来估计,同理σ_{ij}用这些训练数据的标准差来估计。以上面表格为例:μ_{ij} = \frac{125+100+70+···+75}{7}=110
    σ_{ij}^2 = \frac{(125-110)^2 + (100-110)^2 +···+(75-110)^2}{7(6)}=2975
    σ_{ij} = \sqrt{2975} = 54.54
    需要注意的是,总体方差和样本方差的差距,样本方差分母是n-1,总体是n,这就是7(6)的原因。
    另外,这些样本数据都是Y=否的数据,需要注意。

根据上述算法,如果要求没有拖欠贷款情况下,年收入是120K的概率,就是P(收入=120K|Y=否) = \frac{1}{\sqrt{2\pi}*54.54}e^{-\frac{(120-110)^2}{2*2975}} = 0.0072

例子

如果要预测测试记录X=(有房=否,婚姻状况=已婚,年收入=120K)这个样本是否可能拖欠贷款,则需要计算两个概率:P(Y=是|X)P(Y=否|X)
则有:P(Y=否|X) = \frac{{P(Y=否)P(X|Y=否)}}{P(X)}
由于P(X)是不变的(对于Y=是和Y=否),则只考虑上面的分子即可,那么抛开P(X)不看,则有:
P(有房=否|Y=否)*P(婚姻状况=已婚|Y=否)*P(年收入=120K|Y=否)
P(Y=否|X)=4/7 * 4/7 * 0.0072 * 7/10 * \alpha = 0.0024\alpha
其中7/10就是P(Y=否),α是P(X)
同理可得P(Y=是|X) = 1 * 0 * 1.2e-1 = 0.
这样一比较,那么分类就是否。

朴素贝叶斯的m估计

看这个例子中,如果有一个特征的条件概率是0,那么整体的概率就是0,从而后验概率也一定是0,那么如果训练集样本太少,这种方法就不是很准确了。
如果当训练集样本个数比特征还少的时候,就无法分类某些测试集了,因此引入m估计(m-estimate)来估计条件概率,公式如下:
P(x_i|y_j) = \frac{n_c + mp}{n + m}
其中,n是类y_j中的样本总数,n_c是类y_j中取x_i的样本数,m是称为等价样本大小的参数,p是用户指定的参数,p可以看作在类y_j中观察特征值x_i的先验概率。等价样本大小决定先验概率p和观测概率n_c/n之间的平衡。

引入m估计的根本原因是样本数量过小。所以为了避免此问题,最好的方法是等效的扩大样本的数量,即在为观察样本添加m个等效的样本,所以要在该类别中增加的等效的类别的数量就是等效样本数m乘以先验估计p。

在之前的例子中,设m=3,p=1/3(m可以设置为特征数量,p则是倒数)。则:P(婚姻状况=已婚|Y=是) = (0+3*1/3)/(3+3) = 1/6
从而可以重新计算P(Y=否|X) = 0.0026,P(Y=是|X) = 1.3e^{-10}。从而解决了某个条件概率为0的问题。

朴素贝叶斯算法的特征

面对相互独立的特征比较适用,如果有相关的特征,则会降低其性能。

相关文章

网友评论

      本文标题:数据挖掘-朴素贝叶斯算法

      本文链接:https://www.haomeiwen.com/subject/tldgehtx.html