当前位置: 首页 > 面试题库 >

使用sklearn在PCA中恢复解释名称_variance_ratio_的特征名称

蒋骏
2023-03-14
问题内容

我正在尝试从使用scikit-learn完成的PCA中恢复, 这些 功能被选择为 相关

IRIS数据集的经典示例。

import pandas as pd
import pylab as pl
from sklearn import datasets
from sklearn.decomposition import PCA

# load dataset
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)

# normalize data
df_norm = (df - df.mean()) / df.std()

# PCA
pca = PCA(n_components=2)
pca.fit_transform(df_norm.values)
print pca.explained_variance_ratio_

这返回

In [42]: pca.explained_variance_ratio_
Out[42]: array([ 0.72770452,  0.23030523])

如何恢复数据集中哪两个特征允许这两个已解释的方差? 换句话说,我如何在iris.feature_names中获取此功能的索引?

In [47]: print iris.feature_names
['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)']

在此先感谢您的帮助。


问题答案:

此信息包含在pca属性中:components_。如文档中所述,pca.components_输出一个数组[n_components, n_features],因此要了解组件如何与不同功能线性相关,您必须:

注意 :每个系数代表特定的一对零件和特征之间的相关性

import pandas as pd
import pylab as pl
from sklearn import datasets
from sklearn.decomposition import PCA

# load dataset
iris = datasets.load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)

# normalize data
from sklearn import preprocessing
data_scaled = pd.DataFrame(preprocessing.scale(df),columns = df.columns)

# PCA
pca = PCA(n_components=2)
pca.fit_transform(data_scaled)

# Dump components relations with features:
print(pd.DataFrame(pca.components_,columns=data_scaled.columns,index = ['PC-1','PC-2']))

      sepal length (cm)  sepal width (cm)  petal length (cm)  petal width (cm)
PC-1           0.522372         -0.263355           0.581254          0.565611
PC-2          -0.372318         -0.925556          -0.021095         -0.065416

重要提示:
作为附带说明,请注意PCA符号不会影响其解释,因为该符号不会影响每个组件中包含的差异。仅形成PCA尺寸的特征的相对符号很重要。实际上,如果再次运行PCA代码,则PCA尺寸可能会与符号相反。对此有一个直观的认识,请考虑向量及其在3-D空间中的负数-
两者本质上都表示空间中的相同方向。检查此帖子以获取更多参考。



 类似资料:
  • 我在Hadoop权威指南中讨论了高可用性, 在这种情况下,若要从失败的namenode中恢复,管理员将使用其中一个文件系统元数据副本启动一个新的主namenode,并配置Datanode和客户端以使用这个新的namenode。新的namenode无法为请求提供服务,除非它 (i)将其名称空间映像加载到存储器中, 以下是我的问题:- a.)“文件系统元数据副本”是指在NFS中备份文件系统或以辅助名称

  • 问题内容: 注释如何在Jersey中工作,以将过滤器应用于特定的资源方法或资源类? 考虑以下注释: 它是如何工作的? 问题答案: 名称绑定 名称绑定 是一个概念,它允许对JAX-RS运行时说,仅针对特定的资源方法才执行特定的过滤器或拦截器。当过滤器或拦截器仅限于特定资源方法时,我们说它是 名称绑定的 。没有这种限制的过滤器和拦截器称为 global 。 定义名称绑定注释 可以使用注释将过滤器或拦截

  • 我已经使用Pycharm多年了,从来没有遇到过任何问题。然而,在最近的PyCharm更新之后,我无法再配置解释器。 另外,每次我创建一个新项目时,它都会在我的项目下创建一个vent目录。当我进入< code >文件/默认设置/项目解释器时,我会看到新的选项。 在此窗口中,您可以配置虚拟环境、conda环境和系统解释器。我假设我应该配置系统解释器。从那里,我将PyCharm指向Mac上的解释器,位于

  • 问题内容: 我用作以下功能选择器。 我还执行以下操作,以调整以下超参数。 但是,我不清楚如何将特征选择()与合并。 编辑: 当我运行@Gambit建议的答案时,出现以下错误: 我可以通过在参数列表中使用来解决上述问题。 我现在的问题是 如何使用所选的特征和参数来验证模型是否可以很好地处理看不见的数据。如何获得并使用进行训练? 如果需要,我很乐意提供更多详细信息。 问题答案: 基本上,您希望在选择特

  • 我刚刚发现了一种我无法理解的Spring的行为。我使用的是Spring Boot 1.5。十、 在一个配置类中,我声明了两个不同的bean。 然后,我有一个类,它应该使用名为的bean。 因为我指定了我想要使用注释注入的bean的名称,所以我希望Spring注入名为的bean。但是,在注入过程中实际上使用了名为的bean。 事实证明,问题在于在配置类中声明bean的方法的名称。两者都是colled

  • 注释如何在Jersey中工作,以便对特定的资源方法或资源类应用筛选器? 请考虑以下注释: 它是如何工作的?