- 积分
 - 26311
 
	- 贡献
 -  
 
	- 精华
 
	- 在线时间
 -  小时
 
	- 注册时间
 - 2012-6-1
 
	- 最后登录
 - 1970-1-1
 
 
 
 
 
 
 | 
	
 
登录后查看更多精彩内容~
您需要 登录 才可以下载或查看,没有帐号?立即注册 
 
 
 
x
 
转自:http://user.qzone.qq.com/455681698/blog/1263569417#!app=2&via=QZ.HashRefresh&pos=1265012917 
 
  
 
函数代码如下: 
function [yi,beta]=cpls(x,y,xi,k) 
% 基于chebyshev多项式改进的偏最小二乘法算法(PLS) 
% 
% 参数说明 
% x:自变量,列为变量,行为观测值,变量不要太多 
% y:因变量,列为变量,行为观测值 
% xi:进行预测据,同上 
% k:采用chevbyshev多项式阶数,需要不用太高 
% yi:预测结果,换句话说就是xi对应的yi 
% beta:回归系数 
% 
% 举例说明 
% x1=[1:10]' 
% x2=[rand(10,1)]; 
% x=[x1,x2]; 
% y=sin(x1).*cos(x1)+x2^2; 
% xi=[5 3]; 
% [yi,beta]=cpls(x,y,xi,3) 
% 
% 注意事项 
% 如果采用k阶chebyshev多项式,自变量有n个,并且有m的样本,那么在计算高维chebyshev函数值时, 
% 需要分配m*(k+1)^n个double空间,请根据自己的计算机量力而行 
% (代码由于我已经尽量采用矢量运算了,所以计算量增加不了多少,但主要是内存不够) 
% 
% by dynamic of Matlab技术论坛 
% see also http://www.matlabsky.com 
% contact me matlabsky@gmail.com 
% 2010-02-01 16:22:03 
% 
% 计算高维chebyshev多项式值 
X=mulchebyshev(x,k); 
XI=mulchebyshev(xi,k); 
% 对X和y进行PLS回归 
for i=1:min(size(X,1)-1,size(X,2)) 
    [xl,yl,xs,ys,beta,pcvar]=plsregress(X,y,i); 
    if sum(100*pcvar(2,:))>99 % 控制主元个数 
        break 
    end 
end 
% 进行预测 
yi=[ones(size(XI,1),1),XI]*beta; 
function X=mulchebyshev(x,k) 
% 计算高维chebyshev多项式值 
[m,n]=size(x); 
% 区间变换 
H=max(x)+min(x); 
C=range(x); 
x=(x-H(ones(1,m),:))./C(ones(1,m),:); 
% 计算所有点各阶chebyshev多项式值 
T=zeros(m,k+1,n); 
for i=1:n 
    T(:,1,i)=ones(m,1); 
    T(:,2,i)=x(:,i); 
    for j=3:k+1 
        T(:,j,i)=2*x(:,i).*T(:,j-1,i)-T(:,j-2,i); 
    end 
end 
% 计算高维chebyshev多项式值 
X=zeros(m,(k+1)^n); 
v=(k+1)*ones(1,n); 
p=fullfact(v); % 完全析因实验设计 
for i=1:(k+1)^n 
    tmp=1; 
    for j=1:n 
        tmp=tmp.*T(:,p(i,j),j); 
    end 
    X(:,i)=tmp; 
end 
 
  
 
调用主函数如下: 
 
clc; 
clear; 
x1=[1:10]' 
x2=[rand(10,1)]; 
x=[x1,x2]; 
y=sin(x1).*cos(x1)+x2.^2; 
xi=[5 3]; 
[yi,beta]=cpls(x,y,xi,3) 
 
  
运行结果如下: 
 
 
x1 = 
     1 
     2 
     3 
     4 
     5 
     6 
     7 
     8 
     9 
    10 
 
yi = 
  -1.5347e+03 
 
beta = 
  -10.1601 
         0 
    1.1753 
    2.0847 
   -6.4414 
  -16.6107 
    3.2164 
    6.7387 
   -8.5330 
   -3.9047 
    9.0276 
    7.7293 
   -5.5199 
   -4.7801 
   -4.7194 
   -3.0735 
   -5.1266 
 
 |   
 
 
 
 |