七、梯度提升树

7.1 GradientBoostingClassifier

  1. GradientBoostingClassifierGBDT 分类模型,其原型为:

    1. class sklearn.ensemble.GradientBoostingClassifier(loss='deviance', learning_rate=0.1,
    2. n_estimators=100, subsample=1.0, min_samples_split=2, min_samples_leaf=1,
    3. min_weight_fraction_leaf=0.0, max_depth=3, init=None, random_state=None,
    4. max_features=None, verbose=0, max_leaf_nodes=None, warm_start=False, presort='auto')
    • loss:一个字符串,指定损失函数。可以为:

      • 'deviance'(默认值):此时损失函数为对数损失函数: 七、梯度提升树 - 图1
      • 'exponential':此时使用指数损失函数。
    • n_estimators:一个整数,指定基础决策树的数量(默认为100),值越大越好。

    • learning_rate:一个浮点数,表示学习率,默认为1。它就是下式中的 七、梯度提升树 - 图2七、梯度提升树 - 图3

      • 它用于减少每一步的步长,防止步长太大而跨过了极值点。
      • 通常学习率越小,则需要的基础分类器数量会越多,因此在learning_raten_estimators之间会有所折中。
    • max_depth:一个整数或者None,指定了每个基础决策树模型的max_depth参数。

      • 调整该参数可以获得最佳性能。
      • 如果max_leaf_nodes不是None,则忽略本参数。
    • min_samples_split:一个整数,指定了每个基础决策树模型的min_samples_split参数。

    • min_samples_leaf:一个整数,指定了每个基础决策树模型的min_samples_leaf参数。

    • min_weight_fraction_leaf:一个浮点数,指定了每个基础决策树模型的min_weight_fraction_leaf参数。

    • subsample:一个大于 0 小于等于 1.0 的浮点数,指定了提取原始训练集中多大比例的一个子集用于训练基础决策树。

      • 如果 subsample小于1.0,则梯度提升决策树模型就是随机梯度提升决策树。

        此时会减少方差但是提高了偏差。

      • 它会影响n_estimators参数。

    • max_features:一个整数或者浮点数或者字符串或者None,指定了每个基础决策树模型的max_features参数。

      如果 max_features< n_features,则会减少方差但是提高了偏差。

    • max_leaf_nodes:为整数或者None,指定了每个基础决策树模型的max_leaf_nodes参数。

    • init:一个基础分类器对象或者None,该分类器对象用于执行初始的预测。

      如果为None,则使用loss.init_estimator

    • verbose:一个正数。用于开启/关闭迭代中间输出日志功能。

    • warm_start:一个布尔值。用于指定是否继续使用上一次训练的结果。

    • random_state:一个随机数种子。

    • presort:一个布尔值或者'auto'。指定了每个基础决策树模型的presort参数。

  2. 模型属性:

    • feature_importances_:每个特征的重要性。
    • oob_improvement_:给出训练过程中,每增加一个基础决策树,在测试集上损失函数的改善情况(即:损失函数的减少值)。
    • train_score_:给出训练过程中,每增加一个基础决策树,在训练集上的损失函数的值。
    • init:初始预测使用的分类器。
    • estimators_:所有训练过的基础决策树。
  3. 模型方法:

    • fit(X, y[, sample_weight, monitor]):训练模型。

      其中monitor是一个可调用对象,它在当前迭代过程结束时调用。如果它返回True,则训练过程提前终止。

    • predict(X):用模型进行预测,返回预测值。

    • predict_log_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率的对数值。

    • predict_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率值。

    • score(X,y[,sample_weight]):返回模型的预测性能得分。

    • staged_predict(X):返回一个数组,数组元素依次是:GBDT 在每一轮迭代结束时的预测值。

    • staged_predict_proba(X):返回一个二维数组,数组元素依次是:GBDT 在每一轮迭代结束时,预测X为各个类别的概率值。

    • staged_score(X, y[, sample_weight]):返回一个数组,数组元素依次是:GBDT 在每一轮迭代结束时,该GBDT 的预测性能得分。

7.2 GradientBoostingRegressor

  1. GradientBoostingRegressorGBRT 回归模型,其原型为:

    1. class sklearn.ensemble.GradientBoostingRegressor(loss='ls', learning_rate=0.1,
    2. n_estimators=100, subsample=1.0, min_samples_split=2, min_samples_leaf=1,
    3. min_weight_fraction_leaf=0.0, max_depth=3, init=None, random_state=None,
    4. max_features=None, alpha=0.9, verbose=0, max_leaf_nodes=None, warm_start=False,
    5. presort='auto')
    • loss:一个字符串,指定损失函数。可以为:

      • 'ls':损失函数为平方损失函数。

      • 'lad':损失函数为绝对值损失函数。

      • 'huber':损失函数为上述两者的结合,通过alpha参数指定比例,该损失函数的定义为:

        七、梯度提升树 - 图4

        即误差较小时,采用平方损失;在误差较大时,采用绝对值损失。

      • 'quantile':分位数回归(分位数指得是百分之几),通过alpha参数指定分位数。

    • alpha:一个浮点数,只有当loss='huber'或者loss='quantile'时才有效。

    • n_estimators: 其它参数参考GradientBoostingClassifier

  2. 模型属性:

    • feature_importances_:每个特征的重要性。
    • oob_improvement_:给出训练过程中,每增加一个基础决策树,在测试集上损失函数的改善情况(即:损失函数的减少值)。
    • train_score_ :给出训练过程中,每增加一个基础决策树,在训练集上的损失函数的值。
    • init:初始预测使用的回归器。
    • estimators_:所有训练过的基础决策树。
  3. 模型方法:

    • fit(X, y[, sample_weight, monitor]):训练模型。

      其中monitor是一个可调用对象,它在当前迭代过程结束时调用。如果它返回True,则训练过程提前终止。

    • predict(X):用模型进行预测,返回预测值。

    • score(X,y[,sample_weight]):返回模型的预测性能得分。

    • staged_predict(X):返回一个数组,数组元素依次是:GBRT 在每一轮迭代结束时的预测值。

    • staged_score(X, y[, sample_weight]):返回一个数组,数组元素依次是:GBRT在每一轮迭代结束时,该GBRT的预测性能得分。