Ⅰ polyfit的用法
Polyfit的用法
答案:
Polyfit是python中numpy庫的一個函數,用於多項式擬合。其基本用法是numpy.polyfit。其中,x和y是輸入的數據點坐標,deg是擬合多項式的階數,cov是一個可選參數,表示是否計算協方差。返回結果是一個包含多項式系數的數組。
詳細解釋:
Polyfit函數是numpy庫中的一個用於多項式擬合的工具。對於給定的數據點集,我們可以使用該函數擬合一個多項式。它的基本語法是numpy.polyfit。
1. 輸入參數解釋:
* x和y:表示輸入的數據點的橫縱坐標。這些可以是數組或列表形式的數據。
* deg:這是一個整數,表示要擬合的多項式的階數。例如,如果deg為2,那麼將擬合一個二次多項式。
* cov:這是一個可選參數,默認為False。如果設置為True,將計算並返回除多項式系數外的協方差矩陣和其他統計信息。
2. 功能特點:
Polyfit函數通過最小二乘法來找到最佳擬合多項式。它會返回一個包含多項式系數的數組,這些系數可以按照從高到低的多項式冪次排列。
3. 使用示例:
假設我們有一組數據點,我們可以使用Polyfit函數進行多項式擬合。例如:
python
import numpy as np
x = np.array # 輸入x坐標數據點
y = np.array # 輸入y坐標數據點
coeffs = np.polyfit # 使用二階多項式進行擬合,得到系數數組
print # 輸出系數數組
通過上述示例,我們可以了解到Polyfit函數的基本用法和效果。在實際應用中,根據數據的特點和需求,可以選擇不同的多項式階數進行擬合。
Ⅱ 主成分分析法詳解及其實現
主成分分析法是一種通過降低高維數據集的維度來保留關鍵信息的強大數據處理工具。以下是其詳細解析及實現步驟:
一、主成分分析法詳解
標准化:
協方差矩陣計算:
特徵向量和特徵值提取:
主成分選擇:
數據重構:
二、主成分分析法實現
主成分分析法的實現通常涉及以下步驟,可以使用Python等編程語言中的相關庫來完成:
數據標准化:
計算協方差矩陣:
特徵分解:
選擇主成分:
數據重構:
通過主成分分析法,我們可以有效地降低數據的維度,同時保留關鍵信息,這對於數據可視化、數據挖掘、機器學習等領域具有重要的應用價值。
Ⅲ python怎麼數據進行pca
基本步驟:
對數據進行歸一化處理(代碼中並非這么做的,而是直接減去均值)
計算歸一化後的數據集的協方差矩陣
計算協方差矩陣的特徵值和特徵向量
保留最重要的k個特徵(通常k要小於n),也可以自己制定,也可以選擇一個閾值,然後通過前k個特徵值之和減去後面n-k個特徵值之和大於這個閾值,則選擇這個k
找出k個特徵值對應的特徵向量
將m * n的數據集乘以k個n維的特徵向量的特徵向量(n * k),得到最後降維的數據。
其實PCA的本質就是對角化協方差矩陣。有必要解釋下為什麼將特徵值按從大到小排序後再選。首先,要明白特徵值表示的是什麼?在線性代數裡面我們求過無數次了,那麼它具體有什麼意義呢?對一個n*n的對稱矩陣進行分解,我們可以求出它的特徵值和特徵向量,就會產生n個n維的正交基,每個正交基會對應一個特徵值。然後把矩陣投影到這N個基上,此時特徵值的模就表示矩陣在該基的投影長度。
特徵值越大,說明矩陣在對應的特徵向量上的方差越大,樣本點越離散,越容易區分,信息量也就越多。因此,特徵值最大的對應的特徵向量方向上所包含的信息量就越多,如果某幾個特徵值很小,那麼就說明在該方向的信息量非常少,我們就可以刪除小特徵值對應方向的數據,只保留大特徵值方向對應的數據,這樣做以後數據量減小,但有用的信息量都保留下來了。PCA就是這個原理。
Ⅳ 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的結果,果然他們因緣匪淺。