主成分分析法_探索主成分分析法
生活随笔
收集整理的這篇文章主要介紹了
主成分分析法_探索主成分分析法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
主成分分析法 (Principal Component Analysis, PCA) 是一種數據壓縮法,可以從數據中提取重要的部分并排除不重要的部分,是奇異值分解 (Singular Value Decomposition, SVD) 的重要應用。
SVD 是線性代數的一個亮點。
是一個 的列陣,矩陣秩 , SVD 會提供四個子空間的正交基,按重要性排序。我們有兩組奇異向量, 在 里, 在 里,把 排列在 矩陣 ,把 排列在 矩陣 。SVD 不但找出正交基,還把
對角化成 , , 和 的大小一樣 ,所以不一定是個方陣,可能右邊和下邊有零。但是我們可以丟掉零空間和左零空間的基向量,在 里, 是個 的方陣, 從大排到小。SVD 是
, 和 是正交矩陣,有旋轉作用。 是對角矩陣,有伸展作用。SVD 把 的變換分解成旋轉、伸展、旋轉。 是 的特征向量,叫左奇異向量。 是 的特征向量,叫右奇異向量。 和 有共同的特征值 ,都是 的奇異值平方。用手的話可以用這個方法,但如果是很大的矩陣,要用計算機分解的話,我們不想乘 和 ,太浪費計算力,最好直接用 svd() 。現在我們要把數據帶到實數空間,所以只能有數字,不能有分類數據。(其實我覺得不應該叫“數據”,因為“分類數據”根本就沒有數字。)表格中,一行代表一條記錄,一列代表一個特征。
表格里行比列多,每一列都減掉平均值,轉換成矩陣,
是又高又細的、中心化好的矩陣,樣本協方差矩陣是 , 的理由是求無偏估計。總方差是 的跡(對角線的和),等于 的特征值的和,也等于 的奇異值平方的和, 。重要的是右奇異向量,
指向第 重要的方向,解釋總方差的 部分。我們選 個最重要的 , 是主成分,我們只保留 的信息,降低了維數。用 python 來實踐一下吧,用 iris 數據,中心化,做 svd() ,奇異值除以
。 會把數據旋轉到最好的方向,如果我們要用二維圖表來看的話, , 會變成 軸, 會變成 軸,丟掉 。我們用行向量,所以旋轉做 就可以了,如果有一個行向量 ,就做 。import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from itertools import combinations# 準備數據 iris = datasets.load_iris()# 四維數據分六個二維圖表顯示 fig, axes = plt.subplots(2, 3) axes = axes.ravel() for i, (x, y) in enumerate(combinations(range(4), 2)):axes[i].scatter(iris.data[:50, x], iris.data[:50, y],label=iris.target_names[0])axes[i].scatter(iris.data[50:100, x], iris.data[50:100, y],label=iris.target_names[1])axes[i].scatter(iris.data[100:, x], iris.data[100:, y],label=iris.target_names[2])axes[i].legend()axes[i].set_xlabel(iris.feature_names[x])axes[i].set_ylabel(iris.feature_names[y]) plt.show()# 做 SVD A = iris.data - iris.data.mean(axis=0) U, S, VT = np.linalg.svd(A, full_matrices=False) S /= np.sqrt(A.shape[1] - 1) print('如果從四維降到二維,會保留總方差的 {:.2%}。'.format((S**2)[:2].sum() / (S**2).sum()))# 從四維降到二維后圖表顯示 A_t = (A @ VT.T)[:, :2] plt.scatter(A_t[:50, 0], A_t[:50, 1], label=iris.target_names[0]) plt.scatter(A_t[50:100, 0], A_t[50:100, 1], label=iris.target_names[1]) plt.scatter(A_t[100:, 0], A_t[100:, 1], label=iris.target_names[2]) plt.legend() plt.xlabel(r'$vec v_1$') plt.ylabel(r'$vec v_2$') plt.show()四維數據,需要用六個二維圖表來看,但這些都是截面,仍然不能想象四維空間里的樣子。
從四維降到二維后,保留 97.77% 的信息。
PCA 的功能就是壓縮數據,同時保留最重要的信息。在數據分析的領域里,我們可以用它來降維。高維不僅對我們的想象力造成勞損,對建模也是一種詛咒,在這里主成分分析法是一個很有用的降維技巧。
總結
以上是生活随笔為你收集整理的主成分分析法_探索主成分分析法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: suse linux11 改ip,sus
- 下一篇: hadoopsdk使用_hadoop部署