主成分分析(PCA)深入剖析+Matlab模拟
生活随笔
收集整理的這篇文章主要介紹了
主成分分析(PCA)深入剖析+Matlab模拟
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.降維引發的思考
對于現在維數比較多的數據,我們首先需要做的就是對其進行降維操作。降維,簡單來說就是說在盡量保證數據本質的前提下將數據中的維數降低。降維的操作可以理解為一種映射關系,例如函數z=f(x,y),即由原來的二維轉換成了一維。處理降維的技術有很多種,如前面的SVD奇異值分解,主成分分析(PCA),因子分析(FA),獨立成分分析(ICA)等等。2.PCA的主調與意圖
PCA是一種較為常用的降維技術,PCA的思想是將n維特征映射到k維上,這k維是全新的正交特征。這k維特征稱為主元,是重新構造出來的k維特征。在PCA中,數據從原來的坐標系轉換到新的坐標系下,新的坐標系的選擇與數據本身是密切相關的。其中,第一個新坐標軸選擇的是原始數據中方差最大的方向,第二個新坐標軸選取的是與第一個坐標軸正交且具有最大方差的方向,依次類推,我們可以取到這樣的k個坐標軸。PCA的操作流程符合我們在矩陣論中學習的那一套,大致如下:
1.去平均值,即每一位特征減去各自的平均值;
2.計算協方差矩陣;
3.計算協方差矩陣的特征值與特征向量;
4.對特征值從大到小排序(更多時候我們愿意叫他貢獻度);
5.保留最大的k個特征向量;將數據轉換到k個特征向量構建的新空間中。
3.MATLAB仿真實驗
%% pca dataSet = load('testSet.txt');%導入數據 % pca [FinalData, reconData] = PCA(dataSet, 1); %% 作圖 hold on plot(dataSet(:,1), dataSet(:,2), '.'); plot(reconData(:,1), reconData(:,2), '.r'); hold offfunction [ FinalData,reconData ] = PCA( dataSet, k )[m,n] = size(dataSet);%% 去除平均值%取平均值dataSetMean = mean(dataSet);%減去平均值dataSetAdjust = zeros(m,n);for i = 1 : mdataSetAdjust(i , :) = dataSet(i , :) - dataSetMean;end%% 計算協方差矩陣dataCov = cov(dataSetAdjust);%% 計算協方差矩陣的特征值與特征向量[V, D] = eig(dataCov);% 將特征值矩陣轉換成向量d = zeros(1, n);for i = 1:nd(1,i) = D(i,i);end%% 對特征值排序[maxD, index] = sort(d);%% 選取前k個最大的特征值% maxD_k = maxD(1, (n-k+1):n);index_k = index(1, (n-k+1):n);% 對應的特征向量V_k = zeros(n,k);for i = 1:kV_k(:,i) = V(:,index_k(1,i));end%% 轉換到新的空間FinalData = dataSetAdjust*V_k;% 在原圖中找到這些點reconData = FinalData * V_k';for i = 1 : mreconData(i , :) = reconData(i , :) + dataSetMean;end end
總結
以上是生活随笔為你收集整理的主成分分析(PCA)深入剖析+Matlab模拟的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 构建自己的服务器有什么好处呢?
- 下一篇: C++返回字符串函数的几种实现方法