メニュー
yu-to
管理者
本ブログを運営しているyu-toと申します。

高校数学の解説や公務員試験問題の解説、データサイエンスについての記事を書いていきます!

「データサイエンス×教育」に興味があり、日々勉学に励んでいます。

少しでも役に立つ情報の発信をしていきますのでぜひ読んでください。

また、同志からのお声がけはとても励みになります。ぜひ、コメントやメール、SNS等でご連絡ください!
カテゴリー
無料相談こちらをクリック

【統計学の実践】ロジスティック回帰分析の実践例

  • URLをコピーしました!

統計学を約10年勉強しています。
現在は、統計スキルを自身のキャリアに活用してきた方法をブログで発信しています。

  • 大学の研究テーマ「主成分分析を使った正しい評価方法」

  • 大学院の研究テーマ「階層的区間クラスタリング」

  • 統計検定2級所持

  • Kaggleのコンペに参加

統計学を約10年勉強しています。
現在は統計スキルを自身のキャリアに活用してきた方法をブログで発信しています。

  • 大学の研究テーマ「主成分分析を使った正しい評価方法」

  • 大学院の研究テーマ「階層的区間クラスタリング」

  • 統計検定2級所持

  • Kaggleのコンペに参加

目次

ロジスティック回帰分析の基礎と応用

ロジスティック回帰分析は、統計学や機械学習の分野で広く用いられる手法の一つです。

特に二値分類問題に適しており、データに基づいて結果を予測するのに役立ちます。本記事では、ロジスティック回帰の基本概念、計算式、そして実際の応用例について説明します。

ロジスティック回帰とは?

ロジスティック回帰は、目的変数が二値(\(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関数を使って分類レポートを生成します。

まとめ

ロジスティック回帰分析は、二値分類問題において非常に有用な手法です。シグモイド関数を用いた確率のモデル化により、複雑なデータセットに対しても効果的に予測を行う。

さいごまで読んでいただきありがとうございました!

このブログでは、統計スキルを身につけたいけど数学があまり得意ではないという方向けに、
高校数学から統計学の実践まで様々な記事を収録しています!

統計スキル習得のスタート地点

第一部 データの性質に関する基礎知識
観測は簡単ではない/誤差とばらつき/データに含まれるバイアス/交絡因子と因果関係/データサンプリングの方法論

第二部 データの分析に関する基礎知識
データの扱い/一変数データの振る舞い/変数の間の関係を調べる/多変量データの解釈する/数理モデリングの要点

第三部 データの解釈・活用に関する基礎知識
データ分析の罠/データ解釈の罠/データ活用の罠

数学っぽい説明はあまり多くなく、普段仕事とかで目にするデータの見方を変えてくれる良書です。
ぜひ読んでみてください!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

質問や感想はコメントへ!

コメントする

目次