时间:2021年12月2日
class 感知机(object):
def __init__(self, 输入值个数, 激活函数):
self.权值 = [0.0 for _ in range(输入值个数)]
self.激活函数 = 激活函数
def 预测(self, 预测数据):
激活值 = 0.0
for i in range(len(self.权值)):
激活值 += self.权值[i] * 预测数据[i]
return self.激活函数(激活值)
def 训练(self, 数据集, 训练次数, 学习率):
for i in range(训练次数):
for 数据 in 数据集:
预测值 = self.预测(数据)
self.更新权值(数据,预测值,学习率)
def 更新权值(self, 数据, 预测值, 学习率):
误差 = 数据[-1] - 预测值
for i in range(len(self.权值)):
# 感知机更新权值公式
self.权值[i] += 学习率 * 误差 * 数据[i]
def 激活函数(激活值):
return 1.0 if 激活值 >= 0.0 else 0.0
def 获取数据集():
数据集 = [[-1, 1, 1, 1], [-1, 0, 0, 0], [-1, 1, 0, 0], [-1, 0, 1, 0]]
return 数据集
def 训练与预测():
输入层长度 = 3
训练轮次 = 10
学习率 = 0.1
感知对象 = 感知机(输入层长度, 激活函数)
数据集 = 获取数据集()
感知对象.训练(数据集,训练轮次,学习率)
return 感知对象
if __name__ == '__main__':
# 训练好的感知对象
感知对象 = 训练与预测()
print(f"感知对象权值为:\n{感知对象.权值[0]}\n{感知对象.权值[1]}\n{感知对象.权值[2]}\n")
print("新的预测:1&1 = ",感知对象.预测([-1,1,1]))