python實現主成分分析(PCA)

2021-10-05 16:50:46 字數 1779 閱讀 3660

前言:主成分分析主要是用於降維,減少樣本的特徵量,其核心思想是將樣本資料對映到最重要的方向,而最重要的方向就是方差最大的方向。關於主成分分析詳細的理論知識,請至我的這篇博文中檢視

一、pca的簡單實現示例**

import numpy as np

import matplotlib.pyplot as plt

# 將二維資料通過主成分分析(pca)降為一維資料

# 讀取資料

data = np.genfromtxt('data.csv', delimiter=',')

x_data = data[:, 0]

y_data = data[:, 1]

# 資料中心化(求平均值以及各個特徵的樣本資料與平均值之差)

def zeromean(datamat):

# 按列求平均,即各個特徵的平均

meanval = np.mean(datamat, axis=0)

newdata = datamat - meanval

return newdata, meanval

newdata, meanval = zeromean(data)

# 計算協方差的函式

def cov(data):

meanval = np.mean(data, axis=0)

newdata = data - meanval

l = np.array(np.zeros((newdata.shape[1], newdata.shape[1])))

for i in range(len(newdata)):

rowdata = newdata[i, :]

rowdata = rowdata[:, np.newaxis]

l = l + np.dot(rowdata, rowdata.t)

return l / (len(newdata) - 1)

# 利用numpy計算協方差矩陣(rowvar=0說明資料一行代表乙個樣本)

covmat = np.cov(newdata, rowvar=0)

# 利用numpy求特徵值和特徵向量

ei**alue, ei**ectors = np.linalg.eig(np.mat(covmat))

# 對特徵值從小到大排序

ei**alueindex = np.argsort(ei**alue)

# 確定降維後的維度

dim = 1

# 取最大的dim個特徵值的下標

n_ei**alueindexs = ei**alueindex[-1:-(dim + 1):-1]

# 取最大的特徵值對應的特徵向量

n_ei**ectors = ei**ectors[:, n_ei**alueindexs]

# 得到降維後低維特徵空間的資料

lowdatamat = newdata * n_ei**ectors

# 利用低維資料重構資料(將降維的步驟反向執行)

reconmat = (lowdatamat * n_ei**ectors.t) + meanval

# 繪製原樣本資料和投影後資料(重構資料)的散點圖

plt.scatter(x_data, y_data)

plt.scatter(np.array(reconmat[:, 0]), np.array(reconmat[:, 1]), c='r')

plt.show()

二、執行結果

Python 實現主成分分析

python 實現主成分分析 主成分分析 principal component analysis,pca 是最常用的一種降維方法,通常用於高維資料集的探索與視覺化,還可以用作資料壓縮和預處理等。矩陣的主成分就是其協方差矩陣對應的特徵向量,按照對應的特徵值大小進行排序,最大的特徵值就是第一主成分,其...

主成分分析

主成分分析 pca 分析乙個隨機向量的中的主成分 主成分一般不是隨機向量中的某乙個分量,而是不同分量的線性組合,根據資訊理論的觀點,資訊的多少與方差有關,所以 主成分是方差最大的幾個成分 主成分分析的方法是求隨機向量的協方差矩陣 用樣本協方差矩陣代替 對於差異較大的資料,可採用相關矩陣代替協方差矩陣...

主成分分析

理論要點 1 主成分分析是一種無監督學習,因此不能用交叉驗證來檢驗誤差 2 在處理資料之前,要對資料做中心化處理 3 p太大的話,做特徵分解用svd 4 一共有min n 1,p 個主成分,因為中心化以後,rank要降一維 5 主成分的載荷向量就是協方差矩陣的特徵向量,對應特徵值最大的是第一主成分,...