2022 年 8 月 3 日 — 来自麻省理工学院和哈佛大学博德研究所的 Dinko Franceschi 的客座文章 Kaggle 已成为练习数据科学技能和参加机器学习模型构建竞赛的首选之地。本教程将提供一个易于遵循的演练,介绍如何使用 TensorFlow 决策森林 开始使用 Kaggle 笔记本。这是一个库,允许您在 TensorFlow 中训练基于树的模型(例如随机森林和梯度提升树)。它是…
来自麻省理工学院和哈佛大学博德研究所的 Dinko Franceschi 的客座文章
Kaggle 已成为练习数据科学技能和参加机器学习模型构建竞赛的首选之地。本教程将提供一个易于遵循的演练,介绍如何使用 TensorFlow 决策森林 开始使用 Kaggle 笔记本。这是一个库,允许您在 TensorFlow 中训练基于树的模型(例如随机森林和梯度提升树)。
为什么您应该对决策森林感兴趣?Kaggle 比赛大致分为两种类型 - 获胜方案(神经网络或决策森林)取决于您正在处理的数据类型。
如果您正在处理表格数据问题(这涉及训练一个模型来对电子表格中的数据进行分类,这是一种极其常见的场景) - 获胜方案通常是决策森林。但是,如果您正在处理感知问题,其中涉及教计算机如何看或听(例如,图像分类),那么获胜模型通常是神经网络。
好消息来了。您可以在 TensorFlow 中使用几行代码实现决策森林。这个相对简单的模型通常在许多 Kaggle 问题上优于神经网络。
我们将使用 Kaggle 中的一个简单数据集来探索决策森林库,并将使用 Kaggle Kernels 构建我们的模型,Kaggle Kernels 允许您使用免费的云计算能力完全在线构建和训练您的模型 - 类似于 Colab。该 数据集 包含车辆信息,例如成本、门数、载客量和维护成本,我们将使用这些信息来对汽车进行评估。
您可以通过您的 Kaggle 帐户访问 Kaggle Kernels。如果您没有帐户,请先 注册。在主页上,选择左侧菜单中的“代码”选项,然后选择“新建笔记本”,这将打开一个新的 Kaggle Kernel。
从 Kaggle Kernels 打开一个新笔记本后,我们将汽车评估数据集下载到我们的环境中。单击笔记本右上角附近的“添加数据”,搜索“汽车评估”,然后添加数据集。
现在我们准备开始编写代码。安装 TensorFlow 决策森林库和必要的导入,如下所示。本博文中显示的代码来自使用 TensorFlow 决策森林构建、训练和评估模型的 教程,其中包含其他示例供您参考。
!pip install tensorflow_decision_forests
import numpy as np
import pandas
import tensorflow_decision_forests as tfdf
我们现在将导入数据集。需要注意的是,我们下载的数据集中没有包含标题,因此我们将根据 Kaggle 数据集页面上提供的信息首先添加标题。在开始使用数据集之前,最好通过在您喜欢的文本或电子表格编辑器中打开数据集来检查它。
df = pandas.read_csv("../input/car-evaluation-data-set/car_evaluation.csv")
col_names =['buying price', 'maintenance price', 'doors', 'persons', 'lug_boot', 'safety', 'class']
df.columns = col_names
df.head()
然后,我们必须将数据集拆分为训练集和测试集
def split_dataset(dataset, test_ratio=0.30):
test_indices = np.random.rand(len(dataset)) < test_ratio
return dataset[~test_indices], dataset[test_indices]
train_ds_pd, test_ds_pd = split_dataset(df)
print("{} examples in training, {} examples for testing.".format(
len(train_ds_pd), len(test_ds_pd)))
最后,我们将数据集转换为 tf.data 格式。这是一个高性能格式,TensorFlow 使用它来更有效地训练模型,使用 TensorFlow 决策森林,您可以使用一行代码将您的数据集转换为此格式
train_ds = tfdf.keras.pd_dataframe_to_tf_dataset(train_ds_pd, label="class")
test_ds = tfdf.keras.pd_dataframe_to_tf_dataset(test_ds_pd, label="class")
现在,您可以立即通过执行以下操作来训练您的模型
model = tfdf.keras.RandomForestModel()
model.fit(train_ds)
该库具有良好的默认值,对于大多数问题来说是一个不错的起点。对于高级用户,API 文档 中有许多可供选择的选项,因为随机森林是可配置的。
训练完模型后,您可以查看它在测试数据上的表现。
model.compile(metrics=["accuracy"])
print(model.evaluate(test_ds))
仅仅几行代码,您就在这个小型数据集上达到了 95% 以上的准确率!这是一个简单的数据集,有人可能会说神经网络也可以产生令人印象深刻的结果。他们绝对可以(而且确实可以),特别是当您拥有非常大的数据集时(想想:数十万个示例或更多)。然而,神经网络需要更多代码并且资源密集,因为它们需要大量的计算能力。
决策森林还有另一个重要的优势:预处理数据的步骤更少。请注意,在上面的代码中,您可以将包含分类和数值的直接数据集传递给决策森林。您无需进行任何预处理,例如规范化数值、将字符串转换为整数以及对它们进行独热编码。这具有重大优势。它使决策森林更容易使用(因此您可以快速训练模型),并且代码出错的可能性更低。
下面,您将看到这两种技术之间的一些重要区别。
决策森林的一个重大优势是它们易于解释。虽然决策树的流程与训练神经网络的流程有很大不同,但在为特定任务选择这些模型时,存在重大优势。这是因为特征重要性在决策森林(决策树的集合)中特别容易确定。值得注意的是,TensorFlow 决策森林库可以使用其模型绘图器函数可视化特征重要性。让我们看看这如何运作!
tfdf.model_plotter.plot_model_in_colab(model, tree_idx=0)
我们在左侧树的根部看到示例数量 (1728) 以及由不同颜色表示的相应分布。在这里,我们的模型正在查看汽车可以容纳的人数。绿色部分最大,代表 2 人,红色代表 4 人。此外,随着我们向下遍历树,我们继续看到树如何分裂以及相应的示例数量。根据条件,示例被分到两条路径之一。有趣的是,从这里我们也可以通过检查给定特征的所有分裂,然后计算该特征降低了多少方差来确定特征的重要性。
神经网络无疑具有令人难以置信的表示学习能力。虽然它们在这方面非常强大,但重要的是要考虑它们是否适合手头的任务。使用神经网络时,人们必须认真思考如何构建层。相比之下,决策森林开箱即用(当然,高级用户可以调整各种参数)。
在逐层构建神经网络之前,在大多数情况下,人们必须进行特征预处理。例如,这可能包括对特征进行规范化,使其平均值约为 0,标准差为 1,并将字符串转换为数字。使用树模型可以跳过此初始步骤,因为它可以原生处理混合数据。
如上面的代码所示,我们能够在几个步骤中获得结果。获得所需指标后,我们必须在问题的背景下解释它们。决策树的最大的优势之一可能是它们的解释性。我们在上面的代码中看到了输出的图表。从根开始,我们可以遵循分支,并快速了解模型如何做出决策。相比之下,神经网络是一个“黑盒子”,很难解释,也很难向非技术人员解释。
如果您想了解更多关于 TensorFlow 决策森林的信息,最好的起点是 项目主页。您也可以查看这个 以前的文章,了解更多背景信息。如果您有任何问题或反馈,最好的提问地点是 https://discuss.tensorflow.org/,使用“tfdf”标签。感谢阅读!
2022 年 8 月 3 日 — 来自麻省理工学院和哈佛大学博德研究所的 Dinko Franceschi 的客座文章 Kaggle 已成为练习数据科学技能和参加机器学习模型构建竞赛的首选之地。本教程将提供一个易于遵循的演练,介绍如何使用 TensorFlow 决策森林 开始使用 Kaggle 笔记本。这是一个库,允许您训练基于树的模型(例如随机森林和梯度提升树)。它是…