maxcovariance.m

来自「a function inside machine learning」· M 代码 · 共 55 行

M
55
字号
function u = maxCovariance(X, Y)
% A function to compute the maximum covariance vector between matrices X and Y
%
% Usage: u = maxCovariance(X, Y)
% Inputs/Outputs: 
%   X - an (l x n) matrix whose rows are examples 
%   Y - an (l x n) matrix with labels as rows 
%
%   u - the projection vector of maximal covariance 
%
% Copyright (C) 2006 Charanpal Dhanjal 

% This library is free software; you can redistribute it and/or
% modify it under the terms of the GNU Lesser General Public
% License as published by the Free Software Foundation; either
% version 2.1 of the License, or (at your option) any later version.
% 
% This library is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
% Lesser General Public License for more details.
% 
% You should have received a copy of the GNU Lesser General Public
% License along with this library; if not, write to the Free Software
% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
% USA

if (nargin ~= 2)
    fprintf('%s\n', help('maxCovariance'));
    error('Incorrect number of inputs - see above usage instructions.');
end

tol = 0.001; 
YX = Y'*X;

if(cond(X) > 1e+18) 
    disp(sprintf('Warning: condition number is pretty big - %g', condX)); 
end

u = YX(1,:)'/norm(YX(1,:));

% Only loop if dimension greater than 1 (since X'y is just a vector is
% dim(Y)=1 and so u(:, j) = X'yy'XX'y/norm = X'y/norm)
if size(Y, 2) > 1
    uold = u + 1;

    while norm(u - uold) > tol
        uold = u;
        tu = (YX'*YX)*uold;
        u = tu/norm(tu);
    end
end

u = u/norm(u);

⌨️ 快捷键说明

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