自适应线性感知器算法
原理推导
python实现
import numpy as np
import matplotlib.pyplot as plt
#随机生成x和y, n=100, m=2
x = np.random.randn(100, 2)
y = x.dot(np.array([[2], [1]])) + 1
#初始话权值w和偏置b
w = np.zeros(x.shape[1]).reshape((x.shape[1], 1))#
b = 0
#设定超参
epoches = 100
alpha = 0.1
#误差追踪
error = []
#开始迭代
for e in range(epoches):
y_hat = np.dot(x, w) + b #计算y_hat
err = y_hat - y
error += [err.sum() ** 2 / (2 * len(x))]#计算损失函数
delta_w = x.T.dot(err) / (len(x)) #计算w偏导
delta_b = sum(err) / len(x) #计算b的偏导
#更新w和b
w -= delta_w * alpha
b -= delta_b * alpha
print(w)
print(b)
plt.plot(error)
plt.show()
运行结果
w和b,可以看出与真实值基本一致
误差追踪,误差不断下降
总结
在算偏导的时候一定不要忘了除以样本数,在处理数据x时尽量把值域控制的小一点,从而控制delta_w和delta_b的值,以免过大影响学习。