初学者指南:掌握PCA主成分分析法

版权申诉
0 下载量 75 浏览量 更新于2024-10-09 收藏 4KB RAR 举报
资源摘要信息:"PCA 主成分分析" 主成分分析(PCA)是一种常用的数据降维技术,它通过正交变换将可能相关的变量转换为线性不相关的变量,这些新的变量被称为主成分。PCA的主要目的是简化数据集,同时尽可能保留原始数据集中的变异性。在许多领域,如模式识别、图像处理和统计分析中,PCA都是一种重要的工具。 ### PCA的基本原理和步骤 1. **中心化数据**:在应用PCA之前,首先需要对数据进行中心化处理,即减去每个变量的平均值,使得数据的中心位于原点。这一步是为了消除不同量纲对分析结果的影响。 2. **协方差矩阵计算**:中心化后的数据,用于计算协方差矩阵。协方差矩阵描述了各个变量之间的线性关系,是PCA分析的基础。 3. **特征分解**:对协方差矩阵进行特征分解,得到特征值和特征向量。特征值的大小代表了对应特征向量方向上的数据分散程度,即数据在该方向上的方差。 4. **选择主成分**:根据特征值的大小,选择前几个最大的特征值对应的特征向量,这些特征向量构成了新的坐标轴,即主成分。通常选择的主成分应该能够解释大部分的方差(例如90%以上)。 5. **转换数据**:使用选定的特征向量将原始数据转换到新的空间中,得到的数据就是降维后的主成分数据。 ### PCA的应用场景 1. **数据压缩**:通过减少数据的维度,可以减少存储空间和计算资源的需求。 2. **数据可视化**:在高维数据中,PCA可以降低维度至二维或三维,方便数据可视化。 3. **特征提取**:在机器学习中,PCA可以用于提取最重要的特征,提高模型的效率。 4. **去除噪声**:在降维的同时,PCA也可以起到去除噪声的作用,因为它倾向于选择数据的“信号”部分。 5. **信号处理**:在信号处理领域,PCA可以用于去相关,突出信号的主要成分。 ### PCA的实现方法 在实际应用中,PCA可以通过多种方式实现,包括但不限于: - **数学软件**:如MATLAB、Mathematica等,提供了现成的PCA函数或命令。 - **统计软件**:如R语言、SPSS等,这些软件中有专门的PCA模块或包。 - **编程语言**:在Python、Java等编程语言中,通过实现PCA算法或使用现有的库(如Python中的NumPy、scikit-learn库)来完成PCA分析。 ### PCA的局限性 尽管PCA非常有用,但它也有局限性。例如,PCA假设主成分之间是正交的,这对于某些数据集可能不成立。另外,PCA不适用于处理非线性结构的数据,对于这类数据,可能需要使用核PCA或其他非线性降维技术。 ### 结语 PCA是一个强大的工具,对于数据科学家和工程师而言,掌握PCA的基本原理和应用方法是非常重要的。尽管PCA不能解决所有数据处理的问题,但它提供了一种有效的手段来分析和理解复杂数据集中的模式和关系。对于初学者来说,了解PCA的原理和操作步骤,将有助于更好地理解数据,并在实际工作中取得更好的结果。

import pandas as pd import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from mpl_toolkits.mplot3d import Axes3D from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler data=pd.read_csv('H:/analysis_results/mean_HN.csv') data.head() x=data.iloc[:,1:7] y=data.iloc[:,6] scaler=StandardScaler() scaler.fit(x) x_scaler=scaler.transform(x) print(x_scaler.shape) pca=PCA(n_components=3) x_pca=pca.fit_transform(x_scaler) print(x_pca.shape) #查看各个主成分对应的方差大小和占全部方差的比例 #可以看到前2个主成分已经解释了样本分布的90%的差异了 print('explained_variance_:',pca.explained_variance_) print('explained_variance_ratio_:',pca.explained_variance_ratio_) print('total explained variance ratio of first 6 principal components:',sum(pca.explained_variance_ratio_)) #将分析的结果保存成字典 result={ 'explained_variance_:',pca.explained_variance_, 'explained_variance_ratio_:',pca.explained_variance_ratio_, 'total explained variance ratio:',np.sum(pca.explained_variance_ratio_)} df=pd.DataFrame.from_dict(result,orient='index',columns=['value']) df.to_csv('H:/analysis_results/Cluster analysis/pca_explained_variance_HN.csv') #可视化各个主成分贡献的方差 #fig1=plt.figure(figsize=(10,10)) #plt.rcParams['figure.dpi'] = 300#设置像素参数值 plt.rcParams['path.simplify'] = False#禁用抗锯齿效果 plt.figure() plt.plot(np.arange(1,4),pca.explained_variance_,color='blue', linestyle='-',linewidth=2) plt.xticks(np.arange(1, 4, 1))#修改X轴间隔为1 plt.title('PCA_plot_HN') plt.xlabel('components_n',fontsize=16) plt.ylabel('explained_variance_',fontsize=16) #plt.savefig('H:/analysis_results/Cluster analysis/pca_explained_variance_HN.png') plt.show(),想要将得出的结果value为3个标签PC1,PC2,PC3,如何修改

2023-06-10 上传
2023-06-10 上传