最近在用Python实现SVM,参考了网上一些代码,发现其中关于
f
(
x
)
f(x)
f(x)相关参数的计算不太正确。
如下面博客中的代码:
https://blog.csdn.net/jichun4686/article/details/102947388
其中使用核函数并进行相关凸二次规划问题的求解后,预测函数仍为
f
(
x
)
=
w
T
x
+
b
f(x)=\bm{w^T}\bm{x}+b
f(x)=wTx+b 的形式。事实上由于核函数把原样本空间映射到了其它维度的空间,
w
\bm{w}
w 和
x
\bm{x}
x 的形式会发生变化。正确的形式应当为
f
(
x
)
=
w
T
Φ
(
x
)
+
b
f(x)=\bm{w^T}Φ(\bm{x})+b
f(x)=wTΦ(x)+b。其中
Φ
(
x
)
Φ(\bm{x})
Φ(x) 表示将
x
\bm{x}
x 映射后的空间向量。因为直接得到这个映射的形式可能相当地困难,所以可以通过如下方式得到
b
b
b :
b
=
y
j
−
∑
i
=
1
m
α
i
y
i
κ
(
x
i
x
j
)
(1)
b = y_j -\sum_{i=1}^mα_iy_iκ(\bm{x}_i\bm{x}_j)\tag{1}
b=yj−i=1∑mαiyiκ(xixj)(1)之后通过支持向量展式
f
(
x
)
=
∑
i
=
1
m
α
i
y
i
κ
(
x
,
x
i
)
+
b
(2)
f(\bm{x}) = \sum_{i=1}^mα_iy_iκ(\bm{x},\bm{x}_i) +b \tag{2}
f(x)=i=1∑mαiyiκ(x,xi)+b(2)即可得到
f
(
x
)
f(x)
f(x) 以进行预测。
注:m为训练集中样本的个数。
x
=
(
x
1
,
x
2
,
x
3
.
.
.
)
\bm{x}= (\bm{x}_1,\bm{x}_2,\bm{x}_3...)
x=(x1,x2,x3...) 为训练集或测试集。
SVM中使用核函数后相关参数的计算
最新推荐文章于 2023-05-29 16:22:15 发布
在使用Python实现SVM时,发现一些代码在处理核函数后预测函数f(x)=wTx+b的表示不准确。实际上,由于核函数将样本映射到高维空间,应为f(x)=wTΦ(x)+b,其中Φ(x)是映射后的向量。通过支持向量可以求得b,并用公式(2)得到f(x)进行预测。
摘要由CSDN通过智能技术生成