0. 前言
上一篇博客中,举了一个例子,通过10个带有标签的样本,对提出的某个问题进行了预测。但是在整个过程中,感觉是直接就算出了结果,没有通过训练集建立模型,再通过模型来预测的过程。这些疑问将在本篇博客中进一步说明。
1. 不建模算法
朴素贝叶斯是一个不建模的算法。在上一篇博客中,表格中的数据就是我们所说的训练集,而“没房、单身的人”就是没有标签的测试集。因为,训练集和测试集都是抽样于同一个不可获得的大样本,并且在这个大样本下的各种属性所表现处的规律应该是一致的,因此训练出来的各种概率可以直接放到测试集来使用。即不建模也能完成分类。
2. 最大后验估计
在实际的贝叶斯决策过程中是比较复杂的:标签和特征都会有很多,每一个特征下也有很多不同的取值。
对于上述公式而言,我们从训练集中求解P(Y=1)比较容易,但求解P(X)和P(
x
i
x_i
xi|Y=1)就比较复杂了。在求解P(X)时,使用的是全概率公式,上一篇博文例子中的两个特征就需要求解4项概率,特征数目一旦很大,计算量就会很大,P(
x
i
x_i
xi|Y=1)也会很难计算。
但实际上,以二分类问题为例,我们一般是判断在同一个样本下,更接近0还是更接近1,即
即在实际的计算过程中,两个概率的分母是相同的,因此可以不计算分母,即无需计算难于计算的P(X)。可以只计算分子,即分别求解P(Y=1|X)和P(Y=0|X),再把这两个结果相加的和作为分母。这就是“最大后验估计”(MAP),主要求解的就是每个样本在每个特征取值下的P( x i x_i xi|Y= y i y_i yi),再连乘。分子更大的Y所对应的类别就是样本更靠近的那一类。
虽然,上述过程使得我们求解的过程变得没那么困难了,但是还是存在一些问题。① 比如,在测试集中出现的某个特征是我们训练集中没有的。对于上一篇博客中的那个预测是否拖欠贷款的例子,假如我们要判断的是某个“没房、丧偶的人”是否拖欠贷款。我们需要计算的是下面的式子:
P(拖欠贷款|没房,丧偶) = P ( 没 房 , 丧 偶 ∣ 拖 欠 贷 款 ) ∗ P ( 拖 欠 贷 款 ) P ( 没 房 , 丧 偶 ) {P(没房,丧偶|拖欠贷款)*P(拖欠贷款)}\over{P(没房,丧偶)} P(没房,丧偶)P(没房,丧偶∣拖欠贷款)∗P(拖欠贷款)
= P ( 没 房 ∣ 拖 欠 贷 款 ) ∗ P ( 丧 偶 ∣ 拖 欠 贷 款 ) ∗ P ( 拖 欠 贷 款 ) P ( 拖 欠 贷 款 ) ∗ P ( 没 房 , 丧 偶 ∣ 拖 欠 贷 款 ) + P ( 不 拖 欠 贷 款 ) ∗ P ( 没 房 , 丧 偶 ∣ 不 拖 欠 贷 款 ) {P(没房|拖欠贷款)*P(丧偶|拖欠贷款)*P(拖欠贷款)}\over{P(拖欠贷款)*P(没房,丧偶|拖欠贷款)+P(不拖欠贷款)*P(没房,丧偶|不拖欠贷款)} P(拖欠贷款)∗P(没房,丧偶∣拖欠贷款)+P(不拖欠贷款)∗P(没房,丧偶∣不拖欠贷款)P(没房∣拖欠贷款)∗P(丧偶∣拖欠贷款)∗P(拖欠贷款)
上面我们说了,无需计算分母,所以我们需要算的是P(没房|拖欠贷款)、P(丧偶|拖欠贷款)以及P(拖欠贷款)。而对于P(丧偶|拖欠贷款),丧偶这个特征值是我们的训练集中没有的,所以P(丧偶|拖欠贷款)结果是0。分子是连乘的,所以会导致最终结果为0,这就使得概率预测没有意义了。所以不能让它等于0,这是一个需要解决的问题。除此之外,② 对于现实中标签是连续型的变量,就没法用样本个数占比这种方法来计算了。
上述问题,将在下一篇博客中继续说明。