【问题标题】:After choosing K-components in PCA how do we find out which components(names of the columns) have algorithm selected?在 PCA 中选择 K 组件后,我们如何找出算法选择了哪些组件(列的名称)?
【发布时间】:2019-10-12 11:59:01
【问题描述】:

我是数据科学的新手,我需要一些帮助来理解 PCA。我知道每一列都构成一个轴,但是当 PCA 完成并且组件减少到某个 k 值时,如何知道选择了哪些列?

【问题讨论】:

  • 这个 python-3.x 怎么样?这里没有python代码,也没有python库的引用。
  • 向我们展示您遇到问题的 scikit-learn 代码。
  • 我没有遇到代码问题,在 PCA 之后我无法理解它所占用的所有列。例如:假设我们有 4 列 a、b、c 和 d。我们发现在 PCA 之后只有 2 个组件能够解释 95% 的数据。那么哪些列是指这些组件?

标签: python-3.x k-means pca sklearn-pandas


【解决方案1】:

在 PCA 中,您可以计算协方差矩阵的特征向量和特征值来识别主成分。
主成分是构造为初始变量的线性组合或混合的新变量。这些组合以新变量(即主成分)不相关的方式完成,并且初始变量中的大部分信息被压缩或压缩到第一个成分中。因此,这个想法是 10 维数据为您提供 10 个主成分,但 PCA 尝试将最大可能信息放在第一个成分中,然后将最大剩余信息放在第二个成分中,依此类推。

从几何上讲,主成分代表解释最大方差的数据方向,也就是说,捕获数据大部分信息的线。 s 主成分与数据中的变量一样多,主成分的构造方式使得第一个主成分占数据集中可能的最大方差。

根据我的经验,如果特征值的累积和的百分比可以超过 80% 或 90%,则转换后的向量将足以表示旧向量。

为了解释清楚,让我们使用@Nicholas M 的代码。

import numpy as np
from sklearn.decomposition import PCA
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
pca = PCA(n_components=1)
pca.fit(X)  

您必须增加 n_components 才能获得 %90 方差。

输入:

pca.explained_variance_ratio_

输出:

array([0.99244289])

在这个例子中,只需 1 个组件就足够了。

我希望一切都清楚明白。

资源:
https://towardsdatascience.com/pca-using-python-scikit-learn-e653f8989e60 https://towardsdatascience.com/a-step-by-step-explanation-of-principal-component-analysis-b836fb9c97e2

【讨论】:

  • 组件和列之间的关系如何?这如何导致降维?
  • 在 PCA 中,我们不仅减小尺寸,还更改尺寸。正如我提到的,10 维数据为您提供 10 个主成分,这些成分是我们的新列,但有一个区别,新列在第一列中包含最大可能的信息。
【解决方案2】:

您必须查看 PCA 的特征向量。每个特征值都是每个“新轴”的“力”,特征向量提供原始特征的线性组合。

使用 scikit-learn,您应该查看属性 components_

import numpy as np
from sklearn.decomposition import PCA
X = np.array([[-1, -1], [-2, -1], [-3, -2], [1, 1], [2, 1], [3, 2]])
pca = PCA(n_components=2)
pca.fit(X)  
print(pca.components_) # << eigenvector matrix

【讨论】:

  • 组件和列是如何关联的?这如何导致降维?
  • 降维来自于您在组件矩阵中保留的列数。列根据它们的相对特征值排序(按降序排列)。覆盖的方差百分比等于保留的特征值之和/所有特征值之和。如果您有 10 个特征,components_ 将是一个 10x10 矩阵。如果您只需要前 4 个分量来获得 80% 的方差,则只需保留前 4 列即可获得 10x4 矩阵。
  • 我们如何确定前 4 个组件仅代表前 4 列?
  • 实际上,这 4 个组件不仅仅代表前四列,而是代表所有数据,因为您的新列(原理组件)承载了第一列上的大部分数据。如果您担心它的原因,您可以查看towardsdatascience.com/…
猜你喜欢
  • 2021-08-20
  • 2020-10-14
  • 2019-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 2016-06-10
相关资源
最近更新 更多