fld.m
来自「一个matlab的工具包,里面包括一些分类器 例如 KNN KMEAN SVM 」· M 代码 · 共 44 行
M
44 行
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 + =
减小字号Ctrl + -
显示快捷键?