私はロジスティック回帰を使ってデータを訓練していました。この過程で は、私は次のようにコード化されたシグモイド関数を計算する必要があります。 機械学習で高精度のdouble値を使用するにはどうすればよいですか?
private double sigmoid(double x) {
return 1.0/(1 + Math.pow(Math.E, -1 * x));
}
だから私
x
が36よりも大きい場合、それは常に
1.0
を返す、と私は
log(1 - sigmoid(x))
で
Infinity
を取得します。
私は、機械学習ではJavaが良い言語ではないと思うので、このプロジェクトに応募するだけです。
私はまた、このquestionを介してJavaの精度原則を知っていますが、私はまだこの問題を解決するためにとにかく知りたいです。
以上あるシグモイド関数を書くの他の方法がありますが、高精度の値は 'BigDecimal'を使用することを検討してください。また、この質問はあなたに役立つ可能性があります:https://stackoverflow.com/questions/13784056/calculating-sigmoid-value-of-a-bigdecimal-in-java –
「私はJavaが良い言語ではないことを知っています」 - 無知な言葉。 – duffymo
これは浮動小数点固有です(言語固有ではありません)。 1つのトリックは、可能な場合に、異なるスケール、たとえば対数の1つまたはそれを使用することです。おそらくないでしょう。 –