RolexBoostの解説

目次

1. RolexBoostの概要
_1.1 RolexBoostとは
_1.2 RolexBoostのアルゴリズム
_1.3 RolexBoostのモデル評価
2. 実験
_2.1 環境準備
_2.2 データロード
_2.3 RolexBoostモデル作成
_2.4 decision treeモデル作成
_2.5 モデル評価

1. RolexBoostの概要

1.1 RolexBoostとは

モデルRolexBoostは Rotation-Flexible AdaBoostの略称で、新しい高い精度のアンサンブルのモデルです(RandomForestの亜種です)。RolexBoostはAdaBoostの拡張であり、違いは、適応損失関数を採用することでAdaBoostのパフォーマンスを向上させます。

ハイパーパラメーターは、指数損失の感度を制御します。これにより、各反復で最適な損失関数を特定できます。 RolexBoostは、柔軟な重み更新システムを使用して、範囲外のデータポイントに対してより堅牢な強力な分類器を構築します。

1.2 RolexBoostのアルゴリズム

  1. トレーニングデータDtr = {(x1、y1、…)、(xm、ym)}ここで、X = {x1、…、xm}およびY = {y1、…、ym}はそれぞれ説明変数、被説明変数に対応しています。
  2. L:ブートストラップサブサンプルの数
  3. S:部分空間の数
  4. T:反復回数(基本分類子)
  5. K:指数損失関数の感度を制御するハイパーパラメーター

トレーニングプロセス

l = 1からLまで

XをS個の部分空間にランダムに分割します:Xl、s

s = 1からSの場合

ブートストラップXl、s:X’l、s

PCAをX’l、sに適用し、主成分係数を抽出します:Rl、s

 

1.3 RolexBoostのモデル評価

30の二項分類問題に関する実験結果は、RolexBoostが競合するアンサンブル手法(AdaBoost、GentleBoost、Rotation Forest、Random Forest、Rotation Boost、FlexBoost)の中で最高の精度を確認しまた。

次に、post-hocを実行して、アンサンブルモデルの分類精度間のランキングに統計的に有意な差が存在するかどうかを検証しました。

参照:

rolexboostのライブラリ https://pypi.org/project/rolexboost/

rolexboostの論文 https://ieeexplore.ieee.org/document/9016246

 

2. 実験

環境:Google Colab

データセット:load_breast_cancer:scikit-learnで提供されている癌の判定を行うデータです。このデータは569人分のデータが存在し、凹み,凹点,対称性等の30個の説明変数があります。

モデル:rolexboostとdecision tree

モデル評価:AUC

 

2.1 環境準備

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

!pip install rolexboost

 

 

ライブラリをインポートします。

import numpy as np

import pandas as pd

 

from sklearn.datasets import load_breast_cancer

from sklearn.model_selection import train_test_split

from sklearn.metrics import roc_auc_score

from sklearn.metrics import plot_roc_curve

 

from sklearn.tree import DecisionTreeClassifier

from rolexboost import RolexBoostClassifier

 

import matplotlib.pyplot as plt

 

SEED = 11

 

2.2 データロード

Scikit learnからデータロードします。

# Load data

cancer = load_breast_cancer()

data = pd.DataFrame(np.c_[cancer[‘data’], cancer[‘target’]],

columns= np.append(cancer[‘feature_names’], [‘target’]))

 

X = data.drop([‘target’], axis=1)

y = data[‘target’]

 

print(len(data))

data.head(3)

 

学習データとテストデータを分けます。

訓練用:8割、評価用:2割に分割にします。

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

print(‘X_train’, X_train.shape)

print(‘X_test’, X_test.shape)

X_train (455, 30)

X_test (114, 30)

 

2.3 rolexboostモデル作成

デフォルトの設定でRolexboostを作成します。

rlx_clf = RolexBoostClassifier()

rlx_clf.fit(X_train, y_train)

 

RolexBoostClassifier(K=0.5, bootstrap_rate=0.75, ccp_alpha=0.0,

class_weight=None, criterion=’gini’, max_depth=1,

max_features=None, max_leaf_nodes=None,

min_impurity_decrease=0.0, min_impurity_split=None,

min_samples_leaf=1, min_samples_split=2,

min_weight_fraction_leaf=0.0, n_estimators=100,

n_features_per_subset=3, presort=’deprecated’,

random_state=None, splitter=’best’)

 

2.4 decision treeモデル作成

デフォルトの設定でdecision treeを作成します。

dt_clf = DecisionTreeClassifier()

dt_clf.fit(X_train, y_train)

 

DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion=’gini’,

max_depth=None, max_features=None, max_leaf_nodes=None,

min_impurity_decrease=0.0, min_impurity_split=None,

min_samples_leaf=1, min_samples_split=2,

min_weight_fraction_leaf=0.0, presort=’deprecated’,

random_state=None, splitter=’best’)

 

2.5 モデル評価

モデルの推論を行います。

y_pred_rlx = rlx_clf.predict(X_test)

y_pred_dt = dt_clf.predict(X_test)

 

 

Aucを計算し、比較します。

auc_rlx = roc_auc_score(y_pred_rlx, y_pred)

auc_dt = roc_auc_score(y_pred_dt, y_pred)

print(auc_rlx)

print(auc_dt)

 

0.954871794871795

0.9473684210526316

 

担当者:KW
バンコクのタイ出身 データサイエンティスト
製造、マーケティング、財務、AI研究などの様々な業界にPSI生産管理、在庫予測・最適化分析、顧客ロイヤルティ分析、センチメント分析、SaaS、PaaS、IaaS、AI at the Edge の環境構築などのスペシャリスト