ロジスティック回帰
-
- sklearnを用いたロジスティック回帰の例
-
- sklearnのドキュメント
-
- sklearnを用いないロジスティック回帰の例
ロジットを用いて、複数の説明変数から二値データを分類するモデルのパラメータを決定する。
パラメータの有意水準
RのGLMなんかに解かせると、各説明変数についてP値が算出され、この変数がどの程度有意か、というのが把握できる。
ここでのP値とは何か。ロジスティック回帰によって各 xi の係数 βi が推定される。するとP値は「もし xi が実は結果に全く影響なかったとして、xi の分散度合いなどから βi が“たまたま”今回の値以上となってしまう確率」を表す。変数 xi が結果を左右する重要な値なのであれば、βi のP値は低くなる。(逆にP値が高いからといって影響が低いとは言えず、この辺が統計的な解釈として難しいところだが、あくまで影響があるという保証が得られなかった、といえるに留まる)
分析内容によるが、一般的な指標としてP値は1%, 5%, 10%以下あたりが基準とされる。ただ機械学習の場合は20%程度でも採用することもあるという意見もあるし、業界の習慣と試行錯誤によるのだろう。P値が基準値以上となった説明変数は、組み込むと過学習を招くため、取り除くことを検討する。(ただし、取り除くことで他の変数への影響が出るため、絶対的な基準とはならない)
で、本題。
sklearn.linear_model.LogisticRegressionには、P値を自動で算出してくれる機能は無い。クラスを拡張して、自前で計算する方法が以下に紹介されている。ただしコメント欄にて微修正が行われているため、コピペした以下のコードのままで動くか未確認。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
from sklearn import linear_model from scipy import stats import numpy as np class LinearRegression(linear_model.LinearRegression): """ LinearRegression class after sklearn's, but calculate t-statistics and p-values for model coefficients (betas). Additional attributes available after .fit() are `t` and `p` which are of the shape (y.shape[1], X.shape[1]) which is (n_features, n_coefs) This class sets the intercept to 0 by default, since usually we include it in X. """ def __init__( self , * args, * * kwargs): if not "fit_intercept" in kwargs: kwargs[ 'fit_intercept' ] = False super (LinearRegression, self )\ .__init__( * args, * * kwargs) def fit( self , X, y, n_jobs = 1 ): self = super (LinearRegression, self ).fit(X, y, n_jobs) sse = np. sum (( self .predict(X) - y) * * 2 , axis = 0 ) / float (X.shape[ 0 ] - X.shape[ 1 ]) se = np.array([ np.sqrt(np.diagonal(sse[i] * np.linalg.inv(np.dot(X.T, X)))) for i in range (sse.shape[ 0 ]) ]) self .t = self .coef_ / se self .p = 2 * ( 1 - stats.t.cdf(np. abs ( self .t), y.shape[ 0 ] - X.shape[ 1 ])) return self |
多重共線性の判定手法は確立されていない?
回帰分析では説明変数は独立であることが理想とされており、互いに相関の高い2変数を同時に組み込むと結果がおかしくなりやすい。いずれかを除くか、統合して1つの指標値とすることが望ましい。
これを検出するには、一般的な回帰分析ではVIFという統計量を見る手法が有効だが、ロジスティック回帰では有効に働かないらしい。また、他にも決定打となる検出方法は確立されていないとのこと。
ロジスティック回帰分析における多重共線性の評価に関して|薬剤師のためのEBMお悩み相談所-基礎から実践まで
とりあえず、ダミー変数の内1つは削除しとくのと、各説明変数毎に相関取ってみて0.9とかだとあやしいよね、くらいと説明されている。