PCA主成分分析 1、利用Python编写PCA算法,实现城市排名数据的降维; 2、通过调用Sklearn包中的PCA算法,实现城市排名数据的降维
时间: 2024-01-22 18:17:19 浏览: 212
1. 利用Python编写PCA算法,实现城市排名数据的降维:
假设我们有一个城市排名的数据集,其中包含了10个城市的10个指标,可以采用以下步骤进行PCA降维:
Step 1: 数据预处理
首先,我们需要对数据进行标准化处理,即将每个指标都减去其均值,然后再除以其标准差,以保证不同指标之间的量纲一致。
Step 2: 计算协方差矩阵
接下来,我们需要计算协方差矩阵。协方差矩阵是一个对称矩阵,其(i,j)元素表示第i个指标和第j个指标之间的协方差。可以采用以下公式进行计算:
cov(X,Y) = E[(X - E[X])(Y - E[Y])] = E[XY] - E[X]E[Y]
其中,E表示期望值。可以使用numpy库中的cov函数进行计算。
Step 3: 计算特征值和特征向量
协方差矩阵的特征值和特征向量可以通过numpy库中的eig函数计算得到。
Step 4: 选择主成分
根据特征值的大小选择前k个主成分,其中k是我们想要降维到的维度。
Step 5: 计算降维后的数据
将原始数据投影到选定的主成分上,即可得到降维后的数据。
下面是Python代码实现:
``` python
import numpy as np
# 原始数据集
X = np.array([
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
[2, 4, 6, 8, 10, 1, 3, 5, 7, 9],
[9, 8, 7, 6, 5, 4, 3, 2, 1, 10],
[5, 6, 4, 7, 3, 8, 2, 9, 1, 10],
[1, 3, 5, 7, 9, 2, 4, 6, 8, 10],
[10, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[5, 6, 7, 8, 9, 10, 1, 2, 3, 4],
[1, 3, 2, 5, 4, 7, 6, 9, 8, 10],
[10, 8, 9, 7, 6, 4, 5, 3, 2, 1]])
# 数据标准化
X = (X - np.mean(X, axis=0)) / np.std(X, axis=0)
# 计算协方差矩阵
cov_mat = np.cov(X.T)
# 计算特征值和特征向量
eig_vals, eig_vecs = np.linalg.eig(cov_mat)
# 选择前两个主成分
n_components = 2
# 计算降维后的数据
X_pca = X.dot(eig_vecs[:, :n_components])
print(X_pca)
```
2. 通过调用Sklearn包中的PCA算法,实现城市排名数据的降维:
Sklearn是一个常用的Python机器学习库,其中包含了PCA算法的实现。可以采用以下代码进行调用:
``` python
from sklearn.decomposition import PCA
# 原始数据集
X = np.array([
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1],
[2, 4, 6, 8, 10, 1, 3, 5, 7, 9],
[9, 8, 7, 6, 5, 4, 3, 2, 1, 10],
[5, 6, 4, 7, 3, 8, 2, 9, 1, 10],
[1, 3, 5, 7, 9, 2, 4, 6, 8, 10],
[10, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[5, 6, 7, 8, 9, 10, 1, 2, 3, 4],
[1, 3, 2, 5, 4, 7, 6, 9, 8, 10],
[10, 8, 9, 7, 6, 4, 5, 3, 2, 1]])
# 数据标准化
X = (X - np.mean(X, axis=0)) / np.std(X, axis=0)
# 创建PCA对象
pca = PCA(n_components=2)
# 计算降维后的数据
X_pca = pca.fit_transform(X)
print(X_pca)
```
可以看到,Sklearn中的PCA算法与手动编写的PCA算法在结果上是一致的。相比手动编写,Sklearn的PCA算法更加简洁和高效。
阅读全文