catboost原理、参数详解及python实例

更新时间:2023-05-15 08:00:02 阅读: 评论:0

catboost原理、参数详解及python实例
catboost 简介
优点:
1)它⾃动采⽤特殊的⽅式处理类别型特征(categorical features)。⾸先对categorical features做⼀些统计,计算某个类别特征(category)出现的频率,之后加上超参数,⽣成新的数值型特征(numerical features)。这也是我在这⾥介绍这个算法最⼤的motivtion,有了catboost,再也不⽤⼿动处理类别型特征了。
2)catboost还使⽤了组合类别特征,可以利⽤到特征之间的联系,这极⼤的丰富了特征维度。
3)catboost的基模型采⽤的是对称树,同时计算leaf-value⽅式和传统的boosting算法也不⼀样,传统的boosting算法计算的是平均数,⽽catboost在这⽅⾯做了优化采⽤了其他的算法,这些改进都能防⽌模型过拟合。
锻炼有什么好处
⼀、原理
1、类别型特征
对于给定的数据集,最简单的⽅式就是⽤整个数据集的平均标签值代替类别特征的值,即:该特征某个类别的值等于所有该类别特征所对应Yi的平均值。由于某些类别出现次数少,所以需要做平滑处理:
⼀般情况下,a为⼤于0的参数,对于回归问题,⼀般情况下,先验项可取数据集的均值。对于⼆分类,先验项是正例的先验概率。
问题:对单个样本的估计量是有偏的。即:假设某个分类变量没有重复值,即每个样本对应⼀个分类值,那么
解决⽅法:
使⽤除去该样本的数据⼦集来估计,⽽不是⽤整个数据集
CatBoost使⽤更加有效的处理⽅式。就是TS值的计算依靠⽬前已经观察的样本集。我们可以随机⽣成⼀个排列来实现带时序的训练
集,CatBoost在不同的树中使⽤不同的排列。
2、特征组合
对于树的第⼀次分割,不考虑任何组合。对于下⼀个分割,CatBoost将当前树的所有组合、类别型特征与数据集中的所有类别型特征相结合。组合被动态地转换为数字。
3、对称树
安装
pip install catboost API
⽅法(method):
----Fit------
X: 输⼊数据数据类型可以是,list; pandas.DataFrame; pandas.Series
y=None
cat_features=None: 拿来做处理的类别特征
sample_weight=None: 输⼊数据的样本权重
logging_level=None: 控制是否输出⽇志信息,或者何种信息
plot=Fal: 训练过程中,绘制,度量值,所⽤时间等
eval_t=None: 验证集合,数据类型list(X, y)tuples
baline=None
u_best_model=None
verbo=None
----predict---- 返回验证样本所属类别,数据类型为array
----predict_proba---- 返回验证样本所属类别的概率,数据类型为array
----get_feature_importance----
属性(attribute):
feature_importances_
CatBoost参数详解
通⽤参数:
loss_function 损失函数,⽀持的有RMSE, Logloss, MAE, CrossEntropy, Quantile, LogLinQuantile, Multiclass, MultiClassOneVsAll, MAPE, Poisson。默认RMSE。
custom_metric 训练过程中输出的度量值。这些功能未经优化,仅出于信息⽬的显⽰。默认None。
eval_metric ⽤于过拟合检验(设置True)和最佳模型选择(设置True)的loss function,⽤于优化。
iterations 最⼤树数。默认1000。
learning_rate 学习率。默认03。
random_ed 训练时候的随机种⼦
l2_leaf_reg L2正则参数。默认3
bootstrap_type 定义权重计算逻辑,可选参数:Poisson (supported for GPU only)/Bayesian/Bernoulli/No,默认为Bayesian bagging_temperature 贝叶斯套袋控制强度,区间[0, 1]。默认1。
subsample 设置样本率,当bootstrap_type为Poisson或Bernoulli时使⽤,默认66
sampling_frequency 设置创建树时的采样频率,可选值PerTree/PerTreeLevel,默认为PerTreeLevel
random_strength 分数标准差乘数。默认1。
u_best_model 设置此参数时,需要提供测试数据,树的个数通过训练参数和优化loss function获得。默认Fal。
best_model_min_trees 最佳模型应该具有的树的最⼩数⽬。
depth 树深,最⼤16,建议在1到10之间。默认6。
ignored_features 忽略数据集中的某些特征。默认None。
one_hot_max_size 如果feature包含的不同值的数⽬超过了指定值,将feature转化为float。默认Fal
has_time 在将categorical features转化为numerical features和选择树结构时,顺序选择输⼊数据。默认Fal(随机)
rsm 随机⼦空间(Random subspace method)。默认1。
nan_mode 处理输⼊数据中缺失值的⽅法,包括Forbidden(禁⽌存在缺失),Min(⽤最⼩值补),Max(⽤最⼤值补)。默认Min。
fold_permutation_block_size 数据集中的对象在随机排列之前按块分组。此参数定义块的⼤⼩。值越⼩,训练越慢。较⼤的值可能导致质量下降。
leaf_estimation_method 计算叶⼦值的⽅法,Newton/ Gradient。默认Gradient。数学定理
leaf_estimation_iterations 计算叶⼦值时梯度步数。吡喹酮
leaf_estimation_backtracking 在梯度下降期间要使⽤的回溯类型。win8pe
fold_len_multiplier folds长度系数。设置⼤于1的参数,在参数较⼩时获得最佳结果。默认2。
approx_on_full_history 计算近似值,Fal:使⽤1/fold_len_multiplier计算;True:使⽤fold中前⾯所有⾏计算。默认Fal。
class_weights 类别的权重。默认None。
scale_pos_weight ⼆进制分类中class 1的权重。该值⽤作class 1中对象权重的乘数。
初入职场boosting_type 增压⽅案
allow_const_label 使⽤它为所有对象训练具有相同标签值的数据集的模型。默认为Fal
CatBoost默认参数:
‘iterations’: 1000,
‘learning_rate’:0.03,
‘l2_leaf_reg’:3,
‘bagging_temperature’:1,
‘subsample’:0.66,
‘random_strength’:1,
‘depth’:6,
‘rsm’:1,
‘one_hot_max_size’:2
‘leaf_estimation_method’:’Gradient’,
‘fold_len_multiplier’:2,
‘border_count’:128,
CatBoost参数取值范围:
‘learning_rate’:Log-uniform distribution [e^{-7}, 1]
‘random_strength’:Discrete uniform distribution over a t {1, 20}
‘one_hot_max_size’:Discrete uniform distribution over a t {0, 25}
‘l2_leaf_reg’:Log-uniform distribution [1, 10]
‘bagging_temperature’:Uniform [0, 1]
‘gradient_iterations’:Discrete uniform distribution over a t {1, 10}
精神支柱使⽤实例
import numpy as np
import catboost as cb
train_data = np.random.randint(0, 100, size=(100, 10))
train_label = np.random.randint(0, 2, size=(100))
test_data = np.random.randint(0,100, size=(50,10))
model = cb.CatBoostClassifier(iterations=2, depth=2, learning_rate=0.5, loss_function='Logloss',                              logging_level='Verbo')
model.fit(train_data, train_label, cat_features=[0,2,5])
全世界的英文
preds_class = model.predict(test_data)
奥运手抄报preds_probs = model.predict_proba(test_data)
print('class = ',preds_class)
print('proba = ',preds_probs)

本文发布于:2023-05-15 08:00:02,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/898796.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:类别   特征   数据
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图