| 扬声器 |
抄本 |
| 拉斯·沃尔芬格 |
好的。大家好。 |
| |
欢迎来到我位于北卡罗来纳州霍利斯普林斯的家。 |
| |
在新冠疫情肆虐的当下,在线举行虚拟会议是一种全新的体验,但我很高兴今天能与大家交流,并提供有关 JMP Pro 全新插件的教程。 |
| |
实现流行的 XGBoost 功能。 |
| |
今天在本教程中,我将带大家了解一下我们现有的内容。我这里有一个 JMP 日志 |
| |
这些内容将在会议材料中提供。如果你也想参与其中,我鼓励你这样做, |
| |
你可以暂停视频,直接跳转到会议资料,找到这本期刊。你可以在你自己的 JMP Pro 版本中打开它。 |
| |
还有一个安装链接。你需要安装一个插件,如果你安装了它,你就能在家里完全复制我在这里做的所有事情,甚至可以自己做一些尝试。所以如果可以的话,我鼓励你这样做。 |
| |
我的狗狗 Charlie 确实在后台。希望它别做出什么丢人的事。它现在看起来不太兴奋,但它和我一样喜欢 XGBoost,所以,我们开始吧。 |
| |
XGBoost 是一个非常令人难以置信的开源 C++ 库,已经存在好几年了。 |
| |
最初的理论实际上是由几位著名的统计学家在 90 年代提出的,但后来华盛顿大学的团队采纳了这些想法并将其付诸实施。 |
| |
而且它...我认为它真正发挥作用是在一些 Kaggle 竞赛的背景下。 |
| |
它的起源...一旦人们开始使用它并且它可用,它实际上就开始赢得过去几年 Kaggle 举办的几乎所有表格竞赛。 |
| |
事实上,现在网上有几百个例子,如果你想搜索一下,你就会找到它们。 |
| |
因此,我认为这可以说是目前世界上最流行、也许是最强大的表格数据预测建模方法。 |
| |
当然还有竞争对手,对于任何一个特定的数据集,你可能会看到一些差异,但总的来说,这是非常令人印象深刻的。 |
| |
事实上,现在市面上有一些功能非常类似的竞争性软件包,比如微软的 LightGBM 和 Yandex 的 Catboost。我们今天就不深入讨论它们了,但它们确实非常类似。 |
| |
呃,既然我们今天时间不多,我就不多说动机了。不过,如果你想更仔细地研究,这本日记倒是可以。 |
| |
我想要做的是向你们介绍这本期刊的亮点,特别是给你们一些现场演示,这样你们就能了解这里的内容。 |
| |
然后,随着时间的推移,你就可以自由地自行探索和尝试这些功能了。你需要……你需要一套可以正常运行的 JMP Pro 15。 |
| |
最早也要等到明年,也就是 2021 年,才能正式发布。 |
| |
但您现在可以获取早期试用版本,我们正在对其进行增强。因此,我建议您获取最新的 JMP 16 Pro 早期试用版本。 |
| |
为了获得此插件的最新功能……这个功能。这…… ... |
| |
为了集成 XGBoost C++ API,我们在 Pro 中编写了大量 C++ 代码。因此,我们的大部分工作都使用 C++ 完成。 |
| |
但是有一个随附的插件可以安装动态库并为您进行一些菜单更新,所以您需要...您需要 Pro 并且需要安装插件才能运行它。 |
| |
因此,如果可以的话,请抢购 JMP 16 pro 早期采用者,以便获得最新的东西,这就是我今天要展示的内容。 |
| |
我们先来举个例子。这是我刚刚注意到的一个新例子。它背后有一个非常有趣的故事。 |
| |
这些数据背后的研究者是一位名叫Jaivime Evarito的教授。他是一位环境科学家专家,博士,教授,助理教授 |
| |
他现在在荷兰乌得勒支大学工作,他很慷慨地在获得许可的情况下提供了这些数据,以及背后的故事,以帮助那些对这些数据感到有点……戏剧性的人。我让他的同事 Jeffrey McDonnell |
| |
收集了所有这些数据。这些都是数据。目的是研究世界各地森林砍伐地区的水径流。 |
| |
你可以看到,我们这里有 163 个地方,大部分在美国,然后是世界各地,当他们能够收集 |
| |
砍伐树木的地区,然后他们进行了一些关键测量 |
| |
就水径流发生的情况而言。这类研究对于研究砍伐树木、毁林以及气候变化的环境影响非常重要,所以非常及时。 |
| |
当时让 Jaivime 感到高兴的是,他们能够在世界顶级科学期刊《自然》上发表论文,这是一篇非常好的 |
| |
他的经验让他得以发表论文。不幸的是,接下来发生的事情,尽管有一个竞争实验室对他们在这篇论文中所做的事情提出了严厉的批评。 |
| |
经过多次反复讨论后,这篇论文最终被撤回, |
| |
这对Jaivime来说显然是一段非常艰难的经历。我的意思是,他非常慷慨,愿意分享我的故事和希望。 |
| |
以避免这种情况发生。事实证明,争议的根源还有其他几个原因,但批评者最主要的抱怨是…… |
| |
我可能做过提升树分析。这是一个相当简单的模型。我们可能只有几个预测因子,每个都很重要,但他们的主要目标之一是确定哪些是最重要的。 |
| |
他用一个保留验证集运行了一个提升树模型,并发布了一个大约 0.7 的验证保留率。一切看起来都还不错。 |
| |
但后来批评者出现了,他们用不同的保留集重新分析了数据,并得到了验证保留 R 平方 |
| |
小于 0.1。所以变化相当大。他们把 0.7 降到了 0.1 以下,而这……批评家们对此大肆抨击,试图抹黑正在发生的事情。 |
| |
现在,Jaivime,此时此刻,Jaivime,这件事发生在去年,这篇论文在 2020 年初就被撤回了…… |
| |
Jaivime 今年夏天和我分享了这些数据,我的想法是进行更严格的交叉验证分析,并进行重复 K 折, |
| |
而不是仅仅针对一个单一的反对者,为了试图弄清楚两个不同的反对者之间的差异。我所做的就是,我们制定了一个新的例程 |
| |
这是 XGBoost 插件自带的,可以创建 K 折列。如果你能看到这里的数据集,你就会知道我已经创建了这些。为了节省时间,我们不会深入讲解如何做到这一点。但是 |
| |
现在有一个名为“制作 K 折列”的新模块可以帮你实现这个功能。我采用的是分层的方式。有趣的是,它在后台调用了 JMP DOE。 |
| |
这样做的好处是,你实际上可以创建正交折叠,这并不常见。在这里,我来快速进行一下分布。 |
| |
这是 Jaivime 最初做的保留集,他确实进行了分层,我认为这是个好主意,因为反馈有点偏差。然后这是评论家使用的保留集, |
| |
这是我最终使用的折叠方式。我做了三种不同的方案。我想强调的是,这些折叠方式非常垂直, |
| |
我们通过对三个正交集进行三次 K 折运算来获得最大信息增益。 |
| |
所以,事实证明,因为他已经在使用提升树,所以下一步要尝试的是 XGBoost 插件。所以我很高兴找到这个数据集并在这里讨论它。 |
| |
现在发生了什么……让我再做一次分析,对验证集进行单向分析。结果发现我漏掉了这里所做的响应,也就是水产量修正。 |
| |
我把它和验证集对比起来。结果显示,Jaivime 在他的训练集中, |
| |
前四五个测量值都出现在他的训练集中,我认为这就是问题的根源。 |
| |
而在批评者数据集中,他们确实……结果比较平衡,稍微平衡一些,尤其是最糟糕的情况……得分最高的位置在验证集中。所以这是一个自然的错误来源,因为它超出了任何进行训练的范围。 |
| |
我认为这确实是一个 K 折叠分析比仅进行单个保留集更引人注目的案例。 |
| |
我认为,这两个单一保留集都存在一些偏差,最好进行更多折叠,以便分层……分配事物 |
| |
每次都不一样,然后看看多次拟合后会发生什么。所以你可以看到我在这里创建的折叠在分布方面是什么样的,现在让我们运行 XGBoost。 |
| |
所以这个插件实际上有很多功能,我今天不想让你感到不知所措,但再次强调,我鼓励你跟着视频一起看,如果你想自己跟着看,可以暂停视频。 |
| |
确认一下。但我们这里做的,我只是运行了一个脚本。顺便说一下,日志里的所有东西都有……JMP 表很棒,你可以保存脚本。所以我在这里做的就是用那个脚本运行 XGBoost。 |
| |
举个例子,我将直接从菜单重新运行它。这可能是你想要的方式。所以当你安装插件时, |
| |
你点击预测模型,然后点击 XGBoost。所以我们把它添加到了预测模型菜单中。你的设置方式如下: |
| |
是指定响应。这里是 Y。这里有七个预测变量,我们将它们作为 x 放在这里,然后你再放上它们的折叠列和验证集。 |
| |
我想在这里向那些经验丰富的 JMP Pro 用户指出一点,XGBoost 处理验证列的方式与其他 JMP 平台略有不同。 |
| |
目前,它是一种实验框架,但根据我的经验,我发现重复 K 折叠是一种非常引人注目的方法,我想设置插件以使其变得简单。 |
| |
因此,我在这里再次输入我们用实用程序创建的这些折叠列,XGBoost 将自动执行重复的 K 折叠,只需像我们在这里一样指定它即可。 |
| |
如果你想像原始分析那样进行单一保留,你可以像平常一样进行设置,但你必须使列 |
| |
连续的。这很棘手。我知道我们的一些早期采用者对此感到困惑,这与其他惯例不同 |
| |
JMP Pro 中的其他 XGBoost 或其他预测建模程序,但在我看来,这似乎是最简洁的方法。同样,推荐的方法是运行 |
| |
像这样重复 K 折,或者至少进行一次 K 折,然后就可以点击“确定”了。你会看到这个初始启动窗口。 |
| |
XGBoost 的特点是它有很多调整参数。关键参数列在这个方框里,你可以使用它们。 |
| |
然后我们发现还有很多,它们隐藏在高级选项下,而我们今天根本没有时间去了解它们。 |
| |
但我们已经尽力了……这些是最重要的,你通常……大多数情况下,你只需要担心它们。那么……让我们继续运行……让我们再运行一次,从这里你可以点击“开始”按钮,然后 XGBoost 就会运行。 |
| |
现在我只是在一台普通的笔记本电脑上运行。这是一个相对较小的数据集。所以……我们只是重复了五次 |
| |
只需几秒钟,就能完成三件不同的事情。XGBoost 的调优效果非常好,并且能够很好地处理更大的数据集。但对于这个小例子,我们先看看发生了什么。 |
| |
现在事实证明,这个初始图表立即引起了警觉。 |
| |
我们在这里看到的是...经过多次迭代,拟合迭代,我们得到了一条训练曲线,它基本上就是你想要下降的损失函数。 |
| |
但实线是验证曲线。你可以看到这里发生了什么。几次迭代之后,这条曲线就触底了,然后情况变得更糟。 |
| |
所以在这种情况下,你实际上不应该使用这个默认模型。XGBoost 已经过拟合了。 |
| |
这通常会发生在像这样的较小的数据集上,并且确实需要进行调整。 |
| |
底部还有很多其他结果,但同样,它们……我不认为它们值得信赖。此时,你需要……你需要做一些调整。 |
| |
今天,我们只进行一些手动调优,但我鼓励你这样做。我们实际上已经实现了一个完整的框架来创建调优设计, |
| |
您可以在其中指定一系列参数并搜索设计空间,我们实际上再次使用 JMP DOE。 |
| |
所以……我们已经有两种不同的 DOE 使用方法,这两种方法都确实增强了功能。现在,我们先根据这张图进行一些手动调整。 |
| |
你可以看看我们能不能……放大这张图,我们可以看到曲线已经触底。我来看一下,在三四次迭代之后,我们可以做的一件非常简单的事情就是,在四步之后停止训练。 |
| |
看看会发生什么。顺便说一下,注意一下我们的过拟合情况,验证集的R平方实际上是负的,非常糟糕。这绝对不是一个推荐的模型。但是如果我们运行这个新模型,只需要四步……就四步, |
| |
看看会发生什么。 |
| |
验证集的 R 平方值好多了。现在大约是 0.16,实际上,我们先试试三个,看看会发生什么。 |
| |
稍微差一点。所以你看,这是可以尝试的事情。我们已经尝试建立这种对话机制,以便我们能够接受这种情况。 |
| |
你可以在这张表上进行一些模型比较,这张表一开始会对你有所帮助。你可以按不同的列排序,找到最佳模型,然后向下钻取,查看各种模型细节。 |
| |
让我们继续使用模型 2,我们可以做的是...... |
| |
我们只保留那一个,然后你可以清理...你可以清理你不想要的模型,它会删除隐藏的模型。 |
| |
现在我们回到我们想要深入研究的模型。注意,我们的验证集 R 平方大约是 0.17。 |
| |
所以,请记住,这实际上是 Jaivime 最初得到的和评论家得到的之间的差距。 |
| |
我认为这是一个更可靠的 R 平方测量方法,因为它是整体计算的,我们实际上进行了 15 种不同的建模拟合, |
| |
三次不同的五倍。所以这是这些值的平均值。所以我认为这能更清晰、更可靠地衡量模型的表现。 |
| |
如果你向下滚动查看任何拟合的模型,就会看到相当多的输出。再说一遍……JMP 非常擅长……我们总是试图在统计数据附近制作图表,以便你能够 |
| |
两者都可以看到正在发生的事情并附加数字,并且这些图表可以正常显示,并且具有良好的交互性。 |
| |
但你可以看到,我们得到了训练集的实际值、预测值和验证集。验证集的情况几乎总是会变得更糟,但事实就是如此。 |
| |
你可以再次看到错误发生的地方,这就是真正的高点,它经常会到达......这是 45 度线。 |
| |
所以那些高测量值往往……而且所有高测量值往往被低估,这很正常。我认为对于任何类似的方法来说,它都会倾向于缩小 |
| |
降低极值,只是为了保守起见。这样你就能准确地看到错误发生的位置和程度。 |
| |
现在,Jaivime 的主要兴趣是……他最感兴趣的是看看哪些变量真正推动了 |
| |
这是水校正效果。我们可以看到,最突出的是这个叫做 PET 的。 |
| |
在 XGBoost 中,评估变量重要性的方法有很多种。你可以直接用分割次数作为增益度量,我认为这是 |
| |
也许是最适合入门的指标。它衡量的是每次根据某个变量进行拆分时,模型的改进程度。还有一个指标叫做覆盖率。 |
| |
在这种情况下,对于这三者中的任何一个,PET 都显得尤为重要。所以,基本上,这种快速分析似乎就是针对这些数据采取行动的地方。 |
| |
现在有了 JMP,我们实际上可以做更多的事情。您可以看到,在建模红色三角形下方,我们添加了许多新功能。您可以保存预测值和公式, |
| |
您可以发布到模型库或公式库并在那里做更多的事情。 |
| |
我们甚至提供了生成 Python 代码的例程,它不仅用于评分,实际上还负责完成所有的训练和拟合工作。这算是个新功能,但它能帮助那些想要从 JMP Pro 过渡到 Python 的用户。不过,这里我们先来看一下刻画器。 |
| |
我必须在之前的视频中向我的朋友布拉德·琼斯 (Brad Jones) 表示歉意,我忘了承认他是分析器的发明者。 |
| |
所以,这实际上是一个案例,某种程度上也归功于他。我们现在用另一种方式来运用它,也就是评估变量的重要性以及每个变量是如何运作的。所以对我来说,这真的非常引人注目。 |
| |
我们可以……我们可以看看这个框架。查理……我一提到这个,查理就立刻从沙发上站了起来。他现在就在我身边。 |
| |
那么,看看会发生什么……我们可以看到有趣的事情是这个 PET 变量,我们可以看到关键时刻,似乎只要 PET |
| |
当数据刚好超过 1200 左右时,事情才真正开始好转。所以,这很好地说明了分析器的工作原理。 |
| |
据我所知,这是第一次……这是第一个……这是唯一提供 |
| |
像这样的图表,它超越了重要的统计指标,向你展示了到底发生了什么,并帮助你解释 |
| |
提升树模型。我认为这确实是一种很好的分析方法,我鼓励你这样做……也鼓励你用你自己的数据尝试一下。 |
| |
现在让我们看另一个例子并回到我们的日志。 |
| |
正如你所见,这里有很多东西。我们当然没有时间一一讲完。 |
| |
不过,为了节省时间,我想先展示一下当我们有一个二元目标时会发生什么。我们刚才讨论的是连续的。 |
| |
为此,我们将使用旧的糖尿病数据集,该数据集已经存在很长时间了,可以在 JMP 示例库中找到。这个数据集与之前的数据集相同,但我们添加了一些新的脚本。 |
| |
所以如果你下载了期刊,你就会得到这种增强版本,它有 |
| |
相当多的 XGBoost 运行都使用不同的二进制序数目标,正如你记得的,这里我们得到了从原始 Y 变量派生出的低点和高点测量值, |
| |
看看对糖尿病的反应。我们还要更进一步。假设我们处于某种医疗环境中,我们实际上想要使用利润矩阵。我们的目标是做出决策。我们要预测每个人, |
| |
无论他们是高还是低,但当我思考这个问题时,我们意识到,如果一个人确实很高,那么风险就会更高一些。 |
| |
因此,我们的利润或亏损可能会翻倍,具体取决于实际状态是否较高。当然, |
| |
这是一种通常正确的工作方式...正确的决定在这里和这里。 |
| |
然后不正确的是在这里,那些是......当你设置这样的矩阵时,你要考虑所有四个单元格。 |
| |
这里我来做一个简单的例子。它正在翻倍,我不知道你能不能给它赋予真正的货币价值。如果你处于这种情况,这实际上是一件好事。 |
| |
谁知道呢,也许我们可以将它们视为一个比特币,每个价值大约为 10,000 美元或类似的数字。 |
| |
没什么大不了的。更重要的是,我们想根据自己的情况做出最佳决策。 |
| |
我们的预测。所以,我们现在进行分析时,会把这个利润矩阵考虑进去。实际上,它只是在模型拟合之后才进行,并不直接用于拟合本身。 |
| |
我们现在要运行 XGBoost,我们有一个二进制目标。如果你注意到 |
| |
目标函数现在已经变为对数损失的逻辑,这就是这里反映的逻辑对数似然。 |
| |
您可以看到...我们现在可以通过二元目标来查看,我们用来评估它的指标略有不同。 |
| |
但如果你注意到的话,我们确实有利润列,它们是根据我们刚刚查看的利润矩阵计算出来的。 |
| |
但如果你处于这样一种情况,也许你不想担心利润矩阵,而只是某种直接的二元回归,你可以看看常见的指标,比如 |
| |
准确率(与错误分类率相反)是衡量准确率的指标。F1 或 Matthews 相关性值得关注,ROC 分析则能帮助你平衡特异性和敏感性。所以,所有这些都是可用的。 |
| |
你可以深入研究。我想展示的一个全新功能是我们仍在努力实现的,那就是我们现在有一种方法可以让你调整决策阈值。 |
| |
现在你实际上可以以交互方式进行操作。我们有一个新功能……可以按阈值绘制你的利润图。 |
| |
因此,这是我们刚刚开始引入 JMP Pro 的全新图表,您必须获得最新的 JMP 16 早期采用者才能获得它,但它确实适应决策矩阵...... |
| |
或者说利润矩阵。我们正在研究的另一件事是,你可以直接基于这个矩阵推导出一个最优阈值。 |
| |
我相信,在这种情况下,它实际上仍然是0.5。所以,如果你的真正目标是利润最大化,这在某种程度上可以让你更深入地了解你可能想要做的事情。 |
| |
否则,您可能希望根据您的上下文来平衡特异性和敏感性,但您会得到典型的混淆矩阵,如下所示,以及此处显示的一些用于训练和验证的图表。 |
| |
然后是 ROC 曲线。 |
| |
你还会得到和我们之前看到的变量重要性相同的结果。让我们继续使用分析器,因为这确实是一个不错的选择…… |
| |
在这种情况下,这也很好。我们可以准确地看到每个变量的情况。 |
| |
例如,我们可以看到,LTG 和 BMI 是两个最重要的变量,它们似乎都随着响应的增加而上升,所以我们可以直接看到这种关系。事实上,有时用树状图,你会得到非线性的结果,比如这里的 BMI。 |
| |
目前还不清楚这是否是真实存在的事情,我们可能需要做更多分析或研究更多模型来确认,也许这里确实发生了一些事情。 |
| |
我们看到的凹凸。但这些都是你可以梳理出来的东西,看起来真的很有趣。 |
| |
好了,这就是我们用糖尿病数据集进行实验的方法。期刊的内容远不止这些。还有两个例子,由于时间关系,今天就不展示了,不过 XGBoost 文档里有详细的记录。 |
| |
这是一份PDF文档,里面详细介绍了该插件,并逐步指导您完成这两个示例。所以,我建议您查看一下。 |
| |
然后,该日志还包含已完成的几种不同的比较。 |
| |
你看到了我们研究的这个紫色矩阵。这是宾夕法尼亚大学进行的一项研究, |
| |
他们在一系列不同的数据集上比较一系列机器学习方法,然后比较一种方法比另一种方法表现好多少倍。XGBoost |
| |
最终成为最佳模型,虽然这次比较并不总是最好的,但平均而言,它的表现往往优于你在这里看到的所有其他模型。所以,还有一些证据表明 |
| |
这项技术的威力和能力。还有一些其他的事情我就不细说了。 |
| |
这个山谷模型很有趣。在这个例子中,树木根本没发挥什么作用。这有点像病态的情况,但研究起来很有趣,有助于理解到底发生了什么。 |
| |
我们还在 JMP 研发部门内部进行了一些相当广泛的测试,其中许多结果来自几个不同的数据集。 |
| |
再次强调,为了节省时间,我就不详细讲了,但我鼓励大家去看看。确实如此……我们所有的结果都附在了期刊里,你可以在很多不同的领域和数据规模上进行测试。 |
| |
那就去看看吧。我跟你说个玩笑,我们关于速度的结论总结在这个小表情包里。我们有两辆不同的车。 |
| |
实际上,它确实尖叫着,并且它被调整为利用所有...GPU 中的所有线程...在 CPU 中。 |
| |
如果你使用的是 Windows 系统,并且拥有 NVIDIA 显卡,你甚至可以充分利用 GPU 的性能,这通常能带来五倍的运行速度提升。这真的很有趣。 |
| |
好了,本教程就到此结束。再次鼓励大家去尝试一下。我真的很感谢大家的参与。 |
| |
我担心实际上我可能忽略了一些人,但我至少想感谢一下这些人。我们有一个很棒的早期采用者群体。 |
| |
他们提供了来自 Marie、Diedrich 的非常好的反馈,而维拉诺瓦大学的这些人实际上已经开始在课堂环境中成功使用 XGBoost。 |
| |
听到这个消息真是太好了。JMP 内部的很多人都在提供帮助。 |
| |
当然,这是建立在整个 JMP 基础架构之上的。所以,在某个时候,我几乎需要列出整个 JMP 部门的帮助,这项工作非常有趣。 |
| |
然后我要感谢我们的生命科学团队,他们在很多事情上都让我保持诚实。他们也提供了许多建议,给了我很大的帮助。 |
| |
Luciano 实际上已经实现了一个 XGBoost 插件,这是 JMP Genomics 的一个附加插件,如果你正在使用 JMP Genomics,我建议你也去了解一下。你也可以在 JMP Genomics 的预测模型框架中直接调用 XGBoost。 |
| |
所以非常感谢您的关注,希望您可以尝试一下 XGBoost。 |