Баллы PLS не соответствуют произведению центрированных данных и нагрузок - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь использовать алгоритм PLS в python.На веб-странице sklearn для PLS они говорят:

T: x_scores_
P: x_loadings_
X = T P.T

Таким образом, можно ожидать восстановления исходных входных данных (по центру) на основе загрузок PLS и баллов.Однако, если я приведу небольшой пример на основе набора данных bostonhousing:

from __future__ import division
import numpy as np
from sklearn.datasets import load_boston
from sklearn.cross_decomposition import PLSRegression

boston = load_boston()
x = boston.data #506 x 13 matrix
x_center = x - x.mean(axis=0)
y = boston.target # 506 x 1 vector
pls = PLSRegression(n_components=3, scale=False)
pls.fit(x, y)

p = pls.x_loadings_ # 13 x 3 matrix
t = pls.x_scores_  # 506 x 3 matrix

x2 = np.dot(t, p.T)

Ожидается, что x2 равен x_center, но я получаю следующие результаты:

x_center[0:3, 0:3]
array([[ -3.58744071,   6.63636364,  -8.82677866],
       [ -3.56645071, -11.36363636,  -4.06677866],
       [ -3.56647071, -11.36363636,  -4.06677866]])
x2[0:3, 0:3]
array([[ -3.54146571,   6.16576566,  -3.49838208],
       [ -4.25799917, -12.09468599,  -2.2124418 ],
       [ -4.51537461,  -3.28200078,  -3.42819311]])

Я что-то упустил?

...