在实际中,为什么theta * X不是theta'* X?

时间:2018-08-08 18:17:10

标签: machine-learning octave

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

7 个答案:

答案 0 :(得分:3)

我不知道您的thetaX的尺寸是多少(您没有提供任何内容),但实际上,这完全取决于X,{{1} }和假设维度。假设theta是功能的数量,m是示例的数量。然后,如果ntheta向量,而mx1X矩阵,则nxmX*theta假设向量。

但是,如果计算nx1,您将得到相同的结果。如果theta'*Xtheta*X并且theta-1xm

,也可以使用X获得相同的结果

修改:

正如@Tasos Papastylianou指出的那样,如果mxnXmxn(theta.'*X).'为答案,将会获得相同的结果。如果假设应该是X.'*theta向量,则1xn是答案。如果theta.'*Xtheta1xm-X,并且假设是mxn,那么1xn也是正确答案。

答案 1 :(得分:2)

数学中,“向量”始终定义为垂直堆叠的数组,例如 ,表示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定义为水平(即转置)矢量,出于某种原因(例如打印方便)开始,然后在执行必要的转换时保持该状态。

答案 2 :(得分:2)

我对我有同样的问题。 (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

= h(xi)(它是R1x1 =>实数)

到theta'* xi在这里工作

关于向量化方程式 在这种情况下,X与x(向量)不同。它是一个矩阵,其中包含m行和n + 1 col(m =实例数和n个要在其上添加项的要素)

因此,从前面的示例中,n = 2 矩阵X是一个m x 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

这将给你我的每一行 [ 1 xi,1 xi,2] * [to ; t1 ; t2] = to + t1.xi,1 + t2.xi,2

希望有帮助

答案 3 :(得分:1)

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

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

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

仅举一个训练示例,x是'(f + 1)x 1'矩阵或列向量。特别是x = [x 0 ; x 1 ; x 2 ; x 3 ; .... x f ] x 0 始终为'1'。

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

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

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

为简单起见,让我们提供两个具有“ f”功能的训练示例。

X = [x 1 ; x 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'假设矩阵。

答案 4 :(得分:1)

当 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') 如这里所示Properties of Transposes

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,这是不必要的。

答案 5 :(得分:0)

theta'* X 用于计算单个训练示例 当X是 向量。然后,您必须计算 theta'才能达到h(x)定义。

在实践中,由于您有个以上的训练示例,因此 X是带有“ mxn”的矩阵您的训练集)维度,其中 m是您的训练示例数量,而 n是您的功能数量

现在,您想通过theta参数一键右移来计算所有训练示例的h(x)吗?

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

您可以手动进行数学运算,我做到了,现在很清楚了。希望我能帮助别人。 :)

答案 6 :(得分:-1)

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

enter image description here