私は既に利用可能な解決策を試しましたが、この問題を解決できませんでした。math.logの数学ドメインエラー
オリジナルコード:
prob = n/self.totaldocs # 0.7445791360764896
self.classpriorprob[cls] = math.log(prob)
ソリューション:(しかし、私は、共通のログを取ることを好む)
prob = n/self.totaldocs
d = Decimal(prob)
self.classpriorprob[cls] = d.ln()
としてはhereを述べた:私は3桁まで数値を四捨五入してみました。
prob = n/self.totaldocs
number = round(prob, 3) # 0.744
self.classpriorprob[cls] = math.log(number)
でも、まだ数学的なドメインエラーが発生しています。
を編集しました。値を直接渡しました。つまりmath.log(0.744)です。 これは、Pythonコンソールでmath.log()関数を試しても機能します。
お知らせください。
仕様:私は0.0を得ていた
のpython 3.6.3
pycharm
数値演算ドメインエラーは、通常、log(0)やlog(-7)などの数学的に無効な操作を実行しようとすると発生します。あなたのコードが決して不可能な値を計算しようとしないことは確かですか? –
はい私は確信しています。変数probは0.7445791360764896です。私はそれを0.744に丸めると、まだエラーが出ます。それから私は単に '0.744 '、つまりmath.log(0.744)を渡して動作します。それは非常に奇妙です。 –
'Decimal'オブジェクトをログ関数に渡していますか?最初に 'float'に変換しなければならないかもしれません。 – pault