catboost原理以及Python代码

枫铃3年前 (2021-06-26)Python295

原论文:

http://learningsys.org/nips17/assets/papers/paper_11.pdf

catboost****原理:

One-hot编码可以在预处理阶段或在训练期间完成。后者对于训练时间而言能更有效地执行,并在Catboost中执行。

类别特征:

为了减少过拟合以及使用整个数据集进行训练,Catboost使用更有效的策略。

1、对输入的观察值的集合进行随机排列,生成多个随机排列;

2、给定一个序列,对于每个例子,对于相同类别的例子我们计算平均样本值;

3、使用如下公式将所有的分类特征值转换为数值:

img,那么img可以代替为

img

在这里,我们还增加了先验值P和参数a>0,即为先验的权重。添加先验是一种常见的做法,它有助于减少从低频类别获得的噪声。

特征组合:

在数据集中,组合的数量随类别特征个数成指数型增长,在算法中不太可能考虑所有。在当前树考虑新的拆分时,Catboost以贪婪的方式考虑组合。

1、 第一次分裂不考虑任何组合在树上;

2、 对于下一次分类,在有所有类别特征的数据集的当前树,Catboost包含了所有的组合和分类特征。组合值即被转换为数字;

3、 Catboost还以以下方式生成数值和类别特征的组合:在树中选择的所有分裂视为具有两个值的类别,并在组合中也类似使用。

python****代码:

import catboost

model = CatBoostClassifier(iterations=17000,

\#                              depth = 6,

                               learning_rate = 0.03,

                               custom_loss='AUC',

                               eval_metric='AUC',

                               bagging_temperature=0.83,

                               od_type='Iter',

                               rsm = 0.78,

                               od_wait=150,

                               metric_period = 400,

                               l2_leaf_reg = 5,

                               thread_count = 20,

                               random_seed = 967

                              )

            model.fit(tr_x, tr_y, eval_set=(te_x, te_y),use_best_model=True)

            pre= model.predict_proba(te_x)[:,1].reshape((te_x.shape[0],1))

            train[test_index]=pre

            test_pre[i, :]= model.predict_proba(test_x)[:,1].reshape((test_x.shape[0],1))

            print (roc_auc_score(te_y, pre))

            cv_scores.append(roc_auc_score(te_y, pre))

相关文章

python 将文件描述符包装成文件对象

有一个对应于操作系统上一个已打开的I/O 通道(比如文件、管道、套接字等)的整型文件描述符,你想将它包装成一个更高层的Python 文件对象。...

python中实现延时回调普通函数示例代码

这篇文章主要给大家介绍了关于python中实现延时回调普通函数的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有...

python基础教程:对可变对象和不可变对象的详解

Python:如何仅用递归函数和栈操作逆序一个栈

如何仅用递归函数和栈操作逆序一个栈题目:一个栈依次压入1,2,3,4,5,...

Python: max和min函数的高级使用

1.简单比较 age_dic={'age1456':15,'age2':16,'xiaohong_age&#...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。