今回は、Pythonによるロジスティック回帰の実践的な実装に焦点を当てます。
Pythonによる機械学習のシリーズでは、線形回帰、K Nearest Neighborなどの様々な教師ありMLモデルについて既に理解しています。
今日は、ロジスティック回帰に焦点を当て、実際の問題を解決していきます。
楽しみですか?はい。
では、始めましょう。
この記事もチェック:Pythonとsklearnを使って機械学習パイプラインを実装する方法
まず、ロジスティック回帰とは何でしょうか?
ロジスティック回帰を始める前に、ロジスティック回帰がどのような場面で必要なのかを理解しましょう。
ご存知のように、教師あり機械学習モデルは連続データだけでなく、カテゴリデータも扱います。
そのうち、カテゴリデータ値とは、グループやカテゴリを構成するデータ要素です。
従って、従属変数としてカテゴリ・データ変数がある場合に予測を行うには、ロジスティック回帰の出番となる。
ロジスティック回帰は、バイナリまたはマルチ・カテゴリカル・データ変数を従属変数として動作する教師あり機械学習モデルです。
つまり、バイナリやマルチラベルの値を別々に分離して分類する分類アルゴリズムです。
例えば、ある問題が「Yes」か「No」で結果を予測したい場合、従属データ変数を分類してデータの結果を把握するのがロジスティック回帰です。
ロジスティック回帰は、従属バイナリ変数の結果に適合するように学習データを分類するために、ロジット関数を使用します。
さらに、ロジット関数は、バイナリ応答変数を予測するために、オッズ値と確率のチャンスにのみ依存します。
それでは、ロジスティック回帰の実装を見てみましょう。
実践編 – ロジスティック回帰
この記事では、我々は、どの顧客がローン不履行者であるかどうかを予測することが期待される銀行のローン不履行問題を利用します。
データセットはここにあります。
1. データセットのロード
最初のステップでは、pandas.read_csv()関数を使用してデータセットを環境にロードする必要があります。
import pandas as pd
import numpy as np
data = pd.read_csv( "bank-loan.csv" ) # dataset
|
2. データセットのサンプリング
データセットをロードした後,train_test_split()関数を用いて,データセットをtrainingとtestingに分割する.
from sklearn.model_selection import train_test_split
X = loan.drop([ 'default' ],axis = 1 )
Y = loan[ 'default' ].astype( str )
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = . 20 , random_state = 0 )
|
ここで、Xはresponse/target値以外の全ての変数を含むトレーニング用データセット、Yはresponse変数のみを含むテスト用データセットを指します。
3. モデルのエラーメトリクスの定義
さて、モデル構築に移る前に、より良い方法でモデルを分析するのに役立つエラーメトリクスを定義してみましょう。
ここでは、Confusion Matrixを作成し、Precision、Recall、Accuracy、F1 scoreを計算しました。
def err_metric(CM):
TN = CM.iloc[ 0 , 0 ]
FN = CM.iloc[ 1 , 0 ]
TP = CM.iloc[ 1 , 1 ]
FP = CM.iloc[ 0 , 1 ]
precision = (TP) / (TP + FP)
accuracy_model = (TP + TN) / (TP + TN + FP + FN)
recall_score = (TP) / (TP + FN)
specificity_value = (TN) / (TN + FP)
False_positive_rate = (FP) / (FP + TN)
False_negative_rate = (FN) / (FN + TP)
f1_score = 2 * (( precision * recall_score) / ( precision + recall_score))
print ( "Precision value of the model: " ,precision)
print ( "Accuracy of the model: " ,accuracy_model)
print ( "Recall value of the model: " ,recall_score)
print ( "Specificity of the model: " ,specificity_value)
print ( "False Positive rate of the model: " ,False_positive_rate)
print ( "False Negative rate of the model: " ,False_negative_rate)
print ( "f1 score of the model: " ,f1_score)
|
4. データセットにモデルを適用する
さて、いよいよデータセットに対してモデル構築を行うときが来ました。
以下のコードを見てください。
logit = LogisticRegression(class_weight = 'balanced' , random_state = 0 ).fit(X_train,Y_train)
target = logit.predict(X_test)
CM_logit = pd.crosstab(Y_test,target)
err_metric(CM_logit) |
説明
- まず、学習用データセットに対して、LogisticRegression()`関数を適用します。
- さらに、predict()関数を用いてテストデータセットの値を予測するために、上記の出力を与えています。
- 最後に、
crosstab()
を使って相関行列を作成し、エラーメトリクスのカスタマイズ関数(以前に作成)を呼び出して結果を判断しています。
出力は以下の通りです。
Precision value of the model: 0.30158730158730157
Accuracy of the model: 0.6382978723404256
Recall value of the model: 0.7307692307692307
Specificity of the model: 0.6173913043478261
False Positive rate of the model: 0.3826086956521739
False Negative rate of the model: 0.2692307692307692
f1 score of the model: 0.42696629213483145
|
上記のように、我々のモデルで63%の精度を得ることができました。
この記事もチェック:Pythonでデータセットから別のデータセットへピボットテーブルを作成する
まとめ
ここまでで、このトピックは終了です。
何か疑問があれば、お気軽にコメントください。
PythonとMLに関連するこのような投稿をもっと見るには、それまでは、お楽しみに。
ハッピーラーニング!