我是机器学习的新手。我从《Python机器学习》这本书和一些在线视频开始我的学习之旅。
我对《Python机器学习》中感知机的实现感到困惑。这是公式:
但根据公式,是W * X,而在实现中是X * W。对于矩阵来说,这两者并不相同。(对于numpy dot,如果X是二维数组,就是矩阵乘法。)为什么实现不遵循公式呢?
书中Iris示例中上述Python代码的实际值如下:
w[1:]: [-0.68 1.82]X: [[ 3.3 0. ] [ 3.32 0. ] [ 3.34 0. ] ..., [ 7.94 6.08] [ 7.96 6.08] [ 7.98 6.08]]
谢谢。
回答:
这是一个很好的问题。答案应该从两个方面来解释。
W dot X =?= X dot W
你完全正确,交换X和W对于矩阵乘法会产生不同的结果。
然而,在这种情况下,w和x实际上是向量,或者是m*1的矩阵。点积的结果是一个标量。所以在这种情况下,’x dot w’和’w dot x’是相同的。
如你所见,x被解释为[x0, x1, x2, …, xm],这表明了它的向量性质。
这个函数的作用是将神经元的输入与权重w
结合。这些输入是来自前一层神经元的输出。我们知道一个神经元的输出是一个标量。
关于偏置项W_[0]
实际上,实现是不同的,因为在多项式的末尾添加了一个w_[0]。这被称为偏置项,它修改了输入的线性组合的结果,或者说x
。在实现中使用这种偏置项是很常见的做法。但在数学上,我们通常会省略它,因为它不改变组合的线性性质。当然,在某些情况下,这个偏置项会在数学表示中明确列出。
====== 更新 =======
由于问题已经更新,这里增加了对实际情况的进一步解释。
在这种情况下,第一个维度被“广播”到结果中。
考虑一个更简单的情况:
w[1:]: [-0.68 1.82]X: [ 3.3 0. ]
正如@<隐藏人名>和我解释的那样,X和w都是向量。
在实际设置中,X不是一个矩阵,而是一个随着采样或时间变化的向量变量。假设X的维度是[n * 2],这意味着x是一个具有n个样本的二维向量。
这里的样本意味着在不同时间框架或不同像素中对变量的不同评估。这个维度被广播到结果中。