タイトルのテキスト
タイトルのテキスト
タイトルのテキスト
タイトルのテキスト

サイキットラーンのcalibrationモジュールによる確率補正

AI Python

t f B! P L

 

パソコンの画像

sklearn.calibrationモジュールは、Scikit-learnで提供されている確率の補正(probability calibration)手法を含むツールセットです。確率補正は、分類モデルが出力する確率値が、実際の事象の確率と一致するように調整する手法です。通常、分類モデルの出力は「確率」として解釈されますが、これが真の確率と一致しない場合があります。

 〇確率補正の種類

sklearn.calibrationモジュールには、主に以下の2つのクラスが含まれています:

 

CalibratedClassifierCV: 分類器を包み込み、交差検証を使用して確率補正を行います。主に、モデルが出力する確率が適切にキャリブレートされたかどうかを評価するために使用されます。

 

calibration_curve: これは関数であり、実際の事象の確率とモデルの出力確率の関係を評価するために使用されます。これにより、モデルの確率が実際の確率にどの程度一致しているかを可視化できます。

 

確率補正は、特に分類モデルの確率が不正確であると判断される場合、例えば不均衡なクラス分類の場面で重要となります。モデルが出力する確率が適切にキャリブレートされている場合、これに基づいて意思決定を行う際により信頼性が高まります。

交差検証とは

交差検証(Cross-Validation)は、モデルの性能を評価するための統計的手法であり、特にデータが限られている場合やモデルの汎化性能をより信頼性高く評価するために使用されます。典型的な機械学習タスクでは、データセットを訓練データとテストデータに分割してモデルを評価することが一般的ですが、これだけではデータの偶然性により評価結果が不安定になる可能性があります。交差検証は、この不安定性を軽減するために役立ちます。

 

交差検証の主な手法にはいくつか種類がありますが、その中で代表的なものは k-分割交差検証(k-Fold Cross-Validation) です。以下は、k-分割交差検証の手順です:

 

データの分割: データセットをランダムにk個の(ほぼ)同じサイズのサブセットに分割します。

 

モデルの学習と評価: k回のイテレーションを行います。各イテレーションでは、1つのサブセットをテストデータとして使用し、残りのk-1個のサブセットを訓練データとして使用します。モデルを訓練し、テストデータで評価します。

 

評価値の平均: k回のイテレーションを通して得られた評価値を平均して最終的な性能評価とします。

 

この手法により、異なるサブセットをテストデータとして使用することで、モデルの性能評価がデータの特定の分割に依存せず、より一般的で安定したものとなります。一般的なkの値は5または10ですが、データセットが非常に大きい場合はそれよりも小さな値も使われることがあります。

 

交差検証は、モデルのハイパーパラメータの調整やモデルの比較、性能の不安定性の評価など、様々な場面で利用されます。

CalibratedClassifierCVを使用して確率補正の実装

from sklearn.datasets import load_breast_cancer

from sklearn.model_selection import train_test_split

from sklearn.linear_model import LogisticRegression

from sklearn.calibration import CalibratedClassifierCV

from sklearn.metrics import roc_auc_score

 

# Breast Cancerデータセットを読み込み

data = load_breast_cancer()

X = data.data

y = data.target

 

# データを訓練セットとテストセットに分割

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

 

# Logistic Regressionモデルの作成

base_model = LogisticRegression(random_state=42)

 

# CalibratedClassifierCVを使用して確率補正を行う

calibrated_model = CalibratedClassifierCV(base_model, method='sigmoid', cv='prefit')

calibrated_model.fit(X_train, y_train)

 

# テストデータで予測

probabilities = calibrated_model.predict_proba(X_test)[:, 1]

 

# AUCを評価

auc = roc_auc_score(y_test, probabilities)

print(f'AUC: {auc}')

この例では、LogisticRegressionモデルを作成し、それをCalibratedClassifierCVで包み込んでいます。methodパラメータで確率補正の手法を指定できます。上記の例では'sigmoid'を使用していますが、他にも'isotonic'などが利用可能です。訓練データでCalibratedClassifierCVを適用した後、テストデータで予測し、AUCを評価しています。

 

koneka1208

koneka1208

自己紹介

自分の写真
エクセル好きの窓際会社員です。 エクセルの操作法や日々の会社で得た知見などを発信していきます。 よろしくお願いします。

ブログ アーカイブ

連絡フォーム

名前

メール *

メッセージ *

QooQ