PCA主成分分析,是模式識別中常見的特徵降維的算法,其大體步驟可以分爲以下幾個部分:
(1)原始特徵矩陣歸一化處理(假設M和樣本,每個樣本n個特徵,則對M*N的X數據,進行零均值化,即減去這一列的均值)
(2)求取歸一化處理後特徵矩陣的協方差矩陣
(3)計算協方差矩陣的特徵值及其對應的特徵向量
(4)將特徵向量按對應特徵值大小從上到下按行排列成矩陣,取前k行組成矩陣P;
(5)Y=PX即爲降維到k維後的數據;
數據類型:(保存到文本里面即可讀取)
10 2
2.5 2.4
0.5 0.7
2.2 2.9
1.9 2.2
3.1 3.0
2.3 2.7
2.0 1.6
1.0 1.1
1.5 1.6
1.1 0.9
這裏先貼出完整代碼,後續有時間,會具體整理一下算法流程:
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<fstream>
#include "Eigen/Dense"
using namespace std;
using namespace Eigen;
void featurenormalize(MatrixXd &X)
{
//計算每一維度均值
MatrixXd meanval = X.colwise().mean();
RowVectorXd meanvecRow = meanval;
//樣本均值化爲0
X.rowwise() -= meanvecRow;
}
void computeCov(MatrixXd &X, MatrixXd &C)
{
//計算協方差矩陣C = XTX / n-1;
C = X.adjoint() * X;
C = C.array() / (X.rows() - 1);
}
void computeEig(MatrixXd &C, MatrixXd &vec, MatrixXd &val)
{
//計算特徵值和特徵向量,使用