這篇文章主要介紹“python中PCA的實(shí)例過程講解”,在日常操作中,相信很多人在python中PCA的實(shí)例過程講解問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”python中PCA的實(shí)例過程講解”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
成都創(chuàng)新互聯(lián)專注于下城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供下城營銷型網(wǎng)站建設(shè),下城網(wǎng)站制作、下城網(wǎng)頁設(shè)計、下城網(wǎng)站官網(wǎng)定制、微信小程序開發(fā)服務(wù),打造下城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供下城網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
1、輸入矩陣歸一化處理。
2、計算樣本協(xié)方差矩陣。
3、求解協(xié)方差矩陣指定的最大特征值對應(yīng)特征向量。
4、確定轉(zhuǎn)換矩陣,求解降維數(shù)據(jù)。
實(shí)例
#/usr/nom/env python # _*_coding:utf-8_*_ # @Time :2021/9/3 10:04 # @Author :A bigfish # @FileName :maindemo13.py # @Software :PyCharm import matplotlib.pyplot as plt import numpy as np from pylab import * # 首先導(dǎo)入數(shù)據(jù),此部分為從存儲列表或單元中讀取分析數(shù)據(jù) def loadDataSet(filename, delim='\t'): #此處的'\t'表示不同變量間的分隔符,t表示tab鍵鍵入的空格 fr = open(filename) stringArr = [line.strip().split(delim) for line in fr.readlines()] dataArr = [list(map(float, line)) for line in stringArr] return np.mat(dataArr) # 定義pca分析函數(shù) def pca(dataset, topNfeat = 99999): #topNfeat最大特征值數(shù)目,通常不用設(shè)置,因?yàn)楹罄m(xù)要進(jìn)行可視化分析 meanVals = np.mean(dataset, axis=0) #求均值 meanRemoved = dataset - meanVals #預(yù)處理 covMat = np.cov(meanRemoved, rowvar=0) #求解輸入數(shù)據(jù)協(xié)方差矩陣 eigVals, eigVects = np.linalg.eig(np.mat(covMat)) #求解特征值,特征向量 eigVaInd = np.argsort(eigVals) #對特征值進(jìn)行排序處理,默認(rèn)為升序 eigVaInd = eigVaInd[-1:-(topNfeat):-1] #根據(jù)指定數(shù)目進(jìn)行逆序處理 redEigVects = eigVects[:,eigVaInd] #選取對應(yīng)特征向量 lowDataMat = meanRemoved * redEigVects #數(shù)據(jù)降維X*P recontMat = (lowDataMat * redEigVects.T) + meanVals #c處理進(jìn)行了數(shù)據(jù)重構(gòu),非必須選項(xiàng) return lowDataMat, recontMat, eigVals #返回數(shù)據(jù) # 定義特值值繪制函數(shù) def plotEig(dataset, numFeat=20): mpl.rcParams['font.sans-serif'] = ['Times NewRoman'] sumData = np.zeros((1, numFeat)) dataset = dataset / sum(dataset) for i in range(numFeat): sumData[0, i] = sum(dataset[0:i]) X = np.linspace(1, numFeat, numFeat) fig = plt.figure() ax = fig.add_subplot(211) ax.plot(X, (sumData*100).T, 'r-+') mpl.rcParams['font.sans-serif'] = ['SimHei'] plt.ylabel('累計方差百分比') ax2 = fig.add_subplot(212) ax2.plot(X.T, (dataset[0:numFeat].T)*100, 'b-*') plt.xlabel('主成分?jǐn)?shù)') plt.ylabel('方差百分比') plt.show() # 定義原始數(shù)據(jù)及第一主成分繪制函數(shù) def plotData(OrigData, recData): import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) ax.scatter(OrigData[:,0].flatten().A[0], OrigData[:, 1].flatten().A[0], c='blue',marker='^', s=90) ax.scatter(recData[:, 0].flatten().A[0], recData[:, 1].flatten().A[0], c='red', marker='o',s=90) plt.show()
到此,關(guān)于“python中PCA的實(shí)例過程講解”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!