資源簡介
代碼包含MATLAB自帶的princomp函數以及自己編寫的PCA函數進行PCA降維,實現功能相同,準確率略有差異。

代碼片段和文件信息
%?1這部分是自己用MATLAB自帶的princomp函數進行PCA降維;
clc;clear;
nperson=40;????%輸入的樣本類別數
imgMatrix=inputImg(nperson0);???%輸入的圖片數據轉換為矩陣,行表示樣本數,列表示特征維數;
[Coeff~latent]=princomp(imgMatrix‘econ‘);???%PCA降維;latent為特征值,Coeff為相應特征值下的特征向量;
img_train_reduced=imgMatrix*Coeff(:1:30);?????%降維后的訓練數據;
multiSVMstruct=multiSVMtrain(img_train_reducednperson);??%進行多分類的SVM訓練;
[imgMatrix_testrealclass]=inputImg(nperson1);???%輸入測試數據;?
img_test_reduced=imgMatrix_test*Coeff(:1:30);
%?降維后的測試數據;此處不用重新計算特征向量的原因是測試集跟訓練集必須保證投影在同個特征空間里;
class=multiSVM(img_test_reducedmultiSVMstructnperson);???%對每個測試樣本進行分類,分類結果存儲于class;
accuracy=sum(class==realclass‘)/length(class);????%計算準確率;
msgbox([‘識別準確率:‘num2str(accuracy*100)‘%‘]);?%顯示結果;
%2以下部分是用自己寫的PCA函數進行降維;
clc;clear;
nperson=40;????%輸入的樣本類別數
imgMatrix=inputImg(nperson0);???%輸入的圖片數據轉換為矩陣,行表示樣本數,列表示特征維數;
mA=mean(imgMatrix);???%求數據矩陣每一列的平均值;
[Vimg_train_reduced]=fpca(imgMatrix30mA);??%得到降維后的數據img_train_reduced;
lowvec=min(img_train_reduced[]1);??%沿列向求最小值;
upvec=max(img_train_reduced[]1);???%沿列向求最大值;
%?%?img_train_reduced?=?scaling(img_train_reducedlowvecupvec);??%數據歸一化
multiSVMstruct=multiSVMtrain(img_train_reducednperson);??%進行多分類的SVM訓練;
[imgMatrix_testrealclass]=inputImg(nperson1);???%輸入測試數據;?
%使得測試數據均值為0;
m=size(imgMatrix_test1);
mdata_testMatrix=repmat(mAm1);
testdata=imgMatrix_test-mdata_testMatrix;?
%降維后的測試數據;此處不用重新計算特征向量V的原因是測試集跟訓練集必須保證投影在同個特征空間里;
img_test_reduced=testdata*V;???
%?%?img_test_reduced?=?scaling(img_test_reducedlowvecupvec);
class=multiSVM(img_test_reducedmultiSVMstructnperson);???%對每個測試樣本進行分類,分類結果存儲于class;
accuracy=sum(class==realclass‘)/length(class);????%計算準確率;
msgbox([‘識別準確率:‘num2str(accuracy*100)‘%‘]);?%顯示結果;
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????2113??2016-12-17?16:02??PCAsvmbyMyself\demo.m
?????文件????????594??2016-12-17?15:57??PCAsvmbyMyself\fpca.m
?????文件????????609??2016-12-16?23:12??PCAsvmbyMyself\inputImg.m
?????文件????????329??2016-12-16?23:01??PCAsvmbyMyself\multiSVM.m
?????文件????????283??2016-12-16?22:56??PCAsvmbyMyself\multiSVMtrain.m
?????文件????????190??2016-12-17?11:37??PCAsvmbyMyself\scaling.m
?????目錄??????????0??2016-12-17?16:08??PCAsvmbyMyself
-----------?---------??----------?-----??----
?????????????????4118????????????????????7
- 上一篇:三相SPWM逆變器仿真
- 下一篇:遺傳算法matlab程序m文件
評論
共有 條評論