感知機(二) Python實現篇

2021-09-27 11:59:25 字數 3782 閱讀 2332

感知機演算法的原始形式

eta_為步長/學習率,一般設為1

'''import numpy as np

class

perceptron

:def

__init__

(self,eta_=1)

: self.eta_=eta_

deffit(self,x_data,y_data)

:global w,b

flag=

true

#訓練集中存在誤分類點

w=[0

]*x_data.shape[1]

b=0while

(flag)

:for i in

range

(x_data.shape[0]

):if self.cal(x_data[i]

,y_data[i]

)<=0:

print

(w,b)

self.update(x_data[i]

,y_data[i]

)break

elif i+

1==x_data.shape[0]

:print

(w,b)

flag=

false

#訓練集中不存在誤分類點

defcal

(self,x,y)

:global w,b

res=

0for i in

range

(len

(x))

: res+=x[i]

*w[i]

res+=b

res*=y

return res

defupdate

(self,x,y)

:global w,b

for i in

range

(len

(x))

: w[i]

+=self.eta_*y*x[i]

b+=self.eta_*y

if __name__==

"__main__"

: x_data=np.array([[

3,3]

,[4,

3],[

1,1]

])y_data=[1

,1,-

1]clf=perceptron(1)

clf.fit(x_data,y_data)

'''

感知機演算法的對偶形式

eta_為步長/學習率,一般設為1

'''import numpy as np

class

dualperceptron

:def

__init__

(self,eta_=1)

: self.eta_=eta_

deffit(self,x_data,y_data)

:global a,b

a=[0

]*x_data.shape[0]

b=0 flag=

true

#訓練集中存在誤分類點

gram=self.cal_gram(x_data)

while

(flag)

:for i in

range

(x_data.shape[0]

):if self.cal(gram,y_data,i)

<=0:

print

(a,b)

self.update(i,y_data[i]

)break

elif i+

1==x_data.shape[0]

:print

(a,b)

self.cal_w(x_data,y_data)

flag=

false

defcal_gram

(self,x_data)

: n=x_data.shape[0]

gram=np.zeros(

(n,n)

)for i in

range

(n):

for j in

range

(n):

ans=

0for m in

range

(x_data.shape[1]

):ans+=x_data[i]

[m]*x_data[j]

[m] gram[i]

[j]=ans

return gram

defcal(self,g,y_data,i)

:global a,b

res=

0for j in

range

(len

(y_data)):

res+=a[j]

*y_data[j]

*g[j]

[i] res+=b

res*=y_data[i]

return res

defupdate

(self,i,y)

:global a,b

a[i]

+=self.eta_

b+=self.eta_*y

defcal_wb

(self,x_data,y_data)

:global a,b

w=[0

]*(x_data.shape[1]

) h =

0for i in

range

(len

(y_data)):

h +=a[i]

*y_data[i]

w +=a[i]

*y_data[i]

*x_data[i]

print

(w,h)

defcal_w

(self,x_data,y_data)

:global a,b

w=[0

]*(x_data.shape[1]

)for i in

range

(x_data.shape[1]

):for j in

range

(len

(y_data)):

w[i]

+=a[j]

*y_data[j]

*x_data[j]

[i]print

(w,b)

if __name__==

"__main__"

: x_data=np.array([[

3,3]

,[4,

3],[

1,1]

])y_data=[1

,1,-

1]clf=dualperceptron(1)

clf.fit(x_data,y_data)

python實現感知機

import numpy as np 定義啟用函式 def acti fun x return 1 if x 0 else 0 建立感知器類 class perception object 初始化權重 def init self self.weights 0 self.bias 1 定義訓練函式,包...

python實現AND感知機

and感知機通過訓練後,可以進行邏輯 與 的運算。例如 當輸入 1,1時,輸出為1 輸入1,0時,輸出為0。通過上圖,我們可以發現 0,0 0,1 1,0 這三個點數表示輸出為0,而點 1,1 表示輸出為1,所以我們可以近似找到一條直線將輸出為0的點與輸出為1的點分隔開。我們可以通過不斷訓練係數 即...

感知機python實現

有用請點贊,沒用請差評。感知機原理參考部落格 演算法引用李航博士 統計學習方法 p29.感知機 import numpy as np import matplotlib.pyplot as plt class perceptron object def init self,eta 1,iter 50...