2017-11-05 100 views
2

私は(私は概要を必要とする)statsmodelsを使用してロジスティック回帰を実装しようとしていますし、私はこのエラーを取得:ロジスティック回帰は

LinAlgError: Singular matrix 

私のDFは数値と相関しているが、私は非を削除しました - 数値関数と定数関数。 私は正規の回帰だけでなく、l1のペナルティ(l2は利用できません)を実装しようとしました。

私は、行列のランクをチェックしようとしたと、このプリントを得た:

print(len(df.columns)) -> 156 

print(np.linalg.matrix_rank(df.values)) -> 151 

どのように私は問題があると、なぜその機能を知っているのですか?

私のコード:

logit = sm.Logit(y,X) 

result = logit.fit_regularized(trim_mode='auto', alpha=0,maxiter=150) 

print(result.summary()) 

更新:

相関の高い機能を除去した後、私は得る:

len(df.columns) = np.linalg.matrix_rank(df.values) 

が、それでも同じエラー。 (たとえ私が低い相関閾値を設定したとしても)。

ソルバーも変更しようとしました。

+1

df.corr()を試してください。これは、データフレーム内の数値列間の相関行列を返します。そこから、あなたの特徴のうちの2つが正確に相関しているかどうかを確認することができます。 –

+0

@Johannes Wachs、私は相関した特徴を削除し、それは機能します。 tnx。 – anna

+0

https://stackoverflow.com/a/13313828/333700 QRを使用してすべての同一線または線形独立の列を見つける方法について – user333700

答えて

2

コメントに示唆されているように、2つの機能が正確に関連付けられている場合、モデルは実行されません。少数の列でパンダのデータフレームを持っている場合、これをチェックする最も簡単な方法は、データフレームの.corr() method(この場合はdf.corr())を呼び出して、相関= 1のフィーチャのペアがあるかどうかを確認することです。

なぜいくつかの機能が完全に相関している理由について考える必要があります。

+0

他の理由はありますか?私はちょうど0.4 corrとのすべての機能を削除し、私は同じエラーを持って... – anna

関連する問題