作者|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 # 或者 CatBoostRegressormodel_cb = CatBoostClassifier()model_cb.fit(X_train, y_train)
或者,如果你想要一个对于模型如何学习以及是否开始过拟合的可视化界面,请应用plot=True并在eval_set参数中插入测试集:
from catboost import CatBoostClassifier # 或者 CatBoostRegressormodel_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 CatBoostmodel = 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/