日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【机器学习】PCA

發布時間:2025/4/16 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【机器学习】PCA 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • PCA
    • 1. PCA最大可分性的思想
    • 2. 基變換(線性變換)
    • 3. 方差
    • 4. 協方差
    • 5. 協方差矩陣
    • 6. 協方差矩陣對角化
    • 7. PCA算法流程
    • 8. PCA算法總結

PCA

PCA 就是找出數據最主要的方面,用數據里最主要的方面來代替原始數據。

PCA 是最重要的降維方法之一,在數據壓縮、消除冗余和數據噪音消除等領域都有廣泛的應用。

1. PCA最大可分性的思想

? 最大可分性: 樣本點在超平面上的投影盡可能的分開

2. 基變換(線性變換)

? 欲獲得原始數據新的表示空間,最簡單方法是對原始數據進行基變換(線性變換)。

3. 方差

? 如何選擇一個方向或者基才是最優的?基于PCA最大可分思想,我們要找的方向是降維后損失最小,可以理解為投影后的數據盡可能分得開,而分散程度可以用數學上的方差來表示,因為方差越大數據也就越分散。

4. 協方差

? 在高維變換中,我們希望基變換后選擇的各個方向(或者基)是不相關的,這樣才能表示更多的信息。數學上使用協方差表示相關性:
\[ Cov(a,b) = \frac{1}{m} \sum_{i=1}^{m}a_ib_i \]
如果 \(Cov(a,b)=0\) ,則表示兩個字段完全獨立,這也是我們的優化目標。

5. 協方差矩陣

? 我們想達到的目標(\(Cov(a,b)=0\)字段內方差字段間協方差 有著密切的關系。假設只有 \(a, b\) 兩個字段,按行組成 \(X\) ,求取協方差矩陣:

可見,協方差矩陣是一個對稱的矩陣,對角線是各個維度的方差(字段內方差),而其它元素是字段間協方差,兩者被統一到了一個矩陣之中。

6. 協方差矩陣對角化

? 我們的目標是使 \(Cov(a,b)=0\) ,由協方差矩陣可知我們的優化目標 \(C=\frac{1}{m}XX^T\) 等價于協方差矩陣對角化(除對角線以外的其它元素都為0,并且對角線將元素按照大小從上到下排列)。

? 推導:

7. PCA算法流程

? 輸入: \(n\) 維樣本集 \(X = (x_1, x_2, ... ,X_m)\),要降維到的維數 \(n^{'}\)

? 輸出: 降維后的樣本集 \(Y\)

? 算法:

? 1)對所有樣本進行中心化 \(x_i = x_i -\frac{1}{m}\sum_{j=1}^mx_j\)

? 2)計算樣本的協方差矩陣 \(C=\frac{1}{m}XX^T\)

? 3)求出協方差矩陣的特征值以及對應的特征向量

? 4)將特征向量按對應特征值大小從上到下排列成矩陣,取前 \(K\) 行組成矩陣 \(P\)

? 5)\(Y=PX\) 即為原始樣本降維到 \(K\) 維后的數據矩陣

? 代碼:

"""這里假設原始數據集為矩陣 dataMat,其中每一行代表一個樣本,每一列代表同一個特征(與上面的介紹稍有不同,上 面是每一列代表一個樣本,每一行代表同一個特征)。 """import numpy as np################################ # (1)零均值化 ################################ def zeroMean(dataMat): meanVal=np.mean(dataMat,axis=0) #按列求均值(axis=0),即求各個特征的均值 newData=dataMat-meanVal return newData,meanVal # newData是零均值化后的數據,meanVal是每個特征的均值################################ # (2)求協方差矩陣 # 若rowvar=0,說明傳入的數據一行代表一個樣本; # 若非0,說明傳入的數據一列代表一個樣本。 ################################ newData,meanVal=zeroMean(dataMat) covMat=np.cov(newData,rowvar=0) ################################ # (3)求特征值和特征矩陣 # eigVals存放特征值,行向量 # eigVects存放特征向量,每一列帶別一個特征向量 # 特征值和特征向量是一一對應的 ################################ eigVals,eigVects=np.linalg.eig(np.mat(covMat)) ################################ # (4)保留比較大的前n個特征向量 # 第三步得到了特征值向量eigVals,假設里面有m個特征值,我們可以對其排序,排在前面的n個特征值所對應的特征 # 向量就是我們要保留的,它們組成了新的特征空間的一組基n_eigVect ################################ eigValIndice=np.argsort(eigVals) #對特征值從小到大排序 n_eigValIndice=eigValIndice[-1:-(n+1):-1] #最大的n個特征值的下標,首先argsort對特征值是從小到大排序的,那么最大的n個特征值就排在后面,所以eigValIndice[-1:-(n+1):-1]就取出這個n個特征值對應的下標(python里面,list[a:b:c]代表從下標a開始到b,步長為c) n_eigVect=eigVects[:,n_eigValIndice] #最大的n個特征值對應的特征向量################################ # (5)獲取降維后的數據 # 將零均值化后的數據乘以n_eigVect就可以得到降維后的數據 ################################ lowDDataMat=newData*n_eigVect #低維特征空間的數據 reconMat=(lowDDataMat*n_eigVect.T)+meanVal #重構數據

8. PCA算法總結

? 優點:

? 1) 僅僅依靠方差衡量信息量,不受數據集以外的因素影響

? 2)各主成分之間相互正交,可消除原始數據成分間的相互影響的因素

? 3)計算方法簡單,主要運用特征值分解

? 缺點:

? 1)主成分各個特征維度的含義具有一定的模糊性,不如原始樣本特征的解釋性強

? 2)方差小的主成分也有可能含有對樣本差異的重要信息,由于降維丟棄可能會對后續數據處理有影響

轉載于:https://www.cnblogs.com/xxxxxxxxx/p/11594647.html

總結

以上是生活随笔為你收集整理的【机器学习】PCA的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。