簡體   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