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

📄 regriica.m

📁 本文件夹中包含了多种回归算法
💻 M
字号:

function [theta] = RegrIICA(X)

%   [theta] = RegrIICA(X)
%
% Interactive Independent Component Analysis
%
% Input parameter:
%  - X: Input data block, mixture of signals (k x n)
% Return parameter:
%  - theta: Independent components
%
% Heikki Hyotyniemi Jan.31, 2001


theta = NaN;
[k,n] = size(X);
if norm(eye(n)-X'*X/k) > 10^-5, disp('First whiten data!'); return; end

nn = (n^2+n)/2;
XX = zeros(k,(n^2+n)/2);
index = 0;
for i = 1:n
   for j = i:n
      index = index + 1;
      XX(:,index) = X(:,i).*X(:,j);
      if i ~= j
         XX(:,index) = sqrt(2)*XX(:,index);
      end
   end
end

[THETAXX,LAMBDAXX] = RegrPCA(XX,nn);

LAMBDAX = zeros(nn,n);
signals = zeros(k,nn*n);
for i = 1:nn
   thetaXX = THETAXX(:,i);
   RXX = zeros(n,n);
   index = 0;
   for j = 1:n
      for l = j:n
         index = index + 1;
         if j == l
            RXX(j,j) = thetaXX(index);
         else
            RXX(j,l) = thetaXX(index)/sqrt(2);
            RXX(l,j) = thetaXX(index)/sqrt(2);
         end
      end
   end
   [THETA,LAMBDA] = eig(RXX);
   LAMBDA = diag(LAMBDA);
   [dummy,order] = sort(abs(LAMBDA));
   LAMBDAX(i,:) = LAMBDA(order)';
   THETA = THETA(:,order);
   signals(:,(i-1)*n+1:i*n) = X*THETA;
end

selected = [];
signal = zeros(k,1);
while 1==1
   for i = 1:nn
      figure(i);
      clf;
      for j = 1:n
         signals(:,(i-1)*n+j) = signals(:,(i-1)*n+j) - ...
            (signals(:,(i-1)*n+j)'*signal)/(signal'*signal+eps) * signal;
         subplot(n,1,j);
         plot(signals(:,(i-1)*n+j));
         if j == 1
%            title(['Frame ',num2str(i)]); 
            title(['\lambda = ',num2str(LAMBDAXX(i))]); 
         end
%         ylabel(['Curve ',num2str(j)]);
         ylabel(['\lambda = ',num2str(LAMBDAX(i,j))]);
      end
   end
   frameno = input('Select good-looking frame number (or press only <return>): ');
   if isempty(frameno), break; end
   figure(frameno);
   figno = input('Additionally, give the best-looking curve number: ');
   signal = signals(:,(frameno-1)*n+figno);
   selected = [selected,signal];
end

theta = RegrMLR(X,selected);

⌨️ 快捷键说明

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