1
one = sum((X*theta) - y) .^2)/(2*m); 
two = ((X'*theta - y)*(X*theta - y))/2*m; 

% where X' == X transpose, so I can do matrix multiplication. 

"1"は、線形回帰の単変量コスト関数に(正常に)使用されます。 "1"は多変量線形回帰問題のコストを計算するためにも機能するようです。これら2つのコスト関数はオクターブで同等ですか?

「二」は、式は非常に人気の機械学習の過程で多変量アプローチを示唆している:)

は、彼らが同じ方法です、または「一つは、」ただ、マルチ変量tranningにチャンスごとに動作しませんでしたおそらく設定します。

+1

寸法に依存します'X'、' theta'と 'y'のうちの一つです。 – beaker

+0

良い点は、あらゆる種類の行列乗算が可能であり、この場合、すべての行列のすべての値が実数であるという考えです。 – user1230795

答えて

2

2番目の式が正しく表示されません。

デモ:

>> theta = [2;3]; 
>> X = [1 2; 3 4; 5 6; 7 8]; 
>> y = [7;8;9;10]; 
>> m = length(y); 
>> ((X'*theta - y)*(X*theta - y))/2*m 
error: operator *: nonconformant arguments (op1 is 2x4, op2 is 2x1) 

最初の式は、私たちが行方不明括弧の問題を解決する場合は、正しいように思わ:

>> sum(((X*theta) - y) .^2)/(2*m) 
ans = 155.75 

代替ベクトル化された式:

>> (X * theta - y)' * (X * theta - y)/(2*m) 
ans = 155.75 
+0

Yeh、nice - ありがとう。このような方程式を展開すると、これをOctaveのようなものに組み込むときに明確になります。 – user1230795

関連する問題