1. 程式人生 > >機器學習(七):主成分分析PCA降維_Python

機器學習(七):主成分分析PCA降維_Python

六、PCA主成分分析(降維)

1、用處

  • 資料壓縮(Data Compression),使程式執行更快
  • 視覺化資料,例如3D-->2D
  • ……

2、2D–>1D,nD–>kD

  • 如下圖所示,所有資料點可以投影到一條直線,是投影距離的平方和(投影誤差)最小
    這裡寫圖片描述
  • 注意資料需要歸一化處理
  • 思路是找1向量u,所有資料投影到上面使投影距離最小
  • 那麼nD-->kD就是找k個向量$${u^{(1)}},{u^{(2)}} \ldots {u^{(k)}}$$,所有資料投影到上面使投影誤差最小
    • eg:3D–>2D,2個向量$${u^{(1)}},{u^{(2)}}$$就代表一個平面了,所有點投影到這個平面的投影誤差最小即可

3、主成分分析PCA與線性迴歸的區別

  • 線性迴歸是找x
    y的關係,然後用於預測y
  • PCA是找一個投影面,最小化data到這個投影面的投影誤差

4、PCA降維過程

  • 資料預處理(均值歸一化)

    • 公式:$${\rm{x}}_j^{(i)} = {{{\rm{x}}_j^{(i)} - {u_j}} \over {{s_j}}}$$
    • 就是減去對應feature的均值,然後除以對應特徵的標準差(也可以是最大值-最小值)
    • 實現程式碼:
       # 歸一化資料
      def featureNormalize(X):
          '''(每一個數據-當前列的均值)/當前列的標準差'''
          n = X.shape[1]
          mu = np.zeros((1,n));
          sigma = np.zeros((1,n))
      
          mu = np.mean(X,axis=0)
          sigma = np.std(X,axis=0
      ) for i in range(n): X[:,i] = (X[:,i]-mu[i])/sigma[i] return X,mu,sigma
  • 計算協方差矩陣Σ(Covariance Matrix):$$\Sigma  = {1 \over m}\sum\limits_{i = 1}^n {{x^{(i)}}{{({x^{(i)}})}^T}} $$
    • 注意這裡的Σ和求和符號不同
    • 協方差矩陣對稱正定(不理解正定的看看線代)
    • 大小為nxn,nfeature的維度
    • 實現程式碼:

      Sigma = np.dot(np.transpose(X_norm),X_norm)/m # 求Sigma
  • 計算Σ的特徵值和特徵向量
    • 可以是用svd奇異值分解函式:U,S,V = svd(Σ)
    • 返回的是與Σ同樣大小的對角陣S(由Σ
      的特徵值組成)[注意matlab中函式返回的是對角陣,在python中返回的是一個向量,節省空間]
    • 還有兩個**酉矩陣**U和V,且$$\Sigma  = US{V^T}$$
    • 這裡寫圖片描述
    • 注意svd函式求出的S是按特徵值降序排列的,若不是使用svd,需要按特徵值大小重新排列U
  • 降維

    • 選取U中的前K列(假設要降為K維)
    • 這裡寫圖片描述
    • Z就是對應降維之後的資料
    • 實現程式碼:
       # 對映資料
      def projectData(X_norm,U,K):
          Z = np.zeros((X_norm.shape[0],K))
      
          U_reduce = U[:,0:K]          # 取前K個
          Z = np.dot(X_norm,U_reduce) 
          return Z
  • 過程總結:
    • Sigma = X'*X/m
    • U,S,V = svd(Sigma)
    • Ureduce = U[:,0:k]
    • Z = Ureduce'*x

5、資料恢復

  • 因為:$${Z^{(i)}} = U_{reduce}^T*{X^{(i)}}$$
  • 所以:$${X_{approx}} = {(U_{reduce}^T)^{ - 1}}Z$$ (注意這裡是X的近似值)
  • 又因為Ureduce為正定矩陣,【正定矩陣滿足:$$A{A^T} = {A^T}A = E$$,所以:$${A^{ - 1}} = {A^T}$$】,所以這裡:
  • $${X_{approx}} = {(U_{reduce}^{ - 1})^{ - 1}}Z = {U_{reduce}}Z$$
  • 實現程式碼:
    # 恢復資料 
    def recoverData(Z,U,K):
        X_rec = np.zeros((Z.shape[0],U.shape[0]))
        U_recude = U[:,0:K]
        X_rec = np.dot(Z,np.transpose(U_recude))  # 還原資料(近似)
        return X_rec

6、主成分個數的選擇(即要降的維度)

  • 如何選擇
    • 投影誤差(project error):$${1 \over m}\sum\limits_{i = 1}^m {||{x^{(i)}} - x_{approx}^{(i)}|{|^2}} $$
    • 總變差(total variation):$${1 \over m}\sum\limits_{i = 1}^m {||{x^{(i)}}|{|^2}} $$
    • 誤差率(error ratio):$${{{1 \over m}\sum\limits_{i = 1}^m {||{x^{(i)}} - x_{approx}^{(i)}|{|^2}} } \over {{1 \over m}\sum\limits_{i = 1}^m {||{x^{(i)}}|{|^2}} }} \le 0.01$$,則稱99%保留差異性
    • 誤差率一般取1%,5%,10%
  • 如何實現
    • 若是一個個試的話代價太大
    • 之前U,S,V = svd(Sigma),我們得到了S,這裡誤差率error ratio:
      $$error{\kern 1pt} \;ratio = 1 - {{\sum\limits_{i = 1}^k {{S_{ii}}} } \over {\sum\limits_{i = 1}^n {{S_{ii}}} }} \le threshold$$
    • 可以一點點增加K嘗試。

7、使用建議

  • 不要使用PCA去解決過擬合問題Overfitting,還是使用正則化的方法(如果保留了很高的差異性還是可以的)
  • 只有在原資料上有好的結果,但是執行很慢,才考慮使用PCA

8、執行結果

  • 2維資料降為1維
    • 要投影的方向
      這裡寫圖片描述
    • 2D降為1D及對應關係
      這裡寫圖片描述
  • 人臉資料降維
    • 原始資料
      這裡寫圖片描述
    • 視覺化部分U矩陣資訊
      這裡寫圖片描述
    • 恢復資料
      這裡寫圖片描述
  • 匯入需要的包:
#-*- coding: utf-8 -*-
# Author:bob
# Date:2016.12.22
import numpy as np
from matplotlib import pyplot as plt
from scipy import io as spio
from sklearn.decomposition import pca
from sklearn.preprocessing import StandardScaler
  • 歸一化資料
    '''歸一化資料並作圖'''
    scaler = StandardScaler()
    scaler.fit(X)
    x_train = scaler.transform(X)
  • 使用PCA模型擬合數據,並降維
    • n_components對應要將的維度
    '''擬合數據'''
    K=1 # 要降的維度
    model = pca.PCA(n_components=K).fit(x_train)   # 擬合數據,n_components定義要降的維度
    Z = model.transform(x_train)    # transform就會執行降維操作
  • 資料恢復
    • model.components_會得到降維使用的U矩陣
    '''資料恢復並作圖'''
    Ureduce = model.components_     # 得到降維用的Ureduce
    x_rec = np.dot(Z,Ureduce)       # 資料恢復

相關推薦

機器學習成分分析PCA_Python

六、PCA主成分分析(降維) 1、用處 資料壓縮(Data Compression),使程式執行更快 視覺化資料,例如3D-->2D等 …… 2、2D–>1D,nD–&

機器學習回顧篇14成分分析PCA

  1 引言¶ 在展開資料分析工作時,我們經常會面臨兩種困境,一種是原始資料中特徵屬性太少,“巧婦難為無米之炊”,很難挖掘出潛在的規律,對於這種情況,我們只能在收集這一環節上多下功夫;另一種困境剛好相反,那就是特徵

深度學習入門教程UFLDL學習實驗筆記三成分分析PCA與白化whitening

主成分分析與白化是在做深度學習訓練時最常見的兩種預處理的方法,主成分分析是一種我們用的很多的降維的一種手段,通過PCA降維,我們能夠有效的降低資料的維度,加快運算速度。而白化就是為了使得每個特徵能有同樣的方差,降低相鄰畫素的相關性。 主成分分析PCA 第一步:首先我們需要獲取旋轉矩陣U,為了實現這一目的,我

一步步教你輕鬆學成分分析PCA演算法

(白寧超 2018年10月22日10:14:18) 摘要:主成分分析(英語:Principal components analysis,PCA)是一種分析、簡化資料集的技術。主成分分析經常用於減少資料集的維數,同時保持資料集中的對方差貢獻最大的特徵。常常應用在文字處理、人臉識別、圖片識別、自然語言處

python_成分分析(PCA)

主成分分析(principal component analysis)是一種常見的資料降維方法,其目的是在“資訊”損失較小的前提下,將高維的資料轉換到低維,從而減小計算量。   PCA的本質就是找一些投影方向,使得資料在這些投影方向上的方差最大,而且這些投影方向是相互正

機器學習十三CS229ML課程筆記9——因子分析成分分析PCA、獨立成分分析ICA

1.因子分析:高維樣本點實際上是由低維樣本點經過高斯分佈、線性變換、誤差擾動生成的,因子分析是一種資料簡化技術,是一種資料的降維方法,可以從原始高維資料中,挖掘出仍然能表現眾多原始變數主要資訊的低維資料。是基於一種概率模型,使用EM演算法來估計引數。因子分析,是分析屬性們的公

演算法工程師修仙之路吳恩達機器學習

吳恩達機器學習筆記及作業程式碼實現中文版 第六章 神經網路學習 非線性假設 無論是線性迴歸還是邏輯迴歸都有這樣一個缺點:當特徵太多時,計算的負荷會非常大。 使用非線性的多項式項,能夠幫助我們建立更好的分類模型。假設我們有非常多的特徵,例如大於 100 個

機器學習十四——協同過濾的ALS演算法2成分分析

Kendall秩相關係數(Kendall rank correlation coefficient) 對於秩變數對(xi,yi),(xj,yj): (xi−xj)(yi−yj)⎧⎩⎨>0,=0,<0,concordantneither con

JAVA學習方法重載與方法重寫、thiskeyword和superkeyword

格式 hello new 初始 per 而且 方法重寫 學習 方式 方法重載與方法重寫、thiskeyword和superkeyword 1、方法重載 重載可以使具有同樣名稱但不同數目和類型參數的類傳遞給方法。 註: 一是重載方法的參數列表必須與被重載的方法不同

機器學習—Adaboost 和 梯度提升樹GBDT

獲得 決策樹 info gin 否則 它的 均方差 但是 ont 1、Adaboost算法原理,優缺點:   理論上任何學習器都可以用於Adaboost.但一般來說,使用最廣泛的Adaboost弱學習器是決策樹和神經網絡。對於決策樹,Adaboost分類用了CART分類樹,

Andrew Ng機器學習什麽是機器學習

中學 修正 style tar 輸入 color 情況 html 知識 1.什麽是機器學習? 自動化:讓計算機處理繁瑣和重復的工作。 編程:設計一種算法,適用於解決特定的問題。 機器學習:可以解決更廣泛的而不是特定的問題。類比於人類從經驗中學習這種活動,從已有的數據中發現自

機器學習白化whitening

轉自:https://blog.csdn.net/hjimce/article/details/50864602 原文地址:http://blog.csdn.net/hjimce/article/details/50864602 作者:hjimce 一、相關理論    

PE檔案格式學習安全表

1.介紹 如果一個應用程式有數字簽名,那麼它的安全表就不會為空。它位於異常表的後面。 2.安全表解析 通過資料目錄表裡提供的RVA,我們轉換成offset,找到了安全表的位置,如下: 安全表的結構體如下: typedef struct _WIN_CERTIFIC

Python學習生成器表示式expr for iner_var in iterable if cond_expr

列表解析:[expr for iter_var in iterable if cond_expr] 生成器表示式:(expr for iter_var in iterable if cond_expr)    J = 'aadsjnk' S = 'asadasbxjs

Java虛擬機器學習1體系結構 記憶體模型

JVM記憶體區域模型 1.方法區 也稱”永久代” 、“非堆”,  它用於儲存虛擬機器載入的類資訊、常量、靜態變數、是各個執行緒共享的記憶體區域。預設最小值為16MB,最大值為64MB,可以通過-XX:PermSize 和 -XX:MaxPermSize 引數限制方法區的大小。

ionic學習問答社群03登入功能實現 總結篇

登入功能整整搞了一天,期間各種錯誤不斷,剛接觸ionic,對Angular也不太熟悉,沒正規的學過html,css,js等前端知識。 整理一下流程: 1.製作登入頁面 2.構造登入等待遮罩層和登入錯誤遮罩層 3.通過storge儲存登入的資訊 4.通過判斷是否登入,並顯示相應頁面 備

機器學習 決策樹演算法研究與實現

前言        從決策樹這三個字中我們既可以看出來它的主要用途幫助決策某一類問題,樹是輔助我們來決策用的,如下圖一個簡單的判斷不同階段人年齡的圖:       &

Java語言學習字串的常見使用

    Java中字串的使用很是常見,也是不可避免的,比如:格式化、大小寫轉換等等,下面就這些常見的使用來說下字串。     在使用前,必須要理解一點:字串是不可變的物件,意味著每當呼叫字串物件的方法操作字串時,都將產生一個新的字串物件,而不是更改原來的字

用python來實現機器學習線性迴歸linear regression

需要下載一個data:auto-mpg.data 第一步:顯示資料集圖 import pandas as pd import matplotlib.pyplot as plt columns = ["mpg","cylinders","displacement","horsepowe

opencv學習圖片切割、合併、填充

一、圖片切割與合併   原理通過操作影象矩陣來獲取或合併指定位置的影象 ​ # -*- coding=GBK -*- import cv2 as cv import numpy as np #擷取圖片中的指定區域或在指定區域新增某一圖片 def jie_image(src1