Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのロジスティック回帰を理解していますか?


ロジスティック回帰は、バイナリの結果を予測するための統計手法です。現在、金融から医学、犯罪学、その他の社会科学に至るまでの分野で適用されているため、これは新しいことではありません。

このセクションでは、Pythonを使用してロジスティック回帰を開発しますが、Rなどの他の言語を使用して同じように実装することもできます。

インストール

サンプルプログラムでは、以下のライブラリを使用します

  • Numpy :数値配列と行列を定義するには

  • パンダ :データを処理および操作するため

  • 統計モデル :パラメータ推定と統計的検定を処理するため

  • Pylab :プロットを生成するには

CLIで以下のコマンドを実行することにより、pipを使用して上記のライブラリをインストールできます。

> pip install numpy pandas statsmodels 

ロジスティック回帰のユースケースの例

Pythonでロジスティック回帰をテストするために、UCLA(Institute for Digital Research and Education)によって提供されたロジスティック回帰データを使用します。以下のリンクからcsv形式でデータにアクセスできます: https://stats.idre.ucla.edu/stat/data/binary.csv

このcsvファイルをローカルマシンに保存し、そこからデータを読み取ります。どちらでもかまいません。このcsvファイルを使用して、大学院への入学に影響を与える可能性のあるさまざまな要因を特定します。

必要なライブラリをインポートしてデータセットを読み込む

pandasライブラリ(pandas.read_csv)を使用してデータを読み取ります:

 import pandas as pdimport statsmodels.api as smimport pylab as plimport numpy as npdf =pd.read_csv('binary.csv')#リンクから直接データを読み取ることができます\#df =pd.read_csv('https: //stats.idre.ucla.edu/stat/data/binary.csv')print(df.head())

出力

 admit gre gparank0 0380 3.61 31 1660 3.67 32 1800 4.00 13 1640 3.19 44 0 520 2.93 4 

上記の出力からわかるように、1つの列名は「rank」です。「rank」はpandasデータフレームのメソッドの名前でもあるため、これにより問題が発生する可能性があります。競合を避けるために、ランク列の名前を「プレステージ」に変更します。それでは、データセットの列名を変更しましょう:

 df.columns =["admit"、 "gre"、 "gpa"、 "prestige"] print(df.columns)

出力

 Index(['admit'、'gre'、'gpa'、'prestige']、dtype ='object')In []:

これですべてが正常に見えたので、データセットに含まれているものをさらに深く調べることができます。

#データの要約

pandas関数describeを使用すると、すべての概要が表示されます。

 print(df.describe())

出力

 admit gre gpa prestigecount 400.000000 400.000000 400.000000 400.00000mean 0.317500 587.700000 3.389900 2.48500std 0.466087 115.516536 0.380567 0.94446min 0.000000 220.000000 2.260000 1.0000025%0.000000 520.000000 3.130000 2.0000050%0.000000 580.000000 3.395000 2.0000075%1.000000 660. 

データの各列の標準偏差と度数分布表の名声、および誰かが許可されたかどうかを取得できます。

#各columnprint(df.std())の標準偏差を見てください

出力

承認0.466087gre115.516536gpa0.380567prestige 0.944460dtype:float64 

#度数分布表のカットプレステージと誰かが許可されたかどうかprint(pd.crosstab(df ['admit']、df ['prestige']、rownames =['admit']))

出力

 prestige 1 2 3 4admit0 28 97 93 551 33 54 28 12 

データセットのすべての列をプロットしてみましょう。

#すべてのcolumnsdf.hist()pl.show()をプロット

出力

Pythonのロジスティック回帰を理解していますか?

ダミー変数

Python pandasライブラリは、カテゴリ変数の表現方法に大きな柔軟性を提供します。

#dummifyrankdummy_ranks =pd.get_dummies(df ['prestige']、prefix ='prestige')print(dummy_ranks.head())

出力

 prestige_1 prestige_2 prestige_3 prestige_40 0 0 1 01 0 0 1 02 1 0 0 03 0 0 0 14 0 0 0 1 

#regressioncols_to_keep =['admit'、'gre'、'gpa'] data =df [cols_to_keep] .join(dummy_ranks.ix [:、'prestige_2':])> 

出力

 admit gre gpa prestige_2 prestige_3 prestige_40 0380 3.61 0 1 01 1660 3.67 0 1 02 1800 4.00 0 0 03 1640 3.19 0 0 14 0 520 2.93 0 0 1In []:

回帰の実行

次に、ロジスティック回帰を実行します。これは非常に簡単です。予測しようとしている変数を含む列を指定し、その後にモデルが予測を行うために使用する列を指定するだけです。

現在、gre、gpa、およびprestigeダミー変数prestige_2、prestige_3、およびprestige_4に基づいてadmit列を予測しています。

 train_cols =data.columns [1:]#Index([gre、gpa、prestige_2、prestige_3、prestige_4]、dtype =object)logit =sm.Logit(data ['admit']、data [train_cols])# modelresult =logit.fit()
に適合

出力

最適化は正常に終了しました。現在の関数値:0.573147反復6 

結果の解釈

statsmodelsを使用して要約出力を生成しましょう。

 print(result.summary2())

出力

結果:Logit ===============================================================モデル:ロジット番号反復:6.0000従属変数:疑似決定係数を認める:0.083日付:2019-03-03 14:16 AIC:470.5175いいえ。観測値:400 BIC:494.4663Dfモデル:5対数尤度:-229.26Df残差:394 LL-ヌル:-249.99収束:1.0000スケール:1.0000 ------------------ ----------------------------------------------Coef。 Std.Err。 z P> | z | [0.025 0.975] ---------------------------------------------- ------------------ gre 0.0023 0.0011 2.0699 0.0385 0.0001 0.0044gpa 0.8040 0.3318 2.4231 0.0154 0.1537 1.4544prestige_2 -0.6754 0.3165 -2.1342 0.0328 -1.2958 -0.0551prestige_3 -1.3402 0.3453 -3.8812 0.0001 -2.0170 -0.6634prestige_4 -1.5515 0.4178 -3.7131 0.0002 -2.3704 -0.7325intercept -3.9900 1.1400 -3.5001 0.0005 -6.2242 -1.7557 ==============================================================

上記の結果オブジェクトを使用すると、モデル出力の一部を分離して検査することもできます。

 #各coeffecientprint(result.conf_int())の信頼区間を見てください

出力

 0 1gre 0.000120 0.004409gpa 0.153684 1.454391prestige_2 -1.295751 -0.055135prestige_3 -2.016992 -0.663416prestige_4 -2.370399 -0.732529intercept -6.224242 -1.755716 

上記の出力から、入学の確率と候補者の学部の名声との間に反比例の関係があることがわかります。

したがって、候補者が大学院プログラムに受け入れられる可能性は、下位の学校(prestige_3またはprestige_4)とは対照的に、上位の学部大学(prestige_1 =True)に通った学生の方が高くなります。


  1. Pythonのissuperset()

    この記事では、Pythonでのissuperset()と、さまざまな分野でのその実装について学習します。 このメソッドは、セットBのすべての要素に引数として渡されるすべての要素セットAが含まれている場合はブール値Trueを返し、Aのすべての要素がBに存在しない場合はfalseを返します。 これは、BがAのスーパーセットである場合、それを意味します returns true; else False 例 いくつかの例を見てみましょう A = {'t','u','t','o','r','i',

  2. PyTorchのロジスティック回帰を使用して手書き数字を識別しますか?

    ここでは、PyTorchを使用して、MNISTデータセットを使用して手書き数字分類器を認識するようにCNNをトレーニングします。 MNISTは、手書き数字の28*28ピクセルのグレースケール画像にラベル付けされた70k以上をカバーする手書き分類タスクに広く使用されているデータセットです。データセットには、約60kのトレーニング画像と10kのテスト画像が含まれています。私たちの仕事は、60kのトレーニング画像を使用してモデルをトレーニングし、その後、10kのテスト画像でその分類精度をテストすることです。 インストール まず、MXNetの最新バージョンが必要です。そのためには、端末で次を実行す