主成分分析(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...