課本p40,例2.1。具體原理可以參考博文:訓練資料集為:正例項點:原始形式演算法求解:
import numpy as np
import matplotlib.pyplot as plt
p_x = np.array([[3,3], [4,3], [1,1]])
#將正負例項點按不同圖例畫出
y = np.array([1, 1, -1])
plt.figure()
for i in range(len(p_x)):
if y[i] == 1:
plt.plot(p_x[i][0], p_x[i][1], 'ro')
else:
plt.plot(p_x[i][0], p_x[i][1], 'bo')
#初值w = np.array([0, 0])
b = 0
#學習率
delta=1
for k in range(100): #迭代100次,中途可以停止跳出
choice=-1
for i in range(len(p_x)):
if y[i]!= np.sign(np.dot(w, p_x[i]) + b): #異號
choice=i #第i個點不滿足正確分類條件
break
if choice == -1:
break
else:
w = w + delta * y[choice]*p_x[choice]
b = b + delta * y[choice]
print("第%d次迭代:"%(k+1))
對偶形式演算法求解:
import numpy as np
import matplotlib.pyplot as plt
p_x = np.array([[3,3], [4,3], [1,1]])
y = np.array([1, 1, -1])
# 初值設定
a=np.array([0,0,0])
b=0delta=1
#gram矩陣
g=np.zeros(shape=(3,3))
for i in range(0,3):
for j in range(0,3):
g[i,j]=np.dot(p_x[i], p_x[j])
#迭代for k in range(100): #迭代100次
choice = -1
for i in range(len(p_x)):
if y[i]!=np.sign(sum(a[j]*y[j]*g[j,i] for j in range(0,3))+b): #異號
choice =i #第i個點不滿足正確分類條件
break
else:
choice = -1
if choice == -1:
break
else:
a[i]=a[i]+1
b=b+y[i]
w=sum(np.dot(a[i]*y[i],p_x[i]) for i in range(0,3))
print("w:",w)
print("b:",b)
感知機 統計學習方法
一 感知機適用問題以及它的輸入,輸出,求解方法 1 感知機 perceptron 適用於二類分類問題 該分類問題是線性可分問題 2 感知機模型是線性分類模型 3 感知機的幾何解釋,感知機對應的是乙個超平面 4 輸入 例項的特徵向量 5 輸出 例項的類別,取 1和 1二值 6 求解方法 有監督學習 給...
《統計學習方法》 感知機
最近終於有開始看 統計學習方法 了,畢竟無腦調參確實沒有什麼意義。一方面是作為看書的筆記,一方面作為比部落格或許能起到一點參考作用吧。希望可以日更。由輸入空間到輸出空間的函式 f x si gn w x b f x sign w cdot x b f x s ign w x b 稱為感知機。感知機是...
統計學習方法之感知機
在翻閱知乎時,得知李航所著的 統計學習方法 一書,於是就買了一本,看到csdn上已有大牛都發了相關的部落格,再次贅述就顯得囉嗦了,就直接上乾貨吧,自己用matlab寫的 和一些自己再看書時的小小的理解。感知機是一種二類分類的線性模型模型,是乙個將輸入空間 特徵空間 分成正負兩類的分離超平面。它的更多...