二値分類問題のモデル作成例
LightGBMモデルの予測結果を使ってROC曲線を描き、AUC(Area Under the Curve)を計算するためのPythonコードは以下の通りです。ここでは、sklearn
ライブラリを用いています。
import lightgbm as lgb import numpy as np import matplotlib.pyplot as plt from sklearn.metrics import roc_curve, roc_auc_score from sklearn.model_selection import train_test_split # データの準備(例) # X, y = データの読み込みや生成 X, y = ... # あなたのデータセットに置き換えてください # データの分割 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # LightGBMのデータセットの作成 train_data = lgb.Dataset(X_train, label=y_train) test_data = lgb.Dataset(X_test, label=y_test, reference=train_data) # モデルの訓練 params = { 'objective': 'binary', 'metric': 'binary_logloss', 'boosting_type': 'gbdt', 'num_leaves': 31, 'learning_rate': 0.05, 'feature_fraction': 0.9 } model = lgb.train(params, train_data, valid_sets=[test_data], num_boost_round=100, early_stopping_rounds=10) # テストデータに対する予測確率を計算 y_pred_prob = model.predict(X_test, num_iteration=model.best_iteration) # ROC曲線の計算 fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob) # AUCの計算 auc_score = roc_auc_score(y_test, y_pred_prob) # ROC曲線のプロット plt.figure() plt.plot(fpr, tpr, color='blue', lw=2, label='ROC curve (area = %0.2f)' % auc_score) plt.plot([0, 1], [0, 1], color='gray', lw=2, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver Operating Characteristic (ROC) Curve') plt.legend(loc="lower right") plt.show() # AUCスコアの表示 print(f'AUC: {auc_score:.2f}')
以下はAdaBoostの場合:
import numpy as np import matplotlib.pyplot as plt from sklearn.ensemble import AdaBoostClassifier from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split from sklearn.metrics import roc_curve, roc_auc_score # データの準備 X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42) # データの分割 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # AdaBoostモデルの訓練 model = AdaBoostClassifier(n_estimators=100, random_state=42) model.fit(X_train, y_train) # テストデータに対する予測確率を計算 y_pred_prob = model.predict_proba(X_test)[:, 1]
# ROC曲線の計算 fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob) # AUCの計算 auc_score = roc_auc_score(y_test, y_pred_prob) # ROC曲線のプロット plt.figure() plt.plot(fpr, tpr, color='blue', lw=2, label='ROC curve (area = %0.2f)' % auc_score) plt.plot([0, 1], [0, 1], color='gray', lw=2, linestyle='--') plt.xlim([0.0, 1.0]) plt.ylim([0.0, 1.05]) plt.xlabel('False Positive Rate') plt.ylabel('True Positive Rate') plt.title('Receiver Operating Characteristic (ROC) Curve') plt.legend(loc="lower right") plt.show()
コメント
コメントを投稿