Scikit-learnの新しい機械学習のアルゴリズHistGradientBoostingClassifier

目次

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 の環境構築などのスペシャリスト