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

Why theta*X not theta'*X in practical?

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

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

enter image description here

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

但是计算theta'*X也是一样的结果。如果 theta1xm 并且 X - mxn

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

编辑:

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

数学中,'vector'总是定义为垂直堆叠的数组,例如,表示 3 维 space.

中的 单个

一个'horizontal'向量,通常表示一组观察值,例如 是 3 个 标量 观测值的元组。

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

一个标量可以被认为是一个大小为1x1的矩阵,因此它的转置和原来的一样。

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

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

但是,出于计算原因,有时将计算作为 "vector times a matrix" 而不是 "matrix times a vector" 更有意义。由于(Wx)' === x'W',有时我们这样解题,把x'当做水平向量。此外,如果 W 不是矩阵,而是标量,则 Wx 表示标量乘法,因此在这种情况下 Wx === xW.

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

然后在练习中,大概你是 或者 处理一个标量 'theta' 所以没有必要转置它,为方便起见保留为 theta ,theta 现在被定义为一个水平(即转置)矢量,出于某种原因(例如打印方便)开始,然后被留在那个执行必要转换时的状态。

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

在实践中,由于你有多个训练样本X是一个矩阵你的训练set) "m x n" 维度,其中 m 是训练样本的数量n 是特征的数量

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

这里是技巧theta 必须是一个 n x 1 向量 然后当你做 Matrix-Vector 乘法 (X* theta) 您将获得一个 m x 1 向量,其中包含您训练集(X 矩阵)中所有 h(x) 的训练示例。矩阵乘法将逐行创建向量 h(x) 进行相应的数学运算,这将等于每个训练示例中的 h(x) 定义。

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

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

关于假设h(xi)对于一个xi向量(xi属于R3x1),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 => 实数)

to theta'*xi 在这里工作

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

因此从前面的例子中 n= 2, 矩阵 X 是一个 m x 3 矩阵 X = [1 xo,1 xo,2 ; 1 x1,1 x1,2 ; ....; 1 习,1 习,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

希望对你有帮助

我使用八度表示法和语法来编写矩阵:'comma' 用于分隔列项,'semicolon' 用于分隔行项,'single quote' 用于转置。

课程理论讨论中,theta =[theta0; θ1; θ2; θ3; .... thetaf].

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

只有一个训练示例,x 是一个“(f+1) x 1”矩阵或列向量。具体来说 x = [x0; x1; x2; x3; .... xf] x0 始终为“1”。

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

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

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

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

X = [ x1; x2].

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

这里,x1 = [ x01, x11,x21,x3 1, .... xf1 ] 和 x2 = [ x02, x1 2, x22, x32, .... xf2].

所以 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”假设矩阵。

吴恩达第一次在成本函数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 which was theta' * X. 因为我们正在总结所有最后的 h(t)' 的元素与最终计算的转置无关紧要。但是,如果您想要 h(t) 而不是 h(t)',您总是可以获取计算结果并将其转置,因为

(A')' == A

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