sklearn PLSRegression - X 的方差由潜在向量解释

Posted

技术标签:

【中文标题】sklearn PLSRegression - X 的方差由潜在向量解释【英文标题】:sklearn PLSRegression - Variance of X explained by latent vectors 【发布时间】:2018-03-01 20:40:41 【问题描述】:

我使用 Python 的 sklearn.cross_decomposition.PLSRegression 执行了偏最小二乘回归

有没有办法为每个 PLS 组件检索 X 的解释方差分数,即 R2(X)?我正在寻找类似于 R pls 包中的 explvar() 函数的东西。但是,我也很感激有关如何自己计算它的任何建议。

有一个类似的question 和一个answer 解释了如何获得 Y 的方差。我猜,“Y 的方差”是在这种情况下所要求的。这就是为什么我提出了一个新问题 - 希望没关系。

【问题讨论】:

【参考方案1】:

我设法找到了解决问题的方法。以下给出了PLS回归后每个潜在向量解释的X中的方差分数:

import numpy as np
from sklearn import cross_decomposition

# X is a numpy ndarray with samples in rows and predictor variables in columns
# y is one-dimensional ndarray containing the response variable

total_variance_in_x = np.var(X, axis = 0)

pls1 = cross_decomposition.PLSRegression(n_components = 5)
pls1.fit(X, y) 

# variance in transformed X data for each latent vector:
variance_in_x = np.var(pls1.x_scores_, axis = 0) 

# normalize variance by total variance:
fractions_of_explained_variance = variance_in_x / total_variance_in_x

【讨论】:

+1 感谢您提供此解决方案。当 X 是多变量时,您必须执行 sum("total_variance_in_x")。此外,如果你计算 (1 - "fractions_of_explained_variance"),你应该得到一个具有累积解释方差的数组。【参考方案2】:

我不确定,所以如果有人可以贡献一些东西......

如下:

https://ro-che.info/articles/2017-12-11-pca-explained-variance

https://www.ibm.com/docs/de/spss-statistics/24.0.0?topic=reduction-total-variance-explained

variance_in_x = np.var(pls1.x_scores_, axis = 0) 
fractions_of_explained_variance = variance_in_x / np.sum(variance_in_x)

【讨论】:

以上是关于sklearn PLSRegression - X 的方差由潜在向量解释的主要内容,如果未能解决你的问题,请参考以下文章

python3 偏最小二乘法实现

在管道中使用时带有 scikit-learn PLSRegression 的 ValueError

sklearn: LogisticRegression - predict_proba(X) - 计算

sklearn中,继承TransformerMixin实现自定义类放入DataFrameMapper,sklearn2pmml生成pmml报错

X 和 Y 的 SKlearn 重塑警告

将 keras 集成到 sklearn 管道中的问题