1. 程式人生 > >PCA降維python實現

PCA降維python實現

#coding=utf-8
from numpy import *

'''通過方差的百分比來計算將資料降到多少維是比較合適的,
函式傳入的引數是特徵值和百分比percentage,返回需要降到的維度數num'''
def eigValPct(eigVals,percentage):
    sortArray=sort(eigVals) #使用numpy中的sort()對特徵值按照從小到大排序
    sortArray=sortArray[-1::-1] #特徵值從大到小排序
    arraySum=sum(sortArray) #資料全部的方差arraySum
    tempSum=0
num=0 for i in sortArray: tempSum+=i num+=1 if tempSum>=arraySum*percentage: return num '''pca函式有兩個引數,其中dataMat是已經轉換成矩陣matrix形式的資料集,列表示特徵; 其中的percentage表示取前多少個特徵需要達到的方差佔比,預設為0.9''' def pca(dataMat,percentage=0.9): meanVals=mean(dataMat,axis=0) #對每一列求平均值,因為協方差的計算中需要減去均值
meanRemoved=dataMat-meanVals covMat=cov(meanRemoved,rowvar=0) #cov()計算方差 eigVals,eigVects=linalg.eig(mat(covMat)) #利用numpy中尋找特徵值和特徵向量的模組linalg中的eig()方法 k=eigValPct(eigVals,percentage) #要達到方差的百分比percentage,需要前k個向量 eigValInd=argsort(eigVals) #對特徵值eigVals從小到大排序 eigValInd=eigValInd[:-(k+1
):-1] #從排好序的特徵值,從後往前取k個,這樣就實現了特徵值的從大到小排列 redEigVects=eigVects[:,eigValInd] #返回排序後特徵值對應的特徵向量redEigVects(主成分) lowDDataMat=meanRemoved*redEigVects #將原始資料投影到主成分上得到新的低維資料lowDDataMat reconMat=(lowDDataMat*redEigVects.T)+meanVals #得到重構資料reconMat return lowDDataMat,reconMat def get_K(dataMat,percentage): meanVals = mean(dataMat, axis=0) # 對每一列求平均值,因為協方差的計算中需要減去均值 meanRemoved = dataMat - meanVals covMat = cov(meanRemoved, rowvar=0) # cov()計算方差 eigVals, eigVects = linalg.eig(mat(covMat)) # 利用numpy中尋找特徵值和特徵向量的模組linalg中的eig()方法 k = eigValPct(eigVals, percentage) # 要達到方差的百分比percentage,需要前k個向量 return k

sklearn內的PCA模組
from sklearn.decomposition import PCA

k = pca.get_K(x_train,0.99)
PCA = PCA(k,copy=True,whiten = True)
x_train = PCA.fit_transform(x_train)
x_test = PCA.transform(x_test)

PCA原理:
轉自:https://www.cnblogs.com/dengdan890730/p/5495078.html
PCA, Principle Component Analysis, 主成份分析, 是使用最廣泛的降維演算法.
……
(關於PCA的演算法步驟和應用場景隨便一搜就能找到了, 所以這裡就不說了. )

假如你要處理一個數據集, 資料集中的每條記錄都是一個dd維列向量. 但是這個dd太大了, 所以你希望把資料維度給降下來, 既可以去除一些冗餘資訊, 又可以降低處理資料時消耗的計算資源(用computation budget 來描述可能更形象).

用稍微正式點的語言描述:

已知:一個數據集DD, 記錄(或者樣本, 或input pattern)xi∈Dxi∈D 是dd維列向量.
目標:將每個x∈Dx∈D 對映到另一個pp維空間, p

相關推薦

PCApython實現

#coding=utf-8 from numpy import * '''通過方差的百分比來計算將資料降到多少維是比較合適的, 函式傳入的引數是特徵值和百分比percentage,返回需要降到的維度數num''' def eigValPct(eigVals,p

PCA python實現

主成分分析,Principal Component Analysis 計算協方差矩陣,由於是hermitian的,所以100%可正交對角化而且特徵值一定非負 求出特徵值特徵向量以後,取特徵值比較大的那幾個方向構成線性空間,把資料投影上去就OK了 補詳細公式推導: http:

PCA方法的python實現

參考《機器學習實戰》,使用MNIST資料集 首先給出PCA的演算法 輸入:樣本集             低維空間維數 d‘ 過程: 對所有樣本進行中心化: 計算樣本的協方差矩陣 對協方差矩陣做特徵值分解 取最大的d'個特徵值所對應的特徵向量 輸出:投影矩陣

PCApython實現

#-*- coding:utf-8 -*- from numpy import * import matplotlib.pyplot as plt def pca(data): # 減去均值 m = mean(data,axis=0)

PCA的原理、方法、以及python實現

參考:菜菜的sklearn教學之降維演算法.pdf!! PCA(主成分分析法) 1. PCA(最大化方差定義或者最小化投影誤差定義)是一種無監督演算法,也就是我們不需要標籤也能對資料做降維,這就使得其應用範圍更加廣泛了。那麼PCA的核心思想是什麼呢? 例如D維變數構成的資料集,PCA的目標是將資料投影到維度

matlab實現PCA

利用PCA,把二維資料降為一維資料 load ('ex7data1.mat'); %變成一維 K = 1; %對資料歸一化 means = mean(X); X_means = bsxfun(@min

PCA以及Kmeans聚類例項----python,sklearn,PCA,Kmeans

PCA 演算法也叫主成分分析(principal components analysis),主要是用於資料降維的。關於降維,可以這樣理解,一組資料有n個feature(客戶年齡,收入,每個月消費額度等

Python資料探勘課程】七.PCA操作及subplot子圖繪製

        這篇文章主要介紹四個知識點,也是我那節課講課的內容。        1.PCA降維操作;        2.Python中Sklearn的PCA擴充套件包;        3.Matplotlib的subplot函式繪製子圖;        4.通過Kmean

主成分python程式碼實現(承接上一篇)

# coding=utf-8 import pandas as pd import numpy as np from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler data = pd

PCA演算法總結以及matlab實現PCA(個人的一點理解)

轉載請宣告出處。by watkins song 兩篇文章各有側重, 對照看效果更加 o(∩∩)o.. PCA的一些基本資料 最近因為最人臉表情識別,提取的gabor特徵太多了,所以需要用PCA進行對提取的特徵進行降維。 本來最早的時候我沒有打算對提取的gabor特徵

MATLAB自帶工具箱實現PCA程式碼,著重介紹實現方法

最近專案中需要進行PCA降維,環境是MATLAB,但是在網上找了很多都是介紹PCA原理的,的確介紹的很仔細,但是我是一個工科狗,只是想最快查到用程式碼實現降維的方法而已,網上的對我來說太多了,因此在此做一個總結,出於對知識的 尊重,插兩篇介紹的不錯的PCA 原理文章,只是想實

還在用PCA?快學學大牛最愛的t-SNE演算法吧(附Python/R程式碼)

大資料文摘作品編譯:寒小陽、蔣寶尚、Sheila、賴小娟、錢天培假設你有一個包含數百個特徵(變數

關於PCA中遇到的python問題小結

由於論文需要,開始逐漸的學習CNN關於文字抽取的問題,由於語言功底不好,所以在學習中難免會有很多函式不會用的情況..... ̄へ ̄ 主要是我自己的原因,但是我更多的把語言當成是一個工具,需要的時候查詢就行~~~~但是這也僅限於搬磚的時候,大多數時候如果要自己寫程式碼,這個還是行不通的。 簡單的說一下在PCA

PCAdemo

效果 cti 代碼 push jpg per ims whitening get PCA(Principal Components Analysis)主成分分析法是一種常用的減小數據維度的算法。 能力有限在這裏就不做過多的數學分析了,具體原理可參見http://uf

sklearn pca

noise .text learn mac crc sigma 參考 clas nts PCA降維 一.原理 這篇文章總結的不錯PCA的數學原理。 PCA主成分分析是將原始數據以線性形式映射到維度互不相關的子空間。主要就是尋找方差最大的不相關維度。數據的最大方差給出了數據的

【資料收集】PCA

post hive ron str AD span clas htm logs 重點整理: PCA(Principal Components Analysis)即主成分分析,是圖像處理中經常用到的降維方法 1、原始數據: 假定數據是二維的 x=[2.5, 0.5, 2.2,

機器學習—PCA

one 因此 表示 實現 維度 非監督學習 衡量 取出 計算方法 1、基本思想:   主成分分析(Principal components analysis,以下簡稱PCA)是最重要的降維方法之一。在數據壓縮消除冗余和數據噪音消除等領域都有廣泛的應用。   PCA顧名思義,

LDA和PCA的原理和區別

除了 思想 樣本 計算方法 相互 進化 strong 繞過 位置 LDA算法的主要優點有: 在降維過程中可以使用類別的先驗知識經驗,而像PCA這樣的無監督學習則無法使用類別先驗知識。 LDA在樣本分類信息依賴均值而不是方差的時候,比PCA之類的算法較優。 LDA算法的

PCA原理和作用

降維的作用 ①資料在低維下更容易處理、更容易使用; ②相關特徵,特別是重要特徵更能在資料中明確的顯示出來;如果只有兩維或者三維的話,更便於視覺化展示; ③去除資料噪聲 ④降低演算法開銷 降維通俗點的解釋 一些高維度的資料,比如淘寶交易資料,為便於解釋降維作用,我們在這假設有下單數

機器學習筆記(八):PCA演算法

1 - PCA概述 主成份分析,簡稱為PCA,是一種非監督學習演算法,經常被用來進行 資料降維 有損資料壓縮 特徵抽取 資料視覺化 2 - PCA原理詳解 通過計算資料矩陣的協方差矩陣,然後得到協方差矩陣的特徵值特徵向量,選擇特