从头开始​​在 Polars 中构建决策树

决策树算法一直让我着迷。它们易于实现,并且在各种分类和回归任务中取得了良好的效果。结合 boosting,决策树在许多应用中仍然是最先进的。直到今天,sklearn、lightgbm、xgboost 和 catboost 等框架都做得非常好。然而,在过去的几个月里,[…]The post Build a Decision Tree in Polars from Scratch 最先出现在 Towards Data Science 上。

来源:走向数据科学

决策树算法一直让我着迷。它们易于实现,并且在各种分类和回归任务上取得了良好的效果。与增强相结合,决策树在许多应用中仍然是最先进的。

决策树

sklearn、Lightgbm、xgboost 和 catboost 等框架至今都做得非常好。然而,在过去的几个月里,我一直缺少对箭头数据集的支持。虽然 lightgbm 最近增加了对此的支持,但大多数其他框架仍然缺少它。箭头数据格式可能与决策树完美匹配,因为它具有针对高效数据处理优化的柱状结构。Pandas 已经增加了对此的支持,并且 polars 也利用了其优势。

Lightgbm

Polars 已显示出比大多数其他数据框架更显著的性能优势。它有效地使用数据并避免不必要地复制数据。它还提供了一个流引擎,允许处理比内存更大的数据。这就是为什么我决定使用 polars 作为从头开始构建决策树的后端。

目标是探索在内存和运行时方面使用 polars 进行决策树的优势。当然,还要学习更多关于 polars、有效定义表达式和流引擎的知识。

实现的代码可以在此存储库中找到。

存储库

代码概述

为了初步了解代码,我将首先展示 DecisionTreeClassifier 的结构:

DecisionTreeClassifier

第一个重要的东西可以在导入中看到。对我来说,保持导入部分干净整洁并尽可能减少依赖项非常重要。这只对 polars、pickle 和 typing 有依赖关系,因此成功了。

max_depth

可以保存和加载决策树模型。它表示为嵌套字典,可以作为 pickle 文件保存到磁盘。

fit() build_tree() predict() predict_many() predict() predict_many() Polars Dataframe import from import , , import as class