簡體   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