Używam PLSRegression.predict formie sklearn.cross_decomposition i plsregress z MATLAB (2014a), a wynik jest trochę inny. Jestem pewien, że użyłem tych samych komponentów i danych, ponieważ Matlab zawsze działa lepiej niż uczenie się scikit.
Pyton:
from sklearn.cross_decomposition import PLSRegression
pls = PLSRegression(n_components=8)
pls.fit(X_train, Y_train)
Y_pred = pls.predict(X_train)
Matlab:
[XL,YL,XS,YS,BETA,PCTVAR,MSE]=plsregress(X_train , Y_train ,8);
Yfit = [ones(size(X_train,1),1) X_train]*BETA;
Odpowiedzi:
1 dla odpowiedzi № 1Wierzę, że scikit-learn używa algorytmu NIPALS dla PLS, podczas gdy MATLAB używa algorytmu SIMPLS. Prawdopodobnie dają nieco różniące się wyniki.
Zobacz stronę dokumentacji dla plsregress
w MATLAB, z odniesieniem do algorytmu na dole. Nie mam wygodnego łącza do NIPALS, ale jest to algorytm Svante Wolda i dość szeroko opisany w Internecie.