感覺機是二類分類的線性分類模型,利用随機梯度下降法對基于誤分類的損失函數進行極小化。
書中算法可以将所有樣本和系數向量寫成增廣向量的形式,并将所有負樣本乘以-1,統一形式,友善計算。
(1)訓練資料集線性可分時,感覺機學習算法原始形式疊代收斂
(2)算法存在許多解
感覺機學習算法的對偶形式使得訓練過程中執行個體僅以内積形式出現,可以提前存儲(Gram矩陣)。
# train = [[(3, 3), 1], [(4, 3), 1], [(1, 1), -1]]
train = [[(0, 0), 1], [(0, 1), 1], [(1, 0), -1], [(1, 1), -1]]
w = [0, 0]
b = 0
def update(data):
global w, b
for i in range(len(data[0])):
w[i] = w[i] + 1 * data[1] * data[0][i]
b = b + 1 * data[1]
# print(w, b)
def cal(data):
global w, b
res = 0
for i in range(len(data[0])):
res += data[0][i] * w[i]
res += b
res *= data[1]
return res
def check():
flag = False
for data in train:
if cal(data) <= 0:
flag = True
update(data)
if not flag:
print("w: " + str(w) + " b: " + str(b))
return True
return False
for times in range(1000):
if check():
break
算法的實作參考了 https://blog.csdn.net/qq_30611601/article/details/79313609