PCA(Principal Component Analysis)是一種經典的線性降維方法,其基本思想是將高維數據映射到低維空間中,使得映射后的數據具有更好的可解釋性。
PCA 的核心思想是將原始數據投影到一個新的坐標系中,使得投影后的數據方差最大。在這個新的坐標系中,第一個主成分是數據方差最大的方向,第二個主成分則是與第一個主成分不相關的方向,以此類推,直到所有主成分都被選出為止。
在 MATLAB 中,可以使用 pca 函數來計算主成分。下面是一個示例代碼,假設我們有一個包含 1000 個樣本和 10 個特征的數據集:
%生成隨機數據 data=randn(1000,10); %計算主成分 [coeff,score,latent]=pca(data);
其中,coeff 是一個 10x10 的矩陣,每列對應一個主成分,score 是一個 1000x10 的矩陣,表示每個樣本在新坐標系中的投影,latent 則是一個包含每個主成分的方差的向量。
我們可以使用這些結果來對數據進行降維。例如,如果我們希望將數據降到 3 維,可以將前三個主成分相加,得到每個樣本在新空間中的坐標:
new_data=data*coeff(:,1:3);
這將返回一個 1000x3 的矩陣,表示每個樣本在新空間中的坐標。
綜上所述,PCA 是一種非常有效的降維方法,可以在不丟失太多信息的情況下將高維數據降到低維空間中。在 MATLAB 中,可以使用 pca 函數來計算主成分,并使用結果來對數據進行降維。
PCA并通過python實現
PCA(Principal Component Analysis)是一種常用的數據降維技術,它可以通過對數據進行主成分分析,將高維數據映射到低維空間,從而使得數據在保留盡量多信息的前提下,減少特征維度,簡化問題。下面是一個用Python實現PCA的示例:
假設我們有一組二維數據,可以通過以下代碼來生成:
importnumpyasnp np.random.seed(1)#設置隨機數種子,這樣每次運行程序生成的數據都是相同的 X=np.dot(np.random.rand(2,2),np.random.randn(2,200)).T
這里我們使用np.dot()函數來進行矩陣乘法運算,其中第一個矩陣是2x2的隨機矩陣,第二個矩陣是2x200的隨機矩陣,最終得到的是2x200的矩陣,這就是我們的原始數據。
接下來我們通過sklearn中的PCA來實現二維數據的降維和可視化:
fromsklearn.decompositionimportPCA importmatplotlib.pyplotasplt pca=PCA(n_components=1)#創建一個PCA對象,設置降維后的維度為1 X_new=pca.fit_transform(X)#對原始數據進行降維 plt.scatter(X[:,0],X[:,1],alpha=0.5)#繪制原始數據 plt.scatter(X_new[:,0],np.zeros(X_new.shape),alpha=0.5)#繪制降維后的數據 plt.show()
這里我們指定降維后的維度為1,即將二維數據降到一維。通過fit_transform()函數可以得到降維后的結果,最后通過可視化來展示原始數據和降維后的結果。
完整的代碼如下:
importnumpyasnp fromsklearn.decompositionimportPCA importmatplotlib.pyplotasplt np.random.seed(1) X=np.dot(np.random.rand(2,2),np.random.randn(2,200)).T pca=PCA(n_components=1) X_new=pca.fit_transform(X) plt.scatter(X[:,0],X[:,1],alpha=0.5) plt.scatter(X_new[:,0],np.zeros(X_new.shape),alpha=0.5) plt.show()
運行結果會得到一個散點圖,其中藍色的點表示原始數據,橙色的點表示經過PCA降維后的數據??梢钥闯觯涍^降維后,數據呈一個直線狀分布。
注意:上面的示例中的數據是人為生成的,實際應用中的數據通常是更加復雜的,需要進行更多的數據預處理和參數調整才能得到較好的降維效果。
責任編輯:彭菁
-
matlab
+關注
關注
179文章
2946瀏覽量
229447 -
數據
+關注
關注
8文章
6710瀏覽量
88296 -
PCA
+關注
關注
0文章
88瀏覽量
29476
原文標題:詳解PCA主成分分析算法
文章出處:【微信號:嵌入式職場,微信公眾號:嵌入式職場】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論