为什么使用PLS回归时Matlab和scikit-learn的结果不同?

时间:2018-01-03 02:19:32

标签: python matlab scikit-learn regression

我使用PLSRegression.predict形式sklearn.cross_decomposition和plsregress来自MATLAB(2014a),结果有点不同。我确定我使用了相同的组件和数据。 Matlab总是比scikit-learn表现更好。

的Python:

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;

1 个答案:

答案 0 :(得分:1)

我认为scikit-learn使用NIPALS算法进行PLS,而MATLAB使用SIMPLS算法。他们可能会给出略有不同的结果。

请参阅MATLAB中plsregress的文档页面,并在底部参考算法。我没有为NIPALS提供方便的链接,但它是Svante Wold的算法,在互联网上有相当广泛的描述。