主成分分析(PCA)的代码
时间: 2023-05-28 08:04:01 浏览: 119
这里提供一个使用Python实现主成分分析(PCA)的代码示例:
```
import numpy as np
# 计算协方差矩阵
def calc_covariance_matrix(X):
n_samples = np.shape(X)[0]
covariance_matrix = (1 / (n_samples - 1)) * (X - X.mean(axis=0)).T.dot(X - X.mean(axis=0))
return np.array(covariance_matrix)
# 计算特征值和特征向量
def calc_eig(covariance_matrix):
eigen_values, eigen_vectors = np.linalg.eig(covariance_matrix)
return eigen_values, eigen_vectors
# 选择前k个特征向量
def select_top_k_eig(eigen_values, eigen_vectors, k):
sorted_eigen_values_indices = np.argsort(eigen_values)[::-1]
top_k_eigen_vectors = eigen_vectors[:, sorted_eigen_values_indices[:k]]
return top_k_eigen_vectors
# 计算降维后的数据
def transform_data(X, top_k_eigen_vectors):
transformed_data = X.dot(top_k_eigen_vectors)
return transformed_data
# 主函数
def pca(X, k):
covariance_matrix = calc_covariance_matrix(X)
eigen_values, eigen_vectors = calc_eig(covariance_matrix)
top_k_eigen_vectors = select_top_k_eig(eigen_values, eigen_vectors, k)
transformed_data = transform_data(X, top_k_eigen_vectors)
return transformed_data
```
使用这个PCA函数,输入数据X和降维后的维度k,即可得到降维后的数据。例如:
```
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
k = 1
transformed_data = pca(X, k)
print(transformed_data)
```
输出结果为:
```
[[-3.16227766]
[-1. ]
[ 1.16227766]
[ 3. ]]
```
这里的输出结果表示将原始数据X从二维降到一维后得到的新数据。