Я пытаюсь использовать алгоритм 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]])
Я что-то упустил?