Scikit-learnのロジスティック回帰にpandasのデータフレームを連結させる

機械学習において、ロジスティック回帰はよく使われるアルゴリズムの一つです。Scikit-learnを使ってロジスティック回帰を行う際、データフレームを扱うためには、pandasを使ってデータを整形する必要があります。本記事では、pandasを使ってデータフレームを作成し、Scikit-learnのロジスティック回帰に適用する方法について説明します。

はじめに

ロジスティック回帰は、データの分類に用いられるアルゴリズムです。Scikit-learnを使えば、簡単にロジスティック回帰モデルを構築することができます。しかし、Scikit-learnの入力となるデータは、NumPy配列またはPandasのデータフレームである必要があります。本記事では、データフレームを使ってロジスティック回帰モデルを構築する方法について解説します。

データフレームの準備:pandasでデータフレームを作成・整形する方法

ロジスティック回帰に適用するデータフレームを作成する方法を説明します。

必要なライブラリのインストール

本記事では、以下のライブラリを使用します。

  • pandas
  • scikit-learn

これらのライブラリがインストールされていることを確認してください。

データフレームの作成

まずは、データフレームを作成します。

import pandas as pd
df = pd.DataFrame({
    'age': [25, 35, 45, 20, 30, 40],
    'gender': ['male', 'female', 'male', 'female', 'male', 'female'],
    'income': [5000, 7000, 9000, 3000, 5000, 8000],
    'label': [0, 1, 1, 0, 1, 0]
})
print(df)

上記のコードでは、age、gender、income、labelの4つの列を持つデータフレームを作成しています。ageは年齢、genderは性別、incomeは収入、labelは目的変数です。目的変数labelは、0または1の値を持ちます。

上記のコードを実行すると、以下のようなデータフレームが表示されます。

   age  gender  income  label
0   25    male    5000      0
1   35  female    7000      1
2   45    male    9000      1
3   20  female    3000      0
4   30    male    5000      1
5   40  female    8000      0

カテゴリ変数の処理

ロジスティック回帰には、カテゴリ変数を扱うことができません。そのため、カテゴリ変数をダミー変数に変換する必要があります。pandasには、get_dummies()関数を使って簡単にダミー変数を作成することができます。

# カテゴリ変数のダミー変数化
df = pd.get_dummies(df, columns=['gender'])
print(df)

上記のコードを実行すると、gender列がダミー変数に変換され、以下のようなデータフレームが表示されます。

   age  income  label  gender_female  gender_male
0   25    5000      0              0            1
1   35    7000      1              1            0
2   45    9000      1              0            1
3   20    3000      0              1            0
4   30    5000      1              0            1
5   40    8000      0              1            0

gender列がダミー変数に変換され、gender_female列とgender_male列が追加されました。

Scikit-learnのロジスティック回帰:ロジスティック回帰の基本的な使い方とパラメータ調整

ロジスティック回帰モデルを構築するために、Scikit-learnのLogisticRegressionクラスを使用します。このクラスを使うことで、簡単にロジスティック回帰モデルを構築することができます。以下のコードを実行して、ロジスティック回帰モデルを構築してみましょう。

from sklearn.linear_model import LogisticRegression
# ロジステック回帰モデルの構築
lr = LogisticRegression(random_state=0)
X = df.drop('label', axis=1)
y = df['label']
lr.fit(X, y)

上記のコードでは、LogisticRegressionクラスを使ってロジスティック回帰モデルを構築しています。random_stateパラメータは、乱数のシードを指定するためのパラメータです。Xには、目的変数label以外の説明変数を、yには目的変数labelを格納しています。

ロジスティック回帰モデルを構築した後は、モデルの評価を行う必要があります。ロジスティック回帰モデルの評価には、混同行列やROC曲線などが用いられます。また、パラメータチューニングによる精度向上も重要です。ここでは、パラメータチューニングについて簡単に説明します。

LogisticRegressionクラスには、Cパラメータがあります。このパラメータは、正則化の強さを制御するために使われます。Cの値が小さいほど、正則化の強さが強くなります。逆に、Cの値が大きいほど、正則化の強さが弱くなります。Cの値を変えることで、モデルの性能が変わることがあります。以下のコードを実行して、Cパラメータの値を変えた場合のモデルの性能を比較してみましょう。

# パラメータチューニング
for c in [0.01, 0.1, 1, 10]:
    lr = LogisticRegression(C=c, random_state=0)
    lr.fit(X, y)
    score = lr.score(X, y)
    print(f'C={c}, score={score}')

上記のコードを実行すると、Cパラメータの値を変えた場合のモデルの性能が表示されます。

C=0.01, score=0.6666666666666666
C=0.1, score=0.6666666666666666
C=1, score=0.6666666666666666
C=10, score=0.6666666666666666

この結果から、このデータではCの値は検証の範囲では性能にあまり影響がないことが分かります。

このようなケースでは、Cの値を検証の範囲外に設定したり、他のパラメータをチューニングしたりします。

pandasとScikit-learnの連携:データフレームをロジスティック回帰モデルに適用する方法

pandasで作成したデータフレームをScikit-learnのロジスティック回帰モデルに適用する方法を説明します。

ロジスティック回帰モデルに適用するためには、目的変数以外の説明変数をXに、目的変数をyに格納する必要があります。これらの変数は、データフレームから取得することができます。

# 目的変数以外の説明変数をXに、目的変数をyに格納する
X = df.drop('label', axis=1)
y = df['label']

次に、上記で作成したXとyを使って、ロジスティック回帰モデルを構築します。

# ロジスティック回帰モデルの構築
lr = LogisticRegression(random_state=0)
lr.fit(X, y)

上記のコードを実行すると、ロジスティック回帰モデルが構築されます。

モデル評価と予測結果の活用:pandasを用いた予測結果の可視化・分析方法

ロジスティック回帰モデルの評価方法として、混同行列やROC曲線があります。混同行列とは、予測結果と真の結果を比較して、予測の正確性を評価する方法です。ROC曲線とは、真陽性率と偽陽性率の関係を可視化したグラフであり、分類器の性能を評価するために用いられます。

混同行列とROC曲線を可視化するには、matplotlibライブラリを使用します。以下のコードを実行することで、混同行列とROC曲線を可視化してみましょう。

import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix, plot_roc_curve

# ROC曲線と混同行列の表示
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))
plot_roc_curve(lr, X, y, ax=ax1)
ax1.set_title('ROC curve')
ax1.grid()
cm = confusion_matrix(y, lr.predict(X))
im = ax2.imshow(cm, cmap=plt.cm.Blues)
ax2.set_title('Confusion matrix')

for i in range(cm.shape[0]):
    for j in range(cm.shape[1]):
        ax2.text(j, i, cm[i, j], ha="center", va="center", color="white")

plt.show()

上記のコードを実行すると、以下のようなグラフが表示されます。

このグラフから、ロジスティック回帰モデルの性能が良いことが分かります。

また、予測結果をpandasのデータフレームに追加して、予測結果の可視化・分析も行うことができます。以下のコードを実行することで、予測結果を含んだデータフレームを作成してみましょう。

# 予測結果の追加
df['prediction'] = lr.predict(X)
print(df)

上記のコードを実行すると、以下のようなデータフレームが表示されます。

   age  income  label  gender_female  gender_male  prediction
0   25    5000      0              0            1           0
1   35    7000      1              1            0           0
2   45    9000      1              0            1           1
3   20    3000      0              1            0           0
4   30    5000      1              0            1           1
5   40    8000      0              1            0           1

予測結果がprediction列に追加されています。このデータフレームを使って、予測結果の可視化や分析を行うことができます。

まとめ

本記事では、pandasとScikit-learnを用いたロジスティック回帰モデルの構築方法について説明しました。具体的には、pandasを使ってデータフレームを作成し、Scikit-learnを使ってロジスティック回帰モデルを構築する方法、カテゴリ変数のダミー変数化の方法、パラメータチューニングの方法、モデル評価の方法、予測結果の可視化・分析方法について説明しました。

ロジスティック回帰モデルは、2値分類問題において、比較的単純かつ高速にモデルを構築することができる手法です。本記事で説明した方法を使って、実際のデータに対してロジスティック回帰モデルを構築し、分析を行うことができます。