我有以下数据集:
X
X =1.0000 0.1300 -0.22371.0000 -0.5042 -0.22371.0000 0.5025 -0.22371.0000 -0.7357 -1.53781.0000 1.2575 1.09041.0000 -0.0197 1.09041.0000 -0.5872 -0.22371.0000 -0.7219 -0.22371.0000 -0.7810 -0.22371.0000 -0.6376 -0.22371.0000 -0.0764 1.09041.0000 -0.0009 -0.22371.0000 -0.1393 -0.22371.0000 3.1173 2.40451.0000 -0.9220 -0.22371.0000 0.3766 1.09041.0000 -0.8565 -1.53781.0000 -0.9622 -0.22371.0000 0.7655 1.09041.0000 1.2965 1.09041.0000 -0.2940 -0.22371.0000 -0.1418 -1.53781.0000 -0.4992 -0.22371.0000 -0.0487 1.09041.0000 2.3774 -0.22371.0000 -1.1334 -0.22371.0000 -0.6829 -0.22371.0000 0.6610 -0.22371.0000 0.2508 -0.22371.0000 0.8007 -0.22371.0000 -0.2034 -1.53781.0000 -1.2592 -2.85191.0000 0.0495 1.09041.0000 1.4299 -0.22371.0000 -0.2387 1.09041.0000 -0.7093 -0.22371.0000 -0.9584 -0.22371.0000 0.1652 1.09041.0000 2.7864 1.09041.0000 0.2030 1.09041.0000 -0.4237 -1.53781.0000 0.2986 -0.22371.0000 0.7126 1.09041.0000 -1.0075 -0.22371.0000 -1.4454 -1.53781.0000 -0.1871 1.09041.0000 -1.0037 -0.2237
theta
000
y
y = 399900 329900 369000 232000 539900 299900 314900 198999 212000 242500 239999 347000 329999 699900 259900 449900 299900 199900 499998 599000 252900 255000 242900 259900 573900 249900 464500 469000 475000 299900 349900 169900 314900 579900 285900 249900 229900 345000 549000 287000 368500 329900 314000 299000 179900 299900 239500
X集合代表多变量回归的值,第一列代表X0,第二列代表X1,以此类推。
实现的公式大致如下:
我实现了一个MATLAB代码如下:
for i=1:size(theta,1) h=X*theta; sumE=sum((h-y).*X(:,i)); theta(i)=theta(i)-alpha*(1/m)*sumE;end
这段代码在一个从1到n次迭代的for循环中(m的值不重要,可以设置为40)。问题是,尽管代码运行正常,结果也符合预期,但当我提交到在线检查程序时,我的结果被判定为错误。原因是我应该同时更新theta。
我从网上找到了以下MATLAB代码:
h = X*theta;theta = theta - alpha / m * (X'*(h - y));
当我运行网上的解决方案时,它给出的答案与我的几乎相同,仅在第六位小数上略有不同。当我将这个答案提交到在线程序时,它被完全接受,但我很好奇求和部分去哪儿了?公式中明确指出了一个求和,但在网上的解决方案中没有。也许两种代码都正确,但我不知道网上的作者是否使用了某种线性代数技巧。有什么帮助吗?
谢谢
回答:
我不确定我是否理解了你的问题,但你从网上复制的公式是X'(h-y)。请注意X后面有一个转置符号!所以,这是一个矩阵乘法。你的求和(你的循环)被这个矩阵乘法所替代。