xgboost lightgbm catboost 多分类 多标签

xgboost 与 lightgbm 官方均支持多分类任务,但不直接支持多标签分类任务,实现多标签任务的方法之一是结合sklearn 提供的 multiclass 子类,如OneVsRestClassifier。

下面分别给出 多分类 与 多标签 任务的使用实例。
xgboost 多分类任务

from xgboost import XGBClassifier
import numpy as np

clf_multiclass = XGBClassifier()

train_data = np.random.rand(500, 100)  # 500 entities, each contains 100 features
train_label = np.random.randint(5, size=500)  # 5 targets
val_data = np.random.rand(100, 100)

clf_multiclass.fit(train_data,train_label)
val_pred = clf_multiclass.predict(val_data)

lightgbm 多分类任务

from lightgbm import LGBMClassifier
import numpy as np

clf_multiclass = LGBMClassifier()

train_data = np.random.rand(500, 100)  # 500 entities, each contains 100 features
train_label = np.random.randint(5, size=500)  # 5 targets
val_data = np.random.rand(100, 100)

clf_multiclass.fit(train_data,train_label)
val_pred = clf_multiclass.predict(val_data)

xgboost 多标签任务

from xgboost import XGBClassifier
from sklearn.multiclass import OneVsRestClassifier
import numpy as np

clf_multilabel = OneVsRestClassifier(XGBClassifier())

train_data = np.random.rand(500, 100)  # 500 entities, each contains 100 features
train_label = np.random.randint(2, size=(500,20))  # 20 targets

val_data = np.random.rand(100, 100)

clf_multilabel.fit(train_data,train_label)
val_pred = clf_multilabel.predict(val_data)

lightgbm 多标签任务

from lightgbm import LGBMClassifier
from sklearn.multiclass import OneVsRestClassifier
import numpy as np

clf_multilabel = OneVsRestClassifier(LGBMClassifier())

train_data = np.random.rand(500, 100)  # 500 entities, each contains 100 features
train_label = np.random.randint(2, size=(500,20))  # 20 targets

val_data = np.random.rand(100, 100)

clf_multilabel.fit(train_data,train_label)
val_pred = clf_multilabel.predict(val_data)

运行效率相关的几个测试
1.关于多标签问题,
根据目前的测试,当数据体量较大(样本量,特征量,类别数目)时,此方案速度极慢,且如果启动并行内存占用量极大。可能由于使用OVR 直接建立了对应类别数量的分类模型,后续测试是否有更优化的实现方法。
2.xgboost 官方提供了gpu加速支持,调用语句中增加如下超参数即可
clf_multiclass = XGBClassifier(tree_method=‘gpu_hist’, gpu_id=0)
亲测使用gpu效率较高。
3. xgboost 与 lightgbm 均可通过n_jobs 设置启用并行加速,暂未进行测试。
4. lightgbm 的 gpu加速方法暂未测试。

参考资料:
stackoverflow
lightgbm官方文档
xgboost官方文档

catboost 也可以直接装载到onevsrestclassification 实现多标签分类
from catboost import CatBoostRegressor, CatBoostClassifier
https://blog.csdn.net/qq_36940806/article/details/100084041
应用

XGBoostLightGBMCatBoost是三种常用的梯度提升树算法,它们在机器学习竞赛和实际应用中都取得了很好的效果。下面是它们的调参介绍: 1. XGBoost调参: - 学习率(learning rate):控制每次迭代中模型权重的更新步长,一般取值范围为[0,1],较小的学习率可以使模型更加稳定,但需要更多的迭代次数。 - 树的数量(n_estimators):决定了模型中树的个数,一般需要通过交叉验证来确定合适的值。 - 树的深度(max_depth):控制每棵树的最大深度,较大的深度可以提高模型的拟合能力,但也容易导致过拟合。 - 正则化参数(lambda、alpha):用于控制模型的复杂度,防止过拟合。 - 特征子采样比例(colsample_bytree):控制每棵树在训练时随机选择的特征比例,可以降低模型的方差。 2. LightGBM调参: - 学习率(learning_rate):同样控制每次迭代中模型权重的更新步长。 - 树的数量(num_iterations):决定了模型中树的个数。 - 树的深度(max_depth):控制每棵树的最大深度。 - 叶子节点数(num_leaves):控制每棵树的叶子节点数,较大的值可以提高模型的拟合能力,但也容易导致过拟合。 - 特征子采样比例(feature_fraction):控制每棵树在训练时随机选择的特征比例。 - 数据子采样比例(bagging_fraction):控制每次迭代时随机选择的训练数据比例。 3. CatBoost调参: - 学习率(learning_rate):同样控制每次迭代中模型权重的更新步长。 - 树的数量(iterations):决定了模型中树的个数。 - 树的深度(depth):控制每棵树的最大深度。 - 正则化参数(l2_leaf_reg):用于控制模型的复杂度,防止过拟合。 - 特征子采样比例(colsample_bylevel):控制每棵树在训练时随机选择的特征比例。 - 数据子采样比例(subsample):控制每次迭代时随机选择的训练数据比例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值