ロジスティック回帰分析の基礎と応用
ロジスティック回帰分析は、統計学や機械学習の分野で広く用いられる手法の一つです。
特に二値分類問題に適しており、データに基づいて結果を予測するのに役立ちます。本記事では、ロジスティック回帰の基本概念、計算式、そして実際の応用例について説明します。
ロジスティック回帰とは?
ロジスティック回帰は、目的変数が二値(\(0\) または \(1\))の場合に用いられる回帰分析の一種です。例えば、あるメールがスパムか否か、患者が特定の病気にかかっているか否かなどの問題に適用されます。
ロジスティック回帰では、シグモイド関数を用いて確率をモデル化します。
シグモイド関数は、次のように定義されます。
$$\sigma(z) = \frac{1}{1 + e^{-z}}$$
ここで、\(z\) は線形結合です。
$$z = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n$$
ロジスティック回帰の計算式
ロジスティック回帰モデルの目的は、入力変数 (\(x\)) に対して出力 \(y\) が \(1\) である確率を予測することです。
この確率は以下のように表されます。
$$P(y = 1 | x) = \sigma(\beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n)$$
これを簡単にすると、
$$P(y = 1 | x) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_n x_n)}}$$
このモデルを最適化するために、対数尤度関数を最大化します。
対数尤度関数は以下の通りです。
$$L(\beta) = \sum_{i=1}^{m} \left[ y_i \log(P(y_i | x_i)) + (1 – y_i) \log(1 – P(y_i | x_i)) \right]$$
ロジスティック回帰の応用例
応用例1: スパムメールの分類
スパムメールの分類は、ロジスティック回帰の典型的な応用例です。ここでは、メールの特徴(例:特定の単語の出現頻度、送信者アドレスのドメインなど)を入力変数として、メールがスパムか否かを予測します。
<div class="hcb_wrap"><pre class="prism line-numbers lang-python" data-lang="Python"><code># Pythonでの簡単な例
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# データの読み込み
data = pd.read_csv('spam_data.csv') # CSVファイルからデータを読み込む
X = data[['feature1', 'feature2', 'feature3']] # 特徴量として使用する列を指定
y = data['is_spam'] # 目的変数(スパムかどうか)を指定
# データの分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# データを訓練データとテストデータに分割。全データの20%をテストデータとして使用
# モデルの訓練
model = LogisticRegression() # ロジスティック回帰モデルを作成
model.fit(X_train, y_train) # 訓練データを用いてモデルを訓練
# 予測と評価
y_pred = model.predict(X_test) # テストデータを用いて予測を実行
print("Accuracy:", accuracy_score(y_test, y_pred)) # 予測結果の精度を表示</code></pre></div>
1. データの読み込み: pd.read_csv関数を使ってデータを読み込みます。
2. 特徴量とラベルの設定: 分類に使用する特徴量(列)と、目的変数(スパムかどうか)を設定します。
3. データの分割: train_test_split関数を使って、データを訓練データとテストデータに分割します。テストデータは全体の20%としています。
4. モデルの訓練: LogisticRegressionクラスを使ってロジスティック回帰モデルを作成し、訓練データを用いてモデルを訓練します。
5. 予測と評価: 訓練されたモデルを使ってテストデータを予測し、accuracy_score関数を使って予測の精度を評価します。
応用例2: 医療データの診断
患者のデータ(年齢、性別、検査結果など)を用いて、特定の病気の有無を予測することもロジスティック回帰で可能です。例えば、心臓病のリスクを予測するモデルを構築できます。
# Pythonでの医療データ診断の例
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
# データの読み込み
data = pd.read_csv('medical_data.csv') # CSVファイルからデータを読み込む
# 特徴量とラベルの設定
X = data[['age', 'blood_pressure', 'cholesterol', 'gender']] # 特徴量として使用する列を指定
y = data['has_disease'] # 目的変数(病気の有無)を指定
# データの分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# データを訓練データとテストデータに分割。全データの20%をテストデータとして使用
# モデルの訓練
model = LogisticRegression() # ロジスティック回帰モデルを作成
model.fit(X_train, y_train) # 訓練データを用いてモデルを訓練
# 予測
y_pred = model.predict(X_test) # テストデータを用いて予測を実行
# 評価
accuracy = accuracy_score(y_test, y_pred) # 予測結果の精度を計算
conf_matrix = confusion_matrix(y_test, y_pred) # 混同行列を計算
class_report = classification_report(y_test, y_pred) # 分類レポートを生成
print("Accuracy:", accuracy) # 精度を表示
print("Confusion Matrix:\n", conf_matrix) # 混同行列を表示
print("Classification Report:\n", class_report) # 分類レポートを表示
1. データの読み込み: pd.read_csv関数を使ってデータを読み込みます。
2. 特徴量とラベルの設定: 分類に使用する特徴量(年齢、血圧、コレステロール値、性別)と、目的変数(病気の有無)を設定します。
3. データの分割: train_test_split関数を使って、データを訓練データとテストデータに分割します。テストデータは全体の20%としています。
4. モデルの訓練: LogisticRegressionクラスを使ってロジスティック回帰モデルを作成し、訓練データを用いてモデルを訓練します。
5. 予測: 訓練されたモデルを使ってテストデータを予測します。
6. 評価: accuracy_score関数を使って予測の精度を評価し、confusion_matrix関数を使って混同行列を計算し、classification_report関数を使って分類レポートを生成します。
まとめ
ロジスティック回帰分析は、二値分類問題において非常に有用な手法です。シグモイド関数を用いた確率のモデル化により、複雑なデータセットに対しても効果的に予測を行う。
さいごまで読んでいただきありがとうございました!
【最新】こちらの記事がおすすめ!