最近在做机器学习相关的zkp工作,在处理支持向量机核函数时对一些具体细节产生了一些疑惑,查询了很多资料,并做实验得到了结论,在此记录一下 (2021.8.9)
问题描述
在进行支持向量机分类时(svc),大部分问题都要使用核函数,而最常用的核函数时rbf核函数。根据sklearn的文档,rbf核函数的定义是:
可以看到,核函数的定义是计算两个输入向量x
和y
的距离,乘以某一个参数并求e
的负指数幂。这里问题来了:假设我们已经持有一个训练好的模型,参数固定,且有一条训练数据x
,那么此时,y
是什么?
几个猜想
- 猜想1:由于函数中
y
的定义是None
,一开始猜想y
是0,或者是x本身。这两个猜想比较容易看出是错误的,被排除。 - 猜想2:看了许多知乎、csdn后,发现有人描述:“rbf核函数的思想有些像k-means聚类,将新样本分类到最近的样本中”。更有博客描述在径向基核函数中
y
是一个“landmark”(啊真不知为什么要这样讲,个人感觉很歧义呀),因此猜测y
会不会是在训练阶段固定下来的参数,像上式中的 γ \gamma γ一样。但有些地方又说“多数情况下取所有训练集作为landmark”。经过思考,认为不太可能把训练数据集直接嵌入到模型里,并且模型没有相应维度、或类似维度的输出,排除这个猜想。 - 猜想3:也单独考虑过训练集,或部分训练数据,同理排除。
- 猜想4:考虑过训练样本本身两两计算距离,然而哪怕只有一条数据也应该可以预测,因此排除。
结论
在排除了一堆错误答案,看了无数的博客,跟许多人讨论后,认为有很大可能这里的y
是支持向量机的支持向量,即support vectors。同时在翻找资料时,找到这样一个帖子:
在这个回答中,我们可以看到博主提到,decision function是:
Σ i ∈ S V α i k ( x , x i ) + b = y \Sigma_{i\in SV}\alpha_ik(x, x_i)+b=y Σi∈SVαik(x,xi)+b=