利用PCA簡化資料

2021-07-23 21:31:41 字數 2090 閱讀 3220

主成分分析(principal component analysis)可以把大量的資料的維度減小,也可以叫做降維。

這麼做的好處如下:

通過將原來的資料從高維度的座標系對映到低維度新的座標系來,這裡有一篇很不錯的例子:主元分析(pca)理論分析及應用。

去除平均值

計算協方差矩陣

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

將特徵值從大到小排序

保留最上面的n個特徵向量

將資料轉換到上述n個特徵向量構建的新空間中

讀取資料

def

loaddateset

(filename,delim='\t'):

fr = open(filename)

stringarr = [line.strip().split(delim) for line in fr.readlines()]

datarr = [map(float,line)for line in stringarr]

return mat(datarr)

核心部分

def

pca(datamat,topnfeat=9999999):

meanvals = mean(datamat,axis=0)

meanremoved = datamat - meanvals#去除平均值

covmat = cov(meanremoved,rowvar=0)#計算協方差矩陣

eigvals,eigvects = linalg.eig(mat(covmat))#計算特徵值(eigvals)和特徵向量(eigvects)

eigvalind = argsort(eigvals)#argsort返回排序好後的序號

eigvalind = eigvalind[:-(topnfeat+1):-1]# mat[a:b:c] 表示下標從a到b間隔為c

redeigvects = eigvects[:,eigvalind]#matrix 選擇 mat[a,b] a可以用範圍a1:a2 直接:表示所有

lowddatamat = meanremoved * redeigvects#降維後的資料

reconmat = (lowddatamat * redeigvects.t) + meanvals#降維後的資料重構 方便除錯

return lowddatamat,reconmat

測試部分

def

test

(): datamat = loaddateset('machinelearninginaction/ch13/testset.txt')

lowdmat,reconmat = pca(datamat,1)

print shape(lowdmat)

import matplotlib.pyplot as plt

fig = plt.figure()

ax = fig.add_subplot(111)

ax.scatter(datamat[:,0].flatten().a[0],datamat[:,1].flatten().a[0],marker='o',s=50)

ax.scatter(reconmat[:,0].flatten().a[0],reconmat[:,1].flatten().a[0],marker='o',s=50,c='red')

測試結果

這麼做減少了特徵的數量,非常不好。防止過擬合其實可以使用別的方法,比如歸一化處理。因為pca只是近似地利用方差來丟棄特徵,並不考慮與結果變數相關的資訊,因此可能丟棄重要的特徵。

而歸一化不一樣,會考慮結果變數,所以不用擔心丟失重要的資料。

雖然很多時候效果不錯,但還是應當先從原始資料開始,只有在必要時候才會去考率pca。

參考內容

ng的機器學習coursera課程

《機器學習實戰》

主元分析(pca)理論分析及應用

機器學習實戰Chp13 利用PCA簡化資料

coding utf 8 created on sun jul 29 21 42 05 2018 author muli from numpy import mean a,axis,dtype,out,keepdims 函式 功能 求取均值 設a為m n矩陣舉例 axis 不設定值,對 m n 個數...

《機器學習實戰》 第十三章 利用PCA來簡化資料

乙個栗子 pca是一種線性變換,將資料變化到新的座標系統中,得到的資料投影的第一大方差在第乙個座標上,第二大方差在第二個座標上,依此類推。我們可以通過資料集的協方差得到這些值。偽 如下 1 去除平均值 2.計算協方差矩陣 3.計算協方差矩陣的特徵值和特徵向量 呼叫linalg.eig 4 特徵值從大...

第14章 利用SVD簡化資料

優點 簡化資料,去除雜訊,提高演算法的結果 缺點 資料的轉換可能難以理解 適用資料型別 數值型資料 隱性語義索引 latent semantic indexing,lsi 隱性語義分析 latent semantic analysis,lsa 推薦系統 協同過濾 collaborative filt...