繁体   English   中英

为什么 theta*X 实际上不是 theta'*X?

[英]Why theta*X not theta'*X in practical?

在 Andrew Ng 对 ML 进行 MOOC 时,他在理论上解释了theta'*X给了我们假设,而在做课程时我们使用theta*X 为什么会这样?

theta'*X用于计算X 为向量单个训练示例的假设。 然后你必须计算theta'以获得 h(x) 定义。

在实践中,由于您有多个训练示例,因此X 是一个矩阵您的训练集),其维度为“mxn”,其中m 是您的训练示例的数量,n 是您的特征数量

现在,您想用您的 theta 参数一步计算所有训练示例的 h(x) 对吗?

这是诀窍theta 必须是 anx 1 向量,然后当您进行矩阵向量乘法 (X*theta) 时,您将获得一个 mx 1 向量,其中包含训练集(X 矩阵)中所有 h(x) 的训练示例)。 矩阵乘法将逐行创建向量 h(x) 进行相应的数学运算,这将等于每个训练示例中的 h(x) 定义。

你可以手工计算,我已经做到了,现在很清楚了。 希望我能帮助别人。 :)

数学中,“向量”始终定义为垂直堆叠的数组,例如 ,并且表示在一个3维空间中的单个点。

“水平”向量,通常表示一系列观察,例如是 3 个标量观测值的元组。

同样,矩阵可以被认为是向量的集合。 例如,以下是四个 3 维向量的集合:

标量可以被认为是一个大小为 1x1 的矩阵,因此它的转置与原始矩阵相同。

更一般地说,n×m 矩阵W也可以被认为是从 m 维向量x到 n 维向量y变换,因为将该矩阵与 m 维向量相乘将产生一个新的 n-维度一。 如果您的“矩阵” W是“1xn”,则这表示从 n 维向量到标量的转换。

因此,在符号上,习惯上从数学符号的角度来介绍问题,例如y = Wx

但是,出于计算原因,有时将计算作为“向量乘以矩阵”而不是“矩阵乘以向量”来执行更有意义。 由于(Wx)' === x'W' ,有时我们会这样解决问题,并将x'视为水平向量。 此外,如果W不是矩阵,而是标量,则Wx表示标量乘法,因此在这种情况下Wx === xW

我不知道你说的练习,但我的假设是在课程中他引入了theta作为一个适当的垂直向量,但随后将其转置以执行适当的计算,即从 n 维向量到标量(这是您的预测)。

然后在练习,想必你要么标“THETA”,所以没有点处理移调了,就留给THETA为了方便THETA是现在被定义为水平(即移位的)向量与开始一段原因(例如打印方便),然后在执行必要的转换时保持该状态。

我不知道你的thetaX的维度是什么(你没有提供任何东西)但实际上这一切都取决于Xtheta和假设维度。 假设m是特征数, n是示例数。 然后,如果theta是一个mx1向量并且X是一个nxm矩阵,那么X*theta是一个nx1假设向量。

但是如果计算 theta'*X您将得到相同的结果。 如果 theta1xmX - mxn您也可以使用 theta*X获得相同的结果

编辑:

正如@Tasos Papastylianou 指出的那样,如果Xmxn然后(theta.'*X).'将获得相同的结果(theta.'*X).' X.'*theta是答案。 如果假设应该是一个1xn向量,那么theta.'*X就是一个答案。 如果theta1xmX - mxn并且假设是1xn那么theta*X也是正确答案。

我有同样的问题。 (ML 课程,线性回归)在花时间研究之后,这是我的看法:x(i) 向量和 X 矩阵之间存在混淆。

关于 xi 向量(xi 属于 R3x1)的假设 h(xi),theta 属于 R3x1 theta = [to;t1;t2] #R(3x1) theta' = [to t1 t2] #R(1x3) xi = [1 ; xi1 ; xi2] #(R3x1) theta' * xi => to + t1.xi,1 +t2.xi,2 theta = [to;t1;t2] #R(3x1) theta' = [to t1 t2] #R(1x3) xi = [1 ; xi1 ; xi2] #(R3x1) theta' * xi => to + t1.xi,1 +t2.xi,2

= h(xi)(这是一个 R1x1 => 实数)

到 theta'*xi 在这里工作

关于这种情况下的矢量化方程 X 与 x(矢量)不同。 它是一个具有 m 行和 n+1 列的矩阵(m = 示例的数量和我们在其上添加 to 项的 n 个特征)

因此,从前面 n= 2 的示例中,矩阵 X 是 amx 3 矩阵 X = [1 xo,1 xo,2 ; 1 x1,1 x1,2 ; ....; 1 xi,1 xi,2 ; ...; 1 xm,1 xm,2]

如果你想对算法的方程进行矢量化,你需要考虑每一行 i,你将有 h(xi)(一个实数),所以你需要实现 X * theta

这将为您提供每一行 i [ 1 xi,1 xi,2] * [to ; t1 ; t2] = to + t1.xi,1 + t2.xi,2 [ 1 xi,1 xi,2] * [to ; t1 ; t2] = to + t1.xi,1 + t2.xi,2

希望能帮助到你

我已经使用八度符号和语法来编写矩阵:“逗号”用于分隔列项目,“分号”用于分隔行项目,“单引号”用于转置。

在所讨论的课程理论中theta = [theta 0 ; θ 1 ; θ 2 ; θ 3 ; .... θ f ]。

因此,'theta' 是一个列向量或 '(f+1) x 1' 矩阵。 这里的“f”是特征的数量。 theta 0是截距项。

仅在一个训练示例中,x 是一个 '(f+1) x 1' 矩阵或列向量。 特别是x = [x 0 ; × 1 ; × 2 ; × 3 ; .... x f ] x 0总是“1”。

在这种特殊情况下,通过取 theta '和 x 形成的 '1 x (f+1)' 矩阵可以相乘以给出正确的 '1x1' 假设矩阵或实数。

h = theta' * x是一个有效的表达式。

课程作业涉及多个训练示例。 如果有 'm' 个训练示例,则X是一个 'mx (f+1)' 矩阵。

为简化起见,假设有两个训练示例,每个示例都具有“f”特征。

X = [ x 1 ; × 2 ]。

(请注意括号内的 1 和 2 不是指数项,而是训练示例的索引)。

这里,x 1 = [ x 0 1 , x 1 1 , x 2 1 , x 3 1 , .... x f 1 ] 和 x 2 = [ x 0 2 , x 1 2 , x 2 2 , x 3 2 , .... x f 2 ]。

所以 X 是一个 '2 x (f+1)' 矩阵。

现在回答这个问题,theta '是一个 '1 x (f+1)' 矩阵, X 是一个 '2 x (f+1)' 矩阵。 因此,以下表达式无效。

  1. theta' * X
  2. theta * X

预期假设矩阵“ h ”应该有两个预测值(两个实数),两个训练示例中的每一个都有一个。 ' h ' 是一个 '2 x 1' 矩阵或列向量。

该假设只能通过使用有效且代数正确的表达式X * theta来获得。 将一个 '2 x (f+1)' 矩阵与一个 '(f+1) x 1' 矩阵相乘得到一个 '2 x 1' 假设矩阵。

这是因为计算机的坐标 (0,0) 位于左上角,而几何体的坐标 (0,0) 位于左下角。

在此处输入图片说明

当 Andrew Ng 首次在成本函数 J(theta) 中引入 x 时,x 是一个列向量,又名

[x0; x1; ... ; xn]

i.e. 

x0;
x1;
...;
xn

然而,在第一个编程任务中,我们得到了 X,它是一个 (m * n) 矩阵,(# 个训练示例 * 每个训练示例的特征)。 差异来自这样一个事实,即从文件中,单个 x 向量(训练样本)存储为水平行向量而不是垂直列向量!!

这意味着你看到的 X 矩阵实际上是一个 X'(X 转置)矩阵!!

由于我们有 X',我们需要让我们的代码工作,因为我们的方程正在寻找 h(theta) = theta' * X(当矩阵 X 中的向量是列向量时)

我们有矩阵和向量乘法的线性代数恒等式:

(A*B)' == (B') * (A')如此处所示转置的属性

let t = theta,
given, h(t) = t' * X
h(t)' = (t' X)'
= X' * t

现在我们的变量采用了实际提供给我们的格式。 我的意思是我们的输入文件确实包含 X' 并且 theta 是正常的,因此按照上面指定的顺序将它们相乘将给出与他教我们使用 which is theta' * X 的输出实际上等效。因为我们正在总结所有h(t)' 的元素在最后它被转置以用于最终计算并不重要。 但是,如果你想要 h(t),而不是 h(t)',你总是可以取你的计算结果并转置它,因为

(A')' == A

然而,对于coursera机器学习编程作业1,这是不必要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM