當前位置:首頁 » 編程語言 » python協方差求

python協方差求

發布時間: 2025-03-08 15:21:30

1. python-協方差矩陣對角線上的方差的定義

在網上查了很久,自主編寫代碼以求解。

課本中提及協方差矩陣對角線上的元素代表各自變數的方差,然而在使用numpy庫中的np.cov(X)函數得到的協方差矩陣,其對角線上的數值並非直接由np.var()函數計算得出。原因在於,np.cov(X)函數計算的是樣本協方差而非普通意義上的方差。

簡而言之,均值、方差與協方差在數理統計框架下計算方式有所不同,均值保持不變,而方差與協方差的計算分別除以n與n-1。這一差異解釋了為何np.cov(X)的對角線數值與np.var()結果不一致。

設兩個隨機變數為X與Y,假設我們有觀測數據構成的數據集,可以將數據集視作隨機變數的特徵。

通過Python實現樣本均值計算如下:

數學定義:均值 = Σx / n,其中x為隨機變數的觀測值,n為觀測值數量。

Python代碼:使用np.mean()函數實現。

樣本均值計算結果:變數X的樣本均值為a,變數Y的樣本均值為b。

接下來,進行樣本方差計算:

數學定義:樣本方差 = Σ(x - μ)² / (n-1),其中x為隨機變數的觀測值,μ為樣本均值,n為觀測值數量。

Python代碼:使用np.cov()函數實現。

樣本方差計算結果:變數X的樣本方差為c,變數Y的樣本方差為d。

方差計算如下:

數學定義:方差 = Σ(x - μ)² / n,其中x為隨機變數的觀測值,μ為平均值,n為觀測值數量。

Python代碼:使用np.var()函數實現。

方差計算結果:變數X的方差為e,變數Y的方差為f。

總結,原始數據集計算平均值、方差與協方差時,需區分統計學定義下的樣本均值、樣本方差以及與日常理解一致的平均值、方差。在Python中,使用np.mean()與np.cov()函數時,前者與後者在概念上對應樣本均值與樣本協方差矩陣的計算。

了解無偏估計與有偏估計的概念後,方差定義中的系數調整為n-1,以確保樣本方差成為總體方差的無偏估計。這一調整是統計學中的一般做法,旨在提供更精確的估計。

因此,通過理解上述概念與計算方法,我們能夠清晰地解釋為何在Python中計算協方差矩陣時,其對角線上的方差值與直接使用np.var()函數計算的結果不同,這主要歸因於統計學定義上的差異。

2. python怎麼數據進行pca

基本步驟:

  1. 對數據進行歸一化處理(代碼中並非這么做的,而是直接減去均值)

  2. 計算歸一化後的數據集的協方差矩陣

  3. 計算協方差矩陣的特徵值和特徵向量

  4. 保留最重要的k個特徵(通常k要小於n),也可以自己制定,也可以選擇一個閾值,然後通過前k個特徵值之和減去後面n-k個特徵值之和大於這個閾值,則選擇這個k

  5. 找出k個特徵值對應的特徵向量

  6. 將m * n的數據集乘以k個n維的特徵向量的特徵向量(n * k),得到最後降維的數據。

其實PCA的本質就是對角化協方差矩陣。有必要解釋下為什麼將特徵值按從大到小排序後再選。首先,要明白特徵值表示的是什麼?在線性代數裡面我們求過無數次了,那麼它具體有什麼意義呢?對一個n*n的對稱矩陣進行分解,我們可以求出它的特徵值和特徵向量,就會產生n個n維的正交基,每個正交基會對應一個特徵值。然後把矩陣投影到這N個基上,此時特徵值的模就表示矩陣在該基的投影長度。

特徵值越大,說明矩陣在對應的特徵向量上的方差越大,樣本點越離散,越容易區分,信息量也就越多。因此,特徵值最大的對應的特徵向量方向上所包含的信息量就越多,如果某幾個特徵值很小,那麼就說明在該方向的信息量非常少,我們就可以刪除小特徵值對應方向的數據,只保留大特徵值方向對應的數據,這樣做以後數據量減小,但有用的信息量都保留下來了。PCA就是這個原理。

3. 如何運用Python進行描述分析

在數據分析領域,Python以其強大的功能成為了首選工具。過去幾年,Python已成為最受歡迎的數據分析語言,它在數據科學領域發揮著至關重要的作用。如果你對Python在描述分析中的應用感興趣,你可能已經關注過之前關於Python函數以及數據分析程序庫的文章,以及如何利用Pandas清洗數據的指南。接下來,我們將深入探討如何利用Python進行描述性分析。



描述性分析是數據分析的基礎,它旨在通過統計和圖表來總結數據集的主要特徵。該方法包括分析數據的集中趨勢、離散程度、頻數分布等。以下是一些Python中用於描述性分析的關鍵函數:





  1. 平均數:使用np.mean()。




  2. 總和:使用np.sum()。




  3. 中位數:使用np.median()。




  4. 最大值:使用np.max()。




  5. 最小值:使用np.min()。




  6. 頻次(計數):使用np.size()。




  7. 方差:使用np.var()。




  8. 標准差:使用np.std()。




  9. 乘積:使用np.prod()。




  10. 協方差:使用np.cov(x, y)。




  11. 偏度系數:使用skew(x)。




  12. 峰度系數:使用kurt(x)。




  13. 正態性檢驗結果:使用normaltest(np.array(x))。




  14. 四分位數:使用np.quantile(q=[0.25, 0.5, 0.75],interpolation=「linear」)。




  15. 描述性統計摘要:使用describe()。





接下來,我們通過一個具體的數據集來展示如何在Python中執行描述性分析。該數據集包含一個班級學生的相關信息,包括姓名、性別、身高和體重。



首先,創建數據幀以載入數據集:




運行代碼以查看數據集的前幾個觀測樣本。


接下來,我們來分析數據的集中趨勢:





  1. 算術平均值:使用np.mean()或Pandas的describe()函數計算。




  2. 幾何平均數:通過調用Scipy庫中的相應函數計算。




  3. 眾數:使用Pandas的mode()函數。





在離散程度方面,我們可以通過以下方法進行分析:





  1. 極差與四分位差:使用describe()函數計算。




  2. 平均離差:使用Pandas的mad()函數。




  3. 標准差:使用np.std()或describe()。




  4. 離散系數:計算標准差與平均數之比。





分布狀態的分析包括偏態和峰度。偏態和峰度分別通過以下方法計算:





  1. 偏態:使用skew()。




  2. 峰度:使用kurt()。





最後,我們探索數據之間的相關性,包括:





  1. 散點圖:使用Pandas的plot.scatter()或Matplotlib的scatter()。




  2. 相關系數:使用Pandas的corr()。




  3. 相關系數矩陣圖:使用Seaborn的heatmap()。





掌握這些技術後,你將能夠有效地利用Python進行描述性分析,深入理解數據集的特性。本篇文章涵蓋了Python在描述性分析中的常用函數和方法,並通過實例演示了如何應用這些工具。在下一期文章中,我們將進一步探討Python在數據分析中的應用,敬請期待!

4. PCA(主成分分析)python實現

回顧了下PCA的步驟,並用python實現。深刻的發現當年學的特徵值、特徵向量好強大。

PCA是一種無監督的學習方式,是一種很常用的降維方法。在數據信息損失最小的情況下,將數據的特徵數量由n,通過映射到另一個空間的方式,變為k(k<n)。

這里用一個2維的數據來說明PCA,選擇2維的數據是因為2維的比較容易畫圖。
這是數據:

畫個圖看看分布情況:

協方差的定義為:

假設n為數據的特徵數,那麼協方差矩陣M, 為一個n n的矩陣,其中Mij為第i和第j個特徵的協方差,對角線是各個特徵的方差。
在我們的數據中,n=2,所以協方差矩陣是2
2的,
通過numpy我們可以很方便的得到:

得到cov的結果為:
array([[ 0.61655556, 0.61544444],
[ 0.61544444, 0.71655556]])

由於我們之前已經做過normalization,因此對於我們來說,
這個矩陣就是 data*data的轉置矩陣。

得到結果:
matrix([[ 5.549, 5.539],
[ 5.539, 6.449]])

我們發現,其實協方差矩陣和散度矩陣關系密切,散度矩陣 就是協方差矩陣乘以(總數據量-1)。因此他們的 特徵根 特徵向量 是一樣的。這里值得注意的一點就是,散度矩陣是 SVD奇異值分解 的一步,因此PCA和SVD是有很大聯系的,他們的關系這里就不詳細談了,以後有機會再寫下。

用numpy計算特徵根和特徵向量很簡單,

但是他們代表的意義非常有意思,讓我們將特徵向量加到我們原來的圖里:

其中紅線就是特徵向量。有幾點值得注意:

藍色的三角形就是經過坐標變換後得到的新點,其實他就是紅色原點投影到紅線、藍線形成的。

得到特徵值和特徵向量之後,我們可以根據 特徵值 的大小,從大到小的選擇K個特徵值對應的特徵向量。
這個用python的實現也很簡單:

從eig_pairs選取前k個特徵向量就行。這里,我們只有兩個特徵向量,選一個最大的。

主要將原來的數據乘以經過篩選的特徵向量組成的特徵矩陣之後,就可以得到新的數據了。

output:

數據果然變成了一維的數據。
最後我們通過畫圖來理解下數據經過PCA到底發生了什麼。

綠色的五角星是PCA處理過後得到的一維數據,為了能跟以前的圖對比,將他們的高度定位1.2,其實就是紅色圓點投影到藍色線之後形成的點。這就是PCA,通過選擇特徵根向量,形成新的坐標系,然後數據投影到這個新的坐標系,在盡可能少的丟失信息的基礎上實現降維。

通過上述幾步的處理,我們簡單的實現了PCA第一個2維數據的處理,但是原理就是這樣,我們可以很輕易的就依此實現多維的。

用sklearn的PCA與我們的pca做個比較:

得到結果:

用我們的pca試試

得到結果:

完全一致,完美~
值得一提的是,sklearn中PCA的實現,用了部分SVD的結果,果然他們因緣匪淺。

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:640
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:368
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:86
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:310
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:794
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:346
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:213
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:817
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:367
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:594