キャリブレーション(calibrated classifiers)


 

目次

1. キャリブレーション(calibrated classifiers)の概要
1.1 キャリブレーションのクラスター分析とは
1.2 キャリブレーションのライブラリ
2. 実験
2.1 環境設定
2.2 データセット作成
2.3 SVC
2.4 SVC +キャリブレーションClassifierCV
2.5 まとめ

 

1. キャリブレーションの概要

1.1 キャリブレーションとは

キャリブレーション(calibrated classifiers)はモデルによって算出された予測確率を本来の確率に近づける手法です。普通の分類問題では、どのクラスに属するかを判別するモデルを作りますが、あるクラスに属する確率はどのくらいか、を予測したい場合を考えます。

モデルの出力値を各クラスに属する確率に近づけることを、キャリブレーションと言います。

キャリブレーションの方法を2つ記載します。

 

Sigmoid/Platt Scaling

説明変数をモデル出力値、目的変数を正解ラベルとしてSigmoid関数にフィットさせ、そのSigmoid関数に通した値をキャリブレーションした値とします。

Isotonic Regression

与えられた順序制約を満たすようにパラメータを推定する問題は単調回帰 (isotonic regression) と呼ばれます。

検量線(けんりょうせん:calibration curve)

下記ののプロットは、calibration_curveを使用して、さまざまな分類器の確率的予測がどの程度適切に較正されているかを比較しています。 x軸は、各ビンの平均予測確率を表します。 y軸は、陽性の割合、つまり、クラスが陽性クラスであるサンプルの割合です。

詳細:https://scikit-learn.org/stable/modules/calibration.html

 

SklearnのCalibratedClassifierCV

https://scikit-learn.org/stable/modules/generated/sklearn.calibration.CalibratedClassifierCV.html#sklearn.calibration.CalibratedClassifierCV

 

sklearn.calibration.CalibratedClassifierCV(base_estimator=None, *, method=’sigmoid’, cv=None, n_jobs=None, ensemble=True)

 

パラメター

base_estimatorestimator: instance, default=None

分類モデル

 

method: {‘sigmoid’, ‘isotonic’}, default=’sigmoid’

キャリブレーションの方法

 

cv: int, cross-validation generator, iterable or “prefit”, default=None

交差検定分割方法

 

n_job: sint, default=None

並行して実行するジョブ数

 

ensemble: bool, default=True

Trueの場合、base_estimatorはトレーニングデータを使用して適合され、テストデータを使用して調整されます

Falseの場合、cvは、cross_val_predictを介してバイアスのない予測を計算するために使用され、その後、キャリブレーションに使用されます。

 

2. 実験

環境:Colab

データセット:不均衡データを作成します。

モデル:SVC、SVC +キャリブレーション

モデル評価:AUC

 

2.1 環境設定

 

ライブラリのインポート

from numpy import mean

from sklearn.datasets import make_classification

from sklearn.model_selection import train_test_split

from sklearn.model_selection import cross_val_score

from sklearn.model_selection import RepeatedStratifiedKFold

from sklearn.svm import SVC

from sklearn.calibration import CalibratedClassifierCV

 

2.2 データセット作成

不均衡データを作成します。

# generate dataset

X, y = make_classification(n_samples=10000, n_features=2, n_redundant=0,  n_clusters_per_class=1, weights=[0.99], flip_y=0, random_state=4)

 

Yを確認して、1の値は少ないで不均衡データになっています。

# count y

print(‘Number of 0: ‘, np.count_nonzero(y == 0))

print(‘Number of 1: ‘,np.count_nonzero(y == 1))

 

2.3 SVC

SVCのベースモデルを作成します。AUC は0.808です。

# SVC

model = SVC(gamma=’scale’)

 

# モデル評価

cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)

scores = cross_val_score(model, X, y, scoring=’roc_auc’, cv=cv, n_jobs=-1)

print(‘Mean ROC AUC: %.3f’ % mean(scores))

Mean ROC AUC: 0.808

 

2.4 SVC +キャリブレーションClassifierCV

キャリブレーションClassifierCVを追加して、AUC:は0.867になりました。

# CalibratedClassifierCV + SVC

model = SVC(gamma=’scale’)

calibrated = CalibratedClassifierCV(model, method=’isotonic’, cv=3)

 

# モデル評価

cv = RepeatedStratifiedKFold(n_splits=10, n_repeats=3, random_state=1)

scores = cross_val_score(calibrated, X, y, scoring=’roc_auc’, cv=cv, n_jobs=-1)

print(‘Mean ROC AUC: %.3f’ % mean(scores))

 

Mean ROC AUC: 0.867

 

2.5 まとめ

不均衡データでSVCモデルとキャリブレーション付けSVCモデルを作成しました。キャリブレーション付けSVCモデルのモデル精度は0.06くらいに伸びました。

担当者:HM

香川県高松市出身 データ分析にて、博士(理学)を取得後、自動車メーカー会社にてデータ分析に関わる。その後コンサルティングファームでデータ分析プロジェクトを歴任後独立 気が付けばデータ分析プロジェクトだけで50以上担当

理化学研究所にて研究員を拝命中 応用数理学会所属