前言:主成分分析主要是用於降維,減少樣本的特徵量,其核心思想是將樣本資料對映到最重要的方向,而最重要的方向就是方差最大的方向。關於主成分分析詳細的理論知識,請至我的這篇博文中檢視
一、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 主成分的載荷向量就是協方差矩陣的特徵向量,對應特徵值最大的是第一主成分,...