求助!matlab 岭回归的程序程序哪里出错了???
function [b,bint,r,rint,stats] = ridge1(Y,X,k)
[n,p] = size(X);
mx = mean (X); my = mean (Y); stdx =std(Y);stdy=std(Y);
idx = find(abs(stdx) < sqrt(eps));
MX = mx(ones(n,1),:);STDX = stdx(ones(n,1),:);
Z = (X - MX) ./ STDX;Y=(Y-my)./stdy;
pseudo = sqrt(k*(n-1)) * eye(p);
Zplus = [Z;pseudo];Yplus = [Y;zeros(p,1)];
[b,bint,r,rint,stats] = regress(Yplus,Zplus);
x=[3467.72 3907.23 4676.13 5793.66 6530.01 7925.58;
76.77999344 84.30439938 92.18766954 100.4322165 109.0284837 117.9571397;
754.454237 780.272724 805.8521111 831.1912792 856.1948466 880.7127475;
13.43016387 14.32612291 15.25197227 16.20791716 17.19227306 18.20200691;
393.58 595.98 754.31 831.31 911.39 1038.04];
y=[54.68;59.24;68.06;75.34;79.70;79.80];
x'*x;count=0;kvec=0.1:0.1:1;
for k=0.1:0.1:1
count=count+1;
[b,bint,r,rint,stats]=ridge1(y,x,k);bb(:,count)=b;
stats1(count,:)=stats;
end
bb',stats1;
plot(kvec',bb),xlabel('k'),ylabel('b','FontName','Symbol')
答案:我这边的提示错误是:
??? Error using ==> rdivide
Matrix dimensions must agree.
Error in ==> ridge1 at 7
Z = (X - MX) ./ STDX;
如果你也是这个错误的话,那就是矩阵没有匹配了,X-MX得到的是一个5x6的矩阵;而STDX本身为5x1的矩阵,用点除就必然会出现不匹配了.
你可以试试直接用这个式子:
Z = (X - MX) / STDX(1,1);
另外,你的程序貌似还有其他问题....
其他:我也想问这个程序到底哪里有问题。求助求助 你定义了一个新的函数ridge1
这个要首先用edit 定义一下 才能才命令里面用,不可以在程序里直接定义函数,
先写edit ridge1.m 按回车 出来一个窗口,把函数的定义贴进去 就可以了
上一个:我想用MATLAB的fprintf把这段程序的s1输出应该怎么做呢?请大侠指教!谢谢!!
下一个:MATLAB程序问题