TowardsDataScience 博客中文翻译 2020(七百四十七)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

R 中的雷达图

原文:https://towardsdatascience.com/radar-chart-in-r-222c30866b1b?source=collection_archive---------17-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

凯利·西克玛在 Unsplash 上的照片

如何使用 fmsb 库创建图表?

D 数据可视化对于从数据中获得洞察力非常重要。我们可以使用许多图表,例如条形图、直方图、折线图、雷达图等等。它的使用取决于我们想要达到的目的。

雷达图或蜘蛛图是一种在二维图表中显示多元数据的图表,其中每个变量都从同一点开始。

在本文中,我想向您展示如何构建雷达图,从准备数据开始,一直到数据的可视化。对于数据集,我们将使用 R4DS 学习社区在#TidyTuesday 使用的数据集。对于库,我们将使用 fmsb 和 tidyverse 库。最终的图表看起来会像这样,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据描述

我先解释一下数据。这些数据来自#TidyTuesday 活动,该活动是为那些希望提高使用 R 的技能的人举办的,特别是在数据可视化和数据争论方面。它是基于向皇家防止虐待动物协会(RSPCA)的投诉,以及该协会自 1999 年以来做出的结果。它由 3 个数据集组成,例如它们是 animal_outcomes.csv、animal_complaints.csv 和 brisbane_complaints.csv。现在,我们只使用 animal_outcomes.csv 来创建雷达图。

该过程

要创建条形图,我们必须首先准备数据集。起初,数据集看起来像这样,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该数据集由 664 行和 12 列组成,其中每行包括年份、动物类型、状态,以及 RSPCA 照顾它们后的结果,无论是被回收还是目前被照顾。

我们想要这样的数据集,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为了让数据集看起来像这样,我们必须用这样的代码预处理数据,

下面是解释。首先,我们必须删除 total 列,该列描述了动物在每个州的每个条件的总和。然后,我们必须过滤只使用猫作为我们的动物类型。然后,我们必须将第 4 列旋转到第 11 列。然后,我们必须通过合计全年的数字来总结每个状态、结果和动物类型的数字。然后,我们扩展列以使数据集更长。最后,我们找出第一和第二列,并将州名设置为行名。

老实说,我们可以将数据作为雷达图的输入,但结果并没有那么好。它看起来像这样,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

那不是我们想要的图表。为了解决这个问题,我们可以对每一列进行规范化,使其具有 0–1 的范围。我们可以使用最小-最大缩放,代码看起来像这样,

在我们缩放每一列之后,在使用 graph 函数之前,我们必须再做一个任务。我们必须将图表中每一列的最小值和最大值相加。我们可以将最小值设置为 0,将数据中的最大值设置为 1。代码看起来像这样,

完成后,我们可以使用这些数据来创建我们的图表。要构建它,我们可以使用 fmsb 库中的 radarchart 函数。该函数需要的参数是数据、基于我们的列的轴段的数量、颜色以及线条的宽度。代码看起来像这样,

结果将是这样的,

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,我们已经完成了雷达图的构建。希望对你有用。如果你有一些问题或者一些建议,可以在下面评论下来。感谢您阅读我的文章。如果你想看我的其他文章,你可以看看下面,

[## R 中 ARIMA 模型的时间序列预测

从勘探到预测 1970 年至 2015 年的二氧化碳排放数据。

towardsdatascience.com](/time-series-forecasting-with-arima-model-in-r-77f4e2ae7abb) [## 使用 PyTorch 和 Flask 构建预测苹果叶部病害的 Web 应用程序

使用预先训练的模型(VGG-16、雷斯网-18 和 AlexNet 架构)构建图像分类器 web 应用。

towardsdatascience.com](/build-a-web-application-for-predicting-apple-leaf-diseases-using-pytorch-and-flask-413f9fa9276a) [## Python 中的客户细分

基于 K-均值聚类算法的图像分割。

towardsdatascience.com](/customer-segmentation-in-python-9c15acf6f945)

参考

https://www.r-graph-gallery.com/spider-or-radar-chart.html

径向基函数(RBF)核:定位核

原文:https://towardsdatascience.com/radial-basis-function-rbf-kernel-the-go-to-kernel-acf0d22c798a?source=collection_archive---------0-----------------------

你正在研究一种机器学习算法,比如针对非线性数据集的支持向量机,但你似乎无法找出正确的特征变换或正确的核来使用。嗯,害怕不是因为径向基函数(RBF)核是你的救星。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图一:别担心!RBF 帮你搞定了。【图片来源:Tenor (tenor.com)】

RBF 核是最普遍的核化形式,并且由于其与高斯分布的相似性,是最广泛使用的核之一。用于两点 X₁和 X₂的 RBF 核函数计算相似性或它们彼此有多接近。这个内核可以用数学方法表示如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

哪里,1。σ’是方差,我们的超参数
2。|| X₁ - X₂|| 是 X₁和 X₂两点之间的欧几里德(l-范数)距离

设 d₁₂是 X₁和 X₂两点之间的距离,我们现在可以将 d₁₂表示如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2:空间两点间的距离【图片由作者提供】

内核等式可以重写如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

径向基函数核的最大值可以是 1,并且当 d₁₂为 0 时出现,此时点是相同的,即 X₁ = X₂.

  1. 当这些点相同时,它们之间没有距离,因此它们非常相似
  2. 当这些点相距很远时,则核值小于 1 并接近 0,这意味着这些点是不相似的

距离可以被认为等同于相异,因为我们可以注意到,当两点之间的距离增加时,它们就不那么相似了。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3:相似度随着距离的增加而降低【图片由作者提供】

重要的是找到正确的“σ”值,以决定哪些点应被视为相似,这可以在个案的基础上证明。

a】σ= 1

当σ = 1 时,σ = 1,RBF 核的数学方程如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下面给出了该方程的曲线,我们可以注意到,随着距离的增加,RBF 核呈指数下降,并且对于大于 4 的距离为 0。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4:σ= 1 的 RBF 核【图片由作者提供】

  1. 我们可以注意到,当 d₁₂ = 0 时,相似性是 1,当 d₁₂增加超过 4 个单位时,相似性是 0
  2. 从图中我们看到,如果距离小于 4,这些点可以被认为是相似的,如果距离大于 4,则这些点是不相似的

b】σ= 0.1

当σ = 0.1 时,σ = 0.01,RBF 核的数学方程如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于σ = 0.1,相似区域的宽度最小,因此,只有当点非常接近时,它们才被认为是相似的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4:σ= 0.1 的 RBF 核【图片由作者提供】

  1. 我们看到该曲线非常陡峭,对于大于 0.2 的距离为 0
  2. 仅当距离小于或等于 0.2 时,这些点才被视为相似

b】σ= 10

当σ = 10,σ = 100 时,RBF 核的数学公式如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

对于σ = 100,相似区域的宽度较大,因为这使得较远的点可以被认为是相似的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5:σ= 10的 RBF 核【图片由作者提供】

  1. 曲线的宽度很大
  2. 对于 10 个单位以内的距离,这些点被认为是相似的,超过 10 个单位,它们就是不相似的

从以上情况明显看出,相似区域的宽度随着σT5 的变化而变化。
为给定数据集找到正确的σ非常重要,可以通过使用网格搜索交叉验证和随机搜索交叉验证等超参数调整技术来实现。

RBF 核因其与 K-最近邻算法的相似性而广受欢迎。它具有 K-NN 的优点,克服了 RBF 核支持向量机在训练时只需要存储支持向量而不是整个数据集的空间复杂度问题。

RBF 核支持向量机是在 scikit-learn 库中实现的,有两个相关的超参数,“C”代表 SVM,“γ”代表 RBF 核。这里,γ与σ成反比。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6:虹膜数据集的径向基函数核 SVM【图片来源:https://scikit-learn.org/】

从图中我们可以看出,随着γ的增加,即σ的减少,对于给定的 c 值,模型往往会过度拟合。

为了实现最佳偏置-方差权衡,找到正确的γ或σ以及 C 值至关重要。

参考文献:

  1. SVM 的 Scikit-Learn 实现:https://sci kit-Learn . org/stable/auto _ examples/SVM/plot _ RBF _ parameters . html
  2. 径向基函数核:https://en.wikipedia.org/wiki/Radial_basis_function_kernel

径向颜色直方图

原文:https://towardsdatascience.com/radial-color-histograms-a3ab0441516?source=collection_archive---------57-----------------------

当颜色、构图和计算对您的计算机视觉问题都很重要时——径向减少图像数据的表示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上由 Finn-E 拍摄的照片

假设您有一个计算机视觉问题,以下情况为真:

  • 访问计算是一个限制,所以使用最新的艺术状态 CNN 架构不是一个选项。
  • 颜色对于解决这个问题很重要,所以颜色直方图可以用于每个图像的低维表示。
  • 但是合成也提供有用的信息,所以您需要一种方法在您的特征空间中保存这些信息。

对于这种情况,使用每个图像的径向颜色直方图表示可能是解决方案。

什么是径向颜色直方图?

它就像一个颜色直方图,但有一些关于图像组成的信息。在下图中;颜色直方图(顶部)给出了一个简单的表示,而径向颜色直方图(中间和底部)通过将图像分割成具有相同像素数的片段,保留了一些关于照片布局的信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Finn-EUnsplash 上拍摄(直方图由作者提供)

特征空间

径向颜色直方图产生比颜色直方图更大的特征空间,如果你将图像分割成 X 个部分,那么它将是 X 倍大。

上面的基本示例中,每个通道使用 3 个面元(每个段提供 3 个面元),但对于实际应用,您可能需要每个通道 8 个面元的更高粒度(每个段提供 8 个面元)。当你把它分成 8 段时,你得到一个 8*8 = 4096 的特征空间。

与现代 CNN 的输入相比,这种表示仍然微不足道,现代 CNN 通常使用大约 2242243=150528 的特征空间。

应用程序

  1. 更简单的分类任务,您不希望在每幅图像中包含不必要的信息而加重模型的负担。
  2. 需要使用大型系综的复杂任务;径向颜色直方图模型可以是有用的齿轮,使用和再训练都很便宜。

履行

如果您想批量处理图像,或者只是玩玩用于创建上面图形的代码,请查看radialColorHistogram库。

[## 高斯/径向颜色直方图

颜色直方图提供了颜色的表示,但不表示图像的组成。辐射状颜色直方图…

github.com](https://github.com/gmorinan/radialColorHistogram)

关于使用这种方法有效解决计算机视觉问题的例子,请查看我的文章迷因视觉:迷因分类的科学

这与我在 机器医学科技 的工作无关。

放射科医生如何使用计算机视觉诊断新冠肺炎

原文:https://towardsdatascience.com/radiologists-computer-vision-diagnose-covid-cecbcdf96e8f?source=collection_archive---------52-----------------------

通过缩短 65%的评估时间,人工智能在抗击新冠肺炎病毒传播方面发挥了关键作用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片由穆罕默德·哈桑拍摄,来自皮克斯拜

疫情冠状病毒已经蔓延到世界各地。逆转录-聚合酶链式反应(RT-PCR)测试通常用于筛查患者,使那些被感染的人能够快速接受治疗。

尽管被普遍使用,该检测试剂盒给出了 30%的假阴性结果。这意味着,每 10 个被新冠肺炎病毒感染的人中,就有 3 人被解除警报。专家建议阴性测试通常并不意味着这个人没有疾病。这需要注意不可靠测试带来的风险,因为错误的测试结果会导致错误的安全感。

专家说,即使你的新冠肺炎病毒检测呈阴性,也要假设你已经感染了

由于我们已经集体测试了数百万人,一些测试结果需要一个多星期。冠状病毒测试仍然是美国应对疫情最紧迫的问题之一。疑似新冠肺炎的患者迫切需要诊断和适当的治疗——这需要快速准确的冠状病毒诊断。因此,全球的科学家都在寻找更可靠的评估。

由于新冠肺炎是一种呼吸道疾病,它会导致一系列呼吸问题。这导致了肺部感染,肺泡发炎,医生可以在计算机断层扫描上看到呼吸道炎症的迹象。(CT)扫描。

CT 图像提供了我们肺部的高质量 3D 图像,有助于检测新冠肺炎的存在。由于大多数扫描只需几分钟,医护人员和研究人员可以获得大量高质量的图像。

3D CT 图像包含 200–400 个图像切片;专家可能需要很长时间才能做出诊断。由于新冠肺炎与其他类型的肺炎有相似的特征,一个非常有经验的医生至少需要 10 分钟来诊断一个病人。因此,非常需要使用计算机视觉的人工智能辅助诊断。

阿里巴巴集团建立了一个人工智能系统,能够根据 CT 扫描图像进行病毒诊断和分析。这个人工智能系统可以在不到 30 秒的时间内诊断 CT 图像,准确率为 96%。

图像分割— U-Net

图像分割是基于人工智能的新冠肺炎图像处理和分析的重要步骤。它有助于放射科医生准确识别肺部感染,并促进定量分析和诊断。图像分割突出了感兴趣的区域,例如 CT 图像中的感染区域,用于进一步的评估和量化。在 AI 评估的帮助下,放射科医生的阅读时间缩短了 65%。

U-Net 是医学图像分割的常用技术。Ronneberger 等人的这篇论文发表在 2015 MICCAI 上,在 2020 年 4 月被引用超过 13000 次。它有一个 U 形结构,带有一个扩展路径和一个收缩路径,这产生更精确的适合医学成像的分割

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Ronneberger 的 U-Net 架构

[## 生物医学图像分割:U-Net

使用非常少的训练图像,并产生更精确的分割。

towardsdatascience.com](/biomedical-image-segmentation-u-net-a787741837fa)

UNet++

基于 U-Net,周等人提出了 UNet++ ,旨在通过在编码器和解码器之间加入密集块和卷积层来提高分割精度。比 U-Net 稍微复杂一点;然而,它带来了 3 个好处。

  • 重新设计的跳过路径使得语义相似的特征图的优化更加容易
  • 密集跳跃连接提高了分割精度并改善了梯度流
  • 深度监督允许模型复杂性调整,以平衡速度和性能优化

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

周建筑

[## 生物医学图像分割:UNet++

通过一系列嵌套、密集的跳过路径提高分段准确性

towardsdatascience.com](/biomedical-image-segmentation-unet-991d075a3a4b)

注意 U-Net

注意机制可以学习挑选出网络中特征的某些部分。Oktay 等人提出了一种注意力 U-Net ,旨在自动学习关注不同形状和大小的目标结构;因此这篇论文的名字叫“学习在哪里寻找胰腺”。它能够捕捉医学图像中的精细结构,因此适合新冠肺炎应用。

因为受感染的区域可能很小,具有各种形状和纹理,所以定位这些区域是一项具有挑战性的任务。整合到 U-Net 中的注意门提高了模型对前景像素的灵敏度和准确性,而不需要大量的计算开销。注意门可以逐渐抑制不相关背景区域的特征反应。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

关注奥克泰的 U-Net 架构

[## 生物医学图像分割:注意力 U 网

通过在标准 U-Net 上附加注意门来提高模型的灵敏度和准确性

towardsdatascience.com](/biomedical-image-segmentation-attention-u-net-29b6f0827405)

图像分割在新冠肺炎中的应用

许多论文认为图像分割是分析医学图像的必要步骤。以下是冯等人收集的论文列表,这些论文将图像分割应用于研究。

编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

愤怒退出癌症研究

原文:https://towardsdatascience.com/rage-quitting-cancer-research-5e79cb04801?source=collection_archive---------16-----------------------

为什么我从神经科学家变成了数据科学家

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一张我为实验室拍摄的奇怪的宣传照片。剧透管子里什么都没有!

在我之前的故事中,我描述了如何从研究科学家转变为数据科学家,在这篇文章中,我将详细阐述为什么。我在脑瘤研究方面有着很有前途的职业生涯,并且已经研究了八年,那么我为什么要放弃这一切呢?

我完成了健康科学学位,但并不确定自己下一步想做什么。有一个新的放射摄影研究生学位,不幸的是它非常受欢迎,我没有进去。这让我不得不为新的一年已经开始的备份计划而忙碌。我联系了我最喜欢的本科讲师,看我是否有可能获得荣誉学位,尽管这个项目已经开始了。

通常这是不可能的。幸运的是,该系有一个项目,他们真的很想找人来做,但学生对这个项目不感兴趣。所以他们破例让我开始攻读解剖学和病理学的荣誉学位。

通常你的导师是你项目领域的专家,我作为第一个脑瘤研究者为实验室开辟了新天地。

在我获得荣誉的那一年结束时,我才刚刚开始对我模拟疾病的模型可能奏效抱有一线希望。

我不想让这个项目打败我,所以我继续用这个模型读博士。这听起来可能是一个奇怪的原因,要承诺至少 3 年的学习和研究,但我认为这可能比你想象的更常见。

就好像我是偶然成为神经科学家的。

2012 年,我完成了神经科学博士学位,下一步是去海外做博士后。我在 UCSF 获得了我的第一个博士后,那里是癌症研究的世界领导者。

  • ✅健康科学学位
  • ✅荣誉学位
  • ✅博士
  • 作为博士后的✅

那我为什么不开心呢?不知何故,我最终成为了一名科学家,却没有真正思考过我的余生想做什么。

我开始怀疑自己是否适合从事研究工作,我的老板是个恶霸。数据科学似乎可以很好地解决我的问题。这个故事是关于我从研究科学家到数据科学家的旅程。

我的旅程跨越了

  • 在我的家乡南澳大利亚阿德莱德完成我的博士学位。
  • 为了我的第一份工作——博士后,我搬到了美国旧金山。
  • 回到阿德莱德接受再培训并申请数据科学工作。
  • 经过大量的艰苦工作和坚持,我回到旧金山,在一家医疗创业公司工作。

对神经科学不再抱有幻想

在我博士后期间,我是 UCSF 海伦·迪勒癌症中心的一名脑肿瘤研究员。一些世界上最好、最先进的癌症研究正在那里进行,这应该是我梦寐以求的工作。但是我不想再待在那里了。我意识到我需要改变。有许多促成因素帮助我做出了那个决定。

我不擅长政治

政治在某种程度上存在于任何工作场所,但我很惊讶在科学中有这么多。我想,不知何故,学者们不会愿意为办公室里的讨价还价而自寻烦恼,伙计,我错了。研究科学家和任何其他行业的人一样充满竞争和不安全感,或许更甚。整天和那些在他们的特定研究领域是世界顶尖专家的人在一起,有助于培养冒名顶替综合症。

没有足够的工作或资金来分配,因此科学家们不得不与他们的同事竞争出版物的资助和著作权。它没有培养一个合作的环境。与其说是合作,不如说是割喉。“出版或灭亡”是学术口号。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

你需要无限的耐心

在研究科学的世界里,尤其是在学术界,事情发生得很慢。这项工作是重复性的,在我所在的临床前研究领域,人们可能从我们所做的工作中受益的最快时间可能是 10 年左右。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这是一张我在实验室里的照片,一整天都在转动一个轮子(还在微笑)

科学不是精英管理

不幸的是,最好的科学并不总是得到最多的金钱或认可。对我来说,这听起来像是酸葡萄心理,可能有这样的因素,但我已经看到许多糟糕的科学得到了职业发展和资金的回报。我发现这很难处理,因为这似乎太不公平了。但我想生活往往是不公平的。

我是一个糟糕的说谎者,我没有能力让我的结果看起来比实际上更令人兴奋或更重要。要获得资助,你必须每次都让你的成果看起来具有突破性,即使它们并不具有突破性。这是你在研究中取得成功所需要玩的游戏。

我工作过度,报酬过低

我有没有提到我全职工作在赔钱?尽管我和男朋友合租了一套一居室的公寓,但我的工资还不够在旧金山生活下去。

我的老板是个恶霸

我与脑瘤研究分手的最后一根稻草是,我的一个老板是个真正的恶霸,他对我和我所有的同事进行微观管理。

我的一周通常是这样度过的…

周一我是实验室的明星。星期二,我会因为一些明显的缺点而被钉在十字架上。然后到了周三,就像前两天什么都没发生过一样。这是一次情感的大起大落,我总是紧张不安,想看看这一天会发生什么。这种对老板不可预测的反应的焦虑确实产生了影响。

当我的老板诉诸情感勒索时,我知道这不仅仅是我的想象。我告诉她,我正在考虑离开实验室,因为我再也无法应对压力了。她的回答是:

想想你的父母为了支持你读博士而牺牲的一切,你真的应该抛弃这一切吗?

事实上,我的父母已经鼓励我戒烟很长时间了,因为他们可以看出我很痛苦。

离开实验室后,我的许多实验室伙伴谈到了他们经历的创伤后压力的症状。不幸的是,通过与大学工会的交谈,我发现我们的实验室并不是唯一一个在暴君手下工作的实验室。

我辞职后

想谈谈压力吗?第二天我不得不离开这个国家

我持 J1 签证在美国工作,这是一种文化交流签证。由于我没有完成这个项目,当我辞职的时候,我不得不在第二天离开这个国家。谢天谢地,墨西哥只是一个快速的跳跃,跳过和跨越边境。我可以持旅游签证再次进入美国,在回澳大利亚之前收拾好我的公寓。

签证烂透了!

再训练

离开学术界后,我决定探索成为一名数据科学家。在科技行业工作的所有福利听起来都很吸引人。我知道我需要在多个领域大幅提高自己的技能。我所做的学术研究需要我生成自己的数据集,我只处理过非常小的数据集。

我在科学方法和实验设计方面有很好的基础,但我一生中从未编码过一天,只有统计分析的基本技能。

当我开始的时候,我不知道我不知道什么。因此,为了获得我需要的专业知识,我请了 6 个月的假来学习编码,并提高我对统计学和机器学习的理解。

为此,我参加了许多在线编码、统计和数据科学课程。我参加的课程和使用的工具的细节在我之前的一篇文章中有详细介绍。

得到我的第一份数据科学工作

寻找工作申请

我寻找工作机会的方法非常有针对性。我的男朋友和我想搬回旧金山,这样就缩小了我要找的公司的范围。湾区科技公司如此集中,所以我仍然有很多选择。

我尝试了所有正常的求职网站,但要筛选的内容太多了,所以我使用了更有针对性的方法。健康或生物公司是我一直在寻找的。

Rock Health 是一家投资数字健康公司的风险基金。通过查看 Rock Health 支持的健康创业公司列表,我找到了我的最佳匹配。我在他们的招聘板上搜寻适合我技能水平的职位,这些职位的使命与我产生了共鸣。

对于每家公司,我都做了功课,写了一封量身定制的求职信,告诉他们我有兴趣在那里工作的具体原因。我还试图突出我的技能,让我从其他求职者中脱颖而出。

从外国采访

我在 Skype 和 Google Hangouts 上做了所有的采访。被远程采访是一种奇怪而又伤脑筋的经历。

有一次采访让我记忆犹新。采访我的首席技术官的网络摄像头出了问题,所以当我和他谈话时,我只能看到他的 Skype 个人资料图片。这本来是完全正常的,除了他的个人资料照片是科米蛙。他开了个时区玩笑,说我从未来和他说话。那一刻,我知道我想在那里工作,我会融入那里。

https://gph.is/2d1ve5N

技术面试

远程面试的一个很大的好处是,我不必忍受任何白板编码面试。面试中在众人面前编程是我最讨厌的事情之一。不仅因为这让我不舒服,还因为这不是你在工作中编码的方式。然而,我承认会议中的白板架构和编写实际代码是有区别的。

我接受了编程技能测试。一些公司让我在我们交谈的时候提出 SQL 查询,一些公司让我在谷歌文档中进行结对编程,还有一些公司让我做带回家的作业。到目前为止,我更喜欢带回家的作业。

尽管它们占用了我更多的时间,但在我看来,它们最接近地复制了你在一家公司的实际工作方式。带回家的作业一石二鸟,同时测试编程和统计分析技能。我发现从负责批改我带回家作业的面试官那里得到反馈非常有帮助。

面试官通常不会在面试后提供反馈,但我会主动询问自己哪些地方可以做得更好,以便改进。即使当我很确定为什么我没有成功的时候,被证实了也是很棒的。当我在面试结束时跟进或询问时,我接触的所有人都非常坦诚,并向我提供了大量有价值的反馈。

我解决问题的能力被几家公司测试过。一些比另一些更有效。

我最喜欢的问题解决问题是数据科学团队最近处理的一个真实场景。我和我的面试官讨论了几种方法。我选定的方法与团队最终使用的方法相同。我发现这非常鼓舞人心,这是我第一次真正地认为‘我能做到!’。

相比之下,有几家公司用脑筋急转弯来测试我解决问题的能力。我真的不喜欢这种做法,它使人为难,而且与工作无关。我不明白为什么面试官会浪费时间问与工作无关的问题。有些人认为脑筋急转弯让你看到人们如何解决问题,这些人错了。

我的面试方法

面试时,我非常坦率地向招聘小组说明了我的局限性。我知道我资历极浅,需要指导和继续在职培训。这不是我试图隐瞒的事情,而是我对采访者说的。

我告诉他们,我最近才学会编码和分析大型数据集。然而,我强调我的学习能力和快速学习的能力。我告诉他们,如果他们要找的人是一位经验丰富的数据科学家,他已经知道所有的技能,我可能不是合适的人选。如果他们在寻找能够胜任这个职位的人,那么我就是最佳人选😉

为什么我更喜欢数据科学而不是脑瘤研究

我很高兴我完成了从研究科学家到数据科学家的转变。我从一个职位稀缺、工作时间长的领域,变成了一个吃香、待遇好得多的领域。此外,我挣的钱要多得多。

然而,当我成为一名数据科学家时,这些并不是让我更快乐的主要事情。

我有更好的工作生活平衡。我获得第一份数据科学工作的那家初创公司很关心员工。我们有无限假期和病假政策。相比之下,当我还是一名研究人员时,为了让实验时间框架发挥作用,我们整个周末都工作或者工作到晚上 10 点并不罕见。

作为一名数据科学家,我觉得我可以比一名脑瘤研究人员对世界产生更大、更快的积极影响。尽管我的研究是在寻找治疗和预防脑瘤的方法,但我觉得我对人们的影响受到了将新疗法转化为人类使用的缓慢速度的限制。理所当然,我不希望人们只是随意尝试新药。然而,让我感到沮丧的是,我的工作的影响被延迟了。

当我成为一名数据科学家时,我所开发的产品可能会在几周内送到用户手中。由于公司的使命反映了我的价值观,我觉得我可以给人们的生活带来真正积极的变化。我们还可以测试我们工作的影响,并从用户那里获得反馈。

作为一家小型医疗保健初创公司,我喜欢我们都朝着同一个目标努力的感觉。团队成员总是很慷慨,因为互相帮助而给予彼此信任。这与实验室内经常发生的论文作者竞争形成了对比。

这听起来可能很疯狂,但现在我是一名数据科学家,我不再做不小心让自己得了癌症的噩梦。我在实验室中使用的人类癌细胞和有害化学物质总是会引起背景水平的焦虑,这种焦虑经常会在非常奇怪的噩梦中出现。现在我在电脑前工作,我睡得更香了。

脑瘤研究和数据科学之间的相似性

我已经谈了很多关于我的新职业和旧职业之间的区别,但是研究科学和数据科学之间也有很多相似之处。顾名思义,科学是共同因素。

解决问题是两者的核心,也是我一直感到非常满足的事情。好的实验设计对于显而易见的研究来说也是极其重要的,但它对于从数据中获取最大价值也是不可或缺的。

统计分析在数据科学工作中更加突出,但作为研究科学的一部分也非常重要。在我看来,在基于实验室的研究中,适当的统计分析的重要性经常被忽视。统计方法经常被选择,因为它们是“这个领域的其他人是怎么做的”,而不是因为它们是最适合实验的方法。我认为更广泛的统计学培训应该作为研究学位的一部分来实施。

此外,这两个领域之间还有许多其他可转换的技能,我将在以后的帖子中进一步讨论。

谢谢

我非常感谢 Amino 的招聘委员会,他们给了我一个非常初级的数据科学家的机会,让我在工作中学习。我对我的新事业感到非常高兴,并感谢第一次机会。

除了数据,我的另一个爱好是绘画。你可以在 www.katemarielewis.com 找到我的野生动物艺术

如果您想了解更多关于我如何成为数据科学家的信息,请访问:

[## 我如何在 6 个月内从零编码技能成为数据科学家

我用来自学数据科学的 4 个工具没有花一美元

towardsdatascience.com](/how-i-went-from-zero-coding-skills-to-data-scientist-in-6-months-c2207b65f2f3) [## 让我获得第一份数据科学工作的面试策略

我是如何展示自己得到这份工作的

towardsdatascience.com](/interview-strategy-that-landed-me-my-first-data-science-job-bdd5e77bfb49)

降雨时间序列分析和预测

原文:https://towardsdatascience.com/rainfall-time-series-analysis-and-forecasting-87a29316494e?source=collection_archive---------10-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SHAH Shah 在 Unsplash 上拍摄的照片

印度尼西亚万丹省 2019-2020 年使用“R”语言的降雨量预测

预测是对未来事件的计算或估计,尤其是对金融趋势或未来天气的预测。直到今年,在面对任何事件之前,预测作为制定任何行动或政策的基础非常有帮助。例如,在一些国家一年只有两个季节(旱季和雨季)的热带地区,许多国家,尤其是非常依赖农业商品的国家,需要预测降雨,以决定开始种植产品和最大化收获的最佳时间。另一个例子是,预测可以被公司用来预测原材料价格的变动,并安排最佳策略以从中获取最大利润。

在本文中,我们将尝试对印度尼西亚万丹省(依赖农业商品的热带国家之一)的降雨量进行预测,我们有 2006-2018 年的历史降雨量数据,并将尝试使用“R”语言进行预测。

在此过程中将使用一个简单的工作流程:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图一。流程工作流

导入和选择数据

该数据集包含印度尼西亚万丹省从 2005 年 1 月到 2018 年 12 月的降雨历史数据。对于这一预测,我将放弃 2005 年,从 2006-2018 年开始,作为我们预测的基础。

#Import Necessary Library
library(lubridate)
library(ggplot2)
library(tidyverse)
library(dplyr)
library(astsa)
library(forecast)
library(readxl)
library(urca)
library(ggfortify)
library(tsutils)

#Import Data
hujan <- read_excel("../input/hujan-update/Hujan_Update.xlsx", 
 sheet = 'Sheet1')
hujan <- hujan %>% gather(key = "Tahun", value = "Curah_Hujan", 
 -Bulan)*#Converting To Time Series* hujan_ts <- ts(data = hujan[,3], frequency = 12, start = c(2005,1))
*#Selecting Data* 
hujan_ts <- window(hujan_ts, start=c(2006,1))hujan_ts

运行完这些代码后,我们将获得以下时间序列数据:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图二。时间序列降雨数据

探索性时间序列数据分析

对任何时间序列数据进行探索性数据分析的第一步是可视化相对于时间的值。我们将使用以下代码将我们的降雨量数据可视化为时间序列图(折线图、值与时间的关系):

#Plot Time Series Dataautoplot(hujan_ts) + ylab("Rainfall (mm2)") + xlab("Datetime") + 
  scale_x_date(date_labels = '%b - %Y', breaks = '1 year', minor_breaks = '2 month') +
  theme_bw() + ggtitle("Banten Rainfall 2006 - 2018")

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图三。万丹降雨时间序列图

时间序列图显示降雨具有季节性模式,但没有出现任何趋势;降雨量将在年末达到最高值,直到 1 月**(雨季),从 3 月到 8 月(旱季)**开始减少。在 2006 年至 2018 年期间,这种模式每年都会重复。

我们将根据趋势、季节性和剩余部分将时间序列数据分解成更详细的内容。利用这一分解结果,我们希望更精确地了解 2006-2018 年期间的降雨行为。

将使用 stl() 函数进行分解,并将时间序列自动分成三个部分(趋势、季节性、余数)。

#Decomposition using stl()
decomp <- stl(hujan_ts[,1], s.window = 'periodic')#Plot decomposition
autoplot(decomp) + theme_bw() + scale_x_date(date_labels = '%b - %Y', breaks = '1 year', minor_breaks = '2 month') +
    ggtitle("Remainder")

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4。时间序列分解

趋势周期和季节图显示出现了季节波动,没有特定的趋势和相当随机的剩余/残差。

有一种计算方法可以衡量趋势和季节性强度:

Ft :趋势强度

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图五。趋势强度公式

Fs :季节性强度

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图六。季节性强度公式

趋势和季节性的强度在 0 和 1 之间,而 “1” 意味着有很强的趋势和季节性发生。

Tt <- trendcycle(decomp)
St <- seasonal(decomp)
Rt <- remainder(decomp)#Trend Strength Calculation
Ft <- round(max(0,1 - (var(Rt)/var(Tt + Rt))),1)#Seasonal Strength Calculation
Fs <- round(max(0,1 - (var(Rt)/var(St + Rt))),1)

data.frame('Trend Strength' = Ft , 'Seasonal Strength' = Fs)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图七。趋势/季节强度计算结果

通过使用测量趋势和季节强度的公式,我们证明了我们的数据具有季节性模式(季节强度:0.6),而没有出现趋势(趋势强度:0.2)。

季节性分析

我们知道我们的数据有季节性模式。因此,探索更多关于我们的降雨数据的季节性;季节图、季节-子系列图和季节箱线图将对我们的数据提供更深刻的解释。

#Seasonal Plot
seasonplot(hujan_ts, year.labels = TRUE, col = 1:13, 
   main =  "Seasonal Plot", ylab= "Rainfall (mm2)")

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图八。降雨时间序列季节图

季节图确实显示了每年发生的季节模式。尽管如此,由于在此期间几年的差异,我们无法仅使用此图来查看模式。进一步的探索将使用季节性箱线图和子系列图,从我们的数据中获得更深入的分析和见解。

#Seasonal Sub-Series Plot
seasplot(hujan_ts, outplot = 3, trend = FALSE, 
      main = "Seasonal Subseries Plot", ylab= "Rainfall (mm2)")#Seasonal Boxplot
seasplot(hujan_ts, outplot = 2, trend = FALSE, 
     main = "Seasonal Box Plot", ylab= "Rainfall (mm2)")

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图九。季节性子系列图

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 10。季节性箱线图

使用季节性箱线图和子系列图,我们可以更清楚地看到数据模式。水平线表示按月分组的降雨量平均值,通过使用此信息,我们了解到降雨量将从 4 月开始减少,并在 8 月和 9 月达到最低点。降雨量将在 9 月后再次开始攀升,并在 1 月达到顶峰。

据此,我们可以将旱季安排在 4 月至 9 月,雨季安排在 10 月至 3 月。这对像印度尼西亚这样依赖农产品的国家来说是一个有益的启示。旱季和雨季预测可用于确定开始种植农业商品并使其产量最大化的正确时间。

此外,这些信息可以帮助政府制定任何政策,作为预防雨季暴雨引发洪水或旱季干旱的方法。

2019-2020 年降雨量预测

预测的第一步是选择正确的模型。为此,我们需要将时间序列数据集分为训练集和测试集。训练集将用于训练几个模型,而且,这个模型应该在测试集上进行测试。

分体列车/测试装置

**训练集:**我们将使用截至 2017 年 12 月的所有数据作为我们的训练集

测试集: 2018 年期间(1 月-12 月)将作为我们的测试集

*#Create Train Set*
hujan_train <- window(hujan_ts, end = c(2017,12))*#Create Test Set* 
hujan_test <- window(hujan_ts, start = c(2018,1))

静止测试

在开始建立 ARIMA 模型之前,应检查列车组数据的平稳性。可以使用 URCA 包装的 科维亚特科夫斯基-菲利普-施密特-申恩试验(KPSS)迪基-富勒试验(D-F 试验) 进行静态试验。

*#Kwiatkowski–Phillips–Schmidt–Shin Test*
summary(ur.kpss(hujan_train)) *#Dickey-Fuller Test* summary(ur.df(hujan_train)) ####################### 
# KPSS Unit Root Test # 
####################### 

Test is of type: mu with 4 lags. 

Value of test-statistic is: 0.0531 

Critical value for a significance level of: 
                10pct  5pct 2.5pct  1pct
critical values 0.347 0.463  0.574 0.739############################################### 
# Augmented Dickey-Fuller Test Unit Root Test # 
############################################### 

Test regression none 

Call:
lm(formula = z.diff ~ z.lag.1 - 1 + z.diff.lag)

Residuals:
    Min      1Q  Median      3Q     Max 
-176.15  -43.66    3.80   68.21  355.75 

Coefficients:
           Estimate Std. Error t value Pr(>|t|)    
z.lag.1    -0.15081    0.05230  -2.883 0.004555 ** 
z.diff.lag -0.28241    0.08111  -3.482 0.000664 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 96.77 on 140 degrees of freedom
Multiple R-squared:  0.1755,	Adjusted R-squared:  0.1637 
F-statistic:  14.9 on 2 and 140 DF,  p-value: 1.36e-06

Value of test-statistic is: -2.8835 

Critical values for test statistics: 
      1pct  5pct 10pct
tau1 -2.58 -1.95 -1.62

使用 95%作为置信水平,两个测试的零假设(ho)定义为:

  • **KPSS 检验:**数据是平稳的
  • **D-F 检验:**数据是非平稳的

因此,对于 KPSS 测试,我们希望 p 值> 0.5,我们可以接受零假设,对于 D-F 测试,我们希望 p 值< 0.05 to reject its null hypothesis. Based on the test which been done before, 我们可以很舒服地说,我们的训练数据是平稳的

型号分配

将使用 ARIMA 和 ETS 模型进行预测,这些模型之间的比较也将使用测试集的一些参数进行评估。

ARIMA 模式

建立 ARIMA 模型的第一步是创建平稳时间序列数据的自相关图。有时为了得到稳定的数据,我们需要做差分;对于我们的例子,我们已经有了一个固定的集合。因此,我们模型上的差异数(D,D)可以设置为零。

我们的数据集具有季节性,因此我们需要构建 ARIMA (p,D,q)(P,D,Q)m ,以获得(P,P,Q,Q)我们将看到自相关图(ACF/PACF)并从图中导出这些参数。

acf2(hujan_train)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 11。ACF/PACF 绘图训练装置

ACF 图用于获得 MA 参数(Q,Q),在滞后 2 处有显著的尖峰,正弦曲线指示年度季节性(m = 12)。PACF 图用于获得 AR 参数(P,P),AR 参数在滞后 1 时有显著的尖峰。

这个 ACF/PACF 图表明,合适的模型可能是 ARIMA(1,0,2)(1,0,2) 。为了确定这个模型,我们将根据我们的建议设置其他模型,用 1 修改 (AR)(MA) 组件。

  1. 模型-1 : ARIMA(1,0,2)(1,0,2)
  2. 模型二: ARIMA(2,0,2)(2,0,2)
  3. 模型 3 : ARIMA(1,0,1)(1,0,1)
  4. 模型 4 : ARIMA(2,0,1)(2,0,1)
  5. 模型-5 : ARIMA(0,0,2)(0,0,2)
  6. 模型 6 : auto.arima()

我们还将设置 auto.arima() 作为我们的模型的另一个比较,并期望找到更适合我们的时间序列。

fit1 <- Arima(hujan_train, order = c(1,0,2), seasonal = c(1,0,2))
fit2 <- Arima(hujan_train, order = c(2,0,2), seasonal = c(2,0,2))
fit3 <- Arima(hujan_train, order = c(1,0,1), seasonal = c(1,0,1))
fit4 <- Arima(hujan_train, order = c(2,0,1), seasonal = c(2,0,1))
fit5 <- Arima(hujan_train, order = c(0,0,2), seasonal = c(0,0,2))
fit6 <- auto.arima(hujan_train, stepwise = FALSE, 
        approximation = FALSE)

为了在所有 ARIMA 模型中选择最适合我们数据的模型,我们将比较这些模型的 AICc 值。具有最小 AICc 的模型通常是预测的最佳模型。

data.frame('Model-1' = fit1$aicc, 'Model-2' = fit2$aicc, 
     'Model-3' = fit3$aicc,
     'Model-4' = fit4$aicc, 
     'Model-5' =  fit5$aicc,'Auto.Arima'= fit6$aicc,
      row.names =   "AICc Value")

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 12。ARIMA 模型的 AICc 值

模型 1 的 AICc 值在其他模型中是最低的,这就是为什么我们选择这个模型作为我们预测的 ARIMA 模型。但是,我们还需要对该模型进行残差检查,以确保该模型适用于我们的时间序列预测。

checkresiduals(fit1) Ljung-Box test

data:  Residuals from ARIMA(1,0,2)(1,0,2)[12] with non-zero mean
Q* = 10.187, df = 17, p-value = 0.8956

Model df: 7\.   Total lags used: 24

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 13。ARIMA 模型的残差检验

基于模型残差的 Ljung-Box 检验和 ACF 图,我们可以得出结论,该模型适用于预测,因为其残差表现出白噪声行为,并且彼此不相关。

ETS 模型

我们将构建 ETS 模型,并将其与我们选择的 ARIMA 模型进行比较,以查看哪个模型更适合我们的测试集。

*#ETS Model*
fit_ets <- ets(hujan_train, damped =TRUE)

与 ARIMA 模型相似,我们也需要检查其残差行为,以确保该模型能够很好地进行预测。

checkresiduals(fit_ets)Ljung-Box test

data:  Residuals from ETS(A,Ad,A)
Q* = 40.433, df = 7, p-value = 1.04e-06

Model df: 17\.   Total lags used: 24

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 14。ETS 模型的残差检验

在残差检查之后,ACF 图显示 ETS 模型残差在几个滞后上相互之间的相关性很小,但是大多数残差仍然在限制范围内,我们将继续使用该模型作为与我们选择的 ARIMA 模型的比较。

测试集上的 ARIMA vs ETS 模型

可以使用测试集来检查我们的时间序列数据的更好模型。我们将使用 ARIMA 和 ETS 模型进行预测,并根据测试集(2018 年 1 月至 12 月)查看它们的准确性。

第一步,我们需要在 ARIMA 模型、ETS 模型和我们 2018 年的实际数据之间绘制可视化。但是由于 ggfortify 包不能很好地与其他包相适应,我们应该稍微修改一下代码来显示漂亮的可视化效果。

注意:如果没有加载 ggfortify 包,可以直接使用:autoplot(实际数据)+ autolayer(forecast_data),来做可视化。

#Modifying Data For ggplotmodel_1 <- forecast(fit1, h=12) 
model_ets <- forecast(fit_ets, h=12)

model_1 <- as.data.frame(model_1$mean)
model_ets <- as.data.frame(model_ets$mean)

colnames(model_1) <- "Curah_Hujan"
colnames(model_ets) <- "Curah_Hujan"

hujan_train_df <- as.data.frame(hujan_train)

model_1_plot <- rbind(hujan_train_df,model_1)
model_ets_plot <- rbind(hujan_train_df, model_ets)

model_1_plot <- model_1_plot %>% 
  mutate('Date' = seq(from = as.Date("2006-01-01", '%Y-%m-%d'), to = as.Date("2018-12-31",'%Y-%m-%d'),by = 'month'))

model_ets_plot <- model_ets_plot %>% 
  mutate('Date' = seq(from = as.Date("2006-01-01", '%Y-%m-%d'), to = as.Date("2018-12-31",'%Y-%m-%d'),by = 'month'))

hujan_ts_df <- as.data.frame(hujan_ts)

hujan_ts_df <- hujan_ts_df %>% 
  mutate('Date' = seq(from = as.Date("2006-01-01", '%Y-%m-%d'), to = as.Date("2018-12-31",'%Y-%m-%d'),by = 'month'))

hujan_train_df <- hujan_train_df %>% 
  mutate('Date' = seq(from = as.Date("2006-01-01", '%Y-%m-%d'), to = as.Date("2017-12-31",'%Y-%m-%d'),by = 'month'))

colors <- c("ARIMA Model Forecast 2018" = "blue", "ETS Model Forecast 2018" = "red", "Actual Data" = "black")

#Creating Plotggplot() + geom_line(model_1_plot,
   mapping = aes(x=Date, y=Curah_Hujan, 
   color= "ARIMA Model Forecast 2018"),lty = 2) +
  geom_line(model_ets_plot,
  mapping = aes(x=Date, y=Curah_Hujan, 
  color= "ETS Model Forecast 2018"),lty= 2) +
  geom_line(hujan_ts_df,mapping = aes(x=Date, y=Curah_Hujan, 
  color= "Actual Data"), lty = 1, show.legend = TRUE) +
  ylab("Rainfall (mm2)") + xlab("Datetime") + 
  scale_x_date(date_labels = '%b - %Y', breaks = '1 year', 
  minor_breaks = '2 month') +
  theme_bw() + ggtitle("Banten Rainfall 2006 - 2018") + 
  scale_color_manual(values=colors)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 15。实际数据与 ARIMA 和 ETS 预测

尽管 ARIMA 和 ETS 的模型并不完全符合实际数据的相同值,但可以肯定的是,他们都策划了一个非常相似的运动来反对它。

在 numbers 中,我们可以用实际数据计算这些模型之间的准确性,并决定哪一个模型最符合我们的数据:

#ARIMA Model Accuracy
accuracy(forecast(fit1, h=12), hujan_test)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 16。ARIMA 模型精度

#ETS Model Accuracy
accuracy(forecast(fit_ets, h=12), hujan_test)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 17。ETS 模型准确性

从准确性来看,ETS 模型在训练集和测试集上都优于 ARIMA 模型。

2019-2020 年降雨量预测

使用与使用我们的训练集创建的模型相同的参数,我们将预测 2019-2020 年的降雨量预测(h=24)。

预测和绘图:

*#Create Model*
ARIMA_Model <- Arima(hujan_ts, order = c(1,0,2), 
   seasonal = c(1,0,2))
ETS_Model <- ets(hujan_ts, damped = TRUE, model = "AAA")

*#ARIMA Model Forecast*
autoplot(forecast(ARIMA_Model, h=24)) + theme_bw() + 
  ylab("Rainfall (mm2)") + xlab("Datetime") + 
  scale_x_date(date_labels = '%b - %Y', 
  breaks = '1 year', minor_breaks = '2 month') +
  theme_bw() + ggtitle("Banten Rainfall Forecast 2019-2020 
  ARIMA Model")
*#ETS Model Forecast*
autoplot(forecast(ETS_Model, h=24)) + theme_bw() + 
  ylab("Rainfall (mm2)") + xlab("Datetime") + 
  scale_x_date(date_labels = '%b - %Y', breaks = '1 year', 
  minor_breaks = '2 month') +
  theme_bw() + ggtitle("Banten Rainfall Forecast 2019-2020 
  ETS Model")

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 18。ARIMA 模型预测 2019–2020

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 19。ETS 模型预测 2019–2020 年

使用这两个模型进行了预测,基于 2019 年和 2020 年 8 月降雨量最低值的绘图,它们共享相似的运动。

我们的预测对于想知道哪个月开始种植最好的农民是有用的,对于需要制定雨季防洪和旱季抗旱政策的政府也是有用的。最重要的是,这种预测仅基于历史趋势,更准确的预测必须结合使用气象数据和气候专家的一些专业知识。

[1] banten.bps.go.id 。于May,17th 2020访问

[2]Hyndman,R.J .,& Athanasopoulos,G. (2018) 预测:原理与实践,第二版,OTexts:澳洲墨尔本。OTexts.com/fpp2.Accessed 在May,17th 2020上。

兰博:排名度量黑盒优化

原文:https://towardsdatascience.com/rambo-ranking-metric-blackbox-optimization-36811a5f52dd?source=collection_archive---------36-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

[3]

我们的论文在 2020 年 CVPR 大会上做了一次关于应用黑盒微分理论(代号#blackboxbackprop)来优化基于排名的指标的口头报告。事实证明,只要做一些简单的改变,一切都是可能的…

在我们的最新论文【1】中,我们通过直接优化基于排名的指标来处理深度神经网络的训练。我们的方法基于[ 2 ]中介绍的黑盒反投影理论。在 blackbox-backprop 论文(最新更新见 Twitter 上的 #blackboxbackprop 和附带的 blogpost )中,我们展示了如何通过神经网络中的组合解算器计算“有用的”梯度,而不损害解算器本身的最优性。该理论使我们能够利用组合 解算器作为复杂模型中的即插即用模块,我们可以用标准反向传播算法对其进行训练。

为了寻求该理论的实际应用,我们求助于计算机视觉。具体来说,我们表明,将 blackbox-backprop 应用于计算机视觉基准测试,以优化检索和检测任务的召回率和平均精度,可以持续提高底层架构的性能。顺便说一下,这是 ML 中的一个常见主题,总是希望为您真正关心的东西进行优化。如果 recall@K 是正确的性能度量,那么让端到端架构优化它是有意义的,而不是某种近似。召回率(更具体地说,召回率@K)和平均精度都是基于输入排序的度量,这实质上需要对它们的分数进行排序操作。在这方面,多种因素构成了挑战。首先,使用这些度量作为损失函数会导致不可分解的损失(即,我们不能基于输入的子集可靠地估计损失,但是我们需要整个输入集)。此外,用于计算指标的排名操作是不可微的。

尽管已经提出了许多竞争的方法,但是由于不同的原因,它们没有被从业者接受。它们在计算上过于昂贵,或者缺乏易于使用的实际实现。利用 blackbox-backprop 理论,我们将排序操作直接应用于输出的分数,这导致了低计算复杂度 O(n log n)(使用 torch.argsort 进行一般排序的复杂度)。我们需要回答的问题如下:

  1. 如何将排名问题投射到黑盒差异化框架中?
  2. 如何处理损失的不可分解性?
  3. 如何防止基于等级的损失崩溃?

将排名纳入黑盒区分框架

为了将排名转换到[2]中提出的框架中,我们需要在点积上进行 argmin 运算。我们首先定义分数的向量, yyrk(y) 的排序是在所有可能排列的集合上对向量 y 和排列 **π,**之间的点积进行 argmin 运算的结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

前一个命题的证明很简单,并且基于众所周知的置换不等式,该不等式表示给定一个递减序列(向量 y ),对于任意整数 n:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

直观地说,这意味着最大的分数被赋予了最小的权重,这发生在排列是排序排列的情况下。通过这个简单的改变,我们能够将 blackbox 框架应用于排名问题,这意味着我们可以简单地使用快速排序算法的有效实现(例如 PyTorch 中的 torch.argsort)来计算排名,并基于 blackbox-backprop 理论通过它进行区分**。**下图显示了应用黑盒反投影理论所产生的优化前景的示例:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

得分保证金,以防止损失崩溃

基于等级的损失很难处理平局。为了说明它们的不稳定性,请考虑我们在整个数据集上得分相同的情况。我们可以在这种平局的小邻域中获得所有可能的排名,因为分数的最小变化完全改变了排名。这意味着应用基于等级的损失是非常不稳定的。我们通过引入裕量α 来缓解该问题,该裕量α【】在负标记分数上引起正偏移,在正标记分数上引起负偏移:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为更好的评估评分记忆

理想情况下,我们将有一个数据集范围的损失进行优化,因为基于排名的损失的不可分解性问题。因为这在计算上是难以处理的(例如,因为它受到 GPU 内存的限制),所以我们希望使用迷你批处理来训练我们的模型。我们通过用一定数量的先前批次的分数扩展当前批次的分数来考虑这一点,这减少了损失估计的偏差。

该算法

采用上述技术产生了一种方法,我们称之为排名度量黑盒优化(RaMBO) 。同样,额外的计算开销仅由排序操作 O(n log n) 的复杂性引入,当高效实现时,其速度极快。这使我们领先于大多数方法。该算法总结如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们评估了我们的方法在对象检测(Pascal VOC)和几个图像检索基准(Cu B- 200–2011,店内服装,斯坦福在线产品)上的性能。在每个实验中,我们采用性能良好的架构,并用 RaMBO 对其进行修改。在这些基准测试中,该方法达到或超过了最先进的结果。

然而,我们应该承认,度量学习基线是一团乱麻,这是不同方向的大量快速研究的结果(改进网络架构、更好的目标函数等等)。这导致不可复制的结果、错误的结论和不公平的比较,对这些困难的分析可以在这里找到。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

斯坦福产品检索数据集。

相关推文

参考

[1]rol nek,Michal 等人使用黑盒区分优化基于等级的指标,CVPR,2020 年

[2] Vlastelica,Marin 等人黑盒组合
解算器的微分
,ICLR 2020

[3]图片取自 Pixabay

感谢

这是来自德国图宾根马普智能系统研究所的自主学习小组、图宾根大学和意大利费伦泽大学的联合研究成果。

随机森林和决策树

原文:https://towardsdatascience.com/random-forest-and-decision-trees-d8f7cd06803b?source=collection_archive---------44-----------------------

你已经听说过用于预测疾病、识别图形和面孔,甚至我们的行为的算法。但是你知道这些算法和它们是如何工作的吗?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

@ugodlyUnsplash 上的照片

广泛用于解决数据科学问题的最流行(也是最强大)的算法之一是一种叫做随机森林的算法。不用说幕后有很多数学和计算机编程,但是让我们把它变得简单,这样即使你以前从未听说过它,你也能理解这个主题。

随机森林源自另一种被称为决策树的算法的思想,它基本上使用类似于树及其分支的结构来做出导致最终预测的决策。

但是这实际上是如何工作的呢?你需要知道的第一件事是没有魔法。训练算法时,必须有可用的历史数据。算法要学习的就是这些数据。假设我们想要创建一个模型,该模型能够识别给定了一些特定特征的对象,例如形状颜色、*高度、*等等。

为了简化,让我们假设这些对象具体是三种不同的水果:香蕉、橙子和柠檬。决策树算法如何面对这个任务?

为了理解这个过程,让我们想象一下,我们的任务是教一个两岁的孩子区分三种相同的水果。第一个好方法是告诉孩子注意水果的形状:橙子和柠檬是圆形的,而香蕉是细长形的,这与其他两种水果明显不同。

然而,乍看之下,橙子和柠檬似乎更相似,我们必须考虑其他一些特征来完成我们的任务,教会孩子准确地识别这三种水果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

(上图)照片由肖恩·迈因杰斯Unsplash | ( 左下)照片由 Unsplash 伊莲娜·科切娃|(右下)照片由布雷特·乔丹Unsplash

区分柠檬和橙子的一个很好的参数可能是它们的颜色。假设柠檬通常是绿色的,而橙子通常是……橙色的,这将是一个很好的第二个参数,几乎总能引导我们聪明的孩子正确地识别水果。如果我们的橙子还没熟,还是绿色的,也许我们可以比较一下大小,如果它大于某个标准,我们就说它是橙子,否则,我们就把它归类为柠檬。

这可能看起来很傻,但这正是决策树算法的过程。在描述我们水果的所有可用特征中,它将深入数据,选择最重要的特征,最好地将一个类从其他类中分离出来,并对其余的特征遵循相同的逻辑,直到它找到一种方法来更好地确定它是哪种水果。

这就是决策树算法也可用作特征选择工具的原因,在本例中,它将识别对我们的识别更重要的特征,并排除对我们的主要目标贡献很小或没有贡献的特征。

例如,如果我们有谁购买了我们例子中的每一种水果的信息,那么对我们谈论的水果进行分类可能是不相关的信息,而这些树的结构在识别它方面非常好。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

如果我们能把不同的树放在一起,从几个不同的角度观察这些水果,以更好地了解它们如何区分彼此,会怎么样?这正是随机森林算法的思想。

它创建了一系列决策树,每一个都在寻找相同水果示例的略微不同的组成,并从不同的角度来看待它们:例如,一个决策树使用颜色作为第一个参数来构建,而另一个树使用高度

只有当我们保证一棵树不等于另一棵树时,这才有意义,否则我们就不能从不同的“观点”中获益,并且创建一组树所需的计算能力也是不合理的。为了保证一组不同的树,一些参数是可以控制的(考虑到我们正在使用像Scikit-Learn这样的库中可用的框架,而不是从头开始构建它)。

首先,我们的算法将为每棵树选择一组不同的例子。因此,假设我们的原始数据有 1000 个可用的水果示例:该算法将为每棵树随机选择 1000 个示例,这意味着一些示例可能会在同一个集合中被选择多次,而其他示例可能会丢失。

除此之外,我们还可以控制参数,比如max_features的数量。这个参数将设置一个数字,比如说 2,然后算法将为每棵树选择两个随机特征,并决定其中哪个最重要,以区分不同的果实。

这些随机因素实际上保证了所有的决策树都是不同的。另一个重要的参数是n_estimators,它允许用户选择要创建的决策树的数量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

直观地说,与单个决策结构相比,一系列协同工作的决策树会表现得更好,这说明了使用随机森林算法的强大之处。一旦我们建立了一个森林,我们如何让不同的决策树一起工作?

如果我们希望我们的模型预测哪种水果,给定一组新的特征,每棵树都将进行预测,并且该预测将与每类的一个概率相关联。例如,一棵树可以得出结论,给定的特征 80%可能是香蕉,12%可能是橙子,8%可能是柠檬,而其他树可能具有不同的关联概率。

最后,将对这些概率计算一个加权投票**,得出最终结论。这将是一个分类任务的基本过程,就像我们的水果示例一样。**

当我们想要预测一个连续的数字或度量时,如房子的价格或在某个特定时期将要出售的产品的数量,随机森林也可以用在回归任务中。在这种情况下,程序基本上是相同的,但是最终的预测不是像在分类任务中那样通过加权投票给出的,而是通过计算个体树预测的平均值来给出的。****

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

()照片由皮奥特·西霍斯Unsplash | ( )照片由路易·汉瑟@肖特·路易Unsplash

只是不要忘记,如果你向我们的水果模型分类器展示一个遥控器,它肯定会认为这是一个香蕉。这些模型准确地学习我们告诉它们学习的东西,它们预测的质量取决于我们给它们的例子的质量。

在本文中,我们更好地理解了最流行的机器学习算法之一是如何在幕后工作的。既然算法与机器控制一切的电影场景混合在一起的抽象概念已经离开了你的头脑,试着写下你的第一行代码怎么样?

我知道大多数关于数据科学的文章都是用英语写的,所以我创建了一个名为 Tech4All-br 的项目,目的是用葡萄牙语创建内容。如果你想阅读葡萄牙语的材料,请访问此链接

预测用随机森林

原文:https://towardsdatascience.com/random-forest-ca80e56224c1?source=collection_archive---------3-----------------------

利用随机森林预测汽车价格

这是一个在多个决策树之间操作的过程,通过选择其中的大多数作为最佳值来获得最佳结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

有输出的多重决策树。(图片鸣谢:easydrawingguides.com,作者编辑)

请将上面的图像视为具有不同结果的多个决策树的代表。在 4 个决策树中,3 个的输出与 1 相同,而一个决策树的输出为 0。应用上面提到的定义,随机森林操作四个决策树,并且为了获得最佳结果,它选择大多数(即 3 个)决策树提供的结果。因此,在这种情况下,最佳结果将是 1。

对于决策树,您可以通过点击链接【https://towardsdatascience.com/decision-tree-ba64f977f7c3 访问更早的故事

用途

  1. 遥感:随机森林(RF)通常用于遥感,以预测数据的准确性/分类。
  2. 物体检测:射频在更短的时间内对物体检测起主要作用。

为什么?

  1. 因为我们在多个决策树上工作,所以过度拟合的可能性较小。
  2. 更高的准确性:因为它运行在更大的数据集上,所以准确性更高。
  3. 估计缺失数据:因为它运行在一个更大的数据集上,所以您也可以估计缺失值。

随机森林是如何工作的?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

多重决策树(图片由作者提供)

在上图中,我们使用 3 个不同的决策树进行了相同的分类。树 1 使用颜色对数据进行分类,树 2 使用花瓣大小和颜色,树 3 使用花瓣寿命和颜色。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

缺少颜色数据的花(图片来源:Vectorstock.com)

现在模特训练有素。考虑到我们有一朵缺少颜色数据的花。树 1 将无法识别此数据,因为它用颜色对所有东西进行了分类,所以它会将其归入郁金香花类别。

树 2:它作用于颜色和花瓣大小。根据花瓣的大小,它会变成假的,即不小,然后是颜色,即不是黄色。这是对它是一朵玫瑰的预测。

树 3:它对寿命和颜色有效。第一个分类将是一个错误的类别,随后是非黄色。正如预测的那样,这是一朵玫瑰。

让我们尝试使用 Python 随机森林。首先,我们将导入所需的 python 库。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

我们正在进口熊猫、NumPy 和 matplotlib。接下来,我们将消费数据并查看它。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

df.head()将给出每一列的前 5 行的详细信息。我们可以使用 df.tail()获得最后 5 行,使用类似的 df.head(10)获得前 10 行。

数据是关于汽车的,我们需要用上面的数据来预测汽车的价格

我们将使用随机森林来获得汽车的价格。

df.dtypessymboling              int64
normalized-losses      int64
make                  object
aspiration            object
num-of-doors          object
body-style            object
drive-wheels          object
engine-location       object
wheel-base           float64
length               float64
width                float64
height               float64
curb-weight            int64
engine-type           object
num-of-cylinders      object
engine-size            int64
fuel-system           object
bore                 float64
stroke               float64
compression-ratio    float64
horsepower           float64
peak-rpm             float64
city-mpg               int64
highway-mpg            int64
price                float64
city-L/100km         float64
horsepower-binned     object
diesel                 int64
gas                    int64
dtype: object

dtypes 给出列的数据类型。

df.describe()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

在上面的数据框中,所有的列都不是数字。因此,我们将只考虑那些数值为数字的列,并使所有的数字都浮动。

df.dtypes
for x **in** df:
    if df[x].dtypes == "int64":
        df[x] = df[x].astype(float)
        print (df[x].dtypes)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

准备数据与分类任务一样,在本节中,我们将把数据划分为属性和标签,从而划分为训练集和测试集。我们将创建 2 个数据集,一个用于价格,另一个(df-price)。由于我们的数据框包含大量对象格式的数据,因此在本次分析中,我们将删除所有对象类型的列,对于所有 NaN 值,我们将删除该行。

df = df.select_dtypes(exclude=['object'])
df=df.fillna(df.mean())
X = df.drop('price',axis=1)
y = df['price']

这里,X 变量包含数据集中的所有列,除了标签“价格”列。y 变量包含“价格”列中的值,这意味着 X 变量包含属性集,y 变量包含相应的标签。

from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

为了训练树,我们将使用 Random Forest 类并用 fit 方法调用它。我们将有一个随机的 1000 棵决策树的森林。

from sklearn.ensemble import RandomForestRegressor
regressor = RandomForestRegressor(n_estimators = 1000, random_state = 42)
regressor.fit(X_train, y_train)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

我们来预测一下价格。

y_pred = regressor.predict(X_test)

让我们检查实际值和预测值之间的差异。

df=pd.DataFrame({'Actual':y_test, 'Predicted':y_pred})
df

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

from sklearn import metrics
print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, y_pred))
print('Mean Squared Error:', metrics.mean_squared_error(y_test, y_pred))
print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, y_pred)))Mean Absolute Error: 1993.2901175839186
Mean Squared Error: 9668487.223350348
Root Mean Squared Error: 3109.4191134921566

我们算法的平均绝对误差是 1993.2901175839186,小于“价格”列中所有值平均值的 20%。这意味着我们的算法做出了预测,但还需要很多改进。

让我们检查一下我们预测的准确性。

*# Calculate the absolute errors*
errors = abs(y_pred - y_test)
*# Print out the mean absolute error (mae)*
print('Mean Absolute Error:', round(np.mean(errors), 2), 'degrees.')

*# Calculate mean absolute percentage error (MAPE)*
mape = 100 * (errors / y_test)
*# Calculate and display accuracy*
accuracy = 100 - np.mean(mape)
print('Accuracy:', round(accuracy, 2), '%.')Mean Absolute Error: 1993.29 degrees.
Accuracy: 87.87 %.

87.8%的准确率并不是一个很高的分数,还有很大的提升空间。

让我们画出实际值和预测值之间的差异。

import seaborn as sns
plt.figure(figsize=(5, 7))

ax = sns.distplot(y, hist=False, color="r", label="Actual Value")
sns.distplot(y_pred, hist=False, color="b", label="Fitted Values" , ax=ax)

plt.title('Actual vs Fitted Values for Price')

plt.show()
plt.close()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实际与预测(图片由作者提供)

以上是实际值和预测值之间的曲线图。让我们想象一下随机的森林树。

import pydot
*# Pull out one tree from the forest*
Tree = regressor.estimators_[5]
*# Export the image to a dot file*
from sklearn import tree
plt.figure(figsize=(25,15))
tree.plot_tree(Tree,filled=True, 
              rounded=True, 
              fontsize=14);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

随机森林树(作者图片)

可以在https://www.kaggle.com/adityakumar529/random-forest处检查代码。

https://github . com/adityakumar 529/Coursera _ Capstone/blob/master/Random _ forest . ipynb

兰登森林解释道

原文:https://towardsdatascience.com/random-forest-explained-7eae084f3ebe?source=collection_archive---------3-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自 Unsplash

[Random Forest 简单解释:训练、分类和回归的简单介绍]

在本帖中,我们将解释什么是随机森林模型,看看它的优点,它是如何构建的,以及它能用来做什么。

我们将通过随机森林 的理论和直觉,看到理解万物如何运作所必需的最少的数学量,而不深入最复杂的细节。

最后,在我们开始之前,这里有一些额外的资源可以让你的机器学习生涯突飞猛进:

*Awesome Machine Learning Resources:**- For* ***learning resources*** *go to* [***How to Learn Machine Learning***](https://howtolearnmachinelearning.com/books/machine-learning-books/)*! 
- For* ***professional******resources*** *(jobs, events, skill tests) go to* [***AIgents.co — A career community for Data Scientists & Machine Learning Engineers***](https://aigents.co/)***.***

[## 订阅我的专属列表!

订阅我的专属列表!并获得所有你喜爱的新鲜文章<3! By signing up, you will create a Medium…

z-ai.medium.com](https://z-ai.medium.com/subscribe)

1. Introduction

In the Machine Learning world, Random Forest models are a kind of 参数模型既可用于回归又可用于分类。它们是最流行的集成方法之一,属于 Bagging 方法的特定类别。

en 集合方法包括使用多个学习者来单独提高其中任何一个人的表现。这些方法可以被描述为使用一群弱学习者 ( 那些平均成绩仅比随机模型稍好的人)在一起的技术,以便创建一个更强的、聚合的

在我们的例子中,随机森林是许多独立决策树的集合。如果您不熟悉决策树,您可以在这里了解它们:

[## 决策树解释

学习机器学习决策树的所有知识

towardsdatascience.com](/decision-trees-explained-3ec41632ceb6)

决策树的一个主要缺点是它们很容易过度拟合:它们在训练数据上做得很好,但在对看不见的样本进行预测时却不够灵活。虽然有一些解决办法,比如修剪树木,但这降低了它们的预测能力。一般来说,它们是具有中等偏差和高方差的模型,但是它们简单且易于解释。

如果你对偏差和方差的区别不是很有信心,看看下面的帖子:

[## 快速偏差/方差权衡

偏差/方差的权衡很容易解释

towardsdatascience.com](/quick-bias-variance-trade-off-d4895b126b08)

随机森林模型结合了决策树 简单性和集合模型的灵活性和强大功能。在树木的森林中,我们忘记了特定树木的高方差,更少关心每一个单独的元素,所以我们可以种植更好、更大的树,比修剪过的树具有更强的预测能力。

尽管随机森林模型提供的解释能力不如单棵树,但它们的性能要好得多,而且我们不必像处理单棵树那样担心如何完美地调整森林的参数。

好吧,我明白了,随机森林是一组独立的树。**但为什么取这个名字随机呢?随机性在哪里?**让我们通过学习如何构建随机森林模型来找出答案。

2.训练和建立随机森林

构建随机森林有 3 个主要阶段。我们将分解它们,并阐明每个概念和步骤。我们走吧!

2.1 为每棵树创建引导数据集

当我们构建一个单独的决策树时,我们使用一个训练数据集和所有的观察。这意味着,如果我们不小心,树可以很好地适应这种训练数据,并对新的、看不见的观察结果进行糟糕的概括。为了解决这个问题,我们阻止树变得非常大,通常是以降低其性能为代价。

为了建立一个随机森林,我们必须训练 N 棵决策树。我们是否一直使用相同的数据来训练这些树?我们使用整个数据集吗?没有。

这是第一个随机特征出现的地方。为了训练每一棵树,我们从整个数据集中随机抽取一个样本,如下图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

构建单独的数据集。图片作者。来自平面图标的图标。

从这个图可以推断出各种事情。首先,用于训练每棵树的数据的大小不一定是整个数据集的大小。此外,一个数据点可以在用于训练单个树的数据中出现多次(就像在树 n 2 中一样)。

这称为替换抽样或引导抽样:每个数据点都是从整个数据集中随机选取的,并且一个数据点可以被多次选取。

通过使用不同的数据样本来训练每棵树,我们减少了他们的一个主要问题:他们非常喜欢他们的训练数据。如果我们训练一个有很多树的森林,每棵树都用不同的数据训练过,我们就解决了这个问题。他们都很喜欢自己的训练数据,但森林不喜欢任何具体的数据点。这允许我们种植更大的单棵树,因为我们不再那么关心单棵树的过度生长。

如果我们使用整个数据集的很小一部分来训练每棵树,我们会增加森林的随机性(减少过度拟合),但通常是以较低的性能为代价的。

在实践中,默认情况下,大多数随机森林实现(如 Scikit-Learn 中的实现)选择用于每棵树的训练数据样本,其大小与原始数据集相同(但是它不是相同的数据集,请记住,我们选择的是随机样本)。

这通常提供了良好的偏差-方差折衷。

2.2 使用这些随机数据集训练森林树,并通过特征选择增加一点随机性

如果您记得不错,为了构建一个单独的决策树,我们在每个节点评估了某个指标(如基尼指数或信息增益),并选择数据的特征或变量放入最小化/最大化该指标的节点。

当只训练一棵树的时候,这种方法还不错,但是现在我们想要一整片树林!我们如何做到这一点?如果单个模型(在我们的例子中是单棵树)不相关,集合模型(如随机森林)效果最好。在随机森林中,这是通过在每个节点随机选择某些特征进行评估来实现的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

构建树 n 1 的随机特征选择。图片作者。来自平板图标的图标。

正如您在前面的图像中看到的,在每个节点上,我们只评估所有初始特征的子集。对于根节点,我们考虑 E、A 和 F(并且 F 获胜)。在节点 1 中,我们考虑 C、G 和 D(并且 G 获胜)。最后,在节点 2 中,我们只考虑 A、B 和 G(A 获胜)。我们将继续这样做,直到我们建立了整个树。

通过这样做,我们避免在每个树中包括具有非常高预测能力的特征,同时创建许多不相关的树。这是第二次随机扫描。在构建每棵树时,我们不仅使用随机数据,还使用随机特征。树的多样性越大越好:我们减少了方差,得到了一个性能更好的模型。

2.3 对 N 棵树重复上述步骤,创建我们的神奇森林。

太棒了,我们已经学会了如何建立一个单独的决策树。现在,我们将对 N 棵树重复这一过程,在每棵树的每个节点上随机选择哪些变量进入竞争,被选为分割的特征。

总之,整个过程如下:

  1. 为每棵树创建一个引导数据集。
  2. 使用相应的数据集创建决策树,但在每个节点使用变量或特征的随机子样本进行分割。
  3. 重复这三个步骤数百次,建立一个拥有各种各样树木的大森林。这种多样性使得随机森林比单一决策树好得多。

一旦我们建立了我们的森林,我们就准备用它来做令人敬畏的预测。让我们看看如何!

3.使用随机森林进行预测

用随机森林做预测非常容易。我们只需获得我们的每一棵树,通过它们传递我们想要进行预测的观察值,从每棵树获得一个预测值(总计 N 个预测值),然后获得一个整体的、聚合的预测值。

对数据进行自举,然后使用一个聚合来进行预测,这被称为 Bagging,如何进行预测取决于我们所面临的问题的类型。

对于回归问题,集合决策是每个决策树决策的平均值。对于分类问题,最终预测是森林所做的最频繁的预测。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用随机森林的预测。图片作者。来自平面图标的图标。

上图展示了这个非常简单的过程。对于分类问题我们想预测某个病人是生病了还是健康了。为此,我们通过随机森林中的每棵树传递他的医疗记录和其他信息,并获得 N 个预测(在我们的例子中是 400 个)。在我们的例子中,355 棵树表示病人健康,45 棵树表示病人生病,因此森林判定病人健康。

对于回归问题我们想预测某个房子的价格。我们通过 N 棵树传递这个新房子的特征,从每棵树上得到一个数字预测。然后,我们计算这些预测的平均值,得到最终值 322.750 美元。

**简单对吧?**我们对每一棵树都进行预测,然后使用平均值或众数(最频繁值)汇总这些预测。

[## 订阅我的专属列表!

订阅我的专属列表!并获得所有你喜欢的新鲜文章<3! By signing up, you will create a Medium…

z-ai.medium.com](https://z-ai.medium.com/subscribe)

4. Conclusion and other resources

In this post we have seen what a Random Forest is, how it overcomes the main issues of Decision Trees, how they are trained, and used to make predictions. They are very flexible and powerful Machine Learning models that are highly used in commercial and industrial applications, along with Boosting 模型和人工神经网络。

在以后的文章中,我们将探索随机森林的技巧和诀窍,以及它们如何用于特征选择。此外,如果你想知道它们是如何建造的,可以看看 StatQuest 的视频,非常棒:

就是它!一如既往,我希望你 喜欢这个职位。

有关机器学习和数据科学的更多资源,请查看以下资源库: 如何学习机器学习 !有关职业资源(工作、事件、技能测试),请访问AIgents.co——数据科学家职业社区&机器学习工程师

非常感谢您的阅读,祝您愉快!

涡轮风扇发动机预测维修的随机森林

原文:https://towardsdatascience.com/random-forest-for-predictive-maintenance-of-turbofan-engines-5260597e7e8f?source=collection_archive---------13-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

戴维·科瓦连科在 Unsplash 上拍摄的照片

探索美国宇航局的涡轮风扇数据集

FD003 的探索性数据分析和超参数调整

<免责声明:我的目的是展示模型开发过程中不同方法和选择的效果。这些影响经常使用测试集来显示,这被认为是(非常)不好的做法,但有助于教育目的。 >

欢迎来到“探索 NASA 的涡轮风扇数据集”系列的另一部分。在上一篇文章中,我们看了生存分析,并总结了我们对数据集 FD001 的分析。虽然最终的 RMSE 没有我们之前创建的模型好,但这是一个非常有趣的技术,因为它可以处理经过审查的数据。今天,我们将深入第三个数据集(FD003),其特征是发动机有两种可能的故障模式。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据集元数据

我选择了交换在 FD002 和 FD003 上发布的顺序,因为在我看来,这个顺序会使复杂性逐渐增加。起初,我已经开始在 FD002 上安装随机森林(RF ),但结果并不理想。FD002 看起来确实需要更复杂的预处理和建模来处理各种操作条件。然而,在 FD003 上,我认为 RF 将表现得相当好,因为它自然能够区分故障模式。让我们一起来了解一下吧!

探索性数据分析

我们可以在 FD001 上重复 EDA 中的许多步骤。首先,让我们读入数据。

# returns
# (24720, 26)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

train.head()的结果

看起来不错,接下来我们将考察一些描述性统计。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的数据集包括 24.7k 行和 26 列,第一个引擎在 145 个时间周期后失败,而最后一个引擎在 525 个时间周期后失败。接下来,我们将检查传感器描述符。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

根据(几乎)为零的标准偏差来判断,传感器 1、5、16、18 和 19 没有保存有价值的信息。

在我们开始绘制数据之前,让我们计算一下列车组的剩余使用寿命(RUL)。

RUL 在击穿时可以认为是 0,我们天真地假设 RUL 是一个线性函数。意味着在击穿前的 10 个周期时 RUL 是 10,在击穿前的 50 个周期时是 50,等等。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

既然已经添加了,我们将检查分布情况,以便获得比检查描述性表更好的理解。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

RUL 的分布。

RUL 很明显是右斜的,左边根本没有尾巴。偏斜分布会对模型性能产生很大影响。EDA 完成后,我们会将计算的 RUL 限制在 125 的上限,用于模型训练,因为它更好地代表了我们对训练集[1,2]的 RUL 的了解。

标绘信号

接下来,我们将检查传感器值,看看我们是否可以直观地区分不同的故障模式,并确定在模型开发中要放弃的传感器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

S1 对 RUL 的曲线图

传感器 1、5、16、18 和 19 看起来都很相似。我们可以再次确认他们的排除,因为他们似乎没有任何信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

S2 对 RUL 的曲线图

传感器 2、3、4、8、11、13 和 17 显示出类似的上升趋势,应包括在模型开发中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

S6 对 RUL 的图表

传感器 6 是一个有点奇怪的传感器,但在怀疑中受益。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

七国集团对 RUL 的图表

传感器 7、12、15、20 和 21 清楚地显示了两种故障模式,并且应该明确地包括在模型中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

S9 对 RUL 的图表

传感器 9 和 14 显示了类似的趋势,但不能很好地区分故障模式。测试它们对模型性能的影响必须指出它们是否应该包含在内。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

s_10 vs RUL 的图表

最后,传感器 10,也是一个奇怪的传感器,因为它似乎有上升趋势,所以被认为是有益的。EDA 完成后,是时候创建基线模型了。

基线模型

就像我们对 FD001 所做的一样,我喜欢从一个最简单的模型开始,一个没有额外预处理的回归模型。

# returns
# train set RMSE:19.33013490506061, R2:0.7736110804777467
# test set RMSE:22.31934448440365, R2:0.7092939799790338

基线模型的测试 RMSE 是 22.319,这将是我们要打破的分数。接下来是我们对随机森林回归器的第一次尝试。

随机森林

与单一决策树相比,随机森林(RF)的一个关键优势是它们能够生成不同的树。让我解释一下。创建单个决策树时,该算法会尝试基于单个要素(所有可用要素中的一个)创建一个决策节点,该要素可以最好地分割数据集。对于下一个节点,它将重新检查所有可用的特征,以创建以下最佳分割。如果你在这些条件下第二次拟合决策树,它会生成完全相同的树。然而,当创建分割时,RF 仅考虑所有特征的子集。这迫使算法生成不同的树,因为创建最佳分割的特征可能不可用。可能会产生比常规决策树的单个最佳分割更好的分割组合

虽然上面的描述是我学习 RF 工作原理的方式,但检查您使用的工具是否也以同样的方式实现它也很重要。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

scikit 的部分 RF 文档-了解 v0.22.2 [3]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

scikit 的部分 RF 文档-了解 v0.22.2 [3]

检查 sklearns RandomForestRegressor 的文档显示,它默认考虑所有特性,本质上是一遍又一遍地创建同一个树。因此,我们将 max_features 指定为可用功能的平方根。此外,我们设置了 random_state,因此树总是以相同的方式生成。否则,随机树的生成将影响模型结果,使得很难判断一个模型是否因为我们改变了一些特征或由于随机性而表现得更好。

# returns
# train set RMSE:5.9199939580022525, R2:0.9787661901585051
# test set RMSE:21.05308450085165, R2:0.7413439613827657

虽然 RF 已经比我们的基线模型表现得好一点。根据训练集和测试集之间的 RMSE 和方差的差异来判断,该模型似乎非常适合。让我们检查一些树的特征来验证我的怀疑。

# returns
# 33
# array([15616, 11694,  7793, ...,     1,     1,     4], dtype=int64)

这棵树的最长路径由 33 个节点组成,是我们放入的特征数量的两倍多。当查看 n_nodes_samples 时,我们可以看到树的最后几片叶子每个都包含很少的样本。该树变得如此具体,它创建了分裂标准,直到大多数样本可以被区分,这对于泛化来说是非常糟糕的(因此在训练集上过度拟合)。我们可以通过设置 RF 的 max_depth 和 min_samples_leaf 来尝试解决这个问题。

# returns
# train set RMSE:15.706704198492831, R2:0.8505294865338602
# test set RMSE:20.994958823842456, R2:0.7427702419664686

尝试这些设置可以减少过度拟合,同时获得轻微的性能提升。在没有 s_6 和 s_10 的情况下拟合相同的模型表现更差,因此保留了这些传感器。我们将把这个模型作为进一步改进的基础。

可视化射频

我们可以将我们的树中的一棵形象化,试图找出改进点【4,5】。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

决策树的一部分,请注意,此可视化仅代表 RF 的单个树

似乎有一些节点会导致非常不准确的预测(mse > 500)。还记得传感器 9 和 14 吗,它们不能很好地区分故障模式?它们在树的这一部分显示为分裂标准,但结果仍然黯淡无光。让我们尝试在没有这两个传感器的情况下安装一个 RF,并检查其性能。

重新运行粗略调整的 RF 返回:

# train set RMSE:17.598192835079978, R2:0.8123616776758054
# test set RMSE:22.186214762363356, R2:0.7127516253047333

不幸的是,性能变得相当糟糕,所以我们将保留传感器 9 和 14。

浅谈特征工程

对于这种特定的数据集-算法组合,没有太多的特征工程的可能性。随机森林天生擅长学习复杂的数据模式,并且对缩放或特征变换不变[6]。因为所有的特征都已经是数字了,所以我们没有更多的事情可做。

我试着用简单的移动平均数来平滑数据。理论上,这将使算法更容易正确地应用其分裂,并使其更容易区分故障,因为噪声已从信号中去除。但遗憾的是,性能并没有提升。平滑传感器信号的代码可以在笔记本上找到(文章底部的链接)。接下来,我们将深入研究超参数调优。

超参数

我们可以调整哪些参数?

# returns
{'bootstrap': True,
 'ccp_alpha': 0.0,
 'criterion': 'mse',
 'max_depth': 8,
 'max_features': 'sqrt',
 'max_leaf_nodes': None,
 'max_samples': None,
 'min_impurity_decrease': 0.0,
 'min_impurity_split': None,
 'min_samples_leaf': 50,
 'min_samples_split': 2,
 'min_weight_fraction_leaf': 0.0,
 'n_estimators': 100,
 'n_jobs': None,
 'oob_score': False,
 'random_state': 42,
 'verbose': 0,
 'warm_start': False}

有关所有参数的完整描述,请参考官方文档[3]。拟合随机森林的最大挑战是过度拟合。参数 max_depth、min_samples_leaf、ccp_alpha 和 min _ infinity _ decrease 有助于减少过拟合并生成整体性能更好的模型。因此,我选择这些来进行模型调整。

最大深度和最小样本叶应该是不言自明的,但是 ccp 阿尔法和最小杂质减少需要更多的解释。

ccp 阿尔法

成本复杂性修剪α是用于修剪树的参数。修剪是在拟合后删除节点,因此本质上 CCP _ 阿尔法是使用最小 _ 样本 _ 叶子和最大 _ 深度来防止过度拟合的替代方法。

节点的成本复杂度可以从拟合树中检索。较低的 ccp 阿尔法值表示较高的成本复杂度。通过移除具有小 CCPα的节点,树被修剪,并且整体复杂性降低[7]。

为了指示超参数调谐使用的 CCPα的范围,最好将有效α与叶子的杂质可视化。注意,下面的分析来自 RF 的单个树。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

总叶杂质与有效α的关系图

当有效 alpha 从大约 70 下降到稍微超过 20 时,树的成本复杂性确实增加了,但是对于较低的 alpha 值,成本复杂性对叶子杂质的影响很难确定,让我们放大一点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

总叶杂质与有效α的放大图

当有效阿尔法从 2 下降到 0 时(成本复杂性达到最大值),叶子杂质似乎减少了约 50 点,相当于约 7 个训练 RMSE。鉴于我们的第一个 RF 的极端过拟合,这似乎是超参数调谐的合适范围。

最小杂质减少量

最小杂质减少是一种测量方法,用于指示分离后误差的减少。杂质减少是一个加权值,计算如下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

计算杂质减少的公式[3]

杂质减少通常是为单个决策树计算的。所以,我们先提取单棵树所需的数据。

# returns shape (227, 5)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

杂质结果 _df.head(10)

在查看前几行时,您应该注意到一些 child_id 的值为-1。这表明父节点是一个叶节点,因此没有进行进一步的分割。

利用数据帧中的所有数据,我们可以使用上述公式计算最小杂质减少量。

最好将结果可视化,以了解最小杂质减少的合适值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

杂质减少直方图

杂质减少非常右偏,这可以通过树的前几个节点对减少误差贡献很大来解释。检查描述符显示 25%的杂质减少值低于 14.59,这似乎是最小杂质减少参数的合适上限。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

杂质减少的描述性统计和放大直方图

随机搜索

在研究完要优化的参数之后,我们现在可以设置合适的评估范围。

# returns
1571724

注意,如果我们想测试所有可能的组合,我们必须适应超过 150 万个模型。乏味的任务。幸运的是,通过随机挑选 60 个独特的组合来应用 Randomsearch 应该可以得到 95%的最优解[8]。

增加迭代次数会增加找到更好解决方案的可能性。除了使用 Randomsearch,我更喜欢保持较低的树数以加快训练时间。这种组合允许相对快速的搜索。

我已经执行了几次搜索,选择了性能最好的设置。在展示代码之前,还有一件事需要讨论:我们需要创建验证集来验证所选择的超参数。

确认

为该数据创建验证集需要考虑一个重要因素。包含在训练集中的引擎不能包含在验证集中,反之亦然。

通常,您会在数据中创建一个随机分割,其中 80 %属于定型集,20 %属于验证集。然而,如果我们随机分割而不考虑单元号,我们可能会在训练集和验证集中结束单个引擎的部分数据。然后,该模型可以学习在时间步长之间进行外推,并对验证集进行非常准确的预测。然而,对于真正的新数据,模型性能会受到影响。

为了防止这种形式的“数据泄漏”,我们必须确保将单个引擎的所有记录分配给训练集或验证集。为了实现这种形式的数据分割,我们将使用 GroupKFold。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

随机搜索的打印进度

由于训练时间相对较短,我将迭代次数设置为 300 次。接下来,RandomizedSearchCV 用裸 RF、用于超参数调整的采样参数和 GroupKFold 实例化,其中组基于 unit_nr。随机搜索需要不到 15 分钟的时间,我们可以将结果转换成数据帧以供进一步检查。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

随机搜索的结果

检查结果有助于了解哪些超参数表现良好,并有可能用于优化您的搜索空间(我们暂时不做讨论)。

不幸的是,结果是不可重复的,这意味着重新启动内核并再次运行笔记本不会产生相同的结果。我将在下一篇分析中尝试解决这个问题。执行了几次搜索后,我找到的性能最好的参数集是:

{'min_samples_leaf': 11, 'min_impurity_decrease': 0.0, 'max_depth': 15, 'ccp_alpha': 0.125}.

平均测试分数为-16.577。

最终模型

使用这些参数,我们可以训练我们的最终模型。

# returns:
# train set RMSE:13.95446880579081, R2:0.8820190156933622
# test set RMSE:20.61288923394374, R2:0.7520472702746352

现在你有了它,一个没有特征工程(只有一些特征选择)但仍然有很好结果的调整随机森林。20.612 的测试 RMSE 比我们的基线模型提高了 7.65%。这可能看起来不多,但就 RMSE 而言,这个 RF 优于我们之前在 FD001 上拟合的时间序列模型(其 RMSE 为 20.852),而 FD003 是一个更复杂的数据集!

完整的笔记本你可以在这里查看我的 github 页面。我要感谢迈克尔·格罗贝的意见和评论。下一次,我们将使用 Tensorflow 深入研究更加复杂的 FD002 和神经网络。有任何问题或意见吗?请在下面的评论中告诉我!

参考文献
【1】监督预测维护解决方案问题框架的重要性
【2】f . o . Heimes,“剩余使用寿命估计的递归神经网络”, 2008 年国际预测和健康管理会议,丹佛,CO,2008,第 1–6 页,doi:10.1109/PHM . 2008 . 4711422 .
【3】https://sci kit-https 评估机器学习模型。奥莱利媒体公司 2015

随机森林:超参数以及如何微调它们

原文:https://towardsdatascience.com/random-forest-hyperparameters-and-how-to-fine-tune-them-17aee785ee0d?source=collection_archive---------5-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来自来源

如何优化最常用的机器学习模型之一

随机森林是一种很棒的机器学习模型。它们解决了单个决策树的许多问题,并且在构建某个应用程序时,它们总是最准确的候选模型。

如果你不知道什么是决策树或随机森林,不要担心;我给你准备了以下文章。快速看一眼,然后回到这里。

[## 决策树解释

学习机器学习决策树的所有知识

towardsdatascience.com](/decision-trees-explained-3ec41632ceb6) [## 兰登森林解释道

Random Forest 简单地解释了:训练、分类和回归的简单介绍

towardsdatascience.com](/random-forest-explained-7eae084f3ebe)

在这篇简短的文章中,我们将探索随机森林的一些基本优化,以及每个超参数是什么,哪些值得优化。

我们走吧!

[## 订阅我的专属列表!

订阅我的专属列表!并获得所有你喜欢的新鲜文章<3! By signing up, you will create a Medium…

z-ai.medium.com](https://z-ai.medium.com/subscribe)

Hyper-parameter considerations, tips and tricks

The most important hyper-parameters of a Random Forest that can be tuned are:

  • 森林中决策树的 N 个(在 Scikit-learn 中这个参数被称为 n_estimators )
  • 每个节点上分割的标准(分类任务的基尼系数或熵,或回归的 MSE 或 MAE)
  • 单棵树的最大深度。个体树越大,越有可能过度拟合训练数据,然而,由于在随机森林中我们有许多个体树,这不是一个大问题。
  • 在树的内部节点上分割的最小样本。如果需要的话,我们可以用这个参数和前一个参数来调整单个的树。
  • **叶节点的最大数量。**在随机森林中,这并不重要,但是在单个决策树中,这也可以极大地帮助减少过度拟合,并且通过减少到叶节点的可能路径数量来帮助增加树的可解释性。了解如何使用决策树来构建可解释的 ML 模型在这里
  • 包括在每个分割节点的随机特征数量
  • 用来训练每个决策树的引导数据集的大小。

好了,现在我们知道应该在哪里优化和调整我们的随机森林,让我们看看触摸这些参数会做什么。

森林中的树木数量:

通过用大量的树(大量的估计量)建立森林,我们可以以更长的训练时间为代价,创建一个方差更小的更健壮的集合模型。大多数情况下,这里的秘密是评估您的数据:有多少数据可用,以及每个观察值有多少个特征。

由于随机森林的随机性,如果您有大量的要素和少量的树,一些具有高预测能力的要素可能会被排除在森林之外,无论如何都不会被使用,或者很少被使用。

这同样适用于数据:如果您有大量的观察值,并且您没有使用整个数据集来训练每棵树,如果您有少量的树,那么一些观察值可能会被忽略。

由于随机森林很少过度拟合,在实践中,您可以使用大量的树来避免这些问题,并遵循以下准则获得良好的结果:当所有其他超参数都固定时,增加树的数量通常会以更长的训练时间为代价来减少模型误差。

不过,不要被这种说法所迷惑,用 10K 树建造一个森林是一种疯狂而无用的方法:主要的收获是,随着你增加树的数量,你将减少模型方差,通常模型误差将接近最佳值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

随着我们增加树的数量和对具有 100000 棵树的 RF 的估计直方图,分类误差减少。来源

结论 :微调树的数量是不必要的,只需将树的数量设置为一个大的、计算上可行的数字,就可以了。

在树的每个节点上拆分的标准

决策树通过计算哪个特征和该特征的哪个值最好地分割到该点的观察,在每个节点做出局部最优决策。

为了做到这一点,他们使用了一个特定的指标(基尼系数或熵值用于分类)和(MAE 或 MSE 用于回归)。对于回归,如果数据中没有很多异常值,一般规则是采用 MSE,因为它会严重惩罚那些远离平均值的观察值。

对于分类,事情有点棘手。我们必须用基尼系数或熵值来计算杂质,这有时会导致不同的分裂。以下面的问题为例,我们有两个类,A 和 B:

  • 根据基尼系数和熵,仅具有 A 类观测值的节点是 100%纯的。
  • 根据基尼系数和熵,具有 10 个 A 类观测值和 10 个 B 类观测值的节点是 100%不纯的。
  • 具有 3 个 A 类观察值和 1 个 B 类观察值的节点是 75%或 81%不纯的,这取决于我们是否分别使用基尼或熵。

根据我们使用两者中的哪一个,我们的模型可以改变。这里没有一个真正的经验法则来知道该选择哪一个。不同的决策树算法使用不同的指标(CART 使用 Gini,而 ID3 使用熵)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

基尼系数和熵的公式。自制图像。

话虽如此,基尼系数通常计算成本较低,因为它不计算对数。RandomForestClassifier 的 Scikit-Learn 实现允许我们从两者中进行选择,因此尝试两种方法并查看哪种方法导致的错误更小可能是值得的。

结论 :微调分割标准可能会导致不同的森林,由于只有两个可能的值,我们建议对分类森林尝试这两个值。

单棵树的最大深度

增加单个树的深度会增加被考虑的特征/值组合的可能数量。树越深,它的分割就越多,它考虑的数据信息就越多。

在单个树中,这会导致过度拟合,但是在随机森林中,由于集合的构建方式,很难过度拟合,尽管对于较大的深度值仍有可能。

这个参数应该根据你的树的特征的数量设置一个合理的数量:不要建造树桩(非常浅的树)也不要建造大得吓人的树;将此参数设置为一个合理的值,如果需要的话可以稍微调整一下,但是合理值附近的变化不会对林的性能产生太大影响,所以如果您不需要,不必将它包括在像网格搜索这样的过程中。

结论 :不需要微调树的深度,取一个合理的值,继续其他超参数。

每次分割时要考虑的随机要素的数量

这是随机森林集合中最重要的超参数之一,所以请密切注意。

这个超参数的最佳值在没有实验的情况下很难选择,因此获得它的最佳方法是使用交叉验证的网格搜索,并考虑以下因素:

  • 较小的值(在每个节点进行分割时考虑较少的特征)将减少集合的方差,代价是较高的个体树(可能还有集合)偏差。
  • 该值应根据您拥有的信息量或质量要素的数量进行设置,并考虑到包含许多异常值的噪声要素。如果您的数据集具有非常干净、完美和高质量的要素,那么每个分割上的随机要素数量的值可能相对较小:所有考虑的要素都将是酷的。如果您有很多嘈杂的数据,那么这个值可能应该更高,以增加质量特征被包括在竞赛中的机会。
  • 增加分割中考虑的随机要素的最大数量往往会降低模型的偏差,因为包含好要素的机会更大,但是这可能会以增加方差为代价。此外,当我们在每个节点包含更多要测试的特性时,训练速度会降低。

这里最实用的方法是交叉验证您的可能选项,并保留产生最佳结果的模型,同时考虑前面的考虑因素。您可以尝试在 Scikit-learn 的 RandomForestClassifier 的网格搜索空间中设置以下值。

  1. :这将考虑你的数据的所有特征,从随机森林中取出一些随机性,并可能增加方差。
  2. sqrt :该选项将取单个每次分割的特征总数的平方根。如果我们的数据中有 25 个特征,那么它将在每个节点随机选取 5 个特征。这个选项通常适用于分类问题。
  3. 0.2(0 到 1 之间的十进制值):该选项允许随机森林在个体分割中取%的变量。在这个例子中,我们将选择 20%的特性,如果我们有许多特性,这是一个合理的数量。尝试 0.3、0.4 和 0.5,如果您有非常嘈杂的数据,甚至可能是更高的值。对于回归问题,0.33%是一个很好的起点。

引导数据集的大小

最后,我们将讨论增压数据集大小的重要性。这是用于训练每棵树的训练数据的百分比。

因为观察值是通过替换进行采样的,所以即使引导数据集的大小与整个训练集相同,两个数据集也会不同,所以很多时候该参数保持不变,并且每棵树都用具有相同初始训练数据大小的随机观察值集进行训练。

在 Sklearn 中,这由 max_samples 超参数控制,该参数默认采用初始数据集的大小。

在预期中,从大小为 N 的数据集中抽取 N 个替换样本将从原始集中选择大约 2/3 个唯一样本,留下 1/3 个样本(所谓的出袋或 OOB 数据,然后可用于评估森林)。

出于这些考虑,使用完整大小的训练数据没有坏处,因此大多数情况下,最好的办法是不要接触这个超参数。

** [## 订阅我的专属列表!

订阅我的专属列表!获得所有你喜欢的关于随机森林超参数调整的最新文章<3! By signing up, you will create a Medium…

z-ai.medium.com](https://z-ai.medium.com/subscribe)

Conclusion and further Resources.

In this post we have seen what the most important Hyper parameters of Random Forest are, how to set their values, and which of them are worth fine-tuning.

Like any ML problem, this is all dependent on your data, resources, and goal, so if you have time, do a sparse grid search first around the recommended values for each hyper-parameter and then a second, more specific search close to the optimal values found in the previous step.

The best parameter values should always be cross-validated if there is time for it, and at least a couple of combinations should be tried. For further information take a look at the following resources:

有关机器学习和数据科学的更多资源,请查看以下资源库: 如何学习机器学习 !有关职业资源(工作、事件、技能测试),请访问AIgents.co——数据科学家职业社区&机器学习工程师

还有,你可以订阅我的邮箱列表在这里获取最新更新和独家内容:订阅邮箱列表

非常感谢您的阅读,祝您愉快!**

GPU 上的随机森林:比 Apache Spark 快 2000 倍

原文:https://towardsdatascience.com/random-forest-on-gpus-2000x-faster-than-apache-spark-9561f13b00ae?source=collection_archive---------18-----------------------

闪电般的快速模型训练与急流

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上由巴迪·阿巴斯拍摄的照片

声明:我是土星云的高级数据科学家——我们用 Python、Dask 和 RAPIDS 让企业数据科学变得快速而简单。

更喜欢看?点击查看视频演练

随机森林是一种机器学习算法,因其鲁棒性、准确性和可扩展性而受到许多数据科学家的信任。该算法通过 bootstrap 聚合来训练许多决策树,然后通过聚合森林中树的输出来进行预测。由于其整体特性,随机森林是一种可以在分布式计算环境中实现的算法。可以跨集群中的进程和机器并行训练树,从而比使用单个进程显著缩短训练时间。

在本文中,我们探索了使用 Apache Spark 在 CPU 机器集群上实现分布式随机森林训练,并将其与使用 RAPIDSDask 在 GPU 机器集群上训练的性能进行比较。虽然 ML 世界中的 GPU 计算传统上是为深度学习应用程序保留的,但 RAPIDS 是一个在 GPU 上执行数据处理和非深度学习 ML 工作负载的库,与在 CPU 上执行相比,导致了巨大的性能加速。我们使用 3 亿个实例训练了一个随机森林模型: Spark 在 20 节点 CPU 集群上花费了 37 分钟,而 RAPIDS 在 20 节点 GPU 集群上花费了 1 秒。这比 GPU 快了 2000 多倍🤯!

曲速随机森林与 GPU 和急流!

实验概述

我们使用公开可用的纽约出租车数据集并训练一个随机森林回归器,该回归器可以使用与乘客接送相关的属性预测出租车的费用金额。将 2017 年、2018 年和 2019 年的出租车乘坐次数作为训练集,总计 300,700,143 个实例

火花和急流代码可在 Jupyter 笔记本这里获得。

五金器具

Spark 集群使用亚马逊 EMR 管理,而 Dask/RAPIDS 集群使用土星云管理。

两个集群都有 20 个带有这些 AWS 实例类型的工作节点:

火花 : r5.2xlarge

  • 8 个 CPU,64 GB 内存
  • 按需价格:0.504 美元/小时

急流 : g4dn.xlarge

  • 4 个 CPU,16 GB 内存
  • 1 个 GPU,16 GB GPU 内存(英伟达 T4)
  • 点播价格:0.526 美元/小时

土星云也可以使用 NVIDIA Tesla V100 GPUs 启动 Dask 集群,但我们选择了g4dn.xlarge进行此次测试,以保持与 Spark 集群类似的每小时成本。

火花

Apache Spark 是一个开源的大数据处理引擎,内置于 Scala 中,带有一个 Python 接口,向下调用 Scala/JVM 代码。它是 Hadoop 处理生态系统中的一个主要部分,围绕 MapReduce 范式构建,具有数据帧接口和机器学习接口。

设置 Spark 集群超出了本文的范围,但是一旦集群准备好了,就可以在 Jupyter 笔记本中运行以下命令来初始化 Spark:

findspark包检测 Spark 安装在您系统上的位置;如果火花包是可发现的,则不需要这样做。需要设置几个配置设置来获得高性能的 Spark 代码,这取决于您的集群设置和工作流。在这种情况下,我们设置spark.executor.memory来确保我们不会遇到任何内存溢出或 Java 堆错误。

湍流

RAPIDS 是一个开源的 Python 框架,它在 GPU 而不是 CPU 上执行数据科学代码。这为数据科学工作带来了巨大的性能增益,类似于训练深度学习模型所看到的那些。RAPIDS 有数据帧、ML、图形分析等接口。RAPIDS 使用 Dask 来处理具有多个 GPU 的机器的并行化,以及每个具有一个或多个 GPU 的机器集群。

设置 GPU 机器可能有点棘手,但 Saturn Cloud 有用于启动 GPU 集群的预建映像,因此您只需几分钟就可以启动并运行!要初始化指向集群的 Dask 客户端,可以运行以下命令:

要自己设置 Dask 集群,请参考本文档页面

数据加载

数据文件托管在一个公共的 S3 存储桶上,因此我们可以直接从那里读取 CSV。S3 存储桶将所有文件放在同一个目录中,所以我们使用s3fs来选择我们想要的文件:

使用 Spark,我们需要单独读取每个 CSV 文件,然后将它们组合在一起:

使用 Dask+RAPIDS,我们可以一次性读入所有 CSV 文件:

特征工程

我们将根据拾取时间生成一些要素,然后缓存/保存数据帧。在这两个框架中,这会执行所有的 CSV 加载和预处理,并将结果存储在 RAM 中(在 RAPIDS 中是 GPU RAM)。我们将用于培训的功能有:

对于 Spark,我们需要将特性收集到一个Vector类中:

对于 RAPIDS,我们将所有浮点值转换为 GPU 计算的float32精度:

训练随机森林!

我们用几行代码为两个包初始化并训练随机森林。

火花:

急流:

结果

我们在 Spark (CPU)和 RAPIDS (GPU)集群上对纽约市出租车数据的 300,700,143 个实例训练了一个随机森林模型。两个集群都有 20 个工作节点,小时价格大致相同。以下是工作流程各部分的结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

随机森林的火花与急流

Spark 是 37 分钟,而 RAPIDS 是 1 秒钟!

赢得胜利的 GPU!想想当你不需要为一个单次拟合等待超过 30 分钟时,你可以多快地迭代和改进你的模型。一旦您添加了超参数调整或测试不同的模型,每次迭代很容易增加到几个小时或几天。

需要看到才相信?你可以在这里找到笔记本,自己运行!

你需要更快的随机森林吗?

是啊!有了土星云,你可以在几秒钟内进入 Dask/RAPIDS 集群。Saturn 处理所有工具基础设施、安全性和部署方面的问题,让您立即开始使用 RAPIDS。点击在你的 AWS 账户中免费试用Saturn!

查看用 Dask 调节增压超参数

随机森林概述

原文:https://towardsdatascience.com/random-forest-overview-746e7983316?source=collection_archive---------14-----------------------

随机森林的概念概述

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:玛丽塔·卡韦拉什维利Unsplash 上的照片

由于 Keras、Tensorflow、Py-torch 和 Scikit-Learn 等令人惊叹的开源框架,机器学习和深度学习算法变得更加民主化,每个人都可以参与到下一代的建设中来。因此,我们不再需要用自己的代码从头开始构建任何算法,因为轮子已经发明出来了。然而,尽管我们现在可以实现算法,而不必深入了解幕后发生的事情,但我强烈认为,彻底了解我们的机器学习或深度学习算法在幕后做什么仍然是极其重要的,因为它使调试算法变得更加容易,这样我们就可以更好地解释模型的结果,并使用它来进行精心设计的实验,以找到我们可以用来优化模型的程序。

学习技术概念时可以采用的一个很好的框架被称为“自顶向下方法”。该领域的主要从业者/导师杰瑞米·霍华德雷切尔·托马斯,fast . ai的创始人,不断地倡导这种方法,以至于我被激怒去读保罗·洛克哈特的书,书名为“数学家的哀叹”(他们经常用这本书来支持这种方法)。自上而下方法的思想是颠倒用于常规学习的传统方法(即在从事实际工作之前接受多年的理论教育),首先从事实际工作,然后再回来学习理论。

我发现这种方法有助于我建立一个关于特定技术方法的心智模型,因此当我访问关于该技术的理论时,我倾向于更加好奇为什么某些组件允许某些东西以这种方式工作。

在这篇博文中,我将分享对随机森林内部运作的概述。但是,我建议,如果您以前从未实现过随机森林,那么在阅读这篇概述文章之前,您可以这样做,并对超参数(训练前设置的参数)进行一些更改,以更好地了解它们如何影响算法的输出。

由于有大量非常广泛的资源覆盖随机森林,这将有助于开始,我没有准备自己的笔记本来浏览,尽管如果有人要求我这样做,我会这样做——在 kurtispykes@gmail.com 留下回复或给我发电子邮件。相反,我链接了一个资源,在我学习 Random forest 的时候,我发现这个资源非常有用。

在《Fast.ai 程序员机器学习入门》的第 1-rf 课是一门 MOOC,杰瑞米·霍华德使用 Kaggle Bluebook for 推土机数据集穿越随机森林。我相信克隆这个库并通过笔记本唤醒真的很有用(即使没有视频)。我的建议是改变算法中的东西,直到你破坏了它(一旦你破坏了它就试图修复它),这样你就可以直观地理解改变一个特征是如何影响模型预测的结果的。

附注:使用此链接下载用于此笔记本的数据集。

[## 法斯泰/法斯泰

此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…

github.com](https://github.com/fastai/fastai/tree/master/courses/ml1)

在随机森林的地基上推车

为了理解随机森林算法的内部工作原理,我们必须首先对决策树有一个直观的了解。决策树是一种高度可解释且重要的预测模型,能够执行分类和回归任务——决策树是最初用于算法的经典名称,但是在更现代的教科书和上下文中,决策树可能被称为 CART 算法,这是表示分类和回归树的首字母缩写词,因为该算法能够进行回归和分类。

虽然算法有看起来相当复杂的趋势,但手推车一直存在于我们的日常生活中。事实上,当人们了解手推车是如何工作的,并看到它与我们用来做决定的思维过程有多么相似时,他们仍然会感到惊讶。例如,如果我在考虑周末做什么活动,在对一项任务得出一些结论之前,我会考虑许多特征/变量。首先,我可能会考虑是否会下雨;如果周末下雨,我可能会决定呆在家里看书,但是如果不下雨,我会考虑切尔西俱乐部是否会在周末进行比赛。如果切尔西在比赛,我会问他们是在主场还是客场比赛;如果切尔西主场比赛,我会去看比赛,但是如果他们客场比赛,我会继续问问题,直到我决定周末做什么。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 Titanic 数据集上使用的决策树。【来源:维基百科】

这种类似流程图的结构就是手推车的工作原理。从技术上来说,CARTs 试图通过提供最大信息增益的划分来划分协变量空间。因为我认为有时解释是不必要的复杂,所以我将其解释为,CARTs 试图将数据分割成子集(称为节点),树中的第一个节点称为根节点,进行二进制分割的节点称为内部节点,因此剩下的不进行分割的节点称为叶节点,它们最好地分离了结果。

为了在每个节点上进行二进制分割,该算法必须找到这样的特征(以及特征阈值,如果特征值不是二进制的话),该特征的分割最好地分离了类,因此命名为信息增益,因为我们获得了关于最终结果的最多信息。为了确定“最佳”分割,定义了一个成本函数,例如用于分类任务的基尼系数(实际上,你决定优化哪一个并不重要)和用于回归任务的 RMSE (均方根误差),目的是在特征空间中找到使这些标准最小化的分割,从而在每一步产生最佳分割。此外,CARTs 也被称为贪婪算法,因为在树的每一步,该算法都试图进行最优分割,以便达到全局最优解。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 sklearn 中使用的杂质公式。[ 来源:Stacey Ronaghansci kit 中的决策树、随机森林和特性重要性的数学-learn 和 Spark

没有正则化,更好地称为树结构中的修剪,树将在每个节点递归地分裂,直到每个节点,直到每个叶节点只剩下一个结果。虽然在我们决定周末应该做什么活动的场景中,这很好,因为我们总是会对我们应该做什么活动得出结论,但在应用机器学习中,这是一个主要问题,因为算法无法归纳(这是应用机器学习的全部目的)到看不见的实例,因为它只是记忆训练数据,这被称为过度拟合。

有各种剪枝方法来对抗 CARTs 泛化失败,但是这些技术经常导致训练期间的准确度降低和算法复杂度降低。使用多个决策树并取树的平均值(回归)或取多数投票(分类)很快成为解决这个问题的方法,并由此诞生了随机森林。目标是保持树的复杂性,同时保持训练数据的高准确性,并允许算法可以很好地推广到看不见的实例。

购物车的伪代码(无调整)

1) Define a cost function i.e. Gini index or Entropy (Classification) RMSE or MAE(Regression) 2) Perform binary split on the feature that minimise cost function 2) Repeat step 2 until you reach leaf node in all branches

随机森林概念

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5:汤米·克兰巴赫在 Unsplash 上拍摄的照片

花点时间想想一片森林。一片森林是由许多独立的树木组成的。当我们将一组项目作为一个整体而不是一个个来识别时,我们称之为“集合*”,因此森林是由大量单独的树组成的集合(当我们分解随机森林算法时,请记住这一点)。*

随机森林是 Leo Breiman 在 2001 年开发的一种集成方法(它将多个决策树预测器分组)。在[2]中,Breiman 陈述了“树分类器森林的泛化误差取决于森林中个体树的强度以及它们之间的相关性”。也就是说,随机森林使用一种称为 bootstrap aggregation 的有效方法,以及随机子空间 method⁴来生长单个树,以实现非常强大的聚合预测器,能够进行分类和回归,比单个决策树具有更好的泛化误差。

引导汇总(打包)

Bootstrapaggregating*或者简单地说,Bagging,是一种用于生成预测器的多个版本并使用这些预测器来实现聚合预测器的方法[3]。通过制作 bootstrap 复制——通过替换从训练集中随机采样实例——并将此作为新的 bootstrap 数据作为训练集,随机性被引入到每个预测器中。请注意,当实例被随机采样到引导集时,它们将被替换回原始训练集,因此某些实例可能会在训练预测器的引导训练集中出现多次。此外,输入每个预测模型的每个引导样本具有相同的分布。*

在这种情况下,聚合预测器是我们的随机森林,当我们解决回归型问题时,它输出每个决策树预测的平均值,我们试图预测一个连续的结果,如房子的价格。另一方面,当我们在进行分类任务时——我们试图预测一些离散的标签,如一幅图像是否是一只猫——我们的随机森林输出每个模型的相对大多数预测。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6:装袋示例。【来源:叶达鑫·纳伊克 - 装袋:通过视觉进行机器学习。#1:什么是“打包”集成学习? ]

随机子空间方法

在[4]中,Kam Ho Tin 提出了随机子空间方法,通过降低集成中预测模型之间的相关性,在不牺牲训练数据准确性的情况下,提高决策树分类器的泛化准确性。这种方法在某种意义上类似于 bagging,即在具有替换的特征的随机样本上训练集成中的每个预测模型,而不是在所有特征上训练模型。该技术允许预测者不将其全部注意力集中在看起来比其他特征更具预测性的特征上。

改善泛化误差

上面提到的技术被引入到随机森林中,以降低每个预测器的相关性,用方差换取一些偏差。尽管每个单独的决策树本质上都是过度拟合的(每个树在训练数据上单独获得 100%的分数),但是用于构建每个树的训练数据和特征是不同的。先前调整的结果是决策树模型的相关性较低,并产生不同的错误,从而导致模型在正确性上互补。

改善随机森林的泛化误差的另一种方法是改善每个个体树的强度。通过构建具有强预测准确性的树(降低树的错误率),我们降低了随机森林的整体错误率。

减小 m 会降低相关性和强度。增加它会增加两者。介于两者之间的是 m 的“最佳”范围——通常相当宽。这是随机森林稍微敏感的唯一可调参数。

随机森林中一个非常有用的机制叫做 OOB 错误。这是一种用于评估模型中错误率的技术,该模型使用引导聚合(Bagging)来获得用于训练的引导样本。OOB 是通过仅使用未在构建树的引导示例中选择的实例进行预测而得到的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 7:米洛·米洛耶格Unsplash 拍摄的照片

随机森林的伪代码

1) For a training set of length N, sample N instances at random with replacement. 2) Grow a tree on the bootstrap training set using a specified number of random features 3) Repeat step 1 and 2 for the set number of estimators. 4) Average predictions or take majority vote (depending on type of task)

随机森林是一种非常强大集合方法。虽然他们可能不再赢得 Kaggle 比赛,但在现实世界中,0.0001 的额外准确性并不重要(在大多数情况下),随机森林是一个非常有效的开始实验的模型。

P.S. Kaggle 被认为是“数据科学之家”,平心而论,不难看出这是为什么。有一个很好的功能叫做笔记本,人们可以在里面分享他们的代码。如果你只是想运行一些算法,这是一个很好的开始。一个好主意是改变一些功能,并试图击败他们的分数,我发现这真的有助于学习。

基于你对随机森林了解,我推荐的其他帖子有:

* [## 以随机森林为例解释特征的重要性

了解 Python 中最流行的确定要素重要性的方法

towardsdatascience.com](/explaining-feature-importance-by-example-of-a-random-forest-d9166011959e)

[## 随机森林简单解释

用直观的例子理解随机森林

medium.com](https://medium.com/@williamkoehrsen/random-forest-simple-explanation-377895a60d2d)

[## 了解随机森林

该算法如何工作以及为什么如此有效

towardsdatascience.com](/understanding-random-forest-58381e0602d2)

[## Scikit-learn 和 Spark 中决策树、随机森林和特征重要性的数学

介绍

towardsdatascience.com](/the-mathematics-of-decision-trees-random-forest-and-feature-importance-in-scikit-learn-and-spark-f2861df67e3)

[## 装袋:通过视觉进行机器学习。#1:什么是“打包”集成学习?

作者叶达鑫·纳伊克和阿尔琼·乔哈里

medium.com](https://medium.com/machine-learning-through-visuals/machine-learning-through-visuals-part-1-what-is-bagging-ensemble-learning-432059568cc8)

[## 机器学习的分类和回归树-机器学习掌握

决策树是预测建模机器学习的一种重要算法。经典的决策树…

machinelearningmastery.com](https://machinelearningmastery.com/classification-and-regression-trees-for-machine-learning/)

参考文献:

Breiman,l .,J. Friedman,R. Olshen 和 C. Stone。(1984):分类和回归树。

布雷曼,利奥。(2001).随机森林

布雷曼,利奥。(1996).打包预测值

何天锦,⁴(1995)。随机决策森林*

随机森林——决策树的集合

原文:https://towardsdatascience.com/random-forests-an-ensemble-of-decision-trees-37a003084c6c?source=collection_archive---------10-----------------------

这就是决策树组合成随机森林的方式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

菲利普·兹恩泽维奇在 Unsplash 上的照片

随机森林 是当今最强大的机器学习算法之一。它是一种监督的机器学习算法,可用于分类(预测离散值输出,即一个类)和回归(预测连续值输出)任务。在本文中,我描述了如何使用流行的 Iris 数据集将它用于分类任务。

随机森林的动机

首先,我们讨论决策树算法的一些缺点。这将激励你使用随机森林。

  • 对训练数据的微小更改会导致树结构的显著变化。
  • 它可能会有过度拟合的问题(模型非常适合训练数据,但无法对新的输入数据进行推广),除非您调整 max_depth 的模型超参数。

因此,与其训练单个决策树,不如训练一组决策树,它们一起构成一个随机森林。

随机森林如何在幕后工作

随机森林背后的两个主要概念是:

  • 群体的智慧——一大群人集体起来比单个专家更聪明
  • 多元化——一组不相关的

随机森林由一组单独的决策树组成。因此,该技术被称为集成学习。一大群不相关的决策树可以产生比任何单个决策树更准确和稳定的结果。

当您为分类任务训练随机森林时,您实际上训练了一组决策树。然后,您获得所有单个树的预测,并预测获得最多投票的类。尽管一些单独的树产生错误的预测,但是许多树可以产生准确的预测。作为一个群体,他们可以走向准确的预测。这就叫群众的智慧。下图显示了幕后实际发生的情况。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

为了保持单棵树之间的低相关性(高多样化),算法会自动考虑以下事项。

  • 特征随机性
  • 打包(引导汇总)

特征随机性

在一个普通的决策树中,当它想要分割一个节点时,该算法从所有特征中的中搜索最佳特征。相比之下,随机森林中的每棵树都从随机特征子集中搜索最佳特征。当在随机森林中种植树木时,这会产生额外的随机性。由于特征的随机性,随机森林中的决策树是不相关的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

打包(引导汇总)

在随机森林中,每个决策树都在训练集的不同随机样本上进行训练。当用替换完成采样时,该方法被称为打包(自举聚集)。在统计学中,带替换的重采样被称为自举。bootstrap 方法减少了决策树之间的相关性。在决策树中,对训练数据的微小更改会导致树结构的显著变化。bootstrap 方法利用这一点来生成不相关的树。我们可以用下面的简单例子来演示自举方法。同样的事情也适用于随机森林。

假设我们有一个由 10 个观察值组成的训练集,从 1 到 10 进行编号。在这些观察结果中,我们使用 bootstrap 方法进行采样。我们想考虑:

  • 样本大小 —在机器学习中,通常使用与训练集相同的样本大小。在本例中,样本量为 10。
  • 样本数量 —等于随机森林中决策树的数量。

为了创建第一个样本,我们从训练集中随机选择一个观察值。假设这是第五次观察。这个观察结果被返回到训练数据集中,我们重复这个过程,直到我们得到整个样本。在整个过程之后,想象我们用下面的观察制作第一个样本。

样本 _1 = [5,4,6,6,5,1,3,2,10,9]

然后我们用这个样本训练一个决策树。由于替换,一些观察值可能在样本中出现更多次。另外,请注意,有些观察值在样本中至少不会出现一次。这些观察结果被称为***【OOB】***观察结果。第一个样本的 oob 观测值为:

oob_1 = [7,8]

样本 1 对应的决策树在训练过程中从来看不到那些 oob 的观测值。因此,这组 oob 观察值可以用作该决策树的验证集。我们可以通过平均每个决策树的 oob 评估来评估整个集合。这被称为 非现金评估 ,它是交叉验证的替代方案。

让我们创建另一个示例。

Sample_2 = [5,4,4,5,5,1,3,2,10,9]

OOB _ 2 =【6,7,8】

同样,我们创建的样本数量等于随机森林中决策树的数量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

随机森林中的要素重要性

随机森林的另一个巨大优势是,它允许您根据在训练阶段计算的分数,了解每个特性的相对重要性。为此,he Scikit-learnRandomForestClassifier提供了一个名为***feature _ importances _***的属性。这将返回总和为 1 的值的数组。分数越高,特性越重要。分数是根据基尼系数计算的,基尼系数衡量的是分割的质量(基尼系数越低,分割越好)。基尼系数平均下降幅度较大的分割特征被认为更重要。

通过查看要素的重要性,您可以决定删除哪些要素,因为它们对构建模型的贡献不足。这很重要,原因如下。

  • 移除最不重要的特征将增加模型的准确性。这是因为我们通过移除不必要的特征来移除噪声
  • 通过删除不必要的功能,您将避免过度拟合的问题。
  • 较少的功能也减少了训练时间。

理论够了!让我们动手编写一些 Python 代码,为 Iris 数据集训练一个随机森林。

关于虹膜数据集

Iris 数据集(此处下载)有 150 个观察值和 4 个数字属性。目标列(物种)由每个观察的类组成。有 3 类(0-setosa,1-versicolor,2-virginica)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

虹膜数据集的前 5 行(图片由作者提供)

数据集没有缺失值,所有要素都是数值型的。这意味着数据集无需任何预处理即可使用!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

虹膜数据集信息(图片由作者提供)

为 Iris 数据集训练随机森林分类器

运行以下代码后,您将获得 0.97 的模型准确性分数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们的随机森林里有 100 棵树。这是因为我们设置了 n_estimators=100 。因此,自举样本的数量也是 100。

开箱(oob)评估

在随机森林中,每个决策树都是使用观察值的自举子集来训练的。因此,每棵树都有一个单独的子集***【OOB】***观察值。我们可以使用 oob 观察值作为验证集来评估我们的随机森林的性能。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

该值接近模型准确度分数 0.97。

可视化特征重要性

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过查看特征重要性,我们可以决定删除 ***【萼片宽度(cm)】***特征,因为它对制作模型的贡献不足。

最后的想法

决策树分类器和 RandomForestClassifier 等基于树的模型是分类任务中最常用的机器学习算法。如果要将模型解释为“为什么模型预测的是那种类”,最好使用普通的决策树算法,而不是随机森林。这是因为单个决策树很容易解释。但是请记住,正如我们前面讨论的,决策树算法有一些缺点。

使用随机森林算法时,请按照指定的顺序执行下列操作。

  1. 首先,通过处理缺失值并将分类值转换为数值来预处理数据。
  2. 然后,将数据集分为训练测试和测试测试,不要将相同的数据用于训练和测试。这样做可以让模型记住数据,而不是学习任何模式。
  3. 如下所述,在 RandomForestClassifier 中设置模型超参数。永远要考虑算法的性能和训练速度之间的平衡。例如,如果您在森林中包含更多的树,则性能较高,速度较慢。
  4. 然后训练您的模型并可视化特征重要性。
  5. 移除不太重要的特征(如果有),并使用所选特征重新训练模型。
  6. 使用测试集测试您的模型,并获得准确性分数。

选择模型超参数

  • n_estimators: 森林中树木的数量。默认为 100。您可以使用与训练集中的观察次数相等的数字。
  • max_depth: 树的最大深度。默认值为无。您可以首先训练一个决策树分类器,并为 max_depth 执行超参数调整。通过交叉验证和网格搜索获得最佳值后(我已经这样做了,并获得了值 3),可以将该值用于 RandomForestClassifier 的中的 max_depth
  • bootstrap: 默认为真。使用此默认值执行引导抽样以获得不相关的树。
  • oob_score: 默认为 False。如果您要执行袋外(oob)评估(交叉验证的替代方法),请将此项设置为 True。

要访问 RandomForestClassifier 的 Scikit-learn 官方文档,只需在从 sklearn . ensemble import RandomForestClassifier 导入类 后执行help(RandomForestClassifier)

感谢阅读!

本教程由Rukshan Pramoditha*,*数据科学 365 博客作者设计创作。

本教程中使用的技术

  • Python (高级编程语言)
  • 熊猫 (Python 数据分析与操纵库)
  • matplotlib (Python 数据可视化库)
  • seaborn (Python 高级数据可视化库)
  • Scikit-learn (Python 机器学习库)
  • Jupyter 笔记本(集成开发环境)

本教程中使用的机器学习

  • 随机森林分类器

2020–10–29

随机漫步、布朗运动和随机微分方程——直觉

原文:https://towardsdatascience.com/random-walk-brownian-motion-and-stochastic-differential-equations-the-intuition-3484413503e0?source=collection_archive---------8-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马库斯·温克勒在 Unsplash 上的照片

最近我一直在考虑将我的研究工作从常微分方程扩展到随机微分方程。最初我认为这两者不应该太不一样,但事实证明我错了。甚至使用的微积分也不一样。

在读了格雷戈里·s·奇里基安的《随机模型 、信息论和李群 这本书的几章后,我仍然无法理解其中的概念,因为毕竟我不是一个数学人。幸运的是,麻省理工学院开放式课程拯救了我,因为讲师 Choongbum Lee 很好地解释了用于处理 SDE 的数学背后的直觉。这篇博客文章不会是一个数学教程,而是一个从简单的随机漫步到随机微分方程的直观演练,借用麻省理工学院开放课程的见解和我自己的直觉。为了真正掌握这个主题,人们仍然需要通过推导和问题来工作,但我希望这篇文章能让人们有一个轻松的开始。

1.简单随机漫步

让我们从一个简单的离散时间的整数的 1D 随机漫步开始。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:作者制作的 1D 随机漫步

让移动点在时间 t 的位置为 Xt 。由于点在离散时间内移动, t 只能取整数值(即 0,1,2,…)。整数行上一个点的随机游走从 X0 = 0 开始。在迈出每一步之前,为了决定向左还是向右移动,我们抛一枚公平硬币(两边落地的概率相等)。如果它给我们正面,那么点向右移动,否则,它向左移动。

形式上,我们可以把点在 t=k 的位置写成:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

等式。1:随机漫步中的位置

其中可视为第步到第步之前抛硬币的结果,只能取+1 或-1 的值。我们假设所有的抛硬币都是独立的事件。

我们感兴趣的是找到点在时间 t 的位置。很明显,不可能精确定位圆点的确切位置,因为每一次移动都是由概率事件决定的(圆点的轨迹是不确定的),因此使用概率分布来描述圆点在时间 t. 的位置更加自然

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2:作者制作的随机漫步树

我们可以用一棵树来想象这个运动。图 2 中的树应该很容易解释,但如果不是这样,横轴是点移动的整数线,纵轴是离散时间线,每个红点下面的数字是点在特定位置和时间的概率。在 t= 0 点是 0,因此它的概率是 1。剩下的概率应该很容易算出来。不难看出,如果我们将每一行(每一时间步)上的概率的分母分解出来,剩下的数就形成了帕斯卡三角形,即对于 t= 0,我们有 1,对于 t =1,我们有 1,1,对于 t =2,我们有 1,2,1,对于 t =3,我们有 1,3,3,1,等等。并且由于帕斯卡三角形确定了二项式展开的系数,并且在每个时间步长上所有概率的总和是 1,所以应该直观的是,点的位置的概率分布应该在一定程度上遵循每个时间步长上的二项式分布。

数学上,对于 t=n ,点位于 X=k 的概率为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这简化为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

等式。2:随机漫步的概率分布

其中第一个乘法项只是为了强调这样一个事实,即当 nk 具有不同的奇偶性时,概率为零(这可以从图 2 中容易地验证。)

这实际上是二项分布的一种特殊情况,其形式为

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

等式。3:二项式分布

在我们的例子中,p = 0.5。我们的分布与一般二项式分布之间的唯一区别是:( 1)在从 n 中进行选择时,我们通过使用( n-k )/2 来加强围绕 k= 0 的对称性,以及(2)通过考虑奇偶性,总概率被“标准化”为 1。我用引号表示“正常化”,因为总概率为 1 是随机漫步的自然结果,而不是人为构造的。

我对 300 个时间步长的概率分布的演变进行了可视化:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3:作者制作的随机游走概率分布的演变

这一切都说得通。当 t =0 时,分布在位置 0 处只有概率 1。随着时间的推移,概率分布越来越分散。基于可视化,有几点需要注意:

(1) 很明显,这个点在任何时候最可能的位置还是在中心(如果 t 是偶数则为 0,如果 t 是奇数则为 1 和-1)。结合分布对称的事实,点在任意时刻的期望位置为 0。方程描述的典型二项式分布的方差。3 是 np(1-p) ,如果直接应用到我们的分布中,就会得到 n/4 。然而,这是不正确的,因为我们的分布是在区间[ -n,n ]上定义的,因此它被拉伸了 2 倍。因此它的方差是*n。*这非常重要,因为我们现在知道分布的方差等于点移动的时间。这种认识自然会引出下一个关于布朗运动的讨论。

(2) 这是而不是一种概率密度分布,因为状态空间(整数)是离散的而不是连续的。然而,这种概率分布的形状非常类似于高斯分布。我们很快就会看到,高斯分布实际上是二项式分布的“极限”。

(3) 如果进行点移动 n 步的实际实验(例如图 1 中的实验。是点移动 1000 步的位置)结果可能很难符合我们的概率分布。然而,如果相同的实验重复进行 m 次,其中 m 非常大,那么根据大数定律,点的位置的统计特性被我们的概率分布很好地捕获。

但是我仍然不认为我的解释是“直观的”,尽管有非严格的数学限制,但仍然不清楚简单的随机漫步意味着什么,所以我决定通过更好的可视化再尝试一次:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4:作者制作的随机漫步取样

概率分布在图 4 中显示为表面图(由于奇偶性,我没有去除 0 概率,因此表面看起来粗糙),红线是简单随机行走的轨迹。图 3 可以被认为是这些图在时间上切片的横截面,而图 1 可以被认为是只看整数线上的点而忽略其余部分。我模拟了四次,我们可以看到,概率分布总是以相同的方式随时间推移,但轨迹在所有四种情况下都是不同的。

这就是简单随机行走的酷之处,轨迹的统计属性总是及时保留,但要获得实际的轨迹,需要在每个时间步对某个位置进行采样。换句话说,当我们进行观察时,概率分布坍缩成一条单一的轨迹(我喜欢把这想象成宏观世界中海森堡的不确定性原理)。随着我们观察到越来越多的轨迹,根据大数定律,这些轨迹的统计特性将收敛到真实概率分布。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5:作者制作的图 4 的俯视图

如果我们从 z 轴俯视图 4,我们将看到图 5 中左侧的动画。右手边的动画绘制了概率的对数,这样更容易看到。所有空格的概率都是 0,很明显最大概率总是在整数行上的 0。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6:橙色线是标准差;白线是作者制作的方差

图 6 显示了另一个重要的含义。既然我们知道时间 t 的方差是 t ,那么时间 t 的标准差就是 sqrt(t) 。换句话说,我们知道轨迹不会偏离中心 1 个标准差太远,因为这个范围覆盖了大约 68.2%的可能轨迹。这在图 6 中是显而易见的,因为轨迹(红线)没有远离由标准偏差(橙线)包围的集合。这个例子展示了随机漫步模型预测能力的一个方面。

2.布朗运动

简单随机行走是一个离散空间(整数)和离散时间模型,而布朗运动是一个连续空间连续时间模型,简单随机行走可以很好地激发布朗运动。我将解释空间和时间是如何从离散变为连续的,这基本上将简单的随机行走变成了布朗运动。前面描述的二项式分布 p(k,n) 会变成高斯分布,这个分布的时间演化会变成非常有趣的东西。

离散空间到连续空间

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 7。离散空间到连续空间,由作者制作

取整数行,将每个整数值 k 除以一个固定的数 N. ,然后我们将实数放入以每个 *k/N、*为中心的仓中,每个仓的宽度相等。随着 N 趋近于无穷大,离散概率分布 p(k,n) 变成了概率密度函数,任意时刻点的位置变成了连续的随机变量。换句话说,如果我们让点每次移动时都走很小的步,当它的步长接近 0 时,我们得到一个连续的概率分布(即,我们现在有一个与实数线上的所有点在合理的时间间隔内相关联的概率)。

此外,如果 n,点所走的总步数很大,则二项式分布可以很好地近似为均值和方差为 0 的正态分布 n/N 。分母 N 是将空间除以因子 N 的结果,这实质上减少了每移动一步的方差增加。这里是用斯特林公式的一个证明。事实上,当 n 接近无穷大时,正态分布是二项式分布的“极限”。在这个极限下,概率分布将被“压扁”(想象图 3 中有一个非常大的 t 。)密度函数将简单地变成范围[- nn 内的均匀分布。

离散时间到连续时间

如果我们使用相同的技巧,将离散时间 n 除以固定的数 N ,将离散时间步长 n 替换为 t=n/N ,随着 N 接近无穷大,离散时间变成连续时间。正态分布的方差简单来说就是 t ,它是一个实数。

现在,希望从随机漫步到布朗运动的转变是有意义的。我解释了简单的随机行走如何在空间和时间上被无限分割成布朗运动,这也是大多数教科书的做法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 8:作者制作的随机行走时间表达式

然而,我也喜欢反过来想:如果我们无限放大布朗运动,我们看到的是随机行走。如果我们重新观察如图 8 所示的简单随机行走的时间进程,随着时间和空间尺度都变得非常大,人们可以很容易地将离散路径(显示为红线)想象为连续路径,因为每个增量都非常小,以至于当与整个时间和空间相比时,人们可以说在任何时间轨迹上的每个点都被定义在真实的线上。概率分布也会变得平滑。假设钟形离散分布变得平滑,这将给出高斯分布。

植物学家罗伯特·布朗于 1827 年首次描述了布朗运动。在显微镜下,他观察到浸入水中的花粉看似随机的运动。直到将近 80 年后,阿尔伯特·爱因斯坦发表了一篇论文,建立了布朗运动背后的理论。爱因斯坦将花粉描述为不断受到水分子的轰击。每一次撞击都发生在很短的时间内,并使花粉发生微小的移动。在这个意义上,花粉在分子尺度上的运动可以被认为是发生在离散时间(每次花粉被水分子击中)和离散空间(花粉每次被击中时移动一些微小的固定距离)。

版权所有远藤越修

形式化布朗运动

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

布朗运动,麻省理工学院开放式课程

定理 2.1 形式化了我们已经讨论过的关于布朗运动的内容:(I)表示点总是从 0 开始它的路径。(ii)表示给定点在时间 st,0≤s < t. 的两个位置,这两个位置之间的差的分布遵循均值和方差为 0 的正态分布 t-s. (iii)是不言自明的。

这个定义其实一点都不直观。通常“好的”函数是在确定性意义上定义的,或者可以说那些函数只定义了均值,均值由函数输入参数化,其方差假定为 0。但布朗运动有点相反:我们让均值为 0,只定义它的方差,它是随时间参数化的。因为布朗运动在时间上是连续的,所以我们可以在无限小的时间或空间片段上观察到它的行为。通过构造,这些微小的片段不是一个单一的值,而是一个概率分布。这种构造将赋予布朗运动许多有趣但怪异的事实和性质,其中许多是非常反直觉的。为此,我将向读者推荐麻省理工学院的开放式课程。我将只列出继续讨论 SDEs 所需的几个例子。

  • 布朗运动 B(t) 是一个定义明确的连续函数,但它无处可微 ( 证明)。直觉上,这是因为布朗运动的任何样本路径都随时间变化太多,或者换句话说,对于该函数的任何无穷小的片段,其方差都不会收敛到 0。直接结果就是,我们不能在 B(t) 上使用经典微积分。dB(t)/dt 这样的表达式毫无意义!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

麻省理工学院开放式课程的二次变异

  • 布朗运动有二次变差。这一点非常重要,并促成了一种称为it——微积分的解决方法,用于对布朗运动进行微积分运算。直观地说,这意味着给定某个时间间隔[0, T ,如果我们把它分成许多不重叠的段。当最大的时间段接近 0 时,对应于这些时间段的路径增量的方差的极限是 T 。二次变分的一个重要结果是 (dB) = dt。这里有一些很好的证明。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

等式。4:微积分中的微分

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

等式。5:微积分中的积分

  • 伊藤清发明的微积分提供了一种用布朗运动做微积分的方法。微积分中的微分:将布朗运动包裹在另一个可微分的函数中,可以执行稍微修改的微积分版本。它是这样工作的:给定一个可微函数 f(x) ,如果它把 B(t) 作为它的输入 x ,那么我们可以根据方程写出 df 。4,这被称为 its 的引理(据称是历史上被引用最多的引理)。对于经典微积分,我们有 df = (∂f/∂x)dx ),所以它的引理实际上只有一项不同。这实际上是在泰勒级数展开中保留第 2 和第阶项的结果,以便说明布朗运动的高方差。最后一项 dt 其实是来自 *(dB)。***it \u Calculus 中的积分:**关于 dB 的积分与经典微积分的不同之处在于,当写成黎曼和时,Itō integral 取每一段中最左边的值(如方程式中 Ht(i-1)所示)。5)而经典积分可以在每个区间内选择任意值。

我在这里的笔记是非常草书的,所以我强烈建议读者观看这个讲座来看看一些微积分的例子用法。

3.随机微分方程

现在有了微积分,我们可以解含有布朗运动的微分方程吗?

首先,有人可能会问这样一个微分方程看起来如何,因为表达式 dB(t)/dt 被禁止了。我们知道 ODEs 可能具有以下形式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

等式。6:颂歌

其中 X 的时间变化率由函数 f(.,.)。如果我们让布朗运动中的每个微小增量 dB 增加到沿着 *X,*的轨迹的微小变化 dX 上,我们可以得到:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以通过将布朗运动乘以另一个函数来增加其复杂性:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

等式 7。SDE

等式。7 给出了 SDEs 的形式。 dB 这里通常指的是高斯白噪声。使用符号 μσ 并不是没有原因的。 μ(t,X)dt 通常被称为漂移项,它可以被视为 X 在任意时刻的期望位置,而 σ(t,X)dB 通常被称为扩散项,它可以被视为 X 在任意时刻的位置的方差(随着时间的推移,这个项在所谓的扩散过程中展开了类似于图 3 的概率分布)。

  • 如果 μ (。,.)始终为 0 且 σ (。,.)总是 1,那么 X 本身遵循布朗运动。
  • 如果 σ (。,.)是 0,那么方程 7。成为方程中的颂歌。6.换句话说,没有添加布朗运动,X 只是根据其动态 μ 漂移,方差为 0。

ODEs 和 SDE 在很多方面都很相似,好在SDE 也有存在唯一性只要 μ (。,.)和 σ (。,.)是“好”的函数。

求解一个常微分方程意味着描述一个随时间变化的轨迹,而求解一个 SDE 意味着描述一个随时间变化的轨迹的统计特性。换句话说,前者仅求解方差始终为 0 的轨迹的期望值,而后者需要描述作为漂移结果的均值和作为扩散结果的方差。不幸的是,SDE 大多数时候没有解析解,就像(也许比)ODEs 一样。这里有两个求解解析解的 SDE 的例子。

更多的时候采用数值方法来求解随机微分方程。但是与数值求解微分方程的方式有一些主要的不同:

  • 有限差分法 : 通过将时间离散成大小为 h 的小步长,将步长和 dX 的乘积依次加到初始条件上,可以近似得到 X 的轨迹。最简单的例子就是欧拉法。通过从一些初始条件近似一个轨迹,我们本质上是用 SDE 采样一个路径。
  • 蒙特卡洛模拟 :由于 SDE 的概率性质,大多数时候只对其一条路径进行采样并不能告诉我们太多关于该系统的信息。利用蒙特卡罗模拟,我们从一些初始条件重复采样 SDE 的路径,并且根据大数定律,采样轨迹的统计特性(例如,均值和方差)将收敛到真实特性。蒙特卡罗模拟通常与有限差分法结合使用,后者模拟每次采样时的轨迹。
  • 树形图:由于布朗运动是简单随机行走的极限。如果我们把布朗运动的时间分割成微小的片段,我们可以让这个点在每一个时间片段中以适当选择的步长做微小的随机行走。与前两种方法相比,这种方法的使用频率较低,但通常很容易通过手工操作来了解 SDE 的统计特性。

布朗运动导致许多反直觉的结果,常微分方程也是如此(例如,当混沌时,可以生成位于分形上的轨迹)。毫不奇怪,这两者的融合会产生更奇怪、更难以理解的东西。因此,更应该为这些概念建立直觉。浏览定义、引理、证明和命题是最重要的,但我个人认为直觉使它成为一个更快的过程。

附注:我仍在对一些 SDE 进行实验。如果我得到任何酷的东西,我会更新 GIFs 图片。

我的动画的所有代码可以在我的 GitHub 中找到。

参考文献

[1]麻省理工学院开放式课程。“数学中的主题及其在金融中的应用”https://OCW . MIT . edu/courses/Mathematics/18-s096-Topics-in-Mathematics-with-application-in-Finance-fall-2013/index . htm

[2]奇里基安,格雷戈里 S. *《随机模型,信息论和李群,第 1 卷》*施普林格,2009

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值