svm的几个疑问

版权声明:本文为博主原创文章,转载请标明原始博文地址。 https://blog.csdn.net/yuanlulu/article/details/81047664

支持向量所在的超平面为何是theta^t * x= -1 和theta^t * x = -1

(有时也写为theta^t * x + b = 0的形式,但是把x0总设为1,b也可以作为theta的一部分)

李航的《统计学习方法》里有比较严密的推导,可是我看不太懂。但是书里提到,合页损失函数和那套推理是等价的,所以可以用吴恩达在《机器学习》课程里的图来理解。至于为什么等价,请看书。

逻辑回归的损失函数,把log部分改为折线的形式:
image

(上图可能看不了)
把折线函数记为cost1和cost0. svm假设函数的优化目标变为下图:
image

所以要想代价函数为0,就要满足在y=1时theta^t * x >=1, y = 0时theta^t * x <= -1

支持向量是离分隔平面最近的点,只要支持向量满足上面的条件,其它点带入cita^t*x +b的绝对值都大于1,cost1和cost0就为0了。
image

怎么那么巧,支持向量上点带入theta^t * x刚好绝对值为1

假设针对一个数据集,找好了svm需要的分割面,使得支持向量的值带入theta^t * x刚好绝对值为1,这时把所有的样本点朝分隔面等比例移动,虽然分隔面依然是可以把所有的样本点分开,课时因为距离拉近,支持向量的点带入theta^t * x不再是1了吧?

哼哼,高兴早了。

可以把theta值等比例放大,使支持向量带入theta^t * x刚好绝对值为1。最优化过程会自动找到新的theta值。等比例放大缩小并不影响最优化的结果。

这下你服了吧。

因为等比例放大,所以超平面本身并没变,只是theta向量代表的超平面法向量长度变大了。
image
另外说一句,超平面到支持向量的距离(间隔)永远是1/||w||, ||w||是 [theta_1 ~ theta_m]对应函数的2范数。

所以不同的数据集对应的数值范围完全不一样,那些超参的选择都是技术活。

哪有那么巧,刚好能有平面把所有点分开,要是有噪音 呢?要是就分不开呢?

根据吴恩达的讲解,svm分类的优化公式为:
image

当刚好有超平面可以把所有点分开时,第一项刚好为0,可是当有噪点时,每个分类里面都有另一种分类的点,看你怎么分,哼哼,哈哈,没招了吧。如下图

image

确实分不开。上述优化公式第一项不再为0.但是可以加一个系数C,表示对误差的重视程度。当C比较大时,重视程度高,学习到的曲线是粉红色的,尝试吧所有点分开;当C比较小时,重视程度低,学习到的是黑色的线,对于异常点睁一只眼闭一只眼。实际情况这种有异常点的数据居多,所以C的选择很重要。

这里的C就是sklearn 的svm.SVC()参数参数里的C

如果样本的分布不是线性的,就是分不开呢?

有些数据分布不是普通的线性平面能分开的,如下图:
image

无论分隔面在哪,都无法得到一个很好的分类算法。
在图上的维度之下,确实无法得到合适的分隔面。但是可以把数据升维,维度高了,就会有合适的超平面能把把各个种类的数据分开了。
升维的方法很简单,就是用一个求相似度的函数(核函数)对每个样本求相似度,把测试数据和每个样本的相似度作为新的特征,然后利用之前的优化策略求新的参数。
image

image
对于使用高斯核2维的svm,升维最直观的理解就是数据不再在一个平面上,而是变为有第三个维度的小山,这样就可以借助第三个维度把数据分开
image

猜你喜欢

转载自blog.csdn.net/yuanlulu/article/details/81047664
svm