高维数据样本集的协方差矩阵的求解及算法实现
来源:互联网 发布:施里芬计划 知乎 编辑:程序博客网 时间:2024/04/27 16:45
步骤:
1、获取样本集矩阵(本文中行表示样本,列表示维度)
void PCA::orMatrix(int _sapNum, int _dimt) { //初始样本集矩阵sapNum_ = _sapNum;dimt_ = _dimt;std::cout << "维数为: " << dimt_ << "样本个数为: " << sapNum_ << '\n';orAry = (double **)malloc(sapNum_*sizeof(double));for(int i=1; i<=sapNum_; i++)*(orAry+i) = (double *)malloc(dimt_*sizeof(double));std::cout << "input the original vectors" << '\n';for(i=1; i<=sapNum_; i++)for(int j=1; j<=dimt_; j++)std::cin >> *(*(orAry+i)+j);}
输入数据如下
即为 10*3 阶矩阵,其中维数为3(即3个变量),索取样本数为10(即10个样本向量)
2、计算每一维的均值(即每一列的均值)
void PCA::meanVal() { //各维的均值meanValAry = (double *)malloc(dimt_*sizeof(double));double sum=0.0;for(int i=1; i<=dimt_; i++) {sum = 0.0;for(int j=1; j<=sapNum_; j++)sum += *(*(orAry+j)+i);*(meanValAry+i) = sum/sapNum_;}}
结果为:第一列 16.1 ;第二列 24.2 ; 第三列 19.8
3、计算出每一维减去相应均值后的新样本集矩阵
void PCA::meanMatrix() { //减去均值后的样本集矩阵meanAry = (double **)malloc(sapNum_*sizeof(double));for(int i=1; i<=sapNum_; i++)*(meanAry+i) = (double *)malloc(dimt_*sizeof(double));for(i=1; i<=dimt_; i++)for(int j=1; j<=sapNum_; j++)*(*(meanAry+j)+i) = *(*(orAry+j)+i)- *(meanValAry+i);}
方法一:
4、按公式 =(新样本集矩阵的第 i 列的转置 * 新样本的第 j 列)/(样本数(10)-1) 计算
for(i=1; i<=dimt_; i++)for(int j=1; j<=dimt_; j++) {double data = 0.0;for(int k=1; k<=sapNum_; k++) data += *(*(meanAry+k)+i)* (*(*(meanAry+k)+j));data /= sapNum_-1;*(*(covAry+i)+j) = data;最后求得协方差矩阵(3*3 阶方阵)
方法二:
4、求新样本集的转置矩阵
void PCA::meanMatrixTrs() { //减去均值后的样本集矩阵的转置矩阵meanAryTrs = (double **)malloc(dimt_*sizeof(double));for(int i=1; i<=dimt_; i++)*(meanAryTrs+i) = (double *)malloc(sapNum_*sizeof(double));for(i=1; i<=dimt_; i++)for(int j=1; j<=sapNum_; j++)*(*(meanAryTrs+i)+j) = *(*(meanAry+j)+i);}5、(新样本集的转置矩阵*新样本集矩阵本身)/(样本数-1) 即得协方差矩阵
for(i=1; i<=dimt_; i++) {for(int j=1; j<=dimt_; j++) {double data = 0.0;for(int k=1; k<=sapNum_; k++)data += *(*(meanAryTrs+i)+k)* (*(*(meanAry+k)+j));data /= sapNum_-1;*(*(covAry+i)+j) = data;}}结果与方法一相同
- 高维数据样本集的协方差矩阵的求解及算法实现
- 样本不同特征构成的协方差矩阵
- 计算样本数据的方差, 标准方差与协方差
- 方差、协方差、协方差矩阵的概念及意义 的理解
- 关于方差、协方差、协方差矩阵的概念及意义
- 关于方差、协方差、协方差矩阵的概念及意义
- 关于方差、协方差、协方差矩阵的概念及意义
- 关于方差、协方差、协方差矩阵的概念及意义
- 关于协方差矩阵的概念及意义
- 协方差矩阵的概念及matlab计算
- 向量的表示及协方差矩阵
- 协方差矩阵的概念及matlab计算
- 关于协方差矩阵的概念及意义
- 关于协方差矩阵的概念及意义
- 协方差矩阵的概念及matlab计算
- 向量的表示及协方差矩阵
- 关于协方差矩阵的概念及意义
- 关于协方差矩阵的概念及意义
- 准备找工作
- redhat历史以及对应的内核版本
- 锂电池使用及维护
- Java ExecutorService建立多线程的步骤
- YAMAHA雅马哈音响设备中文说明书大全
- 高维数据样本集的协方差矩阵的求解及算法实现
- WebSocket 规范
- javascript判断当前浏览器是iphone、android还是desktop版本
- 调用SendMessage 产生死锁的问题分析
- IoC与DI
- osg for android :天空盒
- PrimeUI介绍
- C#中使用简单的线程
- Android 异步加载图片+线程池+缓存(详细介绍,深入了解)