白话机器学习笔记–分类篇
本次学习的重点是通过将图像区分为横向图像和纵向图像,实现二分类问题。
设置问题
下面有一组训练数据,是不是可以明显直观的看出来图像是横向的或者是纵向的。
宽 | 高 | 形状 |
---|---|---|
80 | 150 | 纵向 |
60 | 110 | 纵向 |
35 | 130 | 纵向 |
160 | 50 | 横向 |
160 | 20 | 横向 |
125 | 30 | 横向 |
如上,高和宽的部分是数据,形状的部分是标签
设x轴为图像的宽、y轴为图像的高,则有
明显可以看出,图中黑色点代表横向图像,白色点代表得是纵向图像
分类得目的就是找到一条线能够把白点和黑点分开
内积
在学习回归的时候,找到那条线的方式是通过求出一次函数的斜率和截距。这次的分类不一样,它的目的是找出向量(有大小和方
向的、带箭头的向量)。
这条线是使权重向量成为法线向量的直线。设权重向量为W(就是我们想要知道的未知参数,跟学习回归时用到的xita是一样的。) ,那么那条直线的表达式就是:
(两个向量的内积)
现在要考虑的是有宽和高的二维情况,所以n=2
然后可以试着去找出合适的W
譬如说,假设W=(1,1),那么代入之后,就可以得出W*X=X1+X2=0。即X2= -X1。下图便为“使权重向量成为法线向量的直线”
感知机
将权重向量用作参数,创建更新表达式来更新参数。接下来,我要说明的就是被称为感知机(perceptron)的模型。
感知机是接受多个输入后将每个值与各自的权重相乘,最后输出总和的模型。
训练数据的准备
设表示宽的轴为x1、表示高的轴为x2,用y来表示图像是横向还是纵向的,横向的值为1、纵向的值为 -1。
图像大小 | 形状 | x1 | x2 | y |
---|---|---|---|---|
80*150 | 纵向 | 80 | 150 | -1 |
60*110 | 纵向 | 60 | 110 | -1 |
35*130 | 纵向 | 35 | 130 | -1 |
160*50 | 横向 | 160 | 50 | 1 |
160*20 | 横向 | 160 | 20 | 1 |
125*30 | 横向 | 125 | 30 | 1 |
接下来,根据参数向量x来判断图像是横向还是纵向的函数,即返回 1 或者 -1 的函数Fw(x)的定义如下。这个函数被称为判别函数
这部分截至目前是有点迷的(根据内积的符号来给出不同返回值的函数
,这样就可以判断图像是横向还是纵向的了?)
结合这个公式
我们知道其中|w|、|x|肯定是正数,那么决定内积符号得就是
与权重向量W之间的夹角为xita,可以明显的看出来在时,为负。
所以可以根据内积的正负来分割。
内积是衡量向量之间相似程度的指标。结果为正,说明二者
相似;为 0 则二者垂直;为负则说明二者不相似。
权重向量的更新表达式
(其中 i 指的是训练数据的索引,而不是 i 次方的意思。)
用这个表达式重复处理所有训练数据,更新权重向量。
后面条件的意思就是:更新表达式只有在判别函数分类失败的时候才会更新参数值。
理解上述表达式
1.
通过判别函数对宽和高的向量x进行分类的结果与实际的标签y不同。也就是说,判别函数的分类结果不正确。反之,第二个式子表达的意思就是判别函数的分类结果是准确的。
2.
光看这个表达式的话是会觉得很难。一边把学习过程实际地画在图上,一边去考虑它的含义可能就容易理解了。
首先在图上随意画一个权重向量和直线吧。(就像回归时随意确定初始值一样,权重向量是通过随机值来初始化的。我们可以随意先确定一个初始向量。)
在这个状态下,假设第一个训练数据是首先我们就用它来更新参数吧。
训练数据x(1)的标签y(1)是1,说明分类失败,需要更新表达式。(此时y(1)=1)
此时这个 w+x(1) 就是下一个新的w
画一条与新的权重向量垂直的直线,相当于把原来的线旋转了一下。
刚才x(1)与权重向量分居直线两侧,现在它们在同一侧。
这次xita<90度,所以内积为正,判别函数Fw(x)的分类结果为 1。而且x(1)的标签也为 1,说明分类成功了。然后这样更新参数的权重向量。
刚才处理的是标签值y=1的情况,而对于y=-1的情况,只是更新表达式的向量加法变成了减法而已,做的事情是一样。虽然有加法和减法的区别,但它们的做法都是在分类失败时更新权重向量,使得直线旋转相应的角度。
像这样重复更新所有的参数,就是感知机的学习方法。
线性可分
感知机最大的缺点就是它只能解决线性可分的问题(线性可分指的就是能够使用直线分类的情况)
多层感知机就是神经网络
逻辑回归
能应用于线性不可分问题的算法(是把分类作为概率来考虑)
设横向的值为 1、纵向的值为0。(只要是两个不同的值,用什么都可以。在学习感知机时之所以设置值为 1 和 -1,是因为这样会使参数更新表达式看起来更简洁,而现在则是设置为 1 和 0 会更简洁。)
sigmoid 函数
在学习回归的时候,我们定义过这样一个带参数的函数。
通过最速下降法或随机梯度下降法来学习参数xita的表达式。使用这个 xita能够求出对未知数据 x 的输出值。
我们需要能够将未知数据分类为某个类别的函数
sigmoid 函数
使用与回归时同样的参数xita,函数的形式是:
注意横纵坐标
解释:
exp:指数函数。exp(x)就是
sigmoid函数得两个特征:
(1)
(2)
就是因为它的第二个特征,所以这个函数可以用来作为概率使用。
决策边界
接下来,把未知数据 x 是横向图像的概率作为
表达式这么写:
表示在给出x数据时,y=1,即图像为横向的概率。
改写为
不过改写的意义在哪儿呢?
接下来像学习感知机时那样,设横轴为图像的宽(x1)、纵轴为图像的高(x2),并且画出图来考虑。
像学习回归时那样,先随便确定xita再具体地去考虑。比如当xita是这样的向量时,我们来画一下的图像。
先代入数据,把表达式变为容易理解的形式:
那么这个不等式表示的范围也就是图像被分类为横向或纵向的范围了
这条直线作为边界线,就可以把这条线两侧的数据分类为横向和纵向。
这样用于数据分类的直线称为决策边界
逻辑回归:为了求得正确的参数xita而定义目标函数,进行微分,然后求参数的更新表达式
似然函数
由于一开始把x为横向的概率P(y=1 | x)定义为,那么y与是什么关系呢?
由于是x为横向的概率。
那么在y=1时,=1、 y=0时,=0
换个说法:
y=1时,我们希望P(y=1 | x)是最大的
y=0时,我们希望P(y=0 | x)是最大的
或者是
P(y=1 | x)是是图像为横向的概率, P(y=0 | x)是是图像为纵向的概率,
图像大小 | 形状 | y | 概率 |
---|---|---|---|
80*150 | 纵向 | -1 | 期望P(y=0 |
60*110 | 纵向 | -1 | 期望P(y=0 |
35*130 | 纵向 | -1 | 期望P(y=0 |
160*50 | 横向 | 1 | 期望P(y=1 |
160*20 | 横向 | 1 | 期望P(y=1 |
125*30 | 横向 | 1 | 期望P(y=1 |
而且,假定所有的训练数据都是互不影响、独立发生的,这种情况下整体的概率就可以用下面的联合概率来表示
联合概率的表达式是可以一般化写法
第 1 次的概率是第 2 次的概率是
表示指数。
分别考虑。。。分别将指数y(i)代入1和0
接下来考虑一下使这个目标函数最大化的参数xita
目标函数L(xita)也被称为“似然”。在目标函数中,使其值最大的参数xita能够最近似地说明训练数据。
对数似然函数
目标:对似然函数进行微分,求出参数xita
对似然函数变形
不过因为
(1)它是联合概率。概率都是 1 以下的数,所以像联合概率这种概率乘法的值会越来越小。
(2)用到乘法。与加法相比,乘法的计算量要大得多。
所以直接对似然函数进行微分有点困难,在此之前要把函数变形。
只要取似然函数的对数就好了。像这样在等式两边加上 log即可。(log 是单调递增函数)
再变形
似然函数的微分
前面讲了很多,总结一下就是逻辑回归将这个对数似然函数用作目标函数。
接下来,对各个参数求微分,导出参数更新表达式:
(与回归时不同的是,最小化时要按照与微分结果的符号,相反的方向移动,而最大化时要与微分结果的符号同向移动。)
或者这么写:(为了与回归时的符号保持一致)
线性不可分
将逻辑回归应用于线性不可分问题
我们要像学习多项式回归时那样,去增加次数。用曲线去实现分类。
向训练数据中加入。考虑这样的数据:
然后,就变成这样:
然后假设xita得数据是如下,
那么代入
得到
然后画图就变成这样:
另外:在逻辑回归的参数更新中也可以使用随机梯度下降法。还有一个名为 SVM,也是多分类的一种做法,也就是支持向量机的分类算法也很有名。