数据竞赛三剑客变四剑客了~

↑↑↑关注后"星标"kaggle竞赛宝典
  kaggle竞赛宝典  作者:None

HistGradientBoosting算法

简介

早期做数据竞赛的时候,常听大家戏称Catboost,Xgboost和Lightgbm为竞赛三剑客,如今,在诸多的竞赛中,又多了一位HistGradientBoosting,该算法基本也会出现在所有的竞赛问题中。例如:Steel Plate Defect Prediction竞赛中第二名的模型就是用到了HistGradientBoostingClassifier。

关于HistGradientBoosting算法

基于直方图的模型HistGradientBoosting算法相较于GradientBoostingClassifier 和 GradientBoostingRegressor:

  • 模型训练速度会快几个数量级,尤其是在样本数量超过数万个样本时。
  • 支持缺失值。
  • 支持样本加权;

HistGradientBoosting算法首先将输入样本 X 划分为整数值的箱(通常为 256 个箱),这极大地减少了需要考虑的分割点数量,并允许算法在构建树时利用基于整数的数据结构(直方图),而不是依赖排序的连续值。

相关代码

RETRAIN_HGBC_MODEL = False

def objective(trial):
    # Define hyperparameters to tune
    param = {
        'learning_rate': trial.suggest_float('learning_rate'0.0050.1),
        'max_iter': trial.suggest_int('max_iter'1002500),  # Equivalent to n_estimators
        'max_depth': trial.suggest_int('max_depth'320),
        'l2_regularization': trial.suggest_float('l2_regularization'1e-810.0, log=True),  # Equivalent to reg_lambda
        'min_samples_leaf': trial.suggest_int('min_samples_leaf'20300),
        'max_bins': trial.suggest_int('max_bins'25255),
    }
    
    auc_scores = []

    for train_idx, valid_idx in cv.split(X, y):
        X_train_fold, X_valid_fold = X.iloc[train_idx], X.iloc[valid_idx]
        y_train_fold, y_valid_fold = y.iloc[train_idx], y.iloc[valid_idx]

        # Create and fit the model
        model = HistGradientBoostingClassifier(**param)
        model.fit(X_train_fold, y_train_fold)

        # Predict class probabilities
        y_prob = model.predict_proba(X_valid_fold)

        # Compute the AUC for each class and take the average
        average_auc = roc_auc_score(targets_bin.iloc[valid_idx], y_prob[:, 1:], multi_class="ovr", average="macro")
        auc_scores.append(average_auc)

    # Return the average AUC score across all folds
    return np.mean(auc_scores)


if RETRAIN_HGBC_MODEL:
    # Example usage with Optuna
    hgbc_study = optuna.create_study(direction='maximize', study_name="HistGradientBoostingClassifier_model_training")
    hgbc_study.optimize(objective, n_trials=200)  # Adjust the number of trials as necessary

    # Output the optimization results
    print(f"Best trial average AUC: {study.best_value:.4f}")
    print(study.best_params)
    for key, value in study.best_params.items():
        print(f"{key}{value}")

试用场景

LightGBM等模型试用的场景都可以直接使用。

参考文献

  1. https://www.kaggle.com/code/yunqicao/2nd-place-solution-steel-plate-defect-prediction
  2. https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.HistGradientBoostingClassifier.html

相关推荐

  • 如何掌管世界最大的主权基金:挪威主权基金CEO尼古拉·唐根长篇访谈 · 全文+视频
  • 一手体验Rokid新品!苹果空间计算的软肋,被这家中国AR龙头打成王牌
  • 再见,AI意识先驱:Daniel Dennett
  • 小冰徐元春:AIGC已经让普通人开始赚钱 | 中国AIGC产业峰会
  • 离你最近的空间计算打开方式,X499元?
  • 也看跨模态大模型文档图表理解的数据工程:UniChar、MATCHA等代表模型的数据构造方案
  • 恭喜 BLG!值得!!
  • 明明只学会了 Hello World,却以为掌握了整个 World!
  • 5.5K Star真不错!简化数据收集,轻松创建交互式表单
  • Hadoop1X,Hadoop2X和hadoop3X有很大的区别么?
  • Nest 实现 GraphQL 版 TodoList
  • 如何免费用 Llama 3 70B 帮你做数据分析与可视化?
  • 不是哥们,你敲代码咋压抑成这样了?
  • 绝境中盛开,一位独立开发者的故事
  • Go语言之父反思错误:“并发”理念指导不足、没做好包管理、用C写了编译器、文档缺失……
  • 今日代码大赏 | 统一异常处理类
  • 后端知识那么多,重点要学啥?
  • 练习两年半,我们的项目更丰富啦!
  • 性能提升 30%!中国电信进一步开源 12B 星辰大模型 TeleChat-12B!
  • 估值8年涨1200倍,喜马拉雅要IPO了