在Python中进行主成分分析(PCA)的步骤如下:
导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
准备数据
加载数据集
iris = load_iris()
X = iris.data
y = iris.target
数据标准化
计算均值和标准差
X_mean = np.mean(X, axis=0)
X_std = np.std(X, axis=0)
标准化数据
X_normalized = (X - X_mean) / X_std
计算协方差矩阵
计算协方差矩阵
cov_matrix = np.cov(X_normalized, rowvar=False)
特征值分解
计算协方差矩阵的特征值和特征向量
eig_vals, eig_vecs = np.linalg.eig(cov_matrix)
选择主成分
选择最大的k个特征值对应的特征向量
k = 2 选择降维后的维度
idx = eig_vals.argsort()[::-1] 降序排列特征值索引
eig_pairs = [(np.abs(eig_vals[i]), eig_vecs[:,i]) for i in idx]
eig_pairs.sort(key=lambda x: x, reverse=True) 按特征值大小排序
matrix_w = np.hstack((eig_pairs.reshape(X_normalized.shape,1), eig_pairs.reshape(X_normalized.shape,1))) 构建变换矩阵
投影数据
将原始数据投影到选定的主成分上
X_pca = X_normalized.dot(matrix_w)
可视化结果(可选):
可视化降维后的数据
plt.scatter(X_pca[y == 0, 0], X_pca[y == 0, 1], color='red', label='Iris-setosa')
plt.scatter(X_pca[y == 1, 0], X_pca[y == 1, 1], color='blue', label='Iris-versicolor')
plt.scatter(X_pca[y == 2, 0], X_pca[y == 2, 1], color='green', label='Iris-virginica')
plt.xlabel('First Principal Component')
plt.ylabel('Second Principal Component')
plt.legend()
plt.show()
以上步骤展示了如何在Python中手动实现主成分分析。在实际应用中,可以使用`sklearn.decomposition.PCA`类简化这个过程,该类内部实现了上述大部分步骤,并且通常更优化、更易于使用。
使用sklearn的PCA类进行降维
pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_normalized)
以上代码展示了如何使用`sklearn`库中的`PCA`类进行主成分分析。