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=1,threshold=-θ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有一个很大的优点,就是成本函数是凸函数,不存在局部最优,都能找到全局最优。
- Machine Learning(Andrew)Week7(下)
- Machine Learning(Andrew)Week7(上)
- Machine Learning(Andrew)Week6(下)
- Machine Learning(Andrew)Week8(下)
- Machine Learning(Andrew)Week9(下)
- Machine Learning(Andrew)Week10(下)
- Machine Learning(Andrew)Week3(下)
- Machine Learning(Andrew)Week4
- Machine Learning(Andrew)Week5
- Andrew Coursera Machine Learning
- 【Coursera】Machine learning - week7 : Support Vector Machines
- 测试【Machine Learning week7】Support Vector Machines
- Andrew Ng Machine Learning 专题【Neural Networks】下
- Andrew’s machine learning course
- Andrew Ng-Machine learning (1)
- Machine Learning(Andrew)Week6(上)
- Machine Learning(Andrew)Week6(上)
- Machine Learning(Andrew)Week8(上)
- Android中静态变量(static)的使用
- 我要继续程序员的路吗?
- ZendStudio转PhpStorm 配置详情
- python ImportError: No module named 的错误解决思路和方法
- ip范围限制函数
- Machine Learning(Andrew)Week7(下)
- 一道小的算法题
- 从输入 URL 到页面加载完的过程中都发生了什么事情 —— 网络优化篇
- 一个完整的类似ctrl+f的功能
- .NET断想
- 设计模式--装饰模式
- undefined reference to "...."
- beforeunload处理用户最后事件,提交数据,用户退出
- android4.4 事件传递机制