理论知识见https://www.zybuluo.com/hanbingtao/note/448086
直接上python3的代码
#coding utf-8
import matplotlib.pyplot as plt
from functools import reduce
class perceptron(object):
#初始化,输入训练数目,激活函数
def __init__(self,input_num,activator):#activator为激活函数
self.activator=activator
self.weights=[0.0 for _ in range(input_num)]#权重初始化为0
self.bias=0.0#偏置初始化为0.0
#运算
def operation(self,input_vec):
#对激活函数中的参数做运算,x[0]代表input_vec,x[1]代表weights
return self.activator(reduce(lambda a,b:a+b,map(lambda x:x[0]*x[1],zip(input_vec,self.weights)),0.0)+self.bias)#0.0为reduce的初始计算值
#权值更新
def updata(self,input_vec,output,label,rate):
delta=label-output
self.weights=list(map(lambda x:x[1]+rate*delta*x[0],zip(input_vec,self.weights)))#加上list跟python2有区别
self.bias+=rate*delta
#训练,输入数据及对应标签,迭代次数,学习率
def t