-
大小: 37.8MB文件類型: .rar金幣: 1下載: 0 次發(fā)布日期: 2023-07-17
- 語言: 其他
- 標(biāo)簽:
資源簡介
利用稀疏字典表示、OMP算法進(jìn)行高光譜圖像分類,內(nèi)含高光譜數(shù)據(jù)。
代碼片段和文件信息
clear;
clc;
load?datalab.mat?data???????????????%讀取數(shù)據(jù),包含標(biāo)記的數(shù)據(jù)data.fet和對應(yīng)的分類data.lab
%初始化
K?=?3;??????????????????????????????%OMP算法中信號的稀疏度
loopCnt?=?10;???????????????????????%為減少隨機(jī)性而計(jì)算10次,結(jié)果取平均值
trnPer?=?0.2;???????????????????????%訓(xùn)練數(shù)據(jù)所占的百分比20%
clsCnt?=?16;????????????????????????%分類的數(shù)量
clsNum?=?zeros(1?clsCnt);??????????%每個(gè)類別的數(shù)據(jù)的總數(shù)量
trnNum?=?zeros(1?clsCnt);??????????%每個(gè)類別的數(shù)據(jù)選作訓(xùn)練數(shù)據(jù)的數(shù)量
tstNum?=?zeros(1?clsCnt);??????????%每個(gè)類別的數(shù)據(jù)選作測試數(shù)據(jù)的數(shù)量
conMat?=?zeros(clsCntclsCnt);??????%混淆矩陣,保存測試數(shù)據(jù)的預(yù)測類別與實(shí)際類別的關(guān)系
?for?i?=?1?:?clsCnt
???index?=?find(data.lab?==?i);?????????????????%找到標(biāo)記為i的數(shù)據(jù)的下標(biāo)
???clsNum(i)?=?size(index1);???????????????????%標(biāo)記為i的數(shù)據(jù)的總數(shù)量
???trnNum(i)?=?ceil(clsNum(i)?*?trnPer);????????%選取作為訓(xùn)練樣本的數(shù)量
???tstNum(i)?=?clsNum(i)?-?trnNum(i);???????????%剩余的為測試樣本的數(shù)量
?end
%開始計(jì)算
for?loop?=?1?:?loopCnt??????????????%重復(fù)10次
????trnFet?=?[];????????????????????????%保存訓(xùn)練數(shù)據(jù)
????trnLab?=?[];????????????????????????%保存訓(xùn)練數(shù)據(jù)對應(yīng)的類型
????tstFet?=?[];????????????????????????%保存測試數(shù)據(jù)
????tstLab?=?[];????????????????????????%保存測試數(shù)據(jù)對應(yīng)的類型
????
????%每種類別隨機(jī)選取20%作為樣本數(shù)據(jù)
????for?i?=?1?:?clsCnt
???????index?=?find(data.lab?==?i);??????????????????%找到標(biāo)記為i的數(shù)據(jù)的下標(biāo)
???????random_index?=?index(randperm(length(index)));%結(jié)果為打亂順序后的下標(biāo)序列
???????index?=?random_index(1:trnNum(i));????????????%在亂序中取前20%作為訓(xùn)練樣本,index保存它們的下標(biāo)
???????trnFet?=?[trnFet?data.fet(index:)‘];?????????%將訓(xùn)練樣本的數(shù)據(jù)依次填充進(jìn)trnFet數(shù)組
???????trnLab?=?[trnLab?ones(1length(index))*i];????%將訓(xùn)練樣本的標(biāo)記依次填充進(jìn)trnLab數(shù)組
???????index?=?random_index(trnNum(i)+1:end);????????%亂序中剩余的為測試樣本,index保存它們的下標(biāo)
???????tstFet?=?[tstFet?data.fet(index:)‘];?????????%將測試樣本的數(shù)據(jù)依次填充進(jìn)tstFet數(shù)組
???????tstLab?=?[tstLab?ones(1length(index))*i];????%將測試樣本的標(biāo)記依次填充進(jìn)tstFet數(shù)組
????end
????%用OMP算法預(yù)測訓(xùn)練數(shù)據(jù)的分類
????trnFet?=?trnFet./repmat(sqrt(sum(trnFet.*trnFet))[size(trnFet1)?1]);??%對訓(xùn)練樣本做歸一化處理
????tstFet?=?tstFet./repmat(sqrt(sum(tstFet.*tstFet))[size(tstFet1)?1]);??%對測試樣本做歸一化處理
????for?i?=?1?:?size(tstFet2)??????????????%對每一個(gè)測試樣本i做預(yù)測
???????x?=?tstFet(:i);?????????????????????%提取出某個(gè)測試樣本的200維數(shù)據(jù)x
???????sparse?=?OMP(trnFetxK);????????????%用OMP算法求出其稀疏系數(shù)矩陣
???????residual?=?zeros(1clsCnt);??????????%該組樣本對每個(gè)類別的重構(gòu)冗余
???????for?j?=?1:1:clsCnt???????????????????%將該測試樣本重構(gòu)成每一種類別
???????????index?=?find(trnLab?==?j);???????%選取字典中類別為j的數(shù)據(jù)
???????????D_c?=?trnFet(:index);???????????%字典中類別為j的列
???????????s_c?=?sparse(index);?????????????%稀疏矩陣中本應(yīng)為j類的位置的系數(shù)
???????????temp?=?x?-?D_c*s_c;??????????????%
???????????residual(j)?=?norm(temp2);??????%計(jì)算重構(gòu)冗余
???????end
???????preLab?=?find(residual?==?min(residual));?????%找出重構(gòu)冗余最小的類別,即為預(yù)測的類別
???????conMat(preLab(1)tstLab(i))?=?conMat(preLab(1)tstLab(i))?+?1;?%根據(jù)實(shí)際類別與預(yù)測結(jié)果,更新混淆矩陣
????end
end
for?i?=?1?:?clsCnt
????conMat(:i)?=?conMat(:i)?./?(loopCnt?*?tstNum(i));
end
ave_acc?=?sum(diag(conMat))/clsCnt
printConMat(conMat);
save?result.mat
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????3415??2017-10-11?15:26??omp\classifier.m
?????文件???21909979??2017-05-11?22:40??omp\datalab.mat
?????文件????????836??2017-05-12?16:39??omp\OMP.m
?????文件???????1555??2017-05-12?16:55??omp\printConMat.m
?????文件???17725409??2017-10-25?09:26??omp\result.mat
?????目錄??????????0??2017-10-25?09:09??omp
-----------?---------??----------?-----??----
?????????????39641194????????????????????6
評論
共有 條評論