CatBoost算法 & XGBoost算法 & Light G

2020-09-22  本文已影响0人  ShowMeCoding

1 CatBoost简介

参考论文
Anna Veronika Dorogush, Andrey Gulin, Gleb Gusev, Nikita Kazeev, Liudmila Ostroumova Prokhorenkova, Aleksandr Vorobev "Fighting biases with dynamic boosting". arXiv:1706.09516, 2017
Anna Veronika Dorogush, Vasily Ershov, Andrey Gulin "CatBoost: gradient boosting with categorical features support". Workshop on ML Systems at NIPS 2017

本文参考:一文详尽解释CatBoost
https://cloud.tencent.com/developer/article/1546808

CatBoost是俄罗斯的搜索巨头Y andex在2017年开源的机器学习库,也是Boosting族算法的一种,同前面介绍过的XGBoost和LightGBM类似,依然是在GBDT算法框架下的一种改进实现,是一种基于对称决策树(oblivious trees)算法的参数少、支持类别型变量和高准确性的GBDT框架,主要解决的痛点是高效合理地处理类别型特征(Categorical features),这个从它的名字就可以看得出来,CatBoost是由catgoricalboost组成,另外是处理梯度偏差(Gradient bias)以及预测偏移(Prediction shift)问题,提高算法的准确性和泛化能力。

集成学习.png

2 CatBoost的主要特性

3 CatBoost对类别型变量的处理

3.1 类别型变量

类别型变量(Categorical features)是指其值是离散的集合且相互比较并无意义的变量,比如用户的ID、产品ID、颜色等。因此,这些变量无法在二叉决策树当中直接使用。常规的做法是将这些类别变量通过预处理的方式转化成数值型变量再用模型进行训练,比如用一个或者若干个数值来代表一个类别型特征。

3.2 类别型变量的一般处理方式

3.3 CatBoost采用TS特征的优势

在LightGBM当中,类别型特征用每一步梯度提升时的梯度统计(Gradient Statistics,以下简称GS)来表示。虽然为建树提供了重要的信息,但是这种方法有以下两个缺点:

因此,采用TS作为一个新的数值型特征是最有效、信息损失最小的处理类别型特征的方法。TS也被广泛采用,在点击预测任务当中,这个场景当中的类别特征有用户、地区、广告、广告发布者等。

4 XGBoost、Light GBM和CatBoost比较

从结构到性能,一文概述XGBoost、Light GBM和CatBoost的同与不同
https://zhuanlan.zhihu.com/p/34698733

4.1 每个模型是如何处理属性分类变量的?

CatBoost
CatBoost 可赋予分类变量指标,进而通过独热最大量得到独热编码形式的结果(独热最大量:在所有特征上,对小于等于某个给定参数值的不同的数使用独热编码)。
如果在 CatBoost 语句中没有设置「跳过」,CatBoost 就会将所有列当作数值变量处理。
注意,如果某一列数据中包含字符串值,CatBoost 算法就会抛出错误。另外,带有默认值的 int 型变量也会默认被当成数值数据处理。在 CatBoost 中,必须对变量进行声明,才可以让算法将其作为分类变量处理
对于可取值的数量比独热最大量还要大的分类变量,CatBoost 使用了一个非常有效的编码方法,这种方法和均值编码类似,但可以降低过拟合情况。

它的具体实现方法如下:

LightGBM
和 CatBoost 类似,LighGBM 也可以通过使用特征名称的输入来处理属性数据;它没有对数据进行独热编码,因此速度比独热编码快得多。LGBM 使用了一个特殊的算法来确定属性特征的分割值。
注意,在建立适用于 LGBM 的数据集之前,需要将分类变量转化为整型变量;此算法不允许将字符串数据传给分类变量参数。

XGBoost
和 CatBoost 以及 LGBM 算法不同,XGBoost 本身无法处理分类变量,而是像随机森林一样,只接受数值数据。因此在将分类数据传入 XGBoost 之前,必须通过各种编码方式:例如标记编码、均值编码或独热编码对数据进行处理。

5 三种算法的超参数

所有的这些模型都需要调节大量参数,但我们只谈论其中重要的。以下是将不同算法中的重要参数按照功能进行整理的表格。


三种算法的超参数.png

6 用鸢尾花数据集实例演示

from catboost import CatBoostClassifier

import numpy as np
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris = load_iris()
data = iris.data
target = iris.target
X_train, X_test, y_train, y_test = train_test_split(data, target, test_size=0.2, random_state=666)
model = CatBoostClassifier()
model.fit(X_train,y_train)
# 测试集预测
y_pred = model.predict(X_test)
# 模型评估
print('The rmse of prediction is:', mean_squared_error(y_test, y_pred) ** 0.5)

The rmse of prediction is: 0.0

estimator = CatBoostClassifier()
params = {'depth': [4, 7, 10],
          'learning_rate' : (0,0.5,0.01),
         'l2_leaf_reg': [1,4,9],
         'iterations': [300]}

cat_cv = GridSearchCV(estimator, params)
clf = cat_cv.fit(X_train, y_train)
y_pred = clf.predict(X_test)
mean_squared_error(y_test, y_pred)

0.0

print('Best parameters found by grid search are:', cat_cv.best_params_)
Best parameters found by grid search are: {'depth': 4, 'iterations': 300, 'l2_leaf_reg': 1, 'learning_rate': 0.01}

在默认参数下,均方误差为 0

上一篇 下一篇

猜你喜欢

热点阅读