資源簡介
pca降維,直接運行,你把你里面的數據換成你自己的就可以啦,注意里面的注解,歡迎下載,你指的擁有,可以的話,歡迎打分,謝謝!
代碼片段和文件信息
function?[C?y]?=?myPCA(x)
%對矩陣用主成分分析法(PCA)進行降維,得到白化矩陣和降維后的矩陣
%輸入參量:
%x-----待處理的矩陣
%輸出參量:
%C-----白化矩陣
%y-----降維后的矩陣
load(‘高維特征.mat‘)
x=features(:1:30)‘;
mat1=x;?????????????????????????????????????%x的行數代表的是特征個數,列數代表的是樣本數
[mn]?=?size(mat1);
ref_mean?=?mean(mat12);????????????????????%求矩陣mat1每行的均值
X?=?mat1?-?repmat(ref_mean1n);????????????%mat1的每個元素減去對應行的均值,以便求協方差
A?=?X‘*X;
[V?D]?=?eig(A);?????????????????????????????%求特征值和特征向量
D_diag?=?diag(D);
[numd]?=?find(D_diag<0);????????????????????%去除因擾動造成的負特征值及其對應的特征向量?
D_diag(numd)?=?[];
V(:numd)?=?[];
[D_sort?D_index]?=?sort(-D_diag);????????????%特征值排序
D_sort?=?-D_sort;
%以總方差的70%為閾值,選取特征向量和特征值
D_pro?=?cumsum(D_sort)./sum(D_sort);
num?=?find(D_pro>0.9);???????????????????????%找到累計方差大于總方差90%的值所在的位置
T_num?=?num(1);??????????????????????????????%閾值所在的位置(以排序后的特征值為參照)
D_select?=?D_sort(1:T_num);??????????????????%去除較小的特征值,得到有效特征值(已排序)
D_index?=?D_index(1:T_num);??????????????????%得到有效特征值的序號
V_select?=?zeros(size(V1
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-10-15?11:16??pca降維\
?????文件????????1503??2018-10-15?14:06??pca降維\myPCA.m
?????文件??????117313??2018-06-17?15:39??pca降維\高維特征.mat
評論
共有 條評論