分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!
主成份分析(principal component analysis,pca)也叫做主成份變換、主分量分析或 —l(karhunen—loeve)變換,是建立在統計特徵基礎上的多維(如多波段)正交線
性變換。它是遙感影象處理中最常用也是最有用的變換演算法之一。
這次我要實現乙個主成分分析演算法,圖是做出來了,但是和著名的遙感軟體pci和envi的效果比起來很差。如第一主成分的圖如下:
上面噪音極多,而且看起來不合諧。我知道自己的演算法有問題,在排除了自己的讀取影象的問題後。我考慮到是不是求取特徵矩陣時出了問題,因為主成分的輸出資料是y=x*a。
其中x為原影象,y為目標影象,a為特徵向量矩陣。由此我懷疑我的特徵矩陣求取有問題。後來從網上找了一種求特徵矩陣的辦法,進行主成分分析的效果。下面是具體的實現**:
//計算特徵向量
/*pdblcof [in][out]----- 協方差矩陣
lchannelcount [in] ------ 影象的輸入波段數
pdblvects [out] ---- 特徵向量矩陣
dbleps [in] ---- 誤差範圍,我取為0.0000001
ljt [in] ----- 迴圈次數,我取為1000000
*/static
int ijcobimatrixcharactervalue(double** pdblcof, long lchannelcount, std::vector& pdblvects, double dbleps,long ljt)
while(1)
}if(fm
if(l > ljt) return 0;
l += 1;
u = p * lchannelcount + q; w = p * lchannelcount + p; t = q * lchannelcount + p; s = q * lchannelcount + q;
x = -pdblcof[p][q];
y = (pdblcof[q][q] - pdblcof[p][p])/2.0;
omega = x / sqrt(x * x + y * y);
if(y
sn = 1.0 + sqrt(1.0 - omega * omega);
sn = omega / sqrt(2.0 * sn);
cn = sqrt(1.0 - sn * sn);
fm = pdblcof[p][p];
pdblcof[p][p] = fm * cn * cn + pdblcof[q][q] * sn * sn + pdblcof[p][q] * omega;
pdblcof[q][q] = fm * sn * sn + pdblcof[q][q] * cn * cn - pdblcof[p][q] * omega;
pdblcof[p][q] = 0.0;
pdblcof[q][p] = 0.0;
for(j = 0;j
if((j != p) && (j != q))
for(i = 0; i
if((i != p) && ( i != q))
for(i = 0; i
}return 1;
}// 根據特徵值從大到小排列特徵向量矩陣
/*pfmatrix [in][out]----- 上一步輸出的協方差矩陣
nbandnum [in] ------ 影象的輸入波段數
pdblvects [out] ---- 上一步輸出的特徵向量矩陣
*/static
void sorteigenvector(double** pfmatrix,int nbandnum,std::vector &pfvector)
if(p != i)}}
} 執行上面兩步之後,所得到的特徵矩陣為用於和原影象相乘的矩陣a.
對一幅tm影象的第1,2,3,4,5,7通道執行pca操作,效果圖如下:
第一主成分:
第二主成分:
第三主成分:
第四主成分:
第五主成分:
第六主成分:
從上面可以看出,正確的影象看起來視覺非常和諧,毫無刺目的感覺。
給我老師的人工智慧教程打call!
主成分分析實現的乙個心得
主成份分析 principal component analysis,pca 也叫做主成份變換 主分量分析或 l karhunen loeve 變換,是建立在統計特徵基礎上的多維 如多波段 正交線 性變換。它是遙感影象處理中最常用也是最有用的變換演算法之一。這次我要實現乙個主成分分析演算法,圖是做出...
主成分分析Matlab實現
資料匯入及處理 clcclear all a xlsread coach.xlsx b2 h16 資料標準化處理 a size a,1 b size a,2 for i 1 b sa i a i mean a i std a i end 計算相關係數矩陣的特徵值和特徵向量 cm corrcoef s...
Python 實現主成分分析
python 實現主成分分析 主成分分析 principal component analysis,pca 是最常用的一種降維方法,通常用於高維資料集的探索與視覺化,還可以用作資料壓縮和預處理等。矩陣的主成分就是其協方差矩陣對應的特徵向量,按照對應的特徵值大小進行排序,最大的特徵值就是第一主成分,其...