python - 为什么感知器学习算法不收敛?

标签 python numpy machine-learning perceptron

我已经在 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 次迭代后仍不收敛?

最佳答案

Perceptrons Minsky 和 ​​Papert (in) 在 1969 年著名地证明了感知器学习算法不能保证对于线性不可分的数据集收敛。

如果您确定您的数据集是线性可分的,您可以尝试为每个数据向量添加偏差,如问题所述:Perceptron learning algorithm not converging to 0 -- 添加偏差有助于对不通过原点的决策边界进行建模。

或者,如果您想使用保证收敛到指定宽度边距的感知器学习算法的变体,即使对于不可线性分离的数据集,请查看 Averaged Perceptron -- PDF .平均感知器是投票感知器的近似值,它在 Freund 和 Schapire 的一篇不错的论文中介绍(据我所知),"Large Margin Classification Using the Perceptron Algorithm" -- PDF .

使用平均感知器,您可以在训练期间每次呈现训练示例后复制参数向量。最终分类器使用所有参数向量的平均值。

关于python - 为什么感知器学习算法不收敛?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19149364/

相关文章:

python - 使用 Keras 进行简单线性回归

java - 将 Lucene 索引转换为 Mahout vector

python - Flask-Sqlalchemy:具有 3 个主键同时也是外键的表

Python:如何使用 IDLE 调试器在 mac 上设置断点?

python - 有没有一种方便的方法来重绘实时数据的绘制图(matlibplot,python2.7)?

python - 用梯度下降拟合直线

Python-Numpy : 3D matrix * 2D vector fast calculation

python - python 是否有像容器一样的 dict 但像 numpy.array 一样快?

python - 为什么继承 `bitstring.BitArray` 时,子构造函数的第一个参数在父构造函数中使用?

python - tensorflow - 我的输入数组中可以有元组条目吗?这样做会抛出 'Unable to get element from the feed as bytes.'