[英]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是現在被定義為水平(即移位的)向量與開始一段原因(例如打印方便),然后在執行必要的轉換時保持該狀態。
我不知道你的theta
和X
的維度是什么(你沒有提供任何東西)但實際上這一切都取決於X
、 theta
和假設維度。 假設m
是特征數, n
是示例數。 然后,如果theta
是一個mx1
向量並且X
是一個nxm
矩陣,那么X*theta
是一個nx1
假設向量。
但是如果計算
theta'*X
您將得到相同的結果。
如果
theta
為
1xm
且
X
-
mxn
您也可以使用
theta*X
獲得相同的結果
編輯:
正如@Tasos Papastylianou 指出的那樣,如果X
是mxn
然后(theta.'*X).'
將獲得相同的結果(theta.'*X).'
或X.'*theta
是答案。 如果假設應該是一個1xn
向量,那么theta.'*X
就是一個答案。 如果theta
是1xm
, X
- 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
到 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)' 矩陣。 因此,以下表達式無效。
theta' * X
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.