当前位置:编程学习 > Matlab >>

求助!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程序问题

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,