新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
創(chuàng)新互聯(lián)Python教程:python中PCA的處理過程
1、輸入矩陣歸一化處理。

2、計(jì)算樣本協(xié)方差矩陣。
3、求解協(xié)方差矩陣指定的特征值對(duì)應(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ù),此部分為從存儲(chǔ)列表或單元中讀取分析數(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) #對(duì)特征值進(jìn)行排序處理,默認(rèn)為升序
eigVaInd = eigVaInd[-1:-(topNfeat):-1] #根據(jù)指定數(shù)目進(jìn)行逆序處理
redEigVects = eigVects[:,eigVaInd] #選取對(duì)應(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 #返回?cái)?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('累計(jì)方差百分比')
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()以上就是python中PCA的處理過程,希望對(duì)大家有所幫助。更多Python學(xué)習(xí)指路:創(chuàng)新互聯(lián)python教程
本文教程操作環(huán)境:windows7系統(tǒng)、Python 3.9.1,DELL G3電腦。
網(wǎng)頁標(biāo)題:創(chuàng)新互聯(lián)Python教程:python中PCA的處理過程
轉(zhuǎn)載源于:http://www.dlmjj.cn/article/djdcssd.html


咨詢
建站咨詢
