opencv PCA主成分分析的使用

2021-10-09 03:03:24 字數 2134 閱讀 6603

簡介

主成分分析(pca)是提取資料集最重要特徵的統計程式。

pca(principal components analysis,中文名叫主成分分析,是資料降維很常用的演算法。按照書上的說法是:尋找最小均方意義下,最能代表原始資料的投影方法。pca的乙個經典應用就是人臉識別,感興趣的可以在網上搜eigenface。

pca的主要思想是尋找到資料的主軸方向,由主軸構成乙個新的座標系,這裡的維數可以比原維數低,然後資料由原座標係向新的座標系投影,這個投影的過程就可以是降維的過程。

使用

//繪製向量軸

void

drawaxis

(mat& img, point p, point q, scalar colour,

const

float scale =

0.2)

//pca 使用過程

double

getorientation

(const vector

&pts, mat &img)

//perform pca analysis

pca pca_analysis

(data_pts,

mat(

), cv_pca_data_as_row)

;//store the center of the object

point cntr =

point

(static_cast<

int>

(pca_analysis.mean.at<

double

>(0

,0))

, static_cast<

int>

(pca_analysis.mean.at<

double

>(0

,1))

);//store the eigenvalues and eigenvectors

vector

eigen_vecs(2

);vector<

double

>

eigen_val(2

);for(

int i =

0; i <2;

++i)

// draw the principal components

circle

(img, cntr,3,

scalar

(255,0

,255),

2); point p1 = cntr +

0.02

*point

(static_cast<

int>

(eigen_vecs[0]

.x * eigen_val[0]

), static_cast<

int>

(eigen_vecs[0]

.y * eigen_val[0]

)); point p2 = cntr -

0.02

*point

(static_cast<

int>

(eigen_vecs[1]

.x * eigen_val[1]

), static_cast<

int>

(eigen_vecs[1]

.y * eigen_val[1]

));drawaxis

(img, cntr, p1,

scalar(0

,255,0

),1)

;drawaxis

(img, cntr, p2,

scalar

(255

,255,0

),5)

;double angle =

atan2

(eigen_vecs[0]

.y, eigen_vecs[0]

.x);

// orientation in radians

return angle;

}void

main()

}

效果

主成分分析

主成分分析 pca 分析乙個隨機向量的中的主成分 主成分一般不是隨機向量中的某乙個分量,而是不同分量的線性組合,根據資訊理論的觀點,資訊的多少與方差有關,所以 主成分是方差最大的幾個成分 主成分分析的方法是求隨機向量的協方差矩陣 用樣本協方差矩陣代替 對於差異較大的資料,可採用相關矩陣代替協方差矩陣...

主成分分析

理論要點 1 主成分分析是一種無監督學習,因此不能用交叉驗證來檢驗誤差 2 在處理資料之前,要對資料做中心化處理 3 p太大的話,做特徵分解用svd 4 一共有min n 1,p 個主成分,因為中心化以後,rank要降一維 5 主成分的載荷向量就是協方差矩陣的特徵向量,對應特徵值最大的是第一主成分,...

主成分分析

1.概念 將一組可能存在相關性的隨機變數轉變成互不相關的隨機變數。這個概念裡有三個地方需要理解清楚。1 隨機變數的指代 在資料集中,每乙個樣本,即將資料集理解成乙個 的話,乙個樣本就是一行,則每一列就是乙個特徵,也就是乙個隨機變數,一列的所有取值就是隨機變數的所有可能取值 說的所有可能取值只針對訓練...