时间序列中的爆炸梯度和消失梯度问题
实践教程
在这篇文章中,我们处理时间序列中的爆炸和消失梯度,特别是在递归神经网络(RNN)中,通过时间和梯度裁剪截断反向传播。
介绍
在这篇文章中,我们将重点关注顺序数据技术的深度学习。我们都熟悉这类数据。例如,文本是单词序列,视频是图像序列。更具挑战性的例子是来自时间序列数据的分支,具有诸如心率、血压等医学信息。、或金融,提供股票价格信息。深度学习时间序列任务最常见的 AI 方法是递归神经网络(RNNs)。使用 RNN 的动机在于解决方案对时间的概括。由于序列具有不同的长度(大多数情况下),经典的深度学习架构(如多层感知器(MLP))不加修改就无法应用。而且,MLP 的砝码数量绝对庞大!因此,通常使用 RNN,在整个架构中共享权重。下面显示了一个简单的 RNN 架构,其中 V、W 和 U 是权重矩阵,b 是偏置向量。
作者图片
如果你不熟悉 RNN、反向传播或 MLP,请随意阅读本文末尾的参考文献[1]-[3]来填补空白。
穿越时间的反向传播(BPTT)
通过定义损失函数( L )来训练 RNN,该损失函数测量真实标签和输出之间的误差,并通过使用向前传递和向后传递来最小化该误差。下面简单的 RNN 架构总结了整个通过时间反向传播的想法。
对于单个时间步长,执行以下程序:首先,输入到达,然后通过隐藏层/状态进行处理,并计算估计的标签。在这个阶段,计算损失函数以评估真实标签和估计标签之间的差异。计算总损失函数 L ,并由此完成正向传递。第二部分是向后传递,在这里计算各种导数。
作者图片
RNN 的训练并不简单,因为我们通过层和时间反向传播梯度**。因此,在每个时间步中,我们必须将所有之前的贡献相加,直到当前贡献,如下式所示:**
作者图片
在该等式中,计算时间步长 k 处的状态对时间步长 T = T**T5 处的整个损失函数 **L、的梯度的贡献。训练期间的挑战在于隐藏状态的比率:
消失和爆炸梯度问题
时间序列数据反向传播过程中出现的两个常见问题是梯度的消失和爆炸。上面的等式有两个问题:
作者图片
在第一种情况下,这一项以指数形式快速趋向于零,这使得学习一些长周期相关性变得困难。这个问题叫做消失渐变。在第二种情况下,这一项以指数方式快速趋近于无穷大,由于过程不稳定,它们的值变成了 NaN。这个问题叫做爆炸梯度。在接下来的两节中,我们将回顾处理这些问题的两种方法。
随时间截断反向传播(截断 BPTT)。
下面的“技巧”试图通过在训练过程中考虑移动窗口来克服消失梯度问题。众所周知,在反向传播训练方案中,通过整个序列有一个正向传递和一个反向传递来计算损失和梯度。通过采用一个窗口,我们还从训练持续时间方面提高了训练性能——我们简化了它。
这个窗口被称为“块”。在反向传播过程中,我们向前和向后运行这个特定大小的块,而不是整个序列。
作者图片
截断的 BPTT 比简单的 BPTT 要快得多,也不太复杂,因为我们不需要从远处的步骤做梯度的贡献。这种方法的缺点是,在训练过程中不会教授大于组块长度的依赖性。另一个缺点是消失梯度的检测。通过观察学习曲线,人们可以假设梯度消失,但是,也许任务本身是困难的。
对于消失梯度问题,已经提出了许多其他方法,仅举几个例子:
- 使用 ReLU 激活功能。
- 长短期记忆(LSTM)架构,其中遗忘门可能有所帮助。
3.用正交矩阵初始化权重矩阵, W ,,并在整个训练中使用它(正交矩阵的乘法不会爆炸或消失)。
渐变剪辑
将 g 视为损失函数相对于所有网络参数的梯度。现在,定义一些阈值,并在训练过程的后台运行以下剪辑条件。这是一个非常简单且非常有效的条件。
通过应用渐变裁剪,我们不会改变渐变的方向,而只是改变它的大小。由于隐藏状态( h) 导数是引起爆炸渐变的部分,它足以剪辑下面的实体:
阈值 是设计者需要手动定义的关键参数。我们的目标是通过查看梯度范数的曲线来选择解决爆炸梯度问题的最高阈值:
作者图片
摘要
在这篇文章中,我们探讨了简单的 RNN 建筑中渐变的消失和爆炸问题。这两个问题属于机器学习中的开放问题,这方面的研究非常活跃。讨论了截断 BPTT 和梯度裁剪方法,并给出了一些实现技巧。
关于作者
Barak 获得了以色列理工学院的航空工程学士学位(2016 年)、硕士学位(2018 年)以及经济和管理学士学位(2016 年,成绩优异)。他曾在高通工作(2019-2020),在那里他主要研究机器学习和信号处理算法。巴拉克目前正在海法大学攻读博士学位。他的研究兴趣包括传感器融合、导航、深度学习和估计理论。
https://www.linkedin.com/in/barakor/
参考资料和进一步阅读
[1] 对多层感知器的理解(MLP) 。尼廷·库马尔·凯恩,中等。2018.
[2] 了解神经网络。从神经元到 RNN、CNN 和深度学习。维博·尼甘,中等。2018.
反向传播非常简单。谁让它变得复杂了? 普拉卡什杰伊,中等。2017.
[4]张,京兆,等.“为什么梯度裁剪加速训练:适应性的理论辩护” arXiv 预印本 arXiv:1905.11881 (2019)。
[5]陈,向毅,志伟,洪."理解私人 SGD 中的渐变剪辑:几何透视."arXiv 预印本 arXiv:2006.15429 (2020)。
[6]帕斯卡努,拉兹万,托马斯·米科洛夫,约舒阿·本吉奥。"关于训练递归神经网络的难度."机器学习国际会议。2013.
[7] Ribeiro,António H .等人,“超越爆炸和消失梯度:使用吸引子和平滑度分析 RNN 训练”人工智能与统计国际会议。2020.
勘探-开发权衡
强化学习导论
探索和开发的思想是设计一个便利的强化学习系统的核心。“权宜”一词是一个从学习自动机理论改编的术语,指的是一个系统,其中代理(或自动机)学习随机环境的动力学。换句话说,代理人学习了一个在随机环境中制定行动的策略,这个策略比纯粹的机会要好。
在训练代理人在随机环境中学习时,探索和开发的挑战会立即出现。当代理在反馈框架中与环境交互时,它接收奖励。为了最大化其回报,代理人通常会重复过去尝试过的产生“有利”回报的行为。但是,为了找到这些导致奖励的行为,代理必须从一组行为中进行抽样,并尝试以前没有选择的不同行为。请注意这个想法是如何从行为心理学的“效果法则”中很好地发展而来的,在行为心理学中,一个代理人加强了对产生回报的行为的心理联系。这样做时,代理还必须尝试以前未选择的动作;否则,它将无法发现更好的行动。
**强化学习反馈框架。**一个智能体反复地与环境交互,并学习一个从环境中获取最大长期回报的策略。
探索是指代理人为了获得更好的回报,不得不从一组行为中抽取行为样本。另一方面,剥削是指一个代理人利用他已经知道的东西重复行动,从而获得“有利的”长期回报。设计强化学习系统的关键挑战是平衡探索和利用之间的平衡。在一个随机的环境中,行为必须被足够好地采样以获得一个期望的回报估计。一个专门从事勘探或开发的代理人注定不会是权宜之计。它变得比纯粹的偶然性(即随机化的代理)更糟糕。
多武装匪徒
在多武装匪徒问题(MAB)(或 n 武装匪徒)中,代理从一组动作中做出选择。这种选择导致基于所选动作的来自环境的数字奖励。在这种特定情况下,环境的性质是一种平稳的概率分布。所谓稳定,我们是指概率分布在环境的所有状态下都是恒定的(或独立的)。换句话说,概率分布不会随着环境状态的改变而改变。在 MAB 问题中,代理人的目标是在特定时期内从环境中获得最大的回报。
MAB 问题是“独臂强盗”问题的延伸,它被表示为赌场中的老虎机。在 MAB 的设置中,我们有多杆的,而不是单杆的老虎机。每个杠杆对应于代理可以执行的一个动作。代理的目标是从机器中进行最大化其赢得物(即奖励)的游戏。代理人必须找出最佳杠杆(探索),然后专注于能使其回报(即回报总和)最大化的杠杆(开发)。
**左:独臂强盗。**吃角子老虎机有一个控制杆,玩的时候会返回一个数字奖励。
**右:多臂土匪。**吃角子老虎机有多个(n)分支,每个分支在玩时返回一个数字奖励。在 MAB 问题中,强化代理人必须平衡勘探和开采,以使回报最大化。
机器上的每一个动作(即杠杆),都有一个预期的回报。如果代理人知道这个期望报酬,那么问题就变成了一个无关紧要的问题,它仅仅涉及到选择具有最高期望报酬的行动。但是,由于杠杆的预期回报是未知的,我们必须核对估计,以了解每个行动的可取性。为此,代理将不得不探索以获得每个动作的平均奖励。之后,它可以利用它的知识,选择一个预期回报最高的行动(这也称为选择贪婪行动)。正如我们所看到的,代理人必须平衡探索和开发行为,以最大化整体长期回报。
文献学
- 纳伦德拉,K. S .,& Thathachar,硕士(2012)。学习自动机:导论。快递公司。
- 萨顿和巴尔托(1998 年)。强化学习:导论。麻省理工出版社。
最初发表于https://ekababisong.org。
特斯拉在荷兰的迅速普及
利用 BigQuery、云存储和 Data Studio 探索 RDW 车牌数据集
去年,在荷兰的高速公路上,我注意到路上的特斯拉数量一直在迅速增加。
这有几个很好的理由。荷兰政府通过税收优惠积极支持全电动(租赁)汽车的采用。此外,最新的 Model 3 是第一款价格相对友好的特斯拉,约为 6 万欧元,而不是 10 万欧元以上。
为了验证我的观察,我将通过 RDW 探索一个开放的数据集。RDW(荷兰车辆管理局)负责车辆的许可,他们提供荷兰所有许可车辆的每日更新数据集。
照片由 Bram Van Oost 在 Unsplash 上拍摄
正在准备数据…
首先,让我们下载数据集(更新日期:2020 年 1 月 10 日)。
所有荷兰车辆在一个大的 CSV,好吃!
CSV(约 7.7GB)太大,无法导入电子表格,因此我们将使用谷歌的 Pb 级数据工具 BigQuery 来处理这些数据。
因为 BigQuery 将手动 CSV 上传限制为 10MB,所以我们需要首先将我们的文件上传到云存储中的存储桶:
云存储桶
接下来,我们通过选择云存储中的文件在 BigQuery 中创建新表,设置表名kentekens_2020
、模式设置auto-detect
、字段分隔符comma
和要跳过的标题行1
。
在 BigQuery 中创建我们的表
几秒钟后,表就创建好了,我们的数据集就可以开始研究了。当我们查看详细信息时,有 1440 万行等待查询。根据该模式,有 64 列。这意味着我们的表包含了近十亿个字段。).每行代表一辆注册了牌照的汽车。
我们来查询一下!
因为我们只对乘用车数据感兴趣,所以我们通过对Voertuigsoort
(车辆类别)应用过滤器来排除所有其他类别。让我们把所有的车按品牌分组,然后数数。
SELECT
merk AS brand,
COUNT(*) AS cars
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto'
GROUP BY
brand
ORDER BY
cars DESC
获胜者是…大众!要查看 Tesla 的排名,我们可以向下滚动,但我们也可以在 Data Studio 中显示我们的结果。
水平条形图 FTW!
我们到了。我们发现泰斯拉排名 29。如果你仔细看,你还会发现“特斯拉汽车公司”。这意味着我们无法在品牌过滤器中进行精确匹配。我们希望所有品牌包含(小写或大写)tesla
。
现在我们统计特斯拉汽车占所有乘用车的百分比。
SELECT
all_cars,
tesla_cars,
ROUND(tesla_cars/all_cars*100,2) AS percentage_tesla_cars
FROM (
SELECT
COUNT(*) AS all_cars,
(
SELECT
COUNT(*)
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
LOWER(merk) LIKE '%tesla%') AS tesla_cars,
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto')
2020 年初,将近 50000 辆特斯拉正在荷兰的街道上漫游。这大约是荷兰所有乘用车的 0.5%。这些数字还没有打动我。
为了回答我们最初的问题(荷兰道路上的特斯拉数量是否呈指数增长?)我们需要在一个时间框架内绘制这些数字。因此,我们使用列Datum_eerste_afgifte_Nederland
,它给出了特定汽车在荷兰首次注册的日期。
从我们的数据中排除许多老前辈(第一辆汽车甚至在大战前就获得了许可,数据质量警报!)我们只看 2008 年及以后的数据。根据维基百科的说法,第一辆特斯拉是在那一年交付给埃隆·马斯克个人的。
SELECT
Datum_eerste_afgifte_Nederland AS date,
CASE
WHEN merk LIKE '%TESLA%' THEN 'TESLA'
ELSE
merk
END
AS brand,
COUNT(*) AS cars
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto'
AND Datum_eerste_afgifte_Nederland >= 20080101
GROUP BY
date,
brand
ORDER BY
date
如果我们在 Data Studio 中研究这个查询的结果,我们会得到一个折线图,其中显示了排名前 20 位的品牌。
有人看到我的特斯拉吗?
由于特斯拉在前 20 名中无处可寻,我们不得不对品牌TESLA
设置一个包含过滤器,以便看到我们期望看到的趋势。
嘣!
那里!我观察到荷兰道路上的特斯拉数量迅速增加,这似乎得到了数据的证实。
深入挖掘
下一步是调查荷兰在全球特斯拉生产供应中的份额。我在维基百科上找到了一些数字,做了一些数据清理,产生了这个小 CSV,我直接把它作为表格上传到 BigQuery:
现在我们可以把这些数字和我们自己的数据联系起来。
WITH
p AS (
SELECT
CAST(year AS string) AS year,
production
FROM
`<project>.RDW_kentekens.production` ),
k AS (
SELECT
CASE
WHEN CAST(Datum_eerste_afgifte_Nederland AS string) LIKE '2014%' THEN '2014'
WHEN CAST(Datum_eerste_afgifte_Nederland AS string) LIKE '2015%' THEN '2015'
WHEN CAST(Datum_eerste_afgifte_Nederland AS string) LIKE '2016%' THEN '2016'
WHEN CAST(Datum_eerste_afgifte_Nederland AS string) LIKE '2017%' THEN '2017'
WHEN CAST(Datum_eerste_afgifte_Nederland AS string) LIKE '2018%' THEN '2018'
WHEN CAST(Datum_eerste_afgifte_Nederland AS string) LIKE '2019%' THEN '2019'
ELSE
NULL
END
AS date,
CASE
WHEN merk LIKE '%TESLA%' THEN 'TESLA'
ELSE
merk
END
AS brand,
COUNT(*) AS cars
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto'
AND Datum_eerste_afgifte_Nederland BETWEEN 20140101
AND 20191231
GROUP BY
date,
brand
HAVING
brand = 'TESLA')
SELECT
date,
brand,
cars,
production,
ROUND(cars/production*100,1) AS percentage_dutch_teslas
FROM
k
LEFT JOIN
p
ON
k.date = p.year
ORDER BY
date DESC
注意粉红线。这是荷兰特斯拉占全球年产量的百分比。2019 年生产的所有特斯拉汽车中,有 8.5%是同年在荷兰获得许可的。对于这样一个小国来说,这是相当大的份额!
好的。接下来让我们关注最畅销的型号,并在 Data Studio 中显示前 10 名。
SELECT
Datum_eerste_afgifte_Nederland AS date,
CASE
WHEN merk LIKE '%TESLA%' THEN 'TESLA'
ELSE
merk
END
AS brand,
Handelsbenaming AS model,
COUNT(*) AS cars
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto'
AND Datum_eerste_afgifte_Nederland >= 20080101
GROUP BY
date,
brand,
model
ORDER BY
date
你好模型 3!
似乎 Model 3 是荷兰最畅销的产品。其他特斯拉车型呢?有没有 2008 年的特斯拉跑车?
有了 24 排,我们有一些清洁工作要做,因为特斯拉没有 24 种不同的型号。我们还可以按日期查询车型,以便搜索我们的 2008 款跑车。
SELECT
Datum_eerste_afgifte_Nederland AS date,
CASE
WHEN merk LIKE '%TESLA%' THEN 'TESLA'
ELSE
merk
END
AS brand,
CASE
WHEN Handelsbenaming LIKE '%MODEL 3%' THEN 'MODEL 3'
WHEN Handelsbenaming LIKE '%MODEL S%' THEN 'MODEL S'
WHEN Handelsbenaming LIKE '%MODEL X%' THEN 'MODEL X'
WHEN Handelsbenaming LIKE '%R__DSTER%' THEN 'ROADSTER'
ELSE
NULL
END
AS model,
COUNT(*) AS cars
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto'
AND merk LIKE 'TESLA%'
AND Datum_eerste_afgifte_Nederland >= 20080101
GROUP BY
date,
brand,
model
HAVING
model IS NOT NULL
ORDER BY
cars DESC
特斯拉玩具十年
首批跑车于 2009 年第四季度抵达荷兰。这些司机是一些真正的早期采用者。让我们看看该季度的前四位车主是否仍然驾驶同一辆车!
SELECT
Datum_eerste_afgifte_Nederland AS date,
Datum_tenaamstelling AS ownership_date,
CASE
WHEN merk LIKE '%TESLA%' THEN 'TESLA'
ELSE
merk
END
AS brand,
CASE
WHEN Handelsbenaming LIKE '%MODEL 3%' THEN 'MODEL 3'
WHEN Handelsbenaming LIKE '%MODEL S%' THEN 'MODEL S'
WHEN Handelsbenaming LIKE '%MODEL X%' THEN 'MODEL X'
WHEN Handelsbenaming LIKE '%R__DSTER%' THEN 'ROADSTER'
ELSE
NULL
END
AS model,
kenteken AS license_plate,
CASE
WHEN Datum_eerste_afgifte_Nederland = Datum_tenaamstelling THEN 'TRUE'
ELSE
'FALSE'
END
AS first_owner
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto'
AND merk LIKE 'TESLA%'
AND Datum_eerste_afgifte_Nederland > 20080101
GROUP BY
date,
ownership_date,
brand,
model,
license_plate
HAVING
model IS NOT NULL
AND model = 'ROADSTER'
AND date < 20100101
ORDER BY
date
我们有赢家了!这个坏男孩(或女孩)仍然像 2009 年一样开车。
另一辆特斯拉呢?他们还被第一个主人许可吗?我们会找到答案的。
SELECT
brand,
model,
ROUND(COUNT(CASE
WHEN first_owner = 'TRUE' THEN 1
ELSE
NULL
END
)/ COUNT(first_owner)*100,1) AS percentage_first_owners
FROM (
SELECT
Datum_eerste_afgifte_Nederland AS date,
Datum_tenaamstelling AS ownership_date,
CASE
WHEN merk LIKE '%TESLA%' THEN 'TESLA'
ELSE
merk
END
AS brand,
CASE
WHEN Handelsbenaming LIKE '%MODEL 3%' THEN 'MODEL 3'
WHEN Handelsbenaming LIKE '%MODEL S%' THEN 'MODEL S'
WHEN Handelsbenaming LIKE '%MODEL X%' THEN 'MODEL X'
WHEN Handelsbenaming LIKE '%R__DSTER%' THEN 'ROADSTER'
ELSE
NULL
END
AS model,
kenteken AS license_plate,
CASE
WHEN Datum_eerste_afgifte_Nederland = Datum_tenaamstelling THEN 'TRUE'
ELSE
'FALSE'
END
AS first_owner
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto'
AND merk LIKE 'TESLA%'
AND Datum_eerste_afgifte_Nederland > 20080101
GROUP BY
date,
ownership_date,
brand,
model,
license_plate
HAVING
model IS NOT NULL
ORDER BY
date)
GROUP BY
brand,
model
ORDER BY
percentage_first_owners DESC
原来特斯拉车主都挺喜欢自己的车的。
好了,现在结束。仍然有很多数据可以利用,但我会把荷兰特斯拉目录价格的发展留给你(根据 RDW)。
SELECT
Datum_eerste_afgifte_Nederland AS date,
CASE
WHEN merk LIKE '%TESLA%' THEN 'TESLA'
ELSE
merk
END
AS brand,
CASE
WHEN Handelsbenaming LIKE '%MODEL 3%' THEN 'MODEL 3'
WHEN Handelsbenaming LIKE '%MODEL S%' THEN 'MODEL S'
WHEN Handelsbenaming LIKE '%MODEL X%' THEN 'MODEL X'
WHEN Handelsbenaming LIKE '%R__DSTER%' THEN 'ROADSTER'
ELSE
NULL
END
AS model,
ROUND(AVG(catalogusprijs)) AS price
FROM
`<project>.RDW_kentekens.kentekens_2020`
WHERE
Voertuigsoort = 'Personenauto'
AND merk LIKE 'TESLA%'
AND Datum_eerste_afgifte_Nederland > 20080101
GROUP BY
date,
brand,
model
HAVING
model IS NOT NULL
ORDER BY
date DESC
荷兰每年每辆特斯拉车型的平均价格(欧元)
注:我每天都在学习,欢迎在评论区添加您的意见和建议,或者通过 LinkedIn 联系我。
风暴之眼
我们正处于新冠肺炎风暴的中心,让我们用手头的数据来绘制我们希望在未来航行的航线。
从焦虑到行动
我坐在法国阿尔卑斯山的书桌后面,透过窗户看着正在生长的绿草、明黄色的连翘和发芽的樱桃树,它们标志着春天的第一个前提。尽管我们大多数亲密的朋友和同事都或多或少地感染了新冠肺炎病毒,但我发现我的情绪每天都被社交媒体上铺天盖地的坏消息所挫伤。
如果我们真的在风暴的中心,让我们利用手头的数据,绘制出我们希望在天气变得更加晴朗时航行的路线。
鉴于互联网对无支持意见、自私贡献和集体焦虑的不断放大,关注数据驱动决策的需求从未如此迫切。
我们客户的数据科学项目处于待命状态,我们的营销漏斗正在冒烟,我不得不思考,阳光照射在窗台上是否预示着更黑暗的时代即将到来。数据在说什么,我们如何从展现在我们眼前的数据中框定我们能学到什么,不能学到什么?
2020 年 1 月 22 日,新加坡樟宜国际机场,卫生官员用热扫描仪对来自中国的旅客进行筛查。图片来源:罗斯兰·拉赫曼/盖蒂图片社。
Covid19 催生了有趣的数据科学项目
对文献的快速回顾揭示了组织如何利用数据科学来解决当前危机的几个故事:
- 短短三个月前,蓝点人工智能平台在中国武汉发现了一群“不寻常的肺炎”病例。
如果不是最严重的,新型冠状病毒(新冠肺炎)是袭击我们绿色…
bdtechtalks.com](https://bdtechtalks.com/2020/03/09/artificial-intelligence-covid-19-coronavirus/)
人工智能如何加速药物研究
- 百度开发了一种基于人工智能的检测系统,该系统结合了计算机视觉和红外传感器,每分钟可筛查多达 200 人的潜在感染病例。
百度的人工智能辅助红外传感器每分钟筛查多达 200 人的潜在感染病例。图片来源:南华早报。
不可预测和快速传播,新冠肺炎冠状病毒已经从早期在中国的集中传播到…
www.technologyreview.com](https://www.technologyreview.com/s/615342/how-baidu-is-bringing-ai-to-the-fight-against-coronavirus/)
- 阿里巴巴推出了一个人工智能系统,它可以识别胸部 CT 扫描中的病毒,速度比人眼快 45 倍
[## 阿里巴巴的新人工智能系统可以在几秒钟内检测到冠状病毒,准确率达到 96%
中国科技巨头阿里巴巴最近开发了一种用于诊断新冠肺炎(冠状病毒)的人工智能系统。阿里巴巴的…
thenextweb.com](https://thenextweb.com/neural/2020/03/02/alibabas-new-ai-system-can-detect-coronavirus-in-seconds-with-96-accuracy/)
- 谷歌的 DeepMind 人工智能研究实验室正在利用深度学习来寻找与新冠肺炎相关的蛋白质折叠的新信息。
科学界已经为应对最近的新冠肺炎疫情而振奋起来,建立在几十年的基本…
deepmind.com](https://deepmind.com/research/open-source/computational-predictions-of-protein-structures-associated-with-COVID-19)
- Kaggle 与几个领先的人工智能机构合作,发布了新冠肺炎开放研究数据集挑战,以解决由NASEM/世卫组织针对当前危机开发的十个基线问题
预测世界各地每日新冠肺炎传播
www.kaggle.com](https://www.kaggle.com/c/covid19-global-forecasting-week-1)
解释 Covid19 数据缺少什么
尽管这些例子很有希望,但分析方法的四个基本步骤可以帮助我们更好地理解数据在说什么,以及这些数字除了沉默之外提供了什么。
- 背景如何帮助我们理解问题的根源?
- 我们怎样才能保证手头数据的质量?
- 解决问题的合适方法是什么?
- 我们如何将数据转化为集体行动?
数据科学不是处理数字,而是理解感知、预测和评估如何用于从数据中创造可操作的见解。
#1 挖掘当前背景,揭示我们试图解决的问题的根源
这种新型冠状病毒爆发造成的问题基本上是医疗、经济还是社会福祉问题?
在我们的数据管道之外,这些问题是相互关联的,每一个都导致了其他问题的严重性。我们需要探索为什么某些人群比其他人面临更大的风险,为什么缺乏检测和医疗设施,为什么我们的经济和社会系统难以适应这一挑战。
一旦我们确定了所研究问题的性质,我们就可以寻找数据集来规划个人或集体行动的过程。我们可以选择遵守或忽略公共政策和建议,或者我们使用这些数据来试图推动我们的家庭和社区为共同利益而行动。在这两种情况下,决策环境都是随机的,而不是确定的,在我们处理的标记数据中找不到“答案”。我们能做的最好的事情就是利用数据科学来提供概率框架,从而降低决策过程中的风险、模糊性和不确定性。
#2 限定,而不是量化手头的数据
世卫组织、各国政府和地方当局提供的关于新冠肺炎全球传播的大量统计数据有多大相关性?关于感染、住院和发病率的数据是否是使用允许我们从一个国家到另一个国家得出有意义的结论的标准收集的?鉴于各大洲在遏制、检测和治疗策略上的差异,我们在态度、行为和对危机的认知方面缺少哪些需要考虑的数据?
正如 Kenneth Fields 和 Amanda Makulec 所指出的,数据呈现的形式也是一个基本问题。通过交流变量、数据集和图表,我们影响了公众对问题的看法。
就制图学而言,我们生活在一个惊人的时代。技术允许并积极支持快速…
www.esri.com](https://www.esri.com/arcgis-blog/products/product/mapping/mapping-coronavirus-responsibly/) [## 在你创建另一个关于新冠肺炎的图表之前,要考虑十点
总结一下——# viz responsible;这可能意味着根本不在公共领域发布你的可视化。
medium.com](https://medium.com/nightingale/ten-considerations-before-you-create-another-chart-about-covid-19-27d3bd691be8)
这些问题切中了数据可视化的核心:数据的每种表示都受到其上下文、表示技术、元数据的使用和隐式叙述的制约。因为数据集从来都不是客观的,我们需要了解这些数字在多大程度上阐明了我们试图解决的问题,这些数据如何反映问题的演变,以及我们是否有足够的信息来预测或影响我们的行动/不行动的结果。
如果人口的地理分布差异很大,那么按地区绘制病例数最多会产生误导。图片来源:肯尼斯·菲尔兹
如果人口的地理分布差异很大,那么按地区绘制病例数最多会产生误导。图片来源:肯尼斯·菲尔兹
#3 选择适当解决问题的方法
在这里,数据驱动决策的优势不可低估,尽管一些世界领导人倾向于希望这场危机消失。在数据科学中,我们了解到选择适当的方法取决于决策环境的性质、手头数据的类型、可用参数的数量、资源限制以及所需的准确度、精确度和召回率。然而,在解决新冠肺炎疫情问题时,贸易知识的核算至关重要,因为我们不能忽视对症状、病理、反应时间和协议的诊断和治疗关注。
这种对实践智慧的需求表明了数据科学的局限性,人类智慧的广度不能被简化为简单的算法,就像人类决策者不能被描述为冷血的计算机器一样。应对危机需要对社会可接受的行动方案进行伦理选择:谁最终负责选择适当的行动方案:个人、医疗行业还是政府?安装一个监控国家可以在多大程度上牺牲个人自由?在拯救国家经济的过程中,我们应该牺牲大多数人来保护少数特权者吗?无论是在国家还是社区层面,孤立是否比全球应对疫情更好?应对危机的适当方法必须权衡对金融价值的暂时考虑和对人类价值的长期需求。
我们不能忽视对症状、病理、反应时间和方案的诊断和治疗关注。图片来源:《柳叶刀》
#4 将数据转化为集体行动
如果数据和行动之间没有直接的联系,我们必须探索启发法如何形成感知、预测和评估,从而引导决策者或根据数据采取行动。在个人层面上,为什么人们对每天发布的大量数据反应如此不同?如果互联网有助于信息的即时和全球流通,为什么我们各国对危机严重性的看法会有如此多的差异?为什么新加坡和中国采取了系统检测的行动,而英国和法国只愿意承认那些明显患病的人?
当荷兰选择反其道而行之,而美国正在考虑让人们重返工作岗位时,怎么会有这么多国家选择实施国家隔离?为什么政客们要为他们“处于战争状态”的决定辩护,恳求社会团结起来对抗“人类共同的敌人”?我们如何利用认知偏见和行为科学来鼓励组织和个人采取社会可接受的行为?今天比以往任何时候,我们贡献的价值不在于分析屏幕上的数据,而在于提供能够引发变化的有意义的故事。
许多人以前写过关于决定性时刻的本质——复杂的社会和经济系统可以明显向更好或更坏的方向演变的短暂时刻。我们正生活在这样一个时刻,我们的医疗、经济和社会体系确实有可能发生变化。正如尤瓦尔·诺亚·哈拉里评论的那样,我们无法避免在暴风雨中航行,但我们可以选择如何度过难关,以及一旦天气变得更加晴朗,我们将选择哪条航线航行。
人类现在正面临一场全球性危机。也许是我们这一代人最大的危机。决策人和…
www.ft.com](https://www.ft.com/content/19d90308-6858-11ea-a3c9-1fe6fedcca75)
坐在风暴中心的一个优势是我们对自由时间的错觉——如果用来看数据,可以帮助我们更明智地导航到未来。
Lee Schlenker 是 BAI 的负责人,也是商业分析和社区管理的教授。
了解冠状病毒的最新情况(新冠肺炎)
关注中型冠状病毒博客或注册时事通讯阅读来自中型和跨网络的专家支持的冠状病毒故事,例如:
没有人知道有多少人有新冠肺炎。
从斯蒂芬·库里对安东尼·福奇博士的采访中获得了 4 点有用的信息。
脸书数据分析师访谈
脸书的数据分析师在许多不同的团队中工作,并且是高度跨职能的
图片来自脸书
目录
介绍
脸书是总部位于门洛帕克的最大的社交媒体公司之一,每月活跃用户约为 25 亿[1]。这意味着每天要处理超过 25 亿条内容和超过 500 的数据[2]。考虑到如此庞大的数字,它目前拥有由数千名工程师、数据科学家和数据分析师组成的大约 45,000 名员工是有道理的[3]。
在这篇文章中,我们将深入了解脸书的数据分析师,包括所需的技能和资格、薪酬、面试流程、技巧和面试问题示例。
数据分析师角色
脸书利用其数据来改善和优化你能想到的一切,从产品到营销策略到内部运营等等。因此,脸书的数据分析师在许多不同的团队中工作,并且是高度跨职能的。然而,一般来说,脸书的数据分析师利用某种数据来完成各种项目,如构建可视化和仪表板,提供分析支持,和/或进行探索性分析。
所需技能和资格
同样,所需的技能和资格取决于团队,但它们通常遵循相似的模式:
- 2-5 年以上的定量分析经验,具有在分布式计算平台(如 Hive/Hadoop/Redshift 或类似平台)的大型数据集上使用 SQL 的开发经验
- 2-5 年以上使用 Tableau、Domo 或类似工具开发数据可视化和可操作报告仪表板的经验
- 有处理和分析数据集的经验,能够解释它们以做出商业决策
- 与产品和领导团队交流分析结果以影响产品整体战略的经验
脸书的数据分析团队
在脸书,你可以为数百个团队工作(毫不夸张),但以下是一些目前正在招聘数据分析师的团队示例:
- 数字版权运营
- 人员分析
- 消费者需求及意见调查
- 商业伙伴关系
- 可持续发展团队
- 合法的
脸书的数据分析师 vs 数据科学家
通常,数据分析师的工作和数据科学家的工作之间存在混淆。数据分析师分析数据以发现趋势,并经常创建数据的可视化表示,以与公司分享他们的见解。他们通常需要知道如何使用某种工具(如 Tableau)查询数据和可视化数据。
脸书的数据科学家也做数据分析师做的事情,但做得更多。数据科学家需要更多的技能和知识,包括计算机科学、数学和统计学,通常会承担更复杂的项目,包括机器学习建模、数据争论等。
此外,在脸书还有两个以数据为中心的分析角色。增长市场分析师和产品分析师的角色类似于脸书的数据分析师角色,但分别在增长和产品指标上更具团队针对性。
当面试数据分析师角色时,如果你的技能更适合这些角色,招聘人员可能会将你调到产品分析师、数据科学家或增长市场分析师团队的另一个招聘人员,这是很常见的。许多候选人会意识到数据科学的角色比他们想要的更面向业务。一个候选人也可以在脸书同时面试多个职位。
面试过程
数据分析师访谈流程通常需要 2-3 周,但有时会持续一个多月。该过程通常有两个主要部分:
1.初始电话屏幕
通常有两个初始电话屏幕,每个屏幕需要大约 30-45 分钟。
A .与招聘人员的电话筛选
第一次电话面试通常由招聘人员主持,目的是让受访者更好地了解角色和团队,面试官也能更好地了解受访者。通常招聘人员会问你过去的经历,为什么是脸书,他们可能很少问一些技术问题(SQL 问题)。招聘人员只是希望看到你对公司有真正的兴趣,你是一个很好的沟通者,并且没有明显的危险信号。
B .与招聘经理的电话筛选
第二次电话面试由招聘经理进行,也会询问你的经历,并给你一些基于情景的问题。
例题:
- 告诉我一次你带着某种期望开始分析,然后得到意想不到的结果的经历
- 告诉我们一个你管理过的项目,并从头到尾描述一下。
2。现场面试
电话筛选之后是现场面试,通常包括四轮 30 分钟的面试:
A .技术回合:SQL
技术回合的 SQL 部分通常是成对的编码练习——你应该期待面试官给你一些数据表和问题来解决。
想用脸书的解决方案练习现实生活中的 SQL 问题吗?查找更多关于 面试查询 。
例题:
- 给定一个帐户状态表,编写一个查询来获取今天关闭但昨天打开的帐户的数量。
B .技术回合:分析研究
第二轮也是技术面试,是分析研究。这是一个开放式的与数据相关的案例,面试官会带你看一遍。你需要分析案例,做出假设,并验证它。这个案例可能涉及到很多东西,比如数据建模、业务度量和仪表板报告。
C-D“适合”测试
在最后两轮面试中,你会被问一轮行为和情景面试问题,以检查你的工作风格、个性和态度。他们想确保你能很好地融入相关的 given 和公司的整体文化。
成功的秘诀
- 确保你提出了澄清性问题,尤其是在分析性案例研究中。面试官通常不会提供你成功所需的所有信息。他们希望看到你的思维合乎逻辑,并提出正确的问题。
- 如果提供的信息有遗漏,面试官没有给出更多,确保你陈述了你的假设。
- 说出你的想法——解释你的思考过程,这样你就可以展示你的思考方式。就像你需要在高中数学中展示你的作品一样,展示你的思维过程与获得正确答案同样重要。
- 了解脸书文化 五大核心价值观 。在整个面试过程中,他们会看到你在过去的经历中展示了这些价值观。
面试问题示例
- 如果没有重复项,您会使用 UNION 还是 UNION ALL?
- 创建视图需要在数据库中存储吗?
- 给我一个例子,当你处理一个大型数据库,并能够从中获得深刻见解?
- 如何能察觉 Instagram 故事中用户的下降?
- 你如何衡量脸书活动的成功?你能提出一个从中获利的计划吗?
想用脸书的解决方案来练习现实生活中的 SQL 问题吗?查找更多关于 面试查询 。
参考
[1] 脸书 2019 年第四季度财报
[3] 脸书向其 45000 名员工发放 10000 美元,CNN
原载于 2020 年 4 月 8 日https://www.interviewquery.com。
脸书数据工程师面试
图片来自 Unsplash
介绍
脸书可以说是世界上最受欢迎的社交媒体网络,全球活跃用户超过 20 亿。因此,脸书积累并存储了大量用户数据,使其成为任何希望在数据科学领域发展的人的宝库,这已经不是什么新闻了。无论是数据科学家、数据分析师还是数据工程师,无论你的数据科学职业道路如何,脸书都将为你提供只有少数公司才能匹敌的规模。
作为脸书的一名数据工程师,你不仅能接触到任何数据工程师都梦想不到的最先进的工具和平台,还能看到你的工作、公司发展和用户满意度之间的直接联系。
需要一份完整的数据工程面试问题清单?查看我们的数据工程面试终极指南。
脸书的数据工程师角色
图片来自 Pixabay
在任何企业数据分析团队中,数据工程师的角色范围从管理、优化和监督数据检索系统到构建复杂和健壮的数据管道和算法。用更专业的术语来说,他们的工作包括发现数据集中的趋势,开发增强数据收集的算法,编译数据库系统,以及编写复杂的查询来提炼数据集。
“脸书的数据工程师是支持脸书每个产品团队的核心技术功能紧密集成团队的一部分。它们与软件工程、设计、产品管理、数据科学、研究等一起帮助产品决策”。
在脸书,数据工程师通过构建和管理可扩展的数据管道和框架,设计供内部业务使用的数据仓库,以及利用大数据技术将原始和复杂的数据转化为可操作的见解,从而为更好的业务决策奠定基础。
所需技能
脸书的数据工程师职位需要久经考验的技能和丰富的行业经验。因此,脸书选择只雇佣在数据仓库领域有至少 4 年行业经验的高素质申请人。
其他最低资格包括:
- 计算机科学、数学、物理或其他技术领域的学士学位。
- 在编写复杂 SQL、数据框架 API、开发定制 ETL、实施和维护方面有 4 年以上的经验。
- 丰富的 MapReduce 或 MPP 系统行业经验。
- 对数据架构、机器学习方法、模式设计和维度数据建模有深刻的理解。
- 具有面向对象编程语言(Java、Python、C++、Scala、Perl 等)的实践经验。)
- 在分析大型数据集以确定交付成果、差距和不一致方面的经验。
脸书数据工程师团队的类型
脸书是一家非常大的以产品为基础的公司,有许多部门、团队和分支机构。作为一家数据驱动型公司,脸书非常依赖数据来做出明智的商业决策。
数据工程师负责数据收集和数据完整性,他们与内部团队跨职能合作帮助促进从数据到合理决策过程的飞跃。因此,脸书的数据工程师在团队中工作,他们的具体角色可能会因团队角色而有所不同。
根据团队的不同,脸书的数据工程师可能包括:
**脸书应用货币化(FAM)团队:**职责包括设计和构建强大的数据基础、基础设施和架构,帮助分析、产品、工程和 FAM 领导层做出更好的决策。他们还与数据基础设施团队密切合作,对现有数据和 ETL 管道提出改进和修改建议,并向多功能小组和领导层传达策略和流程。
**数据仓库团队:**ream 中的角色包括在生产中设计/构建/启动新的 ETL 流程和数据模型,管理数据仓库计划,与工程师、产品经理和产品分析师合作以了解数据需求,以及与数据基础设施团队合作以筛选基础设施问题并推动解决方案。
**诺维区块链数据工程团队:**该团队的数据工程师设计并实现可扩展的数据仓库,整合定性和定量的研究数据,在生产中构建并启动新的 ETL 流程,识别、收集用户交互数据和服务器事件数据,并将其转换为可扩展的 schema 模型。他们还与产品经理、数据科学家、软件工程师、经济研究人员、合规和风险管理人员密切合作,构建独特、直观的产品来解决挑战性问题。
**脸书视频分发:**角色包括为新数据和 ETL 管道开发最佳数据处理架构和系统,并对现有数据和 ETL 管道提出改进和修改建议。与脸书内部团队合作,了解他们的需求,并在数据工程解决方案的框架内将这些需求联系起来。
**合作伙伴关系中央系统、数据和工具团队:**职责包括构建和维护高效可靠的数据管道,以移动和转换数据,构建提供直观分析的模型,以及跨职能协作以构建问题、收集数据并提供业务影响建议。
**家庭生态系统:**一般角色包括,与数据基础设施、产品软件工程和产品管理团队合作,开发和验证架构驱动的端到端分析开发产品、工具和基础设施堆栈。其他角色包括为新数据和 ETL 管道/应用程序构建最佳数据处理框架,为数据和度量洞察构建可视化,以及在团队内部和不同领导级别之间有效地传达战略。
面试过程
图片来自 Unsplash
脸书数据工程师的面试和其他脸书技术职位一样,遵循标准的面试流程。面试流程从最初的招聘人员电话面试开始,会对角色和面试流程进行解释。在这之后,是一个一小时长的技术电话屏幕,涉及 SQL 和 Python/Java 编码。通过技术筛选后,将安排由 3 到 4 轮连续面试组成的现场面试。
初始屏幕
这是一个 30 分钟长的与招聘人员或人力资源的电话面试。在这个电话交谈中,招聘人员可以解释更多关于工作角色的信息,以及随后在面试过程中的期望。
技术屏幕
脸书德技术面试是一个 1 小时的电话面试,涉及 SQL 和 Python/Java(取决于你的编程语言偏好)编码使用“Coderpad”。问题数量通常在 8 到 10 个左右,在 SQL 和 Python 之间平均分配(5 个 SQL/5 个 Python ),还有一个针对 SQL 和 Python 的算法问题。
注意:您将始终受到时间的限制(最多 1 小时。).这有助于在解决问题时,尤其是在编码部分,与面试官清楚地交流你的思维过程。
现场面试
脸书数据工程师面试流程的最后一个阶段是现场面试,包括 3 个完整的面试(2 个 ETL 回合,1 个数据建模回合),1 个行为回合,以及中间的午餐休息。
除了行为面试之外,每隔一轮面试都会有一个产品感元素,测试候选人在关键运营指标上的产品感知识。您可能会遇到这样的问题:“对于 x 场景,捕捉哪些指标是好的?”,“描述一个你不同意利益相关者的情况,你是如何处理的?”。关于 ETL 和建模的问题是基于案例的,可能需要一些编码。
现场面试流程的细分如下:
- ETL 回合:这一回合包括编写类似标准脸书 ETL 代码的 SQL 和 python/java 代码。
- **建模回合:**这一回合混合了 SQL 和 Python,问题涉及基于业务场景的数据模型问题
- **行为:**这次面试评估候选人的沟通技巧,以及他们传达自己想法和观点的能力。努力准备你自己的故事,例如,一个关于你如何在一个项目中取得成功的故事,或者关于你处理一次重大失败的故事,或者关于你如何克服一个项目中的特殊挑战的故事。
**注意:**在疫情时代之前,这种采访是在脸书大楼现场进行的,但由于疫情,每次采访都是在网上进行的。
注意事项和提示
图片来自 Unsplash
脸书数据工程师面试流程旨在评估候选人利用大数据为增长提供可操作的业务见解的能力。脸书使用标准化的问题来测试候选人对所有脸书产品的数据架构和框架以及关键运营指标的深入了解。
另外,请记住,脸书在他们所有的面试过程中都使用标准化的问题,尤其是编码面试。试着一边回答问题一边解释自己的思维过程;向面试官清楚地表达你是如何以及为什么使用你所用的方法。
脸书数据工程师面试涵盖了数据科学领域的长度和宽度,包括建模、可视化、系统设计和从数据工程角度的端到端解决方案。问题可以跨越:
- 数据结构和算法
- 编写 SQL 查询来解决现实世界的问题
- 数据库性能调优
- 数据管道设计
- 业务案例的度量和可视化解决方案设计
- 统计和建模
- 以前的项目经验
- Spark、EMR 等大数据解决方案
- Tableau、Excel 等报告工具
- 为假设的或现有的脸书产品构建数据平台或架构。
练习大量 SQL、Python/Java、建模和算法问题,包括列表、数组(字符串和子字符串)、点积、连接、子查询、聚合函数和分组依据。尝试在白板上编码,熟悉现场面试体验。
想了解更多关于数据工程师的信息吗?查看我们的 数据工程师面试问题指南 。
脸书数据工程师面试问题
- 给定一个整数数组,我们想确定这个数组是否是单调的(非减/非增)。
示例:
1 2 5 5 8->正确
9 4 4 2 2->正确
1 4 6 3->假
1 1 1 1 1 1->真
- 设计一个仪表板来突出用户行为的某个方面
- 数据库视图是否占用磁盘空间。
- 什么是永无止境的循环?
- SQL 中用于选择非重复项的术语是什么?
- 从数组中给定的一组元素中找出最大数(不使用 max 函数)
- 求数组元素集合的最小绝对差。
- 在提供的 ERD 中为几个表创建 DDL(表和外键)。ERD 至少包含一个多对多关系。
- 递归解析一个字符串,其长度可以是 1 或 2 个字符。
- 仅使用 SQL 执行合并排序。
- 如果被授予“使其工作”的全部权限,将带有副本的大型数据集导入到仓库中,同时满足商业智能设计者对查询速度的要求。
- 查询多对多关系,同时不违反事实表的粒度。
- 给定一个数字和一个数组,找出列表中任意两个数字之和等于给定的数字。
- 设计一个实验来测试一个特性是否能激发对话。
- 描述你的项目。
- 给定一个原始数据表,您将如何编写 SQL 来执行 ETL 以将数据转换成所需的格式?
- 如何评价在线视频的受欢迎程度?
- 给定一个 IP 地址作为输入字符串,验证它并返回 True/False
- 计算图中每个节点的邻居。输入图是一个多维列表
- 给定电影观看时间的元组列表,找出观众观看了电影的多少分钟,例如[(0,15),(10,25)]。观众看了 25 分钟的电影。
- 如何删除列表中的重复项?
- 给定一个多步骤产品特性,编写 SQL 来看看这个特性做得有多好(加载时间,步骤完成%)。然后使用 Python 随着新值的流入不断更新平均步骤时间,因为要在内存中存储的值太多了
- 如何连接两个表,而左边的表中的所有信息都保持不变?
- 如果你想把一个表和两个表连接起来,左边一个和右边一个匹配,你会用什么运算符?
- SQL 中的 ORDER BY 命令如果没有设置的话会自动设置成什么格式?上升还是下降?
- 当你想在数据库中删除或添加一列时,你会使用什么命令?
- 你有一个二维的朋友数组,比如[[A,B],[A,C],[B,D],[B,C],[R,M],[S],[P],[A]]
- 写一个函数,创建一个字典,记录每个人有多少朋友。人可以有 0 到很多朋友。然而,不会有类似[A,B]和[B,A]的重复关系,也不会有超过两个人处于一段关系中
感谢阅读
- 如果你有兴趣提高你的数据科学技能,请查看 面试查询 !
- 查看我的 Youtube 频道 获取更多面试指南,以及解决问题的技巧&。
原载于 2020 年 8 月 31 日 https://www.interviewquery.com。
陌生回归算法家族
介绍一些隐藏的回归方法
简单的线性回归和逻辑回归通常是人们在机器学习旅程中学习的第一个算法。由于它们的流行,许多初学者甚至认为它们是唯一的回归形式。然而,有无数的回归算法可以用来建立 ML 模型。
在本文中,我们将讨论一些常用的回归算法,即多项式回归,逐步回归,套索回归,岭回归和弹性网回归。
多项式回归算法
如果自变量的幂大于 1,则回归方程是多项式回归方程。当线性回归线不能恰当地拟合数据时,即模型欠拟合或过拟合数据时,使用多项式回归。
图片来自 Adafruit 博客
为了避免这种情况,我们需要增加模型的复杂性。为了生成高阶方程,我们可以添加原始特征的幂作为新特征。多项式回归算法的形式为:
在这种回归技术中,最佳拟合线不是直线。而是一条符合数据点的曲线。这条曲线是二次曲线,比直线更适合数据。
逐步回归算法
逐步回归是一种拟合回归模型的方法,其中预测变量的选择是通过自动程序进行的。在每一步中,基于一些预先指定的标准,考虑将一个变量添加到解释变量集或从解释变量集中减去,并查看哪一个具有最低的 p 值。
图片来自科学指导
这里,p 值或概率值是在假设零假设正确的情况下,获得至少与测试期间实际观察到的结果一样极端的测试结果的概率。
这种建模技术的目的是用最少数量的预测变量最大化预测能力。
Lasso 回归算法
Lasso(最小绝对收缩和选择运算符)是一种回归分析方法,它执行变量选择和正则化,以提高其生成的统计模型的预测精度和可解释性。
图片由 Saptashwa Bhattacharyya 从走向数据科学
与岭回归不同,套索回归将系数缩小为零(正好为零),这无疑有助于特征选择。该算法在数学上表示为:
这也是一种正则化方法,使用 l1 正则化。套索回归的假设与最小二乘回归相同,只是不假设正态性。
岭回归算法
数据分析师在建立回归模型时面临的最大问题之一是数据存在多重共线性。多重共线性是独立变量高度相关时出现的情况。当我们对数据应用岭回归时,就是这种情况。
岭回归算法背后的主要思想是找到一条也不符合训练数据的新直线。换句话说,我们引入了一个小偏差,使新的线与数据相适应。这是一种缩小系数值并使用 l2 正则化的正则化方法。
其中,β是系数,λ是收缩参数。岭回归通过收缩参数λ解决了多重共线性问题。该算法的等式如下所示:
ElasticNet 回归算法
ElasticNe 回归是一种正则化的回归方法,它线性地结合了套索法和岭法的 L1 和 L2 罚函数。当有多个相关的特征时,弹性网是有用的。
图片来自I2 教程
在变量高度相关的情况下,ElasticNet 回归鼓励群体效应。除了设置和选择λ值,弹性网还允许我们调整 alpha 参数,其中𝞪 = 0 对应于山脊,𝞪 = 1 对应于套索。这些回归技术的应用应该考虑到数据的条件。
就这样,我们来到了本文的结尾。我希望这能帮助你对不同的回归算法有一个直觉。我们将在后面的文章中研究这些算法。如果你有任何问题,或者如果你认为我有任何错误,请联系我!您可以通过邮箱或 LinkedIn 与我联系。
神经网络优化的迷人的无梯度方法
由作者创建。
忘记亚当,阿达格勒,SGD
梯度下降是机器学习中最重要的思想之一:给定一些要最小化的成本函数,算法迭代地采取最大向下斜率的步骤,理论上在足够次数的迭代后到达最小值。梯度下降法由柯西在 1847 年首次发现,但在 1944 年 Haskell Curry 对非线性优化问题进行了扩展,它已被用于各种算法,从线性回归到深度神经网络。
虽然梯度下降及其以反向传播形式的再利用是机器学习中最大的突破之一,但神经网络的优化仍然是一个未解决的问题。互联网上的许多人甚至愿意宣称“梯度下降很糟糕”,虽然这可能有点远,但梯度下降确实有很多问题。
- 优化者会陷入足够深的局部极小值。不可否认,有时有聪明的解决方案可以避开这些问题,比如动量,它可以把优化者带到大山丘上;随机梯度下降;或者批量标准化,平滑误差空间。然而,局部最小值仍然是神经网络中许多分支问题的根源。
由作者创建
- 因为优化器如此受局部极小值的诱惑,即使它设法摆脱它,也需要非常非常长的时间。梯度下降法通常是一种冗长的方法,因为它的收敛速度很慢,即使是对大数据集进行调整,如批量梯度下降法。
- 梯度下降对优化器的初始化特别敏感。例如,如果优化器在第二个局部最小值附近而不是第一个局部最小值附近初始化,性能可能会好得多,但这都是随机确定的。
- 学习率决定了优化器的信心和风险;设置太高的学习率可能会导致它忽略全局最小值,而太低的学习率会导致运行时崩溃。为了解决这个问题,学习率随着衰减而发展,但是在决定学习率的许多其他变量中,选择衰减率是困难的。
- 梯度下降需要梯度,这意味着除了不能处理不可微函数之外,它还容易出现基于梯度的问题,如消失或爆炸梯度问题。
当然,梯度下降已经得到了广泛的研究,并且有许多提议的解决方案——一些是 GD 变体,另一些是基于网络架构的——在某些情况下有效。仅仅因为梯度下降被高估了,并不意味着它不是目前最好的解决方案。使用批处理规范化来平滑错误空间或选择 Adam 或 Adagrad 这样复杂的优化器等常见知识不是本文的重点,即使它们通常性能更好。
相反,本文的目的是揭示一些更模糊和确定有趣的优化方法,这些方法不符合基于梯度的标准,就像任何其他用于提高神经网络性能的技术一样,在某些情况下工作得非常好,而在其他情况下则不太好。然而,不管它们在特定任务中表现如何,它们都是迷人的、有创造力的,并且是机器学习未来的一个有前途的研究领域。
粒子群优化是一种基于群体的方法,定义了一组探索搜索空间的“粒子”,试图找到一个最小值。粒子群优化算法迭代地改进了某一质量指标的候选解。它通过拥有一群潜在的解决方案(“粒子”)并根据简单的数学规则(如粒子的位置和速度)移动它们来解决问题。每个粒子的运动受其认为最佳的局部位置的影响,但也会被搜索位置中的最佳已知位置(由其他粒子发现)所吸引。从理论上讲,群体会经过几次迭代来寻找最佳解决方案。
来源:维基媒体。图片免费分享。
粒子群算法是一个迷人的想法——它对初始化的敏感度远低于神经网络,粒子之间在某些发现上的交流可能被证明是一种非常有效的搜索稀疏和大面积区域的方法。
因为粒子群优化不是基于梯度的(喘气!),它不要求优化问题是可微的;因此,使用 PSO 来优化神经网络或任何其他算法将允许在选择激活函数或其他算法中的等效角色时具有更大的自由度和更小的敏感性。此外,它对要优化的问题几乎不做任何假设,并且可以搜索非常大的空间。
可以想象,基于群体的方法在计算上比基于梯度的优化器要昂贵得多,但不一定如此。因为这种算法是如此的开放和非刚性——就像基于进化的算法一样,人们可以控制粒子的数量、它们移动的速度、全球共享的信息量等等;就像在神经网络中调整学习速率一样。
代理优化是一种优化方法,试图用另一个成熟的函数来模拟损失函数,以找到最小值。该技术从损失函数中采样“数据点”,这意味着它尝试不同的参数值( x )并存储损失函数的值( y )。在收集了足够数量的数据点之后,对收集的数据拟合一个替代函数(在这种情况下是一个 7 次多项式)。
由作者创建。
因为寻找多项式的最小值是一个非常好研究的课题,并且存在大量非常有效的使用导数来寻找多项式的全局最小值的方法,所以我们可以假设替代函数的全局最小值对于损失函数是相同的。
代理优化在技术上是非迭代方法,尽管代理函数的训练通常是迭代的;此外,从技术上讲,它是一种无梯度方法,尽管寻找模型函数全局最小值的有效数学方法通常是基于导数的。然而,因为迭代和基于梯度的属性都是代理优化的“次要”属性,所以它可以处理大数据和不可微的优化问题。
使用代理函数进行优化在几个方面非常聪明:
- 它本质上是平滑真实损失函数的表面,这减少了导致神经网络中如此多的额外训练时间的锯齿状局部最小值。
- 它将一个困难的问题投射到一个容易得多的问题上:无论是多项式、RBF、GP、MARS 还是另一个代理模型,寻找全局最小值的任务都得到了数学知识的支持。
- 过度拟合代理模型并不是一个真正的问题,因为即使有相当多的过度拟合,代理函数仍然比真正的损失函数更平滑,锯齿更少。随着许多其他标准的考虑,在建立数学上更倾向于简化的模型时,训练代理模型因此更容易。
- 代理优化不受当前位置视图的限制,因为它看到了“整个函数”,与梯度下降相反,梯度下降必须不断做出冒险的选择,即它是否认为在下一个山坡上会有更深的最小值。
代理优化几乎总是比梯度下降法更快,但往往是以精度为代价的。使用代理优化可能只能精确定位全局最小值的粗略位置,但这仍然非常有益。
另一种选择是混合模式;使用代理优化将神经网络参数带到粗略位置,从该位置可以使用梯度下降来找到精确的全局最小值。另一种方法是使用代理模型来指导优化器的决策,因为代理函数可以 a)“预见未来”, b)对损失函数的特定起伏不太敏感。
模拟退火是一个基于冶金学中退火的概念,可以将材料加热到再结晶温度以上,以降低其硬度,改变其他物理和偶尔的化学性质,然后让材料逐渐冷却并再次变得坚硬。
使用缓慢冷却的概念,模拟退火随着解空间的探索而缓慢降低接受更差解的概率。因为接受更差的解决方案允许对全局最小值进行更广泛的搜索(想一想——越过小山到达更深的山谷),所以模拟退火假设在第一次迭代中正确地表示和探索了各种可能性。随着时间的推移,算法从探索走向开发。
以下是模拟退火算法如何工作的粗略概述:
- 温度设定在某个初始正值,并逐渐接近零。
- 在每个时间步,算法随机选择一个接近当前解的解,测量其质量,并根据当前温度(接受更好或更差解的概率)移动到当前解。
- 理想情况下,当温度达到零度时,算法已经收敛到全局最小解。
可以用动力学方程或随机取样方法进行模拟。模拟退火被用于解决旅行推销员问题,该问题试图找到由数据点表示的数百个位置之间的最短距离。显然,组合是无穷无尽的,但是模拟退火——带着强化学习的回忆——表现得非常好。
旅行商问题的模拟退火解法。来源:维基媒体。图片免费分享。
模拟退火在短时间内需要近似解的情况下表现特别好,优于缓慢的梯度下降。像代理优化一样,它可以用于混合梯度下降,以获得两者的好处:模拟退火的速度和梯度下降的精度。
这是无梯度方法的一个小样本;还有许多其他算法,如模式搜索和多目标优化有待探索。像粒子群优化这样的基于遗传和种群的算法对于创造真正“智能”的智能体来说是非常有前途的,因为我们人类就是它成功的证据。
最优化的非梯度方法是迷人的,因为它们中的许多利用了创造性,而不受梯度的数学链的限制。没有人指望无梯度方法会成为主流,因为即使考虑到它的许多问题,基于梯度的优化也表现得如此之好。然而,利用混合优化器来利用无梯度和基于梯度的方法的能力展示了极高的潜力,尤其是在我们即将达到计算极限的时代。
[## 有人称之为天才,有人称之为愚蠢:有史以来最有争议的神经网络
极限学习机
towardsdatascience.com](/some-call-it-genius-others-call-it-stupid-the-most-controversial-neural-network-ever-created-2224ed22795a) [## 你没有正确测量新冠肺炎
度量问题
towardsdatascience.com](/youre-not-measuring-covid-19-correctly-80398c251a1)
人工智能和神经科学之间的迷人关系
他们如何相互激励、共同进步、相互受益
有了这么多的利害关系,神经科学和人工智能领域走到一起的需求现在比以往任何时候都更加迫切。— DeepMind
在本文中,我们将从两个方面探讨这个话题。神经科学如何启发 AI,AI 如何推进神经科学。
神经科学如何启发人工智能
神经科学在人工智能的历史中发挥了关键作用。它一直是构建类人人工智能的灵感来源。神经科学启发我们设计人工智能系统有两种方式。一是模仿人类智能,二是建立模仿大脑结构的神经网络。
模拟人类智能的人工智能系统。
最近的人工智能进步通过表演令人印象深刻的壮举席卷了媒体,例如:
这些机器可以比我们更好地执行任务和解决问题,实现媲美甚至超过人类能力的性能。无论这些看起来多么令人印象深刻,它们只是被设计来超越它们的预期功能。我们距离建立人工智能还有几十年的时间。
尽管这些人工智能系统具有生物学灵感和性能成就,但它们在关键方面不同于人类智能。对于像人一样学习或思考的机器来说,它需要能够:
- 解释和理解问题
- 为获取知识而学习
- 概括新任务和新情况的知识
在 KAIST 的研究中,研究人员为人类元强化学习开发了一种计算和神经机制。作为人类,当我们做决定时,我们可以适应复杂性和不确定性。
研究人员的目标是建立能够像我们一样做决定的模型,并以与人类相同的方式解决问题。他们的发现揭示了一种可能性,即技术进步可能会导致制造更像人类的机器。
建造具有真正像人类一样的学习能力和认知能力的机器是一个持续的追求,这些机器可以像我们一样学习和思考。例如,即使我们蒙住眼睛,我们仍然可能弹得很好。但是对于一个人工智能系统来说,在一个新的环境中弹吉他(即“眼睛”被遮住),它可能做得不好。
构建模仿大脑结构的神经网络。
我们借鉴了人类大脑结构的灵感来设计我们今天所知道的神经网络。神经网络中神经元的想法与大脑中的生物神经元具有相似的特征。
人类大脑包含大约 860 亿个神经元,每个神经元都与其他神经元相互连接。生物神经元是细胞:当一个细胞被激活时,它会产生一个尖峰信号,并向其他神经元发送信号。
与人脑一样,机器学习神经网络也由相互连接的神经元组成。当一个神经元接收到输入时,它被激活并向其他神经元发送信息。
人工神经元是一种数学函数,被认为是生物神经元的模型
我们大脑的可塑性允许我们学习和提高技能。每次我们学习新的东西,我们都在创造和加强神经元之间的联系。这就是为什么当我们练习一项任务时,我们会做得更好。
类似地,当我们向神经网络输入大量数据时,它就会学习。神经网络上的每个连接都与一个权重相关联,该权重决定了神经元之间的重要性。在训练过程中,相应地调整权重,以加强或削弱神经元之间的连接。
例如,当我们看到一只猫的图片时,我们知道它是一只猫,因为我们在生活中已经看到了足够多的猫。同样,如果我们为我们的神经网络提供足够多的猫图像,它将开始识别猫。
娜塔莉·朱莉在 Unsplash 上的照片
在了解了神经科学如何启发 AI 模仿人类智能并构建模仿大脑结构的神经网络之后;我们将探索人工智能如何反过来推进神经科学。
人工智能如何推进神经科学
人工智能正迅速成为神经科学中一个无价的工具。它有助于我们理解人脑是如何工作的,并加速神经科学的发展。
人工智能帮助我们理解我们的大脑是如何工作的。
神经科学家正在研究人类大脑如何处理思想,以及它如何移动我们的身体。通过更多地了解大脑,我们能够更好地诊断精神疾病和使残疾人提高运动能力。
人工智能系统的进步可以帮助推动神经科学向前发展,并解开大脑的秘密。它允许神经科学家和研究人员建立更好的模型来模拟人脑。
神经网络就像“虚拟大脑”一样,捕捉我们大脑的表现。这些虚拟大脑可以产生类似于大脑记录模式的神经活动模式。这些模式允许神经科学家在投入更多资源对动物和人类进行实际测试之前,测试假设并观察模拟结果。
然而,人工智能系统的工作方式与我们的大脑有很大不同。神经网络只是大脑工作方式的粗略模拟,它将神经元建模为高维矩阵中的数字。但事实上,我们的大脑是一个复杂的生物机器,使用化学和电活动。这使我们不同于机器。
米兰·波波维奇在 Unsplash 上的照片
人工智能加速神经科学的发展和发现。
机器学习的主要优势在于能够识别复杂数据中的模式。在分析人类思维时,复杂性尤其如此。大脑发出的信号非常复杂。随着机器学习的进步,神经科学家正在破解数十亿大脑神经元如何协同工作的秘密。
功能磁共振成像通过检测血流的变化来测量我们大脑的活动。它每秒钟都会生成大脑活动的高维快照。使用机器学习来分析数据有助于揭示大脑活动的模式,从而加快研究工作。
机器学习还帮助我们开发以前认为不可能的应用程序。高丽大学设计了一个控制下肢外骨骼的实验环境。用户可以通过盯着闪烁的灯光来集中注意力,从而控制外骨骼。
由Farsai chaikungamdee在 Unsplash 上拍摄的照片
神经科学和人工智能
人脑是构建类人人工智能的最重要灵感。人工智能研究人员使用神经科学的想法来建立新的算法。
另一方面,人工智能加速了神经科学的研究。神经科学家从人工智能体的行为中学习来解释我们的大脑。
自然地,这两个学科结合在一起,并将继续基于彼此的见解。
我对神经科学和人工智能之间的这种合作关系的未来持乐观态度。
我们敦促神经科学和人工智能领域的研究人员找到一种共同语言,允许知识自由流动,从而在这两个领域取得持续进展。— DeepMind
推动该领域发展的现状和挑战
towardsdatascience.com](/deep-learning-in-brain-computer-interface-f650d00268d0) [## 用机器学习和神经科学解码大脑信号
成为 X 教授,解开我们心灵的秘密
towardsdatascience.com](/decoding-brain-signals-with-machine-learning-and-neuroscience-bee288c1d585)
决策委员会的迷人科学和艺术
增强业务情景意识的关键
宇航员艾伦·b·谢泼德在他的控制台上监控航天飞机的发射
内容
1.序言
这篇文章包含了我从为几家美国财富 50 强公司设计决策板(又名仪表板)的经历中提炼出来的见解。有效的决策委员会是建立对手头业务的控制和加强决策过程的基础。这件作品融合了心灵和实践智慧,旨在让你着迷于仪表板的世界,如果你碰巧在工作中设计了它,它会给你带来成功。
2.从一开始:决策委员会的哲学和目的
企业的存在是为了盈利。他们通过销售产品、服务或经验来实现。决策板通过直观地显示最重要的指标来评估企业或其某个方面的健康状况,从而帮助监控企业的绩效。并帮助所有者更快地做出明智的决定。
可以把决策板想象成现实的缩影,KPI 量化了业务的某个方面或目标。这些 KPI 被排列成一个简洁的压缩视图,以便企业所有者可以快速浏览它,并了解企业的运营情况。
它在商界是如何发展的
企业民间传说,2001 年安然(Enron)丑闻使仪表板成为首席执行官安抚股东的一种方式,也是将责任分配给层级的一种方式。自 1960 年以来,决策委员会在商业中一直占有一席之地。随着技术的民主化,下一个颠覆性的想法总是潜伏在角落里,保持竞争力和相关性的需求已经达到顶峰。今天的业务和产品所有者必须拥有设计良好且强大的测量系统,以了解他们的实际情况并观察历史业务决策的效果。
这个术语是从物理世界改编而来的。汽车中的“仪表板”是显示重要车辆信息的仪表和仪器,这使得驾驶汽车更加方便( Image source )
复杂的光谱
决策委员会中度量标准的复杂性取决于组织的分析成熟度。让我们以迪士尼主题公园的业务为例,来理解度量复杂性的变化。
1980 年的迪士尼世界地图(来源)
一个设计良好的决策板最大限度地简化了监控过程,并且清晰地显示出描述性指标(“发生了什么”)。例如,对于迪士尼主题公园,这可能是上个月产生的总利润。
在分析成熟的环境中,它们还提供附加价值,这也需要更高的资源和时间投入:
- **诊断指标(“为什么会发生某些事情”)😗*这可以通过影响超指标的子指标的可用性来实现,有时也可以通过决策板上直观的指标排列来实现,这样可以方便地进行导航和根本原因分析。例如,如果上个月收入急剧下降,应该有一个直观的流程来调查收入下降的原因。也许可以通过一层指标来显示不同细分市场产生的收入,如门票、食品和饮料以及商品支出。
- **预测指标(“未来可能发生的事情”)😗*管理层喜欢预测和预报,因为它们允许对人员配备和预算等资源进行早期规划。例如,主题公园在接下来的两个月中预计会产生多少收入。
- **规范性指标(“应该采取什么业务行动?”)😗*这是最复杂的。它建议采取最佳行动,以最大化战略相关指标(如利润或运营效率)或最小化风险(财务)。它包括构建一个优化层,这个优化层有一些用户控制的杠杆,可以根据需求调整推荐。这就是我们看到人工智能产生巨大影响的地方。例如,如何优化商场各个部门的人员配置,以最大限度地提高利润或减少等待时间?
3.工艺:设计和开发过程
在创建决策板时,有两个重要的考虑因素会影响度量标准的选择和布局:为其设计决策板的目标人物角色,以及在决策板内建立度量标准的流程。
3A。通过反复测试和学习的心态,探索对目标受众有意义的解决方案
每个决策板最终都是针对目标受众的。因此,将这些目标人物角色和他们的商业目标放在设计过程的中心是很重要的。重要的是要弄清楚:
- 现有报告框架 目标用户现在是否已经有了一些指标和报告
- 决策委员会的业务准备情况 如果需要,目标用户是否参与并愿意改变他们的流程?
- 仪表板体验 要求的主要愿景,与领导层如何设置和衡量职能层级保持一致。仪表板应该反映他们决策过程的心智模型
- 观众的审美感受力,以及组织设计基准 你希望你的最终产品是使用它的人的自然延伸
- 组织数据系统及其如何建模和捕获业务实体和交易 例如,他们可能将 SAP 用于 ERP,将其他软件用于 HR,将另一个软件包用于制造运营等。你的专业知识和建议应该与现有的技术相融合
虽然与目标受众保持一致将允许更快的迭代,但是我们也需要一些构造来形式化和循环迭代。 设计思维 是一种流行的使能方法。它所基于的原则源于工程、架构和软件设计中的最佳实践。我们可以借鉴设计思维原则,建立决策板创作的执行框架。 设计-开发-评审 的阶段可以持续几周或几个月(取决于所创建的仪表板套件),以获得成功的结果。
设计思维讲解| ~4 分钟|https://www.youtube.com/watch?v=_r0VX-aU_T8
执行框架
3B。在决策委员会内建立一个度量流程
这种指标的金字塔分类可以直接转化为决策板的模型或 UI 设计
4.培育:保持长期相关性
竞争优势不再在于分析的创造,而在于分析的消费——迪拉杰·拉贾拉姆(穆·适马创始人)
一个持久的设计永远不会完美。任何持久的解决方案都需要有人足够关心它,让它与时俱进。以下是一些有帮助的想法:
保持最终决策委员会的相关性是几个因素的平衡
4A。营销发布井
- 这有助于在发布期间制造轰动效应。最好是在月度全体会议上宣布,或者以高级领导的电子邮件形式宣布。
- 决策板的价值应该清晰地表达出来,以及它与以前的解决方案相比有多好。
4B。决策板是否易于理解和使用?
- 开发团队应制作用户手册、培训视频或演示决策板——强调其功能、使用方法、如何适应现有的决策板产品组合,以及从中获得的见解如何转化为业务行动。
- 为了发挥作用,决策板还需要透明地集成到用户的日常流程和操作中。如果一个人必须去找到它或采取额外的步骤/行动来访问它,它将被视为额外的工作,很可能不会被使用。检查决策板在智能手机和平板电脑等设备上是否也能正常显示。
- 让业务用户将决策板作为日常决策的一部分可能需要额外的努力。最初,他们可能需要在综合决策委员会的见解后得到现成的建议,以使他们看到其价值和影响。
4C。衡量使用情况
- 在创作结束后,了解决策层的消费模式也同样重要。开发团队应该跟踪每周/每月的决策板总浏览量、独立用户的数量以及访问决策板的新用户的数量。
- 如果消费下降,人们可能需要更深入地了解为什么它没有找到牵引力——通常是通过与企业用户交谈或做一个简单的在线调查。
4D。捕捉反馈
- 业务战略会随着时间的推移而变化,决策层需要适应以保持相关性。应该有某种机制让业务用户分享他们希望在决策板上看到的改进、新特性或变化。如果可能的话,在决策板上放一个大的“分享反馈”按钮。
- 建议的特性目录通常被标记为产品或变更待定项,并根据优先级和紧急程度定期进行评估以纳入决策层。
4E。建立投资组合时保持一致性
- 对于商业受众来说,视觉一致性是关键。他们实际上使用决策板的组合来运行他们的业务和视觉布局的相似性
- 为单个仪表板设置一套设计模板也将使跨决策层的认知移动变得容易。例如,顶部窗格显示战略绩效指标,随后是显示该指标或子指标随时间变化的趋势视图,最后是底部的表格级详细信息)
5.结语:大规模生产决策板的流水线
为了保持简洁,因为读者已经习惯了媒体,这将在后续文章中解决。目的是提供一个结构和设计元素的概述和例子,可以帮助你设计大规模的决策板。并在期望(运营与战略目标受众)、敏捷团队中的并行设计和开发,以及设置保持一致性的指导方针方面取得成功。再见
通往科技世界的最快职业道路
以下是你应该知道的
亚历山大·米洛在 Unsplash 上拍摄的照片
进入科技世界最快的职业道路是什么?
我选择编码,因为我知道我可以构建真实世界的项目,把它发布给人们使用,并解决他们的问题。
为了实现这一点,我需要最快的职业道路来打入技术世界。我看了 Youtube 视频,读了关于我可以选择的职业道路的文章。“成为数据分析师”随处可见。
这些视频和文章大多建议数据分析师的职业道路。当你走这条路的时候,你很容易进入科技世界;你可以在几个月内学会 SQL、Excel 和 Python——Pandas、NumPy、matplotlib。
确实如此。几个月内学会了 SQL,Excel,Python 库,但是有一个问题。
现实是——通往科技世界的最快职业道路不是一条或两条。这取决于你在哪里,你的技能或技能类型,以及……运气。
你的技能
技术世界是一个开放的地方。它不歧视也不限制你对人们生活的影响。你只需要掌握必要的技能,就可以把世界画成你想要的任何颜色。
你不应该被最快的职业道路冲昏头脑。专注于你的技能并擅长它。当你有解决问题的技能时,你就准备好了。
在未来的许多年里,将会有技术职位空缺。截至去年,美国有 70 万IT 岗位空缺。你知道为什么吗?在那里很难找到熟练的工人。
你的环境
你住在哪里,在很大程度上决定了你在科技领域找到工作的速度。发达国家有双重优势。你可以决定为别人工作——有空缺——或者为自己工作。那些是捷径。
如果你不是生活在一个科技还不发达的环境里呢?
然后,你必须对你获得的技术技能进行选择——如果你真的想快速进入技术领域。以此为生是你的首要任务。抛开激情不谈。当然,激情就是一切。
科技创业公司和组织正在发展中国家兴起。所以技术工作很少。你应该注意你所获得的技能。获得一项能让你成为帝国之主的技能。科技技能可以让你自己创造出对人们有用的酷东西。
以数据分析师技能为例。数据可能就是一切。对于一个生活在数据分析师需求不高的地方的人来说,很难快速找到工作或成为老板并生存下来。数据分析师并不总是独自工作。他们需要支持和平台来让他们的工作产生影响。
经过数小时、数天、数月的搜索,我注意到公司招聘栏上的大多数数据分析师职位都是高级数据分析师。我很难得到我想要的数据分析师的职位。
你想让我给你成功的公式吗?很简单,真的。加倍你的失败率…你认为失败是成功的敌人。但事实并非如此……你可以因失败而气馁,也可以从中吸取教训。所以继续犯错吧。尽你所能。因为,记住,那是你找到成功的地方。失败的另一面。— 老托马斯·J·沃森
就在这个时候,我重新考虑改变我的技术堆栈。我找了一个站长实习生的角色;我欣然申请,并挑选。在这一点上,我看到了严酷的现实——你住在哪里很重要。我仍然很幸运,得到了那个实习生的角色。
运气
你对运气的定义是什么?
我目前写的都是事情的真实情况。运气可以改变这一切。你可以去任何地方,获得任何技术技能,快速找到工作。它发生了。但是准备好让幸运之母向你微笑吧。你的准备就是你的技能。
我名下已经有了一些项目;这为我被选为实习生铺平了道路。这是一个机会遇到准备的例子。
结论
在科技世界里,没有一条最快的职业道路。这取决于你在哪里,你的技能,或者你拥有的技能类型。
做好你的工作。
在你所在的地方获得一项技能。
运气是一切的颠覆者。
感谢您的阅读。
fastML 指南
作为一名数据科学家、人工智能或 ML 工程师,速度是从事一个项目的基本要素。fastML 为您提供了速度和灵活性,让您可以针对多种算法测试您的模型。
FastML 标志由 Divine Kofi Alorvor
数据科学家、人工智能和机器学习工程师的工作很大程度上围绕着许多不同算法的使用,这些算法使我们的工作变得更容易和相对更快。然而,我们经常发现,为特定的用例选择特定的算法是相当困难的,因为有许多算法可以同等地执行我们需要执行的任务。
fastML 是一个 python 包,它允许您使用自己喜欢的测试大小来测试和训练已处理的数据,并使用很少几行代码对准备好的数据运行多种分类算法。这使您可以观察您决定运行的所有算法的行为,以确定哪些算法最适合您的数据,以便使用您选择的算法进行进一步开发。这也为您节省了在不使用 fastML 的情况下手动编写近 300 行代码的压力。
入门指南
fastML 发布到**pypi**,这使得使用 python 包安装程序 pip 在本地安装变得容易。要安装 FastML 进行本地开发,请确保您已经安装了 python 和 pip 并将其添加到 path 中。如果你需要帮助,你可以在这里查看 Python 文档。****
要安装 fastML,请打开您的终端(Linux/mac)或命令提示符(windows)并输入命令:
**pip install fastML**
使用 fastML
在本指南中,我将通过一个流行的 Iris 数据集的例子来教你如何在你的项目中使用 fastML 包。在处理任何项目时,要做的第一件事就是导入项目所需的库和包。
**##importing needed libraries and packages including fastMLfrom fastML import fastML
from sklearn import datasets**
现在要做的下一件事是将 Iris 数据集加载到我们的项目中以供使用。
**##loading the Iris datasetdf = datasets.load_iris()**
由于虹膜数据集已经进行了预处理,因此没有必要再次处理我们的数据。但是,对于您将在自己的项目中使用的数据,您必须确保数据经过良好的处理,以避免在项目中遇到错误和不希望的输出。
现在要做的下一件事是准备用于训练和测试的数据,并将所需的数据列指定为特性和目标列。
**##assigning the desired columns to X and Y in preparation for running fastMLX = df.data[:, :4]
Y = df.target**
根据您拥有的数据类型,您的目标数据可能最需要编码。对你的目标数据进行编码是很好的,因为它选取了可以解释目标数据的值,并帮助机器学习算法理解目标数据到底是什么。使用 fastML python 包对目标数据进行编码也非常容易。
**##importing the encoding function from the fastML package and running the EncodeCategorical function from fastML to handle the process of categorial encodingfrom fastML import EncodeCategorical
Y = EncodeCategorical(Y)**
接下来,我们将所需的 test_size 值赋给变量“size”。
**size = 0.3**
最后要做的事情是了解我们想要用来测试数据的所有算法,并将它们全部导入到我们的项目中。fastML 附带了一个用 keras 构建的准备好的神经网络分类器,用于深度学习分类。您可以将包括神经网络分类器在内的所有算法导入到您的项目中。例如:
**##importing the desired algorithms into our projectfrom sklearn.ensemble import RandomForestClassifier
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC##importing the neural net classifier from fastMLfrom nnclassifier import neuralnet**
最后,我们运行主要的 fastML 函数。该功能具有灵活性,允许您自由调整任何单个算法的超参数。
**## running the fastML function from fastML to run multiple classification algorithms on the given datafastML(X, Y, size, SVC(), RandomForestClassifier(), DecisionTreeClassifier(), KNeighborsClassifier(), LogisticRegression(max_iter = 7000), special_classifier_epochs=200,special_classifier_nature ='fixed', include_special_classifier = True)**
下面是运行主 fastML 函数后的类似输出:
**Using TensorFlow backend.
__ _ __ __ _
/ _| | | | \/ | |
| |_ __ _ ___| |_| \ / | |
| _/ _` / __| __| |\/| | |
| || (_| \__ \ |_| | | | |____
|_| \__,_|___/\__|_| |_|______|
____________________________________________________
____________________________________________________
Accuracy Score for SVC is
0.9811320754716981
Confusion Matrix for SVC is
[[16 0 0]
[ 0 20 1]
[ 0 0 16]]
Classification Report for SVC is
precision recall f1-score support
0 1.00 1.00 1.00 16
1 1.00 0.95 0.98 21
2 0.94 1.00 0.97 16
accuracy 0.98 53
macro avg 0.98 0.98 0.98 53
weighted avg 0.98 0.98 0.98 53
____________________________________________________
____________________________________________________
____________________________________________________
____________________________________________________
Accuracy Score for RandomForestClassifier is
0.9622641509433962
Confusion Matrix for RandomForestClassifier is
[[16 0 0]
[ 0 20 1]
[ 0 1 15]]
Classification Report for RandomForestClassifier is
precision recall f1-score support
0 1.00 1.00 1.00 16
1 0.95 0.95 0.95 21
2 0.94 0.94 0.94 16
accuracy 0.96 53
macro avg 0.96 0.96 0.96 53
weighted avg 0.96 0.96 0.96 53
____________________________________________________
____________________________________________________
____________________________________________________
____________________________________________________
Accuracy Score for DecisionTreeClassifier is
0.9622641509433962
Confusion Matrix for DecisionTreeClassifier is
[[16 0 0]
[ 0 20 1]
[ 0 1 15]]
Classification Report for DecisionTreeClassifier is
precision recall f1-score support
0 1.00 1.00 1.00 16
1 0.95 0.95 0.95 21
2 0.94 0.94 0.94 16
accuracy 0.96 53
macro avg 0.96 0.96 0.96 53
weighted avg 0.96 0.96 0.96 53
____________________________________________________
____________________________________________________
____________________________________________________
____________________________________________________
Accuracy Score for KNeighborsClassifier is
0.9811320754716981
Confusion Matrix for KNeighborsClassifier is
[[16 0 0]
[ 0 20 1]
[ 0 0 16]]
Classification Report for KNeighborsClassifier is
precision recall f1-score support
0 1.00 1.00 1.00 16
1 1.00 0.95 0.98 21
2 0.94 1.00 0.97 16
accuracy 0.98 53
macro avg 0.98 0.98 0.98 53
weighted avg 0.98 0.98 0.98 53
____________________________________________________
____________________________________________________
____________________________________________________
____________________________________________________
Accuracy Score for LogisticRegression is
0.9811320754716981
Confusion Matrix for LogisticRegression is
[[16 0 0]
[ 0 20 1]
[ 0 0 16]]
Classification Report for LogisticRegression is
precision recall f1-score support
0 1.00 1.00 1.00 16
1 1.00 0.95 0.98 21
2 0.94 1.00 0.97 16
accuracy 0.98 53
macro avg 0.98 0.98 0.98 53
weighted avg 0.98 0.98 0.98 53
____________________________________________________
____________________________________________________
Included special classifier with fixed nature
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 4) 20
_________________________________________________________________
dense_2 (Dense) (None, 16) 80
_________________________________________________________________
dense_3 (Dense) (None, 3) 51
=================================================================
Total params: 151
Trainable params: 151
Non-trainable params: 0
_________________________________________________________________
Train on 97 samples, validate on 53 samples
Epoch 1/200
97/97 [==============================] - 0s 1ms/step - loss: 1.0995 - accuracy: 0.1443 - val_loss: 1.1011 - val_accuracy: 0.3019
97/97 [==============================] - 0s 63us/step - loss: 0.5166 - accuracy: 0.7010 - val_loss: 0.5706 - val_accuracy: 0.6038
Epoch 100/200
97/97 [==============================] - 0s 88us/step - loss: 0.5128 - accuracy: 0.7010 - val_loss: 0.5675 - val_accuracy: 0.6038
Epoch 200/200
97/97 [==============================] - 0s 79us/step - loss: 0.3375 - accuracy: 0.8969 - val_loss: 0.3619 - val_accuracy: 0.9057
97/97 [==============================] - 0s 36us/step
____________________________________________________
____________________________________________________
Accuracy Score for neuralnet is
0.8969072103500366
Confusion Matrix for neuralnet is
[[16 0 0]
[ 0 16 5]
[ 0 0 16]]
Classification Report for neuralnet is
precision recall f1-score support
0 1.00 1.00 1.00 16
1 1.00 0.76 0.86 21
2 0.76 1.00 0.86 16
accuracy 0.91 53
macro avg 0.92 0.92 0.91 53
weighted avg 0.93 0.91 0.91 53
____________________________________________________
____________________________________________________
Model Accuracy
0 SVC 0.9811320754716981
1 RandomForestClassifier 0.9622641509433962
2 DecisionTreeClassifier 0.9622641509433962
3 KNeighborsClassifier 0.9811320754716981
4 LogisticRegression 0.9811320754716981
5 neuralnet 0.8969072103500366**
有了这个输出,我们可以确定什么算法最适合我们的用例,并选择该算法进行进一步的开发和部署。
fastML 是免费开源的,你可以在 Github 上找到源代码和测试文件。当你在使用 fastML 的过程中遇到问题或错误时,我们的贡献者团队可以随时提供帮助。此外,您可以提交您希望我们实施的 bug 或功能更新问题,我们会完成它。检查项目,如果你喜欢这个项目,别忘了留下一颗星。
作为数据科学家,我工作中最喜欢的部分
作为一名数据科学家,我最喜欢的工作是
TLDR:这篇文章的目的不是提供技术知识或见解。下面我讲一个关于选择分层样本、计算样本权重以及在研讨会上与同事分享这些信息的故事。这是一个关于数据科学家如何利用他们的非技术知识帮助他们的公司建立强大的数据文化的故事。
介绍
我对数据科学家报告花费 80%的时间来寻找、清理和组织数据的统计数据毫无理由地着迷,这些数据是由哈佛商业评论分析的一个公认的适度样本得出的。这是一件好事,我不介意寻找,清理和组织数据。对我来说,寻找、清理和组织数据是刺激的一部分。
但是,作为一名数据科学家,我最喜欢的部分比作为一名数据科学家的许多方面更能让我充实。我工作中最喜欢的部分是帮助他人以新的方式联系。我有幸担任一个角色,这个角色往往会得到许多担任其他角色的人的关注。
面对现实吧,作为一名数据科学家会得到别人的关注。我最喜欢的日子是我能够利用这种关注来帮助那些在不同岗位上工作的人们建立联系的日子。这篇文章讲述了其中一天的故事。
有一天
一位同事问我是否愿意和她的团队分享选择和分析样本的步骤。我说当然,然后我们计划了一个自带午餐计划。事实证明,有机会分享和解释我的工作也是我喜欢的角色的一部分。
图片鸣谢:作者插画。当我计划一个与选择样品相关的棕色袋子展示时,我想到了会发生什么。
这也是一件好事,因为分享和解释你作为数据科学家的工作应该是一种常规体验。科学家称分享和解释他们的工作为传播。
因为选择和分析样本是一项相对平凡的任务,所以我对这个特定主题的棕色袋子的要求感到惊讶。参加展示的人会有披萨,所以我们用报名表来确保我们点了足够的披萨。当登记表上写满了整个公司所有运营部门的人员时,我越来越惊讶。技术和非技术同事都对这个话题感兴趣。
这是一个意想不到的机会,可以把除了在全公司会议上通常不会互动的业务领域的同事带来。通过促成这种联系,我既高兴又谦卑。
在这种情况下,选择样本(即加权样本)的步骤并不复杂。从我在数据科学中犯下的一个最糟糕、但相对无害的错误中吸取了教训,我同意讨论这个话题,尽管我认为这个话题别人可能不感兴趣。不管是好是坏,每个人都将听到从人群中选择和分析样本的相关步骤。
设置
当时,我为一个生产广泛使用的软件解决方案的组织工作。它的用户群只有几百万。从许多软件标准来看,这是适度的。
尽管用户基数不大,但从这些用户中选择一个样本进行分析是很重要的。为了选择这个样本,我将我们的用户群划分为与重要的人口统计特征相关联的子群。然后,为了确保我们可以从人口稀少的细分市场中得出关于用户的结论,我对一些细分市场进行了过采样,而对其他细分市场进行了欠采样。后来在分析过程中,我对结果进行了加权,这样我们就可以将这些发现推广到我们的整个用户群。整个公司的员工和同事都要求详细了解这些方法和分析技术。
的日子
技术人员和非技术人员都将出席。有些人已经进入职场好几年了,有些人还在上大学。
重要的是,要向具有广泛背景和不同观点的受众提供有趣且有意义的内容。
作为一名数据科学家,我最喜欢扮演的角色之一就是在这些正式和非正式的场合将观众聚集在一起。尽管我对这个机会充满热情,尽管其他人也对这个机会表现出热情,但我还是有一些挥之不去的疑虑。我很担心。
图片鸣谢:作者插画。我想(或担心)会发生的事情是,我计划了一个与实际发生的事情相比,与选择样本相关的棕色袋子演示。
我想象这个演示会和看米色油漆变干一样有趣。那天会议室里只有站着的地方。
一个轶事,当其他人联系
在演示过程中,我演示了一个计算样品重量的代码块。该代码块类似于:
可用于使用 Python 和 Pandas 数据框计算样本权重的代码示例。
这段代码完成了工作。此外,这段代码已经过优化,便于人们阅读。我需要房间里的每个人都明白,至少在概念层面上,这段代码完成了什么。此外,事实证明,这段代码与我进行分析时使用的代码没有太大的不同。
那天会议室里只有站着的地方。
因为我将代码优化为人类可读,所以我牺牲了它完成类似任务的能力,而无需对其他项目进行大量修改,这些修改可能也涉及到选择样本。这种牺牲是适当的,因为我希望在结果发布很久以后,我自己或者其他人能够很容易地解释我的代码。选择以易于阅读的方式编写代码支持了验证或复制工作的能力。
我在演讲中大声说,我不打算接受“边缘案例”。我没有计划“边缘情况”的原因是因为我为单个用户编写了这段代码。我解释说我不关心边缘案例,因为我就是边缘案例。这个评论引起了一些笑声。我不是想开玩笑。但它引发了多重幽默。
一位与会者问,“什么是边缘案例?”我看了房间。我有一种感觉,房间里还有其他人,他们知道什么是边缘情况,谁想说出来。所以我闭上嘴,让最后三分之一的棕色袋子成为与会者之间的对话。
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
adamrossnelson.medium.com](https://adamrossnelson.medium.com/membership)
结论
享受作为数据科学家的工作有很多原因。如果你是一名数据科学家,你必须喜欢寻找、准备和清理数据。你还必须享受 T2 筛选各种方法的快感。花时间比较结果和解释输出也是作为数据科学家工作的一个令人满意的方面。
但对我来说,作为一名数据科学家,我最喜欢的角色是帮助他人建立新的联系。我喜欢帮助他人与其他专业人士建立新的联系。我也将我的工作视为一个机会,帮助其他人联系到他们过去和现在的工作,但以新的和令人兴奋的方式。我利用数据科学的普及,无论数据科学是否值得普及,作为帮助他人建立这些新联系的一种手段。
这是一个关于我如何使用与选择分层样本和计算样本权重相关的方法和技术的故事,作为一个共同的兴趣点,以新的、意想不到的和令人惊讶的方式将我的一些同事聚集在一起。
本文的目的不是提供一个技术概述。如果你对我用来选择样本、计算样本权重、然后进行分析的代码样本的概述感兴趣,请给我发一封关于 Twitter.com/adamrossnelson的邮件。也许会有合作的机会!
感谢阅读
感谢阅读。把你的想法和主意发给我。你可以写信只是为了说声嗨。如果你真的需要告诉我是怎么错的,我期待着尽快和你聊天。推特:@ adamrossnelsonLinkedIn:亚当罗斯尼尔森。
最后的倒计时:部署我的深度学习项目
在过去的两周里,我将我的深度学习项目转移到生产中,使用 Google can 平台和 Django 建立了一个网站,你现在可以自己看到
布鲁斯·马斯在 Unsplash 上拍摄的照片。
你怎么称呼一个从未与世界分享的令人敬畏的项目?—你不知道。除非这个项目是你的,否则你永远不会知道它的存在。研究不仅仅是有想法和写科学文章。研究是关于分享这些想法,是关于解决日常问题,并致力于建设一个更美好的世界和一个鼓舞人心的未来。
在过去的两周里,我接受了将深度学习项目投入生产并与世界分享的使命。**该项目是一个利用卫星图像绘制每日受野火影响地区地图的模型。**投产能有多难?嗯,有一些注意事项要记住。
目录
- 项目的一些背景
- 下载数据
- 预处理数据并生成模型输出
- 用 Django 创建和部署网站
项目的一些背景
正如我上面提到的,这个项目包括一个使用卫星图像作为输入来生成被野火烧毁的区域的每日地图的模型。这项研究导致了一篇 科学论文的发表 我在下面的两个故事中描述了这篇论文,如果你有兴趣找到关于这个主题的更多细节。
森林火灾是一种自然灾害,通常会对生态系统和人类产生巨大影响。绘制火灾图…
medium.com](https://medium.com/@mnpinto/mapping-burned-areas-from-space-with-artificial-intelligence-3657bdb97a9d) [## 绘制 2019-20 澳大利亚森林火灾
一个案例研究显示了如何使用深度学习从卫星图像中监控火灾的日常进展…
towardsdatascience.com](/mapping-2019-20-australian-bushfires-4e6d9a0eed63)
下载数据
任何模型都需要一些输入数据来生成输出。在我的例子中,输入数据——每日卫星图像——需要从网络服务器下载。这包括使用 API 发出请求,等待请求被处理,最后下载图像。当一切顺利时,这很容易,但经常会有意想不到的问题。
- 对服务器的请求可能需要一些时间来处理,并且每个请求有一个文件限制;
- 连接可能会失败,结果导致下载中断,从而导致文件损坏;
- 由于某些不可预知的原因,数据可能会延迟或丢失。
为了让请求/下载过程健壮地工作,我必须编写一个 Python 包 来管理下载过程,其特性包括:
- 在文件数量对于单个请求来说太大的情况下,将请求拆分到 API
- 记下哪些文件已经被下载;
- 检查下载文件的哈希以确保它们没有损坏;
- 能够在连接丢失的情况下重新启动进程,而不必发出新的请求。
测试和调试所有这些代码非常耗时,但在进入生产阶段时却是必要的。流程需要尽可能可靠,并且需要最少的人工干预。
预处理数据并生成模型输出
幸运的是,这一步更简单,因为可以使用研究过程中使用的预处理函数来准备数据。但是,经常需要一些修改:
- 代码应该是快速的和内存高效的,以减少计算成本和处理时间;
- 代码应该对诸如丢失数据之类的问题具有鲁棒性;
- 代码应该能够在 CPU 或 GPU 上运行,这取决于机器的规格——幸运的是, Pytorch 使这变得非常容易。
对数据进行预处理后,就该加载模型、生成预测并保存结果了。然而,结果需要以对网站友好的格式保存。在我的案例中,这导致了一些额外的步骤:
- 将图像数据转换成矢量格式并分离各个烧伤区域。
- 还保存与每个单独事件相对应的 GeoTiff 图像。
然后可以将数据添加到数据库中。我选择使用能够处理地理数据类型的 PostGIS ,比如多边形和栅格。
实际上,我在 Google 云平台虚拟机上运行下载和预处理步骤。为了降低成本,该实例每天只打开一次来计算输出,并将它们发送到网站所在的服务器。
用 Django 创建和部署网站
Django 是一个使用 Python 快速开发的 web 框架。**问题是,两周前我还不知道怎么用它。我以前读过,但我从未找到合适的机会使用它。我觉得这可能是一个有益的挑战。**毕竟,学习是有趣的!或者至少在你最终明白事情是如何运作的之后,这是很有趣的。学习过程是这样的:
- 前两天是从看 YouTube 上的一些教程开始的;
- 当我学会了基础知识,我开始创建我的网站项目;
- 接下来的几天,随着我开始理解这个框架是如何工作的,我逐渐添加了更多的特性。
这个过程的特点是大量的谷歌搜索,浏览器中不合理数量的打开标签,以及大量的耐心。
好的一面是,我学得越多,就越意识到姜戈带来的潜力。随着时间的推移,进度开始加快— 攀登学习曲线!
有了一个工作示例后,我决定是时候部署它了。我发现这个过程比预期的更具挑战性。通常,YouTube 上的教程只涉及开发部分,缺乏对部署过程的解释。我花了大约三天时间才完成这一步。我必须弄清楚什么是 Nginx 和 Gunicorn,以及如何让一切工作起来。但是,就像任何事情一样,当任务更具挑战性时,我们学到的东西也最多。
说够了!我给你看一下网页(【meteo-ai.com】T21)并描述一下主要功能。
图一。显示 2017 年影响葡萄牙的极端火灾的网站的打印屏幕。
图二。显示过去一年概况的网站的打印屏幕。
该网站的特色:
- 燃烧区域数据和活跃火灾数据存储在一个与 GeoDjango 配合良好的 PostGIS 数据库中;
- 用户可以选择将导致数据库查询的可视化的时间范围;
- 网站上的结果显示在传单地图上,利用了 nice 标记集群扩展,允许以一种干净有效的方式聚集相近的标记(参见图 2 中的地图)。
- 通过将每个像素渲染为多边形,使用燃烧日期或模型的置信水平对区域进行着色,来显示燃烧区域地图。这允许我有一个跨越用户选择范围的颜色图(参见图 1 中的图);
- 所选时间段或火灾事件的统计数据显示为使用 Plotly.js 制作的动态图(参见图 1 和图 2 中的柱状图)。
能够以可视和动态的形式聚集所有这些信息对于监控和研究火灾非常有用。
有网页显示类似类型的信息,然而,这种深度学习模型产生的烧伤区域是这种类型产品的最先进水平。通过使用 3D 卷积和 LSTM 层分析输入图像序列中的时空相关性,经过训练的模型非常擅长识别燃烧区域并确定像素燃烧的日期 —特别强调后者。
结局?
一点也不。网站目前的状态有很多方面需要改进。此外,在燃烧区领域还有更多研究路径需要进一步探索。一个热门话题是使用公开的卫星图像绘制更高分辨率(3000 万像素或更小)的火烧区地图。高空间分辨率与频率较低的图像相权衡。这是我正在解决的问题。处理如此大量的数据本身就是一个挑战!我会确保在将来写下结果。
也许这只是一个开始。
关于我
[## 我的 3 年历程:从零 Python 到深度学习竞赛高手
自从 2017 年开始学习 Python 以来,我一直遵循的道路是成为一名独自参加 Kaggle 比赛的大师…
towardsdatascience.com](/my-3-year-journey-from-zero-python-to-deep-learning-competition-master-6605c188eec7)
感谢阅读!祝您愉快!
最后的前沿:大脑数据
心灵感应即将到来——脑机接口将极大地改变我们交流和感知现实的方式。
图片来自 pixabay
在日益技术化和数据驱动的社会的帮助下,人类和机器之间的交流艺术已经达到了优化的顶峰。虽然我们曾经通过身体互动和口语进行交流,但未来的交流可能取决于一种更具心灵感应的形式:大脑与机器的交流。
一个脑机接口是一个将神经元信息转换成外部计算机或机器可以用来执行我们的行动和决定的形式的装置。
尽管这种设备可能允许人类直接与机器交流思想和行动,但该技术需要大量数据来提供一致、准确和理想的结果。这一核心要求揭示了一项技术的许多伦理含义,这项技术与我们人类数据的最终前沿:大脑数据密切相关。
尽管这项技术确实有巨大的潜力,但为了将风险和伤害降至最低,也必须解决令人生畏的道德后果。
隐私
图像通过 pixabay
随着与大脑交流的新方式的出现,并考虑到脑机接口收集的数据的显著私密性,有可能出现新的侵犯人类隐私的行为。
虽然许多脑机接口应用程序可能是出于提高人类生活质量的善意目的而创建的,但允许访问人脑数据可能会严重损害用户的隐私。
由第三方实体收集的私人信息,如大脑数据,可能被用来以恶意方式针对脑机接口用户。拥有这些私人数据的实体可以以许多有害的方式操纵脑机接口用户,包括:
- 发送不必要的刺激对身体造成物理伤害
- 向用户发送视觉或听觉刺激,并分析无意识大脑的反应,以收集或窃取私人信息(银行信息、密码、位置、秘密)
- 从检查大规模原始大脑数据库中得出群体推断,目的是产生目标用户的记忆、情感倾向、偏好和其他属性的简档。
鉴于这些数据的高度敏感性,毫无疑问,它具有很高的潜在价值。人们可以推断,控制数据的人不会阻止提取这些数据或将这些数据出售给第三方供应商——公司会有动力获取和处理这些私人数据,因为这使他们能够更有效地运营、进行内部研究和商业化。
例如,苹果心电图手表影响了保险公司根据手表收集的敏感数据(我们身体的电脉冲)的结果修改价格;基础营销和战略告诉我们,在销售产品之前了解用户和消费者的概况是一个重要的竞争优势。虽然 APPLE ECG 收集电脉冲,但无法想象大脑数据的收集和使用会给我们的日常生活带来什么样的改变。
最终,这些动机的结合对脑机接口用户的隐私构成了直接威胁,我们必须努力起草法规,以减轻这项技术激发的权力和金钱动机。例子是修改 GDPR 以确保国际适用性或严格控制大脑数据的销售和转移。
自治
图片通过 pixabay
随着技术优化我们的偏好和决定,脑机接口有可能损害我们人类的自主意识;随着这项技术的兴起,我们不受外界影响的自我决定和独立决策的能力正面临风险。
对于伦理学家来说,自主指的是个人自我决定的能力。根据大多数脑机接口研究人员的说法,脑机接口旨在提高重度残疾人的身体自主性和生活质量。这项技术中的自主概念在伦理学家和脑机接口研究人员之间是不同的;脑机接口研究人员将自主性的讨论限制在残疾患者身上,他们在未来的脑机接口开发中很可能是少数用户。
脑机接口算法不断适应和学习用户的想法和倾向,并可以建议或预测用户想要采取的未来行动。因此,用户可能会建立对脑机接口建议的依赖,并失去确保有意决策得到控制和实现的能力。
由于现在能够依靠脑机接口来执行思想和知识,用户可能会失去独立思考和个人发展的意识。一个经典的例子是将你的一系列动作和想法限制在你知道设备会准确可靠地执行的范围内(少探索,多利用)。如果当前的脑机接口研究像前面提到的那样定义自主性,那么用户的人类自主感可能会受到威胁。
为了避免这种情况,脑机接口研究人员必须引入多个领域的专家来有效地定义人类自主的伦理含义,并相应地修改他们的技术和实践。
安全
图片通过 pixabay
安全性是工程师在计算机技术中努力确保的一项常见任务。最敏感的人体数据的收集、存储和传输将需要新的保护和预防措施,并结合检测和事件响应,以避免和防范安全事故。
与所有利用人类数据的新技术一样,黑客和希望造成伤害的恶意人员是一个共同的威胁。如果黑客可以访问你的大脑数据或脑机接口,他们可能会以不可想象的方式造成伤害,如上文隐私部分所述。
安全性不应该是一个特别的标准:脑机接口的用户在使用过程中根本不必担心安全性。最轻微的安全漏洞都可能对用户产生巨大影响,可能导致永久性脑损伤或死亡。
责任
图片通过 pixabay
脑机接口的潜在广泛使用带来了一个与道德和法律责任相关的重要问题:脑机接口的使用是否让用户对机器的所有决定负责?
这种技术的一个麻烦后果是由道德崩溃区的概念来例证的,它描述了将有缺陷的算法和数据化系统的错误归咎于人类主体的趋势。许多人经历过思考一些事情,但是放弃了交流或执行这个想法。如果脑机接口看到用户的想法并意外地执行了一个有害的动作,那么应该归咎于谁,这已经引起了广泛的讨论。虽然用户可能不会自己以某种方式行动,但他们会受到脑机接口决策的影响,并最终影响他们的想法。当前的研究和对道德和法律责任的理解不足以决定脑机接口的使用。因此,我们必须仔细指定我们将故障归咎于脑机接口的场景,并批判性地审查我们对脑机接口内责任的理解,辅以目前用于解决其他技术中这种伦理问题的方法。
为什么这很重要,我们能做些什么?
毫无疑问,计算技术在我们社会的日常生活中变得越来越有价值。随着大数据在人类和机器中的广泛使用,我们发现自己正处于一个必须仔细思考技术的设计、影响和伦理的时代。尽管脑机接口可以让我们显著改善日常生活,但我们必须优先考虑人类的安全和福祉。我们必须首先召集许多领域的专家——伦理学家、法律专家、神经科学家和工程师——他们支持旨在解决这些问题的公开讨论。对于普通大众,我们可以挑战传统的监管框架,批评当前的研究实践,并检查技术的人文背景和伦理。最终,我们必须鼓励讨论,并通过挑战侵犯我们基本人权的技术来增强我们自己的能力。
如果你还没有读过我的下一篇关于脑机接口令人兴奋的潜力的文章, 在这里读一下 。
贝叶斯时间序列的第一步——线性回归
基于 PyMC3 的贝叶斯时间序列分析中的状态空间模型
介绍
今天,时间序列预测无处不在,公司的决策过程在很大程度上取决于他们预测未来的能力。通过一系列简短的文章,我将向您介绍一种解决这类问题的可能方法,将状态空间模型与贝叶斯统计结合起来。
在最初的文章中,我将从 Jacques J.F. Commandeur 和 Siem Jan Koopman [1]的《状态空间时间序列分析简介》一书中选取一些例子。它包括对应用于时间序列领域的状态空间建模的主题的众所周知的介绍。
我的贡献将是:
- 一个非常谦卑的尝试,以缩小这两个领域在介绍性和中间材料方面的差距。
- 概念的呈现:一方面,一个简洁的(并非不存在的)数学基础来支持我们的理论理解,另一方面,一个从零开始的算法实现(尽可能避免“黑盒”库)。在我看来,这是确保我们能够抓住一个想法的最好方法。
- 使用 PyMC3 正确实现所提出的模型,并对其进行解释和讨论
1.线性回归
在经典回归分析中,假设因变量 y 和预测变量 x 之间存在线性关系。y 的 n 个观测值(对于 i = 1,…,n 用 y_i 表示)和 x (对于 i = 1,…,n 用 x_i 表示)的标准回归模型可以写成
其中,ϵ_i NID(0,σ _ϵ)假设残差(或误差)ϵ正态独立分布,均值等于零,方差等于σ_ϵ.
1.1 数据
该数据集包括 1969 年 1 月至 1984 年 12 月期间英国每月死亡或严重受伤的司机人数(KSI),您可以在此处找到。
我们将使用死亡人数的记录。对数变换可用于将高度倾斜的分布转换为不太倾斜的分布。这对于使数据中的模式更容易解释和帮助满足推断统计的假设都是有价值的。我们稍后会看到这意味着什么。
from scipy import stats
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import pymc3 as pm
import arviz as azy = np.log(ukdrivers)
t = np.arange(1,len(y)+1)
在我们目前的情况下,独立变量只是时间。
1.2 经典方法
回归模型有两个未知参数,可以用最小二乘法估计。它返回α和β的值,这些值在观察到的 y 和预测的 ŷ.之间产生最低的平均二次误差
目标是找到使误差最小的α (hat)和β (hat)值。为此,我们对每个参数取偏导数,并使其等于零,如下所示,
计算完上面的等式后,我们得到以下结果
print('Least Squares\n')
β_hat = np.sum((t - t.mean())*((y - y.mean()))) / np.sum((t - t.mean())**2)
α_hat = y.mean() - β_hat*t.mean()
print("\u0302α: " + str(α_hat))
print("\u0302β: " + str(β_hat))Least Squareŝα: 7.545842731731763
̂β: -0.0014480324206279402
我们可以用它们来绘制我们的最佳拟合线。
plt.plot(t, y, 'C0.')plt.plot(t, α_hat + β_hat *t, c='k',
label=f'y = {α_hat:.4f} + {β_hat:.4f}*x')plt.ylabel('log UK drivers KSI')
plt.xlabel('Time (in months)', rotation=0)plt.legend();
英国驾驶员 KSI 数量和时间的对数的最小二乘法回归线。
使用最小二乘估计的误差方差可以通过下式计算
np.sum((y - α_hat - β_hat * t)**2/(len(y)-2))0.022998056021100423
2.贝叶斯方法
没有上下文的贝叶斯定理就像捕鼠器一样。尽管这个等式相对简单且广为人知,但它背后有很多直觉。我曾经读到过,它可以被看作是一个感知世界的镜头。我要说,它展示了一个不同的视角。有一些有用的资源可以获得这种直觉;所以,我就不太关注了。我们的工作范围是在它的实际方面,使它为我们所用。首先,我们简单定义一下它的组成部分。
我们从基础开始:之前的是在我们包括数据的概率之前某事发生的概率(可能性),之后的是包含数据之后的概率。**
贝叶斯定理【2】写成
上式中, P(B) 为证据*, P(A) 为先验, P(B | A) 为似然, P(A | B) 为后验。 P(A | B) 是 A 发生的概率如果 B 已经发生。我们可以将概率和概率分布代入方程(这对我们目前的工作更重要)。*
2.1 模型定义
现在,是时候将我们的简单线性回归定义为概率模型了。我们假设数据遵循高斯分布,平均值为α + β x ,标准差为ϵ,如下所示
我们本质上是在选择我们的可能性,也就是说,我们给我们观察到的变量(数据)分配了一个分布函数。下一步,我们需要定义我们的前科。对于每个参数(我们的未观察变量),我们需要定义一个先验分布。把它想成一个先验信念,或者,如果你有参数的先验估计,这些先验估计就成为先验。因为我们不太了解参数,所以让我们定义一些通用分布
因为这是我们的第一款车型,所以我们会对我们的选择含糊其辞。用贝叶斯术语来说,这意味着我们将使用平坦先验。根据我们对模型的基本理解,我们知道ϵ不可能是负数,我们的斜率相对较小。稍后我们将改进我们选择先验的方式。当应用这些思想时,我们将只使用高斯和半高斯分布
让我们绘制这些分布图,以便更好地理解我们所说的平坦分布。
*_, ax = plt.subplots(1,1)x = np.linspace(-15,15,1000)
ax.plot(x,stats.norm.pdf(x,0,10), label='α')
ax.plot(x,stats.norm.pdf(x,0,1), label='β');
ax.plot(x,stats.halfnorm.pdf(x,0,5), label='ϵ')
ax.legend();*
我们模型中每个参数的先验分布
我们可以从上面看到,我们没有告知我们的贝叶斯模型我们的参数值可能是什么。这意味着数据将对我们的后验分布产生重大影响。我们将在未来学习如何在看不到数据的情况下,在我们的可观察变量中反映我们先前的选择。我们称这个建模步骤为先验预测检查,,它有助于诊断糟糕的建模选择。
2.2 模型检查
我们总是喜欢从生成我们自己的数据开始,并确保模型被很好地指定。它为更复杂的模型带来了显著的价值,但是我们将在所有的例子中使用这种方法作为一个好的实践。
*n = 200
true_α = 3
true_β = 0.2
true_ϵ = 0.2
ϵ = np.random.normal(0, 0.2, n)x = np.random.normal(10, 1, n)
true_Y = true_α + true_β * x
Y = true_Y + ϵ_, ax = plt.subplots(1,2,figsize=(8,4))
ax[0].plot(x, Y, 'o')
ax[0].set_xlabel('x')
ax[0].set_ylabel('y', rotation=0)
ax[0].plot(x, true_Y, 'k')
az.plot_kde(y, ax=ax[1])
ax[1].set_xlabel('y')
plt.tight_layout()*
综合生成模拟数据的图,以进行模型检验。
我们可以在上面看到我们生成的数据和我们期望从中恢复的拟合线,也就是说,我们希望从数据中恢复我们的真实参数。
PyMC3 让我们以一种非常简洁的方式来翻译我们上面定义的模型。首先,我们定义参数的先验分布,然后是可能性。我们准备好取样了!
*with pm.Model() as model_l:
# priors
α = pm.Normal('α', mu=0, sigma=10)
β = pm.Normal('β', mu=0, sigma=1)
ϵ = pm.HalfNormal('ϵ', 5)
# likelihood
y_pred = pm.Normal('y_pred', mu=α + β*x, sd=ϵ, observed=Y)
trace_l = pm.sample(
2000,
tune=3000
)
idata = az.from_pymc3(trace_l)az.plot_trace(
idata,
var_names=['α', 'β', 'ϵ'],
lines=[
("α",{}, true_α),
("β",{}, true_β),
("ϵ",{}, true_ϵ),
],
);*
左边是每个参数的后验分布及其真实值(黑线),右边是采样期间每个时间步长的单个采样值。
我们稍后会更详细地理解这些情节,但我只想告诉你,我们正在很好地恢复我们的真实价值。现在,关注参数的分布(左边的图)。这些是我们正在估计的参数的后验分布,垂直线代表真实值。我们可以看到,我们非常接近这些真实值。请记住,我们使用了平坦先验,并且我们生成了相对较小的数据集(200 个点)。
2.3 模型实施
现在,是时候将经过验证的模型应用到我们的数据中了。
*with pm.Model() as model_l:
# priors
α = pm.Normal('α', mu=0, sigma=10)
β = pm.Normal('β', mu=0, sigma=1)
ϵ = pm.HalfNormal('ϵ', 5)
# likelihood
y_pred = pm.Normal('y_pred', mu=α + β*t, sd=ϵ, observed=y)
trace_l = pm.sample(
2000,
tune=3000
)
idata = az.from_pymc3(trace_l)*
2.4 模型可视化
另一种可视化我们的模型并确保我们已经正确地完成了数学表述的转换的方法是使用 Kruschke 图。
*pm.model_to_graphviz(model_l)*
我们实施的模型的 Kruschke 图,显示了每个参数和各自的概率分布,以及具有相应可能性的观察变量
有了上图,我们更容易把握对模型的理解。在每个节点内,我们都可以找到变量和分布,例如,检查包含ϵ的圆,你可以找到前面定义的半正态分布。观察到的变量由阴影节点表示。圆角框表示重复,即我们的数据集中有 192 个数据点,我们将计算所有这些数据点的可能性。箭头显示依赖关系;在我们的例子中,我们的可能性取决于参数α、β和ϵ.
既然我们确信已经正确地设置了模型,那么是时候分析我们的结果了。为此,让我们用与前面经典方法相似的方式绘制结果。
*plt.plot(t, y, 'C0.')alpha_m = trace_l['α'].mean()
beta_m = trace_l['β'].mean()draws = range(0, len(trace_l['α']), 10)
plt.plot(t, trace_l['α'][draws] + trace_l['β'][draws] * t[:, np.newaxis], c='gray', alpha=0.5)plt.plot(t, alpha_m + beta_m *t, c='k',
label=f'y = {alpha_m:.4f} + {beta_m:.4f}*x')plt.ylabel('log UK drivers KSI')
plt.xlabel('Time (in months)', rotation=0)plt.legend();*
英国驾驶员 KSI 数量和时间的对数的贝叶斯模型的回归线(黑线)和不确定性估计(灰线)。
首先要注意的是,这条黑线与我们从经典线性回归中得到的非常相似。正如我们已经提到的,我们得到的不仅仅是点估计,而是一个分布——我们的后验分布。灰线代表我们对估计的不确定性。我添加它们是为了让它更有趣,并让您初步了解我们将在下一篇文章中分析的内容。
2.5 贝叶斯方法与经典方法
现在,让我们比较两个模型的点估计。
*print("Bayesian model\n")
alpha_m = trace_l['α'].mean()
print("\u0302α: " + str(alpha_m))
beta_m = trace_l['β'].mean()
print("\u0302β: " + str(beta_m))
print('\n---\n')
print('Least Squares\n')
b_hat = np.sum((t - t.mean())*y) / np.sum((t - t.mean())**2)
a_hat = y.mean() - b_hat*t.mean()
print("\u0302α: " + str(a_hat))
print("\u0302β: " + str(b_hat))Bayesian model̂α: 7.545267492352623
̂β: -0.0014456381236993064---Least Squareŝα: 7.545842731731764
̂β: -0.0014480324206279495*
让我们也检查一下残差的标准差。
*σ_error = trace_l['ϵ'].mean()
σ_error**20.023403824629370424*
我们真的很亲密!它们产生类似结果的原因是,通过最小二乘法获得的点估计实际上与来自使用平坦先验的贝叶斯线性回归的最大后验概率(MAP)* (后验模型)是一回事(正如我们在这里所做的)。稍后,我们将深入探讨这一切。*
3.讨论
我们的方法的一个问题是,我们违反了经典回归分析的一个基本假设。假设观测值 y 相互独立。我们的例子不是这样,因为它们在时间上是相互关联的。为了说明这种情况,让我们考虑:
- *为 t 和 *y,绘制相同的图形,这次用一条线连接所有点;
- 绘制残差图。
*plt.plot(t, y)
plt.ylabel('log UK drivers KSI')
plt.xlabel('Time (in months)', rotation=0);*
英国司机数量的日志 KSI 绘制成时间序列。
*residuals = y - (a_hat + b_hat*t)
plt.plot(t, residuals)
plt.plot(t, np.zeros(len(y)), '--', c='k', alpha=0.4)
plt.ylabel('Residuals')
plt.xlabel('Time (in months)', rotation=0);*
经典线性回归模型的残差。
一方面,我们可以在我们的数据上看到一个清晰的模式,并且我们的残差远远不是随机分布的。
让我们看看其他方便的工具来诊断一组观察值的随机性。我说的是相关图*,它包含了一个观察到的序列和同一个序列移动 k 时间点到未来的相关性。对于最小二乘法,请记住,它的计算公式为*
注意,我们使用 t 来简化我们的理解,即自变量只不过是时间。
通过绘制残差与具有滞后(时间差)的残差,我们绘制了同一个变量与其自身的关系——因此,名为自相关*。我们需要很好地理解这个观点,所以在这个问题上多花一点时间是有意义的。*
3.1.相互关系
首先,我们要引入协方差的概念。它描述了两个变量一起变化的程度。我们可以说,方差是一个群体之间如何变化的度量,而协方差是两个变量彼此变化多少的度量。
X 和 Y 之间的协方差的公式为
我用 X 和 Y 来简化下标,但是你知道对于我们来说, X 是 Y_t 而 Y 是 Y_{t-1} 。批注𝔼[ Y 无非是 Y 的期望值*。假设每个数据点的可能性相等,则每个数据点的概率为 1/n,给出*
对于离散情况,我们将考虑。当然,你已经发现这只是我们的时间序列的平均值(也用ȳ).表示
现在我们了解了协方差,我们可以将这个想法扩展到相关性*(也称为皮尔逊相关系数),它只是由我们随机变量的方差的平方根归一化的协方差。*
3.2 自相关
对于我们的问题(至少目前),我们对两个随机变量的相关性并不特别感兴趣,而是对一个随机变量本身感兴趣。让我们创建我们的系列,以便能够更好地将其可视化。我们必须确保它在时间上不是独立的(创建我们想要检查的相关性)。
*y = [0]for i in range(1000):
y.append(np.random.randn() + y[-1]*0.5)
y = np.asarray(y)
plt.plot(np.cumsum(y))plt.ylabel('$y_t$')
plt.xlabel('t', rotation=0);*
从有一个滞后的自回归过程产生的合成数据。
我们可以看到,我们使我们的 Y 明确依赖于它以前的值。我们使用一个系数来定义当前值与前一个值的相关程度——可以随意使用其他值进行测试。我们以后会更好地理解这些系数的用处。让我们画出 Y_t 对 Y_{t-1} 的图,看看我们会得到什么。
*plt.plot(y[:-1], y[1:], 'o');
plt.xlabel('$y_{t-1}$')
plt.ylabel('$y_t$', rotation=0);*
散点图显示时间序列的前一点和当前点之间的相关模式。
从上面的图中,我们可以立即看到两个变量正相关。关于我们的模型,这告诉了我们什么?让我们找出答案。
3.3 自相关函数
现在我们要推广自相关函数或 ACF(更多见此处【3】)。平稳随机过程滞后 k 时的 ACF 定义为
对于任意的 i 除以随机过程的方差。
使用上面的等式,我们可以说,对于 k ≥ 0,滞后 k 处的自相关函数定义为
让我们建立自己的 ACF。
*def correlation(x, y):
return np.mean((x - x.mean()) * (y - y.mean())) / (x.std() * y.std())def acf_calc(y, lag=40):
return np.array([1] + [correlation(y[:-i], y[i:]) for i in range(1, lag)])def acf_plot(y, alpha=0.05, lag=40):
acf_val = acf_calc(y, lag)
plt.vlines(np.arange(lag), 0, acf_val)
plt.scatter(np.arange(lag), acf_val, marker='o')
plt.xlabel('lag')
plt.ylabel('autocorrelation')acf_plot(y);*
合成生成数据的相关图。
我们可以看到自相关,对于某些滞后,它们似乎很高,但是有多高呢?我们需要一个下界和一个上界来回答这个问题。如果我们假设时间序列是高斯的,并且如果自相关分别高于或低于这些上限或下限,则零假设被拒绝。它指出,在α的显著性水平上,在给定的滞后处和之后没有自相关(这里我们进行假设检验,并抛出可接受的但有些随机的显著性值——不像贝叶斯那样)。我们的上限和下限可以用以下公式计算
这里我们将使用α = 5%。SE 是标准误差, r_k 是滞后 k 时的估计自相关。SE 可以使用 Barlett 公式计算
*def standard_error(acf_values, n):
se = np.zeros(len(acf_values) - 1)
se[0] = 1 / np.sqrt(n)
se[1:] = np.sqrt((1 + 2 * np.cumsum(acf_values[1:-1]**2)) / n )
return sedef acf_plot(y, alpha=0.05, lag=40):
acf_values = acf_calc(y, lag)
plt.vlines(np.arange(lag), 0, acf_values)
plt.scatter(np.arange(lag), acf_values, marker='o')
ci = stats.norm.ppf(1 - alpha / 2.) * standard_error(acf_values, len(y))
plt.fill_between(np.arange(1, ci.shape[0] + 1), -ci, ci, color='blue', alpha=0.2)
plt.xlabel('lag')
plt.ylabel('autocorrelation')acf_plot(y, lag=25);*
具有置信区间的合成生成数据的相关图。
现在我们知道了如何计算 ACF 和上下界,我们可以使用一个库来完成它。
*from statsmodels.graphics.tsaplots import acf, plot_acf
acf_stats = acf(y)
plot_acf(y);*
合成生成数据的相关图,使用 statsmodels 库创建置信区间。
3.4 残差相关图
我们终于准备好为英国车手数据的残差做相关图*,最重要的是,分析它。*
主要思想是,如果残差是随机分布的(我们希望它们是这样),那么它们是相互独立的。它显示在相关图中所有未超过我们置信界限的小节中。我们将运用到目前为止所学的知识。
*plot_acf(residuals);*
**相关图适用于英国驾驶员 KSI 数量记录的经典线性回归模型的残差。
看起来没那么好看;有相当多的酒吧超出了蓝色阴影区。我们可以看到, k =1, k =2, k =11, k =12, k =13 超出了这些限制( k =0 始终为 1,正如我们在上面手动计算 ACF 时所示,因为它是每个点与其自身的相关性)。我们说这些点与零显著不同,这表明当我们使用经典的线性回归时,我们违反了误差是随机分布的假设。
4.结论
我们建立了两个不同的模型,从根本上做同样的事情:他们使用时间作为解释变量,并线性建模其与英国司机 KSI 的对数的关系。第一种方法是使用标准最小二乘法拟合的经典线性回归模型。第二个是我们的第一个贝叶斯模型,将点估计的思想扩展到后验(和先验)分布。然而,结果并不令人满意。我们的残差远远不是随机分布的,这是我们的观察结果彼此不独立的结果。我们需要新的工具来解决这个问题。从本质上讲,有一个潜在的动态演变是无法观察到的,我们也无法对其建模。这就是状态空间模型的用武之地。状态精确描述了一段时间内无法观察到的动态过程。在下一篇文章中,我们将建立我们的第一个状态空间模型!
保持联系: LinkedIn
参考
[1] J. Commandeur,S. Koopman,《状态空间时间序列分析导论》(2007),牛津大学出版社
[2]https://en.wikipedia.org/wiki/Bayes%27_theorem
[3]https://www . real-statistics . com/time-series-analysis/random-processes/自相关函数/