⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nipals.asv

📁 NIPALS 算法 留1法 交叉检验 绘图
💻 ASV
字号:

function [T, W, P, B, Q, as] = nipals(X,y,h)

%-----------------------------------------------------------------
%E0 = X; F0 = y;
[n,m] = size(X);
[E0, F0] = nor(X,y);
%----------------------------------------------------------------
u(:,1) = F0;

W(:,1) = (E0'*u(:,1))/(u(:,1)'*u(:,1));
W(:,1) = W(:,1)/norm(W(:,1));

T(:,1) = (E0*W(:,1));

C(:,1) = (F0'*T(:,1))/(T(:,1)'*T(:,1));
C(:,1) = C(:,1)/norm(C(:,1));

u(:,1) = (F0*C(:,1))/(C(:,1)'*C(:,1));

P(:,1) = (E0'*T(:,1))/(T(:,1)'*T(:,1));
Q(:,1) = (F0'*T(:,1))/(u(:,1)'*u(:,1));

b(1) = (u(:,1)'*u(:,1))/(T(:,1)'*T(:,1));

E(:,:,1) = E0-T(:,1)*P(:,1)';
F(:,1) = F0-b(1)*T(:,1)*Q(:,1)';

for i = 2:h
    u(:,i) = F(:,(i-1));
    
    W(:,i) = (E(:,:,(i-1))'*u(:,i))/(u(:,i)'*u(:,i));
    W(:,i) = W(:,i)/norm(W(:,i));
    
    T(:,i) = (E(:,:,(i-1))*W(:,i));
    
    C(:,i) = (F(:,i-1)'*T(:,1))/(T(:,i)'*T(:,i));
    C(:,i) = C(:,i)/norm(C(:,i));
    
    u(:,i) = (F(:,(i-1))*C(:,i))/(C(:,i)'*C(:,i));'

    P(:,i) = (E(:,:,(i-1))'*T(:,i))/(T(:,i)'*T(:,i));
    Q(:,i) = (F(:,i-1)'*T(:,i))/(u(:,i)'*u(:,i));
    
    b(i) = (u(:,i)'*u(:,i))/(T(:,i)'*T(:,i));

    E(:,:,i) = E(:,:,(i-1))-T(:,i)*P(:,i)';
    F(:,i) = F(:,(i-1))-b(i)*T(:,i)*Q(:,i)';
end

B = diag(b);

%-------------------------------------------------------------------

%[n,m] = size(X);

Ws(:,1) = W(:,1);

for j = 2:h
    w = eye(m);
    for k = 1:(j-1)
        w = w*(eye(m)-W(:,k)*P(:,k)');
    end
    
    Ws(:,j) = w*W(:,j);
end

as = Ws*B*Q';

%--------------------------------------------------------------------

stdcov = std(X);
ai = as' * std(y) ./ stdcov;
a0 = mean(y) - sum( ( as' * std(y) ./ stdcov ) .* mean(X) );
A = [a0,ai];

ypre = [ones(n,1),X]*A';
plot(y,ypre,'.',y,y);
%ypre = X*as;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -