1. Введение
1 PCA
1.1 Снижение размерности данных
К методам уменьшения размерности относятся: анализ основных компонентов (PCA), факторный анализ (FA) и анализ независимых компонентов (ICA).
Анализ основных компонентов: найдите вектор, который минимизирует сумму проекций каждой выборки на этот вектор.
факторный анализ:
Анализ независимых компонентов:
1.2 PCA: цель состоит в том, чтобы уменьшить размерность Фактический принцип уменьшения размерности состоит в том, чтобы максимизировать целевую функцию (дисперсия после проецирования данных является самой большой)
Сообщение в блоге о принципе сильного толчка:blog.CSDN.net/High Score/AR…
(1) Предположим, что имеется m n-мерных выборок: {Z1,Z2,…,Zm}
(2) Центр выборки u: сумма всех наблюдений выборки/(mxn)
(3) После децентрализации получить матрицу {X1,X2,…,Xm}={Z1-U,Z2-U,…,Zm-U}
(4) Запишите вектор W, содержащий n элементов, тогда проекция выборки X1 в направлении w есть скалярное произведение X1.W
(5) Целевая функция PCA состоит в том, чтобы максимизировать проекцию
Целевое уравнение может быть решено в матричной форме, метод решения следующий:
(1) Постройте оператор Лагранжа, производная которого равна 0, а вектор с наибольшей проекцией является собственным вектором, соответствующим наибольшему собственному значению.
В соответствии с кумулятивной долей вклада собственных значений можно указать, сколько векторов W выбрано в качестве матрицы преобразования K-L. Если выбраны четыре главные компоненты, то для каждой n-мерной выборки после преобразования матрицы она становится (1xn)x(nx4)=1x4-мерным вектором, чем достигается цель уменьшения размерности.
(2) Разложение по сингулярным значениям SVD: для уменьшения размерности требуется только правая сингулярная матрица, то есть собственный вектор AA (T), и не требуется вычислять ковариационную матрицу A. Дружественная память.
1.3 Распознавание лиц на основе PCA
(1) На основе библиотеки образцов лиц, таких как фотографии реальных лиц (банк, станция) и других методов сбора данных, создайте библиотеку лиц.
(2) Получить собственные значения и собственные векторы ковариационной матрицы тренировочной базы данных лиц.
(3) Для лица, которое необходимо выделить, определите проекцию на вектор признаков, наиболее близкую к проекции обучающей выборки.
! ! ! Примечание. Следует отметить, что ковариационная матрица представляет собой ковариацию между измерениями, поэтому это размер nxn, но в практических приложениях, таких как уменьшение размера изображения (при условии, что изображение имеет размер 200 * 10 пикселей, имеется 100 изображений), Один пиксель — это одно измерение, поэтому исходная ковариационная матрица XX' имеет размерность (2000 x 100) x (100 x 2000), а компьютерная память и вычислительные ресурсы слишком велики. В этом случае можно рассмотреть возможность использования альтернативной матрицы P=X'X. (100x2000)x(2000x100) вместо:
Собственное значение P является собственным значением исходной ковариационной матрицы, а собственный вектор P, умноженный на матрицу данных, является собственным вектором исходной ковариационной матрицы.
2 LDA
LDA: линейный дискриминантный анализ, также известный как линейный дискриминант Фишера, является широко используемым методом уменьшения размерности.
Основная идея: спроецируйте многомерные образцы паттернов в оптимальное дискриминантное векторное пространство для достижения эффекта извлечения информации о классификации и сжатия размерности пространства признаков.После проецирования убедитесь, что образцы паттернов в новом подпространстве имеют наибольший интервал. расстояние класса и наименьшее расстояние внутри класса, т. е. образец имеет наилучшую разделимость в этом пространстве.
Размерность после уменьшения размерности LDA напрямую связана с количеством категорий и не имеет ничего общего с размерностью самих данных.Например, исходные данные являются n-мерными, а всего категорий C, то после Уменьшение размерности LDA, диапазон значений измерения составляет (1, C-1), например, при условии классификации изображений, двух категорий положительных и отрицательных примеров, каждое изображение представлено 10 000-мерными функциями, затем после LDA остается только 1 -размерные признаки, и этот размерный признак обладает наилучшей классификационной способностью.
Для многих случаев двухклассовой классификации после LDA остается только одно измерение, и кажется, что этого достаточно, чтобы найти порог с лучшим классификационным эффектом.
Предполагая, что x является N-мерным вектором-столбцом, чтобы уменьшить x до C-мерного с помощью LDA, вам нужно только найти матрицу проекции w, то есть матрицу N * C, умножить транспонированную матрицу w и x, это становится С-мерным. (Математическое представление проекции заключается в умножении на матрицу)
На данный момент суть проблемы такова: найти проекционную матрицу! Более того, матрица проекций должна гарантировать, что выборки шаблонов имеют наибольшее межклассовое расстояние и наименьшее внутриклассовое расстояние в новом подпространстве.
2.2 Математическое представление ЛДА:
Во-вторых, исходный код
clear all
clc
close all
start=clock;
sample_class=1:40;%样本类别
sample_classnum=size(sample_class,2);%样本类别数
fprintf('程序运行开始....................\n\n');
for train_samplesize=3:8;
train=1:train_samplesize;%每类训练样本
test=train_samplesize+1:10;%每类测试样本
train_num=size(train,2);%每类训练样本数
test_num=size(test,2);%每类测试样本数
address=[pwd '\ORL\s'];
%读取训练样本
allsamples=readsample(address,sample_class,train);
%先使用PCA进行降维
[newsample base]=pca(allsamples,0.9);
%计算Sw,Sb
[sw sb]=computswb(newsample,sample_classnum,train_num);
%读取测试样本
testsample=readsample(address,sample_class,test);
best_acc=0;%最优识别率
%寻找最佳投影维数
for temp_dimension=1:1:length(sw)
vsort1=projectto(sw,sb,temp_dimension);
%训练样本和测试样本分别投影
tstsample=testsample*base*vsort1;
trainsample=newsample*vsort1;
%计算识别率
accuracy=computaccu(tstsample,test_num,trainsample,train_num);
if accuracy>best_acc
best_dimension=temp_dimension;%保存最佳投影维数
best_acc=accuracy;
end
end
%---------------------------------输出显示----------------------------------
fprintf('每类训练样本数为:%d\n',train_samplesize);
fprintf('最佳投影维数为:%d\n',best_dimension);
fprintf('FisherFace的识别率为:%.2f%%\n',best_acc*100);
fprintf('程序运行时间为:%3.2fs\n\n',etime(clock,start));
end
function [newsample basevector]=pca(patterns,num)
%主分量分析程序,patterns表示输入模式向量,num为控制变量,当num大于1的时候表示
%要求的特征数为num,当num大于0小于等于1的时候表示求取的特征数的能量为num
%输出:basevector表示求取的最大特征值对应的特征向量,newsample表示在basevector
%映射下获得的样本表示。
[u v]=size(patterns);
totalsamplemean=mean(patterns);
for i=1:u
gensample(i,:)=patterns(i,:)-totalsamplemean;
end
sigma=gensample*gensample';
[U V]=eig(sigma);
d=diag(V);
[d1 index]=dsort(d);
if num>1
for i=1:num
vector(:,i)=U(:,index(i));
base(:,i)=d(index(i))^(-1/2)* gensample' * vector(:,i);
end
else
sumv=sum(d1);
for i=1:u
if sum(d1(1:i))/sumv>=num
l=i;
break;
end
end
for i=1:l
vector(:,i)=U(:,index(i));
base(:,i)=d(index(i))^(-1/2)* gensample' * vector(:,i);
end
end
function sample=readsample(address,classnum,num)
%这个函数用来读取样本。
%输入:address就是要读取的样本的地址,classnum代表要读入样本的类别,num是每类的样本;
%输出为样本矩阵
allsamples=[];
image=imread([pwd '\ORL\s1_1.bmp']);%读入第一幅图像
[rows cols]=size(image);%获得图像的行数和列数
for i=classnum
for j=num
a=imread(strcat(address,num2str(i),'_',num2str(j),'.bmp'));
b=a(1:rows*cols);
b=double(b);
allsamples=[allsamples;b];
end
end
3. Результаты операции
4. Замечания
Версия: 2014а