scikit-learnはデフォルトで正則化を使用しますか?


12

いくつかの偽のデータにロジスティック曲線を当てはめたところです。データは基本的にステップ関数にしました。

data = -------------++++++++++++++

しかし、当てはめた曲線を見ると、勾配は非常に小さいです。クロスエントロピーを仮定して、コスト関数を最小化する関数がステップ関数です。なぜステップ関数のように見えないのですか?デフォルトで行われるL1またはL2の正規化はありますか?

scikit-learnを使用したロジスティック回帰

回答:


8

ドキュメントをご覧ください。最初の行は、penalty='l2'およびを含むデフォルトのパラメーターを示していますC=1.0

実際には、正規化を完全に無効にすることはできません。正規化できるのは、それよりも少ないものだけです... C=1e10たとえば、設定を試してください。


2
これで(バージョン0.21.0以降)を渡すことができますpenalty='none'scikit-learn.org/stable/whats_new.html#id15
Ben

6

はい、デフォルトで正則化があります。これは、定数1のL2正則化のようです。

これをいじってみたところ、定数が1のL2正則化によって、sci-kitが正則化を指定せずに学習したものとまったく同じように見えるフィットが得られることがわかりました。

from sklearn.linear_model import LogisticRegression    
model = LogisticRegression()
model.fit(X, y)

と同じです

model = LogisticRegression(penalty="l2", C=1)
model.fit(X, y)

を選択するとC=10000、ステップ関数によく似たものが得られました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.