【问题标题】:Why the result is different between Matlab and scikit-learn when using PLS regression?为什么使用 PLS 回归时 Matlab 和 scikit-learn 的结果不同?
【发布时间】:2018-06-12 17:06:12
【问题描述】:

我使用 PLSRegression.predict 形式的 sklearn.cross_decomposition 和 MATLAB(2014a) 的 plsregress,结果略有不同。我确定我使用了相同的组件和数据。 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;

【问题讨论】:

  • 请查看 PLS 中的其他参数,如迭代、缩放、容差值等。
  • 谢谢。我试过了,但没用。@VivekKumar

标签: python matlab scikit-learn regression


【解决方案1】:

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

请参阅 MATLAB 中 plsregress 的文档页面,并参考底部的算法。我没有 NIPALS 的便捷链接,但它是 Svante Wold 的一种算法,并且在互联网上得到了广泛的描述。

【讨论】:

  • 你是对的。但我怀疑 scikit-learn 的 pls 是错误的。至少一个人认为 pls.predict 是错误的。link
  • 我并不是说 scikit-learn 错了,或者 MATLAB 错了。他们只是使用不同的算法,所以如果他们给出的结果略有不同也就不足为奇了。
猜你喜欢
  • 2020-09-16
  • 1970-01-01
  • 2019-03-08
  • 2019-01-08
  • 2019-12-09
  • 2017-06-17
  • 2017-07-30
  • 2018-07-14
  • 2018-12-31
相关资源
最近更新 更多