[英]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.