資料預處理 資料降維(主成分分析)

2021-10-02 11:31:41 字數 3582 閱讀 2443

資料降維

在構建機器學習模型時,有時特徵是極其複雜,當特徵的維度達到幾千維時,模型訓練將會耗費大量的時間。另外,如果特徵較多,還會出現多重共線性、稀疏性的問題。

因此,需要簡化屬性、去噪、去冗餘,以求取更典型的屬性,但同時又不希望不損失資料本身的意義,這時就需要對特徵進行降維。

1.降維的方法

資料降維分為線性降維和非線性降維。

(1)線性降維:分為主成分分析(pca)、線性判斷分析(lda)。

(2)非線性降維:分為基於核函式的kpca、kica、kda和基於特徵值的isomap、lle、le、lpp、ltsa、mvu等。

我們主要來聊聊主成分分析(principal component analysis)

主成分分析是一種統計方法,通過正交變換,將一組可能存在相關性的變數轉換為一組線性不相關的變數,轉換後的這組變數叫主成分。

在資料分析中,常使用pca給資料降維,它能在指定的損失範圍內最大限度地簡化屬性。

pca的核心知識點是:協方差矩陣和特徵值分解

這裡要弄清楚的東西是:

1.均值一組資料的平均水平。對應公式為:

2.標準差一組資料的離散程度。對應公式為:

3.方差標準差的平方,也表示一組資料的離散程度。計算公式為:

4.協方差表示的也是一組資料的離散程度。對應的計算公式為:

當x和y相等時,協方差等於方差,即方差是協方差的一種特殊情況。

協方差的計算結果分為三種情況。

大於0:表示兩個隨機變數正相關

等於0:表示兩個隨機變數不相關

小於0:表示兩個隨機變數負相關

協方差矩陣:協方差只能表示兩個隨機變數的相互關係。如果有多個隨機變數,則需要使用協方差矩陣。假設有三個隨機變數x,y,z,那麼對應的協方差矩陣為:

pca的降維過程如下:

(1)對特徵進行標準化

(2)計算協方差矩陣

(3)計算協方差矩陣的特徵值和特徵向量

(4)選取最大的k個特徵值對應的特徵向量,得到特徵向量矩陣

(5)將資料變換到k維,得到新的資料集

大家可以根據下面這個例子看看:

鳶尾花資料集是乙個多重變數分析的資料集,其中包含150個資料集,分為3類,每類50個資料。每個資料報含花萼長度、花萼寬度、花瓣長度、花瓣寬度4個屬性。

利用這些屬性特徵可以**某個鳶尾花屬於setosa、versicolour、virginica 三個種類中的哪一類!

詳見資料集已經上傳!

下面是對1鳶尾花資料集特徵進行降維

# -*-coding:utf-8-*-

import numpy as np

from sklearn import datasets

class pcatest:

def __init__(self):

pass

# 載入鳶尾花資料集中的特徵作為pca的原始資料集 並進行標準化

def loadiris(self):

data = datasets.load_iris()["data"]

return data

# 標準化資料

def standard(self,data):

# axis=0按列取均值

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

return mean_vector,data - mean_vector

# 計算協方差矩陣

def getcovmatrix(self,newdata):

# rowvar=0表示資料的每一列代表乙個feature

return np.cov(newdata,rowvar=0)

# 計算協方差矩陣的特徵值和特徵向量

def getfvalueandfvector(self,covmatrix):

fvalue,fvector = np.linalg.eig(covmatrix)

return fvalue,fvector

# 得到特徵向量矩陣

def getvectormatrix(self,fvalue,fvector,k):

fvaluesort = np.argsort(fvalue)

fvaluetopn = fvaluesort[:-(k + 1):-1]

return fvector[:,fvaluetopn]

# 得到降維後的資料

def getresult(self,data,vectormatrix):

return np.dot(data,vectormatrix)

if __name__ == "__main__":

# 建立pca物件

pcatest = pcatest()

# 載入iris資料集

data = pcatest.loadiris()

# 歸一化資料

mean_vector,newdata = pcatest.standard(data)

# 得到協方差矩陣

covmatrix = pcatest.getcovmatrix(newdata)

print("協方差矩陣為:\n {}".format(covmatrix))

# 得到特徵值和特徵向量

fvalue, fvector = pcatest.getfvalueandfvector(covmatrix)

print("特徵值為:{}".format(fvalue))

print("特徵向量為:\n{}".format(fvector))

# 得到要降到k維的特徵向量矩陣

vectormatrix = pcatest.getvectormatrix(fvalue, fvector, k=2)

print("k維特徵向量矩陣為:\n{}".format(vectormatrix))

# 計算結果

result = pcatest.getresult(newdata,vectormatrix)

print("最終降維結果為:\n{}".format(result))

# 得到重構資料

print("最終重構結果為:\n{}".format( np.mat(result) * vectormatrix.t + mean_vector) )

碼字不易,例行求個贊!

資料降維 主成分分析(PCA)

主成分分析 pca 是一種比較經典的降維方法,它的思想主要是將資料對映到低維空間時使得資料在低維空間的方差最大。演算法如下 python 如下,我主要使用了兩種方法特徵值分解和奇異值分解。import numpy as np import matplotlib.pyplot as plt from ...

scikit learn 主成分分析 資料降維

筆記 import matplotlib.pyplot as plt from sklearn.datasets import load iris from sklearn.decomposition import pca iris load iris y iris.target x iris.da...

主成分分析 降維

import pandas as pd 引數初始化 inputfile data principal component.xls outputfile tmp dimention reducted.xls 降維後的資料 data pd.read excel inputfile,header none...