感知機演算法的原始形式
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:
(w,b)
self.update(x_data[i]
,y_data[i]
)break
elif i+
1==x_data.shape[0]
(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...