📄 fld.m
字号:
function [X_TRAIN_REDUCE, X_TEST_REDUCE] = FLD(X_TRAIN, Y_TRAIN, X_TEST, Y_TEST, NUM_REDUCE_DIM)
if nargin < 5
NUM_REDUCE_DIM = 5;
end;
lambda = 0.8;
NUM_CLASS = 2;
CLASS_SET = unique(Y_TRAIN);
[NUM_DATA, NUM_FEATURE] = size(X_TRAIN);
% Apply Fisher discriminator
% Compute the within class covariance matrix
COV_IN_CLASS = zeros(NUM_FEATURE, NUM_FEATURE);
for class = 1:NUM_CLASS
TRAIN_LAST = X_TRAIN(Y_TRAIN == CLASS_SET(class), :);
[C, N] = size(TRAIN_LAST);
COV_IN_CLASS = COV_IN_CLASS + cov(TRAIN_LAST) .* (C-1);
end
COV_IN_CLASS = lambda .* COV_IN_CLASS + (1 - lambda) .* diag(diag(COV_IN_CLASS));
fprintf('Finish in class matrix\n');
% compute the covariance matrix for between classes
X_CLASS = zeros(NUM_CLASS, NUM_FEATURE);
COV_BETWEEN_CLASS = zeros(NUM_FEATURE, NUM_FEATURE);
T_MEAN = mean(X_TRAIN);
for class = 1:NUM_CLASS
TRAIN_LAST = X_TRAIN(Y_TRAIN == CLASS_SET(class), :);
[C, S] = size(TRAIN_LAST);
X_CLASS(class, :) = mean(TRAIN_LAST) - T_MEAN;
COV_BETWEEN_CLASS = COV_BETWEEN_CLASS + (X_CLASS(class, :)' * X_CLASS(class, :)) .* C;
end
fprintf('Finish between class matrix\n');
temp = pinv(COV_IN_CLASS);
fprintf('Finish inverse\n');
temp = temp * COV_BETWEEN_CLASS;
[V, D] = eigs(temp, NUM_REDUCE_DIM);
fprintf('Finish decomposition\n');
X_TRAIN_REDUCE = X_TRAIN * V;
X_TEST_REDUCE = X_TEST * V;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -