clear all;
close all;
class_num = 40;
sample_num = 10;
row = 112;
line = 92;
row_line = min(row, line);
rowline = row * line;
load orl_face2;
disp('orl_eigenface now begin');
right_num = [];
rr_0 = [];
for count = 8
train_num = count;
train_num
train_total = train_num * class_num;
test_num = sample_num - train_num;
test_num
test_total = test_num * class_num;
%% -------- 1.calculate Sb Sw -------- %%
orl_train = zeros(rowline, train_total);
orl_m_all = zeros(rowline,1);
orl_m = zeros(rowline,class_num);
for i = 1:class_num
for j = 1:train_num
kk = (i-1)*train_num + j;
orl_temp = double(orl(:,:,j,i));
for p = 1:row
for q = 1:line
site = (p-1)*line + q;
orl_train(site, kk) = orl_temp(p,q);
end
end
orl_m_all = orl_m_all + orl_train(:,kk);
orl_m(:,i) = orl_m(:,i) + orl_train(:,kk);
end
orl_m(:,i) = orl_m(:,i)/train_num;
end
orl_m_all = orl_m_all / train_total;
orl_test = zeros(rowline, test_total);
for i = 1:class_num
for j = 1:test_num
kk = (i-1)*test_num + j;
orl_temp = double(orl(:,:,j+train_num,i));
for p = 1:row
for q = 1:line
site = (p-1)*line + q;
orl_test(site, kk) = orl_temp(p,q);
end
end
end
end
Sb = zeros(rowline,class_num);
for i = 1:class_num
Sb(:,i) = orl_m(:,i) - orl_m_all;
end
% Sb0 = (Sb * Sb') / class_num; %% [rowline, rowline]
St = zeros(rowline,train_total);
for i = 1:class_num
for j = 1:train_num
kk = (i-1)*train_num + j;
St(:,kk) = orl_train(:,kk) - orl_m_all;
end
end
% St0 = (St * St') / train_total; %% [rowline, rowline]
%% -------- 2.calculate transform of St -------- %%
ss = (St' * St) / train_total; %% [train_total, train_total]
rr = rank(ss)-class_num;
rr_0 = [rr_0; rr];
[V_St, D_St] = eig(ss);
dd = abs(eig(ss));
[dd_value, dd_site] = sort(dd);
temp2 = rank(ss)-class_num;
temp1 = train_total - temp2 + 1;
yy = [];
Dt = zeros(rr);
jj = 0;
dd_demo = zeros(temp2,1);
dd_count = 1;
for i = train_total:-1:temp1
yy = [yy; V_St(:,dd_site(i))'];
jj = jj + 1;
Dt(jj,jj) = dd_value(i)^(-0.5);
dd_demo(dd_count) = dd_value(i);
dd_count = dd_count + 1;
end
yy = yy';
zz = St * yy * Dt;
ww = zz';
figure, plot(dd_demo);
for ii = 1:20
ww_temp = ww(ii,:);
ww_temp = ww_temp - min(ww_temp);
ww_temp = ww_temp / max(ww_temp);
ww_temp = floor(ww_temp * 255);
orl_temp = zeros(row, line);
for p = 1:row
for q = 1:line
site = (p-1)*line + q;
orl_temp(p,q) = ww_temp(site);
end
end
orl_temp = uint8(orl_temp);
ss = sprintf('eigenorl_%d.bmp',ii);
imwrite(orl_temp, ss,'bmp');
end
disp('orl_eigenface is over');
%% -------- 4.calculate transform of test and train -------- %%
orl_train_new = ww * orl_train;
orl_test_new = ww * orl_test;
error = [];
for i = 1:class_num
for j = 1:test_num
%i,j
kk = (i-1)*test_num + j;
res_y = orl_test_new(:,kk);
dis = [];
for ii = 1:class_num
for jj = 1:train_num
res_x = orl_train_new(:,(ii-1)*train_num+jj);
res = (res_y - res_x).^2;
temp = sqrt(sum(res));
%res = abs(res_y - res_x);
% temp = sum(res);
dis = [dis; temp];
end
end
[value, site] = min(dis);
site_new = floor((site-1)/train_num) + 1;
if site_new ~= i
error = [error; i*test_num+j];
end
end
end
right_num = [right_num; (1.0-length(error)/(class_num*test_num))*100 ];
right_num
end
PCA(主成分分析法)和ICA(独立成分分析法)的MATLAB源程序

PCA(主成分分析)与ICA(独立成分分析)是数据降维和特征提取中的两种重要技术,常用于图像处理等领域。MATLAB作为一种强大的数学计算软件,提供了实现这两种方法的便捷平台。
PCA是一种线性变换方法,它通过找到数据集中的主要变异方向(主成分),将原始高维数据转换为一组新的正交坐标系统,使得新坐标系中的第一轴(主成分)解释了原始数据的最大方差,第二轴解释了剩余方差中的最大部分,以此类推。PCA的主要优点在于能有效降低数据的复杂性,同时保留大部分信息。在MATLAB中,可以使用`princomp`函数进行PCA操作,该函数对数据进行中心化处理并计算出主成分。
PCAFLD(主成分分析 Fisher 分类器)是PCA与Fisher判别分析的结合,它在PCA的基础上进一步优化,寻找能最大化类间距离同时最小化类内距离的投影方向,从而提高分类性能。在MATLAB中,PCAFLD的实现可能涉及到自定义函数,如`PCAFLD.m`所示,这可能包含PCA的实现以及Fisher判别分析的步骤。
ICA则是一种非线性的盲源分离方法,它的目标是从混合信号中恢复出原始的独立源。在图像处理中,ICA常用于去除噪声或分离不同的图像特征。ICA假设源信号是统计独立的,而观测信号是这些源信号的线性组合。MATLAB中实现ICA通常会用到`fastica`函数,该函数基于快速ICA算法,可以高效地估计独立分量。
在提供的文件列表中,`pca_ica.m`可能是执行PCA和ICA过程的MATLAB脚本,它可能包含了数据预处理、模型训练和结果可视化等步骤。`PCAFLD.m`是PCA与Fisher判别分析结合的实现,适用于分类任务。`www.pudn.com.txt`可能是下载这些资源的来源说明或相关文档。
PCA和ICA在MATLAB中的应用是数据科学和图像处理领域中的核心工具。理解并掌握这两种方法的原理和MATLAB实现,对于提升数据分析能力,特别是在高维数据处理和特征选择上具有重要意义。实际应用中,用户需要根据具体的数据特性及需求,选择合适的降维和特征提取策略,以达到最佳的模型性能和解释性。

qxd12345678
- 粉丝: 8
最新资源
- 本库是个基于python的工具集,用于记录数据到文件。 使用方便,代码简洁, 是一个可靠、省心且实用的工具。 支持多线程同时写入。.zip
- 本科毕业设计,基于python的图像复制粘贴篡改识别软件。.zip
- 本项目是基于计算机视觉的端到端交通路口智能监控系统.采用的设计架构由SRS
- 碧蓝航线ios平台自动脚本,基于python+opencv+facebook_wda实现.zip
- 毕业设计中基于给定微博数据的反作弊识别,用python开发。.zip
- 毕业设计项目,基于深度学习的实时语义分割算法研究,python实现。.zip
- 对基于python的微博爬虫进行重写,重写语言:java.zip
- 此框架是基于Python+Pytest+Requests+Allure+Yaml+Json实现全链路接口自动化测试
- 程序语言课程作业在线评测平台(实现Java、C、Python的选择、填空、代码题在线评测),基于SpringBoot+Layui+MySQL实现.zip
- 非官方的科大讯飞语音合成(用于朗读,配音场景)python API (基于官方demo增加了:超过2000字上限自动分割再合并音频的功能).zip
- 非官方的简易中国铁路列车运行图系统,基于Python + PyQt5
- 超市POS销售与后台管理系统_商品录入收银业务会员管理进货销售库存人员权限断网收银断电保护_实现超市前台POS销售商品扫描条形码输入收银计算找零打印清单会员折扣累计消费以及后台管理.zip
- 俄罗斯方块闯关版,基于Python实现.zip
- 该项目是基于Python和数据库实现的学生信息管理系统.zip
- 该仓库为agv系统调度软件的前后端实现。项目基于fastapi(python后端框架)和vue2实现了RESTful风格的前后端分离.zip
- 该项目是基于Scrapy框架的Python新闻爬虫,能够爬取网易,搜狐,凤凰和澎湃网站上的新闻,将标题,内容,评论,时间等内容整理并保存到本地.zip