【机器学习算法-python实现】PCA 主成分分析、降维
生活随笔
收集整理的這篇文章主要介紹了
【机器学习算法-python实现】PCA 主成分分析、降维
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.背景
PCA(Principal Component Analysis),PAC的作用主要是降低數據集的維度,然后挑選出主要的特征。 PCA的主要思想是移動坐標軸,找到方差最大的方向上的特征值,什么叫方差最大的方向的特征值呢。就像下圖中的曲線B,一樣,它的覆蓋范圍最廣。基本步驟:(1)首先計算數據集的協方差矩陣 (2)計算協方差矩陣的特征值和特征向量 (3)保留最重要的n個特征
what is 協方差矩陣:定義是變量向量減去均值向量,然后乘以變量向量減去均值向量的轉置再求均值。例如x是變量,μ是均值,協方差矩陣等于E[(x-μ)(x-μ)^t],物理意義是這樣的,例如x=(x1,x2,...,xi)那么協方差矩陣的第m行n列的數為xm與xn的協方差,若m=n,則是xn的方差。如果x的元素之間是獨立的,那么協方差矩陣只有對角線是有值,因為x獨立的話對于m≠n的情況xm與xn的協方差為0。另外協方差矩陣是對稱的。 可以參考wiki:(http://zh.wikipedia.org/wiki/%E5%8D%8F%E6%96%B9%E5%B7%AE%E7%9F%A9%E9%98%B5)
2.代碼實現
偽代碼如下(摘自機器學習實戰):''' @author: Garvin ''' from numpy import * import matplotlib.pyplot as pltdef 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 meancovMat = cov(meanRemoved, rowvar=0)eigVals,eigVects = linalg.eig(mat(covMat))eigValInd = argsort(eigVals) #sort, sort goes smallest to largesteigValInd = eigValInd[:-(topNfeat+1):-1] #cut off unwanted dimensionsredEigVects = eigVects[:,eigValInd] #reorganize eig vects largest to smallestlowDDataMat = meanRemoved * redEigVects#transform data into new dimensionsreconMat = (lowDDataMat * redEigVects.T) + meanValsreturn lowDDataMat, reconMatdef plotBestFit(dataSet1,dataSet2): dataArr1 = array(dataSet1)dataArr2 = array(dataSet2)n = shape(dataArr1)[0] n1=shape(dataArr2)[0]xcord1 = []; ycord1 = []xcord2 = []; ycord2 = []xcord3=[];ycord3=[]j=0for i in range(n):xcord1.append(dataArr1[i,0]); ycord1.append(dataArr1[i,1])xcord2.append(dataArr2[i,0]); ycord2.append(dataArr2[i,1]) fig = plt.figure()ax = fig.add_subplot(111)ax.scatter(xcord1, ycord1, s=30, c='red', marker='s')ax.scatter(xcord2, ycord2, s=30, c='green')plt.xlabel('X1'); plt.ylabel('X2');plt.show() if __name__=='__main__':mata=loadDataSet('/Users/hakuri/Desktop/testSet.txt') a,b= pca(mata, 2)
loadDataSet函數是導入數據集。PCA輸入參數:參數一是輸入的數據集,參數二是提取的維度。比如參數二設為1,那么就是返回了降到一維的矩陣。PCA返回參數:參數一指的是返回的低維矩陣,對應于輸入參數二。參數二對應的是移動坐標軸后的矩陣。
上一張圖,綠色為原始數據,紅色是提取的2維特征。
3.代碼下載
下載地址:請點擊我/********************************
* 本文來自博客 ?“李博Garvin“
* 轉載請標明出處:http://blog.csdn.net/buptgshengod
******************************************/
總結
以上是生活随笔為你收集整理的【机器学习算法-python实现】PCA 主成分分析、降维的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习算法-python实现】采样算
- 下一篇: 【云端大数据实战】大数据误区、大数据处理