机器学习-降维之主成分分析PCA算法原理及实战
生活随笔
收集整理的這篇文章主要介紹了
机器学习-降维之主成分分析PCA算法原理及实战
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
主成分分析
- 前言
- 近年來,隨著互聯網和信息行業的發展,數據已經滲透到各行各業,成為重要的生產因素如數據記錄和屬性規模的急劇增長。社會已經進入大數據時代,數據越多越好似乎已經成為公理。然而,數據量并不是越大越好,有時過猶不及,在數據分析應用中大量的數據反而會產生更壞的性能。這些海量數據可能含有噪聲或冗余信息,當數據集包含過多的數據噪聲時,會導致算法的性能達不到預期的效果。移除信息量較少甚至無效信息可能會幫助用戶構建更具擴展性、通用性的數據模型。對這些海量數據進行挖掘與運用,也推動了數據降維的應用,大數據處理平臺和并行數據分析算法也隨之出現。
- 數據降維
- 數據降維,一方面可以解決“維數災難”,緩解“信息豐富、只是貧乏”的現狀,降低復雜度;另一方面,可以更好地認識和理解數據。
- 數據降維,也稱為維數約簡(Dimensionality Reduction),即降低數據的維數,將原始高維特征空間的點向一個低維空間投影,新的空間維度低于原特征空間,所以維數減少了。在這個過程中,特征發生了根本性的變化,原始的特征消失了(雖然新的特征保持了原特征的一些性質)。
- 時至今日,數據降維的方法有很多。不同的角度有不同的分類。
- 根據數據特性分為以下幾種。
- 線性降維
- 主成分分析(PCA),線性辨別分析(LDA)等。
- 非線性降維
- 核方法(核主成分分析KPCA,KFDA),二維化和張量化(常見算法有二維主分量分析、二維線性判別分析、二維典型相關分析),流形學習(ISOMap等距映射、LE拉普拉斯特征映射、LLE局部線性嵌入等)。
- 線性降維
- 根據是否考慮和利用數據的監督信息分為以下幾種。
- 無監督降維(PCA等)
- 有監督降維(LDA等)
- 半監督降維(半監督概率PCA、半監督判別分析SDA等)
- 根據數據特性分為以下幾種。
- 此外,在數據處理中,經常會遇到特征維度比樣本數量多得多的情況,如果直接運用模型,效果不一定好,一是因為冗余的特征會帶來一些噪聲,影響計算的結果;二是因為無關的特征會加大計算量,耗費時間和資源。所以通常會對數據重新變換一下,再運用模型處理。數據變換的目的不只是降維,還可以消除特征之間的相關性,并發現一些潛在的特征變量。
- 圖像壓縮
- 圖像壓縮是數據壓縮技術在數字圖像上的應用,它的目的是減少圖像數據中的冗余信息從而用更加高效的格式存儲和傳輸數據。數據降維的思想也可以應用到圖像壓縮上,圖像數據之所以能被壓縮,就是因為數據間存在冗余。圖像數據的冗余主要表現在以下幾個方面。
- 圖像中相鄰像素之間的相關性引起的空間冗余。
- 圖像序列中不同幀之間存在相關性引起的時間冗余。
- 不同彩色平面或頻譜帶的相關性引起的頻譜冗余。
- 數據壓縮的目的就是通過去除這些數據冗余來減少表示數據所需的比特數。由于圖像數據量龐大,在存儲、傳輸、處理時非常困難,因此圖像數據的壓縮就顯得非常重要。
- 圖像壓縮是數據壓縮技術在數字圖像上的應用,它的目的是減少圖像數據中的冗余信息從而用更加高效的格式存儲和傳輸數據。數據降維的思想也可以應用到圖像壓縮上,圖像數據之所以能被壓縮,就是因為數據間存在冗余。圖像數據的冗余主要表現在以下幾個方面。
- 信息時代帶來了“信息爆炸”,數據量大增,因此,無論傳輸或存儲都需要對數據進行有效的壓縮。在遙感技術中,各種航天探測器采用壓縮編碼技術,將獲取的巨大信息送回地面。
- 原理
- 主成分分析(PCA)是一種常見的數據降維方法,其目的是在“信息”損失較小的前提下,將高維的數據轉換到低維。
- PCA的本質就是發現一些投影方向,使得數據在這些投影方向上的方差最大,而且這些投影方向彼此之間是相互正交的,即尋找新的正交基,然后計算原始數據在這些正交基上的方差。方差越大,說明在對應正交基上包含了更多的信息量。輸入空間經過旋轉投影后,輸出集合的第一個向量包含了信號的大部分能量(即方差)。第二個向量與第一個向量正交,它包含了剩余能量的大部分;第三個向量又與前兩個向量正交,并包含剩余能量的大部分,以此類推。假設在N維空間中,可以找到N個這樣的相互正交的投影方向(坐標軸),取前r個去近似原先的數據空間,這樣就從一個N維的空間壓縮到了r維空間。
- 那么,數據降維到什么程度呢?如何找到新的投影方向使得原始數據的“信息量”損失最少?
- 樣本的“信息量”指的就是樣本在特征方向上投影的方差。方差越大,則樣本在該特征上的差異就越大,因此該特征越重要。原始數據協方差矩陣的特征值越大,對應的方差越大,在對應的特征向量上投影的信息量就越大。反之,如果特征值較小,則說明數據在這些特征向量上投影的信息量很小,可以將小特征值對應方向的數據刪除,從而達到了降維的目的。
- 在原始數據很多維的情況下,先得到一個數據變換后方差最大的方向,然后選擇與第一個方向正交的方向,該方向是方差次大的方向,如此下去,直到變換出與原特征個數相同的新特征或變換出前N個特征(這前N個特征包含了數據絕大部分信息),簡言之,PCA是一個降維的過程,將數據映射到新的特征,新特征是原始特征的線性組合。
- 數學推導不介紹了,看一下基本步驟。
- 計算平均值,所有樣本減去對應平均值。
- 計算整個樣本的協方差矩陣。
- 計算協方差的特征值和特征向量。
- 將特征值按照從大到小的順序排列,選擇其中較大的k個,然后將其對應的k個特征向量分別作為列向量組成特征向量矩陣。
- 將樣本點投影到選取的特征向量上。
- 實戰
- sklearn已經封裝了PCA,具體參數名稱自行查看源碼
- 使用PCA降維隨機數據
- 代碼
- # -*-coding:utf-8-*-import matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dfrom sklearn.datasets.samples_generator import make_blobsfrom sklearn.decomposition import PCAX, y = make_blobs(n_samples=10000, n_features=3, centers=[[3, 3, 3], [0, 0, 0], [1, 1, 1], [2, 2, 2]],cluster_std=[0.2, 0.1, 0.2, 0.2], random_state=9)# 顯示數據fig = plt.figure()ax = Axes3D(fig, rect=[0, 0, 1, 1], elev=30, azim=10)plt.scatter(X[:, 0], X[:, 1], X[:, 2], marker='o')plt.show()# 進行主成分分析pca = PCA(n_components=3)pca.fit(X)print(pca.explained_variance_ratio_)print(pca.explained_variance_)# 降維pca = PCA(n_components=2)pca.fit(X)X_new = pca.transform(X)plt.scatter(X_new[:, 0], X_new[:, 1], marker='o')plt.show()
- 運行效果
- 補充說明
- 參考書為《Python3數據分析與機器學習實戰》,對部分錯誤修改
- 具體數據集和代碼見我的Github,歡迎Star或者Fork
總結
以上是生活随笔為你收集整理的机器学习-降维之主成分分析PCA算法原理及实战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习-集成之AdaBoost算法原理
- 下一篇: 机器学习-降维之奇异值分解SVD算法原理