2016-12-13 6 views
2

私は、同じ共変量であるが、データと応答変数がわずかに異なる、約1000の同様のロジスティック回帰を実行しています。私の応答変数はすべて、疎通成功です(通常、p(成功)< .05)。sklearnロジスティック回帰は偏った結果をもたらすか?

私はLRを次のように実行します。成功する数と失敗する数をそれぞれの設定(設計行列の行)に持つ「success_fail」という行列があります。私は正則回帰で、結果は一貫して、トレーニングデータで観察されるよりも多くの「成功」を予測するようにバイアスされていることに気づいた

(sklearnバージョン0.18)

skdesign = np.vstack((design,design)) 
sklabel = np.hstack((np.ones(success_fail.shape[0]), 
        np.zeros(success_fail.shape[0]))) 
skweight = np.hstack((success_fail['success'], success_fail['fail'])) 
logregN = linear_model.LogisticRegression(C=1, 
           solver= 'lbfgs',fit_intercept=False) 
logregN.fit(skdesign, sklabel, sample_weight=skweight) 

:私はとLRを実行します。私が正規化を緩めると、この偏見は消え去る。観察された偏りは私のユースケースでは受け入れられませんが、正規化されたモデルは少し良く見えます。 results for the different regressions for 2 different values of C

Iは、これらの回帰のためのパラメータ推定値を見:

以下、IはCの2つの異なる値について1000の異なる回帰の結果をプロットし、各点は、一つのパラメータである未満です。それは、インターセプト(左下の点)がC = 1モデルにとって高すぎるようです。 enter image description here

どうしてですか?どうすれば修正できますか? Sklearnに迎撃を少なくすることはできますか?

+0

liblinearソルバーを使用していますか?あなたのsklearnバージョンは何ですか? normalize = Trueを使用しますか? – TomDLT

+0

投稿を編集してこの情報を追加しました – phdscm

答えて

1

Sklearnメーリングリストの素敵な方々のおかげで、私は答えを見つけました。あなたが質問で見ることができるように、私はデザイン・マトリックス(インターセプトを含む)を作ってから、 "fit_intercept = False"を設定してモデルをフィットさせました。これにより、傍受の正則化が行われました。非常に私の部分で愚か!私がする必要があったのは、デザインからの切片を取り除き、 "fit_intercept = False"を削除することでした。

関連する問題