Scikit learn 用sklearn中的分量解释偏最小二乘方差

Scikit learn 用sklearn中的分量解释偏最小二乘方差,scikit-learn,pls,Scikit Learn,Pls,我正在尝试使用sklearn的代码执行PLS回归,我希望保留那些解释某种程度差异的组件,比如PCA 有没有办法知道PLS中每个成分解释了多少差异?我也有同样的要求计算每个成分的解释差异。我是PLS的新手,不是以英语为母语的人,请将我的解决方案作为参考 背景: 如果您选择“通缩模式”作为“回归”,这是默认选项。可通过“PLSRegression”[1]中的表达式计算估计的Y: Y=TQ'+Err 其中T是x_分数,Q是y_载荷_ 该表达式可以提供所有主分量的估计Y。因此,如果我们想知道第一主成分解

我正在尝试使用sklearn的代码执行PLS回归,我希望保留那些解释某种程度差异的组件,比如PCA


有没有办法知道PLS中每个成分解释了多少差异?我也有同样的要求计算每个成分的解释差异。我是PLS的新手,不是以英语为母语的人,请将我的解决方案作为参考

背景: 如果您选择“通缩模式”作为“回归”,这是默认选项。可通过“PLSRegression”[1]中的表达式计算估计的Y:

Y=TQ'+Err

其中T是x_分数,Q是y_载荷_ 该表达式可以提供所有主分量的估计Y。因此,如果我们想知道第一主成分解释了多少方差,我们可以使用x_分数和y_载荷的第一个向量来计算估计的Y1:

Y1=T[0]Q[0]'+错误

请参阅下面Python中的代码,它计算每个组件的R平方

import numpy as np
from sklearn.cross_decomposition import PLSRegression
from sklearn.metrics import r2_score

pls = PLSRegression(n_components=3)
pls.fit(X,Y_true)
r2_sum = 0
for i in range(0,3):
        Y_pred=np.dot(pls.x_scores_[:,i].reshape(-1,1),pls.y_loadings_[:,i].reshape(-1,1).T)*naY.std(axis=0, ddof=1)+naY.mean(axis=0)
        r2_sum += round(r2_score(Y_true,Y_pred),3) 
        print('R2 for %d component: %g' %(i+1,round(r2_score(Y_true,Y_pred),3)))
print('R2 for all components (): %g' %r2_sum) #Sum of above
print('R2 for all components (): %g' %round(r2_score(Y_true,pls.predict(X)),3)) #Calcuted from PLSRegression's 'predict' function.
输出:

R2 for 1 component: 0.633
R2 for 2 component: 0.221
R2 for 3 component: 0.104
R2 for all components: 0.958
R2 for all components: 0.958

[1] 请注意这个表达。“分数”、“重量”和“加载”的术语和值在不同的计算方法中可能会略有不同。

您的脚本中有什么内容?@B.Gees抱歉,我似乎忘记粘贴缩放过程。“naY”是缩放前的响应变量,即原始训练数据。