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
#定義訓練函式,包括訓練次數iter,學習率rate
def train(self,input_vecs,labels,iter,rate):
for i in range(iter):
for input_vec,label in zip(input_vecs,labels):
output = acti_fun(sum(np.array(input_vec) * self.weights) + self.bias)
bias = label - output
#更新權重
self.weights += rate*bias*np.array(input_vec)
self.bias += rate*bias
return self.weights,self.bias
#定義**函式
def predict(self,input_data):
input_data = np.array(input_data)
pred =
for each in input_data:
pred_each = acti_fun(sum(np.array(each)*np.array(self.weights)) + self.bias)
return pred
#測試if __name__=='__main__':
input_vecs = [[1,1],[1,0],[0,1],[0,0]]
labels = [1,0,0,0]
inputdata = [[-1,0],[1,1]] #可以單個[1,0],也可以多個[[-1,0],[1,1]]
inputdata = np.mat(inputdata)
p = perception()
p.train(input_vecs,labels,50,0.1)
predict = p.predict(inputdata)
print(predict)
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...
感知機(Python實現,簡單)
usr bin python coding utf 8 importrandom fromnumpyimport importnumpyasnp deftraining train data1 3,3,1 4,3,1 正樣本 train data2 1,1,1 負樣本 train datas tra...