flowchart LR
A["学習データ"] --> B["初期予測\n(定数)"]
B --> C["残差を計算"]
C --> D["決定木で残差を学習\n+ L1/L2正則化"]
D --> E["学習率ηで\n予測に加算"]
E --> F{"収束?\nn_estimators?"}
F -->|No| C
F -->|Yes| G["最終予測"]
style A fill:#2563eb,color:#fff
style D fill:#1e40af,color:#fff
style G fill:#10b981,color:#fff
flowchart TD
A["損失関数 l(y, ŷ)"] --> B["1次勾配 gᵢ\n2次勾配 hᵢ を計算"]
B --> C["候補分割点ごとに\nGain を計算"]
C --> D{"Gain > γ ?"}
D -->|Yes| E["分割を採用\nG_L,H_L / G_R,H_R に分配"]
D -->|No| F["葉として確定\nw* = −G/(H+λ)"]
E --> C
style A fill:#2563eb,color:#fff
style C fill:#1e40af,color:#fff
style F fill:#10b981,color:#fff
Chen, T., & Guestrin, C. (2016). XGBoost: A Scalable Tree Boosting System. Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining, 785–794.
rates=[0.01,0.05,0.1,0.3,0.5]train_scores,test_scores=[],[]forlrinrates:m=XGBClassifier(n_estimators=200,max_depth=5,learning_rate=lr,random_state=42,eval_metric="logloss",)m.fit(X_train,y_train)train_scores.append(roc_auc_score(y_train,m.predict_proba(X_train)[:,1]))test_scores.append(roc_auc_score(y_test,m.predict_proba(X_test)[:,1]))plt.figure(figsize=(8,4))plt.plot(rates,train_scores,"o-",label="Train")plt.plot(rates,test_scores,"s--",label="Test")plt.xlabel("learning_rate")plt.ylabel("ROC-AUC")plt.title("learning_rate vs ROC-AUC")plt.legend()plt.grid(True,alpha=0.3)plt.show()
depths=[2,3,5,7,10,15]train_scores,test_scores=[],[]fordindepths:m=XGBClassifier(n_estimators=100,max_depth=d,learning_rate=0.1,random_state=42,eval_metric="logloss",)m.fit(X_train,y_train)train_scores.append(roc_auc_score(y_train,m.predict_proba(X_train)[:,1]))test_scores.append(roc_auc_score(y_test,m.predict_proba(X_test)[:,1]))plt.figure(figsize=(8,4))plt.plot(depths,train_scores,"o-",label="Train")plt.plot(depths,test_scores,"s--",label="Test")plt.xlabel("max_depth")plt.ylabel("ROC-AUC")plt.title("max_depth vs ROC-AUC (Train vs Test)")plt.legend()plt.grid(True,alpha=0.3)plt.show()
alphas=[0,0.01,0.1,1.0,10.0]train_scores,test_scores=[],[]forainalphas:m=XGBClassifier(n_estimators=100,max_depth=5,learning_rate=0.1,reg_alpha=a,random_state=42,eval_metric="logloss",)m.fit(X_train,y_train)train_scores.append(roc_auc_score(y_train,m.predict_proba(X_train)[:,1]))test_scores.append(roc_auc_score(y_test,m.predict_proba(X_test)[:,1]))plt.figure(figsize=(8,4))plt.plot(alphas,train_scores,"o-",label="Train")plt.plot(alphas,test_scores,"s--",label="Test")plt.xscale("symlog",linthresh=0.01)plt.xlabel("reg_alpha (L1)")plt.ylabel("ROC-AUC")plt.title("reg_alpha (L1) vs ROC-AUC")plt.legend()plt.grid(True,alpha=0.3)plt.show()