1_PCA.pdf

preview
需积分: 0 1 下载量 135 浏览量 更新于2024-04-13 收藏 471KB PDF 举报
根据提供的信息,我们可以深入探讨主成分分析(PCA)这一统计方法的基本原理、应用场景及其实现过程。PCA是一种广泛应用于数据预处理的技术,特别是在减少数据维度的同时保持数据的主要特征方面非常有效。 ### PCA基本原理 主成分分析的目标是通过将原始高维数据映射到低维空间来降低数据的复杂性,同时尽可能保留数据中的重要信息。PCA通过以下几个关键步骤实现: #### 数据标准化 在执行PCA之前,通常需要对数据进行标准化处理。这是因为PCA是基于协方差矩阵的特征值分解来寻找主成分的,而不同尺度的变量会对协方差矩阵产生不同的影响,进而影响到主成分的选择。因此,首先需要计算每个特征的均值和标准差,并利用这些统计量对数据进行标准化处理,确保每个特征具有相同的权重。 #### 计算协方差矩阵 标准化后的数据用于构建协方差矩阵。协方差矩阵反映了各变量之间的线性关系强度,对于理解数据结构至关重要。通过协方差矩阵可以了解哪些特征之间存在较强的关联性,哪些特征相对独立。 #### 特征值与特征向量 计算协方差矩阵的特征值和对应的特征向量。特征值越大,其对应的特征向量所代表的方向包含的信息越多。特征向量指明了数据分布的主要方向,而特征值则表示了沿着该方向的数据变异程度。 #### 贡献率与累计贡献率 贡献率指的是每个特征值相对于总特征值之和的比例,而累计贡献率则是特征值贡献率的累加。通常选择那些累计贡献率达到一定阈值(如85%)的特征值所对应的特征向量作为主成分,因为它们包含了原始数据大部分的信息。 ### PCA算法实现 接下来,我们通过具体的代码示例来详细了解PCA算法的实现过程。假设我们有一份关于鸢尾花的数据集`iris.xlsx`,下面的Python代码展示了如何使用PCA对该数据集进行降维处理。 ```python # 导入必要的库 import numpy as np import pandas as pd from scipy import linalg import matplotlib.pyplot as plt import seaborn as sns # 读取数据 df = pd.read_excel('C:\\Users\\chy31\\Desktop\\iris.xlsx', usecols='B:E') x = df.to_numpy() # 数据标准化 X = (x - np.mean(x, axis=0)) / np.std(x, ddof=1, axis=0) # 计算协方差矩阵 R = np.cov(X.T) # 计算特征值和特征向量 eigenvalues, eigenvectors = linalg.eigh(R) # 特征值和特征向量的排序 eigenvalues = eigenvalues[::-1] eigenvectors = eigenvectors[:, ::-1] # 贡献率 contribution_rate = eigenvalues / sum(eigenvalues) # 累计贡献率 cum_contribution_rate = np.cumsum(contribution_rate) # 选取主成分 k = [i for i in range(len(cum_contribution_rate)) if cum_contribution_rate[i] < 0.85] selectVec = np.matrix(eigenvectors.T[k]).T # 应用主成分变换 finalData = np.dot(X, selectVec) # 结果展示 print("特征值为:") print(eigenvalues) print("贡献率为:") print(contribution_rate) print("累计贡献率为:") print(cum_contribution_rate) print("与特征值对应的特征向量矩阵为:") print(eigenvectors) print("主成分对应的特征向量矩阵:") print(selectVec) print("主成分:") print(finalData) # 可视化结果 plt.figure(figsize=(14, 14)) sns.heatmap(selectVec, annot=True, cmap="BuPu") plt.title("Factor Analysis", fontsize="xx-large") plt.ylabel("Sepal Width", fontsize="xx-large") plt.show() plt.scatter(range(1, df.shape[1] + 1), eigenvalues) plt.plot(range(1, df.shape[1] + 1), eigenvalues) plt.title("Scree Plot") plt.xlabel("Factors") plt.ylabel("Eigenvalue") plt.grid() plt.show() ``` ### 总结 通过以上步骤,我们不仅实现了PCA算法的具体应用,还对数据进行了有效的降维处理,使得后续的数据分析或机器学习任务更加高效。需要注意的是,PCA虽然能够大幅度减少数据维度,但同时也可能会损失部分细节信息,因此在实际应用中需要根据具体需求权衡是否采用此方法。此外,PCA的应用远不止于此,它还可以用于图像压缩、异常检测等领域。
身份认证 购VIP最低享 7 折!
30元优惠券