|
扬声器
|
脚本
|
| 拉斯·沃尔芬格 |
好的。大家好。 |
| |
欢迎来到我位于北卡罗来纳州霍利斯普林斯的家。 |
| |
随着新冠疫情的蔓延,在线举行虚拟会议是一种新体验,但我很高兴今天能与大家交谈,并提供有关我们为 JMP Pro 提供的全新插件的教程 |
| |
实现流行的 XGBoost 功能。 |
| |
今天在本教程中,我将向您介绍我们所拥有的内容。我这里有一个 JMP 日志 |
| |
会议材料中会提供。如果你愿意亲自参与,我鼓励你这样做, |
| |
你可以暂停视频,转到会议资料,获取本期刊。你可以在自己的 JMP Pro 版本中打开它, |
| |
还有一个安装链接。你必须安装一个插件,如果你继续安装它,你将能够在家里完全重现我在这里所做的一切,甚至可以自己做一些尝试。所以如果可以的话,我鼓励你这样做。 |
| |
我确实有我的狗 Charlie,它就在那里。我希望它不会做出任何令人尴尬的事情。它现在看起来不太兴奋,但它和我一样喜欢 XGBoost,所以让我们开始吧。 |
| |
XGBoost 是一个非常令人难以置信的开源 C++ 库,已经存在好几年了。 |
| |
最初的理论实际上是由 90 年代几位著名的统计学家提出的,但后来华盛顿大学的团队采纳了这些想法并将其付诸实施。 |
| |
而且...我认为它真正发挥作用是在一些 Kaggle 竞赛的背景下。 |
| |
它的起点...一旦人们开始使用它并且它可用,它实际上就开始赢得过去几年 Kaggle 举办的几乎所有表格竞赛。 |
| |
事实上,现在网上有几百个例子,如果你想搜索一下,你就会找到它们。 |
| |
因此我认为这可以说是目前世界上最流行、也许是最强大的表格数据预测建模方法。 |
| |
当然还有竞争对手,对于任何一个特定的数据集,你可能会看到一些差异,但总的来说,这是非常令人印象深刻的。 |
| |
事实上,现在市面上有不少具有竞争力的软件包,它们的功能与微软的 LightGBM 和 Yandex 的 Catboost 非常相似。我们今天不会深入讨论它们,但它们非常相似。 |
| |
呃,既然我们今天没有太多时间,我不想详细讨论动机。不过,如果你想更仔细地研究它们,你可以阅读这本日记。 |
| |
我想要做的是向您介绍该期刊的重点内容,特别是给您一些现场演示,以便您了解这里的内容。 |
| |
然后,随着时间的推移,您就可以自由地自行探索和尝试这些事情。您将需要……您需要一个可以正常运行的 JMP Pro 15 副本 |
| |
最早,但如果你能抢到 JMP 16 早期试用版,官方 JMP 16 要到明年(2021 年)才会发货, |
| |
但您现在可以获取早期采用者版本,我们正在对其进行改进。因此,我鼓励您获取最新的 JMP 16 Pro 早期采用者版本 |
| |
为了获得此插件的最新功能...此功能。现在,这是 JMP Pro 的一种不寻常的新框架设置。 |
| |
我们在 Pro 中编写了大量 C++ 代码,以便集成以获取 XGBoost C++ API。这就是为什么...我们的大部分工作都是用 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 折叠分析、K 折叠类型分析比仅进行单个保留集更引人注目的例子。 |
| |
我认为,这两个单一保留集都存在一些偏差,最好进行更多折叠,分层……分配事物 |
| |
每次都不同,然后看看经过多次拟合后会发生什么。所以你可以看到我在这里创建的折叠在分布方面是什么样子的,然后让我们运行 XGBoost。 |
| |
所以这个插件实际上有很多功能,我不想今天就让你们不知所措,但同样,我鼓励你们跟着视频一起看,如果你想自己跟着看,可以暂停视频 |
| |
以确保。但我们在这里所做的只是运行了一个脚本。顺便说一句,日志中的所有内容都有...JMP 表很好,您可以在其中保存脚本。所以我在这里所做的是从该脚本运行 XGBoost。 |
| |
让我来举例说明,我将直接从菜单中重新运行它。这可能是您想要执行的方式。因此,当您安装插件时, |
| |
你点击预测建模,然后是 XGBoost。所以我们把它添加到预测建模菜单中。所以你设置它的方式 |
| |
是指定响应。这里是 Y。有七个预测因子,我们将其作为 x 放在这里,然后您放上它们的折叠列和验证。 |
| |
我想在这里向那些经验丰富的 JMP Pro 用户指出一点,XGBoost 处理验证列的方式与其他 JMP 平台略有不同。 |
| |
目前,它是一种实验框架,但根据我的经验,我发现重复 K 折叠是一种非常引人注目的方法,我想设置插件使其变得简单。 |
| |
因此,我在这里再次输入我们用实用程序创建的这些折叠列,XGBoost 将自动执行重复 K 折叠,只需像我们这里一样指定它即可。 |
| |
如果你想像原始分析那样做一个保留,你可以像平常一样进行设置,但你必须让列 |
| |
连续。这是个陷阱。我知道我们的一些早期采用者对此感到困惑,这是一种与其他不同的惯例 |
| |
其他 XGBoost 或 JMP Pro 中的其他预测建模程序,但在我看来,这似乎是最简洁的方法。同样,推荐的方法是运行 |
| |
像这样重复 K 折,或者至少进行一次 K 折,然后您就可以点击确定。您将获得此初始启动窗口。 |
| |
XGBoost 确实有很多调整参数。关键参数列在此框中,你可以使用这些参数进行操作。 |
| |
然后我们发现还有更多,它们隐藏在高级选项下,而我们今天根本没有时间讨论这些选项。 |
| |
但我们已经尝试过……这些是最重要的,你通常会……在大多数情况下,你只需要担心它们。那又怎么样……让我们继续运行……让我们继续运行它,只需从这里单击“Go”按钮,然后 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 变量派生出的低点和高点测量值, |
| |
看看对糖尿病的反应。我们在这里要更进一步。假设我们处于一种医疗环境中,我们实际上想要使用利润矩阵。我们的目标是做出决定。我们将预测每个人, |
| |
不管他们是高还是低,但当我考虑这个问题时,我们意识到,如果一个人真的很高,那么风险就会更高一些。 |
| |
因此,我们的利润或亏损可能会翻倍,这取决于实际状态是否较高。当然, |
| |
这是一种通常正确的工作方式...正确的决定在这里和这里。 |
| |
然后不正确的是在这里,那些是......当你设置这样的矩阵时,你要考虑所有四个单元格。 |
| |
这里我们来做一个简单的例子。它正在翻倍,我不知道你是否能给它们赋予真正的货币价值。如果你处于这种情况,这实际上是一件好事。 |
| |
谁知道呢,也许我们可以将它们视为一个 BitCoic,每个价值可能在 10,000 美元左右或类似的数字。 |
| |
没什么大不了的。更重要的是,我们想根据我们的 |
| |
我们的预测。因此,当我们进行分析时,我们会考虑这个利润矩阵。这实际上只是在模型拟合之后进行的。它并不直接用于拟合本身。 |
| |
现在我们要运行 XGBoost,我们有一个二进制目标。如果你注意到 |
| |
目标函数现在已经变为对数损失的逻辑,这就是这里反映的逻辑对数似然。 |
| |
您可以看到...我们现在可以通过二元目标来查看,我们用来评估它的指标略有不同。 |
| |
但如果你注意到的话,我们确实有根据我们刚刚查看的利润矩阵计算出来的利润列。 |
| |
但如果你处于这样一种情况,也许你不想担心利润矩阵,而只是某种直接的二元回归,你可以看看常见的指标,比如 |
| |
准确率,也就是错误分类率的倒数,这些 F1 或 Matthews 相关性值得一看,还有 ROC 分析,可以帮助您平衡特异性和敏感性。所以所有这些都是可用的。 |
| |
你可以深入研究。我想展示的一个全新事物是我们仍在努力研究的,那就是我们现在有一种方法可以让你玩转决策阈值。 |
| |
现在您可以以交互方式完成此操作。我们有了一个新的……一个新东西,可以按阈值绘制您的利润。 |
| |
所以这是我们刚刚开始引入 JMP Pro 的全新图表,您必须获得最新的 JMP 16 早期采用者才能获得它,但它确实适应决策矩阵...... |
| |
或者利润矩阵。我们正在研究的另一件事是,您可以直接根据这个矩阵得出最佳阈值。 |
| |
我认为,在这种情况下,它实际上仍然是 .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,我建议您也查看一下。您还可以在那里的预测建模框架中直接调用 XGBoost。 |
| |
所以非常感谢你的关注,希望你能获得XGBoost来尝试一下。 |