【发布时间】:2013-10-09 13:42:44
【问题描述】:
我已经在 Python 中实现了感知器学习算法,如下所示。即使有 500,000 次迭代,它仍然不会收敛。
我有一个带有目标向量 Y 的训练数据矩阵 X,以及一个要优化的权重向量 w。
我的更新规则是:
while(exist_mistakes):
# dot product to check for mistakes
output = [np.sign(np.dot(X[i], w)) == Y[i] for i in range(0, len(X))]
# find index of mistake. (choose randomly in order to avoid repeating same index.)
n = random.randint(0, len(X)-1)
while(output[n]): # if output is true here, choose again
n = random.randint(0, len(X)-1)
# once we have found a mistake, update
w = w + Y[n]*X[n]
这是错的吗?或者为什么它在 500,000 次迭代后仍然没有收敛?
【问题讨论】:
-
我希望我能证明这一点,但对于任何给定的识别器来说,都应该有无数个无法训练的目标(或者 Kurt Gödel 会做一些后退)。
-
只是附注 - 错误分类示例的随机抽样效率非常低,您应该简单地遍历所有示例并更新每个错误分类。
-
您的感知器更新规则也缺少学习率参数,这会影响权重的收敛。
标签: python numpy machine-learning perceptron