svm模型学到的是什么?模型存储了哪些参数?为什么只需保存支持向量?高维映射和核方法?
高维映射显然可以提高模型的拟合能力,也就是准确度。理论上做完高维映射以后的LR,准确度应该是跟SVM会是一样的。
那我们为什么不把LR也高维映射一下呢?
别忘了,做高维映射是有代价的,计算高维映射的过程太费时间了。你可能会说,我们不是还有核方法吗?对啊,确实可以用核方法避开高维映射计算,那对应也是有代价的,我们得保存下来所有训练样本。保存所有训练样本对于样本过大的时候,LR几乎是不可接受的。SVM强就强在,它根本不需要保存所有训练样本,只要保存一小部分叫做支持向量的样本。
线性模型LR显然是一种参数化方法,好处是训练完成的模型只需要存储权重向量(W,b)。
而svm使用了核方法以后,由于我们用训练集替换掉了权重项,因此相当于转化成了非参数化的方法,显然增加了需要存储的数据量,同时每一次做预测都需要用到全部训练数据集。
本来用完核方法以后,我们得用到全部训练样本,来对一个新样本做做预测。但是由于SVM的特殊性,很多训练样本对预测不起作用,只需要一部分特殊的训练样本来做预测了。这部分特殊的训练样本就叫做支持向量。
svm模型训练后的参数如下: (保存的主要是支持向量)
iter 为迭代次数,
nu 与前面的操作参数 -n nu 相同,
obj 为 SVM 文件转换为的二次规划求解得到的最小值,
rho 为判决函数的常数项 b ,
nSV 为支持向量个数,
nBSV 为边界上的支持向量个数,
Total nSV 为支持向量总个数。
训练后的模型保存为文件 *.model ,用记事本打开其内容如下:
svm_type c_svc % 训练所采用的 svm 类型,此处为 C- SVC
kernel_type rbf % 训练采用的核函数类型,此处为 RBF 核
gamma 0.0769231 % 设置核函数中的 g ,默认值为 1/ k
nr_class 2 % 分类时的类别数,此处为两分类问题
total_sv 132 % 总共的支持向量个数
rho 0.424462 % 决策函数中的常数项 b
label 1 -1% 类别标签
nr_sv 64 68 % 各类别标签对应的支持向量个数
SV % 以下为支持向量
1 1:0.166667 2:1 3:-0.333333 4:-0.433962 5:-0.383562 6:-1 7:-1 8:0.0687023 9:-1 10:-0.903226 11:-1 12:-1 13:1
0.5104832128985164 1:0.125 2:1 3:0.333333 4:-0.320755 5:-0.406393 6:1 7:1 8:0.0839695 9:1 10:-0.806452 12:-0.333333 13:0.5
1 1:0.333333 2:1 3:-1 4:-0.245283 5:-0.506849 6:-1 7:-1 8:0.129771 9:-1 10:-0.16129 12:0.333333 13:-1
1 1:0.208333 2:1 3:0.333333 4:-0.660377 5:-0.525114 6:-1 7:1 8:0.435115 9:-1 10:-0.193548 12:-0.333333 13:1
对于超级超级超级大的数据集,用SVM肯定巨慢,因为这时候支持向量数量也肯定很多,复杂度肯定跟支持向量的数量有关。这时候显然只能用LR。它是一个参数化的方法,我们只需要保存两个向量参数 ω , b \omega, b ω,b,预测的复杂度甚至是 O \large{O} O,其中n代表数据的维度。
用训练集替换掉了权重项:
由于做高维映射的计算量比较大。当我们遇到需要做高维映射的时候 ϕ ( x ) \phi(x) ϕ(x) ,可以通过核方法,把需要学习的模型配出一项来组成 ϕ ( t ) T ϕ ( x ) \phi(t)^T\phi(x) ϕ(t)Tϕ(x) 的形式,然后用一个核函数 k ( t , x ) k(\bf{t,x}) k(t,x) 来替换它,从而消除掉把低维向量往高维映射的过程 ϕ ( x ) \phi(x) ϕ(x)。这种替换的技巧就叫做核方法,能够实现替换目的的函数叫做核函数。
高维映射以后的模型表达式:
y
=
ω
T
ϕ
(
x
)
y=\bf{\omega}^T\phi(x)
y=ωTϕ(x)
核函数的表达式可以写成:
k
(
t
,
x
)
=
ϕ
(
t
)
T
ϕ
(
x
)
k(t,x)=\phi(t)^T\phi(x)
k(t,x)=ϕ(t)Tϕ(x)
怎么利用核函数代替高维映射呢?
就是要想办法从
ω
\omega
ω里面分离出一个
ϕ
(
t
)
T
\phi(t)^T
ϕ(t)T项,来跟我们的
ϕ
(
x
)
\phi(x)
ϕ(x)搭配在一起,组成核函数的表达式。如下图: