初心者向け!ロジスティック回帰をわかりやすく解説

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

「ロジスティック回帰」という名前を聞くと、「回帰?」と思うかもしれませんが、実は分類のための手法 です。

例えば、以下のような 「はい / いいえ」「A / B」 で分ける二択の分類問題 に使われます。

  • スパムメールか?(Yes / No)
  • 猫か犬か?(猫 / 犬)
  • 試験に合格するか?(合格 / 不合格)

2. ロジスティック回帰の仕組み

ロジスティック回帰は、データの間に境界線(直線)を引いて分類 します。

🔹 直線で分けるイメージ

例えば、以下のようなデータがあるとします。

diff
◯ ◯ ◯ ◯ ← カテゴリー1(合格)
-------------------- 境界線
× × × × ← カテゴリー2(不合格)

この 「——————–」 の部分が、ロジスティック回帰によって学習される 分類のための境界線 です。

❓ なぜ「回帰」と呼ばれるの?
「データを数式で表し、確率を予測する」 という点で回帰分析の要素を持つためです。

ロジスティック回帰の数式は、次のようになります。

P(y=1)=11+e−(ax+b)P(y=1) = \frac{1}{1 + e^{-(ax + b)}}

  • P(y=1) は「あるデータが 1(合格・スパム・犬 など)に分類される確率」
  • ax + bデータの特徴に基づいたスコア
  • e は自然対数の底(2.718…)

この数式を使って、データがどちらのクラスに分類される確率を計算し、境界線を決める という仕組みです。


3. Pythonでロジスティック回帰を実装

では、実際に Python でロジスティック回帰を動かしてみましょう!
今回は scikit-learn を使います。

✅ 3-1. 必要なライブラリをインストール

まず、ライブラリをインストールします。

bash
pip install numpy matplotlib scikit-learn

✅ 3-2. データを作成

Pythonの make_classification() を使って、ロジスティック回帰用のデータを作ります。

python
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split

# データを作成(100個のサンプル, 特徴量2つ)
X, y = make_classification(n_samples=100, n_features=2, n_redundant=0, random_state=42)

# 訓練データとテストデータに分割
train_X, test_X, train_y, test_y = train_test_split(X, y, test_size=0.25, random_state=42)

💡 ポイント

  • make_classification()分類用のデータを自動生成
  • train_test_split()データを訓練用とテスト用に分ける
  • n_features=2X軸・Y軸の2次元データ
  • random_state=42毎回同じデータを作るための設定

✅ 3-3. ロジスティック回帰モデルを作成

次に、ロジスティック回帰のモデルを作り、学習させます。

python
from sklearn.linear_model import LogisticRegression

# モデルを作成
model = LogisticRegression()

# 訓練データで学習
model.fit(train_X, train_y)

# テストデータで正解率を確認
accuracy = model.score(test_X, test_y)
print(f"正解率: {accuracy:.2f}")

💡 ここで何をしている?

  • LogisticRegression() → ロジスティック回帰のモデルを作成
  • fit() → 訓練データでモデルを学習
  • score()テストデータでモデルの精度(正解率)を評価

出力例

makefile
正解率: 0.96

約96%の正確さで分類できた!


4. 分類の境界線を可視化

モデルがどのようにデータを分類したのか グラフで確認 してみましょう。

python
import matplotlib.pyplot as plt
import numpy as np

# データ点をプロット
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.coolwarm, edgecolors='k')

# 決定境界を描画
x1_min, x1_max = X[:, 0].min() - 1, X[:, 0].max() + 1
x2_min, x2_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx1, xx2 = np.meshgrid(np.linspace(x1_min, x1_max, 100),
np.linspace(x2_min, x2_max, 100))
Z = model.predict(np.c_[xx1.ravel(), xx2.ravel()]).reshape(xx1.shape)

plt.contourf(xx1, xx2, Z, alpha=0.4, cmap=plt.cm.coolwarm)
plt.xlim(xx1.min(), xx1.max())
plt.ylim(xx2.min(), xx2.max())
plt.title("ロジスティック回帰による分類結果")
plt.xlabel("特徴量1")
plt.ylabel("特徴量2")
plt.show()

グラフの説明

  • データ点(赤・青)がプロットされる
  • ロジスティック回帰の分類境界線(直線)が描画される
  • 各クラスのエリアが色分けされる

これで、「データがどのように分類されているのか?」 が視覚的にわかります!


5. まとめ

✅ ロジスティック回帰のポイント

2つのグループに分類する手法(スパムメール判定、合格/不合格 など)
「回帰」という名前だけど、分類のためのモデル
直線の決定境界を学習し、データを分類する
Python(scikit-learn)を使えば簡単に実装できる!


🔥 次のステップ

ロジスティック回帰を理解したら、次は以下の応用を試してみましょう!

多クラス分類(3種類以上の分類)LogisticRegression(multi_class='multinomial')
非線形データに対応(カーネルSVMなど)
特徴量を増やしてモデルの精度を向上

この記事が ロジスティック回帰を学ぶ手助け になれば嬉しいです!🚀

Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です