我使用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;
答案 0 :(得分:1)
我认为scikit-learn使用NIPALS算法进行PLS,而MATLAB使用SIMPLS算法。他们可能会给出略有不同的结果。
请参阅MATLAB中plsregress
的文档页面,并在底部参考算法。我没有为NIPALS提供方便的链接,但它是Svante Wold的算法,在互联网上有相当广泛的描述。