从sklearn PCA获取特征值和向量

2024-05-17

如何获取 PCA 应用程序的特征值和特征向量?

from sklearn.decomposition import PCA
clf=PCA(0.98,whiten=True)      #converse 98% variance
X_train=clf.fit_transform(X_train)
X_test=clf.transform(X_test)

我找不到它docs http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA.get_precision.

1.我“不能”理解这里的不同结果。

Edit:

def pca_code(data):
    #raw_implementation
    var_per=.98
    data-=np.mean(data, axis=0)
    data/=np.std(data, axis=0)
    cov_mat=np.cov(data, rowvar=False)
    evals, evecs = np.linalg.eigh(cov_mat)
    idx = np.argsort(evals)[::-1]
    evecs = evecs[:,idx]
    evals = evals[idx]
    variance_retained=np.cumsum(evals)/np.sum(evals)
    index=np.argmax(variance_retained>=var_per)
    evecs = evecs[:,:index+1]
    reduced_data=np.dot(evecs.T, data.T).T
    print(evals)
    print("_"*30)
    print(evecs)
    print("_"*30)
    #using scipy package
    clf=PCA(var_per)
    X_train=data.T
    X_train=clf.fit_transform(X_train)
    print(clf.explained_variance_)
    print("_"*30)
    print(clf.components_)
    print("__"*30)
  1. 我希望获得所有特征值和特征向量,而不仅仅是具有收敛条件的约简集。

您的实施

您正在计算的特征向量相关矩阵,即协方差矩阵归一化变量。
data/=np.std(data, axis=0)不是经典 PCA 的一部分,我们只将变量居中。 所以sklearn PCA不具有预先缩放数据的功能.

除此之外,如果我们抽象出您提供的代码未运行这一事实,那么您就走在正确的轨道上;)。 您只会对行/列布局感到困惑。老实说,我认为开始要容易得多X = data.T从此以后只与 X 合作。我在帖子末尾添加了您的代码“已修复”。

获取特征值

您已经注意到,您可以使用以下方式获取特征向量clf.components_.

这样你就有了主要组成部分。它们是特征向量协方差矩阵????ᵀ????。

A way to retrieve the eigenvalues from there is to apply this matrix to each principal components and project the results onto the component. Let v_1 be the first principal component and lambda_1 the associated eigenvalue. We have:
eq and thus: eq2 since eq3. (x, y) the scalar product of vectors x and y.

回到Python你可以这样做:

n_samples = X.shape[0]
# We center the data and compute the sample covariance matrix.
X -= np.mean(X, axis=0)
cov_matrix = np.dot(X.T, X) / n_samples
for eigenvector in pca.components_:
    print(np.dot(eigenvector.T, np.dot(cov_matrix, eigenvector)))

您将获得与特征向量相关的特征值。 好吧,在我的测试中,结果证明它不适用于最后几个特征值,但我将其归因于我缺乏数值稳定性方面的技能。

现在那不是best获得特征值的方法,但很高兴知道它们来自哪里。
特征值表示特征向量方向上的方差。所以你可以让他们通过pca.explained_variance_属性:

eigenvalues = pca.explained_variance_

这是一个可重现的示例,它打印您使用每种方法获得的特征值:

import numpy as np
from sklearn.decomposition import PCA
from sklearn.datasets import make_classification


X, y = make_classification(n_samples=1000)
n_samples = X.shape[0]

pca = PCA()
X_transformed = pca.fit_transform(X)

# We center the data and compute the sample covariance matrix.
X_centered = X - np.mean(X, axis=0)
cov_matrix = np.dot(X_centered.T, X_centered) / n_samples
eigenvalues = pca.explained_variance_
for eigenvalue, eigenvector in zip(eigenvalues, pca.components_):    
    print(np.dot(eigenvector.T, np.dot(cov_matrix, eigenvector)))
    print(eigenvalue)

您的原始代码已修复

如果运行它,您会发现这些值是一致的。它们并不完全相等,因为 numpy 和 scikit-learn 在这里没有使用相同的算法。
最主要的是您使用的是相关矩阵而不是协方差,如上所述。另外你还得到了转置来自 numpy 的特征向量这使得它非常混乱。

import numpy as np
from scipy.stats.mstats import zscore
from sklearn.decomposition import PCA

def pca_code(data):
    #raw_implementation
    var_per=.98
    data-=np.mean(data, axis=0)
    # data/=np.std(data, axis=0)
    cov_mat=np.cov(data, rowvar=False)
    evals, evecs = np.linalg.eigh(cov_mat)
    idx = np.argsort(evals)[::-1]
    evecs = evecs[:,idx]
    evals = evals[idx]
    variance_retained=np.cumsum(evals)/np.sum(evals)
    index=np.argmax(variance_retained>=var_per)
    evecs = evecs[:,:index+1]
    reduced_data=np.dot(evecs.T, data.T).T
    print("evals", evals)
    print("_"*30)
    print(evecs.T[1, :])
    print("_"*30)
    #using scipy package
    clf=PCA(var_per)
    X_train=data
    X_train=clf.fit_transform(X_train)
    print(clf.explained_variance_)
    print("_"*30)
    print(clf.components_[1,:])
    print("__"*30)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从sklearn PCA获取特征值和向量 的相关文章

随机推荐

  • C# 数据表来保存表格(无限嵌套)

    我相对较新C 但来自C C 背景 我需要一个类似于的数据类型 类 DataTable 但允许存储的列保存 简单 类型 int float boolean string 以及相同类型的数据 以便一个列可以保存另一个表 该表也具有存储表等的列
  • 用例 - 帮助 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我是编写用例的新手 我听说用例是非技术表达 我有以下任务 我必须为其编写用例 我降低了对你理解的要求 ABC公司的注册客户使用凭据登录系统以检索
  • Wix - 自定义安装目录

    我使用的是 Wix 3 x 用户应该能够选择目标目录 我的Setup wxs目前是这样的 http pastebin com uH1EjbDQ http pastebin com uH1EjbDQ 询问用户自定义目标目录的最简单方法是什么
  • NSTimer 不触发选择器

    在带有 ARC 的 ios5 0 中 在我的 rootviewcontroller 中 我调用由应用程序委托持有的安全管理器对象中的方法 在该方法中 我设置计时器如下 NSTimer timer NSTimer scheduledTimer
  • .Net core 中的 log4net AdoNetAppender 不支持?

    我正在尝试在我们的 dot net core 1 1 2 应用程序中实现 log4net 2 0 8 ConsoleAppender 工作正常 但 AdoNetAppender 抛出错误 无法加载类型 log4net Appender Ad
  • 如何在 Antlr4 中为零参数函数编写语法

    我的函数具有参数语法 如下面的词法分析器和解析器 MyFunctionsLexer g4 lexer grammar MyFunctionsLexer FUNCTION FUNCTION NAME A Za z0 9 DOT COMMA L
  • 打印星号的 ASCII 菱形

    我的程序打印出这样的钻石 但只有当参数或菱形的每一面为4 例如如果我输入6 底部三角形的间距是错误的 我一直在试图找出答案 当参数改变时 底部的三角形不会改变 只有顶部的三角形会改变 它只适用于输入4 public static void
  • Java:在 eclipse 中导出到 .jar 文件

    我正在尝试将 Eclipse 中的程序导出到 jar 文件 在我的项目中 我添加了一些图片和 PDF s 当我导出到 jar 文件时 似乎只有main已编译并导出 我的意愿是如果可能的话将所有内容导出到 jar 文件 因为这样我想将其转换为
  • Android Web Intent 问题

    G day 免责声明 我不是 Android 开发人员 我正在对我所描述的问题进行质量检查 我用来描述这个问题的技术术语可能是错误的 我正在测试一个 Android 应用程序 该应用程序在其清单中描述它可以使用 type 的地址处理 Web
  • Angular 6 中的 Http 错误处理

    我正在尝试使用 Angular 6 中的以下类来处理 http 错误 我从服务器收到 401 未经授权状态 但我没有看到控制台错误消息 HttpErrorsHandler ts 文件 import ErrorHandler Injectab
  • 覆盖页面范围内的主题资源

    我想覆盖主题资源 特别是SystemAccentColor 在特定页面的范围内 我已经在广泛的应用范围内成功地做到了这一点 但我无法针对特定页面执行此操作 App xaml 中的 XAML 效果很好
  • PHP 中的 NOW() 函数

    是否有 PHP 函数以与 MySQL 函数相同的格式返回日期和时间NOW 我知道如何使用date 但我想问是否有专门用于此的功能 例如 返回 2009 12 01 00 00 00 您可以使用date https www php net m
  • 如何在 JSON 中转义双引号

    我试图显示双引号 但它显示了反斜杠之一 maingame day1 text1 Tag 1 text2 Heute startet unsere Rundreise Example text Jeden Tag wird ein neues
  • 不同类型的数组

    是否可以有一个包含两种不同类型数据的数组 我想要一个包含双精度型和字符串的数组 我尝试过 ArrayList
  • Twitter bootstrap:居中缩略图

    我有一个缩略图列表 它们有固定的尺寸 我希望连续缩略图的数量随着窗口的宽度而变化 使用 Twitter Bootstrap 这很容易 http jsfiddle net charlesbourasseau 5WvAL http jsfidd
  • 批处理脚本生成特定年月、周和工作日的文件夹

    最近几天我一直在寻找这个问题的答案 有很多关于全年批量文件夹创建的答案 但不够具体 所以我非常感谢答案 所以我想要这样的文件夹结构 如下所示 2017 for example main folder for year 2017 01 JAN
  • 在Python中如何获取字典的部分视图?

    是否有可能获得部分视图dict在Python中类似于pandasdf tail df head 说你有很长一段时间dict 而您只想检查某些元素 开头 结尾等 dict 就像是 dict head 3 To see the first 3
  • 从 PySpark RDD 中的每个组中取出前 N 个元素(不使用 groupByKey)

    我有一个如下所示的 RDD dataSource sc parallelize user1 3 blue user1 4 black user2 5 white user2 3 black user2 6 red user1 1 red 我
  • 使用 Google Analytics 4 自动增强测量事件时报告 Data Studio 中的下载 URL?

    我设置了一个新的 Google Analytics 4 属性并启用了增强跟踪 它会自动记录所有下载 使用 Google Data Studio 时 我可以看到 file download 事件 因此它肯定有效 并使用此数据来构建我的报告 我
  • 从sklearn PCA获取特征值和向量

    如何获取 PCA 应用程序的特征值和特征向量 from sklearn decomposition import PCA clf PCA 0 98 whiten True converse 98 variance X train clf f