機械学習: ロジスティック回帰の理論から実装まで
1. はじめに ~ロジスティック回帰とはなにか
ロジスティック回帰とは、いくつかの説明変数から確率を計算して予測を行なうことが出来る。・一般線形モデルの一種
・分類に使われることが多い
一般線形モデルであるため対数を適用することによって予測したい値と応答を対応させる必要がある。
これをモデルとして表したものが以下の式となる
今回もこの式のパラメータα、βを設定する必要がある。
ロジスティック回帰で最適を決める場合は、尤度関数を用いることが多い
※今回は、勾配降下法を用いて交差エントロピー誤差を最小化にする方法などは省略させていただきます。
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
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でロジスティック回帰を実装してみました。