关于参数C的设置

来源:11-4 scikit-learn中的SVM

儒将肚甫

2019-12-23

图片描述
波波老师您好,不好意思又打扰您了。继续请教您几个问题
首先理解是否正确:上面式子中,x(i)是某一个支持向量、WT是权重参数、b是偏置、y(i)是标签参数。
如果每个训练样本提取了13个特征向量,那x(i)就是13维的,WT就是13维的,y(i)就是13维的(13个要么是-1,要么是1的数字),b是一个数字。对么~?
我的问题是:

  1. 怎么从一大堆训练样本中找到边界的那个支持向量?也就是,如果我们要确定一根直线的方程 y=kx+b,我们带入的 (x,y)的值必须是支持向量的才有意义对吧,那怎么确定哪个是支持向量(得先定位找到它,才能使用它的数据来定分类超平面啊)?
  2. 如果我在使用SVC函数的时候,把C设置成了0或者很小的值,也就是硬间隔了(假设我以为我的数据是完全线性可分的),但是我的两类数据实际是线性不可分的!!!(也就是这时候,理论上我是求不出这么一个分类超平面的模型参数的)这时候会发生什么?会报错么?
  3. 每个支持向量x(i)(对于我做的,是一个13维的向量)会对应一个图片描述对吧,那这个值是怎么确定的?也就是,我最后要求的模型参数,是WT,b 和 这三个对么?
  4. 如果我这个分类超平面找到了,我用一个测试的数据(一个新的13维向量,在训练集之外的数据)带入到式子中和求出的模型参数一起运算,最终会得到一个“1”或者“-1”,这样就可以实现分类了对吧??可以这样理解么~?
  5. 最后,我感觉我们平时做SVM的机器学习,我们自己可做的事情好像并不多。我们无非就是,决定从原始的训练样本中提取哪些特征向量、决定决策的严酷度(也就是设置C)??

期待您的回复,谢谢啦!

写回答

1回答

liuyubobobo

2019-12-23

首先,y(i) 不是 13 维的,是 1 维的。每一个 y(i) 只是一个数字。


1

支持向量不是找到的,而是求出来的。你贴的这页 ppt 是一个最优化问题,这个最优化问题对应了一个解。如你的问题三所说,包含w,b 和 ζ。实际最后的求解结果,我们并不关注支撑向量是谁,而是关注决策平面是谁,即 w 和 b 是谁。


具体这个最优化问题如何求解,背后的数学比较复杂,远远超过这个课程的范畴了。课程中简单提及了两句,主要在 11-2。也可以参考这两个问答:

https://coding.imooc.com/learn/questiondetail/96581.html

https://coding.imooc.com/learn/questiondetail/40275.html


2

如果 C 是很小的值,肯定有解;

如果 C 为 0,可能没有解(线性不可分的情况),这就好比二次方程可能在实数范围里没有解。所以 sklearn 的接口设计,C 不能为 0。


3

对。但是由于我们只对决策边界感兴趣,最终结果我们只取 w 和 b。可以理解成 ζ 只是一个中间的计算结果。


4

对。


5

其实,当我们使用任何框架进行机器学习的时候,做的事情都不多,主要是调参。因为框架本身已经帮助我们把算法封装好了。


因此,当机器学习的基本算法掌握以后,机器学习的一个核心任务,是特征工程。可以参考这里:https://coding.imooc.com/learn/questiondetail/40722.html


继续加油!:)

1
1
儒将肚甫
太谢谢了,受益匪浅
2019-12-24
共1条回复

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5893 学习 · 2454 问题

查看课程