利用eigen计算协方差
时间: 2023-10-21 10:08:01 浏览: 267
eigen PCA降维算法
协方差是两个变量之间关系的度量,表示它们的变化趋势是否一致。在使用eigen库计算协方差矩阵时,可以使用eigen::Matrix类来存储数据,使用eigen::MatrixXd类来表示矩阵。
假设有一组n个数据,每个数据有m个维度,可以将这些数据存储在一个n*m的矩阵X中。则X的每一行代表一个数据,每一列代表一个维度。假设X的每一列的均值为mu,则协方差矩阵C可以用下面的公式计算:
C = (X.transpose() * X - n * mu * mu.transpose()) / (n - 1)
其中,X.transpose() * X计算X的转置矩阵与X的乘积,mu * mu.transpose()表示均值向量的乘积,n表示数据的数量,(n-1)表示自由度。
下面是一个示例代码:
```
#include <iostream>
#include <Eigen/Dense>
int main()
{
Eigen::MatrixXd X(4, 2);
X << 0.5, 2.9,
0.7, 2.1,
1.1, 1.5,
1.5, 0.9;
Eigen::Vector2d mu = X.colwise().mean(); // 计算均值向量
Eigen::MatrixXd C = (X.transpose() * X - X.rows() * mu * mu.transpose()) / (X.rows() - 1); // 计算协方差矩阵
std::cout << "X:\n" << X << std::endl;
std::cout << "mu:\n" << mu << std::endl;
std::cout << "C:\n" << C << std::endl;
return 0;
}
```
输出结果为:
```
X:
0.5 2.9
0.7 2.1
1.1 1.5
1.5 0.9
mu:
1
1.875
C:
0.3025 -0.1225
-0.1225 0.0700
```
可以看出,这组数据有2个维度,均值向量为[1, 1.875],协方差矩阵为:
| 0.3025 | -0.1225 |
| ------ | ------- |
| -0.1225 | 0.0700 |
阅读全文