pca的基礎知識請參考《a tutorial on principal component analysis》,這裡記錄一下使用python實現pca實驗過程
新建乙個x向量,引數10為正態分佈的標準差,0為均值,100為向量長度
x=np.random.normal(0,10,100)
新建乙個雜訊noise
noise=np.random.normal(0,4,100)
新建乙個y
y=5*x+3.3+noise
組合起來得到資料集x
x=np.vstack((x,y))
繪製出來看看
下面我們需要計算該資料集的協方差:
a=np.cov(x)
np.cov這個函式預設資料集是列向量,首先會對所有特徵減去均值,再求np.dot(x,x.t),再除n-1,得到:
array([[ 110.93271433, 555.42677191],
[ 555.42677191, 2794.35288558]])
對角線上的元素的特徵自身的方差,因為x的第乙個特徵x的標準差是10,方差10*10=100,x的第二個特徵y的標準差是25*100=2500,可以看到上面這個協方差對角元素還是跟這兩個理論值接近的
接下來求協方差的特徵分解:
a,b=np.linalg.eig(a)
得到a,對應兩個特徵值
array([ 5.11658217e-01, 2.90477394e+03])
b,兩個特徵向量
array([[-0.98080561, -0.19498807],
[ 0.19498807, -0.98080561]])
發現第二個特徵值是第乙個的幾百倍,對應圖上的點主方向,另外乙個對應主方向的垂直方向,檢查b的第二列發現這個方向也是資料點分布的主方向
最後進行變換
np.dot(b[:,1].reshape(1,-1),x)
這裡只取乙個主分量,因為y確實是依賴x得出來的,y=px,p=e.t
完畢!
使用python的numpy庫實現PCA演算法
usr bin env python coding utf 8 from numpy import 引數1 特徵值向量,引數2 比率 返回值 k 符合指定比率的topk k值 def setk eigvals,rate 0.9 eigvalind argsort eigvals 對特徵值進行排序 f...
python 實現PCA變換
在機器學習中,指標不全面會無法保證模型的準確性,但指標太多又容易造成指標維度災難。主成分分析的主要思想 1 進行特徵降維變換,不能完全地表示原有的物件,能量總會有損失。2 希望找到一種能量最為集中的變換方法使得損失最小 主成分分析就是試圖在力保資料資訊丟失最小的原則下,對這種多變數的資料進行最佳綜合...
python 資料分析 PCA
pca 主成分分析 將資料集標準化成均值為 0,標準差為 1 計算相關矩陣 將相關矩陣分解成它的特徵向量 特徵值 基於降序的特徵值選取 top n 的特徵向量 特徵值標準。特徵值為1,意味著這個成分可以解釋乙個變數的變化價值。依據這個標準,需要採取特徵值大於或等於1的特徵值,可將1 作為特徵值的閾值...