利用Python编写PCA算法 实现城市排名数据的降维
时间: 2023-08-06 10:01:44 浏览: 21
PCA是一种常用的降维算法,可以将高维数据映射到低维空间,同时保留数据的主要特征。
下面是用Python实现PCA算法的步骤,以城市排名数据为例:
1.导入数据和必要的库
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data = pd.read_csv('city_rank.csv')
```
2.数据预处理
```python
# 删除无用列
data.drop(['city'], axis=1, inplace=True)
# 数据标准化
mean_vals = np.mean(data, axis=0)
std_val = np.std(data)
data = (data - mean_vals) / std_val
# 计算协方差矩阵
cov_mat = np.cov(data.T)
```
3.计算特征值和特征向量
```python
eig_vals, eig_vecs = np.linalg.eig(cov_mat)
# 对特征值进行排序
sort_idx = eig_vals.argsort()[::-1]
eig_vals = eig_vals[sort_idx]
eig_vecs = eig_vecs[:, sort_idx]
```
4.降维
```python
# 取前两个特征向量
eig_vecs = eig_vecs[:, :2]
# 将数据投影到新的空间中
new_data = data.dot(eig_vecs)
```
5.可视化降维后的数据
```python
plt.scatter(new_data[:, 0], new_data[:, 1])
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.title('City Rank Data')
plt.show()
```
完整代码如下:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 导入数据
data = pd.read_csv('city_rank.csv')
# 删除无用列
data.drop(['city'], axis=1, inplace=True)
# 数据标准化
mean_vals = np.mean(data, axis=0)
std_val = np.std(data)
data = (data - mean_vals) / std_val
# 计算协方差矩阵
cov_mat = np.cov(data.T)
# 计算特征值和特征向量
eig_vals, eig_vecs = np.linalg.eig(cov_mat)
# 对特征值进行排序
sort_idx = eig_vals.argsort()[::-1]
eig_vals = eig_vals[sort_idx]
eig_vecs = eig_vecs[:, sort_idx]
# 取前两个特征向量
eig_vecs = eig_vecs[:, :2]
# 将数据投影到新的空间中
new_data = data.dot(eig_vecs)
# 可视化降维后的数据
plt.scatter(new_data[:, 0], new_data[:, 1])
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.title('City Rank Data')
plt.show()
```
运行完毕后,就可以看到降维后的城市排名数据的散点图。
相关推荐















