中易网

pca的matlab程序翻译成公式和汉字。

答案:2  悬赏:80  
解决时间 2021-02-04 08:42
function [eigvector, eigvalue, elapse] = PCA_2(data, options)

if (~exist('options','var'))
options = [];
end

ReducedDim = 0;
if isfield(options,'ReducedDim')
ReducedDim = options.ReducedDim;
end

[nSmp,nFea] = size(data);
if (ReducedDim > nFea) || (ReducedDim <=0)
ReducedDim = nFea;
end

tmp_T = cputime;
if issparse(data)
data = full(data);
end
sampleMean = mean(data,1);
data = (data - repmat(sampleMean,nSmp,1));

if nFea/nSmp > 1.0713
% This is an efficient method which computes the eigvectors of
% of A*A^T (instead of A^T*A) first, and then convert them back to
% the eigenvectors of A^T*A.
ddata = data*data';
ddata = max(ddata, ddata');

dimMatrix = size(ddata,2);
if dimMatrix > 1000 && ReducedDim < dimMatrix/10 % using eigs to speed up!
option = struct('disp',0);
[eigvector, eigvalue] = eigs(ddata,ReducedDim,'la',option);
eigvalue = diag(eigvalue);
else
[eigvector, eigvalue] = eig(ddata);
eigvalue = diag(eigvalue);

[junk, index] = sort(-eigvalue);
eigvalue = eigvalue(index);
eigvector = eigvector(:, index);
end

clear ddata;

maxEigValue = max(abs(eigvalue));
eigIdx = find(abs(eigvalue)/maxEigValue < 1e-12);
eigvalue (eigIdx) = [];
eigvector (:,eigIdx) = [];

eigvector = data'*eigvector; % Eigenvectors of A^T*A
eigvector = eigvector*diag(1./(sum(eigvector.^2).^0.5)); % Normalization
else
ddata = data'*data;
ddata = max(ddata, ddata');

dimMatrix = size(ddata,2);
if dimMatrix > 1000 & ReducedDim < dimMatrix/10 % using eigs to speed up!
option = struct('disp',0);
[eigvector, eigvalue] = eigs(ddata,ReducedDim,'la',option);
eigvalue = diag(eigvalue);
else
[eigvector, eigvalue] = eig(ddata);
eigvalue = diag(eigvalue);

[junk, index] = sort(-eigvalue);
eigvalue = eigvalue(index);
eigvector = eigvector(:, index);
end

clear ddata;
maxEigValue = max(abs(eigvalue));
eigIdx = find(abs(eigvalue)/maxEigValue < 1e-12);
eigvalue (eigIdx) = [];
eigvector (:,eigIdx) = [];
end

if ReducedDim < length(eigvalue)
eigvalue = eigvalue(1:ReducedDim);
eigvector = eigvector(:, 1:ReducedDim);
end

if isfield(options,'PCARatio')
sumEig = sum(eigvalue);
sumEig = sumEig*options.PCARatio;
sumNow = 0;
for idx = 1:length(eigvalue)
sumNow = sumNow + eigvalue(idx);
if sumNow >= sumEig
break;
end
end
eigvector = eigvector(:,1:idx);
end

elapse = cputime - tmp_T;
最佳答案
1,对矩阵M的每一行求均值mu
2,M的每行减去对应行的均值,得到M1
3,对M1做SVD(奇异值分解)得到 U S V
4,在S里舍掉数字太小的部分得到S1。
5,用U S1 V还原回矩阵。
做好了
全部回答
虽然我很聪明,但这么说真的难到我了
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
深信服防火墙有没有reset键
谁知道赞美超市的文章
魔兽世界电狼--史考尔怎么才抓得到啊?
自考生考研是考专硕容易一些呢 还是学硕容易
锦官芙蓉怎么去啊,有知道地址的么
昨晚上做了个梦,梦到他好凶,对我好狠心,我
全面达小康的指标是什么?
昭君街道办事处前桃花村卫生室在什么地方啊,
安装了Adobe Flash Player,但是打开设备管理
怎样洗眼镜不会花
兰州理工大学技术工程学院真的有那么好吗?
梦见很多像豌豆那么小的橘子
青台精细化工公司相城区烧碱厂我想知道这个在
梧州伟安旅馆在什么地方啊,我要过去处理事情
科比是有多独?手感不好就别一个劲投 巅峰期
推荐资讯
东方明珠,上海中心大厦观光哪个效果最好
属马农历1966年8月18日的生辰八字
金诚食品在哪里啊,我有事要去这个地方
一个叫生死什么的游戏
富人的女儿很喜欢这个礼物的英文
兴义市南盘江镇卫生院地址在什么地方,想过去
武穴市鑫诚合伙税务师事务所我想知道这个在什
情人的老婆知道我们的关系,他老婆每天跟踪我
17k小说网的鲜花怎么才有
阿胶三宝膏120克的价格
手机丢失怎样通过另外一部手机控制
明天就要去德科签证了.发现一个大问题.求教
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?