写给人类的机器学习 2.2 监督学习 II
2.2 监督学习 II
原文:Machine Learning for Humans, Part 2.1: Supervised Learning
作者:Vishal Maini
译者:飞龙
使用对数几率回归(LR)和支持向量机(SVM)的分类。
分类:预测标签
这个邮件是不是垃圾邮件?贷款者能否偿还它们的贷款?用户是否会点击广告?你的 Fackbook 照片中那个人是谁?
分类预测离散的目标标签Y
。分类是一种问题,将新的观测值分配给它们最有可能属于的类,基于从带标签的训练集中构建的模型。
你的分类的准确性取决于所选的算法的有效性,你应用它的方式,以及你有多少有用的训练数据。
sigmoid 函数,它将值压缩到 0 和 1 之间。
回忆我们的简单线性回归模型的原始形式,我们现在叫它g(X)
,因为我们打算在复合函数中使用它。
现在,为了解决模型输出小于 0 或者大于 1 的问题,我们打算定义一个新的函数F(g(X))
,它将现行回归的输出压缩到[0,1]
区间,来转换g(X)
。你可以想到一个能这样做的函数吗?
你想到了 sigmoid 函数吗?太棒了,这就对了!
所以我们将g(x)
插入 sigmoid 函数中,得到了原始函数的一个函数(对,事情变得高阶了),它输出 0 和 1 之间的概率。
换句话说,我们正在计算“训练样本属于特定类”的概率:
P(Y=1)
。
这里我们分离了p
,它是Y=1
的概率,在等式左边。如果我们打算求解等式右边的,非常整洁的β0 + β1x + ϵ
,以便我们能够直接解释我们习得的beta
参数,我们会得到对数几率比值,简称对率,它在左边。这就是“对率模型”的由来。
对数几率比值仅仅是概率比值p/(1-p)
的自然对数,它会出现在我们每天的对话中。
在这一季的“权力的游戏”中,你认为小恶魔挂掉的几率有多大?
嗯...挂掉的可能性是不挂掉的两倍。几率是 2 比 1。的确,他太重要,不会被杀,但是我们都看到了他们对 Ned Stark 做的事情...
当你看到像这样的长式子时,不要惊慌。将其拆成小部分,并从概念上思考每个部分都是什么。之后就能理解了。
第一个部分是数据损失,也就是,模型预测值和实际值之间有多少差异。第二个部分就是正则损失,也就是,我们以什么程度,惩罚模型的较大参数,它过于看重特定的特征(要记得,这可以阻止过拟合)。
我们使用低度下降,使损失函数最小,就是像上面这样。我们构建了一个对数几率回归模型,来尽可能准确地预测分类。
支持向量机
我们再次位于一个充满弹球的房间里。为什么我们总是在充满弹球的房间里呢?我可以发誓我已经把它们丢掉了。
SVM 是我们涉及的最后一个参数化模型。它通常与对率回归解决相同的问题,二元分类,并产生相似的效果。它值得理解,因为算法本质上是由几何驱动的,并不是由概率思维驱动的。
SVM 可解决的一些问题示例:
- 这个图片是猫还是狗?
- 这个评论是正面还是负面的?
- 二维图片上的点是红色还是蓝色?
我们使用第三个例子,来展示 SVM 的工作方式。像这样的问题叫做玩具问题,因为它们不是真实的。但是没有东西是真实的,所以也没关系。
这个例子中,我们的二维空间中有一些点,它们是红色或者蓝色的,并且我们打算将二者干净地分开。
训练集画在了上面的图片中。我们打算在这个平面上划分新的未分类的点。为了实现它,SVM 使用分隔直线(在高维里面是个多维的超平面),将空间分成红色区域和蓝色区域。你可以想象,分隔直线在上面的图里面是什么样。
具体一些,我们如何选取画这条线的位置?
下面是这条直线的两个示例:
我希望你拥有一种直觉,觉得第一条线更好。直线到每一边的最近的点的距离叫做间距,而 SVM 尝试使间距最大。你可以将其看做安全空间:空间越大,嘈杂的点就越不可能被错误分类。
基于这个简单的解释,一个巨大的问题来了。
(1) 背后的数学原理是什么?
我们打算寻找最优超平面(在我们的二维示例中是直线)。这个超平面需要(1)干净地分隔数据,将蓝色的点分到一边,红色的点分到另一边,以及(2)使间距最大。这是个最优化问题。按照(2)的需求使间距最大的时候,解需要遵循约束(1)。
求解这个问题的人类版本,就是拿一个尺子,尝试不同的直线来分隔所有点,直到你得到了使间距最大的那条。
人们发现,存在求解这个最大化的数学方式,但是它超出了我们的范围。为了进一步解释它,这里是个视频讲义,使用拉格朗日优化展示了它的工作原理。
你最后求解的超平面的定义,有关它相对于特定x_i
的位置,它们就叫做支持向量,并且它们通常是最接近超平面的点。
(2) 如果你不能干净地分隔数据,会发生什么?
处理这个问题有两个方式。
2.1 软化“分隔”的定义
我们允许一些错误,也就是我们允许红色区域里面有一些蓝色点,或者蓝色区域里有一些红色点。我们向损失函数中。为错误分类的样本添加成本C
来实现。基本上我们说,错误分类是可以接受的,只是会产生一些成本。
2.2 将数据放到高维
我们可以创建非线性的分类器,通过增加维数,也就是,包含x^2
,x^3
,甚至是cos(x)
,以及其它。突然,你就有了一个边界,当我们将其带回低维表示时,它看起来有些弯曲。
本质上,这就类似红的和蓝色的弹球都在地面上,它们不能用一条直线分隔。但是如果你让所有红色的弹球离开地面,像右图这样,你就能画一个平面来分隔它们。之后你让他们落回地面,就知道了蓝色和红色的边界。
决策边界展示为绿色,左边是三维空间,右边是二维空间。与上一张来源相同。
总之,SVM 用于二元分类。它们尝试寻找一个平面,干净地分隔两个类。如果这不可能,我们可以软化“分隔”的定义,或者我们把数据放到高维,以便我们可以干净地分隔数据。
好的!
这一节中我们涉及了:
- 监督学习的分类任务
- 两种基础的分类方法:对数几率回归(LR)和支持向量机(SVM)
- 常见概念:sigmoid 函数,对数几率(对率),以及假阳性(误报)和假阴性(漏报)
在“2.3:监督学习 III”中,我们会深入非参数化监督学习,其中算法背后的概念都非常直观,并且对于特定类型的问题,表现都很优秀,但是模型可能难以解释。
练习材料和扩展阅读
2.2a 对数几率回归
Data School 拥有一个对数几率回归的非常棒的深入指南。我们也继续向你推荐《An Introduction to Statistical Learning》。对数几率回归请见第四章,支持向量机请见第九章。
为了解释对数几率回归,我们推荐你处理这个问题集。你需要注册站点来完成它。很不幸,这就是人生。
2.2b 深入 SVM
为了深入 SVM 背后的数学,在 MIT 6.034:人工智能课程中观看 Patrick Winston 教授的讲义,并查看这个教程来完成 Python 实现。