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.
“一”用于(成功)用于线性回归的单变量成本函数。 “一个”似乎也可用于计算多元线性回归问题的成本。
“Two”是在非常流行的机器学习课程中建议用于多变量方法的公式:)
它们是相同的方法,还是“一个”只是在多变量转换集合上偶然发挥作用。
答案 0 :(得分: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