目次
1. HistGradientBoostingClassifier
2. scikit-learnでのHistGradientBoostingClassifierのパラメータ
3. 実験
_3.1 データロード・加工
_3.2 データ前処理
_3.3 モデル作成
_3.4 モデル評価
1. HistGradientBoostingClassifier
GradientBoostingTreeはヒストグラムベースの勾配ブースティング分類ツリーアルゴリズムです。この実装はMicrosoftのLightGBMに基づいており、並列化にOpenMPを利用しています。
大きなデータセット(n_samples> = 10000)の場合はGradientBoostingClassifierよりもはるかに高速です。この推定器は、欠測値(NaN)でも学習できます。Scikit-Learnのv0.21.1以降では、HistGradientBoostingを利用できます。
2. scikit-learnでのHistGradientBoostingClassifierのパラメータ
sklearn.ensemble.HistGradientBoostingClassifier(loss=’auto’, *, learning_rate=0.1, max_iter=100, max_leaf_nodes=31, max_depth=None, min_samples_leaf=20, l2_regularization=0.0, max_bins=255, monotonic_cst=None, warm_start=False, early_stopping=’auto’, scoring=’loss’, validation_fraction=0.1, n_iter_no_change=10, tol=1e-07, verbose=0, random_state=None) |
loss{‘auto’, ‘binary_crossentropy’, ‘categorical_crossentropy’}, optional (default=’auto’)
ブースティングプロセスで使用する損失関数:
「binary_crossentropy」は二項分類に使用されます
マルチクラス分類の「categorical_crossentropy」。
「auto」は、データの性質に応じて、自動設定。
learning_ratefloat, optional (default=0.1)
彼は葉の値の乗法係数の設定
max_iterint, optional (default=100)
ブースティングプロセスの最大反復回数
max_leaf_nodesint or None, optional (default=31)
各ツリーの葉の最大数
max_depthint or None, optional (default=None)
各木の最大の深さ
min_samples_leafint, optional (default=20)
葉ごとのサンプルの最小数
l2_regularizationfloat, optional (default=0)
L2正則化パラメーター。 正則化を行わない場合は0を使用します。
max_binsint, optional (default=255)
欠落していない値に使用するビンの最大数
monotonic_cstarray-like of int of shape (n_features), default=None
各機能に適用する単調な制約を示します。 -1、1、および0は、それぞれ正の制約、負の制約、および制約なしに対応します。
warm_startbool, optional (default=False)
Trueの場合は、前の呼び出しのソリューションを再利用して、アンサンブルに推定量を適合させ、追加します。
early_stopping‘auto’ or bool (default=’auto’)
「auto」の場合、サンプルサイズが10000より大きいと、早期停止が有効になります。
verbose: int, optional (default=0)
冗長レベル。 ゼロでない場合は、フィッティングプロセスに関する情報を出力します。
random_stateint, np.random.RandomStateInstance or None, optional (default=None)
乱数を制御するパラメータ
3. 実験
環境:google colab
データセット:パキスタン、ファイサラバードのガバメントカレッジ大学による心不全の臨床記録データセット。このデータセットには、心不全を患った299人の患者の医療記録が含まれており、各患者プロファイルには13の臨床的特徴があります。
モデル:HistGradientBoostingClassifier
3.1 データロード・加工
UCI大学からデータをダウンロードします。
# Data Load import pandas as pd SEED = 111 data_url = ‘https://archive.ics.uci.edu/ml/machine-learning-databases/00519/heart_failure_clinical_records_dataset.csv’ df = pd.read_csv(data_url) print(df.head(3)) |
age anaemia creatinine_phosphokinase … smoking time DEATH_EVENT
0 75.0 0 582 … 0 4 1
1 55.0 0 7861 … 0 6 1
2 65.0 0 146 … 1 7 1
[3 rows x 13 columns]
データセットの確認:
299件13カラムのデータセットです。ラベルデータは’DEATH_EVENT’]になります。
# Data shape print(df.shape) print(df.columns) |
(299, 13)
Index([‘age’, ‘anaemia’, ‘creatinine_phosphokinase’, ‘diabetes’,
‘ejection_fraction’, ‘high_blood_pressure’, ‘platelets’,
‘serum_creatinine’, ‘serum_sodium’, ‘sex’, ‘smoking’, ‘time’,
‘DEATH_EVENT’],
dtype=’object’)
ラベルデータの確認:
299人の患者の中は96人が心不全であることがわかります。
# DEATH_EVENT print(‘DEATH_EVENT = 1: ‘, len(df[df[‘DEATH_EVENT’] == 1])) print(‘DEATH_EVENT = 0: ‘, len(df[df[‘DEATH_EVENT’] == 0])) |
DEATH_EVENT = 1: 96
DEATH_EVENT = 0: 203
3.2 データ前処理
200件の学習と99件のテストデータを分けます。
# Train/test split from sklearn.model_selection import train_test_split X = df.drop([‘DEATH_EVENT’], axis=1) y = df[‘DEATH_EVENT’] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33, random_state=SEED) print(‘X_train :’, len(X_train)) print(‘X_test :’, len(X_test)) |
X_train : 200
X_test : 99
3.3 モデル作成
HistGradientBoostingClassifierを作成します。
# Create Model from sklearn.experimental import enable_hist_gradient_boosting from sklearn.ensemble import HistGradientBoostingClassifier params = {‘learning_rate’: 0.1, ‘max_depth’: 10, ‘max_iter’: 120, ‘learning_rate’: 0.05} clf = HistGradientBoostingClassifier(**params, random_state=SEED) clf.fit(X_train, y_train) |
HistGradientBoostingClassifier(l2_regularization=0.0, learning_rate=0.05,
loss=’auto’, max_bins=255, max_depth=10,
max_iter=120, max_leaf_nodes=31,
min_samples_leaf=20, n_iter_no_change=None,
random_state=111, scoring=None, tol=1e-07,
validation_fraction=0.1, verbose=0,
warm_start=False)
3.4 モデル評価
# Model Accuracy import numpy as np from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score y_pred = clf.predict(X_train) def get_metrics(y_true, y_pred): print(‘accuracy : ‘, np.round(accuracy_score(y_true, y_pred), 4)) print(‘precision : ‘, np.round(precision_score(y_true, y_pred), 4)) print(‘recall : ‘, np.round(recall_score(y_true, y_pred), 4)) print(‘f1 : ‘, np.round(f1_score(y_true, y_pred), 4)) print(‘auc : ‘, np.round(roc_auc_score(y_true, y_pred), 4)) get_metrics(y_train, y_pred) |
accuracy : 0.985
precision : 0.9846
recall : 0.9697
f1 : 0.9771
auc : 0.9811
担当者:KW
バンコクのタイ出身 データサイエンティスト
製造、マーケティング、財務、AI研究などの様々な業界にPSI生産管理、在庫予測・最適化分析、顧客ロイヤルティ分析、センチメント分析、SaaS、PaaS、IaaS、AI at the Edge の環境構築などのスペシャリスト