Почему собственный вектор & amp; Собственное значение в LDA станет нулевым?

Я хотел бы реализовать быстрый PLDA (вероятностный линейный дискриминантный анализ) в OpenCV. в этом ССЫЛКА НА САЙТ быстрый PLDA были реализованы в Matlab а также Python, Одной из частей PLDA является LDA. Я написал следующий код для реализации LDA в OpenCV:

int LDA_dim = 120;

// Load data

FileStorage fs("newStorageFile.yml", FileStorage::READ);

// Read data

Mat train_data, train_labels;

fs["train_data"] >> train_data;
fs["train_labels"] >> train_labels;

// LDA

if (LDA_dim > 0)
{
LDA lda(LDA_dim);
lda.compute(train_data, train_labels);          // compute eigenvectors

Mat eigenvectors = lda.eigenvectors();
}

Я преобразовал базу данных, которая была введена в ссылке выше .mat в .yml, Результат newStorageFile.yml что я загрузил Вот. train_data есть 650 строк и 600 столбцов, а train_labels — 650 строк и 1 столбец. Я не знаю, почему собственные векторы и собственное значение становятся равными нулю !!? PLZ, помогите мне исправить этот код.

Лучше принести код, который преобразует данные из .mat в .yml :

function matlab2opencv( variable, fileName, flag)

[rows cols] = size(variable);

% Beware of Matlab's linear indexing
variable = variable';

% Write mode as default
if ( ~exist('flag','var') )
flag = 'w';
end

if ( ~exist(fileName,'file') || flag == 'w' )
% New file or write mode specified
file = fopen( fileName, 'w');
fprintf( file, '%%YAML:1.0\n');
else
% Append mode
file = fopen( fileName, 'a');
end

% Write variable header
fprintf( file, '    %s: !!opencv-matrix\n', inputname(1));
fprintf( file, '        rows: %d\n', rows);
fprintf( file, '        cols: %d\n', cols);
fprintf( file, '        dt: f\n');
fprintf( file, '        data: [ ');

% Write variable data
for i=1:rows*cols
fprintf( file, '%.6f', variable(i));
if (i == rows*cols), break, end
fprintf( file, ', ');
if mod(i+1,4) == 0
fprintf( file, '\n            ');
end
end

fprintf( file, ']\n');

fclose(file);

Редактировать 1) Я пробовал LDA с некоторым образцом, который сам генерирую:

Mat train_data = (Mat_<double>(3, 3) << 25, 45, 44, 403, 607, 494, 2900, 5900, 2200);
Mat train_labels = (Mat_<int>(3, 1) << 1, 2, 3 );

LDA lda(LDA_dim);

lda.compute(train_data, train_labels);          // compute eigenvectors
Mat_<double> eigenvectors = lda.eigenvectors();
Mat_<double> eigenvalues = lda.eigenvalues();
cout << eigenvectors << endl << eigenvalues;

но я должен получить тот же результат: собственное значение и собственный вектор становятся равными нулю:
собственный вектор и собственное значение

12

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]