概括
在这篇文章中,我们比较了在 Python 和 JMP 中运行决策树,并演示了如何通过应用数学标准来确定每个分支应该在哪个参数上进行拆分,从而在 JMP 中创建自定义决策树。这种级别的自定义在 Python 中不可用,因此 JMP 对于构建稳健的模型至关重要,因为在模型中拆分参数不能靠运气。此外,这种自定义可以让您利用您的专业知识来证明每个分支的拆分参数的选择是合理的,尤其是当多个候选人表现出类似的有效拆分数据的能力时。
此示例使用 Wine 数据集,这是 Scikit-learn 库中常见的分类示例。它包含对在意大利同一地区种植但来自三个不同品种(葡萄类型)的葡萄酒的化学分析结果:标记为 0、1 和 2。在数据集中,对每个样品运行了 13 种化学表征技术,包括黄酮类化合物(一种酚)的含量、葡萄酒的颜色强度、灰分含量、色调、酒精含量等。
我们的目标是创建一个决策树分类模型,以尽可能少且便宜的特性测试来识别葡萄酒的来源。
使用 Python
首先,让我们看看在 Python 中创建决策树模型会得到什么。(脚本附在本帖中。)可以使用 matplot lib 绘制生成的模型,如下所示。第一个模型根据颜色强度、脯氨酸、灰分含量、黄酮类化合物和酒精含量进行分类。

除非将随机种子设置为特定值,否则每次运行树都会有所不同,如下所示。虽然这是意料之中的,但并不实际,因为您可能希望选择一组运行速度快且/或成本低廉的最佳特性测试。在此示例中,无法控制发生拆分的特征或拆分值。
|
随机状态 = 2
|
随机状态 = 14
|
随机状态 = 24
|
|
|
|
|
需要检测:颜色强度、脯氨酸、酒精含量、黄酮类化合物
|
需要检测:颜色强度、脯氨酸、灰分、灰分碱度、苹果酸、酒精含量、黄酮类化合物
|
需要检测:颜色强度、脯氨酸、od280/od315、黄酮类化合物、灰分碱度
|
使用 JMP
让我们看看 JMP 在选择特性测试时是否可以做得更好。
在 JMP 中运行决策树平台时,转到分析 > 预测模型 > 分区。将验证部分设置为 0.3,并检查信息缺失和序数限制顺序。

报告看起来类似这样。单击“Go”。

单击“Go”将生成以下决策树:

就像在 Python 中一样,重新进行分析会为决策树创建另一个结构。
那么,我们可以做些什么来创建一个随机性较低的模型,该模型基于对所使用的表征方法的一些偏好?我们将覆盖分割并自己选择参数。
首先,我们将点击“修剪”按钮。通过点击“修剪”,您可以后退一步并一次删除一个分支。接下来,点击“候选”列表并按G^2 或 Logworth 拆分标准对特征进行排序,这样您就可以分析哪些参数位于列表顶部。
下面您可以看到分离的不同候选物,其中黄酮类化合物位于列表顶部,其次是 od280/od315、总酚和脯氨酸。

G^2 值告诉我们模型将选择类黄酮作为拆分标准。如果单击“拆分”,将使用类黄酮值 1.41 进行分支拆分。
接下来,展开黄酮类化合物 < 1.41 下的候选列表。颜色强度现在位于列表顶部。但是,测量色调可能比测量颜色强度更容易;如果是这样,请单击红色三角形,然后单击“拆分特定”。然后,您可以选择拆分的参数(在本例中为色调),然后单击“确定”。

下面的这棵新树表明,如果黄酮类化合物水平低于 1.41 且色调低于 0.906,则葡萄酒由品种 #2 酿造的概率为 0.98。另一方面,当色调高于 0.906 时,葡萄酒最有可能来自 1 型葡萄。当黄酮类化合物水平高于 1.41 时,品种为 0 或 1 的概率几乎为 50%。所以,让我们继续进行拆分。

在类黄酮 >=1.41 下,查看候选物及其 G^2 水平。酒精和脯氨酸具有相似的 G^2 值。由于酒精测试更容易,因此在酒精处进行拆分。它表明,如果酒精含量大于 13.5,则葡萄酒来自 0 型葡萄的可能性为 91%。

最终创建的决策树模型如下。现在,我们需要更少的特征测试来识别葡萄类型,并且所选的测试更容易执行,而无需采用黑箱方法来选择这些参数。然后可以轻松保存决策规则并与他人共享。
