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.
“One”已成功用于线性回归的单变量成本函数。看起来“One”也适用于计算多变量线性回归问题的成本。
“Two”是某一非常受欢迎的机器学习课程中建议用于多变量方法的公式 🙂
它们是相同的方法吗,还是“One”只是碰巧在多变量训练集上有效呢?
回答:
第二个公式在我看来似乎不正确。
演示:
>> 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*merror: 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