天天看點

《統計學習方法》-感覺機-例2.2

《統計學習方法》-感覺機-例2.2
import numpy as np
           
x = np.array([[3,3],[4,3],[1,1]])
y = np.array([1,1,-1])
           
alfa = np.zeros(3)
alfa
           
array([0., 0., 0.])
           
w = np.array([0.,0.])
b = 0
lr = 1
# for i in range(len(y)):
#     w += alfa[i] * y[i] * x[i]

def foo(alfa,y,w):
    for i in range(len(y)):
        w += alfa[i] * y[i] * x[i]
#         print(w)
    return w
w = foo(alfa,y,w)
w
           
array([0., 0.])
           
count =20
tag = 0
print('alfa={},b={}'.format(alfa,b))
while count > 1:
    tag += 1
    print('第{}次疊代'.format(tag))

    w = np.array([0.,0.])
#     print('w={},b={}'.format(w,b))
    w = foo(alfa,y,w)
    print('w={},b={}'.format(w,b))
    count -= 1
    for i in range(len(y)):
        print(i)
        if y[i]*(w.dot(x[i]) + b) <= 0:
            alfa[i] += 1
            b += y[i]
            print('error classify: '+str(i))
            print('alfa={},b={}'.format(alfa,b))
            
            break
    
           
alfa=[0. 0. 0.],b=0
第1次疊代
w=[0. 0.],b=0
0
error classify: 0
alfa=[1. 0. 0.],b=1
第2次疊代
w=[3. 3.],b=1
0
1
2
error classify: 2
alfa=[1. 0. 1.],b=0
第3次疊代
w=[2. 2.],b=0
0
1
2
error classify: 2
alfa=[1. 0. 2.],b=-1
第4次疊代
w=[1. 1.],b=-1
0
1
2
error classify: 2
alfa=[1. 0. 3.],b=-2
第5次疊代
w=[0. 0.],b=-2
0
error classify: 0
alfa=[2. 0. 3.],b=-1
第6次疊代
w=[3. 3.],b=-1
0
1
2
error classify: 2
alfa=[2. 0. 4.],b=-2
第7次疊代
w=[2. 2.],b=-2
0
1
2
error classify: 2
alfa=[2. 0. 5.],b=-3
第8次疊代
w=[1. 1.],b=-3
0
1
2
第9次疊代
w=[1. 1.],b=-3
0
1
2
第10次疊代
w=[1. 1.],b=-3
0
1
2
第11次疊代
w=[1. 1.],b=-3
0
1
2
第12次疊代
w=[1. 1.],b=-3
0
1
2
第13次疊代
w=[1. 1.],b=-3
0
1
2
第14次疊代
w=[1. 1.],b=-3
0
1
2
第15次疊代
w=[1. 1.],b=-3
0
1
2
第16次疊代
w=[1. 1.],b=-3
0
1
2
第17次疊代
w=[1. 1.],b=-3
0
1
2
第18次疊代
w=[1. 1.],b=-3
0
1
2
第19次疊代
w=[1. 1.],b=-3
0
1
2
           

繼續閱讀