Python编写PCA 完整算法,实现城市排名数据的降维
时间: 2024-01-21 18:20:10 浏览: 23
PCA(Principal Component Analysis)是一种常用的降维算法,可以将高维数据映射到低维空间中,从而减少特征数量。下面是Python编写PCA算法的完整代码,以实现城市排名数据的降维:
```python
import numpy as np
# 定义PCA类
class PCA(object):
def __init__(self, n_components):
self.n_components = n_components # 降维后的维度
# 训练数据
def fit(self, X):
# 求均值
self.mean_ = np.mean(X, axis=0)
# 中心化
X_centered = X - self.mean_
# 求协方差矩阵
cov_matrix = np.cov(X_centered, rowvar=False)
# 求特征值和特征向量
eig_values, eig_vectors = np.linalg.eig(cov_matrix)
# 排序,选择前n_components个特征向量
eig_pairs = [(np.abs(eig_values[i]), eig_vectors[:,i]) for i in range(len(eig_values))]
eig_pairs.sort(reverse=True)
self.components_ = np.array([eig_pair[1] for eig_pair in eig_pairs[:self.n_components]])
# 转换数据
def transform(self, X):
X_centered = X - self.mean_
return np.dot(X_centered, self.components_.T)
# 加载数据
data = np.loadtxt("city_ranking.csv", delimiter=",", skiprows=1)
# 选择需要降维的特征
X = data[:,1:]
# 实例化PCA对象
pca = PCA(n_components=2)
# 训练数据
pca.fit(X)
# 转换数据
X_transformed = pca.transform(X)
# 输出降维后的数据
print(X_transformed)
```
以上代码中,我们定义了一个PCA类,包含fit()和transform()方法,用于训练数据和转换数据。在fit()方法中,我们先求出数据的均值,然后中心化数据,接着求出协方差矩阵和特征值、特征向量,最后选择前n_components个特征向量。在transform()方法中,我们先中心化数据,然后将其乘以前n_components个特征向量的转置矩阵,得到降维后的数据。最后,我们加载了城市排名数据,选择需要降维的特征,实例化PCA对象,训练数据并转换数据,输出降维后的结果。