使用kernlab包构建线性核SVM时的异常支持向量疑问
关于kernlab中SVM支持向量的确认与异常支持向量的解答
嘿,我来帮你理清这个问题~
首先要明确:你对黑色点是支持向量的认知完全正确!在kernlab包的plot.ksvm函数中,默认就是用黑色标记支持向量,其余样本点用灰色显示,以此区分它们在SVM模型里的特殊地位——毕竟支持向量是决定分类边界的核心样本。
为什么会出现“异常”支持向量?
你生成的数据是两类均值差异明显的二维正态分布样本,但因为加入了随机噪声(rnorm生成的随机数),实际数据里会存在一些离群点,这些点成为支持向量甚至出现在对方类别的区域里,其实是软间隔SVM(也就是你用的C-svc类型)的正常表现:
C-svc是软间隔支持向量机,参数C控制了模型对误分类的惩罚力度:- 当
C值较大时,模型会极力避免误分类,可能会把离群点也纳入支持向量,甚至让分类边界迁就这些点; - 当
C值较小时,模型允许一定程度的误分类,支持向量会更集中在两类的“真正边界”附近。
- 当
- 你使用的是默认
C=1,这个值下模型会在“减少误分类”和“泛化能力”之间取平衡,所以出现跨类的支持向量是很正常的——这些点其实是模型为了整体边界的稳定性,主动允许的误分类样本,它们的存在能让模型对新数据的适应性更强。
几个验证和调整的小技巧
- 你可以用
alphaindex(svc)提取支持向量在原始数据x中的索引,对应查看这些点的坐标,就能直接验证它们是不是绘图里的黑色点; - 调整
C值观察变化:比如尝试ksvm(x, y, type = "C-svc", kernel = "vanilladot", C=100),更大的C会让模型更严格,跨类的支持向量会明显减少;如果设C=0.1,支持向量会更集中在边界区域; - 用
predict(svc, x)查看这些“异常”支持向量的预测结果,你会发现它们大多是被误分类的样本,这也解释了它们成为支持向量的原因——软间隔模型通过把这些点纳入支持向量,来换取整体分类边界的鲁棒性。
内容的提问来源于stack exchange,提问作者Sean Raleigh
相关产品推荐
相关产品推荐

