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

PCA降維方法的python實現

參考《機器學習實戰》,使用MNIST資料集

首先給出PCA的演算法

輸入:樣本集 D=\{x_1,x_2,...,x_m\}

           低維空間維數 d‘

過程:

  1. 對所有樣本進行中心化:x_i\leftarrow x_i-\frac{1}{m}\sum_{i=1}^{m}x_i
  2. 計算樣本的協方差矩陣XX^T
  3. 對協方差矩陣XX^T做特徵值分解
  4. 取最大的d'個特徵值所對應的特徵向量w_1,w_2,...,w_{d'}

輸出:投影矩陣W^*=(w_1,w_2,...,w_{d'})

# -*- coding: utf-8 -*-
"""
Created on Sun Jul 22 15:38:03 2018

@author: Li Qingquan
"""

import chainer
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

# with reference to "Machine Learning in Action"
def PCA(dataMat, topNfeat=9999999):
    meanVals = np.mean(dataMat, axis = 0)  # calculate mean
    meanRemoved = dataMat - meanVals  # minus mean
    covMat = np.cov(meanRemoved, rowvar=0)  # calculate the covariance matrix
    eigVals, eigVects = np.linalg.eig(np.mat(covMat))  # calculate eigenvalues
    # sort eigenvalues
    eigValInd = np.argsort(eigVals)
    eigValInd = eigValInd[: -(topNfeat + 1) : -1]
    redEigVects = eigVects[:, eigValInd]
    # dimensionality reduction
    lowDDataMat = meanRemoved * redEigVects
    reconMat = (lowDDataMat * redEigVects.T) + meanVals
    return lowDDataMat, reconMat

if __name__ == "__main__":
    train, test = chainer.datasets.get_mnist()
    img = []
    label = []
    for i in range(10000):  # get numbers 3, 6, 8
        if train[i][1] == 3 or train[i][1] == 6 or train[i][1] == 8:
            img.append(train[i][0])
            label.append(train[i][1])
    lowDDataMat, reconMat = PCA(np.array(img), 3)
    # draw
    fig = plt.figure()
    axes = fig.add_subplot(111, projection='3d')
    for i in range(len(label)):
        if label[i] == 3:
            axes.scatter(np.array(lowDDataMat[i, 0]), np.array(lowDDataMat[i, 1]), np.array(lowDDataMat[i, 2]), color='red')
        if label[i] == 6:
            axes.scatter(np.array(lowDDataMat[i, 0]), np.array(lowDDataMat[i, 1]), np.array(lowDDataMat[i, 2]), color='green')
        if label[i] == 8:
            axes.scatter(np.array(lowDDataMat[i, 0]), np.array(lowDDataMat[i, 1]), np.array(lowDDataMat[i, 2]), color='blue')
    plt.title("PCA")
    plt.show()

相關推薦

PCApython實現

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

PCA方法python實現

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

PCA 方法的簡單使用

from sklearn.decomposition import PCA from sklearn.cluster import KMeans import pandas as pd import numpy as np #pca.txt是一個沒有表頭的多維資料,一共有7列,利用pandas讀取

PCA方法

PCA (主成分分析)詳解 (寫給初學者) 結合matlab 一、簡介         PCA(Principal Components Analysis)即主成分分析,是影象處理中經常用到的降維方法,大家知道,我們在處理有關數字影象處理方面的問題時,比如經常用的

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

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

資料方法Python實現

一、資料降維瞭解 1.1、資料降維原理:機器學習領域中所謂的降維就是指採用某種對映方法,將原高維空間中的資料點對映到低維度的空間中。降維的本質是學習一個對映函式 f : x->y,其中x是原始資料點的表達,目前最多使用向量表達形式。 y是資料點對映後的低維向量表達

PCApython實現

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

PCA python實現

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

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

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

matlab實現PCA

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

12種方法終極指南(含Python程式碼)

你遇到過特徵超過1000個的資料集嗎?超過5萬個的呢?我遇到過。降維是一個非常具有挑戰性的任務,尤其是當你不知道該從哪裡開始的時候。擁有這麼多變數既是一個恩惠——資料量越大,分析結果越可信;也是一種詛咒——你真的會感到一片茫然,無從下手。 面對這麼多特徵,在微觀層面分析每個

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

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

方法PCA&SVD

個人覺得關於PCA(主成分分析)和SVD(矩陣奇異值分解)兩篇不錯的部落格:簡單來說:PCA是將高維資料在低維方向上投影從而達到降維的目的,SVD是將矩陣分解為低維矩陣的乘積。兩者都是建立在矩陣的這一基石上,即:Ax=x。1)PCA具體過程如下:假設有一組資料{(xi,yi)

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

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

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

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

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

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

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

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

PCAdemo

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

PCA主成分分析Python實現

more 公式 最大 最重要的 例如 好的 mina details args 作者:拾毅者 出處:http://blog.csdn.net/Dream_angel_Z/article/details/50760130 Github源代碼:https

sklearn pca

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