主成分分析 PCA

2021-09-19 12:40:13 字數 2643 閱讀 1748

在講pca之間,我們先來討論一下過擬合的問題。通常遇到過擬合,會有兩種方式解決。增加訓練的資料、正則化。在資料很難增加的情況下,我們一般採取正則化來避免過擬合。但除了正則化之外,我們也可以採取降維的方式來解決這個問題。下面是解決過擬合的方式。

為什麼降維可以解決過擬合的問題?

在我們通常收集的資料中,有很多特徵是可以由其他特徵推測出來,或者兩個特徵其實是描述的同一件事情。比如,描述人的身高這個特徵,資料集是由不同的人收集的,有的人用公尺和厘公尺表示身高,有的人用英呎和英吋表示身高,但他們都是描述的乙個屬性,如果能找到這些屬性把他們去掉,就能很好的處理資料。pca就可以完成這個事情。pca就是將n維特徵對映到k維上,這k個維度是正交的特徵。

現在把pca運用到乙個擁有590個特徵的半導體資料集上,然後計算他的方差百分比、和累積方差百分比(用來衡量資料與原始資料的偏差程度),可以看出只保留前6個主成分,達到的累積方差百分比為96.8%,而20個主成分,幾乎達到100%。剩下的500多個特徵都是多餘的特徵。

下面是中心矩陣的性質:

pca要做的事情就是把n個線性相關的特徵轉化為k個線性無關的特徵,達到對原始特徵空間的重構。可以從兩個角度達到這個目的,分別是最大投影方差角度和最小重構距離角度。

可以看出pca就這麼點東西,首先對資料進行中心化,然後求樣本的方差矩陣,對方差矩陣進行特徵值分解,特徵值最大的前k個元素,就是投影的方向。

# 讀入資料

def loaddataset(filename, delim='\t'):

fr = open(filename)

stringarr = [line.strip().split(delim) for line in fr.readlines()]

datarr = [list(map(float,line)) for line in stringarr]

return np.array(datarr)

def pca(datamat, topnfeat=9999999):

# 計算資料的均值

meanvals = np.mean(datamat, axis=0)

# 資料減去均值

meanremoved = datamat - meanvals

# 計算協方差矩陣

covmat = np.cov(meanremoved, rowvar=0)

# 進行特徵值分解

ei**als,ei**ects = np.linalg.eig(covmat)

# 從小到大對特徵值進行排序,並選取最大的特徵值

ei**alind = np.argsort(ei**als)

ei**alind = ei**alind[:-(topnfeat+1):-1]

redei**ects = ei**ects[:,ei**alind]

# 將資料降維

lowddatamat = meanremoved @ redei**ects

# 恢復資料

reconmat = (lowddatamat @ redei**ects.t) + meanvals

return lowddatamat, reconmat

datamat = loaddataset('testset.txt')

lowdmat,reconmat = pca(datamat,1)

fig = plt.figure()

ax = fig.add_subplot(111)

ax.scatter(datamat[:,0],datamat[:,1],marker="^",s=90)

ax.scatter(reconmat[:,0],reconmat[:,1],marker="o",s=50,c='red')

如下圖所示:藍色代表原始資料,紅色代表將原始資料投影到主成分向量上

pca主成分分析 PCA主成分分析(中)

矩陣 matrix,很容易讓人們想到那部著名的科幻電影 駭客帝國 事實上,我們又何嘗不是真的生活在matrix中。機器學習處理的大多數資料,都是以 矩陣 形式儲存的。矩陣是向量的組合,而乙個向量代表一組資料,資料又是多維度的。比如每個人的都具有身高 體重 長相 性情等多個維度的資訊資料,而這些多維度...

主成分分析PCA

主要參考這篇文章 個人總結 pca是一種對取樣資料提取主要成分,從而達到降維的目的。相比於上篇文章介紹到的svd降維不同,svd降維是指減少資料的儲存空間,資料的實際資訊沒有缺少。個人感覺pca更類似與svd的去噪的過程。pca求解過程中,涉及到了svd的使用。針對資料集d 假設di 的維度為 w ...

PCA 主成分分析

在進行影象的特徵提取的過程中,提取的特徵維數太多經常會導致特徵匹配時過於複雜,消耗系統資源,不得不採用特徵降維的方法。所謂特徵降維,即採用乙個低緯度的特徵來表示高緯度。將高緯度的特徵經過某個函式對映至低緯度作為新的特徵。pca和lda區別 pca是從特徵的角度協方差角度 求出協方差矩陣的特徵值和特徵...