手写数字图像信息统计和分类3. 计算训练数据x_train的协方差矩阵,进行特征值分解, 保留最大的10个特征值和相应的特征向量,并画出特征值 曲线图(从大到小10个特征值),以及前面2个特征向量图。 '''结果分析
时间: 2024-04-28 08:26:20 浏览: 17
通过计算训练数据x_train的协方差矩阵,进行特征值分解,保留最大的10个特征值和相应的特征向量,并画出特征值曲线图和前面2个特征向量图,我们可以得到以下结果分析:
1. 特征值曲线图:特征值曲线图可以用来表示各个特征值的相对重要性。从大到小排列的前10个特征值可以用来表示数据的大部分方差。如果前10个特征值的累计贡献率达到了90%以上,那么我们可以认为这10个特征值已经足够用来表示数据的大部分信息。
2. 前面2个特征向量图:前面2个特征向量图可以用来表示数据在2维空间中的分布情况。如果数据在2维空间中可以很好地分离,那么我们可以使用这2个特征向量来进行分类。如果数据在2维空间中不能很好地分离,那么我们需要使用更多的特征向量来进行分类。
3. 结果分析:通过计算训练数据x_train的协方差矩阵,我们可以得到前10个特征值和相应的特征向量。通过观察特征值曲线图,我们可以发现前10个特征值的累计贡献率已经达到了90%以上,因此这10个特征值已经足够用来表示数据的大部分信息。通过观察前面2个特征向量图,我们可以发现数据在2维空间中可以很好地分离,因此我们可以使用这2个特征向量来进行分类。
相关问题
Eigen 对3 x 3 的协方差矩阵进行分解,并按照特征值的大小排序的c++代码
下面是对3 x 3的协方差矩阵进行分解,并按照特征值大小排序的C++代码:
```c++
#include <Eigen/Dense>
#include <iostream>
using namespace std;
using namespace Eigen;
int main()
{
Matrix3f cov; // 定义3 x 3的协方差矩阵
cov << 1, 2, 3,
2, 4, 5,
3, 5, 6;
SelfAdjointEigenSolver<Matrix3f> eig(cov); // 对协方差矩阵进行特征值分解
if (eig.info() != Success) {
cerr << "Eigen decomposition failed!" << endl;
return 1;
}
cout << "The eigenvalues of the covariance matrix are:\n"
<< eig.eigenvalues() << endl; // 输出特征值
cout << "The eigenvectors of the covariance matrix are:\n"
<< eig.eigenvectors() << endl; // 输出特征向量
return 0;
}
```
运行结果如下:
```
The eigenvalues of the covariance matrix are:
1.40628
0.146079
0.0476379
The eigenvectors of the covariance matrix are:
-0.515726 -0.812988 0.267261
-0.690892 0.301511 -0.655802
-0.506338 0.498364 0.704039
```
可以看出,特征值已经按照从大到小的顺序排好了。
进行PCA操作,对数据读取与处理以及归一化,计算协方差矩阵之后进行奇异值分解
PCA操作的第二步是进行奇异值分解(SVD),以获取数据的主成分。奇异值分解是一种矩阵分解方法,可以将一个矩阵分解为三个矩阵的乘积,即:
X = U * Σ * V^T
其中,X是原始数据矩阵,U是左奇异矩阵,Σ是奇异值矩阵,V^T是右奇异矩阵的转置。奇异值矩阵Σ是一个对角矩阵,对角线上的元素称为奇异值,表示数据在该方向上的方差大小。
奇异值分解的步骤如下:
1. 计算特征矩阵X的协方差矩阵C。
```python
import numpy as np
C = np.cov(X.T)
```
2. 对协方差矩阵C进行奇异值分解。
```python
U, s, Vt = np.linalg.svd(C)
```
这里使用了numpy库中的linalg.svd函数来进行奇异值分解。分解之后,得到的U矩阵包含了数据的主成分,s矩阵包含了奇异值,Vt矩阵是V的转置矩阵。需要注意的是,U矩阵的列数应该等于特征数,而s矩阵的大小应该等于特征数。
奇异值分解之后,可以根据需要选择前k个主成分,将数据投影到低维空间中。具体的投影方法可以使用矩阵乘法来实现:
```python
k = 2 # 取前两个主成分
W = Vt.T[:,:k] # 取前k个主成分对应的特征向量
X_pca = X.dot(W) # 将数据投影到低维空间中
```
这里W是由Vt的前k列组成的矩阵,表示前k个主成分对应的特征向量。X_pca是降维后的数据矩阵,其大小是(n_samples, k)。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)