《機器學習實戰》 第十三章【利用PCA來簡化數據】

PCA(principal components analysis)即主成分分析技術,又稱主分量分析。主成分分析也稱主分量分析,旨在利用降維的思想,把多指標轉化爲少數幾個綜合指標。
在統計學中,主成分分析PCA是一種簡化數據集的技術。它是一個線性變換。這個變換把數據變換到一個新的座標系統中,使得任何數據投影的第一大方差在第一個座標(稱爲第一主成分)上,第二大方差在第二個座標(第二主成分)上,依次類推。主成分分析經常用於減少數據集的維數,同時保持數據集的對方差貢獻最大的特徵。這是通過保留低階主成分,忽略高階主成分做到的。這樣低階成分往往能夠保留住數據的最重要方面。但是,這也不是一定的,要視具體應用而定。
——百度百科

算法描述

優缺點

  • 優點:降低數據的複雜性,識別最重要的多個特徵
  • 缺點:不一定需要,且可能損失有用信息
  • 適用數據類型:數值型數據

算法思路

PCA是一種線性變換,將數據變化到新的座標系統中,得到的數據投影的第一大方差在第一個座標上,第二大方差在第二個座標上,依此類推。我們可以通過數據集的協方差得到這些值。
僞代碼如下:

1.去除平均值
2.計算協方差矩陣
3.計算協方差矩陣的特徵值和特徵向量(調用linalg.eig()4.特徵值從大到小排序
5.保留最上面的N個特徵向量
6.將數據轉換到上述N個特徵向量構建的新空間中

一個栗子


#coding:utf-8
from numpy import *

def loadDataSet(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 #remove mean
    covMat = cov(meanRemoved, rowvar=0)
    eigVals,eigVects = linalg.eig(mat(covMat))
    eigValInd = argsort(eigVals)            #sort, sort goes smallest to largest
    eigValInd = eigValInd[:-(topNfeat+1):-1]  #cut off unwanted dimensions
    redEigVects = eigVects[:,eigValInd]       #reorganize eig vects largest to smallest
    lowDDataMat = meanRemoved * redEigVects#transform data into new dimensions
    reconMat = (lowDDataMat * redEigVects.T) + meanVals
    return lowDDataMat, reconMat

def replaceNanWithMean(): 
    datMat = loadDataSet('secom.data', ' ')
    numFeat = shape(datMat)[1]
    for i in range(numFeat):
        meanVal = mean(datMat[nonzero(~isnan(datMat[:,i].A))[0],i]) #values that are not NaN (a number)
        datMat[nonzero(isnan(datMat[:,i].A))[0],i] = meanVal  #set NaN values to mean
    return datMat
dataMat=replaceNanWithMean()    #替換爲平均值
meanVals=mean(dataMat,axis=0)   #計算平均值
meanRemoved=dataMat-meanVals
covMat=cov(meanRemoved,rowvar=0)#計算協方差

eigVals,eigVects=linalg.eig(mat(covMat))    #特徵值,特徵向量
print(eigVals)


結果:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章