主要讲向量机SVM
以前学的逻辑回归
支持向量机和逻辑回归之间有相似之处,但是实质是不相同的
将1/m去掉,因为是常数并不影响,成为A+λ×B,乘1/λ=C 就可以得到以上结果
支持向量机的边界
事实上,支持向量机现在要比这个大间距分类器所体现得更成熟,尤其是当你使用大间距分类器的时候,你的学习算法会受异常点 (outlier) 的影响。比如我们加入一个额外的正
样本。
如果你将 C 设置的不要太大,则你最终会得到这条黑线,当然数据如果不是线性可分的,如果你在这里有一些正样本或者你在这里有一些负样本,则支持向量机也会将它们恰当分开。因此,大间距分类器的描述,仅仅是从直观上给出了正则化参数 C 非常大的情形,同时,要提醒你 C 的作用类似于 1/λ,λ是我们之前使用过的正则化参数。这只是C 非常大的情形,或者等价地λ非常小的情形。你最终会得到类似粉线这样的决策界,但是实际上应用支持向量机的时候,当 C 不是非常非常大的时候,它可以忽略掉一些异常点的影响,得到更好的决策界。甚至当你的数据不是线性可分的时候,支持向量机也可以给出好的结果。
C 较大时,相当于 λ 较小,可能会导致过拟合,高方差。
C 较小时,相当于 λ 较大,可能会导致低拟合,高偏差。
核函数
上例中的 similarity(x,l(1))就是核函数,具体而言,这里是一个高斯核函数(Gaussian Kernel)。注:这个函数与正态分布没什么实际上的关系,只是看上去像而已。
如果x和L 差不多,那么f约等于1,如果x远离L,f约等于0
在预测时,我们采用的特征不是训练实例本身的特征,而是通 过核函数计算出的新特征 f1,f2,f3。如果值>0,则预测1。
如何选择地标?
我们通常是根据训练集的数量选择地标的数量,即如果训练集中有 m 个实例,则我们
选取 m 个地标,并且令: l(1)=x(1),l(2)=x(2),...,l(m)=x(m)。这样做的好处在于:现在我们得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上的,即:
下面我们将核函数运用到支持向量机中,修改我们的支持向量机假设为:
给定 x,计算新特征 f,当 θTf>=0 时,预测 y=1,否则反之。 相应地修改代价函数为:在具体实施过程中,我们还需要对最后的归一化项进行些微调整,在计算时,我们用θTMθ代替 θTθ,其中 M 是根据我们选择的核函数而不同的一个矩阵。这样做的原因是为了简化计算。理论上讲,我们也可以在逻辑回归中使用核函数,但是上面使用 M 来简化计算的方法不适用与逻辑回归,因此计算将非常耗费时间。
支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(linear kernel),当我们不采用非常复杂的函数,或者我们的训练集特征非常多而实例非常少的时候,可以采用这种不带核函数的支持向量机。
C 较大时,相当于 λ 较小,可能会导致过拟合,高方差
C 较小时,相当于 λ 较大,可能会导致低拟合,高偏差
σ较大时,导致高方差,过拟合
σ较小时,导致高偏差,欠拟合
尽管你不去写你自己的 SVM(支持向量机)的优化软件,但是你也需要做几件事:
1、是提出参数 C 的选择。我们在之前的视频中讨论过误差/方差在这方面的性质。
2、你也需要选择内核参数或你想要使用的相似函数,其中一个选择是:我们选择不需要任何内核参数,没有内核参数的理念,也叫线性核函数。因此,如果有人说他使用了线性核的 SVM(支持向量机),这就意味这他使用了不带有核函数的 SVM(支持向量机)。
在使用高斯核函数之前需要进行归一化处理
在高斯核函数之外我们还有其他一些选择,如:
多项式核函数(Polynomial Kernel)
字符串核函数(String kernel)
卡方核函数( chi-square kernel)
直方图交集核函数(histogram intersection kernel)
一些遵守的规则和原则
n 为特征数,m 为训练样本数。
(1)如果相较于 m 而言,n 要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。
(2)如果 n 较小,而且 m 大小中等,例如 n 在 1-1000 之间,而 m 在 10-10000 之间,使用高斯核函数的支持向量机。
(3)如果 n 较小,而 m 较大,例如 n 在 1-1000 之间,而 m 大于 50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。