例子摘自李航老师的《统计学习方法》,公式参考西瓜书或者《统计学习方法》
例:
已知一个如图所示训练集,正例点是x1 = (3,3),x2 = (4,3),反例点是x3 = (1,1),试求最大间隔分离超平面。
解:
以上是直接带入公式的求解过程,如果使用python和库函数来计算模型参数,将会方便很多,因为不涉及向高维转换,所以使用线性核即可。
from sklearn.svm import SVC
import numpy as np
data = {
"X": np.array([[3, 3], [4, 3], [1, 1]]),
"y": np.array([1, 1, -1])
}
# 如果采用高斯核,将对结果产生影响
svc = SVC(kernel="linear")
svc.fit(X=data["X"], y=data["y"])
# 输出支持向量
print("support vector:", svc.support_vectors_)
# dual_coef_存储α * y的值
a_y = svc.dual_coef_
# 类标
y = np.array([data["y"][svc.support_]])
print("支持向量的类标", y)
# 拉格朗日系数α
a = np.multiply(a_y, y)
print("支持向量的拉格朗日系数", a)
结果:
support vector: [[1. 1.]
[3. 3.]]
支持向量的类标 [[-1 1]]
支持向量的拉格朗日系数 [[0.25 0.25]]
其实"dual_coef_"就是"ai*yi" 的集合,即: