一文读懂【主成分分析(PCA)】 |
您所在的位置:网站首页 › 啥叫主c › 一文读懂【主成分分析(PCA)】 |
主成分分析(PCA,Principal Component Analysis)是一种数学降维方法,其核心在于通过正交变换将一组可能线性相关的变量转换为一组线性不相关的新变量,被称为主成分。这一过程旨在在更小的维度下展示数据的特征,通过新变量以更简洁、高效的方式表达原始数据的信息。 主成分是原始变量的线性组合,其数量不多于原始变量的个数。这组新的观测数据实质上是原始数据的一种变换,虽然其含义与原始数据不同,但却包含了原始数据的大部分特征,而且维度较低,便于进一步的分析。在空间上,可以将PCA理解为将原始数据投射到一个新的坐标系统,其中第一主成分对应第一坐标轴,表示了原始数据中多个变量通过某种变换得到的新变量的变化范围。类似地,第二主成分对应第二坐标轴,代表了第二个新变量的变化范围。 投射的方式有很多种,为了最大限度地保留对原始数据的解释,通常会运用最大方差理论或最小损失理论。这意味着第一主成分具有最大的方差或变异数,即能够尽量多地解释原始数据的差异。随后的每个主成分都与前面的主成分正交(夹角为90°),并且具有仅次于前一主成分的最大方差。这种正交性质使得每个主成分都提供了不同的信息,避免了冗余,从而实现了高效的降维操作。 主成分分析(PCA,Principal Component Analysis)是一种数学降维方法,其核心在于通过正交变换将一组可能线性相关的变量转换为一组线性不相关的新变量,被称为主成分。这一过程旨在在更小的维度下展示数据的特征,通过新变量以更简洁、高效的方式表达原始数据的信息。 主成分是原始变量的线性组合,其数量不多于原始变量的个数。这组新的观测数据实质上是原始数据的一种变换,虽然其含义与原始数据不同,但却包含了原始数据的大部分特征,而且维度较低,便于进一步的分析。在空间上,可以将PCA理解为将原始数据投射到一个新的坐标系统,其中第一主成分对应第一坐标轴,表示了原始数据中多个变量通过某种变换得到的新变量的变化范围。类似地,第二主成分对应第二坐标轴,代表了第二个新变量的变化范围。 投射的方式有很多种,为了最大限度地保留对原始数据的解释,通常会运用最大方差理论或最小损失理论。这意味着第一主成分具有最大的方差或变异数,即能够尽量多地解释原始数据的差异。随后的每个主成分都与前面的主成分正交(夹角为90°),并且具有仅次于前一主成分的最大方差。这种正交性质使得每个主成分都提供了不同的信息,避免了冗余,从而实现了高效的降维操作。 其工作原理涉及以下关键步骤: 1、数据标准化: 首先,对原始数据进行标准化处理,确保每个变量具有相似的尺度。这是因为PCA对不同尺度的变量敏感,标准化能够使所有变量以相同的比例参与分析。 2、构建协方差矩阵: 基于标准化后的数据,计算变量之间的协方差矩阵。协方差矩阵反映了变量之间的线性关系强度和方向。 3、计算特征值和特征向量: 对协方差矩阵进行特征值分解,得到特征值和对应的特征向量。特征值表示协方差矩阵的特征的方差,而特征向量则是与这些特征值相关联的线性变换的方向。 4、选择主成分: 按照特征值的大小排序特征向量,选择前k个特征向量作为主成分,其中k是希望保留的新变量(主成分)的数量。这些主成分对应了原始数据中最大方差的方向。 5、构建新特征空间: 使用选定的主成分构建新的特征空间。每个数据点都可以通过将其投影到这些主成分上来表示,从而实现数据的降维。 6、数据重构: 可以通过将投影后的数据点映射回原始空间,以实现对原始数据的重构。这一步通常用于评估PCA的性能和了解降维后数据的可解释性。 在Python中,实现主成分分析(PCA)通常使用科学计算库NumPy和数据分析库pandas。此外,可以使用scikit-learn库来简化PCA的实现。以下是一个简单的例子: 首先,确保你已经安装了NumPy、pandas和scikit-learn库。你可以使用以下命令安装: pip install numpy pandas scikit-learn然后,可以使用以下Python代码进行PCA: import numpy as np import pandas as pd from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler import matplotlib.pyplot as plt # 生成模拟数据 np.random.seed(42) data = np.random.rand(100, 5) # 生成100个样本,每个样本有5个特征 # 将数据转换为pandas DataFrame columns = ['Feature1', 'Feature2', 'Feature3', 'Feature4', 'Feature5'] df = pd.DataFrame(data, columns=columns) # 标准化数据 scaler = StandardScaler() scaled_data = scaler.fit_transform(df) # 使用scikit-learn进行PCA pca = PCA(n_components=2) # 选择保留的主成分数量 principal_components = pca.fit_transform(scaled_data) # 将主成分数据转换为DataFrame principal_df = pd.DataFrame(data=principal_components, columns=['PC1', 'PC2']) # 输出每个主成分的方差解释比例 explained_variance_ratio = pca.explained_variance_ratio_ print("Explained Variance Ratio:", explained_variance_ratio) # 可视化原始数据和主成分 fig, ax = plt.subplots(1, 2, figsize=(12, 5)) # 原始数据可视化 ax[0].scatter(df['Feature1'], df['Feature2']) ax[0].set_title('Original Data') # 主成分可视化 ax[1].scatter(principal_df['PC1'], principal_df['PC2']) ax[1].set_title('Principal Components') plt.show()此示例中,我们生成了一个包含5个特征的模拟数据集,然后使用PCA将数据降至2维。最后,我们可视化了原始数据和主成分。在实际应用中,你可以替换模拟数据为你自己的数据集。 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |