我正在尝试使用sklearn中的代码执行PLSRegression,并且我希望保留那些解释某种程度差异的组件,例如在PCA中。
有没有办法知道PLS中每个组件解释了多少差异
答案 0 :(得分:2)
我也有同样的要求计算每个组件'解释了方差。我是PLS的新手,而不是母语为英语的人,请把我的解决方案作为参考。
背景: 如果您选择' deflation_mode' as" regression",这是默认选项。估计的Y可以通过这个表达式在" PLSRegression" [1]中计算:
Y = TQ' +错误
其中T是x_scores_,Q是y_loadings_ 该表达式可以提供来自所有主要成分的估计Y.因此,如果我们想知道已经解释了第一个主成分有多少方差,我们可以使用x_scores_和y_loadings_的第一个向量来计算估计的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]请注意这个表达方式。行话和价值得分'重量'并且' loading'在不同的计算方法上可能会有所不同。