[英]ValueError: n_components=4 must be between 0 and min(n_samples, n_features)=2 with svd_solver='full'
[英]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 中引入了此问题的修复程序,因此只需更新到此版本即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.