sklearn PCA with n_components =' mle'和svd_solver ='完整'导致数学域错误

时间:2017-11-29 08:28:22

标签: python scikit-learn pca mle

我的问题与math domain error while using PCA

高度相关

我收到以下错误:

  File "$path$\Python\Python36\lib\site-packages\sklearn\decomposition\pca.py", line 88, in _assess_dimension_(1. / spectrum_[j] - 1. / spectrum_[i])) + log(n_samples)
ValueError: math domain error

指的是this line of code

pa += log((spectrum[i] - spectrum[j]) * (1. / spectrum_[j] - 1. / spectrum_[i])) + log(n_samples)

仔细观察后,我发现问题是由这个等式引起的:

(spectrum[i] - spectrum[j])

如果这些值相等,则结果为0。这导致乘以0,这导致log(0)导致此异常。

现在我的问题。事实上这个错误可能发生在我的数据不好或者实现是否应该处理这种情况的迹象上? 如果实现应该处理这个,你会建议以什么方式正确处理? 在链接的问题中,已经an answer已经{{}}},但它看起来并不自信,并且没有任何反馈。

在scikit-learn的github repo上创建了一个issue,其中包含重现错误的步骤。

2 个答案:

答案 0 :(得分:0)

这是由于sklearn内部存在未解决的问题。 这已得到确认here

答案 1 :(得分:0)

scikit-learn 0.23.0中引入了针对此问题的修复程序,因此只需更新至该版本即可。

Release Notes for scikit-learn 0.23

[MRG+1] Adress decomposition.PCA mle option problem #16224