Machine Learning(Andrew)Week7(下)

来源:互联网 发布:淘宝收入排行榜 编辑:程序博客网 时间:2024/06/03 22:11

Kernels

相似度

我们在Andrew的Week4中说到,如果非线性分类用多项式组合,可以找的h非常之多Hsuan-Tien Lin第十二讲也分析,这样的组合的特征非常多。

有没有更好的方式来选特征呢?

我们利用核函数kernel来定义新的特征值。

Kernel是数据点的特征的内积。

可以理解为两个数据点xi,xj,比较它们在特征空间的相似度,就是kernel。

Kernel值比较大,二者比较相似。kernel通过比较数据点的相似性,把原来的特征映射到更高维的特征空间。

现在,我们给定几个地标点(landmarks):

现在给一个点x,我们用kernel来计算它的新特征。具体做法就是:

这里计算相似度用的是高斯核函数:

(长的特别像高斯分布)

所以,如果两个点很相似的话,相似度就接近1;如果很不像的话相似度就接近0。

这样,就能得出上面三个新特征的值了f1,f2,f3。说到这里,我们知道核函数的作用了,它是选一个函数,如上面的高斯核函数,然后将数据的原来的特征映射成新特征。

高斯核函数中,x和l都是知道的,σ是我们不知道的,看看它是如何影响我们的模型的。

上图中,水平坐标是x1和x2。可以看出,当x和l一样时,f为1。随着x和l的差异越来越大,f越来越向下。而下降的速率受σ控制。当σ比较大时,f扁平。

来看上面的例子,假设我们想将蓝色曲线圈起来的点,预测为1,圈外的点预测为0。模型要满足什么样的要求?

我们看到在圈内,在圈外。所以,如果预测点为1,该点必须和相似,和不相似。

所以,模型就是:

假设我们通过训练知道了参数的值:θ0=-0.5,θ1=1,θ2=1,θ3=0。

这时,如果x1的新特征为:f1≈1,f2≈0,f3≈0,代入上式,得到h(f)≥0,y=1。

如果x2的新特征为f1≈0,f2≈1,f3≈0同样代入,得到h(f)≥0,y=1。

如果x3的新特征为f1≈0,f2≈0,f3≈1,代入上式,得到h(f)≥0,y=0。

上面参数所构成的边界,就是那条蓝色的曲线,是通过选的landmarks和训练数据得到的。参数控制的特征已经不是原来的特征了,而是通过核函数映射出的新特征。

训练模型

接下去,就说说,模型是如何训练出来的。主要涉及landmark的选取和参数θ计算。

我们开始的时候选的landmarks好像是随便选的一样,实际上给的数据点很多,我们不可能像上面那样,随便找两三个说是landmarks。

假设核函数还是选高斯核函数:

现在,给了m个数据

就选m个点作为landmarks(不考虑是正是负)

 

这样,我们就有m个landmarks。


把每个数据点都和m个landmark算一个相似度。

由上面可以看出,f1=1。因为=

同样,其他数据做特征映射的时,也会有一个=,则fi=1。

我们把上面的特征写成矩阵的形式,如下图,选5个点的例子。m=5。fij表示的第j个特征。

 

我们给特征矩阵个名字吧,叫F矩阵。看f12,它是的相似度。=。所以f12的相似度。

再看f21,它是的相似度。=,所以f21是的相似度。则f12=f21。新特征f构成的矩阵是个对称矩阵。且对角线上的值都是1。因为f11就是的相似度。

每个数据的特征都加一个f0=1,构成m+1维的特征。f0是为θ0准备的,因为阈值内建,边界函数为:f0=1threshold=-θ0

举个例子:

如,做正区间的分类,如下图,Hsuan-Tien Lin第五讲说的正区间分类。如果,我们就想找一条直线,将它们分开,显然这是不可能的。

数据点只有一个特征x。用kernel投影到二维空间。这里kernel选的是别的核函数。

就能找到一条直线将它们分开了。

这条线其实就是

这个和Hsuan-Tien Lin第十二讲的一样,这里的kernel就是,即特征转换。

上面讲的都是kernel,现在我们讲如何训练参数θ。

也是用成本函数,不同的是原来的特征x用f代替了。注意:θ从1开始,忽略θ0。

,我们就用来替换,这样方便计算。(不太清楚为什么加M矩阵)

C和西格玛σ的选择

前面说到,C=1/λ很大,λ很小,过拟合,高variance,低bias。

C=1/λ很小,λ很大,欠拟合,高bias,低variance。

Kernel选的是高斯核函数,和正太分布类似,则:

越大,x-f图像偏胖,特征fi变化平缓,高bias,低variance。

越小,x-f图像偏瘦,特征fi变化迅速,高variance,低bias。

Using an SVM

优化参数θ常用software package 比如liblinear,libsvm

所以,用SVM需要选择C和核函数(计算相似度的函数)。

如果不采用核函数,SVM就是线性的SVM,如:

模型可能就是hθ(x)=θ0+θ1x1+θ2x2+……+θnxn

非线性的SVM就需要选择核函数了(我们说核函数做的事情就是特征转换)如:

如果选的是高斯核函数,就需要选择σ。

使用高斯核函数之前,需要对(x-l)做feature scaling(在Andrew的week2特征归一化Feature scaling)。

其他的kernel

并不是所有的相似函数都可以做核函数,需要满足Mercer’s Theorem的才行。

Mercer’s Theorem是要求我们前面说的特征F矩阵对称且半正定。对称我们知道符合了,半正定就是说特征F矩阵≥0。就是对于任意的非0向量x,F矩阵满足:≥0。

判定一个矩阵正定的方式很多,可以用顺序主子式的行列式来判定。比如下列矩阵:


半正定矩阵的各主子式均非负


核函数有:

Polynomial kernel:也可以比较相似度

more esoteric:String kernel,chi-square kernel,histogram,intersection kernel

Multi-class classification

许多SVM packages都有多类别分类功能。

否则,就使用one-vs-all方法。即训练多个SVM分类器。

逻辑回归VS SVM

我们是从逻辑回归过渡到SVM的,那么选择模型时该如何选择呢?

下面是一些准则:

n=特征数,m=训练样本的个数


需要强调的是,神经网络都可以解决上面的问题,只是会很慢。SVM有一个很大的优点,就是成本函数是凸函数,不存在局部最优,都能找到全局最优。

1 0
原创粉丝点击