使用 Scikit Learn 的梯度提升分类器2025 年 6 月 4 日 | 11 分钟阅读 梯度提升是一种集成技术,其中决策树是顺序构建的,根据指定损失函数(误差梯度)的总和来纠正先前树的错误。 通过结合多个弱学习器(即决策树),梯度提升分类器是一组强大的机器学习算法,可生成强大的预测模型。由于它们能够处理大型数据集,因此它们帮助赢得了许多 Kaggle 数据科学竞赛。 如果您要在 Python 应用程序中使用梯度提升分类器,您会发现 Scikit Learn 中提供了多种梯度提升分类器实现,包括 XGBoost 等。 在本文中,我们将快速了解梯度提升模型的理论和各种在 Scikit-Learn 中拟合梯度提升模型以执行分类任务的技术。 梯度提升参数
梯度提升属性
实现梯度提升的步骤构建梯度提升分类器的主要步骤通常是 1. 拟合模型 设置模型后,您可以轻松地在 Scikit-Learn 中拟合它;只需使用其 fit 方法在训练数据上调用它。 2. 调整参数和超参数 模型的性能需要优化,因此其超参数需要仔细调整。常见的调整策略包括调整学习率、估计器数量和树的深度。 3. 进行预测 拟合模型后,您可以使用 predict() 方法对测试数据进行预测。应将性能与实际标签和预测值进行比较。 4. 解释结果 默认情况下,使用准确性来评估分类器。如果准确性不够好,您可以重新访问模型的参数或超参数。重复此过程,直到模型达到所需的性能水平。 使用 Scikit-Learn 进行梯度提升分类为此,我们将使用 scikit-learn 的乳腺癌数据集来构建梯度提升分类器。 然后,我们导入用于数据处理、构建和评估模型以及交叉验证的必要库。 之后,我们加载数据集并将其转换为 pandas 数据帧以便于处理。然后,我们根据特征和标签分割数据,并训练它们使用 5 折交叉验证将数据分割成训练集和验证集。 然后,我们最后初始化一个具有特定学习率的 GradientBoostingClassifier,并验证其默认参数。 安装 sci-kit-learn 库确保您已安装最新版本的 scikit learn,并且在继续之前,请确保为您的 Python 安装运行更新和升级。您只需在 shell 中发出以下命令即可安装它 如果您想了解更多关于您平台安装的信息,请参阅官方 scikit-learn 安装指南。 验证安装 此脚本将在安装后检查您是否正确安装了 scikit-learn,然后验证版本。 输出 1.4.0 它应该输出版本 0.22.1 及以上。 示例 1:乳腺癌数据集 (Scikit-learn) 输出 { 'ccp_alpha': 0.0, 'criterion': 'friedman_mse', 'init': None, 'learning_rate': 0.1, 'loss': 'log_loss', # (if sci-kit-learn >= 1.1) or 'deviance' in older versions 'max_depth': 3, 'max_features': None, 'max_leaf_nodes': None, 'min_impurity_decrease': 0.0, 'min_samples_leaf': 1, 'min_samples_split': 2, 'min_weight_fraction_leaf': 0.0, 'n_estimators': 100, 'n_iter_no_change': None, 'presort': 'deprecated', # (only in old versions, not in newer ones) 'random_state': None, 'subsample': 1.0, 'tol': 0.0001, 'validation_fraction': 0.1, 'verbose': 0, 'warm_start': False } 示例 2:数字识别 输出 Gradient Boosting Classifier accuracy is 0.96 使用 XGBoost 进行梯度提升XGBoost (Extreme Gradient Boosting) 是一种广泛使用、可扩展且功能强大的机器学习算法,基于决策树集成。它是一种非常流行的算法,用于分类和回归任务,并因其速度和性能而使用。对于此示例,我们向您展示如何通过使用 XGBClassifier 来解决二元分类问题。
它有助于评估模型性能并在实际场景中生成预测。 安装 XGBoost 库如果您想使用 pip 安装 XGBoost,请在终端中运行以下命令。 请参阅 XGBoost 安装指南以获取您平台的官方详细安装说明,另一方面,某些步骤是本节中所示的通用说明。 验证安装此脚本可在安装后运行,以确保 XGBoost 已正确安装及其版本。 输出 3.0.0 输出应显示版本 1.0.1 或更高。 它提供与 scikit learn 兼容的包装器,像 GridSearchCV 和 Pipeline 一样易于使用。其中包括 XGBClassifier – 用于分类任务 XGBRegressor – 用于回归任务 凭借 XGBoost 的性能优势,您可以利用其 scikit-learn API。 示例 输出 Mean Accuracy: 0.933 (0.022) Predicted Class: 1 使用 LightGBM 进行梯度提升Light Gradient Boosting Machine (LightGBM) 是 Microsoft 开发的一个高性能框架,用于运行梯度提升任务。它旨在以速度和效率运行,特别是在大型数据集上。与传统梯度提升方法相比,LightGBM 使用基于直方图的算法和叶式树增长,这往往会带来更快的训练和更高的准确性。 对于此示例,我们在二元分类问题中使用 LGBMClassifier。工作流程包括
安装 LightGBM 库如果您想使用 pip 安装它,可以运行以下命令 如果您想获取特定平台的更详细安装说明,请参阅官方 LightGBM 安装指南。 验证安装 以下脚本可用于检查 LightGBM 是否正确安装并验证 Python 中安装的版本。 输出 4.6.0 输出应为版本 2.3.1 或更新版本。 lightgbm 中提供了与 Scikit-learn 兼容的包装类,可与 GridSearchCV、管道、交叉验证等无缝协作。其中包括 LGBMClassifier – 用于分类任务 LGBMRegressor – 用于回归任务 LightGBM 快速高效的梯度提升实现,用 C++ 编写,但可在 Python 中更新,可以通过这些类在 sci-kit-learn 熟悉的框架中轻松使用。 示例 输出 Mean Accuracy: 0.934 (0.021) [LightGBM] [Info] Number of positive: 501, number of negative: 499 [LightGBM] [Info] Auto-choosing col-wise multi-threading, the overhead of testing was 0.000212 seconds. You can set `force_col_wise=true` to remove the overhead. [LightGBM] [Info] Total Bins 2550 [LightGBM] [Info] Number of data points in the train set: 1000, number of used features: 10 [LightGBM] [Info] [binary:BoostFromScore]: pavg=0.501000 -> initscore=0.004000 [LightGBM] [Info] Start training from score 0.004000 [LightGBM] [Warning] No further splits with positive gain, best gain: -inf Predicted Class: 1 使用 CatBoost 进行梯度提升Yandex 开发了 CatBoost 库,作为高性能梯度提升库。它对分类特征的本地支持可能使其在其他库(如 XGBoost 和 LightGBM)中脱颖而出,因为它不需要任何预处理。CatBoost 非常高效,也非常不同,而且速度非常快,并且通常在最小调整的情况下,其性能优于其他最先进的卡。 在此示例中,我们将使用 CatBoostClassifier 来
安装 CatBoost 库如果您想使用 pip 安装 CatBoost,请在终端中输入以下命令 为了优化安装,官方 CatBoost 安装指南中提供了针对您平台的进一步定制安装说明。 验证安装 此脚本确认 CatBoost 已安装,以及如何检查版本 输出 1.2.8 它应该是版本 0.21 或更高。 CatBoost 允许您将工具包(如 GridSearchCV、管道和交叉验证)与 Scikit-learn 对象一起使用(CatBoost 还提供与 Scikit-learn 兼容的包装类)。其中包括 CatBoostClassifier – 用于分类任务 CatBoostRegressor – 用于回归任务 这些包装器确保您在 scikit-learn 生态系统中尽可能轻松地充分利用 CatBoost 独特的有效梯度提升算法。 示例 输出 Mean Accuracy: 0.925 (0.025) Predicted Class: 1 改进的梯度提升技术梯度提升是一种强大的机器学习方法,但很容易过拟合。为了解决这个问题,我们实施了惩罚学习、树约束、随机抽样和收缩。 1. 惩罚学习 引入正则化方法,即 L1 (Lasso)、L2 (Ridge) 等,以规范树叶的数字权重,否则分配给树叶。这些惩罚使模型更复杂并降低模型复杂性,这使得模型在嘈杂或高维设置中泛化得更好。 2. 树约束 它通过限制最大深度、叶子数量或分割节点所需的最小样本数等参数来限制单个树的复杂性。这降低了过拟合的可能性,但通常需要更多树才能获得良好的准确性。 3. 随机抽样 随机提升,正如它也称之为,涉及在数据的随机子集上训练每棵树。它减轻了树之间的相关性并使模型具有鲁棒性。通常,我们对行或特征进行二次抽样(在树创建之前或在每次拆分时),50% 的抽样对于许多情况非常有效。 4. 收缩 它通过学习率控制每棵树对最终模型的影响。使用较低的学习率提供更好的泛化能力,但训练时间更长,因此需要更多树。但是,为了获得最佳结果,您需要重新调整学习率和估计器数量。 5. XGBoost (eXtreme Gradient Boosting) 梯度提升是梯度提升的一种非常高效和可扩展的变体。它建立在上述所有技术之上,实现了并行处理、内置正则化和修剪树,是基于性能的应用程序的绝佳选择。 结论在本教程中,您学习了如何使用 Python 有效地应用梯度提升算法进行分类和回归任务。特别是,使用 sci-kit-learn 实现梯度提升:它包括如何对 Scikit-learn 进行梯度提升,包括梯度增加机。 使用高级第三方库,例如 XGBoost、LightGBM 和 CatBoost,每个都提供性能改进和附加功能,例如支持分类变量和更快的训练。 它们为您提供了一种非常强大的方法来为大量机器学习任务构建高精度和灵活的模型。 下一主题什么是 P 值 |
我们请求您订阅我们的新闻通讯以获取最新更新。