本質:去掉資料中沒什麼用處的資訊,減少維度。
方法:找到乙個方向,使得資料在這些投影方向上的方差最大。計算原始資料在這些正交基上投影的方差,方差越大,就說明在對應正交基上包含了更多的資訊量。這個方向就是主成分。
可以用numpy實現對資料的降維,利用資料的特徵值和特徵向量。
例如:乙個100*4(性別;顏值;身高;收入)維的矩陣,pca降維就是保留差別最大的那幾列。假設性別都為女,對特徵沒影響就去掉;假設收入這一列差別特別大,就要保留這一列。
方法:(把n維的降維成k維)
1.去掉均值
2.計算協方差矩陣的特徵值和特徵向量;特徵值代表重要程度。
3.保留最大的k個特徵值對應的特徵向量
4.把資料轉化到上述特徵向量構建的新空間
def pca(datamat, topnfeat=999999):
meanvals = mean(datamat)
meanremoved = datamat - meanvals #去均值
covmat = cov(meanremoved, rowvar=0) #協方差矩陣
ei**als,ei**ects = linalg.eig(mat(covmat))
# numpy內建函式,一次性求出特徵值和特徵向量
ei**alind = 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
例如:
乙個1004(性別;顏值;身高;收入)維的矩陣,經過pca降維成1002的矩陣的過程:
對每一列求乙個特徵值,按照降序排列,去掉最後兩列,就變成100*2的了。可能只剩下身高和收入了。
pca 還能從回歸的角度求解問題。順著這個思路 , 在高維空間中 , 我們實際上是要找到 乙個 d 維超平
面,使得資料點到這個超平面的距離平方和最小 。 以 d= l 為例,超平面退化為直線 , 即把樣本點投影到最佳直線,最小化的就是所有點到直線的距離平方之。目標函式為:
等價於:
PCA主成分分析(降維)
opencv中使用 實現降維分類預處理 參考 降維 我的理解是,通過降維得到基本特徵可以加快學習演算法。並且由於降維後的資料本身就是正交的,和聚類一樣可以實現分類 識別問題。在自我學習中也可以採用大量無標註的影象,對這些影象降維分類,並結合部分編碼資料得到特徵。例如 將很2500張人臉資訊,通過25...
降維 PCA 主成分分析
其實早該整理一下pca了,怎奈一直沒有時間,可能是自己對時間沒有把握好吧,下面進入正題。所謂降維,就是降低資料的維數。在機器學習中尤其常見,之前做過對一幅提取小波特徵,對於一幅大小為800 600的,如果每個點提取五個尺度 八個方向的特徵,那麼每乙個畫素點提取40個特徵,那麼一副的話就是40 800...
降維方法 主成分分析(PCA)
推薦一篇絕對好的文章 理解pca的數學原理 pca principle component analysis 主成分分析,主要應用於資料降維,它是一種非監督的降維方法,主要捕獲觀測資料之間的變異程度。當資料集的維度過高之後,運用各種演算法處理起來的時間複雜度可能會很高,所以需要對資料進行降維處理,而...