繁体   English   中英

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

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

我的问题与使用 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

这是指这行代码

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

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

(spectrum[i] - spectrum[j])

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

现在我的问题。 发生此错误的事实是否表明我的数据已损坏,或者实现是否应该处理这种情况? 如果实现应该处理这个问题,你会推荐什么方式来正确处理这个问题? 在链接的问题中已经有一个答案,但它看起来不太自信并且没有任何反馈。

在 scikit-learn 的 github 存储库上创建了一个问题,其中包含重现错误的步骤。

这是由于 sklearn 内部的一个未解决的问题。 在这里得到证实

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

scikit-learn 0.23 发行说明

[MRG+1] 地址分解.PCA mle 选项问题#16224

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM