明明简单的算法,代码写起来还真不轻松...感觉后面的算法我可能要偷懒了.

核心

因为书上的公式打打太麻烦,因此我不讲太多,建议买本书看.我这里就只记录我是怎么想的.我认为我的理解可能还是不太到位.

我觉得是因为需要一个分类器,给定\(Y\)得到\(X\),那么分类器可以定义为\(P(Y|X)\),接着我们假设特征间相互独立,则根据贝叶斯公式有:

\[ \begin{aligned} P(Y|X)=\frac{P(X|Y)P(Y)}{P(X)} \end{aligned} \]

然后我们即可从先验概率\(P(Y)\),条件概率\(P(X|Y)\),计算出后验概率\(P(Y|X)\),然后选后验概率最大的一项作为分类类别.

但是书本上讲的是直接学习联合概率分布\(P(X,Y)\),假设他的特征条件独立,那么只需要概率相乘即可: \[\begin{aligned} P(X=x,Y=c_k)&=P(X^{1}=x^{1},...,X^{n}=x^{n}|Y=c_k),k=1,2,...,K\\ &=\prod_{j=1}^n P(X^{j}=x^{j}|Y=c_k) \end{aligned} \]

那么如果我想得到指定\(x\)\(y\)的概率就可以通过带入贝叶斯公式得到: \[ P(Y=c_k|X=x)=\frac{\prod_{j} P(X^j =x^j |Y=c_k)P(Y=c_k)}{\prod_{j} P(X^j =x^j |Y=c_k) \sum_k P(Y=c_k) } \]

分类时选择后验概率最大化的那一项即可.

先验分布计算

先验分布直接统计\(Y\)的频率即可.

条件概率计算

对于多项式分布的数据,统计给定\(Y\)的情况下\(X\)的频率.

对于高斯分布的数据,统计给定\(Y\)的情况下\(X\)的均值和方差.

后验概率计算

给定一个数据点.

对于多项式分布的数据,选择之前统计的条件概率累乘.

对于高斯分布的数据,选择之前统计的均值方差计算当前数据点的pdf再累乘.

分类

选择后验概率较大的一项输出.