使用CatBoost和NODE建模表格数据对比测试( 二 )
docker pull yandex/tutorial-catboost-clickhouse docker run -it yandex/tutorial-catboost-clickhouse
在数据集上使用CatBoost让我们看看如何在表格数据集上使用CatBoost 。 我们先下载一个稍微预处理过的成人/人口普查收入数据集 , 下面假设它位于datasets/ Adult .csv中 。 我选择这个数据集是因为它混合了分类和数字特征 , 在数以万计的示例中有一个很好的可管理的规模 , 并且没有太多的特征 。 它经常用于举例说明算法 , 例如在谷歌的What-If工具和许多其他地方 。
成人人口普查数据包括"年龄"、"工作类别"、"教育程度"、"受教育程度"、"婚姻状况"、"职业"、"关系"、"种族"、"性别"、"资本收益"、"资本损失"、"每周小时"、"本土国家"和"<=50K" 。 任务是预测最后一列' <=50K '的值 , 该列指示相关人员的年收入是否为50,000美元或更少(数据集来自1994年) 。 我们认为以下特征是分类的而不是数字的:"工人阶级"、"教育"、"婚姻地位"、"职业"、"关系"、"种族"、"性别"、"原住民" 。
该代码与scikit-learn非常相似 , 除了CatBoost用于将数据集的特征值和目标值捆绑在一起 , 同时在概念上保持它们分离的Pool数据类型之外 。
代码可以在Colab上找到(colab/drive/1WezJuc3ioEUZYKh_Mm7YVjWcMeYjDNKP)但我将在这里复制以供参考 。 CatBoost需要知道哪些特性是分类的 , 然后自动处理它们 。 在这个代码片段中 , 我还使用了5倍(分层)交叉验证来估计预测精度 。
from catboost import CatBoostClassifier, Poolfrom hyperopt import fmin, hp, tpeimport pandas as pdfrom sklearn.model_selection import StratifiedKFolddf = pd.read_csv('' +'id=10eFO2rVlsQBUffn0b7UCAp28n0mkLCy7建议采用超参数优化方法 。 他们提到他们优化了以下空间:
1. num层:{2,4,8}
1. 树总数:{1024,2048}
1. 树深度:{6,8}
1. 树输出dim: {2,3}
在我的代码中 , 我不做网格搜索 , 而是让hyperopt在一定范围内采样值 。 我考虑这个问题的方式(可能是错误的)是 , 每一层都表示一个树集合(比方说CatBoost的单个实例) 。 对于您添加的每一层 , 您可能会添加一些表示能力 , 但是您也会使模型变得更重 , 难以训练 , 并且可能会有过拟合的风险 。 树的总数大致类似于CatBoost/xgboost/random forest中的树的数量 , 并且有相同的权衡:树很多时 , 可以表达更复杂的函数 , 但是模型需要更长的时间来训练 , 并且有过拟合的风险 。 同样 , 树的深度也有同样的权衡 。 至于输出维度 , 坦白地说 , 我不太明白为什么它是一个参数 。 似乎回归应该等于1 , 分类应该等于类的数量 。
如何使用NODE?作者在GitHub上发布了代码 。 它们不提供命令行界面 , 而是建议用户在提供的Jupyter笔记本中运行它们的模型 。 在这些笔记本中提供了一个分类示例和一个回归示例 。
README页面也强烈建议使用GPU来训练节点模型 。 (这是支持CatBoost的一个因素 。 )
我准备了一个合作的笔记本 , 里面有一些关于如何在NODE上运行分类以及如何用hyperopt优化超参数的示例代码 。
colab/drive/11VH01T5BNDGEBLlZlG28zBB3MIBGWt
这里我将突出显示代码的一些部分 。
修改代码的一般问题我在修改作者的代码时遇到的问题主要与数据类型有关 。 重要的是输入数据集(Xtrain和Xval)是浮点32格式的数组(numpy或torch);不是float64或者float和int的混合 。 标签需要像int64一样编码 , 用于分类 , 而float32用于回归 。
其他问题与内存有关 。 这些模型可以快速地消耗GPU内存 , 特别是在作者的示例笔记本中使用的大批处理尺寸 。 我简单地解决了这个问题 , 在我的笔记本电脑(以及后来的Colab)上使用最大的批量大小 。
不过 , 总的来说 , 让代码正常工作并不难 。 文档有点少 , 但足够了 。
推荐阅读
- Biogen将使用Apple Watch研究老年痴呆症的早期症状
- Eyeware Beam使用iPhone追踪玩家在游戏中的眼睛运动
- 或使用天玑1000+芯片?荣耀V40已全渠道开启预约
- 苹果将推出使用mini LED屏的iPad Pro
- 手机能用多久?如果出现这3种征兆,说明“默认使用时间”已到
- 苹果有望在2021年初发布首款使用mini LED显示屏的 iPad Pro
- 笔记本保养有妙招!学会这几招笔记本再战三年
- 数据可视化三节课之二:可视化的使用
- 索尼sw77与sw55的使用差别感受
- 爆料称一加9系列与潜望式镜头无缘 继续使用普通长焦