04-07 scikit-learn库之梯度提升树

scikit-learn库之梯度提升树

在这里插入图片描述

  本文主要介绍梯度提升树的两个模型GradientBoostingClassifierGradientBoostingRegressor,这两个模型调参包括两部分,第一部分是Bagging框架,第二部分是CART决策树的参数。本文会详解介绍GradientBoostingClassifier模型,然后会对比着讲解GradientBoostingRegressor模型。

  接下来将会讨论上述两者的区别,由于是从官方文档翻译而来,翻译会略有偏颇,有兴趣的也可以去scikit-learn官方文档查看https://scikit-learn.org/stable/modules/classes.html#module-sklearn.ensemble

GradietBoostingClassifier

使用场景

  GradientBoostingClassifier模型主要用于解决分类问题。

参数

  • **loss:**损失函数,str类型。分类梯度提升树默认为’deviance’。
    • 对于分类提升树,可以选择’deviance’对数似然损失函数和’exponential’指数损失函数。一般推荐使用默认的’deviance’,如果使用’exponential’二分类时等同于AdaBoost算法。默认为’deviance’。
    • 对于回归提升树可以选择’ls’均方误差、‘lad’绝对损失、‘lad’绝对损失、‘hub’Huber损失、‘quantile’分位数损失。数据噪声不多,使用默认的’ls’;噪音较多,使用’huber’;对训练集分段预测,使用’quantile’。使用’huber’和’quantile’的时候需要指定参数alpha。默认为’ls’。
  • **learning_rate:**权重缩减系数,float类型。这个参数是正则化项的参数 λ \lambda λ。较小的 λ \lambda λ需要更多的迭代次数,即learning_rate和n_estimators需要一起调参。默认为1。
  • n_estimators::弱学习器个数,int类型。弱学习器的个数,也可以说是弱学习的最大迭代次数,如果n_estimators过大,容易过拟合;如果n_estimators过小,容易欠拟合。默认为10。
  • **subsample:**子采样,float类型。subsample取值范围为 ( 0 , 1 ] (0,1] (0,1],这里的子采样是不放回抽样,如果取值为1,则使用全部样本,如果取值小于去,只有训练一部分样本,使用该参数可以减小方差,防止过拟合,但是会增加样本拟合的偏差,一般取值在 [ 0.5 , 0.8 ] [0.5,0.8] [0.5,0.8]。默认为1.0。
  • **criterion:**特征选择,str类型。criterion=‘gini’表示基尼指数;criterion=‘entropy’表示信息增益,推荐使用’gini’。默认为’gini’。
  • **splitter:**特征划分点选择,str类型。默认为’friedman_mse’。
  • **min_samples_split:**内部节点划分需要最少样本数,float类型。限定子树继续划分的条件,如果某节点的样本数少于min_samples_split,则会停止继续划分子树。如果样本数量过大,建议增大该值,否则建议使用默认值。默认为2。
  • **min_samples_leaf:**叶子节点最少样本数float类型。如果在某次划分叶子节点数目小于样本数,则会和兄弟节点一起剪枝。如果样本数量过大,建议增大该值,否则建议使用默认值。默认为1。
  • **min_weight_fraction_leaf:**叶子节点最小的样本权重和,float类型。该参数限制了叶子节点所有样本权重和的最小值,如果小于该值,则会和兄弟节点一起剪枝。如果样本有角度的缺失值,或者样本的分布偏差较大,则可以考虑权重问题。默认为0。
  • **max_depth:**最大深度,int类型。限制决策树的深度。默认为3。
  • **max_leaf_nodes:**最大叶子节点数,int类型。限制最大叶子节点数,可以防止树过深,因此可以防止过拟合。默认为None。
  • **min_impurity_decrease:**节点减小不纯度,float类型。如果某节点划分会导致不纯度的减少大于min_impurity_decrease,则停止该节点划分。默认为0。
  • **min_impurity_split:**节点划分最小不纯度,float类型。如果某节点的不纯度小于min_impurity_split,则停止该节点划分,即不生成叶子节点。默认为1e-7(0.0000001)。
  • **class_weight:**类别权重,dict类型或str类型。对于二元分类问题可以使用class_weight={0:0.9,1:0.1},表示0类别权重为0.9,1类别权重为0.1,str类型即为’balanced’,模型将根据训练集自动修改不同类别的权重。默认为None。
  • **init:**初始弱学习器,弱学习器类型。对应前向分步算法中的 f 0 ( x ) f_0(x) f0(x),除非对数据有先验知识,否则不用管这个参数。可选参数。
  • **random_state:**随机数种子,int类型。random_state=None,不同时刻产生的随机数据是不同的;random_state=int类型,相同随机数种子不同时刻产生的随机数是相同的。默认为None。
  • **max_features:**划分的最大特征数,str、int、float类型。max_depth='log2’表示最多考虑 l o g 2 n log_2n log2n个特征;max_depth={‘sqrt’,‘auto’}表示最多考虑 n \sqrt{n} n 个特征;max_depth=int类型,考虑 ∣ i n t 类 型 ∣ |int类型| int个特征;max_depth=float类型,如0.3,则考虑 0.3 n 0.3n 0.3n个特征,其中 n n n为样本总特征数。默认为None,样本特征数不大于50推荐使用默认值。
  • **verbose:**日志冗长度,int类型。verbose=0,不输出训练过程;verbose=1,输出部分训练过程;verbose>1,输出所有的训练过程。默认为0。
  • **max_leaf_nodes:**最大叶子节点数,int类型。限制最大叶子节点数,可以防止树过深,因此可以防止过拟合。默认为None。
  • **warm_start:**热启动,bool类型。如果为True,则基于上一个随机森林添加决策树;如果为False,则重新生成一个随机森林。默认为False。
  • **presort:**数据是否排序,bool类型。样本量较小,presort=True,即让样本数据排序,节点划分速度更快;样本量较大,presort=True,让样本排序反而会增加训练模型的时间。通常使用默认值。默认值为False。
  • **validation_fraction:**预留数据,float类型。取值范围为 [ 0 , 1 ] [0,1] [0,1],预留多少比例的数据做验证。默认为0.1。
  • **n_iter_no_change:**停止训练,int类型。可以在设置一个参数控制算法,在验证分数没有提高的时候提早结束。默认为None。
  • **tol:**损失停止训练,float类型。设置一个值在损失在某个区间内没有改善时停止算法。默认为1e-4。

在这里插入图片描述

属性

  • **estimators_:**list类型。所有决策树集合。
  • **feature_importances_:**array类型。特征重要度。
  • **oob_improvement_:**array类型。袋外样本对前一次迭代损失的改善程度。
  • **train_score_:**array类型。袋内样本训练数据的偏差。
  • **loss_:**返回损失函数。
  • **init_:**返回初始弱学习器。
  • **estimators_:**ndarray类型。弱学习器集。

方法

  • **apply(X[, check_input]):**返回每个样本预测的叶子节点索引。
  • **decision_function(X):**决策函数关于样本X的值。
  • **fit(X,y):**把数据放入模型中训练模型。
  • **get_params([deep]):**返回模型的参数,可以用于Pipeline中。
  • **predict(X):**预测样本X的分类类别。
  • **predict_log_proba(X):**返回样本X在各个类别上对应的对数概率。
  • **predict_proba(X):**返回样本X在各个类别上对应的概率。
  • **score(X,y):**基于报告决定系数 R 2 R^2 R2评估模型。
  • **set_prams(**params):**创建模型参数。
  • **staged_decision_function(X):**返回每个阶段样本X的决策函数值。
  • **staged_predict(X):**返回每个阶段样本X的预测值。
  • **staged_predict_proba(X):**返回每个阶段样本X在各个类别上对应的概率。

GradietBoostingClassifier

  GradientBoostingClassifier较于GradientBoostingClassifier模型主要用于解决回归问题,不同之处在于处理预测值的方法不同和使用的损失函数的不同。

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
是的,Python中的scikit-learn提供了LogisticRegression类来实现逻辑回归模型。该类可以用于二分类问题和多分类问题,支持多种参数估计算法,例如使用liblinear实现的梯度下降法和牛顿法,以及使用lbfgs和sag实现的拟牛顿法等。 下面是一个简单的代码示例,演示如何使用LogisticRegression类来训练和预测逻辑回归模型: ```python from sklearn.linear_model import LogisticRegression from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score # 加载数据集 iris = load_iris() X = iris.data[:, :2] # 只使用前两个特征 y = iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) # 定义逻辑回归模型 clf = LogisticRegression() # 训练模型 clf.fit(X_train, y_train) # 预测测试集 y_pred = clf.predict(X_test) # 计算准确率 acc = accuracy_score(y_test, y_pred) print("Accuracy:", acc) ``` 在这个示例中,我们使用了鸢尾花数据集进行训练和测试,只使用了前两个特征。首先,我们使用train_test_split函数将数据集随机划分为训练集和测试集。然后,我们定义了一个LogisticRegression类的实例clf,并使用fit方法训练模型。最后,我们使用predict方法对测试集进行预测,并使用accuracy_score函数计算预测准确率。 当然,这只是一个简单的示例,实际应用中需要根据具体问题进行调参和优化,以获得更好的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值