機械学習: ロジスティック回帰の理論から実装まで

1.  はじめに ~ロジスティック回帰とはなにか

ロジスティック回帰とは、いくつかの説明変数から確率を計算して予測を行なうことが出来る。
・一般線形モデルの一種
・分類に使われることが多い

一般線形モデルであるため対数を適用することによって予測したい値と応答を対応させる必要がある。
これをモデルとして表したものが以下の式となる

f:id:shiba147:20190926183538p:plain
ロジスティック回帰 モデル

今回もこの式のパラメータα、βを設定する必要がある。
ロジスティック回帰で最適を決める場合は、尤度関数を用いることが多い

※今回は、勾配降下法を用いて交差エントロピー誤差を最小化にする方法などは省略させていただきます。

2.  ~pythonでロジスティック回帰の実装

scikit-learnからアヤメのデータ量を読み込んで実際にpythonを用いてロジスティック回帰を実装します。
・使用するライブラリをインポート

import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split

scikit-learnから読み込んだアヤメのデータ量をデータフレームとして出力

iris = load_iris()
iris
df = pd.DataFrame(iris.data, columns = iris.feature_names)
df

f:id:shiba147:20190926194305p:plain
アヤメのデータ量
150 rows × 4 columns
4種類の特徴量を持った150個のデータがあることが分かります。

今回は、sepal length (がくの長さ)をXとし、データを取り出して学習させようと思います。

X = iris.data[50:, 0].reshape(-1,1)
y = iris.target[50:] -1

前処理が終わったのでscikit-learnを使ってロジスティック回帰を実装していきます
初めに、StandardScalerでsepal lengthのデータを標準化します。

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
X_scaled

標準化したデータの確認

array([[ 1.11900931],
       [ 0.20924564],
       [ 0.96738203],
       [-1.15539985],
       [ 0.36087292],
       :

次に学習用データとテストデータに分類してfit関数を呼び出して学習させます。

X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, random_state = 0)
log_reg = LogisticRegression().fit(X_train, y_train)

学習した切片と傾きを確認します

log_reg.intercept_, log_reg.coef_
(array([0.05373445]), array([[1.24847163]]))

最後にscore関数でどれくらい学習できたのかを出力します。

print(log_reg.score(X_train, y_train))
print(log_reg.score(X_test, y_test))
0.7333333333333333
0.72

簡単なデータセットなのでもっと精度良く分類できると思います
今回は、pythonでロジスティック回帰を実装してみました。