n_components = 'mle' 和 svd_solver = 'full' 的 sklearn PCA 导致数学域错误

sklearn PCA with n_components = 'mle' and svd_solver = 'full' results in math domain error

我的问题与 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 存储库上创建了一个 issue,其中包含重现错误的步骤。

这是由于 sklearn 中的一个未解决问题。 已确认here

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

Release Notes for scikit-learn 0.23

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