目次
1. KTBoostの概要
1.1 KTBoostのクラスター分析とは
1.2 KTBoostのライブラリ
2. 実験
2.1 環境設定
2.2 データロード
2.3 モデル作成
2.4モデル評価
2.5 # 特徴量の重要性
1. KTBoostの概要
1.1 KTBoostとは
KTBoostとは、カーネルブースティングとツリーブースティングを組み合わせた新たなブースティングアルゴリズムです。カーネルとツリーブーストを組み合わせたアイデアは、ツリーは関数の粗い部分を学習するのに適し、RKHS回帰関数は関数の滑らかな部分をよりよく学習できるため、不連続ツリーと連続RKHS関数は互いに補完し合うと考えられています。
論文の結果ですが、RKHSとTreeに比べて良い予測結果がでています。
カーネルとツリーのブースティングの組み合わせの関数:
論文:KTBoost: Combined Kernel and Tree Boosting
https://arxiv.org/abs/1902.03999
1.2 KTBoostのライブラリ
2つの主要なクラスは、KTBoost.BoostingClassifierとKTBoost.BoostingRegressorです。
BoostingClassifierは分類分析のクラス、BoostingRegressorは回帰分析のクラスです。
パラメター
loss :損失:最適化される損失関数。
KTBoost.BoostingClassifier {‘deviance’, ‘exponential’}, optional (default=’deviance’)
KTBoost.BoostingRegressor {‘ls’, ‘lad’, ‘huber’, ‘quantile’, ‘poisson’, ‘tweedie’, ‘gamma’, ‘tobit’, ‘msr’}, optional (default=’ls’)
update_step : string, default=”hybrid”
ブースティング更新の計算方法を定義します。
learning_rate : float, optional (default=0.1)
“tree” “kernel” “combined”の基本学習者を選べます。
learning_rate : float, optional (default=0.1)
学習率を定義します。Learning_rateとn_estimatorsの間にはトレードオフがあります。
n_estimators : int (default=100)
ブーストのイテレーション
max_depth : integer, optional (default=5)
リーフノード数の最大値
min_weight_leaf : float, optional (default=1.)
リーフノードに必要がある重み付けされたサンプルの最小数
criterion : string, optional (default=”mse”)
分割の品質を測定する関数
random_state : int, RandomState instance or None, optional (default=None)
乱数を制御するパラメータ
kernel : string, default=”rbf”
“laplace”, “rbf”, and “GW” のカーネル関数
theta : float, default: 1.
カーネル関数が距離とともに減衰する速度を決定するカーネル関数
n_neighbors : int, default: None
範囲パラメータのパラメータ
alphaReg : float, default: 1.
カーネルリッジ回帰ブースティング更新の正則化パラメーター
nystroem : boolean, default=None
Nystroem samplingを利用するかどうか
n_components : int, detault = 100
カーネルブーストのためのNystroemサンプリングで使用されるデータポイントの数。
詳細:https://pypi.org/project/KTBoost/
2. 実験
環境:Colab
データセット:scikit-learnの乳がんデータセットは、30つの特徴量と乳がんあるかどうかラベルのデータです。
モデル:ベースモデル(決定木、ランダムフォレスト)、KTBoost
モデル評価:Accuracy
2.1 環境設定
KTBoostのライブラリをインストールします。
!pip install -U KTBoost |
ライブラリのインポート
# ライブラリのインポート import pandas as pd import numpy as np from datetime import datetime from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn import model_selection from sklearn.tree import DecisionTreeClassifier from sklearn.ensemble import RandomForestClassifier
import KTBoost.KTBoost as KTBoost
seed = 0 |
2.2 データロード
データを読み込んで、確認します。
# サンプルデータロード loaded_data = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(loaded_data.data, loaded_data.target, random_state=seed)
print(‘X_train shape’, X_train.shape) print(‘y_train shape’, y_train.shape) loaded_data.feature_names |
2.3 モデル作成
モデルを作成します。
kfold = model_selection.KFold(n_splits = 5) scores = {}
# 決定木 start_time = datetime.now() dtc_clf = DecisionTreeClassifier(random_state=seed) dtc_clf.fit(X_train, y_train) results = model_selection.cross_val_score(dtc_clf, X_test, y_test, cv = kfold) end_time = datetime.now() scores[(‘1.decision_tree’, ‘duration’)] = end_time – start_time scores[(‘1.decision_tree’, ‘train_score’)] = results.mean() scores[(‘1.decision_tree’, ‘test_score’)] = dtc_clf.score(X_test, y_test)
# ランダムフォレスト start_time = datetime.now() rfc_clf = RandomForestClassifier(random_state=seed) rfc_clf.fit(X_train, y_train) results = model_selection.cross_val_score(rfc_clf, X_test, y_test, cv = kfold) end_time = datetime.now() scores[(‘2.Random Forest’, ‘duration’)] = end_time – start_time scores[(‘2.Random Forest’, ‘train_score’)] = results.mean() scores[(‘2.Random Forest’, ‘test_score’)] = rfc_clf.score(X_test, y_test)
# KTBoost start_time = datetime.now() ktb_clf = KTBoost.BoostingClassifier(random_state=seed) ktb_clf.fit(X_train, y_train) results = model_selection.cross_val_score(ktb_clf, X_test, y_test, cv = kfold) end_time = datetime.now() scores[(‘3.KTBoost’, ‘duration’)] = end_time – start_time scores[(‘3.KTBoost’, ‘train_score’)] = results.mean() scores[(‘3.KTBoost’, ‘test_score’)] = ktb_clf.score(X_test, y_test) |
2.4 モデル評価
乳がんデータセットで決定木、ランダムフォレスト、KTBoostのモデル作成しました。KTBoostは良い予測結果ですが、ランダムフォレストを超えませんでした。学習の時間はランダムフォレストより速いですが、決定木より遅いの結果になります。
# モデル評価 pd.Series(scores).unstack() |
2.5 # 特徴量の重要性
特徴量の重要性も簡単に作成できます。
# feature importances
KTBoost.plot_feature_importances(model=ktb_clf,feature_names=loaded_data.feature_names,maxFeat=10, figsize=(10,5)) |
担当者:HM
香川県高松市出身 データ分析にて、博士(理学)を取得後、自動車メーカー会社にてデータ分析に関わる。その後コンサルティングファームでデータ分析プロジェクトを歴任後独立 気が付けばデータ分析プロジェクトだけで50以上担当
理化学研究所にて研究員を拝命中 応用数理学会所属