数据挖掘十大算法——Naive Bayes

简介

Naive和Bayes

Naive:假定向量中的所有特征是相互独立的
Bayes:数据挖掘十大算法——Naive Bayes_第1张图片

面向的问题

NB主要用于解决有监督分类问题。相比于其他模型,其具备简单(不需要复杂的迭代式参数估计,由此方便处理大数据)、可解释性强(生成模型)、效果佳的特点。

目标

针对二分类问题,利用训练集数据学习一个判断阈值α,对于新来的数据做判定,大于α的数据属于正类,小于α的数据属于负类。有监督分类中存在两大流派 diagnostic paradigmsampling paradigm ,前者注重于发现类间的区别,后者注重于发现类本身的分布形式,NB兼而有之。

算法描述

从sampling paradigm角度出发,定义 P(i|x) 为样本 x=(x1,x2...xp) 属于类别 i 的概率; f(x|i) 为条件为 i 类样本的分布; P(i) 为在没有任何已知数据情况下,样本属于 i 类的先验概率; f(x) 是样本的总体分布,有 f(x)=f(x|1)P(1)+f(x|0)P(0) 。显然, P(i|x)[0,1] 就是我们要找的阈值计算公式,一个典型的情况是设置阈值为 0.5。

由Bayes公式,

P(i|x)=f(x|i)P(i)f(x)
P(i) 是类别先验概率,很好估计, f(x) 在所有样本上一致,因此可以忽略。那么问题就是怎么求 f(x|i) 。根据朴素性假设 f(x|i)=pj=1f(xj|i) ,这样,多元问题就被我们拆分为单变量估计问题。此时,我们可以采用直方图形式估计,也可以进行正态假设估计等。

一个优雅的特点

根据上述算法描述,可以得知,如果对 P(i|x) 作任意的严格单调性变换,并相应地改变阈值α,分类结果将保持不变。即

P(i|x)>P(i|y)T(P(i|x))>T(P(i|y))
P(i|x)>αT(P(i|x))>T(α)
那么我们可以对目标函数进行例如比例变换,log变换等操作。

讨论

独立性假设是NB中的一个核心观点,但是很明显在现实中,这个假设通常都是不合理的,偏偏NB又能产生很好的效果。由“不合理”的假设得到合理的结果,这看起来是违背常理。下面我们讨论具体原因

复杂度

独立单变量模型的复杂度远低于相关多变量模型,在估计时少量数据即可达到较好的精度。

模型变种

Laplacian correction

先验概率 nj/N 修正为 (nj+cj1)/(N+1) ,这样可以对具备新特征的样本进行处理

相关关系引入

引入特征的两两相关

f(x|i)=f(x1|i)f(x2|x1,i)f(x3|x1,x2,i)...f(xp|x1,x2,,,xp1,i)

引入马尔科夫模型
f(x|i)=f(x1|i)f(x2|x1,i)f(x3|x2,i)...f(xp|xp1,i)

Logistic Regression

与NB很相似,但是参数估计不能用直接简单的概率完成,而需要通过迭代的方法。因此更为复杂

应用实例

Time with Emp(T) Size of Loan(S) Homeowner(H) Default(D)
5 10000 1 N
20 10000 1 N
1 25000 1 N
1 15000 3 N
15 2000 2 N
6 12000 1 N
1 5000 2 Y
12 8000 2 Y
3 10000 1 Y
1 5000 3 Y


我们期望通过左侧三列数据,预测该用户进行信用欺诈的可能性。

各特征的估计

连续数据离散化

我们注意到,这里的T,S都是毕竟分散的连续型数据,因此我们可以通过设定阈值的方法使其离散化。
T 我们设定阈值为10, S 我们设定阈值为10000
由此可得:

f(T<10|D=N)=4/6
f(T10|D=N)=2/6
f(T<10|D=Y)=3/4
f(T10|D=Y)=1/4

f(S<10000|D=N)=5/6
f(S10000|D=N)=1/6
f(S<10000|D=Y)=3/4
f(S10000|D=Y)=1/4

f(H=1|D=N)=4/6
f(H=2|D=N)=1/6
f(H=3|D=N)=1/6
f(H=1|D=Y)=1/6
f(H=2|D=Y)=2/6
f(H=3|D=Y)=1/6

现在,有一个新用户申请信用卡,他的 T=5, S=7000,H=1

则, P(Y|x)P(N|x)=P(1)f(T|1)f(S|1)f(H|1)P(0)f(T|0)f(S|0)f(H|1)=0.422

又根据 P(1|x)=1P(0|x) , 可得 P(0|x)=0.703 , P(1|x)=0.296

如果我们设定阈值为0.5,则该用户是可以被授信的

(完)

你可能感兴趣的:(算法,数据挖掘)