《统计学习方法》2.3
import numpy as np
trainingSet = np.mat([[1, 1], [2, 2], [1, 3], [3, 3], [5, 3], [3, 4]])
y = [1, 1, 1, -1, -1, -1]
# 计算Gram矩阵
m = np.shape(trainingSet)[0]
GramMatrix = [None] * m
for i in range(m):
GramMatrix[i] = [0] * m
for j in range(m):
GramMatrix[i][j] = int(np.dot(trainingSet[i], trainingSet[j].T))
# 参数初始化
alpha = [0] * m
b = 0
eta = 1
# 开始训练
isFound = False
while not isFound:
for i in range(m):
temp = 0
for j in range(m):
temp += alpha[j] * y[j] * GramMatrix[j][i]
if y[i] * (temp + b) <= 0:
alpha[i] += 1 * eta
b += y[i] * eta
break
elif i == m - 1:
isFound = True
w = [0, 0]
for i in range(m):
w += alpha[i] * trainingSet[i] * y[i]
print(w, b)