做者|Félix Revert
编译|VK
来源|Towards Data Sciencehtml
我翻阅了CatBoost的文档以后,我被这个强大的框架震惊了。CatBoost不只在你提供给它的任何数据集上构建了一个最精确的模型,其中只须要最少的数据准备。它还提供了迄今为止最好的开源解释工具,以及快速生成模型的方法。python
CatBoost引起了机器学习革命。学习使用它会提升你的技能。但更有趣的是,CatBoost对数据科学家(好比我本身)的现状构成了威胁,由于我认为在给定数据集的状况下,创建一个高精度的模型是很乏味的。可是CatBoost正在改变这种情况。它使得每一个人均可以使用高度精确的模型。git
你试过在笔记本电脑上安装XGBoost吗?那你确定知道有多麻烦。可是在另外一端安装运行CatBoost倒是小菜一碟。github
pip install catboost
这样就安装好了。bash
与目前大多数可用的机器学习模型不一样,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),而后开始调整模型的参数。
从他们的基准测试中,你能够看到CatBoost比XGBoost更快,而且与LightGBM相对相似。众所周知,LightGBM的训练速度很快。
不过,说到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')
到目前为止,这是我最喜欢的东西。随着高精度的商品化(特别是随着AutoML的兴起),当今从更深层次上了解这些高精度模型变得愈来愈重要。
根据经验,如下图表已成为模型分析的标准。CatBoos在它的包中直接提供它。
在这个图标上你观察到
绿色的是数据分布
蓝色的是每一个箱子的平均目标值
橙色的是每一个箱子的平均预测值
红色的是部分依赖图( Partial Dependence)
在生产中实现你的模型变得很是容易。下面是如何导出CatBoost模型。
使用.save_model()方法能够得到如下帮助文档:
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')
大多数模型中一般都有详细的输入,以便查看你过程的进展状况。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/