作者 |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/conc…。
请参见上面的示例:
你甚至能够应用穿插验证,在不同的宰割上察看模型准确度的均匀和标准偏差:
微调
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/conc…
部分可了解性
对于部分可了解性,CatBoost 附带 SHAP,SHAP 通常被认为是惟一牢靠的办法。
shap_values = model.get_feature_importance(Pool(X, y), type='ShapValues')
官网也提供了教程:https://github.com/catboost/t…。你能够应用进行部分可了解性操作以及获取特色重要性。
边际效应
到目前为止,这是我最喜爱的货色。随着高精度的商品化(特地是随着 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/feat…
学习材料
Catboost 的文档十分有用,即便你认为你对很多模型一目了然,他们的文档也能够帮忙你。
原文链接:https://towardsdatascience.co…
欢送关注磐创 AI 博客站:
http://panchuang.net/
sklearn 机器学习中文官网文档:
http://sklearn123.com/
欢送关注磐创博客资源汇总站:
http://docs.panchuang.net/