在上一讲中,我们了解到了朴素贝叶斯以及laplace平滑。这一小节中,我们将要改进朴素贝叶斯算法。原有的朴素贝叶斯中的特征值 xi 是只取0和1两个值,现在要对朴素贝叶斯进行一般化,以适应于特征值取值范围为 {1,2,...,k} 这种情况。
一般化过程中,对 p(xi|y) 的建模不再是简单的伯努力而是多项式分布。事实上,即使原始的输入特征是连续的值,也可以将它离散化,将它们分为几组离散值,然后再使用朴素贝叶斯算法。
就以最开始的预测房屋价格这个问题举例,如果输入特征 xi 代表房屋面积,那么就可以将连续的值离散化为如下样式:
因此,如果房屋面积为890平方英尺,我们可以将对应的特征值 xi 设为3。之后就可以使用朴素贝叶斯算法。当连续的特征值并没有用多元正态分布进行良好的建模时,就可以通过对特征离散化然后使用朴素贝叶斯算法,这种方法也可以得到好的分类器结果。
针对文本分类的事件模型
上一节讲述了生成学习算法,下面将结束对这一算法的讨论并且介绍一种针对文本分类的模型。前面讲到的朴素贝叶斯算法在很多分类的问题上有良好的表现,那么对于文本分类问题,有一个与其相关的模型的表现效果会更好。
在文本分类的特定语境下,朴素贝叶斯被称作多变量伯努力事件模型(换个称呼而已)。在这一模型中,我们假设电子邮件的生成方式:无论是垃圾邮件发送者还是非垃圾邮件发送者向你发送下一封邮件,这封邮件都是随机决定的(根据类先验概率
p(y)
)。其次,邮件的发送者决定邮件中是否包含某个单词
i
,且每个单词出现在邮件中的概率是独立的。根据概率
此处我们提出一个不同的模型,被称作多项式事件模型。为了描述这一模型,我们会用不同的符号来代表邮件的一些特征。
xi
代表邮件中的第
i
个单词。因此,
在多项式事件模型中,我们假设一封邮件的生成方式是通过一个随机的过程,垃圾邮件还是非垃圾邮件一开始是随机确定好了的(取决于
p(y)
)。然后,邮件中的第一个单词
x1
从多项式分布中选取生成,第二个单词
x2
与第一个单词相互独立,但都从多项式分布中选取,接下来的
x3
,
x4
的选取也是如此,直到所有的
n
个单词都生成成功。因此,一封邮件整体的概率为
在我们的心模型中参数 ϕy=p(y) , p(xj=k|y=1) ϕi|y=0=p(xj=k|y=0) 。我们之前假设了 p(xj|y) 对所有的 j 值的概率相同(邮件中生成的单词无论位置如何,都不影响后续的概率计算)。
如果给出如下训练集
分别对参数进行最大似然估计,等式分别如下:
当估计参数
尽管朴素贝叶斯算法不一定是最好的分类算法,但它的效果经常出乎意料的好。而且执行起来也非常的简单好操作,不得不说是一个非常好的可以尝试使用的算法。
支持向量机
这一小节我们开始讲支持向量机(SVM)学习算法。很多人认为支持向量机是最好的“现有的“监督学习算法,实际上它也确实是最好的。为了更好的理解SVM,我们需要先讨论关于间隔的概念以及将数据大间距分离的理念。然后,我们会继续讨论间隔分类器的优化问题,这会引出另一话题——拉格朗日对偶性。我们同样会讨论到关键点,通过为SVM提供一种方式使得在高维度的特征空间(比如无线维度)中仍有良好的表现。最后,我们会以SMO算法结束,这一算法为SVM提供了一种有效的实现方法。
1.间隔
这一小节中会给出关于间隔以及对预测结果的”信心“的想法。这些想法会在第三小节中形式化。
在逻辑回归中,对概率 p(y=1|x;θ) 进行建模得到 hθ(x)=g(θTx) 。如果有 hθ(x)≥0.5 ,就有预测结果为1,也可以这样说,当且仅当 θTx≥0 时,预测的结果就是1。
假设有这样一组值为整数的训练样本 (y=1) , θTx 值越大,假设 hθ(x)=p(y=1|x;w,b) 的值也越大,因此预测的结果为1的”信心“也越大。所以我们也可以这样理解,如果 θTx≫0 ,就认为预测结果为1非常靠谱。同样的,如果 θTx≪0 ,我们认为逻辑回归的预测值为0是非常值得相信的。
假设给定一组数据集,如果存在 θ 值使得 θTx(i)≫0 等式成立且总有结论 y(i)=1 , θTx(i)≪0 等式成立且总有结论 y(i)=0 ,那么这一组训练数据可以得到很好的匹配,因为对所有的训练样本进行分类都很有理论依据。后续会对这一观点进行格式化,并且期间用到了函数间隔的概念。
接下来看这样的一幅图,图中“X”代表正向的训练样本,“O”代表负向的训练样本,同样存在着决策边界(这条直线来自等式 θTx=0 ,也可以叫做分离超平面),还有三个点A,B,C。
点A与决策边界的距离很远,如果想对在点A处的
y
值进行预测,从图中看上去预测
再次假设给定一组数据集,如果想要找到合适的决策边界使得所有训练样本的预测值都可靠且正确。后续我们会将这一理念形式化,并且会用到几何间隔这一理念。
2.符号
为了更容易理解SVM,我们现在需要介绍关于分类的一个新符号。
接下来就以二分类问题的线性分类器举例,输入特征
x
,对应值
此处,如果
z≥0
,那么
g(z)=1
,其他情况,则有
g(z)=−1
。关于参数的定义,我们不再让
x0=1
成为输入特征向量中新的维度,而是用参数
b
代替
3.函数间隔与几何间隔
这一小节主要讲对函数间隔以及几何间隔符号的形式化。给定一个训练样本 (x(i),y(i)) ,定义以 (w,b) 为参数,训练样本 i 的函数间隔:
如果
对于上述的线性分类器,存在一个问题影响预测的可靠性。给定函数
g
,如果用参数
给定一组训练集
S={(x(i),y(i));i=1,...,m}
,我们都可以定义一个以
(w,b)
为参数的函数间隔,是每一个训练样本的函数间隔的最小值之和。可以用如下形式表示:
接下来我们讨论一下几何间隔。
图中显示了决策边界以及向量
w
向量
我们如何得到
γ(i)
的值呢?
w/||w||
代表了与向量
w
相同方向的单位长度的向量。因为点A处代表
将等式更一般化,我们定义以 w,b 为参数,针对每个训练样 (x(i),y(i)) 的几何间隔如下
如果
||w||=1
,那么函数间隔与几何间隔相等——这两种间隔之间存在这样的联系。而且,调整参数对几何间隔不会产生影响。举个例子,如果用
2w,2b
代替
w,b
,几何间隔不会发生改变。因为这一特性,当尝试着对训练数据匹配参数
w,b
,我们可以随意调整参数
w
的比例,也不会造成实质性的改变。举个例子,设定
最后,给定一组训练集 S={(x(i),y(i));i=1,...,m} ,同样可以针对训练集定义一个以 (w,b) 为参数的几何间隔,是所有训练样本的几何间隔的最小值之和。等式如下: