爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 5259|回复: 3

[源程序] matlab基于chebyshev多项式改进的偏最小二乘法算法

[复制链接]

新浪微博达人勋

发表于 2013-7-29 12:09:54 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

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

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2015-1-14 08:55:27 | 显示全部楼层
请问lz有研究过自适应最小二乘法么?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2016-8-24 19:08:03 | 显示全部楼层
谢谢楼主分享
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2017-12-25 15:10:53 | 显示全部楼层
楼主~这个程序每次的运行结果不一样,预测值yi应该是差不多的啊 每次的结果差几百
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表