我尝试使用LMS(最小均方)算法创建在线版本(非批处理)感知器模型。 LMS也被称为Adaline(我猜)。我使用双月数据集,包括-1(非0)和+1类训练:
我从Haykin的书中实现了LMS的python代码:
我的python代码在
下面# add 1 for bias
xtrain = np.column_stack(([float(1) for i in x],x))
weights = np.array([0.0 for k in range(len(np.transpose(xtrain)))])
#learning rate
lr = 0.01
epoch=100
def getlineer(weights,xi):
y = dot(np.transpose(xi),weights)
#y = np.sign(y)
return y
for i in range(epoch):
for k in range(len(xtrain)):
y = getlineer(weights,xtrain[k])
e = desired[k]-y;
weights = weights + lr * dot(xtrain[k],e)
print(weights)
但是当我训练算法时,模型无法100%学习,错误/权重变得过高:
此外,我在第二纪元后得到了纳米值。 我怎样才能获得最佳重量?我的代码是错误的还是关于数据集?
我知道有一个最佳的重量可以分开100%的准确性。 例如,我添加了一些代码查找每个权重更新的准确性:
def getLMS(weights):
e=0
for i in range(100):
for k in range(len(xtrain)):
y = getlineer(weights,xtrain[k])
e = desired[k]-y;
weights = weights + lr * dot(xtrain[k],e)
xx = dot(xtrain,weights);
tt= [np.sign(k) for k in xx]
lens = len([i for i, j in zip(desired, tt) if i == j])
if lens ==len(xtrain):
print(lens,k,i,weights)
return weights
我在19.迭代期间得到了100%的分离器重量。
非常感谢。