感知机模型:
感知机学习策略:通过改变w,b,使损失函数最小
感知机学习算法:随机梯度下降(每次仅对一个误分点进行学习)
import numpy as np
def f(w, x, b):
y = np.sum(np.dot(w, x)) + b
if y > 0:
return 1
return -1
def loss(w, x, b, y):
t = -1 * y * f(w, x, b)
if t > 0:
return t
return 0 ##important!!!
def dloss(x, y):
return -1 * np.dot(x, y)
def perceptron(x, y, w, b, sinta):
# 感知机学习算法
t = 1
while (t > 0):
wrong = 0
for i in range(len(x)):
t = loss(w, x[i], b, y[i])
if t > 0:
wrong = i
break
if t > 0:
w = w - sinta * dloss(x[wrong], y[wrong])
b[0] = b[0] + sinta * y[wrong]
print(wrong, w, b)
def gram(x):
tx = np.mat(x).transpose()
return np.dot(x, tx)
def Dual_form(x, y, sinta):
# 对偶形式
gram_x = gram(x)
alpha = [0] * len(x)
b = 0
t = -1
while (t <= 0):
for i in range(len(x)):
t = y[i] * (np.sum(np.multiply(np.multiply(alpha, y), gram_x[i])) + b)
if t <= 0:
alpha[i] += sinta
b += y[i]
break
print(alpha)
w = np.dot(np.multiply(alpha, y), x)
print(w)
if __name__ == "__main__":
x = [[3, 3], [4, 3], [1, 1]]
y = [1, 1, -1]
w = [0] * 2
b = [0]
print(x, y, w, b)
# perceptron(x,y,w,b,1)
Dual_form(x, y, 1)