我正在使用sklearn,并且親和力傳播存在問題。我建立了一個輸入矩陣,但不斷收到以下錯誤。ValueError: Input contains NaN, infinity or a value too large for dtype('float64').我跑了np.isnan(mat.any()) #and gets Falsenp.isfinite(mat.all()) #and gets True我嘗試使用mat[np.isfinite(mat) == True] = 0刪除無限值,但這也不起作用。我該怎么做才能擺脫矩陣中的無限值,以便可以使用親和力傳播算法?我正在使用anaconda和python 2.7.9。
3 回答

夢里花落0921
TA貢獻(xiàn)1772條經(jīng)驗 獲得超6個贊
這可能會在scikit內(nèi)部發(fā)生,并且取決于您在做什么。我建議您閱讀所用功能的文檔。您可能正在使用一種方法,例如,這取決于您的矩陣是正定的且不滿足該條件。
編輯:我怎么能錯過呢:
np.isnan(mat.any()) #and gets False
np.isfinite(mat.all()) #and gets True
顯然是錯誤的。正確的是:
np.any(np.isnan(mat))
和
np.all(np.isfinite(mat))
您想檢查任何元素是否為NaN,而不是any函數(shù)的返回值是否為數(shù)字...

一只萌萌小番薯
TA貢獻(xiàn)1795條經(jīng)驗 獲得超7個贊
將sklearn與pandas一起使用時,出現(xiàn)相同的錯誤消息。我的解決方案是df在運行任何sklearn代碼之前重置數(shù)據(jù)幀的索引:
df = df.reset_index()
當(dāng)我刪除自己的某些條目時,我多次遇到此問題df,例如
df = df[df.label=='desired_one']
添加回答
舉報
0/150
提交
取消