今回は、Pythonでロジスティック回帰モデルをフィットする方法について詳しく説明します。
機械学習では、医学の分野では腫瘍が悪性か良性かを判断したり、教育の分野では学生がある大学に入学できるかどうかを判断したりと、結果が2つしかない問題に取り組まなければならないことがよくあります。
二値分類問題はこのような問題の1つであり、ロジスティック回帰はこのような問題を解くための有力なアプローチです。
今回は、Pythonでロジスティック回帰モデルをフィットする方法について見ていきます。
基本的なことが分かっている方は、ロジスティック回帰モデルの構築とフィットにスキップしてください。
ロジスティック回帰とは?
ロジスティック回帰とは、独立変数に基づいて予測を行い、腫瘍の状態(悪性か良性か)、メールの分類(スパムか否か)、大学への入学可否(入学したか否か)などの問題を分類する機械学習手法の一つです。
例えば、電子メールを分類する場合、電子メールに含まれる単語を特徴として活用し、その電子メールがスパムかどうかの予測を生成するアルゴリズムです。
こちらもご覧ください。
ロジスティック回帰は教師あり機械学習の手法で、学習に使われるデータはすでにラベル付けされている、つまり答えはすでに学習セットの中にあるということです。
このアルゴリズムはインスタンスから知識を得ます。
ロジスティック回帰の重要性
この手法は、医学の分野で、特定の集団における病気や疾患のリスクを推定し、予防的な治療を提供するために使用することができます。
また、購買者の行動を監視することで、従業員の定着率の向上や、より収益性の高い製品の生産につながる傾向を特定することができる。
企業では、複雑なデジタルデータを評価・理解するデータサイエンティストが、このような分析を行っている。
このアプローチで開発された予測モデルは、あらゆる企業や組織にポジティブな影響を与えることができます。
このモデルを使用して関連性を分析し、結果を予測することで、意思決定を改善することができます。
例えば、あるメーカーの分析チームは、統計ソフトウェアパッケージの一部であるロジスティック回帰分析を利用して、機械部品の故障とその部品が在庫として保管される期間との相関関係を見つけ出すことができます。
この調査から得られた知見に基づいて、納品スケジュールや設置時間を変更することで、故障の再発を防ぐことができます。
ロジスティック回帰の種類
ロジスティック回帰は、実行する分類の種類に基づいて、さまざまなタイプに分類されます。
これを踏まえて、ロジスティック回帰は3つのタイプに分類されます。
1. バイナリ・ロジスティック回帰
最も一般的なのは、バイナリ・ロジスティック回帰です。
これは、ロジスティック回帰を定義したときに、以前お話した種類です。
このタイプは、従属/ターゲット変数に2つの別々の値を割り当てます。
0 または 1、悪性または良性、合格または不合格、入院または不入院。
2. 多項ロジスティック回帰
目的変数または独立変数が3つ以上の値を持つとき、多項ロジスティック回帰が使用される。
例えば、ある企業が、参加者に様々な選択肢の中から好きな製品を選んでもらうアンケートを実施することができます。
また、自社の製品に最も興味を持ちそうな人たちのプロファイルを構築し、その情報を使って広告キャンペーンを調整することもできます。
3. 順序ロジスティック回帰(Ordinal Logistic Regression
ターゲット変数が順序的である場合,順序ロジスティック回帰が利用される.この場合,カテゴリは意味のある方法で編成され,それぞれに数値がある.さらに、ターゲット変数に2つ以上のカテゴリがある。
ロジスティック回帰モデルのあてはめ
まずは、予測モデルの構築から始めましょう。
これからロジスティック回帰分類器を使って糖尿病を予測します。
最初のステップでは、Pima Indian Diabetesのデータセットをロードし、Pandasのread CSV関数を使って読み込むことにします。
データダウンロードのリンク: https://www.kaggle.com/uciml/pima-indians-diabetes-database
この記事もチェック:Pandasのmelt()とpivot()関数を使ってデータの整形をする方法
1. データのロードと読み込み
必要なパッケージと、ロジスティック回帰で分類するためのデータセットをインポートします。
#import necessary packages import pandas as pd
col_names = [ 'pregnant' , 'glucose' , 'bp' , 'skin' , 'insulin' , 'bmi' , 'pedigree' , 'age' , 'label' ]
# load dataset pima = pd.read_csv( "C:UsersIntelDocumentsdiabetes.csv" , header = None , names = col_names)
pima.head() |
feature_cols = [ 'pregnant' , 'insulin' , 'bmi' , 'age' , 'glucose' , 'bp' , 'pedigree' ]
#features X = pima[feature_cols]
#target variable y = pima.label
|
2. 特徴量の選択
特徴抽出のステップでは、すべての列を従属変数(ターゲット変数)と独立変数(特徴変数)の2つのカテゴリに分けます。
from sklearn.cross_validation import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.25 ,random_state = 0 )
|
3. データの分割
データセットをトレーニングセットとテストセットに分割することで、モデルの性能をより良く理解することができます。
データセットの分割にはtrain_test_split()という関数を使用します。
その後、random_state を用いてランダムにレコードを選択します。
つまり、75%のデータをモデルの学習に使用し、25%のデータをモデルのテストに使用します。
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression()
# fit the model with data logreg.fit(X_train,y_train) #predict the model y_pred = logreg.predict(X_test)
|
4. モデルの構築と予測
このステップでは、まずロジスティック回帰モジュールをインポートし、Logistic Regression() 関数を用いてロジスティック回帰分類器オブジェクトを作成します。
fit() 関数を使用してモデルを適合させ、predict() 関数を使用してテストセットで予測を実行します。
from sklearn import metrics
cnf_matrix = metrics.confusion_matrix(y_test, y_pred)
cnf_matrix |
5. コンフュージョンマトリックスによるモデルの評価
まず、混乱行列の定義から始めましょう。
混乱行列は分類モデルの性能を評価するために使われる表です。
アルゴリズムの性能も見ることができる。
クラスごとに集計された予測の正誤数が、混同行列の基礎となります。
array([[ 119 , 11 ],
[ 26 , 36 ]])
|
上記の結果では、混同行列が配列オブジェクトの形式になっていることがわかります。
このモデルは2値分類の例であるため、行列の次元は2×2となっています。
対角線上に存在する値は実際の予測を示し、非対角線上に存在する値は不正確な予測です。
したがって、119と36が実際の予測値で、26と11が不正確な予測値です。
メリット
- 多くの計算能力を必要とせず、実装も理解も簡単で、効率的かつシンプルなため、データアナリストや科学者に広く利用されています。
- また、特徴量のスケーリングも必要ない。各オブザベーションについて、ロジスティック回帰は確率のスコアを生成します。
デメリット
- 膨大な数のカテゴリカル特徴量/変数がある場合、ロジスティック回帰では管理しきれない。オーバーフィッティングになりやすい。
- ロジスティック回帰は、非線形問題を扱うことができないので、非線形先物は変換する必要がある。ターゲット変数に関連しないが、お互いに非常に似ているか相関している独立変数は、ロジスティック回帰ではうまくいかない。
まとめ
このセッションでは、ロジスティック回帰のフィットについて多くの情報をカバーしました。
ロジスティック回帰とは何か、回帰モデルの適合方法、性能の評価方法、そしていくつかの理論的な情報を学びました。
これで、自分のデータセットにロジスティック回帰の手法を使うことができるようになったはずです。