作者|Félix Revert
编译|VK
来源|Towards Data Science
介绍
我翻阅了CatBoost的文档之后,我被这个强大的框架震惊了。CatBoost不仅在你提供给它的任何数据集上构建了一个最精确的模型,其中只需要最少的数据准备。它还提供了迄今为止最好的开源解释工具,以及快速生成模型的方法。
CatBoost引发了机器学习革命。学习使用它会提高你的技能。但更有趣的是,CatBoost对数据科学家(比如我自己)的现状构成了威胁,因为我认为在给定数据集的情况下,建立一个高精度的模型是很乏味的。但是CatBoost正在改变这种状况。它使得每个人都可以使用高度精确的模型。
以极快的速度建立高精度模型
安装
你试过在笔记本电脑上安装XGBoost吗?那你肯定知道有多麻烦。但是在另一端安装运行CatBoost却是小菜一碟。
pip install catboost
这样就安装好了。
数据准备
与目前大多数可用的机器学习模型不同,CatBoost只需要最少的数据准备。它能处理:
-
数值变量的缺失值
-
没有编码的分类变量
注意:对于分类变量,必须事先处理缺失值。替换为新类别“missing”或最其他常用的类别。
-
对于GPU用户,它也能处理文本变量。
不幸的是,我无法测试这个功能,因为我正在一台没有GPU的笔记本电脑上工作。
构建模型
与XGBoost一样,你拥有熟悉的sklearn语法和一些特定于CatBoost的附加功能。
from catboost import CatBoostClassifier # 或者 CatBoostRegressor
model_cb = CatBoostClassifier()
model_cb.fit(X_train, y_train)
或者,如果你想要一个关于模型如何学习以及是否开始过拟合的可视化界面,请使用plot=True并在eval_set参数中插入测试集:
from catboost import CatBoostClassifier # 或者 CatBoostRegressor
model_cb = CatBoostClassifier()
model_cb.fit(X_train, y_train, plot=True, eval_set=(X_test, y_test))
注意,你可以同时显示多个度量,甚至更人性化的度量,如准确度或精确度。此处列出了支持的指标:https://catboost.ai/docs/concepts/loss-functions-classification.html。
请参见下面的示例:
你甚至可以使用交叉验证,在不同的分割上观察模型准确度的平均和标准偏差:
微调
CatBoost与XGBoost非常相似。要对模型进行适当的微调,首先将early_stopping_rounds进行设置(如10或50),然后开始调整模型的参数。
训练速度
无GPU
从他们的基准测试中,你可以看到CatBoost比XGBoost更快,并且与LightGBM相对类似。众所周知,LightGBM的训练速度很快。
有GPU
不过,说到GPU,真正的魔力就来了。
即使使用相对较老的GPU,如K40(2013年发布),训练时间也将被至少快4倍,而其他更新的CPU最多能快40倍。
模型的解释
CatBoost的作者们明白的一件事是,这不仅仅是一个玩精确度的游戏。为什么在XGBoost和LightGBM可用时要使用CatBoost呢。所以,在可解释性方面,CatBoost提供了开箱即用的函数。
特征重要性
CatBoost提供了3种不同的方法:PredictionValuesChange、LossFunctionChange和InternalFeatureImportance。这里有详细的文档:https://catboost.ai/docs/concepts/fstr.html
局部可理解性
对于局部可理解性,CatBoost附带SHAP,SHAP通常被认为是唯一可靠的方法。
shap_values = model.get_feature_importance(Pool(X, y), type='ShapValues')
官方也提供了教程:https://github.com/catboost/tutorials/blob/master/model_analysis/shap_values_tutorial.ipynb。你可以使用进行局部可理解性操作以及获取特征重要性。
边际效应
到目前为止,这是我最喜欢的东西。随着高精度的商品化(特别是随着AutoML的兴起),当今从更深层次上了解这些高精度模型变得越来越重要。
根据经验,以下图表已成为模型分析的标准。CatBoos在它的包中直接提供它。
在这个图标上你观察到
-
绿色的是数据分布
-
蓝色的是每个箱子的平均目标值
-
橙色的是每个箱子的平均预测值
-
红色的是部分依赖图( Partial Dependence)
在生产中使用CatBoost模型
在生产中实现你的模型变得非常容易。下面是如何导出CatBoost模型。
使用.save_model()方法可以获得以下帮助文档:
Python和C++的导出
model_cb.save_model(‘model_CatBoost.py’, format=’python’, pool=X_train)
执行后在你的repo中会有一个生成好的.py文件,如下所示:
这时候模型已经准备好生产了!而且你不需要在机器上设置一个特定的环境来获得新的分数。只需要Python 3就可以了!
二进制文件输出
二进制显然是获得新数据的最快选择。代码中改成输出.cbm文件。
载入时使用以下代码重新加载模型:
from catboost import CatBoost
model = CatBoost()
model.load_model('filename', format='cbm')
其他有用的提示
Verbose = 50
大多数模型中通常都有详细的输入,以便查看你过程的进展情况。CatBoost也有,但比其他的稍好一点。例如,使用verbose=50将每50次迭代显示一次训练错误,而不是每次迭代显示一次,因为如果有许多次迭代,这可能会很烦人。
使用verbose=10训练同一模型。检查起来好多了。
注意,剩余时间也会显示出来。
模型比较
微调模型需要时间。通常,你可能有几个好的参数列表。为了将其提升结果你甚至可以使用不同的参数集学习模型来比较,以便帮助你对要选择的参数的最终列表做出决定。
训练时保存模型
你有一个大数据集,你害怕训练太久?你可以随时保存模型,这样你过程中的任何中断都不必意味着对模型进行重新拟合!以下是相关文档:https://catboost.ai/docs/features/snapshots.html#snapshots
学习资料
Catboost的文档非常有用,即使你认为你对很多模型了如指掌,他们的文档也可以帮助你。
原文链接:https://towardsdatascience.com/why-you-should-learn-catboost-now-390fb3895f76
欢迎关注磐创AI博客站:
http://panchuang.net/
sklearn机器学习中文官方文档:
http://sklearn123.com/
欢迎关注磐创博客资源汇总站:
http://docs.panchuang.net/
网友评论