这是本人在学习PCA降维的过程中,根据算法写成的C++代码。
PCA是模式识别中常见的特征降维的算法,其大体步骤可以分为以下几个部分:
(1)原始特征矩阵归一化处理
(2)求取归一化处理后特征矩阵的协方差矩阵
(3)计算协方差矩阵的特征值及其对应的特征向量
(4)按照特征值从大到小排列特征向量
(5)从大到小,挑选出前K个特征值对应的特征向量组成降维后的特征向量,即为所求。
注:在求取特征值和特征向量的过程中,借助了C++ Eigen库,需要自行安装和配置该库。
//PCA_Demension.h文件
#pragma once
#include<iostream>
#include<vector>
#include<map>
#include<Eigen/Dense>
using namespace Eigen;
using Eigen::MatrixXd;
using namespace std;
//pca降维代码的实现 2017.02.16
//copyright: PH-SCUT
class PCA_Demension
{
public:
PCA_Demension(void);
~PCA_Demension(void);
int covariance(vector<double> x, double x_mean, vector<double> y, double y_mean, double & result);
int PCA_demension(vector<vector<double> > Feature_Data, int k, vector<vector<double> > & PCA_Features,vector<vector<double> > & Final_Data);
};
#include "PCA_Demension.h"
PCA_Demension::PCA_Demension(void)
{
}
PCA_Demension::~PCA_Demension(void)
{
}
/*
函数名称:covariance
函数功能:协方差求取
输入:ve