为什么感知机的实现不遵循《Python机器学习》中的公式?

我是机器学习的新手。我从《Python机器学习》这本书和一些在线视频开始我的学习之旅。

我对《Python机器学习》中感知机的实现感到困惑。这是公式:

enter image description here

这是公式的Python实现:enter image description here

但根据公式,是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个样本的二维向量。

这里的样本意味着在不同时间框架或不同像素中对变量的不同评估。这个维度被广播到结果中。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注