【ロジスティック回帰入門】二値分類から多クラス分類まで実践的なサンプルコードで学ぶ!

※関数の書き方・実行結果に誤りがあるケースがあります。随時修正中です。また誤りに気づかれた方はこちらからご連絡頂きますとめちゃ嬉しいです。

目次

みんな、こんにちは!

今回は「ロジスティック回帰」について学んでいくで!これ、機械学習の中でもとても重要な技術やねん。ロジスティック回帰は、特に二つのグループにデータを分ける「分類問題」に使われるんや。例えば、ある果物が「リンゴ」か「オレンジ」かを判別するみたいな感じやな。

メリット

  • シンプルさ:ロジスティック回帰は直感的で、やり方も簡単。初心者でも取り組みやすいのが嬉しいところやで。
  • 解釈のしやすさ:結果を解釈しやすいから、どんな特徴が分類に寄与してるかが分かりやすいんや。

例え話

想像してみてな。君が友達とカフェに行くとするやろ?メニューには「コーヒー」と「紅茶」がある。友達が「コーヒーを頼む?」って聞いてきたら、君は「うん、コーヒーが好きや!」って答えるやろ?これ、まさにロジスティック回帰のイメージやねん。君の選択肢が二つ(コーヒーか紅茶)で、それぞれの可能性を計算しているようなもんや。

これからは、実際にロジスティック回帰を使ってみんなでデータを分類していくから、楽しみにしててな!

ロジスティック回帰の基本概念と用途

ロジスティック回帰って、ちょっと聞き慣れないかもしれんけど、実はすごい役立つ技術やねん。ここで、基本的な概念を説明するで。

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

ロジスティック回帰は、線形回帰の発展版で、出力が確率になるように設計されてるんや。具体的には、ある事象が起こる確率を計算するもんや。例えば、「明日雨が降る確率」みたいな感じやな。

シグモイド関数

ロジスティック回帰では、シグモイド関数っていう特別な関数を使うんや。この関数は、どんな値でも0から1の間に収めてくれるから、確率を求めるのにぴったりやねん。シグモイド関数はこんな形をしてるで:

f(x) = 1 / (1 + e^(-x))

ここで、eは自然対数の底やで。この関数の特徴は、入力が大きいと1に近づき、入力が小さいと0に近づくことや。つまり、出力が0.5を超えると「はい、そうなる」と予測するというわけや。

用途

  • 医療:病気の有無を判断するために使われたりする。例えば、ある検査結果から病気の可能性を計算する時に役立つで。
  • マーケティング:顧客が商品を購入するかどうかを予測するためにも使われる。これで、どの顧客にプロモーションをかけるかを決められるんや。

ロジスティック回帰は、シンプルやけどパワフルな手法やから、これからの実装も楽しみにしててな!

二値分類問題の実装

さて、次は実際にロジスティック回帰を使って、二値分類問題に挑戦してみるで!ここでは、Pythonを使ってデータを分類する方法を説明するわ。

データセットの準備

まずは、サンプルデータを使ってみることにするで。ここでは、Irisデータセットを使って、特定の花の種類を「Setosa」か「非Setosa」に分類することにするわ。

コードの実装

まずは必要なライブラリをインポートするで。

import pandas as pd
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix

次に、データセットをロードして、前処理をするで。

# Irisデータセットをロード
iris = load_iris()
X = iris.data
y = (iris.target == 0).astype(int)  # Setosaかどうかの二値分類に変換

# データを訓練用とテスト用に分ける
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

ロジスティック回帰のモデルを作成

次に、ロジスティック回帰のモデルを作成するで。

# モデルのインスタンスを作成
model = LogisticRegression()

# モデルを訓練
model.fit(X_train, y_train)

予測と評価

モデルを使って、テストデータで予測してみるで。

# テストデータで予測
y_pred = model.predict(X_test)

# 精度を計算
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')

# 混同行列を表示
conf_matrix = confusion_matrix(y_test, y_pred)
print('Confusion Matrix:')
print(conf_matrix)

これで、二値分類の実装が完了や!結果の精度や混同行列を見て、モデルのパフォーマンスを評価できるで。

次は、さらに進んで多クラス分類に挑戦してみるから、楽しみにしててな!

多クラス分類への拡張

さあ、次は多クラス分類に挑戦してみるで!ロジスティック回帰は、二値分類だけやなくて、多クラス分類にも対応できるんや。これを利用して、Irisデータセットのすべての花の種類を分類してみるで。

多クラス分類の概念

ロジスティック回帰を用いた多クラス分類は、基本的に「一対多」のアプローチを取るで。つまり、各クラスについて二値分類を行い、それぞれのクラスに対して確率を計算するんや。最も確率の高いクラスが最終的な予測結果になるわけや。

コードの実装

まずは、さっきのコードを少し変更して、多クラス分類を実装してみるで。

# 必要なライブラリをインポート
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, classification_report

# Irisデータセットをロード
iris = load_iris()
X = iris.data
y = iris.target  # すべてのクラスを使用

# データを訓練用とテスト用に分ける
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# ロジスティック回帰のモデルを作成
model = LogisticRegression(multi_class='ovr')  # 'ovr'は一対多の方法を指定

# モデルを訓練
model.fit(X_train, y_train)

予測と評価

モデルを使って、テストデータで予測してみるで。

# テストデータで予測
y_pred = model.predict(X_test)

# 精度を計算
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')

# 分類レポートを表示
report = classification_report(y_test, y_pred, target_names=iris.target_names)
print('Classification Report:')
print(report)

これで、多クラス分類も完了や!結果の精度や各クラスの評価を見て、モデルのパフォーマンスを確認できるで。

ロジスティック回帰は、二値分類にも多クラス分類にも使える万能な手法やから、これをマスターしておくと色んな場面で役立つで!次は、決定境界の可視化に進んでいくから、楽しみにしててな!

決定境界の可視化

さあ、次はロジスティック回帰の決定境界を可視化してみるで!決定境界を可視化することで、モデルがどのようにデータを分類しているかを直感的に理解できるようになるんや。ここでは、Irisデータセットの2つの特徴量を使って、決定境界を描いてみるで。

特徴量の選択

まずは、Irisデータセットから2つの特徴量を選ぶで。ここでは、花のがくの長さ(sepal length)とがくの幅(sepal width)を使うことにするわ。

コードの実装

それじゃあ、決定境界を可視化するためのコードを見てみよう!

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# Irisデータセットをロード
iris = load_iris()
X = iris.data[:, :2]  # 最初の2つの特徴量を選択
y = iris.target

# データを訓練用とテスト用に分ける
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# ロジスティック回帰のモデルを作成
model = LogisticRegression(multi_class='ovr')
model.fit(X_train, y_train)

# 決定境界を描画
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.01),
                     np.arange(y_min, y_max, 0.01))

Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.figure(figsize=(10, 6))
plt.contourf(xx, yy, Z, alpha=0.3, cmap='viridis')
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolor='k', marker='o', cmap='viridis')
plt.xlabel('Sepal Length')
plt.ylabel('Sepal Width')
plt.title('Logistic Regression Decision Boundary')
plt.show()

結果の解釈

このコードを実行すると、決定境界が描画されるで。色で示された領域が、それぞれのクラスに対応していて、白い点がデータポイントや。決定境界がどうなっているかを見ることで、モデルがどのようにクラスを分けているかがわかるんや。

  • 決定境界:クラスが変わる境目のことや。モデルがどのようにデータポイントを判断しているかを示しているで。
  • データポイント:実際のデータや。色によって分類されたクラスがわかるで。

これで、ロジスティック回帰の決定境界を可視化する方法がわかったな!次は、分類レポートの解釈について学んでいくから、楽しみにしててな!

分類レポートの解釈(精度、再現率、F1スコア)

さて、最後は分類レポートの解釈について学んでいくで!分類レポートには、モデルのパフォーマンスを評価するための重要な指標が含まれているから、これを理解しておくことが大事や。

分類レポートの内容

分類レポートには、以下の指標が含まれることが多いで。

  • 精度(Accuracy):全体の正しく分類されたデータポイントの割合や。計算式は以下の通り。

[ \text{Accuracy} = \frac{\text{TP} + \text{TN}}{\text{TP} + \text{TN} + \text{FP} + \text{FN}} ]

  • 再現率(Recall):正しいクラスに属するデータポイントのうち、モデルが正しく予測した割合や。計算式は以下の通り。

[ \text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}} ]

  • F1スコア:精度と再現率の調和平均で、モデルのバランスを評価する指標や。計算式は以下の通り。

[ \text{F1 Score} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} ]

コードの実装

さっそく、分類レポートを生成するためのコードを見てみよう!

from sklearn.metrics import classification_report

# 分類レポートを表示
report = classification_report(y_test, y_pred, target_names=iris.target_names)
print('Classification Report:')
print(report)

レポートの解釈

実行すると、各クラスごとの精度、再現率、F1スコアが表示されるで。これを見て、モデルが各クラスに対してどのようにパフォーマンスを発揮しているかを判断できるんや。

  • 精度が高いほど、モデルが正確にクラスを予測できているってことや。
  • 再現率が高ければ、モデルが特定のクラスを見逃すことが少ないってことや。
  • F1スコアは、精度と再現率のバランスを考慮しているから、どちらか一方が極端に低いと良いスコアにはならんで。

これで、分類レポートの解釈が完了や!これらの指標を使って、モデルの強みや弱みを把握して、改善点を見つけることができるで。

ロジスティック回帰を使った分類問題に関する一連の流れを学んだな!これを活かして、さまざまなデータ分析を楽しんでな!次のステップも期待してるで!

【ロジスティック回帰入門】二値分類から多クラス分類まで実践的なサンプルコードで学ぶ!

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

この記事を書いた人

目次