Pythonでロジスティック回帰を行う方法

Python

本記事ではPythonでロジスティック回帰を行う方法を解説します。
Pythonでロジスティック回帰を行うためにはscikit-learnを使用します。

ロジスティック回帰とは

ロジスティック回帰とは二値分類や多値分類を行うための回帰分析です。
それに対して、線形回帰は連続値を予測するための回帰分析です。

線形回帰の例はある店の売り上げ予測や株価の予測などが挙げられます。
ロジスティック回帰は画像の分類やある患者への投薬が有効か否かの分類する問題などが例として挙げられます。

ロジスティック回帰の実装

事前準備

ではロジスティック回帰のコーディングに着手してゆきますが、その前にライブラリをインストールする必要があります。
下記のコマンドでscikit-learnをインストールしてください。

pip install scikit-learn

コーディング

今回はアイリスデータセットを使用します。

# ①アイリスデータセットの準備
from sklearn.datasets import load_iris
iris = load_iris()

# ②データの分割
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(
    iris.data, iris.target, test_size=0.3, random_state=3)

# ③ロジスティック回帰モデルの計算
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
model.fit(x_train, y_train)

# ④予測と精度の計算
y_pred = model.predict(x_test)
from sklearn import metrics
metrics.accuracy_score(y_test, y_pred)
ロジスティック回帰の実装
  • アイリスデータセットの準備

    from sklearn.datasets import load_irisでアイリスデータ取得関数を使用できるようにし、load_iris()でデータを取得します。

    引数にas_frame=Trueを入力することでデータをDataFrameの形で取得できます。
    as_frame=Falseとするとデータをnumpy.arrayで取得できます。
    デフォルトはas_frame=Falseです。

    特徴量は下記のとおりです。

    sepal length (cm)がく片の長さ(cm)
    sepal width (cm)がく片の幅(cm)
    petal length (cm)花びらの長さ(cm)
    petal width (cm)花びらの幅(cm)

    目的変数は0,1,2の三値です。0,1,2は下記の花の種類を示します。

    0セトーサ
    1ヴァーシカラー
    2ヴァージニカ
  • データの分割

    ロジスティック回帰は学習と評価のステップがあり、それぞれ別のデータを使用します。
    そのためにfrom sklearn.model_selection import train_test_splitでデータを分割し、
    train_test_splitで分割を実行します。第一引数には特徴量を第二引数には目的変数を渡します。
    また、test_sizeはテストデータのサイズです。
    分割はランダムに行われますが、random_stateに同じ値を与えれば分割結果を固定できます。

  • ロジスティック回帰モデルの計算

    from sklearn.linear_model import LogisticRegressionでロジスティック回帰を行うクラスを使えるようにします。
    model = LogisticRegression()でインスタンス化します。
    model.fit(x_train, y_train)でロジスティック回帰を計算します。

  • 予測と精度の計算

    y_pred = model.predict(x_test)で予測を行います。
    from sklearn import metricsで精度計算用のライブラリをインポートします。
    metrics.accuracy_score(y_test, y_pred)で精度を計算します。
    引数には予測結果と正解データを与える必要があります。

先程のコードを実行すると精度が出力されます。

タイトルとURLをコピーしました