2021 年 5 月 27 日 — 作者:Mathieu Guillame-Bert,Sebastian Bruch,Josh Gordon,Jan Pfeifer 我们很高兴开源 TensorFlow 决策森林 (TF-DF)。TF-DF 是一个包含用于训练、服务和解释决策森林模型(包括随机森林和梯度提升树)的生产就绪最先进算法的集合。您现在可以使用这些模型进行分类、回归和排序……
作者:Mathieu Guillame-Bert,Sebastian Bruch,Josh Gordon,Jan Pfeifer
我们很高兴开源 TensorFlow 决策森林 (TF-DF)。TF-DF 是一个包含用于训练、服务和解释决策森林模型(包括随机森林和梯度提升树)的生产就绪最先进算法的集合。您现在可以使用这些模型进行分类、回归和排序任务 - 并具有 TensorFlow 和 Keras 的灵活性和可组合性。
随机森林是一种流行的决策森林模型类型。在这里,您可以看到一组树通过对结果进行投票来对示例进行分类。 |
决策森林是一类机器学习算法,其质量和速度与神经网络(甚至在许多情况下优于神经网络)相媲美,尤其是在处理表格数据时。它们由许多 决策树 构成,这使得它们易于使用和理解 - 并且您可以利用现有的丰富可解释性工具和技术。
TF-DF 将此类模型以及一套定制工具带给 TensorFlow 用户
如果您已经在 TensorFlow 之外使用决策森林,以下是 TF-DF 提供的一些功能
一个好的例子胜过千言万语。因此,在这篇博文中,我们将展示使用 TensorFlow 决策森林训练模型是多么容易。更多示例可在 TF-DF 网站 和 GitHub 页面 上找到。您还可以观看我们在 Google I/O 2021 上的 演讲。
让我们从一个最小的示例开始,在这个示例中,我们在 表格 Palmer's Penguins 数据集上训练一个随机森林模型。目标是从动物的特征预测动物的物种。该数据集包含数值特征和类别特征,并存储为 csv 文件。
来自 Palmer's Penguins 数据集的三个示例。 |
让我们训练一个模型
# Install TensorFlow Decision Forests
!pip install tensorflow_decision_forests
# Load TensorFlow Decision Forests
import tensorflow_decision_forests as tfdf
# Load the training dataset using pandas
import pandas
train_df = pandas.read_csv("penguins_train.csv")
# Convert the pandas dataframe into a TensorFlow dataset
train_ds = tfdf.keras.pd_dataframe_to_tf_dataset(train_df, label="species")
# Train the model
model = tfdf.keras.RandomForestModel()
model.fit(train_ds)
请注意,我们在代码中没有提供输入特征或超参数。这意味着,TensorFlow 决策森林将自动从该数据集中检测输入特征,并对所有超参数使用默认值。
现在,让我们评估模型的质量
# Load the testing dataset
test_df = pandas.read_csv("penguins_test.csv")
# Convert it to a TensorFlow dataset
test_ds = tfdf.keras.pd_dataframe_to_tf_dataset(test_df, label="species")
# Evaluate the model
model.compile(metrics=["accuracy"])
print(model.evaluate(test_ds))
# >> 0.979311
# Note: Cross-validation would be more suited on this small dataset.
# See also the "Out-of-bag evaluation" below.
# Export the model to a TensorFlow SavedModel
model.save("project/my_first_model")
很容易吧?而且具有默认超参数的默认 RandomForest 模型为大多数问题提供了快速且良好的基线。一般来说,决策森林在处理中小型问题时训练速度很快,与许多其他类型的模型相比,需要更少的超参数调整,并且通常会提供不错的结果。
既然您已经查看了训练模型的准确性,那么让我们考虑一下它的可解释性。如果您希望了解和解释正在建模的现象、调试模型或开始信任其决策,可解释性非常重要。如上所述,我们提供了一些工具来解释训练模型,从绘图开始。
tfdf.model_plotter.plot_model_in_colab(model, tree_idx=0)
您可以直观地跟踪树结构。在这棵树中,第一个决策是基于 喙长。喙长超过 42.2 毫米的企鹅很可能是蓝色(Gentoo)或绿色(Chinstrap)物种,而喙较短的企鹅很可能是红色物种(Adelie)。
对于第一组,树接着询问鳍长。鳍长超过 206.5 毫米的企鹅很可能是绿色物种(Chinstrap),而其余的企鹅很可能是蓝色物种(Gentoo)。
模型统计数据是绘图的有益补充。示例统计数据包括
这些以及更多此类问题的答案都包含在模型摘要中,并且可以通过模型检查器访问。
# Print all the available information about the model
model.summary()
>> Input Features (7):
>> bill_depth_mm
>> bill_length_mm
>> body_mass_g
>> ...
>> Variable Importance:
>> 1. "bill_length_mm" 653.000000 ################
>> ...
>> Out-of-bag evaluation: accuracy:0.964602 logloss:0.102378
>> Number of trees: 300
>> Total number of nodes: 4170
>> ...
# Get feature importance as a array
model.make_inspector().variable_importances()["MEAN_DECREASE_IN_ACCURACY"]
>> [("flipper_length_mm", 0.149),
>> ("bill_length_mm", 0.096),
>> ("bill_depth_mm", 0.025),
>> ("body_mass_g", 0.018),
>> ("island", 0.012)]
在上面的示例中,模型是在默认超参数值下训练的。这是一个不错的第一个解决方案,但“调整”超参数通常可以进一步提高模型的质量。这可以通过以下方法完成
# List all the other available learning algorithms
tfdf.keras.get_all_models()
>> [tensorflow_decision_forests.keras.RandomForestModel,
>> tensorflow_decision_forests.keras.GradientBoostedTreesModel,
>> tensorflow_decision_forests.keras.CartModel]
# Display the hyper-parameters of the Gradient Boosted Trees model
? tfdf.keras.GradientBoostedTreesModel
>> A GBT (Gradient Boosted [Decision] Tree) is a set of shallow decision trees trained sequentially. Each tree is trained to predict and then "correct" for the errors of the previously trained trees (more precisely each tree predicts the gradient of the loss relative to the model output)..
...
Attributes:
num_trees: num_trees: Maximum number of decision trees. The effective number of trained trees can be smaller if early stopping is enabled. Default: 300.
max_depth: Maximum depth of the tree. `max_depth=1` means that all trees will be roots. Negative values are ignored. Default: 6.
...
# Create another model with specified hyper-parameters
model = tfdf.keras.GradientBoostedTreesModel(
num_trees=500,
growing_strategy="BEST_FIRST_GLOBAL",
max_depth=8,
split_axis="SPARSE_OBLIQUE",
)
# Evaluate the model
model.compile(metrics=["accuracy"])
print(model.evaluate(test_ds))
# >> 0.986851
我们希望您喜欢阅读这个关于 TensorFlow 决策森林的简短演示,并且您像我们一样对使用它和为它做出贡献感到兴奋。
使用 TensorFlow 决策森林,您现在可以在 TensorFlow 中以最快的速度和最高的质量训练最先进的决策森林模型,并且只需付出最少的努力。如果您喜欢冒险,您现在可以将决策森林和神经网络结合起来,创建新型的混合模型。
如果您想详细了解 TensorFlow 决策森林库,我们整理了一些资源,并推荐以下内容
如果您有任何问题,请在 discuss.tensorflow.org 上使用标签“TFDF”提问,我们将尽力提供帮助。再次感谢。
2021 年 5 月 27 日 — 作者:Mathieu Guillame-Bert,Sebastian Bruch,Josh Gordon,Jan Pfeifer 我们很高兴开源 TensorFlow 决策森林 (TF-DF)。TF-DF 是一个包含用于训练、服务和解释决策森林模型(包括随机森林和梯度提升树)的生产就绪最先进算法的集合。您现在可以使用这些模型进行分类、回归和排序……