数据降维方法
PCA
**主成分分析(Principal Component Analysis,PCA)**是一种常用的数据降维方法。它通过线性变换将原始数据变换到一个新的坐标系中,使得第一个坐标(第一主成分)具有最大的方差,第二个坐标(第二主成分)具有次大的方差,以此类推。PCA的目的是从高维数据中提取出最重要的特征,通过保留最重要的主成分来实现数据的降维,同时尽可能保留原始数据的结构。
PCA算法
- 数据标准化
为了消除不同特征之间的量纲影响,通常需要对数据进行标准化处理,使得每个特征的均值为0,标准差为1。
标准化公式:
x ′ = x − μ σ , x' = \frac{x - \mu}{\sigma}, x′=σx−μ,
其中 μ \mu μ为特征均值, σ \sigma σ为特征标准差。
- 计算协方差矩阵
协方差矩阵描述了数据特征之间的相关性。对于标准化后的数据,协方差矩阵可以通过计算特征之间的协方差得到。
协方差公式:
c o v ( X , Y ) = 1 n − 1 ∑ i = 1 n ( X i − μ X ) ( Y i − μ Y ) , cov(X,Y) = \frac{1}{n-1}\sum_{i=1}^{n}(X_i - \mu_X)(Y_i - \mu_Y), cov(X,Y)=n−11i=1∑n(Xi−μX)(Yi−μY),
标准化后简化为特征向量的内积平均。
- 计算特征值和特征向量
求解协方差矩阵的特征值和对应的特征向量。特征值表示对应特征向量方向上的数据方差大小,特征向量给出了数据的主要分布方向(即主成分)。
- 选择主成分
根据特征值的大小,选择前 k k k个最大的特征值对应的特征向量,这些特征向量构成了新的 k k k维特征空间。特征值的累计贡献率(如前 k k k个特征值之和占总特征值之和的比例)通常作为选择 k k k的依据(如累计贡献率≥85%)。
- 变换数据
将原始数据投影到新的特征空间中,得到降维后的数据。投影过程通过原始数据矩阵与选定的特征向量矩阵相乘实现。
代码展示
import pandas as pd
from sklearn import datasets
# 加载鸢尾花数据集
iris = datasets.load_iris()
# 将数据集转换为DataFrame
iris_df = pd.DataFrame(
data=iris.data, # 特征数据
columns=iris.feature_names # 特征名称
)
iris_df.info()
iris.data_std = (iris.data - iris.data.mean(axis=0)) / iris.data.std(axis=0)
from sklearn.decomposition import PCA
# 设置PCA参数,这里我们选择保留90%的方差
pca = PCA(n_components=0.9)
iris.data_pca = pca.fit_transform(iris.data_std)
# 可视化原始数据和降维后的数据
import matplotlib.pyplot as plt
plt.figure(figsize=(12, 6))
plt.scatter(iris.data[:, 0], iris.data[:, 1], c=iris.target, edgecolor='k', alpha=0.7)
plt.xlabel('Sepal Length')
plt.ylabel('Sepal Width')
plt.title('Original Data')
plt.show()
plt.figure(figsize=(12, 6));
plt.scatter(iris.data_pca[:, 0], iris.data_pca[:, 1], c=iris.target, edgecolor='k', alpha=0.7)
plt.xlabel('First Principal Component')
plt.ylabel('Second Principal Component')
plt.title('Data after PCA')
plt.show()