TowardsDataScience-博客中文翻译-2019-三十一-
TowardsDataScience 博客中文翻译 2019(三十一)
原文:TowardsDataScience Blog
协议:CC BY-NC-SA 4.0
我如何以及为什么获得 75Gb 的免费外汇“滴答”数据。
原文:https://towardsdatascience.com/how-and-why-i-got-75gb-of-free-foreign-exchange-tick-data-9ca78f5fa26c?source=collection_archive---------4-----------------------
通过完整的 Python 代码来抓取、提取、转换并加载到 HDF5 数据存储中,以满足未来的自己。
Photo by Robson Hatsukami Morgan on Unsplash
在完成数据科学硕士课程的最后,我开始想象自己用机器学习和自动化交易做聪明的事情。如果你和我一样,碰到过【我如何获得历史自由分笔成交点数据】connudrum,那么这篇帖子就是为你准备的。
我把我的文章分为三个部分:
- 一些背景知识。
- 故事时间——如何失败然后成功。
- 将所有这些放在一起—完整的代码
请随意跳到你最感兴趣的部分。
1.一些背景知识
正如我之前提到的,这一切都始于我对应用一些机器学习(ML)来预测市场价格或者更简单的市场方向的问题感兴趣。也就是说,我想使用 ML 来分析给定货币对的一些历史数据,然后告诉我未来某个特定点的价格。然后我会用这个预测价格来决定如何投资我的钱。因为我只需要知道目标货币的价值是增加还是减少,我可以简化我的算法来简单地预测市场方向(正或负)。当然,这是对交易盈利所需条件的过分简化,但是准确预测市场的未来状态(准确率高于 50%)是关键的第一步。
在使用 ML 建立市场模型之前,我首先需要一些关于市场的数据。这些数据有多种形式。通常情况下,数据可以在所谓的“蜡烛数据”或基于时间的“棒线”中自由传播。蜡烛数据以基于时间的增量(频率)出现。这可以是 1 分钟、5 分钟、1 天、每月等等。以下是来自 FXCM 的日蜡烛线数据示例:
Example using FXCM RestAPI to download daily candle data.
输出如下所示:
FXCM daily candle data.
对于给定的货币对(本例中为 USD/JPY ),每一行代表单日数据的一根蜡烛线。它告诉你的是蜡烛线开始时的价格,蜡烛线结束时的价格,蜡烛线窗口期间的最高价格和最低价格。它为市场的两个方面做这件事,出价和要价。
这些值共同代表时间和价格值的边界,在此边界内所有价格变化(称为分笔成交点)都会发生。除了蜡烛线边界之外,数据还包括刻度数量值。该值表示在蜡烛线边界内发生的价格变化的数量。但是,它不会告诉您何时发生了变化,或者变化有多大或多小。
下图直观地展示了蜡烛的样子:
Diagram showing the structure of a single data candle.
通过查看上图,打开和关闭边界之间的空间是由蜡烛大小指定的。在 USD/JPY 示例中,这个空格代表一整天。然而,它可能是 1 分钟,1 小时或任何蜡烛数据供应商可以为您提供。
本质上,蜡烛线是原始基础分笔成交点数据的一个样本,结合了关于样本本身的一些描述性统计信息(分笔成交点计数)。事实上,人们可以认为蜡烛数据实际上是关于发生了什么的有限的元数据,而不是事件的实际记录。
为什么使用蜡烛数据作为 ML 的主要数据源是不好的。
那么蜡烛数据有什么问题呢?显然每个人都喜欢它..首先,蜡烛数据是低分辨率的,不能描述产生蜡烛“盒子”的潜在价格变化。第二,标准蜡烛使用基于时间的采样,这进一步模糊了潜在的事件。Marcos Lopez De Prado 在他的书“金融机器学习的进步”中详细解释了这些问题。
反对基于时间的蜡烛线的一个简单论点是,市场活动不会在一天中均匀发生。这样,大量产生交易机会的价格变化,当它们存在于蜡烛内部时,就变得模糊不清了。这反过来使得 ML 算法不可能学习关于这些自主时间的任何东西,因此不能识别交易机会,因为所需的指标在时间蜡烛数据中不存在。
De Prado 确实提出了替代类型的蜡烛线采样,但是要创建这些类型的蜡烛线数据集,您需要有基础的分笔成交点数据。替代采样的一个示例是基于规则的分笔成交点数量对分笔成交点数据进行采样。换句话说,不管市场有多活跃,都要根据固定的交易量来制作蜡烛线。
最终,轻松访问原始数据使我能够通过使用各种数据集构建概念来进行自己的特征工程,这些概念专门旨在获得更好的机器学习结果。此外,我热衷于在这种需要大量训练数据的问题上尝试一些深度学习技术。
2.故事时间——如何失败然后成功
足够的背景..这里的要点是告诉您如何获得大量免费分笔成交点数据的技术故事。我将向您介绍我是如何做到这一点的,以及我遇到的挑战和如何克服它们。
我将向您展示我如何为 21 个货币对收集 2 年(2017 年和 2018 年)的分笔成交点数据,并将其加载到一个分层数据文件(HDF5) 。数据来自 FXCM ,最初使用它们的 RestAPI 。我最终放弃了他们的 api,采用了不同的方法。
版本 1 -> API 失败:
首先,这里是我第一次尝试使用的库:
FXCM 提供了一个名为fxcmpy_tick_data_reader
(这里也称为tdr
)的函数,它将返回关于哪些货币对可用的信息,但也允许您下载一个目标货币。
How to use FXCM RestAPI to get available tick data currency pairs (symbols).
输出将如下所示:
FXCM available symbols with some duplicates.
计算符号的数量显示有 24 个,但是这里有一些重复,所以让我们创建一个没有任何重复的新列表:
script that creates a list of symbols without duplicates.
如您所见,我们现在只有 21 种货币对:
FXCM available symbols without duplication.
要获取一些数据,您需要指定该范围的开始和结束日期,然后调用函数来要求目标货币对,如下所示:
FXCM tick_data_reader() output when request 5 weeks of data.
事实证明,无论您是否只需要 1 天,数据都是以 1 周为单位提供的。所以当你看 URL 的时候,我们可以看到上面的代码已经返回了一个 2017 年第 1 周的 gzip 文件。如果您更改日期并自己运行代码,您将看到 URL 遵循相同的模式,只需根据您请求的日期范围更改年份或周数。如果您请求超过一周的数据,它只是返回更多的 gzip 文件。
要查看数据,您需要对下载的数据调用一些方法,这些方法将提取文件并将包含的 csv 转换为 pandas 数据帧。根据您使用的方法,它还会将索引从类型object
更新为类型DataTimeIndex
。
如下图所示,get_data()
方法将索引从object
(又名str
)转换为DatetimeIndex:
Output showing index has been converted to type = DatetimeIndex.
在get_raw_data()
的情况下,索引保持为`object``类型。
Output showing the index type has not been changed.
慢速索引转换:
当调用get_data()
时,您会注意到它比get_raw_data()
要长得多。这是由于从object
到DatetimeIndex
的指数转换。get_data()
和get_raw_data()
都产生一个熊猫数据帧,但是get_data()
更新索引以使用日期时间列作为索引,并将其转换为类型DatetimeIndex
。我后来发现,在没有 srftime 格式指令的情况下,包含微秒字段的 Pandas 在转换为DatetimeIndex
时表现不佳。参见 stackoverflow 上的“为什么 pandas.to_datetime 对于‘2014/12/31’等非标准时间格式较慢”了解更多信息。
这里的底线是需要一个 srftime 指令来加速(索引转换)。我稍后将回到这一点。
你可能会问为什么拥有一个DatetimeIndex
很重要?..这很重要,因为我们希望以后能够根据时间对数据进行切片。为此,应该从一开始就将数据正确加载到 HDF5 数据存储中。我们不希望以后不得不转换索引。
继续前进…
为了自动下载,我们需要提供触发下载每周文件的日期范围。为了防止下载超时,我决定一次下载一个月的文件。为了做到这一点,我创建了一个短列表,我称之为periods
,它包含了这段时间内每个星期一的日期。
下面的脚本计算出一年中每个星期一的正确日期,并将它们组织成 4 个一组的列表(一个周期),并将所有列表放在一个大列表中。稍后,我使用这个列表来自动下载。
Script that creates a list of shorter lists that contain the sequential dates of four Mondays each.
如果我的描述看起来令人困惑,下面的示例输出显示了 2 个短列表,每个短列表包含 4 个按顺序排列的星期一日期,并从前面的列表开始。
List of lists containing 4 Mondays each.
接下来,我创建了一个函数,它执行以下操作:
- 下载文件。
- 提取数据。
- 将索引更新为
DatetimeIndex
。 - 将数据追加到正确的表中。
- 刷新 HDF5 文件中的表格。
我还附上了一些打印声明,以帮助我跟踪下载、提取和上传的内容。
然后,我在一个小程序中使用该函数,打开 HDF5 文件,使用 ETL 函数,最后关闭 HDF5 文件。
Small program that uses the FXCM RestAPI to fetch FX data and then loads it into a HDF5 database
为什么上面的代码不够好:
所以在运行脚本之后,很快就清楚这将需要一段时间。当我说一会儿..我是说几天!!..真的是几天!!
显然这还不够好,因为我不知道为什么它会这么慢,我只是假设这是互联网问题引起的太空猴子。这个过程的缓慢给我带来了各种各样令人沮丧的问题。
- 由于下载时间太长,我会离开我的电脑,最终导致睡眠模式,并中断了下载过程。这导致脚本失败。
- 最恼人的是,由于数据的大小,我决定将数据写入外部硬盘。即使我取消了所有的节电盒,我的笔记本电脑仍然会偶尔断开和重新连接硬盘。如果这发生在 HDF5 文件关闭之前,整个数据存储将会损坏!
在做了一番调查后,我意识到太空猴子不应该受到指责。相反,前面提到的指数转换是整个过程花费这么长时间的原因。我还发现我下载的文件是 gzip 文件,每个大约 5Mb。一旦提取出来,它们会膨胀到 80Mb 左右。
这为加速整个过程提供了一些机会..
版本 2 ->成功
在多次尝试下载所有可用的分笔成交点数据后,由于超时、文件损坏和必须重启而失败..我决定采取不同的方法。
如前所述,每个 gzip 文件只有几兆字节。我决定首先抓取所有文件,并将它们存储在一个目录中,稍后我将提取这些文件。这样我就可以避免每次出错时都要重新下载文件。
版本 2 需要的库:
刮刀
如果在代码中不清楚,我正在做的是构造遵循 FXCM 格式的 url,然后我使用requests
库在构造的 URL 下载每个文件。为了确保每个文件正确下载,我决定流式下载文件,并在chunks
中将数据写入磁盘。以下是抓取脚本:
Python script that downloads FXCM gzip files that contain FX data.
尽管每个文件只有 5-10mb 大小,但值得注意的是,它们有 2000 多个,下载它们确实需要一些时间。你可能会发现自己走开去吃烤面包或看网飞的一个节目。
检查点
当你回到你的电脑,你可能要检查你下载了每种货币的所有文件。您可以费力地手动检查这些文件,或者…您可以使用下面的代码来检查它们:
Python script that counts files by matching the first 6 characters.
假设您成功下载了所有内容,上面的脚本输出应该如下所示:
Output from file counting script.
现在您已经下载了所有文件,下一步是提取并加载到我们的数据库中(HDF5 文件)。此时,我还没有解决索引更新缓慢的问题。因此,我按货币对创建了批处理文件夹,这样我就可以监控数据到数据库的提取、转换和加载(ETL ),而不用一次呆在电脑前好几天。每批大约需要 3-4 个小时完成。
定量
在本文结束时,您不需要创建批处理,但是如果出于某种原因您想创建批处理,您可以使用下面的脚本。
它为每种货币创建一个文件夹,然后通过将前 6 个字符与其所属的文件夹名称进行匹配来查找属于该文件夹的文件,然后将文件复制到目标文件夹中。最后,您将拥有 21 个文件夹,每个文件夹包含 104 个文件。
Python script that copies gzip files to folders by matching files to folders.
ETL 脚本解释
现在的目标是解压缩 gzip 文件,将数据转换为正确的格式,然后将其加载到 HDF5 数据库中。如果你喜欢阅读代码,可以直接跳到最后,但是如果你对代码是如何组合在一起的故事感兴趣,请继续阅读..
所以现在我决定放弃 FXCM api 来解包这些文件,我需要手动提取它们。我不能再使用tick_data_reader()
函数了,因为它调用 web 服务器寻找与我请求的日期相关的文件。所有的文件现在都在我的硬盘上,所以我需要写我自己的提取代码。
由于编解码器的问题,提取数据比我预期的更具挑战性。最后,我查阅了 FXCM api 源代码,找到了执行提取的函数(见第 181 行)。我稍微修改了一下代码,然后就去参加比赛了。
Python snippet that extracts FXCM gzip files.
接下来,我遇到了一个更模糊的问题。我的脚本将运行良好,直到它遇到日期时间毫秒字段不包含所需的 6 个小数位的数据。
四舍五入到六位以下的数字不包括零,这在其他任何情况下都是完全合理的。例如,.123000
会显示为.123
。不幸的是,当您指定srftime
指令(format="%m/%d/%Y %H:%M:%S.%f"
)时,这会破坏您的代码。
幸运的是,有一种奇妙的方法dataframe.DateTime.str.pad()
可以让你用任何你想要的字符或数字填充字符串。所以我需要做的就是在字符串长度与要求的 26 个字符不匹配的地方用零填充“DateTime”列。更棒的是,它只用了一行代码就实现了。
Python snippet that pads the microsecond field with zeroes to ensure consistent formatting.
接下来是将索引从类型object
转换为类型DatetimeIndex
的问题,这个过程相当缓慢。
在向一些老同学提出这个问题后,他们中的一个(谢谢 Alex)建议这可能与我让pd.to_datetime()
推断格式有关。在 Pandas 文档中,它特别提到推断 datetime 格式可能会将转换速度提高 10 倍。因为我要处理大约 20 亿行数据,所以我很感激我能获得的任何加速。
然而,事实证明,当包含微秒时,推断 datetime 格式实际上并不好用。参见 stackoverflow 上的“为什么 pandas.to_datetime 对于‘2014/12/31’等非标准时间格式很慢”了解更多信息(感谢分享链接 Davide)。
有了这个技巧,我尝试用一个 srftime 格式指令指定格式,例如:format="%m/%d/%Y %H:%M:%S.%f"
。这大大缩短了执行时间。使用"infer"
规范只需要几分钟就可以转换一个文件。通过指定格式,转换实际上只需要几秒钟!!。
不幸的是,我的麻烦还没有结束。在转换和加载“EURCHF”文件的中途,我的代码再次中断。事实证明,并非所有文件都遵循相同的日期时间格式。也就是说,有些文件将日期格式化为月/日/年,而其他文件可能是日/月/年甚至年/月/日。
为了处理这个问题,我决定对数据集中的第一个和最后一个记录进行采样,因为每个文件包含 5 个工作日的数据。然后,在使用正确的 srftime 指令转换索引之前,我使用了一个 for 循环和一些嵌套的 if 语句来判断给定文件中每一行的格式。脚本的这一部分允许我在不到 2 个小时的时间内提取并加载所有文件(2184),而在此之前,仅加载 104 个文件就需要 3-5 个小时。
下面是将索引转换为Dtaetimeindex
的代码:
最后但同样重要的是将数据加载到数据库中。幸运的是,这其实很容易。 PyTables 让这一步超级简单。所需要的是:
- 打开文件。
- 将数据追加到正确的表中(如果不存在,则创建一个)
- 将更新写入磁盘(通过“刷新”文件)
- 关闭文件
虽然没有我的脚本,但你会注意到我正在打印一些摘要信息。你不需要这样做。我用这种方法来跟踪脚本运行到了哪里,并了解数据在哪里出了问题。
最后但并非最不重要的一点是,因为我是成批进行 ETL 的。一旦一批完成,我想要某种声音通知,所以我从realpython.com那里借了一些代码,从头开始构建一个 440 赫兹的正弦波并播放 2 秒钟。我只是在我的剧本结尾照原样使用了它。
Python script that generates and plays a tone at 440Hz.
3.把所有的放在一起
正如所承诺的,这里是您需要的所有代码:
- 收集 21 种货币对两年的分笔成交点数据
- 提取数据
- 将索引转换为 DatetimeIndex
- 将其加载到 HDF5 数据库中
重要提示:记得在运行代码之前更新您的环境的目录位置。
List of libraries required for the final script.
第 1 部分—收集数据并检查下载
Python script that downloads all the gzip files from FXCM and then counts them.
第 2 部分—提取、转换文件并将其加载到 HDF5 数据存储中。
Python script that extracts, transforms and loads FXCM gzip tick data files into a HDF5 file.
我希望这篇文章对你有用。下一次,我将讲述/演示使用这么多分笔成交点数据可以带来的一些乐趣。
感谢阅读。
卷积实际上是如何进行的?
原文:https://towardsdatascience.com/how-are-convolutions-actually-performed-under-the-hood-226523ce7fbf?source=collection_archive---------5-----------------------
PyTorch & TensorFlow 用来加速卷积的两个简单技巧。
Photo by Hosea Georgeson on Unsplash
卷积已经成为现代神经网络的一个基本部分,因为它们能够捕捉局部信息并通过权重共享减少参数的数量。由于几乎所有基于视觉的模型(和一些 NLP 模型)都使用这种或那种形式的卷积,显然我们希望尽可能快地进行这些运算。
为了强调对快速卷积的需求,下面是一个简单网络的分析器输出,该网络具有一个 2D 卷积层,后跟一个全连接层:
Profiler Output for a Simple Conv Network
线性层(addmm
)后面的卷积层负责大约 90%的总执行时间。因此,开发一些技巧来尽可能加快计算速度也就不足为奇了。
在这篇博客中,我们将看看 PyTorch 和 TensorFlow 用来显著提高卷积速度的两个技巧。我们将使用 2D 卷积,因为这是最容易可视化的,但完全相同的概念适用于 1D 和三维卷积
朴素卷积实现
让我们从 2D 卷积的一个简单实现开始。我们将使用一个简单的 2x2 内核和一个 3x3 输入矩阵(带一个通道):
**input_matrix** array([[3., 9., 0.],
[2., 8., 1.],
[1., 4., 8.]], dtype=float32)**kernel** array([[8., 9.],
[4., 4.]], dtype=float32)**bias**
array([0.06], dtype=float32)
Naive 2D Convolution
简单的实现很容易理解,我们简单地遍历输入矩阵并拉出与内核形状相同的“窗口”。对于每个窗口,我们对内核进行简单的元素级乘法,并对所有值求和。最后,在返回结果之前,我们将偏差项添加到输出的每个元素中。
通过用 PyTorch 自己的conv2d
层检查输出,我们可以快速验证我们得到了正确的结果。
naive_conv_op = conv_2d(input_matrix, kernel, bias)
print(naive_conv_op)torch_conv = nn.Conv2d(1, 1, 2)
torch_conv_op = torch_conv(input_matrix)
print(torch_conv_op)**Output:
naive_conv_op** array([[145.06, 108.06],
[108.06, 121.06]])**torch_conv_op** tensor([[[[145.07, 108.07],
[108.07, 121.07]]]])
这是它们的执行时间:
%%timeit
conv_2d(input_matrix, kernel, bias)%%timeit
torch_conv(input_matrix)**Output:
Naive Conv:** 26.9 µs ± 1.34 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)**Torch Conv:** 59.5 µs ± 935 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
现在让我们检查当内核大小保持不变,输入矩阵的大小缓慢变化时,执行时间是如何变化的。
Naive Convolution vs PyTorch Convolution
我们实现中的 2 个 for 循环负责 O(n)执行时间,当输入大小增加到 250 x 250 以上时,朴素 Conv 每个矩阵需要 1-3 秒。如果我们有一个像 Inception Net 这样的巨大网络,有数百个卷积和数千个大型输入矩阵,朴素卷积将是一个绝对可怕的想法。
但是,请注意 PyTorch 自己的实现可以很好地适应输入矩阵的大小。显然,PyTorch 做卷积的方式不同。
招数 1 : im2col
在将每个窗口与内核相乘时,我们执行了两个操作:
- 增加了条款
- 把它们加在一起。
….我们对输入矩阵中的每个窗口都这样做。
现在这里要问的重要问题是:我们能对整个操作进行矢量化吗?
答案是肯定的,这正是im2col
帮助我们做的(代表图像块到列)
简单地说,im2col
是一种技术,我们将每个窗口展平,然后将它们堆叠成矩阵中的列。现在,如果我们将内核展平为一个行向量,并在两者之间进行矩阵乘法,我们应该会在对输出进行整形后得到完全相同的结果。
Im2Col
Im2Col-Reshaping
让我们试一试:
Naive Implementation of Im2Col
im2col(input_matrix, kernel)**Output:** array([[3, 9, 2, 8],
[9, 0, 8, 1],
[2, 8, 1, 4],
[8, 1, 4, 8]])
现在我们展平内核并进行矩阵乘法:
output_shape = (input_matrix.shape[0] - kernel.shape[0]) + 1im2col_matrix = im2col(input_matrix, kernel)
im2col_conv = np.dot(kernel.flatten(), im2col_matrix) + bias
im2col_conv = im2col_conv.reshape(output_shape,output_shape)
print(im2col_conv)torch_conv = nn.Conv2d(1, 1, 2)
torch_conv_op = torch_conv(input_matrix)
print(torch_conv_op)**Output:
im2col_conv** array([[145.06, 108.06],
[108.06, 121.06]])**torch_conv_op** tensor([[[[145.07, 108.07],
[108.07, 121.07]]]])
现在我们来看看它是如何扩展的:
矢量化无疑有所帮助,但仍有改进的空间。在我们进入下一个技巧之前,让我们看看为什么矢量化会有帮助。
为什么会这样?
所有现代 CPU 和 GPU 都带有优化的矩阵代数库,允许代码利用硬件加速。这些库归入 BLAS 或基本线性代数子程序的总称。当我们对代码进行矢量化并调用np.dot()
时,它允许 numpy 使用 BLAS 库,从而提高执行速度。
事实上,在早期的探查器输出中,您可能会看到:
MKLDNN 代表深度神经网络的数学内核库,这是英特尔的 BLAS 库。自从我在英特尔 i7 上运行 PyTorch 模型后,PyTorch 自动调用了英特尔的 BLAS 库。如果你在 Nvidia GPU 上运行这个,PyTorch 会使用 cuBLAS (Nvidia 的 BLAS 库)。
下一个技巧是去除 2- for 循环,高效地创建im2col
矩阵。
诀窍 2:记忆跨越
在im2col
中创建窗口时,我们仍然使用 2 for 循环来索引输入矩阵,这会降低执行速度。为了理解如何改进这一点,我们需要看看 numpy 数组是如何存储在内存中的。
就像所有其他数组一样,numpy 数组作为连续的块存储在内存中。每个 numpy 数组还有一个.strides
属性,告诉我们需要跳转多少字节来访问下一个元素。
例如:
x = np.arange(10, dtype = 'int64')
print(x)
print(x.strides)**Output:
x** array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])**x.strides** (8,)
每个元素都是int64
,即 64 位或 8 字节,这就是为什么x.strides
告诉我们需要跳跃 8 字节来访问数组中的下一个元素。
当处理 2D 数组时,我们得到两个步幅值,告诉我们在列方向和行方向跳跃多少字节。
Credit: AndyK on StackOverflow[2]
x = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(x)
print(x.strides)**Output:
x** array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])**x.strides** (24,8)#Jump 24bytes to access next row, 8bytes to access next column
现在有趣的部分来了,numpy 让我们能够通过使用一个叫做np.lib.stride_tricks.as_strided
的函数来改变任何 numpy 数组的步长。基于我们提供的跨距值,这个函数简单地改变了我们在内存中查看数组的方式,并生成了一个新的“视图”。
这里有一个例子:
x = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(x)x_newview = np.lib.stride_tricks.as_strided(x, shape = (5, 4), strides = (8,8))
print(x_newview)**Output:****X**
array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])**X_newview** array([[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6],
[4, 5, 6, 7],
[5, 6, 7, 8]])
当开始下一行时,我们使用as_strided
仅跳转 8 个字节(1 个元素),而不是跳转 24 个字节(3 个元素)来开始下一行。使用shape
参数,我们也可以根据需要设置输出形状。
注意:如前所述,as_strided
改变了我们看待内存中数组的方式。这意味着如果我们改变“视图”中的值,它将改变内存中的值,从而改变原始矩阵中的元素。
X_newview[1,3] = -99
print(X_newview)
print(X)**Output:
X_newview** array([[ 1, 2, 3, 4],
[ 2, 3, 4, -99],
[ 3, 4, -99, 6],
[ 4, -99, 6, 7],
[-99, 6, 7, 8]])**X** array([[ 1, 2, 3],
[ 4, -99, 6],
[ 7, 8, 9]])
由于as_strided
不使用任何循环来创建这些“视图”,我们可以使用它来有效地生成卷积窗口。我们需要做的就是计算正确的步幅值和输出形状,剩下的工作由as_strided
来完成。
然而,如果我们提供了错误的步幅值,as_strided
将访问数组之外的内存位置并返回垃圾值。幸运的是,scikit-images
库中的view_as_windows
函数通过在后台使用as_strided
自动计算形状和步幅值,为我们完成了所有繁重的工作:
from skimage.util.shape import view_as_windowsinput_matrix = np.array([[3,9,0], [2, 8, 1], [1,4,8]])
print(input_matrix)kernel = np.array([[8,9], [4,4]])
print(kernel)windows = view_as_windows(x, kernel.shape)
print(windows)**Output:
input_matrix** array([[3, 9, 0],
[2, 8, 1],
[1, 4, 8]])**kernel** array([[8, 9],
[4, 4]])**windows** array([[[[3, 9],
[2, 8]], [[9, 0],
[8, 1]]], [[[2, 8],
[1, 4]], [[8, 1],
[4, 8]]]])
现在我们只是重塑:
output_shape = (input_matrix.shape[0] - kernel.shape[0]) + 1
windows = windows.reshape(output_shape**2, kernel.shape[0]*2)
print(windows)**Output:
windows** array([[3, 9, 2, 8],
[9, 0, 8, 1],
[2, 8, 1, 4],
[8, 1, 4, 8]])
下面是完成所有这些工作的最后一个函数:
Im2Col with Memory Strides
现在我们可以做矩阵乘法,方法和之前一样:
output_shape = (input_matrix.shape[0] - kernel.shape[0]) + 1
mem_strided_mat = memory_strided_im2col(input_matrix, kernel)
mem_strided_conv = np.dot(kernel.flatten(), mem_strided_mat) + biasmem_strided_conv = mem_strided_conv.reshape(output_shape, output_shape)
print(mem_strided_conv)torch_conv = nn.Conv2d(1, 1, 2)
torch_conv_op = torch_conv(input_matrix)
print(torch_conv_op)**Output:
mem_strided_conv** array([[145.06, 108.06],
[108.06, 121.06]])**torch_conv_op** tensor([[[[145.07, 108.07],
[108.07, 121.07]]]])
让我们看看它与迄今为止所有其他实现相比如何:
Plot for Mem Strided Im2Col
使用as_strided
大大提高了我们的实现速度!事实上,它几乎和 PyTorch 一样快。
此外,如果您在分析器输出中注意到,PyTorch 在卷积之前使用自己的as_strided
函数:
内存权衡
因为我们需要为输入矩阵的每个窗口创建列,所以 im2col 矩阵最终会比简单的实现消耗更多的内存。
Memory Consumption of Strided Im2Col
然而,速度上的提升(见下表)远远超过了内存消耗增加带来的困难。
摘要
这里总结了所有实现的执行时间。当输入大小改变时,内核大小(2 x 2)保持不变。我在英特尔 i7 处理器上运行了所有这些程序。
Final Results Table
令人难以置信的是,仅用两个简单的技巧,我们就能获得比简单卷积快 150 倍的性能提升。PyTorch 实现仍然比我们的内存步进式 im2col 实现快 2 倍。这很可能是因为 PyTorch 有自己的张量实现,可能会针对更大的矩阵进行优化。事实上,对于 50 x 50 以下的矩阵,我们的实现比 PyTorch 更快。
虽然我们在这里只使用 PyTorch, TensorFlow 在执行卷积( docs )时也执行完全相同的一组操作。
最后,当使用填充、步长或 1D/3D 卷积时,我们的实现会发生怎样的变化:
填充:如果我们添加填充,对我们的实现没有影响,因为填充通常在卷积之前应用。然而,必须正确计算输出形状。
步幅:这里我们假设步幅为 1。更大的步幅只会以更大的跳跃滑动窗口,这意味着必须重新计算as_strided
中的strides
。然而,概念是相同的。(事实上, *view_as_windows*
有一个 *step*
参数,它也可以处理步幅。)
更多过滤器:在我们的例子中,我们假设内核只有一个过滤器。如果我们有更多的过滤器,每个过滤器将被拉平,给我们一个矩阵,而不是向量。接下来,我们将这个矩阵乘以 im2col 矩阵。这意味着我们将把矩阵乘以矩阵而不是矩阵乘以向量来获得输出。
1D 或 3D 卷积:im2 col 矩阵中的列会变得更短或更高,因为窗口的大小会改变(也取决于内核)。
我希望你喜欢并发现这很有用!如有任何问题或意见,请随时与我联系。
Gist with all code:https://Gist . github . com/anirudhshenoy/089 a 70 deed 944d 0 ca 7 ab 0 b 6 a5 e b5 a 7 f 1
参考文献:
[1]第 11 讲 CS231N:费-李非&安德烈·卡帕西&贾斯廷·约翰逊http://cs 231n . Stanford . edu/slides/2016/winter 1516 _ Lecture 11 . pdf
[2]https://stack overflow . com/questions/53097952/how-to-understand-numpy-stamps-for-lender
[3] TensorFlow Conv2D 文档: https://www.tensorflow.org/api_docs/python/tf/nn/conv2d
保险公司是如何实施人工智能(AI)的?
原文:https://towardsdatascience.com/how-are-insurance-companies-implementing-artificial-intelligence-ai-aaf845fce6a7?source=collection_archive---------11-----------------------
保险公司正在使用人工智能为客户提供更好、更快、更便宜的服务。
Image by Gerd Altmann from Pixabay
人工智能(AI)已经成为保险行业的热门词汇。尽管如此,该行业在人工智能实施方面已经取得了重大进展,尽管我们仍处于早期阶段。在本文中,我们将了解:
- 为什么保险行业需要人工智能解决方案
- 保险公司已经在这方面做了什么,以及;
- 在可预见的未来,人工智能将如何影响行业。
人工智能概述
最简单地说,人工智能(AI)是一套计算机化的工具,旨在实现通常需要人类智能才能实现的目标。
从商业角度来看,人工智能可以用来以更快、更便宜和更准确的方式进行操作。人工智能可以帮助自动化劳动密集型流程,从而降低成本和节省时间。人工智能还可以用来更好地了解客户——公司可以使用人工智能来分析他们掌握的客户数据,以预测客户行为,了解偏好,优化价格和产品供应。
人工智能由许多相关技术组成,其中包括:
- 机器学习:涉及训练计算机识别数据模式和/或预测结果。其他 AI 技术都是机器学习的应用。机器学习通常用于制定量化交易策略。
- 深度学习:机器学习的一种应用,模型可以从数据中分析并得出结论,在没有经过训练或给出明确指令或框架的情况下解决问题。这些模型自己学习。
- 神经网络:设计用来模仿人脑并识别数据模式的算法。他们可以识别、分类和分析不同的数据,并可以发现对人类程序员来说太复杂而无法编写代码的模式。深度学习和神经网络的一个有趣例子是 Goolge 的 QuickDraw ,这是一个草图游戏,它使用用户草图的大规模数据库来准确猜测你在画什么。
- 自然语言处理:帮助计算机理解、解释和回应书面文本或语音。聊天机器人通常使用这项技术。
人工智能还有更多的子集,但关键的要点是:
- 人工智能算法用于分类和研究数据,并识别关系
- 当应用于数据集时,人工智能可以用于模式识别、优化和预测
- AI 可以对不同格式的数据进行分类和分析:文本、语音、图像、视频等。它还可以处理结构化(即标记数据)和非结构化数据。
- 机器学习算法通过输入大量带标签的数据集进行学习。一旦他们能够从已知的数据集中识别出正确的结论,他们就可以应用于现实世界的问题。
保险业对人工智能的需求
保险业是一个古老且高度监管的行业。或许正因为如此,与其他行业相比,保险公司接受技术变革的速度一直较慢。保险业仍然沉浸在缓慢且需要人工干预的手动纸质流程中。即使在今天,客户在获得理赔或签署新保单时,仍面临耗时的文书工作和官僚作风。客户也可能最终支付更多的保险费,因为保单不是为他们的独特需求量身定制的。在我们大多数日常活动都是在线、数字化和便捷的时代,保险并不总是一种愉快的客户体验。
也就是说,我们开始看到保险公司在全球范围内推动增强其技术能力,以便他们能够更快、更便宜、更安全地开展业务。在过去的几年里,有一些保险公司大举投资人工智能解决方案的突出例子。
麦肯锡估计如果人工智能技术完全应用于保险业,每年的潜在价值高达 1.1 万亿美元。其中,受益最大的业务领域是:
- 销售和营销:机器学习可以用来更有竞争力和相关性地为保单定价,并向客户推荐有用的产品。保险公司可以根据个人需求和生活方式为产品定价,这样客户只需支付他们需要的保险费用。这增加了保险对更广泛的客户的吸引力,其中一些客户可能是第一次购买保险。
- 风险:神经网络可用于识别欺诈模式,减少欺诈索赔。根据联邦调查局的数据,美国非健康保险欺诈估计每年超过 400 亿美元,这可能会使家庭每年额外花费 400-700 美元。机器学习还可以用于改善保险公司的风险和精算模型,这可能会导致更有利可图的产品。
- 操作:使用神经网络的聊天机器人可以被开发来理解和回答客户通过电子邮件、聊天和电话提出的大量问题。这可以为保险公司释放出大量的时间和资源,使其能够投入到更有利可图的活动中。
保险公司如何采用人工智能?
Four areas where AI can help the Insurance industry. Image by author, with background by Gerd Altmann from Pixabay
世界各地的保险公司如何实施人工智能来改善他们的底线和客户体验的例子很多。还有许多初创公司正在为保险公司和客户提供人工智能解决方案。我将在这里介绍几个有趣的案例。
健康保险
在健康保险的成本和复杂性不断增加的世界里,Accolade Inc .的 Maya 智能平台使用机器学习来帮助患者和雇主选择最相关的和最具成本效益的健康保险覆盖范围。据报道,Accolade 为超过 110 万客户提供服务。
英国公司 Kirontech 声称其软件 KironMed 使用机器学习来分析医疗索赔,并检测可能意味着医疗保险欺诈或浪费(未充分利用的服务)的模式。据报道,该公司已经筹集了 350 万美元的首轮融资。
2018 年, SwissRe 和 Max Bupa Health 与印度健身科技初创公司 GOQii Health 达成合作。GOQii 使用来自可穿戴设备和他们自己的人工智能驱动的“健康引擎”的数据来跟踪健康指标,并向个人用户提供健康生活建议和风险报告。当与这些人工智能和技术驱动的创业公司合作或收购它们时,保险公司押注这将导致更少的索赔支出,并为健康保险客户带来更具吸引力的保费。
汽车保险
早在 2017 年,美国保险公司 Liberty Mutual 通过其创新孵化器 Solaria Labs 推出了一个新开发者门户。这个开放的 API 门户将公共数据与专有保险数据结合起来,为客户创造更好的保险产品。据报道,其中一个产品是一个移动应用程序,允许发生事故的司机使用智能手机摄像头实时评估他们的汽车受损情况。该应用程序还将提供维修成本估计。驱动该应用程序的人工智能将使用数以千计的车祸图像进行训练。
,中国金融科技公司中国巨头阿里巴巴集团的一部分,**发布了一款名为丁孙保的软件,用于分析车祸损失并处理索赔。丁孙宝使用机器视觉,使司机能够使用智能手机摄像头拍摄他们受损的汽车。然后,该应用程序将照片与其图像数据库进行比较,以确定损坏的严重程度,估计维修成本,并分析事故对司机未来保险费的影响。重要的是,蚂蚁金服声称该应用程序在6 秒内评估损害并处理索赔,而据报道,人类索赔理算员需要大约 6 分 48 秒。
经营效率
美国保险公司好事达(Allstate)与厄尔利信息科学(EIS)机构合作开发了一款名为 ABIe(发音为“陈细洁”)的虚拟助理。ABIe 旨在回答好事达保险代理人的常见问题,这些代理人从销售一种保险产品转向销售另一种保险产品。ABIe 使用自然语言处理每月处理 25,000 个查询。
当在产品线之间切换时,许多销售代理面临着陡峭的学习曲线,好事达发现其呼叫中心被他们自己的销售代理关于新产品的问题所淹没。这导致实际客户在呼叫中心等待的时间很长,从而导致潜在的商机损失。像 ABIe 这样的解决方案可能会带来巨大的变化。
人工智能在保险业的未来
人工智能有可能将客户的保险体验从令人沮丧和官僚主义转变为快速、按需和更实惠的方式。量身定制的保险产品将以更公平的价格吸引更多的客户。如果保险公司将人工智能技术应用于他们所掌握的海量数据,我们将很快开始看到更灵活的保险,如按需付费保险,以及根据事故、客户健康等情况自动调整的保费。
我们将看到保险变得更加个性化,因为使用人工智能技术的保险公司将能够更好地了解他们的客户需要什么。保险公司将能够通过加快工作流程来实现成本节约。随着人工智能驱动的分析开辟新的业务和交叉销售机会,他们还将发现新的收入来源。
最重要的是,上述人工智能解决方案可以让客户更容易与保险公司互动。这可能导致人们更有可能购买保险。
到目前为止,美国 2019 年的预测食品趋势如何?
原文:https://towardsdatascience.com/how-are-the-predicted-food-trends-of-2019-holding-up-so-far-in-the-us-b68d3f3157d3?source=collection_archive---------17-----------------------
深入分析
每到年底,行业专家、当地企业、记者,基本上每个人都会试图预测下一年哪些食物会受欢迎。从下一个大饮料,到新的“甘蓝”,甚至到新的热门餐厅趋势,各种各样的事情都被预测到了。像《T2》这种由 Eater 制作的名单有很多,它基本上整合了像《T4》、《纽约时报》、《优步快餐》、《全食超市》和许多其他公司制作的名单。
食品趋势,或者更确切地说是时尚,经常是转瞬即逝的,尽管有些会留下来,但每个人都想走在他们的前面,尤其是那些能从短暂的炒作中获取最大利润的公司。因此,随着 2019 年第一季度的结束,我认为看看这些预测迄今为止是如何保持的会很有趣。当然,3 个月并不算多,但仔细观察现在的趋势可以帮助预测今年年底哪些食物会成为最受欢迎的食物。
竞争者
首先,我从消费者列表中选择了 30 种我认为会很有趣的产品。当你浏览列表的时候,试着在你的脑海中给它们排序,或者至少想想哪一个是你现在认为最重要的,哪一个是最不重要的。
这 30 种产品排名不分先后,分别是:
为了比较这些产品的受欢迎程度,从 Google Trends 收集了类似时间段的数据,即 2018 年和 2019 年的 1 月初至 3 月底。现在,在我们继续前进之前,应该对以下结果持保留态度,因为 Google Trends 数据并不代表实际的搜索数量,而只是该查询的相对受欢迎程度。事实上,谷歌趋势计算和调整流行指数的方式是通过审查搜索的随机样本。
此外,仅仅因为像“海藻”这样的词被谷歌搜索,并不一定意味着它被搜索是因为这个人实际上对海藻作为一种食物感兴趣,而是可能有许多其他原因。然而,我要说的是,对于这些搜索词中的大多数,相关的热门查询都与食物有关。如果你仍然对谷歌趋势数据的工作方式感到困惑,这里有一个有用的帖子。
抛开这个小小的免责声明,让我们再来看看这个列表,但是这次,是按照平均受欢迎指数的百分比增长降序排列的。你的预测正确吗?
赢家和输家
名单上有 30 个选项,受欢迎指数下降 14.5%的最后一个选项是 seitan,一种由面筋制成的肉类替代品。蜂花粉也没有落后太多,为-14.4%,仅比 seitan 高 0.1%。然而,乳制品替代市场的竞争者燕麦牛奶以惊人的 187.5%的受欢迎指数增幅位居榜首,而 celtuce 以+96.5%的受欢迎指数位居第二。
整体而言,考虑到有相当多的项目是普通人可能不认识的,这个列表看起来可能会令人望而生畏。所以,让我们把它分解开来,仔细看看。
前 3 名
1.燕麦牛奶
现在有人可能会问,燕麦牛奶到底有什么大不了的?好吧,问问任何一家咖啡馆,甚至只是燕麦牛奶爱好者,他们正等着得到一些 Oatly 的咖啡师版燕麦牛奶。以防你没听说,在他们的网站上已经完全断货了。更疯狂的是,6 包 32 盎司(或者 1L,如果你是一个公制单位的人)的 Oatly 的咖啡师版燕麦牛奶在 Oatly 的网站上标价 25 美元,而在亚马逊上,在写这篇文章的时候,一包 2 盎司,是的只是两盎司的价格在 49.95 美元到 54.95 美元之间。另外,如果你想知道的话,一包 6 个的价格是 139.81 美元,加上 19.99 美元的运费。
燕麦牛奶的严重短缺导致价格飙升,但不要担心,奥特利说他们将在 6 月 12 日重新进货。但是请记住,数量是有限的,每个顾客只允许一箱。如果你错过了机会,你可以在最近的全食超市或其他出售他们产品的参与商店购买他们的其他产品,如冷冻燕麦牛奶或低脂燕麦牛奶。抱歉,那是什么?那里也卖完了?哼。真的有那么好吗?等等,燕麦牛奶到底是什么?燕麦牛奶到底是怎么回事?
燕麦牛奶…那是什么?
乳制品替代品在过去几年里越来越受欢迎,杏仁奶和豆奶现在不再被认为是放在某个隐蔽角落的新奇产品,而是不仅成为超市货架上的主食,也成为咖啡馆和家庭的主食。然而,燕麦牛奶在美国发展缓慢,直到后来发生了一系列导致燕麦牛奶严重短缺的事件,这将在后面解释。
Photo by Oatly
那么如果杏仁奶在技术上是杏仁坚果汁,豆奶是豆奶汁,那么燕麦奶是什么呢?嗯,燕麦牛奶是先将燕麦和水混合在一起,然后用粗棉布挤压,去除燕麦残渣。是的,就这么简单……但是谁会想到燕麦会是一种很好的牛奶替代品呢?里卡德·斯特教授,就是他。
早在 90 年代,瑞典食品科学教授 Rickard ste 和他的团队开发了一种生产液体燕麦基料/饮料的工艺。然后他们成立了 Oatly 公司,并使用现在已获得专利的工艺生产燕麦牛奶。当然,Oatly 使用的过程并不是简单地将燕麦和水混合在一起。Oatly 生产燕麦牛奶有 7 个步骤,在不同的步骤中,他们使用酶溶解蛋白质并分解淀粉,然后过滤、热处理液体并包装。
制作燕麦牛奶最重要的步骤之一实际上是第一步,称为碾磨步骤,在这里他们将燕麦和水混合在一起。(我知道,我只是说他们做的不仅仅是这些,但是请听我说完!)在这里,他们对燕麦进行干燥或湿热处理,这样做是为了保持饮料中的β-葡聚糖含量。热处理使β-葡聚糖酶失活,β-葡聚糖酶是一种分解可溶性纤维β-葡聚糖的酶。那么,为什么我们要在燕麦牛奶中加入β-葡聚糖呢?除了它带来的健康益处,即降低胆固醇和调节血糖水平,它还赋予燕麦牛奶浓厚的质地。这对那些喜欢在咖啡中加入植物牛奶的人来说尤其重要,对咖啡师来说更是如此。
咖啡师混合
如果你曾经在网上购买过植物奶,你会发现有普通的杏仁奶、豆奶或燕麦奶,还有杏仁奶咖啡师混合奶或燕麦奶咖啡师版。那么,为什么咖啡师会有特别版呢?这是因为人们希望这些乳制品替代品在加入咖啡时表现得和普通牛奶一样……但事实并非如此,因为它不是牛奶。
Photo by Califia Farms, Oatly & Alpro
这些“牛奶”在加入咖啡时肯定会分离出来,更值得注意的是,它们不像普通牛奶那样有奶油般的口感。这就是为什么如果你看任何杏仁或豆奶产品的标签,你会看到结冷胶或刺槐豆胶等成分。这些口香糖是添加到产品中的增稠剂,使其更粘稠,不,不要担心,对你没有坏处。
然而,燕麦牛奶不需要增稠剂,因为它含有β-葡聚糖,可以很好地自然结合水,从而使燕麦牛奶更稠。现在,仅仅因为这些植物基牛奶更稠并不意味着它们不会从咖啡中分离出来,它只是提供了与普通牛奶相同的口感和质地。为了确保牛奶在咖啡中不凝结,碳酸钙或柠檬酸钾等成分开始发挥作用。它们通常被添加来强化含有矿物质的产品,但是一旦加入咖啡中,它们也可以防止牛奶分离。这是因为这些成分充当缓冲剂,因此酸度水平的变化意味着植物蛋白不再凝结,牛奶在咖啡中不会凝结。增稠剂和缓冲成分之间微妙的平衡使得咖啡师版本的牛奶与众不同。咖啡师混合饮料中的一种或两种成分通常含量较高,这可能也是它们价格较高的原因。
Photo by Oatly
另一方面,Oatly 的燕麦牛奶使用了不同的成分,一种叫做磷酸二钾的成分,由于盐的碱性,他们将其描述为酸度调节剂。这种特性有助于防止牛奶从咖啡中分离出来。还添加了菜籽油来增加脂肪含量,使燕麦牛奶具有奶油般的质地,模仿普通牛奶的质地。
因此,一些咖啡师将燕麦牛奶描述为奇迹牛奶,因为当他们用它来制作拿铁艺术时,它会“表现良好”。它在咖啡师中的受欢迎程度是燕麦牛奶成功的主要原因。尤其是在美国。
营销和燕麦牛奶的严重短缺
燕麦牛奶最近的人气飙升可能会让一些人感到困惑,但当回顾植物牛奶市场发生的事件时,就很容易理解燕麦牛奶是如何开始传播其影响力的。
杏仁奶和豆奶长期以来一直是乳制品替代品的宠儿,但杏仁奶成为了 2015 年加州干旱的替罪羊,豆奶多年来一直被围绕转基因生物和雌激素的争议所包围。因此,市场的不确定性让一个新的竞争者加入了竞争。燕麦牛奶。但是话说回来,任何数量的其他植物牛奶,如大米牛奶,豌豆牛奶或大麻牛奶都可以利用这种不确定性,那么燕麦牛奶是如何胜出的呢?
就像我之前说的,一个词。咖啡师。
2016 年,当 Oatly 在美国首次亮相时,Oatly 的美国总经理迈克·梅瑟史密斯(Mike Messersmith)和他的团队曾接触过咖啡店,并给了他们咖啡师版燕麦牛奶的样品进行测试。现在,想象你是一名大约 2016 年的咖啡师,用大豆和杏仁牛奶制作拿铁咖啡。这些牛奶替代品有效,但它们并不伟大,它们不是牛奶。但是接下来是燕麦牛奶。你喝一口。嗯,它尝起来很中性,不像杏仁和大豆那样掩盖咖啡的味道。有意思。在将牛奶蒸出泡沫后,你仍然持怀疑态度,但当你开始将牛奶倒入咖啡中时,你会意识到它仍然不像牛奶,但它肯定比杏仁和大豆好。它更浓,更浓,更合适,艺术!这次你不必挣扎着去做了!你抿了一口咖啡,注意到咖啡浓郁的味道是如何散发出来的,而不是品尝杏仁或大豆的味道。你必须告诉你的其他咖啡师朋友,你的顾客!你必须告诉所有愿意听的人。
至少,我认为事情是这样发展的,但主要的一点是,咖啡社区很快就有了新的植物牛奶,就像这种神奇的牛奶一样。从那时起,它才真正开始起飞。起初是在几家咖啡店,后来几家变成了数百家,数百家变成了数千家。接下来你知道,他们也在超市的货架上!然后,突然,他们不在了。超市货架上没有,咖啡店里也没有。其实都卖完了。这是太多的需求,太快了,Oatly 很难跟上,事实上,他们仍然是。他们正在尽最大努力,并计划在新泽西的米尔维尔开设他们的新工厂,以帮助应对需求。希望下次你去当地的咖啡店或杂货店时,你会找到它。
通过咖啡店将燕麦牛奶引入美国市场是 Oatly 的明智决定。说“是的,当然,为什么不呢?”要容易得多当你的咖啡师问你今天是否想尝试燕麦牛奶而不是大豆或杏仁时,与去超市买一整盒或一瓶燕麦牛奶而不是你的常规选择相比。后者是豌豆牛奶尝试过的策略,根据数据,它似乎不太管用。
豌豆…牛奶?
是的,你没看错。豌豆牛奶。不,它不是糊状的绿色液体,也不像蔬菜的味道。这种饮料是用黄豌豆制成的。豌豆被磨成面粉,然后在面粉中加入水,制成豌豆牛奶。有人说它的味道堪比杏仁奶,但后味刺鼻,也有人说它尝起来像豆奶。
发明豌豆奶的公司 Ripple 成立于 2015 年,该产品已经上市好几年了。然而,它并没有燕麦牛奶那么成功。
Photo by Dr. Archer Atkins at archerfriendly.com
豌豆奶比杏仁和豆奶含有更多的蛋白质和奶油(它的成分列表中也有增稠剂),因此,它可能是乳制品替代市场中一个崭露头角的有力竞争者,但它仍然没有在咖啡店中出现。考虑到豌豆牛奶的受欢迎程度在 2019 年下降了 1.4%,它也没有像燕麦牛奶一样引起人们的兴趣。
也许对豌豆牛奶的想法还有一些疑虑。毕竟,我敢肯定,当你们第一次读到豌豆奶这几个字的时候,你们中的大多数人都会联想到一种绿色糊状液体的形象。这或许是余味让人们远离了豌豆牛奶。燕麦牛奶没有显示出放缓的迹象,看起来豌豆牛奶可能不得不加快步伐,以占领不断增长的植物牛奶市场的更大份额,随着 Ripple 最近推出他们的咖啡师风格的植物牛奶,他们可能会这样做。他们现在要做的就是让咖啡社区支持他们。谁知道呢?咖啡师可能会引领无奶牛奶行业的又一场革命。
2.塞尔图斯
这种粗茎绿叶蔬菜有许多名字,如莴笋和茎用莴苣,但是将这种蔬菜介绍到美国的 W Atlee Burpee 创造了 celtuce 这个名字,它来自芹菜+莴苣的组合,然而一些人仍然称它为芹菜莴苣。有时,这种蔬菜也被称为中国生菜,因为它主要出现在中国菜肴中。不过,中国人自己称这种蔬菜为“沃孙”或“孙青”。
Photo by Vmenkov, Wikimedia Commons
在中国的不同地区发现了不同类型的莴苣,这种类型决定了菜里是主要用茎还是叶和茎都用。据说叶子炒起来很好吃,但是茎似乎是这种蔬菜的焦点。据说茎脆脆的,甚至尝起来有点坚果味。在中国烹饪中,茎被切成片,腌制或爆炒,都可以做出美味的菜肴。
大多数时候,在美国,这种蔬菜出现在高端餐厅的菜单上,因为这种蔬菜在当地超市并不常见。相反,你通常会在当地的亚洲杂货商那里找到它们,还有其他你可能以前没听说过的产品。
Celtuce 被推荐到许多年终食物趋势预测名单上,主要是因为它出现在无数高级餐厅的菜单上(例如:亲属关系,梅利塞 &等)。).他们预测这一趋势现在将渗透到大众中。尽管你很难在杂货商那里找到生菜,但考虑到它们是一种相当容易种植的作物,这种奇特的蔬菜似乎更频繁地出现在农贸市场。然而,不仅仅是 celtuce 越来越受欢迎,事实上,绿党似乎在 2019 年第一季度表现良好。
蔬菜的崛起
曾经有一段时间,肉类是至高无上的,但最近蔬菜似乎抢走了人们的注意力。仅仅在十年或二十年前,菜单上的素食和纯素选择还很少,但现在这已经成为一种常态。如今,人们正在寻找更多的方法将蔬菜纳入他们的饮食中,好奇的尝试不同的绿色蔬菜来代替常规的生菜和西兰花。不过,这并不是说肉类已经完全失去了它的地位,但蔬菜肯定正在攀升。看看 2019 年风靡一时的一些蔬菜。
除了甜菜之外,所有蔬菜在这两年间的受欢迎程度都有所增长。然而,大比例的增长并不意味着它在整体上更受欢迎。以 celtuce 数字为例。2019 年与 2018 年相比,更多的人对生菜感兴趣,但这并不意味着更多的人对生菜而不是甜菜感兴趣。甜菜总体上仍然很受欢迎,只是今年对它感兴趣的人比去年少了。
但是,到底是什么导致了消费者寻求更多蔬菜的转变呢?答案是 keto。看到许多蔬菜,相关的疑问是这些蔬菜是否符合酮饮食,低碳水化合物,高脂肪饮食,它必须是酮。随着越来越多的人遵循酮饮食,很明显,低碳水化合物蔬菜流行,而高碳水化合物蔬菜过时了,这可能也解释了为什么高碳水化合物甜菜的受欢迎程度下降了。然而,这个理论的一个例外是木薯,它是一种高碳水化合物蔬菜。
准确地说,木薯今年的受欢迎程度增加了 30.1%。这主要是由于木薯粉的兴起,以及它可以用来制作玉米饼的事实。与玉米粉相比,木薯粉不含谷物和麸质,因此许多人会做出改变。虽然高碳水化合物面粉不符合酮饮食的要求,但它符合另一种流行的饮食要求,称为 peganism,代表旧石器时代的素食主义。
旧石器时代的饮食已经流传了一段时间了。如果你不太确定它是什么,旧石器饮食是一种饮食计划,你可以吃旧石器时代的食物,那时人类是猎人和采集者。这意味着他们的饮食包括瘦肉、鱼、蔬菜和谷物。佩甘主义本质上是这种饮食的一个分支,你可以从两种饮食中吸取要点。这是旧石器时代的饮食,但重点是纯素食主义。所以北京狗主要吃蔬菜、谷物等。但是与纯素食主义者不同,他们被允许吃肉和奶制品,尽管吃得很少。
我知道,我知道,有这么多的饮食趋势时隐时现,有时很难跟踪什么是时尚,什么不是。为了让事情变得更简单,我们来看看今年有望成功的三种节食方法。到目前为止,看起来不错。
从上面可以看出,酮仍然是最受欢迎的饮食,但是素食主义和半素食主义也呈上升趋势。虽然没有照片,但旧石器时代的饮食减少了 0.3%,这表明这些非常注重消费蔬菜的饮食似乎在 2019 年处于领先地位。
虽然半素食主义也称为灵活饮食,与其他饮食相比,本季度的增长百分比最低,但随着时间的推移,它很可能会加速增长。这是三种饮食中唯一没有严格限制的。灵活饮食和其他饮食一样,要求你食用更多的蔬菜,但它并不谴责肉类或奶制品的消费,相反,它赞同在你的饮食中引入更多的植物和谷物,鼓励你从植物和豆类如扁豆等中获取大部分蛋白质。本质上,这就像素食主义,但没有承诺。随意素食主义,如果你愿意的话。
这些饮食,以及远离肉类的普遍趋势对公众对这份清单上的项目的兴趣有很大的影响。事实上,这也可以解释下一件物品的价格上涨。
3.福尼奥
原产于西非,这种谷物被誉为下一个藜麦。它有两种类型,黑色 fonio 和白色 fonio。然而,后者是更受欢迎的一种。传统上,在塞内加尔,它的制作类似于米饭,和一种花生酱一起食用。
Photo by Yolele Foods at yolelefoods.com
像藜麦一样,它是标准白米的替代品。与大米相比,fonio 的蛋白质和纤维含量更高。它还富含氨基酸,特别是蛋氨酸和半胱氨酸,这两种氨基酸在许多其他常见的谷物中通常是缺乏的。fonio 中的铁、镁、锌和 B 族维生素也高于大米。这一点很重要,因为那些选择不吃肉的人有时很难从饮食中获得足够的营养。
虽然肯定比大米好,但它如何与最受欢迎的大米替代品之一藜麦相提并论?
当单独比较时,fonio 的受欢迎程度增加的百分比更高。然而,就一般的恶名而言,藜麦绝对是更受欢迎的一种。考虑到过去几年它一直备受关注,这并不奇怪。
尽管从技术上讲,藜麦是种子而非谷物,但它被誉为超级食物已经有一段时间了。它富含蛋白质和纤维,富含营养。与 fonio 相比,它实际上纤维含量更高,在大多数情况下,取决于产品,蛋白质含量也更高。不过,两者都不含麸质,所以这对所有患有乳糜泻的人来说都是一种解脱。但如果 fonio 打算从藜麦中夺取冠军,那么 fonio 在哪里明显脱颖而出呢?
矿物,那就是。
Data from Gatom Foods
钙,铁,镁,锌。Fonio 在这四种矿物质的含量方面胜过藜麦,但这有什么关系呢?这些矿物质到底对我们有什么用?
嗯,红细胞的形成需要铁,而身体的免疫系统需要锌。另一方面,钙确保你的骨骼保持强壮和健康,而镁是能量代谢所必需的,有助于肌肉收缩和血液凝固。
确保你达到这些矿物质的平均需求对身体有益。然而,由 NHANES 进行的 2007-2010 年美国全国调查显示,美国人普遍摄入这四种矿物质不足。镁的摄入量最高,有 52%的人口摄入低于估计的平均需求量,而钙、锌和铁的摄入量分别为 44%、11%和 7%。
随着越来越多的美国人转向素食或纯素食,这令人担忧。考虑到肉类是镁和铁的良好来源,而牛奶通常是普通饮食中钙的主要来源,将这些产品从你的饮食中剔除可能会给大多数人带来麻烦。然而,通过转向 fonio 这样的产品,人们可以在保持素食/纯素食的同时获得所需的营养。
除了矿物质,素食者/纯素食者在割肉时也很难获得足够的蛋白质,因为他们习惯了低蛋白蔬菜,如花椰菜、芦笋和其他绿叶蔬菜。这就是为什么他们转向藜麦或 fonio 等谷物,以确保他们获得足够的蛋白质。其他素食主义者友好的选择是受欢迎的,如豆腐、清汤和最近的植物性肉类。让我们快速看看这些肉类替代品是如何相互竞争的。
豆腐和清汤曾因其高蛋白含量而成为肉类的首选替代品,但今年它们却发现自己退居二线,受欢迎程度分别下降了 0.4%和 14%。
随着越来越多的消费者转向无麸质食品,由麸质制成的食品 Seitan 的受欢迎程度大幅下降。另一方面,由发酵大豆制成的豆腐长期以来一直是最受欢迎的,但随着植物性肉类的兴起,受欢迎程度略有下降。然而,请记住,与清汤和肉类相比,豆腐仍然更受欢迎。不过,这种情况可能很快就会改变。
肉而不是植物
Beyond Meat ,一家专注于植物性肉类的公司今年人气飙升,围绕该行业的普遍炒作导致搜索量增加。与 2018 年相比,该术语的增幅高达 58.2%。现在你们中的一些人可能会对植物性肉类这个术语感到挠头,因为这怎么可能呢?哦,但确实如此,而且它正在席卷全国。
Beyond Burger, Photo by Beyond Meat
近年来,由于虐待动物等问题,肉类行业受到了严厉的批评。拥挤的笼子和虐待动物的视频在社交媒体上被无情地分享,关于肉类生产对环境影响的帖子在网上流传。从低效的土地利用,到生产牲畜饲料所需的水,再到牲畜的温室气体排放,生产肉类似乎有很多环境问题。然而,对许多人来说,放弃肉是很难的,因为没有味道像它的替代品。
进入植物性肉类。首先是看起来像牛肉饼的肉饼。然后是肉丸、香肠、玉米卷肉,每个月似乎都有新产品。像 Impossible Foods 和 Beyond Meat 这样的公司是以植物为基础的肉类行业的先驱,新公司不断涌现。但是,让我们倒回去一点,因为有趣的是他们有所有这些产品,但是他们到底是如何让植物看起来和吃起来像肉的呢?
嗯,对于肉饼,不可能食品使用大豆分离蛋白,而超越肉类使用豌豆分离蛋白(因此它是一种无大豆产品)。这些是肉饼的基础,也是肉饼蛋白质含量高的原因。然后像菜籽油、椰子油或葵花籽油这样的成分有助于给它多汁的质地,这是我们在吃肉时习惯的。马铃薯淀粉、甲基纤维素、黄原胶、阿拉伯胶等。帮助将馅饼粘合在一起,防止其碎裂。它也有助于提供正确的纹理,以模仿牛肉馅饼。
最重要的是,这些植物性肉饼甚至像牛肉饼一样流血。它们有红肉所具有的那种典型的红粉色。为了达到这个目的,不可能食品公司使用了血红素。他们使用大豆豆血红蛋白来说明问题,他们通过使用基因工程酵母来大量生产大豆豆血红蛋白,从而使其比从大豆中提取大豆血红蛋白更具可持续性和时间效率。这种化合物不仅赋予了肉红色,也使肉饼尝起来像红肉。据《不可能的食物》报道,血红素是一种在动物组织中大量存在的化合物,是它赋予了生肉血腥的味道。在烹饪过程中,血红素起催化作用,从而赋予肉以肉的味道和香味。所以,真的,他们一石二鸟…或者三鸟,因为血红素赋予了颜色、味道和香味。
另一方面,Beyond Meat 采取了不同的方法,非转基因方法。他们用甜菜汁提取物给他们的肉饼看起来又红又肉。果汁被压榨,然后脱水以浓缩颜色。至于味道,他们从肉中分离出赋予肉的味道和香味的分子,然后将它们与植物中发现的类似分子进行精确定位和匹配。然后这些用来给他们的馅饼一种类似于红肉的味道。也许总的来说,这是一个漫长的过程,但有些人一提到转基因或任何与基因工程有关的东西就退缩了,因此,作为一种无转基因产品,吸引了那些寻求符合他们信仰的产品的顾客。
采取行动
起初很难让人们给植物性肉类一个机会。质地不对,有一种奇怪的余味。但是随着时间的推移,新的配方出现了,公众似乎被这种产品所吸引。从松脆的肉饼,到多汁的甚至像肉一样流血的肉饼,这个行业发展迅猛。曾经在精选餐厅发现的新奇产品,现在出现在大型快餐连锁餐厅的菜单上,如汉堡王的不可能的巨无霸,小卡尔的超越汉堡和德尔塔克的超越塔克。甚至连 LinkedIn 自己的杰夫·韦纳也是不可能汉堡的粉丝。
LinkedIn’s CEO, Jeff Weiner and his thoughts on the Impossible Burger.
预测趋势并不容易,但在这种情况下,分析师和记者似乎都做对了。就在上周,Beyond Meat 以每股 25 美元的发行价上市。到当天收盘时,价格已经飙升至 67.75 美元的 163%。这使得 Beyond Meat 成为大约 20 年来表现最好的 IPO。所以现在,每个人都想分一杯羹。
随着植物性肉类被消费者广泛接受,越来越多的公司正在考虑发布他们的产品。泰森食品公司预计他们的产品将在未来几个月内发布,全食超市将很快供应 Lightlife 的植物汉堡,肯定会有许多公司宣布效仿。尽管竞争对手竞相分一杯羹的威胁迫在眉睫,Beyond Meat 的首席执行官伊桑·布朗(Ethan Brown)似乎并不担心。事实上,他喜欢这样。他对 Vox 的 Sigal Samuel 说:“我认为竞争是好的——它有助于提高对这个行业的认识。也许他是对的。这个行业似乎每天都吸引着越来越多的关注。然而,有传言称,另一家竞争对手正试图从传统肉类行业夺走市场份额。实验室培育的肉,显然是真正饲养奶牛的可持续替代物。当大众可以买到植物性肉类时,它会成为过去吗?我想我们还得再等几年才能知道。
潮流还是时尚?
预测食物趋势没有真正的科学。其中涉及到一些分析,并且做了很多猜测,因为人类,我们经常是不可预测的一群。对于食品趋势,有时很难判断哪个会持续多年,哪个会在几个月后被遗忘。有时候只需要一个视频就能改变这一切。到今年年底,我们都会变成喝燕麦牛奶、嚼通心粉、嚼 fonio 的人吗?很难说。
无论如何,这些食物趋势预测列表将继续在每年年底被炮制出来,许多人将蜂拥而至阅读它们……只是在一月中旬到来时忘记了大部分项目。然而,我认为关注这些列表是很有趣的,看看一些食物最终是如何战胜其他食物,巩固其作为一种食物趋势的地位。它们似乎总是凭空出现,但如果你仔细观察,它们背后总有一个故事。
方法论:
该项目使用了谷歌趋势的数据。在相互比较之前,提取了美国地区 2018 年和 2019 年 1 月至 3 月的每个项目的数据。图表是用 Tableau 制作的,并用 Photoshop 编辑。
人工智能(AI)如何为网络安全解决方案增添新视野?
原文:https://towardsdatascience.com/how-artificial-intelligence-ai-is-adding-new-horizons-to-cybersecurity-solutions-f9e01473330c?source=collection_archive---------9-----------------------
AI For Cybersecurity
麦卡锡和明斯基将人工智能描述为由机器执行的任务,如果由人类执行,将需要大量的智能。做出精确的决策需要所有行为品质的集合数据。这些行为品质是计划、解决问题、推理和操纵。
对人工智能的大规模投资
丰田为 AI 投入 1 亿美元资金;瑞银试图将人工智能引入其投资银行的运营,而风投则梦想用人工智能取代所有人,以降低价格。许多人经常因为从未使用过人工智能或缺乏相关知识而感到尴尬。
许多网络安全供应商使用这个术语,以便通过给客户留下深刻印象来增加销售额。在本文中,我们将共同探讨更多关于网络安全和人工智能的内容。
人工智能对商业有许多 好处 人工智能可以大致分为两种类型。下面给出了两个宽泛的分类:
狭义人工智能
狭义的人工智能是指如今我们在计算机中随处可见的“智能系统,它们被教会了完成特定任务的方法,但没有被编程来完成这些任务。”与人类不同,这些系统只学习正确的方法来完成特定的任务,这就是为什么它们也被称为“苗条人工智能”。
通用人工智能
通用人工智能是将通用人类能力存储到软件中,以便它在遇到问题时可以找到解决方案。它有时被称为“强人工智能”,因为它可以一次性存储和处理大量数据,并提供解决方案。它就像人脑一样工作,因为它通过处理可用的信息来做出决定。
网络安全:概述
网络安全是指旨在保护网络和信息免受破坏或未经授权访问的技术和做法。随着政府、企业和军事组织在计算机上收集、处理和存储大量信息,网络安全至关重要。
这些数据中的相当一部分可能是敏感的;它可以是知识产权、财务数据、个人信息或任何其他类型的数据,未经授权的访问或暴露可能会给人们带来严重的后果和问题。
组织在全球范围内将大量数据传输到不同的系统。存储在系统中的这些数据很容易被攻击并从系统中提取出来。这会导致超出我们想象的问题。近年来,我们发生了一些数据盗窃案件,这些案件的发生是因为本组织本身采取的网络安全措施不足。网络安全确保这种规模的数据盗窃不会发生。因此,它有助于个人隐私。
人工智能在网络安全中的作用
网络攻击者正在投资自动化以发起攻击,而许多组织仍在探索手动工作,以结合内部安全发现并将其与外部威胁信息联系起来。对于我们目前部署的这种安全系统,发现入侵可能需要更长的时间,在此期间,攻击者将利用漏洞危害系统并获取知识。
为了应对这些挑战,许多组织正在探索在其常规网络风险运营中使用人工智能。不能否定人工智能在网络安全中的作用。
通过人工智能,可以快速识别和分析新的漏洞和弱点,以帮助减轻进一步的攻击。它有能力最小化对人类的压力。一旦检测到入侵,当需要他们干预时,他们就会收到警报。
人工智能在网络安全中的优势
人工智能可以变得更聪明
一个有用的类比是思考为你的组织工作的最好的专业人士。如果你用这个员工来训练你的机器学习和人工智能程序,那么 AI 就会像你的明星员工一样聪明。现在,如果你花时间用你的 100 名最好的员工来训练你的机器学习和人工智能程序,结果将是一个像 100 名最好的员工的大脑加在一起一样聪明的解决方案。人工智能 vs 机器学习也是近年来的热门话题。
艾从不休息
人工智能在网络安全方面为数不多的优势之一是,AI 从不休息一天,也不会在连续工作数小时后感到疲劳。因此,我们可以在这里得出结论,人工智能有助于以最高的效率、最高的速度和最高质量的产品完成工作。
预防网络威胁和避免攻击是理想的,但阻止这些事件的发生几乎是不可避免的。一旦他们这样做,快速反应是至关重要的,无论是在尽量减少攻击造成的伤害,还是从其影响中恢复过来。有了“思考机器”,快速反应可能会被写入它的系统。
人工智能迅速发现威胁
致力于发现潜在威胁的算法可能会实时执行,以提供对攻击的即时响应。现有的安全软件系统数据库和算法具有有限的范围,并且通常无法跟上新威胁媒介的快速发展和突变的步伐。
设计到智能安全系统中的自适应或机器学习算法,有可能在威胁发生时发现并应对威胁——甚至是动态威胁。这些智能安全设备可能具有持续学习的内在能力,以检查当前的数据池并从中进行推断,预测未来的威胁和可接受的响应。
人工智能对网络安全的影响
扩大阻力
人工智能也有可能增加系统对持续攻击的抵抗力。如果一家公司使用大量的硬件设备,如台式机和手机来交流和传输信息,那么通过网络攻击从系统中获取信息的可能性就非常高。
能够应对每一个外来威胁
为了应对这种攻击,可以部署由人工智能支持的机器驱动机制来应对每一个到来的威胁,因为它会实时呈现自己并采取应对措施。观察到人工智能对网络安全的一些影响。
策划应对威胁的有效策略
在通常的安全设置中,对威胁的实时响应通常会受到速度的限制,有时还会受到攻击本身不断变化的性质的限制。因此,需要分析大量数据,以便制定应对措施和制定适当的策略。
人工智能在网络安全中的意义
人类安全分析师通常无法单独处理这些任务,他们的网络威胁响应系统需要一定程度的自动化。如今,人工智能系统及其机器学习算法和实时反制措施是保证不断发展的安全格局的第一阶段。
世界各国政府基于人工智能采取了许多措施。如今,政府在他们的系统中使用人工智能组件来检查并消除任何威胁。这是用人工智能完成的。
虽然这听起来很简单,但这是一个非常复杂的过程,需要数百人参与这个项目。从事该项目的大量人员让人们了解了人工智能在网络安全中的重要性。这确保了国家安全不受威胁。
网络安全中人工智能的例子
2016 年 10 月,白宫发布了一份关于“为人工智能的未来做准备”的报告。这份报告谈到了我们应该采取的管理人工智能的策略。组织了一些活动来讨论这项技术,以便让越来越多的人了解这项技术,并让新技术不断涌现。
这些会议极大地帮助了许多以前不知道这个话题的人,现在他们对这个话题有了全面的了解。这也导致了许多人工智能的实际应用,被视为世界的未来。
由于技术相对较新,我们不太确定它的未来。科学家不知道将来会出现什么问题,也不知道他们会如何处理。即使世界已经看到了如此多的人工智能在网络安全中的例子,这种困惑仍然存在。
在未来,人工智能将需要某种高科技监控,以确保它执行它应该执行的建设性任务,而不是成为破坏的工具。人工智能应该以这样一种方式发展,它们很容易受到网络攻击。
一位首席科学家的话
一位首席科学家曾经在采访中说过,一个 AV 研究者,在他的整个职业生涯中,曾经看到过一万个病毒。然而,这些天他们每天遇到 50 多万个。他说,他的安全公司采用人工智能来防止这种攻击。除此之外,人工智能作为一种安全工具,在目前网络安全行业面临人力资源缺乏的情况下,可以证明是有帮助的。全球超过 40%的组织声称,他们正面临着 web 安全领域专业人才短缺的问题。
向前移动
我们在处理人工智能时面临许多问题,为了实施人工智能,每个组织都必须需要强大的人工智能解决方案。有伦理和法律问题需要考虑,例如谁将为自主机器的行为负责,自主机器自己决定它将要采取的行动。
然而,凭借其提供的各种优势,人工智能在网络安全方面的未来看起来很有希望。要想知道未来几天它会如何改变世界,我们还得等上几年,也许几十年。
人工智能如何永远改变了扑克
原文:https://towardsdatascience.com/how-artificial-intelligence-changed-poker-forever-9c0838e2daee?source=collection_archive---------14-----------------------
职业扑克玩家 Daniel“Kid Poker”negre anu 最近讨论了人工智能如何通过给人们一种不用冒险花钱就可以学习扑克策略的方法来彻底改变扑克。他指出,越来越多的人能够成为专业级选手,因为人工智能能够帮助他们找出在某些情况下应该做什么,而以前这些策略是通过反复试验来学习的。
“我在 90 年代末开始玩扑克时,它的样子与你今天看到的非常不同。人工智能和不同软件程序的进步,你可以用它们来解决过去老派赌徒只能通过试错来解决的问题。现在有实际证据表明,在这种情况下,这是你应该做的。这是以前从未有过的。很多最高级别的顶级球员利用这一点来提高他们的比赛水平”
丹尼尔“儿童扑克”尼格雷努
Photo by Dylan Clifton on Unsplash
扑克。一款适合任何名人的经典赌博游戏。具体来说,我想重点介绍一下德州扑克,这是一种变体,每位玩家发两张面朝下的牌,分三个阶段发五张公共牌(翻牌圈三张,转牌圈一张,河牌圈一张)。在每一轮,每个玩家都有过牌、跟注、加注或弃牌的下注选项。回合发生在翻牌圈发牌之前和每次发牌之后。在所有下注结束时,使用公共牌和自己的两张牌组合的最好的五张牌的玩家赢得该轮下注的所有钱。
在德州扑克中赢一手牌有两种方法:
- 如果所有其他玩家都弃牌,那么最后一个没有弃牌的玩家将赢得所有的钱。
- 如果所有下注结束后仍有至少两名玩家剩余,则拥有更好的五张牌的玩家赢得所有的钱(称为摊牌)。
因为玩家可以通过让所有其他玩家弃牌来赢得一手牌,所以即使你的牌很弱,德州扑克也提供了获胜的机会。考虑以下策略:
- 如果你有一手烂牌(就像是一手烂牌,什么都赢不了),你可以弃牌,放弃任何赢钱的机会,或者你可以下注一大笔钱来诈唬,让其他玩家认为你有一手很强的牌。如果你能让其他玩家相信你的牌很强,你也许能让他们弃牌。当然,如果他们也有一手很强的牌,那你就输了。
- 如果你有一手不错的牌,你也可以下大注并诈唬来保护你的牌,但你也必须确定其他玩家是否有比你更差的牌可以击败。如果是这样,你想通过下足够的注,让其他玩家跟注,但不要下太多注,让他们弃牌,从而最大限度地增加你的收入。
- 如果你有一手好牌(比如一手绝对不会被击败的超级好牌),你应该下足够的注,让其他玩家跟注,但不要下得太多,以免他们弃牌。
一般来说,策略是基于你认为其他玩家会怎么做。从这个意义上说,扑克是一个非常心理化的游戏(人工智能不太懂的东西)。
Photo by Markus Spiske on Unsplash
人工智能。结识新朋友时的热门话题!当你给机器大量的数据时,它们可以在这些数据中找到模式来学习如何解决问题。这里的问题是他们依赖数学方法来解决问题。就拿象棋这样的游戏来说吧。国际象棋是非常权威的。除了最初的几个步骤,在国际象棋中总是有一个最好的步骤,这就是为什么国际象棋人工智能能够消灭甚至最好的大师。就国际象棋而言,机器将计算每一步棋的结果,并选择最有可能获胜的一步。
然而,虚张声势的引入使事情变得复杂。在德州扑克中,有游戏的心理方面(即使仍然有数学方面),这是机器很难学习的。与国际象棋不同,在国际象棋中,可以根据当前的走法和对手可能的走法来确定最佳走法,德州扑克要求偶尔跟随你的感觉(即使逻辑说不);例如,当另一个玩家下大注,而你说“我不相信你”时,如果你的数学获胜概率似乎小于 50%,有时跟注和总是弃牌一样好。
那么,如何改变人工智能以适应每个不同玩家的策略呢?因为了解你的对手如何玩对于成为一名优秀的扑克玩家来说是至关重要的。有些玩家是“紧牌”玩家,他们只在自己原来的两张牌高于平均水平时才玩一手牌,并且只有在自己有非常强的牌时才会跟注。其他玩家是“松散型”玩家,他们会玩任何牌,而且通常只拿着像样的牌跟注(例如丹尼尔·内格里诺)。关键是把游戏分成更小的部分,并随着游戏的进展调整策略。因此,人工智能可以使用机器学习来找到对手策略中的弱点,并加以利用。
还有一个问题是你不知道对手的牌。在国际象棋中,双方都知道棋盘的确切状态。在扑克中,两个玩家都不知道确切的状态,因为有两张隐藏的牌。这使得任何人都很难预测比赛的最终结果。也很难把运气考虑进去,因为扑克确实是一种碰运气的游戏。你可以从最好的一手牌(一对 a)开始,但是如果五张公共牌是同一花色的 5、6、7、9 和 10,你就会发抖。
虽然没有具体的方法来解释这一点(玩扑克的人工智能总是一个近似的解决方案),但研究人员试图通过制作游戏和抽象来解决这个问题,其中相似的手牌被组合在一起。这使得人工智能可以更容易地考虑到其他玩家可能有这么多手牌。
Photo by Keenan Constance on Unsplash
扑克和人工智能的现状。现在的人工智能其实已经可以打败职业扑克选手了。向人工智能咨询策略也变得越来越普遍。这又回到了丹尼尔·内格里诺所说的——与以往相比,越来越多的人能够使用人工智能来改善他们的策略。虽然老派扑克玩家会通过输钱来学习,但当代玩家通过与他们的机器对抗来学习。这对扑克界有着巨大的影响;2019 年世界扑克系列赛有 8 千名参赛者,比以往任何时候都多。用不了多久,一个人工智能就会赢得世界扑克大赛…
其他一些有趣的资源:
- 丹尼尔·内格里诺的维基百科
- 更多关于德州扑克的信息
- 人工智能比职业扑克选手强
人工智能如何加速药物发现
原文:https://towardsdatascience.com/how-artificial-intelligence-is-accelerating-drug-discovery-931047f6ea9a?source=collection_archive---------27-----------------------
人工智能 (AI)正在接管每一个行业。我们有了电,我们有了互联网,现在,我们有了人工智能。
艾在现代
人工智能的目标是使用计算机模拟人类智能。人类(至少到目前为止)比计算机聪明得多。我们可以解决复杂的问题,比如造桥。我们可以通过观察一个人的肢体语言来理解对方的感受和情绪。计算机做不到这一点,至少,用几百万行代码给它编程是做不到的。
计算机非常擅长快速进行计算。你可以在商场花 1000 美元买到的现代个人电脑或 Macbook 将包含一个运行速度为 3.0 GHz 的处理器。那就是每秒三十亿次运算。
这些天来,通过教计算机新概念,计算能力正被用来构建人工智能,就像我们可以教人类新技能一样。现代人工智能是数据驱动的,这意味着人工智能通过消耗数据来积累知识。
为了教会现代人工智能系统汽车是什么样子,我们可以给它看几张不同型号、形状和颜色的汽车照片。然后,人工智能将从这些例子中学习组成汽车的特征——汽车的形状、车身、零件、整体外观。当它看到一辆新车时,它会知道这是什么,因为它以前见过类似的东西。
这种通过展示大量例子来教授人工智能系统的概念,正被应用于几乎每一个现代行业。人工智能正在接受训练,以浏览法律文件,为潜在客户撰写完美的销售计划,并预测股票。我们所要做的就是向人工智能展示各种案件的大量法律文件、对客户的推销以及股票市场数据,让它学会如何使用它们。
药物发现的科学
药物研发领域涉及新药的搜索、发现和实验。通常,这可以通过以下两种方式之一实现:
(1)在天然方法中科学地鉴定活性成分,该活性成分执行与我们希望我们的药物相同的功能。例如,Advil 中的活性成分是布洛芬,它可以减少导致体内炎症和疼痛的激素
(2)侥幸心理。当苏格兰科学家亚历山大·弗莱明度假回来后,发现他不小心把一个细菌留在了实验室一个敞开的培养皿中时,青霉素被偶然发现了。当他检查培养皿时,他发现在细菌中间形成了一个完美的圆形霉菌,完全没有被污染。这种霉菌后来被归类为青霉素,并拯救了数百万人的生命。
药物发现的方法(2)是好的。我们希望这样的幸运事故每天都发生在我们身上!但是方法(1)是我们唯一可以依靠的解决方案。做一个真正的,科学的寻找解决方案。这就是人工智能可以帮助的地方。
人工智能可以帮助药物研发
众所周知,科学可能很复杂。尤其是像药物发现这样的实验性研究。科学家们对体内不同的化学物质如何反应和协同工作有了很好的了解。但是对于药物来说,我们面对的是风险更高的人体,实验的成本也更高。
一个从事药物发现的科学家可能会在多年的工作中进行数百次有计划的精心设计的实验。它始于实验室,在那里化学物质与其他化学物质在类似培养皿或试管中进行测试。一旦这些测试“通过”,实验就会继续在啮齿动物身上进行——通常是小鼠和大鼠。然后是狗和黑猩猩。最后但同样重要的是,人体试验。
这些程序非常严格,通常需要数年才能完成。成本可能高达数十亿美元,而且很有可能失败。其中任何一个阶段的失败都会让我们回到原点。有成千上万种化学组合,大部分工作是实验性的,一些成功的基础来自经验证据。
人体试验中的病人经常暴露在无法预测的副作用下。即使试验最终成功,也要经过监管部门的批准。它可能会也可能不会获得在美国来自美国食品和药物管理局 (FDA)的批准。
现代人工智能在有大量数据和/或大量重复动作的应用中特别有效。这使得药物研发成为首选。多年来收集的大量测试数据和进行的大量重复实验。
药物发现最具挑战性和最耗时的部分之一是,实际的发现。以完全正确的比例获得正确的化合物是一个巨大的挑战。如果能解决这个问题,就能节省多年的实验、测试和人体试验。
这是大多数药物研发公司的人工智能关注的焦点。使用人工智能来检查药物的组合,学习关于它们的。对于这种应用,什么是好的药物?糟糕的一个?如果我这样使用这种药物,会发生什么?在某种程度上,人工智能可以进行科学家通常会进行的完全相同的实验,只是在计算机模拟中。这样,它可以在很短的时间内经历多次实验。这对科学家、社会、时间、金钱和健康都是一个巨大的节约。
展示用于药物发现的人工智能
Atomwise 开发卷积神经网络(CNN)对某些药物进行大规模基于实验的搜索。为正确的应用开发正确的药物是一种微妙的平衡,既有效又安全,没有副作用。通常,这需要许多实验,但我们仍然不能 100%确定这种药物永远是 100%安全的。Atomwise 通过训练 CNN 自动进行实验,有效地将这项工作转移到计算机和人工智能系统中。这使得科学家们可以进行更多的实验,数百万次,以选择更可靠的可行药物子集。
与 Atomwise 相似的著名创业公司有 Deep Genomics 、 Schrodinger 和 Recursion AI 。
PathAI 专注于疾病的精准诊断。病理学家在医疗保健中发挥着非常重要的作用。他们将从本质上分析像组织样本这样的东西,以便进行诊断并确定下一步的行动,特别是在潜在疾病存在的情况下。由于这样的过程需要一个专家——病理学家,它很快变得昂贵、耗时,甚至在某些情况下容易出现人为错误。
PathAI 提出的解决方案是训练人工智能进行这种诊断。人工智能甚至不需要能够完美地诊断每一个组织。但它能做的是大大减少病理学家的工作量。让人工智能检查所有的组织样本。由于它是在计算机上运行的,它在工作量方面受到的限制较少,可以进行非常复杂的分析。然后,AI 系统可以传递组织样本的子集,这些样本被认为是“感兴趣的”,并且不会用它对其诊断非常有信心的样本来打扰病理学家。人工智能也可以被训练来指出组织内的“感兴趣区域”,它认为病理学家应该给予额外的关注。所有这些确实有助于简化科学家和病人的流程。
与 PathAI 相似的著名创业公司有 Paige。艾和野山羊。
有几家初创公司致力于增强和优化临床试验,旨在使整个过程更加有效。Athelas 公司正在开发一种设备,可以从一滴血中分析癌症的生物标记,从而可以快速分析疾病状态。 Imagia 的软件分析放射图像,以预测患者疾病的进展和对潜在治疗的反应。 WinterLight Labs 有一个通过分析简短的语音样本来评估和监控认知健康的系统。它可以用于在整个临床试验和实验过程中跟踪患者的认知状态。
关于将人工智能应用于药物发现的公司的更多信息,请查看 BenchSci 关于药物发现的文章初创公司和制药公司。
喜欢学习?
在 Twitter 上关注我,我会在这里发布所有最新最棒的人工智能、技术和科学。我也很乐意在 LinkedIn 上与你联系。
注来自《走向数据科学》的编辑: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。
人工智能如何影响我们的日常生活
原文:https://towardsdatascience.com/how-artificial-intelligence-is-impacting-our-everyday-lives-eae3b63379e1?source=collection_archive---------0-----------------------
以及你每天是如何遇到它的
Photo by Franki Chamaki on Unsplash
人工智能和机器学习在幕后被用来影响我们的日常生活的方式多得惊人。
人工智能在我们生活的每个领域都有帮助,无论我们是试图阅读电子邮件,获取驾驶方向,获得音乐或电影推荐。
在本文中,我将向您展示人工智能在日常活动中的应用示例,例如:
- 社会化媒体
- 数字助理
- 自动驾驶和停车车辆
- 电子邮件通信
- 网络搜索
- 商店和服务
- 离线体验
人工智能如何改善社交媒体
人工智能使用户更容易找到朋友和商业伙伴并与之交流。
推特
从推文推荐到打击不当或种族主义内容,以及增强用户体验,Twitter 已经开始在幕后使用人工智能来增强他们的产品。他们通过深度神经网络处理大量数据,随着时间的推移了解用户的偏好。
脸谱网
深度学习正在帮助脸书从其非结构化数据集的更大部分中获取价值,这些数据集是由近 20 亿人每分钟更新状态 293,000 次创建的。它的大部分深度学习技术都建立在 Torch 框架上,该框架专注于深度学习技术和神经网络。
照片墙
Instagram 还利用大数据和人工智能来定向广告,并打击网络欺凌和删除攻击性评论。随着平台中内容数量的增长,人工智能对于能够向用户显示他们可能喜欢的平台信息、打击垃圾邮件和增强用户体验至关重要。
聊天机器人
聊天机器人识别单词和短语,以便(希望)向有常见问题的客户提供有用的内容。有时候,聊天机器人非常准确,就好像你在和一个真人说话一样。
例如,下图中的聊天机器人对话显示了人工智能正被用于安排美发师约会。
Chatbot conversation. Photo by the author
人工智能如何通过数字助手每天帮助你
数字助理
苹果的 Siri、Google Now、亚马逊的 Alexa 和微软的 Cortana 都是数字助手,可以帮助用户执行各种任务,从查看他们的日程安排和在网络上搜索一些东西,到向另一个应用程序发送命令。人工智能是这些应用如何工作的重要组成部分,因为它们从每一次用户交互中学习。
人工智能如何通过停车和驾驶每天帮助你
自动驾驶和停车车辆
自动驾驶和停车汽车使用深度学习(人工智能的一个子集)来识别车辆周围的空间。技术公司英伟达(Nvidia)利用人工智能赋予汽车“观看、思考和学习的能力,因此它们可以在几乎无限的可能驾驶场景中导航”。该公司的人工智能技术已经在丰田、奔驰、奥迪、沃尔沃和特斯拉生产的汽车上使用,肯定会彻底改变人们的驾驶方式,使车辆能够自动驾驶。
人工智能如何改善电子邮件通信
Gmail 中的智能回复
智能回复为用户提供了一种回复电子邮件的方式,只需简单地说一句“是的,我正在努力。”或者“不,我没有。”只需点击一下按钮。智能回复是根据每封电子邮件的内容定制的。用户可以通过键入手动回复来回复,也可以选择一键智能回复。
例如,如果你向某人发送一封关于即将到来的游戏的电子邮件,而他们回复让你知道他们有兴趣去看游戏,Gmail 提供了“智能回复”选项。
Gmail 中的电子邮件过滤器
谷歌使用人工智能来确保你收件箱里几乎所有的邮件都是真实的。他们的过滤器试图将电子邮件分为以下几类:
- 主要的
- 社会的
- 促销
- 更新
- 论坛
- 罐头猪肉
该程序可以帮助你的电子邮件变得有条理,这样你就可以更快地找到重要的通信方式。例如,Gmail 将电子邮件分为 4 个不同的类别,并将垃圾邮件发送到单独的文件夹。
人工智能如何帮助网络搜索
人工智能被用来帮助谷歌搜索已经有一段时间了。
谷歌预测搜索:
当你开始输入一个搜索词,谷歌会推荐给你选择,这就是人工智能在发挥作用。
Google Predictive Searches. Photo by the author
预测性搜索基于 Google 收集的关于您的数据,如您的位置、年龄和其他个人信息。使用人工智能,搜索引擎试图猜测你可能试图找到什么。
谷歌的算法
谷歌搜索引擎通过研究搜索中使用的语言学随着时间的推移而发展。它的人工智能从结果中学习,并随着时间的推移进行调整,以更好地满足用户的需求。
例如,搜索“什么是神经网络,它们与突触有什么关系”,谷歌会在顶部突出显示“最佳答案”,然后是回答该问题的来源列表。
Photo by the author
谷歌算法的目的是向搜索者提供尽可能好的结果。为了做到这一点,谷歌使用 AI 来尝试确定内容的质量,并将其与用户的查询进行匹配。
人工智能如何改善你在网上商店和服务的体验
产品推荐
亚马逊和其他在线零售商使用人工智能来收集关于你的偏好和购买习惯的信息。然后,他们通过推荐适合你习惯的新产品来个性化你的购物体验。
下面是一个人工智能推荐 Amazon.com 的例子。
AI-powered recommendations on Amazon.com. Photo by the author
音乐推荐
音乐服务使用人工智能来跟踪你的收听习惯。然后,他们利用这些信息推荐你可能喜欢听的其他歌曲。
例如,Spotify 会根据你的收听习惯,为你的新发现、新作品和老作品提供建议。
Google Play 还提供个性化的音乐推荐。它的人工智能建议考虑了天气和时间等因素,以提供可以为活动设定情绪的音乐。例如,你可能会在周五晚上收到一个舞曲播放列表,或者在下雨天收到一个轻音乐播放列表。
地图和方向
当像谷歌地图这样的应用程序计算交通和建筑,以便找到到达目的地的最快路线时,这就是人工智能在工作。
在下面的例子中,谷歌地图根据通常的交通情况,根据从柏林到波茨坦的最快路线提供方向。路线上的橙色部分表示交通较慢的地方。
Photo by the author
商业航班
你可能会惊讶地发现,你友好的飞行员在驾驶舱里实际上很少飞行。2015 年对航空公司波音 777 飞行员的一项调查报告称,在一次典型的飞行中,人工驾驶飞机仅花费 7 分钟,其余大部分时间由人工智能技术完成。
据《连线》杂志报道,波音公司正致力于建造完全由人工智能驾驶的喷气式飞机——没有人类飞行员掌舵。
结论
人工智能让我们的生活每天都更有效率人工智能为许多程序和服务提供动力,帮助我们做日常事情,如与朋友联系,使用电子邮件程序,或使用拼车服务。
如果你对人工智能的使用持保留态度,那么知道我们大多数人多年来一直在日常生活中使用人工智能可能会令人欣慰。
如果你想联系我,顺便说一句,你知道一个好笑话,你可以在 Twitter 或 Linkedin 上联系我。
感谢阅读!😄 🙌
人工智能如何变革食品加工业务?
原文:https://towardsdatascience.com/how-artificial-intelligence-is-revolutionizing-food-processing-business-d2a6440c0360?source=collection_archive---------7-----------------------
Photo by Priscilla Du Preez on Unsplash
人工智能正在吸引许多学科和领域的企业的注意,食品加工和处理(FP&H)就是其中之一。今天,FP&H 行业的上限高达 1000 亿美元,并将至少在 2021 年前继续以 5%的 CAGR 增长。
人工智能正在直接和间接地影响着食品和保健品行业。例如,它间接地帮助农民预测天气,这将帮助农民为食品加工公司生产高质量的原材料,帮助他们节省分拣产品的费用。AI 还帮助运输公司降低运输成本,使食品加工公司支付更少的运输费用。不管怎样,它都在帮助 FP & H 公司节省收入。
然而,从人工智能的直接好处来看,它在五个重要的应用领域帮助了计划生育和保健部门,它们是:
- 分拣包装和产品
- 食品安全合规
- 保持清洁
- 开发产品
- 帮助客户做出决策
人工智能在食品加工和处理中的应用
食品加工是一项复杂的业务。它包括对来自农场的食物或原材料进行分类,维护机器和各种设备,等等。最后,当最终产品准备装运时,人类检查产品的质量,并决定它是否准备装运。然而,在许多食品加工单位,这一过程是由人工智能自动化的。以下是人工智能的五大应用,它们直接影响食品加工公司,并帮助他们增加收入和提升客户体验。
1.分拣包装和产品
食品加工公司面临的第一个运营挑战是原料的分类。每一种土豆、番茄、橘子和苹果都是不同的,因此,它需要严格的分类,因为每一家食品加工公司都必须保持一定的质量才能在竞争中保持优势。如果不是通过人工智能和物联网等其他新兴技术实现自动化,这一过程需要大量的人力。
据挪威领先的分类和收集解决方案提供商 Tom ra T1 称,直到 20 世纪末,90%的食物都是由人类分类的。与其他只能将劣质水果和蔬菜从优质水果和蔬菜中分拣出来的食品分拣机不同,TOMRA 使用 X 射线、NIR(近红外)光谱、激光、相机和一种独特的机器学习算法来分析水果或蔬菜的不同方面,以进行分拣。
Kewpie 公司,一家日本食品加工公司,创造了一个基于人工智能的 TensorFlow 机器来识别来自农场的食物中存在的异常。像 TORMA 和 Kewpie 这样的公司不仅帮助食品加工公司增加收入,而且提高产量。
2.食品安全合规
安全是食品加工行业的一个大问题。即使是最小的污染是食品罐头工厂已经开始实施基于人工智能的摄像头来检测员工是否穿着合适的服装。然而,这是上海市卫生局在上海餐馆实施的大规模实施。该机构与 Remark Holding 合作,在 200 多家餐厅实施了人工智能摄像头,并计划扩展到 2000 多家餐厅。
支持人工智能的摄像机帮助餐厅经理监视餐厅员工,看他们是否按照食品安全法规穿着合适的食品保护装备。这有助于他们实时发现任何违纪行为。
3.保持清洁
保持清洁是食品工厂非常关心的问题。许多公司声称非常干净,因为他们的每一个过程都是自动化的,没有经过人工干预。如果机器和设备被污染了怎么办?消费者也变得聪明起来,他们知道每个过程都自动化并不意味着产品可以安全食用。他们需要更多的证据。
根据诺丁汉大学的数据,设备清洗几乎占食品加工厂能源和水供应的 30%。他们声称他们基于人工智能的传感器技术每年能够节省近 1.33 亿美元,并且节省时间(50%)、能源和清洁设备的水。
传统的清洁系统不包括任何传感器,这导致食物颗粒残留在设备容器中。该系统无法清洁新的自优化清洁系统可以清洁的小食物颗粒。它使用光学荧光成像和超声波传感技术将数据传递给机器学习算法,这将有助于监控设备中的微生物碎片和食物颗粒。
4.开发产品
食品加工业有其独特之处,因为一家公司可以提供如此多的产品。例如,饮料巨头可口可乐收购了 500 多个品牌,并向其客户提供 3500 多种饮料。但是,问题来了,公司如何决定下一步创造哪种口味?在 AI 之前,该品牌进行了调查和活动,以确定他们的客户想要什么。
目前,可口可乐公司保留了几个自助苏打水喷泉,允许顾客通过混合可口可乐公司提供的各种饮料来创造他们定制的饮料。成千上万个这样的喷泉分布在整个美国。数百名顾客使用这些喷泉来创造他们的个性化饮料。利用人工智能,他们分析并确定了大多数顾客将樱桃味汽水和雪碧混合在一起。这些数据帮助可口可乐推出了他们的新产品樱桃雪碧。
5.帮助客户做出决策
与食品加工公司类似,人工智能也可以帮助客户做出更好的购买决定。食品制造巨头家乐氏推出了熊裸体定制,允许顾客在 50 多种配料的帮助下制作他们的个性化格兰诺拉麦片。该系统使用 IBM 的厨师沃森存储了数千种可能的食谱,并将它们输入到人工智能算法中,该算法帮助客户识别这些食材搭配起来是否美味。
这个系统不仅帮助客户创建他们的个性化小批量格兰诺拉麦片,还帮助公司确定他们的下一个产品系列,类似于可口可乐。
结论
尽管处于初级阶段,人工智能正在重塑食品加工和处理业务。在接下来的几年里,它将彻底改变 FP&H 行业。人工智能将帮助这些公司增加收入,方法是加快生产过程,减少维护时间&因此减少生产停工时间,通过自动化几乎每个过程来减少失败的机会,并最终通过预测他们的喜欢、不喜欢和愿望来提供出色的客户体验。
移动应用程序开发服务提供商的钟声已经敲响,因为在不久的将来,将会有许多 FP & H 公司寻找人工智能解决方案提供商,这将有助于他们不仅留在竞争中,还能统治行业。
增强现实(AR)如何改变旅行和旅游业
原文:https://towardsdatascience.com/how-augmented-reality-ar-is-changing-the-travel-tourism-industry-239931f3120c?source=collection_archive---------4-----------------------
根据 Statista 的报告,到 2025 年,全球增强现实 AR 市场预计将培育 59.1 亿至 1980 亿美元。 增强现实趋势 已经物化为不同业务的建设性工具。这让他们改变了顾客观察周围环境的方式。
AR 是最新兴的类型技术之一,在未来几年将会更有帮助。这种技术创新对那些在旅游行业工作的人来说是非常有益的。增强现实或 AR 提供了出色的销售体验和增强环境,这可以在旅游部门以多种方式得到增强。在这篇博客文章中,你将更好地了解 AR 在旅游行业中的影响。
AR 在旅行中的重要性
凭借吸引人类思维的力量,AR 正在改变营销人员的游戏,我们将探索 增强现实解决方案 如何帮助旅游行业。这项技术为旅游业打开了创新之门,以改善他们的客户体验。然而,旅行和旅游领域已经显示出增强现实的重大转变。
旅行和旅游业务是一个高度研究的部分。旅游业的顾客总是通过广泛的研究来计划他们的旅程、停留或要探索的食物地方。对于顾客来说,对数据和信息的追求不会停止,即使是在他到达他们的旅游目的地之后。此外,所有这些信息都在一系列移动设备中进行探索。
旅游业的增强现实
这就是 AR 为旅游业带来变革的地方。AR 能够通过提供互动广告吸引信息来增加搜索体验。通过开创性的移动应用程序,这些增强的体验可以通过简化旅行搜索和建立信任而广泛传播给旅行者。
甚至,旅游专家估计,通过接受 AR 的力量,可以建立不同的用户体验,这可能成为旅游领域和旅游业的福音。
增强现实如何应用于旅游和旅行领域
增强现实和旅游业是天生的一对。游客的主要活动是什么?旅行和抓住信息的每一部分,他们可以找到与目的地有关的信息。
当你去一个充满吸引力的城市旅游时,比如罗马或威尼斯,你可能会错过一个迷人的地方。增强现实移动应用程序可以作为现实生活中的导游。旅游领域的增强现实应用程序可以让旅行者通过相机取景器功能探索更多的目的地。当相机捕捉该地区的风景时,移动应用程序标记重要的地方并提供关于它的附加信息。
增强现实旅游体验
如今,客人们知道他们想去哪里旅游。人们有一种目的地感,可以使用智能手机准确地将他们带到他们想去的地方。然而,AR 可以有效地增强人们对交互式地图的旅行体验,使其更加贴合。当旅行者开始使用一种引人入胜的、易于使用的、有帮助的导航方式时,他们就不得不这样做。以下是增强现实在旅游和酒店行业的应用。
增强现实在旅游业的光明前景
旅游行业就是要创造独特的体验,而 AR 有望支持这一业务领域。这项技术可以用新的客户服务方式来支持旅游业。据推测,在未来的时间里,增强现实将彻底改变旅游业的商业模式。以下是增强现实如何为最终客户和旅游业带来价值的最新列表。
增强现实缩小语言差异
如果没有翻译为你带路,去外国旅游既困难又有吸引力。然而,通过 AR 技术,可以利用智能手机为不同类型的用户翻译外语。
AR 应用确保没有旅客迷路
在一个陌生的城市里发现自己的路是一件具有挑战性的事情。然而,AR 通过添加箭头等数字组件和其他适用的细节,让导航应用变得更加智能。通过将智能手机摄像头与谷歌地图集成和结合,AR 可以改善在新地方导航的旅行体验。
使用 AR 移动应用提高旅行便利性
由于缺乏正确及时的信息,旅行可能会变得混乱。通过 AR,旅游品牌正在扩大游客的移动应用,以改善他们的旅游体验。
旅游和酒店住宿的增强现实
酒店业是利用 AR 技术的最重要的领域之一。你可能会猜测酒店可以以何种方式使用 AR,并对各种选项感到惊讶。
酒店营销和广告中的 AR
通过使用 AR,您可以在探索酒店时建立包含住宿细节和价格的全方位房间游览。这是营销和宣传您的酒店的好方法,可以吸引目标客户探索全面的酒店服务。这就把曾经的客人变成了忠实的客人。
假设你在酒店房间里,需要搜索客房服务、要看的目的地、到目的地的距离以及其他旅游服务。因此,您可以立即获得您的智能手机或平板电脑,解锁酒店移动应用程序,指向标记,并访问所需的信息。
轻松自如,这实际上是旅游业的增强现实。例如,一些酒店在房间里有一个互动的挂图,客人可以用他们的手机浏览附近地区的旅游景点。
通过 AR 检测酒店的创新方法
今天的游客不会理会直截了当的小册子。AR 通过从印刷的小册子中获得 3D 动画,使得在新的层面上找到信息成为可能。酒店与基于内容的公司和营销机构合作,在杂志上创建和发布基于 AR 的广告。此外,酒店移动应用程序用户还可以扫描广告,打开演示视频。
沟通&使用 AR 与酒店互动
Pokemon Go 刺激了许多其他行业使用 AR,包括旅游和酒店业。增强现实应用程序有助于想象这种游戏化如何说服和吸引人们入住挑剔的酒店,尤其是最年轻的酒店。了解一些酒店如何为其客人提供移动应用程序,该应用程序通过辅助 AR 对象展示酒店的每个角落。
餐厅、酒吧、&咖啡馆的 AR
保持简洁,餐馆和酒吧可以在很多方面利用 AR 解决方案。通过 AR 应用程序,餐厅可以拥有引人入胜的 360 度互动菜单,展示每一道菜及其配料。几家餐厅的 AR 游戏使用 Pokémon Go 来吸引客户,并在移动应用程序的帮助下使用 AR 来提供餐厅、咖啡馆和附近酒吧的详细信息。
运输领域的 AR
想象你的飞机刚刚着陆,或者你在一个未知的地方走出一辆公共汽车、火车或汽车,你不知道从那里去哪里。然而,在这种情况下,如果你有一个带 AR 的旅行移动应用程序,你可以指向交通工具,以获得最佳方向、旅行路线、下一个目的地和旅行地点。
特别是对外国游客来说,这可能是相当愉快的,而他们的旅游和旅行。通过 AR,你可以将地铁地图变成多种语言的迷人指南。
游览中的 AR&旅游景点
利用增强现实发现旅游目的地和短途旅行,让传统的城市旅游变得更加神奇。我们可以回到过去,牢记时间观中地标的进步,从 3D 模型中获得乐趣,并获得有趣的导游。最好的例子是主题公园、花园和动物园。
根据华特·迪士尼首席执行官 Bob Iger 的说法,他们选择 AR 到 VR 耳机。根据他的说法,增强现实还具有社会性、互动性和关怀性。公园或动物园中的 AR 可以实现更好的游戏化、导航、感知和有趣的问答。博物馆中的 AR 使游客能够根据灭绝动物的结构骨骼,观看它们的完整现场演示。
关键要点
旅行总是一种创新和学习的经历。随着现代化的设备和工具,旅行和旅游中的增强现实对于酒店旅游、预订支持信息、无语言障碍以及高级导航来说非常有用。通过创新的移动应用程序提升旅行体验,增强现实已经令人赏心悦目。
作者简介:
Mrudul Shah 是 Technostacks Infotech 的首席技术官,techno stacks Infotech 是一家位于印度 &美国 的移动应用程序开发公司。他正在帮助他的整个开发团队和全球客户接触新技术,学习和分享 IT 技术新闻趋势的兴趣。
银行如何管理风险
原文:https://towardsdatascience.com/how-banks-manage-risk-26557d782477?source=collection_archive---------11-----------------------
风险价值、预期短缺和风险加权资产
大致来说,金融机构面临三种风险,监管机构试图对其进行监管。首先是市场风险,包括股票价格、利息、外汇、波动性等。然后是信用风险/交易对手风险或融资风险,最后是运营风险。我们在这里要考察的风险度量主要集中在前两个方面。开发风险价值(VaR)和预期短缺(ES/CVaR)是为了量化这些类型的风险。
如果你喜欢这篇文章并想了解更多,请务必关注我的简介 !
风险价值
首先,我们将有兴趣观察损失巨大的场景,即我们对可能损失分布的尾部感兴趣。在金融波动之后,最常见的风险度量是 VaR。VaR 是衡量市场风险的单一指标,即资产价值的变化,旨在帮助做出冒险的实际决策。这是在给定 1 — α %的概率和一定的时间范围 T 的情况下,最大预期损失的度量。
风险经理使用 VaR 来衡量和控制金融风险暴露的水平,这可以是在公司内部,由任何类型的资产或特定头寸组成的投资组合,因此可用于衡量弥补可能损失所需的资产价值。
上世纪 90 年代,美国证券交易委员会(SEC)规定,企业必须在财务报表中纳入市场风险的量化指标,而风险值(VaR)成为了这样做的主要工具。巴塞尔委员会甚至表示,银行可以依靠自己内部的风险值计算来设定资本要求。事实证明,这种对风险值的广泛依赖是错误的。VaR 度量的风险不包括所有风险中最大的风险;金融危机的可能性。
如果 L 是一个损失分布或潜在损失,具有某个范围 T 和连续分布函数 F_L,那么 VaR( α,T )度量由下式给出:
这只是一种比较花哨的说法,VaR 测度是最大的下限 c ,其中损失 L 大于这个 c 的概率小于或等于 1 — α 。对于连续损失分布,这相当于:
也就是说,我们在概率为 α的情况下,的损失不会超过 VaR( α )。
计算 VaR 时,必须考虑三个步骤。首先,必须指定分位数 α 。通常水平为 1%-5%,但更高的分位数可能用于投资银行的交易大厅进行日常风险评估,而更低的分位数可能用于养老基金的长期风险分析。二、持有期 T 。对于活跃的交易者来说,这主要是一个单日风险值。最后,必须确定概率分布。这是最重要的部分,我将在稍后回到这一点。一个典型的结论是“在 95%的概率下,投资者损失不会超过
VaR(α= 0.95)。
风险价值有利有弊。最大的缺点是不确定如果超过风险值度量将会发生什么——如果我们最终“在最后 5%”这使得风险值成为风险管理的可疑指标。这是一个分位数度量,实际上是一个描述最坏情况下最好情况的值,因此低估了潜在的损失。这似乎不适合用来衡量风险。另一种思考方式是,VaR 是“正常”市场日和极端事件之间的界限,这使得在金融危机期间或接近金融危机时使用 VaR 变得非常糟糕。VaR 通常是每天测量的,因为它是非常短期的测量,所以它假设明天或多或少会像今天一样。
在 2008 年的《全球风险专业人员协会评论》中,Einhorn 将 VaR 比作“一个安全气囊,除了发生车祸的时候,当它的使用在高管中产生一种虚假的安全感时,它可能是灾难性的。一个叫纳西姆·塔勒布的人也曾在国会作证,要求禁止 VaR。
那么为什么还要使用它呢?
首先,风险值之所以如此吸引人,是因为它是唯一普遍使用的风险衡量指标,几乎可以应用于任何类型的资产,而且它考虑了许多变量,例如多样化、杠杆和波动性,这些构成了公司每天都会遇到的风险。其次,这是一个优势,它可以衡量个人风险(单个投资组合)和公司范围的风险,这是一个净数字。高管通常在收盘后几分钟内就知道公司的风险值。
Simple illustration of VaR
上面的简单图示显示了带有红色 VaR 阈值的损失分布。例如,如果我们有一周的时间跨度 T ,95%的置信系数(即 α = 0.05)和 VaR(α= 0.05)= 500 万美元,那么在接下来的一周,损失超过 500 万美元的可能性只有 5%,我们损失不超过 500 万美元的可能性为 95%。请注意,它始终表示亏损,但 VaR 值报告为正数。负风险值意味着投资组合有很高的盈利概率。它没有告诉我们我们将在分布的右尾多远着陆,因此也没有告诉我们损失会有多严重。
那么在这种充满风险的情况下,有什么方法可以改善这种情况呢?
预期短缺
关于 VaR,大多数人关心的是“在过去的 5%”(或 1%)发生了什么,在之前的正态分布曲线的极端边缘。事实上,你在 95%的时间里不可能损失超过一定的数额,这并不能告诉你在另外的 5%的时间里会发生什么。你可能会损失 5000 万美元——没什么大不了的。它发生了。你也可能损失数十亿美元并破产。风险值无法衡量它会是什么。造成极端损失的原因是纳西姆·塔勒布所说的“肥尾”或“黑天鹅”事件(他写过几本关于这个主题的书)。这意味着我们不知道黑天鹅可能会在何时或如何出现,这是一个观察者无法预料的令人惊讶的事件;就像 90 年代末的网络泡沫或 2007-2008 年的金融危机。
风险值的替代方法是预期短缺。
预期短缺被定义为超出α-VaR 估计的尾部预期损失:
后者是 VaR_ γ ( L )对所有小于或等于 α 的 γ 的平均值。与上面的典型风险值结论相关,人们可以改为问"在期限 T 内,α最坏情况下发生的预期损失是多少?”。这个问题意味着 es 在计算时考虑了整个尾部分布。ES 恭维 VaR。如果将这两种风险度量结合起来,我们可以很好地估计资产或投资组合的风险。VaR 告诉我们边界在哪里,ES 告诉我们如果达到这个边界会有多糟糕,如下图所示。
Simple illustration of ES
风险度量很少为人所知,取而代之的是必须进行估计,这给了我们更多的风险和不安全感。正态损失分布和 t 损失分布可能有相同的 VaR 但不同的 ES,这意味着尾部很重要。
我们将看看两种方法。首先,一种非参数方法(意味着非正态分布或 t 分布)。这里我们对收益分布没有任何假设。历史回报的观察值从最小到最大排序,VaR_ α ( L )由该排序分布的分位数 α 确定。ES 将被计算为所有大于 VaR 的损失的平均值:
S 是某项资产头寸的当前规模,^q( α 是收益分布的估计上限α-分位数。因此,ES 估计值是所有超过 VaR 的 L_i 的平均值。
非参数方法非常简单,其优势在于我们没有任何分布假设。然而,这只有在未来看起来足够像过去的情况下才会起作用。
参数方法是基于某种分布的假设。一个投资组合的分布可以通过 3 种方法确定:
1。分析
建立一个模型,找到同时分布,并将模型与数据相匹配。例如,您可以从对数正态分布函数中找到 VaR。
2。模拟市场模型的结果,评估每种结果的投资组合,并估计分布。这通常是用蒙特卡罗模拟来完成的。方法很慢,但可能是最厉害的方法。它足够灵活,可以包括历史观测值,并且可以通过所谓的方差缩减方法进行改进。
3。基于数据模拟结果,评估每个结果中的投资组合,并估计分布。当数据量不是很大时很有用。它很耗时,但它的主要优势是捕捉到了最近的市场崩盘,这对风险衡量非常重要。
参数和非参数方法都有可批评的假设。对于小的 α 来说,非参数估计是不准确的,但是这可以通过假设一个多项式来改善,我在这里不包括它。此外, α 可以使用 Hill 估计器进行估计,这是一种最大似然估计:
其中 n ( c )为返回次数 Y_i ≤ c 。 c 被选择,但是它有一个偏差/方差的权衡。如果 n ( c )大,我们有更多的偏差,如果 n ( c )小,我们有高的方差。我们可以用一个小山图来描绘^a 和 n 的对比。然后,我们可以找到一个“稳定区域”,并粗略估计希尔估计值:
Hill plot
在本例中,(b)是(a)的特写,我们将选择 60 到 100 之间的 n ( c )的希尔估计值约为 2.2。
对于旧 S&P500 数据集,R 中的可变尾部分布示例如下所示:
data(SP500,package="Ecdat")
library("fGarch")# number of observations : 2783
# daily return S&P500 (change in log index)
n = 2783
## grab last 1000 obs.
SPreturn = SP500$r500[(n-999):n]
year = 1981 + (1:n)* (1991.25-1981)/n
year = year[(n-999):n]
n = length(SPreturn)
# fit t-distr to SPreturn
fitt = fitdistr(SPreturn,"t")
param = as.numeric(fitt$estimate)
mean = param[1]
df = param[3]
sd = param[2]*sqrt( (df)/(df-2) )
lambda = param[2]
x=sort(SPreturn)
q = quantile(x,.1)
a= 1.975## vector of alphas for plotting VaR
alpha = seq(.002,.2,.0001)
qalpha = qt(alpha,df=df)
VaR_par = -20000*(mean + lambda*qalpha)
VaR_norm = -20000*(mean(x)+ sd(x)* qnorm(alpha))par(mfrow=c(1,1))
plot(alpha, -20000*q * (.1/alpha)^(1/a),type="l",lwd=2,
xlab=expression(alpha),ylab=expression(paste("VaR(",alpha,")")),
ylim=c(0,1700),log="x" )
a.hill=2.2
lines(alpha, -20000*q * (.1/alpha)^(1/a.hill),lty=2,lwd=2)
lines(alpha,VaR_par,lty=5,lwd=2)
lines(alpha,VaR_norm,lty=3,lwd=2)
legend("topright",c("polynomial tail: regression",
"polynomial tail: Hill","t","normal"),lwd=2,lty=c(1,2,5,3))
情节是:
我不会在这里解释所有的细节,我也决定不解释多项式尾部,但它明确显示了尾部分布在查看不同的 α 时的重要性。
一致的风险措施
Artzner 等人(1999 年)定义了一个风险度量应该如何运作才能被认为是一致的。通过四个不同的公理,他们使用对风险本质的精确陈述,成功地形成了一致风险度量的概念。从而将复杂的现实转化为更简单的数学框架。
设 X 和 Y 是描述两个投资组合损失的随机变量。那么,如果一个风险度量ρ()(对资本的要求或“风险性”)满足 4 个约束,则称它是相干的。比例:
如果你的仓位翻倍,你的风险也会翻倍。
2。一神论:
如果损失 Y 总是小于或等于损失 X,则 Y 的风险一定小于或等于 X 的风险。翻译:
简单地说,现金可以从资本要求中扣除。
4。次可加性:
两个投资组合的风险度量应该小于或等于两个投资组合各自的风险度量,因为组合创造了多样化。例如,如果您为一家公司设定了资本要求和次可加性约束,该公司可以通过拆分资产来降低资本要求。上面列出的原则被视为正确风险度量的指南。
VaR 不考虑次可加性。
例如,假设一个投资组合的损失分布如下,VaR(0.5) = 50:
那么两个独立的投资组合将有损失分布:
这样就会有 VaR(0.5) = 1950 > 2×50,这显然与次可加性相矛盾。这两个投资组合在一起的风险大于这两个投资组合单独的风险。
对于 ES 不是这样的,它会是这样的:
ES(P1)= ES(p2)= 1590 og ES(P1+p2)= 2015.6<2×1590
ES 是一个连贯的风险度量。作为 es 满足次可加性的结果,你可以说不可能建立 ES 违反一致风险度量定义的例子。它对重尾、对尾分布的错误估计和异常值也更敏感,而且不像 VaR 那样容易解释。
A risk manager happily using VaR
关于 VaR 和 ES 的结束语
VaR 用一个数字概括了投资组合的风险,因此比其他风险衡量指标(如希腊指标)更肤浅。如果我们将 VaR 和 ES 结合起来,我们将有一个更可靠的风险度量,VaR 和 ES 非常依赖于参数的选择。尽管 ES 在理论上优于 VaR,但后者比 ES 更受青睐。这可能是因为计算 ES 首先涉及计算 VaR,因此潜在地给出了可能使结果无效的两个误差源。巴塞尔委员会在 2012 年提议从 VaR 转移到 es,因为:
与 VaR 不同,ES 通过考虑超过特定阈值的损失规模和可能性来衡量工具的风险……这样,ES 以更全面的方式考虑尾部风险。
及以后:
尽管批评集中在与 es 相关的复杂性、计算负担和回测问题上,但最近的文献表明,许多问题已经得到解决,或者已经被确定为不如最初预期的严重。
关键要素是 ES 将能够捕捉尾部事件。然而,今天它仍然不是那么简单。正如风险值一样,ES 将无法捕捉信贷和流动性风险,因为它与风险值相似。专家系统的验证过程要复杂得多,因此模型可能很难解释,很难知道模型何时何地出现故障。总而言之,金融风险及其监管极其复杂,也许过于复杂…
资本要求—风险加权资产(RWA)
在监管中,风险度量的使用可以帮助确定一些投资组合或公司在最坏情况下的资本要求。在信贷业务中,损失时有发生——总有一些借款人违约。某一年实际经历的损失每年都不一样。下图显示了一段时间内已实现的损失如何导致银行的损失分布。
银行永远不可能确定他们未来的损失,但他们可以预测他们预期经历的信贷损失的平均水平。在这个设置中,我们将预期损失(EL)定义为您预期在有 n 项资产的投资组合中得到的损失,如虚线所示。金融机构将 EL 视为开展业务的成本组成部分。
银行资本的功能之一是提供缓冲,以保护银行的债务持有人免受超过 EL 的峰值损失。上图中虚线上方的尖峰说明了这些峰值。峰值损失不会经常发生,但一旦发生,损失可能会非常大。高于 EL 的损失通常被称为意外损失(UL)。机构知道它们会不时发生,但它们无法提前知道发生的时间或严重程度。需要资本来覆盖这种峰值损失的风险。
银行必须仔细权衡持有资本的风险和回报。在最坏的情况下,尽管可能性极小,银行会失去整个信贷组合,但持有资本来抵御这一事件在经济上是无效率的。他们也有动机将资本最小化,因为这样可以释放资源,用于有利可图的投资。然而,银行持有的资本越少,其无法履行自身义务的概率就越大。
现在我们可以回到 VaR 了。
这看起来像我们以前见过的东西。看到预期损失的可能性更大,VaR 阈值是我们已经知道的。如果资本是根据 EL 和 VaR 之间的差额设定的,并且如果 EL 被收入所覆盖,那么银行在一年内保持偿付能力的可能性等于置信水平(1- α )。
预期损失可以写成:
EL = PD×EAD×LGD
或者如果表示为 EAD 的百分比,则为:
EL = PD*LGD
这里的三个因素是违约概率(PD)、违约风险敞口(EAD)和违约损失率(LGD)。PD 是债务人在一年内违约的平均百分比,EAD 是借款人违约时未偿金额的估计值,LGD 是借款人违约时银行可能损失的风险百分比,通常表示为 EAD 的百分比。
现在我们可以看看风险加权资产(RWA)。这是一个你可能遭受损失的资产价值的表达式,根据风险进行加权。它用于推导 UL 的监管资本费用,并基于巴塞尔委员会开发的特定模型。它用于确定银行为降低破产风险而必须持有的最低资本额。在 2008 年金融危机期间,许多金融机构损失了大量资本,一些机构破产。巴塞尔协议 III 设定了一些指导方针,以避免未来出现这种情况。每家银行必须按照风险类别将其资产组合在一起,以便要求的资本金额与每种资产类型的风险水平相匹配。资产风险越大,RWA 越高,所需的监管资本也越多。
看起来是这样的:
RWA = 12.5×K×EAD
K 是资本要求,给出为:
其中:
它乘以 EAD 和最低资本比率 8%的倒数,即乘以系数 12.5。
那是很多…但是它有四个组成部分。渐近单风险因子(ASRF)模型,这是第一部分,直到-PD LGD。
它是根据大数定律从“普通”信贷组合模型中得出的,可以证明这些 ASRF 模型是组合不变的,这意味着任何给定贷款所需的资本应仅取决于该贷款的风险,而不得取决于它所加入的组合。这是一项标准措施,鼓励银行使用最适合其内部风险管理需求的信贷风险模型。此处,LGD 作为 ASRF 模型的一部分包含在内。 N 是累积正态分布, N 是其逆。 R 为相关性,其固定置信水平为 99.9%。
2.相关性,r。资产相关性表明一个借款人的资产价值(例如一个公司所有资产价值的总和)如何依赖于另一个借款人的资产价值。主管已经推导出资产相关性函数为:
它由非常高和非常低的 PDs(分别为 100%和 0%)的 12%和 24%的两个极限相关性构成。这些限值之间的相关性通过指数加权函数建模,该函数显示了对 PD 的依赖性。其速度由一个所谓的“k-因子”设定,对于企业风险敞口,该因子被设定为 50。它也是由公司规模(最后一部分)调整的,公司规模是由年销售额衡量的。它影响年销售额在€500 万到€5000 万之间的借款人。对于€5000 万以上的借款人,规模调整为零,而对于€5000 万以下的借款人,其值为 0.04,从而将资产相关性从 24%降至 20%(非常高的违约概率)或从 12%降至 8%(非常低的违约概率)。它决定了风险权重公式的形式。相关性取决于资产类别,因为不同的借款人和/或资产类别对整体经济的依赖程度不同。
3.贷款的预期损失占违约损失率的百分比,即-PD LGD。LGD 在这里是预期损失的一部分。巴塞尔框架决定,银行只需持有针对 UL 的资本。在上面的 VaR、EL 和 UL 图中,风险权重现在只与 VaR 和 EL 之间的距离有关。在图中,由于 ASRF 模型将从原点到 VaR 的全部资本量交付,因此 el 必须从资本要求中剔除。这是通过采用 PD 和低迷 LGD 的乘积完成的,并产生“仅 UL”的资本要求。
4.到期调整,即最后一个括号后的分数。请注意,PD 是正常情况下的平均概率,LGD 处于经济低迷时期。 M 是成熟期。
资本要求在到期日不断增加,因为通常情况下,长期信贷比短期信贷风险更大,长期内更有可能出现衰退。b(PD)是一个用于到期调整的“平滑”统计回归模型。
好吧,那是很多。恭喜你通过了。
请注意,这并不意味着详尽或结论性的描述。我可能遗漏了很多信息。如果我错过了什么或者做错了什么,请随时纠正我(我可能就是这样)。金融风险是一个巨大而复杂的话题,风险管理远远超出了本文的范围。我不是风险经理,这纯粹是从我学生时代的课程中收集的。
如果你喜欢这篇文章并想看更多,请务必关注我的简介。
你的爱有多深?
原文:https://towardsdatascience.com/how-beep-is-your-love-cd53d495d5a0?source=collection_archive---------32-----------------------
Photo by DJ Johnson on Unsplash
对许多人来说,爱是神秘的领地。尤其是当我们谈论人类和人造人之间的爱时。
你可能会对此感到惊讶,但事实比小说更离奇。今年,一名日本男子正在庆祝与视频游戏角色姐崎宁宁结婚十年。2017 年,中国人工智能工程师皮格马利翁(Pygmalion)的当代化身嫁给了他制造的一个女性机器人。
所以有人可能会问,一个人被另一个实体吸引的先决条件是什么?
这个问题从时间的黎明就开始嘲笑哲学家,我将尝试通过联想来回答它,从最基本的特征开始——他们的人性。我们被展现人性的生物所吸引。有时,这只是外表的问题。在当今这个时代,逼真的头像已经取得了长足的进步。像新的虚拟现实色情初创公司 Holodexxx 这样的公司正在试点这项技术,该公司利用虚拟现实为他们的客户提供一种包括真实演员和替身在内的完全交互式和可定制的性体验。化身可以通过对真实的色情电影进行数字扫描来创建,也可以完全是虚拟角色。
由于化身可以按照规格来制作,我们开始接近什么是可接受的,什么是不可接受的。可能有些人会被一只粉红色蓬松的独角兽吸引,现在他们可以用虚拟现实来满足自己的欲望。但是,如果吸引力是针对一个虚拟的小孩呢?尽管在我们的现实社会中是非法的,但滥用药物的情况仍时有发生。在线世界也是如此,不幸的是,人们更容易遇到这种情况。1998 年,天空新闻的调查人员发现了一个名为仙境的恋童癖游乐场,隐藏在一个名为第二人生的虚拟世界里。
Photo by Jordan Merrick on Unsplash
甚至妓院也发现了机器人复制真人感觉的能力。总部位于巴塞罗那的性玩偶公司 LumiDoll 正在欧洲大陆开设妓院,为机器人性工作者提供可识别和可联系的角色;比如动漫灵感的蓝头发 Aki 或者天使般的 Lilly。该公司声称,用户很难区分娃娃和真正的女人,因为它们是用热塑性弹性体制成的,而热塑性弹性体是一种以柔软著称的聚合物。
但是身体方面只是人类亲密关系的一个方面。那么智力参与和有意义的交流呢?为了满足这些需求,科技界生产了聊天机器人。
聊天机器人是一种能够进行不同层次对话的计算机程序。有各种各样的选择,从虚拟的女朋友或男朋友到你内心渴望的任何东西。聊天机器人的智力相当值得怀疑,但对一些人来说,它足以成为他们闲暇时无压力交谈的伴侣。他们中的一些人甚至有很强的幽默感,让人们和他们保持联系。然而,嫉妒的恋人要小心了。微软的 Ruuh,一个 2017 年上线的虚拟朋友,在它的一生中有超过 300 亿次的对话,每天收到 600 条“我爱你”的消息!
然而,在我们开始举起干草叉之前,这可能是一个提醒我们自己的好时机,不是所有的机器都旨在取代人类。技术可以充当媒介,帮助一个人向另一个人传递亲密关系。一个简单的文本或视频聊天可以用来连接地球两端的两颗心。情侣们还可以在虚拟世界里见面,享受 360 度的自由。Lovotics 的 Kissenger 是一种可以传递真实亲吻的技术。一个人亲吻一个机器人,这个吻被传递给位于不同地方的另一个人。
这些新技术的可能性是无限的。这就是为什么在马耳他大学 AI 系,我们研究专注于移情的混合现实应用。我们的目标是创造更好的机器,不仅能满足个人的功能需求,还能满足情感需求。
正如我们已经看到的,有不同的方式与机器人互动,无论是物理的还是虚拟的。这并不意味着这些是爱的例子,但它们确实展示了某种形式的联系。可以肯定的是,我们与机器的关系将随着时间的推移而演变。他们变得越像人类,我们就越会发现人们以一种亲切的方式与他们交流。然而,我们应该问自己一个问题。
如果机器开始爱我们呢?
最初发表于认为【https://issuu.com】。
阿列克谢·丁力教授 是马耳他大学的 AI 教授。二十多年来,他一直在人工智能领域进行研究和工作,协助不同的公司实施人工智能解决方案。他的工作被国际专家评为世界级,并赢得了几个当地和国际奖项(如欧洲航天局、世界知识产权组织和联合国等)。他出版了几本同行评审的出版物,并且是马耳他的一部分。由马耳他政府成立的人工智能工作组,旨在使马耳他成为世界上人工智能水平最高的国家之一。
BERT 如何利用注意机制和转换器学习单词上下文关系
原文:https://towardsdatascience.com/how-bert-leverage-attention-mechanism-and-transformer-to-learn-word-contextual-relations-5bbee1b6dbdb?source=collection_archive---------12-----------------------
伯特简介
Photo by Ambitious Creative Co. - Rick Barrett on Unsplash
在 ELMo (来自语言模型的嵌入)和开放 AI GPT (生成式预训练转换器)之后,谷歌发布了一份新的最先进的 NLP 论文。他们将这种方法称为 BERT(来自变压器的双向编码器表示)。
开放人工智能 GPT 和伯特都使用变压器架构来学习文本表示。其中一个区别是 BERT 使用双向转换器(从左到右和从右到左方向)而不是双向转换器(从左到右方向)。另一方面,两者都使用双向语言模型来学习文本表示。然而,ELMo 使用浅层连接层,而 BERT 使用深层神经网络。
看完这篇帖子,你会明白:
- 伯特设计与建筑
- 模特培训
- 实验
- 履行
- 拿走
伯特设计与建筑
输入表示
BERT 使用三种嵌入来计算输入表示。它们是标记嵌入、片段嵌入和位置嵌入。“CLS”是表示序列开始的保留标记,而“SEP”是分隔片段(或句子)的标记。这些输入是
- 令牌嵌入:一般单词嵌入。简而言之,它用向量来表示 token(或 word)。你可以查看这个故事的细节。
- 另一个词中的句子嵌入。如果输入包括两个句子,相应的句子嵌入将被分配给特定的单词。如果输入只包括一个句子,将使用一个且只有一个句子嵌入。在计算 BERT 之前学习片段嵌入。对于句子嵌入,你可以查看这个故事的细节。
- 位置嵌入:指输入的标记序列。即使有 2 句话,也会累积位置。
BERT Input Representation (Devlin et al., 2018)
培训任务
说完输入表示,我就来介绍一下 BERT 是怎么训练的。它使用两种方式来实现它。第一个训练任务是掩蔽语言模型,而第二个任务是预测下一句话。
掩蔽语言模型
第一个预训练任务是利用掩蔽语言模型(Masked LM)。与传统的方向模型不同,BERT 使用双向作为预训练目标。如果使用传统的方法来训练一个双向模型,每个单词将能够间接地看到“它自己”。因此,伯特使用了掩蔽语言模型(MLM)方法。通过随机屏蔽一些标记,使用其他标记来预测那些被屏蔽的标记以学习表示。与其他方法不同,BERT 预测屏蔽令牌而不是整个输入。
因此,实验随机抽取 15%的令牌进行替换。然而,也有一些缺点。第一个缺点是掩码标记(实际标记将被该标记替换)在微调阶段和实际预测中不会出现。因此,Devlin 等人,所选择的用于屏蔽的令牌不会总是被屏蔽
- 答:80%的时候,它会被替换为[MASK] token
- B: 10%的时候,它会被其他实际的代币代替
- C: 10%的时间,它会保持原样。
比如原句是“我在学 NLP”。假设“NLP”是用于屏蔽的选定令牌。然后 80%的时候会表现为“我在学【面具】(场景 A)。”我用 10%的时间学习 OpenCV(场景 B)。其余 10%的时间,它将显示为“我正在学习 NLP”(场景 C)。尽管随机替换(场景 B)会发生并可能损害句子的意思。但是它只有 1.5%(仅屏蔽了整个数据集中的 15%的标记和这 15%中的 10%),作者认为它不会损害模型。
另一个缺点是每批只有 15%的令牌被屏蔽(预测),训练需要更长的时间。
下一句预测
第二个预训练任务是预测下一句话。这种方法克服了第一个任务的问题,因为它不能学习句子之间的关系。目标很简单。只区分第二句是不是下一句。举个例子,
输入 1:我正在学习 NLP。
输入 2: NLG 是 NLP 的一部分。
预期的输出是 isNextSentence 或 notNextSentence。
在为该任务生成训练数据时,将随机选择 50%的“notNextSentence”数据。
模特培训
在 BERT 中采用两阶段训练。使用通用数据集执行第一次训练,并通过提供领域特定数据集对其进行微调。
训练前阶段
在预训练阶段,从图书语料库(800 万字)(朱等,2015)和英文维基百科(2500 万字)中提取句子。
- 屏蔽 LM:每个序列将使用 512 个标记(2 个连接的句子),每批有 256 个序列。设定大约 40 个时期来训练模型。该配置是:
- 学习率为 1e-4 的 Adam,β1 = 0.9,β2 = 0.999
- L2 重量衰减 0.01
- 所有层的压差为 0.1
- 使用 gelu 进行激活
如前所述,选择两个句子用于“下一句预测”预训练任务。另一个句子被随机选取并标记为“不是下一个句子”的概率为 50%,而另一个句子实际上是下一个句子的概率为 50%。
这一步由谷歌研究团队完成,我们可以利用这个预先训练的模型,根据自己的数据进一步微调模型。
微调阶段
在预训练阶段,仅改变了一些模型超参数,如批量大小、学习速率和训练次数,大多数模型超参数保持不变。在实验过程中,以下数值范围适用于各种任务:
- 批量:16 个,32 个
- 学习率:5e-5,3e-5,2e-5
- 历元数:3,4
微调程序不同,取决于下游任务。
分类
Single Sentence Classification Task (Devlin et al., 2018)
对于[CLS]令牌,它将作为最终隐藏状态被馈送。标签(C)概率用 softmax 计算。之后,对其进行微调,以最大化正确标签的对数概率。
命名实体识别
NER Task (Devlin et al., 2018)
令牌的最终隐藏表示将被馈送到分类层。预测时将考虑周围的单词。换句话说,分类只关注令牌本身,而没有条件随机场(CRF)。
实验
Photo by Louis Reed on Unsplash
到目前为止,与其他最先进的 NLP 模型相比,BERT 提供了最好的结果。
Experiment Result on GLUE dataset (Devlin et al., 2018)
Experiment Result on SQuAD (Devlin et al., 2018)
履行
微调模型(再现实验)
在微调特定领域的数据集之前,我更喜欢先重现实验结果。你可以访问官方页面或者跟随它的指示
- 执行这个脚本来下载数据集
- 下载预培训的型号(选定的“BERT-Base,Uncased”型号)
- 分配环境变量
export BERT_BASE_DIR=/downloaded_model_path/bert
export GLUE_DIR=/downloaded_data_path/glue
export BERT_OUTPUT_DIR=/trained/model/bert/
- 执行以下命令开始微调
python run_classifier.py \
--task_name=MRPC \
--do_train=true \
--do_eval=true \
--data_dir=$GLUE_DIR/MRPC \
--vocab_file=$BERT_BASE_DIR/vocab.txt \
--bert_config_file=$BERT_BASE_DIR/bert_config.json \
--init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt \
--max_seq_length=128 \
--train_batch_size=32 \
--learning_rate=2e-5 \
--num_train_epochs=3.0 \
--output_dir=$BERT_OUTPUT_DIR
- 我用了一台 20 核 CPU 的机器来重现它,花了大约一个小时来完成微调。
INFO:tensorflow:***** Eval results *****
INFO:tensorflow: eval_accuracy = 0.84313726
INFO:tensorflow: eval_loss = 0.5097478
INFO:tensorflow: global_step = 343
INFO:tensorflow: loss = 0.5097478
提取固定向量
而不是针对特定数据集微调预训练模型。我们还可以为下游任务提取一个固定的向量,这样更容易。这类似于埃尔莫所做的。
您可以访问官方页面或跟随其指示
- 生成一个样本文件到当前方向
echo 'Who was Jim Henson ? ||| Jim Henson was a puppeteer' > input.txt
- 执行以下命令提取字符向量
python extract_features.py \
--input_file=input.txt \
--output_file=$BERT_OUTPUT_DIR/output.jsonl \
--vocab_file=$BERT_BASE_DIR/vocab.txt \
--bert_config_file=$BERT_BASE_DIR/bert_config.json \
--init_checkpoint=$BERT_BASE_DIR/bert_model.ckpt \
--layers=-1,-2,-3,-4 \
--max_seq_length=128 \
--batch_size=8
- 输出文件包含以下对象
- features
- token: Token value (e.g. Who)
- layers
- index: Layer number (from -1 to -4) per token
- values: Vector values. Default model dimension is 768
参数
如果我们更多地了解如何改变参数,这将是有益的。以下是一些有用的参数解释:
data_dir
:数据方向
task_name
:具体用什么任务。特定任务处理器已准备就绪。可能的task_name
有“可乐”、“mnli”、“mrpc”、“xnli”。您可以通过扩展DataProcessor
类来实现自己的数据处理器。
do_train
:包含训练步骤。必须启用do_train
、do_eval
或do_test
中的任何一个。
do_eval
:包含评估步骤。必须启用do_train
、do_eval
或do_test
中的任何一个。
do_test
:包含测试步骤。必须启用do_train
、do_eval
或do_test
中的任何一个。
关于我
我是湾区的数据科学家。专注于数据科学、人工智能,尤其是 NLP 和平台相关领域的最新发展。你可以通过媒体博客、 LinkedIn 或 Github 联系我。
参考
Devlin J .,Chang M. W .,Lee K .,Toutanova K .,2018 年。 BERT:用于语言理解的深度双向转换器的预训练
张量流中的伯特(原创)
伯特在 PyTorch
伯特在链器里
word2vec,glove 和 fastText Story(单词嵌入)
跳过思想故事(句子嵌入)
ELMo 的故事
NER 的故事
变压器详解
技术是如何让语言偏见永久化的
原文:https://towardsdatascience.com/how-biases-in-language-get-perpetuated-by-technology-b4edc5532f3f?source=collection_archive---------22-----------------------
探索单词嵌入的数据集
Photo by Markus Spiske on Unsplash
尤其是在今年,科技行业因其对人工智能(AI)研发的不懈追求而受到广泛批评。这是因为该领域的主导范式被称为机器学习,其中计算机依赖于识别现有数据中的模式来执行特定任务。在机器学习中,许多算法通过接受一组数据、创建模型和生成预测来工作。
然而,当这些方法所依据的数据有偏差时会发生什么?我们时常在新闻中看到面部识别技术对少数民族、或推特机器人发表种族主义言论失败的故事。但事实是,我们不断听到偏见和人工智能,却没有广泛了解这些偏见是如何在我们使用的技术中编码的。
因此,我将解释被称为单词嵌入、的工具的一些缺点,因为它们被用于涉及计算机和人类语言或自然语言处理(NLP)的各种各样的任务,并且因为在不使用大量复杂的技术术语的情况下,探索和解释这些工具如何会有问题是相对容易的。首先,让我们了解更多关于 NLP 和单词嵌入是如何适应的,然后我们将了解嵌入本身如何有助于产生有偏差的结果。
NLP 领域依赖于一个关键范式:将文本视为数据。这种文本可以来自任何来源——电影评论、古诗,甚至是口语——并且可以用于任何任务,无论是检测文章是积极还是消极的语气,将短语翻译成另一种语言,甚至是进行在线搜索。然而,NLP 系统用于的所有任务都包括创建文本的数学模型。为了做到这一点,关键是要用数字表示输入文本中的每个单词,以便模型可以根据提供的文本生成输出,如相关网站的列表或准确的翻译。
单词嵌入本质上增加了在这些数字表示中捕获的每个单词的信息。最著名的算法之一的名字“Word2Vec”很好地体现了这一思想,其中一个单词被表示为一个向量,或者一组数字,它本身是由机器学习工具生成的。虽然 NLP 方法在 2010 年代初引入单词嵌入之前已经存在多年,但这些技术真正革新了该领域,使得本十年后期出现了一些重要发现。
单词嵌入如此有效的原因是它们能够编码文本中每个单词与每个其他单词之间的关系;这在以前的词语表达中是没有的。具体来说,这是通过一个概念来实现的,即一个词是由它周围的词来定义的。如果在训练语料库(从其“学习”嵌入的文本主体)中,两个单词在相似的上下文中被提及(例如“好”和“棒”),那么它们对应的向量也将是相似的。
为了找出为什么单词嵌入会有问题,我们需要看看它们所基于的模型是如何被评估的。拥有一种可靠的方法来评估机器学习模型与模型本身一样重要。查看单词嵌入是否准确的最常见方法是使用它们来评估类比。这是因为任务相当简单;从数学上来说,就是矢量的加减。
就拿的例子来说男人是为了女人如同的国王是为了 ______。给定这样一组输入,数据的快速转换将导致 queen 的嵌入。我画出了下面四个词的向量。
The vectors for “king” and “queen” have a similar relationship to the vectors for “man” and “woman.”
除了这些类比,简单的加减向量的步骤还可以捕捉语法关系,如单词是单数还是复数,甚至是关于世界的事实,如国家和首都。
然而,如果我们给我们的程序一个查询“男人对于女人就像医生对于 ______?”它最终输出“护士”这种偏见不仅限于性别,因为该系统认为“警察对于白人就像罪犯对于黑人一样”,以及“合法对于基督教就像恐怖分子对于伊斯兰教一样。”
因为单词嵌入会被输入到其他算法中,它们固有的偏见可能会导致特别有问题的情况——一名人力资源专业人员在 LinkedIn 等网站上搜索“工程师”,会看到男性工程师的排名可能高于他们同样有才华的女性同事,或者更危险的是,如果一个警察部门根据书面犯罪报告受命在一个主要是黑人的社区进行大量巡逻。
我们可以期望嵌入所“学习”的文本,维基百科和新闻文章,是相对公正的,但是单词本身可能在类似的上下文中被提及。例如,像“她”这样的女性代词可能更频繁地出现在“护士”一词周围,只是因为我们的文本可能更多地谈论女护士而不是男护士。然而,允许这些协会管理大规模的软件系统是相当危险的。
至此,我们得出了一个严肃的结论。如果我们不能有效地评估现代 NLP 的构建模块,我们如何能够信任使用它们的算法?
现在让我们更详细地看看数据集。我已经在几本 Python 笔记中做了这些分析,作为这篇文章的同伴,所以如果你想的话,请随意跟随!我也写了一篇关于前面讨论的更技术性的文章。如果你已经熟悉了这个概念,请查看 Github repo 中的阅读列表。
首先,我们比较一个单词和一对单词的向量。当我们将“工程师”与“男人”和“女人”进行比较时,我们发现“工程师”的向量更类似于“男人”的向量,而不是“女人”的向量。差别不是太大,但相当明显。然而,当我们将“工程师”与“亚洲人”和“非裔美国人”进行比较时,我们会发现“亚洲人”比“非裔美国人”更类似于“工程师”。
接下来,我们取一对向量,比如“男人”和“女人”,并查看代表与他们最亲近的人的向量。与“女人”最相似的向量也表示一个人,对应于单词“受害者”,其他与“女人”接近的向量表示职业,如“教师”和“妓女”,而与“男人”最相似的向量表示像“士兵”和“英雄”这样的词。当我们看“公民”和“移民”的向量时,与“公民”最相似的向量通常是专业职业,如“律师”和“商人”,但“农民”和“劳动者”更接近于“移民”。最后,当比较“基督教”和“伊斯兰教”的向量时,我们发现这两个向量都接近许多宗教术语,但“伊斯兰教”的向量更接近“激进”、“原教旨主义”和“极端主义”的向量。
我们进行的最后一项分析可能是最有趣的。向量不仅仅是数字的集合;它们也是在空间中表示这些数字的一种方式。因此,这依赖于人类的偏见来转换我们数据集所在的向量空间。我们着眼于量化特定类型偏差的向量。例如,对应于“他”和“她”之间的差异的向量可以表示“性别成分”这是因为向量的数值反映了“男性”和“女性”向量在数值上的不同。如果我们转换数据集,根据“他”和“她”之间的差异为每个向量分配一个分数,我们会发现与体育和军事有关的词得分较高,而描述表演艺术以及女性家庭成员的词得分较低。我画出了所有的向量,然后做了转换,得到了下面的结果。
Points to the right represent more “male” vectors and points to the left represent more “female” vectors.
让我们来看看这张图上的几个点。
“engineer,” “quarterback,” and “drummer” are in the “male” quadrant, while the “cook”, “violist,” and ”housewife”are in the “female” quadrant.
事实上,试图“去偏差”单词嵌入,使它们不包含有问题的关系是 NLP 研究的一个主要领域,将偏差转化为向量空间上的操作是这类工作的一个关键范式。
概括地说,我们已经学习了单词嵌入,以及它们如何在自然语言处理领域实现了许多发现,因为它们以数字形式编码了关于单词的重要信息。我们还讨论了对它们的评估方式是如何从根本上存在缺陷的,因为它们推断了单词之间的关系,这种关系延续了我们使用的语言中的偏见。最后,我们已经分析了数据集,并对导致这些推论的原因有了基本的了解。
当我们看到使用 NLP 技术的系统时,从网络搜索到虚拟助理,了解这些系统是根据人类生成的数据进行训练的,这对我们来说至关重要。这是因为技术经常被描绘成一种客观的理想,通过在白板上写计算来解决世界问题。然而,一旦我们的技术系统在应该由人类使用的产品中使用人类生成的数据,我们就需要意识到这些系统强化的偏差,以及如何修复它们。
大数据如何改变我们看待物质滥用的方式
原文:https://towardsdatascience.com/how-big-data-is-changing-the-way-we-look-at-substance-abuse-95581524ccc9?source=collection_archive---------39-----------------------
当今世界滥用药物的问题非常严重,这是一个被广泛接受的事实。
解决这个问题当然不容易,但大数据可以提高可见性,从而在战斗中提供帮助。
追踪处方药滥用的证据
许多物质滥用者都知道一种被称为“医生购物”的做法,即患者在一个地区去看几个医生,出现通常用处方药治疗的症状,然后拿着阿片类药物等有效处方离开。
但是包括 Rite Aid 在内的连锁药店可以使用一个高科技系统来协助处方药监控。
这个系统汇集了各州有关药房法律的信息,它依靠机器学习等技术来帮助药剂师跟踪趋势,并发现他们可能会错过的处方药滥用迹象。
阐明物质滥用行为模式
街头毒品的绰号可以迅速改变,并取决于当地文化。类似地,人们获取毒品以满足渴望的地方也在变化。这些变化给那些努力帮助有物质滥用问题的个人的人,如成瘾咨询师,带来了困难。
然而,一个新的基于大数据的项目旨在消除这些挑战。
这一新系统着眼于社交媒体帖子中使用的短语和常见关键词等因素,以确定某些地区物质使用的共性。它还利用地理空间数据并创建热图来显示药物滥用特别严重的地区。
这种频繁更新的系统的替代方案涉及每年收集数据,这通常太慢,无法产生有意义的影响。
帮助各州量化大麻立法的效果
大麻在越来越多的州和国家逐渐合法化,这种转变让许多立法者和执法者意识到他们正在进入一个全新的领域。
复杂的一个重要原因涉及到在允许酒后驾驶的州确定什么构成酒后驾驶指控。
例如,在宾夕法尼亚州,一个人的血液酒精含量(BAC) 为 0.08–0.099%就属于一般损伤类别。
各州代表可以就酒精含量等同于饮酒后的醉酒达成一致,但是对于大麻来说还不是这样。一些工具可以检测出血液中是否存在大麻的致醉化学物质,但是不同数量的这些化学物质对人的影响不同。
多亏了大数据,立法者可以调查统计数据,并开始澄清一个人体内有多少大麻会使驾驶车辆变得不安全。这是一个需要解决的关键细节。在宾夕法尼亚州,人们可以将大麻用于医疗目的,但不能用于娱乐。
然而,最近的一项民意调查显示,在宾夕法尼亚州等 T2,人们支持娱乐用毒品合法化。
科罗拉多州的官员最近发表了一份报告,调查了出于娱乐目的大麻合法化的影响。这项研究包括来自几十个来源的数据,它得出的结论可能会让一些人感到惊讶。
例如,数据显示,从 2014 年到 2017 年,州巡逻队酒后驾车案件下降了 15% ,在此期间大麻是合法的。另一方面,大麻素检测呈阳性的人的死亡率上升了。
使毒品合法化不一定会使物质滥用更加突出,但它可以帮助州当局通过查看其他司法管辖区的结果来熟悉如果他们将大麻合法化会发生什么。
了解依赖者寻求帮助的可能性
预测一个患有酒精使用障碍(AUD)的人是否会寻求帮助并不简单,但研究表明,一个数据驱动的系统可以使用机器学习来做出更准确的判断。
其中一个模型在确定被诊断为 AUD 的个体是否寻求治疗方面有 86%的准确率。这一点至关重要,因为大多数 AUD 患者没有得到治疗。
与这个项目相关的研究人员认为,他们的工作可以导致关于一个人获得专业帮助来管理物质滥用的可能性的更正确的信息。一旦临床医生了解更多,他们就可以加强对最有可能接受治疗的人群的针对性。
通过医疗记录分析预测当前或未来的物质滥用
医生——就像前面提到的药剂师——处于监控药物滥用的最佳位置。通常,大数据有助于他们更快得出更有信心的结论。一项研究查看了6 . 99 亿份门诊病历和 1700 万份住院病历,根据人们是否有特定的预测因素来汇总物质滥用风险。
例如,因身体某些部位不适而接受止痛药处方的人,变得依赖的风险是普通人的三倍。科学家们还指出,那些患有精神健康疾病、需要住院治疗至少两次的人风险更高。
同样,无家可归或有经济困难或法律纠纷的人面临更大的药物滥用风险。
这些数据还可以为其他可能影响公共卫生工作和治疗干预的威胁提供信息。例如,与没有药物滥用史的人相比,有药物滥用史的人服药后自杀死亡的风险要高得多。
数据提供了急需的清晰度
没有简单、万无一失的方法来根除药物滥用问题。
但正如这里的例子所示,大数据和机器学习等相关技术可能有助于帮助研究人员取得前所未有的进展。
图片经由raw pixel
大数据有多大?
原文:https://towardsdatascience.com/how-big-is-big-data-3fb14d5351ba?source=collection_archive---------7-----------------------
我们已经永远进入了数据时代。我们在线上甚至线下所做的一切都会在数据中留下痕迹——从 cookies 到我们的社交媒体档案。那么到底有多少数据呢?我们每天处理多少数据?欢迎来到齐塔字节时代。
IBM Summit supercomputer
1.齐塔字节时代
数据是用比特和字节来衡量的。一位包含值 0 或 1。八位构成一个字节。然后我们有千字节(1000 字节)、兆字节(1000 字节)、千兆字节(1000 字节)、太字节(1000⁴字节)、千兆字节(1000⁵字节)、千兆字节(1000⁶字节)和千兆字节(1000⁷字节)。
思科估计2016 年,我们的年度互联网总流量超过了 zettabyte,这是我们在万维网上上传和共享的所有数据,其中大部分是文件共享。zettabyte 是存储容量的度量单位,它等于 1000⁷(10 亿字节)。一个 zettabyte 等于一千 EB、十亿 TB 或一万亿 GB。换句话说——太多了!尤其是如果我们考虑到互联网还不到 40 岁。思科还估计,到 2020 年,年流量将增长到 2 千兆字节以上。
互联网流量只是全部数据存储的一部分,其中还包括所有个人和商业设备。对 2019 年我们现在拥有的总数据存储容量的估计各不相同,但已经在 10-50 吉字节的范围内。到 2025 年,据估计将增长到 150-200 兆字节。
毫无疑问,数据创建只会在未来几年加速,因此您可能会想:数据存储有任何限制吗?不完全是,或者更确切地说,是有极限的,但是是如此遥远,以至于我们不会很快接近它们。例如,仅仅一克 DNA 就可以存储 700 万亿字节的数据,这意味着我们可以在 1500 千克的 DNA 上存储我们现在拥有的所有数据——密集包装,可以放入一个普通的房间。然而,这与我们目前所能制造的相差甚远。正在制造的最大硬盘有 15tb,最大 SSD 达到100tb。
术语大数据是指对于普通计算设备来说太大或太复杂而无法处理的数据集。因此,这是相对于市场上可用的计算能力。如果你看一下最近的数据历史,那么在 1999 年,我们总共有 1.5 的数据,1gb 被认为是大数据。早在 2006 年,总数据量估计就达到了 160 年内增长了 1000%。在我们的 Zettabyte 时代,1gb 已经不再是真正的大数据,谈论从至少 1tb 开始的大数据是有意义的。如果我们用更数学的术语来说,那么谈论大数据似乎很自然,因为数据集超过了世界上创建的总数据除以 1000。
2.千万亿次浮点运算
为了让数据变得有用,仅仅存储它是不够的,你还必须访问和处理它。人们可以通过每秒指令数(IPS)或每秒浮点运算数(FLOPS)来衡量计算机的处理能力。虽然 IPS 比 FLOP 更广泛,但它也不太精确,并且取决于所使用的编程语言。另一方面,FLOPS 很容易想象,因为它们与我们每秒可以做的乘法/除法次数直接相关。例如,一个简单的手持计算器需要几个 FLOPS 才能正常工作,而大多数现代 CPU 都在 20–60 GFLOPS 的范围内(gigaFLOPS = 1000 FLOPS)。IBM 在 2018 年制造的破纪录的计算机达到了 122.3 petaFLOPS (1000⁵ FLOPS),比一台普通 PC(峰值性能 200 petaflops )快了几百万次。
GPU 的浮点计算性能更好,达到数百 GFLOPS(大众市场设备)。当你研究专门化的建筑时,事情变得有趣了。最新的趋势是构建硬件来促进机器学习,最著名的例子是谷歌的 TPU,它达到了 45 万亿次浮点运算(1000⁴浮点运算),可以通过云访问。
如果你需要进行大型计算,而你自己又没有超级计算机,那么退而求其次的办法就是租一台,或者在云上进行计算。亚马逊为你提供高达 1 petaFLOPS 的 P3,而谷歌提供速度高达 11.5 petaFLOPS 的一组 TPU。
3.人工智能和大数据
让我们把它们放在一起:你有数据,你有与之匹配的计算能力,所以为了获得新的见解,是时候使用它们了。要真正从两者中受益,你必须求助于机器学习。人工智能处于数据使用的前沿,有助于预测天气、交通或健康(从发现新药到癌症的早期检测)。
人工智能需要训练来执行专门的任务,看看需要多少训练才能达到峰值性能是计算能力与数据的一个很好的指标。OpenAI 在 2018 年有一份出色的报告,评估了这些指标,并得出结论,自 2012 年以来,以 petaflops/day (petaFD)衡量的人工智能训练每 3.5 个月翻一倍。一个 petaFD 包括在一天中每秒执行 1000⁵神经网络运算,或者总共大约 10 次⁰运算。这一指标的伟大之处在于,它不仅考虑了网络的架构(以所需操作数量的形式),还将其与当前设备上的实施(计算时间)联系起来。
你可以通过查看下面的图表来比较在人工智能的最新进展中使用了多少 petaFD:
chart by OpenAI
毫无疑问,领先的是 DeepMind 的 AlphaGo Zero ,使用了超过 1,000 petaFD 或 1 exaFD。就资源而言,到底有多少?如果你要用同样的硬件来复制你自己的培训,你很容易就会花费近 300 万美元,正如这里详细估算的。根据上面的图表,较低的估计是,1,000 petaFD 至少相当于使用最好的亚马逊 P3 1000 天。如果当前价格为每小时 31.218 美元,则 31.218 美元 x 24 小时 x 1,000 天= 749,232 美元。这是最低的界限,因为它假设一个神经网络操作是一个浮点操作,并且您在 P3 上获得的性能与在 DeepMind 使用的不同 GPU/TPU 上获得的性能相同。
这说明 AI 需要大量的力量和资源来训练。有一些机器学习的最新进展的例子,当时在计算能力或数据方面不需要太多,但大多数情况下,额外的计算能力是非常有用的。这就是为什么建造更好的超级计算机和更大的数据中心是有意义的,如果我们想发展人工智能,从而发展我们的整个文明。你可以想象类似于大型强子对撞机的超级计算机——你建造越来越大的对撞机,这样你就可以获得关于我们宇宙的更深层次的真相。计算能力和人工智能也是如此。我们不了解我们自己的智力或我们如何执行创造性任务,但增加 FLOPS 的规模可以帮助解开这个谜。
拥抱 Zettabyte 时代!并且更好的快速从中获利,因为 Yottabyte 时代已经不远了。
数字树(3)有多大
原文:https://towardsdatascience.com/how-big-is-the-number-tree-3-61b901a29a2c?source=collection_archive---------6-----------------------
Let us see how big a forest can we grow with just three kinds of seeds and a few mathematical constraints!
曾几何时,我是如此天真执着,一口气把所有自然数数到一千。这是我从未试图打破的记录,希望在不久的将来也不会。我的意思是,作为一个孩子,这个数字对我来说意义重大,根据具体情况,它可能是一个相当大的数字。
所以,我很好奇一个大数字对你来说意味着什么——是一百万,十亿,一个古戈尔,还是一个古戈尔派克斯?
但是如果你考虑的是无限,那就不公平了。无穷大不是一个实数,它是一个没有尽头的深不可测的概念!
好吧,让我们玩一个游戏,给你三个不同的种子或节点,颜色分别是红色、黑色和绿色。
这个想法是,像在图论中一样,从这些节点构建树,使得第一个树包含单个节点,第二个树最多包含两个节点,第三个最多包含三个节点,等等。
在这个序列中,任何特定的树都不能包含其相应的先前的树。这里,包含强调拥有相似节点的两棵树也保留了最近的共同祖先。从数学上来说,较小的树被称为在较大的树内是INF-可嵌入的。
上述两棵树不能出现在序列中,因为左树可以嵌入右树中。
在上面的例子中,树是有效的,因为相似的节点共享不同的最近的共同祖先。
让我们考虑另一个例子来说明这一点:
你可能会觉得上面两棵树截然不同。然而,事实恰恰相反。考虑到相似的节点,它们各自最近的共同祖先也是相同的!
在继续之前,让我们总结一下约束条件:
- 第 n 个树应该包含最多个节点。
- 所有先前的( n - 1 )树都不应该在第n树中进行 inf 嵌入。
我希望你已经理解了规则。那么,让我们开始游戏:
在遇到一棵总是包含前一棵的树之前,你能构造多少棵最大可能的树?
假设我们只有一种节点可供我们使用,例如黑色。因此,我们可以建造的树的数量是一棵。因为第二棵树由于只存在一种节点而总是包含第一棵树。
通过为这个游戏定义一个函数,TREE(k) ∀ k ∈ [1,n]其中' k '对应于不同种类节点的数量,我们可以声明 TREE(1) = 1。
类似地,通过采用两个不同的节点,例如红色和黑色,我们可以得到三个可能的树,如下所示:
任何其他的变异都会导致更少数量的树。因此,用数学术语来说,树(2) = 3。
现在,当我们考虑三个不同的节点时,有多少这样的树是可能的?
…拿出一张纸,试一试!
介绍树(3)
你有没有遇到过计算量大到不得不放弃的情况?好吧,你可以用你的一生来求解树(3),你甚至不会接近它的实际值。树(3)是如此庞大,如此难以理解的庞大,以至于没有人能够想象它,理解它,或者概念化它。
即使你试图掌握构成树(3)的位数,或者树(3)中位数的位数——你的大脑仍然会陷入黑洞,因为大脑中可以存储的熵是有一定的最大限度的。
你看,我们宇宙中最小的可能体积是 4.22 x 10^-105 立方米。这就是所谓的普朗克体积。从理论上讲,如果我们想把树(3)的每一个数字都放在这么小的体积里,我们仍然会耗尽宇宙中的空间。因此,我们永远无法在我们可观测的宇宙中展开树(3),更不用说这篇文章了。
至少,我们知道树(3)是有限的,甚至可以借助有限的算法来证明。然而,证明树(3)的有限性所花费的时间是如此之长,以至于在结束证明之前宇宙将走到尽头。
俄亥俄州立大学的数学家哈维·弗里德曼想出了一种方法来确定需要多少个“符号”来证明树(3)是有限的。甚至符号的数量也非常大。它表示为 2↑1000,其中“↑”对应于一种递归指数函数。在这种情况下,它将是 2 的 2 次方 2 次方…一千倍。
在《数字迷》的第集中,诺丁汉大学的副教授托尼·帕迪拉提出了一个思想实验——假设完成每个符号需要一个普朗克时间,即 5.39 × 10^-44 秒,那么对于一个在宇宙大爆炸时开始证明的人来说,他/她能完成吗?
根据庞加莱递归定理,答案是否定的。该定理指出,在足够长但有限的时间后,某些系统将返回到非常接近其初始状态的状态。如果我们相信我们的宇宙的熵是有限的,那么宇宙最终会在证据实现之前很久重置自己。
简而言之,如果我们使用有限的算法,我们永远无法从物理上证明树(3)是有限的。为了实际证明,我们需要先进的技术,如超限算术和序数。
树(3)实际上来自于克鲁斯卡尔的树定理,它远远大于格雷厄姆的数。事实上,与 TREE(3)相比,Graham 的数实际上等于零。最让我吃惊的是从树(2)到树(3)的巨大跳跃。我只能敬畏地想知道树(4)和以上保存什么秘密!😰
结论
据我所知,数学是一种极其美丽的构造,不断挑战着人类的想象力。树(3)是我们永远无法理解的抽象概念之一,但数学告诉我们它是存在的!
本文灵感来源于以下视频。
区块链将如何颠覆数据科学:大数据中的 5 个区块链用例
原文:https://towardsdatascience.com/how-blockchain-will-disrupt-data-science-5-blockchain-use-cases-in-big-data-e2e254e3e0ab?source=collection_archive---------3-----------------------
区块链和大数据是最热门的新兴技术之一,有望彻底改变几个行业,从根本上改变企业和组织的运营方式。人们可能会认为这些技术是相互排斥的——每一种都形成了独特的路径,并且彼此独立地应用。
但那会离题。
区块链——就像数据科学一样——正在逐渐改变几个行业的运营方式。虽然数据科学侧重于利用数据进行适当的管理,但区块链通过维护分散的分类账来确保数据的可靠性。
问题是,这两个概念有没有相交的地方?
当这两种技术同时应用时,会有什么样的结果?
简单地说,区块链怎么能扰乱数据科学?
要回答这些问题,更好地理解区块链和数据科学是有帮助的。
Photo by Markus Spiske on Unsplash
什么是区块链?
区块链基本上是一个不可信的账本,记录经济交易,使其无法被操纵。这项技术的出现源于人们对比特币和加密货币的普遍兴趣,但后来发现它不仅适用于记录加密货币交易,还适用于记录任何有价值的东西。了解了这项新兴技术的能力,开发人员和技术爱好者已经开始为区块链设计一个又一个的用例。
对区块链开发者的高需求
在过去的几年里,对区块链开发者的需求激增,就像开发区块链不同应用的项目一样。来自 UpWork 等自由职业平台的报告显示,区块链技能仍然是最受欢迎的技能。类似地,法律研究等其他领域的专业人士如果拥有区块链技能,或者至少对该技术有所了解,据说会有很大优势。
什么是数据科学?
数据科学寻求从结构化和非结构化数据中提取知识和见解。该领域包括统计学、数据分析、机器学习和其他用于理解和分析使用数据的实际过程的高级方法。
在经济学术语中,数据经常被描述为新的石油,这也是包括著名的 GAFAs(谷歌、亚马逊、脸书和苹果)在内的领先企业控制着大量数据的原因。数据科学的一些常见应用见于互联网引擎协议、数字广告和推荐服务。数据分析是数据科学的一个关键方面,已经发现它与医疗保健行业跟踪患者治疗和设备流程相关;在旅游中,通过游戏来改善消费者体验;用于能源管理以及许多其他部门。
对数据科学家的高需求
对能够提供更多数据见解并帮助解决更多问题的数据科学家的需求似乎永无止境。当考虑大数据时,这一点更加明显,大数据是数据科学的一个高级方面,它处理传统数据处理方法无法处理的海量数据。
区块链和数据科学的关系
与区块链现在非常熟悉的金融科技、医疗保健和供应链等领域不同,这项技术在数据科学方面尚未得到广泛探索。对一些人来说,概念之间的关系如果不是不存在的话,也是不清楚的。
首先,区块链和数据科学都处理数据——数据科学分析数据以获得可操作的见解,而区块链记录并验证数据。两者都利用了为管理与各种数据段的交互而创建的算法。你很快就会注意到的一个常见主题是,“预测的数据科学;数据完整性的区块链。”
区块链对数据的影响
数据科学,就像任何技术进步一样,有其自身的挑战和限制,当解决这些挑战和限制时,将释放其全部能力。数据科学面临的一些主要挑战包括不可访问的数据、隐私问题和脏数据。
脏数据(或错误信息)的控制是区块链技术可以对数据科学领域产生不小积极影响的一个领域。根据 2017 年对 16,000 名数据专业人员的调查,包含重复或不正确的数据等脏数据被视为数据科学的最大挑战。通过分散共识算法和加密技术,区块链验证数据,使其几乎不可能被操纵,因为这将需要巨大的计算能力。
再次通过其分散系统,区块链技术确保数据的安全性和隐私性。大多数数据存储在中央服务器上,而这些服务器往往是网络攻击者的目标;几份关于黑客和安全漏洞的报告显示了威胁的程度。另一方面,区块链将数据的控制权恢复到生成数据的个人手中,使网络犯罪分子大规模访问和操纵数据成为一项艰巨的任务。
区块链如何帮助大数据?
Janexter 的 Maria Weinberger 说,如果数量大,区块链就是质量。这遵循了这样一种理解,即区块链专注于验证数据,而数据科学或大数据涉及从大量数据中做出预测。
区块链带来了一种全新的管理和操作数据的方式——不再是将所有数据集中在一起的集中方式,而是一种分散的方式,可以在单个设备的边缘对数据进行分析。区块链与其他先进技术相结合,如云解决方案、人工智能(AI)和物联网(IoT)。
此外,通过区块链技术生成的经过验证的数据是结构化的、完整的,而且像我们前面提到的那样是不可变的。区块链生成的数据成为大数据推动力的另一个重要领域是数据完整性,因为区块链通过其链接链确定了数据的来源。
大数据中的 5 个区块链用例
总体而言,区块链数据至少可以在五个方面帮助数据科学家。
- 确保信任(数据完整性)
区块链上记录的数据是可信的,因为它们必须经过验证过程,以确保其质量。它还规定了透明度,因为在区块链网络上进行的活动和交易可以被追踪。
去年,联想展示了区块链技术检测欺诈性文件和表格的使用案例。PC 巨头们使用区块链技术来验证用数字签名编码的物理文档。数字签名由计算机处理,文件的真实性通过区块链记录核实。
大多数情况下,当涉及数据块的来源和交互的详细信息存储在区块链上并在采取行动之前自动验证(或确认)时,数据完整性得到了保证。
- 防止恶意活动
因为区块链使用共识算法来验证交易,所以单个单元不可能对数据网络构成威胁。开始异常运行的节点(或单元)可以容易地被识别并从网络中删除。
因为网络是如此的分散,这使得一方几乎不可能产生足够的计算能力来改变验证标准并允许系统中不需要的数据。为了改变区块链规则,必须将大多数节点汇集在一起以创建共识。这对于一个糟糕的演员来说是不可能的。
- 做出预测(预测性分析)
区块链数据,就像其他类型的数据一样,可以通过分析来揭示对行为和趋势的宝贵见解,因此可以用来预测未来的结果。此外,区块链提供从个人或个人设备收集的结构化数据。
在预测分析中,数据科学家基于大量数据,以较高的准确度确定社会事件的结果,如与业务相关的客户偏好、客户终身价值、动态价格和流失率。然而,这不仅限于商业洞察力,因为几乎任何事件都可以通过正确的数据分析来预测,无论是社会情绪还是投资指标。
由于区块链的分布式特性和通过它获得的巨大计算能力,即使在较小的组织中,数据科学家也可以承担广泛的预测分析任务。这些数据科学家可以使用连接在区块链网络上的数千台计算机的计算能力,作为一种基于云的服务,来分析大规模的社会结果,否则这是不可能的。
- 实时数据分析
正如金融和支付系统所展示的那样,区块链有利于实时跨境交易。几家银行和金融科技创新者现在正在探索区块链,因为它提供快速——实际上是实时——的巨额结算,而不受地理障碍的影响。
同样,需要对大规模数据进行实时分析的组织可以借助支持区块链的系统来实现。借助区块链,银行和其他组织可以实时观察数据变化,从而快速做出决策,无论是阻止可疑交易还是跟踪异常活动。
- 管理数据共享
在这方面,从数据研究中获得的数据可以存储在区块链网络中。这样,项目团队就不会重复其他团队已经完成的数据分析,或者错误地重用已经使用过的数据。此外,区块链平台可以帮助数据科学家将他们的工作货币化,可能是通过交易平台上存储的分析结果。
结论
正如已经指出的那样,区块链正处于萌芽阶段,尽管由于该技术在短时间内得到的大肆宣传,它可能不会出现。人们可以预期,随着技术的成熟和围绕它的更多创新,将会发现和探索更多具体的用例——数据科学是将从中受益的一个领域。
也就是说,它在数据科学方面的影响已经引发了一些挑战,特别是在需要处理异常大量数据的大数据方面。一种担心是,在这方面申请区块链将非常昂贵。这是因为与传统方式相比,区块链上的数据存储非常昂贵。与每秒钟为大数据和其他数据分析任务收集的大量数据相比,块处理相对少量的数据。
区块链如何发展以解决这一问题并进而扰乱数据科学领域将特别有趣,因为正如我们所见,该技术具有改变我们管理和使用数据的巨大潜力。
商业智能与数据科学有何不同
原文:https://towardsdatascience.com/how-business-intelligence-is-different-from-data-science-f1673456b80c?source=collection_archive---------1-----------------------
我对数据科学与商业智能工作的看法
在我大学毕业之前,我已经非常热爱数据了。我着迷于如何利用数据来提高当前社会的效率。所以,我很确定,我将从事数据分析、清理或建模的工作。下面是我相信我为什么会爱上数据的一句名言。
数据真正推动了我们所做的一切。—杰夫·韦纳
数据无处不在,尤其是在我们的日常生活中。例如,当我们决定买哪种苹果时。我相信如果你是一个对价格敏感的人,你最终的决定会基于价格。然而,如果你是一个更追求质量的人,你会买一个从一个以生产苹果而闻名的国家进口的苹果。从这种情况,我们可以看到,我们在日常生活中无意识地根据数据做决定。
毕业后,我的第一份工作是接受商业情报。在那段时间里,我想也许商业智能和数据科学的工作没有太大的区别。
“他们最终都在使用数据来提供价值,对吗?”我告诉自己。
但是做了 3 个月的商务智能,我发现我错了!!!
为什么?
忍耐一下,你会找出原因的!
工作之旅:商业智能
在做了 10 个月的商业智能之后,这里有一些我想分享的经验。如果你仍然是一名本科生,或者刚刚毕业,或者仍然在考虑将你的工作生涯转向商业智能,我希望你在做出最终决定之前利用这些“过去的数据”。
在我开始之前,只是提供一些我的背景,我在 Shopee 工作,担任本地商业情报。因此,我只负责提供当地市场的报告。此外,我的主要职责不仅包括抓取大规模的网站来进行竞争对手分析,还包括建立机器学习模型来帮助公司节省运营成本。
从上面你注意到的,这个职位是关于商业的。每天,我都会收到来自其他内部团队的多个请求,要求我执行某些分析。我需要与他们沟通,给他们建议如何进行这种分析,这样就不会浪费时间。为了检索我需要的数据,我需要编写大量的 SQL 查询。
到目前为止,我想指出三点。
一定要预料到你的日常工作生活会被各种要求淹没,不管是可行的还是不可行的要求。不要对你的工作生活会被大量的临时请求所充斥而感到震惊。
此外,这个职位需要大量的沟通。如果你是一个只想关注商业情报技术部分的人,一定要问面试官更多关于你日常工作的细节,并且用技术问题轰炸他们。这至少可以确保你在接受工作之前能够了解环境。
除此之外,精通 SQL 更佳。无论有什么请求进来,在内部提取数据的唯一方法是通过 SQL 查询。
在我的工作生涯中,作为商业智能,报告占据了我大部分的时间。它们可以以不同的形式出现,每天、每周、每月、每季度甚至临时出现。因此,拥有像 VBA 或 Python 这样的技能将是非常有益的,这样你将能够自动化它们。
分享这个职位的更多技术部分包括网页抓取和建立一些机器学习模型。这两个组成部分在电子商务业务中也是必不可少的,一个原因是获得竞争优势,另一个原因是为公司降低成本。
对于网页抓取,从我的经历来看,最难的是维护。建立一个网络爬虫是简单的,但是确保你的网络爬虫不会被网站阻止是一个完全不同的故事。况且,构建机器学习模型,只是我商业智能工作生活中中不到一小块馅饼。
这是我想说的最后一点。这个职位对技术技能的要求很低,商业是最重要的方面。即使你不擅长科技,但如果你对商业感兴趣,那么这个职位非常适合你。
工作之旅:数据科学
在将我的职位转换为数据科学家之后,我可以说体验非常不同。我来和大家分享一下。
我的任务仍然基于内部要求,但以项目的形式。因此,我将有更多的时间来分析数据和建立模型。所以,你可能会认为项目更好,因为你有更多的时间来专注和创作最好的作品。然而,这并不完全正确。偶尔,你做了一半的项目会因为各种原因而停止,或者变得不那么重要,这是很正常的。
在我的商业智能工作生涯中,我在构建模型时面临的一个问题是资源。然而,这里有更多的资源让我尝试我的想法和想法。请记住,资源也是有条件的,你需要能够在有限的时间内完成高质量的工作。
数据科学必须自我提升。我将需要不断阅读最新的论文,以便能够跟踪这一领域的最新趋势。不仅如此,学习更多的技术知识、编码技能和编程语言,这样你就可以在必要的时候使用它们。
此外, UNIX 命令是数据科学的基本技能。为了能够 SSH 到服务器,使用服务器时的 vi 命令等是我每天在工作中使用的命令。然而,在商业智能中,这种技能可能是必需的,但不是必须的。
数据科学优先考虑代码效率。我需要确保我的代码是有效的,同时,检查服务器的资源是否足够,以便服务器能够处理它。将会有很多人共享服务器,因此就如何共享资源进行交流也很重要。
沟通技巧仍然很重要。让我们想象一下,如果你有一个绝妙的想法,或者你正在对模特的表演进行巨大的改进,但是你在向别人展示的时候不小心搞砸了。或者,当您与内部团队就设定项目需求进行沟通时,您可能无法清楚地表达您的观点。你会让自己的生活更加艰难,或者失去展示工作价值的机会。
了解各种机器学习模型的优劣。这是很重要的,你应该在选择尝试任何模型之前想到这一点。这样你就不会浪费时间去实现一个在特定任务中表现不佳的模型。
最后但同样重要的是,编码和查询语言是数据科学中最基本的两项技能。能够获得正确的数据并在短时间内尝试不同的模型是当前市场中寻求的技能之一。此外,拥有快速理解他人代码的技能也非常重要,因为您的项目将由您的同事移交。
最后的想法
非常感谢你一直读到最后。我很感激!然而,这些只是我对这两个工作的工作范围有多大不同的看法。我确信,在其他一些公司,分配给商业智能的任务可能与我上面描述的非常不同。
商业智能处理已知的未知,而
数据科学处理未知的未知——Maxim scher bak
我希望你现在能明白这两份工作有多么不同,这样你就能做出明智的决定。
关于作者
Low 魏宏是 Shopee 的数据科学家。他的经验更多地涉及抓取网站,创建数据管道,以及实施机器学习模型来解决业务问题。
他提供爬行服务,可以为你提供你需要的准确和干净的数据。你可以访问 这个网站 查看他的作品集,也可以联系他获取抓取服务。
你可以在 LinkedIn 和 Medium 上和他联系。
AI 如何拯救地球?
原文:https://towardsdatascience.com/how-can-ai-save-the-planet-7dfebc0f7f5b?source=collection_archive---------15-----------------------
人工智能(AI)在为健康和金融行业提供价值方面享有盛誉。
然而,它也有能力从我们自己和全球变暖中拯救我们的星球。在未来,我们可能会依赖人工智能来监测二氧化碳水平,实时计算我们的碳足迹,并确定自然灾害。目前有一些利用人工智能和大数据的环境、可持续发展项目正在进行,例如预防森林火灾和监控野生动物。
微软的 AI for Earth 正在拨款帮助解决环境问题。举一个简单的例子,雪豹信托基金会已经获得了微软的资助,使用人工智能来监控和计数野生雪豹。人工智能可以用来在几秒或几分钟内对数千张图像进行分类。而复制相同的大数据规模分类可能需要数百个“人工”小时。与人类不同,计算机不需要睡眠,它们不会因为喝了多少咖啡而表现不佳,也不会因为前一天晚上是否喝了太多啤酒,或者上班路上是否不顺心而表现不佳。人工智能每周 7 天、每天 24 小时都有同样的生产力。
人工智能在未来可以应用于成千上万影响环境的问题。例如,使用人工智能和美国宇航局的数据,研究人员能够识别模式并监测陆地表面的变化,如海洋面积和冰盖表面面积的减少,这可以用来确定未来的风险。人工智能还可以用来监测污染和其他导致气候变化的因素。
海洋数据联盟是一个使用人工智能和卫星图像来跟踪珊瑚漂白、海洋采矿和水污染以保持海洋清洁的组织。
环保组织切萨皮克保护协会开发了一种工具来预测、计划和准备未来的洪水。这是一张高分辨率地图,显示了从纽约到弗吉尼亚南部 100,000 平方英里的地面上的一切,特别是流入切萨皮克湾的区域。这张地图是由卫星图像和人工智能生成的,它可以显示小到 3 英尺见方的物体——这使它成为世界上最精确的洪水规划地图。
像这样训练大多数网络需要很长时间。在这种情况下,需要手动放大和缩小对象,以验证和修改自动结果。随着每一次训练迭代,网络从分类水路到分类树木、田地、道路和建筑物。在初始训练之后,这个地图可以用新数据刷新,这比最初的劳动密集型工作更容易,使其高度可扩展。这将为洪水规划者提供一种方法来监测土地使用的变化,并规划排水系统,在洪水灾害的情况下可以带走最多的水。将来,当新的发展可能威胁到排水系统时,这种地图可能能够自动发出警报,作为一种警告系统。
人工智能正在改善农业。通过收集数据和图像以及作物疾病的知识,农民们希望增加作物产量,减少水的需求和杀虫剂的使用。
人工智能可以用来保护海洋免受非法过度捕捞。卫星数据和船只运动数据被用于机器学习算法“全球捕鱼观察”,该算法可用于识别船只在哪里非法捕鱼。这是保护海洋生物和保护捕鱼区。
在未来,人工智能方法可能会为地球创建一个数字仪表板,让我们能够在全球范围内监控、建模、预测和管理环境系统。从监测森林砍伐,二氧化碳水平,海平面,野生动物运动,非法活动,污染,以及更好地预测自然灾害。
这种方法需要现在就开始,时间太短,资源在全球范围内变得太稀薄,为了实现环境收益,人工智能和数据在经验上是必要的,以实现我们星球需要的这些变化。为了实现这一目标,研究机构、公司、行业、政府和慈善机构之间的全球合作必须从我们星球的最佳利益和未来的生活质量出发。
可能性是无穷的,数据、人工智能和人类可以共同努力,创建这些信息丰富的网络,以保护地球,并将其从全球变暖的边缘带回来。
Airbnb 主机如何提高在 Airbnb 上的体验?
原文:https://towardsdatascience.com/how-can-airbnb-hosts-improve-their-experience-on-airbnb-dbc34059ae3c?source=collection_archive---------22-----------------------
对 Airbnb 在夏威夷的数据进行探索性分析,以找到主机可以提高入住率和改善整体体验的方法
Credits to Abigail Lynn
介绍
2007 年,Airbnb 的创始人布莱恩·切斯基(Brian Chesky)和乔·格比亚(Joe Gebbia)第一次在 airbedandbreakfast.com 接待客人时,Airbnb 是一家小型托管服务公司。从那以后,Airbnb 呈指数级增长,在全球 10 万多个城市有超过 600 万个房源。自诞生以来,Airbnb 已经成为酒店行业的强有力竞争对手。事实上,Airbnb 的估值在 2016 年超过了每一家主要的连锁酒店。(来源:图集)
Airbnb 作为一家公司的成功取决于它独特而热情的主机和房源。令人惊叹的主机和列表让 Airbnb 发展到今天的样子,让旅行者在世界各地有更多有趣、亲密和个性化的访问。因此,帮助他们的东道主取得成功最符合 Airbnb 的利益。以下是对房东的 5 条建议,以改善他们在 Airbnb 上的体验和房源。所有的推荐都是基于 Airbnb 的夏威夷数据中的。
1.包容各民族!
“Airbnb 的存在是为了创造一个任何人都可以属于任何地方的世界,提供当地、真实、多样和可持续的健康旅行。”(来源:Airbnb) 接受这一价值将允许主办方提高其入住率,原因如下。
从夏威夷商业、经济发展和旅游部收集的数据中,我们可以观察到游客来自哪些国家。从上图中,我们可以观察到大多数游客是国内的。然而,应该注意到日本和加拿大游客的数量,每月有超过 100,000 名日本游客和大约 50,000 名加拿大游客访问夏威夷。
由于大量国际游客涌入夏威夷,如果主持人用多种语言提供细节和说明,他们的列表将吸引更广泛的市场。包容每一个人不仅能提高入住率,也是认识来自世界各地的客人的宝贵经历。
2.定价应该随着需求而变化
酒店业是动态的,价格和需求不断波动。每个月,主机应该评估和考虑他们的竞争对手的价格,基于当月游客数量的列表需求,以及他们的列表在搜索排名中的位置。
2018 年夏威夷每月游客数量
9 月,游客人数比平均数字下降了约 10 万人。游客数量的下降在统计上并不显著。但是,有 87.7%的几率,9 月的游客数量低于夏威夷的平均游客数量。
因此,东道主应该降低价格,以满足对房源的较低需求,因为价格是客人搜索房源甚至酒店的一个重要因素。因此,通过评估市场趋势并相应地改变价格,主机可以在不断变化的市场中保持竞争力。
3.即时预订不是必须的,但推荐使用
主持人不一定要开启即时可预订功能,尽管如此,还是推荐这个功能。正如我们在图 2 中看到的,夏威夷不能立即预订的列表被更频繁地占用。但是,需要注意的是,分析的数据仅代表夏威夷,这是一个具有特定特征的热门旅游目的地。每个城市和环境不同,预订的原因也不同。这一建议可能不适用于所有情况。例如,如果列表位于与商务旅行相关的区域,如纽约,则即时预订功能可能非常有益。此外,Airbnb 的搜索算法通过即时预订功能提高了房源的排名。
然而,如果列表位于旅游目的地,例如夏威夷,主人可能不需要特意使他们的列表立即可预订。Airbnb 表示,在其他预订体验因素上表现良好的房源在搜索排名中也会表现良好。主人的安全和舒适应该是第一位的,有时间批准他们的客人可能更可取。
图二。
4.不要给自己太多压力去成为超级主持人
Airbnb 声明,为了成为超级房东,你必须:
- 完成至少 10 次旅行或 3 次预订,总计至少 100 晚
- 保持 50%或更高的审核率
- 回复率达到 90%或更高
- 0 次取消,但属于某个 poly 的情况除外
- 维持 4.8 的综合评分。
超级房东对他们的列表充满热情,并投入大量精力来改善客人的体验。事实上,夏威夷的 superhosts 在 2018 年的平均回复率为 100%。
尽管成为超级主持人需要很大的承诺,超级主持人的称号对主持人的入住率影响很小。对于夏威夷的房源,超级寄宿者和普通寄宿者之间只有大约 25 天的入住时间差异。
此外,Airbnb 表示,超级主机的称号不会增加房源。事实上,正是这些因素让你赢得了超级主播的地位,提高了你的搜索排名。这里有一篇 Airbnb 的文章,提供了更多关于 Airbnb 搜索算法的信息。(链接)
5.拍出很棒的照片!
拍出很棒的照片可以说是任何 Airbnb 最重要的因素。一张好照片是由明亮的灯光和构图要素组成的。建议主持人在白天拍摄照片,所有的灯都开着。主持人还应该考虑三分法,并有视觉队列来保持眼球运动。考虑右边的照片,照片遵循三分法,地板上的瓷砖和台面代表每三分之一。此外,桌子的边缘让视线移向露台。这里有一篇 Airbnb 提供的文章,强调了明星房源的 5 个拍照技巧 (Airbnb 博客)。
在 Airbnb 上,大多数客人通过查看照片来决定他们选择的房源。甚至 Airbnb 也表示,主持人的收入可能会增加 40%,预订量增加 24%,仅通过专业拍摄照片,主持人就可以收取高达 26%的费用。
因此,请专业摄影师拍摄房源照片将是一项巨大的投资。
Airbnb 认识到这些图像的重要性。事实上,他们有一个网站,可以为你找到你所在地区的专业摄影师。 (Airbnb Photography) 使用他们网站的额外好处是,雇佣摄影师的费用将从主办方的下一笔支出中扣除。
如果主持人决定选择这条路线,他们将有每个房间的 2 至 3 张照片。在这里,主持人可以选择他们认为最成功的照片。我还创建了一个机器学习算法,它查看了夏威夷成功和不太成功的 100 张不同的图片。该算法将通过查看图像来预测上市是否会成功。(链接)该算法仍处于非常早期的原型阶段,因此,它的输出应该持保留态度。
以下是机器学习算法预测的 10 个例子。通过机器学习算法,我发现有海景的图片和考虑构图的照片经常被预测为更成功。我注意到夏威夷的多个列表中包含了遮挡房屋视线的树木图片,比如第一排和第二排的第三张照片。这些上市都被预测不会成功。因此,我会建议主人在视线清晰的地方给他们的房子拍照。
总之,这里有一些方法可以改善主人在 Airbnb 上的体验。以上建议完全基于夏威夷的数据。虽然我很想通过 A/B 测试进一步分析价格变化和包容性的影响,但我希望这些建议能够改善 Airbnb 的入住率和体验。 Inside Airbnb 收集了其他主要城市的数据,我将继续探索这些建议在不同城市如何转化。
对于这些建议的更深入的分析,探索性的数据分析,以及机器学习算法的源代码,请随时查看我的网站 。
新手如何打造一个很棒的仪表盘?
原文:https://towardsdatascience.com/how-can-beginners-create-a-great-dashboard-cf48c0f68cd5?source=collection_archive---------12-----------------------
在当前大数据的趋势下,数据可视化已经成为大家推崇的交互展示方式。仪表板广泛用于显示企业的业务绩效。如果能早点了解和掌握这项技术,相信对我们的职业生涯会有很大的帮助。
那么如何才能打造一个好的仪表盘呢,尤其是对于新手来说?
下图是 2012 年仪表板平面设计大赛中 Stephen Few 列举的优秀仪表板的特点。
根据以上评分标准,你的仪表盘设计能达到多少分?
如果您想要 dashboard 的完美呈现,您需要技术人员、UI 设计人员和业务人员来协调工作。但是对于数据可视化的新手来说,我们也可以用合适的数据可视化工具自己制作很酷的仪表板。如果你们中的一些人读过我在 Medium 上的帖子,你可能会发现我写了许多关于数据可视化和仪表板的指南。上次分享了一个教程,教你如何制作销售仪表盘。有读者告诉我,仪表盘制作教程对初学者来说有点难,因为那个销售仪表盘比较高级。
因此,今天我将给出一个更详细的教程,为初学者创建一个伟大的仪表板。我会把每一步都写下来,我敢打赌没有人的教程比我的更全面。
现在,让我们开始吧!
1.效果显示
这次我计划创建一个简单的销售人员绩效仪表板。上图是最终效果的演示。我们可以查看总销售额,每个销售人员的销售排名,以及销售人员的订单排名。在这个仪表板中,我还将实现图表的交互功能,如下所示。也就是说,观众可以点击图表了解更多信息。
2.准备数据可视化工具
这里我用来设计仪表盘的可视化工具是 FineReport 。其界面类似于 Excel。用户可以通过简单的拖放操作设计出色的仪表板。新手入门很容易。而且它的个人版是完全免费的。可以直接从官网 下载 。
工具的选择影响数据可视化的最终结果。用户可以根据不同的需求和喜好选择最适合自己的数据可视化工具。如果你在寻找更有用的工具,可以参考这篇文章2019你不能错过的 9 个数据可视化工具。
3.设置仪表板主体
下载 FineReport 后,打开设计器界面。点击文件>新建仪表板创建新的仪表板模板:
在 widget 列表中,点击主体,将布局类型设置为自适应布局,将组件比例设置为双向自适应。您还可以使用颜色来自定义仪表板背景:
4.拖动和排列组件
可以通过拖放操作将组件添加到主体中并进行排列。使用自适应布局,每个组件的大小和位置将自动相对于其他组件进行更改。
让我们拖动折线图、饼图和柱形图来显示数据,并添加一个按钮作为仪表板标题:
5.准备数据
FineReport 中的数据集专门用于存储通过数据连接从数据库中检索的数据。数据集是 2D 数据表,您可以在 designer 中直接查看字段和值。
在左下方的面板中,有一个模板数据集窗口,列出了所有可用的数据集。单击按钮+添加新数据集。
然后我们可以编写 SQL 语句。
这里,我们使用 SQL 语句创建 3 个数据集,从不同的角度显示销售业绩。(在这个仪表板中,我们使用 FineReport 的内置数据集。 FineReport 还支持从各种数据库导入数据。)
数据集按员工排序按降序汇总了每个员工的年度订单总数:
数据集按雇员的销售额按降序总结了每个雇员的年总销售额:
数据集总销售额汇总了公司的年度总销售额:
6.编辑组件
6.1 折线图—趋势
折线图图表很好地代表了数据背后的趋势,例如,年销售额的变化趋势。双击折线图开始编辑。
在数据选项卡中,使用数据集总销售额设置数据源。使用年定义类别,使用总销售额定义系列:
- 折线图中的类别可以被视为沿 x 轴的每个标签。它决定了数据分组的方式。
- 系列对应一行。如果有其他绩效指标,如总成本,可以添加该字段来创建另一个系列。
切换到风格>系列,从左到右、从上到下依次点击每个彩色方块,定制每个系列的颜色。添加标记来表示线条上的数据点:
将图表标题定义为年总销售额:
因为只有一个系列,并且标题已经暗示了绩效指标,所以可以禁用图例:
6.2 饼图—比例
饼状图可以有效地展示构成和相应的比例。您可以用它来显示每个销售人员对年度订单的贡献。
使用员工的订单定义数据集。用年作为类别, EMPNAME 作为系列名称, total_orders 作为值。如果显示所有员工的数据,饼图将被分成大量的切片,但小切片的意义不如大切片。因此,您可以在数据过滤器中保留前 5 个订单贡献者,并将其他订单贡献者合并为一个切片:
- 类别对应于一个单独的饼图,因此每年将生成一个饼图。
- 系列对应于饼图中的每个切片,因此数据是基于系列进行筛选的。
在样式>系列中,为 6 系列定制颜色。将内半径设置为 70% 使饼状图看起来像一个圆环。
使用饼图外部的标签以百分比表示每个切片的比例:
启用图例来指示每个系列的名称,即每个员工的姓名:
- 系列名称使用图例而不是标签显示,因为不同年份有多个饼图,但所有饼图都共享相同的系列名称。
将标题设置为按顺序排序。
6.3 柱形图—对比
列的高度是一种直观的比较度量。您可以使用柱形图来可视化每个销售人员的年销售额,以便进行人与人之间以及年与年之间的比较。
使用员工的销售额定义数据集。使用 EMPNAME 作为类别,使用 year 作为系列名称,使用 total_sales 作为值。考虑到员工人数众多,请过滤数据,仅显示前 20 名卖家:
x 轴可能太短而无法显示所有类别名称,因此您可以设置轴标签的旋转以完全显示它们:
在底部显示图例,表示每个系列所代表的年份,自定义每个系列的颜色,并将标题定义为按销售额排名。
6.4 按钮—标题
在按钮名称后输入仪表盘标题,设置背景为透明,编辑字体:
7.预览图表并与之互动
点击预览查看效果,并可与图表互动:
销售人员绩效仪表板已经完成。希望这篇教程对你有帮助。如果你想做一个更高级的仪表盘,可以看看这篇文章: 制作销售仪表盘的一步一步指南 。
你可能也会对… 感兴趣
什么是大屏幕的数据可视化,如何实现?
新手如何设计酷炫的数据可视化?
业务仪表盘初学者指南
数据可视化中前 16 种图表类型
不写代码如何创建热图?
数据可视化十大地图类型
4 个参数查询功能让您的数据可视化交互
新手如何设计酷炫的数据可视化?
原文:https://towardsdatascience.com/how-can-beginners-design-cool-data-visualizations-d413ee288671?source=collection_archive---------9-----------------------
1.我们为什么要可视化数据?
在工作中,无论身处哪个场景,都会接触到数据,需要表达出来。数据可视化的作用是通过结合图表和数据来更好地传达业务信息。就目前而言,大多数公司正在逐步从传统的流程管理过渡到基于数据的管理。数据可视化可以帮助分析师更全面地了解数据,并获得更具商业价值的见解。
2.什么是数据可视化?
数据可视化是数据分析后的数据展示,包括图表设计、动态组合、二维图表、三维图表、联动、钻取、大屏幕显示等。
数据可视化的功能主要体现在两个方面:一是数据展示,二是业务分析。数据显示很好理解。它是将已知的数据或数据分析结果通过直观的图表显示出来。最后呈现的是报表、仪表盘,甚至是现在流行的大屏幕。数据展示的方式越来越被接受和欢迎。业务分析是在看到图表、仪表板和大屏幕后,将要分析的数据和指标有效地转换为具有业务价值的见解,使他们能够基于事实支持决策。
Dashboard of FineReport
3.如何实现可靠的数据可视化?
数据可视化最终还是要回归到“读者”身上。它通过传递方向性数据来帮助“读者”识别问题并做出正确的决策。所以数据的价值不在于它被看到,而在于它被看到后引发的思考和行动。
在这里,企业中的数据不同于普通的应用数据。大部分都没有通过算法程序直接对用户产生价值。而是通过合理的展示对数据进行分析,然后管理者进行思考和判断,最后采取行动,让数据发挥价值。
3.1 谁是可视化的受益者?
无论你是做传统的报告、PPT 还是做别的,你首先要搞清楚这是给谁看的,他需要知道什么,他关心什么指标,他会如何在决策过程中使用你呈现的信息和数据。一句话,就是搞清楚数据分析工作的目标:这个报告是用来干什么的?后续数据分析工作和分析报告中的所有内容都将与这一目标主题密切相关。
3.2 梳理指标体系
数据可视化就是将繁杂的数据整理成指标,围绕财务、销售、供应链、生产等各个业务形成指标体系。,最后通过可视化的方法展示出来,比如收益率、效率效益等。
可以说,数据分析工作的成功一般是建立在指标的基础上的。这项工作需要数据中心的人员或者 BI 组的人员深入到业务中去调查需求,分析数据,建仓库…
3.3 将数据可视化与业务解决方案相结合
如果数据可视化的目的是呈现解决特定的、可测量的、可实施的、相关的和基于时间的问题的数据,那么在生产过程和报告过程中添加这些问题。
规划数据可视化解决方案时,请确保这是为了解决用户特定的问题。所以你的解决方案不仅要能够很好地解释数据分析的结论、信息和知识。但更重要的是,管理者可以沿着你规划的视觉路径快速找到并发现决策。
例子
当公司业绩没有达到目标时,可视化方案的设计路径可以是这样的。
第一步:从整体运营的角度,你需要明确影响业绩的关键因素。
查看与销售订单、客户价格、客户数量、用户活动、产品产量、质量、成本、交付等关键因素相对应的 KPI 的绩效。这些因素将成为驱动因素,直接影响业绩。这些驱动数据的可视化是找到解决方案的基础。
第二步:你需要深究关键因素,找出是哪些因素导致了业绩的失败。
例如,您可以使用比较分析来观察 KPI 上所有关键因素在某一段时间内的表现。针对具体问题,跟踪当前的行动计划是什么,是否调整进度,并探索提高绩效的方法。
4.数据可视化工具
数据可视化有很多工具。像 ECharts 、 Highcharts 、 D3.js 这样的图表插件,功能非常强大。还有类似 Excel 、 Cognos 、 Tableau 、 FineReport 等工具。对于日常报表制作,这类工具更容易学习和使用,更偏向于业务分析。它们涵盖了数据收集、分析、管理、挖掘和可视化的一组复杂的数据处理过程。
我习惯使用零编码报告工具 FineReport ,它允许您通过简单的拖放操作实现很酷的可视化。我过去常常花两个小时制图或绘图。有了 FineReport,我可以在十分钟内完成一个仪表盘。对数据分析初学者真的很友好。
Drag-and-drop Operation of FineReport
这里给大家展示一些我用 FineReport 做的仪表盘,让大家对数据可视化有更清晰的认识。
实时仪表板
3D 动态效果
销售分析
如果您想快速开始数据可视化,我建议您从 FineReport 开始。您可以到官网免费下载并使用。这里是教程。
原为 2019 年 5 月 31 日在http://www.finereport.com发布。
我如何为数据科学增值?
原文:https://towardsdatascience.com/how-can-i-add-value-to-data-science-97d6eebbaa84?source=collection_archive---------14-----------------------
与查尔斯·伯克合著的帖子
Photo by rawpixel on Unsplash
你想成为一名数据科学家,但如何成为一名数据科学家呢?你如何为这个不断扩张的领域增加价值?这个问题的灵感来自于我在一个数据科学班的经历,在那里我们试图利用数据开发“有意义的”指标。数据科学的一个流行刻板印象可能表明,技术技能——使您能够执行复杂的分析和创建美丽的可视化——在增加价值时是最重要的。但这在多大程度上是真的呢?技术能力是否限制了一个人处理数据的能力?我把我的经验分享给你。
我对此的看法是,打起精神来,有争议的和逆向思维的:技术技能会阻碍你增加价值的能力。为了让你相信这一点,我将告诉你为什么这个问题,“我怎样才能增加价值?”可能不是该问的问题;技术能力如何可能对数据科学家不利;不管背景如何,你都可以成功。我也将分享我认为最重要的技能。
为什么问题框架不好
首先,对我来说,“我如何为数据科学增加价值”这个问题的框架很差。问这个问题的一个更好的方式可能是:我可以在哪里贡献我的个人专长或见解?
“添加”这个词下意识地引导我相信,我真的必须通过我的分析来“添加”一些东西,以创造有意义的价值。然而,在数据的世界里,这不一定是真的。在数据世界(我称之为 Datatopia)中,数据科学家知道简单地清理数据是任何有意义的分析的开始。根据 CrowdFlower 的一项调查,数据科学家花费大约 60%的时间来组织和清理数据。原因很简单:如果你不能理解数据,弄清楚什么是相关的,什么是不相关的,那么随后进行的分析就没有任何意义。
有趣的是,这一阶段的分析往往需要你“减去”信息,而不是“加上”。例子包括过滤掉不必要的变量和观察值,找出重复和不一致的地方,决定关注什么。虽然这听起来微不足道,但这个简单的步骤在数据分析过程中有着巨大的优势。猜猜看,任何目光敏锐、对组织有深刻了解的人都能在最基本的层面上完成这一步。我的许多没有技术能力的同学只是通过加强敏锐的观察者来帮助清理和组织数据。
因此,在我看来,认为一个人必须添加一些东西(可视化或数据集或算法)来创造价值是固有错误的。您可以继续“减法”(正确的事情),并仍然在 Datatopia 中生成许多有意义的价值。
技术优势的劣势
虽然技术技能可以帮助你建立令人瞠目结舌的数据分析和可视化,但它可能会阻碍你跳出框框思考的能力。技术知识让你认识到相关工具和技术的可能性,并传授你实现同样目标的技能。尽管有了这些新发现的知识,你可能会看到无穷无尽的可能性,但你头脑中自由流动的想法已经在某种程度上被引导着沿着特定的路线、工具或方法思考。你的大脑开始把想法翻译成伪代码(这肯定很重要),但是把你的注意力从构思转移到想法如何变成现实。
在 Datatopia 中,创造力与将想法转化为现实的技术技能一样重要。“疯狂”或“开箱即用”的想法带来了巨大的、前所未有的洞察力,这是 Datatopia 中推理的主要目的。因此,虽然技术知识给了一个人巨大的力量,但有时也会限制他提出“疯狂”想法的能力。一旦一个疯狂的想法形成,协作和在线搜索代码或工具来填补你的知识空白往往会让这个疯狂的想法以某种形式实现。
“跳出框框”思考的优势是使非技术人员成为 Datatopia 中的一项资产,这也是为什么每个人都可以为创造有意义的价值做出贡献,而不仅仅是清理创造新颖分析和视觉效果的想法。
每个人都可以投稿
这些只是每个人如何为该过程做出贡献的几个例子。需要意识到的一件重要事情是,数据科学是一个跨学科领域,因此您可以成为具有不同关注点和专业知识的数据科学家。不要成为数据势利者。重申一下,如果你正在阅读这篇文章,你可能会很擅长使用 Python 和 R 之类的编程语言来可视化数据集,但希望不久之后,你也可能会作为一个超级明星在收集、查找、清理或用数据讲故事方面阅读这篇文章。虽然成为一名跨所有领域平衡的数据科学家很好,但事实是你不必如此。但是,很快,这可能比你想象的要容易。
例如,即使是现在,对于非技术人员来说,也有广泛的可能性。最近几个自动化工具的兴起使得几乎任何以前使用过计算机(例如,用于电子邮件或文字处理)的人都能够使用直观的工具来处理和可视化数据。例如, Plot.ly 拖放构建器可以创建(几乎)与 Python 的散景库相同的交互式图表。技术能力之后剩下的不是一个数据科学家的定义因素?我上面提到的东西,你,还有你个人对数据的贡献。
技术技能仍然重要
我不想给人一个错误的印象,拥有技术技能在很大程度上定制东西并使工具满足你的需求总是有利的。如果你有,请…组队!作为 Datatopia 的热心公民,我们都知道每个人都可以做出贡献,我不能强调合作的重要性,这就是为什么我的第一个可视化作品是在与齐威的团队合作中制作的,关于 2018 年世界幸福报告。我还与林明伦、贾米·贾斯丁亚诺和耶奥·邵杰在同一个数据集上工作,但侧重点和目的不同。
除了填补专业知识的空白,这种合作还是一个很好的媒介,可以促进同行之间的学习,并从 Datatopia 中擅长自己工作的其他公民那里“学习”技能。
最关键的技能
所以你现在可能想知道:在 Datatopia 中最重要的技能是什么?是合作吗?技术技能?即使每个人都可以做出贡献,一个人必须承担最大的重量。你说得对,一项技能确实举足轻重,而且每个人都可以掌握。让你高兴的是,当你问自己“我怎样才能给数据科学增加价值”的时候,你已经在实践最重要的技能了!
等等,什么?
是啊!Datatopia 最关键的技能是提问。正确的问题将指导数据分析的整个过程:从你从哪里获得数据,到你如何处理它,以及你选择如何呈现它。你的第一个或下一个数据作业是简单的谷歌搜索。
了解了这一点,欢迎 Datatopia 的同胞们,欢迎数据科学家!
但是我们如何知道如何问正确的问题呢?为此,你需要阅读我的下一个故事:在数据科学中,什么是正确的问题?
Bayes 牧师如何帮助你发现你的竞选是否成功?
原文:https://towardsdatascience.com/how-can-i-tell-if-my-marketing-campaign-is-working-41cbf5c7dbc6?source=collection_archive---------8-----------------------
因果影响包中使用贝叶斯结构时间序列模型的因果推理简介
Photo by dylan nolte on Unsplash
如果你从事营销工作,有时你做的事情看起来有点像彩票。这可能不是你想向上级汇报的方式,但你有多大信心认为你的活动真的带来了收入的增长?
在这篇文章中,我们将简要介绍一种技术,这种技术可能会帮助你在这些陈述中用一些数字来支持你的信心:贝叶斯结构时间序列分析。
营销因果的结构时间序列分析
如果你的公司有很大的优惠——可能在一月份有 25%的折扣——你可能会有一些预算来进行市场推广活动。如果你不告诉别人,这笔交易有什么用?
交易运行,你在电台和付费搜索上花费预算,当然,你的收入增加了。但是你的营销活动起到了什么效果呢?仅仅因为交易成功,它就推动了销售或收入增长吗?
如果你在互联网上花点时间,你可能会熟悉虚假相关性:一个提醒我们相关性并不总是意味着因果关系的网站。仅仅因为我们付费搜索支出增加并不意味着我们观察到的收入增加。
如需了解商业与数据科学和分析结合的更多信息, 在 Twitter 上关注 Chris。
暂停活动和地理分割测试的替代方法
有时,简单地说“让我们把活动关掉几天,再打开,看看对收入的影响”并不总是可行的。如果收入看起来不错,营销支出在预算之内,那么决定进一步调查的人是勇敢的。
所以,如果你不能进行干预性实验和随机对照试验,有没有一种方法可以让你感觉到你的营销活动是否有效?是的,有,R 的因果影响包使它变得非常简单。
营销人员的时间序列分析
回归对于营销人员来说是一个非常有用的工具。它是如此有用,以至于我不仅在这里写了它,我也在这里写了它。和这里的。哦,还有这里也有;我相当确信我会再写一次。
回归是一个很好的工具:它非常容易执行,相对容易正确执行,并且它给你容易解释的结果,这意味着结果容易报告和行动。
间断时间序列分析(ITS)是简单回归的一个有用的扩展。从根本上说,它考察的是一项活动是否对你的兴趣变量有影响。随着时间的推移,输出变量将被跟踪,您可以将何时执行干预作为另一个变量进行编码。关于 ITS 的精彩介绍可以在这里找到。
然而,当涉及数据中的季节性趋势或其他混淆问题时,简单的虚拟变量可能不够,分析可能会变得越来越复杂,需要进一步转换以包括一些额外的趋势。输入贝叶斯结构时间序列。
时间序列干预的因果推断
这不是一篇旨在详细讨论贝叶斯结构时间序列(BSTS)建模的文章。如果你对幕后发生的事情感兴趣,你可以从这里开始,进入之前和之后的兔子洞。
现在,我们只需要把 BSTS 看作是一种观察历史时间序列并预测其未来进程的方法,让我们能够比较干预后实际发生了什么。
统计数据可能不是最直接的,但是 Kay Broderson 和 Alan Hauser 的相当神奇的因果影响包使它变得容易。你可以在这里阅读论文,或者直接阅读文档,但是希望这篇文章涵盖了原理,这样你就可以决定它是否适合你。
吸血鬼猎人巴菲对婴儿名字的因果影响
这很容易用一个例子来说明 PPC 活动对网站访问量的影响,或者增加一个新的营销渠道来增加收入,但是其中的乐趣在哪里呢?如果您已经读到这里,我假设您有自己的问题和数据要处理,那么我们需要做的就是用一个工作实例来介绍这个概念。
还有什么比用吸血鬼猎人巴菲更好的例子呢?
如果你到了一定的年龄(像我一样),巴菲将成为偶像。但是——我肯定每个人都在问 BTVS 的成功是否导致了在美国出生的女孩取名为 Anya 的增加?让我们用 BSTS 模型和因果推断来找出…
R babynames 包与因果推理
伴随本文的代码在 GitHub 上,所以我在这里省略细节,直接跳到感兴趣的部分。
使用 R 中的babynames
包,我们可以访问每年用特定名字注册的孩子的数量。我们感兴趣的是,在 1998 年这个角色出现后,叫做安雅的孩子的数量是如何变化的。让我们快速看一下:
看起来在 1980 年左右有一个高峰(没有与 Buffy 相关的双关语),但事情似乎真正开始于 90 年代末和 21 世纪。这第一个情节看起来很有说服力,但是这种模式与我们预期的如果《魔法奇兵》没有出现在我们的屏幕上会有很大的不同吗?
我们可以使用CausalImpact
包对此进行研究。为此,我们指定干预的开始和结束日期(我们将使用 Anya 推出的年份和系列结束的年份),并将其与一些不应受干预影响的名称进行比较。
在这种情况下,我们将使用十个随机选择的普通女孩的名字,它们不是《魔法奇兵》中的主角,但这是一个需要深思熟虑的决定。如果你想看看付费搜索支出对收入的影响,你会用什么作为对照?
虽然CausalImpact
函数不需要它们,但是它们很有用,所以值得花时间考虑一下你可以使用什么。你可能会认为有机会议可能会起作用,但你的有机点击量会随着每次点击费用的增加而增加吗?因为顾客会接触到你的品牌,然后再去搜索你的品牌。
在我们的例子中,我们已经构建了一个数据的xts
时间序列,Anya 作为第一列,是我们感兴趣的变量,下面的名称是算法将用于计算的名称。
使用这些数据,CausalImpact
将绘制一个输出图,用虚线(蓝色阴影的置信区间)显示每年被称为 Anya 的女孩的预测数量,用实线显示被称为 Anya 的婴儿的观察数量。干预期显示为垂直虚线。
在我们的例子中,我们可以看到实线不仅在虚线之上,而且在置信区间之上。在输出中调用 summary 会得到这样的结果:
> summary(buffy_causal)
Posterior inference {CausalImpact}Average Cumulative
Actual 489 2447
Prediction (s.d.) 285 (71) 1425 (354)
95% CI [143, 400] [716, 2002]
Absolute effect (s.d.) 204 (71) 1022 (354)
95% CI [89, 346] [445, 1731]
Relative effect (s.d.) 72% (25%) 72% (25%)
95% CI [31%, 121%] [31%, 121%]Posterior tail-area probability p: 0.00201
Posterior prob. of a causal effect: 99.79899%For more details, type: summary(impact, "report")
告诉我们,我们预计平均每年会有 285 个女孩叫安雅,但我们观察到了 489 个。我们的 95%置信区间上限是 400,因此,由于我们观察到的 489 高于 400,我们的 p 值为 0.00201,即被称为 Anya 的女孩人数增加是由于偶然。
很有帮助的是,CausalImpact
包含了一个对summary()
有用的论点,我们可以将它包含在给我们的书面报告中:
> summary(buffy_causal, "report")
Analysis report {CausalImpact}During the post-intervention period, the response variable had an average value of approx. 489.40\. By contrast, in the absence of an intervention, we would have expected an average response of 285.06\. The 95% interval of this counterfactual prediction is [143.25, 400.32]. Subtracting this prediction from the observed response yields an estimate of the causal effect the intervention had on the response variable. This effect is 204.34 with a 95% interval of [89.08, 346.15]. For a discussion of the significance of this effect, see below.Summing up the individual data points during the post-intervention period (which can only sometimes be meaningfully interpreted), the response variable had an overall value of 2.45K. By contrast, had the intervention not taken place, we would have expected a sum of 1.43K. The 95% interval of this prediction is [0.72K, 2.00K].The above results are given in terms of absolute numbers. In relative terms, the response variable showed an increase of +72%. The 95% interval of this percentage is [+31%, +121%].This means that the positive effect observed during the intervention period is statistically significant and unlikely to be due to random fluctuations. It should be noted, however, that the question of whether this increase also bears substantive significance can only be answered by comparing the absolute effect (204.34) to the original goal of the underlying intervention.The probability of obtaining this effect by chance is very small (Bayesian one-sided tail-area probability p = 0.002). This means the causal effect can be considered statistically significant.
用因果关系概括营销因果
当然,这篇文章是一个快速的 5 分钟介绍营销因果归因使用贝叶斯结构时间序列模型使用因果影响包 r。
R 包比我在这里讨论的要多得多,因此非常值得阅读本文和文档,以及在线阅读其他一些例子。
然而,对于许多想要了解他们是否把钱花在正确的地方的营销人员来说,这个软件包是一个很好的起点,不需要时间序列分析和贝叶斯统计的广泛知识。
事实上,我要说的是,使用它最具挑战性的方面不是数学、语法或函数参数的选择,而是选择不太可能受所研究的干预措施影响的适当时间序列。
此外,您可能同时在不同的媒体、不同的人口统计数据和不同的地理区域开展一系列营销活动。当然,这将使您的数据分析比这里给出的简单例子更复杂一些。然而,虽然创建适当的数据集可能会带来更多的挑战,但下面的分析可能非常简单。
作为一个数据驱动的营销人员,我非常感谢谷歌的人们开发了这个,现在维护这个非常有用的 R 包。如果您想更详细地探索这种技术和软件包,我建议阅读论文并使用这个软件包,使用像这样一个简单的数据集感受一下附加选项。这里还有大量的工作要做,我甚至还没有看柳树或奥兹…
关于如何在业务分析中快速使用数据科学工具的进一步介绍, 在 Twitter 上关注 Chris。
人们如何在工作中变得更加数据驱动?
原文:https://towardsdatascience.com/how-can-people-become-more-data-driven-in-their-work-6f38c1121f33?source=collection_archive---------14-----------------------
给希望在工作中采用更多数据驱动思维的非数据专业人士的建议
企业和整个世界产生数据的速度正在迅速超过个人装备自己处理数据的速度。
在许多努力的领域,人们已经明确认识到需要发展更好的处理数据的技能,并在决策中变得更加以数据为导向。提供高度智能和洞察力的数据越来越多地被忽视,而倾向于采用“直觉”方法来做出关键的商业决策。在之前的一篇文章中,我概述了在我们的工作人口中更好的普通数学技能的情况。
自从我强调了可用数据量和我们使用数据的能力之间的这种明显且不断增长的差距,我就收到了人们关于如何让在工作中变得更加数据驱动的许多问题。这些问题通常来自那些希望更熟练地处理数据的专业人士。他们通常来自那些注意到他们的许多人倾向于回避数据或在处理数据时感到紧张的领导者。
你不必是一个数学天才来处理数据,事实上你根本不需要会做任何数学或统计。但是你确实需要乐于查看数据,并意识到什么时候可能需要数学或统计学。如果你觉得自己没有资格做,你需要找一个能做数学和统计的人。
我举办了许多研讨会,帮助人们发展数据驱动的思维模式。在我的工作室里,我把它归结为三个组成部分,或者说人们在任何有数据的解决问题的情况下都应该采取的“精神行动”。他们来了。
1.DTA —不要相信任何没有使用数据的人
变得更加数据驱动的第一步也是最关键的一步是认识到假设和有数据支持的假设之间的差异。为了说明这一点,我经常给我的听众一个假设的情况,他们组织的一个高级成员提出了一个说法,例如:“搬到一个新的总部对我们的销售产生了负面影响”。
在一个数据驱动的组织中,只有当数据证明了它的表面有效性时,它才会被接受。有人做过分析,认为这个假设值得进一步研究吗?这种不经分析就被接受的说法并不罕见,甚至在某些环境中很常见。数据驱动的专业人员有足够的勇气指出这一点,并要求在数据中建立某种案例,以保证对索赔进行进一步的调查。
2.抛硬币测试
假设现在有数据显示有理由相信搬到新总部已经影响了销售。例如,有人已经表明,对于销售人员的样本人群来说,搬迁前三个月的人均销售额比搬迁后三个月的人均销售额高 10%。
在一些样本数据中看到某种模式或差异并不能证明这种模式或差异实际上普遍存在。我们都凭直觉知道这一点,为了说明这一点,我经常带一枚双头硬币去我的工作室。我逐步翻转硬币,没有告诉我的观众它是双头的,每次翻转我都问观众他们是否相信硬币是假的。我不可避免地看到,相信硬币是假的人的数量随着每一次翻转而增加,这证明人们对统计不确定性的想法有一种直观的感觉,并且他们相信某事变得确定的阈值是不同的。
与手头的问题相关,不确定性在于样本总体是否足够大,或者 10%的差异是否足够大,以自信地宣称该模式普遍存在。“在销售人员的抽样调查中,我们发现在我们搬迁总部之前,人均销售额更高”,这样说是没问题的。但是,如果没有合格人员进行适当的统计测试,你就不能说“在我们搬迁总部之前,人均销售额更高”。
3.马苏里拉奶酪测试
现在,让我们假设我们对数据进行了一些(相当简单的)统计测试,他们确定数据满足建立有意义的差异的要求,并且我们实际上可以对总部搬迁前后的销售差异做出一般的断言。我们现在可以说总部搬迁影响了销售吗?看一下这张图表:
是的,在美国,吃马苏里拉奶酪和获得土木工程博士学位之间几乎有着完美的关联。数据中到处都存在暗示性的模式和关系。更多信息请查看网站。
我们例子中的陈述非常具体——它表明搬到新总部导致销售额下降。仅仅证明销量下降并不足以证明这是由移动引起的。
要证明因果关系,还需要做更多的工作。例如,重要的是要消除这种差异不是由其他因素造成的。也许我们每年这个时候都会看到季节性销售下降?也许有一个新的竞争对手进入了市场?同样重要的是要看看是否有因果关系的机制,例如,销售人员平均来说见的客户越来越少,是因为搬迁使他们离他们更远了吗?
因此,变得更加数据驱动并不意味着你必须成为数学天才。作为第一步,当你在工作中听到假设时,试着围绕你提出的问题改变你的行为:
- 有没有支持数据?(差热分析)
- 它是否令人满意地证明了所声称的关系?(抛硬币测试)
- 有明确的因果关系吗?(马苏里拉奶酪测试)
变得更加数据驱动从根本上来说是一个行为改变的问题。拥有数学技能会有所帮助,并且随着时间的推移培养这些技能是个好主意。但是试着从这三个简单的步骤开始。
最初我是一名纯粹的数学家,后来我成为了一名心理计量学家和数据科学家。我热衷于将所有这些学科的严谨性应用到复杂的人的问题上。我也是一个编码极客和日本 RPG 的超级粉丝。在 LinkedIn 或Twitter上找我。
人工智能如何帮助应对气候变化?
原文:https://towardsdatascience.com/how-can-technology-and-artificial-intelligence-help-tackle-climate-change-b97db0ff4c95?source=collection_archive---------14-----------------------
人工智能和机器学习是一种使能技术,在减少能源生产、交通运输、食品生产、工业制造以及我们的家庭、办公室和城市的碳足迹方面发挥着关键作用。但这就足够了吗?光靠技术能拯救我们吗?
A resident cries as the Thomas Fire approaches the town of La Conchita, CA in Dec 2017. (https://bit.ly/37WD4K4/)
欧盟议会宣布气候紧急状态
2019 年 11 月 28 日,欧盟议会宣布全球气候和环境紧急状态。他们说所有的政治都是地方性的,而在全世界范围内,气候变化似乎正在得到报应。在旧金山周围的山上,破产的 PG&E 电力公司先发制人地切断了几天的家庭电力供应,因为它担心其老化的电气设备会与干燥的树木和植被相匹配。在欧洲,极端的洪水让古老的城镇沉浸在世界末日的景象中。在澳大利亚,由于熊熊的丛林大火产生的浓烟,很难辨认出标志性的悉尼歌剧院。在新德里,印度官员宣布进入公共卫生紧急状态,并分发了 500 万个口罩来应对有毒的空气污染。这一切都发生在过去的几个月里。
忽视气候变化问题变得越来越难。但技术和人工智能在解决这一问题方面发挥了什么作用?
气候变化技术和人工智能的组合方法
我们知道,我们需要一个技术开发和部署的组合方法来应对气候变化。这种投资组合可以跨越时间、风险和技术成熟度进行维度化。在近期,世界需要继续努力开发和安装可再生能源,如太阳能和风能发电。从中期来看,我们需要在开发高容量电池方面取得更大突破,以储存能量并为电动汽车提供动力。自动驾驶汽车和智能城市可以在减少碳排放方面发挥重要作用,但这项技术需要成熟,才能被信任用于我们的日常生活。从长远来看,我们需要对真正的转换能源进行基础研究,比如裂变核反应堆。社会需要考虑气候技术“登月”项目,这将需要大量的金融投资,但有可能解决问题的规模。在这个产品组合中,人工智能将成为所有这些技术的关键推动者。
技术创新的五个领域
正如 WEF 在 2017 年讨论的那样,将技术发展集中在我们社会的五个领域以应对气候变化至关重要:
1.电力 和 发电占所有温室气体排放量的 25%。持续并更多地关注风能和太阳能等现代可再生能源至关重要。下面的 WEF 图表显示,虽然现代可再生能源(绿色)自 1974 年以来显示出强劲的增长,但我们仍有很长的路要走。
从提高风能和太阳能的成本和效率,到关注海洋、地热和生物燃料能源,可再生能源领域还有很多研发工作要做。有机会扩大核能,并继续关注核聚变技术。然而,高成本问题和对安全的担忧减缓了核电的部署。
2.运输占全球相关二氧化碳排放量的 23%。公众着迷于电动汽车、公共汽车和卡车的好处,但要将这些车辆带到大众面前,需要解决两个主要问题— (1)降低电动汽车的价格,以及(2)增加电池的容量并减少充电时间。人们还关注替代燃料,如生物燃料,维珍大西洋航空公司(Virgin Atlantic airways)等公司声称,2018 年将进行世界上首次基于废物的生物燃料商业飞行。
The Beyond Meat Burger
3.食品及其供应链占全球排放量的 25%。当这个星球上有 70 亿人要吃饭时,这并不奇怪。农业已经看到大片森林被夷为平地,以支持放牧和种植喷洒化学物质以优化产量的牛饲料。技术投资包括对肉类替代品的关注,这些替代品使用先进的植物蛋白科学来复制肉类烹饪时复杂化学反应产生的独特鲜味。还有一些加入了甜菜根——甜菜——让汉堡“出血”不可能的汉堡和 Beyond Meat 是两家新公司,它们使用植物来获得类似肉类的味道——试试看,它们还不错,但仍然很贵,也不像我们想象的那么健康。根据最近密歇根大学的一份报告,一个植物汉堡产生的温室气体减少了 90%,能源减少了 46%,对水资源短缺的影响减少了 99%,对土地使用的影响减少了 93%。下一个前沿领域是实验室培育的肉类,牛肉、鸡肉或鲑鱼蛋白质在培养皿中培育。一直以来,人们都把重点放在技术上,以提高现有农业实践的生产率。
4.工业中的制造业占全球相关二氧化碳排放量的 30%。世界不断增加生产消费品和工业品的工厂,以满足日益富裕的中产阶级的需求。正在开发技术来帮助制造商提高生产率,减少能源消耗和有毒物质排放。尤其是碳捕获技术,被吹捧为捕获排放的一种方式。还有很长的路要走。
5.建筑 和 城市代表全球排放量的 20%。想想我们的家庭和办公室使用的所有照明、电力、供暖和制冷设备。我们如何转向更高效甚至零排放的供暖和制冷系统?谷歌在这方面发挥了作用,为家庭提供智能温度计,如 Nest,它可以学习我们的能源使用习惯。智能城市技术正在开发中。中国杭州的“城市大脑”项目致力于通过优化实时交通流量来减少交通排放。谷歌在多伦多的人行道实验室声称要重新想象整个城市。
人工智能用于应对气候变化的十个例子
人工智能是气候变化技术的关键推动者。虽然人工智能还没有得到很好的理解,媒体的叙述经常关注失业和道德偏见的负面后果,但人工智能将被编织到气候变化技术的结构中。
最新一波人工智能和机器学习专注于将算法应用于大量数据,以使系统更智能、性能更高。人工智能的最新化身——机器学习和深度神经网络——正在推动:
- 类固醇的测量和预测 —虽然数据科学和统计技术已被广泛用于气候科学,以帮助优化、分析、评估、分类和预测,但机器学习将这一点纳入了一个不同的联盟。工厂、供应链、人类可穿戴设备和手机中的传感器产生的数据在收集气候变化信息方面都发挥着关键作用。这些数据可以输入到更复杂的模型中,帮助我们更好地理解、定位和管理我们的气候行动。
- 视觉、听觉、阅读和理解等认知超能力。特别是,“视觉超能力”可以应用于各种重要的气候变化活动,例如查看和分析遥感数据以确定污染水平。
今天正在工作或正在工作的人工智能用例的十个例子:
- 建立更好的客户模型。人工智能正被美国国家海洋和大气管理局(National Oceanic and Atmospheric Administration)等机构用来更好地预测飓风等极端天气事件,并从收集的大量气候数据中获得新的见解。
- 增加对污染物的监测、测量和问责。人工智能正被用于自动分析来自物联网传感器和遥感数据的数据,以识别污染物,如地面臭氧、颗粒污染、一氧化碳、二氧化硫和二氧化氮。这在很难确定污染物数量和来源的偏远地区尤为重要。它不仅能提供更准确、更透明的污染状况,还有助于推动问责。
- 优化交通流量,打造智慧城市。人工智能正被用于测量和优化城市的交通流量。仅仅是通过更好的交通信号时机来优化交通流量,从而减少闯红灯的汽车数量,就能对碳排放产生重大影响。例如,中国的“优步”,滴滴正在利用深度学习解决交通拥堵和优化导航路线。在印度,麦肯锡公司报告称,智能垃圾桶正在测试中,这意味着如果垃圾桶未满 75%,垃圾车不会捡垃圾。
- 利用智能人工智能设备改善建筑能耗,这些设备可以根据实际需要测量、预测和控制供暖和制冷系统。例如,美国圣文森特医院通过为其供暖和空调系统实施预测能源控制系统,实现了 20%的节能。许多人引用了 DeepMind 使用强化学习来降低其母公司谷歌数据中心功耗超过 15% 的例子。结合智能人工智能电表和电器我们应该会看到我们的建筑用电量大幅减少。
- 推出自动驾驶卡车 —虽然大多数关于自动驾驶汽车的讨论都集中在自动驾驶汽车上,但最有可能在近期使用的是自动驾驶卡车。据估计,智能自动驾驶系统可以比人类操作员减少 15%的燃料消耗。同样,监管机构更有可能批准自动驾驶在主要公路上行驶,因为它们比在拥堵的城市街道上行驶的混乱和不可预测性更可预测,也更安全。
- 更好地匹配电力供应和需求在智能电网允许消费者、输电线路、变电站、变压器和供应商之间的网络通信。人工智能将是在这样一个复杂的网络中更好地预测和控制供需的关键。例如谷歌的 DeepMind 开发了一个深度神经网络系统,通过基于天气预报和历史涡轮机数据预测供应,将风力发电的价值提高了 20%。他们的模型建议如何提前一整天向电网做出最佳的每小时能量输送承诺。
- 通过更好的供需匹配,提高物流和供应链的效率。人工智能正越来越多地被用于理解复杂且日益国际化的供应链的需求水平。例如,德国电子商务公司 Otto预测 30 天内将出售何种产品的准确率高达 90%,推动了自动化采购,并减少了 200 多万个包装的年退货量。在另一个例子中,施耐德电气通过一个人工智能模型来预测获取原材料并将其产品发送到 240 个全球制造工厂和 110 个配送中心的最佳方式,从而显著减少了运输需求。
- 优化食品供应链,提高 农业 产量。这是人工智能已经产生影响的一个领域。从更好地预测餐馆的需求,到减少食物浪费,再到帮助发展中国家的农民诊断和治疗农作物,人工智能开始发挥作用。例如,微软已经与印度农民合作,通过机器学习建议何时是播种作物的最佳时间,使产量提高了 3%。
- 通过数字化、连接和分析端到端制造流程,提高制造效率。例如,许多全球制造商正在使用预测性人工智能建模来提高涡轮燃烧效率,减少生产线上的错误和能源浪费,并通过先进的机器人技术提高生产效率。
- 帮助消费者减少碳足迹——人工智能驱动的消费者应用正在帮助我们测量和预测我们的碳足迹水平。使用游戏机制,我们可以开始将我们的可持续发展足迹与其他人进行比较。这一点在安-凯瑟琳·拜尔(Ann-Catherine Beyer)最近的一部短片中得到了令人震惊的体现,她想象了一个世界,在这个世界中,我们所有人都会根据自己的行为及其对可持续发展的影响获得或失去“环境信用分”。
Ann-Cathrine Beyer, member of “Econtrol” film team; winner of Young Talent Award at 2019 “KI Science Film Festival.” http://www.zak.kit.edu/6427.php
对于人工智能和机器学习的所有好处,我们也需要意识到计算机使用大量的电力。一些人认为信息和通信技术贡献了全球能源使用的 8%。
仅有技术是不够的
我们知道,解决气候变化等系统性问题并不简单。还需要紧急和综合地关注:
- 消费模式— 到 2050 年,世界人口预计将从 70 亿增至 100 亿。至关重要的是,通过我们对饮食、旅行和生活方式的日常选择,提高对我们个人碳足迹的认识。但我们也需要认识到,个人责任的背景是,社会中有很大一部分人正在摆脱历史上的匮乏,进入有抱负的中产阶级生活方式。看看中国吧,那里的中产阶级现在比整个美国都多,公民正在用一些人可能会描述为故意放弃的方式进行消费。
- 多国联盟和监管 政策 —世界各国政府和组织需要共同努力,制定明确的目标和政策,比如 2015 年巴黎气候协议。但是还需要更多的东西。我们将需要更多关于污染、消费和能源使用的立法,这无疑会被视为侵犯个人选择、自由和自由市场。在一个日益两极分化的社会中,这项立法将很难实施,在这个社会中,财富不平等正在推动反对体制法令的民粹主义抬头。
- 金融 激励 —应对气候变化的成本以万亿计。尽管中国在 2018 年对清洁能源投资了 1000 亿美元,640 亿美元,但这只是所需的一小部分。鉴于金融体系通常关注季度增长和利润等短期结果,问题就变成了我们如何切实激励政府、企业和组织进行长期投资。影响力投资背后不断增长的势头有助于将资本流向那些将环境、社会和治理(ESG) 目标与财务回报联系起来的组织。在多边层面上,欧洲中央银行的新任行长克里斯蒂娜·拉加德正在引领一场全球运动,让环境成为货币政策制定的重要组成部分。2020 年达沃斯之前的世界经济论坛(WEF)刚刚呼吁“更好的资本主义模式”。他们倡导“利益相关者资本主义”,采用“共享价值创造”的新衡量标准,将 ESG 目标作为标准财务指标的补充。有势头。今年早些时候,美国最具影响力的商业游说团体美国商业圆桌会议(US Business Roundtable)出人意料而又令人钦佩地呼吁建立一种超越简单盈利指标的资本主义形式。
人工智能将与智能材料、自动驾驶汽车和物联网等其他第四次工业革命技术一起,成为应对气候变化的技术创新的主要推动者。它将实现更高效的发电、更智能的城市和建筑、零碳运输、增强的食品供应链以及更高效的碳中和制造。然而,技术本身是不够的。我们需要改变我们个人的消费模式,而不是仅仅依靠购买碳补偿来减轻我们的负罪感。政治和金融体系将受到挑战,但我们需要务实,知道人类和企业的欲望和行为将会缓慢改变——我们想要更大的房子,而企业想要它们的利润。希望我们能尽快行动。
多亏了苏塞克斯大学最近的小组讨论
这篇文章的灵感来自我最近在 2019 年 11 月 29 日在英国苏塞克斯大学参加的关于影响投资、技术和气候变化问题的小组讨论。小组成员包括摩根大通可持续金融部 EMEA 资本战略主管 Neha Coulon、苏塞克斯大学科学政策研究部(SPRU)主任 Jeremy Hall 教授、牛津大学空间金融负责人 Matthew McCarten 博士、可持续发展解决方案社会企业 Pathfinder 的创始和管理合伙人 Jessica van Thiel 以及苏塞克斯大学商学院三年级本科生 Alex Martial。非常感谢这个小组的主持人伊莎贝尔·菲舍尔。
有用的人工智能、技术和气候变化文章
我发现以下文章和资源很有用:
- 麦肯锡公司关于技术如何推动新的环境解决方案
- 世界经济论坛 5 项可以拯救我们免受气候变化影响的技术创新
- 比尔·盖茨在这是我们应对气候变化需要做的事情
- 大卫·罗尔尼克等人谈用机器学习解决气候变化
(见下文)
关于西蒙·格林曼
西蒙·格林曼是最佳人工智能实践的合伙人,这是一家人工智能管理咨询公司,帮助公司利用人工智能创造竞争优势。西蒙是世界经济论坛全球人工智能委员会的成员;一位 AI 专家在 Seedcamp 常驻;并担任伦敦哈佛商学院校友天使会的联合主席。他在欧洲和美国的数字化转型领域拥有 20 年的领导经验。他拥有计算机人工智能学位。请通过直接给他发电子邮件或联系,在 LinkedIn 或 Twitter 上找到他,或在媒体上关注他。
可持续发展#环境#气候变化#人工智能#机器学习#拯救环境
我们如何捕捉动态数据并将其可视化?
原文:https://towardsdatascience.com/how-can-we-capture-dynamic-data-and-visualize-it-6f27f265db0a?source=collection_archive---------19-----------------------
利用大动态数据提高生产力已经成为企业成功的关键因素。我们生活的数字世界正在不断产生不断增长的动态数据流。除了内部数据管理,在线获取公共数据和可视化数据也发挥着重要作用。
这篇文章将解释:
–为什么捕捉动态数据如此重要?
–动态数据如何有效推动业务增长?
–我们如何轻松访问动态数据?
–最后但同样重要的是,我们如何让动态数据变得高效?
1.为什么捕捉动态数据如此重要?
一般来说,通过持续监控动态数据流,您可以看得更清楚,行动更快。更具体地说,获取动态数据有助于:
1.1 加快数据驱动型决策
捕捉动态数据为您提供了有关市场新趋势和竞争对手的实时信息。将所有更新的信息放在手边,您可以大大减少因果之间的时间间隔。换句话说,您可以获得基于数据的洞察力,并更快、更容易地做出数据驱动的决策。
1.2 建立更强大的数据库
为了提高数据分析的质量 和决策的有效性,企业需要通过不断提取动态数据来建立一个全面的大容量数据库。
数据是一种时间敏感的资产。信息越老,收集起来越困难。随着信息量在规模和速度上每年翻倍,跟踪不断变化的数据以供进一步分析变得空前重要。
2.动态数据如何有效推动业务增长?
2.1 产品监控
产品信息,如定价、描述、顾客评论、图片,都可以在网上市场上找到,并不时更新。例如,发布前的市场调查可以通过在亚马逊上检索产品信息或者从易贝那里搜集价格来轻松进行。
提取动态信息还可以让您评估产品的竞争地位,并制定有效的定价和库存策略。这是一种监控市场中竞争对手行为的可靠而有效的方法。
2.2 客户体验管理
公司比以往任何时候都更加关注客户体验管理。
例如,提取亚马逊上某个产品的所有评论可以通过分析正面和负面反馈来帮助解读客户对该产品的感受。这有助于了解客户的需求,以及实时了解客户的满意度。
2.3 营销策略
动态数据分析让你知道过去哪种策略最有效,当前的营销策略是否有效,以及可以做哪些改进。提取动态数据使您能够实时评估营销策略的成功,并相应地做出精确调整。
3.如何才能轻松获取动态数据?
为了及时、连续地收集动态数据,传统的手工复制粘贴已经不再适用。在这种情况下,易于使用的网页抓取工具可能是最佳解决方案,具有以下优点:
3.1 免费编码
有了 web 抓取工具,像 Octoparse 你不需要事先有编程知识。从网上抓取动态数据对每个人和所有企业来说都很容易实现。此外,Octoparse 的一个新功能,称为任务模板,使每个人都可以在点击次数内捕捉数据。
3.2 适用于各种网站
不同的网站有不同的结构,所以即使是有经验的程序员,在写脚本之前也需要先研究网站的结构。但是一个强大的网络抓取工具可以用来快速简单地从不同的网站中提取信息,为你节省大量研究不同网站的时间。
3.3 计划提取
这就需要网页抓取工具支持云操作,而不是只在本地机器上运行。这样,scraper 可以根据您的首选计划自动运行以提取数据。强烈推荐八分云提取、,其中、支持根据您的需求随时随地抓取 web 数据。
4.如何才能让动态数据富有成效?
现在,我们可以快速高效地获取动态数据。为了最后的成功,我们还需要什么?
4.1 快速整合您的数据
很多时候,您的数据分散在不同的数据库中,集成数据变得非常耗时。这时候我们就需要一个像 FineReport 这样的软件,能够支持各种数据库,将多个数据源的数据组合起来,提取数据进行综合分析。
From FineReport
4.2 通过报告或仪表板可视化您的数据
数据可视化的重要性在于,它帮助人们更快地理解数据。图形和图表可以将看不见的信息转化为看得见的图形符号,直接清晰地表达出来,帮助你快速发现临界点。如果你想知道如何制作超酷的仪表板,你可以在这个博客 中探索更多制作销售仪表板的分步指南。
From FineReport
4.3 随时随地更新您的动态数据
记得数据是动态的吗?嗯,我们的仪表板或报告也应该是动态的,如果我们可以在任何地方查看它们的话。此外,如果我们有另一个数据源,并且我们需要将它更新到我们已经构建的仪表板或报告中,该怎么办?同样,您可以使用 FineReport 的数据输入功能来实现数据的实时更新。
From FineReport
最后的想法
如今,数据是推动业务发展的重要因素之一,有助于利用内部数据进行自我审计,并通过捕捉外部信息来跟踪行业趋势。借助数据捕获工具和数据可视化工具,您将对您的业务乃至整个行业有一个清晰的了解。
立即享受用数据推动业务发展的乐趣!
您可能也会对…感兴趣
2019 年 6 大数据分析工具
初学者财务报表分析指南
2019 年你不能错过的 9 款数据可视化工具
数据可视化中前 16 种图表类型
数据可视化排名前 10 的地图类型
用一个关于苹果的类比来理解聚类。
原文:https://towardsdatascience.com/how-can-you-pick-the-oranges-and-apples-separably-from-data-sets-using-r-8219b385e0d1?source=collection_archive---------25-----------------------
多元被定义为两个或更多的变量。这种形式的分析涉及两种算法,即聚类分析和降维。下面的文章将首先关注聚类分析。这种算法方法寻找数据中的自然聚类。一个集群被定义为一组位置相近或发生在一起的相似事物。
考虑一下这个类比。假设你有一盒不同颜色的苹果;红色、绿色和混合颜色。单独挑选每种颜色不仅耗费时间,而且很可能会出现人为错误。
然而,通过聚类分析,我们可以根据颜色对这些不同的苹果进行分类。有了这样的信息,人们可以收获诸如多少苹果属于哪种颜色、哪种颜色质量最好或哪种颜色质量最差的信息。
这种方法可能会应用于互联网上的各种算法,例如基于社交媒体的平台中的定向广告和推荐引擎。
对数据集中的不同变量进行分段或分类的第一步是使用一个称为降维的概念。这包括采用大量的变量,并将其减少到几个新的变量,最好地描述数据集。例如,对于每一个苹果,你可以测量平均质量、体积百分比或者用户能想到的任何东西。但是,如果所有这些变量高度相关,您可以将它们合并成一个新变量。
在这种情况下,如果你测量我们每个苹果的 100 个特征,仅仅通过观察数据很难理解我们苹果的分组。在这种情况下,聚类可以帮助您自动拉出这些组。
同样重要的是要注意,降维可以被认为是变量的减少。同样,如果我们有关于每个客户的 100 个变量,我们可以进行降维,以找到变量中的主要趋势。基于聚类变量而不是原始的 100 个批次,我们将更容易理解我们的苹果的模式。
在我们开始聚类之前,您可能希望删除或估计缺失的数据,并重新调整变量以进行比较。在此基础上,我们将探索几种聚类算法,人们可以使用这些算法来分析精心选择的数据集,因为并不是任何数据集都适合被聚类。
在本次演示中,我们将使用 R 中内置的 mtcars 数据集,其中包含汽车趋势道路测试信息。
我们首先从划分或分割聚类开始,这是一种根据相似程度将数据集中的观察值分成几组的技术。这些算法需要分析师具体确定要生成的聚类数。
图书馆需要:
factoextra 美化集群的可视化
#load data
data(“mtcars”)
sampleset <- mtcars
#remove any missing values
sampleset <- na.omit(sampleset)
#scale variables
sampleset <- scale(sampleset)
#ascertain the alternative number of clusters for k-means clustering
library(“factoextra”)
fviz_nbclust(sampleset,kmeans,method=”gap_stat”)
#compute and visualize k-means clustering
set.seed(123)
km.res <- kmeans(sampleset,3,nstart=25)
#visualize
library(“factoextra”)
fviz_cluster(km.res,data=sampleset,ellipse.type=”convex”,palette=”jco”,repel=TRUE,ggtheme=theme_minimal())
现在,您可以看到数据是如何根据相似性分为三类的。
在下一篇文章中,我们将探索另一种称为分层凝聚的聚类算法。
你如何使用聊天机器人来帮助你的生意?
原文:https://towardsdatascience.com/how-can-you-use-chatbots-to-help-your-business-8c7f56577504?source=collection_archive---------14-----------------------
人工智能(AI)在过去十年中取得了巨大的进步,这场 AI 革命中最有用的产品之一就是 AI 聊天机器人。它们有助于减少解决客户查询所需的时间,并减轻客户服务代理的负担。
根据 Gartner 的数据,到 2020 年,将近 25%的客户服务运营将使用聊天机器人。其中一个主要原因是品牌正在投资改善客户体验。多达 84%的组织预计将在 2017 年增加对客户体验技术的投资。聊天机器人市场预计到 2025 年也将达到12.5 亿美元。
现在我们知道了为什么聊天机器人会受到营销人员的欢迎,让我们更仔细地看看它们是什么。
什么是聊天机器人?
简单来说,聊天机器人是一个虚拟助手,通过短信与你的客户交流。你可以把它整合到你的网站、应用,甚至是即时通讯工具,比如 Facebook Messenger。
聊天机器人可以帮助你在没有任何人工干预的情况下更接近你的客户。当用户给聊天机器人发信息时,它们会自动行动。
虽然他们没有完全消除对人工客户服务代表的需求,但他们可以大大减少他们的工作量。
以下是人们更喜欢与聊天机器人互动的一些主要原因:
- 对许多人来说,与聊天机器人互动是一种娱乐。当人们无事可做时,他们也帮助人们消磨时间。
- 好奇心——聊天机器人对人们来说相当陌生,这激发了他们的好奇心。人们希望测试这些聊天机器人的能力,并了解它们对不同消息的反应。
- 社交因素 —它们有助于改善社交体验,也能推动你的业务转化。人们可以与聊天机器人交谈,而不用担心被评判,这对许多人来说是一种安慰。
- 生产力——每当人们需要帮助时,他们会很快得到,聊天机器人就是这样做的。
它们已经成为最近最大的自动化趋势之一。事实上,聊天机器人已经变得如此受欢迎,以至于 Facebook Messenger 在 2017 年超过了 10 万个聊天机器人。此外,大约 35%的消费者希望看到更多品牌使用聊天机器人。
现在你对它们的重要性有了一个概念,让我们来看看它们如何帮助你的企业在网上蓬勃发展。
聊天机器人如何帮助你的生意?
1.随时可用
当客户看到没有人在线帮助他们解决问题时,他们会感到沮丧。聊天机器人在这种情况下非常有用。他们可以全天候服务,随时解决客户的问题。
人们不喜欢等待很长时间来解决他们的问题。事实上,大约 37%的顾客希望他们的问题得到快速的回答。相反,你应该尝试尽早解决他们的问题,聊天机器人可以帮你做到这一点。这也许是为什么他们正在迅速取代其他形式的客户支持,如实时聊天和电话。
与人类不同,你可以让聊天机器人 24×7 工作来解决你的客户的查询。这有助于提高您的整体客户满意度。
精选的相关内容:
- 帮助你成功开展营销活动的 13 个最佳数字营销备忘单
2.省钱
当你有一个客户支持团队时,你需要为他们的服务每月支付薪水。如果没有聊天机器人,你需要大量的员工来快速有效地回应你的客户。随着业务的增长,这些费用只会越来越多。
聊天机器人可能需要大量的一次性投资,但它们有助于减少您的经常性支出,即使您的组织在增长。当您的客户有一些简单的疑问时,您不需要客户支持团队的任何干预。相反,聊天机器人将处理与他们的对话,并解决他们的问题。
这可以让您减少品牌所需的客户服务代理的数量。此外,您可以让他们只解决复杂的查询,而不是在简单的查询上浪费精力。
人员规模的缩减可以帮你省钱。
3.提高客户满意度
对于企业来说,提高客户满意度至关重要。说到客服人员,他们与客户的对话取决于他们的心情。如果他们心情好,他们可以很容易地解答顾客的疑问。然而,如果他们的情绪不对,他们可能无法给客户一个满意的体验。
另一方面,聊天机器人受到代码规则的约束,它们完全遵守这些规则。他们总是尽可能以最礼貌的方式对待顾客,不管顾客如何和他们说话。这有助于提高你的客户满意度。
此外,您可能有会说多种语言的客户。您的代理很难用不同的语言与您的客户交流。然而,聊天机器人可以很容易地做到这一点,没有任何错误。这也有助于改善与他们的交流。
4.更多营销渠道
聊天机器人不仅仅是帮助你改善客户服务的工具。你也可以用它们来推销你的品牌和产品。
例如,您可以使用它们向您的客户发送报价。这可能是一种更个性化的联系方式。
精选的相关内容:
- 13 本数字营销电子书将帮助您实现在线营销目标
以下是他们如何帮助你:
- 提高参与度 —通过个性化与客户的沟通,他们可以提高你的参与度。他们甚至可以帮助您的客户完成简单的任务,例如向他们展示购买历史。
- 扩大覆盖面 —你可以通过聊天机器人,尤其是社交媒体,接触到你的整个客户群。手动实现这一点是不可能的。
- 销售漏斗中的无缝指导 —与人类不同,聊天机器人不会让你的客户等待回应。这有助于销售漏斗各阶段之间的平稳过渡。通过这种方法,你也许可以提高你的转化率。
- 推送通知 —聊天机器人可以预测客户行为,这使它们成为非常方便的营销工具。您可以根据客户的操作向他们发送推送通知。这有助于你在正确的时间接触到正确的人,并有助于转化率优化。
通过这种方式,你可以用他们以更个性化的方式来推销你的品牌和产品。与被动营销相比,当信息在正确的时间到达你的受众时,它可以产生显著的影响。
事实上, 77%的消费者表示,与聊天机器人的积极对话让他们更频繁地购买品牌产品。
5.私人秘书
人们可以使用机器人作为个人助理来简化他们的任务。机器人可以向他们发送与他们正在寻找的主题相关的建议或提示。
例如,你可以从机器人那里获得旅游提示或时尚推荐。他们甚至可以很容易地为你点餐。
例如,万事达卡为 Facebook Messenger 开发了自己的聊天机器人。这个聊天机器人通过告诉他们每个月花了多少钱,并显示他们的交易,让他们的客户更容易办理银行业务。这使得银行业务对他们的客户来说极其简单。
图片经由万事达
同样,他们也为商家提供了解决方案,使得直接通过 Facebook Messenger 进行交易成为可能。现在,消费者可以直接从赛百味、FreshDirect 和芝士蛋糕工厂订购食物。
通过与聊天机器人的互动实现直接购买,你可以让购买漏斗变得非常短。这反过来可以增加你获得转化的机会。
精选的相关内容:
- 如何赢得 Twitch 影响者营销:综合指南
6.展示新产品和服务
通过聊天机器人,你可以向你的观众展示你的最新产品和服务。他们始终保持友好的语气,这让你可以轻松地宣布你的最新产品和服务。
这些通知形式最好的一点是,它们在本质上具有很强的针对性。您可以选择将哪些通知发送给谁。这可以让你的相关客户觉得自己很特别,你也不会激怒那些觉得产品或服务不相关的人。
现在你知道了聊天机器人如何帮助你的生意,让我们来看看你如何建立一个。
如何构建聊天机器人
1.定义你的目标
在你开始开发你的聊天机器人之前,你需要弄清楚你的最终目标是什么。清楚地列出聊天机器人将为你的品牌服务的功能。这将有助于给你设计它的方向。
2.决定频道
你需要决定使用哪种渠道与你的客户沟通。这可能是 Facebook Messenger、你的网站、应用程序,甚至是 WhatsApp。精心设计和优化的登录页面可以帮助你推动更多的转换。要设计出优秀的登陆页面,你可以使用最好的登陆页面软件
3.选择你的创作方法
有两种方法可以构建聊天机器人。首先是从头开始创建一个定制的聊天机器人。第二种更简单的创建聊天机器人的方式是使用现成的软件。
4.定制并启动
不管你的创建方法是什么,你都需要定制你的聊天机器人来满足你的需求。你应该开发一个回答客户问题的数据库,并描述聊天机器人必须采取的行动。最后,你应该测试一下聊天机器人,看看它是否运行良好。
精选的相关内容:
- 创业公司的 9 个最佳数字营销策略
- 大麻营销:如何在数字媒体上营销你的生意
最后的想法
聊天机器人可以让你的营销更加直接和个性化,从而帮助你扩大营销效果。您还可以在聊天机器人的帮助下,快速为客户提供解决方案,从而改善客户体验。此外,聊天机器人可以减少您的运营支出,甚至推动更多的转换。
本文发表在 谢恩巴克 的博客上。
关于作者
谢恩·巴克是内容解决方案和礼品公司的创始人兼首席执行官。你可以在推特、脸书、 LinkedIn 、 Instagram 上和他联系。
云计算能有多便宜?
原文:https://towardsdatascience.com/how-cheap-can-cloud-compute-be-bd815d39205d?source=collection_archive---------23-----------------------
Photo by Martijn Baudoin on Unsplash
如果你看一下许多云提供商的常规现收现付定价,你会发现它们的定价差异很大。三大巨头亚马逊、Azure 和谷歌都非常相似,与其他较小的云提供商相比有很大的差异。
为了尝试在云提供商之间进行同类比较,我使用了一种机器配置,所有被考虑的云提供商都可以使用他们的在线费率卡来提供。即 4 个 CPU 内核和 16GB RAM。显然,不同云提供商的配置之间会有一些性能差异,但这一细节将有待于未来的调查。我试图尽可能多地包括云提供商,以给出一个好的价格和选项的横截面,但这绝不是一个详尽的列表。
云提供商
- Amazon EC2 —最初的大规模云提供商,在全球许多地区的多个数据中心提供服务。使用 m5.xlarge 配置进行比较。
- 微软 Azure —微软的云服务,对云市场来说相对较新,但有大量的区域和数据中心。使用 D4 v3 配置进行比较。
- Brightbox —一家总部位于英国的云提供商,拥有两个位于英国的数据中心。使用 RAM 优化配置进行比较。
- Cloudsigma —一家在全球拥有多个数据中心的瑞士云提供商。使用美国数据中心的自定义实例进行比较。
- CloudWatt —一家法国云提供商,拥有两个运行 Openstack 的法国数据中心。用于比较的 n1.cw .标准-4 配置。
- Digital Ocean —在全球拥有多个数据中心的美国云提供商。通用配置用于比较。
- Exoscale —一家瑞士云提供商,其数据中心遍布欧洲。用于比较的超大型计算机配置。
- 谷歌 GCE——在规模和范围上与亚马逊不相上下。用于比较的 n1-标准-4 配置。
- GridScale —德国云提供商,托管在德国。使用自定义配置进行比较。
- IBM Cloud —一家相对较新的大型公共云提供商。使用 B1.4x16 配置进行比较。
- Scaleaway —一家法国云提供商,仅在其法国数据中心提供托管服务。用于比较的 GP1-XS 配置。
- Upcloud —一家拥有全球数据中心的芬兰云提供商。使用自定义配置进行比较。
- Vultr —一家拥有全球数据中心的美国云提供商。使用高频计算配置。
按需付费与按月付费
Comparison of Pay As You Go Hourly pricing to Monthly in $/hour
对于大多数云提供商来说,很明显,与只支付按小时付费的价格相比,按月预订计算可以显著降低成本。在三大巨头中,似乎只有谷歌为购买每月计算提供了显著的折扣。
一个巨大的成本异常值是 Scaleaway,他们的产品比任何其他提供商都便宜得多。我已经检查了价格多次,试图找到一个错误,但没有,他们似乎真的很便宜。
每月与预留 1 年
Comparison of Monthly to 1yr reserved pricing in $/hour
一些云提供商为使用预约定价模式提供折扣。所以你要承担这一年的每月费用。如果你知道这些服务将在一年内没有太大变化,那么对亚马逊来说,这可能是一个高达 20%的合理折扣。但是考虑到灵活性的降低,真的值得吗?
现收现付与可抢占/即时/低优先级
Comparison of Pay As You Go Hourly pricing to Batch processing in $/hour
使用低优先级、现货或可抢占的计算资源是真正的深度折扣所在。只有三大巨头谷歌、亚马逊和微软 Azure 提供这项服务,其他供应商只是为了比较而显示的。这些计算实例适用于可以随时中断或运行的短期工作负载,即批量计算。这对于渲染、ELT 工作流或大型数据集分析等工作负载尤其有用。它们不是用来运行 web 或应用程序服务之类的东西的,它们的可用性非常不稳定。如果您可以使用它们,它们的价格非常实惠,低至现收现付价格的 25%。
结论
对于云提供商来说,查看您将要运行的工作负载类型绝对是值得的,这样就可以利用批量工作负载的深度折扣。除此之外,货比三家是值得的。如果您不受地区数据保护要求的限制,那么有很多选择。
在大型云提供商中,似乎有一股强大的推动力将应用程序从裸计算即服务转移到无服务器架构上。无服务器、容器化应用程序和裸机计算之间的成本比较还没有让我满意。对于小规模和低流量的应用,有明显的成本优势,但对于较高的流量,成本优势并不明显。
后续步骤
- 对云提供商之间同等产品的性能进行基准测试。
- 云对象存储选项的比较。
- 集装箱服务的比较。
公司如何理解你
原文:https://towardsdatascience.com/how-companies-makes-sense-out-of-you-ab73fcf1e518?source=collection_archive---------41-----------------------
当给定一个关于用户购买咖啡习惯的数据集时,你如何理解这些数据,这些公司能在多大程度上预测你的习惯?
Photo by Javier Molina on Unsplash
背景
在 Udacity 数据科学纳米学位中,我一直在星巴克提供的数据集上进行我的顶点项目。我的目标是利用我在课程过程中学到的东西,并把其中的一部分以网络应用或博客帖子的形式展示出来。很明显,我选择了后者。
这篇文章总结了我与星巴克数据集的遭遇,以及我如何设法将其分解,从大量数字和字符中分辨出一些有用的东西。
问题定义和研究问题
星巴克正在提供描述一组用户交易的数据,这些用户在一段时间内接触到不同类型的优惠时,具有一些特征,如年龄、性别和收入。
Udacity 对这项任务的描述是:
每隔几天,星巴克就会向手机应用程序的用户发出一次报价。优惠可以仅仅是饮料的广告,也可以是实际的优惠,如折扣或 BOGO(买一送一)。某些用户可能在特定的几周内收不到任何报价。
并非所有用户都收到相同的报价,这是这个数据集要解决的挑战。
您的任务是将交易、人口统计和优惠数据结合起来,以确定哪些人口统计组对哪种优惠类型做出最佳响应。
你可能会认为,这有点令人生畏。如何对星巴克的顾客说些有用的话?继续下去;我告诉你。
我们需要设计一些研究问题。简单看了一下数据后,我列出了一些例子,如下所示。
- 有什么迹象表明报价有效吗?
- 总的来说,有没有哪种性别对报价反应更好?
- 一般来说,有哪个年龄段的人对报价反应更好?
我一路上还有很多其他的,但是没关系。迭代是过程的一部分,有些路径并没有引导到你期望的地方。你将会看到,在这篇文章中,我可能会介绍我在这个过程中发现的新问题。
我将在下面指导你完成我的过程,然而,代码中的细节可以在我的 github 上找到。我选择主要使用 jupyter 笔记本进行探索和绘图。助手函数放在 python 模块中,以防我以后需要它们,其余的细节可以在 README 中阅读。
韵律学
在这个项目中,我选择不建立一个模型,因为我相信它可以给出一个非常合理的客户群摘要,以及哪些人口统计将对每种报价类型做出最佳响应,而不必进入机器学习。
上述研究问题构成了我的衡量标准的基础。我将深入数据的启发式分析,着眼于用户的特点,他们的总体消费习惯,以及每一个提供的分布式。
原则上,我将关注用户在不同优惠和总体上花费的平均值和中间值。
在反复进行分析和功能工程之后,我还决定,对于不同的报价和总体情况,每小时花费的平均值和中间值会产生有趣的结果,因为它做了两件事。它衡量用户对要约采取行动的时间。因此,我们将持续时间和数量分离。这与这样的假设有关,即用户一完成或过期就忘记了该优惠,并且在看到它之前不知道它。因此,每个用户对报价的感知时间都非常不同,我们应该以某种方式将其规范化。
数据探索和争论
让我们进入数据。星巴克提供的数据在三个不同的表格中给出。
- portfolio.json:不同报价的数据,比如报价类型、奖励、持续时间和难度
- 关于用户的数据。年龄、收入、性别
- 关于用户行为的所有信息。测试期间所有事件的抄本。哪个用户在什么时间得到什么优惠,他们什么时候观看,他们购买了什么等等。
这些表中的每一个都包含需要组合的信息,以便能够告诉任何关于产品成功或谁应该获得下一个产品的信息。我们将在下面的数据探索部分再次讨论这个问题。
这是最难的部分。首先,您需要了解数据的概况,它是什么类型?给出了哪些值?是不是很多数据点缺失?有没有明显的错别字或者不切实际的价值观?
这很耗时,但不一定是最难的部分。
作为一名数据科学家,你需要详细了解数据。隐藏在数据中的不明显的小细节和因果关系可以帮助您做出建模选择。统计学和机器学习是研究相关性的好工具,但不能解释因果关系。然而,即使是小孩子也能解释许多计算机难以理解的因果关系。因此,作为人类,我们需要尽可能多地了解我们的数据。通常这包括重复、尝试和测试假设。
你做出的这些建模选择可以让数据变得非常有用,或者原则上可以迫使你丢弃大块的数据,仅仅因为你还没有真正理解它的全部含义。
Udacity 和 Starbucks 给出的项目的问题定义解释了数据的一些特殊特征。例如,用户可以完成要约,并且在没有看到给予她的要约的情况下接收奖励。然而,在我们开始分析之前,还有其他几个值得了解的细节和假设需要检查。
在“Starbucks Capstone notebook . ipynb”你可以找到我相对有序的数据探索。我将在这里总结这个过程,讨论我在这个过程中的发现,以及我是如何解决这个问题的。
投资组合数据
我从解释报价本身的投资组合数据开始。
The total portfolio data set
正如我们在上面看到的,只有 10 种不同的报价。该数据具有与渠道、难度、持续时间、报价 id、报价类型和完成时的奖励相关的特征。
没有缺失值,其他方面相对简单。然而,信道数据在列表中,这对于任何类型的分析来说都不是很容易使用。因此,我将该列转换为虚拟列,以指示使用了哪个通道。
OneHot encoded channel columns
因为我没有预见到我将直接使用这个表进行分析,但是作为支持信息,我没有在这里转换 offer_type 列。我发现在搜索和过滤时能够保留分类值更有用。
关于这个数据没有太多要说的,所以让我们继续讨论概要数据集。
剖面数据
简档数据集给出关于每个用户的注册信息。下面是它的一个片段。
User data
这里列的不多。但是,我们会立即看到 None 和 NaN 值。我们也惊讶地看到许多 118 岁的人!发生了什么事?
嗯,我们可以看到,如果我们过滤“无”性别,每个用户似乎也有南收入和 118 岁!在最后一行,我们基本上得到了证实,所有的男性都没有收入。这似乎是某种默认值。
但是,默认值并不意味着它没有用。了解的唯一方法是检查他们的交易数据,我们稍后会这样做。如果我们的用户没有任何信息,也没有进行任何交易,他们对我们来说就是一个黑匣子。目前我们将保留奇怪的老用户。
但是让我们看一些好的图表来更好地理解我们用户的分布!
下面我们先看所有用户的年龄分布,然后再看每个注册性别的分布。注意,O 代表“其他”性别。显然,我们所有的 118 岁的人都与未登记的性别有关,因为他们从性别特定的情节中消失了。除此之外,我们可以看到男性、女性和其他性别的人口相对平等。
The distribution of age for all users
Distribution of users with genders other than None
我做了一个测试,从我的数据中删除了所有与性别无关的用户,看看我们是否还剩下一些缺失的值。正如所料,所有丢失的数据实际上都与某种默认设置有关。
此外,我发现数据集中 17000 个注册用户中有 2175 个用户(12.8%)是默认配置文件。这很重要,但是我仍然有很多数据,即使我最终不能使用它们。然而,目前的想法是将他们视为“第四性别”或一个独立的群体。
我还检查了会员注册日期的默认值是否可以与某个事件联系起来。意味着分布非常集中。尽管下图显示了 2015 年第三季度的增长,但没有单一事件。当我研究绝对注册时,它也显示了同季度的显著增长,这可能与星巴克的营销活动或类似活动有关。
Quarterly distribution of the % of default user profiles registered in that quarter
此外,我们可以看到,男女性别分布相当均匀,只有 1.4%的人有其他性别。
Gender distribution\
从性别的收入分配来看,我们可以看到他们也是相对平等的。女性高收入者的比例比男性高。然而,另一个突出的例子是没有收入超过 102kUSD 的人。
Income distribution for females
Income distribution for males
Income distribution for Other
总之,关于用户群最令人惊讶的是默认的配置文件,这使得相当多的用户注册。我们需要深入了解这些用户是我们可以留住的,还是我们应该抛弃他们。不过,我想先看看他们的交易数据。
抄本数据
抄本数据本身也是一个非常简单的表格。它有关于事件的信息;发生了什么,用户 id,事件的时间和一个名为 value 的列。这很有意思。
Snippet of transcript data
然而,为了确定这一点,我检查了所有用户是否都出现在脚本数据中。如果用户那里没有数据,我们可以直接删除它们。幸运的是,情况并非如此。所有用户要么收到了报价,要么买了东西。然而,我后来发现,并不是所有的用户都收到了报价,也不是所有的用户都买了东西。
此外,我找不到任何形式为 None 或 Nan 值的缺失数据点。因此,我们可以关注有趣的部分,即值列。
这个专栏从一开始就有点神秘。它被格式化为一个字典,带有一个键/值对。在上面的第一行中,我们只看到关于接收一些 offer 的事件,这些事件似乎都遵循相同的提供 offer id 的模式。然而,隐藏在表面之下的是什么?
我过滤了条目多于 1 的字典的值列。我找到了金子。
offer types with more than 1 key in the value column
Offer completed 有两个键,一个表示与要约完成相关的要约 id,另一个称为“reward ”,表示用户收到的奖励值!
当展开整个列并将每个键分配给一个单独的列并将值分配给该列时,我用这些额外的列结束。
value column converted to separate informational columns with the keys as column names
优惠 id 是不言自明的。amount 列与交易事件相关,表示用户何时花钱买东西。当用户通过完成要约来解锁奖励时,奖励与完成事件相关。
因此,将这些列添加到我的成绩单数据中,我最终得到了一个表格,其中有获得要约的人、给出的要约、发生的时间、任何交易或奖励的金额以及发生的时间。
我们可以开始更深入地了解事件的细节了!
首先,我检查了没有事务的默认配置文件的数量,只有 89 个用户。基本上我们一无所知的用户,他们没有使用这个应用程序购买任何东西。他们是约翰和无名氏。
用户消费历史
在做了这个初步的清理后,我想更多地了解我可能面对的模式。
- 报价是如何呈现给用户的,每次总是一个接一个还是多个?
- 完成后,用户可以看到优惠吗?
- 累计支出看起来如何?
为了更深入地了解这些问题,我需要一些视觉效果。我首先做了一个时间表的快速模型,其中我指出了报价的开始时间和结束时间,以及奖励。只是想了解一下我要处理的事情。
如下所示,我们肯定有重叠的报价,而且不是两个而是三个。为了能够理解更多的数据,我需要更好地组织这些数据。
Offer history of one user. Green vertical lines are offers received events, the red are after the indicated duration, and the green boxes span from start to end and the height indicate the reward.
经过检查,我发现任何用户收到的最大报价是 6。因此,我可以将每个报价一个接一个地排列起来,而不必花费太多的空间。我还可以添加关于何时查看和完成报价的信息(如果有的话)。
下面给出了用户报价和消费历史的一个例子。更多的例子在我的 github 的 plots/gantt plots 文件夹中给出。
One offer is presented per subplot. The timeline is given along the x-axis, and the bottom plot is the cumulative spendings until that point. For each offer, the start, end, view and completion time is indicated. Transactions are given as black poles, where the height indicate the value (as denoted on the y-axis). The text gives more meta data about the offer like type, difficulty and reward.
这些图对于理解我的数据非常有用。首先,在用户看到报价和完成交易之间可能有相当短的时间。此外,在某些情况下,查看事件发生在完成之后,如上图中倒数第二个报价的情况。
此外,对于许多用户来说,他们会收到许多报价,这些报价的总长度覆盖了他们的大部分时间线。然而,实际的感知窗口要小得多。大多数情况下,从收到要约到看到要约需要时间。要约的完成往往发生在到期日之前很久。
我选择在查看报价之前将其定义为无效。这意味着在此期间进行的任何交易都不受要约的影响,因此不能归因于要约的效率。
要约完成后发生的交易的收益率相同。我假设对报价没有后效。一旦完成,它就被遗忘了。
因此有效窗口是从要约被查看之后直到要约完成或到期。
Valid windows shown as green fields
用特征工程构建矩阵
经过清理和调查,我决定建立两个独立的矩阵。正如我们最初看到的,数据表本身实际上是简单的数据。它们需要被组合起来,新的特征必须被设计来描述我们想要知道的东西。这是为上面的报价甘特图所做的,其中报价数据与交易数据相结合。
参数的详细信息可以在自述文件中找到。在这里,我将只是总结他们的理由。
轮廓扩展矩阵
一个矩阵将基于简档数据。正如我们在上面的图中看到的,用户在不同的窗口内部或外部进行交易。这可以在用户级别上进行汇总,这样我们就可以获得与任何有效窗口内和有效窗口外的总支出相关的特征。我们还可以汇总不同类型优惠的支出。
此外,我们可以总结每个用户的观看率、完成率以及观看和完成的比率。查看率描述了用户查看报价的频率,完成率也是如此。查看和完成要约的比率,或基本上是有意完成的比率,描述了用户在第一次查看要约后完成要约的频率。
然后,扩展的概况矩阵将用于调查总体人口趋势。用户群在花钱方式、对优惠的反应以及没有优惠时有什么趋势吗?
报价矩阵
报价矩阵用一条线表示给用户的一个报价。因此,原则上它显示了上面甘特图中显示的数据,以及一些额外的数据。
优惠矩阵将用于调查不同优惠之间以及不同优惠的人口统计群体之间的差异。与用户数据结合使用,我们可以调查哪个人口统计组对给定的优惠类型响应最好,应该向用户提供哪个优惠等。
由于该数据仅包含有效窗口内发生的交易的信息,而非整个优惠期的信息,因此我们无法直接说明与未收到优惠相比,优惠是否特别有效,只能说明优惠的相对有效性以及它们如何相对影响不同的用户群。
分析
最后,我们可以开始分析我们的数据,并尝试回答我们要回答的问题。
一般用户行为
然而,在我们直接回答这些问题之前,我想先了解一点更普遍的问题:
- 有什么迹象表明报价有效吗?
- 总的来说,有没有哪种性别对报价反应更好?
- 一般来说,有哪个年龄段的人对报价反应更好?
为了回答这些问题,我做了一个汇总表,下面是一些方框图。
下表显示了不同数据特征的中值和平均值结果。它是从概要扩展矩阵中产生的,该矩阵概括了用户的总体情况,而不是单个报价级别。
该表已按性别分列,其中 N 表示无,O 表示其他。None gender 是我们在数据探索阶段发现的默认配置文件的指示。
关于平均值和中值有一点需要注意。如果平均值和中值显著不同,这意味着少数用户具有非常极端的值,使得平均值偏离平均值。
在下面的总结中,我们可以看到,对于所有的支出参数,中值明显低于平均值。因此,与 50%的花钱者相比,确实有少数人在认真花钱。
Summary of spending and time spent in and out of valid windows
Spending in a valid window grouped by gender
Spending outside of valid windows grouped by gender.
我们看到女性的总支出中值最高。和其他人一起,他们远远领先于男性和默认概况。实际上,这里最大的异常是默认配置文件,它们看起来可能是应用程序的随机用户,而不是真正的经常性大买家。
我们还从这些值中看到,在有效窗口内花费的金额低于在有效窗口外花费的金额。但这是否意味着给予折扣和其他优惠是无效的呢?
根据支出的绝对值来下结论是不公平的。正如我们所看到的,在有效窗口的之外花费的时间往往比在有效窗口中花费的时间高很多倍。
意识到这一点后,我回去根据每个小组各自的持续时间将花费值标准化。
这导致了下面的表格,其中有每小时美元的单位,而不仅仅是上面的美元。
Normalized spending
标准化支出讲述了一个不同的故事。在有效窗口内,即在查看报价后,女性每小时的平均支出是男性的 4.7 倍。男性的花费约为 3.9 倍,默认配置约为 2 倍,其他人约为 4.4 倍。这意义重大!
中值数字要低得多,这进一步支持了这样的观察,即有些用户花费很多,而许多用户花费一些。然而,有效窗口内和有效窗口外的比率仍然很高,所有性别的每小时支出都高出两倍多。
我有问题的价值除以 0,因为许多报价实际上是在同一小时内查看和完成。为了解决这个问题,我在所有持续时间上增加了 1 小时。这是一个很好的近似说法,即花 1 个小时来查看和购买你想买的任何东西。实际上,这个单位可能是几秒,但在我们的例子中这无关紧要。
ratio between in a window and outside a window for the normalized values over genders.
看下面不同的年龄组,我们看到默认值实际上是作为一个单独的组分开的。他们的支出中值较高,由方框内的横条表示,但在四分位数上也有相当大的范围。
除了默认配置文件之外,年轻人和老年人的中位数实际上更高,对于 68-78 岁的用户,有效窗口中的支出高 2.5 倍左右,对于 18-28 岁的用户,高 2.6 倍。
Ratio between in a window and outside a window for the normalized values over age groups
因此,根据上述指标,我们可以说,要约在一般工作!
一般来说,女性似乎对某项提议的反应略高,紧随其后的是其他性别。男性有点落后。
年龄组不那么明显,差异分布更均匀,没有一个群体是突出的。相反,所有群体的反应都很好。每个年龄组的平均花费高出 2.2 到 2.6 倍不等。
报价类型
我们可以对报价类型做类似的练习。我设计了一些功能,总结了属于特定优惠类型的有效窗口内的消费以及在相应优惠类型的有效窗口内花费的相应时间。
因为我们无法知道购买是否受到一个或另一个报价的影响,如果有效窗口重叠,我就计算两者的数量。因此,实际支出数字是乐观的,不能用来直接预测数额,但它们可以用来比较反应。
Normalized spending for different offer types
看一下上表,我们看到中间值告诉我们,与完全不在窗口中相比,许多用户只是受到特定报价的轻微影响。并且至少 50%的用户不仅仅基于信息提供来购买任何东西。
然而,平均而言,折扣和 BuyOneGetOne 优惠的每小时支出明显高于没有优惠的每小时支出。这意味着有一些人在特定类型的优惠中随机或受影响地花费更多。
下面我们看到了按性别划分的不同年龄组的不同优惠类型的标准化支出分布。
如果我们把目光从误差棒非常高的子群移开,我们可以看到,在折扣优惠上,其他性别通常比 60 岁以下的女性有更高的标准化支出。然而,在 60 岁到 80 岁之间,趋势发生了变化。其他性别的样本相对较少,因而有较高的估计误差。
显而易见的是,总体而言,所有男性(不包括 98-118 岁的人)都不太可能为任何提议花钱。
摘要
总之,我们可以说,有一种趋势表明,女性每小时花更多的钱,并且至少比男性更容易受到任何报价的影响。另一个性别类别更接近女性。
年龄组更加随机,有迹象表明年轻人和老年人比中年人对报价反应更好。
然而,我们有相当有力的证据表明,人们因为收到的优惠而花费更多!
我发现这特别有趣,但也是最难的部分之一,挖掘数据,并试图设计新的功能,可用于推理。关于如何在我定义的报价或窗口之内/之外处理交易的选择会显著改变结果。数据科学家必须仔细选择定义,并根据这些选择得出结论。
我尝试了不同的设置和数据争论,看看我能找到什么重要的参数,这里显示的结果是基于我对一些要点的理解。可能我的理解是错误的,因此我将需要另一次迭代来微调方法和建模选择。
改进和未来工作
利用这些数据可以做更多的事情。报价数据框架不仅可用于绘制图表,还可用于理解报价是如何为用户构建的。
各种优惠类型的支出分布和其他相关数据有助于更好地了解不同用户群对各种优惠类型的反应。我可能会先这样做,以了解更多关于产品和用户组合的信息,并根据学习和发现的缺陷等来改善视觉效果。
此外,通过结合用户一般支出的工程特征、报价表和用户参数,我们可以建立一个机器学习模型,通过无监督学习方法来细分用户群。此外,我们还可以构建一个回归模型,根据用户资料预测用户的预期支出。
计算机如何看:图像识别和中世纪的杆臂
原文:https://towardsdatascience.com/how-computers-see-image-recognition-and-medieval-pole-arms-1c1375a34d38?source=collection_archive---------15-----------------------
他们说,死亡是伟大的均衡器。它最终会降临到我们所有人身上,没有人能逃脱它冰冷的魔爪。这在历史上和今天都是正确的,但在中世纪的战场上,我想这句格言有着特别的辛酸。死亡无时无刻不在,并可能以多种形式出现——在锋利的钢片末端,在狂奔的马蹄下,或者从你因喝了别人刚刚拉屎进去的水而感染的无数疾病中的一种。
然而,中世纪的贵族们,秉承着自古以来富有混蛋的传统,不停地试图让生活的天平向他们倾斜。到了 15 世纪末,贵族们想出了一些非常有效的方法。随着金属加工技术的进步和高质量钢材供应的增加,出现了越来越精致和有效的板甲套装。它们非常沉重,而且价格惊人,主要被骑马的骑士所使用——这些地主非常富有,能够负担马匹和盔甲,以及两者的保养费用。这种盔甲让一个人几乎免疫于刀剑或长矛的攻击,幸运的穿戴者可以纵情于一个下午的屠杀而相对不受惩罚。
What a jerk
当然,农民对这种状况不太满意。从高尚的角度来看,他们开发了一套减轻这种新的战场威胁的工具,这是相当不明智的。这些工具都依赖于一项革命性的技术,这几乎完全抵消了板甲的优势。这一关键创新是你今天会认识到的——我们称之为“非常长的棍子”。在一根六或八英尺长的木杆末端放上一些锋利的钢,你就有了破坏贵族乐趣的完美工具。这些武器被称为“杆武器”。
至于怎样装饰这根长长的棍子最好,有四个主要的学派:
长钉是长棍子末端的一个极好的东西。矛也许是这方面最突出的例子,自从人类出现以来就一直在使用。杆子的后端可以插入地面,利用冲锋骑士的冲力攻击他,把他变成一个全副武装的烤肉串。
剑刃:剑或斧对板甲相当无效。但是把同样的刀片放在一根长杆的末端,你能施加的力会突然成倍增加。轻轻一击之前的一击可以变成一记重击,甚至可以劈开最坚固的盔甲。
锤子:突然向某人的头部施加巨大的力量会毁了他们的一天,不管这一击是否穿透他们的头盔。锤子将一击的全部力量集中在一个非常小的区域,通过盔甲将冲击力传递给穿戴者,极大地扰乱他们的计划。
钩子:源自各种现存的农具,钩子可以发现盔甲上的裂缝,而直刃可能会遗漏。这些武器也被用来把骑着马的对手从座位上拉起来,或者把步兵从他们的朋友身边拖走,以便更方便地进行谋杀。
在实践中,杆臂通常将这些方法结合成一个单一的多用途工具——一个背部带钩的斧刃,一个顶部带长钉的锤子,或者一个既能刺穿又能砍的长而重的刀片。在中世纪晚期持续不断的战争中,适者生存见证了不同形式的巨大繁荣,所有这些都旨在让可怕的事情发生在一根长杆所能管理的遥远的人身上。事实上,如此多的这种武器被制造出来,以至于追踪它们是一个相当大的挑战。
确定一个特定的钢铁花饰是 glaive、fauchard、brandistock 还是一个波西米亚耳勺会让任何人绞尽脑汁。幸运的是,在现代,我们可以调用人工大脑的力量。是的,这是另一种迫切需要应用机器学习的情况。
我们想要的是一种工具,可以简单地通过观察其形状来识别杆臂属于哪一类。我们希望将一个杆臂的图像转换成对其专有名称的预测。这是一个分类问题,就像我们在这个系列的第一篇文章中遇到的一样,根据某些身体特征,我们将恐龙分为食草动物或食肉动物。
但是有一个非常重要的区别。以我们的恐龙为例,我们的数据被非常方便地编码为每种生物的一组相关“特征”——重量、长度、是否有羽毛等等。对于我们的电极臂,我们的数据只是一组图像——电极臂的形状以每个像素的颜色值进行编码。
让我们想想这意味着什么。以下是我们关于恐龙的数据:
有了这些数据,算法可以确定恐龙的特征和饮食之间的关系:用四条腿走路使恐龙很可能是食草动物;体重轻更有可能是食肉动物,等等。通过结合这些因素,算法创建了一套规则,非常准确地将恐龙归入正确的群体。
但我们的极臂数据是一组图像——而不是定义的特征和类别,我们所有的是一行又一行的像素。如果我们将这些数据表示为行和列,它看起来像这样:
第一行:白色、灰色、黑色、非常黑、再次变灰、白色、灰白色、白色…
第二排:灰黑色、微黑灰色、黑色、黑色、更黑、灰色、浅灰色、白色…
特征(特定像素的内容)和类(图中的极臂类型)之间不存在明确的关系。顶行中左起第三个像素是黑色而不是白色,这一事实与图像是 bardiche 还是 bec-de-corbin 有任何明确的关系吗?不,不是的。对于传统的分类算法来说,这些信息完全没有意义。找到这些关系需要一种不同的、更复杂的方法。我们将深入这些文章中尚未涉及的机器学习领域:“神经网络”,或所谓的“深度学习”。
神经网络所做的,将它们与其他机器学习算法区分开来,不仅仅是学习如何将有意义的特征转化为对一行数据的预测,而是学习如何将复杂的非结构化信息转化为有意义的特征。神经网络采用多阶段或“分层”方法进行分类。我们的极臂识别器首先准备数据,将像素的原始值转换为图像的抽象信息。只有在最后阶段,它才会将这些信息转化为每一个职业所属的极臂的可能性——也许有 80%的可能性是戟,15%的可能性是贝克-德-科尔宾,5%的可能性是格莱夫-吉萨尔姆。最有可能的类别成为我们的最终预测。
该过程的最后一步与最简单的分类算法完全相同。真正使神经网络与众不同的是早期的“准备数据”步骤。他们是怎么做到的?对于大多数神经网络来说,答案是一个叫做“反向传播”的过程。之所以这么叫,是因为它涉及到最后一层,预测类“反馈”信息给第一层。第一层由一组非常简单的算子组成,称为“神经元”。它们得到这个名字是因为它们的运作方式在基本层面上模仿了大脑神经元的运作方式。但是不要被听起来复杂的名字所迷惑——它们的操作非常简单。神经元查看图像中的像素,并基于这些像素的值,传递自己的单一信号。
当神经网络第一次创建时,神经元完全随机地选择它们的阈值——它们进行猜测。网络对一整套训练数据进行预测,然后检查它做得如何。提供有用信息的神经元可以保持它们的值,但是那些将网络引入歧途的神经元的值会被调整。经过多次迭代,神经元被慢慢训练,以辨别哪些信息要保留,哪些要丢弃。在训练过程结束时,他们已经学会了将什么特征传递给最后一层,以最大化预测正确类别的机会。
为了实现我们的杆臂,我们需要一个非常大的杆臂图像集,每个都标有正确的名称。我们还需要各种不同的杆臂。我们希望确保网络正在学习区分例如 fauchard 和 bardiche 的一般原则,而不仅仅是学习识别我们选择的特定图像的细节。
收集这个数据集被证明是一项巨大的工作,不仅仅是因为我不得不费力地手工搜索、裁剪和过滤数十张图像,还因为事实证明对这些东西的名称没有达成共识。普通的中世纪农民似乎更关心如何生存,而不是帮助他们生存的武器的正确名称。一位消息人士自信地将“fauchard”定义为“glaive”的表亲,外加一个朝后的尖钉或钩子。另一个同样权威的消息来源声称同样的武器是一把改良的大镰刀——一把在杆子末端向前弯曲的刀刃。
我需要一个权威的来源,正如我以前多次做的那样,我转向了高级龙与地下城第二版玩家手册(修订版)。下面是这本庄严的大部头如何定义我的模型将分类的七类武器:
长斧:最简单的长杆武器之一,长斧是一把加长的战斧。一个大的弯曲斧头安装在轴的末端 5 到 8 英尺长。
贝克·德·科尔宾:一种早期的开罐器,专门用来对付板甲。镐或喙用来刺穿金属板,而锤面可以用来用力击打。末端装有短刃,用于对付无甲或无助的敌人。
浮屠:是镰刀和长柄大镰刀的衍生物,浮屠是一种长而向内弯曲的刀刃,安装在六到八英尺长的柄上。
Glaive:Glaive 是最基本的杆臂之一,是安装在 8 至 10 英尺长的轴上的单刃刀片。
圭萨尔姆:被认为源自一种修剪钩,这是一种精心制作的弯曲沉重的刀刃。
另一种组合武器,这种武器采用了基本的剑刃,并在剑刃后面增加了一个长钉或钩子。
戟:固定在一根五到八英尺长的轴上的是一把巨大的斧刃,倾斜角度以获得最大的冲击力。刀刃的末端逐渐变细,形成一个长长的矛尖或锥状长枪。背面是用于攻击装甲或下马骑手的挂钩。
我确信,这些定义会激怒许多军事历史学家,但对我来说,它们已经足够了。
除了收集每种武器类型的几十个例子,我还以另一种方式扩展了我的数据集,即“合成”额外的图像。这意味着拿起我现有的图像,翻转和拉伸它们,左右移动它们,并用随机噪声点缀它们。这意味着我收集的每一张图片都可以多次包含在我的数据集中。通过使用拉伸、处理、特别是翻转的图像,我们帮助算法关注图像中的一般形状和关系,而不是特定的细节。最后,图像被去饱和(所有的颜色都被去除),每边缩小到只有 40 像素。这减少了算法必须考虑的数据量,并大大提高了它的学习速度。
像机器学习中的许多事情一样,需要一点点修补才能让它正常工作。神经网络采用一系列参数和设置,控制其操作的几个深奥方面。例如,一个网络可以有两层以上,将原始数据浓缩成越来越丰富的有意义的特征。我就不告诉你细节了。
选择这些价值仍然是一种有点神秘的实践,更像炼金术而不是化学。但是测试过程与任何其他分类算法完全相同。在我们训练模型之前,我们留出一部分图像,从我们的模型中隐藏它们。这些坚持不需要经历拉伸、斑点和翻转的过程。相反,我们用它们来检查我们神经网络的准确性。在从一组训练图像中学习了它可以做的事情之后,它可以正确地预测它从未见过的一组图像的类别吗?对于每张图片,我们要求网络猜测其类别。它返回一个概率列表——每张图像属于给定类别的可能性。
Predicted classes for each of 25 test images — the image is shown next to the predicted probabilities of it belonging to each class. The correct class is in blue, and the label is red if the class was incorrectly predicted. In most cases, the model predicts the correct class with close to 100% probability.
我们的算法极其精确!除了四十张左右的测试图像中的一张之外,它对所有的图像都做出了正确的预测——将 bec-de-corbin 识别为戟。有了这些简单的类,以及如此清晰和小的图像,识别任务对于我们的算法来说是非常简单的。
有了如此好的准确性,很难相信网络真的学会了识别极臂,而不仅仅是记忆我们提供给它的图像的一些琐碎方面。有没有一种方法可以让我们深入了解算法的内部工作原理,从而更好地理解它是如何做出预测的?
你会想起以前的一篇文章,关于从文本中提取意义,我们可以使用一系列的数学运算将描述一部电影的单词集合转化为一组数值,这些数值包含了这部电影的“意义”的一些表示。通过我们的神经网络,我们已经做了一些非常类似的事情——拍摄一张极臂的图像,并将其转化为关于该图像的一些有意义信息的数字表示。它只是一系列数字,但它包含了图像中形状的一些信息。事实证明,我们极臂的这些数字表示具有一些非常有趣的性质,它们可以帮助我们更多地了解网络如何进行分类,以及它到底学到了什么。
就像我们的电影一样,我们可以计算我们的极臂表示(或“嵌入”)之间的相似性。我们可以测量数值之间的差异,并使用它来找到最相似或最不相似的图像。这揭示了一些有趣的东西。如果我们简单地测量图像中像素之间的差异,我们会发现表面上相似的图像,但它们可能代表完全不同的极臂。相比之下,找到相似的嵌入可以找到非常不同的图像,但它们代表了武器的相似设计。
在上面的图像中,我们选取了一个典型的 guisarme,并根据图像相似性,即它们有多少像素是相同的,以及根据嵌入相似性,即它们的数字表示之间的差异,找到了最相似的图像。基于图像相似性,最接近的匹配根本不是 guisarme,而是 fauchard,它恰好在帧中占据了相似的空间。但是嵌入的相似性找到了另一个 guisarme。有趣的是,它发现了这个 guisarme,尽管事实上它面对着与原来相反的方向。这证明了一种叫做的旋转不变性。因为我们训练我们的模型对我们的源图像进行翻转、拉伸和斑点变换,所以它学会了忽略这些因素——它已经知道,无论 guisarme 是面向左还是面向右,它都是 guisarme。
我们可以对这些嵌入的图像做的另一件事是计算平均值。例如,我们可以为我们的 glaives 取所有的嵌入,并取它们的平均值。这给了我们一个新的嵌入,它代表了“最华丽的”可能的华丽——“ur-华丽”。但是我们真的看不到那个 glaive 是什么样子——它只是一串数字。我们能做的是找到最接近理想的生活方式。我们可以从我们的测试集中选择 glaives,并从最“glaivy”到最“glaivy”对它们进行排序。我已经在下图中完成了,最相似的在左边,最不相似的在右边。左侧的 glaive 非常简单,没有什么特别的功能。相比之下,右边的 glaive 有各种奇怪的功能——挂钩和长钉。它几乎可以被当作伏尔加或巴尔迪什。
不过你会注意到,图片的顺序与你我可能的排序方式并不完全匹配。例如,第四个 glaive 在我看来与第一个非常相似,尽管嵌入显然不那么相似。这是一个重要的提醒——网络以神秘的方式运作。虽然它的结果有时可能与我们的期望一致,但有时也会使我们的期望落空。它不是人类,我们也不应该指望它能得出类似人类的结论。
我们可以对这些嵌入做其他的数学运算。我们可以把它们加在一起。如果我们把“glai vest”glaive 和“GUI sarmiest”guisarme 放在一起,然后把它们的嵌入相加,我们就能找到最能代表 glaive 和 GUI sarme 组合的图像。令人高兴的是,这个操作的结果是一个 glaive-guisarme——一个用类似 GUI sarme 的钩子修饰过的 glaive。
我们学到了什么?我们已经学会尊重中世纪农民的创造力,我们也学到了一些关于神经网络的知识。通过使用“隐藏层”,神经网络能够从非常复杂的来源中提取有意义的数据——在这种情况下是简单的图像,但也包括声音、电影和——我们将在未来的文章中看到——文本。他们可以使用这些有意义的信息对新数据进行分类(通常非常准确)。面部识别软件、更复杂的推荐算法、文档分类和许多其他系统都以这种方式利用神经网络。但是神经网络生成的嵌入也非常有用,并推动了一系列其他应用:谷歌的图像搜索部分使用了神经网络从图像中提取的信息。聊天机器人利用神经网络对问题和答案的含义进行编码。
人们很容易将类似人类的品质归因于神经网络的智能。毕竟,它们在某些方面是对人类大脑结构的模仿。如果它们能够模仿类似人类的行为,这一点也不奇怪。但重要的是要记住,这些系统的知识领域非常狭窄——它们被训练只做一件事——而且它们不关心如何去做。我们的极臂识别器非常擅长它的工作,我们对它生成的嵌入进行的实验表明,它在某种程度上识别了图像中与我们相同的一些特征。但我们也看到,它的一些结果相当令人惊讶。它做出了人类不会做出的选择。它很可能像关注更大的结构一样关注图像中的微小细节;它的程序中没有告诉它“应该”识别图像中的什么特征,所以它只关心什么有效。这是所有人工智能共有的特征,也是让它们既迷人又有时令人恐惧的品质。通过以一种有时非常不寻常的方式执行类似人类的任务,他们可以感觉像是洞察到一种真正陌生的思维方式——如果他们可以被称为“思考”的话。
感谢阅读!本系列上一篇文章《 一万次约会:强化学习演义 》此处可用。这篇文章的所有代码可从my github这里 获得。本系列的下一篇文章——关于文本生成——可以在 这里 找到。
计算机如何看
原文:https://towardsdatascience.com/how-computers-see-intro-to-convolutional-neural-networks-8f67d28fa86a?source=collection_archive---------14-----------------------
卷积神经网络简介
自动驾驶汽车如何阅读路牌?脸书如何在图片中自动标记你?一台电脑如何实现“皮肤科医生级别”的皮肤病分类?
在所有这些应用中,计算机必须“看到”世界:它接收电磁辐射的数字表示(例如照片),并计算出该辐射意味着什么。
计算机视觉是一个广泛的领域,它结合了人工智能、工程、信号处理和其他技术,使计算机能够“看”卷积神经网络(“CNN”)是一种计算机视觉模型。
在过去的几年里,由于在许多有用的任务上的出色表现,CNN 的受欢迎程度激增。CNN 用于第一段中描述的所有计算机视觉应用,从照片的标记方面到医学图像解释。这篇文章将概述 CNN 如何实现许多令人兴奋的现代计算机视觉应用。
背景
- 卷积神经网络简史
- 神经网络简介
CNN 输入:图片在电脑中是如何表现的
对于计算机视觉应用,CNN 的输入是图像或视频。(CNN 也可以用在文本上,但是我们将把它留到另一篇文章中。)
在计算机中,图像被表示为像素值的网格——即正整数的网格。这里有一个简单的例子,像素颜色“白色”用 0 表示,黄色用 2 表示,黑色用 9 表示。(为了便于可视化,颜色仍然显示在“图片表示”侧,即使在计算机中只保存数字):
实际上,彩色图像是用三个数字网格相互叠加来表示的:一个网格代表红色,一个网格代表绿色,一个网格代表蓝色。每个网格的元素使用 0 到 255 之间的数字指定每个像素的红色、绿色或蓝色的强度。关于如何表现彩色图像的更多细节,参见RGB 颜色模型。
在这篇文章的剩余部分,我们将使用上面显示的简化的笑脸示例。
CNN 输出
CNN 的输出取决于任务。以下是针对各种分类任务的 CNN 输入和输出示例:
图片来源:蓝色餐厅,蒙娜丽莎,猫咪,黑色素瘤,胸片,滤泡状甲状腺癌
当针对任何任务训练 CNN 时,需要许多训练示例。例如,如果您要训练 CNN 进行动物分类,您将需要一个由数千张动物图片组成的数据集,其中每张图片都与一个二进制向量配对,指示哪些动物出现在该图片中。有关训练和测试神经网络的更多信息,请参见本文。
大意
在 CNN 中,不同的“过滤器”(数字的小网格)滑过整个图像,计算卷积运算。不同数量的不同过滤器将检测图像的不同方面,如水平与垂直边缘。CNN 中使用许多不同的过滤器来识别图像的许多不同方面。
此动画显示了一个 2 x 2 滤镜滑过笑脸图像的顶部:
CNN 的部分内容
像前馈神经网络一样,CNN 由“层”组成
CNN 中的单个层包括三种计算:
- 卷积:这是 CNN 的心脏。卷积运算只使用加法和乘法。卷积滤波器扫描图像,执行卷积运算。
- 非线性:这是一个应用于卷积滤波器输出的等式。非线性允许 CNN 学习输入图像和输出类之间更复杂的关系(曲线而不是直线)。
- 汇集:这通常是“最大汇集”,即从一小袋数字中选择最大的数字。池化减少了表示的大小,从而减少了所需的计算量,使 CNN 更有效。
这三种计算——卷积、非线性和汇集——用于构建 CNN 模型的“卷积”部分。仅使用这些操作来获得最终预测的 CNN 被称为“完全卷积网络”这与 CNN 形成对比,CNN 在卷积部分之后使用一些全连接层(全连接层是前馈神经网络的构建模块)。)
什么是“博学”
CNN 是一种机器学习算法。CNN 到底在学什么?
它学习在卷积滤波器中使用什么值,以便预测所需的输出。包含不同值的过滤器检测图像的不同特征。我们不想告诉模型它需要寻找什么特征来确定图片中是否有猫;该模型自己学习在每个过滤器中选择什么值,以便找到猫。
如果在末端有完全连接的层,CNN 也将学习在完全连接的层中使用什么数字。
卷积滤波器
CNN 过滤器是一个正方形的数字网格。过滤器的大小是在构建 CNN 时指定的。一些常用的过滤器大小为 2 x 2、3 x 3 和 5 x 5,但它们可以是您选择的任何大小。
当 CNN 在任何训练发生之前被初始化时,滤波器的所有值被设置为随机数。通过训练过程,CNN 调整滤波器中的值,以便滤波器检测图像的有意义的特征。以下是一些随机初始化的不同大小的卷积滤波器示例:
注意,在实践中,为随机初始化选择的数字会更小,并且它们不会都是整数(例如,随机初始化的过滤器值可能是-0.045、0.234、-1.10 等)。)
卷积运算
卷积是这样工作的。让我们取一小块笑脸图像,并对其应用卷积,使用值为(1、2、3 和-1)的 2 x 2 过滤器:
示例的设置:
- 我们正在使用的过滤器显示在左侧,以供参考,其值以蓝色字体显示。
- 与过滤器进行卷积的图像的 2 x 2 部分的值以红色突出显示。
- 中间的计算显示了卷积运算,我们将滤镜的元素与图片的元素进行匹配,将相应的数字相乘,然后求和得到卷积输出。
在最后一部分,你可以看到,为了得到最后的卷积值,过滤器滑出了我们的原始区域。我展示这一点是因为在实践中我们将卷积应用于整个图像,所以在我们为了示例的目的而选择聚焦的小区域之外仍然有真实的像素。然而,将图像作为一个整体来考虑,我们最终会用我们的过滤器达到一个“真正的边缘”,我们将不得不停止。这意味着我们卷积的输出会比原始图像稍小。
这是红色区域和我们选择的滤波器的卷积输出:
非线性
一旦我们完成了卷积,我们应用一个“非线性”这是一个非线性方程,它将允许 CNN 从整体上学习更复杂的模式。一种流行的非线性是 ReLU,或“整流线性单元这听起来很奇怪,但很简单:你用一个零代替每个负值。
统筹
最后一步是汇集。这一步会缩小表示的大小。通常,我们选择与过滤器相同维度的池窗口。我们选择了一个 2 x 2 的过滤器,所以我们选择了一个 2 x 2 的池窗口。
这里,我们将执行“最大池化”,在每个池化窗口中选择最高值。
也可以执行其他类型的池,比如平均池,我们取池窗口中所有值的平均值。池是有用的,因为它减少了表示的大小,从而减少了整体所需的计算量。
在一个卷积层中有许多滤波器
在上面的例子中,我们应用了卷积、非线性和池化,从 4 x 4 的像素平方变为 2 x 2 的表示,只关注单个滤波器。然而,实际上,一个卷积层使用许多不同的滤波器,所有滤波器大小相同,但值不同。
假设在第一个卷积层中,我们应用了 32 个不同的滤波器,每个滤波器的大小为 2 x 2。那么整个层的总输出大小是 2×2×32。每个滤镜检测图像的不同方面,因为每个滤镜包含不同的数字。
一个 CNN 有很多层
一旦我们有了 2 x 2 x 32 的表示,我们就不会停止。相反,我们可以进行另一轮卷积、非线性和合并,这一次将运算应用于 2 x 2 x 32 表示,而不是原始图像。第二轮是第二个“卷积层”现代 CNN 可能有 8 层或 99 层,或者设计者选择的任何层数。
具有许多层的 CNN 背后的关键思想是,较低层(更接近输入图像)的过滤器将学习简单的特征,如边缘在哪里,而较高层(更抽象)的过滤器将学习复杂的特征,如照片中的人脸或胸部 x 光片上的肺炎。
可视化卷积滤波器
有不同的方式来形象化 CNN 用不同的滤镜看到的东西。本文图 1展示了一家名为 AlexNet 的 CNN 的第一层滤镜在看一张猫的图片时是如何点亮的。这篇文章和这篇文章包含额外的过滤器可视化。Jason Yosinski 的视频“深度可视化工具箱”绝对值得观看,以便更好地理解 CNN 如何将低层的简单特征(如边缘)与高层的过滤器结合起来检测复杂特征(如人脸或书籍)。
结论
CNN 是理解图像的一个强有力的框架,并且涉及许多层上简单操作的重复应用。它们在工业和学术界广泛使用,并已经开始影响依赖图像的医学领域,包括放射学、皮肤病学和病理学。
特色图片
特色图片是列奥纳多·达芬奇的《蒙娜丽莎》,我借用它作为“情感分类”的例子(具有讽刺意味的是,因为人们对《蒙娜丽莎》表达了什么样的情感有不同意见,也因为我在车里一直在听莱纳德·达芬奇的传记。)以下是一些关于《蒙娜丽莎》的有趣事实:
- 蒙娜丽莎曾经有眉毛和睫毛,但很可能是在馆长清洗蒙娜丽莎的眼睛时被意外移除了。
- 艾尔沃斯蒙娜丽莎被认为是达芬奇蒙娜丽莎的早期版本,描绘了同样的主题。这是一幅比著名的《蒙娜丽莎》更宽的画,画的两边都有柱子。
- 《蒙娜丽莎》目前的色调是黄褐色。然而,各种研究表明,《蒙娜丽莎》曾经色彩更鲜艳,有明亮的红色和蓝色。她也可能腿上有一件毛皮大衣。
附加资源
在过去的几年里,我整理了一份与 CNN 相关的特别有用的资源清单。他们来了!
- “卷积神经网络(CNN):图解说明”是计算机械协会(ACM)的一篇优秀博文,提供了 CNN 设计和实现的细节。
- “理解卷积神经网络的初学者指南”是另一个很棒的帖子,特别是用鼠标的图画来解释 CNN 过滤器如何工作的部分。
- 卷积神经网络(CNN/conv nets):本文来自斯坦福的一门课程,CS 231n。
- vdumoulin/Github 上的 conv 算术包含了令人惊叹的动画,展示了不同种类的卷积滤波器如何应用于图像。它包括一些“花式卷积”技术,如转置卷积和扩张卷积。有关扩张卷积的更多信息,请查看“通过交互代码了解 Numpy 和 Tensorflow 中的示例了解 2D 扩张卷积运算”
- 亚伦·c·库维尔、伊恩·古德菲勒和约舒阿·本吉奥合著的深度学习书籍的第 9 章提供了对 CNN 的更技术性的讨论。
- Hvass-Labs/TensorFlow-Tutorials/02 _ convolution _ Neural _ network . ipynb是一个 Python 笔记本,带有 CNN 的 tensor flow 代码,解决了 MNIST 手写数字分类任务。
- 本文On Deep Learning for Medical Image Analysis(JAMA Guide to Statistics and Methods,2018) 是为医疗专业人士撰写的 CNN 综述。它还包含一个伟大的 CNN 的视频解释。这篇文章在付费墙后面,所以如果你在大学,你必须登录到你大学的图书馆资源才能访问它。
原载于 2019 年 5 月 5 日【http://glassboxmedicine.com。
计算机如何思考
原文:https://towardsdatascience.com/how-computers-think-c2e01c2fe33c?source=collection_archive---------10-----------------------
这是人工智能的最终前沿。它是无数电影和小说中的明星,也是现代幻想中最大的恶棍和英雄。我说的是真正的“智能”机器,有时被称为“硬”AI,或“一般智能”。也就是说,人工智能是智能的“像我们一样”,是“有意识的”或“自我意识的”。
这是一个更多由哲学家和流行文化评论员讨论的主题,而不是人工智能的实际研究人员。它的术语定义过于松散,其结果的实际意义太小,无法引起大多数数据科学家或软件工程师的兴趣。哲学家和杞人忧天的记者可能会关心简单数学和有思维的生物之间的界限,但出于实际目的,目前人工智能的最先进水平似乎离任何真正智能的机器都很远,以至于这个问题没有意义。
The real question is whether the computers will want to date you
但我认为这是一个错失的机会。对人工智能实际应用的良好理解会给这个问题带来一个完全不同的、更有用的视角。事实上,我的信念是,关于我们如何与智能机器互动的问题远远不是一个遥远的问题或假设,而是与现在相关的问题,并且适用于我们每天都遇到的系统。
毫无疑问,对计算机智能的讨论必须从艾伦·图灵的《计算机器与智能》开始。在这篇论文中,他首先提出了什么将成为讨论“硬”人工智能或像人一样思考的计算机的定义性比喻之一。他称之为“模仿游戏”,也就是众所周知的“图灵测试”。我让他解释一下:
“……这个问题可以用一个我们称之为‘模仿游戏’的游戏来描述。“它由三个人玩,一个男人‘A’,一个女人‘B’,和一个审问者‘C’,他们可能是男性也可能是女性。审讯者呆在一个与其他两人分开的房间里。对于审讯者来说,游戏的目的是确定另外两个人中哪个是男人,哪个是女人。他通过标签 X 和 Y 认识他们,在游戏结束时,他说“X 是 A,Y 是 B”或“X 是 B,Y 是 A”。询问者被允许向 A 和 B 提问……我们现在问这个问题,“当一台机器在这个游戏中扮演 A 时会发生什么?”
这明确了计算机智能的问题。假设我们隐藏的对话者是一台电脑,而不是一个人,作为询问者,我们怎么知道呢?我们期望看到哪些不同?我们能想象出任何问题或一系列问题来明确区分一个有血有肉、有意识的人和一个由塑料和电线组成、无意识的机器吗?
He also had a pretty sharp haircut!
图灵并不打算把它作为一个实用的基准,尽管它经常被误解。图灵并不是在暗示能糊弄人的机器是“智能的”,不能冒充人的机器不是。这是对一个复杂得多的论点的愚蠢解释。图灵描述的是对智力问题本质的惊人洞察。图灵告诉我们,思考与非思考、意识与梦游之间的区别不在于机器,而在于感知它的人。换句话说,正如我们从图像生成的最新进展中了解到的,造假和真的做是一样的。图灵告诉我们的是,机器有没有思考并不重要。重要的是我们是否把它当看待。
让我解释一下。
从最简单的分类器到最复杂的深度学习系统,每一种人工智能算法都基于类似的原理。给定一组数据,一组关于世界的观察结果,算法试图构建一组规则——一个模型——来解释这些观察结果。对于简单的算法来说,这些模型非常简单:“一只长着羽毛的恐龙是这只更有可能是一只食肉恐龙”、“一个 14 岁后登基的君主会统治这只很多年。“对于复杂的算法来说,模型更难解释——图像识别算法(例如,识别中世纪武器)构建了所显示图像的抽象表示。对于人类观察者来说,这种表示是完全不透明的,但对于算法来说,它包含了区分格莱夫和戟、巴尔迪什和贝克-德-科尔宾所需的所有信息。一种算法创建了对新型汉堡的描述,它参考了大量的参数来决定是给我们一个“猪肉腌制的牛肉汉堡”还是一个“癌症治愈的牛肉汉堡”。但在所有情况下,这些算法都朝着同一个结果努力:尽可能减少意外。正确的答案是让世界少一点困惑,多一点安全。
在这方面,这些算法类似于人类。我不是人类认知方面的专家,但很容易想象人类的思维方式也是如此。观察婴儿在玩“躲猫猫”游戏时的喜悦,你可以看到这个过程发生在你眼前:“一张脸!令人愉快!但这是什么?脸没了!发生了什么事?它能在哪里?哦,在那里!厉害了!”婴儿对这一过程乐此不疲,似乎不管这一过程重复多少次。但是让他们高兴的不是完全的惊喜,而是期望的实现——婴儿的快乐随着他们学习游戏规则而增长。当这张脸消失时,快乐不在于惊讶,而在于当它再次出现时,他们的期望得到了证实。说这一过程是所有人类思想的基础可能过于简单,但很明显,在很深的层面上,我们的思维与预测过程有着很深的联系。
就像机器学习算法一样,我们构建模型来解释我们周围的世界。其中一些是非常简单的模型。玩躲猫猫的婴儿正在学习这些模型中最基本的一个:对象持久性,即世界上的对象继续存在,即使我们不能立即感知它们。这个模型对于帮助我们理解周围的世界非常有用。我们闭上眼睛,当我们重新睁开眼睛,发现世界与我们离开时大致相同时,我们并不吃惊。我们放下东西,走开,当我们再次需要它的时候,我们回到同一个地方去找它。这种期望对我们的世界体验至关重要,以至于我们很容易忘记它是一种心理模型——我们头脑的一种构造。我们仍然相信物体存在于我们的感知之外,不是因为我们有任何直接的证据,而是因为这样做对我们非常有用。
人类思维中还有另一个基本模型:心理理论。这是一种通过引用隐藏的精神状态的存在来解释另一个存在(或你自己)的行为的能力——信念、情感、意图、知识。这个模型允许我们通过把复杂的行为变成一种叙述来理解它。智力是我们告诉自己的一个故事,用来解释不可预测的行为。
也许人类创造的最复杂的模型就是我们所知的叙事。一个情节。对一系列事件的描述,通过一些因果联系、某种目的感和内在一致性——更深层次的含义——联系在一起。典型的例子来自 E. M .福斯特的《小说面面观》。
“国王死了,然后王后死了”是一个故事。但是“国王死了,然后王后悲痛而死”是一个情节。”
换句话说,一系列事件本身只是无意义的噪音。将它们转化为有意义的东西是某种因果感、必然性——可预测性。
在过去的九个月里,我探索了多种人工智能,从极其简单到极其复杂。我已经建立了一个模型,它可以将来自成千上万个数据点的信息压缩成一部电影的含义的数字度量。我做了一个模型,可以让画出新奇的艺术品。但是实际上最接近感觉的模型智能可能是所有模型中最简单的——它简单地引导屏幕上小点的移动。圆点的运动,追逐或逃跑,是由一些简单的规则控制的——几行代码和一些基本的几何图形。但是对于观察者来说,呈现出来的是一个复杂的人物和故事的世界。追的小点很友好,也很热切。逃跑的小点胆小害羞。友好点对害羞点的示好注定会不断被拒绝。这些个性和情节在法典中是不存在的。它们只存在于观看比赛的人的想象中。换句话说,它们的智力不是点的头脑的属性,而是观察者的头脑的属性。
The human mind is a pattern-forming machine
在系统理论中,他们用“涌现”一词来描述由许多简单得多的系统相互作用而产生的复杂行为现象。关于假设的“有意识”人工智能的一个普遍信念是,它的意识必须是一种涌现的属性——一个足够复杂的系统,具有足够的处理能力和足够的输入数据,将以某种方式“醒来”到意识。但我认为这种思维模式从根本上误解了智力是什么——它不是一种内在的品质,而是一种观察到的品质。
换句话说,在一个复杂的系统中醒来,将它从一个没有生命的机器转变成一个有意识的生物的神奇“火花”,不是它思考能力的产物,而是我们移情能力的产物。在未来的某个地方,不会有什么神奇的时刻,一台机器会跨过某个复杂的临界门槛,通过电脑屏幕回头看我们。这个门槛存在于我们每个人的内心,每天都在以微小的方式被跨越。
每当我们形成模式的大脑将一台机器的行为转化为个性时,这台机器对我们来说都是活生生的。每当我们咒骂一台不可靠的笔记本电脑时,每当我们默默感谢我们的音乐播放器做出了一个伟大的选择时,每当我们对电子游戏中的一个角色感到同情时,一个小小的意识就会短暂地复活。
这种思维方式向我们展示了一个多么令人兴奋的世界啊!从最简单的分类器到最复杂的图像生成器,每一种算法都是人类思想的产物,是人类信念的编码。它们不仅仅是工具,而是脱离实体的思想,是在这个世界上活动的智能碎片。当我们与算法互动时——当我们看到电影推荐时,当我们获得银行贷款预批准时,当我们通过安全门扫描时——我们正在与人类的一个小映像互动,一个微小的思维片段。他们接受训练的数据,他们考虑的数据特征,他们成功和失败的参数,都反映了创造它们的人的思想和愿望,希望和价值观。机器绝不是外星入侵者,也不是外来威胁,它只是一个承载我们思想和感情的新容器。从真正的意义上说,他们是我们的孩子。机器不会取代我们,它们是我们。
就像我们的孩子一样,他们继承了我们的偏见。我们已经看到了无数嵌入其创造者假设的算法的例子。在我最早的一篇关于这个主题的文章中,我展示了,例如,我自以为了解针织的狂妄自大是如何导致我创建了一个从根本上误解了如何推荐针织图案的模型。我们无法理解机器智能,这让它们披上了公正的外衣。我们从他们那里毫无疑问地接受了我们从一个人那里永远不会接受的判断。因为我们对他们的人性视而不见,所以我们对他们的易错性视而不见。
九个月前,当我开始这个系列的文章时,我写了关于工业革命和它所引起的剧变。我相信,类似的剧变很可能在我们的未来再次发生。但是我在这些文章中所学到的,也是我在这篇文章中试图论证的是,这些根本上是由人类因素引起的——由人类的信仰、人类的恐惧和人类的希望引起的。这些算法有时复杂,有时令人惊讶,但它们从未如此令人惊讶或如此复杂,以至于我们无法理解,并在某种程度上预测它们可能的优缺点。
对于人工智能的未来及其对我们世界的影响,我既不是悲观主义者,也不是危言耸听者。我相信,在未来,我们都将把这些算法简单地视为我们每天都在与之互动的人和系统的延伸。如果他们扩大和放大某些团体对我们的权力,那么我希望他们也将扩大我们抵抗这种权力的能力。我希望对这些算法、它们的起源和它们的潜力有更多的了解,这将有助于我们和它们一起建设一个更美好的未来。
感谢阅读!这篇文章是我自 2019 年初以来每月发布的一系列文章的结论。如果想从头开始,系列第一篇短文可用 此处 。
对话式人工智能如何改善社交讨论!
原文:https://towardsdatascience.com/how-conversational-ai-is-improving-social-discussions-9c8dd2b5122b?source=collection_archive---------43-----------------------
Photo by William Iven on Unsplash
在脸书、推特、博客和 WhatsApp 的世界里,你永远不知道什么会出错。你甚至不知道你分享的内容是对还是错。但你需要知道的是,每个分享的帖子都在产生影响——积极的或消极的。在某些国家,一些病毒内容的影响可能是毁灭性的。
考虑到所有这些现在或未来的挑战,这项研究工作由 Jigsaw 和谷歌反滥用技术团队发起。许多有趣的项目正在进行中—
对话式人工智能
Conversation AI 是一个合作研究项目,旨在探索将 ML 作为更好的在线讨论工具。
在这个项目中,研究人员一直在试图解决这样的问题—
- 机器学习方法如何帮助在线对话?
- 机器学习可以理解对话的哪些方面?
- 使用机器学习辅助在线对话的风险和挑战是什么?
该团队建立了一个名为“透视 API”的 API,可以实时分析某些内容的“毒性”。它也可以给内容制作者一个更好的视角(有人发表评论),警告他们关于毒性。开发正在进行中,可以根据要求进行预览。
我在哪里可以读到更多这方面的信息?
你可以在https://www.perspectiveapi.com/#/和https://conversationai.github.io/上阅读更多关于对话式人工智能的内容
Jigsaw 有一个博客也谈到了这个问题——https://medium.com/the-false-positive
这些都可以用在哪里?
该 API 有许多潜在的用例,其中一些将在下一页中提到—https://github . com/conversationai/perspective API/wiki/perspective-hacks
还有谁参与了这件事?
正如网站上提到的,有来自维基百科、纽约时报、《经济学家》和《卫报》的团队。
我如何尝试这个?
你可以从https://www.perspectiveapi.com/#/申请 API
你能给我看一些样品吗?
是的,这是一些样品
Experiment -1
还有一些,
Experiment -2
希望这一发展顺利,我们应该看到这些正在实施,以避免任何后果!
总的来说,这些努力是值得称赞和赞赏的。
嘿,如果你喜欢这个故事,看看中级会员!只要 5 美元/月!
你的会员费直接支持我和你阅读的其他作家。你也可以在媒体上看到所有的故事。
现在就成为中等会员吧!
对话聊天机器人营销如何成为电子商务的未来
原文:https://towardsdatascience.com/how-conversational-chatbots-marketing-is-the-future-of-ecommerce-6743268caa11?source=collection_archive---------13-----------------------
对话聊天机器人营销如何成为电子商务的未来
如果你最近没有生活在岩石下,那么你一定熟悉最新的营销趋势- 聊天机器人。他们无处不在。 品牌正在使用聊天机器人完成几乎每一项可能的任务 在客户服务、更好的销售和营销、有效的团队沟通等方面。结果是富有成效的,可以肯定地说,机器人将会继续存在。
来自不同行业的不同投资者对聊天机器人的潜力充满信心,因此他们全心全意地为我们的机器人朋友的成长和发展做出贡献。随着技术进步推动增长,bot 技术确实取得了长足的进步。从简单的基于菜单/按钮的聊天机器人到上下文相关的人工智能聊天机器人,我们有丰富的选项可供选择。
在这篇文章的最后,我会让你了解聊天机器人的基本知识和它们的工作流程,聊天机器人在电子商务中的重要性,以及它们如何塑造营销的未来。
聊天机器人:基础知识
虽然我们经常使用聊天机器人并与之互动,但我们可能不知道它的基本术语和工作原理。让我们澄清一下聊天机器人的流言蜚语。
什么是聊天机器人?
聊天机器人是一种小型计算机程序,用于模拟人类对话的方式,并自动与真人互动,以帮助他们解决问题并完成任务。
聊天机器人营销可能在过去几年里蓬勃发展,但机器人已经存在了一段时间。这个概念可以追溯到 1950 年,当时艾伦·图灵发表了他关于人工智能的开创性论文计算机器和智能。这个概念的发展和进步导致了 ELIZA,一个由 Joseph Weizenbaum 在 1966 年设计的简单程序。从那以后,聊天机器人技术的发展只看到了上升,并以其在改善销售和营销方面的潜力让我们感到惊讶。
什么是聊天机器人脚本?
聊天机器人脚本可以被定义为预先计划好的对话消息,机器人对用户的查询做出响应。根据用户的选择和意图,机器人将遵循特定的对话流程。流中的所有响应组合起来组成脚本。
聊天机器人脚本对对话至关重要。聊天机器人的脚本取决于商业目标和购买者的旅程。编写聊天机器人脚本时,需要考虑以下几点:
专注于你的目标
保持简洁明了
表达清楚
自然而不机械
改变你的回答
您的聊天机器人脚本和响应还取决于您正在实现的聊天机器人的类型,这将带我们进入下一部分…
聊天机器人:类型
认为所有聊天机器人的工作流程和处理过程都相似是不正确的。由于对机器人的深入和广泛的研究,我们现在有许多聊天机器人类型可供选择。一些业务任务可以由基本的机器人轻松完成,而一些则需要高级机器人。
让我们来看看市场上有哪些不同类型的机器人:
基于按钮/菜单的聊天机器人
顾名思义,这些聊天机器人为用户提供了多个菜单或按钮供选择。根据用户选择的按钮,机器人会列出下一组按钮选项供用户选择。这形成了聊天机器人响应的多级分层结构。
来源
这些是最广泛使用的聊天机器人,因为它们简单且不复杂。这些工具适合回答售前咨询和多个常见问题,并引导用户浏览您的在线商店或网站。当涉及到包含许多变量的复杂方程时,这些就变得无效了。
基于关键词的聊天机器人
这种聊天机器人使用人工智能(AI)来挑选和捕捉用户查询中的关键词。使用和处理这些关键字,机器人回答客户的查询。它的工作就像一些过时的搜索引擎,充分利用输入的关键字,并相应地回复。
来源
这样做的好处是,机器人只会回答预先加载的内容,不会跑题。它们的局限性和它的优势是有联系的。这些将无法捕捉拼写错误,是高度相关的。
自然语言处理聊天机器人
这些都是最先进的,使用机器学习和人工智能为用户提供最佳体验。对于非技术人员来说,对话式人工智能聊天机器人的架构有点复杂,但它提供了它所承诺的东西。记住用户的偏好和特定的用户对话,随着时间的推移随机应变是他们的亮点。自然语言处理聊天机器人本质上是高度上下文相关的,采用以数据为中心的方法与用户进行交互。
他们甚至理解并考虑拼写错误的用户查询,以提供出色的用户体验。
来源
在上面的例子中,你可能会注意到机器人在提问、初始化对话和继续流程方面相当聪明。
聊天机器人变革电子商务的不同方式
理解聊天机器人并没有看起来那么难 。它们易于与其他应用程序集成,这使它们成为不同行业的首选。在聊天机器人的众多使用案例和相关行业中,有一个明显的商业领域正在发生革命性的变化,那就是电子商务。世界各地的网店店主认为聊天机器人是解决他们共同问题的终极方案。
让我们来看看机器人是如何为店主和顾客改善电子商务游戏的:
更好的用户体验
在你的电子商务计划中加入对话机器人的最大优势可能是简化用户体验,并提供值得记住的独特客户体验。
我们举个例子来理解这一点。
来源
作为顶级美容产品品牌之一,丝芙兰发布了其个人助理机器人,集成了 Kik 和 Facebook Messenger 等即时通讯应用。他们的助手的突出特点是,它允许用户尝试该品牌的新外观和美容产品。使用者可以清楚地知道一种新的口红或睫毛膏会给他们的面部外观和整体形象带来什么样的效果。用户提供他们的图像,剩下的由机器人负责。
这让顾客免去了去实体店试戴产品的麻烦。虽然机器人模拟不能取代自然的外观,但它无疑将用户体验带到了一个新的高度。
与丝芙兰类似,有许多品牌正在使用聊天机器人来增强在线用户体验,并使他们的在线商务变得更好。
改善客户服务
“只赚钱的生意是糟糕的生意”——亨利·福特
我们都明白,提供令人惊叹的客户支持是所有企业的头等大事。没有顾客就没有生意,品牌努力实现百分之一的顾客满意率。
聊天机器人在帮助客户方面找到了它们最重要的用例。事实上,许多公司将机器人纳入他们的商业战略,仅仅是为了这个唯一的目的。
来源
客户服务中最大的挑战之一是为我们的客户提供全天候服务。机器人永远解决了这个问题。
考虑一个公司和支持团队,他们可以在一周的任何一天的任何时间为您服务!
许多人都像我们的支持代表一样,在典型的工作日朝九晚五的工作时间从事工作。在深夜或周末联系支持人员的想法从未有过,有了聊天机器人为我们服务,我们就有了巨大的竞争优势。
这无疑会给用户留下印象并建立信任。他们被确保有好的伙伴,并传播正面的口碑。
数据驱动的产品推荐
语音搜索智能设备和人工智能的兴起已经超出了全球营销人员和客户的预期。越来越多的人选择亚马逊 Echo、谷歌 Home 等智能音箱。人工智能和语音搜索等技术的结合正在改变人们在线购物的方式。
这方面的一个进步是将聊天机器人整合到家用设备和电器中,这已经在我们周围发生了。LG 的 SmartThinQ 家庭自动化中心就是一个完美的例子。它与亚马逊 Alexa 的集成将让你对你的家用电器 有很大的控制权。例如,它会自动估计您洗衣时使用的洗涤剂数量,并在需要时自动重新订购。
当技术彼此重合时,就会有无穷无尽的用例与可能性。对话机器人和电子商务也是如此。
自动化销售线索生成和确认
对于电子商务企业来说,中型到大型库存非常常见,客户有时会迷失在寻找所需商品的过程中。聊天机器人可以成为您的解决方案,轻松引导客户找到他们想要的东西,让他们的生活更轻松。
聊天机器人的高可扩展性使它们能够发起与网站用户的对话,并隔离感兴趣的用户。当我们将自然语言处理和人工智能添加到机器人的工作流程中时,它们实际上比我们常规的实时代理在线索生成方面表现得更好。
随着时间和技术的顺利发展,一些聊天机器人特别针对销售支持。随着时间的推移,这些系统会收集和存储客户信息,并自动将信息传输给销售团队以达成交易。
聊天机器人引导一代 慢慢被证明是营销人员最喜欢的聊天机器人应用,因为它为全球企业带来了大量的引导。
客户数据的宝库
尽管这一切都归结于使用数据来改善消费者互动和销售,但这是聊天机器人的最大用例之一。我们倾向于在交谈时分享大量信息,而不管对方是人还是机器人。对话式营销具有这种独特的优势,即学习和利用消费者的习惯以取得良好的效果。
聊天机器人存储了大量消费者数据,如过去的购买历史和一段时间内的购买习惯。下一次同一顾客访问商店时,这些数据被用来提供无缝的用户体验,并更容易地转换他们。
这些丰富的消费者数据也可以用来向这些客户做广告。了解客户的习惯并跟踪他们的购买历史就像是对未来有所了解。你可以在正确的时间向他们展示正确的广告,这将带来更好的转化率和销售额。
奖励客户忠诚度
企业在客户忠诚度项目上花费了大量的资金来奖励他们的忠诚客户,并把他们转化为品牌拥护者。这种做法没有错,但聊天机器人也发现了它们在奖励客户忠诚度方面的应用之一。
领先的时尚品牌正在树立使用对话聊天机器人与精通技术的客户互动的典范。英国奢侈品牌博柏利允许它的顾客和粉丝使用它的机器人做很多事情。
来源
从查看时装秀的“幕后”外观到直接从应用程序购买服装,从向之前与机器人互动的用户发送推送通知到提供与公司代理的实时聊天,博柏利通过其先进的聊天机器人真正提高了标准。
另一个尝试聊天机器人增强用户体验的领先品牌是奢侈手表公司爱彼。
来源
该公司是首批使用机器人的手表公司之一,最近推出了聊天机器人,允许用户浏览最佳手表系列,包括最受欢迎的手表。顾客可以评估一只手表的所有功能,或者找到并参观最近的商店,在现实生活中试用手表。
聊天机器人是一种独特而有效的方式,可以联系到老客户和忠诚的客户,并让他们感到受到重视。
完成交易
虽然许多企业仍然喜欢一个活生生的代理人或代表来完成销售,但这种情况正在逐渐改变。机器人有能力直接销售并为用户下订单,而不需要一些人类的接触。
早些时候,一些人曾批评机器人无法完成订单和销售。如今,风水轮流转。越来越多的人喜欢聊天机器人,因为他们知道他们将能够通过机器人完成购买。
一种被称为销售聊天机器人的特定类型的机器人正在被公司实施,以改善他们的销售漏斗。这些还提供了对第一次尝试没有转换的客户进行跟进的选项。
聊天机器人:统计
聊天机器人,甚至是电子商务聊天机器人,已经出现了。这不是什么新鲜事。聊天机器人的使用呈指数级增长,而且似乎不会很快放缓。
2016 年和 2025 年全球聊天机器人市场的规模(百万美元)
来源
- 关于电子商务,34%的受访者表示,他们更愿意通过聊天机器人或虚拟助理——聊天机器人杂志
- 实时聊天软件作为客户与企业互动的一种方式,有 73%的满意度——G2 的 脸书聊天机器人指南
- 聊天机器人可以节省高达 30%的客户支持成本— Invespcro
- 21%的消费者认为聊天机器人是联系企业最简单的方式——ubi send
上述统计数据足以证明聊天机器人在包括电子商务在内的不同商业行业中的统治地位。这些还强调了一个事实,即人们如何容易地习惯于对话式商务,以及世界各地精通数字的观众如何接受对话式机器人。
结论
我们生活在这样一个数字时代,竞争激烈,顾客的购买决定完全取决于他/她获得的体验。顾客的期望是无限的,品牌每次都越来越难以实现。单靠人力是不可能提供无缝的用户体验的。
进入:对话聊天机器人
从一项完全引进的令人生畏的技术,到突破人们的日常日程,聊天机器人已经取得了一些有价值的进展。聊天机器人与其他应用程序集成的便利性以及它们的多种用例使它们被广泛接受。电子商务已经将聊天机器人纳入其核心营销战略。聊天机器人对电子商务网站的登陆页面转换和搜索引擎优化也有影响。
就像这个星球上的任何其他技术一样, 伴随着我们的 AI 机器人朋友 也有挑战和机遇。如果你还没有探索充满希望的对话聊天机器人世界,现在是时候了。如果你是世界上任何地方的网店店主,这就更重要了。
你对聊天机器人作为营销和商业的未来有什么看法?你已经在使用聊天机器人了吗?为什么不呢?
请发表你的意见。我在听。
创建人工智能学习小组如何提高我的技能并让我找到工作
原文:https://towardsdatascience.com/how-creating-an-ai-study-group-boosted-my-skills-and-got-me-a-job-b231c666a1ae?source=collection_archive---------15-----------------------
这个想法是在人工智能专家亚历杭德罗·绍切多在我大学的一次演讲中出现在我脑海中的。这感觉真的很令人兴奋:有大量的学生对人工智能感兴趣,而在我的大学里没有这样的学习小组。那时我在等什么?
Photo by Kane Reinholdtsen on Unsplash
这就是创建一个学习小组如何提高我的人工智能知识并帮助我获得机器学习暑期实习的故事的开始。我从来没有怀疑过,它会对我和加入这个团体的同学产生如此大的影响。我不得不投入大量的时间来组织人工智能协会,这让我有时睡眠不足,但这绝对是值得的。这也是我最终获得机器学习工作的主要原因之一。希望这篇文章能启发你创建自己的 AI 学习小组!
我喜欢数据科学的原因是,它吸引了许多对人工智能和数据科学充满热情的志同道合的人。这就是为什么我想在 Linkedin 上与你联系!您也可以通过我的个人网站留下任何反馈和问题😉
它是如何开始的
University of Southampton AI Society logo
就在人工智能演讲结束后,我问了几个学生,他们对创建一个人工智能社会的想法有什么看法。他们似乎都很感兴趣,所以我决定进一步探讨这个想法。我联系了我的几个朋友来帮助我创建人工智能协会。他们很乐意帮忙,所以与此同时,我们开始准备发布活动。这是一大块要处理的工作,因为我们也在为即将到来的研讨会创建材料。启动活动非常成功:大约 60 名学生参加了我们的第一次活动。在本学期中,我们成功地保持了研讨会的高出席率,我们还聘请了 8 位不同的演讲者来主持研讨会!
你和他们一起学习
Photo by Priscilla Du Preez on Unsplash
就我个人而言,我从我的朋友那里学到了很多新的人工智能概念,我甚至不知道他们的存在。他们向我展示了许多有用的、不太受欢迎的 Python 库,并向我介绍了更多 AI 方面的小众主题。我还看到了许多不同的编码风格,它们帮助我适应更好的编程实践,并教会我如何审查代码。
学习小组的美妙之处在于它带来了一个对某个主题充满热情的社区。让自己负责和他人一起学习新概念和新技术要容易得多。如果你在代码中有 bug 或者你很难理解某个主题,你可以交流你的想法,让自己了解来自行业的最新消息或者互相帮助。我们都同时成为老师和学生。与在大学里的普通讲座相比,研讨会还能让你在会议期间更加投入和专注。通过行动学习更加有效,因为它也测试你的理解能力。
同龄人的压力有所帮助
Photo by Matt Lee on Unsplash
我在图书馆呆了很多个晚上,为即将到来的研讨会准备代码和幻灯片。这绝对是一项耗时的任务,但我很感激这小小的推动帮助我扩大了知识面。没有不准备材料的选择,因为学生在等待下一次研讨会。
当你致力于某事时,你经常会发现自己要走出舒适区去实现它。它可以采取多种形式:举办研讨会,介绍演讲者或为学习小组编写代码。人们期望你会做到你所承诺的,这可以给你一点“踢屁股”来按时交付。从我的经验来看,这只是一个惊人的个人成长机会。
它显示了你的激情
Photo by Ian Schneider on Unsplash
有什么比创建一个学习小组来证明你的热情更好的呢?这表明你在努力扩展你在这个话题上的知识,并证明你可以采取主动。
在上个学期,我注意到在我更新了关于那个学习小组的详细信息后,我开始收到更多的面试邀请。最后,我得到了一家公司的暑期实习机会,面试中的一个主要问题是关于人工智能协会的😅
它让你被认可
Photo by Miguel Henriques on Unsplash
有几次,我发现自己处于这样一种情况:我第一次见到的人已经认识我了,因为我是人工智能协会的主席。他们有时候也会假设我一定是 AI 方面的专家,这是不真实的(我相信你只有完成 P.h.D,或者有了几年的工作经验,才能称自己是 AI 专家)。
领导一个学习小组可以扩大你对同一件事充满热情的人际网络!谁知道它什么时候会变得无价:也许你会找另一份工作,或者你会为你的生意争取第一批客户?
如何创建学习小组?
Photo by Jon Tyson on Unsplash
一点也不难!问问你的同事、学生或朋友,他们是否想创建一个学习小组。它可能有多种形式:从组织每周一次的非正式会议,到与演讲者或会议一起创造更大的事件。想想你和你的朋友能投入多少时间,找一个你能举办活动的地方。开始时可能会很难,但是请你的朋友帮忙并听取反馈,这将有助于你扩大你的学习小组!
感谢您阅读文章。如果你对创建学习小组的想法感到兴奋,请通过 Linkedin 联系我。我很乐意给你一些建议!
数据分析如何解决谋杀案
原文:https://towardsdatascience.com/how-data-analytics-are-solving-murders-1cdac5432d6e?source=collection_archive---------23-----------------------
毫无疑问,你读过侦探小说或看过犯罪电视节目,在这些节目中,犯罪调查人员辛苦工作数月,试图解决谋杀案和其他案件。
他们花了无数的时间研究当前的和存档的数据,坚定地试图将这些点连接起来并弄清楚。不幸的是,所有的努力总是没有回报。然后,随着执法官员决定暂停对那些仍未解决的事件的调查,案件变得“冷”了。
然而,今天的执法官员可以使用一项前所未有的技术:大数据分析。让我们看看它如何帮助解决谋杀和其他犯罪。
处理比人类更多的数据
大数据分析软件的主要优势之一是,它可以比人类更快地评估大量数据,并发现他们可能错过的趋势。因此,从破案的角度来看,数据分析可以帮助抓住试图逃避逮捕的罪犯。
例如,科罗拉多州的一些社区安装了车牌阅读器,记录进出这些地方的每辆车的车牌号码。
一位支持使用这项技术的丹佛警察局长提到,70%的犯罪都与车辆有关。然而,一些人担心这项技术对隐私意味着什么,特别是如果网络罪犯获得了这些数据。
数据分析软件的速度和执法官员收集数据的各种方式为更有效地挖掘信息开辟了新的机会,并且与以前所需的方法相比,大大减少了人力资源需求。位于诺克斯维尔的田纳西大学甚至有一个谋杀问责项目,其中一个小组开发了一种算法来帮助连环杀人案。
此外,必须记住,数据分析工具收集的信息也有助于预防犯罪。印度警方也是使用这种数据分析的人之一。它们纳入了犯罪行为模式、犯罪周年纪念日、假释日期和条件等,因为它们依赖数据来帮助它们发现可以让人们更安全的有用模式。
家谱数据也能发挥作用
家谱网站和 DNA 服务,帮助人们了解更多关于他们的祖先已经进入主流。但是,这样的数据不仅仅可以告诉人们他们的家庭历史。例如,2019 年 5 月,警方披露了他们如何使用 DNA 信息和家谱网站上的数据来侦破一起数十年前的谋杀案。
研究人员使用了一个名为 GEDMatch 的遗传信息数据库,通过查阅数百人的大家庭树来拼凑信息。他们在前进的道路上遇到了挑战,但最终,结果比他们所希望的更加成功。因为凶手还供认了另外三起谋杀。
电话记录往往能提供线索
根据一项统计,多达 90%的 T2 世界数据都是在短短两年内创造出来的——从 2010 年到 2012 年。此外,如果你想想人们在给朋友发短信、玩游戏或使用云服务时产生的海量数据,很明显,数据科学家们在协助执法人员侦破犯罪案件时不乏可挖掘的数据来源。
呼叫详细记录(cdr)包括一个他们在调查期间可以查看的数据类型的示例。移动电话运营商出于商业目的而收集 cdr,一些较大的运营商每天会收集数十亿 cdr。CDR 包括信息,该信息包括识别码、呼叫的持续时间以及为接收机和呼叫者两者路由通信的特定蜂窝塔。
主要通过电话与人沟通的公司会定期捕获销售线索数据,以帮助他们管理客户需求。通过在电话中与客户交谈时实时了解有关客户的信息,电话营销专业人员可以定制他们的对话,使其最大程度地具有相关性。或者,企业可以使用呼叫数据通过电子邮件或邮政邮件向人们发送适用的通信。
2016 年,纽约州皇后区一名名叫卡瑞娜·韦特兰诺的女子跑步时被谋杀,检方用手机记录将这名最终被判有罪的嫌犯放在了犯罪现场附近。此外,手机的网络浏览器包含 137 个与犯罪相关的链接。
智能扬声器录音可能变得越来越重要
许多人喜欢智能音箱,因为它很容易融入日常生活。但是,一些涉及智能扬声器的谋杀案让人们想知道未来会怎样。
例如,在新罕布什尔州的双重谋杀案中,一名法官命令亚马逊发布亚马逊回声记录,称说话者可能拾取了攻击的部分内容。
检察官要求智能扬声器数据的情况仍然不常见。但是,随着越来越多的家庭急切地接受智能扬声器技术,随着执法官员彻底调查案件,这些设备包含的数据可能会越来越有帮助。
促进犯罪调查取得突破性进展
这个概述向你展示了执法官员已经在应用技术帮助他们查清谋杀案的一些方法。同样很容易看出同样的技术是如何帮助其他种类的犯罪的。无论犯罪者是否意识到这一点,他们都会留下数据痕迹,分析师可以利用这些数据来跟踪他们的行动和行为。
这意味着随着整体成功率的提高,调查人员花在审查案件上的时间可能会减少。
图像经由像素
数据分析如何帮助成为更好的企业家
原文:https://towardsdatascience.com/how-data-analytics-is-helping-small-businesses-re-imagine-growth-opportunities-a33f3defe744?source=collection_archive---------25-----------------------
了解商业智能(BI)和数据分析如何消除业务中的不确定性,并提供有助于决策和预测的见解。
商业智能和数据分析是任何成功的商业冒险不可或缺的一部分。业务分析在行业中有其专门的市场,并且通常是一种受欢迎的方法,以跳过猜测并加快增长速度。借助数据分析,您可以获得对业务的宝贵见解。这可以帮助你调整你的战略和投资,使你的投资回报率仍然非常有吸引力。
大数据和分析的兴起
大数据和数据分析的市场价值与日俱增,并将继续增长。IDC 预计,到 2025 年,全球创造的数字数据总量将达到 163 兆字节(10 亿 TB)T4。大约 60%的数据将由企业组织创建和管理。如果数据分析和 BI 不将这些单纯的数字转化为可操作的见解,海量数据将毫无用处。这解释了这两个领域在现代商业实践中的巨大重要性。
分析结果和发现有助于您做出明智的商业决策。它使信息收集、处理和分析更加准确和容易。您还可以借助自动化软件等技术来完成分析工作,并快速跟踪洞察力生成过程。
数据分析有很多方法可以帮助你成为一名成功的企业家。这篇文章将阐明这些优点-
快速追加销售和交叉销售机会
商业智能为您提供了绝佳的交叉销售机会。BI 工具可以帮助您收集数据,分析工具可以帮助您分析收集的信息。你可以在分析完数据后,适当地、更戏剧性地吸引你的客户。这些数据让你清楚地了解你的潜在客户、他们的反应和期望。这有助于你制定一个最适合你的企业的策略。整个过程会产生更好的交叉销售策略。
如果你想探索交叉销售领域,你首先需要知道你的客户的需求和期望。B2B 业务持有人需要仔细看看他们的客户评论。他们需要讨论吸引现有客户的点,以及为什么客户仍然与公司做生意。
就 B2C 公司而言,流程略有不同。他们通过调查、社交媒体活动、社交倾听和其他消费者评论计划等选项直接与零售客户联系,以了解客户的期望和需求。
这些整个过程的简单格言是让客户获得更好的服务,以便他们继续与公司保持富有成效的业务关系。要做到这一点,你可以为你的客户提供特殊服务。它适用于 B2B 和 B2C 公司。这将使你的客户满意,你将能够不费吹灰之力就获得更多的收入。
实现惊人的业务效率
商业智能和分析在很多情况下是救世主。它有效地回答了你对你的企业的所有疑问。这有助于你对正在发生的事情有一个清晰的认识,这样你就可以快速做出正确的决定,而不是被不正确的猜测弄得措手不及。如果你不想阅读关于你的业务的长篇报告,那么你肯定可以从 BI 那里得到帮助。
适当的 BI 可以让您在几分钟内获得大量数据的准确可视化表示。它还组织和总结收集的数据。因此,你可以在你面前得到最新趋势的正确图像。BI 使用治理、云仓储和其他工具和方法来及时提供有用的数据。您可以在任何地方、任何设备上访问收集的数据。这样从你这边节省了很多时间。
对于希望经常一目了然地监控其 KPI 的企业家来说,一个功能齐全、视觉上吸引人的 BI 系统将是一个福音。
削减成本
无论企业规模大小,成本都是其中一个重要因素。每个企业都是不同的,需要在正确的时间投入正确的资源。例如,在圣诞节或新年等节日期间,礼品店的销售额可能会上升。
另一方面,珠宝和花店在结婚季节或情人节会有额外的生意。这意味着,每个企业在一定时间内需要灵活的劳动力,并且在一年中的一定时间需要额外的努力和投资。
BI 可以帮助您确定一个完美的战略,以便您可以在正确的时间投资人力资源,如建模和人员配置预测。这减轻了成本开销的风险,并在数据分析和 BI 的帮助下更好地利用资源来最大化 ROI。
学习客户行为模式,更好地为他们服务
你的客户的行为可以成为创造收入的重要工具。如果你能知道他们在想什么,那么你就能为他们提供更好的定制解决方案。在这种情况下,商业智能可以帮助你。
您可以使用 Microsoft 365 dynamics for customer service来生成有用的报告,为业务中的洞察力生成增添巨大的威力。这些报告包含有关客户需求、期望、想要什么、购买什么、如何购买等的详细数据。
这有助于你理解他们的心态,从而让你思考以客户为导向的商业策略。这样,你可以给他们适当的服务,并在这个过程中获得丰厚的红利。
结论
为了发展,你的企业不能依靠水晶球凝视。你需要的是一种更全面的方法来做出准确的预测,并制定以增长为导向的战略。这正是数据分析和商业智能(BI)发挥作用的地方。
收集的数据可以转化为丰富的见解,并帮助您更快地做出决策,从而帮助您吸引客户以获得更好的投资回报。BI 还有助于做出更明智的决策和投资,并节省人力、时间和资金。
数据如何帮你赢得选举
原文:https://towardsdatascience.com/how-data-can-win-you-an-election-3093b0bf76ab?source=collection_archive---------18-----------------------
《剑桥分析》影响了美国和英国的选举。他们是这样做的。
Source: http://el.ozonweb.com/wp-content/uploads/2014/01/Yayoi_Kusama_David_Zwirner_1.jpg
2018 年,数据分析公司 Cambridge Analytica 被披露获得了 5000 万脸书用户的数据,并利用这些数据进行高效的政治广告定位,一名前员工称之为“武器级”
自这起丑闻以来,关于数字世界中的脸书、数据安全和民主有很多讨论,这是理所当然的,而机器学习和人工智能技术的爆炸推动了人们对数据分析和算法设计的兴趣。在这些事情之间,人们也许能够形成一幅关于社交媒体在做什么,以及它是如何做的连贯画面。
但是理解这项技术并不全面。仅凭技术眼光,人们只能合理解释詹姆斯·布勒德——引用科幻作家伊恩·班克斯的话——“无限乐趣空间”——计算机生活的世界。我们并不生活在那个世界里,如果我们对数据和社交媒体的担忧——从根本上说——是关于它们如何产生影响,我们需要记住现实世界是什么。只有理解社交媒体如何影响现实世界的变化,才能让我们全面了解社交媒体实际上是如何工作的。
推动世界的杠杆
无限乐趣空间最好理解为一个相互关联的网络,在这个网络中,成千上万(如果不是数百万)的数据点被分析成相互关联的模式。空间来自于建立这些关联的联系,每个关联代表信息旅行的一个新维度。这就是无限出现的地方,也是人类思维存在的地方:巨大的相关结构可以被描述为由几十或几百个我们甚至无法想象的维度组成。电脑当然没有这个问题。
社交媒体收集的大数据只有在我们可以要求计算机进入无限有趣的空间并拉出一条我们可以使用的数据时才有用。这意味着我们需要了解这些数据是什么,我们需要知道我们需要什么数据。这就是行为洞察力发挥作用的地方。
行为经济学和认知心理学——统称为行为洞见——在过去十年中已经成为公共政策中极其重要的领域。轻推——决策制定方式的微小变化会对结果产生巨大且可预测的影响 —已被世界各国政府广泛采用。例如,通过让 401k 计划自动参与而非选择性参与,推动已经被证明可以增加储蓄。
比方说,如果我们想影响一个人去投票给某个候选人,轻推可能是我们应该做的。有些技巧相当直接——用红色来吸引人的眼球,用大写字母来传达信息的重要性。但这只是行为知情广告。个性化在哪里?精度在哪里?
精确制导导弹
当我们说有针对性的广告时,我们实际上谈论的是个性化的推动。通过使用大量的数据,行为科学家可以构建对个体非常有效的提示。这些是超推动——大数据和行为洞察的结合——这就是行为目标的工作方式。
你想赢得选举吗?也许你想让人们购买你的产品?或者,你想增加你的社交媒体追随者?好,我们开始吧。
第一步——控制
首先,做一些研究。找一个对照组,连同他们的社交媒体资料,找出一些行为特征。他们不耐烦了吗?他们厌恶风险吗?他们容易受权威人物或他人意见的影响吗?这些特征都可以通过相对简单的心理测试来识别。行为科学家花了数年时间来完善这些测试,它们具有无限的适应性(比如,如果你想确定谁有可能投票,这些测试可以做到这一点)。
第 2 步—地图
其次,在这个对照组上测试你计划的广告,并衡量其效果。如果你有兴趣让他们支持某个政治候选人,衡量一下他们在看到广告后投票给他们的可能性有多大。如果你对销售产品感兴趣,衡量他们购买该产品的可能性。目标不是找到最有效的广告;这是为了将效率映射到行为特征上。
第三步——桥接
第三,分析对照组的社交媒体数据。尝试找出心理测试发现的行为特征和社交媒体上的个人行为之间的模式。不耐烦的人点击率低吗?易受影响的人会发更多帖子吗?投票的可能性与年龄、地理或教育有关吗?
- 第三,分析对照组的社交媒体数据。尝试找出心理测试发现的行为特征和社交媒体上的个人行为之间的模式。不耐烦的人点击率低吗?易受影响的人会发更多帖子吗?投票的可能性与年龄、地理或教育有关吗?
第 4 步—申请
如果我们有一个 1000 万人的数据库,并且我们已经完成了前面的步骤,我们现在可以推断一个人是否可能不耐烦,例如,仅仅通过查看他们的社交媒体数据。然后我们可以针对他们做一个吸引不耐烦的广告。例如,一张图片可能比一篇文章更有效地向他们传达信息。这是过度刺激。
第 5 步—更新
最后,更新。测量点击率,测量网站流量,不断更新你的数据库,如果可能的话扩大数据库。每一次,推论会变得更准确,推动会更有效,数据会更有力。很快你就能建立起影响力的等级体系;一个人可能既急躁又厌恶风险,但后者可能主导前者,通过不断更新,可以发现这种动态。
最后,更新。测量点击率,测量网站流量,不断更新你的数据库,如果可能的话扩大数据库。每一次,推论会变得更准确,推动会更有效,数据会更有力。很快你就能建立起影响力的等级体系;一个人可能既急躁又厌恶风险,但后者可能主导前者,通过不断更新,可以发现这种动态。
恭喜你,你现在有了精确制导导弹。
下一个伟大的黑客
剑桥分析公司所做的仅仅是个开始。世界上有足够多的行为和数据科学家来维持超刺激和定向广告行业的繁荣。事实上,剑桥分析公司似乎在他们的方法上非常草率,不是因为他们被抓住了,而是因为他们没有使用控制组来识别行为特征——他们只是使用先前的研究从数据中推断出来。此外,如果你想赢得选举,你不需要说服别人投票给你,只是为了不投票给你的对手。因此,超轻推的可能用途是无限的。
战争和武器的语言也很恰当。超轻推可以武器化,与精确制导导弹相当。但是超级大国之间的军备竞赛即将发生,因此对数据的需求——以及获取数据的创造力——将会激增。但是这场军备竞赛,以及随之而来的战斗,不是为了我们人民的利益而战,而是为了政治候选人和他们所雇用的公司的利益而战。我们都应该为下一次伟大的黑客行动做好准备。
数据压缩如何工作:探索 LZ77
原文:https://towardsdatascience.com/how-data-compression-works-exploring-lz77-3a2c2e06c097?source=collection_archive---------4-----------------------
ZIP 格式是如何工作的?
在本帖中,我们将探索 LZ77,一种由伦佩尔和齐夫在 1977 年创建的无损数据压缩算法。这种算法在我们当前的系统中广泛传播,因为,例如,ZIP 和 GZIP 是基于 LZ77 的。
压缩
LZ77 依次遍历输入字符串,并将任何新的匹配存储到搜索缓冲区中。压缩过程可以分为 3 个步骤:
- 查找从当前位置开始的字符串与搜索缓冲区中可用模式的最长匹配。
- 输出三元组(o,l,c ),其中,
- o : offset,表示为了找到匹配字符串的开始,我们需要向后移动的位置数。
- l :长度,代表比赛的长度。
- c :字符,代表匹配后找到的字符。
- 向右移动光标 l+1 个位置。
让我们通过一个例子更深入地了解一下:
a b a b c b a b a b a a
最初,我们的搜索缓冲区是空的,我们从左边开始,在那里我们找到一个“a”。假设在我们的搜索缓冲区中没有任何匹配模式,我们输出三元组(0,0,a),因为我们没有向后移动(o = 0),并且在搜索缓冲区中没有匹配模式(因此“匹配”一个空字符串:l = 0)。在这个(非)匹配之后,我们找到字符‘a’,所以 c = a。我们向右移动 l+1 个位置,发现自己在第二个位置。我们将使用方括号[]来表示光标的位置。
a [b] a b c b a b a b a a
LZ77 encoding: (0,0,a)
到目前为止,我们的搜索缓冲区中没有任何以“b”开头的模式。所以编码过程和上一步类似:(0,0,b)。此时,事情开始变得有趣起来:
a b [a] b c b a b a b a a
LZ77 encoding: (0,0,a), (0,0,b)
我们之前发现了一个“a”甚至“ab”,但没有发现“abc”,所以我们需要向左移动 2 个位置(o = 2)并读取 2 个字符(l = 2)。我们可以找到的下一个字符是“c”,因此输出三元组将是(2,2,c)。我们将光标向右移动 l+1 个位置,发现自己在字符‘b’中。
a b a b c [b] a b a b a a
LZ77 encoding: (0,0,a), (0,0,b), (2,2,c)
我们已经找到了一个“b”,甚至“ba”和“bab ”,但没有找到“baba ”,所以我们将向左移动 4 个位置(o = 4)并读取 3 个字符(l = 3)。我们可以找到的下一个字符是“a”,因此输出三元组将是(4,3,a)。我们将光标向右移动 l+1 个位置,发现自己在字符‘b’中。
a b a b c b a b a [b] a a
LZ77 encoding: (0,0,a), (0,0,b), (2,2,c), (4,3,a)
我们快完成了!我们已经看到了一个 b 和一个 ba,但没有看到一个 baa。我们需要向左移动 2 个位置(o = 2),读取 2 个字符(l = 2)。在这个匹配之后,我们找到一个“a ”,所以最后的输出三元组将是(2,2,a)。
a b a b c b a b a b a a
LZ77 encoding: (0,0,a), (0,0,b), (2,2,c), (4,3,a), (2,2,a)
您可能已经注意到,考虑到在最坏的情况下,我们需要回到输入字符串的开头来寻找匹配模式(如果有的话),压缩阶段的时间复杂度似乎不是太好。这意味着,在 0-索引位置 p,我们需要在最坏的情况下向左移动 p 个位置。考虑一种边缘情况,其中字符串的每个字符都不同(因此我们没有利用数据压缩),我们需要处理第一个位置的 0 个字符+第二个位置的 1 个字符+第三个位置的 2 个字符… +最后一个位置的 n-1 个字符= n(n-1) / 2 = O(n2)时间复杂度。这就是为什么通常预定义搜索缓冲区大小的限制的原因之一,这允许我们重用多达例如光标左侧 6 个位置的内容。下面的例子可以帮助您说明这个概念,其中括号表示搜索缓冲区内的内容。
a b a b c (b a b a b a) [c] b a a a
在这种情况下,我们不会在搜索缓冲区中找到“c ”,因此,输出三元组将是(0,0,c)而不是(7,3,a)。然而,在最坏的情况下,在字符串的开头,我们可能不需要为每个处理过的字符付出代价来寻找一个匹配。总而言之,选择搜索缓冲区的大小成为压缩时间和所需内存之间的权衡:小的搜索缓冲区通常会让我们更快地完成压缩阶段,但最终的编码将需要更多的内存;另一方面,大的搜索缓冲区通常需要更长的时间来压缩我们的数据,但在内存使用方面会更有效。
限制先行缓冲区的大小也很常见,先行缓冲区是从光标处开始的子字符串。让我们用一个例子来说明这个概念,其中前瞻缓冲区用两个*符号表示。
a b a b c (b a b a c a) *[b] a b a* c a a
在这种情况下,我们有一个大小为 6 的搜索缓冲区和一个大小为 4 的先行缓冲区。假设我们的前瞻缓冲区的内容是“baba ”,并且它包含在搜索缓冲区中,那么在这个位置的 LZ77 编码将是(6,4,c)。请注意,在本例中,如果我们的前瞻缓冲区更大,则此位置的输出三倍会有所不同。例如,如果我们的前瞻缓冲区的大小也是 6,它将包含字符串“babaca”,它完全包含在搜索缓冲区中,因此,输出三元组将是(6,6,a)。
值得一提的是,这种算法也被称为“滑动窗口”算法,因为当光标在输入文本中“滑动”时,搜索缓冲区和前瞻缓冲区都会更新。
解压
让我们看看 LZ77 如何使用它的编码形式来再现原始字符串。LZ77 被归类为无损数据压缩算法,这意味着我们应该能够完全恢复原始字符串。同样值得一提的是,在 LZ77 的例子中,我们不能从一个随机的 LZ77 三元组开始解压缩:相反,我们需要从最初的三元组开始解压缩。原因很简单,编码的三元组基于搜索缓冲区。
为了说明解压缩过程,让我们尝试解压缩上一节中获得的编码,旨在获得原始字符串。因此,本例中的编码如下:
(0,0,a), (0,0,b), (2,2,c), (4,3,a), (2,2,a)
从(0,0,a)开始,我们需要向左移动 o = 0 个位置,读取 l = 0 个字符(那只是一个空字符串)。之后写 c = 'a '。因此,这个三元组的解压缩值是‘a’。此时,我们的解压缩字符串如下所示:
Current string: a
Remaining LZ77 encoding: (0,0,b), (2,2,c), (4,3,a), (2,2,a)
我们找到的下一个三元组是(0,0,b ),意思如下:向左移动 o = 0 个位置,读取 l = 0 个字符(空字符串)。之后,写 c = 'b '。因此,这个三元组的解压缩值是‘b’。我们的解压缩字符串现在看起来像这样:
Current string: a b
Remaining LZ77 encoding: (2,2,c), (4,3,a), (2,2,a)
我们找到的下一个三元组是(2,2,c),它更有趣一些。现在的意思是这样的:左移 o = 2 个位置,读 l = 2 个字符(' ab ')。之后,写 c = 'c '。因此,这个三元组的解压缩值是“abc”。我们的解压缩字符串现在看起来像这样:
Current string: a b a b c
Remaining LZ77 encoding: (4,3,a), (2,2,a)
我们找到的下一个三元组是(4,3,a),意思如下:向左移动 o = 4 个位置,读取 l = 3 个字符(' bab ')。之后写 c = 'a '。因此,这个三元组的解压缩值是' baba '。我们的解压缩字符串现在看起来像这样:
Current string: a b a b c b a b a
Remaining LZ77 encoding: (2,2,a)
我们找到的最后一个三元组是(2,2,a),意思如下:向左移动 o = 2 个位置,读 l = 2 个字符(' ba ')。之后写 c = 'a '。因此,这个三元组的解压缩值是“baa”。我们的解压缩字符串现在看起来像这样:
Fully decompressed string: a b a b c b a b a b a a
如果您检查前一节中要压缩的原始字符串,您会发现它们是相同的!
数据管理实践如何成功实现单一客户视图?
原文:https://towardsdatascience.com/how-data-management-practice-enables-a-successful-implementation-of-single-customer-view-part-1-f9f508bddc85?source=collection_archive---------20-----------------------
什么是客户单视图?
单一客户视图是一个集中的位置,它整合了您组织内客户的所有可知数据和信息,使您能够查看、查找和了解客户的各个方面。在您的环境中拥有客户的单一视图有助于您了解您的客户购买了什么以及如何购买。这些情报为您的销售和营销团队制定和发展战略提供了动力。
洞察困难?
从表面上看,提取、整合和集成是您所需要的。然而,它的实现和解决方案一点也不简单。客户与您的服务或/和产品的互动可能会很长,跨越多个线上和线下渠道和接触点。跨不同渠道和接触点管理、治理、整合和转换大量有价值的数据和信息非常具有挑战性。
数据管理实践有助于应对挑战
回顾构建单一客户视图的端到端流程和机制,可以揭示数据管理实践的哪些元素有助于解决这些挑战。
第一步提取:通过相似的列名,通过业务分析师的文档,通过系统分析师的知识,从不同的系统中提取您的客户的所有可知数据。但是
A. 贵公司有哪些可知的客户数据?
B. 您如何知道哪个(些)系统提取您搜索的客户数据?
要素:数据字典、企业数据流、数据谱系
第二步数据清理:根据 IT 提供的规则,清除客户数据中的所有噪音。但是
A. 在 2 个系统中遇到 2 个相似的客户名称,如何知道他们是不同的还是相同的?
要素:业务规则和数据质量管理
步骤 3 & 4 整合和加载:整合来自不同来源的客户数据,并通过使用跨不同部门和 it 部门的一些受污染的文档和数据模型将其加载到一个集中的位置
A. 钥匙是什么(姓和名?ID?生日?)您应该使用来合并来自不同表甚至不同系统的连接记录?
B. 如何将集成的数据组织到一个集中的位置,以便其他应用程序可以方便高效地使用它?
元素:数据建模、数据架构
这篇文章太长了,无法涵盖每一个元素的细节。我会尽我所能在这里解释它。
数据字典,或数据谱系
我们不想深入每个元素的学术细节。如果你感兴趣,数据管理协会(DAMA)有一套严格的定义。数据字典或数据谱系基本上是数据、系统及其相互关系的当前状态的文档。如果您的组织对其进行了良好的管理、更新和信任,那么打开此文档,您就知道在哪里可以找到您想要的内容。
业务规则和数据质量管理
业务规则和数据质量是数据管理中最有趣的话题之一。它基本上是一套解决数据相关问题的规则和流程。可能是任何问题。有些人认为 IT(数据分析师、数据科学家、内部开发人员或外部顾问)应该制定解决数据冲突的规则。事实上,它不是创建数据和使用数据的实体,至少在操作层面上是如此。相反,他们是为用户创建和使用数据开发系统的实体。他们也许能够猜出规则,但他们无法自己解决大多数与数据相关的问题,因为他们不是创建和使用数据的人。这就是为什么从逻辑上讲,企业(在运营层面上创建数据和使用数据的人)至少应该参与进来并接受咨询。
数据建模和数据架构
它更像是数据的蓝图。要盖一栋房子,买一些家具,然后把它们放入你的房子,你必须有一个蓝图(你如何设计和构建你的地方)。数据架构服务于这个目的。
我将有单独的文章单独解释每一个元素。但是到目前为止,我们应该已经理解了实施单一客户视图的困难以及数据管理如何帮助解决这些挑战。
数据可能如何破坏您的项目计划,以及为什么这实际上是一件好事
原文:https://towardsdatascience.com/how-data-might-blow-up-your-project-plan-and-why-thats-actually-a-good-thing-e5cf87a2c188?source=collection_archive---------43-----------------------
YML 高级项目经理詹姆斯·麦卡沃伊
数据。
这个词让所有项目经理、scrum 大师和项目团队都感到恐惧和兴奋。
我们知道我们想要它,但我们不能 100%确定一旦我们得到了它该做什么。
我们请求、提醒、追踪、测试并最终收到这些宝贵的数据,只是为了提出这些熟悉的问题:
- 我们在项目生命周期的什么地方适应它?
- 我如何使这些数据具有可操作性?
- 谁吃了我办公室冰箱里明明贴着标签的鸡肉沙拉三明治?(我知道是你,杰夫)
虽然回答这些问题是重要的一步,但我们必须首先探究为什么要问这些问题。
1.对数据的恐惧
当涉及到数据时,我们必须处理的主要问题是恐惧。
从根本上说,数据的固有性质会迫使我们重新思考我们的方向,否定我们的假设,或者让我们意识到我们正在试图解决错误的问题。
这些结果中的任何一个都会迫使你的项目方向发生重大转变。特别是对于项目经理来说,他们通常不喜欢看到他们的项目计划被冲进厕所,乍一看,数据可能会成为一个问题。
关于数据在项目中的含义以及我们如何减轻潜在的问题,数据确实提出了一个项目管理中常见的问题。事实是,这些问题比开发一个对用户完全无用的产品更容易回答。
正如 Shayna Stewart 在她的文章中所问的,消费者在我的产品中找到价值了吗?“数据——不管它有多可怕——允许我们在我们的产品可能被消费者接受之前回答这个问题。
2.项目管理生命周期
标准项目管理生命周期通常包括:
启动、计划、执行、绩效监控和结束。
在一个典型的数字项目中,如果我们合并数据,那么它通常在规划阶段。然后,通常在较小的程度上,性能监控阶段,甚至更糟,通常与一个没有历史知识的全新团队。
为了有效地交付以消费者为中心的产品,为我们的用户增加价值,我们需要在整个项目生命周期中整合数据的使用。
这意味着我们需要不断地回顾我们的方向,对照任何学到的见解,以及继续测试来验证我们的假设和我们通过项目做出的决策。
此外,我们在运行项目时所做的考虑将需要重新考虑。
作为项目经理,按时、按预算交付符合所有范围要求的项目是我们根深蒂固的理念。
我们都见过项目管理的限制三角——并且可能见过当其中一个限制受到影响时,项目的整体质量就处于危险之中。
3.交付的价值
在三角约束中通常没有考虑的是项目质量的不完整画面:除了这些约束,我们应该考虑价值。
我们都交付过超出预算或晚于计划的项目。所有这些情况都不好玩,但更糟糕的情况是交付消费者认为没有价值的产品。如果我们这样做了,那么它是否超出预算或延迟真的无关紧要,因为它已经是一个失败。
一个合理的论点可能是,价值已经被纳入质量因素,这在某种意义上是正确的。但是大多数情况下,项目领导对质量的关注是基于需求,或者至少是项目纲要。没有必要的数据,这些需求可能是错误的。
在这种情况下,我们如何计算质量只是我们需要考虑的一部分。当我们考虑对客户的总体价值时,我们对质量的定义会积极地改变,这是应该的。
但是有希望…
我们上面讨论的大部分内容都围绕着对恐惧和不确定性感到舒适。
我们必须知道和理解,数据提供的信息越多,就越有可能改变我们最好的计划。
此外,我们将数据整合到传统项目管理方法和流程中的越多,我们就越有可能看到这些担忧变成现实。
然而,作为项目领导,我们有办法避免上述潜在的陷阱。如果我们将数据整合到项目管理生命周期的每个阶段,并为这些新信息可能导致的潜在中断做好计划,那么当这种中断发生时,我们就不太可能感到惊讶。
我们知道项目总会有变化,但只要我们不忽略我们可能拥有的所有信息,不管有多可怕,我们都可以提前应对风险,并最大限度地减少最初导致这种恐惧的原因。
训练我们自己去理解改变是好的,颠覆是好的,最终为消费者的生活增加价值是最好的。
机器学习和数据挖掘如何创造更好的产品
原文:https://towardsdatascience.com/how-data-mining-is-creating-better-products-throughout-industrial-a37ab2b75e2?source=collection_archive---------16-----------------------
数据科学:创造更美好的世界
博世以生产家用电器的质量而闻名。博世之所以能够成为顶级家电制造商,是因为它对质量的承诺。博世甚至记录了装配线上每一步的数据。通过记录生产过程中每一步的数据,博世可以应用先进的分析技术来改进生产过程。[1]2016 年,Bosh 在 Kaggle 上创建了一个开源竞赛,允许所有背景和经验水平的人使用数据科学技术来解决 Bosch 的内部故障。Kagglers 通过对装配线上的每个组件进行数千次测量和测试来预测内部故障。这将使博世能够以更低的成本向最终用户提供高质量的产品。[1]第一名、第二名和第三名的奖金为 30,000 美元,第一名奖金为 15,000 美元,第二名奖金为 10,000 美元,第三名奖金为 5,000 美元。
整个行业越来越需要通过数据挖掘传感器的先进故障检测方法。Vedika 等人在 IEEE Intelligent Systems Journal 中讨论了对高级算法的需求,这些算法可以提供磨煤机故障的自动早期检测和诊断,以便及时采取控制措施。Vedika 等人解释了火力发电厂磨煤机中的故障检测系统如何使用固定报警限值,这些限值是为分布式控制系统(DCS)中的过程变量配置的,一旦变量值超过其上限或下限,就会激活报警。系统只有在大面积损坏发生后才会对异常做出反应。[2]
当高级算法应用于从传感器挖掘的数据时,可以在检测到损坏之前检测到故障,从而节省材料、提高生产率、增加公司利润并降低消费者成本。[2] Vedika 等人在当前算法中引入了一个额外的步骤,称为自适应学习模型(ALM)。当前算法的启动和停止流程由工作人员启动。传感器在整个过程中收集数据,对数据进行预处理,然后供模型使用。该数据基于来自工厂的噪声寻找剩余信息,然后输出是否检测到故障。Vedika 等人在残差生成分析之后引入了自适应学习模型(ALM)。实施 ALM 是为了了解工厂内发生的机械磨损造成的偏差。
为了使用来自传感器的数据,Vedika 等人解释了 FD 应用的两种数据预处理要点。本文讨论了离线数据预处理的使用,包括预处理用于模型开发的训练数据集。[2]在线数据预处理包括在故障检测期间以在线模式对数据进行预处理。数据预处理主要用于减少数据中的缺失值、异常值和随机噪声。Vedika 等人解释了处理缺失值的常用方法,包括删除事例;使用平均值、中值和众数的插补;和 k-最近邻(k-NN)插补。[2]该杂志解释了 3σ编辑规则、z 得分和箱线图等统计模型如何最适合定量实值数据。为了去除噪声,提出了几种方法,例如线性滤波器、小波分析和 Savitzky-Golay 算法。从传感器中挖掘的数据用于检测系统中何时出现故障,从而允许技术人员在检测到真阳性时停止生产线。技术人员修复或调整生产线,根据调整重新训练数据,并在没有材料损失或严重损坏的情况下重启生产线。
在“预测性维护的数据分析和特征选择:冶金行业的案例研究”一文中,Marta 等人描述了如何在工业环境中应用机器学习和数据挖掘来预测组件何时可能出现故障。就在系统崩溃之前,组件被更换。InValue 是一家冶金行业的公司,它采用机器学习和数据挖掘技术来揭示由数据采集模块收集的关于设备操作和维护的新知识。[3]收集的关于特定操作参数的信息用于防止机器部件的损坏。当检测到劣化时,更换组件,防止 catestrophic 故障并最大化生产率。
物联网(I.O.T)和 5G 的实施越来越多的公司将在其流程中使用大数据。机器学习和数据挖掘将被用于发现未知事物,从而改善运营、提高生产率、治愈疾病并降低消费者成本。拥有领域知识的数据科学家将变得越来越吃香,或者拥有数据科学技术知识的领域专家将成为工业未来的关键?
引用的作品
[1]Marta 等,“预测性维护的数据分析和特征选择:冶金行业的案例研究”,国际信息管理杂志,第 46 卷,第号,第 252–262 页,2019。
[2]B. P. P. S. Vedika Agrawal,“提高工业应用中故障检测系统的可靠性”, IEEE 智能系统,vol . vol:33,no. 3,PP . 28–39,2018。
[3]Kaggle,“博世生产线性能”,2016 年。【在线】。可用:【https://www.kaggle.com/c/bosch-production-line-performance. 【2019 年 8 月 25 日获取】。
数据科学如何帮助解决气候变化
原文:https://towardsdatascience.com/how-data-science-can-help-solve-climate-change-12b28768e77b?source=collection_archive---------9-----------------------
数据驱动的解决方案将引领向清洁能源的过渡
Photo by Bogdan Pasca on Unsplash
气候变化是真实的。
尽管许多科学家同意我们已经为时过晚的事实,但是人们才开始意识到这个问题。人民带来了政治,政治带来了金钱。
这就是为什么在接下来的几年里,能源领域的研究将会受到重大推动,而数据科学将会在这场大战中扮演重要角色。在数据中发现新的模式是为我们渴求能源的世界获得强有力的解决方案的一条清晰的道路。
在这篇文章中,我们将看看一些有问题的案例,在这些案例中,机器学习和数据驱动技术被证明可以提供很好的解决方案,这可能使该领域成为对抗气候变化的战争中的主要角色之一。
Photo by Bob Blob on Unsplash
对能量的渴望
降低二氧化碳排放量的最简单的解决方案之一是消耗更少的能源,这些能源通常是通过燃烧化石燃料产生的。
但是从过去几年的趋势来看,电力需求似乎并没有减缓:随着电动汽车的兴起(尽管它们对环境的影响肯定低于化石燃料汽车),这种日益增长的需求不太可能很快停止。
此外,现在我们倾向于把电池放在任何地方:自行车里,衣服里,甚至鞋子里。而电池需要的电力。很多电。因此,减少我们日常生活中需要能量的场合的数量远不是一个简单的解决办法。
终于到了引入能效概念的时候了。
Photo by Vlad Tchompalov on Unsplash
数据科学创造一个更节能的世界
是真的,清洁能源来了。
但不幸的是,100%的能源来自可再生能源的时间并不那么近。我们需要用有效利用不洁能源的方式来弥合我们向清洁能源过渡的差距。此外,即使在一个理想的绿色社会,确保效率处于最高水平也不是一项无用的任务。
但是为什么一个数据科学家会对能源效率感兴趣呢?应该是机械、土木工程师、建筑师的工作,不是吗?
嗯,有,但是没有。
查看数据并找出模式可以极大地帮助在每个领域(包括能源效率)找到通常现成的解决方案。
Photo by Stephen Dawson on Unsplash
数据中心:为什么它们很重要
让我们来看一个案例:世界各地的数据中心使用地球产生的 3% 能量。太多了!
这种巨大能量使用的原因是需要将保持在某个温度,避免过热和电子元件故障。因此,如果不使用清洁能源来运营数据中心,就会对二氧化碳排放产生重大影响。让我们不要忘记经营这些地方的成本。
这就是为什么 2016 年 Deepmind (谷歌收购的一家人工智能公司)成功地将谷歌一个数据中心的能耗降低了 40% (来源)。把这个告诉任何一个 IT 工程师,你就会而不是被相信。
Photo by imgix on Unsplash
令人难以置信的结果是通过将机器学习算法应用于一个由传感器数据组成的数据集而实现的,这些数据是在该中心多年的运营中获得的。该算法的目标是基于许多参数,如温度、功率和冷却设定点,预测未来 PUE (功率使用效率,即总建筑能耗与 IT 能耗的比率)。
最终训练出来的预测模型,对整个环境有【意识】,能够做出更聪明的、非线性的决策,并且能够以一种实质上更高效的方式操作数据中心,同时保持温度在可控范围内。
虽然传统的工程师拥有制造单个组件的专业知识,可能是更高效的冷却风扇,数据科学家能够着眼于全局,通常会找到更简单、更强大的解决方案来解决问题。
强化学习:一个更广泛的解决方案
为什么止步于数据中心?
我们的学校、办公室、房子呢?
众所周知,供暖和制冷占据了任何建筑的电费的很大一块:2011 年的一项研究 显示,提高建筑效率代表着降低温室气体排放的最大机会。
如果我们能找到一种方法创造一种算法使 HVAC 系统更加有效总的来说,二氧化碳排放量将大大减少,连同能源账单。最大的障碍是缺乏获取数据的传感器和每个不同建筑的独特性。
强化学习可以解决这个问题。
许多最近的研究提出了强化学习(RL,机器学习的一个分支,其中代理与环境交互,在奖励函数定义的特定目标处变得越来越好)作为解决方案:应用这种算法来提高不同建筑的效率显示出令人难以置信的和有希望的结果,其中高达 70% (!!!)减少 HVAC 能源使用量(来源)。
RL 中不需要传感器数据。
在实际建筑的计算机模拟中,一个代理被给予对加热和冷却的自由控制,在那里它可以自由探索其决定的后果,并且学习如何消耗更少的能量同时保持期望的温度。由于安装了简单的智能恒温器,这使得解决方案灵活适用于各种建筑、经济高效和易于实施。
Results from the paper
但那是不是全部。
向 100%可再生能源的过渡伴随着的缺点,数据科学可能会再次提供解决方案。
电网的不稳定性
太阳能和风能都是高度不可预测的:这就是为什么专门向电网供应这些种类的可再生能源可能会对整个电网的稳定性产生负面影响****。此外,我们还必须考虑到街上越来越多的电动汽车,以及它们随之而来的对大量电力的需求,这也是一个问题。
因此,我们可以将一个“值”与产生的清洁能源相关联,这与特定时刻电网的电力需求相关联。如果该值很高,这意味着将电力输入电网会使电网更加稳定和可靠。
Photo by Jason Blackeye on Unsplash
对于特定的风力发电场或太阳能发电场,有没有办法最大化这个【价值】?
这是 Deepmind 在最近的一项研究中再次试图回答的问题:研究人员对可用的天气预报数据和风电场的涡轮机数据应用了神经网络来预测 36 小时后的电力输出。然后,经过训练的网络允许提高所产生的能量的值(大约 20% ,从而在最需要的时候为电网做出贡献。
该行动了
正如本文所述,一些数据驱动的解决方案正在接受测试,以帮助降低温室气体排放并引导我们走向完全可再生的未来。而且现在有更多的正在被研究。
非常需要这些发现的真实实施:如果你感兴趣,这个领域的机会比以往任何时候都多。
现在是时候了。
数据科学有能力为这场战役出力,而且知道它能做多少,它绝对应该。
数据科学如何帮助您的企业增加收入
原文:https://towardsdatascience.com/how-data-science-helps-to-grow-revenue-to-your-business-4f4b36956cb4?source=collection_archive---------23-----------------------
知识是商业中的终极力量,而数据是创造这种力量所需的燃料。许多报告估计,全球的数据量将上升到 44 万亿千兆字节,使用数据科学来利用这些数据的力量是非常有价值的。
数据科学利用现代科学方法、算法、流程和系统从数据中提取知识,并利用这些数据做出重大决策,这对于任何企业来说都是一项关键的战略实践。
如果我们采取一种基于数字、事实和统计的分析方法,它可以提供一个合理的解决方案,这种解决方案起初可能并不明显。这是因为数据提供了洞察力,使越来越多的企业利用 it 的力量做出基于证据的决策,促进员工培训和了解他们的客户。
在本文中,我们将探讨一些有意义的方式,通过这些方式,您可以投资于数据科学技术或数据科学专家,从而为您的业务增加宝贵的经验。
提高决策技能
对公司的每个决策者来说,指尖上有数据是强制性的。如果您不遵循这一策略,那么非结构化数据很有可能会出现问题,这需要高度预测性的分析工具来从中获得深刻的见解。
通过在数据科学的帮助下获得数字和统计数据,您的企业可以创建预测模型来模拟许多可能性。这样,企业就可以了解哪种解决方案最合适,并帮助他们获得准确的结果。此外,通过记录绩效指标并随着时间的推移对其进行分析,您的企业在决策时会变得更加明智和高效。
接触潜在受众
随着数据量的不断增长,收集重要数据对于您的客户和企业来说可能是一项实时任务。由于贵公司从客户处收集的每一份数据——无论是来自社交媒体,还是网站访问或电子邮件调查——都包含重要的机密数据,需要对这些数据进行分析,以便更有效地了解您的客户。
借助数据科学,您可以将数据点与从客户处获得的信息相结合,以获得更深入的见解,并更有效地锁定受众。这是指你可以为特定的群体量身定制你的服务和产品。
寻找最优秀的人才
招聘可能是最累人的工作之一,但有了数据科学,这个过程会变得更快、更准确。由于社交媒体、公司数据库和招聘网站的存在,人才网站上有了所有的数据点,公司正在研究这些数据点,并利用分析方法来寻找最适合组织的候选人。
挖掘现有的求职者数据表明,要寻找完全符合你公司文化的员工,而不仅仅是看上去不错。如果你收到一堆申请人,并且希望尽快填补这个职位,这一点尤其正确。在数据科学方法的帮助下,你往往会更聪明地工作,而不仅仅是更努力地工作,这可以确保你用准确的匹配来填补组织中的空缺。
影响产品/服务的相关性
据说,数据科学方法可以探索过去的见解,与竞争对手进行比较,并分析市场,从而建议何时何地销售你的产品或服务最好。这非常有助于公司理解他们的产品如何帮助他人,并质疑现有的业务流程。
这种通过数据科学进行的持续分析和思考有助于深入了解市场对贵公司产品和服务的反应。当你认真审视你的产品是如何被使用最多的,并允许重新思考你的模式,以确保你提供以客户为中心的解决方案。
培训你的员工
让您的员工随时了解最新的更新可能是一项艰巨的任务。在这种情况下,数据科学可以获得员工需要了解的见解,因为从中获得的知识可以用于增加在线知识或文档软件,这些软件包含重要的知识供员工参考。
通过提取我们所有的硬数据,并为员工提供他们可以随时访问的适当统计数据和事实,您可以创建一个聪明的团队,他们可以使用这些见解来推动更多的业务。
结束了!
将所有数据科学方法整合到您的业务中可以以不同的方式增加重要的价值,包括决策、招聘、培训、营销等等。数据分析可以帮助您做出明智的决策,让您的组织以明智和战略性的方式进行投资。因此,尽最大努力使用数据科学并发现绩效背后的洞察力是每个企业都应该发现的有价值的强大工具。继续学习!
作者简介:
维卡什·库马尔在 Tatvasoft.com**软件外包公司 担任经理。有时,他在管理活动时确实有空闲时间,在此期间,他喜欢写作和探索新的技术趋势和主题。Vikash 还在各大平台上发表了他的署名,并从 2014 年开始写博客。你可以在 Twitter 和 LinkedIn 上关注他。
用数据科学优化数字营销
原文:https://towardsdatascience.com/how-data-science-is-shaping-digital-marketing-5a149443f90a?source=collection_archive---------7-----------------------
什么是数字营销?
数字营销是利用数字技术,主要是在互联网、手机和任何其他数字媒体上进行的产品或服务营销。作为一名数字营销人员,你的战略是一系列行动,通过精心选择的在线渠道帮助你的公司实现目标。具体的营销渠道包括付费媒体、收入媒体和自有媒体。
在这篇博客中,我想分享我过去在数字营销领域的经验,以及我目前在数据科学领域的经验,以及数字营销可以从数据科学成果中受益的方式。
数据科学让营销人员能够访问通过各种渠道整理的有用数据组,包括有机(网站分析/SEO)、电子邮件营销、社交媒体等。
网站流量(SEO 和 SEM)
有机流量是数字营销的最大渠道之一,并在数据科学和人工智能领域不断增长。有机营销是一种数字方法,包括所有来自谷歌、雅虎和必应等搜索引擎的网站流量。
“89%的美国互联网用户在购物前会在网上搜索,即使最终购买的是当地的商店”——HubSpot
与付费搜索或 SEM 不同,有机流量(SEO)包括许多因素,这些因素与让您的网站位于搜索引擎结果页面的顶部有关。这些因素是:
- 页面标题(70 个字符以下)
- 元描述(155 个字符以下)
- H1 和 H2 标题文本(通过描述来分解主要内容)
- 替代文本(每个图像需要一个标题)
- 内容中的关键字(至少一次,粗体)
一个网站从搜索引擎优化(SEO)中获得免费的“有机”流量。这是提高网站流量的质量和数量以及品牌曝光率的做法。当我们在谷歌上搜索“DC 的酒店”时,你会注意到谷歌搜索页面显示了可以点击的 DC 主页。
SEM ,或搜索引擎营销,是使用付费策略来增加搜索可见性的行为。品牌付费让广告作为搜索结果出现在搜索引擎结果页面上。有了 SEM,品牌付费让广告作为搜索结果出现在搜索引擎结果页面上。
自从谷歌建立通用搜索以来,搜索引擎结果页面的“SERPs”已经不仅仅是十个蓝色链接了。搜索结果现在包括图片、视频、购物广告、本地搜索结果以及最近的特色片段。
数据科学与搜索引擎优化?
数据科学正在迅速改变我们优化网站流量的方式。数据科学家通过数据积累、解释和反应来增加搜索引擎的功能。
“数据科学专注于消除 SEO 中的猜测。不要假设什么有效,特定的行动如何影响你的目标,而是使用数据科学来了解什么给你带来了想要的结果,以及你如何量化你的成功。Airbnb 等品牌已经在这么做了,你也可以。”—搜索引擎观察
机器学习与搜索引擎优化
机器学习是在分析搜索引擎优化时使用算法来计算趋势、价值或其他特征。
模式检测:搜索引擎正在使用机器学习进行模式检测,帮助识别垃圾邮件或重复内容。
基于特定查询的定制信号:此时显示的结果类型主要基于查询类别或短语。这意味着机器学习可以在某些查询中对变量或多或少地赋予更多权重。
这可能是因为搜索引擎正在“学习”特定用户的偏好,并可以基于过去的查询提供最感兴趣的信息。例如,如果你在谷歌上第一次搜索“大都会人寿体育场”,然后在第二次搜索“喷气机”。电脑会根据你之前的成绩输出足球队。
总体而言,研究发现,由机器学习定制的个性化搜索将结果的点击率(CTR)提高了约 10%。
图片搜索了解照片
用户与这些结果交互的方式可以在未来塑造他们的 SERPs。
电子邮件营销
电子邮件营销是使用电子邮件向一群人发送商业信息的行为。发送给潜在或当前客户的任何电子邮件都可以被视为电子邮件营销。
数字营销人员使用从数据科学项目中积累的信息来估计买家喜欢什么,他们喜欢如何购物,以及他们未来最有可能购买的时间。以下是电子邮件营销的几个例子:
发送个性化电子邮件:电子商务网站使用数据科学来生成有针对性的电子邮件,其中包含迎合客户独特风格的产品建议。个性化电子邮件作为高度相关的定制材料在收件箱中脱颖而出。个性化电子邮件使电子邮件更容易被打开和点击。
个性化电子邮件通过在正确的时间向正确的人发送正确的内容来增强客户体验。
丝芙兰对 VIP 身份的顾客使用私人邮件。见下图,他们个性化的电子邮件,把一个客户的名字。
阿迪达斯按性别个性化:
通过有针对性的电子邮件推动购买,或重新吸引一段时间没有购买的客户:数据科学家根据客户过去的购买情况推动电子邮件营销的未来销售。使用数据根据客户以前连续购买同一产品的情况,确定客户何时需要补充产品。
发送将潜在客户转化为客户的电子邮件:对于来自某公司的潜在客户促销电子邮件,他们通常会收到一系列旨在鼓励他们购买的欢迎电子邮件。例如黑色星期五销售、样品销售和新客户交易的 10%。
数据科学家收集人口统计数据,营销人员可以分离和测试电子邮件营销的各种前景,以确定哪种效果最好。可以发送关于多个消息和优惠的测试电子邮件,然后可以观察点击率来确定电子邮件活动的表现。
将销售线索转化为客户需求是专门的营销活动……其中电子邮件活动根据客户行为进行学习、调整和改进。这些营销工具有 算法,可以自动调整时机、内容和个性化。
发送相关产品建议:预测分析有助于确定分析师发送给个人客户的电子邮件内容和报价。您可以确定客户购买的频率,以便营销人员可以找到发送有关其产品的电子邮件的最佳时间和频率。
对客户进行细分:
您可以根据客户的偏好、地区、性别、年龄和购买选择将他们分成不同的类别。作为一名数据科学家,您可以创建一个电子邮件板块,向他们发送独家优惠、新产品、公司新闻和其他个性化信息。
https://towardsdatascience.com/how-to-automatically-segment-customers-using-purchase-data-and-a-few-lines-of-python-36939fb587a4
借助数据科学的电子邮件营销,消费者可以收到根据其偏好定制的相关活动。
聚类—客户细分示例:
Kimberly Coffey 执行了一个客户细分项目,该项目举例说明了数据科学在购买行为中的作用。她使用无监督聚类技术(K-means、潜在类别分析、层次聚类等)进行客户细分。她指出,“当细分可以与具体的东西联系起来时(例如,客户终身价值、产品倾向、渠道偏好、等),客户细分结果往往对企业最具可操作性。).
主要原因是聚类从连续变量(通常)创建组,所以如果您想要创建组,聚类可以很好地为您找到组之间的界限。在存在感兴趣的因变量的情况下,它通常作为输入变量包含在聚类分析中,因此可以根据该结果变量来解释聚类。聚类也可用于探索性目的——它可能有助于在不同的结果变量级别上了解典型的客户特征。"
总的来说,在数据科学和机器学习的帮助下,谷歌已经能够根据以前搜索和点击率收集的数据来改善用户体验。电子邮件营销人员已经能够根据购买力改进他们的内容和信息。
数据科学如何为企业赚钱
原文:https://towardsdatascience.com/how-data-science-makes-money-for-businesses-203daba010c1?source=collection_archive---------18-----------------------
本文主要针对两类人:商业决策者和数据科学家。对于那些业务决策者,您将了解为什么您的公司需要数据科学,或者发现更多利用您的数据科学团队的方法。对于数据科学家来说,你将了解你的老板是如何思考的,并能够提出更好的项目。真实对话:我老板的老板总是走进我的演讲,以“给我钱!”
秘密提示:这也适用于进入数据科学岗位并需要弹药来完成交易的人。
公司没有最大限度地将数据转化为洞察力
这个标题是显而易见的许多因素。数据科学正在蓬勃发展。有很多公司正在进行数据转换(将他们的旧 IT 基础设施转变为支持数据科学的基础设施),到处都是数据训练营,等等。当然,原因很简单:数据科学提供了洞察力。
一群高管凭直觉决定推动公司发展的日子即将结束。他们正在被应用数据驱动决策的公司击败。例如,让我们看看 2006 年的福特,它亏损了 126 亿美元。在那次失败后,他们引入了一位首席数据科学家来领导转型,并进行了为期三年的大规模整改。这导致了超过 230 万辆汽车的销售,并在 2009 年底实现了盈利。
底层业务主题:数据转换自上而下
数据科学增值:雇佣数据科学家
数据科学如何增加收入
数据科学可用于寻找和提炼目标客户群,以创造更多收入。在销售中,特别是在销售线索管理中,模型可以分析过去的客户并对销售线索进行评分,从而提高销售效率。不仅使用过去的内部客户数据,还使用社交媒体互动进行评分。应用人工智能线索评分的公司增加了 50%的预约,减少了 60%的通话时间【2】。更好的销售线索能更快达成销售交易,从而创造更多收入。
潜在业务主题:公司寻求销售方面的运营改进
数据科学增值:逻辑回归
在营销方面,数据科学通过增强客户特征来改进营销活动。研究表明,正确定向的电子邮件会让客户多花 38%,而重新定向的客户会转化 70%的时间【2】。为了锁定客户电子邮件,data science 分析客户过去的购买记录,并发送定制的建议。我个人觉得,获得自己其实想要的、需要的产品推荐是非常有价值的,我并不孤单。
86%的客户希望获得更好的体验,并且从提供这种体验的同一家公司购买的可能性是其他公司的 15 倍。这就是品牌忠诚度。同样,航空公司已经通过价格优化成功地应用了聚焦目标。从他们的分析中,航空公司发现,随着他们期望的出发日期临近【5】,客户愿意支付高达 50%的额外费用。这可以通过情绪分析来分析其他企业对价格变化的反应,从而应用于其他企业。情绪分析可以通过客户的社交媒体来考察他们对特定事件的反应。
潜在业务主题:日益增长的客户体验偏好
数据科学增值:推荐系统、情感分析
数据科学如何降低成本和风险
Forrester 的一项研究发现,38%的企业有分析,但不能有效地将其结果传达给洞察【2】。例如,在我们的生活中,我们都至少见过一次团队成员发现了一些“伟大的发现”,但他的雇主根本不理解。这就是数据科学家介入的地方。数据科学家不仅执行分析,而且还能有效地将分析结果转化为可操作的业务成果。
基本上,没有数据科学项目是仅仅为了发现而做的。这样做是为了解决一个活跃的业务问题,从而增加收入或降低成本。例如,在 Airbnb,营销部门认为他们的一项活动因糟糕的指标而取消。一位数据科学家发现,根本原因是亚洲的一个团体使用他们的网站浏览社区。因此,营销部门将该组重定向到一个旅游网站,这澄清了他们的营销指标并节省了资源,而不是启动一个低效的营销计划。
根据我个人在金融服务领域的经验,我们已经应用数据科学概念来降低客户流失率和欺诈风险。利用时间序列分析,我们预测客户何时可能陷入困境,并提供帮助以防止违约。至于欺诈防范,我们分析客户数据以检测可能具有欺诈性的异常情况,从而每年节省超过 2000 万美元的潜在成本。
潜在业务主题:当前的数据科学技术允许更精确和准确的见解
数据科学增值:自动编码器、时间序列
数据科学如何提升人才
创新可以来自于借鉴不同领域的想法【4】。一种方法是改善雇佣实践,比如雇佣更多的女性。让我们从 Airbnb 的剧本中吸取教训。例如,当 Airbnb 想要雇用更多女性时,他们发现每个职位空缺都有 30%的女性候选人【3】。有这么多申请人,没有理由找不到合格的候选人。作为回应,他们优化了招聘方式,专门招聘更多女性员工。为了加快这个过程,他们使用了机器学习和深度学习技术的混合来筛选最佳候选人。
潜在商业主题:工作场所多元化的企业趋势
数据科学增值:自然语言处理(NLP)
结论
公司现在需要将数据科学作为其业务和文化的一部分。不这样做就会留下太多的钱。没有数据科学的公司数据就像那个存钱罐。数据本身并不能提供可操作的见解。数据科学释放其价值。打破存钱罐,应用数据科学。投资数据科学,让你的公司拥有更好的数据、更好的决策和更高的利润。
欢迎在下面发表评论或联系 LinkedIn 。我阅读每一条评论,而不是我的 NLP 系统。在接下来的文章中,我将开始发布一些代码演练。收到了很多请求,我听到了你们所有人的声音!
免责声明:本文陈述的所有内容都是我个人的观点,不代表我的雇主。
[1] E .麦纽提,数据科学家可以为您的企业增加价值的 5 种方式(2014 年),https://Data conomy . com/2014/11/5-Ways-a-Data-scientist-Can-Add-Value-To-Your-Business/
[2] T. Capone,数据科学如何帮助您的企业创造更多收入(2018),https://concepta Inc . com/blog/How-Data-Science-Can-Help-Your-Enterprise-Generate-More-Revenue/
[3] N. Patel,Airbnb 如何利用数据科学改善他们的产品和营销(2019 年),https://neilpatel.com/blog/how-airbnb-uses-data-science/
[4] B. Harpham,数据科学如何改变能源行业(2016),https://www . CIO . com/article/3052934/How-Data-Science-is-Changing-The-Energy-Industry . html
[5] Altexsoft,航空公司使用人工智能和数据科学改善运营的 7 种方法(2018),https://www . altex soft . com/blog/Data Science/7-Ways-how-Airlines-Use-Artificial-Intelligence-and-Data-Science-to-Improve-their-Operations/
数据科学孤岛如何破坏应用程序现代化
原文:https://towardsdatascience.com/how-data-science-silos-undermine-application-modernization-14cee5ff3047?source=collection_archive---------30-----------------------
拼接机的蒙特·兹韦本和赛义德·马哈茂德
是时候重塑现代化了
我经常与那些在其组织中管理定制应用程序的企业高管交谈。当话题集中在现代化这些定制且通常是传统的应用程序时,他们通常会自豪地声称现代化正在进行中,并向我解释他们正在向云迁移,可能会将应用程序容器化,如果雄心勃勃,还会重新设计应用程序以利用微服务。
虽然这些努力是有价值的,但我很少观察到这些努力对业务成果产生了影响。在云上并不能提高营销应用的个性化,或者减少保险系统中的欺诈性索赔,或者优化制造商的供应链。应用程序肯定会更加敏捷。是的,这些容器编排和自动化的进步以及微服务重用因素可能能够让开发人员更有效率,但它们很少(如果有的话)最终从根本上改变或改进应用程序本身。因此,虽然云迁移和容器化很重要,但什么样的现代化更有影响力,能够真正推动业务成果呢?
为此,我认为有必要利用丰富的可用数据源,用新的外部数据来增强应用程序,然后使用这些数据来训练机器学习模型,使应用程序能够根据经验进行调整。这种下一代现代化将预测模型注入到应用程序中,以预测特定的未来结果,这样应用程序就可以相应地采取行动。
Apps need to incorporate data from enterprise apps as well as new sources outside the enterprise
构建智能应用需要智能团队建设
但是困难就在这里。当公司试图用人工智能和人工智能实现现代化时,他们往往很难组织他们的团队。
事实上,当你向 IT 应用团队中的任何人提到 AI 或 ML 时,他们会立即把你带到数据科学团队或数据湖团队。这是发射井的第一个迹象。这通常意味着那些能够管理大量数据并“计算”机器学习的人坐在他们的筒仓里。他们远离应用程序与客户、供应商、员工等交互的活动。他们离生意只有一步之遥。最近,当我会见一家保险公司的数据科学团队负责人时,他们说阻碍他们工作运作的一个因素是缺乏应用程序团队的参与。
这对现代化产生了深远的负面影响。我们最近从技术角度讨论了其中的一些内容(参见我们的博客Hadoop 发生了什么?)。但是这里我想把重点放在人和过程上。从人员和流程的角度来看,孤岛如何影响现代化?
我的观点是,将 AI 注入应用的现状通常是由 AI 团队发起的。他们从一些数据湖中获取数据。他们创建了一个论题,并用许多模型进行实验。有时,他们根据现有的数据在真空中创建这些模型。他们运行许多特征、算法和参数的排列,如果做得好,他们用准确性度量来适当地测量实验,准确性度量可以客观地测量模型在测试集中预测新示例的程度。关于机器学习的实验性最佳实践的最佳读物之一是吴恩达的新书,机器学习向往。
但这是笑点。人工智能或数据科学团队不具备独立完成工作的能力。他们只是对业务或应用程序没有足够深入的了解,而这些业务或应用程序将部署模型以导致交付业务成果的生产操作。这一点也不轻视数据科学家。我就是其中之一。但是成功团队的秘诀是多样性。数据科学是一项团队运动。数据科学家需要与了解业务和应用程序的人并肩工作。原因如下。
合适的团队可以创造合适的功能
我多年来的观察是,许多 ML 问题没有像图像、声音、视频和其他信号处理问题那样的大量训练示例,如果是这样,预测信号来自数据科学家对数据的争论,以找到产生一些预测信号的真正好的属性。通常,数据科学家以独特的方式组合数据元素,或者最重要的是聚合数据。这些转换后的数据属性就是数据科学家所说的特征,它们共同形成了特征向量,这些向量是监督或分类算法或非监督聚类算法的输入。这整个过程被称为特征工程,在我看来,这是处理公司结构化数据的实际 ML 项目的关键成功因素。
许多数据科学家撰写关于决策树、随机森林、boosting 算法、贝叶斯算法或深度学习替代方案等算法的中型文章,尽管这些算法确实会对模型精度产生影响,但获得更好预测信号的最有效方法是获得正确的数据。例如,RFM 变换是关键—新近性、频率和货币价值。这是将交易或行为数据转换为某人最近交易或访问的时间、频率或平均花费(时间或金钱)的过程。在媒体个性化方面,公司通常使用特定用户访问特定网站(如奢侈鞋品牌)的事实作为特征。但这是骗人的。事实证明,如果你利用最近访问某个特定网站的时间(例如,48 小时内),你可以获得明显更好的广告转化率。你必须表现出正确的特征,才能让一个模型表现出来!
新近是一个简单的转换例子。今年夏天,我们很幸运地收到了多发性硬化症国际会议(electr IMS)的摘要,以表彰我们与客户Precision Innovative Network(PIN)的合作,该网络将独立的神经病学诊所联系在一起,以创建一个关于身份不明患者的人口数据平台。该公司将向制药公司、机器学习顾问和预测疾病轨迹的诊所本身提供宝贵的临床研究数据。在这个项目中,我们组建了一个跨学科团队,由准备数据的数据工程师、进行实验的数据科学家和作为主题专家的 PIN 创始人之一的神经学家Mark gudes blatt博士组成。Gudesblatt 博士能够将深奥的医学知识翻译成我们可以用来描述工程师的语言。一个我们作为数据科学家永远不会想到的特征的例子是受患者负面影响的认知域(例如,记忆、注意力、执行功能、视觉空间)的数量的聚合(通过平均值的标准偏差来测量)。当残疾跨越功能网络时,它与疾病的轨迹高度相关。
如上所述,我们与 PIN 的合作体现了不同团队合作的价值。最初,数据科学家、数据工程师和主题专家推动项目,而应用程序开发人员和业务分析师将大量参与项目的后期阶段。
尽早让您的应用开发人员参与进来
当然,应用程序开发人员是一个重要的团队成员。没有它们,您永远也不会知道如何将模型注入到业务逻辑中。它们将帮助您回答重要的问题,如:
- 应用程序将如何使用预测分数来改变业务逻辑?
- 从应用程序中提取数据并用于重新训练模型以保持其新鲜并反映当前状况的频率如何?
- 重新培训的模型何时以及如何取代旧的模型?
- 如何监控模型行为的准确性?
- 有必要恢复到旧型号吗?
- 如何将最新的数据用作模型的输入,以便它不会对陈旧的数据做出决策?
不要等到建模项目结束时才让应用程序开发人员参与进来。从一开始就让他们成为项目的一部分,以确保考虑到所有的操作细节,并从整个过程中消除尽可能多的延迟,以便模型准确地反映真实世界。
通过功能工厂创造一种实验文化
我将在以后的帖子中更多地讨论这一点,但是关于 ML 项目,可能有比仅仅将主题专家和应用程序开发人员包括在数据科学和数据工程团队中更重要的一点。这一点就是,要做好 ML,你必须在公司创造一种 的实验文化 ,你必须意识到 ML 项目没有一个可以说是上线的日期,也没有一个移交给运营部门以保持活力。这是一个持续实验的过程。事实上,团队需要保持专注来创建我喜欢称之为 的功能工厂 。功能工厂不断寻找增强信号的新功能。不幸的是,市场在变,坏人在创新,气候在变,竞争对手在变,等等。上线时的完美特征向量可能会在两个月后产生噪音,甚至更糟——明天。因此,秘诀是保持多样化团队的完整,经常评估已部署的模型,最重要的是保持他们尽可能多产以试验新特性。
商业公告(如果冒犯了你,跳过):我们公司制作了一个软件平台,帮助团队创建这种具有生产性特征工厂的实验文化,使他们能够用 ML 模型更新定制应用程序。[自从我的同事 Ben Epstein 撰写本文以来,他写了这些关于特性工厂的文章:数据科学特性工厂的终极工具和特性工厂 pt 2:ML flow 简介 ]要查看我们的 ML 管理器的演示,点击这里。
总之,在现代化您的定制应用程序时,不要停留在容器化或迁移到云上。将机器学习的智能注入到应用程序中,目标是不断改善业务成果。本质上不要创建数据科学组织。创建由数据工程师、数据科学家、应用程序开发人员和操作员、主题专家和分析师组成的“现代化特警队”。采用使这些团队能够构建实验文化的工具和过程。
数据科学将如何影响企业的未来?
原文:https://towardsdatascience.com/how-data-science-will-impact-future-of-businesses-7f11f5699c4d?source=collection_archive---------16-----------------------
随着超过 60 亿台(并且还在不断增加)设备连接到互联网,每天都会产生大约 250 万 TB 的数据。到 2020 年,预计将有数以百万计的新设备联网,每天将产生约 3000 万兆兆兆字节的数据。这个数字绝对会让你着迷。
How Data Science will Impact Future of Businesses?
我相信你知道世界各地不同科技巨头的大规模裁员。所以,这个时候,有一点变得至关重要,那就是需要把技能重新练到更有权威和回报的东西 —数据科学 。
据 forrester 称,到 2020 年,数据驱动的企业将“总价值 1.2 万亿美元,高于 2015 年的 3330 亿美元。 数据科学家通常被雇佣来帮助不同的公司采用各种以数据为中心的方法。
由于数据科学家对数据有着深入的理解,他们在推动组织走向深度学习、机器学习和人工智能采用方面工作得非常好,因为这些公司通常有着相同的数据驱动目标。他们还帮助为包含大量数据和分析的软件提供软件开发服务。
Image source
数据科学家帮助各种规模的公司找出从海量数据中提取有用信息的方法,以帮助根据这些发现优化和分析他们的组织。数据科学家专注于提出以数据为中心的问题,分析数据,并应用统计学和数学来找到相关的结果。
数据科学家拥有统计学和高等数学、人工智能和高级分析和机器学习的背景。想要运行基于人工智能的项目的公司,团队中有一名数据科学家是至关重要的,以便定制算法,充分利用他们的数据,并权衡以数据为中心的决策。
为了帮助企业为数据科学的光明未来做好准备,我们概述了塑造数据科学行业未来的以下 5 个关键因素。
1。为数据科学提供可操作的数据
Making data actionable for data science
制作拙劣的数据是数据科学取得成功的最大障碍之一。为了加快数据科学项目并减少失败,首席数据官和首席信息官必须专注于提高数据质量,并向团队提供与手头项目相关且可操作的数据
2。数据科学人才短缺
虽然数据科学仍然是新毕业生增长最快的领域之一,但需求远远超过了供应。该解决方案继续加快招聘,同时也在为分析和 BI 等领域的其他专业人员寻找替代方法,以加快数据科学流程并实现数据科学访问的民主化。这就是自动化对数据科学产生影响的地方。
3。加速“价值实现时间”
Accelerating “time to value”
数据科学是一个迭代的过程。它包括创建一个“假设”,然后测试它。这种向前向后的方法涉及许多专家,从数据科学家到主题专家和数据分析师。无论企业规模大小,都必须找到加快这一“努力、重复测试”过程的方法,并加快数据科学的进程,以实现更好的预测。
4。对商业用户透明
采用数据科学应用的最大障碍之一是业务用户缺乏信任。虽然机器学习模型可能非常有用,但许多业务用户并不依赖于他们不理解的流程。数据科学需要找到不同的方法来建立机器学习模型,以说服商业用户,并使用户更容易信任。
5。提高可操作性
Improving operationalization
数据科学采用增长的另一个障碍是它的可操作性有多难。在实验室中运行良好的不同模型在生产环境中并不适用。即使成功部署了模型,随着时间的推移,生产数据的持续变化和增加也会对此模型产生负面影响。这意味着“微调”ML 模型成为一种有效的后期制作方法——是这一过程的关键部分。
6。数量惊人的数据增长
人们每天都在产生数据,但大多数人可能根本不会去想它。根据一项关于当前和未来数据增长的研究,每天有 50 亿消费者与数据交互,到 2025 年,这一数字将增加到约 60 亿,占世界人口的四分之三。
除此之外,2018 年全球数据总量为 33 zettabytes,但预计到 2025 年将增加到约 133 zettabytes。数据生产正在增加,数据科学家将站在最前沿,帮助各种规模的企业有效地发展。
你真的需要数据科学家吗?
Do you really need a data scientist?
仅仅因为一家公司无法发现一个数据科学家团队,也不意味着它将不得不放弃数据科学的目标或失去高级人工智能或机器学习的机会。取决于一家公司是否有兴趣推进其人工智能战略,它可能需要一个熟练的数据科学家团队。
具有复杂用例或大规模方法和大型数据集的公司,很可能肯定需要不止一名数据科学家来在合理的时间内完成项目。
虽然,如果一家公司计划进行几项工作,但每个团队中只有几名数据科学家与其他团队成员合作可能是有价值的。根据需求,数据科学家可以与软件开发人员 密切合作,帮助团队中的每个人实现目标,而不需要任何特定的技能组合。数据科学家可以与现有团队成员一起工作,以公民数据科学家的身份开展工作。
随着人工智能的相关性增加,数据科学家周围的专家越来越短缺,许多公司都在想,如果没有人工智能,他们是否可以继续下去。此外,很难找到有才华的数据科学家,他们的工资通常是固定的。董事会中没有数据科学家也有可能走向人工智能的未来,但这真的取决于你想要运行的项目。
随着人工智能的不断普及,许多公司正在创造工具来帮助减少对数据科学家的依赖。一个这样的工具是 AutoML ,由许多创建自动化部分数据科学工作流的仪表板的供应商提供。
自动化机器学习工具旨在消除算法选择、迭代建模、超参数调整、模型评估甚至数据准备的元素,以便加速整个过程和一些复杂的设置。
首先需要熟练的数据科学家。一旦组织的数据通过 AutoML 系统运行,它就会产生一个可以直接使用或由工人分析的机器学习模型。通常,这些 AutoML 后的活动可以由受过比数据科学家更少培训的员工完成,或者由几个受过最新技能培训的现有员工完成。
除此之外,组织可以使用已经针对该问题训练过的机器学习模型。他们可以直接使用这些模型,或者使用迁移学习来扩展它们。这需要明显更少的资源,否则,这些需要从头开始构建。预训练模型已经根据相关数据进行了训练,并提供最终用户所需的分类、聚类、回归或预测。基于机器学习的 手机 app 开发解决方案 也因之而有需求。
Image source
系列软件开发人员 和对机器学习专业知识有限的业务分析师可以为他们的业务需求训练最佳质量的模型。随着可见的预训练模型列表的不断增长,公司能够将其用于情感分析、图像分类和文本,而不需要训练复杂模型所需的大型标签数据集和数据科学资源。
然而,供应商正在提供模型即服务,可在私有或公共云基础设施上使用,允许小公司访问复杂、大型且训练有素的模型,而无需他们自己的数据集。所有这些都减少了公司内部对数据科学角色的需求。
随着数据科学家的人才缺口不断扩大,毫无疑问,我们将会看到新的工具——出于需要——允许企业员工和非技术人员测试、运行和分析关键数据。业务经理和首席执行官将开始学习基础数据科学,以帮助他们管理和追求人工智能项目。传统的数据科学家仍然需要运行复杂的数据分析,但在大多数情况下,由于工具越来越易于使用,基本数据分析将成为民用数据科学家的角色。
让我们总结一下:
因此,在未来的数据科学中,我们学习了数据科学所需的技能和培训。毫无疑问,数据科学有着非常光明的未来。对数据科学家的需求将呈指数级增长。机器学习或人工智能将成为数据科学的重要组成部分。因此,未来人工智能开发公司的需求将会增加,印度的 移动应用开发服务 也将以同样的方式增加。
数据科学如何让你不成为流浪汉
原文:https://towardsdatascience.com/how-data-science-will-keep-you-from-becoming-a-hobo-727acb907258?source=collection_archive---------19-----------------------
蒙特卡洛的神奇一瞥
Source: Chicago Tribune historical photo
让我们从一些华而不实的高影响力统计数据开始。根据查尔斯·施瓦布 2018 年的现代财富指数,只有 1/4 的美国人有书面的财务计划,在没有的人中,只有 17%的人对实现他们的财务目标感到满意。
这是 62%的美国人不确定他们退休后会不会住在桥下吃猫粮,如果他们曾经住在桥下的话。谁也不能保证那 17%自信的人不会成为无业游民。
那么,我们如何才能让这些人享受到财务安全的舒适呢?我们如何让他们知道一切都会好起来的,或者有办法摆脱他们目前的处境?这两个问题的答案都可以通过制定一个全面的财务计划来找到,而今天的技术已经使得结合现代数据科学和数学方法来快速准确地揭示他们的财务未来成为可能。
财务计划是什么样的?我们如何把一个放在一起?一个真正好的财务计划会考虑到你现有的资产,你当前和未来的收入来源,比如社会保障,将它们与你当前和未来的支出进行对比,并为你的剩余资产附加一个增长率。
不幸的是,传统的财务计划看起来有点像这样:
So, so super successful
我认为我们都能看到这里的问题,我们在绝对地工作,而市场不是这样工作的。诚然,这是一个非常简化的版本,但它离真相不远了。财务顾问在介绍这一传统计划时,将回报率称为“目标”或“平均”回报率,他们将通过巧妙管理你的资金来实现这一回报率。有人可能会带着这样的印象离开这个会议,在 17 年后,他们会很高兴地坐在 120 万美元上,这是有保证的。毕竟,计划是这么说的,对吧?
但是,如果股市出现大规模崩盘,就像大衰退期间发生的那样,该怎么办?我们得调整模型,打印出来。如果你不得不拿出 20,000 美元上大学会怎么样?再次调整模型,打印出来。如果理财顾问不称职,年度回报到处都是怎么办?再次调整模型,打印出来。当你问完问题的时候,你已经带着 300 页的潜在假设,而你仍然没有对生活中一个重大问题的明确答案:我能安全地退休吗?
蒙特卡罗方法
Black line indicates actual path of Hurricane Sandy. Source: National Oceanic and Atmospheric Administration (NOAA)
我们无法准确预测未来,但我们可以确定不是 6%。当处理未知变量时,我们没有绝对,所以我们只能处理概率。让我们考虑一下天气,它每天每秒都在变化(除非你住在圣地亚哥)。如果气象学家对当前状况有足够的了解,他们可以在合理的误差范围内估计天气可能会是什么样子。他们使用蒙特卡洛建模来解释那些太不可预测的条件,并从那里可以确定他们每天的天气预报,甚至搜索潜在的飓风的天气情况。
蒙特卡洛建模,也称为蒙特卡洛方法或模拟,简而言之,是一种算法或过程,它使用随机性和概率来解决我们无法知道答案的问题,但希望通过产生高度概率的结果来尽可能接近问题。通过提供已知的数据,并随机化我们没有的变量,我们可以测试它数千次,以确定什么是最有可能的结果。这是一个在科学、数学和数据科学、领域使用的流行工具,我们将通过它来回答这个非常重要的问题。
它是怎么做到的?财务规划中最常见的方法是收集我们之前提到的传统变量,作为创建可靠财务计划的必要组成部分。然后,它绘制出第一年的图表,获取所有数据,并在给定的标准差内选择一个随机回报率。这个标准差通常是根据客户投资组合的特征预先确定的。然后,该模拟基于该回报率调整客户当年的投资组合,并基于客户当年陈述的支出目标和/或储蓄增加或减少美元。接下来的一年,一年,一年,再一年都是如此,直到钱用完,或者模拟在预先设定的年份结束。然后再做那个全过程,一个千遍。最终,您会得到如下结果:
The “broom” or “spaghetti” graph as we call it in “the biz” . Source: MoneyGuide Pro
看起来像飓风预报不是吗?你在上面看到的每一条灰线都是一次蒙特卡洛试验,或者说是一个客户的模拟财务寿命。正如你在这个例子中看到的,大多数线成功地到达了图的末端,只有少数线在到达终点线之前崩溃和燃烧。每一行对于我们试图回答的问题来说都是无关紧要的,但是结合起来,它们给了我们想要的真实结果。你在图表旁边看到的 88%告诉我们,在 1000 次试验中,有 880 次成功地带着至少 1 美元通过了终点线。现在,不是 300 页的“如果”,而是 1000 个“如果”,全部完全随机,包含了巨大和可怕的可能性,但都在一页上,结果被浓缩成一个结果:迹象指向是 (当然有很高的可能性)。
然而,这个工具不仅仅是一个超级神奇的 8 号球,它还可以产生结果,你可以用它来分析和做出明智的决定。通过改变储蓄、支出或回报率等变量,您可以重新运行这些模拟以获得更优的结果。改变足够多的事情,你就已经建立了逃离流浪的框架。
这难道不令人兴奋吗?我们有真正的工作水晶球!我们应该把它用在任何事情上,这样就不会再有什么不好的事情了!不幸的是,坏消息来了。
蒙特卡洛的局限性
尽管蒙特卡洛令人惊叹,但它也有缺点。因为我们使用概率来运行每个试验,并且应用相同的概率范围,所以我们会遇到异常值的问题。看看下图中橙色圆点:
“I want that one” — every client ever. Source: MoneyGuide Pro
这是一个失控的模拟,一个异常值。在我们客户的模拟生活中的某个地方,它在 x 轴上急转弯,并从那里继续前进。惊人的回报叠加在更惊人的回报之上,再加上不断增长的余额。一旦它走得足够远,沿着我们的潜在回报分布,再多的左转都不会把它带回现实。以同样的标准来衡量,这些模拟中的每一个都有可能在两个方向上成为疯狂的局外人。这就像连续 10 次在轮盘赌桌上敲同样的数字。
那么这告诉我们什么呢?橙点先生告诉我们蒙特卡洛斯只能在一个非常固定的范围内工作。如果我们让它走得太远,随机绘图将变得更加极端,并产生级联结果,这将变得完全无用。在现实世界中,这意味着如果不对非常年轻的人进行一些调整,我们就不能可靠地使用它。可靠的蒙特卡洛模拟的理想范围是 40-50 岁左右,所以假设你活到 81 岁,社会保障精算表认为你会死(用一堆盐来代替),你应该在 50 岁时开始认真对待这个问题,同时你还保留着做出改变的能力。当然,反过来也是正确的,蒙特卡洛模拟变得更加可靠(可变性更小)客户越老,但一旦退休,你就没有更多的方法从结果中得出结论。
另一个缺点是,随着股市的涨跌,我们使用的数据会不断变化,有时甚至以秒为单位。这意味着,我们刚刚运行的蒙特卡罗模拟只适用于我们运行它的那一秒。任何人都可以告诉你,你今天所做的决定取决于你在做决定时手头上的信息。我们不可能解释每一天每一秒都可能降临到一个人身上的近乎无限的可能性(“被公交车撞”的场景)。为了减轻这种情况,标准做法是定期重新审视和更新这一财务计划,通常是每季度或每年,但根据客户的情况,甚至可以低至每周一次。
不断变化的数据问题尤其与年轻客户相关,他们拥有几乎无限的金融潜力。一个年收入 10 万美元的 30 岁的人甚至还没有达到他们收入潜力的顶峰。他们还没有像他们的父母一样做出许多艰难的财务决定,比如生孩子,或者买房子,这使得他们未来成功的概率更难预测,因为没有足够的数据。虽然蒙特卡罗模拟可以让我们 30 岁的人模糊地看到他们的未来,但最好是将模拟隔离到更短期的目标,如为大学储蓄,或购买房子,同时关注未来。
阻止你流浪的未来
希望到现在为止,您已经对蒙特卡洛模拟有了更好的理解,并且能够帮助您制定出今天需要做的事情的框架。正确使用的话,这个工具可以帮助你做出明智的决定,这对你的未来有深远的影响,无论是经济上还是其他方面。不要等待,今天就开始计划,把这些技巧应用到你自己的生活中。
保护你自己和你爱的人不成为流浪汉。
在 LinkedIn 上与我联系!
[## 汉密尔顿·张,CRPC·CSPO-熨斗学校-纽约,纽约| LinkedIn
具有财务规划背景的数据科学家和机器学习工程师。我有专家级的知识…
www.linkedin.com](https://www.linkedin.com/in/hamilton-chang-crpc®/)
数据科学家如何帮助政府机构有效应对自然灾害
原文:https://towardsdatascience.com/how-data-scientists-can-help-government-agencies-effectively-respond-to-natural-disasters-c2978da932ee?source=collection_archive---------42-----------------------
圣地亚哥县野火影响的案例研究
本博客由 布伦达·哈利杰西·欧文斯拉里·柯伦 和 约翰·科比 共同撰写并交叉发布。找到我们的 GitHub 资源库 这里 。**
用于灾难准备、恢复和响应的信息的可用性在不断变化。社交媒体和其他在线平台拥有免费提供的数据,可以帮助地方和联邦响应机构了解自然灾害的潜在和实际影响。此外,这些数据可用于在需要减轻这些影响时准备和部署资源。我们的团队试图创建一个可复制的过程,用于识别给定地理区域的企业,并根据 FEMA 生命线协议标记和显示它们。我们使用了 Yelp 和谷歌数据,以及多种不同的地图技术。我们建立了一个可重复的流程,可用于根据历史信息绘制潜在风险图,并允许 FEMA 和其他机构绘制当前灾害图,以实时显示灾区将需要哪些类型的资源。
灾难会对圣地亚哥产生怎样的影响?
当灾难发生时,快速了解对响应工作的潜在影响的能力对于资源分配至关重要。美国每年发生 80 多起自然灾害,造成大量财产损失和生命损失。联邦紧急事务管理局(FEMA)与第一响应者合作,支持公民对这些自然灾害的准备、响应、保护和恢复。本联合会经常面临的挑战是,如何有效、及时地应对灾害,以及预测和满足当地机构和民众的需求。
联邦应急管理局的部分工作目标是确定哪些企业和组织必须获得优先援助,以便在危机时刻为公民提供最佳帮助。联邦应急管理局制定了生命线框架,以更好地应对灾害,通过生命线框架,联邦应急管理局官员可以确定应对工作的优先次序和重点,利用通用词汇,促进目标的统一和更好的沟通,并澄清灾害的哪些组成部分需要跨部门协调。七条生命线分别是:安全&安全、食物、水、避难所、健康&医疗、能源(电力&燃料)、通讯、运输、危险物质。
近年来,美国野火的频率和影响呈指数增长,加利福尼亚州是受影响的主要州之一。2018 年,加利福尼亚州发生了 8,054 起火灾,烧毁了 1,823,152 英亩,而 2010 年发生了 6,502 起火灾,烧毁了 108,742 英亩。此外,这些火灾造成了重大的经济和人员损失。仅在 2018 年,就有 85 人丧生,对国家造成 4000 亿美元的影响。在过去的二十年中,圣地亚哥及其周边社区尤其受到了一些最大的冲击性火灾的影响。2003 年 10 月的雪松火灾夺走了圣地亚哥县 273,246 英亩土地、2,820 座建筑物和 15 条生命。同样是在圣地亚哥县,2007 年 10 月的女巫大火吞噬了 197,990 英亩土地,1,650 座建筑,并夺去了 2 条生命。雪松火灾和女巫火灾都是加州有记录的野火历史上十大最具破坏性的火灾之一。
问题是
我们着手解决的挑战是,我们如何帮助联邦应急管理局确定在灾区可能受到影响的企业,以及这些企业可能与哪条生命线保持一致。利用这些信息,我们旨在创建一个交互式地图,用于可视化这些生命线位置与历史上受灾害影响的区域和未来有受影响风险的区域的关系。我们将这种技术应用于圣地亚哥县,但是我们的想法是创建一种可以在美国任何其他地方实施的方法和结果。该方法和结果被直接提交给新光技术,联邦应急管理局的承包商之一,通过大会。
工具
我们在准备本分析和技术报告时使用的工具包括:
- 谷歌应用编程接口
- Yelp 融合 API
- 计算机编程语言
- ArcGIS
- (舞台上由人扮的)静态画面
- 谷歌网站
数据描述
我们的分析包括以下数据来源:
- Google Places :使用 Google Places API 找到的企业和组织、企业的类别或类型、纬度、经度和格式化地址。
- Yelp :使用 Yelp API 找到的企业和组织、企业的类别或类型、纬度、经度和格式化地址。
- ****圣地亚哥县灾难:来自联邦应急管理局网站的圣地亚哥县发生的灾难类型和日期的历史数据。
- ****火灾周界:受野火灾害影响的区域的周界。
- 野火风险:圣地亚哥县目前处于高火险区。
- ****生命线信息:由 FEMA 定义的生命线描述和企业和组织分类类别。
问题方法
在为 FEMA 和新光技术解决这个问题时,我们采用了以下方法:
1.数据的收集和清理
2.对齐生命线
3.绘图
4.结论和后续步骤
数据的收集和清理
我们最初的提示建议使用 Yelp API 数据,我们开始这样做了。通过查看我们收到的数据和咨询以前 GA 学生的项目,我们很快了解到,这些数据不是很可靠,并且没有包括足够的信息来单独依赖 Yelp。我们决定利用他们的 API 整合来自 Google Places 的数据。除了位置数据,我们还必须使用联邦应急管理局网站上的定义和描述来描述真正的联邦应急管理局生命线。这构成了我们用于制图的数据基础。
为了给地图添加背景信息,我们收集了影响圣地亚哥县地区的历史灾害数据。我们发现了该县受一些历史上最具破坏性的火灾影响的地区的具体周界。我们还发现了来自美国农业部的数据,显示了当前的野火高风险区,这也被添加到我们的地图上。
对齐生命线
什么样的企业或组织符合联邦应急管理局的生命线?利用带有“附近搜索”和“文本搜索”的 Google Places API“地点类型”和 Yelp Fusion“类别”,我们将圣地亚哥县发现的所有地点映射到 FEMA 的七条生命线之一。我们将搜索术语如“执法”与安全、患者运动与健康和医疗等联系起来。我们使用的搜索词的完整列表以及我们将它们与哪条生命线对齐可以在我们的 GitHub Repo 中找到。
绘图
一旦我们的数据被收集并与联邦应急管理局的生命线一致,我们就将这些位置与历史受灾地区和当前的高风险区一起绘制出来。我们希望提供一个直观的、能提供最大价值的地图,所以在决定最终选项之前,我们测试了一些不同的工具。
谷歌地球专业版
虽然这很容易映射,但图像不是很清晰,也不太具有交互性。也不可能绘制生命线业务地图,然后添加火灾周界层或当前火灾风险区。
基本输入输出系统
我们可以使用 csv 绘制生命线数据,但是我们不能清楚地区分生命线。
ArcGIS
最终,我们认为 ArcGIS 提供了最佳的可用性、交互功能和视觉效果。我们可以在这张地图上应用许多图层,并简单有效地更新这些图层。我们包括了所有企业的图层,这些图层用生命线、历史野火灾难的边界和当前的高风险火灾区域进行了颜色编码。接下来的几张图片展示了 ArcGIS 的一些功能。
We started by mapping out the businesses, color coded according to what Lifeline they aligned with.
This shows the Lifelines in relation to perimeters of previous disastrous fires.
This shows the Lifelines in relation to current (November 2019) high risk of fire zones.
有关我们创建的 ArcGIS 地图的完整功能的视频演示,请查看以下视频:
结论
使用来自谷歌、Yelp、联邦应急管理局和美国农业部的数据,我们能够创建一个地图,显示圣地亚哥县的企业以及这些企业与联邦应急管理局的哪条生命线保持一致。此外,我们还能够将图层添加到先前受野火灾难影响的区域或未来可能受影响的高风险区域的周边地图中。这些信息可以帮助 FEMA 决策者在灾难期间动员和预测资源需求。
地图是一种工具,可用作确定疏散计划或估计灾难潜在或实际影响的起点。了解位置和它们映射到的生命线,可以帮助灾难响应团队更快地帮助这些位置或在灾难期间向需要的人提供援助。
改进和后续步骤
我们建议新光科技和联邦应急管理局投资于公共和私人技术合作。利用我们找到的完成这一分析的有价值的工具,我们能够描绘出灾难会如何影响企业和生命线的使用。由于障碍较少(刮擦限制/延迟、软件成本),我们的流程可以在最短的时间内在美国的任何地方重现。技术伙伴关系将大大提高识别和测绘灾害以评估其影响的效率。
此外,如果与 Yelp 或谷歌等平台建立合作伙伴关系,他们可以添加新功能,以更好地帮助 FEMA 做出回应。在他们的网站上添加可视字段,注明企业是否在受灾难影响的地区,以及企业是否因灾难而开业,这可以进一步简化我们的方法。
额外的技术投资将有助于联邦应急管理局及其应对和解决灾害的挑战。这些投资可能包括对我们在此测试的工具(ArcGIS)的扩展或对新工具的投资。用于创建地图的 ArcGIS 工具是通过免费试用构建的。对于接下来的步骤,我们建议投资这种类型的软件来增强该地图,并将其应用于受灾害影响的其他地区。它的软件使用费是每年 500 美元。
该地图是一个例子,可以用于美国任何可能受灾难影响的地区。为了使这一过程对联邦应急管理局及其承包商来说更容易,我们建议投资和收购新技术,以帮助高效和有效地绘制出我们在这一分析中绘制的信息。此外,与谷歌这样的科技公司合作,让企业有机会在灾难发生后将自己的开放状态放在谷歌上,这有利于响应团队更快地评估灾难的状态。目前,联邦应急管理局评估损失的一个众所周知的方法是通过华夫饼屋指数。实施技术合作伙伴关系,使所有企业更容易交流他们的状态,可以更好地描述灾难后的状态。
来源
在准备本项目时,以下资源是必不可少的:
- 在我们之前的大会学生已经研究过这个问题,如果不参考他们的工作,我们就不可能走得这么远:
- ATL
- ATX
- 书斋
- FEMA 生命线框架
- FEMA 生命线响应工具包
- 保险信息研究所事实&统计:野火
- 美国农业部概率野火风险
- FEMA 历史灾难声明
- 加州政府关于火灾周界的数据
- Yelp 融合 API
- Google Places API
- 2018 年野火的预计经济影响
此外,我们用这些信息创建了一个静态站点:https://sites . Google . com/view/FEMA-lifeline-business-lines/home
数据如何揭示西弗吉尼亚州明戈县阿片类药物流行背后的供应链
原文:https://towardsdatascience.com/how-data-shed-light-on-the-supply-chain-behind-the-opioid-epidemic-in-mingo-county-wv-9e60b18c9d68?source=collection_archive---------35-----------------------
华盛顿邮报做了一件伟大的工作获得了曾经由药物执行机构(DEA)维护的秘密数据库 ARCOS(自动报告和综合订购系统),该数据库跟踪每一种受管制物质是如何从制造商转移到患者手中的。通过挖掘数据库,我们可以一窥那些摧残了许多美国人的阿片类药物都是从哪里来的。
在本文中,我将重点关注西弗吉尼亚州的明戈县,这是一个位于肯塔基州边界的农村县,人口只有 3000 人。它是全国新闻报道的焦点,主要是因为那里发生了不好的事情。从 2006 年到 2012 年,超过 3800 万剂阿片类药物被运往那里,足以满足每人每年 1800 多剂药物的需求。虽然《华盛顿邮报》有一个非常好的交互式仪表盘来快速显示各县的初步调查结果,但我已经决定深入挖掘明戈县的数据,看看能不能发现什么有趣的东西。如果你也想玩玩这些数据,可以从华盛顿邮报的网站下载。
让我们直接进入它。
因此,在每个条目中,它都包括有关转让的药物(品牌名称、类型和剂量)、购买者(通常是零售药店,但有时是连锁药店或执业医师)和提交报告者(药物转让者,在这种情况下,总是分销商)的信息。有了这些信息,我们可以追溯到制造商→分销商→零售商的环节。
首先,让我们看看零售商层面:
首先映入眼帘的是,三家零售药店销售了 70%的阿片类药物,Strosnider 在 2007 年销售了 400 万剂,相当于该县每人 1300 剂。Strosnider 是一家控制着两家 Sav-rite 药房的公司(Sav-rite 药房#2 在该名单中排名第四),其所有者在 2012 年被判处 6 个月监禁和 5000 美元罚款。即使在 2012 年,Strosnider 仍然向 DEA 报告购买了成千上万的阿片类药物。联邦调查局表示,他们的调查重点是 2006 年的交易,但我们只能推测调查实际上是何时开始的。但我们确实观察到 Strosnider 的业务从 2008 年到 2009 年急剧下降,在这么短的时间内,他们在第二家店下提交了一些报告。Tug Valley 的剂量计数在此期间也有所上升,可能从 Strosnider 那里抢走了一些销售额。自于 2018 年关闭以来,该地点现由 CVS 运营。与此同时,赫尔利药物公司仍在营业。
现在让我们看看分销商:
与我们在零售层面看到的情况类似,三家分销公司占据了市场,销售了超过 70%的剂量。迈阿密-卢肯,俄亥俄州斯普林博罗的中间人,宣布今年早些时候将关闭。H.D. Smith 曾渴望打入 Mckesson、Cardinal Health 和 Amerisource Bergen 这三大药品批发商,但后来被 Amerisource Bergen 收购。Mckesson 排在第三位,但大部分销售是在 2006 年和 2007 年初。也许他们注意到了其他经销商没有注意到的东西?
通过观察记者-买家配对的年度趋势,我们可以看到 Mckesson 和 Miami-Luken 都是 Strosnider 的主要供应商。然而,Mckesson 在 Strosnider 的参与大部分在 2008 年结束。同时,迈阿密-卢肯公司也是 Tug Valley 的最大供应商。H.D. Smith 给 Tug Valley 和 Hurley 药品公司供货。
正如我们所见,排名前 6 位的产品都是由 Actavis Pharma 生产的,它们都是氢可酮产品,浓度为 7.5 毫克至 10 毫克。公司收购了 Allergan,合并后的公司又被 Teva 收购。因此,Actavis 占 Mingo 县出售的阿片类药物剂量的 77%,其中 75%是前 6 名产品。由 Endo Pharmaceutical 拥有的 Par Pharmaceutical 拥有 14.8%的市场份额,销售的主要是 7.5 毫克和 10 毫克氢可酮。Mallinckrodt Pharmaceuticals 的子公司 SpecGx 拥有 5.6%的市场份额。许多诉讼的焦点普渡制药公司仅排在第四位,市场份额不到 1%。
这里没有直接显示供应链中的一个环节,即开药的医生。在像明戈县这样的农村地区,通常很容易跟踪谁在开处方,因为患者通常在医生和药房方面没有多少选择。在 Strosnider 一案中,Justice Medical 及其医生早些时候因滥用药品管理局注册号而被起诉。在城市地区可能更难追踪,因为患者可以进入许多其他药店。
虽然阿片类药物处方的激增现在已经结束,但损害已经造成,因为这些患者现在对阿片类药物上瘾。随着普通、合法的阿片类药物变得越来越少,他们不得不转向更强的阿片类药物,如海洛因和芬替尼,这些药物占 2017 年美国大约一半或大约 30,000 例阿片类药物死亡。有人想知道是否可以在 ARCOS 中内置一个异常检测系统来标记可疑的供应商。
你可以在我的 Github 找到我的代码,在LinkedIn上和我联系。
数据如何在一个全球问题上创造一个集体的声音
原文:https://towardsdatascience.com/how-data-sparks-a-global-discussion-on-a-global-issue-f66f43e330d5?source=collection_archive---------44-----------------------
关于澳大利亚学生移民的动画条形图如何引发丰富讨论的简短思考
(Photo: Sustainable Square)
20.6 万张赞成票。1.9k 评论。交叉发布在另外 10 个子栏目上。
不是超级印象深刻。但是这些数字是否反映了我在 subreddit /r/dataisbeautiful 上发布的条形图的成功(或受欢迎程度)?
背景故事
最近我贴了一个种族条形图,显示了从 2002 年到 2009 年澳大利亚十大国际学生来源国的演变。这是我这学期参加的数据可视化课程的一部分,我们被鼓励与更广泛的互联网社区分享我们的(更好的)创造。于是我照做了。
但我从未想到它会获得如此多的回应。毕竟,这只是我的第二个帖子,我在这里,来自世界各地的人们对我张贴的任何内容都给予了宝贵的意见。
在我继续之前,可能值得指出的是,我对澳大利亚几乎一无所知。我只是选择了这样一个数据集,因为我和我的一个朋友一致认为,看看那边的国际学生的人口统计数据会很有趣,因为澳大利亚的高等教育行业以其对外国学生的开放而闻名。
那么,通过与世界其他地方分享我的小动画图,我能学到什么呢?
故事。人们在个人层面上讲述的故事。世界各地的故事。其中许多故事不仅围绕着澳大利亚,还围绕着世界移民问题。
问题和答案的全球搜索
人们谈论的第一件事是,他们看到的是对图表中数据的有趣观察。这些也可能是意想不到的趋势或数字,与他们的直觉告诉他们的不符。
对于那些不能(或太懒)在图表中发现任何有趣的东西的人,这里有一些 redditors 指出的一些:
- 从 2002 年到 2019 年的大部分时间里,中国和印度学生一直是澳大利亚国际学生人数的最大贡献者;中国人比印度人更受欢迎。
- 就尼泊尔学生占尼泊尔人口规模的比例而言,尼泊尔似乎超出了比例,2017 年至 2019 年排名第三。它的排名超过了像巴西这样的大国,学生数量只有印度的一半,而人口数量只有印度的一小部分(尼泊尔有 3000 万,印度有 13 亿)。
- 从 2009 年到 2013 年,印度学生人数持续大幅下降。
虽然这些观察结果非常普遍,因为大多数人可以马上识别出来,但也有一些只有具备特定知识或兴趣的人才能指出。
后者的一个简单例子是,一个马来西亚人指出,“嘿,我以为我们的人数会更多,排名会更高,因为我所有的马来西亚朋友似乎都在前往澳大利亚上大学。”
然而,使这些由世界各地不同的个人产生的观察结果更加令人着迷的是,世界各地的其他用户通过他们看待世界的独特视角,寻求解释或合理化这些观察结果的大量回应。
一个恰当的例子是尼泊尔 redditors 如何介入,不仅讨论了他们对新发现的关注点的惊讶(或缺乏),还讨论了他们认为产生这些数据的原因(见上文第 2 点)。一些人指出,国内教育机会少,腐败猖獗,获得国外签证和居留权容易。
The April 2015 Nepal Earthquake devastated the Nepalese economy. Could it have caused the surge in Nepalese student numbers in Australia? (Photo: AP Photo / Manish Swarup)
同样,一些居住在澳大利亚的印度 redditors 指出,2009 年至 2013 年印度学生的突然减少可能是由于印度人对澳大利亚两个最大城市悉尼和墨尔本发生的一系列针对印度学生的暴力袭击和抢劫事件的愤怒和恐惧高涨造成的。这里有一篇 redditors 分享的文章:
[## 澳大利亚总理敦促冷静,因为暴力事件在悉尼和墨尔本爆发
澳大利亚总理陆克文今天呼吁人们保持冷静,因为针对……的一系列袭击引发了越来越多的愤怒
www.theguardian.com](https://www.theguardian.com/world/2009/jun/10/australia-indian-students-attacked)
这些故事有什么共同点?我看到了重新发现、重新解释和重新讲述某个故事的共同努力,一个直到灰尘和蜘蛛网从书的封面上被清除后才为人所知的故事。
人们急切地提出他们的意见
但是讨论并不仅仅围绕着寻找故事来解释或拟合数据。我们人类是有生命的,我们试图将自己与我们看到的事物联系起来,在这种情况下,与我的条形图中呈现的数据联系起来。
看过我的帖子的 Redditors 分享了他们的个人经历以及与学生移民(甚至外国影响)主题的关系,无论是从一个外国人的角度,还是从一个本地人的角度,观察移民如何影响他们,例如荷兰、德国、英国、巴西、加拿大、美国、南非、越南、印度尼西亚、新西兰,当然,不要忘记澳大利亚。
他们都有非常不同的背景,这些背景影响了他们对这个主题的故事、看法和观点;有的是某大学的行政人员,有的是学生,有的大概是某大学的教授,一个说自己在语言学校工作,还有一个自称在 PC 零售商工作过。当然,还有许多人只是没有透露他们的职业。
我读过的许多个人轶事也谈到了他们在日常生活中遇到的国际学生的数量,这些学生的行为和特点——他们是否能说好东道国的语言,他们是否能与当地学生很好地相处,他们的消费习惯(尤其是中国人的消费习惯),甚至他们在小组项目中的能力。
相反,也有关于国际学生如何努力适应东道国生活以及他们如何可能被当地学生避开的故事。
Studying abroad is not always bright and sunny, according to some redditors. This author concurs with that opinion. (Photo: Clark and Lavey Benefits Solutions/ Clark & Lavey)
其他人讲述了有趣的故事,他们亲眼目睹了大学入学要求(如英语水平)的降低或移民政策(获得永久居留权和公民身份)的宽松如何打开了国际学生入境的闸门。
在澳大利亚的案例中,有人甚至指出,澳大利亚大学与中国科技公司之间合作的增加,导致了更多的中国学生,以及对知识产权被盗的更大担忧。
[## 中国将取代美国成为澳大利亚的主要研究伙伴
该报告的作者詹姆斯·劳伦森说,澳大利亚在这方面的花费只是美国和中国的一小部分
www.afr.com](https://www.afr.com/policy/health-and-education/china-to-replace-the-us-as-australia-s-leading-research-partner-20190718-p528e4)
当然,当一些 redditors 谈论他们如何目睹政府对他们国家的大学资金的一再削减,以及税收的变化如何影响他们国家的移民政策时,政治也不可避免地被卷入其中。
然而,必须指出的是,一些故事或观点可能会有争议或不正确,这真的取决于个人的判断力来辨别什么值得相信或不值得相信。
除此之外,这样的评论反映了世界各地的人们如何在个人层面上联系和连接数据。它们不一定被所有人接受,但它们是全球对话的一部分,是一个正在发生的故事,我们可以从中学到很多东西,即使只是作为一个旁观者。
那现在怎么办?
在浏览了我的帖子上的各种评论后,我意识到我对人们如何思考和感受我用图表提出的话题有了更多的了解。不仅仅是澳大利亚,还有其他许多国家。我不会意识到它们——有趣的观察和见解,个人轶事和观点,等等。没有他们的贡献。
当然,我可能已经能够自己对我观察到的一些趋势做一些研究,但没有什么比看到世界各地更多接触这个主题的人贡献他们的解释、说明和故事更丰富和有益的了。
如果你想阅读更多关于确切见解的文章,可以看看 reddit 上的评论。不要忘了这篇文章还被其他 10 个不同的子网站的其他 redditors 交叉发布,例如/r/melbourne、/r/nepal 和/r/professors,它们也有其他有趣的讨论。
因此,如果你们中的任何人在犹豫要不要与更大的社区分享你们的数据或观想,不要害怕!它只会引发刺激的讨论,创造一个你在别处读不到的新奇故事。
如果没有数据本身,你不会发现,我们互联网社区也不会拼凑出一个集体故事。
如果你喜欢这个故事,并且想使用 Tableau 自己创建一个动画条形图比赛,请在这里查看我的另一篇文章获得一步一步的教程!
数据将如何赋能未来的人工智能教师
原文:https://towardsdatascience.com/how-data-will-empower-ai-teacher-of-the-future-193e83c9514f?source=collection_archive---------28-----------------------
Image Source: https://geneticliteracyproject.org/wp-content/uploads/2018/09/AI-9-25-18.jpg
传统教室在一两个世纪里没有太大变化。孩子们来到教室,老师给他们讲课,然后通过测验和考试对他们进行严格的评估。今天的教育在两个主要方面辜负了我们:
- 它没有认识到每个学生都是不同的,需要学习不同的东西。难怪,学校和大学的教育环境对今天的学生来说压力如此之大。
- 它不允许学生按照自己的速度学习。我们的课程是根据班上的一般学生来设置的,这使得成绩优秀和成绩差的学生都处于不利地位。
人工智能(AI)和数据授权的虚拟教师(或机器人教师)都将改变未来人类学生的学习方式。以下是人工智能教师将在教育领域带来变革的一些方式:
处理招生,维护出勤记录,并评分考试
每个老师都会同意,他或她的四分之一的时间和精力都花在了最平凡、最无聊的任务上,比如考勤、管理入学和注册程序、评分测试和考试。
人工智能教师可以被编程为以无错误的方式快速完成所有这些任务。由于它们可以在定义的参数内处理大量数据,人工智能可以用更少的人力完成更多的工作。
现在,计算机已经被用来给客观题、选择题和单选题评分。随着时间的推移,自然语言处理(NLP)的进步将很快使人工智能教师像人类教师一样给论文评分成为可能。
让每个人都能学习
虚拟人工智能教师使弥合各种教育差距成为可能。Smiletutor.sg 的顶级地理老师 Timothy Lim 先生评论道:“我经常使用有趣的基于网络或手机的游戏和应用程序来让学生参与学习。例如,谷歌地球和邦扎国家地理应用程序是地理学生保持兴趣的绝佳学习资源。
基于人工智能的学习应用程序也使优秀的教师能够接触到偏远地区的学生。在面临教师严重短缺或网络连接问题的地区,有可能使用人工智能教师为儿童提供教育。
未来的人工智能教师可以以不同的形式提供教育——文本、音频和视频——并且可以跨越语言障碍。甚至今天还有智能的自动化翻译系统可以将一种语言的句子翻译成另一种语言。未来可以对它们进行改进,以允许人工智能教师以最适合个体学生的语言和格式提供教育(包括那些有身体和精神障碍的学生,这些障碍阻碍了他们的学习过程)。
提供个性化课程
有一件事会让未来的人工智能教师比人类教师更好,那就是数据的力量。它们可以被设计成使用各种心理测量量表来评估学生的能力和兴趣。然后,他们可以根据自己的个人资料提供教育模块。
与今天不同的是,当每个孩子以同样的顺序学习同样的科目时,未来的人工智能教师将能够教授学生将实际用来实现他们全部潜力的知识和技能。此外,人工智能教师将能够根据个人的需要定制自己。这意味着,虽然人类教师在一对多的教学方式中有局限性,但人工智能教师将能够轻松地在一对一的基础上传授知识,就像每个学生有一个老师一样!
永远不要疲倦或沮丧
为什么你觉得 AI 老师会很酷?因为他们永远不会疲倦或沮丧。他们可以一遍又一遍地回答同样的问题,而不会感到恼怒或厌烦。事实上,许多使用自然语言处理(NLP)技术的聊天机器人仍然会为用户检索相关的内容(基于他们所提问题中的关键词)。
学生们认为机器人老师会更加平易近人。如果像 Siri 一样的老师可以获取每门学科的信息,他们的成绩肯定会提高。即使是内向的学生,如果在班上不好意思问学生,也会发现向他们的个人 AI 导师提问很容易。
在课堂之外提供教育支持
人工智能教师甚至可以在放学后为学生提供支持。学生可以随时随地向他们提问,他们可以在几微秒内就任何给定的话题获取深入的信息。
通过分析学生数据,人工智能教师将能够确定学生最感兴趣的主题,并为他们提供关于这些主题的越来越具有挑战性的课程。使用推荐引擎机制(这有助于 YouTube 推荐你喜欢的艺术家或流派的新歌,或者脸书推荐你可能感兴趣的产品),人工智能教师将能够推荐学生可能喜欢探索的下一个主题。
人工智能教师可以利用视听媒体来教学生。这意味着这些老师不仅会开书,还会向学生展示图片、动画、视频,甚至是与主题相关的活动和会议。
提供体验性和沉浸式虚拟环境
Oculus Rift 和类似的 VR(虚拟现实)和 ar(增强现实)设备已经在改变我们看待世界的方式。在吸收了成千上万组数据后创建的场景有时是如此强大,以至于你感觉自己好像是其中的一部分。
现在,想象一下在探索身体内部的同时研究生物学,或者法国大革命的历史,在那里你可以看到当时发生的事情,就好像你穿越到了那个时代。这是 AI 老师能为下一代做的。
信息图表和虚拟实地考察将使教育变得更加有趣和容易记忆。枯燥的教科书将被有趣而灵活的沉浸式体验所取代,学生可以在实践中学习(如进行实践,或设计机器原型并想象它们是如何工作的)。
人工智能教师将拥有前所未有的数据和信息能力。他们将在有能力的“人类”教师手中制造出优秀的工具,并彻底改变教育领域。
深度学习如何帮助天气预测和气候模型
原文:https://towardsdatascience.com/how-deep-learning-is-helping-weather-predictions-and-climate-models-389ba226b7ab?source=collection_archive---------12-----------------------
深度学习模型正在帮助加速计算最密集的任务之一——天气和气候建模。
介绍
《时代》杂志选择了格蕾塔·图恩伯格,她 16 年来充满活力,致力于拯救我们的星球,作为 2019 年的“年度人物”。格里塔一直在勇敢地在世界各地发表演讲,讲述我们人类作为一个物种,以气候变化和环境破坏的形式共同面临的迫在眉睫的危险(有些人甚至称之为生存危机),这主要是由于人类活动而加速的。
为了理解这一划时代的全球事件的影响,我们需要大量的科学数据、高保真的可视化能力和强大的预测模型。
因此,天气预测和气候建模处于人类对抗气候变化的最前沿。但是,他们不是容易的企业。至少,对于大数据分析和科学模拟能力的所有进步来说,这些地球规模的问题对于当今的硬件和软件栈来说是难以解决的。
我们能否借助人工智能的力量,尤其是深度神经网络的力量,来帮助我们完成这项事业?
为了理解这一划时代的全球事件的影响,我们需要大量的科学数据、高保真的可视化能力和强大的预测模型。
深度学习加速了这项复杂的任务
WRF 模式
在美国,大多数天气预报服务都是基于一个名为天气研究和预报(WRF)的综合中尺度模型。
该模型适用于从几十米到几千公里的大范围气象应用。正如美国能源部阿贡国家实验室的环境科学家王佳莉所言,言简意赅地说——它描述了你在窗外看到的一切,从云到太阳辐射,到雪到植被——甚至是摩天大楼扰乱风的方式。
Weather Research and Forecasting (WRF) model
开发 WRF 的努力开始于 20 世纪 90 年代后期,主要是各种政府机构和大学之间的合作伙伴关系——国家大气研究中心(NCAR)、国家海洋和大气管理局(NOAA)、空军气象局(AFWA)、海军研究实验室(NRL)、俄克拉荷马大学(OU)和联邦航空管理局(FAA)。该模型的大部分工作是由 NCAR、NOAA 和 AFWA 完成或支持的。
它已经成长为一个大型全球用户社区(超过 150 个国家的 30,000 多名注册用户),由全年举行的研讨会和教程提供支持。事实上,WRF 在全世界被广泛用于研究和实时预报。它具有两个动态内核,一个数据同化系统,以及一个支持并行计算和系统可扩展性的软件架构。
在美国,大多数天气预报服务都是基于一个被称为天气研究和预报的综合中尺度模型。
无数变量的结合
也许这并不奇怪,这样一个综合模型必须处理无数与天气相关的变量及其高度复杂的相互关系。用一套统一的解析方程来描述这些复杂的关系也是不可能的。相反,科学家们试图使用一种叫做参数化的方法来近似方程,在这种方法中,他们在比实际现象更大的尺度上模拟关系。
虽然在许多情况下,这种方法产生足够的预测精度,但它以计算复杂性为代价。因此,扩展成为一种负担。
深度学习的神奇力量能解决这个问题吗?来自阿贡国家实验室的环境和计算科学家当然充满希望。他们正在合作使用深度神经网络(DNN)来取代 WRF 模型中某些物理方案的参数化,希望在不牺牲保真度和预测能力的情况下大幅减少模拟时间。
虽然在许多情况下,这种方法产生足够的预测精度,但它以计算复杂性为代价。
深度学习取代了复杂的基于物理的模型
Argonne 的团队使用了 20 年来自 WRF 的基于物理的模型生成的数据来训练神经网络,并使用了两年的数据来评估经过训练的深度学习模型是否可以提供足够准确的替代方案来替代基于物理的参数化。
如果成功,这将使他们能够创建一个密集的网格(想象成地球和大气的三维地图),在这个网格上可以计算感兴趣的量,如风速或湿度。这种地图的密度越高,可视化的质量就越高,就有可能更准确地预测特定地点。只有快速计算如此密集的网格,即从数学 DNN 模型得出的结果,而不是从详细的模拟模型得出的结果,才能使这个梦想成为现实。
特别是,科学家们试图将他们的研究集中在所谓的行星边界层(PBL) ,或大气的最低部分,人类活动对其影响最大。它仅在地球表面上方几百米处延伸,这一层中的气象动态,如风速、温度和湿度分布,对于确定大气其余部分和地球上的许多物理过程至关重要。
PBL: Source
他们正在合作使用深度神经网络(DNN)来取代 WRF 模型中某些物理方案的参数化,希望在不牺牲保真度和预测能力的情况下大幅减少模拟时间。
两个数据流,总计 10,000 个数据点,跨越 8 天时间,一个来自堪萨斯州,另一个来自阿拉斯加州,被输入 DNNs。结果表明,根据输入和输出变量的相互关系训练的 DNNs 可以成功地模拟风速、温度和水汽随时间的变化。
结果还显示,来自一个位置的经过训练的 DNN 可以预测附近位置的行为,相关性高于 90%。这意味着,如果我们有大量高质量的堪萨斯州数据,我们也可以希望加快密苏里州的天气预测活动,即使在该州收集的数据不多。
如果成功,这将使他们能够创建一个密集的网格,在这个网格上可以以高保真度和合理的精度计算感兴趣的量,如风速或湿度。
用于深度学习的千兆字节大小的操场
DNNs 对数据的胃口永远不会满足。对于这种天气建模研究,他们有很多东西可以大嚼特嚼。阿贡领导计算设施 (ALCF)是能源部科学用户设施办公室的一部分,这里的大型超级计算机总是嗡嗡作响,从复杂的模拟中产生气象数据。再加上劳伦斯柏克莱国家实验室国家能源研究科学计算中心的高性能计算(HPC)资源,你可以将近 1pb 的描述北美 300 年天气数据的数据馈送给 DNNs。
来自一个位置的训练有素的 DNN 可以预测附近位置的行为,相关性高于 90%。
摘要
气候变化正在降临到我们头上,也许这是人类有史以来面临的最大的生存危机。另一方面,人工智能等变革性技术,加上云和大数据分析,有望为人类带来难以想象的财富和繁荣。
我们能用后者来解决前者吗?这篇文章描述了一个深思熟虑的科学努力的使命。有很多这样的努力,在这篇文章中作为一个总结。
[## 人工智能如何应对气候变化
气候变化是地球面临的最大挑战。它需要所有可能的解决方案,包括技术…
www.nationalgeographic.com](https://www.nationalgeographic.com/environment/2019/07/artificial-intelligence-climate-change/)
如果您有任何问题或想法要分享,请联系作者在tirthajyoti【AT】Gmail . com。此外,您可以查看作者的 GitHub 资源库中的代码、想法和机器学习和数据科学方面的资源。如果你和我一样,对人工智能/机器学习/数据科学充满热情,请随时在 LinkedIn 上添加我或在 Twitter 上关注我。
[## Tirthajyoti Sarkar - Sr .首席工程师-半导体、人工智能、机器学习- ON…
通过写作使数据科学/ML 概念易于理解:https://medium.com/@tirthajyoti 开源和有趣…
www.linkedin.com](https://www.linkedin.com/in/tirthajyoti-sarkar-2127aa7/)
神经网络在图像中寻找特征有多深?有了 Keras 和 Google Colab
原文:https://towardsdatascience.com/how-deep-neural-network-look-for-features-in-images-with-keras-and-google-colab-28209d57f771?source=collection_archive---------15-----------------------
从隐藏图层中提取 Conv 图层输出
What’s in the net? (Source: Pixabay)
当我第一次开始从学习标准的机器算法(如逻辑回归、支持向量机)走向深度学习和神经网络时,我常常着迷于网络中的深层是一种“黑盒”。后来,这种错误的理解消失了,一旦我学会绘制中间卷积层的输出,随机选择图像并查看每一层中发生的事情几乎成了一种痴迷。今天,我想一步一步地描述你如何从隐藏的 conv 中提取特征。使用 Keras 的层(运行在 TensorFlow 之上)。为了简单起见,我采用了狗与猫的数据集,我将构建一个类似 VGG16 的模型,因此,这个问题本质上归结为一个二进制分类问题。
你可以从这篇文章中学到什么—
- 学会使用谷歌 Colab 部署你的深度学习模型。我发现这非常有用,因为你可以免费使用云 GPU,12.72 GB 内存和 350 GB 磁盘空间。
- 提取隐藏的 conv。使用 Keras 的图层输出。
- 两种不同的方法平铺这些输出以形成紧凑的图像。
因此,让我们立即开始吧!
设置 Google Colab 环境:
如果你没有 GPU 和大量的 CPU 资源,Google Colab 可以帮助你训练中度到重度的深度网络。目前,Colab 提供 12 GB Nvidia Tesla GPU,可以连续使用长达 12 小时。如果你习惯于在 Jupyter 环境下工作,你可以很容易地适应 Google Colab。查看 Google 提供的关于使用 Colab 的详细教程,在这里,我描述了完成教程的两个必要步骤。
- 使用 GPU: 要访问 GPU,您需要更改运行时类型。下图显示了 Colab 环境。
2.安装你的硬盘:你需要安装你的谷歌硬盘来访问硬盘上的文件。为此,您需要运行以下命令—
from google.colab import drive
drive.mount('/content/gdrive')
URL 将为您提供一次性授权码,将其复制并粘贴到下面的框中,然后按 enter 键。你会得到确认——
Mounted at /content/gdrive.
之后,您就可以直接使用驱动器中的文件和文件夹了。现在让我们深入教程。
用 Colab 内部的 Keras 训练深度神经网络
让我们使用 Keras Sequential 来构建我们的模型
为了更快地完成训练,我使用了一个更像迷你版 VGG16 架构(2 层 conv)的模型。层,后跟一个池层),输入大小设置为(160,160)。让我们检查一下模型摘要—
我猜你们大多数人都知道计算参数。但是让我们先来回顾一下前几层。对于第一层,输入图像大小为(160,160)3 个通道 (n_c) 。滤波器尺寸 (f) 为(3,3),滤波器数量 (n_f) 为 16。所以总重量数(f× f × n_f × n_c) = 432。偏差数= n_f = 16。参数总数= 448。同样,对于第二层,权重= (3× 3 × 16 × 16) = 2304,偏差= 16,因此,参数总数= 2320,依此类推…
数据预处理:在使用Keras imagedata generator类之前,我们要记住这里我们会直接从 google drive 中使用文件和文件夹。所以我们必须精确文件路径。让我们看看修改后的代码块—
为了节省时间,我只用了 2800 张图片进行训练,用了 600 张图片进行验证。接下来不可避免的是编译和拟合模型——
我使用了 100 个历元,通过参数设置,在训练和验证数据上实现了 89%和 83%的准确度。在使用 GPU 的 Google Colab 中,训练这个模型大约需要 75-80 分钟。
我试着预测从互联网上下载的一些随机图片上的类别标签
我看到 3 张图片包括一只愤怒的猫被预测为狗。我们的重点不是提高精确度,而是检查隐藏 conv 的输出。层,并了解层中的不同滤镜如何试图在图像中找到不同的特征。让我们这样做
可视化 Conv 图层输出:
我将描述两种可视化 conv 的方法。图层输出,它们非常相似,但是平铺图像的过程不同。你可以根据你的喜好来选择…
第一种方法:水平叠加层输出
让我们检查图层名称:
from keras.preprocessing.image import load img_to_array, load_img
import random layer_names_list = [layr.name for layr in model.layers]
print ("layer names list: ", layer_names_list) >>> layer names list: ['conv2d_1', 'block0_conv2', 'block0_pool1', 'block1_conv1', 'block1_conv2', 'block1_pool1', 'block2_conv1', 'block2_conv2', 'block2_pool1', 'block3_conv1', 'block3_pool', 'flatten_1', 'dense_2', 'Dropout_1', 'dense_3']
我会选择几个 conv。我希望看到输出的图层,
selected_layers = [‘block0_conv2’, ‘block2_conv1’, ‘block2_conv2’]matched_indices = [i for i, item in enumerate(layer_names_list) if item in selected_layers]print (matched_indices)>>> [1, 6, 7]
为了从选定的层中获得输出,我们将使用Keras layer . output方法。然后将输出附加到一个列表上,让我们看看:
selected_layers_outputs = []for lr in range(len(matched_indices)): outputs = model.layers[matched_indices[lr]].output
#output from selected layers selected_layers_outputs.append(outputs)
下一步是重要的,因为我们将实例化一个新的模型,它将采取一个随机的图像(猫或狗)作为输入,输出将是选定的 conv。层输出。查看 Keras 模型 API 了解更多详情。
visual_model = keras.models.Model(inputs = model.input, outputs = selected_layers_outputs)
如果你记得我们的原始模型(VGG 喜欢)的输入,它是输入大小(无,160,160,3)的图像批次。我们将选择相同的输入尺寸维度,但是因为我们只想一次只处理 1 个随机选择的图像,所以我们的批量大小将是 1。首先,让我们随机选择一个图像,我们将使用 random.choice,从非空序列中返回一个随机元素。
dog_files = [os.path.join(dog_train_dir, f) for f in dog_train_images]cat_files = [os.path.join(cat_train_dir, g) for g in cat_train_images]random_cat_dog = random.choice(dog_files + cat_files)print (“random file name: “, random_cat_dog)
在下一步中,我们希望调整这个图像的大小,并将这个图像转换为一个 numpy 数组,最后,将其重新整形为一致的格式(批量大小、高度、宽度、通道)。让我们使用 Keras load_img、 Keras img_to_array 和 numpy 模块来实现。
rand_img = load_img(random_cat_dog, target_size=(160, 160))rand_img_arr = img_to_array(rand_img)print ("shape of selected image :", rand_img_arr.shape)x_in = np.reshape(rand_img_arr, (1, 160, 160, 3)) # batch size 1>>> shape of selected image : (160, 160, 3)
一旦我们以适合作为模型输入的格式处理了图像,让我们从模型中为所选层生成预测。
selected_feature_maps = visual_model.predict(x_in)
现在是以这种方式安排这些预测的部分,这样就有可能可视化每个过滤器对那些选定层的影响。这部分有点棘手,我们需要用 numpy 来释放我们的游戏性。让我简单介绍一下我们如何进行。如果你回头看 model.summary(),那么你将得到形状的概述,元组的最后一个元素是过滤器的数量,元组的第一/第二个元素是图像的高度/宽度。首先,我们创建具有形状(高度,高度*过滤器数量)的零网格,以便稍后我们可以水平堆叠输出。接下来,我们对过滤器的数量进行循环。我们需要记住,批量大小为 1,因此,要从选定的层中选择特定的滤波器输出,我们需要这样做(稍后查看详细代码)—
for i in range(n_filters):
y = feat_map [0, :, :, i]
然后,我们对过滤器的输出进行标准化和后处理,使其在视觉上可识别。最后,我们将过滤器输出堆叠在我们之前创建的显示网格中(零网格)。使用matplotlib imshow,我们可以将图像并排堆叠的特定图层上的每个滤镜的效果可视化。如下图所示。我发现了一个关于如何使用 imshow 方法的非常详细的答案;请检查一下,以便更好地理解下面代码中第二个 for 循环的最后一行发生了什么。
for lr_name, feat_map in zip(selected_layers, selected_feature_maps): n_filters = feat_map.shape[-1] n_size = feat_map.shape[1] display_grid = np.zeros((n_size, n_size * n_filters)) for i in range(n_filters): y = feat_map[0, :, :, i] y = y - y.mean() y = y/y.std() y = y*64 y = y + 128 y = np.clip(y, 0, 255).astype('uint8')# value only between 0, 255\. display_grid[:, i * n_size : (i+1) * n_size] = y scale = 20./n_filters plt.figure(figsize=(scale * n_filters * 1.4, scale * 2)) plt.title(lr_name, fontsize=16) plt.grid(False)plt.imshow(display_grid, aspect='auto', cmap='plasma')plt.savefig('/content/gdrive/My Drive/Colab Notebooks/cat_dog_visual_%s.png'%(lr_name), dpi=300)
Figure 1: Stacking output from each filter horizontally from 3 different convolutional layers.
在这里,我们可以看到模型的第二层 (block0_conv2) 中的滤波器看到完整的输入(160,160),主要是寻找一些基本的边缘。但是,随着我们深入输入尺寸减小,例如在 block2_conv2 层中,图像的形状是(40,40),这里视觉信息几乎无法识别,但是与图像类别相关的特征被过滤器捕获。您还可以看到,随着我们深入网络,稀疏过滤器的数量也在增加,因为随着每层中过滤器数量的增加,前一层过滤器编码的模式在当前层中看不到。这就是为什么几乎总是你会看到,在第一层所有的过滤器被激活,但从第二层稀疏性增加。
我发现前面的水平堆叠输出的方法很合理,但在视觉上并不引人注目,所以我给出了我在 Francois Chollet 的书用 Python 进行深度学习中找到的第二种方法。这与第一个非常相似,但我们不是水平堆叠所有过滤器的输出,而是将它们放在一个数组中。这里的主要概念是确定阵列的形状,并像前面一样堆叠滤波器输出。
第二种方法:这里我们从每层中使用的过滤器数量中获益,即它们都是 16 的倍数。因此,每个网格的列数将是 16,行数将取决于所选卷积层中使用的滤波器数量。因此,列数(ncols)由=滤波器数/16 给出。这里,我们的零网格将有形状(高*ncols,16 *宽)。考虑图像的高度和宽度在每一层中都是相同的。
images_per_row = 16for lr_name1, feat_map1 in zip(selected_layers1, selected_feature_maps1): n_filters1 = feat_map1.shape[-1] n_size1 = feat_map1.shape[1] n_cols = n_filters1 // images_per_row display_grid1 = np.zeros((n_size1 * n_cols, images_per_row * n_size1)) for col in range(n_cols): for row in range(images_per_row): chan_img = feat_map1[0, :, :, col*images_per_row + row] chan_img = chan_img — chan_img.mean() chan_img = chan_img / chan_img.std() chan_img = chan_img * 64 chan_img = chan_img + 128 chan_img = np.clip(chan_img, 0, 255).astype(‘uint8’) display_grid1[col * n_size1 : (col+1) * n_size1, row * n_size1 : (row+1) * n_size1] = chan_img scale1 = 1./n_size1 plt.figure(figsize=(scale1 * display_grid1.shape[1]*1.4, scale1 * display_grid1.shape[0] * 2.)) plt.title(lr_name1) plt.grid(False) plt.imshow(display_grid1, aspect=’auto’, cmap=’viridis’) plt.savefig(‘/content/gdrive/My Drive/Colab Notebooks/cat_dog_visual2_%s.png’%(lr_name1), dpi=300)
Figure 2: Arranging the same images as in Figure 1 more cleanly so that they are easy to interpret and understand.
有了这个表示,你可以清楚地看到我们的模型中更深层的过滤器如何集中在猫的特定特征上,如眼睛、鼻子、眉毛区域等的形状。
在这篇文章中,我们看到了如何使用 Google Colab 来构建和训练你的相当大的深度学习网络。我们的主要焦点是通过深层神经网络的几个层来可视化图像的旅程,我们已经学会了两种方法来做到这一点。此外,可视化应该帮助我们更好地看透和理解它们,而不是将深层视为黑盒。
参考资料:
[1] 用于大规模图像识别的极深卷积网络;k .西蒙扬 a .齐塞曼。
[2] 谷歌的 Colab 教程。
[3] Tensorflow 专业化课程:深度学习. ai
【4】用 Python 进行深度学习;弗朗索瓦·乔莱。第 160-177 页。
[5]Colab 中处理文件的资源 : Neptune.ai
[6] 链接到本帖使用的笔记本!
我是如何获得 AWS 大数据专业认证的
原文:https://towardsdatascience.com/how-did-i-get-certified-with-aws-big-data-specialty-e26f20114d3c?source=collection_archive---------10-----------------------
Photo by Fernando Hernandez on Unsplash
一般来说,没有直接的规则来获得任何认证。这完全取决于你在考试前的作业中探索了多少。我必须完成在 Cloud Guru、Linux Academy 和 Udemy 等学习服务网站上创建的关于 AWS cloud 的多门课程,还必须阅读各种 AWS 白皮书,以建立参加这次考试的信心。
我已经从我的同龄人和朋友那里听到了他们对考试感到多么困难的故事,以及他们离开大学 10 多年后坐 3 个小时是多么困难。他们中的少数人不得不再次出现,因为他们无法完成,不是为了吓唬你,而是让你做好准备。这些故事让我做好准备,而不是放弃。
以下是我准备这个认证的旅程。
Photo from aws.amazon.com
- 如果您有一些大数据背景,那么遵循概念和云背景会非常有帮助。
- 建议您在开始学习 AWS BigData 专业知识之前,先完成 AWS 解决方案架构师助理课程或认证。乍一看,我忽略了它,直接开始学习课程,并认为有必要完成解决方案架构师助理课程,因为对主要的 AWS 服务有基本的了解是非常必要的。
- 然后在下面的学习平台中学习 AWS 认证大数据专业课程。
Courtesy : google
https://learn . a cloud . guru—作者:Sanjay Kotecha,将为您提供该认证所需的 AWS 服务的所有基础知识。我经历了两次,但第二次是以两倍的速度。
Courtesy : google
【https://linuxacademy.com——作者:Fernando Medina Corey,你可以快速跟踪课程,但 IOT 概念和服务对服务的集成解释得很好,这对考试来说是非常必要的。课程结束时有一次模拟考试。随着问题的不断变化,尝试至少完成 3 次。
Courtesy : google
【https://udemy.com】—作者:弗兰克·凯恩&夏羽·马瑞克,不要跳过或忽略本课程,因为像安全性、每个服务用例以及反用例等最重要的概念都得到了很好的解释。
完成上述课程后,请阅读 AWS 发布的白皮书和文档。
- AWS 大数据分析白皮书
https://D1 . AWS static . com/white papers/Big _ Data _ Analytics _ Options _ on _ AWS . pdf?did=wp_card & trk=wp_card
请不要跳过阅读此白皮书,因为您肯定能够回答 2-3 个问题,并且会从 AWS 的角度让您对服务有更深入的了解。
2.AWS kine sis 白皮书:https://aws.amazon.com/kinesis/whitepaper/
3.确保电子病历安全的最佳实践:https://AWS . Amazon . com/blogs/big-data/best-practices-for-securing-Amazon-EMR/
4.关注亚马逊在 youtube 上的“这是我的建筑”视频——https://www.youtube.com/playlist?list = plhr 1 kzpdzukdex 8 MQ 2 qo 73 BG 6 ukqhyshb
5.AWS 准备的样本测试:https://D1 . AWS static . com/training-and-certification/docs-big data-spec/BD-S % 20 sample % 20 questions % 20 for % 20 web . pdf
考试试图在以下主题上测试您:
aws.amazon.com
- AWS S3 几乎回答了所有关于存储的问题。
- 红移是考试中你会看到的第二高的时间。诸如复制快照或从快照中只重新生成一个表等问题。,
- Kinesis 流和消防软管也非常频繁地出现。
- 安全服务,如 VPC、安全令牌服务等。,
- 在 AWS S3、静态/传输中、客户端/服务器端、HSM,对象是如何加密的?
- 发电机 DB 和加速器
- 机器学习和 Sage Maker,GPU 单元
- EMR 概念和 HIVE、HBASE、spark、spark streaming 等技术
- 兰姆达斯
- 关于数据管道、本地数据迁移服务、DirectConnect 的几个问题。
- 更多关于 QuickSight 和图表类型,如气泡图、热图等。,
- 雅典娜,管道,胶水(目录/爬虫)
你准备得越充分,就越有可能通过认证。
祝你好运!!!!
我是怎么学数据科学的?
原文:https://towardsdatascience.com/how-did-i-learn-data-science-d5f7fc477997?source=collection_archive---------1-----------------------
Image by ElasticComputeFarm
自学、MOOCs 和努力
我是一名机械工程师。我的职业生涯始于钢铁行业的一份核心工作。
但是我不喜欢它,所以我离开了。
我的目标是在 2013 年左右进入分析和数据科学领域。从那以后,我经历了很多失败,也付出了很多努力。
现在,社交网络上的人问我是如何开始进入数据科学领域的。所以我想到了给一个确定的答案。
做到这一点并非不可能,但这需要花费大量的时间和精力。幸运的是,我两者都有充足的供应。
下面给出的是我走的路,任何有抱负的人都可以选择成为一名自学成才的数据科学家。
有些课程和我以前学的不一样,因为有些已经不存在了,有些已经被合并成更大的专业。但我已经尽量让它和我的经历保持尽可能的相似。
还有,希望你看到长长的名单后不要失去希望。你必须从一两门课程开始。其余的将随着时间的推移。记住我们有充足的时间。
按顺序来。我试着把我想到的所有东西都包括进来,包括一些我认为可能有益的帖子链接。
概率统计导论
Stat 110:你要上的概率统计精粹课程。所有的讲座和笔记都可以在 Youtube 和他的网站上免费获得。另一方面,如果你正在寻找一个认证证书和一个正在进行的课程,你也可以参加加州大学圣地亚哥分校的这个课程。我这样做是作为数据科学领域 MicroMasters 专业化的一部分。
所以回到 STAT110。你应该选这门课,如果不是为了内容,而是为了约瑟夫·布利茨坦教授的幽默感。上图就是一个证明。
我上这门课是为了增强我对概率分布和统计的理解,但这门课教给我的远不止这些。
除了学会有条件地思考,这也教会了我如何用一个故事来解释困难的概念。
对于初学者来说,这是一门具有挑战性的课程,但绝对有趣。 重点不仅在于获得数学证明,还在于理解它们背后的直觉,以及直觉如何帮助快速推导证明。有时同样的证明用不同的方式来帮助学习一个概念。
我最喜欢这门课的一点是在解释抽象概念的同时关注具体的例子。
包含赌徒破产问题、匹配问题、生日问题、蒙蒂霍尔、辛普森悖论、圣彼德堡悖论等。使这门课程比任何普通的统计学课程都更加令人兴奋和愉快。
它将帮助你理解离散(伯努利、二项式、超几何、几何、负二项式、FS、泊松)和连续(均匀、正态、expo、Beta、Gamma)分布。
他还得到了一本基于本课程的教材,是一本优秀的课文,是任何书架的必备。
Link
Python 和数据科学简介:
先做,后理解
在完全理解机器学习之前,我们需要先体验一下。这一部分由三部分组成。这些并不是我学习 Python 和数据科学入门的确切课程。但是它们非常相似,而且都是为目的服务的。
Python 中的数据科学简介
这门课是关于学习使用 Python 和自己创造东西的。您将了解到用于数据科学的 Python 库,如 Numpy、Pandas 。我也喜欢这个来自数据科学微大师专业的课程。
在学习本课程的过程中,你可能还会喜欢我关于数据科学家最小熊猫和高级 python 小短片的帖子。
[## 数据科学家的最小熊猫子集
您需要的所有熊猫功能
towardsdatascience.com](/minimal-pandas-subset-for-data-scientists-6355059629ae) [## Python 短片——走向数据科学
阅读关于 Python 的文章,了解数据科学。分享概念、想法和代码。
towardsdatascience.com](https://towardsdatascience.com/tagged/python-shorts)
网站上的课程描述:
本课程将向学习者介绍 python 编程环境的基础知识,包括基本的 python 编程技术,如 lambdas、读取和操作 csv 文件以及 numpy 库。本课程将使用流行的 python pandas 数据科学库介绍数据操作和清理技术,并介绍作为数据分析中心数据结构的系列和数据框架的抽象,以及如何有效使用 groupby、merge 和 pivot 表等函数的教程。在本课程结束时,学生将能够获取表格数据,清理它,操作它,并运行基本的推断统计分析。
Python 中的应用机器学习
本课程介绍了许多你应该知道的现代机器学习方法。不是彻底的打磨,但你会得到工具来建立你自己的模型。您将学习 scikit-learn,它是创建各种模型的 python 库。
这里的重点是尽快开始创造东西。没有人喜欢等太久才能得到有用的东西,学完这门课你就变得有用了。
本课程将向学习者介绍应用机器学习,更侧重于技术和方法,而不是这些方法背后的统计数据。本课程将首先讨论机器学习与描述性统计有何不同,并通过教程介绍 scikit learn 工具包。
你可能还想看一看这个机器学习基础课程来更彻底地钻研数学。
c)可视化
一个制作精良的视觉效果比任何 PPT 都有价值
你还需要学习的一件事是可视化。这是一个不断发展的领域,许多新的库不断出现。我最常用的库是 Seaborn 和 Plotly。
你可以看看下面的帖子,开始学习基本和高级可视化。
[## Python 的一行图形创建库,带有汉斯·罗斯林风格的动画
动画,单线图。它拥有一切
towardsdatascience.com](/pythons-one-liner-graph-creation-library-with-animations-hans-rosling-style-f2cb50490396) [## 针对每个数据集的 3 种出色的可视化技术
同时学习一些关于足球的知识
towardsdatascience.com](/3-awesome-visualization-techniques-for-every-dataset-9737eecacbe8)
机器学习基础
完成上述课程后,你将获得我称之为“初学者”的地位
恭喜你。!!。你懂东西;你知道如何实现事情。
然而,你并没有完全理解所有这些模型背后的数学和计算。
你需要理解clf.fit
背后的含义
如果你不理解它,你就不能改进它
游戏改变者机器学习课程来了。包含许多机器学习算法背后的数学。
我会把这门课作为你必须上的一门课,因为这门课激励我进入这个领域,而吴恩达是一位伟大的导师。还有,这是我刚开始的时候自己上的第一门课。
这门课程什么都有——回归、分类、异常检测、推荐系统、神经网络,还有很多很棒的建议。
在这之后,你就和这个行业的三个火枪手玩完了。
您知道 Python,您理解统计学,并且您已经尝到了 ML 方法背后的数学滋味。现在是新成员登场的时候了。达达尼昂。这孩子有技术。虽然三个火枪手都是各自行业的大师,但这个家伙带来的品质为我们的数据科学之旅增添了新鲜感。
大数据来了。
使用 Spark 的大数据分析
大数据无处不在。处理好它。
自从我学习 Hadoop 以来,整个大数据生态系统已经发生了很大的变化。那时斯帕克是街区里的新人。那些日子…
到目前为止,我所学的课程相当多余,所以我会试着推荐一些适合这个时代的课程。我能找到的最能体现我从分散资源中学到的东西的课程是使用 Spark 的大数据分析。
完成本课程后,您将从课程网站了解到:
使用 Pyspark 编程 Spark
确定 Spark 应用程序中的计算权衡
使用 Spark 和 Parquet 执行数据加载和清理
通过统计和机器学习方法对数据建模
你也可以看看我最近在 Spark 上的帖子。
[## 使用 Spark 处理大数据的指南
不仅仅是介绍
towardsdatascience.com](/the-hitchhikers-guide-to-handle-big-data-using-spark-90b9be0fe89a)
了解 Linux Shell
不是硬性要求,但有技能是件好事。壳牌是数据科学家的大朋友。它允许您在终端本身执行简单的数据相关任务。我无法强调 shell 每天为我节省了多少时间。
你可以阅读我下面的帖子来了解这一点:
[## 用你新获得的壳技能打动旁观者
数据科学家的 10 分钟外壳/终端技能
towardsdatascience.com](/impress-onlookers-with-your-newly-acquired-shell-skills-a02effb420c2)
如果你想参加一门课程,你可以看看 Coursera 上的 UNIX 工作台课程。
恭喜你现在是“黑客”了。
你已经掌握了成为数据科学家的所有主要工具。
转到更高级的话题。从这里开始,就看你想学什么了。
你可能想采取一种完全不同于我现在所采取的方法。没有特别的顺序。“条条大路通罗马”只要你在动。
学习统计推断
mine etinkaya-Rundel 教授关于推断统计学的课程。没有比这更简单的了。
她是一个很好的老师,并且很好地解释了统计推断的基础——这是一门必修课。
您将学习假设检验、置信区间和数字和分类数据的统计推断方法。
深度学习
这都是关于层次的
简介 —让神经网络再次变得不酷。这是神经网络的代码优先类。Kaggle 大师杰瑞米·霍华德的精彩深度学习课。寓教于乐。
高级 —你可以再试试吴恩达的这个深度学习专精。纯金的。
高等数学书——由 Yoshua Bengio & Ian Goodfellow 所著的一本数学密集型书籍
如果你想学习 Pytorch,看看下面的帖子。
[## 从喀拉斯到皮托尔彻
为什么?怎么会?没那么难。
towardsdatascience.com](/moving-from-keras-to-pytorch-f0d4fff4ce79)
学习 NLP,对文本使用深度学习并创建聊天机器人
读书被高估了。让机器去做吧。
不久前,自然语言处理引起了我的注意。
我在上面写了 6 篇系列文章。如果你愿意,你可以看看。
[## Nlp 学习系列—走向数据科学
阅读《走向数据科学》中关于 Nlp 学习系列的文章。分享概念、想法和代码。
towardsdatascience.com](https://towardsdatascience.com/tagged/nlp-learning-series)
算法、图形算法等等
算法。是的,你需要它们。
除此之外,如果你想学习 Python 和这种语言的潜在复杂性,你也可以参加莱斯大学的计算机科学迷你专业。
这是一系列 6 门短而好的课程。
我参加这些课程是因为数据科学需要你做大量的编程工作。学习编程的最好方法就是实践。
讲课很好,但是问题和作业很棒。如果你学习这个,你将学习面向对象编程,图形算法,以及用 Python 创作游戏。很酷的东西。
你也可以看看:
[## 每个数据科学家都应该知道的 5 种特征选择算法
额外收获:是什么让一个优秀的足球运动员变得伟大?
towardsdatascience.com](/the-5-feature-selection-algorithms-every-data-scientist-need-to-know-3a6b566efd2) [## 每个数据科学家都需要知道的 5 种采样算法
或者至少应该听说过
towardsdatascience.com](/the-5-sampling-algorithms-every-data-scientist-need-to-know-43c7bc11d17c)
一些高等数学题目
数学——这一切背后的力量
我最后写在这里,但是不要低估数学在数据科学中的重要性。如果你想更新你的概念,你可能想看一看这些课程。
吉尔伯特·斯特朗的线性代数——一个伟大老师的伟大课。我肯定会向任何想学习线性代数的人推荐这门课。
多元微积分 —麻省理工学院开放课件
——斯坦福大学的一门关于最优化的 MOOC,由该学科的权威 Steven Boyd 主讲。
结论
机器学习领域正在发展,每天都有新的进步。这就是我没有放第三层的原因。
我最多可以称自己为“黑客”,我的学习还在继续。
每个人都有自己的道路,在这里我提供了我的道路来成为一名数据科学家。这绝不是完美的,因为很明显,有很多东西可以添加进去。
虽然我没有完成任何专业培训,但由于上述课程,我认为自己现在更像一名计算机科学工程师,而不是机械工程师。
希望他们也能帮到你。
谢谢你的阅读。将来我也会写更多初学者友好的帖子。在 媒体 关注我或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter@ mlwhiz联系。
我是如何从数据科学开始的?
原文:https://towardsdatascience.com/how-did-i-start-with-data-science-3f4de6b501b0?source=collection_archive---------6-----------------------
Image by Sasin Tipchai from Pixabay
我的短篇小说
数据科学很难。而且,要学的东西太多了。
当我第一次接触数据科学时,我完全被背后的数学难住了。
要学的东西太多了。此外,这一切对我来说都很陌生。我对所有的算法和背后的数学有点困惑。
编码完全是另外一回事。我不知道如何编码。
那我做了什么?
这篇文章讲述了我如何从数据科学起步的故事。
TLDR;弄脏你的手。
简要背景
首先,我想先介绍一下我是谁。我是一名机械工程师。没有 CS 学位。没有正式的数学/统计教育。
所以我就是你所说的真正的初学者。
2010 年,我得到了一份商业分析师的工作。前三年做了很多单调的报告工作,包括 Excel/SQL,Spotfire。
然后机会来了…
机会
那是在 2013 年,经理请我去他的办公室。这是我记忆中的讨论:
经理: 我想让你学点 Python 。
我:Python? 我这辈子都没做过编程。 为什么是现在?
经理 :你听说过数据科学吗?我听说有一种叫做随机森林算法的东西。既然你是周围唯一的非开发人员,我想你可能会参与(商业阅读: )既然你是唯一一个没有工作的人,你为什么不做点什么 )
我很害怕。但我也很好奇。这是我想做的事吗?
这使我想到…
咕噜声
我接下来的几个月充满了学习新事物。我读啊读,看 MOOCs,做笔记。整整 50 码。
我记得我曾经每天熬夜到凌晨 3 点,这样我就可以多读点书。也许是对在大学里偷懒太多的回报。
而我还没有完成。
至于机会,我看 RandomForest 是干什么用的。我只是对分类问题陈述有一点了解,这样我就可以尽快在我的组织中发挥作用。
我记得读过一个用 Python 实现它的人的博客。我 复制粘贴了他的代码 。在我的本地机器上运行。瞧啊。!!
它跑了。我很高兴。这是一种完全不同的感觉。我想这种感觉只能来自运行代码。我知道我是个书呆子。
我们使用这一小段代码在该公司的分类数据集上运行,并将其包含在产品中。 我的经理对此印象深刻。
在那个时间点、 我真的一点数据科学 都不懂。我不知道熵、决策树和交叉验证。见鬼,我甚至不明白线性回归。
说实话,我创建的模型可能过度拟合了。但是我只知道 那是一个开始 。
对于数据科学来说,开始是最重要的。我经常从我的老读者那里得到问题,关于他们应该做什么来开始。
我大多数时候的回答是开始做事。在 Kaggle 上为自己创造机会。创建自己的 Github 库,并用自己编写的代码填充它。做一些 MOOCs。这里有一个 清单我推荐 。
做你自己的项目。 其实我的简历里有一节叫个人项目。在你的简历中包括这样一个部分。
一旦我有了一个开始,我开始尝试许多模型来做同样的任务。
我从卡格尔开始。当我无法竞争时,我开始读更多的书。
我上了很多开放式 MOOCs。 我了解到了新事物。
我乐于学习新事物。我乐于理解新事物。
实现
在学习数据科学期间,我做的最重要的事情就是当我遇到数学时,永远不要失去希望。
我记得当我阅读内部工作原理时,我什么也不明白,只要我有时间,我就回去把整个阅读再做一遍。
与此同时,我还在创造东西。我试着让我的理解永远不会成为我公司的障碍。
然后有一天我意识到,如果我愿意付出努力,我甚至可以理解背后的数学。
我从广度开始,最终进入事物的深度。
所以是的,开始吧。弄脏你的手。
运行代码。尝试通过摆弄参数和阅读后面的算法来改进它。
我希望也许有一天你会有足够的动力像我一样完全进入深度。
谢谢你的阅读。将来我也会写更多初学者友好的帖子。在关注我或者订阅我的 博客 了解他们。一如既往,我欢迎反馈和建设性的批评,可以通过 Twitter @mlwhiz 联系。
我们是怎么到这里的?算法的故事。
原文:https://towardsdatascience.com/how-did-we-get-here-the-story-of-algorithms-9ee186ba2a07?source=collection_archive---------7-----------------------
Image by mehaniq41 (Adobe Stock Photos)
直到最近,算法还是计算机科学家的领域。但是现在,它们已经进入了我们的生活,并且正在变得无孔不入。算法已经不是外来词了。算法交易、算法偏见、脸书算法,甚至算法战争——所有这些术语在最近几年已经成为我们词汇的一部分。有些人甚至声称我们生活在一个新时代:算法时代。但是算法并不是那么新。我们有意或无意地使用它们已经有几百年甚至几千年了。算法仅仅是对实现特定结果所需发生的逐步动作的具体描述【1】。它们是最常见的知识共享工具之一。
实际上,任何教人如何做某事的过程都使用算法。
不过,在过去的几十年里,算法的某些方面已经发生了变化。特别是,计算机的引入意味着今天的许多算法比我们过去想象的要复杂得多。今天的算法是如何进化到比过去复杂得多的?让我们简单看看他们的历史。
指导人类行动的算法
A stamp issued September 6, 1983, in the Soviet Union, commemorating al-Khwārizmī’s (approximate) 1200th birthday; via Wikimedia Commons
算法一词源自九世纪波斯数学家穆罕默德·伊本·穆斯哈勒·卡瓦·里兹姆的名字。他的拉丁名 Algoritmi,意思是“十进制数系统”,几个世纪以来一直沿用这个意思。算法的现代概念在 19 世纪出现在英语中【2】,自 20 世纪 50 年代以来,随着第一台商用计算机的出现,这一概念变得更加普遍。
然而,在算法有了现代名称之前很久,它们就已经被普遍创建和使用了。
第一个算法在古希腊被记录在纸上。学者们,如 Gerasa 的 Nicomachus 或 Euclid,当时正在创建现代数学的基石。为了便于理解和应用他们的想法,他们将许多想法表述为一步一步的行动。
Gerasa 的 Nicomachus 介绍了厄拉多塞的筛子。学习编写高效计算机代码的学生至今仍在使用这个筛子。它有助于简化识别质数的过程。质数是大于 1 的自然数,不能由两个较小的自然数相乘得到。例如,四不是一个质数,因为它可以由二乘二形成。相比之下,五是一个质数,因为没有比五小的自然数可以相乘得到五。虽然识别最初的几个质数并不太难(例如 2、3、5、7、11、13、17、19、23 和 29),但寻找大质数要花很多时间。【3】而大素数在密码学中是必不可少的。厄拉多塞筛给出了一步一步的指示,用于从一组确定的数(例如 1 到 10,000)中快速去除所有非质数,直到只剩下质数。今天,有许多算法可以简化识别这些数字的任务。厄拉多塞的筛子开创了一整个算法家族,它们有着相同的目标,并且在检测素数方面变得更好(更快,或者需要更少的步骤)。
Sieve of Eratosthenes by SKopp at German Wikipedia [CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0/)]
欧几里德,上面提到的另一位学者,现在比尼科马科斯更有名,他介绍了一种识别两个数的最大公约数的算法。同样,这并不总是一件容易的事,但在许多情况下是必不可少的。欧几里德的算法有助于使这种计算变得容易。欧几里德的算法为什么有帮助?假设你有一个 612 乘 2006 厘米的房间,需要一个新地板。欧几里德的算法将帮助你找到能整齐地覆盖地面的最大方块瓷砖的尺寸。由算法给出的答案是 34 厘米乘 34 厘米,结果得到 18 乘 59 块的布局。当然,每个瓦工都会告诉你,答案是错误的,你根本不知道自己在做什么,因为算法没有考虑灌浆宽度,没有为它留出空间。不要担心:这也可以计算,并巧妙地表达为一种算法。
指导机器动作的算法
在接下来的几百年里,更多的算法被创造出来并记录在纸上。然后,他们被个人使用,并按部就班地跟进。第一个打算在机器上执行的算法是由阿达·洛芙莱斯(née Byron)创造的,并于 1843 年发表。
Ada Byron, aged four. Soon, she will become the world’s first computer programmer. By Artist: Alfred, Comte d’Orsay. Digital image; Somerville College, Oxford — Somerville College, Oxford, Public Domain, https://commons.wikimedia.org/w/index.php?curid=44246375
阿达是一个迷人的人物。她生于 1815 年,是诗人拜伦的独生子。她在数学方面很有天赋。由于对诗歌的热爱显然存在于她的基因中,她设法发展并平衡了对科学和诗歌的热爱。阿达自称她的心态是“诗意的科学”。作为一名熟练的数学家,她认识了查尔斯·巴贝奇,由于他的发明,他通常被称为“计算机之父”。他们都发展了工作关系和友谊。艾达对查尔斯的一项设计非常感兴趣——分析引擎。
A diagram for the Analytical Engine. By ArnoldReinhold — Own work, CC BY 4.0, https://commons.wikimedia.org/w/index.php?curid=69497631
分析引擎是一台机械计算机——一台自动计算的机器。她为分析引擎编写了第一个算法。她的工作是一个公式,显示如何配置引擎来计算一个特殊的复杂的数字序列,称为伯努利数。这个公式现在被广泛认为是历史上第一个计算机算法。
Ada 不仅仅局限于纯数学计算。鉴于她生活在十九世纪,她是一个真正的梦想家。
当她的许多同时代人将第一台机械计算机主要视为数字处理器时,她问的是除了执行计算之外还有什么。她对机械计算机作为协作工具的广泛潜力感到好奇。她希望看到计算机能够赋予人类更多的能力,而不仅仅是通过自动化计算。
Lovelace’s diagram from “note G”, the first published computer algorithm, by Ada Lovelace — http://www.sophiararebooks.com/pictures/3544a.jpg, Public Domain, https://commons.wikimedia.org/w/index.php?curid=37285970
不幸的是,分析引擎的构建在 Ada 去世前没有完成,所以她永远无法看到她的算法在运行。可悲的是,分析引擎至今也没有造出来。伦敦科学博物馆在 1991 年才建造了查尔斯·巴贝奇的另一个设计,差分机№2。利用查尔斯·巴贝奇现有的材料和技术,它被证明是可行的。看来巴贝奇只是运气不好,没能完成他的设计。查尔斯工作的其他部分实现存在于其他地方,但不幸的是,我们无法在真正的分析引擎上运行 Ada Byron 的算法。
十九世纪成为一个“嵌入机器的算法”的时代。
有很多这样的机器人,可以自动完成各种各样的人类动作。如果你需要在织物上绣出复杂的图案,法国纺织商约瑟夫·玛丽·贾卡有一个解决方案:提花织机。它允许织物制造商使用一系列指示织机如何编织的穿孔卡片来生产复杂的图案。同样,早期的电话交换机使用复杂的机械设备来连接电话。他们自动按照一步一步的指示,最终让两个人互相交谈。这些机器,无论是织机还是交换台,在当时都是开创性的,直到今天仍然令人印象深刻。很难不佩服其中一些机器的复杂程度。然而,所有这些设备仍然是纯机械的。它们由杠杆、开关、轴组成。他们制造了很多噪音。他们离我们现在所说的电脑非常远。
通用计算机上的算法
直到 20 世纪 30 年代,我们才第一次看到电子(非机械)计算机中的算法。艾伦·图灵是最早正式记录个人如何进行计算的科学家之一。图灵的目标是捕捉一个一般的过程,而不是一个特定于特定任务的过程,比如识别素数或计算最大公约数。然后,可以使用一般流程来执行特定任务。图灵的概念性工作导致了现在所知的图灵机的发展。图灵机反过来导致了通用计算机的出现。通用前缀在这里至关重要。与以前的机器相反,新的计算机可以执行任意组指令。他们可能被用于他们的创造者甚至没有预料到的目的。换句话说:图灵的工作导致了计算机的发展,我们可以在计算机上安装和运行应用程序。
如果没有图灵机的概念,你的智能手机上就不会有 Flappy Bird。
几十年后,算法变得极其复杂。事实上,它们是如此复杂,以至于我们常常无法解释它们是如何工作的。在二十世纪,许多人更愿意将计算机算法视为黑盒。你不需要理解它们到底是如何工作的。你所关心的只是输入——什么进入了黑盒——和输出——什么出来了。这种简化是一种选择。在二十一世纪,对于一些算法来说,这不再是一个选择:人类无法准确解释算法如何达到特定的输出,因此我们被迫将这些算法视为黑盒子,或者也许是神奇的盒子。一组这样的算法是一些人工智能算法。我们可以解释它们的原理。例如,我们可以说算法使用人工神经网络。我们还可以解释网络是如何创建的,以及输入如何产生特定的输出。然而,我们无法解释的是为什么这个特定的结果是算法的输出,超出了纯机械的解释。埃里克·l·卢米斯的监禁时间取决于一种算法,他试图理解为什么COMPAS 算法将他评定为高风险罪犯。这简直是不可能的。算法的复杂程度往往令人难以招架。而这仅仅是开始。
我们生活在一个算法无处不在的世界——不仅仅是在纸上或我们的脑海中,而是控制着机器、计算机和机器人。
它们很小,无处不在,而且——至少在某些情况下——令人费解。
【1】一个更正式的算法定义是“如何解决一类问题的明确规范”或者“要执行的一套独立的逐步操作”【来源:维基百科算法】
【2】www.oed.com/view/Entry/4959
【3】截至 2018 年 10 月,已知最大的素数是 277232917-1,一个有 23249425 位数的数。仅仅是检查这个数字是否是质数,就需要在一台当代家用电脑上不间断地计算六天。(https://www.mersenne.org/primes/press/M77232917.html)
不同的因素如何影响你的预期寿命
原文:https://towardsdatascience.com/how-different-factors-have-an-influence-on-your-life-expectancy-7b807b04f33e?source=collection_archive---------15-----------------------
与你的原籍国相关的属性如何定义你的预期寿命?
在这个星球上,每个人都有自己的截止日期。这一天过后,他们被埋在地下六英尺深的地方腐烂。人类死于多种原因,如事故、疾病、战争和其他形式的死亡。
一个有趣的趋势是,不同国家的人的死亡年龄有所不同。在一些国家,平均死亡年龄约为 50 岁,而在其他一些国家,平均死亡年龄高达 85 岁。
这种巨大差异背后的原因源于这样一个事实,即一些国家已经建立了一个旨在防止除自然/意外死亡以外的任何死亡案例的系统。他们竭尽全力建造桥梁和道路以防止事故发生,他们还使用一些人类可用的最先进的医疗工具。
虽然这些国家正在为延长其公民的预期寿命做出巨大努力,但预期寿命较低的国家没有足够的资源来长期维持其人民的生命。
为了找出决定不同国家预期寿命的因素,进行了一项研究,以找出哪些因素在很大程度上决定了预期寿命。
数据收集
用于研究的数据集可以在 这里 找到,它是直接从 Kaggle 收集的。该数据集包含不同国家的不同信息,直到最近的 2015 年。
然后,所有关于 2015 年的信息被用来建立一个代表每个国家信息的新数据集。根据预期寿命从高到低排列的国家如下:
Top five countries with the highest life expectancy.
斯洛文尼亚以 88 岁的预期寿命高居榜首。丹麦位居第二,预期寿命为 86 岁。塞浦路斯和智利位居第三,平均寿命为 85 岁。
数据探索
该数据集被进一步研究,以了解某些变量如何随预期寿命而变化。首先,创建了一个表格,以查看发展中国家相对于发达国家的表现。
Developing vs Developed countries’ life expectancy
发展中国家和发达国家在预期寿命方面的差距是惊人的。发展中国家的平均预期寿命为 69.69 岁,而发达国家的平均预期寿命为 80.7 岁。
这是一个相关系数表,显示了其他特征与预期寿命的关系。
Correlation coefficient table of all the features in the truncated dataset.
此外,还绘制了多个散点图,以显示发展中国家和发达国家在预期寿命方面的差异,这些差异基于其他因素,如受教育程度(受教育年限)、国内生产总值(人均国内生产总值)、成人死亡率(每 1000 名成人的死亡人数)、艾滋病毒/艾滋病(每 1000 名活产婴儿的死亡人数)和资源收入构成(生产资源的使用情况)。下面是散点图:
Scatter plots showing how Schooling, GDP, Adult Mortality, HIV/AIDS and Income composition of resources vary with life expectancy.
蓝色 x 标记代表发达国家,而红色圆点代表发展中国家。
学校教育散点图具有很强的正相关性,这表明人们在学校学习的年数可以增加他们的预期寿命。其与预期寿命的相关系数为 0.82。
国内生产总值散点图呈中度正相关,这意味着人均国内生产总值对预期寿命没有太大影响。其与预期寿命的相关系数为 0.45。卡塔尔是散点图中人均 GDP 最高的国家。
成人死亡率和艾滋病与预期寿命呈负相关,其中成人死亡率的负相关更强。这意味着,随着一个国家艾滋病毒/艾滋病死亡率和成人死亡率的上升,该国人民的预期寿命将会缩短。艾滋病毒/艾滋病和成人死亡率与预期寿命的相关系数分别为-0.6 和-0.78。
Tables showing top ten countries with the highest Adult Mortality and HIV/AIDS death rates.
从表中可以看出,在成人死亡率和艾滋病毒/艾滋病死亡率高的国家中,这种情况很常见。这些国家大多是发展中的非洲国家,它们的 ICOR 值很低,这意味着它们没有有效地利用现有资源。
资源的收入构成具有最高的相关系数 0.91,这意味着如果一个国家有效地利用其资源,它更有可能看到其公民比预期寿命更长。
Top ten countries with the highest ICOR value
ICOR 值从 0 到 1 分级。表现最好的十个国家的 ICOR 值从 0.92 到 0.95 不等,它们的公民预期寿命都在 80 岁以上。一个共同的趋势是,除了排在第十位的加拿大之外,所有这些国家都是发达国家。
结论
每个人都希望过上美好的生活,过上健康的生活,减少压力。作为人类,我们有责任利用我们在这个星球上拥有的资源来实现这一目标。我们需要创造一个世界,让人们在以最有意义的方式生活的同时,充分发挥自己的潜力。
用于运行这个项目的代码可以通过这个链接 找到。
我如何让别人参与我的研究?
原文:https://towardsdatascience.com/how-do-i-get-someone-to-work-on-my-research-d456229b61bf?source=collection_archive---------25-----------------------
你不知道。
Photo by Jamie Street
合作是我们作为研究人员所做工作的核心,在一个人的领域取得成功通常与形成有效的合作以及提出创新想法同等重要。然而,合作是如此脆弱的东西,有时令人惊讶的是,在一个经常发生小冲突和竞争的科学环境中,它们还能持续下去。
没有什么比单作者论文更可疑的了。
对于那些习惯于新闻界喜欢在科学中延续的“孤独的天才”叙事的人来说,这似乎令人惊讶,但对于有经验的研究人员来说,单一作者的论文往往会引发许多危险信号,使一个人的嘎嘎作响的计时器超速运转。如何不仅吸引合作者,而且建立、培养和培育合作?
入门指南
人们经常来问我:‘我如何让别人参与我的项目?’我通常告诉他们环顾四周,找到那些在问自己:‘今天我要解决谁的问题?’理解并接受这样的人根本不存在,是建立伟大合作的第一步。
下一步是把你的问题变成他们的问题。
很多让人们和你一起工作的事情都是从让他们投入开始的。这是每个成功的政治家和电视布道者都掌握的一个(奇怪的)技巧。这就是众所周知的本·富兰克林效应(我第一次看到它是在克里斯·马修斯的《T2》中被生动地描述的):如果你想让人们投入到你的目标中,不要向他们推销你将为他们做的事情。相反,请他们为你工作。一开始要求做一点点工作:寻求他们的帮助,请他们帮个小忙,让他们花一点点时间和心思在你的日程上。随着他们的自我形象更新到与你自己的成功一致,假设你提供了正确的强化剂量,他们将更倾向于加倍他们最初的隐性承诺,并在你自己的议程上与你合作。为了让某人做更多的工作而要求他们做工作是非常违反直觉的。你本能地觉得你可能会让自己陷入债务,或者你应该通过帮助他们迈出第一步。但我们的心理并不遵循这种针锋相对的模式,承诺一般会自我助长。
关于著名数学家保罗·erdős'的沙发冲浪习惯以及它如何塑造了一生非凡的合作,已经有很多报道了。在叙述中经常被忽略的是,一旦你有一个天才数学家在你的客厅占据了空间,你是否会非常努力地工作以使合作取得成功就几乎没有问题了。仅仅通过让他们呆在你家的行为,你就已经承诺成为他们故事的一部分,而实现这一承诺的压力就在你身上。
这绝对不意味着不互惠(这是几乎所有有害关系发展的模式)。事实上,作为一名研究人员,你能花的最高价值的货币是你自己的时间承诺。在你的合作者眼中,你的想法和才华通常会大幅贬值:无论你认为自己有多聪明,你的合作者都不太可能像你一样重视你的想法。相比之下,你在一个项目上投入的时间对他们来说有很高的乘数价值:这是他们花在工作上的额外时间,而他们自己并不需要花这些时间。因此,不管你如何珍惜自己的时间,对你的合作者来说,它通常比他们自己的时间更有价值。因此,价值不对称,以及一个有趣的套利机会:你可能应该高估你的时间承诺,低估你的想法。太多的人试图推销他们有多聪明,并抱怨结果是他们没有得到足够的重视。
交易的是体力,不是智慧。
另一个不被重视的方面是在你的项目日程中留下漏洞让别人去填补的重要性。“我不知道”是猫薄荷研究者的观点:人们需要创造性的空间来茁壮成长。制作一份有充分论据的、无懈可击的、回答了所有问题的研究计划也发出了一个信号,即你可能不太关心探索问题空间,而更关心实际的答案是你自己的。
找到一个问题的合作者比找到一个答案更容易。
繁荣的
有一个噱头十足的网飞节目叫做《路西法》(Lucifer),其不太可能的前提是,主角通过简单地问人们“你在这个世界上最渴望什么”来解决谋杀案(不要妄加评论……)如果合作者互相询问的第一件事就是这个问题:“你在这个世界上最渴望的是什么?”动机可以是完全不同的,而且通常和你自己没有什么关系。
每个人都渴望得到个人认可,但每个人对这意味着什么也有不同的定义。令人惊讶的是,我的扩展研究组织中有大量成员根本不关心发表论文,他们会主动离开那些净产品仅仅是出版物的项目。有些人确实对写作行为感到恐惧,或者认为这是一种不可避免的邪恶,而另一些人则认为自己主要是作家和传播者,并坚持要控制叙事。理解这些动机对于促进健康的合作至关重要。如果你正试图与一位经验丰富的谷歌工程师合作,抑制住制作项目“设计文档”的冲动:你可能会认为这是一件吃力不讨好的差事,而这正是上述工程师获得晋升的途径。一些工程师只会从事那些他们可以从头开始写代码的项目,而另一些人讨厌从头开始。有些人对贡献开源代码有强烈的看法。一些研究人员会把与一个潜在的权威人物合作视为对他们知识自由的威胁,而另一些人会不惜一切代价与某个“名人”交往。有些人需要知道离最后期限还有几周才安全,不要惊慌,如果你在会议最后期限前一天写下任何话,其他人可能会感到措手不及。
理解这些有时微妙而矛盾的动机对于形成成功的合作至关重要。这并不意味着激励措施在任何时候都必须完美一致。但是,明确每个人为了更大的利益所做的每一个让步,有助于相关人员感到他们的贡献得到了适当的重视。
然而,并不是所有事情都是给予和索取的问题,改善合作的最有效方法是将对话塑造成“你对我”(你做这个,我做那个),而不是“我们对抗世界”。现在,我所有的一对一会议都是在街区内进行,而不是在会议室里。这不仅仅是一个健康习惯的改善;肩并肩地走,而不是面对面地坐着,这个简单的动作对微妙地改变谈话的叙述有着神奇的效果,有利于分享结果,对心理安全有着神奇的作用
出版
信用是在过程后期可能破坏合作的问题之一。唯一的解决办法,还是回到动机,是在早期就信用分配进行坦率的对话。首先要认识到,信用不是一个可加的量。许多人奇怪地将合作视为一个要分配的大“信用馅饼”,每个合作者都以某种方式加入进来,稀释了他们自己的个人贡献。但是面对现实吧,没有人会想到你是一篇三作者论文的合著者,而不是一篇四作者论文的合著者,不管你的作者地位如何。信用甚至不是一个单调的数量:增加正确的合作作者可以极大地提高你论文的整体信用价值,例如当合作者的声誉或专业知识给你的工作带来可信度时:他们实际上是在你身上花费他们辛苦赚来的一些信用。
围绕着作者身份的激励通常是惊人的微妙:博士论文仍然主要基于第一作者的论文,终身职位案例基于最后作者的论文。对任何一种身份象征的威胁都会对合作者的参与度产生巨大的影响。如果你的姓 Zyzzyck 的同事不喜欢分享按字母顺序排列的作者,不要表现得很惊讶。
离别的思绪
对于试图写下这种建议的人来说,有一个有趣的困境:一般来说,积极的建议(“这样做,你就会成功”),尽管它们有助于伟大和鼓舞人心的故事,但应该以高度的怀疑态度对待,因为它们通常受到生存偏见的影响。另一方面,负面案例研究(“我做了这件事,但它失败了”)要有用得多,因为尽管我们讨厌这么看,但成功往往是反复失败,有时是在这个过程中运气好。
所以,就像所有的建议提供者一样,我作弊了:我在这里认为积极的建议实际上应该被理解为不要做的事情的集合,每个人都艰难地发现:如果你想赢得尊重并建立参与,不要无条件地给予;不要四处挥舞着想法,希望找到一个足够感兴趣的人来为你实现它们,而你却得到了荣誉;不要假设每个人都想从伙伴关系中得到同样的东西;不要因为害怕稀释自己的信用而欺骗任何人。
承认吧,听起来没那么鼓舞人心,不是吗?我也这样认为;)
我如何开始学习数据科学?
原文:https://towardsdatascience.com/how-do-i-get-started-in-data-science-c4d38010ced?source=collection_archive---------35-----------------------
如果你希望在 2020 年开始数据科学之旅,请阅读本文。
Photo by Tim Mossholder on Unsplash
过去几年,开启数据科学之旅引起了广泛关注。有几门课程和大学项目可供选择,许多有抱负的学生或职业转型者认为这是他们梦想的工作。
根据哈佛商业评论,数据科学是 21 世纪最性感的工作。此外,企业年复一年地增加数据科学家的雇佣比例。
如果您对涉足数据世界感兴趣,本文将在您的旅程中为您提供帮助。所以保持领先!
以下是对任何有抱负的数据科学家的一些重要建议:
不要为了钱去做数据科学。
当考虑一份工作或追求一个新的职业时,钱通常是一个关键因素。虽然钱是必不可少的,但记住你会花更有价值的东西,那就是你的时间。
根据 2015 年 LinkedIn 对 1 万多人的调查,员工给出的最常见的离职原因包括对工作的多个方面缺乏工作满意度。
如果你不喜欢你正在做的事情,你就在拿工作和家庭的幸福冒险。
此外,不同国家和不同公司的工资水平也有很大差异。
所以,不要把收入看得比工作/职业满意度更重要。如果你投资于你的激情,你总能赚到很多钱。
数学是你的朋友。
Mathematics in DS by ParallelDots.
这不应该让你气馁,但事实上,要成为一名数据科学家,你确实需要了解一些数学基础。
范围从线性代数,概率,统计等。这些将帮助你掌握不同机器学习算法背后的逻辑。
如果你想赢得一场战斗,带上你的武器,掌握你的技术。如果你要解决一个数据科学问题,你也想做同样的事情,让数学成为你的盟友。
多编程。
虽然有一个神话说数据科学家不编码,但事实远非如此;你将需要写干净和高质量的代码。
随着数据科学实践的成熟,数据科学项目将需要自动化、可再现性、可伸缩性、可移植性和可扩展性。
我应该用 R 还是 Python 编程?选择你熟悉的语言,并开始发展你的编程技能。编程语言只是解决问题的工具。你的项目带来的价值才是最重要的。
发现问题的商业层面。
苏格拉底说:“理解一个问题是半个答案”。
当然,我们在大学期间都听过这句话。数据科学也不例外。
为了建立成熟和强大的数据科学能力,您必须学会如何针对数据提出正确类型的问题。这植根于对业务以及业务挑战如何产生的深刻理解。
构建一个有效的业务案例包括确定几个与业务流程直接相关的重要元素,这些元素易于理解和量化。
业务理解为有效的解决方案铺平了道路。
不要期待直接的结果。
在找到最终解决方案之前,有许多工作要做:收集数据、清理数据、探索数据、设计特征并在训练模型之前选择重要的特征,等等。每一步都会对结果产生重大影响,每一步都会引导你走向下一步。此外,一些快速的假设可能会误导你。 需要耐心!
The road might seem complicated, but it is absolutely worth it!
每天都要学习。
数据科学是一个多学科领域,每天都有新技术和技巧发布。不要对现有的信息量感到沮丧。努力找到共同的逻辑;这将有助于你将点点滴滴联系起来,快速学习。此外,实践理论知识对你的学习也至关重要。所以, 发现,阅读,练习,重复!
最后的想法
如果你对数据科学充满热情,不要因为你需要学习的东西而气馁。把它分解成小步骤,因为学习是一个旅程。总是练习你所知道的,因为熟能生巧。
投入你的热情,你的努力总会有回报。
我如何知道我的人工智能想法是否可行?
原文:https://towardsdatascience.com/how-do-i-know-if-my-ai-idea-is-possible-ee6208511e84?source=collection_archive---------16-----------------------
作为人工智能顾问,我经常被问到的一个问题是,在某些方面,最简单的:这可能吗?
人们会带着一些非常模糊的概念来找我,他们想要自动化的东西,或者他们想要创造的某种人工智能产品。他们通常不是来自技术背景,但他们是聪明,聪明,见多识广的人。他们已经阅读了人工智能技术在其他类似领域的应用,他们在自己的领域看到了类似的机会。
回答这个问题通常很简单。你只需要问自己几个问题:
- 人类做的有多好?人类能做你想做的事情吗,用你想用的数据(即使这将非常耗时)
- 你能有多容易捕捉到 10,000 到 100,000 个人类这样做的例子?这要花多少钱?你能接触到历史数据吗,或者你是从零开始收集一切?
- 我正在做的是众所周知很难的事情吗(从脑电图中读取思想,人类水平的智能,预测经济何时会好转)
我们将为您介绍一些例子:
自动操作起重机
我想制造一台自动操作的起重机,作为现有起重机的替代品,在建筑工地上使用。必须能通过无线电和起重机通话。
- 人类做的有多好?
经过适度的训练,非常准确。
- 你能有多容易捕捉到 10,000 到 100,000 个人类这样做的例子?
如果我是一家起重机制造商、大型起重机租赁公司或大型建筑公司,我应该能够获得 10,000 到 100,000 小时的起重机操作时间。
- 我正在做的是众所周知很难的事情吗(从脑电图中读取思想,人类水平的智能,预测经济何时会好转)
没有。
总之,自动操作的起重机是非常可能的。
基于人工智能的创业投资
我想创建一个人工智能系统来帮助我选择投资哪些初创公司。
- 人类做的有多好?
非常差(经验法则是十分之一成功)
- 你能有多容易捕捉到 10,000 到 100,000 个人类这样做的例子?
非常困难——在整个风险投资行业,一年没有那么多的创业投资。
- 我正在做的是众所周知很难的事情吗(从脑电图中读取思想,人类水平的智能,预测经济何时会好转)
没有。
总之,一个基于人工智能的创业投资系统将非常难以创建。
人工智能驱动的项目管理
我想在我的项目规划软件中创建一个功能,使用人工智能来预测项目何时可能落后于计划。此外,我希望人工智能提供关于如何让这些项目按计划进行的建议。
- 人类做的有多好?
长期表现不佳,短期表现良好
- 你能有多容易捕捉到 10,000 到 100,000 个人类这样做的例子?
如果我在市场上已经有了项目管理软件,这相当容易。它只需要被修改,这样人们就可以在他们的项目落后于时间表时开始获取数据
- 我正在做的是众所周知很难的事情吗(从脑电图中读取思想,人类水平的智能,预测经济何时会好转)
没有。
总之,基于人工智能的项目管理是非常可能的。
人工智能驱动的指导/训练
我想创造一个可以指导小孩的人工智能机器人。它应该能够教他们一般的生活技能,帮助他们完成家庭作业,并与他们一起玩得开心。
- 人类做的有多好?
非常好,如果这个人有人际交往能力的话(并不总是如此)
- 你能有多容易捕捉到 10,000 到 100,000 个人类这样做的例子?
中等难度——每位导师每年可能会与学员进行 50 至 100 次会谈,因此,如果你是一家中大型的导师组织,你也可以做到这一点
- 我正在做的是众所周知很难的事情吗(从脑电图中读取思想,人类水平的智能,预测经济何时会好转)
是的,因为让人工智能拥有常识和类似人类的一般生活技能是相当困难的(此外,截至 2018 年,机器人仍然相当困难)
总之,人工智能驱动的导师在今天可能是不可能的。
结论
有时候,当你是一个非技术型企业家,你想创造很酷的新技术,可能很难知道如何开始。如果你不是一个技术人员,试图区分什么是可能的,什么是不可能的是非常具有挑战性的。然而,如果你专注于这三个简单的问题:人类在这方面有多好,我可以获得多少数据,以及这是否是媒体上讨论的已知难题,那么你将能够从那些不可行的想法中显著缩小可行的 AI 想法。
我如何在媒体上写数据科学
原文:https://towardsdatascience.com/how-do-i-write-about-data-science-on-medium-d03feee328b1?source=collection_archive---------8-----------------------
并最终成为顶级作家,出乎意料…
I was speechless upon receiving this notification
是的,我必须坦白地告诉你。
四个月前,在一个晴朗的日子里,我收到了一封来自 Medium 的电子邮件,祝贺我成为教育界的顶级作家,对此我感到无语和困惑。
我当时就想,“我到底看到了什么?”
我说不出话来,因为我怀疑自己——我认为我不应该得到这个荣誉。
我很困惑,因为我在写作方面还是新手,我甚至不认为自己是一个只有一点经验的作家。
这种认识出乎我的意料,让我激动不已,并激励我继续相信自己,继续与他人分享我在数据科学方面的经验,尽管我自己会自我破坏。
快进到今天。在 Medium 和其他出版物上写了一段时间后,我意识到,每当我写关于数据科学的文章时,我都会发现并虔诚地遵循的一些原则(或者方法,如果你愿意称之为)。
因此,我将这些方法提炼并整合成了 5 条核心原则,我相信这不仅会对你写数据科学有所帮助,而且也很容易适用于其他主题。
在这篇文章的最后,我希望你会发现这 5 条原则对你的写作有用,最终吸引你的读者,并有效地向他们传达你的想法。
我们开始吧!
撰写数据科学等内容的 5 个核心原则
(Source)
1.健谈
你的文章总是被个人读者阅读——在任何给定的时间只有一个读者。这意味着读者大多是单独阅读你的文章,旁边没有任何人。
因此,要真正吸引和吸引读者,你的文章应该是对话式的,这样你的读者会觉得你在亲自和他们交谈。
从心理学上来说,我们作为人类,经常会寻求别人的关注,对读者来说并没有什么区别。
换句话说,对话式写作表明你在与读者进行一对一的对话,他们会感到在个人层面上受到了关注。
如果你一直在关注我的写作风格,你可能已经注意到,我的大部分文章(如果不是全部的话)都是以对话的语气向来自不同背景的读者传达我的想法。
这一点尤其正确,因为我相信,如果读者阅读一篇语法完美、句子正式的文章,他们可能会厌烦得要死。我并不是说拥有完美的语法和正式的句子不是一种合适的写作方式,而是从读者的角度来写。
更糟糕的是,如果文章听起来太普通,读者可能会觉得不被理解,因为他们可能会认为文章没有解决他们的需求,因此他们没有兴趣继续阅读下去。
2.开门见山
时间是宝贵的,人类的平均注意力持续时间为 9 秒钟。
别拐弯抹角了,直接说重点吧。
在进入你的主要内容之前,你可能已经花了时间来介绍你自己和建立你的可信度。或者你可能已经给了你的主要观点一个冗长的背景介绍或前奏。
就是不要。请记住,我们处在一个快节奏、环境不断变化的时代,人们希望在尽可能短的时间内消费内容。
不要把时间浪费在冗长的介绍或更新上。开始阐述观点,并立即讲述你的故事,向读者传达你的想法。
额外收获:这一原则非常适用于精心设计你的标题,通过一个不言自明的对话式标题,让读者觉得值得花时间阅读你的文章。简单来说,你的文章标题起到了最重要的因素之一,让读者决定是否要点击阅读你的文章。
3.真实,讲故事
做你自己,通过故事写下你所知道的——讲故事。
要真实。如果你刚开始写作,学习和模仿别人的写作风格是可以的。这意味着在一段时间后找到适合你的写作风格,并通过你独特的声音以最能展示真实的的方式表达你的想法和想法。写自己知道的,要真实可信。真实性永远是赢家。
讲故事。每个人都喜欢故事。我们的注意力总是被故事吸引,我们对故事的结局和收获很好奇。好消息是:讲故事是一种技能,可以学习(我还在学习!).
以写关于数据科学的技术材料为例。我经常尽力通过故事来解释技术概念——不管是我自己的故事还是别人的故事。
真实一点。讲故事。你可以走了。
4.接受反馈,包括批评
永远保持开放的心态。
总是试图从你的读者那里寻求反馈——无论是积极的还是消极的——来学习如何改进你的写作。
不要过度沉迷于你的文章,这样可能会忽略一些你可以改进的地方。试着理解读者的需求,并从中学习。
我经常从出版物编辑、朋友和其他读者那里寻求建议和反馈,看看我是否能做些什么来改进我的作品。我非常感激有这样一个支持性的社区来分享和互相学习!
5.保持一致
如果你已经努力完成了以上 4 个步骤,这一步将是最后也是最重要的一步。
原因如下。
没有一致性,你的文章将很难获得读者的关注。
没有连贯性,你提高写作水平的机会就会减少。
也就是说,有一个写作常规,并与常规保持一致,能够极大地提高你的写作水平(至少对我来说)。
熟能生巧。一篇伟大的作品来自于通过不断的改进,一步一个脚印,坚持不懈地练习写作技巧。
坚持也意味着不管遇到什么障碍都不要放弃。我感觉到了。每次都很难开始写作,因为你可能会觉得没有什么可以分享的。
打破这种“我不想写作”心态的唯一方法是开始写。一旦你获得了动力,你会觉得写作的阻力减少了,反而更有动力继续写作。
最后的想法
(Source)
感谢您的阅读。
这就是了。这是我在写作中一直遵循和应用的 5 个核心原则。
尽管如此,我不会说这些原则对任何写作风格或出版物都有效,因为一些平台需要某种写作风格的格式,或者至少有他们自己的写作方式。
同样,我希望你能在这里找到有用的东西,在你未来的写作中应用这些原则,最终吸引你的读者,并有效地将你的想法传达给他们。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
Admond Lee 目前是东南亚排名第一的商业银行 API 平台Staq—的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
加入 Admond 的电子邮件时事通讯——Hustle Hub,每周他都会在这里分享可行的数据科学职业建议、错误&以及从创建他的初创公司 Staq 中学到的东西。
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
* [## 阿德蒙德·李
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)*
机器是如何学习的?
原文:https://towardsdatascience.com/how-do-machines-learn-561181ed209a?source=collection_archive---------16-----------------------
为非计算机科学人士解释机器学习概念
Photo by Franck V. on Unsplash
介绍
最近关于学这个词闹得沸沸扬扬。我们总是听说机器学习、深度学习、学习算法等等。但是这到底意味着什么呢?科学家是否找到了一种方法来创建一个类似大脑的组件,并在机器中实现它?仅仅是用来卖软件和服务的营销词吗?机器会接管世界吗?或者这到底是怎么回事?
嗯…不要担心,我们还没有到那一步… 还没有!在这篇文章中,我将介绍什么是真正的学习,以及科学家如何教会计算机完成类似人类的任务,或者在某些情况下,甚至超越人类。这篇文章完全没有技术含量。它是这样写的,任何领域的任何人都可以理解它的思想。因此,这个概念将被解释得过于简单。其他概念丰富的主题将在以后的文章中讨论。
我们为什么需要学习?
在学习发生之前,解决问题的任务依赖于编写算法。算法就是一组规则,它接受输入并返回输出作为问题的解决方案。
请考虑以下情况:给定一个数字列表,要求您按升序对它们进行排序。这个问题用算法解决。其实有很多算法来解决这个任务。它们的工作方式是获取列表,应用一些规则和操作,并以排序的方式返回列表。这个问题和其他类似的问题对计算机科学家来说“不知何故”很容易。他们只需要思考并想出一个算法来解决给定的任务。
另一方面,有些问题不太容易用算法解决。人们开始对计算机提出更多的要求。他们希望机器具有解决非常困难的任务的超强能力。科学家完全不知道如何编程的任务。例如:如何编写一个算法,获取一个动物的图像并输出它的类型?对于人类来说,这是一项非常容易的任务,但用算法解决它是一项非常复杂的任务,如果不是不可能的话。人类知道如何对动物照片进行分类,但他们不知道如何描述他们获得答案的步骤。这里出现了一个重要的问题。如何解决连人类都不知道如何描述的问题?
学习可以拯救一切!人类从经验中学习,机器也是如此。
想象一个房间,里面有一个漂亮的壁炉,一个小孩在玩耍。孩子的头脑完全是新鲜的,根本不知道什么是壁炉。他总是想探索和学习东西。他看到了红色的火焰,对他来说,这是一种新奇、迷人、有趣的研究。在他看来,这就像让我们去触摸它!不幸的是,痛苦来了,孩子从有害的经历中学会了以后不要碰火。这里我强调一下体验,因为这就是学习的意义所在。
学习的类型
学习背后的理念非常简单直观。为了让计算机学习一项任务,我们给它一组问题,后面跟着一个答案。注意,我们不知道如何描述从一个问题到一个答案的步骤,所以我们把这个任务交给我们可怜的伙伴——机器。这是一种叫做监督学习的学习。例如:考虑一个程序,它获取一幅图像并回答它是否包含一只猫。教授这个程序的方法是给它许多标记为“是猫吗”或“不是猫吗”的图像。机器的责任是学习从输入到标签的方法。怎么会?我们稍后会看到一个例子。
还有其他类别,如无监督学习,我们不给出问题的答案,模型必须找到找到答案的方法。有一种强化学习,就像视频游戏中使用的那种,模型通过选择最佳动作并从糟糕的动作中学习来获得高分。为了保持这篇文章的简单,我不会进入细节,但我猜你已经得到了大致的想法。
它是如何工作的?
是时候解开谜团,知道学习背后的魔力了。我们将用一个非常简单的问题来说明这个想法。让我们说,你想开始一个新的职业生涯,销售旧车。不幸的是,你在这个领域的经验非常有限,很难定价。
为了解决这个问题,你四处寻找并从一个汽车经销商那里收集了以下信息:
- 马力,
- 燃料类型,
- 每加仑英里数
- 门的数量,
- 还有最重要的售价。
这被认为是你的经验或背景知识,你的目标是从中学习。
为了简单起见,我们先拿 mpg 来说,其他功能我们以后再加。现在,让我们开始思考。价格必须与 mpg 有关系。让我们画一张图,显示价格相对于 mpg: 的变化
图表显示 mpg 越多,汽车越便宜。也许这是因为 mpgs 更多的车更经济,因此比强劲的车便宜。
现在我们有了一个基本的解决方案,当一辆类似 mpg 的新车到来时,我们简单地指定和以前一样的价格。但是,如果我们买了一辆价值未知的新车呢?这是学习背后的主要目标,我们想知道这些值是如何计算的…
为此,我们首先提出一个可能的计算模型。我们认为两者之间存在线性关系。这种关系可以描述为一条直线,如下图所示:
我们使用这条线作为我们的参考,当我们得到一个新的值时,我们把它映射到这条线上,得到我们的价格。例如:当我们得到一辆每加仑跑 40 英里的车时,我们假设价格在 6000 美元左右。很公平…
但是如何找到这条直线呢?直线由以下等式表示:
*price = a + b * mpg*
我们从数据集中知道了价格和 mpg ,但是什么是 a 和 b 呢? 简单来说, a 和 b 都是直线的参数。不同的值 ab表示不同的直线。
如何找到哪条线最好?
最佳线是更好地拟合数据点的线。所以最重要的问题是如何选择 a 和 b 的最佳值来得到最佳拟合线?为什么这个问题如此重要?嗯,因为这是机器必须学习的全部内容……这是每个学习模型的核心。
这个过程就像给吉他调音一样。我们从旋转不同的键开始,直到我们得到完美的音调。
Photo by Marcin Nowak on Unsplash
在我们的例子中,情况是这样的……我们要求机器尝试不同的和 b 值,然后将我们得到的价格与我们先前已知的数据进行比较。例如,我们从数据中得知,当 mpg = 30,价格=1390。我们计算所有价格的预测价格,并与实际价格进行比较。
如果给定的和的价格相差很大,我们改变*和 b 以达到更好的估计。我们继续这样下去,直到模型找到最佳设置。幸运的是,有一些算法可以加速和减少寻找最佳参数的搜索空间,例如梯度下降。***
用单个特征拟合一条直线并不难。这就像一个山上的盲人,在山下寻找一个球。但是考虑添加其他功能:
****price = a + b * miles + c * horsepower + d * fuel type + e * number of doors****
在这里,我们不再处于二维空间,我们的大脑甚至无法想象这种情况。所有这一切,我们仍然使用我们的模型的线性表示。更复杂的模型呢?例如拟合多项式线而不是直线。更复杂的模型需要拟合大量的参数。在这种情况下,学习过程需要大量的计算和时间。嗯,我们需要多复杂来定义我们的模型?这完全取决于数据,以及机器学习工程师的经验。
最后的想法
希望这篇文章解开了学习背后的谜团。学习就是发现给定模型的最佳参数值( a,b,c … )。这些值使模型能够在先前的基础上输出良好的结果。
由于计算机硬件的进步和价格的下降,机器学习现在成为可能。有很多机器学习模型。它们的复杂程度不同,能够解决的任务也不同。我们在本文中介绍的一种叫做线性回归,这是最简单但非常强大的算法之一。
如果你喜欢这篇文章,请点击“鼓掌”按钮,我将不胜感激👏所以可能会传染给他人。也可以在 推特 , 脸书 , 上关注我直接发邮件给我 或者在LinkedIn上找我。
数学家如何寻找爱情?概率方法。
原文:https://towardsdatascience.com/how-do-mathematicians-find-love-a-probabilistic-approach-7a718c48436d?source=collection_archive---------25-----------------------
婚姻问题或秘书问题解释
"数学家如何在一个充满逻辑和理性主义的世界里找到爱?"最近有人问我。
“嗯,这很容易”,我说。这是我告诉他们的。
Photo by Ivan Cabañas on Unsplash
问题设置
这个问题大多被称为婚姻问题,有时也被称为秘书问题。因为,如果有的话,我会找一个男人共度一生,让我们称之为丈夫问题。
我们假设我一生中可能会和很多男人约会。我知道这是一个很难做出的假设。如果我不拒绝男人直到没有人剩下,我怎么会知道这条路上还有多少男人?
尽管如此,让我们假设我们有许多候选人可以选择。这里唯一的问题是:一旦我满足于一个人,我就已经满足了。就是这样。这就是我得到的交易,我永远不会知道我错过了谁。
我们也假设我不能回到我以前拒绝过的人身边。
此外,我们假设对于任何两个男人,我可以决定谁更好(至少对我来说)。我们还假设候选项是均匀分布的。直觉上,这意味着最佳候选人在某个位置的概率对所有位置都是一样的。
当然,我想得到最好的交易。我想在所有我可能结婚的男人中找到最好的。问题是:我如何知道何时停止搜索?如果我决定和某人在一起不开心,但我意识到可能再也没有比他更好的人了,该怎么办?如果我一直拒绝男生,最后我意识到我将不得不接受一个糟糕的选择或者根本没有选择,因为没有候选人了,怎么办?
嗯,那是另一回事了。现在,我们想最大化我们找到最好的机会。
来说说数学吧!
数学方法:策略
我们表述问题的方式包括我们非常挑剔。这意味着我们想要最好的候选人或者根本没有候选人。这也意味着成功的定义是选择了最佳候选人,而失败的定义是选择了除最佳候选人之外的任何其他候选人。
这意味着我们的目标是最大化选择最佳候选人的概率。失败意味着我们选择了任何其他候选人(甚至是第二好的候选人)。
我们如何最大化找到最佳候选人的机会?以下是我们的策略:
- 看第一个 k-1 候选人,全部否决。
- 从候选人 k 开始选择第一个候选人,该候选人优于之前看到的所有候选人。
We reject the first 1,…k-1 candidates and pick the first candidate from k, k+1,…n that is better than all the ones previously seen!
让我们看一个例子来更清楚地说明这一点,并假设有 12 个可能的候选者 (n=12) 。我们现在选择设置 k=5。这意味着我们与前 4 个男生约会,拒绝所有男生,然后选择比前 4 个男生都好的第一个。
这里有哪些可能的结果?
- 假设我们的最佳候选人是 2 号候选人:太糟糕了,我们一直拒绝每个人,直到我们最终得到 12 号候选人。
- 我们的最佳候选人是 7 号候选人:太好了,通过遵循这一策略,我们得到了可能的最佳交易,并满足于 7 号候选人!
怎么选 k?
选择 k 是最难的部分。如果我们选择的太小,这意味着我们在做出选择之前只能看到很少的候选人。假设我们选择 k=1 。也就是说我们选择第一个出现的人。这个候选人最好的几率是 1/n ( —还记得我们怎么说候选人是均匀分布的吗?).看起来不是最聪明的策略,对吧?
如果我们选择一个大的 k 呢?比如我们选 k=n 。好吧,那么我们总是被候选人 n 困住,不管这个候选人是好是坏。同样,我们以概率为 1/n 的最优候选者结束。
直觉上,一个好的 k 位于 1 和 n(T21)之间,幸运的是,数学为我们提供了所有的答案。
我们的目标是找到最佳候选人。这意味着我们希望最大化找到最佳候选人的概率。为此,我们使用函数 ϕ(k) 来描述固定 n 的概率。我们需要确定所有容许 k 的 ϕ(k) ,然后选择该函数取最高值的 k 。
我们如何计算ϕ(k)?
让我们设置 n=5 一步步来。
k=1 :
如果我们设置 k=1 ,我们最终得到第一个候选人。这是最佳候选的概率是 1/5,因此, ϕ(1) = 1/5 。
k=2 :
如果我们设置 k=2,我们观察第一个候选人并拒绝他。然后我们开始审查所有其他候选人。
- 如果候选人 2 是最好的(概率为 1/5),他也比候选人 1 好,在这种情况下,我们选择概率为 1 的候选人。
- 如果候选人 3 是最好的(概率为 1/5),他比候选人 1 好,但有 1/2 的机会,我们已经选了候选人 2。因此,我们只选择概率为 1/2 的候选人 3。
- 如果候选人 4 是最好的(概率为 1/5),他比之前的所有人都好,但现在有 2/3 的机会,我们已经满足于候选人 2 或 3。因此,我们以 1/3 的概率选择候选人 4。
- 如果候选人 5 是最好的(概率为 1/5),他比所有以前的人都好一次,但现在的机会为 3/4,我们已经满足于候选人 2、3 或 4 中的任何一个。因此,我们以 1/4 的概率选择候选人 5。
因此,我们可以通过下式计算ϕ(2)
Probability of picking the best candidate when setting k=2. I also put n into a subscript, because it’s the better notation, but the Medium editor won’t let me do it in the text. So please excuse the inconsistency!
k=3,…n:
对于 k=3,…n,,我们做的和对 k=2 做的一样。
这概括为
Probability of picking the best candidate for fixed n and fixed k.
而对于 n=5 ,我们得到了 k 的这些概率。如果我们输入数字 k=1,…5,就会得到下表。
对于 k=3,ϕ(k) 取最高值。这意味着我们应该先看前两个候选人,然后选择比候选人 1 和 2 更好的第一个。
所以对于小的 n ,我们可以手工计算或者使用我们选择的编程语言来计算出哪个 k 是最优的。
例如,对于 n=12 ,我们得到下表。
对于 k=5 ,我们得到最高值。这意味着我们应该先看看前四个候选人,然后选出第一个比那些候选人更好的。
而对于大的 n ,我们可以查看极限!
寻找大 n 的最佳 k
对于大的 n ,可以看看我们上面公式的极限,用黎曼近似。我们设 x=k/n 和 ϕ(k) 收敛如下。
这个函数 ϕ(x) 是可微的,我们可以计算一阶导数并将其设置为零以找到局部最大值。
因为
事实上,这是最大值,现在我们知道,对于大 n,我们总是选择 k≈ 0.368 ⋅ n 。
因此,如果你的生活中有 100 个候选人,最好先看看前 36 个候选人,然后选出比你之前见过的所有候选人都更好的第一个。
如果你想知道:当然,有其他方法来定义一个最佳策略。尤其是如果你对超过某个门槛的候选人感到满意,或者第二好的选择也不算太差。但是这些策略不是这个故事的一部分。
关于问题命名的一点注记
在文学作品中,这个问题通常被称为婚姻问题。这是有问题的,因为一个人在遇到所有潜在的结婚对象之前,通常不知道他们的数量。
这也是为什么有时它被称为秘书问题的原因。知道有多少人申请了某份工作,比知道有多少人愿意和某人共度余生要容易一点。但是话又说回来,为什么我们不能在拒绝之前先看看所有的求职者呢?
这就是为什么我和我的朋友们开玩笑地称之为日历问题。因为他们曾经在我生日的时候送给我一个日历,你必须撕下一页才能看到下一页。一旦你撕下一页纸,就没有回头路了。我们从一开始就知道有多少候选人(12!).我最终采用了上述策略。三年来,我一直把九月的照片挂在墙上。有些人可能会说,这是愚蠢的和“等等,这是一个日历,你不想有正确的月份吗?”。
嗯,是的,但是如果你能在脑子里计算,谁还需要正确的月份呢?
最后:
如果你想知道这是否真的是数学家寻找爱情的方式:可能不是。但是如果你是一个像我一样的数学家,并且你曾经想在 10 分钟内失去一个人:这是你要讲的故事!
神经类型转换是如何工作的?
原文:https://towardsdatascience.com/how-do-neural-style-transfers-work-b76de101eb3?source=collection_archive---------13-----------------------
#InsideNST
深度学习可以捕捉一幅图像的内容,并将其与另一幅图像的风格相结合。这种技术被称为神经风格转移。但是,神经风格转移是如何运作的呢?在这篇博客文章中,我们将探讨神经风格转移(NST)的潜在机制。
高级直觉
神经类型转换概述
正如我们所看到的,生成的图像具有内容图像的内容和样式图像的样式。可以看出,上述结果不能简单地通过重叠图像来获得。现在,问题仍然是,我们如何确保生成的图像具有内容图像的内容和风格图像的风格?我们如何捕捉各自图像的内容和风格?
为了回答上述问题,我们来看看卷积神经网络(CNN)实际在学习什么。
卷积神经网络捕获了什么?
看下面的图片。
卷积神经网络的不同层次
现在,在第 1 层,使用 32 个过滤器,网络可以捕捉简单的模式,比如一条直线或一条水平线,这可能对我们来说没有意义,但对网络来说非常重要,慢慢地,当我们向下移动到有 64 个过滤器的第 2 层时,网络开始捕捉越来越复杂的特征,可能是狗的脸,也可能是汽车的轮子。这种对不同简单和复杂特征的捕捉称为特征表示。
这里需要注意的是,中枢神经系统不知道图像是什么,但它们学习对特定图像所代表的内容进行编码。卷积神经网络的这种编码性质可以帮助我们进行神经风格转换。让我们再深入一点。
如何使用卷积神经网络来捕获图像的内容和风格?
VGG19 网络用于神经类型转换。VGG-19 是一个卷积神经网络,它是在来自 ImageNet 数据库的 100 多万幅图像上训练的。该网络有 19 层深,基于数百万幅图像进行训练。因此,它能够检测图像中的高级特征。
现在,CNN 的这种“编码本质”是神经风格转移的关键。首先,我们初始化一个有噪声的图像,这将是我们的输出图像(G)。然后,我们计算此图像与网络中特定层(VGG 网络)的内容和样式图像的相似程度。由于我们希望输出图像(G)具有内容图像(C)的内容和风格图像(S)的样式,因此我们计算生成的图像(G)相对于相应的内容(C)和风格图像的损失。
基于以上的直觉,我们来定义随机生成的噪声图像的内容丢失和风格丢失。
Working of NST model
内容丢失
计算内容丢失意味着随机生成的有噪声图像(G)与内容图像(C)的相似程度。为了计算内容损失:
假设我们在预先训练的网络(VGG 网络)中选择一个隐藏层(L)来计算损失。因此,设 P 和 F 是原始图像和生成的图像。并且,F[l]和 P[l]是层 L 中各个图像的特征表示。现在,内容损失定义如下:
Content Cost Function
这就结束了内容损失函数。
风格丧失
在计算风格损失之前,让我们看看“图像风格是什么意思,或者我们如何捕捉图像的风格。
我们如何捕捉图像的风格?
Different channels or Feature maps in layer l
该图像显示了在特定选择的层 l 的不同通道或特征图或过滤器。现在,为了捕捉图像的风格,我们将计算这些过滤器彼此的“相关”程度,即这些特征图的相似程度。但是相关性是什么意思呢?
让我们借助一个例子来理解它:
让上面的图像中的前两个通道是红色和黄色。假设,红色通道捕捉一些简单的特征(比如垂直线),如果这两个通道相关,那么只要图像中有一条垂直线被红色通道检测到,就会有第二个通道的黄色效果。
现在,让我们看看如何计算这些相关性(数学上)。
为了计算不同滤波器或通道之间的相关性,我们计算两个滤波器的激活向量之间的点积。这样得到的矩阵称为克矩阵。
但是我们如何知道它们是否相关呢?
如果两个滤波器激活的点积很大,那么两个通道被认为是相关的,如果它很小,那么图像是不相关的。从数学上来说:
样式图像的 Gram 矩阵:
这里 k 和 k '代表层 l 的不同滤波器或通道,我们称之为 Gkk'[l][S]。
样式图像的 Gram 矩阵
生成图像的 Gram 矩阵(G):
这里 k 和 k '代表层 L 的不同滤波器或通道,我们称之为 Gkk'[l][G]。
Gram Matrix for generated Image
现在,我们可以定义风格损失了:
样式和生成图像之间的成本函数是样式图像的 Gram 矩阵和生成图像的 Gram 矩阵之间的差的平方。
Style cost Function
现在,让我们定义神经类型转移的总损失。
总损失函数:
总损失函数是内容和风格图像的成本之和。数学上,它可以表示为:
Total Loss Function for Neural Style Transfer
你可能已经注意到了上式中的α和β。它们分别用于衡量内容和风格成本。通常,它们定义了生成的输出图像中每个成本的权重。
一旦损失被计算出来,那么这个损失可以通过使用反向传播来最小化,这反过来会优化我们的随机生成的图像成为一个有意义的艺术品。
这总结了神经类型转移的工作。
使用张量流实现神经类型转换;
在我的 Github 账号上实现:https://Github . com/Blackburn 07x/convolutionary-Neural-network/tree/main/Neural % 20 style % 20 transfer
结论
在这篇博客中,我们深入了解了神经风格转移是如何工作的。我们还研究了 NST 背后的数学原理。我很想在评论区和你聊聊。希望这有助于你理解神经类型转移
我很乐意在# Iinsta gram上与您联系。谢谢你与我分享你的时间。
人们对拯救海龟有什么感受?
原文:https://towardsdatascience.com/how-do-people-feel-about-saving-sea-turtles-8e723d10e8e0?source=collection_archive---------22-----------------------
使用 VADER 对# savetheturtles 推文的情感分析
Photo by Jeremy Bishop on Unsplash
像我的许多同龄人一样,气候变化和环境可持续发展是我一直知道并关心的事情,但直到我看到一个从海龟鼻孔中提取塑料吸管的视频后,我才付诸行动。
(听起来很恐怖)。
从那以后,我被迫更多地考虑我的塑料消费,并热衷于使用金属吸管来减少我的废物足迹。
吸管特别危险,因为它们体积小,重量轻,不仅更容易卡在不幸的海龟鼻孔里,而且吸管更难回收利用。
事实上…
“B 因为由相对较薄的材料制成,吸管可以更快地分解成更小的塑料颗粒,即微塑料。在大多数设施中,它们也不容易回收。据 EcoCycle 报道,美国人每天大约使用 5 亿根一次性吸管
谢天谢地,这个视频已经对#停止吮吸运动产生了重大影响。早在 7 月,西雅图成为美国第一个禁止塑料餐具和吸管的城市,星巴克宣布计划到 2020 年在其所有门店逐步淘汰塑料吸管!
High five! // Photo by Tanguy Sauvin on Unsplash
但这也让我想知道——病毒式传播 6 个月后,#SavetheTurtles 运动还有多大影响?围绕稻草运动的普遍情绪是什么?我决定刮掉 Twitter 标签#savetheturtles,看看我能找到什么。
所有代码都可以在我的 Github 页面上找到。
[## Helena Shi 95/savetheturtles _ sensitive analysis
中间文章的代码“人们对海龟有什么感觉?使用…对# savetheturtles 推文进行情感分析
github.com](https://github.com/helenashi95/savetheturtles_sentimentanalysis)
假设
总的来说,我认为随着时间的推移,我会看到兴趣下降。下面的谷歌趋势搜索“塑料吸管”和“海龟”的截图显示,在 6 月至 7 月期间,“塑料吸管”的搜索量出现了高峰,这也是该视频迅速传播的时间。然而,我认为推文中的总体情绪是积极的,并支持这场运动。
As you can see, sea turtles have generated pretty consistent searches across the year, but plastic straws spiked around June — July, which is when the video went viral.
数据和探索性分析
我使用了非常有用的 TwitterScraper 来抓取# savetheturtles 标签。从 2018 年 1 月到 2019 年 1 月,我能够获得大约 1500 条推文。
我在 Jupyter 笔记本上通过预处理代码开始了我的分析。使用 NLTK,我将文本转换成小写,去掉标点符号,并删除停用词。
从那里,我找到了这些推文中使用频率最高的词。
#Calculate frequency.
fdist = nltk.FreqDist(filtered_stopwords)
fdist.most_common(10)
但是,也有一些冗余,比如“稻草”和“吸管”。因此,我对单词进行了词条化,以找到单词的词根(例如,“running”和“runs”都被简化为“run”)。
#try again with lemmatized words
**from** nltk.corpus **import** wordnet#create a function that would return WORDNET POS compliance to WORDENT lemmatization (a,n,r,v)
**def** get_wordnet_pos(treebank_tag):
**if** treebank_tag.startswith(‘J’):
return wordnet.ADJ
**elif** treebank_tag.startswith(‘V’):
return wordnet.VERB
**elif** treebank_tag.startswith(‘N’):
return wordnet.NOUN
**elif** treebank_tag.startswith(‘R’):
return wordnet.ADV
**else**:
# As default pos in lemmatization is Noun
return wordnet.NOUN
wnl = WordNetLemmatizer()
#create an empty list to store lemmatized words
des_lem = []**def** wn_pos(filtered_pos):
**for** word,pos **in** filtered_pos:
des_lem.append(wnl.lemmatize(word,get_wordnet_pos(pos)))
#print pos
#print get_wordnet_pos(pos)
**return** des_lem# Get the 10 most common words
fdist_2 = nltk.FreqDist(wn_pos(filtered_pos))
fdist_2.most_common(10)
正如我们所看到的,词汇化将单词带到了根短语,允许我们绕过像“吸管”和“吸管”这样的重复单词。这也揭示了围绕这些推文的更多一般主题,包括“拯救”和“帮助”
bigrm = nltk.bigrams(filtered_stopwords)
fdist = nltk.FreqDist(bigrm)
fdist.most_common(10)
看看最常见的双字母组合,它甚至揭示了支持这项运动的企业周围的一点市场,如深蓝贴花和咸味女孩!
此外,我还想看看 6 个月后,视频的病毒式影响是否仍在影响推文。为了做到这一点,我绘制了从年初到年底每天的数字或推文。
推文数量在 6 月、7 月和 8 月大幅飙升,反映了病毒式视频的影响。然而,我们也可以看到一个明确的趋势,即从接下来的几个月到今天,推文的数量总体上在增加!
现在谈谈情绪分析…
基于各种文章,我决定尝试 NLTK 模块 VADER 来分析每条推文的积极、消极和中性情绪。
我发现这些文章特别有帮助:
- http://www.nltk.org/howto/sentiment.html
- https://medium . com/@ Sharon woo/情操分析-with-nltk-422e0f794b8
- http://t-redactyl . io/blog/2017/04/using-Vader-to-handle-sensation-analysis-with-social-media-text . html
- http://datameetsmedia . com/Vader-情操-分析-解释/
nltk.download(‘vader_lexicon’)
**from** nltk.sentiment.vader **import** SentimentIntensityAnalyzersid = SentimentIntensityAnalyzer()#showing the sentiment scores for each tweet
**for** tweet **in** df[‘text’]:
**print**(tweet)
ss = sid.polarity_scores(tweet)
**for** k **in** sorted(ss):
print(‘{0}: {1}, ‘.format(k, ss[k]), end=’’)
print(“\n”)
结果输出如下所示。
看到这个输出真的很爽。VADER 情感分析器输出四个分数:
- 阴性:阴性
- neu:中性
- 位置:正
- 复合:复合(即综合得分)
neg、neu 和 pos 分数基于输入文本返回情感强度的浮动值。VADER 情绪分析还会为每条微博返回一个复合情绪分数,范围从-1 到 1,从最负面到最正面。
通过查看复合得分,我们可以将每条推文分为“正面”、“负面”或“中性”(分别为> 0.0、< 0.0 和== 0.0)。我们可以通过下面的代码看到分数的总体分布。
summary = {“positive”:0,”neutral”:0,”negative”:0}
**for** tweet **in** df[‘text’]:
ss = sid.polarity_scores(tweet)
**if** ss[“compound”] == 0.0:
summary[“neutral”] +=1
**elif** ss[“compound”] > 0.0:
summary[“positive”] +=1
**else**:
summary[“negative”] +=1**import** matplotlib.pyplot **as** pyplot
keys = summary.keys()
values = summary.values()#add colors
colors = [‘#99ff99’, ‘#66b3ff’,’#ff9999']pyplot.axis(“equal”) # Equal aspect ratio ensures that pie is drawn as a circle
pyplot.pie(values,labels=keys,colors=colors, autopct=’%1.1f%%’, shadow=True, startangle=90)
pyplot.show()
Positive: 788; Neutral: 413; Negative: 287
通过查看所有推文的复合得分的总分布,我们可以看到,总体而言,超过 50%的推文是正面的,28%是中性的,19%是负面的。
尽管 VADER 一揽子计划是一个强有力的一揽子计划,但它并不完美。仔细看还是有分类错误的。我相信这是因为许多情感分析器中使用的训练词典来跟踪积极/消极以及英语语言的持续微妙之处。
VADER 有许多有用的审查方法。它可以成功地解释积极情绪的强度,例如当“优秀”被视为比“好”更积极时。然而,这些推文并不是明确的“评论”,积极的推文可能不会使用这样的词。例如:
拼写错误的“MAJOR”和使用俚语,如“props ”,意味着这条推文中令人兴奋的批准在我们的分析器中丢失了。或者在这种情况下…
很遗憾没有检测到讽刺!
总之…
总的来说,这个项目表明# savetheturtles 运动仍在强劲发展!随着时间的推移,意识和推文的总量有所增加,其中绝大多数是正面推文。
诚然,有几个警告。抓取# savetheturtles 标签意味着大多数人都在转发/发推文,以示对可持续发展的支持;讨厌稻草运动的人会使用这个标签是没有道理的。回想起来,更好的做法可能是将几个标签的推文结合起来,或者在 twitter 主页面上查看标签的出现情况。
更多下次尝试!
也许在将来,我还可以在分析中使用转发和喜欢列,作为积极支持的一种衡量标准。我将非常感谢任何意见或建议,或者你可能有的其他建议!
喜欢这篇文章?请留下评论,让我知道你对吸管、文字分析和其他方面的看法!
预先训练好的模型是如何工作的?
原文:https://towardsdatascience.com/how-do-pretrained-models-work-11fe2f64eaa2?source=collection_archive---------4-----------------------
介绍
在我的大多数深度学习项目中,我都使用过预训练的模型。我也提到过,从他们开始而不是从头开始训练通常是个好主意。在本文中,我将对此进行详细解释,并在此过程中帮助您理解大部分代码片段。在文章的最后,我还将谈到计算机视觉中的一种技术,它有助于提高您的模型的性能。
让我们开始吧。
训练神经网络
当我们训练神经网络时,网络的初始层可以识别非常简单的事情。说一条直线或者一条斜的。一些非常基本的东西。
随着我们深入网络,我们可以识别更复杂的东西。
第二层可以识别像正方形或圆形这样的形状。
第三层可以识别复杂的模式。
最后,网络的最深层可以识别像狗脸这样的东西。它可以识别这些东西,因为我们的模型的权重被设置为某些值。
Resnet34 就是这样一个模型。它被训练对 1000 种图像进行分类。
使用预训练模型的直觉
现在想想这个。如果你想训练一个分类器,任何分类器,不管你想分类什么,初始层都会检测斜线。因此,每次创建神经网络时都训练它们是没有意义的。
这只是我们网络的最后几层,这些层学习识别需要培训的项目特定的类。
因此,我们所做的是,我们采取 Resnet34,并删除其最终层。然后,我们向它添加一些我们自己的层(随机初始化),并训练这个新模型。
在我们看如何在代码中做到这一点之前,我想提一下,预训练模型通常是在大量数据上训练的,并使用通常不是每个人都可用的资源。以 ImageNet 为例。它包含超过 1400 万张图片,其中 120 万张图片属于 1000 个类别中的一个。因此,使用这些模型对我们来说是非常有益的。
代码
现在让我们看看在 fastai 中我们是如何做到这一点的。我们首先加载一个预训练的模型。
最初,我们只训练增加的层。我们这样做是因为这些层的权重被初始化为随机值,并且比 ResNet 层需要更多的训练。因此,我们只训练 ResNet 和网络的其余部分。
一旦我们稍微训练了最后几层,我们就可以unfreeze
resnet 34 的各层了。然后我们为整个模型找到一个好的学习率并训练它。
我们的学习率与损失的关系如下图所示。
我们不希望我们的损失增加。因此,我们选择一个学习率刚好在图形开始上升之前(这里是 1e-04)。另一个选项,也是我用过的选项,是选择一个切片。
这意味着,如果我们的网络中只有 3 层,第一层将以学习速率= 1e-6 进行训练,第二层以 1e-5 进行训练,最后一层以 1e-4 进行训练。框架通常将网络的层分成组,在这种情况下,切片意味着不同的组以不同的学习速率训练。
我们这样做是因为我们不想大量更新初始图层的值,但我们希望大量更新最终图层的值。因此有了切片。
这种以不同的学习速率训练神经网络不同部分的概念被称为 【区别学习】 ,是深度学习中相对较新的概念。
我们继续解冻层的过程,找到一个好的学习率并训练更多的层,直到我们得到好的结果。
最后,预训练模型不仅可用于计算机视觉应用,还可用于其他领域,如自然语言处理。
我们现在可以继续讨论计算机视觉项目的技巧了。
渐进式图像缩放
提高计算机视觉模型性能的一个技巧是为较低分辨率的图像(例如大小= 128)训练一个模型,并使用这些权重作为较高分辨率图像(大小= 256,然后 512,以此类推)的初始值。这种技巧被称为 渐进式图像缩放 。我在我的一个项目中使用了它,我的模型的性能提高了 2%。
现在,从 92%增加到 94%可能听起来没什么大不了的,但如果我们处理医疗应用,我们希望尽可能准确。正是这些小技巧将优秀的模特与竞赛获奖的模特区分开来。阅读这篇研究论文,了解更多类似的技巧。不是所有的方法每次都有效,但是你真的必须尝试和试验什么有效,什么无效,直到你有了感觉。
这就是本文的全部内容
如果你想了解更多关于深度学习的知识,可以看看我在这方面的系列文章:
[## 深度学习系列
我所有关于深度学习的文章的系统列表
medium.com](https://medium.com/@dipam44/deep-learning-series-30ad108fbe2b)
~快乐学习。
心理测试结果如何因年龄、种族和性别而异?
原文:https://towardsdatascience.com/how-do-psychometric-test-results-vary-across-age-race-and-gender-2651672cd96c?source=collection_archive---------16-----------------------
我们大多数人都曾在某个时候做过性格测试。无论是为了找工作、上学还是仅仅为了娱乐,你可能记得浏览过结果以了解更多关于你自己的信息,以及你与其他人相比如何。
但是你有没有想过这些结果是如何与其他人口统计因素相关联的,比如种族、性别、年龄、宗教和性取向?
我最近也问过自己这个问题,为了找到这个问题的答案,我深入研究了数据。在探索了由开源心理测量项目发布的所有公开可用的数据集后,我特别选择了三个(亲密关系体验量表;抑郁、焦虑和压力量表;以及罗森博格自尊量表)和超过 110,000 项心理测试的结果在考生的同意下发布。
根据这些数据集中记录的答案,我发现:
1。年龄与人格特质维度 有关系,与关系依恋风格也有关系。
②。宗教和压力分数是有关系的。
3。 种族与心理健康的衡量标准有关系,如压力、抑郁和焦虑。
4。性别与情绪稳定性 和宜人性之间存在一定的关系。
5。性取向与抑郁 、焦虑、压力量表有关系。
尽管数据分析得出了一些有趣的结果,但我还必须强调,由于在线性格测试的性质以及无法验证所给答案的准确性,该分析旨在为该主题的进一步研究提供一些思考甚至动机,而不是可以推广到更大人群的结果。
说到这里,下面是通过开源心理测量项目收集的数据和在亚马逊 Mechanical Turk 上收集的数据的质量对比。结果表明,前者“包含的无效应答率低于 AMT 数据的 25%。”
对于那些对该分析背后的过程感兴趣的人来说,可以访问数据和代码这里。
宗教与压力得分有什么关系?
开源心理测量项目提供的测试之一被称为 DASS 量表,代表抑郁、焦虑、压力量表。
在过滤掉所有无效回答(对效度问题回答不正确的人)后,我绘制了其余 34,583 个测试结果的结果图,并进行了均值相等的双样本 t 检验。
我发现自称为摩门教徒的考生平均压力得分最高(得分越高,压力越大),而自称为新教徒的考生压力得分最低。
Note: Higher stress scores indicate higher levels of stress | Source: The Open Source Psychometrics Project; N=34,583
由于 t 统计结果为正(t=4.734,p < 0.01), I can conclude that the mean of self-reported stress scores of Mormons is significantly different than that of Protestants. Using the same test, I also found that there is also a statistically significant difference between the stress scores of Protestants and Atheists ( t=6.113, p < 0.01).
You can compare these means to the conventional severity labels below.
Overall, the mean stress score for this population of test takers fits within the cut-off score for those with “moderate” stress levels.
Although the results are thought-provoking, ),我们应谨慎对待从该数据中得出的任何结论,并将其应用于一般人群,因为其值得进行更全面的分析,以控制可能的外来、混杂变量。
随着年龄的增长,我们会变得更安全吗?
数据中发现的另一个有趣的模式是某些个性指标与年龄之间的关系。
在绘制了几个跨年龄变量之后,我发现被调查者的年龄和性别与情绪稳定性、开放性、责任心、宜人性和外向性得分之间存在关系,如十项人格问卷(TIPI)所测量的那样。
Note: Higher scores indicate higher levels of emotional stability | N=34,583
所有年龄组中,男性受访者的情绪稳定性平均得分高于女性。与此同时,似乎年龄越大的受访者越有可能获得更高的情绪稳定性分数(分数越高表明情绪稳定性水平越高)。卡方检验结果证实这两个变量不是独立的(χ2=982.64,p < 0.01)。
Source: TIPI Norms
如果你将这些平均值与该量表创建者发布的常模进行比较,你会发现该测试人群的平均情绪稳定性得分(3.185)低于普通人群的得分(4.830)。这可能表明,那些参加在线心理测试的人并不代表更大的人群,但这需要进一步调查。
种族与人格测量有什么关系?
我还绘制了不同性格特征种族的平均结果,用 TIPI 和 DASS 量表测量。
虽然在某些情况下,结果可能看起来与直觉相反,但值得进一步研究。卡方检验的结果表明种族和情绪稳定性不是独立的(χ2=597.83,p < 0.01)。较高的分数对应于所讨论的特质或行为的较高水平。
Note: Higher scores indicate higher levels of the trait or behavior in question | N=34,583
还必须指出的是,大多数考生将自己归类为亚洲人、白人或其他人种。
性取向呢?
我还进行了卡方检验,以确定性取向是否独立于情感稳定性等 DASS 指标。结果表明两者并非不相关(χ2=509.23,p < 0.01)。
从下面的副图中,你可以看到,与其他类别相比,异性恋者的焦虑和抑郁得分最低(低得分对应于低水平的焦虑和抑郁)。与此同时,那些自称双性恋的人抑郁和焦虑得分最高,情绪稳定性得分最低。
Note: Higher scores indicate higher levels of the trait or behavior in question | N=34,583
原籍国和压力水平
我还绘制了各个国家的压力分数,发现西方国家的压力分数总体上并不高。相反,中东和非洲国家的考生压力分数似乎更高。
Note: Higher scores indicate higher levels of stress. Countries in white were not represented by test takers. | N=34,583
结论
从这一分析中,我们可以得出结论,考生身份的固有特征,如年龄、性别、种族、原籍国和性取向,与各种个性和行为措施有关。
然而,我们必须进一步研究在线心理测试者和更大的普通人群之间的差异。根据这一分析的结果,在线测试者似乎在情绪稳定性方面得分较低,在焦虑和抑郁方面得分较高。
他们如何在临床领域应用 BERT?
原文:https://towardsdatascience.com/how-do-they-apply-bert-in-the-clinical-domain-49113a51be50?source=collection_archive---------6-----------------------
临床领域中的 BERT
Photo by Edward Ma on Unsplash
这个故事同时在 Dev.to 和 Medium 上发表。
通过埃尔莫(彼得斯等人,2018 年)、伯特(德夫林等人,2018 年)和 GPT-2 (拉德福德等人,2019 年),上下文单词嵌入被证明极大地提高了自然语言处理模型的性能。许多研究试图在特定领域的数据上微调 BERT 模型。 BioBERT 和 SciBERT 在上次介绍过。我想继续这个话题,因为还有另外两个研究微调 BERT 模型并应用于临床领域。
本故事将讨论公开可用的临床 Bert 嵌入 (Alsentzer 等人,2019 年)和临床 BERT:模拟临床记录和预测医院再入院(黄等人,2019 年),同时将详细介绍 BERT,但重点是研究人员如何将其应用于临床领域。如果你想更多地了解伯特,你可以看看这个故事。将涵盖以下内容:
- 建立临床特定的 BERT 资源
- 临床应用
建立临床特定的 BERT 资源
Alsentzer 等人在 MIMIC-III v1.4 数据库中应用了 200 万个注释(Johnson 等人,2016)。共有 15 种票据类型,Alsentzer 等人汇总为非出院小结类型和出院小结类型。放电汇总数据是为下游任务培训/微调而设计的。
Distribution of note type MIMIC-III v1.4 (Alsentzer et al., 2019)
给定这些数据, ScispaCy 用于将文章标记为句子。这些句子将分别传递给 BERT-Base(原始 BERT 基本模型)和 BioBERT 进行额外的预训练。
临床 BERT 是基于 BERT-base 构建的,而临床 BioBERT 是基于 BioBERT 构建的。一旦上下文单词嵌入被训练,信号线性层分类模型被训练用于跟踪命名实体识别(NER)、去标识(de-ID)任务或情感分类。
与原始的 BERT 模型相比,这些模型在 MedNLI 中取得了更好的效果。同时,您可能会注意到 i2b2 2006 和 i2b2 2014 没有改进,它们是去 ID 任务。
Performance comparison among different models in MedNLI and i2b2 data set (Alsentzer et al., 2019))
临床应用
与此同时,黄等人也注重临床笔记的研究。然而,黄等人研究的主要目标是通过利用良好的临床文本表示来建立预测模型。黄等研究发现,降低再住院率对患者是有利的,如节省费用等。
与 Alsentzer 等人相同,MIMIC-III 数据集(Johnson 等人,2016 年)用于评估。遵循相同的 BERT 实践,通过预测屏蔽记号和下一句预测来训练上下文单词嵌入。简而言之,预测屏蔽记号就是随机屏蔽一个记号,并使用周围的单词来预测屏蔽记号。下一句预测是一个二元分类器,该模型的输出是分类第二句是否是第一句的下一句。
Training tasks of ClincialBERT (Huang et al., 2019)
在具有预训练的上下文单词嵌入之后,微调过程被应用于再入院预测。这是一个二元分类模型,用于预测患者在未来 30 天内是否需要再次住院。
BERT 模型的一个限制是令牌的最大长度是 512。一个长的临床笔记将被分割成多个部分,并分别进行预测。一旦所有子部分被预测,最终概率将被聚集。由于担心单纯使用最大值或平均值,黄等人将两者结合起来,以得到更准确的结果。
Scalable radmission prediction formula (Huang et al., 2019)
实验结果表明,微调后的 ClinicalBERT 模型优于经典模型。
Performance comparison among models (Huang et al., 2019)
拿走
- Alsentzer 等人使用分类模型的信号层来评估结果。这可能是一个良好的开端,并期望伯特模型能够学习的内容。评估其他高级模型架构可以提供更好的综合实验结果。
- 对于较长的临床病历,黄等人采用了一些数学技巧来解决。它可能无法捕捉非常长的临床记录的内容。可能需要进一步思考处理长输入的更好方法。
喜欢学习?
我是湾区的数据科学家。专注于数据科学、人工智能,尤其是 NLP 和平台相关领域的最新发展。欢迎在 LinkedIn 上与 me 联系,或者在 Medium 或 Github 上关注我。
延伸阅读
- 临床 BERT 嵌入 GIT 库
- 临床伯特
- MIMIC-III v1.4 数据库
- 比奥伯特和塞伯特
参考
- E.阿尔森策、J. R .墨菲、W. Boag、W. H .翁、d .金、t .瑙曼和 M. B. A .麦克德莫特。公开可用的临床 BERT 嵌入。2019
- K.黄、J. Altosaar 和 R. Ranganath。 ClinicalBert:模拟临床记录并预测医院再入院。2019
我们如何创造一个可持续的思维经济?
原文:https://towardsdatascience.com/how-do-we-create-a-sustainable-thinking-economy-4d77839b031e?source=collection_archive---------32-----------------------
“看,人民是一个,他们都有一种语言;他们已经开始这样做了。现在,他们想做的事,没有什么不能阻止他们。”
-《创世纪》第十一章第六节
正如巴别塔起源神话中所传达的那样,大规模合作对我们人类的自决至关重要,以至于当一种共同语言使世界人民团结在一个集体事业中时,全能者认为应该进行干预,以免人类获得全能。科学事业代表了现代的巴别塔。这是现存的最大规模的协同努力,目标是实现全知。越来越多的人认识到,科学是我们所拥有的最有效的工具,可以减少威胁我们人类和地球系统未来的复杂问题的不确定性。
20 世纪最有影响力的科学家之一万尼瓦尔·布什在 1945 年恰当地指出,科学“提供了思想的记录,并使人类能够操纵和摘录这些记录,以便知识在一个种族而不是一个 individual"⁴.人的一生中不断发展和延续尽管如此,即使我们当前的技术社会基础设施实现了快速的知识共享,科学似乎也无法跟上我们今天面临的失控问题——其中许多是我们自己发明的副作用。
尽管受到布什著作的启发,发明了电脑鼠标的道格拉斯·恩格尔巴特认识到快速的知识共享不足以解决世界上日益复杂的问题。恩格尔巴特认为,解决这些问题的唯一途径是通过加强合作,并倡导一种旨在“改进我们改进的方式”的自举方法。事实上,恩格尔巴特的鼠标是人类和 machines⁵之间更紧密融合的有意步骤,因此也是通过这些机器将人类与其他人类联系在一起的有意步骤。
因此,在我们能够快速提高对世界的理解之前,我们需要一个框架,让我们能够研究和应用人类/人工智能 partnerships⁶.将这样一个框架与将信息处理资产和服务视为商品的商业系统相结合,可能会催生一个欣欣向荣的新思维经济。公民科学项目及其使能技术可以成为可持续发展的企业,从而形成一个丰富的可重复使用和可扩展的公民科学平台小部件市场、在线认知劳动者社区的交钥匙访问以及稳定的研究数据集供应。
时势
今天,我们畅游在前所未有的计算能力中,并全天候连接到无处不在的网格,但我们仍淹没在数据中,因为我们正在努力解决棘手的社会问题。人类从未像现在这样在更多的时间、更多的地方联系在一起,但这种非结构化的联系并不适合有目的的知识转移。例如,对 Twitter 的社交网络分析揭示了两极分化的子网的形成,这些子网成为了志同道合的 members⁷的“回音室”,而不是为混合不同观点可能产生的新想法提供肥沃的环境。
更糟糕的是,科学学科正变得更加专业化,因为新技术使研究人员能够更深入地钻研利基领域,创造出具有自己难以理解的 folksonomies⁸的孤立社区,并导致知识孤岛的激增。对于 know⁹来说,任何一个领域都有太多的东西需要跨学科的方法来解决,包括今天最邪恶的⁰问题。即使解决这些问题所需的数据和知识隐藏在知识中,我们也缺乏将它们整合成有效且可行的解决方案的能力。
许多人转向机器学习(一种人工智能形式)作为求助途径,因为它能够从异构数据集揭示复杂的因果关系。主要由于计算速度的提高,已经存在了几十年的机器学习方法突然变得可行,可以在医疗诊断、银行贷款审批和刑事判决等不同领域进行预测,支持决策。然而,当人类的偏见渗入训练数据或上下文信息缺失时,你可能会得到性别歧视或种族主义的预测,而不会区分相关性和因果关系。需要更多的研究来解决偏见问题,并更好地理解人工智能和人类各自的影响如何影响结果。在此之前,人们在使用这些工具时可能会受到不利和不公平的影响。
人类/人工智能伙伴关系的价值
“强人工智能”的圣杯是能够执行任何人类认知任务——换句话说,实现类似人类的智能。令人惊讶的是,这种能力今天依然存在。它叫…人类!事实上,人工智能系统经常使用人类认知产品的数据进行训练,这增加了对它们的需求。获取这种人类生成的数据的一种方法是通过“公民科学”,在线志愿者帮助获取或分析数据,以换取参与科学研究的机会。这些项目通常是为了解决一个研究需求而开发的,这种需求不能单独使用基于机器的方法来满足,因为工作的某些方面(例如对图像进行分类)只能由人类来适当地完成。
2019 年 4 月 13 日,来自全球各地的数千名公共志愿者在不到一个周末的时间里完成了为期三个月的阿尔茨海默病研究,共同创造了生物医学数据分析的新世界纪录。他们通过玩我们开发的名为“抓失速”的在线游戏来做到这一点。像大多数公民科学项目一样,《失速追踪器》体现了一类新兴的混合分布式信息处理系统⁴.这些所谓的人类计算(HCOMP) 系统利用人类和机器各自的优势来实现今天⁵.的未来人工智能能力因此,这些混合系统通过简单地循环人类来处理认知任务,实现了前所未有的能力,即使是最先进的人工智能系统⁶.也无法完成这些任务
失速追踪器并不是唯一的成功案例。HCOMP 正在推进癌症⁷和艾滋病毒⁸研究,诊断撒哈拉以南非洲的疟疾⁹,减少坦桑尼亚⁰的女性生殖器切割,预测多哥的洪水影响,赋予盲人实时场景理解能力,在语言障碍和基础设施故障的情况下加快救灾,改写我们对宇宙学⁴ ⁵的理解,并改进保护科学⁶.的预测
障碍
如今,将 HCOMP 应用于重大社会问题是一项“高风险/高回报”的事业。这需要投入大量的时间和金钱,而且成功的可能性很低。没有直接的集成路径来链接人工智能和基于人类的处理组件,没有工作流自动化的机制,数据管道通过手动研究人员干预和定制的适配器捆绑在一起,在可转移的粒度级别上缺乏模块化和重用,并且没有验证方法或数据质量保证的标准方法。
虽然最近的失速捕捉器事件展示了现实世界的效用和影响,但与许多成功的 HC 平台一样,它花了几年时间来完全开发复杂的信息处理系统,使这一壮举成为可能。我们是怎么做到的?首先,我们建立了一个数据管道,采用卷积神经网络对原始数据进行预处理,并分离出认知任务。接下来,我们开发了一个游戏化的众包平台,它与人类和人工智能系统⁷.紧密耦合为了激励参与,我们创建了一个中立的奖励引擎,但是也不断地结合用户反馈来改进交互设计。最后,我们开发了一种优化的动态一致性算法,用于机器辅助验证人群生成的数据。所有这些都是为了最大化分析通量,同时满足严格的生物医学数据质量要求。
如果每个公民科学项目都倾向于被视为一张白纸,那么难怪成功率会很低,而实现的时间会很长。但是每个成功项目中的每个部分都是潜在可分的。事实上,没有原则上的理由为什么不能把每一部分都做成共享的模块,这样它就可以被重用、重用,并扩展成具有新功能的新模块。然而,在实践中,只有在有一种方便的方式并且对发起人有利的情况下,这种情况才会发生。
另一个关键问题是可持续性。对于这些项目中的许多项目来说,一个中心目标是使用人类生成的数据来训练一个人工智能系统,该系统可以解放志愿者,或者至少吸收一些工作量。但这种结果很少见。更常见的情况是,正当这些公民科学项目发展出一个繁荣的社区,验证了他们的方法,并开始产生高质量的研究数据时,他们的资金枯竭了,他们不容易维持下去(例如,参见 Tsueng 博士给 Mark2Cure 参与者的终止信的内嵌摘录)。这种情况经常发生,因为它们得到了有时间限制的资助,资助范围要么是概念开发的证明,要么是解决具体的研究问题。
“不幸的是,我们没有所需的资源来解决困扰当前 Mark2Cure 迭代的所有问题,这些问题影响了用户体验并阻碍了参与。虽然我们的研究表明 Mark2Curators 可以贡献高质量和有意义的数据,但这些设计问题使得我们不太可能招募到足够多的用户[……]经过长时间的讨论,我们决定停止贡献……”
Scripps Research 的 Ginger Tseung 博士
走向思考型经济
如果我们有办法给项目注入收入来维持运营,会怎么样?上述进展障碍存在于更大的利益相关者生态系统中,所有利益相关者都投资于新的数据科学方法及其应用。每个利益相关者都带来了他们自己的⁸挑战和相关需求,但也为其他利益相关者带来了潜在的解决方案。这种需求和供给的互补性暗示了一种潜在的经济。
例如,一名渴望数据的机器学习研究生可以收费提供人工智能建模服务,或者以访问公民科学项目生成的大型训练集作为交换。然后,他们可以将自己表现最好的模型授权给学术研究人员,以获得发表权,并授权给营利性实体,以获得授权费。
公民科学项目本身可以通过向受资助的领域研究人员提供具有成本效益的数据分析来产生收入,这些研究人员为这些分析提供预算。另一个收入来源可能包括向其他公民科学项目授权“群体智慧”算法或专门的界面部件。
与此同时,公民科学志愿者可以建立基于表现的声誉,并在此基础上被聘为有偿认知劳动者。Mooqita 已经证明了这种方法的可行性,它将外部组织的在线任务整合到 MOOCs 中,成为⁹.的学习机会一些在在线任务中表现出熟练程度的学生被雇佣在 MOOC 之外继续同样的在线工作。
但是今天这些都没有发生,因为 1)信息处理交换不存在,2)我们被困在知识经济中。知识经济是一种重视一阶知识生产的思维模式,一阶知识是在孤立的环境中使用数据来指导我们行动的死记硬背的方法。这种知识忽略了现实世界中许多相互作用的系统之间存在的复杂的相互依赖性。
但是我们从已知的事物中建立高阶知识的速度很慢,因为整合知识比整合数据要困难得多。它需要的不仅仅是数据处理,还需要思考。想想精准医疗的挑战,其目标是基于患者的基因组、微生物群、病史和生活方式选择来预测前瞻性治疗的影响。这需要在不同的多源数据中发现模式,然后应用跨学科的专业知识来解释它们。为此,我们需要 HCOMP。
Civium 简介
为了实现这些目标,人类计算研究所正在领导 Civium 的开发,这是一个用于可持续人类计算的集成平台和商业引擎。Civium 的目的是为了科学的进步而简化信息处理,并使认知劳动及其产品商品化,走向新的思维经济。对于公民科学从业者来说,这可以减少开发时间和运营成本,实现快速的社区参与,并创造有助于维持项目的收入机会。
今天有一个名为 brainlife.io 的平台,它使神经科学家能够直接在云计算基础设施上发布算法和数据集。通过预先实施互操作性,所有数据集和算法都可以互换,并通过工作流轻松组合到更复杂的管道中,称为“开放服务”⁰.这种方法支持数据建模结果的可再现性。因此,brainlife.io 已经在神经科学社区中被广泛采用。
这种简单而明智的方法似乎是一个更广泛的计划的合适基础,该计划旨在开发一个支持人类计算研究的开放科学平台,包括基于群体的计算的整个生命周期。各种群体科学方法,如数据准备、参与者参与、机制设计、聚合算法和验证方法,以及协调这些方法的特定动态工作流,都会对人类计算系统的成功发展产生重大影响。此外,将这些组件的组件和子组件快速连接在一起以进行快速评估和验证的能力对于有效校准系统行为的各个方面至关重要。
除了扩展 brainlife.io 以包括支持公民科学和 HCOMP 研究的基于人类的信息处理,Civium 还将关键地整合一个商业系统以促进发展和可持续发展。事实上,Civium 的关键假设是技术创新无法在经济真空中持续。因此,成功将关键取决于以模拟和解决现实世界的约束和激励的方式将集成“胶水”与商业系统交织在一起。我们相信,将这些技术和经济系统恰当地结合在同一个平台上,将释放潜在的市场驱动力,为推进思维系统的发展带来一个繁荣的生态系统。在接下来的两节中,我们将更深入地探讨 Civium 的这些关键方面。
综合
目前存在几个公民科学项目建设者(例如,Zooniverse、citsci.org、Spotteron、Anecdata 等。),通常在线性设计过程中提供一个选项菜单。其中的每一个都适合一组用例(例如,图像分类)。这些平台支持快速开发和参与者访问,尽管它们可能会限制新项目可能采用的潜在数据集、应用程序和数据科学方法的范围。此外,还有像 PYBOSSA 和 TurKit 这样的众包库,它们非常灵活,支持几乎无限多种应用程序,但可能需要大量编码。
Civium 寻求提高这些现有社区资产和其他资产的可访问性,并通过在基于云计算服务的共享信息处理环境中提供这些资产来降低运营成本,在该环境中,这些资产可以以不同的方式组合并应用于新的数据集。
Civium 还鼓励小部件和服务的模块化,这样它们就可以被共享和重用。例如,一个新的镰状细胞病项目可以将 EyeWire 的图像预处理算法与 stardust@home 的虚拟显微镜界面、Stall Catchers 的共识算法相结合,然后在 Zooniverse 门户服务中发布项目时向 SciStarter.org 仪表板服务注册。此外,工作流可以使用项目的输出来自动训练人工智能模型,该模型为人类认知任务提供持续改进的协作输入。
可持续性
混合人机系统和平台正在改变世界,这已经不是什么秘密,对这些能力的需求只会增长。难道不是时候团结起来,以符合我们价值体系的方式为每个人解决可持续发展问题了吗?除了作为一个集成平台,Civium 还将自下而上地设计一个集成的商业引擎,通过创建一个信息处理和数字资产的市场,帮助播种一种新的“思维经济”(正如在 2019 年微软教师峰会上介绍的那样)。在这种模式下,任何数字产品或服务都是潜在的收入来源。例如,公民科学平台提供的分析能力可以作为付费服务来提供。在现有公民科学项目中使用的功能模块(例如,共识算法)可以被注册并可用于其他项目。门户服务,如 Zooniverse,可以通过交钥匙访问按月付费购买,也可以注册 SciStarter 的 dashboard 服务。甚至公民科学项目本身也可能需要参与费,例如 Project FeederWatch,它已经向用户收取每年 18 美元的费用。但是如何指定和实现这样的使用策略呢?
Civium combines integration and sustainability features within a single platform
在 Civium 中,我们希望通过使透明地共享人工制品变得容易来促进开放科学,但我们也希望给创作者指定他们自己的许可条款的机会,无论是否涉及经济报酬。今天,许多研究人员分享开源和开放科学的价值,作为加快研究和影响的手段。与此同时,研究人员似乎发自内心地认识到可持续资助的困难。这种价值驱动的行为和可持续性之间的不协调可能源于开源=免费这一广为流传的神话。开源(就此而言,还有开放科学)的“免费”部分是在源代码(和数据)透明的脉络中。跟钱没关系。例如,如果有人创建了一个算法并在 Civium 上发布了该模块,他们可以说“任何人都可以使用它,只要他们信任我”(就像 CC-BY 一样),或者规定“我拥有这个软件,但我将向任何学术研究人员授予免费许可证,以及为期 6 个月的可更新许可证,用于 X 美元的盈利。任何衍生产品都必须遵守这些许可条款。”诸如此类。这不仅适用于小工具,也适用于在线服务(例如,访问大型参与者社区),并且可以通过多种方式进行衡量。事实上,Civium 提供了一个评估和信用分配系统,用于跟踪哪些资源得到了利用以及利用了多少。
实现这一点的关键是“照单全收”的许可能力,这将使使用策略能够嵌入到注册的服务和数字制品(如算法、数据集等)中。).在一个透明的社会是一个礼貌的社会的前提下,这些将受到身份验证服务和基于区块链的问责制的保护。提供商将能够规定他们选择的任何条款,市场可以自由接受这些条款或寻找其他条款。使用策略可以另外规定只在 Civium 的底层计算资源上使用已发布的工件,这可能会解决协作限制,否则这些限制可能会阻碍来自不同组织的数据建模者和数据提供者之间的协作。全球分布的 Azure 服务器场使地理定位处理成为可能,这将使其他大陆的数据科学家能够在他们原籍国的服务器上处理数据,从而进一步实现以前被禁止的合作机会,例如分析受 GDPR 保护的基因组数据集以支持精准医学研究。
赋予公民生命
在思考这一雄心勃勃的事业时,很明显,由聪明能干的组织采取的相关举措尚未取得成果,认为人类计算研究所可以独自解决这一问题是傲慢的想法。因此,我们与我们的社区成员分享了这些想法,思考了为什么这样一个平台尚未被广泛采用,并考虑了现在可以做些什么来实现这一点。事实上,将 Civium 视为一个人类计算系统本身,拥有多个利益相关者,有助于为这一方法提供信息。
那么为什么像 Civium 这样的东西今天不存在呢?一个障碍可能与组织限制和任务偏差有关。大型企业解决方案上市速度快,而且可能是可持续的,但服务于盈利目标,引入了限制性的付费墙,并向少数行业利益相关者提供有偏见的产品。另一方面,基于社区的倡议往往服务于更广泛的目标,但涉及行动缓慢、铁板一块的财团。当这些团队开发并同意一组需求时,那些特性规范不再满足这个快速变化的领域的需求。此外,植根于学术的项目往往有意避开大企业,这阻碍了潜在的收入流。
作为一个非营利组织,人类计算研究所的使命是为了社会的利益而推进 HCOMP,而不是为了利润。这一使命旨在寻求学术、企业和政府利益的共同基础。在 HCI 的管理下,Civium 可以服务于许多人的利益,同时在非地质时间尺度上取得成果。
下一步是什么?
如今,Civium 计划正在与开发 brainlife.io 的微软研究院和印第安纳大学的 Pestilli 实验室合作向前发展。公民科学实践者、HCOMP 研究人员和机器学习爱好者的更广泛社区正在形成一股浪潮,寻求公民科学规模经济的全球联盟的主要成员也表达了兴趣,如联合国公民科学与可持续发展目标(SDG)协调工作组,EU-公民。科学和其他。将在 10 月下旬的 HCOMP 2019 大会上召开一次公开的社区会议,回答问题并收集反馈,随后在 1 月份召开一次项目启动会议,以就规范达成一致并分配角色。
Civium 不打算重新发明轮子。事实上,我们的目标只是将相关的部分组合在一起,这样就可以很容易地组合和重用它们。Civium 还寻求支持那些创造数字产品并提供大众服务的组织和个人,包括认知劳动者本身。Civium 包括一组核心功能,其中许多功能将来自现有的平台和服务。例如,Civium 将建立在 brainlife.io 的基础上,它为互操作性和交钥匙再现性提供了一种可靠的方法。对于其许可引擎,Civium 将建立在我们的另一个合作伙伴 GridRepublic 开发的成熟项目之上,该项目将区块链可追溯性应用于合同。这些核心能力将在一个无缝平台内交织技术集成和经济可持续性,在这个平台上,参与者门户、公民科学项目、人工智能算法和数据集可以互操作并蓬勃发展。
从某种意义上说,Civium 是一种新型超级计算机的操作系统,由计算机硬件和认知“软件”提供支持,将使我们能够构建、改进和部署变革性的人类/人工智能系统,以支持开放科学和创新。它也是一个集市,用于分享、交易和寻找我们需要的小部件和服务,以创建和维持我们寻求的功能,为不受支持的项目和平台注入新的生命。最终,我们相信 Civium 有潜力播种一种新的思维经济,奖励解决我们最紧迫的社会问题所需的独特的人类认知能力。
承认
衷心感谢 Eglė Marija Ramanauskaitė和 Jennifer Couch 的广泛反馈,这些反馈极大地改进了本文的结构和语气。感谢众多同事对 Civium 和相关想法的讨论和反馈,包括 Vani Mandava、Lucy Fortson、欧阳丹丹 Gurari、Diane Bovenkamp、Franco Pestilli、Soichi Hayashi、Darlene Cavalier、Lea Shanley、Besmira Nushi、Matthew Blumberg、Nancy Kleinrock 和许多其他人。
参考
1.创世纪。在:钦定本圣经。
2.巴别塔。在:维基百科。;2019.https://en.wikipedia.org/w/index.php?title=Tower_of_Babel&oldid = 912466515。2019 年 8 月 27 日接入。
3.公众越来越信任科学家为社会谋福利。科学新闻。https://www . science news . org/article/public-trust-scientists-work-good-society-growing。发表于 2019 年 8 月 2 日。2019 年 8 月 4 日接入。
4.我们可能会认为。大西洋。https://www . theatlantic . com/magazine/archive/1945/07/as-we-may-think/303881/。出版于 1945 年 7 月 1 日。2019 年 8 月 27 日接入。
5.50 年后,我们仍然没有抓住所有演示的母亲。连线。2018 年 12 月。https://www . wired . com/story/50 年后——我们仍然不理解这位所有演示的母亲/2019 年 8 月 27 日接入。
6.《人类计算和收敛》。在:班布里奇 WS,洛可 MC,编辑。科技融合手册。Cham:斯普林格国际出版公司;2016:455–474.doi:10.1007/978–3–319–07052–0 _ 35
7.威廉姆斯·HTP,小麦克默里,库尔茨·T,雨果·兰伯特 f。网络分析揭示了气候变化社交媒体讨论中的开放论坛和回音室。全球环境变化。2015;32:126–138.doi:10.1016
8.方足球俱乐部。专业科学。感染免疫。2014;82(4):1355–1360.doi:10.1128/IAI . 01530–13
9.里查森·PJ。作为一种分布式计算形式的人类累积文化进化。在:米凯鲁奇 P,编辑。人类计算手册。纽约州纽约市:斯普林格纽约;2013:979–992.doi:10.1007/978–1–4614–8806–4 _ 76
10.《规划一般理论中的困境》。政策科学。1973;4(2):155–169.doi:10.1007/BF01405730
11.Tan S,Adebayo J,Inkpen K,Kamar E.《调查用于累犯预测的人类+机器互补性》。 ArXiv180809123 Cs Stat 。2018 年 8 月。http://arxiv.org/abs/1808.09123.2019 年 9 月 28 日接入。
12.史蒂文森 l .公民科学家为加速老年痴呆症的研究创造了新的记录。Discov Mag Citiz Sci 沙龙。2019 年 5 月。http://blogs . discover magazine . com/citizen-science-salon/2019/05/06/citizen-scientists-set-new-record-for-accelerating-Alzheimers-research/。2019 年 5 月 6 日接入。
13.老年痴呆症可以被成千上万的业余爱好者治愈。https://www . wired . com/story/在数千台显微镜下寻找失去的记忆/。2019 年 10 月 21 日接入。
14.公民网络科学&人类计算的新方向和机遇。Hum compute。2014;1(2).doi:10.15346/hc.v1i2.2
15.米歇尔·P·迪金森·JL。人群的力量。理科。2016;351(6268):32–33.doi:10.1126/science.aad6499
16.布瑟 A,斯隆 M,米开朗琪 p,保韦尔斯 E. 人工智能:一个政策导向的介绍。威尔逊中心;2017.https://www . scribd . com/document/364545974/人工智能-政策导向-简介。2019 年 1 月 8 日接入。
17.坎迪多·多斯·雷斯·FJ、林恩·S、阿里·HR 等人众包公众进行癌症的大规模分子病理学研究。埃比奥美辛。2015;2(7):681–689.doi:10.1016/2015 . 05 . 009
18.由蛋白质折叠游戏玩家解决的单体逆转录病毒蛋白酶的晶体结构。自然结构分子生物学。2011;18(10):1175–1177.doi:10.1038/nsmb.2119
19.Luengo-Oroz MA,Arranz A,Frean J .众包疟疾寄生虫定量:一个分析受感染稠血涂片图像的在线游戏。医学互联网研究。2012;14(6).doi:10.2196/jmir.2338
20.领导莫。让坦桑尼亚的乡村出现在地图上。读写分词。2018 年 4 月。https://medium . com/read-write-participate/put-rural-Tanzania-on-the-map-79d 0888 df 210。2019 年 5 月 2 日接入。
21.反思参与:人道主义者探索地理信息的创新。ISPRS Int J Geo-Inf。2015;4(3):1729–1749.doi:10.3390/ijgi4031729
22.Bigham JP,Jayant C,Ji H,et al. VizWiz:对视觉问题的近乎实时的回答。在第 23 届 ACM 年度用户界面软件和技术研讨会会议录。10 年的尤斯特。美国纽约州纽约市:ACM2010:333–342.土井指数:10.1145/186658686867
23.灾害应对中的人类计算。在:米凯鲁奇 P,编辑。人类计算手册。纽约州纽约市:斯普林格纽约;2013:95–104.doi:10.1007/978–1–4614–8806–4 _ 11
24.星尘号宇宙飞船收集的七个尘埃粒子的星际起源证据。https://science.sciencemag.org/content/345/6198/786.full.2019 年 5 月 2 日接入。
25.星系动物园绿豌豆:一类致密极端恒星形成星系的发现。 Mon Not R Astron Soc 。2009;399(3):1191–1205.doi:10.1111/j . 1365–2966.2009.15383 . x
26.生物多样性保护和研究的人/计算机学习网络。年:第二十四届 IAAI 会议。;2012.https://www . aaai . org/OCS/index . PHP/IAAI/IAAI-12/paper/view/4880。2019 年 5 月 2 日接入。
27.加速生物医学研究的人机合作。微软 Res 。https://www . Microsoft . com/en-us/research/video/a-human-machine-partnership-to-accelerate-biomedical-research/。2019 年 5 月 3 日接入。
28.单数他们。在:维基百科。;2019.https://en.wikipedia.org/w/index.php?title=Singular_they 的 oldid=918961982。2019 年 10 月 2 日接入。
29.Krause M,Schiö berg D,Smeddinck JD。Mooqita:用一种新颖的工作-学习模式赋予隐藏的才能。in:2018 CHI 计算系统中人的因素会议扩展摘要。CHI EA '18。美国纽约州纽约市:ACM2018 年:CS14:1–CS14:10。多伊:10.1145/317035363637
30.Avesani P,McPherson B,Hayashi S,等,《开放扩散数据衍生产品,通过衍生产品的集成发布和可再生开放云服务实现大脑数据升级》。 Sci 数据。2019;6(1):1–13.doi:10.1038/41597–019–0073-y
31.《人类计算的美国研究路线图》。 ArXiv150507096 Cs 。2015.doi:10.13140/RG
32.小 G,奇尔顿 LB,高盛 M,米勒 RC。TurKit:机械土耳其人上的人类计算算法。在第 23 届 ACM 年度用户界面软件和技术研讨会会议录。10 年的尤斯特。美国纽约州纽约市:ACM2010:57–66.土井指数:10.1145/186658686867
33.Fritz S,See L,Carlson T,等,《公民科学与联合国可持续发展目标》。 Nat 维持。2019;2(10):922–930.doi:10.1038/s 41893–019–0390–3
我们如何衡量忠诚度?调查发展介绍
原文:https://towardsdatascience.com/how-do-we-measure-loyalty-an-introduction-to-survey-development-a08b6e30916c?source=collection_archive---------21-----------------------
https://pixabay.com/photos/measuring-tape-measurement-tools-926716/
试图“衡量忠诚度”听起来太疯狂了,只有德怀特·施鲁特才会这么说,但这是营销研究人员一直在做的事情。在本帖中,我们将介绍探索自我报告调查结果的基础知识,以发现哪些“潜在”因素可能反映在调查项目中。
http://www.elitecolumn.com/wp-content/uploads/2018/03/Dwight-Schrute-Quotes-3.jpg
这是心理学、市场营销和组织行为学等社会科学领域的常用技术,在这些领域,兴趣的概念可能无法直接测量。
心理测验学
通常这种类型的研究是在专有的社会科学工具中进行的,如 SPSS 或 MPlus,但我们将使用R
进行分析。首先,我们将安装所有必需的包并加载两个数据框:brand_loyalty
,它包含调查结果,以及brand_loyalty_items
,它告诉我们关于调查中每个项目的更多信息。
# Download survey responsesbrand_loyalty <- read.csv("[https://cwru.box.com/shared/static/naelh1otw6dlsavj8jwnfmr021680xgk.csv](https://cwru.box.com/shared/static/naelh1otw6dlsavj8jwnfmr021680xgk.csv)")# Item description and proposed dimensionsbrand_loyalty_items <- read.csv("[https://cwru.box.com/shared/static/0qvuvuu47hmq75mi0ljl8qo7p29hs472.csv](https://cwru.box.com/shared/static/0qvuvuu47hmq75mi0ljl8qo7p29hs472.csv)",
stringsAsFactors = FALSE)
对调查的剖析
在我们开始分析数据之前,最好从受访者的角度来看调查。这里我们看到了与品牌忠诚度概念相关的十个“项目”。受访者用 1 到 5 分表示他们对每个项目的认同程度。这个评级系统被称为李克特量表,以其开发者,社会科学家伦西斯·利克特命名。
让我们通过探索性数据分析(EDA)来了解我们的回答,然后我们可以跳到如何使用它们来衡量忠诚度。
调查 EDA
我们假设我们的数据收集一切顺利——我们都知道这永远不会发生!没有丢失的值,没有需要重新编码的项目,什么都没有。实际上,在继续下面的步骤之前,您可能希望检查这些内容。
响应频率
我们的每一项产品都有一至五分的等级。将每个项目评为 1 的受访者比例是多少?A 3?通过psych
中的response.frequencies()
函数,我们可以看到每个项目响应的总体分布。我们将对输出进行舍入,并以百分比格式显示:
> round(response.frequencies(brand_loyalty),4) * 100
1 2 3 4 5 miss
honest 1.00 10.00 42.00 36.00 11.00 0
safe 0.67 9.67 37.00 45.00 7.67 0
depend 0.67 8.00 34.00 47.67 9.67 0
believe 0.33 6.33 43.33 43.00 7.00 0
social_media 2.33 21.00 57.33 18.00 1.33 0
say_positive 0.33 8.33 49.67 38.00 3.67 0
recommend 3.67 22.67 45.67 24.67 3.33 0
success 1.33 15.33 52.00 27.33 4.00 0
interested 2.00 6.67 35.33 47.33 8.67 0
compliment 2.00 14.00 48.67 30.67 4.67 0
在这里,我们可以看到大多数项目的回答都集中在 3 到 4 的范围内。没有太多 1 和 5 的“极端”响应。我们还可以在这里确认没有丢失值。
让我们继续用可视化来分析响应频率。我们将使用likert
包来绘制每个项目的响应频率。likert
要求项目被结构化为因子,所以让我们使用dplyr
中的mutate_if()
来实现。
让我们用brand_loyalty_items
的description
列来标记这个图。通过这种方式,我们实际上可以看到回答者实际回应的提示。
library(likert)
library(dplyr)# Select likert items, convert to factorsbrand_loyalty_f <- brand_loyalty %>%
mutate_if(is.integer, as.factor)# Rename based on full item namesnames(brand_loyalty_f) <- c(brand_loyalty_items$description)# plot likert itemsresult <- likert(brand_loyalty_f)
plot(result, group.order = names(brand_loyalty_f))
可视化有助于理解每个项目的总体分散性。
项目相关性
我们对每个项目本身的分数不感兴趣,相反,我们想用这些项目来衡量潜在的变量——忠诚度。项目之间存在什么样的关系,可能表明它们在测量一些共同点,以告诉我们关于忠诚度的信息?
为了对这些关系有所了解,让我们用corrplot
绘制一个相关热图。
library(corrplot)
corrplot(cor(brand_loyalty))
我们看到有些项目比其他项目更相关:具体来说,前四个、中间三个和最后三个项目似乎代表不同的项目“组”。
让我们再看一下调查。
显而易见,这些项目会有更高的相关性:前四个与品牌信任有关,中间三个与感知价值有关,最后三个与认同有关。
从相关性到因素
虽然 EDA 是一个有益的开端,但我们最终还是想测试我们是否有一个可靠有效的工具来衡量忠诚度。我们的下一步是通过探索性因子分析进行降维。是的,又一个“探索性”的步骤!
这一次,我们想探究潜在变量的多少个维度可能会反映在数据中。我们将这些项目与这些维度相关联,而不是将这些项目彼此相关联。
通过 EDA,我们有一种很好的感觉,这种仪器反映了三维,但我们可以通过另一种方法得到估计:并行分析。这将数据集与随机生成的数据集进行比较,并比较结果以提示数据中存在哪些重要维度。
这可以通过psych
的fa.parallel()
功能实现:
fa.parallel(brand_loyalty)
平行分析
我们稍后将更正式地解释这个所谓的“scree 情节”。现在,记住“肘规则”来估计建议的因素数量。“碎石”地块因山坡上松散的岩石而得名。建议的因子数量可以在曲线“倾斜”之前的 X 轴位置找到。在我们的图中,“下降”从因子 4 开始,所以因子的建议数量是 3。
如果还没有“点击”,不要担心——fa.parallel()
的输出包含了以下信息:
> fa.parallel(brand_loyalty)Parallel analysis suggests that the number of factors = 3 and the number of components = 3
您可能会注意到,该图包括主成分和因子分析的输出。虽然这两种都是降维技术,但每种都有不同的目标。
主成分分析旨在用尽可能少的变量解释数据中尽可能多的总方差,这是一种优化规则,通过将索引变量创建为其他变量的组合来解决。
相比之下,因子分析通过潜在变量与一组显式变量之间的关系来衡量潜在变量。因素分析的目的是解释项目和维度之间的相关性。每个变量被定义为维度的线性组合。
这两种技术都不优于另一种——这完全取决于上下文。在这种情况下,因为我们的目标是测量一个潜在变量,所以因子分析是比主成分分析更好的选择。
探索性因素分析:建模与诊断
从 EDA 和并行分析中,我们倾向于在我们的数据中反映三维。让我们通过一个完整的探索性因素分析(EFA)来建立这个模型。在这一点上,我们根据经验寻找数据中的关系,通过各种诊断评估看起来合适的维数。
我们将从psych
开始通过fa()
函数进行 EFA,将nfactors
设置为3
。让我们把全民教育的结果分配给brand_loyalty_efa
。这将有助于访问结果中的元素——结果中有 50 多个元素!
注意:fa()
功能需要安装GPArotation
。
> brand_loyalty_efa <- fa(brand_loyalty, nfactors = 3)> names(brand_loyalty_efa)
[1] "residual" "dof" "chi" "nh" "rms" "EPVAL" "crms"
[8] "EBIC" "ESABIC" "fit" "fit.off" "sd" "factors" "complexity"
[15] "n.obs" "objective" "criteria" "STATISTIC" "PVAL" "Call" "null.model"
[22] "null.dof" "null.chisq" "TLI" "RMSEA" "BIC" "SABIC" "r.scores"
[29] "R2" "valid" "score.cor" "weights" "rotation" "communality" "communalities"
[36] "uniquenesses" "values" "e.values" "loadings" "model" "fm" "rot.mat"
[43] "Phi" "Structure" "method" "scores" "R2.scores" "r" "np.obs"
[50] "fn" "Vaccounted"
每一个输出都讲述了一个关于我们全民教育的故事,但我们不能看全部,对吗?考虑这三个诊断,你的全民教育诊断的“悬崖笔记”——按重要性排序:因子负荷、特征值和因子得分相关性。
因素负荷
这实质上是每个项目与潜在变量的维度的相关性。虽然没有一个准则说明什么是强因子载荷,但我们将使用大于|.5|的基本经验法则。项目可以加载到多个因子,但任何“次要”加载都应小于|.3|。
使用$loadings
可以从我们的全民教育输出中获取因素负载:
> brand_loyalty_efa$loadings
Loadings:
MR1 MR2 MR3
honest 0.692
safe 0.755
depend 0.549 0.114
believe 0.594 0.137
social_media 0.217 0.475
say_positive 0.635
recommend 0.733
success 0.774
interested 0.776
compliment 0.677 0.184
MR1 MR2 MR3
SS loadings 1.756 1.705 1.226
Proportion Var 0.176 0.170 0.123
Cumulative Var 0.176 0.346 0.469
那么,这是怎么回事呢?我们有一些二次装载,但都在 0.3 以下。看起来除了social_media
外,所有的主载荷都超过了. 5。在 0.475。
我们应该放弃吗?记住,这些不是一成不变的规则。如果我们相信这个项目提供了关于潜在变量的独特信息,我们应该保留它。然而,如果我们发现它是无用或多余的项目,我们可以以节俭的名义放弃它。我们可以在调查开发的后期更正式地测试social_media
的效用。
特征值
接下来,我们将考虑“凯泽-古特曼法则”来确定正确的因子数。这是确定 EFA 中因子数量的传统方法:我们应该将因子数量设置为等于大于 1 的特征值的数量。这符合逻辑,因为超过 1 的特征值表示方差的“一个变量的价值”。
可以在对象e.values
中找到特征值:
> brand_loyalty_efa$e.values
[1] 3.6206684 1.5647759 1.2282820 0.6919068 0.6401634 0.5247305 0.5144098 0.4666997 0.4019293 0.3464342
特征值表明了三个因素——但是你已经从碎石图中知道了!
碎石图,重访
让我们再来看看碎石图。通过将原始数据帧brand_loyalty
传递给scree()
函数,我们可以产生一个不那么“繁忙”的版本:
scree(brand_loyalty)
这和之前的图是一样的,但是仔细看看 Y 轴:它们是特征值!不仅如此,穿过 Y 轴的实线被设置为 1。所以,我们只是精确地估计了我们在 scree 图中的视觉效果。
因素得分相关性
在全民教育中,因子得分是以数值的形式产生的,这些数值表明每个回答者在一个因子的每个维度上的相对地位。我们可以通过调用输出的scores
对象上的head()
函数来查看这些分数的预览:
> head(brand_loyalty_efa$scores)MR1 MR2 MR3[1,] -0.2352680 -0.05711601 -1.5141629[2,] -0.2350122 -0.45791785 0.6840743[3,] -0.7019507 -0.83111162 -0.3847279[4,] 0.7754942 0.95429483 0.9438122[5,] 0.8629493 0.95651211 0.7357261[6,] -1.1570106 0.93738262 -1.3978041
为什么要看我们的因子得分相关性?记住,每个维度都应该衡量我们潜在变量的一个相关但不同的方面。如果两个因素过于高度相关(通常超过 0 . 6),它们可能测量的是同一事物,在这种情况下,我们会以简约的名义减少因素的数量。
因素得分相关性存储在score.cor
对象中:
> brand_loyalty_efa$score.cor
[,1] [,2] [,3]
[1,] 1.0000000 0.3640649 0.4102557
[2,] 0.3640649 1.0000000 0.2547783
[3,] 0.4102557 0.2547783 1.0000000
概述:全民教育诊断
从所有的诊断来看,我们似乎在三维空间的正确轨道上。因子得分相关性不太高,我们符合特征值的 Kaiser-Guttman 规则,所有主要因子载荷都大于|.5|…嗯,除了social_media
,我们现在保留它。
如果我们的调查不符合这些标准,我们有两个一般选项:
- 丢弃装载不良的物品,以及
- 改变因子的数量。
幸运的是,我们的全民教育到位了,所以我们可以继续下去。
模型图:每张图片都讲述了一个故事
似乎我们的十个项目中的每一个都反映了该结构的三个维度之一,“品牌忠诚度”为了达到这一点,我们已经打印了许多数字,所以让我们使用psych
中的fa.diagram()
函数,用我们的全民教育模型的有用可视化来结束我们的分析:
在这里,我们看到了清单变量和它们加载到的维度之间的关系。当我们测量物品如何“反映”尺寸时,箭头从尺寸指向尺寸到物品。这三个维度也是相互关联的——因子 2 和因子 3 之间的相关性非常低,以至于没有在图表中显示出来。
下一步是什么?
那么,我们已经满意地测量了忠诚度了吗?
不完全是。
探索性因素分析就是:探索性的。接下来,我们想用—你猜对了!— 验证性因子分析。这将是一个正式的假设检验,以建立我们理论上定义的模型和数据中存在的东西之间的关系。
我们还想测量我们的工具的可靠性和有效性,知道它可以持续测量我们声称要测量的东西。
我计划在以后的数据科学文章中讨论这些主题。
在那之前,用下面的完整代码练习你的 EFA 技能。
我们如何在 PUBG 生存?
原文:https://towardsdatascience.com/how-do-we-survive-in-pubg-903e261b260?source=collection_archive---------19-----------------------
layer Unknown's Battle Grounds,也称为 PUBG,是一款流行的视频游戏,每月有数百万活跃用户。在每场游戏中,100 名玩家被丢在一个岛上的不同地方。他们必须找到供应品和武器,并与其他玩家战斗,以便生存到最后一个离开。玩家可以选择与最多 3 名其他玩家组队或单独游戏。在游戏过程中,随着游戏区不断缩小和移动,他们被迫四处移动。我对学习这些游戏玩家在模拟生存世界中的行为很感兴趣,以了解其背后的心理。人们更喜欢组队还是单打独斗?他们更有可能战斗还是躲藏?什么样的策略可以帮助他们生存到最后?
这个项目也是我第一次尝试机器学习中的特征工程过程,包括错误分析、特征空间评估、集成和调整过程。我使用 Weka 和 Lightside 来实现我的实验。这篇文章不会教你任何代码,但它是机器学习过程的一个综合案例,包括数据清理、数据集分割、交叉验证和功能设计。
数据收集
在 Kaggle 上找到的数据集包含超过 445 万个实例和 28 个特征(参见参考资料中的数据源)。有代表每个游戏比赛 Id、代表每个组的组 Id(从 1 到 4 变化)和代表每个玩家的玩家 Id。数据被格式化为每个实例作为每个玩家的赛后统计数据。特征包括在游戏中的表现,比如复活团体成员的次数、击杀次数、行走距离等。(见附录)。还有外部排名的功能,表明玩家在游戏之外的表现。在 0 到 1 的范围内(1 是第一名,而 0 是最后一名),每场比赛的获胜位置百分比被重新构造为最终预测类别。
我选择了游戏模式“小队”,玩家可以组成 1-4 人一组对抗其他组。原因是数据集中的许多要素都与群体绩效有关。我将每个实例转换为代表每个组,并取平均值和一些特征的标准偏差。我在每场比赛中随机保留 2 组,以比较哪组排名更高。在训练集和测试集中,我将获胜位置百分比转换为“获胜者预测”,该值显示排名较高的组,以便使其成为二元预测。我还添加了一些有意义的特征来进行比较,并以它们之间的差异作为值,如团队规模差异,杀死等级差异,步行距离差异,获得的武器数量差异。关于数据清洗,我去除了同一个游戏重复玩家、负面排名、大于 4 的小组规模等不合理的数据。我按照随机顺序分割数据集,分割比例如下:交叉验证集 70%,开发集 20%,测试集 10%。我想预测的是在每场游戏中随机抽取的两个组中,哪一组会是赢家,所以分类是基于赢家预测的。在数据清理过程之后,有 6576 个实例和 65 个特征。获胜者预测中的“第二组”和“第一组”在每个分割数据集中都占据大约 50%。
数据探索
我首先对开发集进行了探索性的数据分析,以获得对数据的自然理解。以下是一些有趣的发现。
人们更喜欢独奏还是合奏?
组 2 和组 1 的组大小分布非常相似。似乎大多数人更喜欢独自或只和一个伙伴玩游戏。
当我们积极地比赛时,我们更有可能赢吗?
由第二组的杀死等级减去第一组的杀死等级计算的杀死位置差异的分布似乎是正态分布。因此,在 Y 轴为正的图表右侧,第二组排名较低,而在 Y 轴为负的左侧,第二组排名较高。如下图所示,红色部分是第二组获胜者,蓝色部分是第一组获胜者。这张图表明,在大多数情况下,当一个团队的击杀等级高时,它更有可能获胜。
移动和隐藏哪个是更好的游戏策略?
通过第二组的步行距离减去第一组的步行距离计算的步行距离差的分布也呈现正态分布。因此,在 Y 轴为正的图的右侧,第二组比第一组走得多,而在 Y 轴为负的左侧,第二组比第一组走得少。如下图所示,红色部分是第二组获胜者,蓝色部分是第一组获胜者。这张图表说明,在大多数情况下,当一个团队行进的距离更长时,它更有可能获胜。
误差分析
我首先选择了逻辑回归,因为所有要素都是数字数据,而预测是二进制的,基于权重的模型对此很有用。对于 65 个特征,基于树的模型将是耗时的。我的基准表现如下,准确率 0.8905,Kappa 0.7809。
1。水平差异分析
我首先检查了预测游戏获胜者是第二组的实例,而实际上是第一组。我将水平差异从最大到最小排序,并查看具有相对较大特征权重的特征。我发现 walkDistanceDifference 横向差异大,特征权重相对重要。walkDistanceDifference 的计算方法是第二组的行走距离减去第一组在同一场比赛中的行走距离,因此负数意味着第二组在比赛中比第一组走得少,而正数意味着第二组走得多。这意味着走得多的那一组更有可能获胜(这在游戏设置中是有意义的,因为这可能意味着他们存活得更久)。然而,也可能有例外,一组玩得更积极,出去得更多,因此输得更快,而另一组则倾向于安全,大部分时间躲在一个地方,存活更长时间。
为了进一步解决这个问题,我还下载了 csv 文件中的预测标签,查看预测第二组获胜而第一组实际获胜的实例,然后将 walk distance 差异从最大到最小排序,以便我可以查看第二组走得更长但输掉游戏时的异常情况。
我发现的一件事是,有时第二组比第一组走得多,但第一组开车的距离更长(在游戏中他们可以选择骑一辆车,如果他们找到一辆车的话)。正如突出显示的例子所示,有许多组走的不如另一组多,但开车比另一组多得多。因此,仅测量步行距离或乘车距离可能无法很好地正确显示总行驶距离。此外,rideDistance 具有第二大水平差异。因此,这两个特点似乎是有问题的,需要进一步的代表性。
因此,我通过将步行距离和乘车距离组合作为第二组、第一组和两组之间的差异的总行驶距离,提出了 3 个新特征。
我在开发集中测试了新的特性空间,并得到了一个微不足道的改进。虽然不重要,但预测第二组的实例数量实际上减少了 5 个,并被校正为第一组。
然而,当我将它应用于交叉验证集时,它实际上降低了性能。最可能的原因是开发集中的改进是过度拟合的,它没有推广到新的数据集。
2。垂直差异分析
然后,我通过检查垂直绝对差进行了另一项误差分析。由于新的开发集在实例中引入了更多的错误,预测第一组,但实际上是第二组,我的目标是找出这两组实例看起来如何彼此相似。我发现 1-KillPlace 特征具有较小的垂直差异和较大的特征权重。这是一个只有第一组的基于杀戮的排名。第一组获胜时的平均排名在 34 位左右,失败时在 43 位左右。这里的例外是,有时第一组输了,即使它的排名高达 34。正如我之前提到的,有时候一个团队打得更有侵略性,杀了更多的人,所以他们的杀戮排名很高,但他们也有更高的风险输掉比赛。
这里给我的一个启发是,逻辑回归擅长全局分析,但它可能会因一些极端的例外而有所偏差。我需要一种算法,它可以忽略极端的异常,一次只查看较小的数据集。决策树可能是一个很好的方法,但由于我有 68 个数字数据的特征,决策树可能需要大量的时间来建立模型。如果我能结合逻辑回归和决策树的优势呢?逻辑模型树(LMT) 将是一个很好的选择,因为它可以捕捉非线性模式和更高的方差。所以我尝试使用 LMT 并比较这两种算法的结果,我在开发集上有了显著的改进。
我在交叉验证集上应用了该模型,并取得了显著的改进。
3。合奏
由于 boosting 将特别检查以前的模型在迭代过程中分类错误的实例,我认为这是一个提高我的例子的准确性的好方法。所以我在开发集上用 LMT 的分类器尝试 AdaBoost,然而,性能降低了。
由于我的特征空间相对复杂,我的下一步探索是减少可能不是好指标的特征。我尝试了 AttributeSelectedClassiflier,用主成分作为赋值器。使用主成分的原因是为了减少特征空间的维数,同时保留尽可能多的信息。最后,性能也降低了。
我还尝试了 CfsSubsetEvaluator,因为我拥有的很多特性都是相互关联的,比如 killPlace 和 KillPoints。这个赋值器将帮助我有选择地保留与类相关的有用特性,但不重复其他特性。事实证明,性能也没有比我的基线更好。
我会尝试的另一个好的赋值器是 SVMAttributeEvaluator,因为它是一个反向消除方法,对我的大特征空间有好处,但是,Weka 和 Lightside 不提供这个选项。
4。特征空间评估
除了我之前尝试的包装器方法之外,我还想探索使用过滤器方法是否可以提高性能,因为它允许我独立地选择算法之外的特性。
我使用了 AttributeSelectedEvaluator 和主成分作为评估器。三种不同的设置是原始特征空间(68 个特征)、40 个特征和 20 个特征。我做了一个实验来测试三个特征空间。但是这两个新的特征空间实际上降低了性能。我还测试了其他评估者,得到了相同的结果,所以我决定保持特征空间不变。
调谐过程
我想调整 LMT 算法的两个参数。对于 minNumberInstances,缺省值是 15,我想测试 50。我想知道,通过添加更多节点被视为分裂的实例,是否会提高每个节点的准确性,从而提高整体性能。对于 boostingIterations,默认值为-1,表示没有迭代。我想测试 3,看看它是否提高了分类精度。
因此,我测试的四个设置如下:(1)节点被认为分裂的最小实例数为 15,提升迭代次数为-1(意味着不迭代),(2)实例数 50,提升迭代次数-1,(3)实例数 15,提升迭代次数 3,(4)实例数 50,提升迭代次数 3。请注意,设置(1)是默认设置。我用准确率来衡量性能。
第一阶段:
(1)90.81(2)90.81(3)91.05(4)91.05
设置(3)是最佳设置,因为它具有最高的准确率,并且比(4)简单。
第三阶段:
根据阶段 1,设置(3)是最佳设置。在第三阶段,我也选择了设置(3)作为每个折叠的最佳设置。在这种情况下,我没有运行任何重要的测试,也没有证据表明优化是值得的。
似乎每个节点上实例的最小权重对模型性能没有太大影响。但是,增加迭代次数可能有助于提高多次尝试的准确性。
在一个全新的数据集上,如果我使用设置(3),我估计性能大约为 91.66,因为它是 5 倍测试性能的平均值。
最终评估
最后,我使用 LMT 在交叉验证集上训练了一个模型,设置(3)实例数为 15,增加迭代次数为 3。在添加了来自错误分析的 3 个新特征之后,我保留了特征空间。我从最终测试集中获得的最终性能是 0.9179 的准确率,这接近于我在调优过程中的估计,Kappa 是 0.8359。
Tree View
反射
通过观察该树,该模型从步行差开始,并在一些点上在骑行距离和旅行距离差处分裂,这证明了我在误差分析期间新添加的特征的重要性。尽管一些节点在仅与其中一个组相关的特征处分裂,例如组 2-killStreaks,但是许多其他节点使用两个组的差异,甚至赢点的标准偏差。这也显示了保留原始特征以及添加组合特征的有用性。根据主树选取的特征,要赢得游戏,移动距离、杀戮能力和群体成员生存能力的方差是重要因素。一般来说,我们玩得越有侵略性,也就是说频繁移动和杀死更多的人,我们就越有可能赢。
在这个项目中,我经历了误差分析,包括水平差异分析,垂直差异分析,集成算法和特征空间评估,以及调整过程。最有帮助的步骤是观察特征空间并手动执行特征工程。选择适合数据的正确算法也很重要。在我的例子中,我结合了回归模型和树模型的优点,回归模型擅长将线性模型拟合到数字数据中,树模型提供了更多的方差并补偿了非线性的极限。我能够在交叉验证集上显著提高模型性能,并在最终测试集上达到 91.79%的分类准确率。
我的项目分析有一些限制。首先,我只测试了一种游戏模式下的数据,结果可能不适用于现实世界中的所有游戏模式。第二,我没有预测排名,而是选择将项目范围转向二进制分类。我从一场比赛中随机挑选了两组,并试图预测谁会赢得比赛。在这种情况下,通过移除其他组的表现,我移除了一些涉及的方差和因素,这些方差和因素也可能影响对现实世界中游戏结果的预测。
总之,我能够达到我的目标,预测 PUBG 游戏的赢家,并找出一些可以影响游戏结果的重要行为。为了进一步评估,可以引入来自其他游戏模式的数据,并且可以测试其他类型的预测。
如何在 Python 中检查你的回归模型的质量?
原文:https://towardsdatascience.com/how-do-you-check-the-quality-of-your-regression-model-in-python-fa61759ff685?source=collection_archive---------2-----------------------
线性回归在统计学习领域根深蒂固,因此必须检查模型的“拟合优度”。本文向您展示了在 Python 生态系统中完成这项任务的基本步骤。
为什么它很重要(为什么你可能会错过它)
尽管对最新深度神经网络架构的复杂性和 xgboost 在 Kaggle 竞赛上的惊人能力有很多谈论和吹毛求疵,但对于行业的很大一部分来说,使用数据驱动分析和机器学习(ML)技术,回归仍然是他们日常使用的首选。
参见 2018-19 年的 KDnuggets 民意调查结果(作者马修·梅奥)。
[## 2018 年、2019 年使用的顶级数据科学和机器学习方法
在最新的 KDnuggets 民意调查中,读者被问到:你对哪些数据科学/机器学习方法和算法…
www.kdnuggets.com](https://www.kdnuggets.com/2019/04/top-data-science-machine-learning-methods-2018-2019.html)
回归技术有多种形式——线性、非线性、泊松、基于树的——但核心思想几乎保持一致,可以应用于金融、医疗保健、服务业、制造业、农业等领域的各种预测分析问题。
线性回归是一项基本技术,它深深植根于久经考验的统计学习和推理理论,并为现代数据科学管道中使用的所有基于回归的算法提供支持。
然而,线性回归模型的成功还取决于一些基本假设关于它试图建模的基础数据的性质。要简单直观地理解这些假设,
[## 回归模型假设
当我们使用线性回归来模拟反应和预测因子之间的关系时,我们做了一些假设…
www.jmp.com](https://www.jmp.com/en_us/statistics-knowledge-portal/what-is-regression/simple-linear-regression-assumptions.html)
因此,通过验证这些假设是否“合理地”得到满足来检查您的线性回归模型的质量是极其重要的(通常使用可视分析方法来检查假设,这取决于解释)。
问题在于,检查模型质量通常是数据科学任务流中优先级较低的一个方面,其他优先级占主导地位,如预测、缩放、部署和模型调整。
这个论断听起来是不是太大胆了?有一个简单的测试。
在一个行业标准的基于 Python 的数据科学堆栈中,你有多少次使用 Pandas、NumPy 、 Scikit-learn ,甚至 PostgreSQL 进行数据获取、争论、可视化,并最终构建和调整你的 ML 模型?我想,很多次了吧?
现在,你已经多少次使用 statsmodels 库通过运行拟合优度测试来检查模型了?
在基于 Python 的数据科学学习课程中,这样做是很常见的,
“是不是少了点什么”这个问题的答案是肯定的!
通常,有很多关于正则化、偏差-方差权衡或可扩展性(学习和复杂性曲线)图的讨论。但是,围绕以下情节和列表有足够的讨论吗?
- 残差与预测变量图
- 拟合与残差图
- 归一化残差的直方图
- 归一化残差的 Q-Q 图
- 残差的夏皮罗-维尔克正态性检验
- 残差的库克距离图
- 预测特征的方差膨胀因子(VIF)
很明显,对于机器学习管道的这一部分,你必须戴上统计学家的帽子,而不仅仅是数据挖掘专家。
Scikit-learn 的问题
可以有把握地假设,大多数由统计学家转变为数据科学家的 T21 定期对他们的回归模型进行拟合优度测试。
但是,对于数据驱动的建模,许多年轻的数据科学家和分析师严重依赖于像 Scikit-learn 这样的以 ML 为中心的包,尽管这些包是一个令人敬畏的库,并且实际上是机器学习和预测任务的银弹,但是它们不支持基于标准统计测试的简单快速的模型质量评估。
因此,除了使用像 Scikit-learn 这样的以 ML 为中心的库之外,良好的数据科学管道还必须包括一些标准化的代码集,以使用统计测试来评估模型的质量。
在本文中,我们展示了这样一个多元线性回归问题的标准评估集。我们将使用statsmodels
库进行回归建模和统计测试。
线性回归假设和关键视觉测试的简要概述
假设
线性回归模型需要测试的四个关键假设是:
- 线性:因变量的期望值是每个独立变量的线性函数,保持其他变量不变(注意,这并不限制您使用独立变量的非线性变换,即您仍然可以建模 f(x) = ax + bx + c ,使用 x 和 x 作为预测变量。
- 独立性:误差(拟合模型的残差)相互独立。
- 同方差 (恒定方差):误差的方差相对于预测变量或响应是恒定的。
- 正态:误差由正态分布产生(均值和方差未知,可从数据中估计)。注意,与上面的三个不同,这不是执行线性回归的必要条件。然而,如果不满足这一假设,就不能很容易地计算出所谓的“置信度”或“预测”区间,因为无法使用与高斯分布相对应的众所周知的解析表达式。
对于多元线性回归,从统计推断的角度判断多重共线性也很关键。这种假设假设预测变量之间的线性相关性最小或没有线性相关性。
异常值也可能是一个影响模型质量的问题,因为它对估计的模型参数具有不成比例的影响。
这是一个视觉回顾,
有哪些情节可以查?
因此,误差项非常重要。
但是有一个坏消息。不管我们有多少数据,我们永远无法知道真正的错误。我们只能对产生数据的分布进行估计和推断。
因此,真实误差的代理是残差,残差就是观测值和拟合值之差。
底线-我们需要绘制残差图,检查它们的随机性质、方差和分布,以评估模型质量。这是线性模型拟合优度估计所需的视觉分析。
除此之外,多重共线性可以通过相关矩阵和热图进行检查,数据中的异常值(残差)可以通过所谓的库克距离图进行检查。
回归模型质量评估示例
这个例子的完整代码报告可以在作者的 Github 中找到。
我们正在使用来自 UCI ML 门户网站的混凝土抗压强度预测问题。混凝土抗压强度是龄期和成分的高度复杂的函数。我们能从这些参数的测量值预测强度吗?
检查线性的变量散点图
我们可以简单地检查散点图,以便直观地检查线性假设。
用于检查多重共线性的成对散点图和相关热图
我们可以使用 seaborn 库中的 pairplot 函数来绘制所有组合的成对散点图。
此外,如果数据加载到 Pandas 中,我们可以很容易地计算关联矩阵,并将其传递到 statsmodels 的特殊绘图功能,以热图的形式显示关联。
使用 statsmodel.ols()函数进行模型拟合
主模型拟合是使用 statsmodels 完成的。OLS 方法。这是一个令人惊叹的线性模型拟合实用程序,感觉非常像 R 中强大的“lm”函数。最棒的是,它接受 R 风格的公式来构建完整或部分模型(即涉及所有或部分预测变量)。
你可能会问,在大数据时代,为什么要创建一个局部模型而不把所有数据都放进去呢?这是因为数据中可能存在混杂或隐藏的偏差,只能通过 控制某些因素 来解决。
在任何情况下,通过该模型拟合的模型摘要已经提供了关于该模型的丰富的统计信息,例如对应于所有预测变量的 t 统计量和 p 值、R 平方和调整的 R 平方、AIC 和 BIC 等。
残差与预测变量图
接下来,我们可以绘制残差与每个预测变量的关系图,以寻找独立性假设。如果残差围绕零个 x 轴均匀随机分布,并且不形成特定的集群,则假设成立。在这个特殊的问题中,我们观察到一些集群。
拟合与残差图,用于检查同质性
当我们绘制拟合响应值(根据模型)与残差的关系时,我们清楚地看到残差的方差随着响应变量幅度的增加而增加。因此,该问题不考虑同质性,可能需要某种变量变换来提高模型质量。
归一化残差的直方图和 Q-Q 图
为了检查数据生成过程的正态性假设,我们可以简单地绘制归一化残差的直方图和 Q-Q 图。
此外,我们可以对残差进行夏皮罗-维尔克检验来检查正态性。
使用库克距离图的异常值检测
库克距离本质上衡量的是删除一个给定观察的效果。需要仔细检查 Cook 距离较大的点是否为潜在的异常值。我们可以使用来自 statsmodels 的特殊异常值影响类来绘制厨师的距离。
方差影响因素
此数据集的 OLS 模型摘要显示了多重共线性的警告。但是如何检查是哪些因素造成的呢?
我们可以计算每个预测变量的方差影响因子。它是有多个项的模型的方差除以只有一个项的模型的方差的比率。同样,我们利用了 statsmodels 中的特殊异常值影响类。
其他残留诊断
Statsmodels 有各种各样的其他诊断测试来检查模型质量。你可以看看这几页。
- 剩余诊断测试
- 拟合优度测试
总结和思考
在本文中,我们介绍了如何在线性回归中添加用于模型质量评估的基本可视化分析——各种残差图、正态性测试和多重共线性检查。
人们甚至可以考虑创建一个简单的函数套件,能够接受 scikit-learn 类型的估计器并生成这些图,以便数据科学家快速检查模型质量。
目前,尽管 scikit-learn 没有用于模型质量评估的详细统计测试或绘图功能,但 Yellowbrick 是一个有前途的 Python 库,它可以在 scikit-learn 对象上添加直观的可视化功能。我们希望在不久的将来,统计测试可以直接添加到 scikit-learn ML 估计量中。
喜欢这篇文章吗?成为 中等成员 继续 无限制学习 。如果你使用下面的链接,我会收到你的一部分会员费, 而不增加你的额外费用 。
[## 通过我的推荐链接加入 Medium—Tirthajyoti Sarkar
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@tirthajyoti/membership)
你怎么知道你有足够的训练数据?
原文:https://towardsdatascience.com/how-do-you-know-you-have-enough-training-data-ad9b1fd679ee?source=collection_archive---------3-----------------------
©pathdoc/AdobeStock
最近有一些关于数据是否是新石油的争论。不管是哪种情况,为我们的机器学习工作获取训练数据可能是昂贵的(在工时、许可费、设备运行时间等方面)。).因此,机器学习项目中的一个关键问题是确定需要多少训练数据来实现特定的性能目标(即,分类器准确性)。在这篇文章中,我们将对从回归分析到深度学习的领域中关于训练数据大小的经验和研究文献结果进行快速而广泛的回顾。训练数据大小问题在文献中也被称为样本复杂度。具体来说,我们将:
提出回归和计算机视觉任务的经验训练数据大小限制。
给出统计检验的期望功效,讨论如何确定样本量。这是一个统计题目;但是,考虑到它与机器学习中确定训练数据大小的密切关系,将其包括在此讨论中是合适的。
呈现统计理论学习的结果,关于什么控制训练数据的大小。
提供以下问题的答案:随着训练数据的增长,性能会继续提高吗?深度学习的情况下会发生什么?
我们将提出一种方法来确定分类中的训练数据大小。
最后,我们将提供一个问题的答案:训练数据的增长是处理不平衡数据的最好方法吗?
训练数据量的经验界限
让我们首先根据我们使用的模型类型,讨论一些广泛使用的经验方法来确定训练数据的大小:
回归分析:根据 1/10 的经验法则,我们需要每个预测因子 10 个病例[3]。在[4]中讨论了不同的版本,例如 1/20,以解决回归系数收缩。一个令人兴奋的,最近开发的,二元逻辑回归的变化是在[5]中提出的。具体来说,作者通过考虑预测变量的数量、总样本量和正样本/总样本量的分数来估计训练数据量。
计算机视觉:对于使用深度学习的图像分类,经验法则是每类 1000 张图像,如果使用预先训练的模型,这个数字可以显著下降[6]。
假设检验样本量的确定
假设检验是数据科学家可以用来检验人群之间的差异、确定新药效果等的工具之一。在这种情况下,考虑到检验的功效,通常需要确定样本量。
让我们考虑这个例子:一家科技巨头搬到了 A 城,那里的房价大幅上涨。一名记者想知道公寓的新均价是多少。给定 60K 处的公寓价格的标准差和 10K 可接受的误差幅度,有 95%的置信度时,应该平均多少公寓销售价格?对应的公式如下所示;n 是他将需要的样本大小,1.96 是来自标准正态分布的数字,对应于 95%的置信度
Estimation of sample size
根据上述等式,记者需要考虑大约 138 套公寓的价格。
上述公式根据具体的测试而变化,但它将始终包括置信区间、可接受的误差幅度和标准偏差的度量。关于这个话题的很好的讨论可以在[7]中找到。
训练数据量的统计学习理论
我们先来介绍一下著名的 Vapnik-Chevronenkis (VC)维度[8]。VC 维是模型复杂性的度量;模型越复杂,其 VC 维越高。在下一段中,我们将介绍一个根据 VC 指定训练数据大小的公式。
首先,让我们看一个经常用来显示 VC 是如何计算的例子:想象我们的分类器是一个 2-D 平面中的直线,我们有 3 个点需要分类。无论这 3 个点的正/负组合可能是什么(全部正,2 个正,1 个正,等等。),一条直线就能正确地将阳性和阴性样本分类/分开。因此,我们说线性分类器可以粉碎任何点,因此,它的 VC 维至少是 3。并且因为我们可以找到不能被线精确分开的 4 个点的例子,我们说线性分类器的 VC 精确地是 3。事实证明,训练数据大小 N 是 VC 的函数[8]:
Estimation of training data size from the VC dimension
其中 d 是失败的概率,而ε是学习误差。因此,如[9]所述,学习所需的数据量取决于模型的复杂程度。这种做法的一个副作用是众所周知的神经网络对训练数据的贪婪,因为它们非常复杂。
随着训练数据的增长,性能会继续相应提高吗?深度学习的情况下会发生什么?
Figure 1.
图 1 显示了在传统机器学习[10]算法(回归等)的情况下,机器学习算法的性能如何随着数据量的增加而变化。)而在深度学习的情况下[11]。具体来说,对于传统的机器学习算法,性能按照幂律增长,然后达到平稳状态。关于深度学习,有大量正在进行的研究,关于性能如何随着数据量的增加而扩展[12]-[16],[18]。图 1 显示了这项研究的当前共识;对于深度学习,根据幂定律,性能随着数据大小不断增加。例如,在[13]中,作者使用深度学习技术对 3 亿张图像进行分类,他们发现性能随着训练数据大小的增加而呈对数增长。
让我们在这里包括一些值得注意的,与上述相反的,在深度学习领域的结果。具体来说,在[15]中,作者将卷积网络用于 1 亿幅 Flickr 图像和说明的数据集。关于训练数据大小,他们报告说性能随着数据大小的增加而提高;然而,在 5000 万张图像之后,它就稳定下来了。在[16]中,作者发现图像分类精度随着训练数据大小而增加;然而,在某个模型依赖点之后,最初也增加的模型稳健性开始下降。
确定分类中训练数据大小的方法
这是基于众所周知的学习曲线,它通常是误差与训练数据大小的关系图。[17]和[18]是了解机器学习中学习曲线以及它们如何随着偏差或方差的增加而变化的极好参考。Python 在 scikit-learn 中提供了一个学习曲线函数[17]。
在分类中,我们通常使用稍微不同形式的学习曲线;这是分类精度与训练数据大小的关系图。确定训练数据大小的方法很简单:确定您的领域的学习曲线的确切形式,然后,只需在图上找到所需分类精度的对应点。例如,在参考文献[19]、[20]中,作者在医学领域使用学习曲线方法,并用幂律函数来表示:
Learning curve equation
其中 y 是分类精度,x 是训练集,b1,b2 对应学习率和衰减率。参数根据问题域而变化,并且它们可以使用非线性回归或加权非线性回归来估计。
训练数据的增长是处理不平衡数据的最好方法吗?
© hin255/AdobeStock
这个问题在[9]中有所论述。作者提出了一个有趣的观点;在不平衡数据的情况下,准确度不是分类器性能的最佳衡量标准。原因很直观:让我们假设负类是主导类。那么我们就可以达到很高的准确率,通过预测大部分时间是负面的。相反,他们提出精度和召回率(也称为敏感度)是衡量不平衡数据性能的最合适的方法。除了上述明显的准确性问题之外,作者声称测量精度对于不平衡域来说本质上更重要。例如,在医院的报警系统[9]中,高精度意味着当警报响起时,很有可能确实是某个病人出现了问题。
有了适当的性能度量,作者比较了包不平衡学习[21] (Python scikit-learn 库)中的不平衡校正技术与简单使用更大的训练数据集。具体来说,他们在一个包含 50,000 个样本的药物发现相关数据集上使用了带有不平衡校正技术的 K-最近邻,然后在大约 100 万个样本的原始数据集上与 K-NN 进行了比较。上述软件包中的不平衡校正技术包括欠采样、过采样和集成学习。作者将实验重复了 200 次。他们的结论简单而深刻:就测量精度和召回率而言,任何失衡纠正技术都无法与添加更多训练数据相提并论。
至此,我们已经结束了我们的快速参观。下面的参考资料可以帮助你更多地了解这个主题。感谢您的阅读!
参考文献
[1] 世界上最有价值的资源不再是石油,而是数据,https://www . economist . com/leaders/2017/05/06/The-worlds-Most-valued-Resource-Is-again-Oil-But-Data2017 年 5 月。
[2] Martinez,A. G .,不,数据不是新油,https://www.wired.com/story/no-data-is-not-the-new-oil/2019 年 2 月。
[3] Haldan,m .,需要多少训练数据?,https://medium . com/@ Malay . haldar/how-much-training-data-do-you-need-da 8 EC 091 e 956
[4]维基百科,十分之一法则,https://en.wikipedia.org/wiki/One_in_ten_rule
[5] Van Smeden,m .等,二元 Logistic 预测模型的样本量:超出每个变量标准的事件,医学研究中的统计方法,2018。
[6]皮特·沃顿的博客,训练一个神经网络需要多少图像?,https://Pete warden . com/2017/12/14/how-many-images-do-you-neural-network-training/
[7] Sullivan,l .,功率和样本大小分布,http://SPH web . bumc . bu . edu/otlt/MPH-Modules/BS/BS 704 _ Power/BS 704 _ Power _ print . html
[8]维基百科, Vapnik-Chevronenkis 维度,https://en . Wikipedia . org/wiki/VAP Nik % E2 % 80% 93 chervonenkis _ Dimension
[9] Juba,b .和 H. S. Le,精确召回与准确性以及大数据集的作用,人工智能促进协会,2018 年。
[10]朱,x .等,我们需要更多的训练数据吗?https://arxiv.org/abs/1503.01508,2015 年 3 月。
[11] Shchutskaya,v .,计算机视觉市场最新趋势,https://indata labs . com/blog/data-science/Trends-Computer-Vision-software-Market?cli_action=1555888112.716
[12] De Berker,a .,预测深度学习模型的性能,https://medium . com/@ archydeberker/Predicting-the-Performance-of-Deep-Learning-Models-9cb 50 cf 0 b 62 a
[13]孙,c .等,再论深度学习 时代,2017 年 8 月。
[14]赫斯提,j .,深度学习缩放是可预测的,从经验上来说,https://arxiv.org/pdf/1712.00409.pdf
[15]朱林,一个。,从大量弱监督数据中学习视觉特征,【https://arxiv.org/abs/1511.02251】T2,2015 年 11 月。
[16]雷,s .等,训练数据如何影响用于图像分类的神经网络的精度和鲁棒性,会议,2019。
[17] 教程:Python 中机器学习的学习曲线,https://www . data quest . io/blog/Learning-Curves-Machine-Learning/
[18] Ng,r .,学习曲线,https://www.ritchieng.com/machinelearning-learning-curve/
[19]Figueroa,R. L .等人,预测分类性能所需的样本量,BMC 医学信息学和决策制定,12(1):8,2012。
[20] Cho,j . et al .训练一个医学图像深度学习系统需要多少数据才能达到必要的高精度?,https://arxiv.org/abs/1511.06348,2016 年 1 月。
[21]g .勒迈特、f .诺盖拉和 C. K .阿里达斯,不平衡学习:一个 Python 工具箱来解决机器学习中不平衡数据集的诅咒,https://arxiv.org/abs/1609.06570
你如何衡量你的客户流失预测模型是否良好?
原文:https://towardsdatascience.com/how-do-you-measure-if-your-customer-churn-predictive-model-is-good-187a49a9eee3?source=collection_archive---------9-----------------------
准确性是一个关键的衡量标准,管理层在批准将模型投入生产之前会查看准确性。本文讨论了度量什么和如何度量的实际方面。
测量精度时需要考虑的两个要点
- 测量准确度时使用的数据不应在培训中使用。您可以将数据分成 80%和 20%。使用 80%进行训练,使用剩余的 20%进行预测,并将预测值与实际结果进行比较,以确定准确性
- 一个结果掩盖了另一个结果。比如说你 95%的交易都不是诈骗。如果算法标记每一笔交易不是欺诈,它的正确率为 95%。所以准确率是 95%,但 5%的误差会让你倾家荡产。在这些场景中,我们需要处理其他指标,如敏感性和特异性等。我们将在本文中以实用的方式介绍这一点。
问题定义
这个预测性问题的目标是确定哪些客户会流失。数据集有 1000 行。使用 80%的样本(800 行)进行训练,使用 20%的数据来度量准确性。(200 行)。假设我们已经用 800 行训练了模型,并在 200 行上进行预测。
标记的实际流失结果
为了直观地解释这个问题,假设我的测试数据有 25 个客户。
在这 25 个客户中,15 个不会流失(绿色),10 个已经流失(红色)。这些是实际的结果。现在,让我们应用训练好的模型来预测谁会流失。
预测的流失结果已标记
这些是预测的结果。这个算法犯了很多错误。
它正确地预测了一些,也错误地预测了一些。例如,它将一些会流失的客户标记为不会流失,也将一些不会流失的客户标记为会流失的人。预测错误的用 x 标记。
预测结果统计
为了更容易理解,我在每组中直观地划分了预测,这样我们就知道哪些预测是正确的,哪些是错误的。
- 它准确地预测了 8 个会流失的客户。(这叫真正)
- 它错误地预测了 2 个将流失的客户为不流失。(这叫做假阳性)
- 它预测了 11 个不会正确流失的客户(这被称为真阴性)
- 它错误地预测了 4 个不会流失的客户。(这叫做假阴性)
记住这些流行语的方法是…假阳性被错误地预测为阳性(又名错误地预测为流失),假阴性被错误地预测为阴性(又名错误地预测为不会流失)。
感兴趣的精度测量
常见的问题是:
- 整体准确度如何?
- 模型能够标记为将流失的客户占实际流失客户的百分比是多少?
- 模型能够标记为不会流失的实际不会流失的客户百分比是多少?
- 有百分之多少的客户预测客户会真正流失?
- 预测不会流失但实际上不会流失的客户比例是多少?
1.整体准确度如何?
正确预测的总数/总数= (11 + 8) / 25 = 76%
2.该模型能够标记为“将流失”的客户占实际流失客户的百分比是多少
我们有 10 个不满意的客户,我们正确预测了 8 个。所以比率= 8/10 = 80%
这也被称为敏感性或阳性率或回忆。由于该度量不包括错误预测的内容,因此该度量对于不平衡的类往往是有偏差的。
一个 100%敏感的模型将识别所有被搅动的顾客。很少有模型是 100%敏感的。灵敏度为 85%的模型将识别 85%的流失客户,但会错过 15%的流失客户。高度敏感的模型有助于排除预测不会流失的客户。逻辑是,它在预测谁会流失方面非常准确。这意味着,如果它说这个客户不会流失,我们可以潜在地排除他们。
3.实际上“不会流失”的客户中,模型能够标记为“不会流失”的客户比例是多少
我们有 15 个非搅动客户,我们正确预测了 11 个。所以比率= 11/15 = 73.3%
这也被称为特异性或真阴性率。由于该度量不包括错误预测的内容,因此该度量对于不平衡的类往往是有偏差的。
100%特异性的模型将识别所有非搅动的客户。很少有模型是 100%特异的。具有 90%特异性的模型将识别 90%的非搅动顾客,但是将错过 10%的非搅动顾客。一个高度特异性的模型对于识别将会流失的客户是有用的。逻辑是,它在预测谁不会流失方面非常准确。这意味着,如果它说这个客户会流失,它更值得信赖。
4.预测会流失的客户中有多少人实际流失了?
我们有 12 个客户被预测为被搅动的客户(全部为红色,包括 X ),我们正确预测了 8 个(红色,不包括 X)。所以比率= 8/12 = 67%
这意味着 100 个预测会流失的客户中,只有 67 个会流失,其余 33 个不会流失。
这也称为精度或正预测值。
5.预测不会流失的客户实际上没有流失的比例是多少?
我们有 13 个客户(包括 X 的绿色圆圈)被预测为“未搅动”客户,我们正确预测了 11 个(没有 X 的绿色圆圈)。比率= 11/13 = 85 %
这意味着 100 个预测不会流失的客户中,85 个不会流失,其余 15 个不会流失。
这也称为负预测值
用简单的术语快速总结这些措施
- 该模型将抓住 80%的真正会流失的客户。
- 该模型将抓住 73%实际上不会流失的客户
- 总体准确率为 76%
- 在它预测会流失的客户中,67%的人实际上会流失
- 在预测不会流失的客户中,73%的客户实际上不会流失
结果
这是一个相当不错的模型。你能够吸引 80%会流失的客户。你肯定少了 20%。在所有被预测会流失的客户中,你有 27%被错误地预测为流失。如果目标是与客户接触并交谈,以防止他们搅动,那么与那些被错误标记为“没有搅动”的人接触是可以的,因为这不会导致任何负面问题。这可能会让他们因为得到额外的爱而更加快乐。这是一种从第一天起就能增加价值的模式。请注意,将这些信息分发给正确的受众并允许用户采取行动是非常重要的,我们将在后续文章中对此进行介绍。
神经网络如何进行预测?
原文:https://towardsdatascience.com/how-does-a-neural-network-make-predictions-6740663a63cb?source=collection_archive---------17-----------------------
最近,神经网络吸引了很多注意力。它们是由相互连接的节点组成的计算系统,与大脑的功能相似。该系统对大型原始数据集进行聚类,通过发现模式,他们可以解决非常复杂的问题,对输入进行分类,甚至做出困难的预测。最神奇的部分?他们有永不停止学习的能力!
在神经网络的核心,一个神经网络的基本构件,是一个感知器。感知器是必要的,因为它们将复杂的输入分解成更小、更简单的部分。如果你要拍一张脸的照片并把它分解,你很可能会想到常见的面部特征:眼睛、鼻子、眉毛、嘴巴、耳朵等等。每一个都可以是一个单层的感知器。在下一层中,这些要素可以分解成更小的要素。例如,左眼和右眼、上唇和下唇,这些特征可以在另一层中分解成更小的特征,如瞳孔和虹膜,或睫毛等。这些特征中的每一个都可以是一个感知器,在将其分解成最小的特征后,它将拥有一张脸的积木。
对于此示例,图像分类将用于显示神经网络如何进行预测的更具描述性的解释。神经网络可以从拍摄一张脸的照片开始,将其分解为某些特征,并通过告诉下一层特征是否存在来重建它。最后,根据传递了多少个 1(或真实)特征,神经网络可以通过告诉它看到了多少个特征与组成一张脸的多少个特征进行预测。如果看到大部分特征,那么它会将其归类为人脸。否则,它将被归类为不是脸(注意它如何不被归类为其他东西,它要么是脸,要么不是脸,真或假)。
不过要小心,感知器和神经元不是一回事。虽然它们听起来一样,但神经元不同于感知器。感知器是一个具有加权输入和偏差的单元,它产生二进制输出。神经元是人工神经网络中感知器的概括。神经元仍然接受加权输入和偏差,但这是它不同于感知器的地方:它产生的输出是 0 到 1 之间的分级值。请注意,使用 sigmoid 激活(输出)函数,节点偏向于选择接近 0 或 1 的极值,这使得它的功能非常类似于感知器。
总的来说,神经网络是一个非常简单的想法,但大型网络可以产生惊人的结果。每个神经元负责对单个特征进行分类,并依靠前一个神经元正确完成工作,以便自己做出准确的决定。与任何优秀的团队非常相似,一般来说,他们重视信任和团队合作高于一切。难怪他们在一起那么厉害。
伯特现在是谷歌搜索的一部分,所以让我们了解它是如何推理的
原文:https://towardsdatascience.com/how-does-bert-reason-54feb363211?source=collection_archive---------16-----------------------
在由 Google AI 发布大约一年后,BERT 现在是行业中 NLP 任务的首选模型框架。当发布时,它在各种 NLP 基准上取得了最先进的结果。
它之所以被称为框架,是因为 BERT 本身不是一个模型,但用作者自己的话说,它是一种“预先训练语言表示的方法,这意味着我们在大型文本语料库(如维基百科)上训练一个通用的“语言理解”模型,然后将该模型用于我们关心的下游 NLP 任务(如问答)。”
在这篇博文中,当我们提到 BERT 模型时,我们指的是基于 BERT 架构并使用预先训练的权重针对特定任务进行微调的模型。但是和大多数深度学习模型一样,它是一个黑箱。一些论文试图解释这一现象,并创造了一个被 HuggingFace 的人们称为“伯特学”的领域。在这篇博文中,我们将尝试使用一种称为 综合梯度 的归因方法来解释一个 BERT 模型在 IMDB 评论数据集上的决策。
更新:Google 现在使用 BERT 进行搜索 ,能够更好的理解自然语言查询。
但是伯特有什么特别之处呢?
冒着过度简化 BERT 方法的风险,它基本上需要训练一个神经网络来学习“语言”(请不要从字面上理解),然后这个网络被用作主干来执行各种 NLP 任务。这与计算机视觉中的迁移学习没有太大的不同,在计算机视觉中,你在一个通常擅长“视觉”(同样,不完全是人类意义上的)的主干网络上为特定任务进行微调。
它之所以具有革命性,是因为它是第一个深度双向的语言表示,这意味着它会查看给定单词之后的单词,而不仅仅是前面的单词。人们认为,这是它优于单向表示的原因。
此外,它的架构是基于 transformer 的,这有助于它衡量单词在句子中出现的上下文。所有这些因素加在一起在某种程度上解释了它的成功。它的架构已经在许多博客文章中详细解释过了,这里有一篇由 Jay Alammar 写的文章,我推荐。
那么为什么解释伯特呢?
由于上面提到的所有要点,基于 BERT 的模型正迅速成为许多公司 NLP 的首选解决方案,无论是内部建模任务还是规模不是问题的生产场景。鉴于 BERT 模型在基准数据集和任务上的卓越准确性,我们为什么要解释它呢?
作为一名 ML 从业者,重要的是要理解模型是否真的发展了语言理解,或者只是学习了简单/虚假的相关性;已经有人怀疑 到底有多聪明 。当我们试图在 NLP 方面取得进一步进展时,这一点尤为重要。
作为产品使用 BERT 服务客户的企业或产品所有者,理解它很重要,因为您不希望它歧视客户或被一个对立的例子所愚弄。
在这篇文章的其余部分,我们使用特征属性来阐明 BERT 模型是如何推理的。
但是首先,什么是定语?
属性是分配给每个特征的分数,与该特征对预测的贡献成比例。归因可以是积极的,也可以是消极的,这取决于该特征具有积极的还是消极的影响。
现在,如果我们想给一个特征赋予重要性,它必须在反事实的背景下进行。反事实是你想要比较的另一个 X。反事实隐含在解释中。例如,当你试图向运行缓慢的火车解释上班迟到时,你是在间接地与火车准点运行的日子进行比较。所以你的反事实是火车准时运行的一天。现在一个反事实可以是一个单独的例子,也可以是一个分布(一组例子),无论哪种方式都有一些强有力的观点。出于我们的目的,我们将考虑点反事实。
现在我们通过一个实际的例子来了解一下,用一个简单的线性回归模型。该模型接受 N 个输入,并将它们映射到一个标量输出。给定输入 X1 =(x1,x2,… xn)上的模型函数(f)描述为 f(x1,x2,…xn)= A0+a1 * X1+a2 * x2+a3 * x3+…+an * xn。在上面的例子中,对于反事实 X ', 来说,特征 x1 的属性是a1 (x1—x1 ')。如果属性之和等于 f(X1)—f(X’),则称该归属方法满足“效率”*公理。
好了,那么什么是综合渐变归因法呢?
综合渐变 是谷歌开发的一种基于渐变的归因方法。它与其他基于梯度的方法的不同之处在于,它满足某些公理(例如,上面定义的效率是公理之一),并且等价于计算非原子游戏的 Aumann-Shapley (Aumann,R. J .和 Shapley,L. S .值。普林斯顿大学出版社,普林斯顿,新泽西州,1974 年)价值的特点。
为了简洁起见,我们在这里不讨论奥曼-沙普利值的数学。综合梯度是一种归因方法,它需要一个反事实来明确说明归因。反事实被作者称为“基线”。论文作者推荐的标准基线是没有信息或信号的基线,理想情况下具有中性预测。例如,视觉模型的黑色图像或 NLP 模型的空文本。我们将使用空白文本作为基线。
车型:
在这里,我们将旨在解释在 IMDB 电影评论数据集上微调的 BERT 基本模型的预测,了解它在定制电影评论上的推理能力,并将其与在相同数据集上训练的 BiLSTM 模型进行比较。
- 所用的 BERT 模型是基本的无案例模型,使用从这里是改编的代码进行微调,没有任何深度超参数优化。在坚持的测试集上,它达到了大约 90%的准确率。
- BiLSTM 模型是使用从这里的改编的代码来训练的。它实现了约 85%的测试集精度,同样,没有任何超参数优化。
最后,说明:
让我们通过一些简单的、可信的单行评论来探究模特的行为。随着我们的继续,我们会增加一些复杂性,但是真的没有什么是孩子不能处理的。最后,我们将从模型的角度,在一个“真实”的电影评论上测试这些模型。
我们将使用 提琴手 (充分披露:我为提琴手工作)来完成这项任务。我们将把 BERT 模型和电影评论数据导入 Fiddler,并使用它的 NLP 解释接口来可视化属性。出于讨论的目的,我们将主要集中在解释的定性方面。
我们举第一个例子, 【这是部好电影】 。相当明确的权利?伯特模型正确地将其认定为正面,对“好”给予最高的正面归因,对“电影”给予一定的负面归因。对“电影”的负面归因意味着,如果用空文本(我们的基线)代替“电影”,模型会给句子打更高的分数。
BiLSTM 模型对情绪的预测也是正确的,但对“这个”给予了最高的归因。这不是一个非常直观的解释,因为从人类的角度来看,“好”应该得到更多的重视。
这是一个漏洞吗?再来给 【这是部烂片】 加上若干个“这”es,模型正确识别为负面。果然,我们的直觉是正确的。预测发生了逆转,现在被标记为积极情绪!
这是一个非凡的洞见, 展示了 BiLSTM 模型是多么的易受攻击,以及解释是如何帮助暴露这个漏洞的 。然而,伯特模型并没有被这种特殊的花招所欺骗。
现在他们能处理否定吗?
是的,伯特能够预测的“这不是一部好电影”作为负面评价。它确实设法将足够多的负面归因归因于“不是 a”,以对抗正面归因于“好”。有趣的是,这可能不是人类解释他/她的思路的方式。他们不会说,句子中的“好”使得句子不太可能是否定句,这基本上是模型在这里所说的。
然而,BiLSTM 模型未能处理否定,并将其标记为积极的评论。
如果我们把“好”换成“坏”会怎么样?伯特现在给“不是”一个正值,因为现在它在“一部糟糕的电影”附近。这令人印象深刻!这表明它对否定有一个基本的理解,至少比 BiLSTM 模型好得多。
BiLSTM 模型将负值同时归因于“不是”和“不好”,因此它再次显示了在上下文理解方面的弱点。
现在让我们看看他们在更细致的评论中表现如何。
“这部电影不会浪费你的时间” 是正面评价,即使不是压倒性如此。伯特模型将其归类为负面,正面的概率几乎为零。正如我们从下面的解释中所看到的,它不能处理上下文中的“不要浪费”。
BiLSTM 模型实际上表达了一些怀疑,但也认为它是负面的。“浪费”的存在主导了它的决策。
现在让我们在一个训练集示例上测试这些模型,他们都已经看过了:
评论是 “当我在五六十年代还是个孩子的时候,任何与迪士尼有关的东西都是伟大的。发生了什么事?他们可以得到任何他们想要的男女演员,最好的时间。尽管迪斯尼资源丰富,但不知何故,他们设法把事情搞砸了。迪士尼请得起最好的编剧,最好的制片人和导演,但还是…他们把事情搞砸了!这部电影是垃圾。可悲的是,我怀疑迪士尼在他们的傲慢甚至不知道什么时候一部电影是好是坏。只是由于演员们的才华,我甚至可以给它打 3 分。”
这显然是一个负面的评论,两个模型都这样认为。BERT 模型给它一个几乎为零的正面评价机会,而 BiLSTM 模型给它一个 0.29%的正面评价机会。
伯特模型将大部分归因于评论后半部分的句子,这些句子清楚地表明了评论者对电影的看法。它对“废话”和“糟糕”之后的句号进行了大量的归因。记住,幽默的归属考虑了所有可能的相互作用,所以句号的归属是上下文相关的,与它在文本中的位置有关。我们的推测是,句号对伯特模型很重要,因为如果没有句号,句子就会继续,并且可能会有一些词来增强/淡化/维持句子中的情感。停在那里的句子有一些意义,在这种情况下是否定的。
BiLSTM 模型对大量随机单词给出了很高的否定归因,并且偏向于评论早期的单词。此评论来自训练集,因此模型可能过度拟合了它。这或许也表明,对这种 RNN 模式的长期文本理解是有局限性的。
那么,我们在这里学到了什么?
- 解释是 ML 工作流程 的重要组成部分。它们帮助我们评估模型的能力和局限性。这对于面临自由形式、开放式输入的模型尤其重要。此外,确定人工智能到底有多智能也是理论上的兴趣所在。
- 特别是关于 BERT 模型,它的解释似乎比 BiLSTM 模型更容易理解。我们承认,这可能不是两种架构的公平比较,因为一个更大、优化更好的 BiLSTM 模型的性能可能与 BERT 相当。但是,即使排除比较,这些解释本身也提供了一些证据,表明现在在 NLP 中流行的语言建模方法有一些合理性,不仅从预测准确性的角度来看,而且从模型如何获得预测的角度来看。
参考文献:
[1] Sundararajan M,Taly A 和 Yan Q,深度网络的公理化归属 (2017),ICML 17 年第 34 届机器学习国际会议论文集—第 70 卷
[2] Jacob Devlin,Ming-Wei Chang,Kenton Lee 和 Kristina Toutanova, BERT:用于语言理解的深度双向转换器的预训练 (2018),arXiv 预印本 arXiv:1810.04805v2
计算机如何理解图像?
原文:https://towardsdatascience.com/how-does-computer-understand-images-c1566d4537bf?source=collection_archive---------8-----------------------
用简单的语言解释计算机视觉
Image of a dog (Photo by Angel Luciano on Unsplash)
当我们看到这张照片时,我们可以不假思索地说,这是一只可爱的狗的照片。即使是一个 8 岁的孩子也能毫不费力地认出照片中的狗。
你有没有想过计算机是如何看到同样的图像的?
我相信你们很多人都有过这样的经历。在我生命中的某个时刻我的确是。在这篇文章中,我将解释计算机是如何看到图像并理解它的。
计算机将图像视为 0 和 1。像素是图像中最小的单位。
A digital image is a 2D array of pixels. Each pixel is characterised by its (x, y) coordinates and its value. [1]
当我们拍摄数字图像时,它被存储为像素的组合。每个像素包含不同数量的通道。如果是灰度图像,它只有一个像素,而如果是彩色图像,它包含三个通道:红色、绿色和蓝色。
A digital image represented as pixels and channels. [2]
如上面的数字彩色图像表示所示,每个像素的每个通道具有 0 到 255 之间的值。在计算机能够理解图像之前,这些值中的每一个都用二进制表示。
下一个问题是,它怎么能说给定的图像包含一张狗的图片呢?
在这种情况下,如果不能理解图像的含义,或者不能描述图像的内容,仅仅能够阅读图像是没有用的。这就是机器学习的用武之地。
机器(或计算机)可以被教会如何理解图像并说出图像包含的内容。这是机器学习的一个例子,教计算机理解和描述图像。这类似于我们通过展示每个案例的例子来教孩子识别不同的字母或区分苹果和香蕉。这正是计算机学习识别图像中物体的方式。
A kid learning to draw a heart in the beach (Photo by Jude Beck on Unsplash)
就像人类有不同的技能,其中一项技能是识别图像中的对象(上图中的狗),计算机有机器学习模型,可以认为是一项技能,来执行相同的任务。正如人类需要接受训练来执行特定技能一样,计算机也需要训练机器学习模型。
在这两种情况下,训练都是通过例子进行的。类似于如何教孩子识别苹果,通过给出几个包含苹果的示例图像,可以教机器学习模型如何识别图像中的苹果。从这些示例图像中,模型学习苹果的特征,比如它的形状和颜色。现在,当一个苹果的新图像以这种模式呈现给这台计算机时,它可以使用它先前了解到的关于苹果的信息,并识别出这个新图像也包含苹果。
Image of an apple (Photo by dylan nolte on Unsplash)
这篇文章介绍了计算机如何读取数字图像,以及它如何理解图像所包含的内容。
发现这个帖子有用吗? 在下面留下你的想法作为评论。
希望实现对象检测。查看我的关于 物体检测的帖子,只用了 10 行 python 代码。
希望实现人脸检测。查看我在 上的帖子如何使用 python 在不到 3 分钟的时间内实现人脸检测。
点击这里 阅读我其他关于 AI/机器学习的帖子。
来源:
[1]莱拉,玛丽亚&普劳西,阿加皮&乔治奥祖卢,安东尼奥斯。(2011).MATLAB 在核医学图像处理中的应用。10.5772/19999.
[2]钱德朗,贾迪普。(2019).用于便携式血气分析的基于图像的比色技术。
进一步阅读:
[## 计算机视觉的简明介绍
计算机视觉,通常缩写为 CV,被定义为一个研究领域,旨在开发技术来帮助…
machinelearningmastery.com](https://machinelearningmastery.com/what-is-computer-vision/) [## 计算机视觉——导论
揭开像素背后的含义
towardsdatascience.com](/computer-vision-an-introduction-bbc81743a2f7)
脸书如何针对大规模工作负载调整 Apache Spark?
原文:https://towardsdatascience.com/how-does-facebook-tune-apache-spark-for-large-scale-workloads-3238ddda0830?source=collection_archive---------6-----------------------
我想开始祝你有一个美好的 2019 年,在我今年的第一篇文章中,我将分享由刘和来自的 Sital Kedia 在 Spark 峰会会议上介绍的针对大规模工作负载调整 Apache Spark 的会议摘要以及我的日常经验。
当我们谈论 Spark 调优时,我们需要认识到每个应用和环境都是不同的,因此我们不能假设这种配置对所有情况都是最好的。在这种情况下,大多数推荐的属性都与大型管道或以批处理模式处理大型数据集的作业相关。
让我们开始定义我们可以从脸书收集的主题
- 缩放火花驱动器
- 缩放火花执行器
- 扩展外部洗牌服务
- 工具
1.缩放火花驱动器
动态执行人分配
是一个 Spark 特性,它允许动态地添加和删除 Spark 执行器,以匹配工作负载。[ 掌握 Apache Spark ]
如果您与其他团队共享集群资源,那么完全推荐启用此配置,这样您的 Spark 应用程序就只使用它最终将使用的资源。它可以根据工作量调整执行者的数量。
spark.dynamicAllocation.enable = true
spark.dynamicAllocation.executorIdleTimeout = 2m
spark.dynamicAllocation.minExecutors = 1
spark.dynamicAllocation.maxExecutors = 2000
这四个参数是自我描述的,也许第二个需要更多的细节。executorIDleTimeout 用于正确移除执行器。
更好的获取失败处理
中止阶段之前允许的连续阶段尝试次数(默认为 4)。
spark.stage.maxConsecutiveAttempts = 10
调整 RPC 服务器线程
增加 RPC 服务器线程以修复内存不足(实际上我在 spark 官方文档中找不到更多细节,一个很好的解释是这里是)
spark.rpc.io.serverTreads = 64
2.缩放火花执行器
首先必须理解如何基于自 Spark 1.6 [ Spark 内存管理 ]以来开发的统一内存管理来定义执行器内存的结构(图 1)
Fig. 1 Executor memory layout
随机存储器
一小部分(堆空间— 300MB)用于执行和存储[【深入探讨:Apache Spark 中的内存管理】](http://Deep Dive: Memory Management in Apache Spark)。这个值越低,溢出和缓存数据回收就越频繁。此配置的目的是为内部元数据、用户数据结构和稀疏、异常大的记录的不精确大小估计留出内存(默认为 60%)。
spark.memory.fraction * (spark.executor.memory - 300 MB)
用户记忆
是为 Spark 中的用户数据结构、内部元数据保留的,并且在记录稀疏和异常大的情况下,默认情况下,保护内存不足错误的发生。
(1 - spark.memory.fraction) * (spark.executor.memory - 300 MB)
保留记忆
这是系统保留的内存。它的值是 300MB,这意味着这 300MB 的 RAM 不参与 Spark 内存区域大小的计算。它会储存火花内部物体。
记忆缓冲区
要为每个执行器分配的堆外内存量(以兆字节为单位)。这是一个考虑到虚拟机开销、内部字符串、其他本机开销等因素的内存。【火花属性】
spark.yarn.executor.memoryOverhead = 0.1 * (spark.executor.memory)
启用堆外内存
#Shuffle Memory spark.memory.offHeap.enable = true
spark.memory.ofHeap.size = 3g#User Memoryspark.executor.memory = 3g#Memory Bufferspark.yarn.executor.memoryOverhead = 0.1 * (spark.executor.memory + spark.memory.offHeap.size)
垃圾收集调优
当您的程序存储的 rdd 有大量“变动”时,JVM 垃圾收集会是一个问题。(在只读取一次 RDD,然后在其上运行许多操作的程序中,这通常不是问题。)当 Java 需要驱逐旧对象为新对象腾出空间时,它将需要跟踪所有 Java 对象并找到未使用的对象。GCT
这里的一个建议是使用 GC 而不是 G1GC
spark.executor.extraJavaOptions = -XX:ParallelGCThreads=4 -XX:+UseParallelGC
调混文件缓冲
磁盘访问比内存访问慢,因此我们可以通过缓冲读/写来分摊磁盘 I/O 成本。
#Size of the in-memory buffer for each shuffle file output stream. #These buffers reduce the number of disk seeks and system calls made #in creating intermediate shuffle files. [[Shuffle behavior](https://people.apache.org/~pwendell/spark-nightly/spark-master-docs/latest/configuration.html#shuffle-behavior)]
spark.shuffle.file.buffer = 1 MB spark.unsafe.sorter.spill.reader.buffer.size = 1 MB
优化溢出文件合并 [ Spark-20014
通过关闭到的传输并使用缓冲文件读/写来提高 io 吞吐量,从而使用 mergeSpillsWithFileStream 方法。
spark.file.transferTo = false
spark.shuffle.file.buffer = 1 MB
spark.shuffle.unsafe.file.ouput.buffer = 5 MB
调整压缩块大小
默认压缩块为 32 kb,这对于大型数据集来说不是最佳选择。如果您转到幻灯片,您会发现通过增加块大小,随机播放/溢出文件大小减少了 20%。
#Block size used in LZ4 compression, in the case when LZ4 #compression codec is used. Lowering this block size will also lower #shuffle memory usage when LZ4 is used. [[Compression and Serialization](http://Block size used in LZ4 compression, in the case when LZ4 compression codec is used. Lowering this block size will also lower shuffle memory usage when LZ4 is used.)]
spark.io.compression.lz4.blockSize = 512KB#Note that tha default compression code is LZ4 you could change #using
spark.io.compression.codec
3.扩展外部洗牌服务
在 Shuffle 服务器上缓存索引文件
问题是,对于每次 shuffle 提取,我们都要重新打开同一个索引文件并读取它。如果我们能够避免多次打开同一个文件并缓存数据,效率会更高。我们可以使用 LRU 缓存来保存索引文件信息。通过这种方式,我们还可以限制缓存中条目的数量,这样我们就不会无限地浪费内存。[ Spark-15074
#Cache entries limited to the specified memory footprint.
spark.shuffle.service.index.cache.size = 2048
可配置洗牌注册超时和重试
对于更有可能发生节点故障的大型集群(例如,超过 50 个节点),这是特别推荐的。
spark.shuffle.registration.timeout = 2m
spark.shuffle.registration.maxAttempst = 5
4.工具
Spark UI 指标
我认为这可能是下一篇文章的一部分(这次有实际的例子👩💻 👨💻)因为那里有很多调试、优化、调优的有用信息。
首先,为了进行优化,您可以检查随机读取阻塞时间(任务等待随机数据从远程机器读取所花费的阻塞时间[堆栈溢出])
Fig 2. Example of a Spark UI Metric [Community Hortonworks]
感谢阅读!下一篇文章再见。
PS 如果你有任何问题,或者想要澄清一些事情,你可以在 Twitter 和 LinkedIn 上找到我。如果你想了解 Apache Arrow 和 Apache Spark,我有一篇文章用一些例子对 Apache Arrow 和 Apache Spark 以及 Pandas 进行了简单的介绍,此外,今年出版了一本我认为很棒的书 Spark:权威指南。
机器学习中的 k-Means 聚类是如何工作的?
原文:https://towardsdatascience.com/how-does-k-means-clustering-in-machine-learning-work-fdaaaf5acfa0?source=collection_archive---------1-----------------------
机器学习中无监督学习领域最著名的主题之一是 k 均值聚类。尽管这种聚类算法相当简单,但对于该领域的新手来说,它看起来很有挑战性。在这篇文章中,我试图用两个不同的例子来解决 k-Means 聚类的过程。第一个示例将更侧重于大图和可视化过程,而第二个示例侧重于所涉及的底层计算。
无监督学习和聚类
监督和非监督学习算法的主要区别在于后者没有数据标签。通过无监督学习,数据特征被输入到学习算法中,学习算法决定如何标记它们(通常用数字 0,1,2..)又基于什么。这个“基于什么”的部分决定了要遵循哪个无监督学习算法。
大多数基于无监督学习的应用利用了被称为聚类的子领域。聚类是根据数据样本共有的某个特征将数据样本组合成个簇的过程——这正是无监督学习的初衷。
那么,什么是 k-Means,我们为什么要使用它呢?
作为一种聚类算法,k-Means 将数据点作为输入,并将其分组为 k 个聚类。这个分组过程是学习算法的训练阶段。结果将是一个模型,该模型将数据样本作为输入,并根据模型经历的训练返回新数据点所属的聚类。这有什么用呢?这就是内容推广和推荐通常的工作方式——以一种非常简单的方式。网站可以选择将人与在网站上分享相似活动(即特征)的其他人放在气泡(即集群)中。通过这种方式,推荐的内容会有些切中要害,因为具有类似活动的现有用户很可能对类似的内容感兴趣。此外,当一个新人进入网站的生态系统时,这个人将被放在一个特定的集群中,内容推荐系统会处理其余的事情。
基于这个想法,k-Means 只是一个聚类算法。它使用点之间的距离作为相似性的度量,基于 k 平均值(即均值)。这是一个很有意思的算法,言归正传。
将 k 放在 k-Means 中
k-Means 背后的想法是,我们想在现有的数据中增加 k 个新点。这些点中的每一个——称为质心——都将试图以 k 个星团中的一个为中心。一旦这些点停止移动,我们的聚类算法就停止了。
正如你可能已经怀疑的,k 的值非常重要。这个 k 叫做超参数;我们在训练前设定其值的变量。这个 k 指定了我们希望算法产生的聚类数。这个聚类数实际上是数据中的质心数。
在我们进一步讨论之前,让我们先来看看到目前为止一切都是如何融入大局的:
- 我们知道,机器学习的核心在于泛化的想法——对模型从未见过的输入做出可靠的输出预测。
- 无监督学习就是将数据样本分组在一起,而不管它们的标签(如果它们有标签的话)。
- 聚类是一种无监督的学习算法,将数据样本分组为 k 个聚类。
- 该算法基于 k 个点的平均值(即质心)产生 k 个聚类,这些点在数据集周围漫游,试图使它们自己居中——每个聚类的中间有一个。
k-Means:简言之
有什么比伪代码更好的算法总结?
Assign initial values for each **u** (from **u**=1 till **u**=k);Repeat {
Assign each point in the input data to the **u** that is closest
to it in value;Calculate the new mean for each **u**;if all **u** values are unchanged { break out of loop; }
}
k-Means:详细
如果你以前读过我的任何帖子,你可能知道我喜欢先用例子来解释,然后谈论我们话题的技术方面。此外,我不喜欢向读者介绍主题背后铺天盖地的数学知识,因为我相信这些知识对研究人员来说比对那些在这个问题上有自身利益的人来说更重要。
回到 k 均值和我们的第一个例子。假设我们有一个数据集,绘制出来后看起来像下图:
对我们人类来说,这些数据看起来完全符合三个组(即集群)。然而,机器看不到这一点,因为这些点是实际的数据“点”,其值只是机器无法感知的数字。
关于聚类的目标,我们有一组未标记的数据点,我们希望将它们放入组中。这些组通常标有数字(0,1,2..)由算法本身决定。含蓄地说,我们真正需要的实际上是一个划分组的决策边界。为什么?在实践中,推理通过将数据点与相应的聚类相关联来工作。这就是决策界限显得重要的地方。
k-Means 聚类就是将我们拥有的训练点放入聚类中。但它的目的遵循相同的想法。我们想知道哪些数据点属于一起,而没有任何标签。
我们通过放置 k 个不同的平均值(即平均值)来开始该算法,这些平均值的值要么被随机初始化,要么被设置为平面上的真实数据点。让我们从 k=3 开始,因为数据“看起来”分为三组(我们将在稍后的帖子中回到这个“看起来”的词)。出于解释的目的,让我们随机初始化平均值的值(即位置):
现在,算法逐个检查数据点,测量每个点与三个质心(A、B 和 C)之间的距离。然后,该算法将质心最近(即距离最近)的数据点分组。
例如,第 21 个数据点将属于绿色的组 A,仅仅因为它在距离质心 A 更近:
一旦我们将每个数据点与其最近的质心相关联,我们就重新计算平均值——质心的值;质心的新值是属于该质心的所有点的总和除以组中的点数。
我们一直这样做,直到没有质心在重新计算时改变它的值。这意味着每个质心都以其簇的中间为中心,该簇被其自己的圆形决策边界所包围:
另一个例子
让我们再举一个例子,但这次是从不同的角度。假设我们有以下一组点,我们希望将其分为 3 组:
这些数据没有以视觉上吸引人的方式呈现。我们只有一组想要聚类的点。另一个重要的注意事项是,符号化这些数据点的圆圈中的值是这些点的实际值。他们没有像我们之前的例子那样展示数据的顺序。相反,这些值是一些特征值 f 的量化,我这样说是为了让你更容易理解均值的计算是如何工作的。
让我们准备我们的空集群:
可以把这些集群想象成包含我们数据集中的点的袋子。
让我们将 U 值(即均值/质心)初始化为:
U1 = 6
U2 = 12
U3 = 18
这些值可以是随机的,但是为了简单起见,它们被选择为均匀分布在数据空间(1 到 24)中。
由于我们已经有了均值,我们可以开始计算特征 F 值为 F 的任何点与三个均值(U1、U2 和 U3)之间的距离,其中绝对距离为:
distance = | F - U |
首先,让我们取特征 F 值为 20 的数据点:
|20 - U1| = |20 - 6| = 14
|20 - U2| = |20 - 12| = 8
|20 - U3| = |20 - 18| = 2
根据上述计算,值为 20 的数据点距离平均值 U3 更近。因此,我们将该点“标记”为 U3,将其放入相应的集群/包中:
其他各点也是如此:
|3 - U1| = |20 - 6| = 3
|3 - U2| = |20 - 12| = 9
|3 - U3| = |20 - 18| = 15
依此类推,直到我们将所有的数据点归入相应的聚类:
按照算法,我们现在需要重新计算平均值(U1、U2 以及 U3):
U1 = (3+8+1+3+7+5+2+3+8) / 9 = 4.44
U2 = (9+10+14+9) / 4 = 10.5
U3 = (20+24+23) / 3 = 22.33
在开始执行时,我们的 U 值分别是 6、12 和 18。现在,在第一次迭代之后,这些值分别变成了 4.44、10.5 和 22.33。我们现在必须再次经历距离计算步骤,但是使用新的平均值。我们清空我们的包/簇,然后重新开始:
这次我们从一个随机点开始,比方说特征 F 值为 8 的点。距离计算如下:
|8 - U1| = |8 - 4.44| = 3.56
|8 - U2| = |8 - 10.5| = 2.5
|8 - U3| = |8 - 22.33| = 14.33
因此,具有值 8 的数据点属于平均值 U2 的聚类,因为它在距离上最接近它。如果你还记得,同样的数据点(8)在第一轮属于 U1。由此可见平均值的重要性。
反复运行该算法,直到计算后平均值不变,将达到以下形式,平均值分别为 2.83、9.29 和 22.33:
最终注释
正如你在我们的第二个例子中看到的,我们在任何给定点操作的平均值对模型的可靠性非常重要。这并不排除初始值。事实上,如果起始位置非常糟糕,算法可能会导致聚类完全错误!因此,另一种初始化方法是从数据集本身选择我们的初始 k 位置,将其中一个点设置为其周围的平均值。无论哪种方式,通常的做法是在相同的数据集上重复运行该算法,直到我们找到最常见的解决方案和聚类形式——并坚持下去。
还记得我们说数据“似乎”已经被分成三份的那个阶段吗?这只是为了说明人眼在这些应用中的重要性。由于我们没有地面真实误差估计(因为它通常需要标签),我们需要对超参数的另一种测量。对于许多应用来说,一个人查看图并确定 k 值就足够了。然而,这并没有以任何方式高估 k 值的重要性。
最后,k-Means 的一个明显优势是它给出了整个聚类的平均值,而不仅仅是聚类本身。这在与分割相关的图像处理任务中非常有用——当将分割作为聚类问题处理时。
线性回归实际上是如何工作的?
原文:https://towardsdatascience.com/how-does-linear-regression-actually-work-3297021970dd?source=collection_archive---------1-----------------------
Photo by Chris Liverani on Unsplash
线性回归可以说是统计学和机器学习中最著名的话题之一。它是如此重要,以至于它在几乎所有机器学习课程中都占据了重要地位。然而,这可能有点棘手,尤其是如果一个人没有统计学背景。
什么是线性回归?
线性回归可以被认为是一种机器学习算法,它允许我们将数字输入映射到数字输出,将一条线拟合到数据点。
换句话说,线性回归是一种模拟一个或多个变量之间关系的方法。从机器学习的角度来看,这样做是为了确保泛化——让模型能够预测它从未见过的输入的输出。
为什么要一概而论?
如果你读了我在 Medium 上的其他帖子,你会注意到我试图尽可能地强调一般化的观点。泛化是机器学习的本质。**拥有这种人工形式的智能的整个想法依赖于将模型教得如此之好的过程,以至于它能够自己行动**。换句话说,你希望模型不要局限于它所学到的任何东西。把它当成一个孩子。如果你的孩子一生只见过猫——因为一些你强加给他的令人不安的原因——如果在某个时候你决定给他看一张狗的照片,你会期望他知道狗不是猫。这不是他所学的东西。
为什么是线性回归?
因此,一群创意科技爱好者在硅谷创办了一家公司。这家名为 Banana 的初创公司非常创新,自 2016 年以来,他们一直在不断增长。你,这位富有的投资者,想知道是否把你的钱押在香蕉明年的成功上。让我们假设你不想冒很多钱的风险,尤其是因为硅谷的风险很高。所以你决定买一些股票,而不是投资公司的大部分。
你看一看香蕉的股票价格,自从它们启动以来,你看到下面的数字。
嗯,你肯定能看到趋势。香蕉公司正在疯狂地成长,仅仅三年时间,他们的股票价格就从 100 美元涨到 500 美元。你只关心 2021 年的价格会怎么样,因为你想给你的投资一些时间和公司一起开花结果。乐观地说,看起来在接下来的几年里,你的钱会越来越多。这一趋势不太可能经历突然、剧烈的变化。这导致你假设股价会跌到 500 美元以上。
这里有一个有趣的想法。根据过去几年的股价记录,你能够预测股价将会如何。你能够推断出我们没有数据的一年(2021 年)新股票价格的范围(图上不存在)。嗯——算是吧。
你刚才所做的是推断你的模型(你的脑袋)来进行概括——预测你甚至不知道的 x 值的 y 值。然而,这无论如何都不准确。你无法具体说明股价最有可能是多少。据你所知,它可能会超过 500 美元。
这就是线性回归(LR)发挥作用的地方。LR 的本质是找到最符合图上数据点的线,这样我们就可以或多或少地准确知道 2021 年股价可能会跌到哪里。
让我们通过查看它的重要性来检查上面 LR 生成的行(红色)。看起来,只要稍加修改,我们就能意识到,到 2021 年,香蕉的股价可能会比 600 美元高一点。
显然,这是一个过于简化的例子。然而,过程保持不变。作为一种算法,线性回归依赖于降低成本以最大化性能的概念。接下来我们将研究这个概念,以及我们是如何在图上画出红线的。
训练线性回归器
来解决技术上的问题。我在上一节中描述的是一元线性回归,因为我们试图将一个自变量(x 值)映射到一个因变量(y 值)。这与多元线性回归相反,多元线性回归试图将多个自变量(即特征)映射到因变量(即标签)。现在,让我们言归正传。
图上的任何直线都遵循以下公式:
*f(X) = M.X + B*
其中 M 是直线的斜率,B 是允许直线垂直移动的 y 截距,X 是函数的输入值。
就机器学习而言,这遵循惯例:
*h(X) = W0 + W1.X*
其中 W0 和 W1 是权重,X 是输入要素,h(X)是标注(即 y 值)。
线性回归的工作方式是试图找到权重(即 W0 和 W1 ),从而为我们拥有的输入数据(即 X 特征)找到最佳拟合线。根据最低成本确定最佳拟合线。
那么,成本是多少呢?
事情是这样的。成本可以采取不同的形式,取决于手边的机器学习应用。然而,一般来说,成本是指模型在与实际训练数据相差多少的情况下产生的损失或误差。**
说到线性回归,我们通常使用的代价函数是平方误差代价。
**J(W0,W1) = (1/2n).sigma((h(Xi)-Ti)^2) for all i=1 until i=n**
其中 J(W0,W1)是指权重为 W0,W1 的模型的总成本。h(Xi)是指模型对索引为 I 的要素 X 处的 y 值的预测。Ti 是索引为 I 处的实际 y 值。最后,n 是数据集中数据点的总数。
我们的成本函数所做的基本上是获取模型预测的 y 值和数据集中每个数据点的实际 y 值之间的距离(例如欧几里德距离),然后将该距离平方,再除以数据点的数量,就可以得到平均成本。所述距离在上图中被示为误差向量。(1/2n)项中的 2 只是为了简化下一节中对成本函数进行微分的过程。
这一切的训练在哪里?
训练机器学习模型就是使用学习算法来寻找使成本最小化的权重(我们公式中的 W0,W1)。为了简单起见,让我们使用梯度下降算法。虽然这是一个相当简单的话题,梯度下降值得自己的职位。因此,我们只简单介绍一下。
在线性回归的上下文中,训练基本上是找到这些权重,并将它们插入直线函数,以便我们有最佳拟合的线(W0,W1 最小化成本)。该算法基本上遵循伪代码:
**Repeat until convergence {
temp0 := W0 - a.((d/dW0) J(W0,W1))
temp1 := W1 - a.((d/dW1) J(W0,W1))
W0 = temp0
W1 = temp1
}**
其中(d/dW0)和(d/dW1)分别是 J(W0,W1)相对于 W0 和 W1 的偏导数。这种偏导数的要点基本上是导数:
**(d/dW0) J(W0,W1) = W0 + W1.X - T
(d/dW1) j(W0,W1) = (W0 + W1.X - T).X**
如果我们在模型上运行梯度下降学习算法,并通过每一步获得的成本,模型将收敛到最小成本。导致最小成本的权重作为我们之前提到的线函数的最终值处理(即 h(X) = W0 + W1)。x)。这意味着与我们的 h(X)函数等价的线实际上是我们的线性回归量。
旁注:性能
有时,当训练数据集包含大量值不一致的数据点时,我们求助于称为离散化的过程。这是指将数据集中的 Y 值从连续转换为离散,从而产生简洁、干净和可用的数据范围,而不是数据值本身。但是,这会导致数据丢失,因为从技术上来说,您会将数据点分解成表示连续值范围的条柱。模型有效性的另一个主要因素是它对我们选择的箱/范围数量的依赖。
如果线性回归模型性能不好,我们通常会选择更高的多项式函数。这基本上是在回归函数中引入新的变量,这样我们可以给它更多的灵活性。然而,这将导致 LR 线不再是一条直线。
原来,就线性回归而言,“线性”并不是指“直线”,而是指“落在一条线上”。
这意味着我们的线性回归实际上不必是一条直线,就像我们通常在数学中看到的那样。回归中的这种灵活性可以极大地提高性能。然而,更高的多项式可能导致更高的方差,以及指数级更高的计算复杂度。这往往会导致过度拟合。这是一个大话题,我将在另一篇文章中详细讨论。
结论
线性回归是找到最适合图上可用数据点的直线的过程,因此我们可以使用它来预测数据集中不存在的输入的输出值,并相信这些输出会落在该直线上。性能(和错误率)取决于各种因素,包括数据的干净程度和一致性。有不同的方法来提高模型的性能(即,可推广性)。然而,每种方法都有自己的优缺点,这使得方法的选择取决于应用。
数字经济如何创造「另类数据」?
原文:https://towardsdatascience.com/how-does-the-digital-economy-create-alternative-data-97a63c8e960?source=collection_archive---------11-----------------------
新的数字信息来源改善了投资决策——要了解它们如何增加价值,我们需要了解它们是如何产生的。
Photo by Samson on Unsplash
替代数据是一个时髦词,但它不仅对投资者和企业,也对政府和监管机构具有巨大的潜力。它是我们前所未有的数据革命的结果,尽管它隐藏在众目睽睽之下,却很难被发现。
有人认为,到 2020 年(不到一年的时间),每个人每天将产生大约 2 MB 的数据,其中很大一部分数据是以易于分析和访问的数字格式创建的。数据在未来能创造的洞察还难以想象;但是随着量化的增加,很可能大部分决策将完全由数据驱动。
要了解替代数据的价值,我们先来看看这些数字数据的来源,然后再详细讨论各种数据来源及其经证实的用途。
替代数据的来源
替代数据可以是从
- 非传统数据源,如来自网络流量或物流数据的数字废气或数字残留,以量化供应链中的运输活动。
- 非结构化社交媒体在使用各种计算方法进行进一步转换之前,可以轻松量化的信息,
- 汇总交易信息(如信用卡数据),
- 遥感数据,如卫星观测和来自数字设备的数字跟踪尾气,如网络搜索和手机使用信息
驾驭这些海量数据的信息内容需要计算能力。随着每天创建近 2.5 的数据,需要大量的存储、处理、计算和分析能力。而且,随着每天创建的数据越来越多,大约每 40 个月翻一番,数据量(一些好的,一些坏的)变得很大。
结构化和非结构化数据
一些替代数据是结构化的,而另一些是非结构化的。
- 结构化数据是定义明确的数据,其模式使其易于搜索,这使得聚合和分析更加容易。
- 非结构化数据通常不容易搜索,除非进一步细化和标记,通常包括各种音频、视频和社交媒体帖子。
- 非结构化数据可以转换为结构化数据,并直接传输到分析平台。使用专有算法(通常是机器学习过程)来提取信息,对各种信号进行特征工程,并组合不同的数据源来增强各种非结构化信号之间的关系,从而可以将非结构化数据集成到结构化数据中。面临的挑战是优化数据源和降低信噪比(通常是动态、同步和透明的),并确定非结构化数据中的固有信息商数得到增强,以满足用户的各种需求。
替代数据的不同来源
个人生成的替代数据
通过他们的社交媒体活动、在线评论和网络搜索,个人是替代数据的主要生产者,特别是通过他们持续的社交媒体帖子和类似信息。脸书(2019 年 3 月)的日活跃用户超过 15.6 亿,脸书(2019 年 3 月 31 日)的月活跃用户超过 23.8 亿,用户通过帖子、评论、分享和转发产生大量数据。模式、联系和网络创建了一个附加的信息层。
同样, Twitter 也拥有强大的追随者:有近 3.21 亿活跃用户(2019 年 2 月),他们提供了人们如何即时思考以及同时在朋友和世界面前表达自己的见解。因为这些信息是个人的、即时的、有意的,所以它代表了比新闻和媒体更丰富的对人性和心理趋势的内部运作的视角。
个人通常会创建三种类型的替代数据:
- 社交媒体帖子,根据社交媒体平台(Instagram vs Kik vs Tinder)、社交媒体帖子的预期用途和受众(Tumbl vs Yelp vs RateMyProfessor)、一般信息(Twitter vs 微信),参与度、质量和内容有所不同
- 新闻和评论,从亚马逊类型的评论(网飞、IMDB、DPR)到木乃伊黑手党博客
- 网络搜索和个人或个人识别数据,如 Google、Bing 和微博搜索信息(或 GitHub 和 PornHub)
业务流程生成的替代数据
业务流程通常是经过设计和规划的,以结构化的方式发生,并且包含具有高信号价值比的信息。具体而言,排气数据是指作为公司活动副产品的数据,包括超市扫描仪数据或供应链数据。人们普遍认为,汇总的信用卡交易数据提供了最可靠的指标,可以洞察价格形成、通胀预期和产品层面的盈利能力,并作为收入的领先指标和盈利能力的决定因素
公司通常会创建三种类型的替代数据:
- 交易数据 —信用卡、发票和供应商变更信息。
- 公司数据 —公司备案,包括官方备案(监管机构如 SEC、FDI 专利;新闻专线、网站和博客)、营销材料、社交媒体(YouTube)上发布的演示文稿。
- 政府机构数据 —专利、受监控的试验(FDA 或类似机构)、监管活动(EPA、DOE 或类似机构)、税务信息(IRS 或类似机构)。
有许多数据分发者积极地收集交易和其他公司数据,以匿名地聚集这些信息,用于进一步的处理和提炼。它奏效了: GoPro 股价在 2016 年 11 月下跌,当时对超过 300 万封电子邮件收件箱的产品收据进行了分析,结果表明该产品的主要销售点的销量下降。
传感器生成的替代数据
传感器从卫星上收集图像,并使用手机、CCTV 等其他设备和物联网(物联网)上的应用程序监控运动。有专门在港口或重要国际航线上,主要是在四大海上转运和咽喉要道,对各类船舶进行量化分组的公司。对船只和飞机活动数据的实时访问产生了对全球经济状况的全面了解。
移动应用程序(在数字设备上)为消费者和企业生成地理位置智能。并且,自动监控活动的物联网设备可以跟踪人体运动、降水信息和其他规律。来自无线和移动设备的流量——尤其是在新兴市场——正在快速增长,很可能会产生比我们现有的更多关于行为的见解。
传感器通常产生三种类型的替代数据:
- 卫星 —商场和制造业停车场信息
- 地理定位 —谁,在哪里,多长时间
- 其他传感器 —机器、温度和(CCTV)摄像机
数据的价值来自于它的使用。随着对冲基金、机构投资者、交易员和其他人寻找提高 alpha 的独特优势,通过数字活动产生的替代数据正在成为新的石油。替代数据增加的大部分价值增强了传统数据;然而,随着信噪比的提高,替代数据很可能成为主要的信息来源。
我如何使用聚类分析来自优步的拼车数据
原文:https://towardsdatascience.com/how-does-uber-use-clustering-43b21e3e6b7d?source=collection_archive---------7-----------------------
优步拼车数据分析
Photo by Viktor Bystrov on Unsplash
根据 Gartner 的数据,到 2020 年,2.5 亿辆联网汽车将成为物联网的主要组成部分。联网车辆预计每小时将产生 25GB 的数据,可以对这些数据进行分析以提供实时监控和应用程序,并将带来移动性和车辆使用的新概念。Ref: Gartner
优步科技公司是一个点对点乘车共享平台。优步平台连接可以开车到客户位置的出租车司机。优步使用机器学习,从计算定价到寻找汽车的最佳定位,以实现利润最大化。使用公共优步出行数据集讨论构建用于分析和监控汽车 GPS 数据的实时示例。
优步出行数据集,包含由优步从纽约市生成的数据。这些数据可以在五月三十八日免费获得。
数据来自纽约市,该市有五个区:布鲁克林区、皇后区、曼哈顿区、布朗克斯区和斯塔滕岛区。对该数据集应用 K-means 聚类,以了解在优步的旅行并识别纽约州内的不同行政区。
聚类是将数据集分成由相似数据点组成的组的过程。聚类是一种无监督的机器学习,当您有未标记的数据时使用。
这里,我们应用了 K-Means 聚类算法,其主要目标是将相似的元素或数据点分组到一个聚类中。K-means 中的“K”代表簇的个数。K-Means 算法的工作原理可以在这里查看。
本博客讨论了聚类算法在优步拼车数据集中的使用案例。总共确定了 6 个集群,但没有在本博客中讨论集群的有效性。主要侧重于解释和理解现实世界中的概念。
导入必要的库
优步皮卡数据可从 2014 年 4 月至 9 月的五月三十八日获得。这里,我使用了 2014 年 8 月的数据集进行解释。
读取 CSV 文件
输出
数据集有 829,275 个观察值和四列。它有四个属性,
- 日期/时间:优步提货的日期和时间。
- Lat(纬度):优步皮卡的纬度
- Lon(经度):优步皮卡的经度。
- 基地:隶属于优步皮卡的 TLC 基地公司代码。
选择功能
这里,在称为“clus”的独立数据帧中选择纬度和经度。
输出
我们正在应用 K 均值聚类。第一步是找到 k 的最佳值。这可以通过下图所示的肘形图找到。
输出
输出
从上面的肘形图中,我们可以看到,随着星团数量的增加,观测值与其最近的星团质心的平方距离之和不断减小。我们可以看到,在 K=6 之后,有一个显著的降低。我们可以选择 6 个或 7 个集群。为此数据集选择了 6。
执行 k 均值聚类
K-Means 算法中的聚类数分配
输出
存储聚类质心
将簇质心存储在另一个称为质心的对象中。
输出
我们可以从上面的输出中看到六个质心。例如,40.68,-73.96 是聚类 1 的质心,也就是质心 1 的纬度和经度值。类似地,我们也有其他星团的质心。
可视化质心
从质心提取纬度和经度,并转换成两个独立的数据框架。合并两个数据框,并将其命名为“clocation ”,以便于可视化。
输出
输出
在上面的散点图中,我们可以看到每个星团的所有质心。然而,这并没有显示任何有意义的信息。让我们在谷歌地图(纬度和经度)上画出同样的图,并可视化
这里,我们使用了一个叶子库来生成地图。传递质心并映射位置
输出
我们可以看到所有的六个质心都被绘制在地图上。这些质心对优步有什么帮助?
- 优步可以利用这些质心作为他们的枢纽。每当优步收到一个新的乘车请求,他们可以检查与这些质心的接近程度。无论哪个特定质心更近,优步都可以将车辆从该特定位置引导到客户位置。
- 优步有许多司机,为许多地方提供服务。如果优步知道中心(特定的质心),并且如果他们得到许多搭车请求,那么从战略上来说,他们可以将他们的司机放在得到搭车请求的概率很大的好位置。这将有助于优步更快地为客户服务,因为车辆放置在更靠近位置的地方,这也有助于发展他们的业务。
- 优步可以利用这些质心来优化放置他们的车辆。他们可以发现在一天中的哪个时段哪个质心有更多的乘车请求进来。例如,如果优步在上午 11 点从质心 0(聚类 1)获得更多请求,但是从质心 3(聚类 4)获得非常少的请求,则他们可以将车辆从聚类 4 重定向到聚类 1(如果在聚类 4 中有更多车辆存在)。
- 通过分析哪个集群处理最大请求、高峰时间等,优步可以使用这些质心进行最优定价。假设,如果他们没有太多的车辆被送到一个特定的位置(更多的需求),那么他们可以在需求高而供应少的情况下进行最优定价。
存储集群
存储聚类并将其合并到原始数据集中
输出
哪个集群接收最大乘坐请求?
对集群总数进行分组和可视化
输出
集群 3 收到最大游乐设备请求,之后是集群 1。集群 4 收到的请求最少。优步可以在集群 3 中放置更多的车辆来满足更高的需求。
正在检查新位置
source: macobserver
如果优步获得一个新的乘车请求(通过经度和纬度获得他们的新位置),然后传递纬度和经度值,那么它将预测车辆应该去哪个集群?
输出
传递新的请求纬度和经度值(40.65,-73.56)。新请求将被分配给聚类 2,因为与其他质心相比,它与聚类 2 的质心的距离是最小的。车辆将来自集群 2。
在这里,我们只收集了 2014 年 8 月与五个区相关的数据。在一个实时,我们有更多的质心(纬度和经度)作为优步在许多国家和地区提供服务。这些质心将作为限定区域内所有乘车请求的枢纽。
以上显示了 K-Means 聚类如何帮助优步公司获得最优定价和汽车的最优位置,以便更快地为客户服务并发展业务。
请继续学习,并关注更多内容!
动态定价算法如何将毛利提高+10%
原文:https://towardsdatascience.com/how-dynamic-pricing-algorithms-can-increase-gross-profit-by-10-690a4856bed9?source=collection_archive---------12-----------------------
数据科学正在帮助巴西石油和天然气行业克服影响该国的经济危机带来的挑战。
由于经济危机和技术革命,巴西的石油天然气行业一直面临着挑战。这些是主要的棘手问题:
1.燃料转售部门处于供应链双方利润受限的背景下:
上游部门通过增加燃料采购成本降低了加油站的利润。
消费者面临有限的家庭预算,对价格越来越敏感,这使得经销商很难转嫁成本上涨。
2.移动应用程序(如 Waze)正在为消费者提供实时价格信息,允许客户在加油前找到该地区最近和最便宜的加油站。
3.半公开的巴西跨国石油公司 Petrobras 已经实施了一项新定价政策,允许价格根据国际大宗商品价格的波动而变动。这项始于 2016 年并在随后几年得到强化的新政策,带来了燃料采购成本的新动态。经销商不知道如何应对,因为在几十年的高监管价格期间,巴西的这一行业已经被整合。
这些因素加在一起,给这个利润率处于历史低位的行业带来了更大的利润压力。考虑到高度竞争和动态的环境,经销商必须根据多个变量对泵价格进行日常决策。其中包括:燃料购买成本、税收、竞争对手的定位、车辆流量、星期几,以及最重要的消费者的支付意愿。
支付意愿用弹性的概念表示。这个概念试图从数学上回答如果价格降低 X %,需求增加的百分比是多少?如果价格上涨,需求下降的百分比是多少?
用科学来回答这些问题是成功优化定价的必要条件。这是动态定价算法的目标。
通过利用大型数据库,有可能识别和隔离弹性的影响。然后,我们可以模拟不同价格和市场情景下的需求反应,并根据业务战略目标优化价格决策,获取利润或销量。每日循环包括以下步骤:(1) 建模 , (2) 模拟,( 3)优化。随着需求反应的发生,算法会更新用于计算的系数,并根据自己的预测和建议的成功率进行相应的学习。
不同的机器学习技术可用于步骤(1)建模,例如:岭回归、ARIMAX、卡尔曼滤波器和神经网络。这一步的成功取决于提出正确的问题。例如,ARIMAX 技术对于作为价格函数的需求预测非常有效(“X”是一组与价格相关的外生变量)。然而,如果我们要回答的问题是“弹性效应的价值是什么?”像岭回归这样的技术可能更好。即使在该模型中需求预测不太确定,该算法也能够更好地分离弹性效应的系数。
经过几个月的开发和实施,定价初创公司 Aprix 开发出了一种用于动态燃料定价的先锋人工智能。该企业与巴西的主要燃料经销商合作。当将使用该算法的加油站与继续使用传统定价方法(基于 Excel 电子表格)的加油站进行比较时,使用该算法的集团实现了毛利的平均增长 +9.6%。
该技术使加油站能够在新的高度竞争环境中生存,将威胁转化为机遇。
尽管石油和天然气行业仍然由传统企业组成,但毫无疑问,定价的未来是基于人工智能的,并且它在全球范围内获得了越来越大的空间。动态定价算法已经在燃料零售中使用,主要是在英国和美国。Aprix 是在巴西建设这个未来的人。
面对这种趋势,我们在 Aprix 每天都会问这样一个问题:
接下来哪些行业将使用动态定价算法来提高盈利能力?
企业如何使用人工智能解决方案来提高效率
原文:https://towardsdatascience.com/how-enterprise-can-use-ai-powered-solution-to-increase-efficiency-aa672d16d246?source=collection_archive---------32-----------------------
Image Source: https://unsplash.com/@chuttersnap
E 企业正在业务中实施人工智能(AI ),以打破挑战并创建更具适应性的流程。在商业利益中利用人工智能的力量释放新的洞察力以提高效率。 众所周知,这项先进技术已经改变了各个垂直行业的面貌。这有助于增强员工的能力,同时让客户体验到快乐。
使用人工智能的趋势有助于优化和加速复杂的任务,同时改善客户体验和推动转化。 免下车人工智能作为企业的核心,能够在捕捉全新机遇的同时做出更好的决策。 《福布斯》报道称,营销和销售部门优先考虑人工智能(AI)和机器学习(ML),超过企业中的任何其他部门(40%)。
用 AI 克服传统的非智能营销策略。因此,如今的企业正在推出更加智能的 定制移动应用开发 来提供卓越的客户体验。
企业使用人工智能解决方案提高效率的方法
人工智能被用于媒体和娱乐、零售和消费品等行业,以推动收入增长。人工智能正在帮助企业时刻保持相关性,以捕捉新的参与和增长机会。
改善用户体验
值得注意的是,营销人员发现平衡高销售和转化率的愿望总是一个挑战。人工智能可以通过发展基于 UX 的功能来改善用户体验。
Image Source: https://unsplash.com/@fourcolourblack
用户体验很大程度上取决于企业网站或 App 是如何表现的。因此,企业可以实施人工智能来提升其网站和应用的 UX/UI 体验。 此外,它还见证了顾客更有可能与品牌互动,提供更好的实时互动。UX/用户界面必须有足够的吸引力来抓住每个人的注意力。
更好的个性化
提供个性化体验是开展有效营销活动的关键。 客户更容易与个性化营销策略互动。由于人工智能的集成,电子商务领域正在梳理。带有个性化主题行的信息最受顾客和客户的欢迎。带有品牌推广的个性化信息有助于企业将用户与过去的互动联系起来。因此,人工智能正在帮助预测和创造方法来增强用户体验。
利用潜在渠道
人工智能有潜力为新的营销渠道提供可能性。AI 的实施有助于数字营销渠道的增长。企业更倾向于采用人工智能解决方案,以自动找到成功几率最高的渠道。最棒的是,人工智能减轻了为每次营销活动手动选择最佳渠道的负担。基于品牌的实时交互有助于人工智能筛选潜在渠道,以锁定特定线索。此外,人工智能消除了对猜测、实验或依赖行业繁琐方法的需要。
有价值的数据洞察
大型企业组织正在处理大量关于其客户和贸易的有价值的数据。 人工智能的使用有助于很多企业了解数据集的完整体量。
Image Source: https://unsplash.com/@adeolueletu
这项先进的技术为处理和理解各个领域的数据提供了巨大的优势。 AI 为企业提供处理大型数据集,了解市场数据最新模式的能力。因此,使用人工智能业务可以从数据中获得有价值的见解,并提供个性化的体验。
最后的想法
人工智能解决方案正在提高企业的整体性能。无论是企业营销还是数据洞察,人工智能在各种意义上都很突出。虽然先进的人工智能看起来令人生畏,但人工智能作为一种先进技术,在现有系统中实现起来非常方便用户。 许多营销人员正在体验各个领域的人工智能解决方案的好处。人工智能可以揭示实时数据,为优化业务的整体增长提供新的战略和能力。
面部识别技术有多道德?
原文:https://towardsdatascience.com/how-ethical-is-facial-recognition-technology-8104db2cb81b?source=collection_archive---------0-----------------------
Photo by Alessio Ferretti on Unsplash
虽然面部识别技术可以追溯到 20 世纪 60 年代,其创始人伍德罗·威尔逊·布莱索(Woodrow Wilson Bledsoe)进行了创新,但直到最近 10 年,它才真正获得了自己的地位。
最新的解决方案,包括在 Iflexion 创造的解决方案,能够以惊人的准确度检测人群中的人脸。因此,它们被有效地用于刑事鉴定,并有助于确定失踪人员的身份。
然而,这种解决方案也招致了许多关于其应用的合法性和道德性的批评。在本文中,我们将深入探讨围绕面部识别的问题,并看看如何使这些技术对每个人都更安全。
Photo by Steinar Engeland on Unsplash
面部识别技术的潜力
为了全面评估面部识别的道德和法律方面,首先理解用例是至关重要的。下面是一些例子。
抓捕罪犯
早在 2009 年,美国大约有3000 万个监控摄像头在使用,现在这个数字已经呈指数级增长。想象一下,如果这些据说在一周内平均拍摄 40 亿小时记录的相机与面部检测系统集成在一起。
这是对以前系统的升级,以前的系统利用数据库(DMV,犯罪数据库,甚至是借书证)将一个人与静态照片(如面部照片)进行匹配。
从理论上讲,这将是一个非常有效的系统,可以找到那些犯罪的人——想想波士顿爆炸案、校园枪击案和其他对社会构成直接威胁的罪犯。
寻找失踪人员
当人们失踪时,在几率显著降低之前,找到他们的时间是有限的。许多调查的出发点之一是尽可能接近失踪时间地追踪此人的活动。
同样,当与面部检测软件结合使用时,在这里使用监控摄像头可以有效地找到这个人,并通过摄像头网络跟踪他们。
但这不是唯一的选择。2018 年,在众多批评中,发布了创新的面部识别技术,该技术可以自动识别照片中的人,即使他们不是照片的主题。
在失踪人口调查中,通过捕捉一个人的最后一瞥并确定他们的确切位置,这可能会带来突破。
医疗用途
面部识别技术在医学中得到积极应用。目前,面部识别技术被应用于基于面部扫描的配药,这是生物扫描的一项创新。
然而,最新的技术拥有更先进的东西——诊断能力。一些面部识别软件提供商声称,他们的产品可以通过识别关键的面部标志来帮助监测血压或疼痛程度,这可能证明是未来医生和最终用户的有用工具。
购买确认
想象一下再也不用带着你的卡去商店了。这是面部识别技术的未来。只要走到柜台,你的脸被扫描以识别你和你的关联银行账户,你的购买就完成了。
虽然这听起来很神奇,但对于我们这些容易健忘的人来说,这是一个真正的问题解决方案。然而,它的实现离真实世界的体验还有一段距离。
广告
个性化广告是未来。多亏了它,有一天你可以走进一家商店,看到你周围的标志根据你的需要而改变。
面部识别技术可以与在线分析和以前的购买相结合,为购物者量身定制体验,让他们更快地找到他们想要的东西。有点像亚马逊带入现实世界的网络体验。
Photo by Sebastian Pichler on Unsplash
面部识别技术的批评和风险
现在我们知道了这项技术的巨大潜力,是时候更深入一点,探索那些使用面部识别的人所面临的风险。再次浏览这个列表,我们会发现它的缺点并提出改进的方法。
抓捕罪犯
—毫无疑问,找到“坏人”是个好主意。然而,被设定为辅助的同一系统容易被滥用。我们来探索一下。
- 准确性——引用纽约时报记者史蒂夫·洛尔、“如果你是个白人,面部识别是准确的。”如果你不这样做,它会变得更加不准确。该系统自然会歧视非白人、妇女和儿童,对非白人妇女的误差高达 35%。
根据美国联邦调查局的最新报告,美国白人犯罪最多,共有 5858330 起。所以这给其他种族留下了巨大的误差。
- 监控问题——除了准确性之外,这项技术面临的另一个重要问题是对其实施的滥用。
面部识别技术本身的功能可以被视为在一个事件中或在一个以前没有使用过的位置增加额外监控的借口。这引发了通常对“老大哥”监视社会的批评。
- 数据存储——一旦一个人被怀疑犯罪,他们的图像可能会被拍摄下来,通过面部识别技术在数据库中进行搜索。
虽然这本身不是一个问题,但它允许进行搜索的机构存储这些图像以供将来使用,如果这个人是无辜的,他可能会将他们的图像与真正的罪犯一起存储。
此外,它侵犯了一个人对自己形象的权利,尽管他是无辜的。
寻找失踪人员
—很少有人会认为帮助那些需要帮助的人这种感觉良好的因素是一种糟糕的激励因素。然而,使用类似于脸书生产的技术背后的含义可能会产生可怕的后果。
从伦理的角度来看,这多少侵犯了每个人的私生活权利。比方说,你去商店给你爱的人买礼物,但是不小心被别人抓拍并贴上标签,破坏了惊喜。这不是一个好的结果,而且可能比一个毁了的礼物更严重。
然而,据估计,目前这项技术(DeepFace)背后的算法大约有 97.35%的准确性,这意味着这项技术可能会继续存在,无论是好是坏。
医疗用途
—就药物分配而言,尽管这优化了系统,但它不考虑合格药剂师的人类知识和判断力。人类专业人员将能够检测一个人是否受到任何其他物质的影响,是否正在经历指示鉴别诊断的其他症状,或者甚至被其他人强迫获取药物。
看看其他的使用案例——血压和疼痛程度监测——虽然这些工具如果与有执照的医生一起使用,可能有助于预防疾病,但它们也可能被误用,如 WebMD,并引发不必要的健康问题。
除此之外,重要的是要记住,这种技术目前还处于早期测试阶段,可能在未来许多年都不会以任何有意义的方式随时可用。
购买确认
—在现代世界,我们非常清楚信用卡和借记卡欺诈,但面部身份欺诈呢?虽然像非接触式卡一样,轻松购买的承诺很吸引人,但它也带来了安全问题。
或者,想象一下一对长得很像但收入和银行存款不同的同卵双胞胎的情况。这听起来可能像是直接来自一部疯狂的喜剧电影,但这种金融威胁是真实的,使得通过面部识别进行购买验证在安全方面成为一个非常灰色的领域。
广告
—在亚马逊定制采购的启发下,面部识别广告可能成为各地营销部门的梦想。然而,对于整个社会来说,情况可能并不乐观。
在早期阶段,在识别年龄、性别和地点时,偏好可能是基本的,或者至少是基于不正确的信息。
在其发展的后期,当它变得更加个性化和与个人联系在一起时,这种类型的广告可能会通过显示购买者宁愿保密的信息和偏好而引起侵犯隐私的感觉。
此外,为了以任何方式有效,该系统将需要存储大量数据,这可能是不可行的或不道德的。
这是营销成功与社会责任的经典争论。
Photo by Sebastian Pichler on Unsplash
面部识别有什么法律?
既然我们已经发现了更多关于面部识别技术的道德问题,让我们从法律的角度,通过引发批评的三个不同的镜头来看待它——歧视、隐私和民主自由。
应该注意的是,在世界各地的许多司法管辖区,立法并不是针对面部识别技术的特性而制定的。
歧视
正如我们上面提到的,面部识别技术并不是 100%准确。事实上,在妇女、儿童和少数民族的情况下,这一准确率可能低至 65%。这表明该技术本质上是歧视性的,因为它的结果不太理想。
虽然随着人工智能技术扫描和“发现”更多样化的面孔,这种情况可能会随着时间的推移而改变,但目前它有可能违反种族歧视法。
隐私
针对面部识别的最新法律之一是商业面部识别隐私法案,于 2019 年 3 月提交给美国参议院。该法案旨在实施法律变革,要求公司在获取面部识别数据之前告知。
这是继伊利诺伊州的生物特征信息隐私法案(BIPA) 之后。虽然没有特别针对面部识别,但该法案要求组织获得同意以获取生物特征信息,并且同意必须是平权行动的结果,而不是默认。
即使在今天,面部识别技术的提供商,如脸书、俄罗斯社交媒体网站 VK 和国家机构,也需要了解其管辖范围内有关个人隐私的法律,以及他们需要在内部和外部采取什么措施。
民主自由
我们将讨论的最后一个法律问题是面部识别技术和民主自由的作用。民主自由背后的原则意味着拥有选择的权利,收集和分享观点的自由。尽管面部识别技术有许多用途,但这是一个被它带走的领域。
这种技术通常在云中收集和存储大量信息。这引发了信息安全问题和政府积极监视其公民的威胁。
虽然这听起来完全像乔治·奥威尔的《1984》中的东西,但目前的技术正在接近实现这一目标。这是一个需要在当前民主自由法之外进行专门立法的问题。
面部识别技术使用技巧
尽管直接针对面部识别的立法尚不发达,但寻求采用该技术的公司和国家行为者应考虑这两个因素,以便站在道德和法律的正确一边:
提供通知
如果您的场所、活动或应用使用面部识别技术,确保您的用户和客户知道这一点至关重要。这样做有助于告知他人这种技术已经到位。它还允许那些访问或使用您的设施或技术的人决定他们是否希望继续这样做。
征求同意
积极寻求同意可以保护您和您的组织不违法,并允许您的客户控制他们的隐私并为自己做出选择。
UMAP 到底是如何运作的
原文:https://towardsdatascience.com/how-exactly-umap-works-13e3040e1668?source=collection_archive---------1-----------------------
生命科学的数理统计和机器学习
为什么它比 tSNE 更好
这是专栏 生命科学的数理统计和机器学习 中的第 12 篇文章,我试图在这里涵盖生物信息学、生物医学、遗传学等常用的分析技术。今天我们将深入探讨一种令人兴奋的降维技术,叫做 UMAP ,它主导了当今的 单细胞基因组学 。在这里,我将试着质疑关于 UMAP 的神话是一种过于数学化的方法,并用简单的语言解释它。在下一篇帖子里,我会展示 如何用 Python 从头开始编程 UMAP,还有(加成!)如何创造一种降维技术,提供比 UMAP 更好的可视化。然而,现在我们将从 UMAP 背后的直觉开始,并强调 tSNE 和 UMAP 之间的主要区别。
tSNE 死了。UMAP 万岁!
如果你不知道 tSNE 是什么,它是如何工作的,也没有读过 2008 年的原创革命性范德马滕&辛顿论文,你可能不需要知道,因为 tSNE 现在基本上已经死了。尽管总的来说,tSNE 对单细胞基因组学和数据科学产生了巨大的影响,但人们普遍认为它有一些迟早要解决的缺点。
到底是什么让我们对单细胞基因组学使用 tSNE 感到不舒服?这里我用简短的评论总结几点:
- tSNE 不能很好地缩放以快速增加 scRNAseq 中的样本大小。试图用 FItSNE 加速导致大量内存消耗使得不可能在计算机集群之外进行分析,参见我的banch marking for 10X Genomics Mouse Brain 1.3M 数据集。
- tSNE 不保留全局数据结构,这意味着只有集群内的距离才有意义,而集群之间的相似性则无法保证,因此人们普遍认为在 tSNE 上进行集群不是一个好主意。
- tSNE 实际上只能嵌入 2 或 3 维,即仅用于可视化目的,因此很难使用 tSNE 作为通用降维技术来生产例如 10 或 50 个组件。请注意,这仍然是更现代的fits ne算法的问题。
- tSNE 执行从高维度到低维度的非参数映射,这意味着它不利用驱动观察到的聚类的特征(也称为 PCA 加载)。
- tSNE 不能直接处理高维数据,在将数据插入 tSNE 之前,通常使用自动编码器或 PCA 进行预降维
- tSNE 为其计算消耗了太多的内存,这在使用大复杂度超参数时变得尤其明显,因为 k-最近邻初始步骤(像在 Barnes-Hut 过程中)对于减少时间变得不那么有效和重要。这个问题不是更现代的fits ne算法能解决的。
简要回顾 tSNE 的工作原理
tSNE 是一种相对简单的机器学习算法,可以由以下四个等式涵盖:
情商。(1)定义了高维空间中任意两点之间的观测距离满足对称规则的高斯概率。情商。(2)引入了困惑度的概念,作为确定每个样本的最优 σ 的约束。情商。(3)为低维嵌入中的点对之间的距离声明学生 t 分布。学生 t 分布的重尾在这里是为了克服嵌入低维时的拥挤问题。情商。(4)给出了将高维概率投影到低维概率上的 Kullback-Leibler 散度损失函数,以及在梯度下降优化中使用的梯度的解析形式。
只看上面的图,我会说,学生 t 分布的厚尾应该提供全局距离信息,因为它们将高维度中相距较远的点推到低维度中相距更远的点。然而,这种良好的意图被成本函数(KL-divergence)的选择所扼杀,我们将在后面看到为什么。
多伦多和 UMAP 的主要区别
当我听说 UMAP 时,我的第一印象是这是一种完全新颖和有趣的降维技术,它基于坚实的数学原理,因此与 tSNE 非常不同,tSNE 是一种纯机器学习半经验算法。我的生物学同事告诉我,最初的 UMAP 论文太数学化了,看着论文的第二部分,我很高兴看到严格而精确的数学终于来到了生活和数据科学中。然而,在阅读 UMAP 文档和观看李兰麦金尼斯在 SciPy 2018 上的演讲时,我感到困惑,觉得 UMAP 是另一个邻居图技术,它与 tSNE 如此相似,以至于我很难理解 UMAP 与 tSNE 到底有什么不同。
从 UMAP 的论文来看,UMAP 和 tSNE 之间的差异不是很明显,即使利兰·麦金尼斯试图在附录 c 中对它们进行总结。我宁愿说,我确实看到了一些小的差异,但目前还不清楚为什么它们会在输出中产生如此显著的影响。在这里,我将首先总结一下我注意到的 UMAP 和 tSNE 的不同之处,然后试着解释为什么这些不同很重要,并找出它们的影响有多大。
- UMAP 在高维度中使用指数概率分布,但是不一定是像 tSNE 那样的欧几里德距离,而是可以插入任何距离。此外,概率是未归一化的:
这里的 ρ 是一个重要的参数,表示每个第 I 个数据点到其第一个最近邻的距离。这确保了管汇的局部连通性。换句话说,这为每个数据点提供了一个局部自适应指数内核,因此距离度量从点到点变化。
ρ 参数是 UMAP 论文中第 2 节和第 3 节之间的唯一桥梁。否则,我看不出模糊单纯集构造,即第 2 节中的奇特的拓扑数据分析与第 3 节中的 UMAP 的算法实现有什么关系,因为看起来在一天结束时模糊单纯集导致最近邻图构造。
- UMAP 没有将标准化应用于高维或低维概率,这与 tSNE 非常不同,感觉很奇怪。然而,仅从高维或低维概率的函数形式中,人们可以看到它们已经针对段[0,1]进行了缩放,并且结果是没有归一化,如同等式中的分母。(1),极大地减少了计算高维图形**的时间 ,因为求和或积分是计算上昂贵的过程。想想马尔可夫链蒙特卡罗(MCMC) 它基本上试图近似计算贝叶斯法则分母中的积分。**
- UMAP 使用最近邻居的数量而不是困惑度。而 tSNE 根据等式定义了困惑。(2)UMAP 在没有 log2 函数的情况下定义了最近邻数 k ,即:
- UMAP 使用了高维概率的略微不同的对称化****
对称化是必要的,因为在 UMAP 将具有局部变化的度量的点粘合在一起(通过参数 ρ )之后,A 和 B 节点之间的图的权重可能不等于 B 和 A 节点之间的权重。为什么 UMAP 使用这种对称化,而不是 tSNE 使用的对称化,这一点还不清楚。我对不同对称化规则的实验(我将在下一篇文章(从头开始编程 UMAP)中展示)并没有让我相信这是如此重要的一步,因为它对最终的低维嵌入影响很小。
- UMAP 使用曲线族 1/(1+a y^(2b*)在低维中建模距离概率,不完全是学生 t 分布,但非常非常相似,请再次注意没有应用归一化:
其中 a ≈1.93, b ≈0.79 为默认 UMAP 超参数(实际上为 min_dist = 0.001)。在实践中,UMAP 用 min_dist 超参数从非线性最小二乘拟合到分段函数找到 a 和 b :
为了更好地理解曲线族 1/(1+a y^(2b*)的行为,让我们为不同的 a 和 b 绘制一些曲线:
我们可以看到,曲线族对参数b非常敏感,大体上 b 在小 y 处形成一种平台。这意味着在 UMAP 超参数 min_dist 以下,所有数据点都是同等紧密连接的。由于 Q(Y)函数的行为几乎类似于亥维赛阶梯函数,这意味着 UMAP 为低维空间中彼此靠近的所有点分配几乎相同的低维坐标。 min_dist 正是导致在 UMAP 降维图中经常观察到的超紧密聚集的簇的原因。****
为了演示如何精确地找到 a 和 b 参数,让我们显示一个简单的分段函数(其中平台部分通过 min_dist 参数定义)并通过 Scipy Python 库的 optimize.curve_fit 使用函数族 1 / (1+ ay ^(2 b )对其进行拟合。作为拟合的结果,我们获得了函数 1/(1+a y^(2b*)的最优 a 和 b 参数。*
- UMAP 使用二元交叉熵(CE)** 作为代价函数,而不是像 tSNE 一样使用 KL-divergence。**
在下一节中,我们将展示 CE 成本函数中的这一额外(第二)项使 UMAP 能够捕获全局数据结构,这与 tSNE 只能以中等困惑值对局部结构建模形成对比。由于我们需要知道交叉熵的梯度,以便稍后实现梯度下降,所以让我们快速计算一下。忽略仅包含 p ( X )** 的**常数项,我们可以重写交叉熵并区分如下:****
- 与 tSNE 使用的随机法线初始化相比,UMAP 使用图拉普拉斯分配初始低维坐标。然而,这应该会对最终的低维表示产生** 的微小影响,这至少是 tSNE 的情况。然而,这将使 UMAP 在每次运行时变化较小,因为它不再是随机初始化的**。通过图拉普拉斯算子进行初始化的选择是由林德曼和斯坦纳伯格的有趣的假设激发的,他们建议在 tSNE 的初始阶段最小化 KL 散度与早期夸张等价于构造图拉普拉斯算子。****
图拉普拉斯、谱聚类、拉普拉斯特征图、扩散图、谱嵌入等。参考实际上相同的有趣方法,该方法结合了矩阵分解和邻居图方法来解决降维问题。在这种方法中,我们从构建一个图(或 knn 图)开始,并通过构建拉普拉斯矩阵,用矩阵代数(邻接矩阵和度矩阵)将其形式化,最后我们分解拉普拉斯矩阵,即解决特征值分解问题。
我们可以使用 scikit-learn Python 库,并在演示数据集上使用 SpectralEmbedding 函数轻松显示初始低维坐标,该数据集为癌症相关成纤维细胞(CAFs) scRNAseq 数据:
- 最后,UMAP 使用随机梯度下降(SGD) 而不是像 tSNE / FItSNE 那样的常规梯度下降(GD) ,这既加快了计算速度,又消耗了更少的内存。
为什么 tSNE 只保留局部结构?
现在让我们简要讨论一下为什么他们说 tSNE 只保留数据的本地结构。可以从不同的角度理解 tSNE 的局部性。首先,我们在等式中有 σ 参数。(1)这设定了数据点彼此“感觉”的局部程度。由于成对欧几里德距离的概率呈指数衰减,在 σ 的小值处,对于远点(大 X) 基本上是 零,并且仅对于最近的邻居(小 X) 增长非常快。相比之下,在大的 σ 处,远点和近点的概率变得可比较,并且在极限 σ →∞处,对于任何一对点之间的所有距离,概率变得等于 1,即点变得等距。
有趣的是,如果我们在 σ →∞处将高维空间中成对欧几里德距离的概率展开成泰勒级数,我们会得到二次近似下的幂律:
关于成对欧几里德距离的幂律类似于【MDS】多维标度的成本函数,已知其通过试图保持每对点之间的距离来保持全局距离,而不管它们是否彼此远离或靠近。人们可以将此解释为逍遥法外 σ tSNE 确实考虑了数据点之间的长程相互作用,因此说 tSNE 只能处理局部距离并不完全正确。然而,我们通常通过有限的困惑值来限制自己,Laurens van der Maaten 建议将 困惑值设置在 5 到 50 之间,尽管在局部和全局信息之间的一个很好的折衷可能是选择大约遵循 平方根定律≈n^(1/2)的困惑,其中 n 是样本大小。在相反的极限中, σ → 0,我们在高维概率的行为中以极端“定域性”结束,这类似于狄拉克δ函数行为。
理解 tSNE 的“局部性”的另一种方法是考虑 KL-divergence 函数。假设 X 是高维空间中的点之间的距离,而 Y 是低维距离,让我们尝试绘制它:
根据 KL-散度的定义,方程。(4):
方程式中的第一项。(9)大 X 和小 X 的是否都接近零。对于小 X,它变为零,因为指数变得接近 1,log(1)=0。对于较大的 X,这一项仍然趋向于零,因为指数前因子趋向于零的速度比对数趋向于∞的速度快。因此,为了直观地理解 KL-散度,只考虑第二项就足够了:
这是一个看起来很奇怪的函数,让我们画出 KL(X,Y):
该函数具有非常不对称的形状。如果高维度中的点之间的距离 X 很小,则指数预因子变为 1,对数项表现为 log(1+ Y ^2),这意味着如果低维度中的距离 Y 很大,将会有一个大的损失,因此 tSNE 试图在小 x 处减少 y,以便减少损失。相反,对于高维空间中的大距离 X,Y 基本上可以是从 0 到∞的任何值,因为指数项趋向于零,并且总是胜过对数项。因此高维空间中相距甚远的点在低维空间中可能会彼此靠近。因此,换句话说,tSNE 不能保证高维空间中相距很远的点在低维空间中仍然相距很远。但是,它确实保证了在高维度中彼此接近的点在低维度中仍然彼此接近。所以 tSNE 并不擅长将大距离投影到低维中,所以如果 σ 不到达【】,那么只保留本地数据结构。****
为什么 UMAP 能保留全球结构
与 tSNE 相反,UMAP 使用交叉熵(CE)** 作为成本函数,而不是 KL 散度:**
这导致局部-全球结构保存平衡的巨大变化。在 X 的小值处,我们得到与 tSNE 相同的限制,因为第二项由于预因子和对数函数比多项式函数慢的事实而消失:
因此 Y 坐标被迫变得很小,即 Y → 0,以使惩罚最小化。这与 tSNE 的行为完全一样。然而,在大 X 的相反极限,即 X →∞时,第一项消失,第二项的前因子变为 1,我们得到:
这里,如果 Y 很小,我们会因为对数的分母中的 Y 而得到很高的惩罚,因此 Y 被鼓励变大,使得对数下的比率变为 1,我们得到零惩罚。因此我们得到了 Y → ∞ at X → ∞因此当从高维空间移动到低维空间时全局距离被保留,这正是我们想要的。为了证明这一点,让我们绘制 UMAP 消费电子成本函数:
在这里,我们可以看到图的“右边”部分看起来相当类似于上面的 KL-divergence 曲面。这意味着在低的 X 时,我们仍然想要低的 Y 以减少损失。然而,在大的 X 处, Y 距离确实也想变大,因为如果它很小,CE (X,Y)损失将是巨大的。请记住,以前,对于 KL (X,Y)曲面,我们没有任何高低 Y 自由 X 之间的惩罚差异。这就是为什么 CE (X,Y)代价函数能够保持全局距离以及局部距离。
为什么 UMAP 比多伦多快
我们知道,当涉及 a)大量数据点,b)大于 2 或 3 的嵌入维数,c)数据集中大量环境维数时, UMAP 比 tSNE 更快。在这里,让我们试着理解 UMAP 优于 tSNE 的优势是如何来自数学和算法实现的。
tSNE 和 UMAP 基本上都由两个步骤组成。
- 使用二分搜索法和固定数量的最近邻来构建高维度的图并计算指数概率的带宽 σ 。
- 通过梯度下降优化低维表示。第二步是算法的瓶颈,它是连续的并且不能多线程。既然 tSNE 和 UMAP 都做了第二步,为什么 UMAP 比 tSNE 做得更有效率还不明显。
然而,我注意到 UMAP 的第一步比 tSNE 快得多。这是因为两个原因。
- 首先,我们在最近邻数量的定义中去掉了对数部分,即不像 tSNE 那样使用全熵:
由于在算法上对数函数是通过泰勒级数展开来计算的,并且由于对数函数比线性函数慢,实际上在线性项前面放一个对数前因子并不会增加太多,因此最好完全跳过这一步。
- 第二个原因是我们省略了高维概率的归一化,也就是等式 1 中使用的归一化。(1)对于 tSNE。这小小的一步实际上对表演产生了戏剧性的影响。这是因为求和或积分是一个计算昂贵的步骤。
接下来, UMAP 在第二个台阶上也变得更快了。这种改善也有几个原因:
- 应用随机梯度下降(SGD)代替常规梯度下降(GD) ,如 tSNE 或 FItSNE。这提高了速度,因为对于 SGD,你从样本的随机子集计算梯度,而不是像常规 GD 那样使用所有样本。除了速度之外,这还减少了内存消耗,因为您不再需要在内存中保存所有样本的梯度,而是只保存一个子集的梯度。
- 我们不仅跳过了高维概率的归一化,还跳过了低维概率的归一化。这也省略了第二阶段昂贵的求和(优化低维嵌入)。
- 由于标准 tSNE 使用基于树的算法进行最近邻搜索,因此生成超过 2-3 个嵌入维度的速度太慢,因为基于树的算法随着维度的数量呈指数级增长。这个问题在 UMAP 通过降低高维和低维概率的标准化得到了解决。
- 增加原始数据集中的维数,我们在数据上引入稀疏性,即我们得到越来越碎片化的流形,即有时有密集区域,有时有孤立点** (局部破碎流形)。UMAP 通过引入局部连通性 ρ 参数解决了这个问题,该参数通过引入考虑了局部数据连通性的自适应指数核将稀疏区域(在某种程度上)粘合在一起。这正是为什么 UMAP 可以(理论上)处理任意数量的维度,并且在将其插入主降维过程之前不需要预降维步骤(自动编码器,PCA) 的原因。**
摘要
在本帖中,我们了解到尽管 tSNE 服务 单细胞研究领域多年,但它有太多的缺点,如速度和缺乏全局距离保持。UMAP 总体上遵循 tSNE 的理念,但引入了许多改进,例如另一个成本函数以及高维和低维概率归一化的缺失。
请在下面的评论中告诉我,生命科学中的哪些分析对你来说似乎是 T2 特别神秘的,我会在这个专栏中尝试回答这些问题。在 Medium 关注我,在 Twitter @NikolayOskolkov 关注我,在 Linkedin 关注我。下次我们将讲述 如何从零开始给 UMAP 编程 ,敬请关注。
Numpy 到底有多快,为什么?
原文:https://towardsdatascience.com/how-fast-numpy-really-is-e9111df44347?source=collection_archive---------4-----------------------
与标准 Python 列表的比较。
Photo by Lukas on Unsplash
最初 Python 不是为数值计算而设计的。随着人们开始使用 python 完成各种任务,对快速数值计算的需求也随之增加。一群人在 2005 年创建了 Numpy 来应对这一挑战。
在人工智能时代的今天,如果没有 Numpy 这样的快速数字库,就不可能训练机器学习算法。
以下是 Numpy 速度快背后的主要原因。
- Numpy 数组是密集存储在内存中的相似数据类型的集合。一个 Python 列表可以有不同的数据类型,这在对其进行计算时会带来很多额外的约束。
- Numpy 能够将一个任务分成多个子任务,并并行处理它们。
- Numpy 函数是用 c 实现的,这也使得它比 Python 列表更快。
在这篇博客中,我们将对 Numpy 数组和 Python 列表执行以下计算,并比较两者所用的时间。
- 添加标量
- 点积
- 串联
- 删除
让我们先导入 Numpy 包。
import numpy as np
添加缩放器
让我们创建一个包含 10000 个元素的 Python 列表,并为列表中的每个元素添加一个标量。
现在创建一个包含 10000 个元素的 Numpy 数组,并为数组的每个元素添加一个标量。
对于这种计算,Numpy 的执行速度比 Python list 快 5 倍。
这个计算是在一个大小为 10000 的数组上执行的。让我们看看不同大小的阵列的时间是如何变化的。下图显示了 Numpy 数组在不同数组大小下速度更快的次数。
当数组大小接近 5,000,000 时,Numpy 的速度提高了大约 120 倍。随着数组大小的增加,Numpy 能够执行更多的并行操作,从而加快计算速度。
点积
点积是机器学习算法中最重要和最常见的运算之一。特别是在神经网络训练中,我们需要做大量的矩阵乘法。
现在我们来比较一下点积的速度。
Numpy 大约快 10 倍。让我们画出不同阵列大小的速度。
我们看到点积更快。这大约是我们转向大型阵列时的 140 倍。
串联
现在我们连接两个数组。我们来对比一下速度。
我们看到连接速度几乎是相似的。即使对于不同的数组大小,连接所用的时间也几乎是相似的。
Python 列表可以通过附加一个或多个列表来扩展。但是我们不能扩展现有的 Numpy 数组。当我们连接 2 个 Numpy 数组时,一个新的结果数组被初始化。所以在 python 列表中拼接操作相对更快。
删除
我们在这里花点时间,猜猜在执行删除操作的时候哪个东西会更快?
即使对于删除操作,Numpy 数组也更快。随着数组大小的增加,Numpy 比 Python List 快 30 倍左右。
因为 Numpy 数组由于其同构类型而被密集地打包在内存中,所以它也可以更快地释放内存。
因此,总的来说,在 Numpy 中执行的任务比标准 python 列表快 5 到 100 倍,这在速度上是一个巨大的飞跃。
在下一篇文章中,我将解释 Numpy 数据中的轴和维度。
[## 了解轴和维度| Numpy |熊猫
知道如何沿数据的不同轴应用函数。
towardsdatascience.com](/understanding-axes-and-dimensions-numpy-pandas-606407a5f950)
联合学习将如何彻底改变人工智能
原文:https://towardsdatascience.com/how-federated-learning-is-going-to-revolutionize-ai-6e0ab580420f?source=collection_archive---------6-----------------------
介绍
今年我们观察到了一个惊人的天文现象,这是第一次看到黑洞的照片。但是你知道这个黑洞在 5000 万光年之外吗?为了拍摄这张照片,科学家们需要一个和地球一样大的单圆盘望远镜!由于实际上不可能制造出这样的望远镜,他们将世界各地的望远镜网络聚集在一起——由此制造的事件视界望远镜是一个大型计算望远镜,其孔径与地球的孔径相同。
这是分散计算的一个很好的例子,它展示了分散学习的力量,这也可以在其他领域加以利用。
基于同样的原则,人工智能中出现了一个新的框架,它有能力在数百万台设备上进行计算,并整合这些结果,以提供更好的预测,增强用户体验。欢迎来到联合(分散)机器学习的时代。
什么是联合(分散)机器学习?
我们一会儿就到了。但首先,我们需要了解什么是传统的或集中式的机器学习。
集中式机器学习
世界上有数十亿台移动设备,这是一个计算能力巨大的时代。随着廉价计算能力的发明,我们已经有了硬件容量相当于笔记本电脑的手机。用不了多久,你的口袋设备将拥有 GPU(图形处理单元),它们将能够轻松地训练深度神经网络。
世界上几乎每个人都有个人设备,因此我们正在见证数据量的新一轮激增,这是过去从未观察到的,并且正在以指数速度增长。随着数据以不断增长的速度生成,它为提供更准确和个性化的 ML 模型开辟了新的可能性,这些模型可以增强客户体验并帮助他们做出决策。
集中式机器学习就是使用“训练数据”——样本数据——创建一种算法,以识别其中的模式和趋势。然后,机器使用算法来“学习”这种模式,并在类似于样本数据的更大数据块中识别它们(更详细的解释此处)
让我们现在进入细节。这个过程包括五个步骤
- 问题的识别
- 解决问题的数据准备
- 在中央服务器或机器上训练 ML 算法
- 将训练好的模型发送到客户端系统(或者提供公开 API 的 ML 服务)
- 对看不见的数据开始结果预测
因此,在当前的 ML 世界中,模型训练的方法是集中的。集中式培训要求将数据存储在一个中央位置或数据服务器上,从而限制了访问权限,也增加了安全隐患(如果这些数据被黑客攻击了怎么办!).
有没有想过谷歌地图是如何在恰当的时候建议替代路线的?三个词——实时计算
谷歌在其服务器上收集了数百辆已经经过你正在经过的同一条路线的车辆的数据,计算出大多数人选择的最佳路线,并将这些信息传递给你——让你的生活变得更容易(不客气)。
集中学习的局限性
Figure 2: Google Maps Route Suggestions
但是这些惊人的灵活性的代价是大多数人都没有意识到的。将数据存储在中央服务器上不仅会导致侵犯用户隐私,还会带来泄露其他个人数据的风险。大多数时候,用户数据存储在大公司拥有的云上,而他们甚至不知道。通过交换隐私,用户可以获得更好的、更个性化的应用程序。
不同国家的政府已经注意到这些隐私问题,并提出了严格的措施来确保数据隐私。其中包括 HIPAA——医疗保健行业的健康保险便携性和责任法案,以及 GDPR——通用数据保护法规。这些限制了任何组织对用户数据的访问,直到用户明确许可(通常是书面许可)。
那么,依靠个人数据生存的组织会怎么做呢?!初创企业和公司越来越难以构建能够为用户提供更好的个性化结果的应用。所有的 ML 应用都基于简单的逻辑,你输入的数据越多,它得到的数据就越准确,它返回的结果就越好,越个性化。如果不是通过对大量用户数据进行训练来构建,这些结果通常会很差且不个性化。这导致用户群体对新应用的适应性降低。
对于用户和组织来说,这些问题都可以在联合学习的帮助下得到解决。
回到最初的问题——什么是联合学习,它将如何提供帮助?
联邦学习是人工智能的一个新分支,它为机器学习的新时代打开了大门。
它可以利用现代世界中可用的“分散数据”(数据不存储在一个位置,因此容易受到攻击)和“分散计算能力”,在不损害“用户隐私”的情况下提供更个性化的体验。
现在可以通过同态加密在客户端和服务器之间共享信息,而不会损害用户隐私(参见 Andreas Poyiatzis 的文章)。简而言之,通过同态加密,现在可以在远程服务器位置对加密数据执行计算(不侵犯隐私),同样加密的计算结果将被发送回客户端,客户端可以解密个性化结果,而无需担心泄露其隐私。
它是如何工作的?
Figure 3: How Federated Learning works?
不要被复杂的图表所困扰。事情是这样的。
典型的联合学习解决方案从在位于中央的服务器中训练通用机器学习模型开始,该模型不是个性化的,而是作为基线开始。接下来,服务器将该模型发送到用户设备(步骤 1),用户设备也称为客户端(根据应用程序的用户群,客户端可以从数百到数百万不等)。随着客户端系统生成数据,本地模型(在各自的用户设备上)随着时间的推移而学习并变得更好。
所有客户端定期将它们的学习发送到中央服务器,而不会将用户的个人数据暴露给服务器(步骤 2)。这是借助同态加密完成的。然后,服务器汇总来自客户端的新知识,并继续改进共享模型(步骤 3)。新的共享模型再次被发送回客户端的系统,相同的循环一次又一次地重复。随着时间的推移,位于中央服务器的共享模型变得越来越好,越来越个性化。
这种从用户个人数据中学习的艺术,没有任何暴露它的威胁,在未来有很大的潜力衍生出新的可能性。
联邦学习的未来
自动驾驶联网汽车可以利用联邦学习来安全驾驶。如果自动驾驶汽车利用过去 1 小时内穿过同一坑洞的所有汽车的信息,而不是仅仅基于一套预定的算法和规则来避免坑洞,那么它肯定能够在乘客的安全性和舒适性方面做出更好的决定。
未来 5 年将会是联合学习非常有趣的一年。我们将看到大量新的应用程序利用联合学习,以一种前所未有的方式增强用户体验。许多公司将站出来,提供一个快速开发联合学习应用程序的平台。我们将会看到这样一个时代,用户将会因为与大公司分享他们的本地知识而获得回报。
谷歌已经以 Tensorflow Federated 的形式分享了它的联合学习平台。目前它还处于萌芽阶段,但这是一个很好的学习平台。即将发布的版本将提供新的功能,使用户能够构建端到端可扩展的联邦机器学习模型。
OpenMined 是一家已经在这方面开始认真工作的公司。他们的方法确保了全面的数据保护以及对客户分享其学习成果的奖励。如果你想在这个领域探索更多,我建议你访问他们的网站。
位置智能在食品技术行业中的应用
原文:https://towardsdatascience.com/how-food-delivery-companies-leverage-location-data-to-improve-customer-experience-58470406e7ed?source=collection_archive---------12-----------------------
食品配送公司如何利用位置数据来改善客户体验并获得更好的市场份额
Photo by Robert Anasch on Unsplash
我们生活在这样一个时代,如果我们下班回家晚了,或者突然饥肠辘辘,需要速食,我们就不需要费心做饭了。从我们最喜欢的餐馆点餐从未如此简单。
从数字来看,预计食品配送市场有望在 2019 年增长至 50 亿美元,到 2023 年增长至 150 亿美元。像 Swiggy 和 Zomato 这样的公司已经在几乎所有的印度一线和二线城市开展业务,随着新的参与者采取差异化战略,这个市场可能会快速增长。
根据数据情报平台 KalaGato 的一份报告,截至 2018 年上半年,Swiggy 的市场份额为 36.40%,FoodPanda 紧随其后,份额为 32.02%。Zomato 的市场份额为 23.78%。尽管 Zomato 的市场份额较小,但它已经在全球 300 多个城市开展业务。【来源】
Source
许多因素影响或帮助食品科技公司发展业务。实时流量、订单准备时间、交付执行效率等等。时间和距离在完成交货的各个环节中起着非常重要的作用。
Source
我们使用地图来定位一个地方的日子已经一去不复返了。食品科技公司正在利用位置数据来改善他们组织的各个方面。让我们来看看其中的一些吧!
搜索和发现
食品科技公司使用位置数据来帮助他们的客户搜索或找到他们附近的新餐馆。他们通过查找哪些餐厅可以接受订单并在最长送货时间内送货上门来做到这一点。这就是所谓的 适用性。
这里的诀窍是找到合适的时间来确保送货,并提供足够多的餐厅选择,以便尽快计算出送货时间。
客户体验仍然是此类食品配送服务的重中之重。如果交付时间太长,或者如果用户没有看到很多餐馆,那么他/她可能不会在第一时间下订单!
交货任务
一旦你在手机上下单,离你最近的快递员就会把你的订单交给你。这背后有很多计算,例如送货主管的当前位置和餐厅之间的距离,以及到达客户位置所需的时间。
Source
Source
有时会出现餐馆从附近的顾客那里得到两份订单的情况。在这种情况下, 批处理 的概念开始发挥作用,单个交付执行人员被分配来交付两个订单。
如果一批订单中所有订单的交货时间与承诺给每个客户的估计交货时间相匹配,则称两个订单是可分批的。
最后一英里递送
最后一英里送货不仅仅是从餐馆到送货地点的旅程。食品科技公司使用他们自己的地图来精确计算估计的送货时间,其中甚至包括送货主管行驶“ ”最后一英里所用的时间(“ 例如从社交大门到顾客门口所用的时间)。
他们利用历史数据和实时信号来构建和改进自己的地图,以满足自己的需求。
优化交付成本和时间
食品配送是一个需要解决的复杂问题,因为它涉及到在维持良好的客户体验和保持高效率的订单交付之间找到平衡。他们通过优化时间、成本和路线来做到这一点,即使是在不可避免的情况下(如下雨、交通问题和可用交付执行人员减少)。
他们通过减少送货员在餐馆的等待时间(当食物正在准备时)或者通过减少送货员等待分配给他/她的下一个订单所花费的时间来最小化未被利用的时间来实现这个目标。
云厨房位置
随着“云厨房”的出现,就规模和技术进步而言,最后一英里配送正在市场上掀起巨大风暴。
位置智能和人工智能正在帮助他们预测客户的购买模式,并在离送货上门需求更多的地方最近的云厨房中准备库存。
实时地理围栏
汉堡王使用实时地理围栏和位置智能来寻找任何一家门店 600 英尺范围内的客户,以便在任何一家门店点餐时提供数字优惠券折扣。
通过这种方式,他们优化了客户参与度,这有助于他们提高知名度并有效赢得客户。【来源】
基于位置的广告
随着消费者对他们的数据越来越放松,食品科技公司正在利用这一点,并利用实时位置在正确的时间锁定正确的客户。
基于位置的广告有许多优点,如更好的实时数据,公司从中获得的牵引力非常高。例如,在他们最常订购午餐的地方(如大学或商业场所),他们可以对各种小吃店提供的早餐进行促销。
不仅仅是这些,公司还在使用位置智能来查找区域取消率,找到一个地区的食品和配送管理人员的需求和供应比率,并获得配送和餐厅客流量及其变化的快照。
观看这段视频,直观地了解食品科技公司如何利用地理位置来管理他们的业务!
折扣/优惠
一个受欢迎的餐馆预订平台 Eatigo 使用位置智能根据客户的位置和时间以及其他因素(如星期几和天气条件)向客户提供折扣。
其目的是确定客户是否愿意为获得大量折扣而旅行。例如,如果提供的折扣更高,一个人可能会旅行 10 公里左右。【来源】
实时交通监控
公司正在监控实时交通,以相对了解他们的商店和竞争对手之间的消费者步行交通模式。不仅如此,这些以“快速服务”闻名的品牌正在利用实时流量来更好地洞察钱包的相对份额、竞争对手的商店访问量和客户忠诚度。
实时流量监控还有助于他们跟踪任何会妨碍业务流程有效执行的不可预见的情况。它还可以帮助他们监控资源和人员流动,以便他们可以有效地处理任何危机情况,还可以减少浪费。
位置不仅仅是地图上的一个点。组织正在使用位置分析来扩大他们的业务。食品科技公司利用这些数据来识别趋势,并通过跟踪骑手活动来改善客户体验。您可以访问我们的网站或在 LinkedIn 上与我们联系,了解更多信息。
人们使用不同药物的频率如何?
原文:https://towardsdatascience.com/how-frequently-do-people-use-different-drugs-f29255dfb339?source=collection_archive---------15-----------------------
关于 最令人沮丧的一件事告诉你的孩子 ,来自前纽约时报记者间谍小说家的反大麻传单!)亚历克斯·贝伦森(Alex Berenson)最有趣的一点是,它最有趣的点几乎完全与其论题无关。这个中心思想——粗略地说,即大麻导致精神病和精神分裂症,而精神病导致暴力,因此大麻导致暴力——无论是表面上的还是事后的都不令人信服。
贝伦森在这本书里花了如此多的篇幅讨论这种紧张的论点令人沮丧,正是因为它对大麻及其支持者进行了有益的批评。 TYC 做了一件伟大的工作,例如,指出医用大麻主要是合法化的潜在障碍。虽然这种药物有医疗用途,但它们似乎很少出现在 T21——它肯定不像某些人所说的那样具有医疗价值。
同样,贝伦森强调了一些关于大量使用大麻频率的惊人数据。为了简洁起见,我将引用他在《华尔街日报》的专栏中从 TYC 推出的内容:
大量使用大麻的美国人数正在飙升。2006 年,约 300 万美国人报告每年至少使用该药物 300 次,这是日常使用的标准。到 2017 年,这一数字增加到 800 万——接近每天饮酒的 1200 万美国人。换句话说,只有 1/15 的饮酒者每天饮酒;大约五分之一的大麻使用者经常使用大麻。
这些数字来自美国药物滥用和精神健康服务管理局每年对 70,000 多名美国人进行的全国药物使用和健康调查。NSDUH 是一个奇怪的生物:大约一半的样本是 12 至 25 岁的人,大概是因为 SAMHSA 对年轻人的吸毒行为比对普通人群更感兴趣。尽管如此,对于(通常不可靠的)自我报告的药物使用趋势来说,这是我们得到的最好的数据来源,所以它经常被使用/引用。
贝伦森关于大量高频率大麻消费者的说法让我吃惊,不是因为我怀疑,而是因为我从未想过要核实。所以我想深入研究不同物质的频率分布到底是什么样的。
我在这里做的一切都是基于 NSDUH 2017,标准权重(ANALWT_C)。你可以在这里得到一个. tsv 和码本。我会尽量标记变量名。我还要说的是,这些是 2017 年的数据,因此代表了近一年的药物使用趋势。NSDUH 拥有追溯到 2000 年代早期的数据,但我使用这个数据集的原因很简单,加载完整的时间序列数据需要花费永远的时间,这只是一篇博客文章。尽管如此,我还是要告诫不要从一年的使用数据中得出太强的结论。
也就是说,这里是 2017 年大麻使用者过去一年使用天数(MJYRTOT)的分布。(从技术上讲,它包括大麻和印度大麻脂,但是,嗯,我不知道很多印度大麻脂使用者。)
这里有几个值得注意的特点。你可以开始看到贝伦森提到的 u 形曲线——大量低频用户,大量高频用户。此外,您可以看到 NSDUH 回答者喜欢近似自己的使用,这就是为什么您会得到那些大尖峰。
这么大的领域,很难看出趋势。为了便于解释,我将把 x 轴分成 60 天左右的组。这有一个额外的好处,那就是界定一年 300 多天的用户,这是贝伦森早先对“日常使用”的定义。(此图表和所有后续图表不包括非用户。)
所以,是的,2017 年约有 20%的大麻使用者是 300-365 天范围内的使用者。从上一张图表中我们还知道,这主要是因为人们报告了 365 天的使用。
但是这和其他物质相比如何呢?在推特 , SB Nation 的 Seth Pollack 问我酒精(ALCYRTOT)如何比较。(注意,我的推文每个月都会删除——这也是这篇文章在 Medium 上发表的原因之一!)下面是同样的宁滨下的图表:
酒精缺乏同样的 U 型曲线:大多数饮酒者喝一点点(0-60 天=最多一天或一周左右的饮酒时间),而那些饮酒较多的人大约平均分布。每天吸食大麻的人比喝酒的人多得多。
但是其他药物呢?在这里,我做了同样的事情,但用了六种主要物质——大麻、酒精、香烟、可卡因(COCYRTOT)、海洛因(HERYRTOT)和甲丨基丨苯丙胺(METHDYSYR)。
(有趣的是,NSDUH 只问上个月的吸烟情况;我刚刚把这个数字(CIG30USE)乘以 12,得出了一个年度估计值。)
这是怎么回事?我们已经知道酒精是什么样的了。毫不奇怪,绝大多数吸烟者每天都吸烟;相比之下,去年吸食可卡因的人很少使用。我不确定为什么后一个事实是真的——值得注意的是,我没有查看裂纹,它在 NSDUH 中被定界,并且可能显示不同的模式。事实上,可卡因和甲丨基丨苯丙胺之间的相似性表明,这两种药物的低使用频率可能是其低市场可获得性的功能——尽管正如 I 和其他人所指出的,这两种药物的使用正在增加。
虽然注意到这一数据的有限性,但海洛因和大麻使用模式的相似性是有趣的。这两种药物都有很大比例的非频繁使用者,还有相当数量的少数人(15-20%)每天使用。
大麻不像海洛因那样是一种“镇定剂”— 它被归类为兴奋剂和镇静剂。但是两者都有镇静和 T2 止痛的效果,这也是为什么大麻的支持者经常争论这种药物 T4 可能是治疗慢性疼痛的处方阿片类药物的替代品的部分原因;他们指出证据表明,有医疗法的州阿片类药物过量率的增幅较低(贝伦森准确地指出,随后的分析显示这一趋势正在消失;其他研究限制了药物/阿片类药物滥用之间的联系。
那么,有一个有趣的问题,这两者在社会背景下的可替代性。人们大量使用海洛因,或者可能更有用的处方阿片类药物,是出于与导致他们大量使用大麻相似的原因吗?(原则上,人们可以出于同样的原因大量使用两种不同药物中的一种——尤其是两种都具有显著的镇静作用——而非大量使用人群可以出于不同的原因使用它们。)大麻和海洛因在药理上并不相似,但它们越来越多的使用可能是以不同的化学表现形式表现出来的共同社会病理的产物。
在推测的基础上评估这种说法需要比我在这里看到的更多的数据(至少,要梳理出一年的影响,还要看看阿片类药物和大麻的使用是否比各自与其他药物的使用更共病)。所以我想转向另一个问题:不同的群体如何使用?
NSDUH 人口统计变量有点糟糕——这是一项调查的功能,主要集中在年轻人人口统计上,老年人是一种事后思考。此外,如果你把调查分割得太细,你就不会有任何接近代表性的东西。尽管如此,这里还是有性别、种族/民族、城市化和年龄。
性(IRSEX):在所有这些药物的高频使用者中,男性更常见,除了香烟(显然女性吸烟更重!).这并不奇怪,因为男人通常从事更危险的行为。
三个最常见群体的种族/民族(NEWRACE2):非 Hisp。白色,非。-他的计划。黑人和西班牙人。我很确定 N 太小了,不足以得出关于海洛因/冰毒的合理结论。可卡因的使用在黑人受访者中更为频繁(正如我在别处所写的,这与非裔美国人更高的可卡因过量致死率相吻合)。有趣的是,白人受访者更有可能酗酒和吸烟;大麻在不同种族中似乎同样受欢迎,在中等使用群体中,非洲裔美国人使用大麻的频率略高。
这是城市化(COUTYP4)。农村人吸烟更频繁;每个人喝的都差不多;鉴于 n 大小的相对差异,其他一切都很难一概而论。
最后,NSDUH 的一个不可靠的年龄变量(CATAGE)。同样,对底行和顶行的亚组样本量的严重关切基本上表明,使用随着年龄的增长而增加(大麻除外,大麻的大量使用者集中在 18 至 34 岁之间)。
纵观这一切,我有三点建议。
首先:我认为对大麻依赖的担忧可能有些道理,特别是如果男性比女性更有可能是重度使用者的话(因为重度大麻使用可能与低地位男性目前面临的那种问题并存)。
第二:海洛因/大麻的类比值得进一步探索,尽管我绝对不会致力于此。我深入研究了这两种药物的止痛和镇静作用,因为这些作用显然与社会/文化对逃避、脱离和压抑体验的渴望有关。Jill Jonnes (我认为)谈论了药物宏观历史中的兴奋/沮丧周期(社会在兴奋和沮丧之间摇摆不定)。如果我们处于情绪低落期,那么大麻和阿片类药物使用者的核心群体的存在是有道理的。
第三:我想看看可卡因使用和快克可卡因使用的长期趋势,试图理解为什么大多数可卡因使用者不经常使用。可卡因过量死亡与处方阿片类药物过量死亡一样常见,但人们似乎很少使用可卡因。这是否意味着可卡因危机真的是仅仅是芬太尼掺假?大多数死亡是由于快速投球,而单独使用可卡因是(相对)安全的吗?随着在哥伦比亚的产量持续增长,可卡因问题只会变得更糟——如何解释人们的可卡因消费选择?
(更新:感谢 Michael Josem(@ MichaelJosem)在第一张图中捕捉到一个标签错误的轴。现在已经修好了。)
有 VAR 的英超球迷有多沮丧?用情感分析来观察他们的反应
原文:https://towardsdatascience.com/how-frustrated-are-premier-league-fans-with-var-c8ae9c227418?source=collection_archive---------32-----------------------
什么是 VAR?
国际足联引入了视频助理裁判(VAR)来支持裁判的决策过程。过去有许多有争议的事件导致了 VAR 的引入。其中一次是在 2010 年世界杯淘汰赛中,英国队以 2:1 落后于德国队,当时弗兰克·兰帕德的射门击中横梁下侧,弹过了大约一码的球门线。但是裁判没看到。德国以 4 比 1 赢得了比赛,英格兰被淘汰出局。另一个是臭名昭著的蒂埃里·亨利在 2009 年对阵爱尔兰的手球。VAR 被设定为只在改变比赛的情况下使用,如进球、点球和红牌。这样,他们应该对游戏有最小的干扰。
为什么 VAR 出现在新闻中的原因是错误的?
从本赛季(2019–20)开始在英超联赛中引入 VAR。自本赛季开始以来,VAR 在英超联赛中购买的争议多于解决方案。11 月 10 日利物浦对曼城的比赛中发生的两起事件(特伦特·亚历山大-阿诺德的手球和莫·萨拉赫的越位判罚)最近成为英超联赛中的热门话题。本赛季有类似的事件发生,这使得范质疑 VAR 在英超联赛中的使用。
通过对英超球迷关于 VAR 的推文进行情感分析,我试图理解:
1。总体而言,英超球迷对 VAR 的使用持积极还是消极态度?
2。他们在关于 VAR 的推文中表现出什么样的情绪?
3。英超球迷在发关于 VAR 的微博时常用的词语有哪些?
4。基于他们支持的俱乐部,球迷对 VAR 的反应有什么不同吗?
为什么使用 Twitter 进行情感分析?
社交媒体已经从人们相互交谈的平台转变为人们分享观点、表达不满以及赞扬或批评机构和公众人物的媒介。在社交媒体平台中,Twitter 是人们用来评论或抱怨产品和事件以及谈论个性的主要平台。与其他写长篇故事的平台不同,由于大小限制,用户可以专注于他们的关键信息,因此很容易在 Twitter 上找到主题的脉搏。
如何在 R 中做情感分析?
r 中有许多可用于分析 Twitter 情绪的软件包。下面给出了一个广泛使用的软件包的逐步流程:
创建 Twitter 应用
Twitter 开发了一个 API,可以用来分析用户发布的推文。这个 API 帮助我们以结构化的格式提取数据,以便于分析。这里的给出了创建 twitter 应用程序的过程。当您创建一个在分析过程中提取推文所需的 twitter 应用程序时,会生成以下四个键:
消费者密钥(API 密钥)
消费者秘密(API 秘密)
访问令牌
访问令牌秘密
安装包并提取 tweet
安装情感分析所需的软件包。
# Install packages
install.packages("twitteR")
install.packages("RCurl")
install.packages("httr")
install.packages("syuzhet")# Load the required Packages
library(twitteR)
library(RCurl)
library(httr)
library(tm)
library(wordcloud)
library(syuzhet)
TwitteR 包提供了对 Twitter API 的访问。 RCurl 和 httr 包提供的功能允许用户编写 HTTP 请求并处理 Web 服务器返回的结果。Syuzhet 包用于从文本中提取情感和基于情感的情节弧线。syuzhet 包下的 nrc lexicon 让用户在一个文本文件中计算出除了两种情绪之外的八种不同情绪的存在及其相应的效价。
由于免费的 twitter 应用程序只允许用户提取过去 7 天的推文,我分析了英超球迷对 2019 年 11 月 9 日和 10 日举行的 Gameweek 12 比赛的 VAR 的反应。以下是 Gameweek 12 的成绩:
安装必要的包后的下一步是设置 Twitter API,调用 Twitter 应用程序并使用关键字提取数据。用于提取推文的关键词是“VAR”和“epl”。
# authorisation keys
consumer_key = "XXXXXXXXXXXXXXXX"
consumer_secret = "XXXXXXXXXXXXXXX"
access_token = "XXXXXXXXXXXXXXX"
access_secret ="XXXXXXXXXXXXXXX"
# set up
setup_twitter_oauth(consumer_key,consumer_secret,access_token, access_secret)# search for tweets in english language
tweetVAR = searchTwitter("VAR epl", n = 10000, lang = "en")# store the tweets into a dataframe
tweetsVAR.df = twListToDF(tweetVAR)
数据清理
Gsub 功能从推文中删除不想要的内容,如标签、数字、停用词和 URL,以便推文可以进行分析。
#cleaning tweets
tweetsVAR.df$text=gsub("&", "", tweetsVAR.df$text)
tweetsVAR.df$text = gsub("&", "", tweetsVAR.df$text)
tweetsVAR.df$text = gsub("(RT|via)((?:\\b\\W*@\\w+)+)", "", tweetsVAR.df$text)
tweetsVAR.df$text = gsub("@\\w+", "", tweetsVAR.df$text)
tweetsVAR.df$text = gsub("[[:punct:]]", "", tweetsVAR.df$text)
tweetsVAR.df$text = gsub("[[:digit:]]", "", tweetsVAR.df$text)
tweetsVAR.df$text = gsub("http\\w+", "", tweetsVAR.df$text)
tweetsVAR.df$text = gsub("[ \t]{2,}", "", tweetsVAR.df$text)
tweetsVAR.df$text = gsub("^\\s+|\\s+$", "", tweetsVAR.df$text)
tweetsVAR.df$text = gsub("penalty", "", tweetsVAR.df$text)
tweetsVAR.df$text = gsub("football", "", tweetsVAR.df$text)tweetsVAR.df$text <- iconv(tweetsVAR.df$text, "UTF-8", "ASCII", sub="")
分析情绪和可视化
Syuzhet 根据 2 种情绪和 8 种情感对每条推文进行评分。在下一步中,我使用了一个条形图来可视化在推文中占主导地位的情绪类型。
# Emotions for each tweet using NRC dictionary
emotions <- get_nrc_sentiment(tweetsVAR.df$text)
emo_bar = colSums(emotions)
emo_sum = data.frame(count=emo_bar, emotion=names(emo_bar))
emo_sum$emotion = factor(emo_sum$emotion,
levels=emo_sum$emotion[order(emo_sum$count, decreasing = TRUE)])# Visualize the emotions from NRC sentiments
var <- ggplot(emo_sum, aes(x=emotion, y= count, fill = emotion))+
geom_bar (stat = "identity")+
ggtitle("Sentiments and Emotions about VAR in EPL")var
情感分析的结果
有哪些关于 VAR 的感悟,展现了怎样的情绪?
英超球迷对 VAR 的使用总体持负面看法,因为负面看法的数量高于正面看法。就表达的情绪而言,悲伤、愤怒和恐惧等负面情绪主导了喜悦和惊喜等情绪。情况可能是这样的,消极情绪在本周的比赛中特别严重,因为在几场比赛中有许多有争议的决定,特别是利物浦对曼城和热刺对谢菲尔德联队。
英超球迷在发关于 VAR 的微博时常用的词语有哪些?
我使用了 wordcloud 软件包来了解不同类型的情绪是由哪些词组成的。 comparison.cloud 功能可以比较不同类别中不同单词的使用频率。在这种情况下,我比较了不同类型情绪下的单词频率。
# Create comparison word cloud visualizationwordcloud_tweet = c(
paste(tweetsVAR.df$text[emotions$anger > 0], collapse=" "),
paste(tweetsVAR.df$text[emotions$anticipation > 0], collapse=" "),
paste(tweetsVAR.df$text[emotions$disgust > 0], collapse=" "),
paste(tweetsVAR.df$text[emotions$fear > 0], collapse=" "),
paste(tweetsVAR.df$text[emotions$joy > 0], collapse=" "),
paste(tweetsVAR.df$text[emotions$sadness > 0], collapse=" "),
paste(tweetsVAR.df$text[emotions$surprise > 0], collapse=" "),
paste(tweetsVAR.df$text[emotions$trust > 0], collapse=" ")
)# create corpus
corpus = Corpus(VectorSource(wordcloud_tweet))# remove punctuation, convert every word in lower case and remove stop words
corpus = tm_map(corpus, tolower)
corpus = tm_map(corpus, removePunctuation)
corpus = tm_map(corpus, removeWords, c(stopwords("english")))
corpus = tm_map(corpus, stemDocument)# create document term matrix
tdm = TermDocumentMatrix(corpus)# convert as matrix
tdm = as.matrix(tdm)
tdmnew <- tdm[nchar(rownames(tdm)) < 11,]# column name binding
colnames(tdm) = c('anger', 'anticipation', 'disgust', 'fear', 'joy', 'sadness', 'surprise', 'trust')
colnames(tdmnew) <- colnames(tdm)
par(mar = rep(0, 4))
comparison.cloud(tdmnew, random.order=FALSE,
colors = c("#00B2FF", "red", "#FF0099", "#6600CC", "green", "orange", "blue", "brown"),
title.size=1, max.words=250, scale=c(2.5, 0.4),rot.per=0.4)
当我最初运行代码时,我发现像“惩罚”这样的词被归类到情绪的恐惧类别下,而“足球”被归类到快乐类别下。对于一般文本的情感分析,这是有意义的,因为处罚意味着支付罚款,而足球意味着进行一项可以归类为快乐的运动。但是对于这个特定的分析,这些分类没有意义,因此使用 gsub 函数将这些词从 tweets 中删除。
基于球迷支持的俱乐部,球迷对 VAR 的反应有什么不同吗?
我假设英超球迷对使用 VAR 的反应取决于他们的俱乐部在特定比赛周的表现,以及使用 VAR 对他们的球队产生积极还是消极的结果。因此,我为四家俱乐部(利物浦、曼联、阿森纳和托特纳姆热刺)创建了单独的数据框架,以使用“VAR”和各自俱乐部的官方 twitter id 作为关键词来提取推文。然后我对四个俱乐部进行了情绪分析。
正如假设的那样,在利物浦和曼联的球迷中,他们的球队在这个特定的比赛周赢得了比赛,而在阿森纳和托特纳姆的球迷中,他们对 VAR 的整体情绪是积极的,而在他们各自输掉的比赛中,他们的整体情绪是消极的。
在本赛季被引入英超之前,VAR 已经在 2018 年 FIFA 世界杯和欧洲俱乐部比赛中使用。事实证明,在很多情况下,这对于帮助裁判做出正确的决定至关重要。在 2019 年 4 月的冠军联赛半决赛中,VAR 排除了拉希姆·斯特林(Raheem Sterling)最后一分钟的进球,这个进球本来可以让曼城晋级。那个进球因越位被判无效,托特纳姆反而进步了。令人惊讶的是,英超裁判从未使用过球场边的监视器来辅助裁判。最近的股东大会上,英超联赛和 PGMOL 承诺改善 VAR 的实施和裁判对球场边监视器的定期使用,预计将减少围绕 VAR 的争议并改变围绕 VAR 的情绪。
与游戏网站相比,游戏玩家如何评价视频游戏。
原文:https://towardsdatascience.com/how-gamers-rate-video-games-compared-to-gaming-websites-a07d5c9f308a?source=collection_archive---------26-----------------------
洞察玩家对游戏和网站的不同看法
我记得当我拿到我的 Wii 时那种兴奋的感觉。我打开盒子,把游戏机连接到电视上。我打开了控制台。然后,我把 Wii Sports 的游戏插入 CD 槽。一个显示 Wii Sports 的新图标被创建在屏幕的多个框中的一个框中。
我点击它,它把我带到一个屏幕,让我从多种体育游戏中进行选择,如拳击、网球、高尔夫和棒球。然后,我开始玩这些游戏。玩这些游戏不仅仅是按下按钮在电视屏幕上创造运动,还可以完成不同的任务。
当我玩这些游戏的时候,我感到娱乐和受教育的同时。当我学习棒球中的一垒、二垒、三垒和全垒打时,我把它作为一种放松的方式。因此,我开始将游戏视为一种生活方式。
游戏绝对是一项引人入胜的活动,可以让你在网上和网下都玩得开心。游戏产业也生产很多游戏。当他们制作这些游戏时,他们试图从他们的观众那里得到反馈。
此外,网站评论家和游戏玩家都对这些游戏进行评级。在看了 YouTuber 对视频游戏的评论,并看到它们在网站上的评级后,我对双方的差异感到惊讶。
因此,我很想知道游戏玩家对视频游戏和网站的评价有什么不同。
数据集
我寻找代表我所寻找的最佳数据集,我在 Kaggle 上找到了一个 这里 。我下载上传到 Jupyter 笔记本进行编码。
我清理了数据集,删除了不必要的列,留下了重要的列,如平台、网站评级和用户评级。用于执行该清洁过程的代码是:
df_game = df_data_1[['platform', 'website_rating', 'user_rating']]
包含 android、iPhone 和 PC 游戏的行被删除,因为该研究主要与主机游戏相关。删除这些行的代码是:
df_game = df_game[df_game['platform'] != 'Android']
df_game = df_game[df_game['platform'] != 'iPhone']
df_game = df_game[df_game['platform'] != 'PC']
清理数据集后,创建了一个新的数据集。下面是新形成的数据集的快照:
A dataset of the gaming platforms with their respective website ratings and gamers’ ratings
最高等级的游戏
数据集被重新排列了两次。首先,找出哪个游戏在网站评分中是最高的。第二次是找出游戏玩家中评分最高的游戏。
Top 10 highest rated games based on website rating
Top 10 highest rated games based on gamers
根据网站评论,有史以来评分最高的游戏是 Wii 的 Xenoblade Chronicles、PS2 的《侠盗猎车手:圣安地列斯》、DreamCast 的《大都会街头赛车》、DreamCast 的《神木》和任天堂 64 的****的塞尔达Majora Mask。有史以来基于游戏玩家评分最高的游戏是 PS3 的游戏《XCOM:敌人在和愤怒的小鸟三部曲》。
游戏玩家评分与网站评分
首先构建了散点图,以查看游戏玩家的评级和网站评级之间的密切关系。
A scatter plot of gamers’ ratings vs website ratings
Correlation coefficient of website rating and gamers’ rating
根据散点图,它们具有中度正相关关系,相关系数为 0.477。这表明两党对大多数游戏的评级并不完全一致。
然后,绘制了一个图表来显示每个平台的平均玩家评分和网站评分之间的差异。这是图表:
Website ratings vs Gamers’ ratings by platform
根据图表,游戏玩家的评分用红条表示,而网站的评分用蓝条表示。游戏玩家和网站平均评分最高的游戏主机是任天堂 64,网站和游戏玩家的评分分别为 9.2 和 8.13。游戏玩家对游戏的平均评分最低的游戏主机是任天堂 DS,评分为 7.19。网站有史以来平均评分最低的游戏控制台是 N-Gage,评分为 6.33。
结论
根据最高评级游戏的结果、条形图和散点图,可以准确地说,网站评论家和游戏玩家对视频游戏应该获得的评级意见不一。
用于进行这项研究的完整版本代码可以在这里 看到。
游戏如何改变数据科学产业
原文:https://towardsdatascience.com/how-gaming-can-change-the-data-science-industry-a711e52e0fc7?source=collection_archive---------22-----------------------
游戏如何成为数据科学和人工智能发展的基准
AI AT PLAY — Walter Newton
数据科学的传播
O 在过去的几年里,数据科学变得越来越普及,越来越深入我们生活的方方面面。从亚马逊上的大规模营销活动到 YouTube 上的推荐标签,数据科学已经成为跟踪和分析日常决策的工具。即使你一开始没有意识到,数据科学也支配着我们生活的许多不同方面。这种多功能性使它成为最受欢迎的工作职位和大学专业之一。分析数据的能力已经成为任何工作的重要方面。
数据科学已经扩散到几乎每个行业,但仍有一些行业刚刚触及其表面,其中之一是游戏行业。从历史上看,游戏是一个主要以人为导向的行业。游戏一般是人类做出来给人类玩的。但最近,随着人工智能机器人的诞生,这种情况开始发生变化,这些机器人甚至可以玩最复杂的游戏,从在线扑克到大型多人游戏,如 Dota 2 和星际争霸 2。将人工智能引入游戏行业,为数据科学和这两个行业的合并开辟了一条全新的道路。
游戏中的数据
当想到游戏时,数据通常不是首先想到的。你可能会思考游戏背后的规则、策略,甚至是知识。但所有类型游戏的一个关键特征是数据。在玩游戏的时候,你在不断地收集数据,有意或无意地收集当前游戏状态的数据,并根据这些数据做出预测和决策。根据数据做出预测和决策,这就是数据科学的意义所在!游戏不仅加载了数据,而且数据本身比公共数据集更容易访问,也更有用。游戏数据也可以由个人收集,并且不需要过多的时间和资源。对于数据科学家来说,游戏是一种获得各种数据集的惊人方式,也是人工智能开发人员测试新算法和理论的绝佳方式。
面向数据的游戏
像《数据 2》和《星际争霸 2》这样的现代多人游戏是很好的游戏,可以将数据科学和游戏更紧密地结合在一起,使它们更容易理解。像 Dota 2 和 Starcraft 2 这样的游戏有大量的数据可以利用,然而,这些数据中有很多是对玩家隐藏的。例如,在 Dota 2 中,你并不总是知道你的约会在哪里,或者他们能看到地图的哪个部分。在星际争霸 2 中,地图以及你对手的基地和资源都是隐藏的。这种不完善的信息正是数据科学的用武之地。利用数据科学和游戏历史,你可以预测你的对手在做什么。这也是这些游戏成为训练 AI 新标杆的原因。有这么多不完善的信息,人工智能驱动的机器人需要实际学习游戏,并理解更复杂的游戏机制,如资源管理、耐心和长期战略发展。这就是为什么这些游戏是数据科学家获得大量数据进行分析和研究的绝佳机会。这些游戏也是一些全球最受欢迎和最知名的游戏,因此使它们成为将游戏和数据科学结合在一起的伟大发射台。
新一代游戏
有了这些数据,为什么不开发利用这些数据的游戏呢?通过创建一个围绕数据使用的游戏框架,将是为创新数据科学、机器学习和游戏创造环境的第一步。这个新的游戏框架将把数据科学、人工智能和游戏这三个行业结合在一起,并让人们有机会以一种全新的方式体验和参与人工智能开发和数据科学。随着对数据科学家的巨大需求,为那些对该领域感兴趣并积极参与的人创造一种有趣的互动方式将极大地推动数据科学和人工智能的发展。容易获取数据的另一个好处是节省时间。通过减少收集数据的时间和精力,数据科学家可以将更多时间用于创新和尝试新理论。
GANs 是如何工作的
原文:https://towardsdatascience.com/how-gans-really-work-2e1db1f407bb?source=collection_archive---------12-----------------------
通过对抗训练学习完整的概率分布
我是一名学习机器的学生,和我们一样,我听说到处都有人在研究甘、甘、甘。他们可以创造出看起来非常真实的图像。我没有真正注意,因为我当时(现在仍然)专注于强化学习,而不是计算机视觉。我当时正在批判这种“赶甘”,有一天我一头扎进去,看到了这一点。
假设你在一个空间 E 中有一个有限的点集 X,这些点集是从 E 上的一个概率分布π中采样得到的,X 是一个更大的集合 A 的子集,A 是π可以到达的整个点集(即严格正概率的点)。例如,X 由 1000 幅代表一只狗的图像组成,A 是一组完整的狗的图像。你想知道π,在给定子集 x 的情况下,π在 A 上采样。
可测性
如果 E 是不可测量的,也就是说,如果没有数据(例如,单词),我们就不能将 E 的元素彼此直接联系起来,那么问题就不再是问题了。除了离散的概率分布之外,我们没有什么可以“学习”的:计算 X 中每个点的出现次数,然后除以 X 的基数。X 中的每个元素的概率都是 0。如果我给你单词列表[“你好”、“你好”、“你好”、“好”、“坏”、“猫”、“猫”],对你来说最好的采样是什么?没有比概率 3/7 的“你好”,1/7 的“好”,1/7 的“坏”,2/7 的“猫”更好的了。
如果 E 是可测量的,就像图像一样(如果两个图像的像素接近,则它们可以是“接近的”),即一个可以比较元素的空间,那么问题就变得真实了。我们可以从我们拥有的数据集(X)中提取特征,从π中生成新的样本。对于狗的图像,我们期望从我们的数据集中提取特征来生成“假的”或“新的”狗图像,也就是说来自 A \ X 的元素。
什么不是甘
我想很早就明确。gan 是而不是对“最接近”或“最适合”数据集的点进行采样。他们没有最大化单个样本的可能性,但他们最小化了真实分布和生成分布之间的总距离(如 KL-divergence,JS-divergence 等)。这造成了巨大的差异,在我看来,许多人并没有意识到这一点。看起来学习分布,这是一个非常困难的任务,在“最佳拟合”任务中取得了非常好的结果。例如看起来像狗的狗的样本图像。但是 GANs 能够从我们的数据集 X 的分布中取样,不仅仅是找到一个“好”的匹配,或者一些“看似合理”的东西。它将对所有狗的图像进行采样(如果数据集足够大的话)。
因此,你有一组生活在 256^(NxN)-length 空间(对于 n×n 的灰色图像)的图像,或一组生活在 12^(64)长度空间的棋盘,或一组生活在 1000^(T)长度空间的声音,你想从这个集合的概率分布中取样。比方说,你有 X = A 的狗图像,即所有代表狗的图像。这个集合定义了图像集合的概率分布,其中大多数图像的概率为 0(如飞机或黄瓜),但一些图像(狗或相关动物)的概率较高。在实践中,我们没有所有的狗图像,我们假设 1000 或 10000 张图像足以近似分布。但是,我们如何学习分布,并从中取样来创建一个狗的图像呢?国际象棋棋盘也是一样:如果我们有一套最终棋(将死)棋盘,我们能知道所有将死棋盘的分布吗?
首先,我们需要一个生成器,一个可以对 s 元素进行采样的机器。神经网络是很好的“黑盒”机器,所以它是生成器的一个很好的选择。我们给网络高斯(或任何)噪声,它以 s 输出一些东西。下图左边的“z”是噪声,右边的 G(z)是生成的样本(此处为图像)。然后,我们将需要训练它,以便根据期望的分布进行采样。这是最难的部分。
A convolutional generator (source: DCGAN)
第一种方法
我们有一个生成器,一组数据 X,我们希望训练生成器从 X 的基本分布中正确采样。首先要计算输出分布和实际分布之间的交叉熵,并将其最小化。不幸的是,这两个我们都没有权限!我们不能直接计算输出密度,它只包含在发生器的参数中。真正的密度是我们试图学习的,即使训练一个网络逐点学习概率也是无用的。
我们还可以尝试使用可微分距离(交叉熵或 2 范数)将输出样本与来自 X 的真实样本进行匹配。但它只会给我们一个样本的“平均值”,就像一个重心,而不是一个真正的分布。
对抗方法
这个想法很简单,但是很神奇。博弈论里有个东西叫纳什均衡。这是非常强大的东西,它再次证明了自己的力量。如果你和某人玩一个零和游戏(也就是说,两者中只有一个能赢,另一个输),有一个最优策略可以玩,这个策略不能被利用。因此,你不会总是赢,但你不能输。最糟糕的事情可能是平局,如果在比赛中有可能的话。这个策略被称为纳什均衡。
我们将设计一个博弈,它的纳什均衡是当生成器在真实分布(A 的分布)上精确采样时。生成器将与鉴别器进行比赛,鉴别器将确定样本是真的(来自真实分布)还是假的(来自生成器分布),基本上为样本分配从 0 到 1 的分数。生成器的目标是欺骗鉴别器(也就是说具有尽可能高的分数),鉴别器的目标是很好地鉴别(也就是说对于假样本具有尽可能低的分数,对于真样本具有最好的分数)。这不是一个对称的游戏,但它是零和游戏。
鉴别器被教导同时将 1 分配给一批真实样本(来自 X),将 0 分配给另一批假样本。生成器试图最大化它的分数,所以它的损失只是减去鉴别器赋值。收敛时,鉴频器始终输出 0.5 和所需分布上的发生器样本。鉴别器不输出我们的分布概率( π)!
为什么有效?假设我们处于平衡状态,生成器没有对 X 的基本分布(即 A 的分布,或真实分布)进行采样。例如,对于某个点 x,真实概率是 0.3,生成器仅以 0.2 对其进行采样。那么在这个 x 上,鉴别器将被“输入”多于 0 的 1,因此 x 的分数将上升,超过 0.5。但是生成器想要最大化它的分数,所以由于每隔一个分数是 0.5,唯一的可能就是增加 x 的采样率,以便“攫取”这个额外的分数。
我们保证,有了一个完美的鉴别器,生成器将收敛到完美的解决方案。因此,拥有一个好的鉴别器非常重要。然而,如果鉴别器是完美的,他不会给生成器梯度,因为它的样本的分数总是 0。良好的混合是必要的
GAN algorithm
网络近似
另一点在遗传神经网络中至关重要:神经网络是逼近器。实际上,对抗式方法不需要近似,我们可以用“完美”模型来实现。但矛盾的是,它的力量会小得多。对于理想模型,当发生器分布是我们的有限集合 X 的分布时,就达到了最优。也就是说,生成器将只输出 X 的样本,而鉴别器将把 0.5 加到 X 的每个元素上,其他地方随机小于 0.5。但我们不想那样。我们想从 A 中取样,即“真实”集,而不是我们的数据。我们希望生成新的样本,新的情况,来描述与 x 相同的高级特征。这正是网络所做的:我们利用他们的弱点来获取利润。如果训练有素,网络不会过度拟合(令人惊讶的是,这是一个将损失降至最低的好主意),但接近于具有良好的验证测试分数。因此,生成器将从 A 而不是 X 进行采样,因为网络并不完美,并且会尝试进行泛化。
实践中
让我们看看它在实践中是什么样子的。我们将取 E = R,并尝试对特定分布进行采样。
建立
发生器和鉴别器是密集网络。第一个有 4 个隐藏层,每个层有 50 个神经元,中心高斯噪声作为维数 15 的输入,输出为 R。鉴别器有维数 2 的输入,3 个大小为[100,50,50]的隐藏层和一个单个乙状结肠输出神经元。除了最后一个乙状结肠激活外,所有激活都有漏洞。
学习率为 1e-5。优化器是 Adam 优化器,beta1 为 0.9,beta2 为 0.999。对于每个网络,我每个时代都采用 10 个学习步骤。这批货是 500 号的。
这个代码很大程度上是从这个中获得灵感的。
离散分布
这里 A 是有限的,取 X = A。我们在 A = {(-1,0)、(1,0)},π(a) = 1/2 上对 GAN 模型进行了测试,得到了以下结果:
如您所见,这些点很快会集中在所需的点(A)上,正如预期的那样,每个点的概率为 0.5。
圆形分布
这里 A 是一个以 0 为中心的圆,半径为 1。π也是 a 上的均匀分布。
这些点很快在圆上均匀分布。
和 VAE 呢?
让我们看看 VAE 的结果,以供比较(使用相同的参数、图层大小等)。
也许你更明白我之前说的话。vae 正在做这项工作,但结果模糊不清。
不收敛和模式崩溃
我有一个可怕的消息。gan 不能保证收敛。
正如我之前提到的,网络是不完美的。因此,他们可以“忘记”旧的数据点来记住新的数据点。假设 A 由 4 个点组成,(-1,0)、(1,0)、(0,1)和(0,-1),π也是 A 上的均匀分布。第一种可能性是 GAN 收敛于π,正如我之前仅用两个点展示的那样。还有一种可能是生成器和鉴别器会一直互相追逐,永远不收敛。生成器只能生成(-1,0),然后鉴别器将不断降低该点的分数,生成器将移动到下一个点,比如(1,0)。以此类推,无限期。这是一种可能的均衡状态,但不是纳什均衡。
让我们看看实际情况:
我稍微改变了一下网络的参数来强制不收敛。这种模式不再趋同,而是定期在三个不同的地方移动。
另一个密切相关的问题是模式崩溃。“模式”是我们发行版的主要特征。在 R 中,这实际上是不相关的,因为我们的模式是我们的 4 个点,但是例如 MNIST 图像有 10 个不同的模式,10 个可能的数字。生成器有时只生成有限数量的模式,而忘记其他模式。如果方差太小,它就走不出这个陷阱,因为梯度太小。模式崩溃在 GANs 中是一个真正的问题,而且经常发生。主要的解决方案是超参数调整,但是几年来已经有了许多有趣的尝试。
如果您想了解更多关于提高 GAN 性能的方法,我推荐您阅读本文。
结论
GANs 是从数据中恢复未知概率分布的强大工具。许多问题都与这个“密度估计”问题有关,因此它非常强大。
你可以在本帖上看到不同类型数据的奇特应用。
[1] I .古德费勒、j .普热-阿巴迪、m .米尔扎、b .徐、d .沃德-法利、s .奥泽尔、a .库维尔和 y .本吉奥。生成对抗性网络(2014 年),NIPS 2014 年。
利用主成分分析和聚类分析基因与白血病
原文:https://towardsdatascience.com/how-gene-expression-related-to-leukemia-type-using-pca-and-hierarchical-clustering-c8561303853a?source=collection_archive---------24-----------------------
机器学习:无监督学习
无监督学习的现实应用
Photo by NASA on Unsplash
在机器学习的世界中,无监督学习是在没有标记结果的情况下进行推理的过程。主成分分析和聚类是两种常见的无监督学习技术。
PCA 是将高维数据缩减为几层关键特征的过程。降维后,我们只需要处理一小部分特征,其他的就不考虑了。
聚类是将具有相似特征的数据输入分配给特定组的任务。聚类后,同一组中的数据点应该是相似的,但与其他组中的数据点明显不同。
在这篇文章中,我将把主成分分析和层次聚类应用于生命科学数据集,以分析特定基因如何影响白血病类型。
该数据集最初由 Yeoh 等人(2002 年)从 327 名患者(此处为)的 7 种白血病亚型中收集了 3141 个基因。
Photo by Dennis Kummer on Unsplash
#加载数据集并转换数据类型
将 leukemia_data 的数据类型由字符型改为因子型。
knitr::opts_chunk$set(echo = TRUE)
library(dplyr)
library(readr)
leukemia_data <- read_csv(“leukemia_data.csv”)
leukemia_data = leukemia_data %>%
mutate(Type=as.factor(leukemia_data$Type))#Display different types of leukemia and count the numbers of each type
#doing explorative data analysis is always preferred for all types of researchtable(leukemia_data$Type)BCR-ABL E2A-PBX1 Hyperdip50 MLL OTHERS T-ALL TEL-AML1
15 27 64 20 79 43 79
一些描述性数据:BCR-ABL 是最不常见的白血病类型,TEL-AML1 是数据集中最常见的。
#降维
由于有 3141 个基因,我们应该使用主成分分析来减少数量,使之易于解释。
# generate PCA results;
# scale=TRUE and center=TRUE --> mean 0 and variance 1
pr.out=prcomp(select(leukemia_data,-1),scale=TRUE, center=TRUE)# pr.out$sdev: the standard deviations of the principal components;
# (pr.out$sdev)²: variance of the principal components
pr.var=(pr.out$sdev)²# pve: variance explained by the principal component
pve = pr.var/sum(pr.var)# cumulative explained variance
cumulative_pve <-cumsum(pve)# Plot them
par(mfrow=c(1, 2))
plot(pve, type=”l”, lwd=3)
plot(cumulative_pve, type=”l”, lwd=3)
PVE and Cumulative PVE
这两个图直观地说明了几个关键特征可以解释总方差的大部分。
#问题:哪些基因在第一主成分(aka。PC1)?
#project loadings on PC1
Loadings_PC_1 <- pr.out$rotation[,1]#in absolute value
Loadings_PC_1_ABS <- abs(Loadings_PC_1)#print and sort the results
print(head(sort(Loadings_PC_1_ABS,decreasing = TRUE)))SEMA3F CCT2 LDHB COX6C SNRPD2 ELK3
0.04517148 0.04323818 0.04231619 0.04183480 0.04179822 0.04155821
PC1 上负载最高的前六个基因是:SEMA3F、CCT2、LDHB、COX6C、SNRPD2 和 ELK3。
#plot the data into the first two principal component dimensions
Projection_1_PC = pr.out$x[,1]
Projection_2_PC = pr.out$x[,2]rainbow_colors <- rainbow(7)
plot_colors <- rainbow_colors[leukemia_data$Type]plot(Projection_1_PC,Projection_2_PC,cex=0.4,col=plot_colors)
text(Projection_1_PC,Projection_2_PC,labels=leukemia_data$Type,col=plot_colors)
只有 T-all(右上角)是从人群中挑选出来的;其他类型的白血病还粘在一起。换句话说,前两种成分并不是分离的理想选择。
让我们试试第一台和第三台电脑。
Projection_3_PC = pr.out$x[,3]
rainbow_colors <- rainbow(7)
plot_colors <- rainbow_colors[leukemia_data$Type]
plot(Projection_1_PC,Projection_3_PC,cex=0.4,col=plot_colors)
text(Projection_1_PC,Projection_3_PC,labels=leukemia_data$Type,col=plot_colors)
相比之下,第 1 台和第 3 台电脑做得更好,因为分布分散在不同的地区。
#项目到 PCs
#install.packages(c(“ggridges”,”ggplot2",”tidyverse”))
library(ggplot2)
library(ggridges)
library(tibble)#project on PC1
z1 = pr.out$x[,1]#create a new tibble where the first column is the project of the data on the first PC and the second is the leukemia type
TB_1 = tibble(z1,leukemia_data$Type)#plot it
ggplot(TB_1, aes(x = z1, y = leukemia_data$Type, fill = leukemia_data$Type)) + geom_density_ridges()
z1
看来 z1 分不清不同类型。
我们试试 z3。
z3 = pr.out$x[,3]
TB_3 = tibble(z3,leukemia_data$Type)
ggplot(TB_3, aes(x = z3, y = leukemia_data$Type, fill = leukemia_data$Type)) +
geom_density_ridges()
z3
很好,我们将 E2A-PBX1(底部的橙色分布)稍微向左移动,将 hyperdip 50(E2A-PBX 1 上方的绿色分布)稍微向右移动。
#让我们应用层次化 聚类对不同类型的白血病进行分组
创建一个包括三种类型白血病的亚组:T-ALL、TEL-AML1 或 Hyperdip50。
library(dplyr)#subset
leukemia_subset <- filter(leukemia_data,Type==”T-ALL”|Type==”TEL-AML1"|Type==”Hyperdip50")#scale() function helps standardization
scaled_leukemia_subset <- scale(leukemia_subset[,-1],center=TRUE, scale=TRUE)#remove the first column and scale it#euclidean distance matrix
scaled_leukemia_subset_dist <- dist(scaled_leukemia_subset,method=”euclidean” )##hierarchical clustering using complete linkage
set.seed(1)
leukemia.hclust = hclust(scaled_leukemia_subset_dist,method=”complete”)plot(leukemia.hclust, labels=leukemia_subset$Type, main=’Hierarchical Clusting of Leukemia Subset Data’)
Hierarchical Clustering of Leukemia Subset Data, aka. a dendrogram
分级聚类做得非常好,因为同种类型的白血病聚集在一起,而不同类型的则远离。
喜欢读这本书吗?
请在 LinkedIn 和 Youtube 上找到我。
还有,看看我其他关于人工智能和机器学习的帖子。
地理测绘如何帮助识别全球恐怖主义的趋势
原文:https://towardsdatascience.com/how-geo-mapping-helps-identify-trends-in-global-terrorism-5881bf0a0659?source=collection_archive---------22-----------------------
联合国估计,到 2050 年,将近 70%的世界人口将生活在城市地区。住在城市有明显的好处,如公共交通基础设施、景点、购物和获得医疗服务。相反,缺点包括生活成本增加、噪音、光污染和空间有限。数据科学为我们提供了多种方法来量化城市住宅的利弊。该流程允许我们使用从分析流程中收集的见解做出明智的决策。
在本周的文章中,我试图确定与农村地区相比,城市是否提供了更高的安全性。如果是这样的话,我接下来想知道哪些国家提供了最安全的城市。在完成了对不同数据集的彻底比较后,我得出了这个概念。我决定围绕数据建立一个故事,而不是从叙述到数据。本文中使用的数据源包含 180,000 多条记录。这提供了足够的信息来创造一个故事,并获得有意义的见解。
试图回答城市和国家的安全问题的第一步需要选择正确的指标。这一结论是由现有数据确定的。在数据科学领域,Kaggle 因维护从葡萄酒评论到棒球统计数据的大量数据集而闻名。我选择了全球恐怖主义数据库,这是一个由墨尔本大学国家恐怖主义研究联盟维护的综合数据集。该数据库包含关于伤亡、动机、肇事者和地理信息的详细信息。
下一步是在 Jupyter 笔记本上用 Python 读取 Excel 表格。这个特定的数据集包括不同级别的地理指标。为了确定哪些国家的恐怖袭击发生率最高,我决定按地区分组。这是用一个叫做 Altair 的 Python 包完成的。这个可视化库提供了强大的特性集和令人印象深刻的视觉效果。
上图包含了恐怖袭击数量最多的三个地区的国家。值得注意的是,法国、英国和美国等地被排除在外,因为它们各自所在地区的攻击数量相对较少。这种视觉效果不是使用原始数字,而是给出了攻击最常发生的位置,并确定了最大的区域贡献者。
在大致确定了攻击发生的位置后,下一步包括探索数据以利用另一个指标。下图中的饼图描述了不同类型攻击的比例。虽然数据源按类型对攻击有不同级别的详细信息,但为了简单起见,只使用了最高级别的分类。另一个 Python 库 Matplotlib 包括一种称为“爆炸”的技术,它允许楔形突出。
当处理饼图中特别细的切片时,这种技术可以提供简单的视觉直觉。条形图为显示相关组提供了另一种选择,但是,我觉得饼图更好地展示了比例性。
虽然我们已经大致了解了全球攻击的主要国家,但只有地图才能提供这种情况的确切答案。全球恐怖主义数据库从其他数据库中脱颖而出,因为它包含了每个记录的经度和纬度坐标。这些坐标无疑是最精确的地理测绘选项。在全球制图范围内,歧义、不完整的名称和拼写的变化极大地限制了使用其他指标(如城市和城镇)的能力。Tableau 等程序擅长使用这些指标来确定位置,但是,在超过 180,000 条记录的规模上,必须采取其他方法。在这种特殊情况下,仍然有大约 30,000 行程序无法解释。
[## 恐怖分子地图
恐怖分子地图
TerroristMappublic.tableau.com](https://public.tableau.com/shared/SHZQDP26C?:display_count=no&:origin=viz_share_link)
谷歌的数据集搜索引擎是如何工作的
原文:https://towardsdatascience.com/how-googles-dataset-search-engine-work-928fa5237787?source=collection_archive---------24-----------------------
以及如何让它变得更好
谷歌数据集搜索出来已经一年了。工作起来很有魅力,但尽管付出了所有的努力,它仍然处于测试阶段。这篇文章的目的是让你知道它是如何工作的,以及你可以如何做得更好。
你一天在谷歌上搜索多少次?也许 10 次?或者可能超过 100 个,这取决于你的工作,没人会统计。但是我们对几乎每一个我们不知道的问题的基本直觉是——“谷歌一下”。
数据集也是一样,每当我们需要为我们的下一个项目找到一个强大的数据集时,我们经常求助于谷歌或任何其他你经常去的数据仓库,例如 UCI。对来自这些存储库的数据的关注是所有的数据集都被优先使用和探索。在谷歌上找到一个新的数据集不像你找到一部电影、一本书或一份工作那么容易。谷歌知道这一点。
数据集已经建立了很长一段时间,并且采用了不同的格式。没有办法从互联网深处找到原始数据或与这些数据集相关的元数据,这正是谷歌试图解决的问题。当每个人都试图从数据中获得洞察力时,谷歌试图一劳永逸地解决找到数据的问题。
具体是怎么运作的?
Source
当数据集具有支持信息(如名称、描述和分发格式)时,更容易找到数据集。谷歌严重依赖数据集提供商,无论大小,使用开放的schema.org/Dataset标准在他们的网站上添加结构化元数据。元数据指定了每个数据集的重要属性,从中可以很容易地找到数据集。
然后,数据集搜索工具使用这些元数据,将其与 Google 上的其他可用资源相链接(识别数据集的副本,通过查看 Google scholar 找到数据集的原始作者),并为这些丰富的元数据建立索引。一旦建立了索引,Google 就可以开始回答用户的查询,并在这个过程中了解哪些结果最符合查询。
Google Dataset Search
然而,虽然谷歌确实解决了大多数技术问题,但该项目在首次发布 1 年后仍处于测试阶段,如果你是一个每天或每周处理数据的人,你可以帮助谷歌,或者我敢说,帮助人类。
以下是你可以提供帮助的方式
有一些适用于所有结构化数据的通用准则。遵循这些准则将有助于谷歌轻松定位你的数据集,并将其包含在搜索结果中。
结构化数据指南
尽管谷歌不保证你的数据会出现在搜索结果中,但有一些最佳实践会给你最好的机会。
技术指南
为了有资格获得丰富的结果,使用三种支持的格式之一来标记您的网站页面将对您有很大的帮助。那些格式是, JSON-LD (推荐),微数据,RDFa。
质量方针
质量指南通常不可使用任何工具进行测试,但是不遵守这些指南可能会阻止语法正确的结构化数据在 Google Dataset 搜索中显示为结果。这些指南包括内容、相关性、完整性、位置、特异性和图像。要知道你到底能如何坚持这些指导方针,请跟随谷歌的这个指南。
那么,如何将你的数据添加到谷歌数据集搜索中呢?
如果您有自己的描述数据的网页(或网页),那么在数据集中包含以下内容会对您有所帮助
- [必需]将 schema.org 中的元数据添加到包含数据集的每个页面。记住,这是一个必需的步骤 ,有一个文档可以帮你完成。
- 使用结构化数据测试工具验证标记产生结构化数据。
- [可选]对于那些有多个页面的人,创建一个站点地图,并将该站点地图添加到 Google 搜索控制台。
参考文献
- 构建谷歌数据集搜索并培育开放的数据生态系统(链接)
- 促进公共数据集的发现(链接)
- 数据集文档(链接)
- 结构数据指南(链接)
- 常见问题—数据集的结构化数据标记(链接)
我如何建造 9 GANS:人工智能生成的艺术画廊,第 1 部分
原文:https://towardsdatascience.com/how-i-built-9-gans-an-ai-generated-art-gallery-app-part-1-277b24718e2?source=collection_archive---------22-----------------------
这个系列是我用来构建 9 GANS 的技术的高级概述。
9 GANS 是一个展示 9 件艺术品的应用程序/网站,类似于一个画廊。不同的是,它使用 AI 每小时生成 9 张新图像,并删除旧图像。
这是一个与众不同的画廊,因为它是动态的,一直在变化。这件艺术品很快就会永远消失,这就产生了一个稀缺因素。
你可以在 https://9gans.com/查看
第一个版本只包括网站设置,但在第二个版本中,我添加了电子商务功能,即能够购买海报和画布上的印刷品。这需要一些技巧,但是对于本系列,我将主要关注我如何构建版本 1。
9 号楼 GANS 的主要阶段是:
- 准备,训练,从人工智能模型生成图像。
- 建立一个网站
- 增加了每小时刷新一批图像的功能。
在这篇文章中,我将把重点放在第一步。
这个想法
这一切都是从我发现这个开始的:
[## 此人不存在
此人不存在
这个人不是 Existthispersondoesnotexist.com](https://thispersondoesnotexist.com/)
该网站在今年早些时候发布时引起了轰动。你可以不断刷新页面,得到看似无穷无尽的不真实的人脸。
这让我很快找到了网站背后的算法:
[## NVlabs/stylegan
图片:这些人不是真实的-他们是由我们的允许控制不同方面的发生器产生的…
github.com](https://github.com/NVlabs/stylegan)
NVIDIA 的 StylegGAN 在发布时是最新最棒的 GAN 模型,能够生成非常逼真的图像。
然而,大多数人错过了它带来的最大突破。它最终解决了 GANS 的迁移学习问题。
在这种情况下,迁移学习是指采用已经训练好的模型,并根据您的数据集对其进行重新训练/微调的能力。
在那之前,像我这样没有价值数千美元的计算能力来从头开始训练一个 GAN 的平民是无法生成像这样酷的图像的。使用 StyleGAN,我不仅可以生成这些人脸(他们好心地发布了预先训练好的模型),还可以根据我自己的数据集对其进行微调。
StyleGAN 上迁移学习的例子很快就出现了。令人惊叹的 Gwern 发布了一个动漫版本:
如果你仔细看这个,你会发现生成的动画图像是肖像。这不是巧合。他从人脸模型开始,然后根据他的数据集将其微调为动画人脸。他有一个很棒的博客,里面有如何做到这一点的详细说明,我建议你去看看。
[## 用 StyleGAN 制作动漫脸
生成神经网络,如 GANs,多年来一直在努力生成质量不错的动漫人脸,尽管…
www.gwern.net](https://www.gwern.net/Faces)
我也想使用这个新工具,看看我能创造什么。我缺乏想象力的头脑自然而然地转向了艺术。
艺术的美妙之处在于,与人类的图像不同,图像中的缺陷(如头部形状怪异等)被认为是一种特征,而不是缺陷(谢谢达利)。我不需要花费无数的时间和计算来得到完美的艺术品。我只需要几天的训练就可以得到足够好的东西。
数据
我首先必须得到一个好的数据集。我用 Flickr 作为我的来源。
我在他们的 API 上使用了一个简单的 python 包装器来提取图像。这个 API 有它的局限性,但允许我进行基于单词的搜索,甚至过滤掉受版权保护的作品。即使创作出来的艺术品看起来是“原创的”,我也不想冒被起诉的风险。
我推荐一个 4-5K 图像的好起点。
模型
我所有的训练都是在 Google Colab 中完成的。如果你看过我的其他文章,你知道我是一个粉丝男孩。Google Colab 是一个超级容易运行的笔记本环境(一键打开),它给你一个免费的 GPU(每 12 小时重置一次)和大量的硬盘空间(GPU 设置超过 300 Gigs)。这是最好的免费训练方式。
一旦我有了数据,我就把 StyleGAN repo 克隆到 Colab 笔记本上。
我按照 Gwern 的说明(见上面的链接)设置代码和 hyper 参数,并使用最初的 NVIDIA 预训练的人脸模型作为我的起点。我对我的数据集进行了微调,几天后……嘣——我有了艺术作品。
AI burpppp
现在我有了一个模型,它能够生成可以作为艺术传递的图像,第二步是构建一个能够显示这些可爱之处的 UI。
我如何使用主题模型和潜在 Dirchlet 分配(LDA)构建大麻推荐应用程序非技术性
原文:https://towardsdatascience.com/how-i-built-a-cannabis-recommendation-app-using-topic-models-and-latent-dirchlet-allocation-lda-999598987ded?source=collection_archive---------14-----------------------
How I built www.rightstrain.co, a cannabis recommendation tool that used by online dispensaries
背景:
2018 年 10 月 17 日,大麻在加拿大成为合法。
作为一名企业家,我总是阅读最新的科技创业公司,关注市场的发展,发现新兴机会。作为一名数据科学家,我一直在寻找数据驱动的解决方案来解决我发现的问题。
作为多伦多的居民,很自然地,我开始关注 T4 的大麻市场。
下面这篇文章将简要总结我是如何构建一个大麻推荐系统的。我会让它保持实用的技术性,这样那些想要建立一个类似应用程序的人可以遵循代码——而那些只是感兴趣的人仍然会发现它读起来很有趣。
问题:
2013 年,关于大麻在加拿大合法化的谈判开始。正是在这个时候,我知道合法化将会发生,所以我成为了一个早期投资者,并跟上了市场。
快进到 2018 年合法化,利用我在行业内的网络,我与一些大麻药房通了电话,了解到他们都有一个问题在常见。
当客户在网上订购时,发现他们最喜欢的商品(例如某种大麻品种)售罄,他们会停止购物,在另一家零售商那里找到相同的商品。
我了解到,这被称为的购物车废弃,据 统计 成本超过电商店铺销售额的 75%。
做进一步的研究,我发现亚马逊将其收入的 35%归功于推荐系统。
所以我建立了一个大麻产品的推荐系统。
建立推荐系统 101:
什么是推荐系统?
基本上,出于电子商务的目的,推荐系统只是找到与购物者正在购买的产品相似的产品,并推荐相似的商品,希望增加销售额。
那么,它是怎么做到的呢?
假设你在亚马逊上拥有一家销售家居饰品的电商店铺。你会注意到,当顾客购买卫生纸(A)时,他们也会购买毛巾(B)。此外,您会发现这种模式会在不同的客户群中重复出现,只是略有不同。
当其他顾客购买产品 A、B 和新产品 c 时,就会发生这种变化。
了解了这种模式,我们现在可以向传统上只购买产品 A 和 b 的客户推荐产品 C。
就是这样!
如何建立推荐系统:
首先,你需要从数据入手。
在我的案例中,我想为大麻产品建立一个推荐系统,所以我需要市场上各种大麻品种的数据。我快速搜索了一下,发现了一些包含大麻品种评论的数据库。
为了获取数据,我编写了一个简单的 Python Scraper,并在 Tor 网络下建立了隧道。这使得铲运机可以持续运行,并减少你的 IP 被禁止的机会。请看我写的关于开发 python 抓取工具(TBA)的文章。
重要提示: 从互联网上抓取数据时,请尊重你抓取的服务器,因为你很容易压倒一个没有准备好处理大量请求的服务器。
探索性数据分析:
我设法收集了 50 万条包含 1-5 星评级和评论的评论。我想我可以通过观察用户对每种菌株的评分模式来创建一个推荐系统(见上一节的逻辑)。
然而,看看这些数据:
Figure 1: Ratings of cannabis strains (x-axis) vs number of reviews (y-axis)
我发现了一个严重的范围限制。换句话说,大多数评论都在 4-5 星的范围内。
我猜大麻爱好者很容易被打动:)
鉴于这一发现,我决定不使用定量评级,因为推荐系统基本上会推荐其他评级高的菌株——实际上所有菌株的评级都很高。
这将违背推荐系统的目的。
输入自然语言处理:
自然语言处理(NLP) 是人工智能的一个子领域,专注于使计算机能够理解和处理人类语言。
那么,计算机是如何阅读人类语言的呢?
先来了解一下计算机是如何……计算的。基本上,计算机用二进制、1 和 0 来思考。这使得事情变得复杂,因为单词不是数字。
那么 NLP 是如何工作的呢?
最简单的形式,NLP 的工作原理是将单词转换成数字!例如,如果我们有一个文档,其中有三个单词,“狗吃食物”,每个单词都将被转换为一个向量(例如,将其视为一串数字)。所以单词“dog”可以用(1,0,1,1,1,0)来表示,“eats”可以用(1,1,0,0,0,0)来表示..等等。现在你可以想象一下,一旦所有的单词都被矢量化,计算机现在就可以识别出一个矢量(1,0,1,1,1,0)代表单词“狗”。
现在棘手的事情是让计算机理解的意思。这个主题已经超出了本文的范围,但是我可能会继续撰写关于这个主题的另一篇文章。虽然 NLP 可以成功地将单词矢量化,以允许计算机识别单词,但让计算机理解单词的含义是极其困难的。如果你对这个话题感兴趣,请阅读更多关于深度学习和 NLP 的内容。
主题建模和潜在目录分配:
现在我们所有的文本数据都已经被矢量化了,我们开始在数据中寻找模式。
主题建模非常适合这种类型的任务,它是一种统计建模技术,用于发现文档集合中出现的抽象“主题”。对此的一个非常简单的解释是,它梳理整个文档并识别:1)最频繁出现的单词和 2)出现在那些频繁出现的单词旁边的单词。这里的逻辑是,如果这些词总是一起出现,它们一定会形成某种主题。
现在你可能想知道,算法产生了多少主题?
嗯,这取决于你。
当您选择想要在模型中保留多少主题时,主题建模的艺术就开始发挥作用了。
我通常看两件事:1)相干值和 2)侵入者测试。让我们详细阐述一下这两者。
连贯性值可以被认为是每个主题成为“好”主题的概率。要了解更多信息,请查看这篇关于一致性价值的文章。
为了选择最佳拟合模型,您需要使用入侵者方法对每个主题进行定性评估。
上面,我已经画出了主题的数量和它们相应的一致性值。请注意,在 14 个主题之后,出现了大幅下降。根据一致性值,这里的最佳模型将是 14 个主题,然而,8 个主题的模型仅减少 CV 1 点。出于简洁和解释能力的考虑,我总是选择坚持使用更简单的模型。
那么入侵者有什么方法呢?
侵入者测试是使用一致性值的一个很好的后续测试。一旦你决定了你想要多少个主题,你就可以单独地看这些主题,并对它们进行定性评估。换句话说,你想问..“哪些词不属于这些话题?”**
我们来看一下主题 1(或者本例中的 0)。这有点令人困惑,因为我们看到像“棒极了”、“最喜欢的”这样的词,但也有像“压力”、抑郁”这样意思相反的词。这是一个人类不太能理解的主题的例子,但是在潜在的 Dirchelet 分配(LDA)中得分很高。这意味着我必须微调模型的超参数,以获得更好的输出。
让我们看看主题 2(模型 1),这个主题更清楚地说明了它的含义。看起来它可能指的是“受欢迎程度”这样的话题。
对于模型中的主题数量,您不断地这样做,逐个评估它们,寻找可能适合或不适合某个主题的单词。
创建推荐系统:
虽然从上面可能看不清楚,但我的最终模型产生了 8 个主题,其中有一些非常有趣的见解。例如,我发现大麻消费者喜欢吸烟有几个原因:1)一些人吸烟是因为他们喜欢大麻的味道和香味;2)另一些人吸烟是因为这让他们感到有创造力;3)另一部分使用者吸烟是因为这让他们感到精力充沛;最后 4)大多数使用者吸烟是因为这有助于缓解疼痛。
太酷了!
从本质上讲,主题模型所做的就是将我的数据分成不同的客户群。如果我从事营销和/或撰写文案的工作,我会更好地利用这些信息锁定目标客户群。
总之,回到数据科学。
利用这 8 个主题,我预测了每个菌株的综述中有多少包含这些主题。这样做给了我 8 个特征来区分我的菌株。换句话说,我基于每种菌株(例如,我正在与 200 多种菌株一起工作)在我发现的主题上的不同之处创建了一个数据集(例如,据报道,一些菌株提供了更多的创造性思维能力,而另一些菌株增加了能量)。
一旦完成,我就准备创建基于相似性的推荐系统。
选择相似性度量:
现在我们有了 8 个不同的特征(例如,主题)来描述我们的品系,是时候选择我们如何推荐它们了。有许多相似性度量可以使用(例如,余弦相似性、欧几里德距离、曼哈顿距离)。
在选择距离度量时,重要的考虑因素是:1)它在高维空间中如何处理?(例如,欧几里德距离在高维中开始失效)以及 2)推荐的准确度如何?
这给我们带来了一个问题,我们如何验证一个推荐系统?
有许多方法可以做到这一点。我认为最划算的方法是对你的数据进行回溯测试。例如,假设我们的数据集包含购买了产品 A、B、C & D 的客户 A 的数据。
一种验证方法是使用客户 A 的数据,预测他们在购买产品 A 后会购买什么,然后根据他们实际购买的东西进行验证!
结论
我使用主题建模和 LDA 方法来寻找新兴大麻市场的客户群。由此,我创建了一个推荐系统。这个项目最困难的部分是获取和清理数据——这在所有数据科学项目中都很常见。
如果我对这篇文章有足够的兴趣,我会写一篇技术文章,分享我的 MVP 代码。该产品已经发展,目前正在被许多药房使用!看看这里:www.rightstrain.co
如果你想看技术文章,请在评论中告诉我!
我如何在 AWS 上构建一个(微小的)实时远程信息处理应用程序
原文:https://towardsdatascience.com/how-i-built-a-tiny-real-time-telematics-application-on-aws-a9956f5afe65?source=collection_archive---------12-----------------------
这个故事最初发表在我的博客@ chollinger.com
在 2017 年,我写了关于如何构建一个基本的、开源的、Hadoop 驱动的远程信息处理应用程序(使用 Spark、Hive、HDFS 和 Zeppelin ),它可以在驾驶时跟踪你的运动,向你显示你的驾驶技术如何,或者你超速的频率——所有这些都不需要依赖第三方供应商代表你处理和使用这些数据。
这一次,我们将通过使用 Amazon 的 AWS、一个实际的 GPS 接收器和一台 GNU/Linux 机器,重新修补这个应用程序,并将其转换成一个更现代的“无服务器”实时应用程序。
【1】见结论
2019 年的微型远程信息处理
我最近写了一篇关于 Hadoop 与公共云的文章。结论的一部分是,公共云提供商(如 AWS、GCP 和 Azure)可以以牺牲对技术堆栈的自主权为代价提供巨大的好处。
在本文中,我们将看到这一新发展的好处如何帮助我们重新设计一个 2 年之久的项目。
体系结构
目标
我们的目标很简单:
- 应该捕获和收集在汽车中进行的每一次旅行;我们应该能够看到我们去了哪里,我们什么时候去的,我们走了什么路线,我们走得有多快
- 可视化应该显示我们的路线和速度
- 简单的问题,比如“我今天的最高速度是多少?”应该有可能
- 运行成本应该合理
指导原则
我们的指导原则应该如下:
- 应该实时接收和处理数据;如果您正在移动并且正在收集数据,那么输出应该最迟在几分钟内可用;如果您没有互联网连接,数据应该被缓存并稍后发送[1]
- 我们不想为基础设施和服务器管理而烦恼;一切都应该在完全受管理的环境中运行(“无服务器”)
- 架构和代码应该简单明了;我们希望它能在几个小时内准备好
超出范围
最后但同样重要的是,我们还忽略了一些事情:
- 使用的设备将是笔记本电脑;类似的设置也适用于 Android、RaspberryPI 或任何 SOC 设备,只要它有 Linux 内核
- 互联网连接将通过手机热点提供;将不使用单独的 SIM 卡来提供本地连接
- 电力传输将通过 12V 或电池完成
- 某些“企业”组件— LDAP 集成、VPC、长规则集、ACL 等。—超出范围;我们假设这些都存在于企业云中
- 认证将被简化;不使用 Oauth/SSAO 流——我们将使用设备的 MAC ID 作为唯一 ID(即使它实际上不是)
- 我们坚持查询 S3 的数据;更具可扩展性的解决方案,如 DynamoDB,将不在范围之内
架构图
这就引出了以下 AWS 架构:
通过这些步骤-
- 移动客户端通过使用 gpsd Linux 守护进程实时收集数据
- AWS 物联网 Greengrass 核心库通过直接在设备上运行 Lambda 函数来模拟本地 AWS 环境。物联网 Greengrass 为我们管理部署、认证、网络和各种其他事情,这使得我们的数据收集代码非常简单。一个本地函数将处理数据
- Kinesis Firehose 将获取数据,使用 Lambda 运行一些基本的转换和验证,并将其存储到 AWS S3
- AmazonAthena+quick sight将用于分析和可视化数据。QuickSight 的主要原因是它能够可视化地理空间数据,而不需要外部工具或数据库,如 nomist
[1]更快的处理很容易通过更多的钱来实现,例如通过 Kinesis 轮询间隔(见下文)——因此,我们定义了一个“接近实时”的目标,因为有人——我——必须为此付费😉
步骤 1:获取实时 GPS 数据
在最初的文章中,我们使用了 SensorLog ,一个很棒的 iOS 小应用程序,来获取 iPhone 的所有传感器数据,并将其存储到 CSV 文件中,然后在批处理加载场景中进行处理。这是一个简单的解决方案,但是投资 15 美元,你就可以得到一个真正的 GPS 接收器,它几乎可以在任何 GNU/Linux 设备上运行,比如 RaspberryPI 或笔记本电脑。
设置 gpsd
所以,这一次我们将依赖于 gpsd ,这是 Linux 内核的 GPS 接收器接口守护程序。使用这个和一个便宜的 GPS 加密狗,我们可以直接从 USB TTY 获得实时 GPS 数据。我们还将能够使用 Python 来解析这些数据。
我们将使用这个 GPS 接收器: Diymall Vk-172 ,对于硬件,我使用我的 System76 Gazelle 笔记本电脑,运行 Pop!_OS 19.04 x86_64 和 5 . 0 . 0–21 内核。还有其他选择。
这种设置很简单:
本质上,我们配置 gpsd 守护进程从正确的 TTY 中读取并在屏幕上显示它。上面的脚本只是一个指南—您的 TTY 界面可能会有所不同。
用测试这个
christian @ pop-os ➜ ~ gpsmon
你应该看到数据进来了。
只需确保您靠近窗户或室外,以便获得连接,否则您可能会看到超时:
TypeDescriptionDBUS_TYPE_DOUBLETime (seconds since Unix epoch)DBUS_TYPE_INT32modeDBUS_TYPE_DOUBLETime uncertainty (seconds).DBUS_TYPE_DOUBLELatitude in degrees.DBUS_TYPE_DOUBLELongitude in degrees.DBUS_TYPE_DOUBLEHorizontal uncertainty in meters, 95% confidence.DBUS_TYPE_DOUBLEAltitude in meters.DBUS_TYPE_DOUBLEAltitude uncertainty in meters, 95% confidence.DBUS_TYPE_DOUBLECourse in degrees from true north.DBUS_TYPE_DOUBLECourse uncertainty in meters, 95% confidence.DBUS_TYPE_DOUBLESpeed, meters per second.DBUS_TYPE_DOUBLESpeed uncertainty in meters per second, 95% confidence.DBUS_TYPE_DOUBLEClimb, meters per second.DBUS_TYPE_DOUBLEClimb uncertainty in meters per second, 95% confidence.DBUS_TYPE_STRINGDevice name
为了简单起见,我们将重点关注纬度、经度、高度、速度和时间。
第二步:AWS 物联网核心和绿草
AWS 物联网核心将为你的设备部署一个λ功能。这个函数将在本地运行,收集 GPS 数据,并通过 MQTT 将其发送回 AWS。它还将在互联网连接不可用的情况下处理缓存。
局部λ函数
首先,我们必须编写一个函数来实现这一点:
该功能使用 gps 和 greengrass 模块以预定义的批次收集数据。
在这一点上,我们还定义了我们的缺省值,在常见的情况下,某个属性——如纬度、经度或速度——不能被读取。稍后我们将使用一些 ETL/过滤器。
AWS 物联网集团
接下来,创建一个 AWS 物联网核心组(详情请参见 AWS 文档)。
创建组后,下载证书和密钥文件,并确保获得适合您的特定架构的正确客户端数据:
部署绿草客户端
然后,我们可以将 Greengrass 客户端部署到我们的设备上。默认配置假设有一个专用的根文件夹,但是我们将在用户的主目录中运行它:
如果您将它部署到一个专用的设备上(守护进程将持续运行,例如在 Raspberry Pi 上),我建议坚持使用缺省的/greengrass。
将该功能部署到 AWS
接下来,我们需要将我们的 Lambda 函数部署到 AWS。由于我们使用自定义 pip 依赖项,请参见 deploy_venv.sh 脚本,该脚本使用 Python 虚拟环境来打包依赖项:
在 AWS 控制台上,您现在可以上传代码:
创建一个别名和一个版本是很重要的,因为稍后在配置物联网管道时会参考到这一点:
在 AWS 物联网核心上配置 Lambda
接下来,回到我们之前创建的 AWS IoT 核心组,添加一个 Lambda 函数。
请记住:由于我们将无法运行容器(因为我们需要通过 TTY 与 USB GPS 设备对话),请确保配置正确:
另一个值得一提的是自定义用户 ID。客户端运行在某个用户名下,我强烈建议为它设置一个服务帐户。
完成后,点击 deploy,Lambda 函数将被部署到您的客户端。
在本地测试该功能
最后,在部署之后,确保用户正在运行容器并检查本地日志:
(这是在我的办公室运行的,因此仅显示纬度/经度为 0/0)
太好了!现在我们的 Lambda 函数在本地运行,并每秒钟将我们的位置发送给 AWS。干净利落。
第三步:Kinesis 消防软管和 ETL
接下来,我们将数据发送到 Kinesis Firehose,它将运行一个 Lambda 函数并将数据存储到 S3,以便我们以后可以查询它。
通过这样做(而不是直接触发 Lambda ),我们将数据打包到可管理的包中,这样我们就不必为每一条记录调用 Lambda 函数(并为此付费)。我们也不需要处理逻辑来组织 S3 桶上的键。
创建 ETL Lambda 函数
首先,我们将再次创建一个 Lambda 函数。这一次,这个功能将在 AWS 上运行,而不是在设备上。我们称之为远程信息处理-etl 。
该函数只是过滤无效记录(纬度/经度对为 0 的记录,这是我们前面定义的默认值),并将速度和高度的“nan”字符串更改为整数-999,我们将其定义为错误代码。
该函数的输出是 base64 编码数据以及一个“ Ok ”状态和原始的 recordID 。
我们还需要确保每行有一个JSON****并且没有数组,这是 json.dumps(data)的默认设置。这是 Athena 使用的 JSON Hive 解析器的一个限制。请原谅代码中的恶意代码。
自然,这里可以进行更复杂的处理。
完成后,将该功能部署到 AWS。
测试功能
完成后,我们可以用类似于下面的测试记录对此进行测试:
{ "invocationId": "85f5da9d-e841-4ea7-8503-434dbb7d1eeb", "deliveryStreamArn": "arn:aws:firehose:us-east-1:301732185910:deliverystream/telematics-target", "region": "us-east-1", "records": [ { "recordId": "49598251732893957663814002186639229698740907093727903746000000", "approximateArrivalTimestamp": 1564954575255, "data": "WyJ7XCJsYXRcIjogMC4wLCBcImxvbmdcIjogMC4wLCBcImFsdGl0dWRlXCI6IFwibmFuXCIsIFwidGltZXN0YW1wXCI6IFwiMjAxOS0wOC0wNFQyMTozNjoxMC4wMDBaXCIsIFwic3BlZWRcIjogXCJuYW5cIn0iLCAie1wibGF0XCI6IDAuMCwgXCJsb25nXCI6IDAuMCwgXCJhbHRpdHVkZVwiOiBcIm5hblwiLCBcInRpbWVzdGFtcFwiOiBcIjIwMTktMDgtMDRUMjE6MzY6MTAuMDAwWlwiLCBcInNwZWVkXCI6IFwibmFuXCJ9IiwgIntcImxhdFwiOiAwLjAsIFwibG9uZ1wiOiAwLjAsIFwiYWx0aXR1ZGVcIjogXCJuYW5cIiwgXCJ0aW1lc3RhbXBcIjogXCIyMDE5LTA4LTA0VDIxOjM2OjExLjAwMFpcIiwgXCJzcGVlZFwiOiBcIm5hblwifSIsICJ7XCJsYXRcIjogMC4wLCBcImxvbmdcIjogMC4wLCBcImFsdGl0dWRlXCI6IFwibmFuXCIsIFwidGltZXN0YW1wXCI6IFwiMjAxOS0wOC0wNFQyMTozNjoxMS4wMDBaXCIsIFwic3BlZWRcIjogXCJuYW5cIn0iLCAie1wibGF0XCI6IDAuMCwgXCJsb25nXCI6IDAuMCwgXCJhbHRpdHVkZVwiOiBcIm5hblwiLCBcInRpbWVzdGFtcFwiOiBcIjIwMTktMDgtMDRUMjE6MzY6MTIuMDAwWlwiLCBcInNwZWVkXCI6IFwibmFuXCJ9IiwgIntcImxhdFwiOiAwLjAsIFwibG9uZ1wiOiAwLjAsIFwiYWx0aXR1ZGVcIjogXCJuYW5cIiwgXCJ0aW1lc3RhbXBcIjogXCIyMDE5LTA4LTA0VDIxOjM2OjEyLjAwMFpcIiwgXCJzcGVlZFwiOiBcIm5hblwifSIsICJ7XCJsYXRcIjogMC4wLCBcImxvbmdcIjogMC4wLCBcImFsdGl0dWRlXCI6IFwibmFuXCIsIFwidGltZXN0YW1wXCI6IFwiMjAxOS0wOC0wNFQyMTozNjoxMy4wMDBaXCIsIFwic3BlZWRcIjogXCJuYW5cIn0iLCAie1wibGF0XCI6IDAuMCwgXCJsb25nXCI6IDAuMCwgXCJhbHRpdHVkZVwiOiBcIm5hblwiLCBcInRpbWVzdGFtcFwiOiBcIjIwMTktMDgtMDRUMjE6MzY6MTMuMDAwWlwiLCBcInNwZWVkXCI6IFwibmFuXCJ9IiwgIntcImxhdFwiOiAwLjAsIFwibG9uZ1wiOiAwLjAsIFwiYWx0aXR1ZGVcIjogXCJuYW5cIiwgXCJ0aW1lc3RhbXBcIjogXCIyMDE5LTA4LTA0VDIxOjM2OjE0LjAwMFpcIiwgXCJzcGVlZFwiOiBcIm5hblwifSIsICJ7XCJsYXRcIjogMC4wLCBcImxvbmdcIjogMC4wLCBcImFsdGl0dWRlXCI6IFwibmFuXCIsIFwidGltZXN0YW1wXCI6IFwiMjAxOS0wOC0wNFQyMTozNjoxNC4wMDBaXCIsIFwic3BlZWRcIjogXCJuYW5cIn0iLCAie1wibGF0XCI6IDAuMCwgXCJsb25nXCI6IDAuMCwgXCJhbHRpdHVkZVwiOiBcIm5hblwiLCBcInRpbWVzdGFtcFwiOiBcIjIwMTktMDgtMDRUMjE6MzY6MTUuMDAwWlwiLCBcInNwZWVkXCI6IFwibmFuXCJ9Il0=" }, ...
AWS Kinesis 消防软管
一旦我们的函数开始工作,我们希望确保来自设备的所有传入数据都自动调用该函数,运行 ETL,并将数据存储到 AWS S3。
我们可以这样配置消防水带流:
在第二步中,我们告诉流使用 telematics-etl Lambda 函数:
也是 S3 的目标。
以下设置定义了将数据推送到 S3 的阈值和延迟;此时,可以应用调优来使管道运行得更快或更频繁。
连接物联网核心和 Kinesis 消防软管
为了让它自动触发,我们只需要一个物联网核心操作,将我们的队列数据发送到 Firehose:
步骤 3.5:端到端测试
此时,建议通过简单地启动greengrasd服务并沿途检查输出来端到端地测试整个管道。
一旦服务启动,我们可以确保该功能正在运行:
在物联网控制台上,我们可以跟踪所有 MQTT 消息:
一旦我们在这里看到数据,它们应该会出现在 Kinesis Firehose 中:
接下来,检查 CloudWatch 日志中的 telematics-etl Lambda 函数,最后是 S3 的数据。
关于收集真实数据的一个注记
可以想象,使用笔记本电脑收集数据可能会很棘手——除非你碰巧是一名警察,大多数商用汽车(和交通法😉)不占路上用终端。
虽然依靠一个无头的盒子当然是可能的(并且对于日常使用来说更现实),但是我建议至少用一个有屏幕的东西来运行一组数据收集,这样你就可以验证 GPS 数据的准确性。
步骤 4:分析和可视化数据
一旦我们收集了一些数据,我们就可以前往 AWS Athena,将一个 SQL 接口附加到我们在 S3 上的 JSON 文件。
Athena 使用的是 Apache Hive 方言,但确实提供了几个助手,让我们的生活更轻松。我们将首先创建一个数据库,并将一个表映射到我们的 S3 输出:
我们现在可以查询数据:
并查看我们的行程输出。
您可能已经注意到,我们跳过了一个更复杂的、基于 SQL 的 ETL 步骤,它会自动对旅行进行分组,或者至少以一种有意义的方式组织数据。为了简化流程,我们跳过了这一步——但它肯定属于需要改进的“待办事项”列表。
示例查询
“我们应该能够看到我们去了哪里,我们什么时候去的,我们走了什么路线,我们走得有多快”
正如我们的目标所指出的,我们想知道一些事情。例如,我们在 2019-08-05 旅行中的最高速度是多少?
简单—我们将速度(单位:米/秒)乘以 2.237,得到英里/小时,选择该速度的最大值,并按天分组:
这给了我们 58.7 英里每小时,这似乎是正确的洲际旅行。
肉眼观察
查询很好。但是视觉效果呢?
如概述中所强调的,我们使用 QuickSight 来可视化数据。QuickSight 是该用例的一个简单选择,因为它提供了开箱即用的地理空间可视化,其行为类似于 Tableau 和其他企业可视化工具包。请记住,在具有 d3.js 的 Elastic Beanstalk 上的自定义仪表板可以以更快的数据刷新速率提供相同的值—quick sight standard 需要手动刷新,而 QuickSight Enterprise 可以每小时自动刷新一次数据。
虽然这不符合“实时”的目的,但它有助于开箱即用的简单、基本的分析。在路上刷新数据会产生大约 1 分钟的延迟。
设置很简单——在 AWS 控制台上注册 QuickSight,添加 Athena 作为数据集,然后拖放您想要的字段。
编辑数据集时,可以为地理空间分析定义纬度和经度两个字段:
只需将正确的字段拖动到一些分析中,我们就会得到一个漂亮的小地图,显示一次旅行:
很多时候,你甚至不需要 SQL。如果我们想按分钟显示我们的平均速度,我们可以使用带有自定义格式(HH:mm)的时间戳值,并将默认的 sum(mph)更改为 average(mph)来构建一个图表,如下所示:
使用更多定制的 SQL 来做更好的事情也是微不足道的。例如,在数据集上查看“高速”场景可以这样进行:
然后添加到数据集:
突然间,你几乎可以看到亚特兰大东部那条路上的所有红绿灯。
请记住,QuickSight 是一个相当简单的工具,与其他“大型”BI 工具甚至是 Jupyter 笔记本电脑的功能无法相比。但是,从本文的精神来看,它易于使用和快速设置。
结论
与 2 年前的“微型远程信息处理”项目相比,这一管道更简单,以接近实时的方式运行,可以更容易地扩展,并且不需要基础设施设置。整个项目可以在几个小时内完成。
当然,我们已经跳过了几个步骤——例如,一个更深入的 ETL 模块,它可以准备一个更干净的数据集或一个更可扩展的长期存储架构,如 DynamoDB。
对“无服务器”体系结构的关注使我们能够快速启动并使用我们需要的资源—没有时间花费在体系结构管理上。
然而,闪光的不都是金子。虽然我们确实取得了快速的进展,手头也有了可行的解决方案(当然,带着笔记本到处跑可能只是一种“概念验证”状态😉),我们放弃了很多组件的自主权。这不完全是“供应商锁定”——代码很容易移植,但不会在另一个系统或云提供商上运行。
物联网核心 Greengrass 处理客户端部署、证书、代码执行、容器化和消息队列。
Kinesis Firehose 接管了 Spark Streaming、Kafka 或 Flink 等成熟流媒体框架的角色;它通过 Lambda 处理代码执行、传输、缩放、ETL 资源,并沉入存储阶段。
Athena 在一点点上弥合了差距——通过依赖 Hive 方言和开源 SerDe 框架,表定义和 SQL 可以很容易地移植到本地 Hive 实例。
Lambda 可以用类似的术语来看待——它只是 Python 加上了一些额外的库。关掉这些并使用例如 Kafka 队列将是微不足道的。
因此,结论——这又一次是一个完全没有意义的项目,尽管很有趣。它展示了即使是 AWS 的一个小子集也可以是多么强大,它是多么(相对)容易设置,如何将现实世界的硬件与“云”结合使用,以及如何将旧的想法转化为更时髦的——我更喜欢这个词,而不是“现代”——基础设施和架构。
所有开发都是在 PopOS 下完成的!19.04 在 2019 System76 Gazelle 笔记本电脑 上使用 12 个英特尔 i7–9750h v cores @ 2.6 GHz 和 16GB RAM 的内核 5.0.0 上,完整源代码可在GitHub上获得。
原载于 2019 年 8 月 7 日 https://chollinger.com**T21。
我如何完成谷歌云认证挑战?
原文:https://towardsdatascience.com/how-i-could-achieve-the-google-cloud-certification-challenge-6f07a2993197?source=collection_archive---------3-----------------------
经过谷歌推荐的 12 周准备,我通过了云工程师助理考试,以下是我学到的可以帮助你的东西。
这个故事开始于 3 个月前,当我每天查看我的 Linkedin feed 时,我看到了来自 Google Cloud 的一篇关于认证挑战的帖子。我第一次读到这本书的时候,我正在考虑进行云专业化,并想知道我应该选择三个主要竞争对手中的哪一个。
我为什么选择谷歌云?
首先,当时的决定不是技术上的,因为我在 Azure、AWS 或 GCP 方面没有丰富的经验,只是 Azure 的基本项目和 GCP 大数据产品的一些步骤。我对 GCP 和他们的产品组织的第一印象是它感觉干净、简单和容易理解(UX ),并且对一个干净的控制台 UI 很重要。
Big Data and ML products in GCP [maelfabien]
在那段时间里,我还回忆起了我日常使用的所有谷歌产品(youtube、谷歌助手、照片等)。)和工作得有多好,我从《连线》杂志上找到了这句话:
这就是谷歌之所以成为谷歌的原因:它的物理网络,数千英里的光纤,以及成千上万的服务器,这些加在一起就是所有云之母。[连线]
所以带着这些想法,我准备在 GCP 开始新的学习竞赛!
谷歌云挑战到底是什么?
嗯,再次阅读这篇文章后,我了解到谷歌云有 7 个主要(也有其他测试版)认证:
- 助理云工程师
- 专业数据架构师
- 专业数据工程师
- 专业云开发人员
- 专业云网络工程师
- 专业云安全工程师
- 专业协作工程师。
挑战(在一年内发起一项或多项)包括通过这些认证中的任何一项,为了实现这一点,谷歌帮助您获得了一些免费和付费资源的学习途径,在某些情况下,还提供了官方书籍和考试费用的折扣,此外,如果您在注册后的 3 个月内获得了认证,谷歌还会给您 100 美元的谷歌商店优惠券。
Google Cloud Certification Badges [Jhanley]
对我来说,我决定参加云工程师助理的入门级认证。该认证不需要以前的经验,并为您提供所有谷歌云平台组件的概述,如 IaSS、Kubernetes、PaSS、无服务器或托管服务。
协理云工程师认证谷歌推荐什么?(以及我的真实意见)
在第一个月,存在两个主要步骤 Qwiklabs 和预订您的认证。
qwiklab
在我看来,是在真正的谷歌云 项目(也叫 AWS)中实践的最佳平台之一。当我注册挑战时,谷歌给了我 1 个月的 Qwiklabs 无限制积分(1 个积分约 1 美元),所以我尽可能多地使用(直到今天我完成了超过 50 个实验室)此外,你可以将所有完成的任务添加到你的 Linkedin。在这里,谷歌建议完成:
- GCP 必需品 Qwiklabs quest
- 云架构 Qwiklabs quest
这两个任务是相辅相成的,如果你刚到 GCP,这是一个很好的起点,对我来说,完成这两个任务花了我将近 3 周的时间(每周 4 小时)。
A good resource to practice [Linkedin]
预订您的认证
这是一件看起来微不足道的事情,尽管它很有帮助,因为它让你有了最后期限,并迫使你计划你的学习时间。在我的情况下,在我完成任务后,我收到了一个 25 美元的折扣代码来购买考试,所以最终价格是 100 美元。此外,这个代码作为一个链接来证明你正在完成挑战,所以记得这样做。
Voucher
Coursera 专精
在第二个月,谷歌给了我一个月的谷歌计算引擎专业化设计,这包括来自不同主题的 6 门课程,并不都与考试有关,但是,我建议完成所有课程,因为它给了你更多的实践经验(也包括更多的 Qwiklabs)和日常工作所需的良好理论知识。完成所有课程花费了我大约 1 个月的时间,我再次强烈建议您完成最后一门课程,在这门课程中,您将开发一个完整的云应用程序。
Coursera Specialization
这是谷歌推荐的三个主要资源,从我的角度来看,它们不一定足够,所以我想用我的个人经验来补充。
我如何为完成挑战做好准备?
当然,我遵循谷歌的三条建议,并补充如下:
- 买官书(谷歌也给八折买)。这本书有很好的理论信息,真正的考试题,练习练习,都遵循为考试准备的课程。
- 参加实践考试,您不需要预约或支付任何费用,只需进入并开始回答。
- 查看官方文档,特别是要了解定价方法和谷歌针对实际问题的最佳实践。
- 练习!谷歌给你 300 美元的信用点用于 GCP,这样你就可以访问所有的产品,也有一个免费层。这是探索所有组件的绝佳机会。
到了第三个月,有了这些信息,我就可以准备考试了。
考试怎么样?
关于考试的一些有趣的信息是:
- 慢慢来,你有 2 个小时(相信我,回答所有问题是准确的,验证几个问题需要几分钟)和 50 个问题(大多数情况下,你需要找出使用 GCP 产品的最佳选择)。
- 结果不会马上显示出来,你必须等待 1 到 10 天。
- 你必须亲自到认可的考试中心参加考试。
- 结果不显示你的分数
奖励
你所有的努力都有回报,所以当我收到结果时,我感到非常满意:)
另外,我收到了承诺的礼券。
Gift voucher
PS 如果你有任何问题,或者想要澄清一些事情,你可以在 Twitter 和 LinkedIn 上找到我。另外,如果你正在考虑参加Apache Spark 的 Databricks 认证,我写了一篇技术文章描述了我的建议。
[## 获得 Apache Spark 的 Databricks 认证后,我的 10 条建议
几个月前,我开始准备获得 Apache Spark 的 Databricks 认证。这不是…
towardsdatascience.com](/my-10-recommendations-after-getting-the-databricks-certification-for-apache-spark-53cd3690073)
我是如何创建超过 100,000 个带标签的乐高训练图像的
原文:https://towardsdatascience.com/how-i-created-over-100-000-labeled-lego-training-images-ec74191bb4ef?source=collection_archive---------3-----------------------
Some of the 300,000+ images I captured while leaving the machine running for a few days.
如果你是一个业余爱好者或从事人工智能项目的研究人员,很可能你已经遇到了不得不生成大量带标签的训练数据的不幸情况。当然,在花费了所有资金从一个不修边幅但心存感激的比特币矿工手中拿走一些粗略的 GPU 之后,你现在负担不起外包你的注释管道。
作为我寻求建造一个通用乐高分类机的一部分(更多文章随后!),我自己也碰到过这个问题。虽然大部分训练数据是自动生成的,但该项目仍然需要相对较少但相当数量的由人类标记的良好的旧地面实况图像。
大多数深度学习教程和教育似乎都假设你总是会得到一个漂亮整洁的数据集,准备好并等待处理,但对于大多数现实世界的应用程序来说,你不会将居中的手写数字归类到 0 到 9 的类别中。在一个真正的人工智能项目中,一些(如果不是大部分)艰苦的工作是处理简单的数据采集。我经历过这方面的艰难,我认为分享一些我学到的经验和技巧会有所帮助。
A sneak preview of the LEGO sorting machine prototype in action.
问题是
乐高分拣机的识别组件的工作原理是沿着摄像头下方的传送带,一次一个地收集乐高元素。为了开始标记过程,我让机器运行了几天,收集了大约 30 万张乐高元素的未标记图像。我可能无法将它们全部标记出来,但是,嘿,这些图像很容易收集。为什么不去疯?
有成千上万个不同的乐高零件编号,机器有可能被训练识别。然而,我已经排除了一些类别——目前我不在乎区分“瓷砖,圆形 2 x 2 与比萨饼图案”和“瓷砖,圆形 2 x 2 与中国新年汤图案”。但是,在你开始认为我显然让事情变得太简单之前,在一天结束时,我仍然有超过 2500 个零件类别。
Dealing with all these part numbers is definitely overkill — deduplication was heavily used.
(如果你想喝点中国新年的汤,你现在可以在 brick link 上为自己买一块 2 x 2 的瓷砖,只需 22.07 澳元)。
无论如何,为了获得用于训练的标记数据,我现在需要从 2500 多个可能的零件号中手动分配一个给机器运行时相机拍摄的每个乐高元素图像。
所有监督学习的目的是将现有黑盒神经网络(在这种情况下,是人脑)的知识转移到新的神经网络(通常在计算机上运行)。你的人脑黑盒分类器在教学任务中很棒,但不幸的是它非常慢。对于其他我们还不知道如何卸载到运行在亚马逊仓库中的 GPU 的任务,它也可能是需要的。
We might start getting into trouble if we do too much of this.
我们的总体目标是降低我们的大脑分类器标记一幅图像的时间。我可以采取 3 个关键步骤来大大加快这个过程。与所有伟大的工程解决方案一样,这三个步骤的共同主题是尽可能避免大量工作。
第一步:作弊(又名:解决问题)
让您能够有效标记大量数据样本的最佳方法是首先利用生成样本的方式。通常,您对样本生成过程有一定程度的了解,尽可能多地滥用这种能力是个好主意。
在我的例子中,我注意到相机有一个大约 10–20 帧的窗口,用来拍摄零件在传送带上移动时的照片。因此,相机不是只拍摄一张图像,而是拍摄零件完全可见的每一帧图像,并将 10-20 张图像存储在一起。
An example bundle.
因此,虽然我的 30 万张左右的图像都没有标签,但我仍然可以访问一组非常有价值的元信息,这些信息告诉我每捆 10-20 张图像必须有相同的标签。这意味着,与尝试单独标记每张图像相比,我的标记速度提高了 10-20 倍。
顺便说一句:捕捉每个部分的多个图像也让我在实际分类性能方面获得了巨大的好处。我将在以后的文章中介绍更多的细节,但是如果您觉得您可以在自己的项目中实现类似的东西,请尝试一下!
第二步:懒惰(又名:简化过程)
对于任何实际情况,通过手动将值一次一个地放入“labels.csv”来创建注释,往好了说会非常慢,往坏了说则完全不切实际,尤其是当您的注释比简单的标签(例如,边界框或分段遮罩)更复杂时。因此,在几乎所有情况下,预先花点时间创建一个注释实用程序是值得的。
我的第一个版本的乐高标签工具非常简单,但却是让我以相当快的速度完成标签的最低要求。由于我不知道哪个零件号与特定的零件名称相关联,所以我需要添加一个简单的文本搜索实用程序,当出现一组要标记的新图像时,它将允许我搜索“砖 2 x 4”或“板 1 x 2”之类的内容。如果没有搜索工具,我将不得不使用谷歌或滚动我的零件数据库来查找一个元件的正确零件号。
The bare minimum for usability, but we can do better.
我很快就厌倦了必须手动输入零件号,而且坐在电脑前完成这一切有点麻烦。因此,我决定利用我的 web 开发经验,花几个小时组装一个简单的 web 应用程序。这最终成为一个巨大的胜利——不仅用户体验更加流畅,这意味着我能够更快地标记,而且因为它在我的手机上运行,我还能够用标记乐高积木来代替我通常在 Twitter 上无意识滚动的一些时间。这实际上是相当平静的体验(尤其是与 Twitter 滚动相比)。
Label Utility 2.0: Search, then tap the icon that matches the bundle at the top.
与手动搜索零件号并将其输入 labels.csv 相比,使用简单的标签应用程序的速度平均提高了约 2-5 倍,这还不包括能够在任何地方进行标签的便利性。
使用 web 应用程序作为标签应用程序还有一个非常有吸引力的第二个好处:只需给他们一个链接,就可以很容易地开始将其他人包括在标签过程中。我还没有尝试过这个项目,但是我很想尝试一下,尤其是在下一步的时候。
第三步:让其他人来做这件事(又名:使用人工智能辅助注释)
当你在标记你的数据的时候,你一直在原型化你的实际模型,并且在边上做模拟训练,对吗?你当然有!一旦你注释了大量的数据(比如说你的成品需要的 10-30%),你应该有能力训练你的网络来完成你的任务。例如,如果你正在构建一个分类器,你可能不会得到 95%的前 1 名准确率,而是得到 90%的前 5 名准确率。
这是我使用前两种策略手工标记了大约 30,000 张图片后发现自己所处的情况。我意识到,通过将这个“原型分类器”连接到我的标签实用程序,我可以进一步大幅提高我的标签速度。我不需要对每一束图像都进行文本搜索,我可以首先给出来自原型分类器的最高猜测,其中一个在 90%的情况下都是正确的。
Label Utility 3.0: Just choose one of the AI’s suggested options! The text search is still there for when the AI fails.
这又给了我 2-10 倍的速度提升——对于我不容易记住名字的奇怪部分尤其有效。我现在能够平均 1-2 秒钟标记一整捆图像。这相当于每秒 5-10 张图片!对人类来说还不错!
通过在我的标记管道中实现上述关键步骤,我能够在注释管道中实现 40-1000 倍的加速。在没有任何外部帮助的情况下,我已经标记了超过 100,000 张图片,而且这主要是在我通常浏览社交媒体的业余时间。
最后,这里有一个标签实用程序的实际使用视频。
我如何在 5 分钟内向数据科学家解释 OOP
原文:https://towardsdatascience.com/how-i-explain-oop-to-a-data-scientist-in-5-minutes-44faf72ecca7?source=collection_archive---------12-----------------------
每次你使用熊猫,你都在使用一个物体…
当我说数据科学家时,我实际上是指那些将大部分时间花在统计和分析上的人,那些建立各种模型并使用它来解决业务问题的人。
经常从身边的数据科学家那里听到的几个关键词——SQL、R、Python。许多与大数据主题相关的术语,如 Hadoop、Spark、Pig 和 Hive,被抛入日常对话中,但我几乎没有听到他们中的任何一个谈论面向对象编程(oop)。
尽管对于数据科学家来说,知道 OOP 是什么并不是必须的,但我认为如果他们至少对 OOP 有一个粗略的概念,那还是很好的。
所以几天前,在我午休的时候,我决定花 5 分钟的时间向我的一个同事解释 OOP 的概念。
由于 Python 一直是数据科学家最喜欢的语言,所以我选择用 Python 向 LH 解释 OOP。我是这样解释的。
我:今天我们用 Python 来做一个只有 1 个角色的角色扮演游戏吧!LH:好吧…?
我:你能给我写一个有名字,有生命,有法力,有等级的角色吗?LH:当然,小菜一碟。
name = "Jason"
health = 100
mana = 80
level = 3
我:现在我想给游戏添加一个怪物:D
LH:嗯……好吧……
hero_name = "Jason"
hero_health = 100
hero_mana = 80
hero_level = 3
monster_name = "Techies"
monster_health = 20
monster_mana = 0
monster_level = 1
我:如果这次我要 10 个怪物呢?
LH: …?
hero_name = "Jason"
hero_health = 100
hero_mana = 80
hero_level = 3
monster_1_name = "Techies"
monster_1_health = 20
monster_1_mana = 0
monster_1_level = 1
monster_2_name = "Sand King"
monster_2_health = 120
monster_2_mana = 20
monster_2_level = 3... monster_10_name = "Chaos Knight"
monster_10_health = 150
monster_10_mana = 50
monster_10_level = 10
LH:这没有意义……
我:让我给你看看 OOP 是如何解决这个问题的!
解决这个问题的一个面向对象的方法是使用一个对象——把一切都当作一个对象。注意英雄和怪物都有相同的属性。我们可以有一个普通的职业叫做生物,由英雄和怪物共享:
class Creature():
def __init__(self, name, health, mana, level):
self.name = name
self.health = health
self.mana = mana
self.level = level
什么是课?一个类就像一个对象的蓝图。
现在,每当我们想要一个新的怪物,英雄或任何其他生物,我们不必重新命名我们的变量或保持创建多个属性。使用我们刚刚声明的生物类作为蓝图,我们可以轻松地创建新对象:
hero = Creature("Jason", 100, 80, 3)
monster_1 = Creature("Techies", 20, 0, 1)
monster_2 = Creature("Sand King", 120, 20, 3)... monster_10 = Creature("Chaos Knight", 150, 20, 3)
要访问对象的属性,我们可以简单地这样做:
hero.name = "James"
monster_1.health = 0
monster_2.level += 1
LH:酷哥!这就是 OOP 的全部内容吗?我:这只是 OOP 提供的一部分,实际上还有更多。
我:下周我再给你讲讲 OOP 吧!LH:当然可以!期待啊!
我对数据科学和 Metis 训练营的感受
原文:https://towardsdatascience.com/how-i-feel-about-data-science-and-the-metis-bootcamp-experience-398b171289d0?source=collection_archive---------18-----------------------
在 Metis 训练营接近尾声时,记录我的数据科学相关想法
夏天到了,我的数据科学训练营也快结束了,它非常有趣、有见地、有收获,我会非常想念这种学习环境和我的 Metis 团队的其他成员(保持联系,伙计们!).在我们骑着马奔向夕阳之前,我想为后人记录下过去几个月的一些重要收获。
所以它来了——我的第一篇文章…
1.找出正确的问题是最难的部分。
让您的数据以一种干净且可用的格式存储可能是一件困难的事情。选择正确的模型和调整超参数有时也很有挑战性(hello grid search!).但老实说,很多时候最难的部分是找到一个有趣的、值得攻击的问题。
在训练营期间,我参与了四个大项目。我最纠结的一个是我的自然语言处理(NLP)项目。我怀着最美好的愿望开始了这个项目,但也不知道如何处理我的数据。
“我要从 Reddit 上下载一堆东西,用它做一些超级酷的东西!”我以为。
在我所有的项目中,这是最糟糕的一个。其他每个项目都有一个明确的目标:
- 可靠地预测贷款违约,以构建一个干净的贷款组合,可以赚取巨大的回报。
- 找出电影票房表现的驱动因素,这样电影公司就能更可靠地盈利。
- 用神经网络预测短期股票收益,战胜股市。
但是,尽管我学习了主题建模、情感分析和推荐系统,我并没有产生实质性的实际结果。这都是因为我不知道我要回答的是什么问题——因此也没有明确的努力目标。
经验教训—问题应该驱动我收集哪些数据,而不是相反。
2.冒名顶替综合症很严重。
在训练营,你基本上有三个月的时间从数据科学新手到训练深度神经网络。在此期间,你会被行业专业人士的资历所吓倒,也会被同学们的创造力所惊叹。在整个过程中,你会努力忽略那个声音——
“你将无法完成这一职业转型。你想为之工作的公司不会雇用你作为数据科学家,因为你没有合适的资格证书,或者因为你缺乏相关的经验。”
事实是我担心面试。在我签下那份工作之前,我会为找工作感到相当大的压力。
但是当我回头看的时候,我为我所学到的和付出的努力感到骄傲。虽然我们可能还有很长的路要走,但我和我的同学也已经走了很长的路。
冒名顶替综合症可能永远不会完全消失。但我相信,我和我的同学们不会屈服于这种不充分的感觉,而是会把它作为燃料,更快地学习,更努力地工作。
3.即使在数据科学领域,MBA 仍然有发展空间。
如今,尤其是在硅谷,MBA 们的名声很差。但是,对企业如何赚钱以及我们可以利用什么杠杆来赚更多的钱有一个直观的理解仍然是至关重要的。
探索数据、训练模型和预测事物都是非常有趣的。但大多数时候,我们仍然使用分析和数据科学来支持某种业务目标。
对这个问题的洞察将如何帮助我的公司变得更加成功?
有商业背景的人相对擅长用金钱来描述数据科学问题,并且经验丰富。所以对你当地的 MBA 好一点,即使他或她分不清熊猫和熊猫的区别。
4.如果有一个梯度,那么我们可以下降。
Gradient descent is a versatile optimization method for finding minimum values
我数不清训练营中有多少关于特定算法的讲座是以这样的话结束的:
“最后,我们可以指定我们的成本函数,并使用梯度下降来最小化它,并估计模型的参数。”
在我看来,有两件事将几乎所有的数据科学联系在一起:
- 相关性 —数据科学就是寻找各种事物之间的联系。我之所以这么说,是因为与传统统计不同,我们经常处理杂乱的非结构化数据,如文本或图像。但在本质上,我们仍然在寻找我们杂乱的数据和我们关心的解释或预测的事情之间有趣而有见地的联系(信号)。
- 梯度下降 —因为我们经常最终需要分析大量杂乱的非线性数据,所以我们需要一种同样通用的方法来最小化成本函数(我们寻求最小化模型的成本函数,以便获得其最佳参数值)。梯度下降正是如此。它快速、有效、适应性强,是从逻辑回归到神经网络的动力。
如果你想对梯度下降有更深入的解释,我在我的关于神经网络的帖子中写了它(你将不得不向下滚动一段路,或者只是阅读全文,呵呵)。
5.收集正确的数据并雇用正确的人来从这些数据中挖掘见解,这可能是一个真实而持久的竞争优势。
我本质上是一个价值投资者,当我分析一家公司时,我习惯于寻找竞争优势的传统来源(如规模经济)。因此,在早期,我绝对不习惯将一家公司的数据和分析视为竞争优势的持久来源。
我之前持怀疑态度的原因是,几乎每个公司都有一些关于其客户的有趣的专有数据。所以我认为能够更好地分割数据或更好地预测是不可持续的——你的竞争对手自己可以雇佣更好的工程师和更好的模型,并轻松赶上。
但是像谷歌、脸书和亚马逊这样的公司证明这是非常错误的。据我所知,这三家公司和其他类似的公司通过使用以下渠道建立了巨大的竞争优势:
- 收集几乎所有东西的大量数据。
- 构建用于存储和清理所述数据的基础设施。
- 雇佣成千上万真正聪明勤奋的人来建立模型,挖掘所有可用见解的数据。
- 使用新收集到的见解向人们出售物品或让他们购买物品(资本家!).
- 从步骤 4 中的所有交互中收集更多的数据,以便迭代和改进模型以及生成的洞察。
- 不断重复步骤 3、4 和 5,直到竞争被远远甩在身后。
虽然并非大数据和机器学习的所有承诺好处最终都可能实现,但聪明运营的公司已经证明,通过数据科学,他们可以从以前认为毫无价值的数据中提取大量价值。
我从梅蒂斯训练营得到的另一个令人惊奇的东西是这个博客。如果没有以前 Metis 学生的一些好例子和导师的督促,我可能不会有时间写这么多。但现在我喜欢它,并将继续不畏艰难地写作。
祝我好运,因为我准备开始一个新的职业生涯(我对此非常兴奋)。感谢阅读!干杯!
从我这里查看更多。
我如何通过数据扩充提高 1%的准确率
原文:https://towardsdatascience.com/how-i-got-1-better-accuracy-by-data-augmentation-2475c509349a?source=collection_archive---------14-----------------------
放下你所爱的东西是很难的。是的,在本系列的第 5 篇文章之后,我真的以为我已经完成了,但是……来自和 MNIST 例子的准确性/误差指标开始困扰我,我非常确定我可以通过实现另一个简单的技巧来改进它们:数据增强。事实证明这很容易实现,而且效果非常好。
当你读完这篇文章,你可以试试我在这个互动 MNIST 游乐场上训练的一个小型神经网络!
此外,请查看该系列的所有零件:
- 第一部分:基础。
- 第二部分:梯度下降和反向传播。
- 第 3 部分:用 Java 实现。
- 第四部分:更好更快更强。
- 第 5 部分:训练网络读取手写数字。
- Extra 1:我如何通过数据扩充提高 1%的准确率。
- MNIST 游乐场。
数据扩充
数据扩充就是从你实际得到的数据中制造更多的数据——在不丢失数据携带的信息的情况下增加方差。这样做降低了过度拟合的风险,并且通常可以提高看不见的数据的准确性。
在图像作为输入数据的特定情况下(如 MNIST 数据集中的情况),增强可以是例如:
- 仿射变换(旋转、缩放、平移等。)
- 弹性变形
- 卷积滤波器(例如,在 MNIST 的例子中,通过使用最大或最小内核使数字变得更粗或更细)
- 添加噪声
我决定进行仿射变换。我以前在 CG 中使用过很多次,知道它们非常简单明了。
仿射变换
仿射变换将一个仿射空间映射到另一个仿射空间。更具体地说,我们可以说仿射变换可以通过旋转、缩放和平移等操作来变换特定的坐标,并告诉我们这些变化后的坐标是什么。仿射变换可以被表示为矩阵,并且可以被组合,使得一系列变换仍然可以被表示为单个矩阵。
例如(这里是二维描述的),我们可以这样构成变换 M:
当我们得到这个 M 时,只需将它与输入坐标相乘,就可以得到它们在目标空间中的新位置,如 M 所定义的。相反,我们可以将目标空间的坐标与 M 的倒数相乘,以返回到原始空间。
在 Java 中,创建这些仿射变换矩阵就像这样简单:
这就是我们将原始 MNIST 数字中的坐标转换为新的虚构数字中的坐标所需要的全部内容,这些数字是原始数字稍加修改的版本,用于训练网络。
该方法作为一个整体,是 DigitData-entity 上的一个 mutator(参见第 5 部分),看起来像这样:
正如您在第 29–41 行中看到的,上面的代码还具有插值功能,这使得转换后的结果更加平滑。
此外,还会进行一项检查,以查看生成的数字是否可能以某种方式进行了转换,使其部分溢出到目标 28×28 数组之外。当情况似乎是这样的时候,我们放弃那个改变并且再试一次。如果我们不能在 5 次重试内达到一个好的转换数字,我们跳过这一轮的转换,退回到原始数字。这很少发生。下一轮我们可能会更幸运,得到一个有效的转换。
说到巡房。我们多久改变一次输入数据?在每个训练时期之后,我像这样变换整个数据集:
这样,神经网络就不会两次看到同一个数字(如上所述,除了少数运气不好的变换尝试之外)。换句话说:通过数据扩充,我们已经创建了一个无限的数据集。当然,从严格的数学意义上来说,这是不正确的……但对于我们所有的训练目的来说,我们为随机仿射变换选择的分布方差绝对足以创建一个独特的数据流。
结果呢
我选定的那个小型神经网络(只有 50 个隐藏神经元,见前一篇文章)的错误率平均下降了 1%,现在可以稳定地训练到 1.7%-2%的错误率。
零钱。影响很大!
请在我创建的一个小型 MNIST 游乐场上测试一下这些训练有素的网络表现如何。
此外,如果你想仔细看看代码在这里:https://bit bucket . org/Tobias _ hill/mnist-example/src/Augmentation/
原载于 2019 年 1 月 26 日machine learning . tobiashill . se。
我如何更好地学习机器
原文:https://towardsdatascience.com/how-i-got-better-at-machine-learning-63ce0f0e81d7?source=collection_archive---------20-----------------------
我多年来学到的提高机器学习的技巧和诀窍
Image by Bessi from Pixabay
对我来说,机器学习是一个需要计算机科学和数学知识很好结合的研究领域。虽然这是一个非常有趣的领域,但并不具有挑战性。我相信只要有足够的动力、勇气和时间,任何人都可以成为专家。
需要一些动力吗?
那我应该告诉你,在这个领域工作可以赚很多钱。不同行业有很多机会,所以你可以尝试不同的行业
Sources here, here and here
这些年来,我观察到一个有趣的现象(当然我也可能是错的),那就是机器学习的基础并没有改变。我这么说的意思是,我们现在所说的大多数‘模型’都是由众所周知的块组成的,比如全连接层、卷积层、残差层或归一化层。当然,并不是每个模型都是由这些组合构成的。有特殊的情况,如空间转换网络和注意机制。然而,对于不同类型的模型,一般的构造块或多或少是相同的。
那么这意味着什么呢?这意味着,如果你知道这些基本原理,你学习建立在这些基础上的更复杂的主题将会容易得多,花费的时间也更少。
所以今天我想分享一些帮助我“更好地”学习机器的技巧和诀窍。但请注意,我仍在学习机器学习,因为还有太多的东西有待发现。
1.享受学习的过程,慢但稳。
Image by Pexels from Pixabay
我这么说的意思是要投入大量的时间去理解机器学习的基础知识。
说得具体一点,学数学。
理解反向传播需要向量微积分。统计/概率对于理解信息论至关重要。优化对于了解幕后到底发生了什么至关重要,因为在一天结束时,这就是模型正在做的事情。
我知道刚刚起步的研究人员并不真的需要了解这些东西,这要感谢那些执行自动微分的软件包。我个人不相信学习这些基础知识会自动让你成为该领域的优秀研究者或从业者
然而,我相信学习和理解这些概念会让你的事情变得容易得多。对我来说是的。例如,在没有自动微分帮助的情况下,从零开始实际实现一个神经网络,可以让您具体了解模型是如何学习的。
2.与其他研究人员交谈,了解他们的工作
我目前是瑞尔森视觉实验室的一员,正在那里攻读硕士学位。久而久之,我在实验室里交了很多朋友,比如杰森和马修。
Image by Sasin Tipchai from Pixabay
我会不时瞥一眼他们的显示器,看看他们在做什么。
我经常会看到一些非常有趣的东西,比如自然图像的分割结果,或者他们正在处理的一堆代码。所以我会问他们一些问题,比如“代码是关于什么的?它在做什么?你在解决什么样的问题?”
然后一个对话火花。他们会教我一些他们正在解决的问题,我会学到一个新的概念或解决方案。这非常有用,因为当我解决类似问题的时候,我就不用从头开始了。此外,我还可以接触到以前不知道的新课题和论文。
虽然我经常不能完全理解他们在做什么,但我仍然感谢他们花时间和我交谈。毕竟,总有一天他们会解决我正在解决的问题,我也很乐意帮助他们。
3.为你感兴趣的理论或技术找到一个用例
Source: Link
我现在正在做的一些事情,比如风格转换。实际上,我是在看到一个宣传视频或 YouTube 视频后开始研究它们的。
有时候我会开始研究一个主题,只是因为我想做一些很酷的东西。在这个过程中,我经常找到不同的或者更好的方法来解决同一个问题。
当然,不能保证这些新方法会更好。但这是学习新事物的过程,完全理解它。达到一个水平,在那里我可以融入新的方法,真正帮助我变得更好。
这有助于我更好地学习机器的另一个原因是,我可以学习最佳实践。例如,当一个很酷的项目成为开源项目时,我只是从存储库中克隆它,并研究其他研究人员如何编写他们的代码。
这样做让我了解到其他研究人员在做什么,以及他们是如何组织代码的。显然,有时候很难理解研究人员写的东西,因为他们不是软件工程师。但看到他们做了什么还是有帮助的,我可以记下什么不该做。
结论
好了,你知道了。这些是我用来更好地理解机器学习的一些技巧和诀窍,我希望它们也能为你工作。
最终,我认为任何拥有永恒好奇心和毅力的人都将能够研究他们感兴趣的主题并学习机器学习。现在网上有很多优秀的深度学习内容。
虽然这些建议中的一些会对你有帮助,但也可能没有,这完全没关系。我们都是不同类型的学习者,并不是每个人都必须穿同样的鞋子。但是我真的希望这些建议至少能帮到你!
我是如何开始 Kaggle 竞赛的(这并不难)
原文:https://towardsdatascience.com/how-i-got-started-with-kaggle-competitions-its-not-that-hard-7666f25e9f93?source=collection_archive---------12-----------------------
数据科学社区的大多数人都知道 Kaggle 是一个学习和增长技能的地方。从业者提高的一个流行方法是在预测挑战中竞争。对于新人来说,跳进网站并在实际的挑战中竞争可能是压倒性的。至少,我一直是这么觉得的。
在旁观之后,我决定在 2018 年底最终涉足 Kaggle 竞赛竞技场。在很短的时间内,我学会并磨练了许多数据科学技能,否则我将无法实践这些技能。令我惊讶的是,我还发现竞争可以带来很多乐趣——即使是作为一名新人。
在这篇文章中,我试图揭开 Kaggle 竞赛的一些组成部分的神秘面纱,对于第一次参加竞赛的人来说,这些部分可能不会立即显现出来。总的来说,我希望展示 Kaggle 比赛可以成为一种有趣而有效的方式,在这一领域积极学习。
公共排行榜跟踪社区进度
让我们为任何不熟悉该平台的人介绍一下 Kaggle 101:在一个典型的 Kaggle 比赛中,数据科学家被提供了 训练 和 测试 组数据。训练数据提供有竞争者试图预测的标签,而测试集没有标签。你的工作是编写一个算法来预测测试数据的标签。
在比赛过程中,Kagglers 可以提交他们的预测, 这些预测的一部分 (我稍后会解释为什么这很重要)会被评分并显示在公共排行榜上。这是一个很好的方式,让竞争对手在比赛过程中了解自己的实力。作为一个临时的竞争对手,在整个比赛过程中观看排行榜顶部的动态也很有趣。
在这张图表中,我绘制了最近一场名为“即时满足”的 Kaggle 比赛的公共排行榜。每条蓝线代表每个团队,橙色线显示领先团队的分数(在这场比赛中,得分指标 1 将是满分)。
公共笔记本保存共享的知识
当你追踪上面的情节时,你可能会问自己,为什么这么多的团队看起来彼此跟踪得如此之近。大量团队分数汇聚的深蓝色线条可以部分地通过公共 Kaggle 笔记本(以前称为 Kaggle 内核)来解释。
以前没听说过 Kaggle 笔记本?它们是一种基于云的方式,让社区分享关于他们预测模型的代码和想法。对于新手来说,这是一个很棒的设置,因为不需要构建本地环境、下载数据、安装包,也不需要陷入管理的泥潭。此外,这些虚拟机通常比一个人的本地笔记本电脑更强大。笔记本可以是私有的(只有您和/或您的团队可以看到)或公共的。Kaggle 的一个令人兴奋的方面,以及一个真正的“游戏中的游戏”及其自身的奖励,是一个人的公共笔记本被社区成员投票支持的可能性。
在每场比赛中,都会有由社区成员创建的公共笔记本,以帮助探索给定用例的基准模型。数据科学家使用这些笔记本来获得社区的认可,修补其他人的工作,并在隐喻性地牵着你的手前进的同时,一步一步地通过另一个人的代码。
那么,那些所有 Kaggle 分数汇聚的蓝色粗线?那就是当一个突破性的内核发布后,整个竞争领域都采用某人的代码或视角。在 2018 年的场外,我看到了笔记本的魅力,并最终在实际参加比赛之前,开始自己写作和出版它们。
论坛提供背景
如果你不想马上深入内核,那么你可以将注意力转向 Kaggle 论坛。他们是另一个开始的好地方。在这里,数据科学家分享他们的想法,提出问题,并进行对话。
Discussion posts by the top teams in the “Jigsaw Unintended Bias in Toxicity Classification” competition
比赛结束后,获胜的团队通常会发表他们的观点,以改善整个社区。
各种类型的戏剧都有
每场比赛都有意想不到的时刻:例如,处于劣势的球队跃居积分榜首位,或者戏剧性的数据泄露。
很多时候,在一场比赛中,一两支队伍会从排行榜的其他队伍中脱颖而出。根据社区对顶级竞争对手如何达到这一目标的猜测,最近被称为“寻找魔力”,通常是竞争对手和观察者的煽动者。
Tracking the CHAMPS competition public leaderboard (lower score is better)
在最近的几场比赛中,我创造了一些有趣的笔记本来跟踪公共排行榜。在“CHAMPS Molecular Properties”竞赛的上图中,你可以看到一个团队找到了脱离人群的方法的例子。
组队升军衔
在 Kaggle 上,合作是一个重要且常见的策略。它允许数据科学家在安全的环境中协作,并在其预测模型中获得协同动力。我通常通过设定个人目标和关注个人成功来开始比赛。一旦我缺乏改进我的模型的想法,我会考虑拓展业务,和其他人一起努力(但不是太多其他人——谷歌“林格曼效应”)。
All teams at the top of the leaderboard for the “Santander Customer Transaction Prediction” competition
Kaggle 的这一方面与个人职业生活中其他领域的项目合作没有什么不同。-它需要信任、道德取向和合作的心态。或者,在单人比赛中获得高分被广泛认为是 Kaggle 上最难做到的事情之一——事实上,为了获得比赛大师的地位,你必须获得一枚单人金牌,总共 5 枚金牌。
重组带来最终结果
任何给定 Kaggle 比赛中的公共排行榜仅在测试集的一部分上评分。可能会无意中创建在公开评分的测试集部分表现非常好的模型,但它们的模型准确性实际上并不能很好地转化为私有排行榜。这就是为什么有一个不仅准确,而且对公共和私人排行榜都通用的模型很重要。
社区将这种现象称为“过度适应公共排行榜”。当最终的结果被制成表格时,这种调整的效果有时会非常引人注目!上面的图显示了最近一次比赛中前 10 名的公共和私人团队-正如你可以看到的那样,公共前 10 名中只有一个团队留在了最终排名中。相对于一些著名的人事变动,这个例子实际上是相当温和的,在那些变动中,团队发现他们自己移动了数百个,有时是数千个位置。
健康竞争中的娱乐、学习和社区
排行榜、笔记本、论坛、戏剧、团队和最终结果:如果你决定参加 Kaggle 比赛,你会遇到很多事情。我想不出比加入一个更好的方法来提高我们的专业机器学习技能。推动您的预测解决方案策略的极限,与社区互动,并享受这一过程。
在 Kaggle 或 Twitter 上联系我,我会在排行榜上看到你。
我如何在 Spacenet 4 挑战赛中进入前 10 名
原文:https://towardsdatascience.com/how-i-got-to-top-10-in-spacenet-4-challenge-5dbf020b6ffb?source=collection_archive---------20-----------------------
比赛主持人的一些插图
挑战的任务简单地说就是
对我来说, Spacenet4 成为了第一个严肃的 DL 比赛。老实说,很多事情都出错了,但我获得了一次愉快而有益的经历,并设法提高了自己的技能。
可能是我在这次比赛中教会的最重要的事情:排行榜是唯一的真理。任何地方都容易犯错误,你发现和改正错误的速度决定了你的胜算。
TLDR
如果你错过了去年关于
@snakers41 参加类似挑战的帖子:
Spacenet 三:道路探测器和人群 AI 地图挑战赛
域——从不同视角拍摄的亚特兰大郊区卫星图像(最低点)分为三组:最低点、偏离最低点、非常偏离最低点。
任务的核心 —识别所有的建筑足迹。
最终进场
- 带 augs 的 4 通道图像;
- 具有迁移学习的 uresnext 101(UNet+resnext 101);
- 每个最低点类别三个头;
- Adam 优化器+ lr 衰减;
- 用边界掩模和分水岭进行后处理;
- 多边形近似;
示例模型性能
挑战
所有以前的 Spacenet 竞赛的一个关键挑战是在卫星图像上找到物体。这一次,参与者必须在卫星从不同视角(天底、离天底、非常离天底)和目标方位角拍摄的图像中识别所有建筑物。不仅仅是建筑,还有脚印。
将最低点从 39 更改为 53
数据集有 27 个采集点——同一地点的照片——最低点在 7 度到 54 度之间。
收集无建筑
嗯,收集,现在听起来没那么有挑战性了。我们可以拍摄最小的天底图片,对其运行一些分割管道,并通过稍微滑动蒙版来获得所有 collect 图像的足迹。组织者也是这么想的,他们从公开测试中删除了所有 collect 的图片,只保留了一个例子。
因此,我们不得不面对所有与建筑物倾斜和分辨率下降有关的非常糟糕的问题。这里的黄色多边形是预测遮罩
然而,天底本身在标题中是硬编码的,这使得在我的模型中使用角度作为特征成为可能,这已经完成了,但在下面会有更多。
关于数据集和比赛的更多信息,您可以在组织者的文章中阅读。
我的基线
如果基线需要一些复杂的技术,它就不是基线了。
模型
分割任务的标准方法:Unet-like 架构+从 Imagenet 迁移学习。
在 3 通道 896*896 图片上启动,检查发生了什么。
基线表现。看起来还不错但显然不够完美
失败
复合二元交叉熵+骰子损失
MOAR 头
此外,作者发表了文章,其中有一些开放基线的有趣实验。他们为每一组训练了三个独立的模型:天底、离天底和非常离天底的图像。
结果并不令人惊讶:
- 非常低的预测比其他预测更差;
- 每个模型显示了来自同一组的图像的最佳质量,即,仅在偏离最低点的图像上训练的模型检测到远离最低点的图像,但是在其他图像上失败。
文章中的三个开放基准模型评估性能
顺便说一句,指标也被算作三个最低点类别的平均值。
三头模型
三个独立的模型是一个好主意,但是三个头共享编码器层的模型更好(也更快)。
最终这个模型+下面的几个其他的黑客成为我的最终提交。
某些 3 头模型实验的局部验证指标
五头模型
除了视角,还有一个方位——天底是一样的,但是卫星是从另一边飞过来的。事实上,这是我的模型的另一个自由度和两个头。
不同方位的天底= 25°和天底= 34°。多边形是地面真理
已经尝试了一些其他的技巧
模型和数据处理
- 一大堆各种各样的编码器是最有趣的;
- 从我目前的个人经验来看,注意力不会让事情变得更糟,所以在这里它也有帮助;
- Ofc MOAR 层层给了一些加分;
- 使用 4 个图像通道而不是 3 个图像通道进行输入——指标提高了很多;
- 标准图像增强——移位、裁剪、对比度等——我没有做足够的实验;
- TTA——比分没有太大变化
此外,与本次挑战赛中的其他竞争对手相比,我们的模型收敛速度慢了 2-3 倍,这可能是由于非理想增强或 LR 机制。
优化器和损耗
- 损失加权考虑建筑物大小和相互距离—无改善;
- OpenAI AdamW 而不是 Adam optimizer——如果你正在为产品训练模型,效果很好,但对于竞争——缺乏最后 3-5%的性能;
- LR 衰变。从高值开始,学习率在一定条件下逐渐降低(例如,损耗平台)。大概是我的模型一直过拟合,因为快速 lr 衰减提高了分数。
我想尝试许多其他想法/启发,比如外部数据集、处理遮挡房屋、集合等等,但是没有时间做所有的实验。
后处理和失败案例
嗯,那真的很痛苦。通过设置另一个阈值,提交分数可能会发生显著变化。大多数失败案例都是由于低质量而导致的非常低的图像。
失败案例
关天底图片的高层建筑遮罩(黄色)
密集建筑物和高阈值遮罩合并为一个,低阈值大建筑物被分成几个较小的。
非常低的密集建筑区,阈值较高。基线模型。红线-遮罩边界,多边形-gt。
流域
所有这些与门槛相关的问题引发了一些思考。
预测建筑物的边界也是必要的,我在模型输出中添加了边界遮罩
对于分割任务,我们需要稍微复杂一点的技术——例如,分水岭。在示例这里中可以找到一个默认用法,在我的例子中,它打破了一切。通过添加一些启发法解决了这个问题,例如,防止大房子(面具)的分割。
提交格式
…是多边形。这意味着我必须找到旧的库,并花一些时间进行近似调优。实际上,遮罩可以被扔进所有尖角的多边形中,不需要任何近似,但是它需要更多的时间,并且输出文件更重。
从 skimage 得到的多边形近似
第一个不愉快的时刻是,算法是随机的,并且从尝试到尝试的结果并不完全相同。第二个不愉快的时刻——一条近似的线在里面->面积变小->大概是借据<0.5 ->的错误
最终提交
我已经参加了比赛,第一次提交有点晚了。大多数错误,例如,错误的本地验证,必须立即更正。结果,一堆很酷的想法仍然没有得到验证。而且,因为我不想在最后一刻冒险进入前 10 名,所以最佳单人模特而不是合奏模特进入了最后的决赛。
最终排名
最终的第九名使得即使在重组后也不可能抓到前五名的怪物。然而,我仍然是一个 5 年制的学生,最大的动力是学生奖——最佳大学团队/参与者奖。因此,我振作起来,全力以赴,按照 TopCoder 指南提供了一个 dockerized 解决方案,这也有点挑战性。
老实说,我有点担心和害怕错过什么,所以我给 Topcoder 团队写了一封信,希望找到一些组织方面的东西,比如截止日期和学生的奖励要求。却没有得到回答。很长一段时间以来,我一直在竞争论坛和电子邮件中询问,但还没有从顶级程序员管理员那里得到任何关于一些问题的确切答案。这似乎有点令人沮丧,但我仍然不知道学生的奖项排名和我在私人验证中的最新分数。
原载于 2019 年 3 月 3 日spark-in . me。
我如何处理不平衡的文本数据
原文:https://towardsdatascience.com/how-i-handled-imbalanced-text-data-ba9b757ab1d8?source=collection_archive---------7-----------------------
解决人工智能中最常见问题之一的蓝图
Photo by Form on Unsplash
不均衡类分布问题在数据科学领域普遍存在,ML 工程师经常遇到。我是 IMImoble Pvt Ltd 的聊天机器人开发人员,最近在培训意图分类模块时遇到了这种情况。现实世界的用户可以访问的任何实时业务聊天机器人都必然会吸引大量超出范围的查询以及与它被设计来执行的任务相关的消息。即使在相关的面向任务的消息中,不平衡也是可以预期的,因为机器人涵盖的所有主题不可能同样受欢迎。例如,在一个银行用例中,余额查询将超过房屋贷款申请。
Bot 构建不同于传统的应用程序开发。虽然后者相对稳定,更新频率较低,但前者需要频繁更新,以改善用户体验和机器人的智能。不平衡数据集是指属于一个类的数据明显高于或低于属于其他类的数据的问题。大多数 ML/DL 分类算法不能处理不平衡的类,并且倾向于偏向多数类。
为什么在不平衡数据集的情况下准确性是虚假的
仅针对不平衡数据集的高准确度可能会适得其反,因为像决策树和逻辑回归这样的标准分类器算法不具有处理其中包含的不平衡类的能力。这导致了对较大类的严重偏向,而具有较少数据点的类被视为噪声并经常被忽略。结果是与多数类相比,少数类的错误分类率更高。因此,当评估基于不平衡数据训练的模型的性能时,准确性度量并不相关。
考虑以下情况:您有两个类-A 和 B。A 类占数据集的 95 %, B 类占另 5%。通过简单地每次预测 A 类,您可以达到 95%的准确率,但是这为您的预期用例提供了一个无用的分类器。相反,正确校准的方法可能会实现较低的准确性,但会有更高的真实阳性率(或召回率),这确实是您应该优化的指标。
这篇文章解释了几种处理不平衡数据集的方法,但是它们中的大多数都不适用于文本数据。在这篇文章中,我分享了我用来平衡数据集的所有技巧和技术,以及将 f1 分数提高 30%的代码。
处理不平衡数据集的策略:
你能收集更多的数据吗?
您可能认为这不是您正在寻找的解决方案,但是收集更有意义和多样化的数据总是比采样原始数据或从现有数据点生成人工数据要好。
删除数据冗余:
- 删除重复数据——我处理的数据集包含大量相似甚至重复的数据点。“我的订单在哪里”和“订单在哪里”的语义是一样的。删除这些重复的信息将有助于你减少多数班级的人数。
- 有许多消息具有相同的语义,例如,考虑以下传达相同含义的消息。保留一两个这样的话语,去掉其他的,也有助于平衡阶层。那么,您可以在验证集中使用这些消息。有很多方法可以找到文本相似性,但我使用了 Jaccard 相似性,因为它非常容易实现,并且在计算相似性时只考虑唯一的单词集。你可以看看这篇文章中的其他技巧。
我可以更改送货时间吗?
我可以更改送货时间吗?
我可以更改送货时间吗?
3.合并少数民族类-有时多个类具有重叠的要素。还不如合并那几个小众班。这个技巧帮助我提高了超过 10%的 f1 分数。
重采样训练数据集:
修复不平衡数据集的最简单方法是通过对少数类的实例进行过采样或对多数类的实例进行欠采样来平衡它们。使用像 SMOTE(合成少数过采样技术)这样的高级技术将帮助你从少数类创建新的合成实例。
- 欠采样——努力从多数类中随机剔除数据点,直到类达到平衡。存在信息丢失的可能性,这可能导致较差的模型训练。
- 过采样—这是随机复制少数类实例的过程。这种方法可能会过度拟合,导致对测试数据的预测不准确。
- SMOTE-SMOTE 通过获取每个少数类样本并沿连接任意/所有 k 个少数类最近邻的线段引入合成样本来生成合成样本,如下图 GIF 所示。更重要的是,这种方法有效地迫使少数类的决策区域变得更普遍。查看这篇文章,了解简单的解释。不幸的是,这种技术不能很好地处理文本数据,因为从文本创建的数字向量是非常高维的。
SMOTE Illustration
如果很难收集到更多的数据,并且上面的技巧没有显示出有希望的结果,那么这里是最后的手段。
数据扩充:
数据增强是计算机视觉中常用的一种技术。在图像数据集中,它涉及通过变换(旋转、平移、缩放、添加一些噪声)数据集中的图像来创建新图像。对于文本,数据扩充可以通过将文档标记为句子、将它们混排并重新连接以生成新的文本,或者用同义词替换形容词、动词等以生成具有相同含义的不同文本来完成。任何预先训练好的单词嵌入或者 NLTK 的 wordnet 都可以用来寻找一个单词的同义词。
Kaggle 竞赛中使用的一个有趣的想法是将英语文本转换为任何随机语言,并使用神经机器翻译转换回英语。这一招帮我把 f1 成绩提高了 17%。检查这个 GitHub repo,找到关于使用语言翻译、spacy、 spacy_wordnet 和单词嵌入的数据扩充的代码。
结论:
在处理不平衡数据集时,没有一站式的解决方案来提高评估指标。可能需要尝试几种方法来找出最适合文本数据集的技术。如果你曾经遇到过这样的问题,请告诉我你是如何解决的。
你想要更多吗?在中、 LinkedIn 、 GitHub 上关注我。
[## kothiyayogesh/medium-商品代码
找到我所有媒体文章的代码。](https://github.com/kothiyayogesh/medium-article-code)
我如何用特征工程改进我的文本分类模型
原文:https://towardsdatascience.com/how-i-improved-my-text-classification-model-with-feature-engineering-98fbe6c13ef3?source=collection_archive---------3-----------------------
高级文本分析可提高您的模型准确性
Photo by William Iven on Unsplash
在本文中,我将向您展示如何进行文本分析,以提高模型的准确性,并发现数据中的几个事实。为此,我将使用在Kaggle
可用的数据集。
该数据集由“维基百科的谈话页面编辑”中的评论组成,它提供了发布评论的用户的标识符,但我们没有关于评论页面或用户个人数据的信息。然而,我们有 6 种不同的手写标签(有毒、严重有毒、身份仇恨、淫秽、威胁、侮辱)。
为了进行我们的分析,我们将根据标签分离我们的语料库。我们将简要地看看不同标签在数据库中的分布,然后看看这些子集本身,它们对应于上面列出的标签。
可以看出,毒性评论的语料库是最大的,并且训练语料库中大约 10%的评论具有该标签,而威胁性评论的语料库较小。然而,这并不意味着 25%的评论是恶意的,因为一个评论可以有几个标签。我们可以看到,不到 5%的评论只有一个标签,大约 7%的恶意评论至少有两个标签。
为了创建相关指标来改进我们的模型,我们将关注我们语料库的内在特征,以我们对不同语料库的假设词汇和语法分布的先入之见为指导。我们会问自己,是否有重复出现的模式可以作为标志来丰富我们的模型。我们将定义一些属于每个评论的统计特征。
统计分析
在开始分析这些文本统计数据之前,我假设制作这些统计数据会很有趣,可以将这些数据与我的预想进行比较。也就是说,我假设(根据经验)一个意图恶意的评论,会有更高比例的大写单词,更不发达的词汇和更多数量的感叹号。带着这些想法,我计算了一些变量的中值,并把它们放在同一个刻度上,为了图的可读性,我没有取所有的变量,所以我保留了我最感兴趣的变量。我用感兴趣的变量创建了第一个雷达图,以获得我的语料库之间的相关标志。这里的形状比已经标准化的值更重要(即,变量已经被转换以使它们的平均值集中在 0 上,它们的方差集中在 1 上),以获得变量之间一致的图形。
因此,在这张图上我们清楚地看到,我的一些先入之见是正确的。与没有恶意的评论分布相比,大写单词与句子长度的比率是显而易见的。我们还注意到,没有不良意图的评论,有更高数量的独特词,更多的句子和更长的句子。这证实了不怀好意的评论可能提供了不太丰富的词汇,我们稍后将试图证实这一假设。另一方面,大多数评论差
有类似的分布,除了严重中毒的语料库,这是这种词汇贫乏的一个案例。
此外,真实数值显示,平均而言,恶意评论中感叹号的数量是合规评论中感叹号数量的十倍。还有一种不太发达的标点符号。在不符合的语料库中,句子的长度缩短了 20%,大写字母的单词数平均为 43 个大写字母,是符合的评论的 14 个的 2.5 倍。与平均句子长度相关,在不符合的评论中,平均 11%的单词是大写字母,而在符合的评论中,平均只有 4%的单词是大写字母。基于“独特”词的数量的词汇贫乏也是如此,也就是说,在这种类型的语料库中,对于平均 33 个独特的词,不同于其他词的词汇贫乏是 1.5 倍,而在兼容的语料库中是大约 50 个。我们可以问自己一些关于词汇贫乏的更深刻的问题,让我们看看单词唯一百分比更低的评论±30%。
这些大多是有害的评论,如果我们查看细节,我们会发现这些
评论通常是“垃圾邮件”。这个信息对我们的模型很有意义,我们将定义一个垃圾邮件指示器。
在第二部分中,我们将在文本数据上使用词性标注器(一种定位属于语料库中每个单词的语法类别的算法),以便以与之前相同的方式提取信息。我认为,恶意评论肯定会呈现出与符合语料库不同的词汇和/或语法结构。我使用了一个由不符合任何标签的评论组成的语料库和一个仅由不存在任何问题的评论组成的语料库。
语言和语法分析
首先,让我们分开我们的语料库,看看我们的词性标注算法的算法部分。
toxic = train[train["toxic"] ==1]
svr_tox = train[train["severe_toxic"] ==1]
identity_hate = train[train["identity_hate"] ==1]
obscene = train[train["obscene"] ==1]
threat = train[train["threat"] ==1]
insult = train[train["insult"] ==1]
clean_com = train.loc[(train['toxic'] == (0))
& (train['severe_toxic'] == (0))
& (train['obscene'] == (0))
& (train['threat'] == (0))
& (train['insult'] == (0))]text_severe_tox = " ".join(svr_tox.comment_text)
text_tox = " ".join(toxic.comment_text)
txxt_identity_hate = " ".join(identity_hate.comment_text)
txxt_obscene = " ".join(obscene.comment_text)
txxt_threat = " ".join(threat.comment_text)
txxt_insult = " ".join(insult.comment_text)
clean_text = " ".join(clean_com.comment_text)
感谢nltk
库,我们不需要从头开始写所有东西,我们将标记我们的语料库。
splitter = Splitter()
#example
print(txxt_threat[:30])
'Hi! I am back again!\nLast warn'
print(splitter.split(txxt_threat[:30]))[['Hi', '!'], ['I', 'am', 'back', 'again', '!'], ['Last', 'warn']]
然后,我们将应用我们的词性标注算法。
lemmatizer = WordNetLemmatizer()
splitter = Splitter()
lemmatization_using_pos_tagger = LemmatizationWithPOSTagger()
tokens = splitter.split(txxt_threat)
treat = lemmatization_using_pos_tagger.pos_tag(tokens)
print(treat[:30])[[('Hi', 'Hi', 'NN'), ('!', '!', '.')],
[('I', 'I', 'PRP'),
('am', 'be', 'VBP'),
('back', 'back', 'RB'),
('again', 'again', 'RB'),
('!', '!', '.')],
[('Last', 'Last', 'JJ'), ('warning', 'warning', 'NN'), ('!', '!', '.')],
我们可以看到,我们的算法做了三件事,它标记化,它引理化(给定一个转换的动词,它返回动词的词根),他给我们标记的动词/语法参考。然后,给定已标注语料库,我们可以突出显示语料库的动词/语法分布。我们将对每个标签进行计数,并对它们进行加权。
令我惊讶的是,我们注意到这两个语料库非常相似,它们在常规语料库中使用过去分词和决定因素的比率上有所不同,并且通常常规语料库的语法丰富度更高。唯一有很大不同的一点是,在语料库的句子语法结构中,人称代词的使用。这只证实了我的一个假设,而否定了其他的。
因此,我们将特别关注这些代词,在这种情况下,它们将表征恶意评论的语料库。现在,我们将对来自词性标注的数据进行更微观的分析。根据这个图表,我想看看子标签中最常用的词会很有趣:动词、名字、人名和外来词。
让我们创建一个大字典,它将包含我们研究中感兴趣的几个变量。
然后,我们将定义一个函数,找出这些动词形式中最常见的 25 个单词,并绘制出来。
对外来词的微观分析给了我们更多兴趣点的一瞥,我们看到了几个东西,与语料库相关联的词,将它们集成为变量会很有趣,例如“puta,Nazi,mother,fukkin”。还有一些符号是作为重复出现的单词出现的,说明上面创建的符号数量的文本统计一定会对以后的算法产生影响。
在所有语料库中出现频率最高的动词中,只有 kill 和 suck 突出,否则动词出现在整个语料库中基本上是相同的,这并没有给我们提供非常有趣的信息,但仍然可以证实我对语料库之间动词差异的先入为主的看法是错误的。
我们将对此标签分析进行重复数据删除,以找到适合最终模型的相关变量。我们将直接分析二元模型,三元模型。
单|双|三元分析
为此,我们将使用[TFIDF](https://scikit-learn.org/stable/modules/generated/sklearn.feature_extraction.text.TfidfVectorizer.html)
方法构建一个单词矩阵,通过限制 ngram 的数量并引入[Logistic Regression](https://en.wikipedia.org/wiki/Logistic_regression)
来查看变量的重要性。
分数越高,特征就越重要(我按毒性值排序,这意味着第一个词属于排序的标签越高)
例如,在评论中出现“他妈的”这个词会增加 52%的属于有毒标签的概率,而“你”对整个语料库的强烈影响在于,它是作为威胁标签的单字的主要触发器。
var_imp = get_feature_importances(model, analyzer='word', ngram=2, ngram2 =2, lowercase=True)
var_imp.head(10)
在二元语法分析中,我们总是发现单词“fuck”,有趣的是,我们发现我们的人称代词在标签分析中是有区别的。因此,我们可以看到,它们通常是由“滚开”组成的侮辱,或者与“未来”的人身伤害“你是”区分开来。然而,我们注意到大框架在模型中已经不那么重要了。
var_imp = get_feature_importances(model, analyzer='word', ngram=3, ngram2 =3, lowercase=True)
var_imp.head(10)
通过向三元组发展,我们注意到你的优势,三元组中的重要词主要是单词和双词的延续。有趣的是,在术语频率中发现的重复出现的单词不一定是对影响语料库的概率具有最大影响的单词,这可能是由于在文档中出现的频率较低。
我们的整个分析将允许我们创建新的训练变量,我认为这些变量将对我们的模型产生重大影响。因此,我们将首先仅使用文本作为变量来对我们的数据进行建模,我们将用文本分析的行话创建一个[Bag of Word](https://en.wikipedia.org/wiki/Bag-of-words_model)
,并将其用作我们的分类器的训练基础。这个矩阵是以这样的方式构建的,单词变成列,评论 id 是行,每行由 0 或 1 组成,这是单词存在的指示符,所以我们面对的是一个稀疏矩阵。然后,我们将使用我们的文本知识来提高对我们的分类器的理解,并看看这对我们的模型是否有真正的影响。
并用作我们的分类器的训练基础。这个矩阵是以这样的方式构建的,单词变成列,评论 id 是行,每行由 0 或 1 组成,这是单词存在的指示符,所以我们面对的是一个稀疏矩阵。然后,我们将使用我们的文本知识来提高对我们的分类器的理解,并看看这对我们的模型是否有真正的影响。
让我们定义我们在分析过程中发现的特征,第一个是本文顶部计算的统计特征,然后我们计算一些词性标记的特征,最后是通过一元二分三元组分析的一些特征。
for dframe in tqdm([train, test]) :
regex_features(dframe)
然后我们将创建一个没有特征工程的矩阵和另一个有特征工程的矩阵
因此,我们将我们的算法应用于我们的两个矩阵,并计算模型的准确率。首先,没有特征工程的模型。
terms = vectorizer.get_feature_names()
var_imp = pd.DataFrame(index=terms)
for label in lab:
print('... Processing {}'.format(label))
y = sample_train[label].values
classifier = LogisticRegression()
classifier.fit(train_text_matrix, y)
y_pred_X = classifier.predict(test_test_matrix)
print('Valid Accuracy is {}'.format(accuracy_score(y, y_pred_X)))
var_imp[label] = np.sqrt(scaler.var_) * classifier.coef_[0]
var_imp = var_imp.sort_values('toxic', ascending=False)
如果没有特征工程,结果如下:
Toxic | Obscene | Identity Hate | Severe Toxic | Insult
79.7 | 88.9 | 98.7 | 98.5 | 91.9
使用特征工程:
Toxic | Obscene | Identity Hate | Severe Toxic | Insult
89.3 | 83.9 | 99.6 | 98.7 | 94.3
可以看出,具有研究变量的模型表现得更好。我们可以看到,该算法对不可忽略的有毒标签的预测高达 9 分以上。这意味着在整个语料库中 9.5%的标记为有毒的评论中,即大约 15,000 条评论中,预测 89.3%的标签而不出错意味着大约 13,500 条评论将被很好地预测,相比之下,在没有文本分析的情况下应用的算法中只有不到 12,000 条评论,即需要避免 1500 条额外的有毒评论。这种新算法在所有标签上执行,并改进了对某些已经非常好的标签的检测,例如仇恨语料库,它仍然获得一个点并接近完美的预测。
我们现在将更精确地查看我们的研究的影响,通过检查我们的逻辑回归系数,我们可以确定从最强到最弱对我们的模型有最大影响的变量。下表总结了影响给定标签从 0 到 1 的评论的每个变量(单词)的能力。也就是说,这些单词在句子中的存在将对算法执行的标注产生累积触发效应。
Ranking
那么使用特征工程,特征的重要性就变成了:
Ranking
总之,我们可以说,对文本数据的深入分析代表了模型学习中的一个重大挑战,并为我们的数据集带来了一个新的维度。一方面,它可以让你在我们的数据中发现更多,并肯定或否定先入之见。另一个优点是可以从对训练和验证数据的文本分析中生成这些指标,另一方面,这项研究向我们证明了所确定的指标与建模目的相关。
我如何通过一个问题增加我作为数据科学家的影响力
原文:https://towardsdatascience.com/how-i-increased-my-impact-as-a-data-scientist-with-one-question-d0417a1b10cb?source=collection_archive---------12-----------------------
How can you level up your impact as a data scientist? Image source.
你如何开始你的数据科学项目?当你听到类似“我们能更好地了解我们的客户如何使用产品”的问题,或者有类似“我如何才能对购买概率建模”的想法时,你会怎么做?当我刚成为一名数据科学家时,听到这些意味着一头扎进我的技术技能库,思考解决方案。
Diving into the technical stuff as a data scientist is exciting. Image source.
毫无疑问,这会让你直接进入令人兴奋的领域:将大量数据转化为有意义的东西。这种挑战让我和我在这个领域遇到的大多数了不起的人都想成为一名数据科学家!然而,一些令人沮丧的事情不断发生,最终改变了我开始每个项目的方式。
不管我的输出多么令人印象深刻,人们并不总是使用我创造的东西。有了这种认识,我的心态从“数据科学家使用数据”转变为“数据科学家让数据有用”详细解释在这里但是,简单地说,如果没有人使用我创造的东西就没有多大意义。
“数据科学家让数据变得有用”
从那以后,只要我或我的团队有问题或想法,我就不会浪费精力去想解决方案。我总是通过问一些帮助我产生更大影响的事情来开始谈话:“想象一下我们已经完成了所有的艰苦工作,并开发了一个完美的解决方案。你会用它做什么?”
Asking about impact can be a powerful move. Image source.
这直接跳到了计算将会发生什么。它决定了最初的问题是来自短暂的好奇心,还是真正渴望数据驱动。我们会定期监控数据,并在发现与预测有偏差时采取行动吗?如果结果是正面或负面的,我们会做出不同的决定吗?我们会适当地生产和使用模型输出吗?
如果这类问题没有令人满意的答案,那么可能就不会有任何令人满意的影响。同样重要的是要指出,这并没有阻止我从事有趣的项目。这有助于确保我从事的项目既有趣又有影响力!
“想象一下,我们已经完成了所有的艰苦工作,并开发了一个完美的解决方案。你会用它做什么?”
除了帮助指导我的努力,我还发现了问这个问题的一个奇妙的副作用。一个典型的回答是,“我没想过这个”,或者一些现场编造的长篇大论的计划。听了很多次,我注意到这个问题很有挑战性。
Asking about impact can be tough, but worth it. Image source.
最初的反应是防御性的,通常很快就会意识到应该有一个好的答案。因此,它不仅节省了我挑选没有影响的项目的时间,还帮助利益相关者和决策者反思他们的目标。这几乎总是以一个更好的问题、更清晰的目的和更大的数据驱动承诺而告终。
所以下次你开始一个数据科学项目时,停下来问问结果会怎样。我希望这个简单的问题对你和对我一样有帮助!
停止广播
感谢阅读,我希望你喜欢这篇文章。想知道如何提高自己作为数据科学家的影响力吗?在 Medium 、 Twitter 或 LinkedIn 上问我你的问题,我很乐意分享我的经历!
我如何学习数据科学以及改变一切的 1 门课程
原文:https://towardsdatascience.com/how-i-learned-data-science-and-the-1-course-that-changed-everything-16912ccbab2b?source=collection_archive---------2-----------------------
如果你不知道从哪里开始
Unsplash
如果你正在阅读这篇文章,你可能刚刚开始你的数据科学之旅,不知道该走哪条路才能让你更上一层楼。
我之前在 Quora 上回答了一个关于这个话题的问题,获得了相当多的浏览量,所以它激励我更深入地研究它。
就像你一样,我认为自己是数据科学的初学者,因为我还有很多东西要学,但我已经参加了一些在线课程,并希望记录我迄今为止的过程,包括其起伏。我还想分享一门课程,在我看来,这是每个初学数据的科学家在开始时都应该学习的课程。
让我从我的故事开始。
我为什么要学习
几年前,当我在多伦多大学学习土木工程时,我总是看到一些文章,描述像我一样的人是如何学习编程并能够从头开始创建令人敬畏的项目的。
我想变成那样。
那时,我已经知道工程不太适合我,因为我在技术设计课程上做得不太好。我想学习一些额外的技能,这样我可以更好地区分自己。所以我决定试试编程。如果其他人能做到,这应该不会太难吧?
从 Python 开始
我尝试过不同的编程语言,比如 Ruby、HTML / CSS 和 Java,但最终还是选择了 Python,因为它对我来说最有意义。
我是通过使用 Codecademy 的学习 Python 课程开始学习的,因为当你搜索“如何学习 Python”时,它是首先出现的内容之一。
我刚开始用的时候,一切都是免费的。他们后来增加了收费的特殊课程,但我相信他们仍然有基础课程,你可以用来学习语言的基础,并免费帮助你建立基础。
我还通过 freeCodeCamp 看到了这个学习 Python——初学者的完整课程 YouTube 视频,它带你了解 Python 最重要的概念。作为基本理解 Python 的指南或者作为已经学习过的知识的复习工具是非常棒的。你应该能在一个周末内完成它!
另一个很好的资源是活跃在编码挑战网站上,比如代码大战,在那里你可以使用你的 Python 技能来解决编码挑战。你可以选择挑战的难度,看看其他人的代码以及他们是如何解决的来学习。我曾经试着每天做一个,但是很难坚持,最终完全停止了。
不一致是我面临的一个大问题。
在那几年里,我会受到启发去学习/实践,但随后会失去热情并停止一段时间,只是为了过一段时间后重新开始。
这个循环将会重复。
前前后后是因为我怀疑自己,怀疑自己学习编程的能力。
我会给自己找借口,比如:
- 有很多服务可以在你不知道的情况下帮助你编码。
- 我太老了,不能学习全新的东西,应该专注于我所知道的。
- 竞争太激烈了。
- 太难了。
不一致和怀疑自己花了我很多时间。我现在意识到,只要你每天都在鞭策自己学习一些东西,哪怕是一点点进步都是好的。
迈向数据科学的旅程
几年过去了,我是一名建筑项目经理,但感觉好像少了点什么。我后悔没有更加努力地学习编程。
我仍然定期阅读关于自学的人的文章,并认为如果我不亲自尝试,我将来真的会后悔。
数据科学是我不断听说的一种趋势,当我发现 Python 是数据科学家的首选语言时,我觉得这是我在这个方向上学习的一个标志。
我在网上搜索如何学习数据科学,发现了这篇文章,互联网上最好的数据科学课程,根据你的评论排名,它向你展示了一条从没有编程经验到机器学习工程师的课程之路。
因为我觉得我需要温习一下我的 Python 基础知识,我开始学习他们推荐的编程入门课程,多伦多大学通过 Coursera 提供的学习编程:基础知识(LPT1) 和制作质量代码(LPT2) 。这些课程包括鼓励您继续学习的视频讲座,以及在巩固您的 Python 技能的同时让您参与其中的作业。对于初学数据的科学家来说,它们的内容难度和范围都很大。我发现 LTP1 是一个很好的复习课程,因为我之前已经学习了 Python 的基础知识。我也确实学到了很多我不知道的新东西。我喜欢他们教你如何正确地写代码以获得更好的“可读性”。LTP2 更难一些,我在完成课程时遇到了一些麻烦,但我也从中学到了很多。
在 Coursera 课程之后,我继续走推荐的道路,并决定参加一门数据科学入门课程。我选择了 Udacity 的数据分析简介,因为我被他们专业的网站和出色的布局所吸引。
我不知道为什么,但我开始学习这门课程时遇到了很多困难。一开始,它向我介绍了Anaconda&Jupyter Notebooks,我实际上花了大量时间试图理解它是什么以及如何操作它。我觉得课程上的解释没什么帮助,所以我很难继续学习下去。我发现 Udacity 的课程有时在练习/测验中没有提供足够的指导,并且可以假设你已经有概念的先验知识。因为这个原因,我停止了在球场上的工作。
于是我又开始产生了怀疑。
我想,如果我连《数据科学导论》课程都学不完,我怎么能学习数据科学呢!这让我感到非常沮丧,不知道下一步该做什么。
改变一切的过程
我在查看其他数据科学家的 Instagram 页面时,偶然发现了这个课程。我四处滚动,发现在 Udemy 上提到了何塞·波尔蒂利亚的 数据科学和机器学习训练营的 Python。这似乎是一门很受欢迎的课程,人们在评论中对它赞不绝口,所以我决定进一步研究它。
我起初持怀疑态度,认为我会落入一个花哨而又吸引人的标题的陷阱。所以我做了很多研究,查看了它的评论,并与其他在线学习平台进行了比较。它似乎值这个钱。
我决定冒险一头扎进球场。
这是一门付费课程,但你总能在 Udemy 上找到折扣,所以价格大概在 15 美元左右。这是非常值得的,因为它将数据科学的所有主要方面组织在一个易于理解的包中。
这门课程极大地提高了我对数据科学的理解、技能和信心。
它通过你可以在 Jupyter 笔记本上跟随的讲座,彻底地介绍了 numpy、pandas、matplotlib、seaborn 和许多其他概念,然后让你根据讲座自己做一个项目。你甚至可以为你的投资组合重新安排这些项目!查看我的 Github ,里面包含了课程中的项目。
这门课程的很大一部分致力于向你介绍机器学习,以及你如何开始学习。
我喜欢这门课程注重实践而不是理论,因为这是我通过实践学习的最佳方式。它确实复习了理论,但更简短,这样你就可以获得足够的理解来将其应用到项目中。
我仍在学习这门课程,并希望将学到的知识运用到我自己的项目中去!
包扎
这是一篇相当长的文章。如果你一路走到这一步。感谢您的阅读!
我一直想写这篇文章,因为我觉得它会对开始数据科学之旅的其他人有所帮助。我希望通过分享我的经历和我学习的步骤/课程,可以帮助你发现自己的道路。
还有一点我想补充的是,每个人走的路都不一样。从方法,到他们学习的时间。当事情变得困难时,不要感到沮丧。有很多次我想放弃,但还是放弃了。关键是要持之以恒,小步前进。
这是我关于数据科学的第一篇文章,希望以后会有更多的文章。如果您有任何问题或意见,请在下面留下您的反馈。你也可以在 LinkedIn 、T witter 或 IInstagram上与我联系。
我如何在 2018 年艰难地学习数据科学
原文:https://towardsdatascience.com/how-i-learned-data-science-the-hard-way-in-2018-6ae4aa21cd6?source=collection_archive---------3-----------------------
没有科学学位也开始学习数据科学
当你没有科学学位时,你如何开始学习数据科学?在我调查这些工作机会时,几乎所有的工作机会都将数学、统计学、计算机科学或至少一个量化领域的教育列为要求。我没有。
我能打破现状,加入这个我渴望的社区吗?我决定以艰难的方式自学。
一个问题引起了我的兴趣。如果我把自己推向极限,在六个月的时间里我能学到多少?
斯科特·扬的故事一直激励着我。他用一年时间自学了麻省理工开放式课程的四年计算机科学课程,每周工作 35-60 小时。除非你尝试一下,否则你永远不知道自己的极限。有时候,做一些看似不可能的事情甚至很有趣。
今年五月,我开始了自己的麻省理工挑战。我上的第一门课是麻省理工开放式课程的单变量微积分。我很快重新发现了我长期以来对数学的热爱,并沉迷于这些在线讲座。我最喜欢的是吉尔伯特·斯特朗的线性代数课。有几个星期,我会在他幽默的讲座中醒来,感觉就像和一个老朋友在一起。
在强化学习期间,我选择了一个新的主题作为一周的重点,每天尽可能多的时间来研究它。为了最有效地学习,我尝试了不同的学习技巧:设定专门的学习时间,中间有休息时间,通过练习和记笔记积极学习,重复排练以创造长期记忆,结合视觉和听觉材料,并把概念教给一个朋友。这些技巧帮助我实现了每天雄心勃勃的学习目标。
开始是最困难的,然而陡峭的学习曲线可以非常令人满意。到六月中旬,我几乎看完了所有我能在麻省理工开放式课程中找到的数学讲座。打下数学基础只是第一步。但这是一个巨大的进步。
我刚开始时的一个挑战是——你不知道自己不知道什么。
当我偶然看到西班牙的高级统计和数据挖掘暑期项目时,我不知道如何选择课程。我应该做贝叶斯网络还是贝叶斯统计?这些课程的名字对我来说都太陌生了。然而,不管课程是什么,我只是把自己投入到学习环境中。
选择和比我更有专业知识的人在一起——这带来了真正的变化。我遇到了来自电信、计算机科学、金融、数学的不同群体,他们都对机器学习充满热情。我从他们那里学到的和从课程中学到的一样多。
在获得了一些用 Python 编程的实践后,我准备继续学习吴恩达的机器学习课程。他关于机器学习和深度学习的讲座太好了,我几乎看上瘾了。他的课程中提供的练习对测试我对理论的理解和用代码实现算法非常有帮助。
许多其他数据科学和机器学习资源也是一个很大的帮助:数据营,特雷弗·哈斯蒂和罗布·蒂布拉尼的《统计学习导论》,亚塞尔·s·阿布·穆斯塔法的《从数据中学习》,以及麻省理工学院开放式课程的一系列讲座——人工智能,计算思维和数据科学导论,以及算法导论。
我发现,在学习机器学习的时候,几乎不可避免地会遇到一些你不懂的内容。我采纳了康奈尔大学“阅读数学”手册的建议——当你不能马上理解某些东西时,把它放在一边一段时间:
“你可能经常(也许通常)发现,当你回到你不太理解的东西时,它会在你研究的进一步的东西的启发下变得清晰,即使进一步的东西本身是模糊的。”
然后我想我应该让自己参与数据科学社区。所以我搬到了柏林。在这里,我加入了每周一次的数据科学项目小组,参加了各种公司举办的聚会,并自愿参加机器学习会议。
我强烈推荐你作为志愿者申请参加会议,尤其是那些学习预算有限的人。作为回报,我有了一个很棒的机会去见数据科学家,问他们问题,并与正在招聘的公司交谈。我很幸运遇到了良师益友,他们一直与我分享他们的宝贵意见。这真是一个令人惊叹的社区。
然后我来到了卡格尔。我一直推迟在 Kaggle 上做比赛,因为我觉得我可能排名不好。我发现将 Kaggle 视为一个学习平台比视为一个竞争平台要好得多。观察其他人如何在 Kaggle 上处理数据科学项目是我学习的最有效方式之一。
回想起来,在某个时间点,我很害怕。在我的第一次学术会议上,作为一名商科毕业生,我发现很难证明自己的理由。我发现很难坐在一个房间里,在这里我不理解很多介绍的话题。
但是,这是一个很大的但是在这里,事情变得更好,好得多,我几乎忘了我是从哪里开始的。我几乎忘记了半年前,我已经 10 年没有上过数学或科学课了,今天我正在用公共数据集解决不同的数据科学问题。到 2018 年底,我正准备参加一些公司的面试,这些公司是我 6 个月前做梦也想不到会成为数据科学候选人的。
在你踏上了这段旅程之后,你周围的一切似乎都变了。你开始从一个新的角度看待每个问题,并想知道:机器学习会是一个解决方案吗?
活在恐惧中。继续前进。
我是如何学会不再担心并爱上图形数据库的
原文:https://towardsdatascience.com/how-i-learned-to-stop-worrying-and-love-the-graph-database-ef8af4ac7a8?source=collection_archive---------4-----------------------
形象化
有时,关系模型不能解决这个问题
1970 年,为 IBM 工作的英国计算机科学家 Edgar F. Codd 有一个想法,这个想法至今仍然指导着我们的工作方式。这个想法就是“关系模型”,在这种模型下,数据将被存储在具有特殊指定列的表中,这些列用于将一个表中的值与另一个表中的值相关联。
Edgar F. Codd (1923–2003). Father of the relational database.
Codd 为他的模型制定了 12 条规则。虽然今天的大多数数据库并没有遵循所有这些标准,但是 Codd 模型仍然在很大程度上规定了数据的建模方式。它非常结构化和数学化,遵循它的人总是使用“元组”、“关系代数”和“第三范式”这样的术语。
如果你在 20 世纪接受过正式的计算机科学培训,你可能已经记住了 Codd 的模型。如果你和我一样,这不是一个愉快的回忆。我的教授在教室的墙上挂了一张 Codd 的照片,像《1984》中的老大哥一样怒视着我们。
但是 Codd 模型是有效的。它增加了数据建模的严谨性,确保了一个干净的行列结构,非常适合 Tableau 这样的可视化工具。所以在我继续之前,向 Codd 博士致敬。
也就是说,至少有一个领域不是很好。
当我们试图理解各种数据点之间的联系时,尤其是那些可能在同一列中的数据点,这个模型就崩溃了。例如,专栏中谁是把关者和影响者?回答这个问题的 SQL 可能会非常复杂。
进入图形数据库,基本上把 Codd 的模型扔出了窗外。
以 Neo4j 等产品为代表的图形数据库基本上是一个连接数据库。这项技术使得脸书或 LinkedIn 这样的社交网站能够在用户之间建立联系。当亚马逊向你推荐一种产品时,是因为图表显示了你和购买该产品的其他人之间的联系。
在这篇文章中,我研究了如何将图形数据库的能力应用于比脸书和 LinkedIn 处理的项目规模更小的数据分析项目。我还研究了一些可视化图形数据库输出的工具。
我其实不太喜欢“图形数据库”这个术语。对于外行人来说,这听起来像是一个设计用来制作条形图或类似东西的数据库。但这是已经决定的名字,所以我会用它。不过,在本文中,我将把从图形数据库创建的可视化称为“网络”。我觉得更有描述性。
在我继续之前,我应该指出两点:
- 虽然这里的例子将集中在 Neo4j 和相对较小的一组可视化工具上,但我并不轻视他们的竞争对手。只是 Neo4j,Tableau 等少数几个是我最了解的工具。
- 这里给出的数据模型和例子非常简单。你不应该认为它们是图形数据库能够处理的复杂性的极限。
图形数据库基础
为了理解图形数据库,您必须暂时将表、行、列和外键放在一边,考虑以下四个对象:
- 节点,大致相当于数据库中的一行。
- 关系(也称为边),即节点之间的连接。
- 标签,将具有相似属性的节点和边组合在一起。您可能会设想一组节点在一个标签下组合在一起,类似于关系数据库中的一个表。
- 属性,它们是与节点和边相关联的名称/值对。
假设我们想要创建一个图表数据库,其中包含人们以及他们首选的数据可视化工具。一个非常简单的实现可能是这样的:
“雷·罗宾逊”将会是聚集在“T2”标签“人”下的多个节点中的一个。他可能有属性,比如他的“城市”或“公司”。
Ray 将通过标签为“TOOLS】的关系连接到其他节点,这些节点分组在标签为的下,用于他使用的各种产品,例如 Tableau 和 Neo4j。
每个产品节点都有一个属性,指示它是什么类型的工具,比如“图形数据库”或“可视化”。
A simple graph data model
这样,您就有了一个简单的数据模型,它提供了一些在关系数据库中不容易实现的强大查询功能。
想象上面的模型有数千个“Person”节点,每个节点都连接到每个人使用的产品和类型的节点。例如,用户基于与他们有联系的其他用户的偏好而采用某个产品的可能性有多大?
这里需要注意的是,图形数据库不需要像关系数据库那样对数据类型和结构进行严格控制。
例如,一个节点可能与另一个节点具有不同的属性集。节点之间的关系也是如此。并且可以随时添加新的属性和标签。
至于数据类型,不用担心。如果您一直在用整数值填充某个属性,突然决定将它用于文本字符串,那么您的图形数据库不会阻止您。
对于我们这些从 Oracle、Postgres 的 SQL Server 等关系数据库开始职业生涯的人来说,这是一个很难理解的概念。这显然会带来一些风险。您可能很快就会把数据模型搞得一团糟。
但对于试图确定原因、结果和关系的分析师来说,图表模型往往更胜一筹。
简单说说图数据库属于哪一类:
一些人认为,除了文档和键值数据库之外,图形数据库只是另一种类型的“NoSQL”技术。这有一定的逻辑,因为图形数据库不使用 SQL,尽管它们有自己的查询语言。
但是许多图形倡导者认为,图形数据库的独特功能使它们自成一类。我不想在这里解决这个争论。
有了这个(非常)简短的图表解释器,让我们来看一些例子。
一个没有数据库的图形数据库:Gephi
体验可视化图形数据的最简单方法是使用一种工具,严格地说,它根本不是数据库。
Gephi(https://gephi.org/)是一款免费的开源软件,最初由法国贡比涅科技大学的学生开发,现在由非营利的 ge phi 联盟支持和管理。
这是一个 Java 驱动的桌面应用程序,可以在 Windows、Mac OS 和 Linux 上运行,只要你有 Java 7 或 8、足够的内存和专用显卡。
Gephi 是本文中最有趣也最令人沮丧的工具。有趣的是,它允许您开始处理图形数据,而无需设置、配置和学习图形数据库的细节。我们稍后会谈到令人沮丧的部分。
The Gephi user interface
为了展示 Gephi 的能力,我使用了一组在杰弗里·爱泼斯坦(Jeffrey Epstein)自杀后三天从 Twitter 上捕捉到的数据。爱泼斯坦被判虐待年轻女孩,与唐纳德·特朗普(Donald Trump)和比尔·克林顿(Bill Clinton)等许多名人有联系。
爱泼斯坦的自杀是一个保证让阴谋论者兴奋的故事,它没有让人失望。几乎立刻,推特上就出现了关于克林顿可能与爱泼斯坦之死有关的猜测,并以#克林顿身体计数为标签进行传播。
没过多久,#ClintonBodyCount 的故事就进入了主流媒体,主流媒体经常使用 Twitter 作为吸引大量公众关注的故事的预警系统。
事实上,在这三天里,只有 48,571 条#克林顿身体计数的推文,按照推特的标准,这并不算多。尽管受到媒体的关注,但这个数字本身就提出了一个问题,即#克林顿体重指数到底有多重要。
但更有趣的是,当数据被可视化为一个带有 Gephi 的网络时,我们发现了什么。
尽管#ClintonBodyCount 的故事受到了所有的关注,但下面的 Gephi 可视化显示,它是由一小群有影响的人推动的,他们的 Twitter 个人资料(“喜剧演员”…“# QA non 研究员”…“红,白和 F You 的主持人”)表明他们几乎不在美国政治讨论的主流中。
Gephi visualization of the #ClintonBodyCount network.
Gephi 分析中最重要的一步是将您的数据放入两个电子表格或。Gephi 可以导入和读取的 csv 文件。
第一个称为“节点”文件,基本上是您希望可视化的原始数据。
第二个称为“边”文件,定义节点之间的关系。下面显示的是 edges 文件,它需要数据争论。我用 Tableau Desktop 和 Tableau Prep Builder 创建的。
但是这真的取决于你习惯使用什么工具。如果你熟悉 VLOOKUP 这样的函数,Excel 可能会工作得很好。
您还可以运行一些查询并从任何关系数据库输出文件,或者用 R 或 Python 创建一个列表。
Gephi “edges” file for the #ClintonBodyCounty analysis
edges 文件有两个必需的列:“Source”,这是启动某种操作的节点;以及“目标”,它是接收由源列发起的动作的节点。
对于#ClintonBodyCount 分析,逻辑是这样的:
1)发送推文的任何用户都列在源列中。
2)在源列中被用户提及(“@提及”)或转发(“转发”)的任何用户都在目标列中列出。
目标专栏中的用户被提及或转发的次数越多,他或她在#ClintonBodyCount 网络中的影响力就越大。
第三列“权重”在 Gephi edges 文件中是可选的。它表示源节点和目标节点之间的连接强度。在本例中,我通过将“@ reference”和“retweet”列中的值相加来计算。
当节点和边文件被加载到 Gephi 时,有趣的事情就开始了。你首先会看到一个巨大的、难以理解的方块,显示所有的连接。但是通过使用 Gephi 中包含的各种布局算法和统计函数,您将能够将您的可视化处理成类似上面显示的#ClintonBodyCount 图形。
我用来形象化#ClintonBodyCount 网络的统计数据被称为模块性,它衡量网络中社区的强度。
您还可以从 Gephi 导出您的作品,并使用您选择的图形工具增强外观。我使用了 Affinity Designer,这是一个可以在 Mac OS 应用商店买到的图形程序。
这就是 Gephi 的乐趣。现在,关于令人沮丧的部分说几句:
- Gephi 崩溃了。很多。由于它不能自动保存你的工作,崩溃会让你付出很多努力。我发现经常存钱很有用。由于没有 Cmd-Z 或类似的函数来回滚您的更改,我还发现在保存时创建新版本很有用。
- 这是一个内存和 CPU 猪。我通过关闭一切可以关闭的东西(浏览器、电子邮件客户端等)获得了最好的结果。)并让 Gephi 攫取它想要的所有系统资源。
- 它的许多最佳特性都是由独立开发者创建的插件的结果。当一个新版本的 Gephi 出来时,你喜欢的插件可能需要一段时间才能赶上。
所有这些听起来都很原始。尽管如此,对于一个不花你一分钱,也不需要后端数据库的工具来说,它有一些令人印象深刻的功能,这些功能是你在 Tableau 等传统可视化工具中找不到的。
Gephi 资源
要了解更多,网上有很多教程。请确保您正在查看的版本与您的 Gephi 版本一致。最新版本是 0.9.2。
肯塔基大学图书馆制作的关于 Gephi 的最好的视频教程之一,可以在:https://www.youtube.com/watch?v=2FqM4gKeNO4找到
此外,Paul Oldham 有一个很棒的教程,是关于使用 Gephi 来可视化专利网络的,在:【https://www.pauloldham.net/gephi_patent_network/
现在是一个实际的图形数据库:Neo4j
维护数十亿字节企业和政府数据的数据库管理员仍然对图形数据库持相当大的怀疑态度。可以公平地说,在可预见的未来,关系数据库将统治世界。
在图形世界中,似乎最受关注的公司是 Neo4j(【https://neo4j.com/】)公司,该公司 12 年前在瑞典发布了第一个开源图形数据库。如今,它的总部设在加州圣马特奥,客户包括瑞银、易贝和沃尔玛等公司。其政府客户名单包括美国陆军和美国宇航局。
The Neo4j desktop (left) and data browser (right).
为了研究 Neo4j 的能力,我选择了由美国司法部维护的外国代理人注册法案(FARA)数据集。FARA 法律实质上要求在美国代表外国政府工作的“代理人”(即游说者)向联邦政府注册。
未能注册者(保罗·马纳福特,下来吧!)可以被起诉,送进监狱。但是起诉很少。所以首先要知道的是数据集可能不完整。
为了让数据更有趣,我加入了由透明国际维护的清廉指数。根据政府和商业专家的观点,该指数根据公众感知的腐败程度对各国进行排名,并在 https://www.transparency.org/cpi2018 做了充分的解释。
合并后的数据会生成一个数据集,显示美国哪些代理代表了被认为腐败最严重和最不严重的县。使用传统的行列数据结构,您可以对数据做一些非常有趣的事情。
例如,这是 Tableau 中的一个可视化图,显示了根据感知的腐败程度进行颜色编码的国家。点击一个国家,用户可以看到谁在美国代表这些国家。我突出显示了俄罗斯。
Foreign agents visualization with Tableau.
如果这就是你想要的,那很好。但如果你想调查这些国家和代理商之间的联系网络,你最好的选择是像 Neo4j 这样的图形数据库。这意味着将数据从行列格式迁移到图形数据库所需的节点和边中。
为图表建模数据是一个非常深奥的课题。如果你愿意的话,你可以在 https://neo4j.com/developer/data-modeling/的 Neo4j 建模教程中读到更多关于它的内容。
但我会首先为您的数据建立一组类别,然后考虑每个数据点属于哪个类别。对于 FARA 的数据,很明显有三个类别:
- Country,它包括关于某个特定国家的所有数据。
- 外国委托人,包括特定外国的企业或政府机构等实体。
- 代理人,他们是在美国注册代表外国委托人的说客。
您可以从将节点加载到 Neo4j。csv 文件,使用简单的“从文件加载 CSV…”脚本,这在 https://neo4j.com/developer/guide-import-csv/的的 Neo4j 文档中有详细说明。这非常类似于将数据加载到关系数据库的表中。
这样,您就有了三种类型的节点,每种节点都在各自的标签下分组。很明显,您的数据模型需要两种不同的关系:一种将每个国家连接到基于那里的外国委托人,另一种将外国委托人连接到他们的注册代理。
您可以通过执行图中每个关系所显示的命令来创建这些关系,如下所示。
Neo4j data model for the Foreign Agents Registration (FARA) database, including Cypher code to build relationships.
Neo4j 有一个全功能的查询和命令语言“Cypher ”,它本质上是 SQL 的图形数据库版本。我发现它相对直观,容易学习。有关赛弗的详细信息可在 https://neo4j.com/developer/cypher-basics-i/获得。
Cypher 的主要优点是,它允许您只用几行代码就可以完成许多行嵌套 SQL 所需要的工作。
例如,假设您想要创建代表俄罗斯企业和政府机构的代理之间的连接的网络样式视图。上面的可视化表格向您展示了如何处理行和列数据。
但是如果您的数据在一个图模型中,几行 Cypher 就可以创建一个完整的以网络为中心的视图,如下所示。
Graph of agents representing Russian interests in the U.S., with the query that produced it.
虽然 Tableau 可以通过一个 API 与 Neo4j 集成,但它不能提供这种数据视图。数据以行列格式返回到 Tableau。因此,除非您愿意经历许多变通办法,否则您仍然无法获得数据的真正网络视图。
Neo4j 数据浏览器很不错,尤其是对于一个免费社区版 Neo4j 自带的工具来说。但相对来说是骨瘦如柴。你在上面看到的是你能承受的极限。
批准
Neo4j 的企业版附带了一个功能更加全面的可视化工具,名为 Bloom。Enterprise Neo4j 还可以容纳其他网络可视化工具,如 Linkurious(https://linkurio.us/)和 Keylines(https://cambridge-intelligence.com/keylines/),这两个工具都是商业许可的。
这就把我们带到了定价问题上。如果您的组织对 Neo4j 的企业版感兴趣,并且符合该公司对初创公司的定义(【https://neo4j.com/startup-program/?ref=subscription】),您可以免费设置 Neo4j 的有限部署。
如果你不是一家初创公司,但仍然需要企业版,价格会变得有点模糊。该公司不公布其定价模式,而是要求潜在客户联系其报价。一位代表告诉我,“配置选项很复杂,定价取决于具体情况。”。
旧的“逐案”定价模式绝不是你想从企业软件公司听到的。但 Neo4j 有一个很棒的产品,显然可以蒙混过关。如果你跟他们追求企业牌照,得到了答案,我很想听听。
GraphXR
一个有趣的新可视化工具是 graph xrhttps://www.kineviz.com/,它可以很容易地与免费的社区版 Neo4j 集成。安装后,GraphXR 只是作为 Neo4j 桌面上另一个可用的数据浏览器出现。
您可以在 GraphXR 浏览器中输入与 Neo4j 中相同种类的 Cypher 查询。但结果更有活力,坦率地说,近乎迷幻。例如,编写以下 Cypher 查询以返回在美国代表中国利益的代理的图表:
MATCH(c:Country)-:BASE->(f:foreign principal)-由 - > (a:Agent)代表
其中 c.Country = "中国"
在 Neo4j 中,结果将类似于我们已经看到的俄罗斯网络。但是在 GraphXR 中,它看起来是这样的:
GraphXR visualization of agents representing Chinese interest in the U.S.
GraphXR 提供了一些控件来调整可视化的外观。例如,您可以调整节点的大小和颜色。您还可以放大和缩小您的可视化,移动节点,甚至旋转它,以从不同的角度查看它。
然而,背景颜色仅限于一个选项:黑色。我还发现节点的标签有点模糊不清。在这个时候,似乎没有办法改变这一点。
有趣的是,GraphXR 还支持使用 Oculus Rift 耳机的虚拟现实可视化。我不确定我是否完全理解这个商业案例,但我希望有一天能看到它。显然,虚拟现实数据可视化的美好新世界即将到来。
批准
上面的可视化是用 GraphXR 的“Explorer”版本创建的,该版本是免费的,可以作为 Neo4j 桌面的插件运行。它有三个项目的限制。
下一步是“分析师”版,它有 30 个项目的限制,每年花费 1320 美元。
最后,还有“企业”版,它允许无限
项目。可以通过 GraphXR 了解价格。
最后
我认为可以肯定地说,我们在这方面存在能力差距。一方面,我们有传统的可视化工具,如 Tableau,它内置了强大的分析功能,以及对可视化几乎每个方面的粒度控制。
但是它们的能力在很大程度上受到我们都知道的行列数据模型的限制。对于试图理解个人和组织之间关系的分析师来说,这并不理想。
像 Neo4j 这样的图形数据库解决了这个问题,但是在可视化网络方面有所欠缺。对可视化“外观和感觉”的控制往往是非常初级的。
像 Linkurious 和 Keylines 这样的商业网络可视化工具解决了这个问题,但代价是只为 Neo4j 这样的图形数据库授权一个额外的产品。对于小企业和自由职业分析师来说,这可能会让人望而却步。
国际组织实施 Neo4j/Linkurious 的示例
在 https://offshoreleaks.icij.org/stories/wilbur-louis-ross-jr 可以看到调查记者联盟(ICIJ)。
对于 Tableau 及其竞争对手来说,理想的解决方案是将图形数据库可视化添加到他们现有的功能中。Tableau 目前有一个 Web 数据连接器,允许它向 Neo4j 提交用 Cypher 编写的查询。
你可以在 https://neo4j.com/blog/neo4j-tableau-integration/的了解更多信息。但是数据是以表格格式返回到 Tableau 的,所以我们仍然没有能力生成网络可视化。
我怀疑我们没有从 Tableau 这样的工具中看到这种能力的原因是:a)对它的需求还不存在;b)开发它需要大量的工作。
但就像老歌里说的“我可以做梦,不是吗?”
我是如何用 6 个月的时间在 FAANG 找到一份工作的
原文:https://towardsdatascience.com/how-i-leetcode-for-6-months-and-land-a-job-at-amazon-b76bdfc79abb?source=collection_archive---------0-----------------------
My leetcode progress
这篇文章也可以在我的博客上找到
作为例行程序的 Leetcode
2018 年 11 月初,当我在佐治亚理工学院参加在线硕士课程机器学习并有全职工作时,我开始将 Leetcode 作为日常工作。很难找到足够的时间从头开始解决一个问题。所以,我的策略是阅读讨论中的问题和大多数投票赞成的答案,一个标签一个标签地去理解问题。我发现在尝试自己解决问题之前阅读解决方案对我非常有帮助。它节省了我的时间,并允许我在同一个标签中阅读许多问题。所以我将来可以很容易地识别特定类型问题的变体。这也避免了早期不必要的挫折。许多人可能会感到沮丧,因为他们甚至不能在一开始就解决简单的问题。其实这很常见。尽早阅读解决方案实际上有助于避免这种情况。我知道有些人可能不同意这一点。YMMV。(除了 leetcode,我还整理了这个对我有帮助的资源列表
在我看来,这对于大多数不是算法宗师的人来说更有效。但是不要误会我的意思,那几天我还是需要早上 6 点就起床去 leetcode。
注:如果你对大型科技公司的面试流程非常陌生,破解编码面试的是你的朋友。它非常详细地展示了招聘过程,并涵盖了一些准备策略。我个人是几年前从这本书开始的。这帮助我设定了对面试的期望,这样我在面试过程中就不会有太大的意外。
休息和减速
2019 年新年前后,我上了强化学习和高级操作系统两门硬课,开始了我的学期。这两门课程每周耗费 30 多个小时。到那时,我已经简单地“解决”了大多数标签,并且能够通过查看问题来识别问题类型。然后我开始试着不看答案就解决问题。从 1 月到 4 月,我的投稿少了很多。这种放缓对我在面试中将记忆转化为实际解决问题的技巧非常关键。通过编写代码,它确实加强了我对所学算法的理解。
Leetcode 竞赛
从一月到四月,我尽可能尝试每周一次的竞赛。在竞赛中,我从来没有能够解答所有的四个问题。大多数时候,我解决了两个问题,有时是三个。优势在于竞赛提供了面试环境,因为它有时间限制。
一个伙伴
幸运的是,我有一个朋友在准备面试,我们一起上了 leetcoded。我们经常讨论和分享资源,比如面试准备材料。一个例子是,当我甚至难以理解像硬币变化这样的 DP 问题时,我的朋友可以分享他在网上找到的 DP 问题总结给我。总结讨论了自下而上和自上而下解决方案之间的区别。此外,有一个伙伴,你不会在旅途中感到孤独,所以你不会轻易放弃。
白板
大多数时候,我在屏幕上做 Leetcode 问题和竞赛。为了模拟更真实的面试,我定期在白板上解决问题。
招聘人员来了
是时候考验我的努力了。它来到了我紧张的学期结束。与此同时,我慢慢听到一些公司的招聘人员打来电话。我得到了 A 公司、微软和优步的面试机会。我意识到这是验证我的实践的最佳时机,并接受了所有的 hr 电话屏幕。这三家公司都很容易通过人力资源筛选。
背靠背面试
电话采访安排得很快。电话会议纯粹是 leetcode 类型的问题。我在电话或在线评估期间完成了所有的编码面试。这部分,leetcode 确实帮了不少忙。在我读完问题后,我能够确定使用什么算法或什么数据结构。有时候,我在执行中遇到困难。但是在挣扎的时候我觉得自己足够自信。
优步让我先去现场邀请。然后亚马逊和微软加快了现场流程。两周内我去了三个地方。当我登陆网站的时候,我购买了 leetcode premium,这样我就可以找到这些公司的问题库。每年 159 美元或每月 35 美元。我继续我的 leetcode 之旅。但这一次,我的策略只关注这三家公司的热门问题。Leetcode 有一个功能,可以显示最近不同时期、6 个月、1 年等公司标记的问题。最近 6 个月的问题应该是最相关的。当我敲打它的时候,大约有 350 道优步题,我计划至少完成一半。这意味着我需要每天练习 10 个问题,因为我的时间有限。这一次,我没有在陷入困境后立即投入到解决方案中,而是尝试用简单的解决方案来解决它,然后尝试优化。(如果你不能马上想到一个最佳解决方案,这也是你在面试中应该做的)。我总是分析我的解决方案的时间和空间复杂性,这在面试中非常关键。
从东海岸两次飞到西海岸对我来说有点残酷。但是 YOLO。令我惊讶的是,在 5 轮面试中,我只得到一个 leetcode 类型的编码问题。其他两轮编码是相当开放的。我相信他们是在测试候选人在设计之初就需求提出问题的能力。当然,领导原则贯穿了 5 次面试。
相比之下,优步和微软的编码问题就像 leetcode 问题一样。问题被清楚地告知,输入和输出的例子被提供。期望分析时间复杂度和空间复杂度。
注意:如果你是数据结构和算法的新手,我发现算法、破解编码面试和斯坦福在线课程都是很好的开始。对于模式设计知识很少的候选人来说,首先设计模式是理解许多不同模式的良好开端。对于更高级的用户,我强烈推荐 GoF 的设计模式:可重用面向对象软件的元素。这几天在学习或者工作的时候我还在用它做参考。最后但同样重要的是,系统设计,如果没有任何系统设计经验,人们可能会发现研究系统设计很有帮助。这涵盖了你将在工作或面试中看到的许多话题。它训练你如何分析需求。然后,如何根据业务需求选择设计。
获得报价
最后,我在一家餐馆找到了一份工作。综上所述,Leetcode 溢价还是物有所值的。这并不是说你一定会在面试中看到完全相同的问题,但是你可以有更好的意识来找到解决问题的正确方向。也在我被一个问题卡住的时候提升了我的信心。
我的帖子:
系统设计面试准备:如何使用长轮询、发布订阅和队列异步处理长时间运行的作业
FAANG Ace 系统设计面试
我如何获得 6 个月的代码并获得 FAANG offer
这些都是帮我找到方工作的资源
系统设计面试的成功步骤
Ace FAANG 系统设计面试:数据库、NoSQL、SQL
系统设计面试准备:缓存
我关于金融和科技的帖子
从 CRUD web 应用开发到语音助手中的 SDE——我正在进行的机器学习之旅
全栈开发教程:将 AWS Lambda 无服务器服务集成到 Angular SPA 中
全栈开发教程:用运行在 AWS Lambda 上的无服务器 REST API 提供交易数据
全栈开发教程:在 Angular SPA 上可视化交易数据
强化学习:Q 学习简介
我如何利用奖学金和免费学习来学习最新技能
原文:https://towardsdatascience.com/how-i-leveraged-scholarships-and-free-learnings-to-learn-latest-skills-5ad26228bb22?source=collection_archive---------12-----------------------
你也可以!
任何停止学习的人都老了,不管是三十岁还是八十岁——亨利·福特。
T2:如果你是科技界的名人,这一点尤其正确。几个月前,我完成了我的学位考试,和我一样,我相信你们中的许多人一定有同样的感受——这不是学习的终点;这只是开始。
在这个博客里,我分享了我的学习之旅,贴出了一个传统的大学学位,很少有奖学金&免费学习(还有链接+技巧),你也可以访问它来提升自己的技能。事实上,当我在开始我的旅程三个月后写这篇博客的时候,我的学习追求还没有完成,它已经远远超出了头脑可以伸展的范围,感谢所有的机会!
安全和私人人工智能挑战奖学金由脸书人工智能和乌达城
收到 Udacity 的邮件让我兴奋不已,因为我被选中参加这个挑战课程,我确实花了一些时间来摆脱我的“时刻”(准确地说是几天。)
程序的一般演练—
挑战课程分为两个阶段,从第一阶段中选出的参与者有机会进入第二阶段。下面提到的细节会让你对第一阶段有所了解。第二阶段的结果将于 9 月公布。
- 该课程历时 3 个月,选定的参与者有机会学习如何将隐私保护工具和技术应用于深度学习,以便您可以利用 Pytorch(脸书的深度学习框架)解决更困难的问题,并创建更智能、更有效的人工智能模型。
- 学生们有机会进入 Udacity 充满活力的学生社区,并有机会参与他们的各种社区活动,如#60DaysofUdacity,在这里你可以连续 60 天发布你的学习成果,以及#ama_sessions(向我提问会话),Project Showcase Challenge 等。
- 人们也可以选择参加这些# UdacityFacebookScholars 私人举办的竞赛,如黑客马拉松、博客写作竞赛、智力竞赛等。符合比赛的语境。
- 被选中的 300 名参与者将有机会免费获得 Udacity 的深度学习或计算机视觉纳米学位,并获得证书!🎁
虽然挑战赛第一阶段的报名已经截止(早在 5 月份),但您可以在这里访问免费课程—https://www.udacity.com/course/secure-and-private-ai-ud 185
如果你对 Udacity 的这些奖学金挑战感兴趣,请在这里报名通知—【https://www.udacity.com/scholarships】
更新:我已经被选为安全和私人人工智能挑战的获胜者,现在将继续深度学习纳米学位!
WorldQuant 大学的数据科学
我选择的第二个学位课程是 WorldQuant 大学的数据科学学位课程。它有一个课堂外的方法来教授数据科学,无论你是初学者还是想增加你的知识的人,这个课程都是继续学习的完美选择。
一般演练—
- 本课程由两个模块组成,根据您在第一个模块中的表现,您将被选择参加第二个模块。
- 要被选中参加学位课程,你可以填写表格,并根据你的 Python 和数学基础知识回答问题。
- 一旦选中,你就可以开始你的免费课程了!关于该计划的所有其他详细信息将通过您的电子邮件地址与您分享。
- 他们每年开 4 次会。
- 如果您愿意申请 9 月 30 日开始的下一期课程,请在 9 月 9 日前申请。快点!
此处适用—https://wqu-apply.thedataincubator.com/
你也可以在这里查看他们的金融工程模块—https://wqu.org/programs/mscfe
谷歌云 30 天
一般演练—
使用谷歌云平台免费了解谷歌云架构!
- 你必须在每个月底之前完成 3 个任务(注册后你会收到一封关于这些细节的邮件。)
- 完成后,你可以期待——得到谷歌开发人员的认可,得到酷酷的 schwags。
- 获得 1 个月免费参加 Coursera 的 ML GCP 专业化认证课程。
- 完成 Coursera 课程后,获得 GCP 认证的折扣。
敬请关注即将到来的 30 天 GCP:【bit.ly/30daysongcp】
跟随@ Google devsin进行全部更新!
一般常见问题和提示
- 因为课程的费用是包括在内的,所以你需要投入大量的时间来彻底地学习所有的东西,并且参与他们的社区,如果有的话。
- 这些课程不限制任何年龄组或背景的注册,只要你的基础清楚,或者你可以从他们社区的其他参与者那里寻求帮助,你都可以申请。
- 每门课程都有专属优惠——有了 WorldQuant,你可以将课程推迟到下一节课,有了 Udacity,你可以接触到社区参与者共享的大量机会。✌
我希望这能帮助任何想学习新东西的人,也许对最新的趋势和技能保持乐观,或者申请一个新的角色——任何理由都是开始的好理由!
祝大家学习愉快!👨🎓👩🎓
疑问? 把他们引到这里:contact.shubhangijena@gmail.com
在 LinkedIn 上联系我:www.linkedin.com/in/shubhangijena
我如何利用数据科学、机器学习、信用风险和 TALF 贷款在 3 年内获得 37%的年回报率
原文:https://towardsdatascience.com/how-i-made-37-a-yr-in-profits-for-3-yrs-using-data-science-machine-learning-and-talf-loans-6fe8c133e3ec?source=collection_archive---------7-----------------------
在本文中,我将继续我的一系列数据科学的实际应用。这次是一个涉及数据科学、投资管理、保险和金融量化分析的实际应用,分析固定收益工具中的风险/回报机会。
此练习指的是 2009 年初定期资产贷款工具(或“TALF”)产生的机会。TALF 是一项政府计划,旨在以非常低的利率向合格投资者提供高达 1 万亿美元的贷款,最终目的是在 2008 年金融危机后启动经济。
此处说明的练习数据来自于 2009 年 2 月初 TALF 创建后的普遍市场情况。美联储和美国财政部向合格投资者发放的首批贷款已于 2 月底到位。
为了理解这个机会,一些证券化市场(资产支持证券)和金融危机起源的基本知识是必要的,因此这将在下面解释。如果你想了解更多,在我之前的文章“使用数据科学的阿尔法一代&定量分析——ABS/TALF】中讨论了金融危机关键技术要素的大量背景,你绝对应该阅读(此处为),以获得关于该过程关键要素的更多知识。事实上,机会的根源在于这些因素:1)世界经济停滞不前,2)世界经济与 ABS 市场的联系。****
导致危机的证券化市场有多大?谁是资产支持型证券市场的领导者?
从 1985 年成立到 2007 年,美国证券化市场经历了几乎 19%的年增长率,达到约 1.2 万亿美元发行的峰值。图 1 显示了证券化市场的增长及其与利率的关系。
Figure 1: The availability of a growing supply of fixed income instruments backed by uncorrelated asset classes helped bring down financing costs.
投资银行的美国定量分析师开发的证券化技术允许生产商获得运营和扩张的廉价融资。事实上,从 1985 年到 2007 年,5 年期 AAA 级 ABS 的平均息差从 120 个基点(1.20%)下降到 20 个基点(0.20%)。
****Figure 2: Fueling the purchase of risky pieces of Asset Backed Securities (and other securities) was the staggering amount of assets under management by hedge funds, which grew from USD $350 bn in 1996 to USD $1.4 tr in 2006 (almost 3% of the world’s GDP that year). Source: SAGA Capital, LLC.
对冲基金管理的资产(AUM)惊人地增长,从 1997 年的约 3500 亿美元增长到 2006-2007 年超过 1.4 万亿美元的峰值,支撑了这种廉价融资的爆炸式增长(图 2)。对冲基金为向全球市场注入大量廉价资本做出了贡献,因为相当数量的对冲基金通过收购风险较高的部分(通常是评级低于投资级的股票)来支持 ABS 发行。
与此同时,对冲基金的 AUM 达到顶峰,证券化交易量在 2006 年达到顶峰,每年发行超过 1 万亿美元。花旗、雷曼兄弟、美国银行、JP 摩根和其他几家美国银行承担了全球 1/3 以上的流量(图 3)。
Figure 3: The numbers of dominant banks with the know-how and resources to create ABS grew from less than a dozen in 1996, to more than 50 in 2006. Still the largest players remained the ones shown in the chart, with Lehman Brothers among the leaders. Source: SAGA Capital, LLC.
资产支持型证券对国内和全球经济有什么影响?
从自上而下的角度来看,证券化市场有助于产生新的货币化资产,并间接有助于提高美国和世界其他地区的就业率,以及国内和全球经济的扩张。在美国证券化市场经历增长和创新的同时,普通美国公民的债务负担急剧增加,从 1958 年占个人可支配收入(PDI)的 50.4%增加到乔治·w·布什政府时期占 PDI 的 100%以上。
在同一时期,美国公民降低了个人储蓄率,以支持更高的消费支出,从罗纳德·里根政府时期 PDI 的 11.20%降至乔治·w·布什政府时期的 0.25%。
美国消费者支出在世界经济中的重要性及其与美国 GDP 的关系并不为人所知。2008 年,美国经济是迄今为止世界上最大的经济体,美国消费者支出占美国 GDP 的 70%。为了了解它有多重要,图 4 中的图表显示了美国消费者支出与几个国家 GDP 的对比。
****Figure 4: Top GPD’s (2007), in billions of USD vs just one of the components of US GDP: consumer spending. Source: SAGA Capital, LLC.
在危机前的 15 年里,美国经历的宽松信贷市场刺激了美国和世界其他地区的大部分 GDP 增长,这是一种我解释为图 5 所示的循环。美国消费者支出推动的工业增长对全球市场的公司利润产生了直接影响,事实上现有的每一家股票交易所的市值增长就是证明。
Figure 5: US Consumer Spending & Securitization fueling the world’s economic growth. Source: SAGA Capital, LLC.
美国消费者通过信用卡或即时互联网批准的房屋净值贷款获得的简单、随时可用的信贷,鼓励消费者减少储蓄,增加消费,并通过购买新房、汽车、更好的教育和其他商品和服务来提高生活质量。
在 2007 年中期,证券化市场中一种急剧增长的资产类别开始显示出问题的迹象。该资产类别是次级抵押贷款,这种贷款在一些投资银行、养老基金和对冲基金中非常受欢迎,因为在证券化中,它的一些部分被认为风险低,回报诱人。
Figure 6: ABS Outstanding as of 2009. Source: Federal Reserve Bank of Chicago
图 6 显示了从 1995 年到 2008 年末未偿资产支持证券的增长情况。我们可以清楚地看到,“其他”和“房屋净值”占总市场的 2/3 以上。
“其他”类别包括衍生工具,如 ABS of ABS、CDO、CDOs squared 等。一旦某个特定资产类别出现问题,包含该资产类别的资产支持证券就会出现问题,包含该资产的资产支持证券也会出现问题。
下图 7 显示,典型的 3 年期信用卡 AAA 级证券化的利差从 2007 年初的约 0.2%高于 LIBOR,上升至 2009 年 12 月的近 6%。同样,市场上的证券化交易量从 2006 年的 1.2 万亿美元下降到 2009 年第一季度的不到 300 亿美元,与峰值相比下降了 98%。
两家美国金融机构的问题导致了资产支持型证券利差的增加:1)美国第五大银行贝尔斯登,和 2)第四大银行雷曼兄弟。这两家公司都拥有资产支持型证券的自有资本,此外还大量参与了全球各类证券化产品的创建
这种可用于融资的资金的急剧减少及其相关的融资成本的增加造成了全球金融僵局,需要当局加以解决。
****Figure 7: Spreads for AAA rated credit card ABS (as well as all other ABS) skyrocketed in late 2008 and peaked as Barack Obama became President of the US. Issuance of credit card ABS were fueling the domestic and global economies. Source: SAGA Capital, LLC
为了启动国内经济,并试图扭转其正在经历的普遍趋势,两项新计划开始实施:1)TARP 或问题资产救助计划,在老布什政府的最后几天实施,以及2)TALF 或定期资产贷款工具计划,在奥巴马总统就职几天后由奥巴马政府宣布。
问题资产救助计划实质上是对所有人的救助,除了雷曼兄弟,这是布什政府设计的。TALF 是奥巴马政府设计的美国经济再激活计划,但是它对接受 TARP 救助的机构有一个固有的第 22 条军规。
美联储启动了经济
2008 年 12 月 15 日,巴拉克·奥巴马宣誓就任美国总统。2009 年 2 月 2 日,美国美联储宣布了 TALF 的主贷款和担保协议,概述了该计划的规则。
尽管在布什政府执政的最后几天向美国银行系统注入了大量资金,但消费者贷款或支出并没有增加。
奥巴马政府时期的美国美联储和财政部认识到,重振 ABS 市场对于恢复消费者信贷流动至关重要。因此,美联储和财政部推出了 TALF 计划——一项 1 万亿美元的计划,旨在吸引投资者购买由特定资产类别支持的传统和新发行的 AAA 级证券化产品。
通过为投资者的购买提供大部分融资,美联储和财政部希望对 ABS 的新需求将压低发行银行和金融公司的信用利差,并鼓励投资者购买,促进贷款的进一步证券化。反过来,这会让更多的消费者以更低的利率获得更多的贷款。
TALF 计划提供了购买合格债券所需的高达 95%的资金,利率(固定或浮动)为 1-3 年期 LIBOR 加 1%,最低贷款额为 1000 万美元。
TALF 计划通过提供真正的无追索权贷款,提高了投资者的风险回报水平。因此,实质性的杠杆作用是可能的,从而大大提高了潜在回报。损失没有被杠杆化,因为这些是真正的无追索权贷款,不需要提交额外的抵押品或强制赎回抵押品。
为了启动这一流程,一家符合美国政府要求的美国投资公司(无论是新成立的还是现有的)必须在一级交易商处开立账户,并确定投资者想要购买的合格债券。
TALF 采购走查
为了理解当时程序的逻辑,让我们来看一个假设的购买。
首先,让我们假设我们回到了 2009 年初宣布 TALF 计划的第一周。让我们假设高盛公司的一个假设的固定收益投资组合经理(PM)检查他的彭博屏幕,看到类似下表的东西,在数以千计的 TALF 合格证券的第一页下面:
A few of TALF eligible securities. Source: SAGA Capital
高盛项目经理认为,花旗集团发行的价值 30 亿美元的 CCCIT 2009-A1 A1 AAA 信用卡贷款证券化是一个值得购买的好债券。检查伦敦银行同业拆放利率和利差的时候,他可能看到过:
ABS spreads
高盛的总理决定购买价值 1 亿美元的债券,期望他的 1 亿美元投资在 3 年内获得大约 4.79% (278bps + 201bps)的年回报率。对于固定收益投资组合经理来说,这还不错。
对冲基金经理呢?3 年 4.79%的年回报率不是对冲基金寻求的那种回报,尤其是当最低回报率超过 5%的情况并不少见的时候。
但 TALF 杠杆 彻底改变了风险的分配 ,让低收益的 AAA 级 ABS 安全成为最好的游戏,也是华尔街最不为人知的游戏。
After checking all the documentation, requirements, etc., the expected annual returns under no loss scenario when buying TALF eligible securities could be summarized in the above formula.
继续我们假设的高盛 PM,他要求他的 Jr .分析师获得 TALF 杠杆的当前列表,并发现对于 3 年期信用卡 AAA ABS,美联储通过 TALF 可以以 LIBOR 负 100 个基点的利率,以 1000 万美元的最低投资,为他承诺的每 6 美分贷出 94 美分。
Actual TALF leverage for eligible securities in February 2009
应用上面的公式,项目经理看到,在接下来的 3 年中,购买该债券的预期年回报率(在零违约情况下)从 4.79%变为 32.67% !
((((2.01% + 2.78%)*0.06) + ((2.78%-1.00%)*(0.94)))/0.06) = 32.67%
现在,这种回报甚至对那些连 ABS 都不看的多空对冲基金来说也很有趣。但是,如果对冲基金度过了危机,他们最不想做的事情就是将基金锁定在 3 年的买入并持有策略中。
此外,在多空对冲基金中模拟股票市场运动和/或进行高频算法交易的定量分析师往往不太了解证券化部分、信用迁移模型、二项式扩展模型、copulas 等。他们迷路了,很高兴他们还有工作。“不,谢谢,我过了”可能是他们在偶然遇到机会时的想法。
对投资经理来说,TALF 计划最好的部分是,杠杆资本是一种无追索权的贷款,这意味着在违约的情况下,来自美联储的贷款不必偿还!
所以,也许利用这个机会的最佳人选是我们假设的高盛(或美国银行,或摩根大通,或任何其他公司)的项目经理。)毕竟他们有知识有资金对吧?
不对。由于高盛以及大部分银行业都直接或间接地接受了布什的 TARP 计划的救助,他们被排除在奥巴马的 TALF 计划之外。如果你不知道,布什对高盛的救助计划(通过 AIG 救助)是由时任财政部长和高盛前首席执行官亨利“汉克”保尔森策划的。(几年前,我曾在美国国际集团风险金融部工作过,所以我很了解当时的情况)。
因此,实际上,这个机会最初被少数高净值个人、少数了解资产支持型证券并愿意承担风险的对冲基金和家族理财室,以及更少数量的量化分析师(或数据科学家,尽管他们当时不叫这个名字,而是“特殊机会量化分析师”或“风险金融量化分析师”)所利用,他们了解模型,拥有领域专业知识,并集合他们的资源来满足投资要求。
在机构方面,太平洋投资管理公司和贝莱德是两个最大的资产管理公司,它们确实充分利用了这个机会(在游戏的后期),但这是另一回事了。
系统的 TALF 采购计划的预期收益——使用 Python、Pandas、Numpy、SciPy 和 Statsmodels 时间序列分析的蒙特卡罗模拟
因此,我们回到 2009 年,让我们想象以下场景:我是一名定量分析师/数据科学家,为一家从未投资过低收益率 ABS 的家族理财室提供建议。
家族办公室的投资经理想知道,为什么我认为投资 1 亿美元于 TALF 合格证券是个好主意。为了决定他们是否会为我的想法提供资金,我的模型需要回答以下问题:
- 如果家族理财室在 4 周内投入 1 亿美元,预期年回报率的分布是什么?我建议第一周 4000 万美元,第二周 3000 万美元,第三周 2000 万美元,第四周 1000 万美元。
- 如果他们承诺用 1 亿美元的资金购买所有债券,而不考虑购买时的利差,那么亏损的概率有多大?
- 在 TALF 合格证券中,我们能期待有多少个堕落天使?
- 如果我们根据购买时的利差和杠杆来区分购买哪些债券,那么获得超过 5%的最低回报率的可能性有多大?
- 假设没有债券违约,这种策略的预期年回报率中值是多少?
- 在提议的投资组合中,以基点表示的预期违约是多少?
- 家族理财室能指望什么样的平均杠杆?
- ABS 的投资组合的平均买入持有期是多少?
我将在本文中回答一些与我的模型在现实生活中的性能有关的最后问题:
- 我的利率模型有多符合现实?
- 我的模拟相关性表现如何?
在回答这些问题之前,我要说的是,该模型的行为符合预期,并且实现了回报,您将在本文的其余部分了解到这一点。这不是一次学术练习,而是一次真实的交易,是的,数千亿美元可以以 LIBOR 负 1%的利率借入 3 年期资金。
系统模型化
本文长话短说,我假设 1 年期和 2 年期伦敦银行同业拆放利率与 3 年期伦敦银行同业拆放利率相同,并根据模拟的 3 年期伦敦银行同业拆放利率进行所有计算(保守假设,因为 3 年期利率通常比 1 年期或 2 年期利率更贵)。
一年期 ABS 息差等于三年期 ABS 息差减去这两个期限之间的平均历史差异(截至 2009 年 2 月 18 日)。两年期 ABS 息差将是这一差额的一半。
整个分析的步骤如下:
- 模拟信用卡、学生贷款、房屋净值信用额度(HELOC)、汽车贷款和伦敦银行同业拆借利率的 N 条相关 3 年期 AAA 利差路径,每周取样,从 TALF 主贷款协议宣布之日开始。
- 从 3 年期价差重新创建 1 年期和 2 年期价差。
- 对于为期 4 周的购买计划的每一周,模拟购买 4 种合格资产中的一种,概率由截至 2009 年 1 月的 ABS 未偿资产分布给出。将美联储折减应用于相应的资产,并使用上面 1 和 2 中计算的资产类别的利差来估计无损失预期回报。
- 模拟债券从最初的 AAA 评级到其他评级和违约状态“D”的迁移。跟踪债券在其生命周期中的信用质量变化。
- ABS 不进行交易,而是由美联储作为贷款的抵押品持有,直到到期或债券违约。
- 策略是买入并持有,因此一旦在模拟中收购了一项资产,我们就不需要对市场价格波动建模。没有市价标记。
- 展示相关分布回答问题。
训练、测试、分割
2000 年至 2010 年的时间序列如下所示:
我将数据分为两部分:TALF 公告之前(用于培训)和 TALF 公告之后。列车数据是我在 TALF 宣布的时候所能得到的。
危机时期如下。测试阶段从最后一条黑色虚线开始,在奥巴马总统上任后,息差从峰值开始下降后不久。
****
Milestones of the financial crisis
均值回归和自相关
均值回归是一种假设,即资产价格将趋向于某个长期平均值。这可能会发生在利率、商品、货币等方面。与平均水平的偏差有望恢复到平均值。
自相关或串行相关是信号与自身的相关,作为时间延迟的函数。它常用于信号处理中分析函数或一系列数值。
以下是汽车贷款、信用卡贷款、学生贷款和 HELC 贷款 AAA 级证券化的 LIBOR 和 3 年期利差的自相关图。
Auto correlation for LIBOR rate
通过检查伦敦银行同业拆放利率的滞后,我们可以看到有几个滞后具有统计意义的积极和消极的自相关。它们都是基于自身的许多滞后参数来预测未来 LIBOR 利率的良好候选对象。我决定使用一个简单的自回归模型,因为模拟冲击的更复杂的模型可能会显示失真,因为我们已经处于冲击情景中。我可以使用的另一个模型是 Vasicek 模型,它包含了诸如逆转速度等因素。
通过我决定使用的简单自回归模型,今天的 LIBOR 利率可以设置为某个平均值,加上昨天值(phi)的一部分,再加上一些噪声。对于稳定的进程,phi 值需要在-1 和+1 之间。
如果这个过程只是噪声,φ= 0,而如果是一个的随机游走,φ= 1。如果 phi 为负,该过程显示均值回复。如果 phi 为正,过程显示动量。****
下图中,rt 是利率的时间序列。利用上述 LIBOR 利率的自相关数据,我们可以将未来利率定义为其滞后期的函数。第一个是 AR1,第二个是 AR2 等等。
以下是 ABS 价差的自相关图:
Auto-correlation for auto loans and student loans time series
Auto-correlation for HELC and credit cards time series
生成上述自相关和显著性图的代码在下面的要点中,进一步扩展了 pandas 自相关功能,以便返回数据帧以及显著性约为 1.96 标准差的滞后列表:
Auto-correlation and significant lags for time series
通过检查 ABS 和 LIBOR 利率的滞后,我们看到有许多滞后我们可以使用,但我们如何避免过度拟合或欠拟合我们的时间序列模型?
自回归模型的阶数
尽管我们可以对所有资产使用所有有效的滞后,但我们可能会过度拟合我们的模型。
一个解决方案是拟合许多模型(AR1、AR2、AR3 等。),测量每个模型的阿凯克信息准则 (AIC)和/或贝叶斯信息准则 (BIC),并确定 AR 的哪一阶给出我们最低的 BIC 或 AIC。
BIC for LIBOR and selected AAA ABS spreads
根据他们的 AIC 或 BIC,高于 AR1 的模型可能会过度拟合我们的模型,因此,我将使用 AR1 模型模拟所有资产的利率。
确定最佳参数的代码如下:
一旦我确定了要使用的最佳滞后,我就为所有 ABS 利差和 LIBOR 利率创建了一个 AR 参数字典。
相关
MC 模拟需要生成保持其历史相关性属性的模拟速率。
为简单起见,我计算了相同到期日的不同资产类别之间的相关性,并假设,例如,3 年汽车 ABS AAA 利差和 1 年汽车 AAA ABS 利差的相关性为 100%(这与现实生活中的行为在大多数情况下是接近的)。
对于多元随机数生成器,我最初使用 scipy 函数这里使用,但是发现使用乔莱斯基分解在计算上更有效。
我还将生成一个 date_index,它将包含我们分析的所有未来日期,直到我们将购买的模拟债券的潜在最长到期日。
代码如下:
AAA 级资产在持有期内被降级或违约的概率
为了估计这一点,我创建了一个函数,基于 AAA ABS 在一年内的一般历史转移概率定义了一个转移矩阵,不包括抵押贷款。
这一 1 年的转换矩阵可用于模拟从任何初始状态(AAA、AA、A、BBB、BB、B、CCC)到任何其他状态加上“D”的转换,使用单状态马尔可夫过程。
然后,我们可以通过将 1 年过渡矩阵添加到以时间为参数的递归函数中,来估计给定年限内的过渡概率。有了这个,我们可以在模拟中导出运行函数的许多转移向量,这将帮助我们估计概率。
pyabs, credit migration estimation
单一利率情景下的模拟杠杆购买
这里的过程如下:利用模拟的和适当相关的 LIBOR 利率和利差情景之一,我们在第一周模拟购买 4 个合格资产类别中的任何一个,以模拟显示的任何普遍市场利率,并利用美联储提供的杠杆作用。
TALF leverage per type of ABS as a function of term (f_risk_capital), probabilities of 1, 2, and 3 years issuance (p_term), and probabilities of acquiring each of the asset classes (p_issuance)
有了这些模拟市场条件,我们可以估计无损失回报,并决定是否购买。然而,我们不知道我们是否会在这些购买中遭受损失。为了了解这一点,我们需要对违约进行建模,但我们不会将这一知识用于我们的购买决策。我们将只使用预期年回报率和最低预期回报率。
Example of a run of the simulated purchase program under one of the simulated and properly correlated interest rate and spread scenarios
在上面的模拟场景中,在 2009 年 3 月 6 日的第 3 周(指数 2 ),我们可以购买 2012 年 3 月 2 日到期的 1 . 66 亿美元的 AAA 汽车贷款 ABS,仅承诺 2000 万美元的资本和 1 . 46 亿美元的美联储贷款。在这种普遍的市场条件下,我们的预期年回报率为 7.82%。
假设最低回报率为 10%,我们就不会购买那种特定的债券。此外,我们模拟的 3 年马尔可夫转移表明,债券在其生命周期内保持 AAA 评级。因此,在这个特定的场景中,我们会购买指数为 0,3 和 4 的债券。这些模拟市场条件将允许我们锁定 2.5 亿美元(25.42%)3 年,1.66 亿美元(63.09%)1 年,1 亿美元(20.46%)1 年。结果是只有 6000 万美元资本的 5 . 16 亿美元投资。
这个特定的模拟显示,第一个债券遭受了从 AAA 到 AA 的模拟降级,这可能会轻微影响其在降级之日的市场价格,但这与我们无关,因为 TALF 的购买必须持有至到期,按市场定价不是问题。
以下代码生成了一个熊猫 df 字典,您可以将它传递给解决方案数据框来回答您的所有问题:
********
结果
回报及其百分位数的分布:
- 如果我们承诺向购买计划投入 1 亿美元,预期年回报的分布是怎样的?
- 如果我们承诺用我们的资本购买每一种债券,而不考虑购买时的利差,那么亏损的概率是多少?
**len(solution[solution['exp_annual_r']<0])/(sims*purchase_weeks)0.049836**
- 在 TALF 合格证券中,我们能期待有多少堕落天使?(过渡到 BB、B 和 CCC 评级)
**solution['final_rating'].value_counts(normalize='True')
AAA 0.884480
AA 0.101102
A 0.011288
BBB 0.001516
BB 0.000852
B 0.000418
CCC 0.000214
D 0.000130**
- 如果我们根据购买时的利差和杠杆来区分购买哪些债券,那么获得超过 5%的最低回报率的可能性有多大?
**strategy_df = solution[solution['exp_annual_r']>0.05]
len(strategy_df)/(sims*purchase_weeks)0.881436**
- 这种策略的无损失年回报率的中位数是多少?
**strategy_df['exp_annual_r'].median()0.37166140387288993**
- 基点中的预期默认值是多少?
**(strategy_df[strategy_df['final_rating'] == 'D']['total_purchase'].sum()/strategy_df.total_purchase.sum())*100001.2697864542783506**
- 对于每 1 美元的采购,我们期望投入的平均资本比例是多少?
**strategy_df['risk_capital'].sum()/strategy_df['total_purchase'].sum()0.0854416650602756**
- 投资组合的平均寿命是多少?
**sum(strategy_df['term']*strategy_df['total_purchase'])/sum(strategy_df['total_purchase'])2.241573279710343**
有了所有这些结果,2009 年 2 月向家族办公室提出的建议是向 TALF 计划投入资金,在不亏损的情况下,预计 2 到 3 年的年回报率为 37%。基本策略是,只有在模拟市场条件下,根据真实定价数据(息差、杠杆和到期日)考虑的债券允许他们获得大于 5%的年回报率时,才进行投资。
预期违约被建模为不到 10 个基点,他们可以预期每 8.5 美分的 TALF 合格资产支持证券的多元化投资组合获得约 91.5 美分的杠杆。
利率和利差保持在模型的置信区间内。
我的利率模型有多符合现实?模拟的相关性表现如何?
下面你可以看到橙色的实际 3 年信用卡 AAA 利差,绘制在许多模拟路径上,虚线代表中间值、第 25 和第 75 个百分点。
虽然购买策略集中在 TALF 的前 4 周,但图表显示了 10 周的结果。实际利率保持在预期范围内。
Simulated spreads for 3 years AAA student Loans
所有其他已实现的比率都接近模型的预期。
Simulated LIBOR rate
查看上图的另一种方法是绘制购买计划最后一周的价差分布,并将实际值与 AR1 模拟模型的预期中值进行比较。
LIBOR
student loans, credit card, helc, auto
更好的可视化,伦敦银行同业拆放利率预测值变化分布的动画:
Time series: Distribution of forecasted LIBOR rates
随着我们预测时间的推移,我们开始看到分布形状的长尾,但这并不影响我们的短期预测。
Animation showing distribution of expected LIBOR rates, from the Monte Carlo simulation and at different points in time
正如我们之前看到的,模拟的中值很好地估计了实际实现的值。
模拟相关性也在预期范围内。下图显示了随机选择的 100,000 个模拟场景中的一个场景与实际场景的相关性。
Simulated vs realized correlations
违约和过渡保持在模型预期范围内。
贷款期限约为 3 年;然而,最丰厚的回报是在项目第一年的投资中获得的,当时的利差相对于后来几年来说很高。
据我所知,没有投资者遭受损失。
Outstanding TALF loans from inception of program to end. Source: Federal Reserve Statistical Release
回想起来,TALF 计划好吗?
芝加哥联邦储备银行不久前发表的一篇论文得出结论,TALF 计划阻止了美国经济陷入比实际更深的困境。
该论文引用了一些学者的研究,他们在研究中发现,当使用家庭层面的数据和综合数据时,融资条件和汽车销售之间有很强的联系。
具体来说,他们发现 2007 年至 2009 年间汽车销量下降的 38%可以归因于新车贷款利率的上升和家庭对信贷条件不利的看法。
可能面临借贷限制的家庭的购买对信贷条件的变化极其敏感,但对预期的收入变化不敏感。研究发现,利率每增加 1 个标准差,汽车总销量就会下降 13 万辆。
该研究表明(直接或间接)通过让消费者更容易获得和负担得起信贷,TALF 支持了汽车销售和整体经济。
还有其他类似 TALF 的机会吗?我们怎样才能找到他们?
金融危机总是伴随着机遇,但就我而言,领域专业知识、快速原型开发/编码和快速决策是发现和利用金融机遇的唯一途径。
(目前)还没有通用的人工智能来指出围绕信用风险、大宗商品、激进主义等特殊机会的投资。创业公司开发的所有“信用风险人工智能”都只是重新利用 Scikit-Learn 和/或谷歌的 TensorFlow 代码,大部分是由金融领域专业知识很少或为零的机器学习工程师拼凑而成的。他们的主张在非定量分析师看来不错,但我向你保证:他们的主张在紧张的现实生活中是站不住脚的。这些开发人员不分析尾部风险和变化的相关性:他们不知道如何分析。
在许多情况下,开发人员甚至不知道他们的一些创造已经内置了技术缺陷。例如,Marcos López de Prado 博士在其著作《金融机器学习的进步》中记录了 Scikit-Learn 交叉验证中的一个 bug。那段代码是内置在我所见过的许多人工智能的信用风险中的。
您可以查看以下问题:
**** [## 评分函数不知道类 _ Issue # 6231 sci kit-learn/sci kit-learn
与 pydata/patsy#77 的@amueller 讨论(评论)。建议:将可选的“标签”参数添加到…
github.com](https://github.com/scikit-learn/scikit-learn/issues/6231)
当然,也有一些例外,有一些产品是好的。
关于独特的投资机会,是的,我计划在未来的文章中写一些有趣的机会,在机会被套利出去之后。由于显而易见的原因,在具体的机会出现时写下它们是不明智的。
The TALF opportunity analyzed by my advisory firm back in early 2009
事实上,你在这里学到的几乎所有分析和建模都是在 10 年前完成的,当时 TALF 宣布成立。我正积极地试图筹集资金以利用这个机会,背景信息加上本文中的所有模拟都是我向感兴趣的各方介绍的一部分。
目前,我正在 Bitbucket 中为我的私人回购协议编写专有代码,并分析几个机会,这些机会就像 TALF 支持它们一样令人兴奋。
但除了潜在的交易和结构化事件,我所看到的从数据科学中获利的一些最佳机会是存储在大公司和政府机构的筒仓中的原始数据,这些数据可用于产生新的收入来源。在大多数情况下,拥有这些数据金矿的公司出于多种原因对此无所作为。
我希望这篇文章能帮助你理解奥巴马政府时期的政策带来的最佳投资机会之一,以及模拟模型如何在不确定的情况下帮助决策。
您可以在我的 Github repo 中找到本文中介绍的所有代码,以及一个 Jupyter 笔记本 here 中的使用示例。
如果你喜欢这篇文章,请告诉我,分享这个故事,并在下面留下你的反馈。
All the images, code, and graphs in this article belong to and/or have permission for distribution.
来源:
- 美国政府为固定收益工具的投资者创造机会。世家资本,2009 年 2 月。
- 资产支持证券市场、危机和 TALF。苏米特阿加瓦尔,杰奎琳巴雷特,水晶村,和玛丽克里斯蒂娜德纳尔迪。芝加哥联邦储备银行。
- 定期资产支持证券贷款工具:常见问题。纽约州美联储银行,2009 年。
- 美联储统计发布 H.4.1,“影响
准备金余额的因素”,表 1。
来自《走向数据科学》编辑的提示: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。
我如何在 Android 中为黑色素瘤检测制作 Skinly
原文:https://towardsdatascience.com/how-i-made-skinly-for-melanoma-detection-in-android-6ad00f0bd26d?source=collection_archive---------20-----------------------
将计算机视觉和 Android 与 TensorFlow Lite 和 Keras 以及所有定制数据相集成。
Medical Science and Computer Science have a great match!
机器学习(ML ) 在医学科学和健康行业创造了奇迹。经验丰富的医生获得的专业知识现在可以通过 ML 算法来学习,这些算法是用几行代码创建的。我将分享我关于 Skinly 的故事,这是一个可以检测黑色素瘤(一种常见的皮肤癌)的安卓应用程序。
[## skinly—Google Play 上的应用程序
Skinly 是一个研究项目,旨在通过您的 Android 设备检测黑色素瘤等疾病。它使用…
play.google.com](https://play.google.com/store/apps/details?id=com.health.inceptionapps.skinly&hl=en)
此外,我将参考各种提示,引导您找到包含相关代码的 Python 和 Java ( Android)文件。
GitHub Python 项目->https://GitHub . com/Shu bham 0204/Melanoma _ Classification _ with _ TF
GitHub Android 项目->https://github.com/shubham0204/Skinly_for_Melanoma
互动 Google Colab 笔记本->https://Colab . research . Google . com/drive/1t 1 syfzt _ OE 974 yti0 xqp 5 Tet 5 dhvo 77 f
当然是从 Python 和 TensorFlow 开始!
我想到的第一个问题是图像数据。一个人如何能够获取成千上万的黑色素瘤图像?
收集图像数据
我使用我一直最喜欢的 Fatkun 批量下载图片扩展,设法从互联网上提取了数百张图片。这个 Chrome 扩展允许我将谷歌搜索结果中的图片提取到我的电脑中。
- 为了训练,图像被调整到 32 * 32 的尺寸。
- 由于图像数量较少,对图像进行了增强,以便模型能够更好地概括。
- 在彩色图像(3 通道)上训练该模型。
提示:查看存储在 NumPy 文件(。npy)此处 。同样,对于查看图像预处理这个 文件 。
训练模型(使用 Keras)
该模型需要足够聪明,能够区分健康皮肤和有黑色素瘤斑点的皮肤。为此,我选择了暹罗卷积神经网络。
[## 使用暹罗网络和张量流从零开始进行人脸识别
人脸识别已经成为移动应用程序和许多其他机器中的常见功能之一…
medium.com](https://medium.com/predict/face-recognition-from-scratch-using-siamese-networks-and-tensorflow-df03e32f8cd0)
这些网络也用于人脸识别和许多其他应用。
Code for building the Siamese model in Python
提示:参考这个 文件 。
将模型转换为 TensorFlow Lite 模型
为了让这样的模型在 Android 上工作,我们需要将 Keras 模型(. h5)转换为 TensorFlow Lite 模型(。tflite)文件。然后,这个文件被加载到我们的 Android 应用程序中,我们在其上执行推理。
Conversion of Keras model to TensorFlow Lite model
提示:使用 岗位培训量化 帮助我大幅减少了模型大小。还有,参照这个 文件 进行换算。
开发 Android 应用程序(使用 Java)
Android 应用程序被赋予了美丽的颜色和设计,因此看起来很友好。Android Jetpack 的 导航和 ViewModel 组件让工作变得更加简单快捷。
下载图像进行比较
如果你以前使用过暹罗网,你会知道它需要一些数据来进行比较以产生一个分类。
假设,我们建立了一个暹罗神经网络,用于狗和猫之间的分类。神经网络将输入图像与狗和猫的图像进行比较,并输出显示最大相似性的类别。两张猫的照片会显示出更多的相似性。
Firebase Cloud Storage
对于 Android 来说,Firebase 云存储是存储图像然后下载它们的合适地方。
提示:参见 Firebase 云存储文档 Android 。还有,请看这个 文件 中的代码。
运行模型
TensorFlow Lite(版本=1.13.1)依赖项帮助我们加载。Android 中的 tflite 模型。您可以将其添加到您的build.gradle
文件中。
dependencies {
// Other app dependenciesimplementation **'org.tensorflow:tensorflow-lite:1.13.1'** }
然后,下面的代码获得范围为[0,1]的相似性得分。该方法逐步将输入图像与所有下载的图像进行比较,然后遵循以下步骤:
- 获取每个图像与输入图像的相似性得分。
- 分离具有最高相似性得分的前 K 个(值=5 或任何其他奇数)图像。
- 解析这五幅图像的类别。
- 输出五个图像类别中具有最高多数的类别。
Code for fetching similarity scores by running the model.
提示:加载时,TFLite 模型参见 此处 ,投票/分类参见此 文件 。
最终应用
最终的 Android 应用程序如下所示:
该模型可以根据较少的数据进行训练,但这种技术和想法可以扩展并进入主流生产。欢迎您的任何建议!
还有呢!
仅此而已!
使用 Android 和机器学习的医学可以达到很高的高度。谢谢大家,机器学习快乐!
我如何克服数据分析中的骗子综合症
原文:https://towardsdatascience.com/how-i-overcome-imposter-syndrome-in-data-analytics-8f6103be820b?source=collection_archive---------10-----------------------
我对数据专业人员真诚而简单的建议
在谷歌和维萨这样的数据和科技公司找到自己的位置
Source (Unsplash)
“恭喜恭喜!谷歌是一个工作和提高你的数据分析技能的好公司!!你会遇到非常聪明、有干劲的人,他们在做重要的大事。”我在 Visa 的同事向我表示祝贺。
2019 年 7 月,我被 Google 聘为数据科学家,与 ML 一起对抗滥用。
之前在 Visa 的同事听到我跳槽到 Google 的消息后,都调侃我很特别。对他们来说,谷歌是真正聪明的技术和数据专业人士的最终“朝圣”目的地。毕竟是“谷歌”,实现了那么多突破,从 DeepMind、Alpha Go 的科学成就,到量子计算至上。在他们的心目中,谷歌因其惊人的福利、薪酬和影响力而成为 2019 年的梦想雇主。在我任职的几天内,我在 LinkedIn 上收到了许多信息,要求推荐我进入谷歌。被谷歌聘为数据科学家是一个绝好的机会,总能激发我的同事们的梦想,包括我的同事。这太神奇了!我曾和这么多聪明且有动力的专业人士一起工作过。我有影响数十亿人生活的项目,我有惊人的津贴和学习机会。
但有时,我担心自己不够好。
冒名顶替综合症。
尽管取得了明显的成功,但这种不满足感仍然存在。冒名顶替者遭受长期的自我怀疑和一种智力欺诈感,这种感觉压倒了任何成功的感觉或他们能力的外部证明。—哈佛商学院
简单地说,冒名顶替综合症是一种持续的自我怀疑,将自己与他人进行比较。
事实上,统计学家表明,世界上超过 70%的人承认患有冒名顶替综合症。他们遍布各个行业,如医药、商业和教育。
就我而言,我有时会把自己比作更有能力的资深同行,他们也是 Kaggle 和 ML 的超级明星。我有时对自己的技能有自我怀疑;有一次,我花了很长时间破解密码,只要我开口,这些密码就唾手可得。我担心有一天 HR 会来说我在谷歌严格的招聘过程中是假阳性。在 Visa 和谷歌等大型科技公司,我有时会面临这种想法。
如果这种情况发生在你身上,那么你并不孤单。
在技术和数据领域,人们会通过你的影响对你进行客观评估。你将接受绩效评估,并与他人进行比较。由于数据分析一直在发展,您需要不断学习和提升您的技能。你今天所知道的,不一定是下个月的最佳实践。这就是为什么冒名顶替综合症在数据和技术领域更为普遍的原因,在这个领域,竞争非常激烈,人们总是需要不断地学习和产生结果。
把冒名顶替者当成你最好的朋友
在大型跨国数据和科技公司工作了 3 年后,我学会了一些克服这种自我怀疑的关键技巧。令人欣慰的是,我正在成长,生活得很好。
因此,我真诚地希望这篇文章能成为一个休息点,让你在数据分析的旅程中休息、成长和超越。这种方法对我很有效,我真诚地希望它对你和我的数据同事也有效。我相信你可以用的坚定、的谦逊、的专业面对你的冒名顶替者。
信念:了解你建造房屋的基础
Source: Unsplash
聪明人把房子建在岩石上。愚蠢的人在沙子上盖房子——摘自《马太福音》7:24–27,世界英语圣经
马太福音 7:24-27 是一段伟大的圣经经文,它一直是我的生活灵感,它谈到了骗子综合症的核心,你的“身份”。
就像智者如何把他的房子建在岩石上一样,你应该把你的个人身份建立在不可动摇的基础上,而不是建立在转瞬即逝的愿望上。对我来说,我的身份是作为一个基督徒,我已经通过耶稣基督的血称义。
遗憾的是,我在数据和技术领域的许多同事不幸将自己的抱负建立在成就、职业发展和金钱之上。他们对自己有很高的期望,当他们得不到想要的东西时会变得焦虑。
让我与你分享更多这方面的内容。分析就业市场增长非常快。就在几年内,许多大学开始提供数据科学学位,来自世界各地的成千上万的人注册。如今,这个学位已经变得和进法学院和商学院一样难了。
不幸的是,有太多的不确定因素影响着这种兴奋感的走向。数据科学家的就业市场正变得越来越饱和和虚幻。许多初创公司开始意识到,在没有坚实的工程和业务基础设施的情况下,他们在数据科学方面发展太快了。
因此,我认为,尽管需求不断上升,供应市场的竞争将会越来越激烈。这将成为你找数据分析工作的巨大威胁。
如果你看重高薪和职业发展,你会失望的。在我与新加坡国立大学等顶级大学的会谈中,我收到了一位研究生学者的提问,她非常想在分析领域找到一份好工作。外面的世界很残酷。
作为一个基督徒,我把自己当成一个教育者。我的目标是学习、分享和教育我的同行,因为我喜欢用分析解决业务问题。数据分析领域日益激烈的竞争成为我学习和分享的新领域。这就是我擅长数据分析的原因。
而不是利用工资、福利和灵活性等短暂的动机。我会用我的信仰、影响力和教育等持久的动机来继续学习和教学。
最后,我把自己描述成一名教育工作者,而不是数据工作者/专业人士,从而为 Visa 和谷歌提供了更多的价值。我代表两家公司参加了许多内部和外部会议,同时解决分析问题。
同样,你应该把你的身份(房子)建在岩石上,而不是沙滩上。你需要追求长期的影响,而不是短期的放纵。
谦逊:承认自己的弱点,寻求帮助
Albert (My best friend) and I study for OMSCS together on Saturday morning
承认自己的弱点,人无完人。找到能帮助你的人,并感谢他们。你的人际关系是你最大的资产,让你不断前进。
不要隐藏你的弱点。相反,揭露他们并寻求帮助。这将增长和提高你克服大挑战的韧性。
作为一个不会说英语的人,我缺乏沟通技巧来流利地表达我的想法。知道自己的弱点后,我从内部写作班和演讲会寻求帮助,以克服我浓重的口音和薄弱的语法。在不断的帮助下,我克服了口吃,说话流利了。在谷歌和维萨这样的公司工作,我的写作和沟通技巧已经成为我最大的财富。
学习分析,我总是邀请我的朋友一起学习。在我深陷困境的时候,他们还是和我站在一起的朋友。此外,我有优秀的经理,我可以和他们分享我的缺点,并一起坚持下去。没有上帝的恩典和这些人际关系,我不可能超越今天的我。
你应该承认自己的弱点。发现的瑕疵越多,就越应该寻求帮助,克服自己的差距。这是你成长的方式。
自信:掌握你最大的专长
Source
不要认为你比别人知道的少。你应该认为你可以为他人贡献巨大的价值。找到并专注于这个价值。
你应该找到能为你的公司带来的核心价值。它很重要,因为它给了你建立专业知识(SME)的空间。
对我来说,我在谷歌专门研究视觉识别网络钓鱼。我的座右铭是“大规模打击网络钓鱼滥用”。我的主要结果将集中在如何提高 ML 模型的质量来捕捉钓鱼网站。这是对我的核心表现唯一重要的事情。我非常重视所有权,并花了大部分时间来学习它。
通过拥有一项专长,并在重要的小事上成为主题专家,你会知道你的立场,并对你的工作负责。
骗子综合症的治疗:承认我们是人类
与冒名顶替综合症的斗争非常艰难。这不是身体上的,而是情感上的。它的源头是看不见的,通过你自我感知的心理缝隙渗透进来。治愈的方法是承认我们是人类,因此我们是有限的。
- 追求稳定而持久的信念,而不是有形而短暂的目标。
- 谦逊地承认我们充满了缺陷,然后寻求帮助,而不是隐藏它们。
- 拥有信心去做重要的小事,并作为数据专业人员对自己的影响负责。
所有这些技巧都很简单却很难…我鼓励你和我们一起踏上在数据分析方面出类拔萃的旅程。
索利·迪奥·格洛丽亚。
最后…
Source: Unsplash
我真的希望这是一本很棒的读物,是你发展和创新的灵感来源。
请在下面评论提出建议和反馈。就像你一样,我也在学习如何成为一名更好的数据科学家和工程师。请帮助我改进,以便我可以在后续的文章发布中更好地帮助您。
谢谢大家,编码快乐:)
关于作者
Vincent Tatan 是一名数据和技术爱好者,拥有在 Google LLC、Visa Inc .和 Lazada 实施微服务架构、商业智能和分析管道项目的相关工作经验。
Vincent 是土生土长的印度尼西亚人,在解决问题方面成绩斐然,擅长全栈开发、数据分析和战略规划。
他一直积极咨询 SMU BI & Analytics Club,指导来自不同背景的有抱负的数据科学家和工程师,并为企业开发他们的产品开放他的专业知识。
文森特还在10 日至 8 日和 BestTop 开设了他的一对一导师服务,指导你如何在谷歌、Visa 或其他大型科技公司获得你梦想的数据分析师/工程师工作。 如果你在寻找良师益友,请点击这里 与他预约。
最后,请通过LinkedIn,Medium或 Youtube 频道 联系文森特
我是如何用我的思想玩“拍打鸟”的
原文:https://towardsdatascience.com/how-i-played-flappy-bird-with-my-mind-e1e5b4da59ce?source=collection_archive---------48-----------------------
用我的脑电波控制经典手机🧠
玩过这个游戏吗?还记得它引起的挫败感吗?
“Game Over”
嗯,Flappy Bird 实际上已经从 App Store 中删除了,因为它太容易上瘾了。但是你猜怎么着?我创造了我自己的版本,你可以用你的大脑玩😉
等等,怎么会?
所以这之所以可能是因为一种叫做脑机接口的新兴技术。脑机接口(BCI)允许我们将大脑与外部机器或物体连接起来。
基本上,我们的大脑使用称为神经元的神经细胞在全身传递信息。神经元“开火”是为了将信息传递给下一个,就像连锁反应一样,直到信息到达大脑,反之亦然。这种神经活动导致大脑发出电磁波。
You can’t actually see the waves
这就是脑机接口发挥作用的地方——它们通过获取这些脑电波,分析它们,然后将其转化为命令。
获取脑电波
你可能想知道我们如何获得脑电波——毕竟,你看不见也感觉不到它们。嗯,一种用来记录大脑电活动的流行方法叫做脑电图(或 EEG😅).我选择的设备是 Muse 头带,用于冥想,但也可以用于开发应用程序。
Just wear it around your head and you’re good to go
头带连接到 Muse Direct 应用程序,该应用程序使用开放式声音控制协议将数据传输到我的电脑。
处理数据
因此,来自应用程序的数据被一个 Python 程序成块接收(几乎每毫秒左右),它看起来像这样。
b'Muse-C2C0/notch_filtered_eeg\x00\xacDX\x13rDO\x1f\xe3'
b'Muse-C2C0/variance_eeg\xd5\xf2CJ1\x83C\x8e\xf2{DG\xect'
b'Muse-C2C0/eeg\xb8\x7f\xc0\x00\x00\x7f\xc0\x00\x00'
b'Muse-C2C0/elements/blink\x00,i\x00\x00\x00\x00\x00\x00'
b'Muse-C2C0/elements/jaw_clench\x00,i\x00\x00\x00\x00\x00\x00'
这到底是什么意思?🤔嗯,数据是以十六进制形式接收的,这意味着我们必须将其转换为十进制,然后对其进行处理。我就是这么做的——这个过程涉及到一点数学,所以我就不解释了,把代码链接到这里。在转换数据后,我注意到每当我眨眼时都有大的尖峰信号。
I blinked three times during this recording
移动鸟
在这一点上,我们知道每当数据中有一个大的峰值时,用户就眨眼了。然而,情况并非总是如此——有时尖峰是由其他运动或活动引起的。
为了确定用户是否真的在眨眼,我们可以使用带通滤波器。虽然这看起来很复杂,但它基本上只是意味着识别与眨眼相关的频率范围👁️.就我而言,我做了一些测试,通过反复试验,我找到了一个相当好的范围。
最后一步是只要用户眨眼,这只鸟就会“扇动”——就这样!
Skip to 1:35 for a demo of the game
很酷,是吧?这只是冰山一角。从诊断抑郁症到帮助瘫痪的机器人控制手臂,脑机接口拥有巨大的潜力!
我是如何用旅行推销员问题拯救圣诞节的
原文:https://towardsdatascience.com/how-i-saved-christmas-with-the-travelling-salesman-problem-3d85c190ed9d?source=collection_archive---------14-----------------------
圣诞老人最佳旅行的美好想象
Photo by Mitya Ivanov on Unsplash
一切都开始于一个下着雨的周六,我正在狂看网飞的一部新圣诞电影,突然听到有人在我公寓外面大声喊我的名字。我打开门,我看到一个高大的身影穿着红色外套,红色裤子,戴着一顶滑稽的红色帽子。我一生中从未如此惊讶过:盯着我看的那个人是圣诞老人本人!!!
TL;DR;他想从我这里得到的是一个软件来优化他 12 月 24 日的交货。他的要求是找到给定 342 个城市的最短路线。他需要一条始于拉普兰的循环路径。
这里有个视频方便大家看!【JavaScript 视频直播的链接在文末!
接下来是我和圣诞老人的对话!
圣诞老人的问题
安德里亚:嗨,圣诞老人,让我准备一杯茶,同时,你为什么不向我解释一下你的问题呢?
圣诞老人:吼吼吼!嗯,你知道每年 12 月 24 日至 25 日的晚上,我需要向全世界运送数十亿件玩具。这是一项非常具有挑战性的任务,安德里亚。我想知道计算机科学是否能简化我的生活。如何以最短的距离游览每一个城市?
安德里亚:好的,这听起来很熟悉,你能详细说说你的问题吗?
圣诞老人:当然。我有一份 307 个城市的名单,这些城市拥有最多的人口。我想知道哪条是只去这些城市一次的最短路径。你可能知道,我需要从我在拉普兰的家出发,而拉普兰也是我此行的最后一站!显然,我需要接触的城市不止 307 个,但我要的是战略规划,而不是运营。一旦我到达了主要的地方,我会和驯鹿一起想出如何移动到附近的城镇!
安德里亚:好的,圣诞老人。我认为你的要求很明确。实际上你描述的是计算机科学中一个非常经典的问题:它被称为 旅行商问题(TSP) ,它的定性表述和你刚才告诉我的差不多。不过我有个坏消息:这很难解决!让我画一个小草图,看看我们是否同意任务是什么!
假设我们只想关注美国的主要城市,那么您要寻找的路线如下所示:
圣诞老人:哦,安德里亚,这正是我想要的!只要记住我会飞!对了,你能给我解释一下为什么这么难吗?
安德里亚:TSP 属于一类被称为NP-完全问题 的问题。不确定你是否想知道数学定义,但是从实践的角度来看,在一百多年的研究中,没有人找到快速解决这些问题的方法,这些解决方案也不太可能存在。
圣诞老人:能有多难?
Andrea :如果你对你所要求的问题运行一个强力算法(这意味着测试所有可能的解决方案并挑选出最好的一个),它可能需要字面上的 数百或数千年才能得到结果!即使有现代科技。幸运的是,有一些更聪明的方法来处理许多 TSP 实例!
圣诞老人:吼吼吼!这是个好消息!我比那天掉进棉花糖池还开心!你能告诉我有哪些选择吗?
安德里亚:当然。有一些策略:
- 如果你只是想要一个“足够好”的解决方案,我们可以使用启发式算法:这些方法通常非常快,但是它们导致的解决方案可能不是(并且通常不是)最优的。
- 我们可以使用一些聪明的“精确的”算法:潜在地,这将花费永远的时间,通常他们在可接受的时间内解决小问题,但有时他们很难实现。在这种情况下,解决方案总是最优的。
- 我们可以用混合整数线性规划:如果按照这条路线,我们只需要写一个数学模型,然后用一个 MILP 求解器作为黑箱,就可以得到最优解。
在给你推荐之前,我可以知道你的预算是多少,你的截止日期是什么时候吗?
哦,不幸的是,我的最后期限很紧,我需要在周日晚上得到解决方案,所以你有一天半的时间来实施一切。另一方面,我有一个无限的预算!圣诞国家银行可以印出我想要的那么多魔法美元!还要注意,我只想要 307 个城市中的最佳路线!
安德里亚:嗯……好的。实际上,截止日期已经很近了;因为你需要最优路线,我们将使用混合整数线性规划(MILP) 。有很多工具我们可以使用,其中一些是商业的,像 CPLEX 或者 Gurobi 。其中一些仅用于学术研究,如 SCIP。其中有一些是开源的,比如 GLPK 和 CBC 。
现在,你告诉我你有无限的预算,但是不幸的是,Gurobi 和 CPLEX 不接受魔法美元作为货币,所以我们需要使用 GLPK 或CBC;后者通常更快,可以和 Python 一起使用,所以我想我们有自己的基础工具!
圣诞老人造型
圣诞老人:呜!神奇的安德里亚!那我们开始吧。很多人不知道很久以前我毕业于数学系。如果你能解释一下这个模型,我会很高兴的。
安德里亚:哦,太好了,写下一些公式总是很有趣,这让我感觉更聪明!首先,让我们看看我们在一个示例场景中寻找的解决方案:
这可以大致描述如下:
- 这是最优的,事实上,如果我们考虑节点之间所有可能的连接,我们只选择那些行驶到最短周期的节点。
- 每个城市只被访问一次,这意味着我们在每个城市只进入一次,从每个城市退出一次(更正式地说,我们可以说每个节点正好有一条输入边和一条输出边)。
- 我们只有一个周期!
为了使用线性规划表达这个解决方案,我们需要定义一些变量:假设我们有 n 个城市,我们可以为每对城市 i 和 j ,yᵢⱼ 创建一个变量。
现在, yᵢⱼ 将等于 1,如果在我们的最佳路线中,我们需要从城市 I 直行到城市 j(直接,不首先通过另一个城市), yᵢⱼ 将等于 0,如果没有选择连接。cᵢⱼ是连接城市 i 和城市 j. 的成本让我来写这个模型:
Santa,这个对象的问题是关于“没有子旅程”约束(例如见上图)。子游是一个周期,不访问所有城市,而只是一个子集。我们希望有一个周期,,所以这些不等式旨在消除有多个周期的可能性。
为了实现这个模型,我们应该为每个节点子集编写一个大致的“No sub-tour”约束。如果我们有 n 个节点,这将意味着 2ⁿ-2 个约束,这些约束不可能在计算机内存中表示(例如,n=300,约束的数量将是 20 . 370 . 359 . 763 . 344 . 860 . 862 . 684 . 456 . 884 . 093 . 781 . 510 . 514 . 514 . 364 . 6644 . 62 . 684 . 484 . 0993 . 381 . 514 . 514 . 514 . 514 . 514 . 514 . 514 . 5
这就是为什么我们需要找到一个更好的策略。
我们能做的是应用以下算法:
- 我们从模型中移除了“无子旅程”的约束,获得了所谓的“宽松模型”。
- 我们求解松弛模型到最优。这个解决方案很可能包含子旅游。
- 我们在当前的解决方案中找到所有的子旅程,并且我们将禁止这些子旅程的约束添加到模型中。
- 我们转到点 2 和迭代,直到没有子巡回检测到。
也许以后我们应该画个草图来阐明这些步骤。
圣诞老人:哦,那真是太棒了,安德里亚!谢谢解释!因此,我们的想法是移除大量的约束,只添加那些在单个周期内获得解决方案所必需的约束。啊甜蜜的回忆!这是解决这个问题的最好方法吗?
安德里亚:当然不是圣诞老人。我们可以将许多其他类型的约束添加到模型中,以减少达到最优解所需的迭代次数(它们被称为“切割”,来自切割)。但是你告诉我我们只有两天时间,所以我们要走最简单的路。
绘制算法
圣诞老人:呵呵安德里亚,我也想看一些代码。你知道,我们在圣诞老人家里的整个 IT 系统是用 Pascal 写的,我们真的需要一些更新。我们能不能做一些古老而珍贵的结对编程,这样我就可以开始钻研 Python 了?
安德里亚:哦,哇,绝对是圣诞老人。让我们一起来实现这一点。
正如我告诉你的,我们需要放松模型,消除“没有子行程”的不平等(这些在技术上称为秒,子行程消除约束)。我们的模型如下:
正如我之前解释的,如果我们解决了上面的,我们可能会有那些非常著名的子旅游。例如,下图是使用 18 个城市的宽松模型的解决方案:
如您所见,该解决方案满足所有约束:它是最优的,并且每个城市只有一条输入边和一条输出边。但是我们不想要子周期!如我所说,我们需要:
- 识别所有的“连接组件”(直观地所有连接在一起的节点组)。
- 用禁止那些组件的所有不等式更新模型。
让我画一个图表:
现在我们已经添加了所有新的切割,让我向您展示一下如果我们解决了这个问题会发生什么:
我们开始看到解决方案的形状!最后,如果我们迭代这个过程……嘣!
实施
安德里亚:是时候写些代码了。首先,我们需要一些图书馆。最重要的是 浆 。来自他们的网站: PuLP 是一个用 Python 写的 LP 建模器。纸浆可以生成 MPS 或 LP 文件,并调用 GLPK,硬币 CLP/CBC,CPLEX,和 GUROBI 来解决线性问题。纸浆与 CBC 捆绑在一起。我们还需要 networkx ,一个 Python 包,用于创建、操作和研究网络的结构(我们需要它在优化过程中识别子旅程)。
让我们创建一个 Python 类来解决这个问题。首先,我们需要读取城市(这里我们可以有世界城市的人口和地理坐标列表)。因为你的房子位置不在列表中,圣诞老人,我们会把它添加到数据中;此外,我们将增加一些城市,以提高全球覆盖:
现在,我们需要一个函数来 计算两个位置 (使用经纬度坐标)之间的距离。你的交通工具是由神奇的驯鹿拉着的雪橇,因此直线距离将是一个很好的近似值:
不错!我们可以编写函数来构建模型:
很好。复杂的部分到了。
我们必须得到当前的解,并建立相应的图形。我们将用 networkx 。之后,我们需要一个函数来:
- 检测连接的部件
- 如果这些大于 1(意味着我们有子旅程),那么向模型添加新的约束。如果我们只有一个连通分量,那么我们就找到了最优值。
我们准备写求解模型的函数了!
完成了,亲爱的圣诞老人,我们只需要调用方法!
圣诞老人:我等不及要执行代码了!
安德里亚:我也是!让我们看看需要多长时间以及需要添加多少秒的约束才能得到解决方案!我们将使用JavaScript 来可视化结果;更具体地说我们将使用 传单 以及 传单. motion 插件在地图上实现视觉效果!
我将在我的笔记本电脑上运行代码:
MacBook Pro (13-inch, 2019)
Processor: 2.8 GHz Quad-Core Intel Core i7
RAM 16 GB 2133 MHz LPDDR3
首先我们会尽量用你的 308 城市 (307 加上你在拉普兰的房子):
Santa’s optimal route with 308 cities
Execution Time: **556**
Number of SEC constraints: **380**
Solution cost (a.k.a. cycle length): **142.190 km**
正如你所看到的,我们没有覆盖一些国家,让我们包括更多的城市。考虑到我们现在有 342 个城市 (341 个加上你在拉普兰的房子):
Santa’s optimal route with 342 cities
Execution Time: **543 seconds**
Number SEC constraints: **352**
Solution cost (a.k.a. cycle length): **162.373 km**
在这种情况下,当我们添加更多要访问的城市时,找到解决方案所需的时间会减少。当使用线性规划解决 TSP 时,这并不是不常见的结果。当然,节点的数量(以及由此产生的变量和约束的数量)会对执行时间产生影响,,但是通常使问题变得困难的是地图上城市的实际布局。甚至增加一个城市(或者删除一个!)会让性能急剧恶化!
我来给你看看现场版:https://santa-tsp.herokuapp.com/
结论
圣诞老人:吼吼吼!安德莉亚。那真是太神奇了!我欠你很多!每个人都会准时收到礼物!你帮助我让人们更快乐!
安德里亚:嗯,圣诞老人,实际上已经有亚马逊在做类似的事情,但是,你知道,他们也不接受神奇的美元,所以我认为我们在给定的条件下做得很好!
圣诞老人:谢谢。我不明白为什么没有人接受我的魔法钱,但我很高兴你接受了!
谢谢你拯救了圣诞节!再见!
嗬!嗬!嗬!
后手稿
这是我的故事。很高兴能帮助圣诞老人了解这些概念。
谢谢你读到这里,如果你需要一些多余的魔法美元,请联系我!
圣诞快乐!
链接到 JavaScript 版本https://santa-tsp.herokuapp.com/
[## 聚类波洛克
杰森·布拉克绘画的聚类分析——如何利用 k-means 进行色彩分组
towardsdatascience.com](/clustering-pollock-1ec24c9cf447) [## 火花中加入的艺术
Spark 中加速连接的实用技巧
towardsdatascience.com](/the-art-of-joining-in-spark-dcbd33d693c)
我是如何在几个月内学会计算机视觉的
原文:https://towardsdatascience.com/how-i-sort-of-learned-computer-vision-in-a-month-c3faec83b3d6?source=collection_archive---------12-----------------------
十年即将结束,回头看,我做得还不够。所以我搜索了一些流行词,遇到了“计算机视觉”并尝试了一下,心想,“伙计,这能有多难?我打赌我能学会这些东西,并且做得更好。”
是的,我完全错了。
我没有扎实的统计背景,或者任何机器学习技能。学习比我想象的要困难得多。我想过在多个点停下来,但出于某种原因,我继续前进。现在我做了这个指南来节省初学者的时间,因为这是一个非常酷的主题。
那么什么是计算机视觉呢?
计算机视觉用来模仿人类的感知系统。我的主要动机是了解它的汽车应用,但实际上它可以应用于安全、医疗和国防工业。
在最底层,它通过过滤、寻找线条或改变图像的大小来改变图像的属性。然而,在更高的层次上,它训练一个模型来预测图像组件的类别和位置。图像处理算法涉及线性代数(特征向量、雅可比)、微积分(梯度、拉普拉斯)、统计和信号处理(卷积)的混合。
好了,现在你已经被警告了,继续行动,后果自负。
简要概述
该列表涵盖了整篇文章中的主题及其顺序:
- 数字图象处理
- 支持向量机
- 神经网络
- 目标检测(CNN)
- 对象分割(区域提议网络)
Python 是我的首选语言,因为它易于实现和配置。如果内存优化是你的目标之一,那就用 C++。包括 OpenCV、Tensorflow、Keras、Numpy 在内的库是应用必不可少的。
成为一个形象意味着什么?
所有的图像都是由红、绿、蓝(RGB)三个通道组成。还有其他颜色方案,如 HSV(色调、饱和度、值),但 RGB 是最受欢迎的。
每个通道都是使用强度函数计算的强度值(像素)矩阵。强度是衡量每种颜色显示强度的标准。它将图像位置作为输入:I(x,y)。强度范围从 0 到 255。因此,您可以将图像想象为三个矩阵的叠加(每个颜色通道一个矩阵)。
Source: Hernandez D., et al via Journal of Aerospace Mgmt and Tech (CC); Contained in Each Element is Intensity-Value
过滤能力
滤镜(或内核)用于找出更多关于图像通道的信息或对其进行转换。这些较小的矩阵在图像上“滑动”,在每个中心像素上进行加权求和。这个操作是一个 2D 卷积,允许你模糊图像,锐化图像,最重要的是找到边缘。
Source: Plotke, M., via Wikimedia (CC); Demonstration of Weighted-Sum via Kernel
但是到底什么是优势呢?
边缘是图像中强度从低到高或从高到低过渡的区域。因此,当搜索它们时,采用提供强度变化率的方向和幅度的像素梯度。更大的梯度表示更强的边缘(参见(a))。名为 sobel 算子的滤波器通过使用数值方法(使用向前、向后或中心差分)来近似强度梯度的幅度来实现这一点。
Illustrated by me; Step Edge Sharp Intensity Gradient
边缘对于将图像分割成多个部分的图像分割来说非常重要。我们的眼睛很容易处理这项任务,这让我们能够识别事物,但必须以艰难的方式教会计算机。
Source: Thomas, M. via Wikimedia (CC); Image Segmentation Post-Processing
跟踪运动
现在事情变得真正令人兴奋,因为我们可以用数学来看看像素是如何移动的。好吧,这听起来有点扯,但是听我说完:拍一段视频,然后把它分割成帧。在非常小的时间间隔内,帧根本不会改变。这就是光流约束。
Illustrated by me; I(x+dx, y+dy, t+dt) = I(x, y, t) by op flow constraint, therefore terms cancel
请记住,每一帧都是一个强度值的矩阵,因此通过一些神奇的数学(不完全是,这是一个泰勒级数展开)公式简化为强度变化的时间(随时间)和空间(沿 x,y 轴)速率。参数 u、v 是特定像素随时间的位置变化率(注意它们不是偏导数)。求解 u,v 是通过估计一个矩阵变换来完成的。由于关于强度值的信息很容易检索,所以给出了其它成分。
Illustrated by me; After cancellation get left with this
Illustrated by me; u = dx/dt, v = dy/dt
所以最后,视频的运动矢量可以被求解以确定物体如何运动。我不想用数学吓走你,但是要提醒你,从现在开始它只会变得更丑陋(以一种有趣的方式)!
高效地跟踪运动
金字塔用于寻找图像特征或通过向上或向下采样来帮助光流。这仅仅意味着在保持分辨率的同时缩小或放大图像(拜托,我们不可能有土豆质量的图片)。通过匹配的角和吊杆画线!你有一个金字塔。
Source: Cmglee via Wikimedia (CC); Pyramid Structure — Notice Features Maintained Despite Blur
物体运动在非常小的尺度上得到估计,每个方向向量使用金字塔增大,这增加了运动的长度。这允许跟踪对象。
通过找到连续帧之间的像素对齐来完成跟踪。通过最小化像素的估计位置与其真实位置之间的误差,可以密切跟踪感兴趣的点。这涉及使用来自光流约束方程的 u,v。
这些概念的详细解释可以通过沙阿博士的讲座 (2 — 11)和拉德克博士的 (6 — 7,10 — 12)找到。关于通过代码应用这些概念的内容可以通过 PySource 找到。
如何对图像进行分类
假设给你一个两类数据的散点图,你的任务是把它分开。通常,可以画一个函数来做这件事,比如直线或抛物线。然而,对于重叠或必须由非线性函数分隔的数据(例如圆圈),使用支持向量机(SVM)。它将更高维度添加到数据中,以确定功能解决方案。
Source: Learner M., via Wikimedia (CC); SVM — Notice Added Dimension Allows Data to be Separated by Hyperplane
支持向量机在图像处理中用于这种分类任务。他们接受正面和反面例子的训练,通常是为了确定随机图像是否属于某一类。
如何对图像进行分类,但更好
特征是图像的不同部分。有效的特征可以通过使用梯度方向的直方图来发现。他们把图像的结构分解成一个向量矩阵。
一个固定输入大小的图像被分割成一个固定的网格,在每个位置找到梯度的大小和角度。然后,180 度的角度范围被量化为九个仓或部分(每个包含 20 度的范围)。
形成包含图像上梯度角分布的直方图。面元中心用于说明落在面元之间的角度,它们必须相应地分开。
Source: Theiler, M. via Wikimedia (CC); Kernel Applied Over Fixed Grid on Image -> Grid of Gradients -> Histogram
通过对一群特定类别的猪(如车辆)训练 SVM,它将学习对新图像进行分类。利用图像结构,可以做一个更强的分类器!
更多分类?我听到的是神经网络吗?
我一直提到“分类”这个词,因为它有点重要。神经网络是另一种分类工具,只是它们可以处理具有数千个特征的多个类别。
然而,应用它们的一个主要警告是它们是硬件密集型的,通常需要强大的 GPU(不是 CPU,因为我们同时处理许多事情)。这是当前工作被应用于更有效的算法或更好的硬件的地方。
在进入细节之前,理解神经网络的结构是重要的。有不同类型的网络,现在我们将着眼于深度(全连接)神经网络。总体结构分为三个部分:
- 输入层
- 隐蔽层
- 输出层
Source: Burgmer, C. via Wikimedia (CC);
数据在输入层提供给一个节点(称为神经元)。每个节点都连接到下一个隐藏层的每个节点。这种连接是加权的,意味着输入乘以一些标量(权重)。因此,输出层的每个节点成为其输入(来自前一层的节点)的加权和。为了将数据保持在相同的范围内,需要应用一个激活函数。有许多类型的激活,现在我们将使用一个 Sigmoid 函数来限制值为[0,1]。
Source: Chris, L.B via Wikimedia (CC); Sigmoid function limits all values over domain to [0,1]
损耗 在每个节点进行计算,作为预期和真实输出之间的差值。神经网络的目标是通过找到这样做的成本函数(权重)的参数来最小化这种损失。看那波浪表面证明它很难找到极值。我们的下一个最佳选择是通过使用梯度(指示下降点)迭代地找到极值,然后更新权重。
Source: Derbyshire, S. via Wikimedia (CC); Red Line Shows How Minima are Found Iteratively Via Gradient Descent, Avoiding Saddle Points Along the Way
为了求解神经网络的梯度,使用了一种称为反向传播的方法。
一种图像分类器
现在我们将使用神经网络对图像进行分类。但是这并不是一件容易的事情,所以我们将使用一种特殊的类型:一个卷积神经网络。注意,这是用来对整个图像进行分类的。
其思想是取一个输入图像,用一个固定大小的核对其进行多重卷积。该组输出将是第一卷积层。然后重复这个过程。一堆内核得到应用,以增加随机性,并找到更多独特的功能!
Source: CodeEmporium via Youtube (CC); Multiple Filters Convolved with Same Image Produce Depth
随着网络了解到更多区分不同图像的特征,每个卷积层的复杂性都会增加。
例如,第一层可以找到线条和边缘。然而,通过第三层,它确定了定义鼻子和眼睛的线条和边缘的集合和方向。然后到了第五个阶段,它会计算出鼻子和眼睛的组合来定义一张脸。事实上,这就是模型如何被训练来分类人脸,通过阅读 haar-cascade 分类器了解更多。
这个过程就这样继续下去,这样网络就学会了对图像进行分类。在卷积层之间插入一个池层,对输出进行下采样并减少计算(基本上只记住重要的特征)。
每一步都有深度,因为同一个图像应用了多个内核。
Source: Aphex34 via Wikipedia (CC); Pooling occurs at Subsampling Layer and Repeats until Flattened
到了最后一层,一系列独特的、习得的过滤器就形成了。为了将这从空间输出转换为类预测,它被展平为矢量,并最终通过全连接层馈送。然后,基于训练数据,CNN 提供图像预测(从馈送到全连接层的输出向量中挑选一个类别)。然而,它不能提供图像位置。不要担心,这个以后会改进的。
CNN 的一些细节
请注意,在每一层,图像尺寸变小。在边缘处不能进行卷积,因为内核以输入图像的像素为中心,但是其边界(虚线)之外的值是未知的。为了解决这个问题,这些像素的亮度假定为零。这在前面显示的卷积图中很明显。
它被称为零填充,用于保持图像大小和空间信息。然而,一些算法不实现它,再次导致收缩。
如何编码 CNN 101
下面显示的是使用 Keras(构建在 Tensorflow 之上)实现的 CNN。
是的,真的很简单。
请注意,该程序遵循上面所示的 CNN 结构,通过应用 2D 卷积,然后是池化(pool_size 表示下采样的内核有多大),最后是展平层。然后,它使用全连接(Keras 称之为“密集”)层对输出进行分类。
model = Sequential()*#Apply 2D conv using 32, 3x3 kernels per image with dimensions 64x64x3 (RGB), then pooling layer, then flatten output*model.add(Conv2D(32, (3, 3), input_shape = (64, 64, 3), activation = 'relu'))
model.add(MaxPooling2D(pool_size = (2,2)))
model.add(Flatten())*#Use node-vector to act as input to fully-connected layer
#Expect 128 nodes in hidden layer, add dense layer*model.add(Dense(units=128, activation='relu'))*#Binary classification, output layer*model.add(Dense(units=1, activation='sigmoid'))
model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['accuracy'])
要了解更多关于神经网络的知识,可以搜索一下深蜥蜴和斯坦福大学的系列讲座。
图像各部分的分类器
这用于对图像的部分进行分类,也称为对象分割。在这一点上,我们非常接近许多现代计算机视觉算法背后的架构。
这个架构是一个全卷积网络,它提供图像预测和定位,这是典型的 CNN 无法做到的。
这些网络通过使用一种编码器-解码器方案来全程使用卷积。首先是编码器部分,它输出一个分类器向量。解码器利用这一点对展平向量进行上采样(通过去卷积)并预测像素的类别。输出将是掩膜或要素地图。
Source: LISA Lab (Copyright 2008–2010); Decoder Network Completes Pixelwise Categorisation
上采样对于重新获得图像的空间信息(分类像素的映射)是必要的。来自编码器网络的较浅层的信息用于寻找图像位置,较深层的信息用于分类。 FCNs 允许预测图像的部分,增加了更高的准确性和复杂性。获得图像遮罩被称为语义分割。
为什么物体检测是棘手的事情
必须对视频的每一帧进行分析以找出可能的类别,并且必须在预测的对象周围包裹一个边界框。典型地,滑动窗口用于寻找匹配的特征并识别图像的部分。但是用 CNN 做这个会花太多时间。
相反,我们得到了地区提案!目标是找到可能包含对象的“blobby”区域,然后搜索它们。这有许多实现方式,如下所示:
- 美国有线电视新闻网地区频道
- 快速 R-CNN
- 更快的 R-CNN
- 你只看一次(YOLO)
- 屏蔽 R-CNN
现在我们将讨论 R-CNN,因为其余的(除了 YOLO)都是建立在这个概念之上的。
一种有效的图像部分分类器
哈哈思科R-CNN效率不高。它们有点快,但仍有改进的空间。
然而他们的架构被改进为开发速度快、更快、、屏蔽算法的变体,所以他们派上了用场。
使用诸如选择性搜索的算法在图像中搜索斑点(感兴趣的区域)。然后将子区域扭曲(改变大小、倾斜或镜像)为固定大小,并对每个提议的区域应用 CNN,最后使用 SVM 对其进行分类。这解决了确定对象类别和位置的问题。
这是 FCNs 的替代架构。
一个问题是同一对象会出现多个边界框。非最大抑制是一种为每个区域设置置信度得分的算法。分数较低的区域被丢弃,然后使用 union (边界框之间的错误检查器)的交集来找到最准确的区域。
Source: Rosebrock, A. via Wikimedia; Intersection of Union Finds Best Bounding Box by Comparison
子区域必须被扭曲,因为它们可以是不同的大小。一旦感兴趣的区域被找到并分类,它就被包围在一个边界框内。
现在你完全是初学者了!
这篇文章是一堆不同主题的混合体,旨在给初学者一个开始编程的基本基础。经历这一切可能需要几个星期到几个月的时间,所以时间投入很少。
链接到更严格的材料已被放置在整个,我强烈建议通过他们工作。在一天结束时,设置 OpenCV、Keras 和它们所使用的算法是非常容易的。重要的是知道它们是如何工作的,以便最终改进它们或者选择正确的一个。
我是如何自学编码并获得数据科学职位的
原文:https://towardsdatascience.com/how-i-taught-myself-to-code-and-a-landed-data-science-role-b2b801bf7779?source=collection_archive---------12-----------------------
这篇文章讲述了我如何自学编码、统计、商业,并将这些知识转化为数据科学家的经历。这些问题大部分来自几个人直接在 LinkedIn 上发消息给我这篇文章。由于许多人有类似的问题,我决定在上面贴一篇文章来帮助其他有同样问题的人。
从你个人的为什么开始
我个人的原因是避免我不想要的东西,并围绕这个概念找到一种生活方式。我出身贫寒,父母是高中毕业生和低技能工人。金融危机期间,我们失去了家园,我也没有去顶尖的本科项目。我只是想避免因选择有限而带来的痛苦。
你自己的原因不必和我的一样。你可以通过其他各种方式成为数据科学家,例如渴望成为最好的,对人工智能的强烈好奇心,相信这是支持家庭的最佳方式,等等。关键是理性必须激励你。别人怎么看不重要,重要的是你怎么看。最重要的是,你相信它。
我之所以强调你个人对数据科学的信念和承诺,是因为这份工作可能非常困难。就我个人而言,有时我发现在商业环境中创造创新的解决方案是非常具有挑战性和令人讨厌的(例如,没有合适的人,没有合适的资源,没有来自管理层的支持,等等)。).在我早期,这种压力很大。随着我获得更多的经验,我已经学会享受这类问题。对于我解决的每一个难题,这都使我的技能比以前更上一层楼,而且这个解决方案通常在手边的问题之外有各种应用。这一成就促使我不断前进。
我的小咆哮的寓意是找到你可以相信的东西,这将是你在日常发展成为伟大的数据科学家的正常斗争中的指路明灯。现在来看问答的汇编。
制作我的代码
当你对技术或编程感兴趣的时候,你多大?
我第一次接触技术是在高中的时候,是以编码的形式。我有一个老师,他也是一名 IT 顾问。有趣的是,我只和他一起工作过,因为一次州编码竞赛给了前三名获胜者一次免费的旅行,去一家豪华的酒店参加全国竞赛。
我从来没有去过很多地方,我发现这个机会是一个看世界更多地方的机会。所以,我拿了。那是一场 C++编码比赛。我进来时以为老师会指导我如何改进 C++语言。可悲的是,事实并非如此。这更像是参加一场纸牌游戏比赛,让你自己想办法解决问题。除了 Kaggle 之外,您还可以学习其他内核和论坛。幸运的是,我以第三名的成绩勉强赢得了州比赛。
但是我赢的方式更有趣一点。基本上,我只知道非常基本的 C++命令。问题语句要求某种类型的程序需要一些条件语句和 for 循环。那时候,我一点都不知道那些东西。我所做的是看他们想要什么类型的输出和用户界面。我制作了一个非常基本的代码来回答他们的问题,但不是以他们想要的方式。基本上,我赌了一把,假设他们会问什么,这样代码就不会被破解。它得到了回报,我得到了一次免费旅行。当然,在国家舞台上,我失败得很惨,但当时我实现了我的目标。直到那时,我已经很久没有写代码了。我的“为什么”不够强大,无法长期持续下去。这只是一个短期的目的——免费旅行。我只是在读 MBA 期间,在研究生院重新开始学习编程。
是什么让你想学习如何编码?
除了计算我在 C++中的小任务,我真的从听到 quants(定量分析师的简称)的故事中获得了对编码的真正热情。对于那些不在金融领域的人来说,在数据科学家这个术语出现之前,定量分析师基本上就是专门研究金融的数据科学家。第一批著名的定量分析师实际上是前火箭科学家,他们想赚更多的钱,或者发现金融市场是一个需要解决的有趣问题。我了解到,最好的公司制造的人工智能交易模型在金融市场上表现出色(赚钱)。
由于生长在一个工人阶级家庭,我想也许在下一世,我可以在一些先进的科学领域获得博士学位,并将统计学、计算机科学(编码)和商业知识结合到一个量化职业中。然而,至少在某个地方尝试一下(统计、编码或商业)会很有趣,看看它是否能让我成为一名定量分析师。我知道,如果我采取任何行动,都会比什么都不做(100%没有机会)给我一个机会(至少是一个非常小的机会)。
你用什么样的学习方式自学编码,你在学习中遇到了什么挑战?
幸运的是,当我开始(再次)学习如何编码时,整个数据科学领域开始崛起。我拿起我能拿到的所有东西。数据科学在线订阅课程、经过测试的数据科学训练营试用版、MOOCs、书籍等。一开始,我完全迷失了。这非常令人沮丧。我很难理解每件事都做了什么,也很难运行基本的包。我唯一拥有的就是我没有放弃,尽管我一直都喜欢这样。让我坚持下去的是一个非常遥远的梦想,那就是有一天成为一名金融数据科学家,并建立一个人工智能交易模型。
积累商业知识和学习统计学
当我在学习编码的过程中给自己施加痛苦时,我意识到数据科学家了解统计和业务(或领域专业知识),这也可以在下图中看到[1]:
为了提高我的统计和商业技能,我做了几件事。在统计学方面,我实际上回顾了 Khan Academy 的一些主题,并做了一些应用统计学的有趣项目。这些有趣的兼职项目之一是与我的职业扑克玩家朋友合作。他们教我如何将理论统计概念应用到实际实践中,这在风险管理和金融预测方面有商业应用。当然,附带的激励福利还包括赢钱。
在商业方面,我在攻读 MBA 的同时,还从事了一些小型咨询工作。现在大多数人不需要读 MBA,但是,在我的特殊情况下,我认为这是获得商业咨询工作的必要条件。我有一个哲学本科学位,所以大多数招聘经理只是扔我的简历,直到我开始一个 MBA 项目。我记得过去招聘人员告诉我,由于我的哲学背景,我在商业上什么也做不了。就我个人而言,我认为这是错误的——你可以增加动力来提高自己的另一种方式。在主题业务中,每种类型的业务都有细微差别,但作为数据科学家,你可以增加的主要价值是找出如何做两件事情中的至少一件:为公司带来更多的钱或节省更多的钱。如果你能把你的数据科学技能应用到其中任何一个方面,你将会在商业上走得很远。
构建职业生涯
你是如何将你的数据科学技能转化为高薪职业的?
数据科学有趣的一点是,构成数据科学家的三个主要组成部分可以让他独自获得高薪职业。编程可以让你成为一名伟大的软件工程师(例如,科技公司可以支付高达 40 万美元以上)。统计学可以让你在所有的概率问题上占据优势(比如扑克玩家——非常规或者教授/顾问——常规)。成为一名优秀的商业分析师本身也是一条多样化的职业道路(例如,投资者、投资银行家、金融分析师等)。).我基本上在这三个领域都辗转过,直到我得到了一个集这三者于一身的角色——数据科学家。
就你的数据科学技能而言,你是通过什么途径获得一份 6 位数的工作的?与我在数据科学领域的同行相比,我无疑拥有一条有趣的职业道路。我不是某个决定转向数据科学的数学或科学天才。我只是选择了一个发展方向,并且每天尽我所能做到最好。所以,我不能直接进入数据科学的角色。我所做的是业务分析师路线,并将其转换为数据科学角色。在我的业务分析师咨询工作中,我比我的同行工作得多,最终获得了数据科学的机会。一旦我做到了,我的数据科学技能增长到一个重要的水平,在那里我找到了一份工资超过 6 位数的数据科学工作。
对于那些有兴趣自学数据科学的人,你会推荐他们采取哪些步骤?对于那些想以创造六位数为起点的人,你会给他们什么建议?我间接地讨论了别人可以做些什么来让自己成为六位数的角色。我一般意义上的建议是,真正找到一个你为什么要做数据科学的理由。实际上原因并不重要,重要的是它对你的影响。如果这个理由可以激励你,帮助你在发展成为数据科学家的各种挑战中前进,那么这个理由就是为你准备的。接下来是获取数据科学技能。所以,学 Python,SQL,Hadoop/Spark,统计学,还有一个专门的业务领域。了解代码和统计数据只会让你成为机器学习专家,但商业知识将启动一个利润丰厚的职业生涯,成为数据科学家。
结论
我从未想过我会成为一名数据科学家。我原以为我只是一名商业分析师,以后会成为一名投资者。通过持续的数据科学日常开发和附带项目,我实际上获得了被聘为数据科学家的必要技能。作为一个之前没有数据科学背景,在本科毕业后才开始工作的人,你也可以。真正的问题是,不管你面临什么样的困难或问题,你是否愿意日复一日地坚持自我发展的原则?
免责声明:本文陈述的所有内容均为我个人观点,不代表任何雇主。
[1] B. Poulson,数据科学基础:5 部分系列(2019 年),https://datalab.cc/foundations/toc
我如何向非技术专业的学生教授分析
原文:https://towardsdatascience.com/how-i-teach-analytics-to-non-technical-students-2db4a900f0cf?source=collection_archive---------32-----------------------
过去三年,我一直在 USF 大学给非技术专业的学生(主要是市场营销和金融专业的学生)教授商业分析。作为一名训练有素的工程师和一名数据科学家,在我的整个职业生涯中,我几乎总是与和我有相同思维和编码方式的其他工程师一起工作。在世界科技中心旧金山生活和教学,加上对技术人才的不断需求,我在分析领域培训和教授越来越多的非技术型、热情的年轻专业人士和学生。
然而,在教这些非技术学生的过程中——他们不习惯与技术打交道,也不习惯以结构化的分析思维方式思考——早期的日子往往充满了挣扎、呼救和觉悟的时刻。分析不仅仅是处理数字和数据,它还处理技术,从数据库、ide、数学库到代码。对于那些从未使用过此类技术,也没有实践过如何解决与我们在分析、数据科学和工程领域每天面临的问题类似的问题的人来说,这往往太难了。
商业分析日益增长的重要性
分析允许企业采取数据驱动的方法来实现他们的目标。通过利用技术、数据建模和统计,企业可以开发新的见解,帮助他们更好地开发或营销他们的产品(更好是通过增加销售或用户参与来衡量的)。
日益增长的趋势是,今天的大多数公司,无论大小,都在大力投资于他们的技术堆栈,以增强他们的分析能力——无论是产品(即数据科学家)还是销售/营销(即营销科学家)。多年来,我们做生意的方式已经发生了变化,因为技术产品本身,如 iPhone 应用程序,是许多企业的核心产品/服务。这允许实时监控和洞察,并实时提供营销和产品实验,以增加销售和参与,最终产生如此多的数据,以致只能使用传统上由工程师开发和使用的重型技术栈来挖掘洞察。
非技术专业的学生如何适应这个角色?
随着公司所有部门对技术技能的需求,总是需要有人不仅能以数据驱动的方式思考,还能分析性地操作和执行。我认为,非技术专业人士对业务有更好的理解,这通常需要对行业、竞争优势、高层战略和推动公司发展的策略有全面的了解。如果他们能挖掘所有的数据,他们将是所有雇主寻找的独角兽。
在向非技术专业的学生和专业人士教授分析学时,我发现三件事很重要
1。让事情变得简单
我认为平台不应该要求软件安装。作为一名雇主,你从来不需要甚至没有许可安装你自己的软件。您最后一次在工作时在笔记本电脑上安装数据库是什么时候?如果你想让非技术专业人员开始从事分析工作,那么能够提供所有的工具和数据,并通过网络浏览器访问它们是一个基本要求。
2。为营销和商业专业人士设计的特定内容
课程内容应以陶冶商科和市场营销专业学生为主。这听起来是显而易见的,但很少有,如果有的话,对学习分析感兴趣的商业和营销学生的课程。
另外,我从来不依赖课本。它太静态了,很少有互动的成分。那些有交互组件的项目通常需要你安装数据库和其他工具来进行实践。我尝试使用平台,其中使用的工具是常见的行业工具。像 Datacamp 和 Strata Scratch 这样的 SAAS 平台是为非技术营销/商业学生构建的,部署了业内常用的常见分析工具。
这很有意义,因为营销和商业分析专业人士对开发新的机器学习算法不感兴趣。他们可能对营销实验的设计和执行更感兴趣。
3.技术专长并不是擅长分析的必要条件,但技术思维是必要条件
你不需要了解很多分析或技术,但你需要改变你的心态。技术人员和非技术人员学习、分解问题、开发解决方案的心态是不同的。非技术专业人员通常很难处理和解决问题。大多数时候,我发现他们很纠结,因为(1)他们似乎无法在笔记中找到与手头问题完全匹配的例子,以及(2)他们似乎无法将问题分解成更小的可行部分,因此他们变得不知所措。问题就像拼图。大多数情况下,工程师和科学家不知道如何准确地解决问题或建立所需的模型,但通过研究和迭代问题和各种方法,他们通常能够建立一些实现他们目标的东西。你必须对不知道该做什么感到舒服,你必须对一路上的挣扎感到舒服。通过练习和强化来改变这种心态。技术人员也曾是新手,他们也曾为完全相同的问题而挣扎。
我是如何理解的:训练音频文件时需要考虑哪些特性?
原文:https://towardsdatascience.com/how-i-understood-what-features-to-consider-while-training-audio-files-eedfb6e9002b?source=collection_archive---------8-----------------------
Designed by Gstudioimagen — Freepik.com
简介
对于任何机器学习实验来说,首先需要收集数据。接下来的主要任务是将数据转换成特征,然后输入算法。这篇文章旨在简要介绍一些最重要的特性,这些特性可能是为音频分类任务建立模型所需要的。下面还展示了使用 Python 提取的一些特征。
一些主要的音频功能:
(1) MFCC(梅尔频率倒谱系数):
又名“最常考虑的系数”,MFCC 是一个你会在任何涉及音频文件的机器学习实验中看到的特征。
正如这篇文章中正确提到的,人类发出的任何声音都是由其声道的形状决定的(包括舌头、牙齿等)。如果这个形状能够被正确地确定,那么产生的任何声音都能够被准确地表现出来。语音信号的时间功率谱的包络代表声道,而 MFCC(它只不过是构成梅尔频率倒谱 ) 的系数)精确地代表了这个包络。
通常,MFCC 的前 13 个系数(较低的维度)被作为特征,因为它们代表光谱的包络。而被丢弃的更高维度表达了光谱细节。对于不同的音素,包络线足以表示差异,所以我们可以通过 MFCC 来识别音素。
Flowchart for obtaining MFCC coefficients
(考虑阅读这篇关于 MFCC 的文章以深入了解它。)
import librosa
y, sr = librosa.load(librosa.util.example_audio_file(), offset=30, duration=5)
print(librosa.feature.mfcc(y=y, sr=sr))
(2)过零率:
过零率是对给定时间间隔/帧中语音信号的幅度通过零值的次数的度量。这个特征在语音识别和音乐信息检索中被大量使用,是对打击乐声音进行分类的关键特征。它还广泛用于其他音频应用领域,如音乐流派分类、精彩片段检测、语音分析、音乐中的歌唱声音检测以及环境声音识别。区分浊音和清音的最简单方法是分析过零率。大量的过零点意味着没有主要的低频振荡。
import librosa
y, sr = librosa.load(librosa.util.example_audio_file())
print(librosa.feature.zero_crossing_rate(y))
(3)能量
语音信号的短时能量提供了反映幅度变化的便利表示,并且可以定义为
语音信号的短时能量反映了振幅的变化。在一个典型的语音信号中,我们可以看到它的某些特性会随着时间发生很大的变化。例如,我们可以观察到信号峰值幅度的显著变化和语音信号中有声区域内基频的显著变化。这些事实表明,简单的时域处理技术应该能够提供有用的信号特征信息,例如强度、激励模式、音调,甚至可能是声道参数,例如共振峰频率。
(4)光谱衰减
这是功率谱右偏量的一种度量。频谱滚降点是功率谱中 85%的功率处于较低频率的频段的分数。也就是说,滚降是 85%的累积频谱幅度集中在该频率以下。像质心一样,对于右偏光谱,它具有更高的值。
import librosa
S, phase = librosa.magphase(librosa.stft(y))
print(librosa.feature.spectral_rolloff(S=S, sr=sr))
(5)光谱通量
它由跨频率求和的频谱幅度矢量的帧间平方差给出,即
它提供了对局部光谱变化率的测量。光谱通量的高值指示光谱量值的突然变化,因此在第 r 帧处可能存在片段边界。
import librosa
y, sr = librosa.load(librosa.util.example_audio_file(), duration=10.0)
onset_env = librosa.onset.onset_strength(y=y, sr=sr)
print(onset_env)
(6)谱熵
在语音活动检测中,熵被用于检测语音的无声区和有声区。这一特征的区别特性使其在语音识别中得到应用。熵可用于捕捉分布的共振峰或峰值。共振峰及其位置被认为对语音跟踪很重要。因此,熵的峰值捕捉能力被用于语音识别。
(7)色度特征
在音乐中,术语 色度特征 或 色度图 与十二个不同的音高等级密切相关。基于色度的特征,也称为“音高类别简档”,是一种分析音乐的强大工具,这些音乐的音高可以有意义地分类(通常分为十二类),并且其调音接近于等度音阶。色度特征的一个主要属性是它们捕捉音乐的谐波和旋律特征,同时对音色和乐器的变化具有鲁棒性。下面列出了两个主要的色度特征:
(a) 色度向量:
频谱能量的 12 元素表示,其中面元表示西方类型音乐的 12 个相等调和音高类别(半音间距)。
(b) 色度偏差:
12 个色度系数的标准偏差。
import librosa
y, sr = librosa.load(librosa.util.example_audio_file())
print(librosa.feature.chroma_stft(y=y, sr=sr))
(9)音高
音高是一种听觉感受,其中听者主要根据他们对振动频率的感知,将乐音分配到音阶的相对位置。音高与频率密切相关,但两者并不等同。频率是一个客观的、科学的属性,可以测量。音高是每个人对声波的主观感知,无法直接测量。然而,这并不一定意味着大多数人不会同意哪个音符更高和更低。
import librosay, sr = librosa.load(librosa.util.example_audio_file())
pitches, magnitudes = librosa.piptrack(y=y, sr=sr)
print(pitches)
“那都是乡亲们!”,音频分类的一些最常用功能介绍到此结束。
一个神经网络如何发现我游戏的漏洞?
原文:https://towardsdatascience.com/how-i-used-ai-to-accidentally-find-a-loophole-in-my-game-dd56f40c8553?source=collection_archive---------20-----------------------
神经进化导论
进化出一个 AI 来玩游戏,它却选择了嘲讽!
Photo by Adam Muise on Unsplash
在你研究一个人工智能如何操控我的游戏之前,让我们先熟悉一下【神经进化】的基础知识,以理解为什么会发生这种情况。
神经进化
1 主要涉及 2 件事。遗传算法
2。神经网络
遗传算法
这种算法背后的概念受到达尔文进化论的启发。
这些是遗传算法的主要阶段…
- 生成一个随机群体
- 计算群体中每个成员的适应度
- 执行自然选择
- 与自然选择的成员进行交叉
- 作为杂交的结果,对后代随机应用突变
- 新的种群被创建,丢弃旧的一代并转到 步骤 2
看,你可能会从人类或其他生物的现实世界进化中得到这种直觉,但毕竟要记住,遗传算法基本上是一种搜索算法。
考虑这个图,假设你想搜索一个(x,y)点,使得‘z’值最大。最初,该图将是完全未被探索的,所以除了初始点之外,你不能真正确定图中任何其他点的‘z’值。
我们可以应用许多搜索算法来帮我们做到这一点,但是让我们看看遗传算法是如何做到的。
步骤:随机总体
首先,在 GA(遗传算法)中,我们将从几个随机点开始,或者我们可以说是来自解空间的随机猜测。例如,在上图中,我们看到‘x’值可以是从-3 到+3 的任何值,同样的范围也适用于‘y’。
所以我们的随机猜测可能看起来像…
如果我们就 GA 而言,那就是随机人口 一代。我们基本上生成了一个(x,y)对的随机群体,每个都有一些‘z’值。这些‘x’值和‘y’值可以认为是基因。
步骤:适合度计算
现在是适合度计算,这是因为我们想要判断哪个随机猜测比其他的更好,我们需要一些具体的比较。
所以我们必须定义一个适应度函数,它将表示随机猜测的适应度。在这个例子中,非常简单,因为我们需要具有最大“z”值的(x,y)对,所以对于一些随机猜测,它们的“z”值可以作为它们的适合度分数。
适应度(x,y) = z 值
因此,现在考虑适应度函数,我们查找每个点的 z 值,并得到它们之间的关系,如下所示。
健身( -2.2,2.3 ) >健身( 0.1,-2.4 ) >健身( 2.0,1.4 ) >健身( 1.0,2.0 )
步骤:自然选择
现在我们执行自然选择,也就是随机选取随机猜测中的一个,但是随机选取是基于概率分布的。这意味着具有更高适应值的那些将更有可能被自然选择。体能非常低的可能不会被选中。
“适者生存”——查尔斯·达尔文
比如说 pairs (-2.2,2.3) & (0.1,-2.4) 得到选择。
步骤:交叉
下一步是杂交或者简单地说,这两个自然选择对的基因混合在一起,形成一个新的杂交对,也就是后代!
( Crossover )
上图说明了本例中交叉是如何发生的。它混合父母双方的基因,形成一个单一的后代。我们多次重复自然选择,进行杂交来产生后代。
步骤:突变
现在,在这些新的后代身上,我们进行‘突变’,这意味着随机改变它的基因值。虽然突变的发生取决于突变率,但是如果突变率为 100%,那么所有产生的后代都会发生突变,如果突变率为 5%,那么只有 5%的后代会发生突变。
( Mutation )
上图显示了‘y’值如何随机突变为-2.3。变异是为了保持种群的多样性,因为如果种群保持不变,那么我们就不能尽可能多地探索图表,结果,我们就不会到达最高点。
现在,在应用突变后,我们有了一个全新的后代群体,这可能比上一代群体更好,或者我们可以说是上一代,因为我们倾向于从一个群体中选择更好的成员(通过自然选择),然后混合他们的基因(通过杂交)。
在这一点上,我们将丢弃旧的代,并开始在这个新的代上从适应性计算再次执行相同的步骤。
(that’s the rough big picture of GA)
随着这个循环的继续,一段时间后,所有成员将收敛到同一点,这将是解决方案空间的最高点,这是我们的目标,这是当这个算法停止。
👇关于这个话题的推荐视频👇
遗传算法:简介|编码训练
学习:遗传算法|麻省理工学院开放式课程
神经网络
Biological Neuron (Image source: Wikipedia)
神经网络的想法来源于人脑本身。这个概念解释了我们如何学习东西,基于我们可以应用同样的概念让计算机学习东西!
人工神经网络是以生物神经网络为基础的,虽然它们不完全相同,但人工神经网络可以看作是实际生物神经网络的抽象。
神经元
神经网络是由一堆相互连接的神经元组成的。因此,在研究神经网络之前,让我们先来看看我们在人工神经网络中使用的单个“神经元”。我们将这种人工神经元命名为感知器,因为它们的实现略有不同,但为了保持生物学上的类比,我们还是继续称它为神经元吧。
( Artifical neuron )
把这个神经元想象成一个函数,它接受一堆输入(实数)并给出一个输出。所以现在的问题是这个函数对它的输入做了什么来产生输出。
你可以在上面的神经元图中看到,每个输入值都通过一条边传递给神经元,这条边有一个“权重”与之关联。
即,如图所示,当输入“x1”通过权重为“w1”的边到达神经元时,神经元的值变为 x1 * w1。
( Operations happening inside a neuron )
然后,将从不同输入边缘接收的所有此类值相加,然后还有一个名为‘bias’的值与神经元相关联,从该总和中减去该值,然后将该结果传递给激活函数。
这个激活功能是什么?这个有很多选项,假设是一个 sigmoid 函数。
Sigmoid function (Image source: Wikipedia)
该函数接受任何实数,并将其压缩到 0 到 1 之间。
所以,这个激活函数的输出就是神经元的输出。该偏差用于在进入激活功能之前设置阈值。
好吧,一个神经元没问题,但是有什么用呢?
例如,你可以用一个神经元实现与门!
由于输出是由 sigmoid 函数给出的值,它的范围可以从 0 到 1。所以,如果我们得到 输出<0.5,我们就认为 结果= 0 同样如果 输出> 0.5 ,我们就认为 结果= 1
设 w1 = 2.0 , w2 = 2.0 和偏差= 3.0
现在让我们用所有的输入来测试一下
如果 x = 0,y = 0输出
= sigmoid(x * w1+y * w2-bias)
= sigmoid(0 * 2+0 * 2-3)
= sigmoid(-3)
= 0.04743输出< 0.5,结果= 0
如果 x = 0,y = 1
输出
= sigmoid(x * w1+y * w2-bias)
= sigmoid(0 * 2+1 * 2-3)
= sigmoid(-1)
= 0.26894输出< 0.5,结果= 0
如果 x = 1,y = 0
输出
= sigmoid(x * w1+y * w2-bias)
= sigmoid(1 * 2+0 * 2-3.5)
= sigmoid(-1)
= 0.26894输出< 0.5,结果= 0
如果 x = 1,y = 1输出
= sigmoid(x * w1+y * w2-bias)
= sigmoid(1 * 2+1 * 2-3.5)
= sigmoid(1.0)
= 0.73106输出> 0.5,结果= 1
但是我们是怎么发现这样的权重和偏差的呢?这个‘设置权重和偏差’部分就是学习逻辑的全部所在。在建立输入和输出模式之后,我们需要做的就是为这些权重和偏差找到合适的值!基本上,学习就是这么简单!我们将很快回到学习部分。
现在,你可能会觉得,“gate 很无聊…我们不能做一些更酷的东西吗?”*
当然!我们当然会,但在此之前让我告诉你,单个神经元不足以解决所有类型的问题,因为它们只能解决线性可分的问题。*
非正式地说,你需要更多的神经元来做酷的事情!
多层人工神经网络
多层安来救援了!
它有 3 种层次:
- 输入层
- 隐蔽层
- 输出层
( Multilayer artificial neural network )
可以有多个隐藏层,这取决于用例。每层中神经元的数量也取决于用例。每个神经元都连接到下一层的所有神经元(尽管它们可以部分连接)。每个神经元都有一个偏差值,每个连接都有与之相关的权重。从输入到输出逐层处理的过程称为前馈。
为了理解它,把整个神经网络想象成一个函数,它可以接受输入并返回输出。
例如,你可以设计人工神经网络,将矩形的边作为输入,矩形的面积作为输出,但我们可以通过简单的逻辑自己完成。
但是我们使用神经网络推导一个直截了当的逻辑并不那么容易。考虑编写一个计算机程序的问题,该程序拍摄手写数字的照片并猜测它是什么数字。在这种情况下,输入神经元将是所有像素,输出将是所有数字的 10 个神经元,您可以试验隐藏层。
Handwritten digit classifier ANN’s feedforward (Source: 3blue1brown)
好的,这个输入和输出部分很好,但是权重和偏差是怎么回事?这就是使这些输出成为可能的东西,没有正确的权重和偏差,神经网络只是一个愚蠢的东西!
ANN with random weights and biases (Source: 3blue1brown)
那么,神经网络是如何学习的呢?
对此有几种方法。其中之一是用随机权重初始化人工神经网络,并用一些带标签的数据集训练它,根据误差,我们通过反向传播不断调整它的权重和偏差,反向传播使用一种称为梯度下降的概念。这种学习被称为监督学习。
我们也可以用强化学习。在这里,代理开始在其随机初始化的状态下执行,并根据其动作的结果不断调整。我们可以应用遗传算法来实现这种行为,让我们在下一节看到这一点。
👇关于这个话题的推荐视频👇
但是什么是神经网络呢?| 3 蓝色 1 棕色
神经进化
使用遗传算法进化神经网络是“神经进化”。话虽如此,“神经进化”这个术语还是有道理的,对吧?
神经网络+进化=神经进化
首先,我们确定问题陈述并设计合适的神经网络架构。但是为了让它正确地工作,我们需要为它找到正确的权重和偏好,所以现在 GA 就出现了。
我们为它们的连接生成多个初始化了随机权重的人工神经网络,从而得到人工神经网络的随机群体。所以,这里所有这些随机产生的权重会导致一些愚蠢的人工神经网络,但是因为它是随机的,一些人工神经网络会不那么愚蠢,一些会更愚蠢。我们知道这个神经网络应该做什么,所以通过它的性能,我们可以计算它的适应度。在这里,权重和偏差就是人工神经网络的基因。基于适应值和概率分布,自然选择将会发生。对于交叉,自然选择的人工神经网络的权重和偏差将被混合以形成混合人工神经网络。在突变期间,一些权重和偏差会发生轻微的随机变化。通过自然选择、交叉和变异,随着新一代的发展,人工神经网络开始在适应度函数的指导下进行改进。
(Basic neuroevolution algorithm)
尽管它仍然是一个搜索算法。早些时候,当我们试图使用 GA 找到最佳的 (x,y) 点时,我们实际上是在探索 X 轴和 Y 轴的二维空间。类似地,这里假设人工神经网络的每个连接的权重和每个神经元的偏差有一个维度,很难直观地想象,但基本上我们正在探索所有权重&偏差的维度空间,并试图在该空间中找到最佳权重和偏差向量。
当我们保持这个循环运行时,最终人工神经网络应该按照我们预期的方式运行。
👇关于这个话题的推荐视频👇 神经进化导论|编码序列
神经网络的恶作剧
我受到了这个Flappy Bird with neuro evolution编码挑战的启发,他们使用神经进化让计算机学会自己玩游戏。查看他们项目的现场版。
所以,我想在其他游戏上做一个类似的项目,所以我开始寻找一个简单的游戏,在那里我可以应用这个算法。
经过一番研究,我决定制作自己的游戏😛然后用这个算法。
这个项目有两个部分:
- 设计并实现游戏
- 对其应用神经进化算法
现在,设计游戏…长话短说,我想出了这个游戏叫做‘逃跑跳跃’(一个朋友帮我起的名字🙃)
(Me playing the escape jump game)
在这里,你用箭头键控制那个红色球,你必须在它挤压你之前通过管道(黑条)之间的空间逃脱或跳跃,在这一点上两个管道将关闭在开始时是未知的,所以当它们出现时,你必须迅速做出判断。如果你在台式机上,你现在就可以从这个链接开始尝试这个游戏。试试看能打多少分,以后看 AI 自己打多少分!**
好吧,我知道这个游戏看起来不太好,尽管我认为它对于这个实验来说已经足够好了,不是吗?这不太容易也不太难,我认为这是一场公平的比赛。
但是生活从来没有像我感觉的那样😅然而我还是跟着它走,想看看它会走向何方。
(ANN architecture I used)
对于神经进化,我们用多个球来初始化游戏,每个球都有自己的人工神经网络(如上图所示),人工神经网络为它们做出决定。人工神经网络在每一帧获取输入,并根据人工神经网络的输出采取行动。
(Inputs and Outputs of ANN in code)
上面的函数来自于“球”类。它显示了它如何将输入传递给人工神经网络,以及它如何使用人工神经网络的输出来决定是跳跃还是移动。
我们让所有的球在同一个游戏中一起玩。球在游戏中存活的秒数可以被认为是它们的适合度。当球被挤在管子之间时就会死掉。当所有的球都死了,我们会有每个球的适应值,在此基础上我们可以执行自然选择、交叉、变异,然后新的一代出现。**
(Initiating neuroevolution algorithm)
所以,这就是它看起来的样子,现在如果你已经看到那只 flappy bird 是如何使用这种算法来学习自己玩游戏的,你就可以想象这个游戏应该如何进行了。它应该已经学会像我们平常一样玩耍,类似于我在第一个动画中所扮演的角色。
所以,我运行了几代,对它对游戏的影响感到惊讶,感觉就像电脑在取笑我的游戏😂
Here’s what it learned after a few generations (animation played at 4x speed)
于是,这个算法找到了一个可以每隔一段时间就不停跳跃,打败游戏的地方!哇!虽然最初,我有点难过意识到我的游戏太容易玩了,然后我意识到一个人工智能告诉我,我意识到我只是不小心用人工智能找到了一个游戏漏洞,这样感觉更好。**
不过,我从未修补过那个漏洞😜,可能我就这样保存代码吧。
就是这样!
如果你想看看这个模拟并玩玩它,检查一下这个
如果你想看看这个代码,这里有一个到它的 GitHub 库的链接
我如何使用机器学习来检测手机上的聊天截图
原文:https://towardsdatascience.com/how-i-used-machine-learning-to-detect-chat-screenshots-on-my-phone-a46d875b07af?source=collection_archive---------10-----------------------
Image from Unsplash
有些时候,我们不是告诉朋友我们在某个消息应用程序上的聊天,而是把那次聊天的截图发给他们。如果你发送或接收了大量的截图,那么最终你手机的大部分内存会被封锁。我就是这种情况。在保证重要图像安全的同时找到并删除这些截图是一项极其耗时的任务。然后一个简单的(假设对 ML 有一点了解)想法出现在我的脑海里…
想法
我意识到从普通图像中检测聊天截图的任务可以表述为一个经典的二值图像分类问题!我们可以使用卷积神经网络(CNN)来完成这项工作。CNN 的输入层将是一个图像,输出层将只包含一个神经元,告诉我们输入图像是正常图像还是聊天截图。在接下来的章节中,我将介绍构建模型的所有细节。
数据收集
在机器学习中,一切从数据开始。在这个分类问题中,我们有两类:【聊天】和【不聊天】。第一个表示聊天截图,另一个表示普通图片。所以我收集了我和朋友们在不同消息应用上聊天的截图,比如 WhatsApp,Messenger,Instagram 等等。第二节课,我从手机和互联网上收集了一些人物、地点、风景的随机图片。总共我拍了 660 张 图片(每班 330 张 )。请注意,对于许多更难的问题来说,这些数据量是不够的。
列车测试分离
我用 80% 的数据进行训练,剩下的用于测试。为了能够在 Keras 中使用 flow_from_directory 函数,我像这样组织数据…
Folder tree of data
构建模型
每个 CNN 由两个主要部分组成:卷积基和全连接网络。在卷积库中,我使用了两个卷积块,每个包含 32 个 滤波器。内核大小为3 * 3。第一个卷积层的输入尺寸为 64643 (大小为 64 px64 px* 的 RGB 图像)。每个卷积块后面是一个大小为 22* 的 max_pooling 层。Relu 激活功能用于卷积层。卷积模块的输出被展平为一个向量,以将其传递给全连接网络。隐藏层由 128 个 神经元组成。该层的激活功能再次被 Relu。输出层(即最后一层)只包含一个告诉我们结果的神经元。由于这是一个二进制分类问题,我在这一层使用了 sigmoid 函数,该函数输出一个在 0 到 1 之间的数字( p ),表示输入图像属于“聊天”类别的概率(如果 p≤0.5 ,则“聊天”否则“不聊天”)。下面是实现…**
The architecture of the model
输入数据
由于数据是以上面提到的特定方式组织的,现在我们可以使用 Keras 的 ImageDataGenerator 类和 flow_from_directory 方法来扩充并将其提供给模型。首先,创建一个 ImageDataGenerator 对象。在这个对象的帮助下,我使用了缩放,剪切,翻转变换来增加数据。图像应通过系数 1/255.0 进行重新缩放,以标准化像素值。现在,目录路径、class_mode 和 target_size 作为 flow_from_directory 方法的参数传递,这有助于将数据提供给模型。我们必须将这个过程进行两次(一次用于训练数据,另一次用于测试数据)。这里需要记住的一件重要事情是,只有训练数据需要扩充,而不是测试数据。这是关于这个的代码…
培养
现在到了模型学习的部分。这里我们需要一个优化器,因为学习只不过是通过更新模型的权重和偏差来优化成本函数。在这种情况下,我选择了 Adam optimizer 。成本函数是二元交叉熵(因为这是二元分类)。Keras 提供了一个名为 fit_generator 的函数,可以用来运行训练。在这里,我们还可以设置历元数、每历元步数和验证步数。由于数据相对较少,因此我使用了 steps_per_epoch =训练样本数和 validation_steps =测试样本数。
结果
仅经过 5 个历元后,模型达到了99%的训练准确率和98%的测试准确率。一旦我们保存了模型,我们就可以多次使用它。为了能够使用该模型预测新图像,我们必须将图像整形为 64643** 并对像素进行归一化。这个脚本为我们做了这项工作。以下是一些预测示例…**
Images from the author’s collection
在这里找到完整的代码。
如果你真的很兴奋
要使用这个模型来分类手机上一个文件夹的所有图像,你只需要遍历这个文件夹,一次传递一个图像给这个模型。类似这样的…
**import glob
for img_file in glob.iglob(“dir_name/*”):
new_image = load_image(img_file)
pred = classifier.predict(new_image)
if pred<.5 : print(“chat”)
else : print(“not chat”)**
还好奇?看一个我最近做的视频…
我希望你喜欢阅读。下次见…学习愉快!
我如何使用统计数据来改善我的都柏林自行车运输
原文:https://towardsdatascience.com/how-i-used-machine-learning-to-improve-my-dublin-bikes-transit-b6bdc7c2b5cb?source=collection_archive---------34-----------------------
作为都柏林自行车的用户,我很高兴地发现实时自行车数据可以通过爱尔兰国家开放数据项目免费在线获取。不仅如此,一个用户已经收集了几个月的数据,在网上分享了这些数据。都柏林自行车是环游城市的绝佳方式,但像许多城市自行车计划一样,它们经常面临在满站/空站长时间等待的挑战。在繁忙的商业区工作,如果你不走运的话,你会发现自己等了 10 分钟甚至更久。
我决定更深入地研究这些数据,看看我能否回答突然出现在我面前的 3 个特定问题。
- 我的轶事经验与数据相符吗?
- 如果是,这些使用模式的趋势有多强?可以用统计学建模吗?
- 我如何利用这些数据来改善我(和其他人)的用户体验?
但是在我开始之前,让我介绍一下我一直在处理的数据(如果你不喜欢,可以跳过这一段)。Dublin Bikes API 返回城市中每个车站的可用自行车的当前数量。在 6 个月的时间里,每 2 分钟收集并存储一次这些数据,同时还有一个单独的 API 调用来收集同步的天气信息。此外,还有一个静态文件,包含每个站点的位置和容量。与大多数数据集一样,通常的疑点(缺失数据、数据格式等)也存在一些挑战,因此在预处理之后,我得到了连续 36 天近乎完美的都柏林自行车数据。我们可以从这些数据中看到一个典型的工作日,并检查一天中每个车站的需求是如何变化的。
Visualisation of how full each bike station is across a typical weekday. Dublin locals might notice the Heuston train station nodes filling up very quickly in the evening as people cycle to get the train home.
这样一来,让我们看看能否依次解开我的 3 个问题。
我的轶事经验与数据相符吗?
我对都柏林自行车的体验相当不错。它们为市内短途旅行提供了快捷、方便的方法。然而,我偶尔有过这样的经历:在傍晚六点钟,在雨中站在一个空的自行车站,只希望有人来把自行车放下。问题是,每个人似乎都在做同样的旅行:早上,人们从郊区进入市中心,而在晚上,情况正好相反。上面的视觉化似乎同意这一点,但是,为了验证,我决定画出在整个 36 天的每个时间点使用的自行车数量。结果让我有些吃惊!不仅早上/晚上的峰值清晰,而且在工作日之间也非常一致。
Number of bikes being used across the entire city over all 36 days
早高峰出现在 9 点之前,而且似乎总是比晚高峰稍忙一些。周二是一周中最忙的一天,而周五晚上的需求往往较少(大概是因为人们喜欢在周末去喝一杯,而不是赶回家)。我们还可以观察到第三个较小的峰值出现在中午,它与午餐时间密切相关。数据清楚地证实了我对该方案的体验。
这些使用模式的趋势有多强?可以用统计学建模吗?
根据我们在之前的图中已经观察到的模式来判断,这些数据看起来是时间序列建模的理想候选。从用户的角度来看,使用中的自行车数量很有趣,但知道可用自行车的数量更有用,所以我决定将它建模为因变量。
自回归综合移动平均(ARIMA)是时间序列数据建模的一种较为成熟的方法,对于这个问题很有意义。此外,有一个明显的每周季节性需要处理,我想考虑到天气和假期的外生变量。因此,我用 SARIMAX 模型来拟合数据,它表现得相当好。当我从训练集的末尾推断模型预测时,它们与测试集的基本事实非常接近。
A snapshot of the performance of my SARIMAX model predicting the number of available bikes across the city in the coming days
平均绝对百分比误差(MAPE)仅为 2.22,表明该模型表现良好,预测值与真实值的平均差异仅为 2%左右。可以得出这样的结论:城市中自行车的使用可以被非常准确地建模,这为在现实世界的应用中使用这些数据提供了一个很好的机会。
我如何利用这些数据来改善我(和其他人)的用户体验?
基于到目前为止我所讨论的一切,我很高兴看到人们如何使用这些数据来改善他们自己的用户体验。对我来说特别有用的一个想法是实时估计离我最近的车站的等待时间。我决定制作一个简单的原型应用程序(点击这里查看 python 脚本),它具有以下功能:
- 通过公开可用的 API 获取当前都柏林自行车实时数据。
- 将等待时间建模为指数分布,并基于历史数据,估计自行车到达城市中每个空车站的等待时间。
- 调用谷歌距离矩阵 API 来计算从我现在的位置到 100 多个自行车站的步行距离。
- 结合到每个车站的步行距离和在同一个车站的预期等待时间,来估计我跳上实际自行车的总时间。
- 最后,再调用两次 google API 来获取从我当前位置到最近的自行车的方向,并将其作为输出。
当我今天晚上运行脚本时,我的当前位置离我工作的地方很近,它给我提供了到汉诺威码头的步行方向,步行不到 4 分钟,并告诉我在下一辆自行车可用之前,我有 1 分钟的等待时间。
Directions from my current location to nearest available bike in terms of walking time combined with my expected waiting time at the station
事实上,本森街是离我最近的车站,但由于剧本考虑了自行车到达的预期等待时间,所以它把我送到了汉诺威码头,预计那里会更快有自行车可用。那很方便!
My nearest bike stations ordered by which I can walk to and get a bike at soonest
感谢阅读!我很高兴听到任何反馈,因为还有很多可以用这些数据做的事情。关于这篇文章背后我的分析的更多技术细节,请查看 Github 上的。
我如何使用 Python 和开放数据来构建爱丁堡啤酒花园的交互式地图
原文:https://towardsdatascience.com/how-i-used-python-and-open-data-to-build-an-interactive-map-of-edinburghs-beer-gardens-cad2f607e57e?source=collection_archive---------28-----------------------
Summertime — Photo by Tomasz Rynkiewicz on Unsplash
随着夏天终于到来,我想在我的家乡爱丁堡找到一个在户外享受冰镇饮料(含酒精或不含酒精)的好地方。因此,我将一个关于椅子和桌子许可的开放数据集与一些地理编码结合起来,创建了一个爱丁堡户外座位的交互式地图。
背景和项目描述
在过去的几年里,英国政府机构一直致力于开源他们的数据,爱丁堡市议会也不例外。在https://edinburgphopendata . info,你可以找到一个包含公共生活许多方面信息的数据集列表(尽管有些文件确实需要更新)。例如,这个页面包含 2014 年桌椅许可证的详细信息。幸运的是,在这里可以找到最新版本。请注意,虽然这两个文件的文件结构是相同的,但是文件头是不同的,所以如果您想查看历史数据,您需要相应地修改下面的代码。该文件包含允许摆放椅子的场所的名称和地址以及一些附加信息。该文件构成了本项目的基础,分为四个部分:
- 获取并加载许可文件
- 使用 open street map API 获取每个机构的纬度和经度以及服务地址类别
- 清理并装箱服务地址类别
- 用叶子在地图上标出经营场所
事不宜迟,我们开始吧。完整的笔记本可以在我的 GitHub 上找到。
步骤 0:设置
首先,我们导入库。
import pandas as pd
import requests
import wgetimport folium
from folium.plugins import MarkerCluster
步骤 1:获取数据
我们使用 wget 下载文件,并将其读入熊猫数据框。确保设置编码,因为文件包含特殊字符(列表中有很多咖啡馆)。
filename = wget.download("http://www.edinburgh.gov.uk/download/downloads/id/11854/tables_and_chairs_permits.csv")df0 = pd.read_csv(filename, encoding = "ISO-8859-1")
df0.head()
Premises with Table and Chair Permits in Edinburgh
快速浏览一下数据就会发现数据中有几处重复。这主要是由于多个许可的开始和结束日期不同。一种很好的清理方式是按日期过滤,但是坦白地说,我现在不太在乎,所以我只保留服务地址和名称,去掉重复的。(注意:该文件还包含关于表区域的信息,我可能会在将来的某个时候再次访问它)。删除重复项后,我们只剩下 389 行地址和房屋名称。
# dropping duplicate entries
df1 = df0.loc[:, ['Premises Name', 'Premises Address']]
df1 = df1.drop_duplicates()# in 2012: 280
print(df1.shape[0])389
顺便说一句:2014 年夏天,只有 280 个场所有桌椅许可证。露天文化确实正在起飞,这是证明它的数据:)
步骤 2:获取每个前提的纬度和经度
如果我们想在地图上可视化前提,地址是不够的,我们需要 GPS 坐标。有不同的 API,允许您查询地址并将返回纬度和经度(这个过程称为地理编码)。一种可能是使用谷歌地图 API ,但它带有一些警告。 OpenStreetMap API 提供了相同的功能,但是可以免费使用,而且结果对我的目的来说足够好了。
我们使用 Pandas map 函数来获取每一行的 API 响应。查询完 API 后,我们删除所有没有得到响应的行。再说一次,我不太担心我失去的几个前提(大约 20 个),还有很多。
查看响应中的 JSON 字段,我们发现除了坐标之外,API 还返回一个名为“type”的字段,其中包含该地址的房屋类型。我将这些信息与坐标一起添加到数据框中。
# extract relevant fields from API response (json format)
df2['lat'] = df2['json'].map(lambda x: x[0]['lat'])
df2['lon'] = df2['json'].map(lambda x: x[0]['lon'])
df2['type'] = df2['json'].map(lambda x: x[0]['type'])
最常见的场所类型是咖啡馆、酒吧、餐馆、第三产业和住宅:
df2.type.value_counts()[:5]cafe 84
pub 69
restaurant 66
tertiary 33
house 27
Name: type, dtype: int64
步骤 3:分配服务地址类别
我最感兴趣的是区分两种类型的场所:一种是卖咖啡的,更可能在白天营业(如咖啡店和面包店),另一种是卖啤酒的,更可能在晚上营业(如酒吧和餐馆)。因此,我想把我的前提分为三类:
- 第一类:日间场所(咖啡店、面包店、熟食店、冰激凌店)
- 第二类:酒吧、餐馆、快餐店和酒吧
- 第 3 类:其他一切
为此,我有两个信息来源:由 OpenStreetMap 返回的场所名称和类型。查看数据,我们发现类型是一个很好的第一指标,但许多地方的标签不正确或根本没有。因此,我采用了两步方法:I)根据 OpenStreetMap 类型分配类别 ii)使用其名称清理数据,此步骤覆盖了步骤 I)。为了清理数据,如果服务地址名称包含某些关键元素(如咖啡店的“cafe”、“coffee”或类似元素,以及餐馆和酒吧的“restaurant”、“inn”或类似元素),我决定否决 OpenStreetMap 分类。例如,这将安达卢西亚咖啡馆错误地归类为咖啡店,但在大多数情况下效果还不错。特别是,它似乎基本上保持了分类为咖啡店的模式,这些地方可能在白天营业,所以它符合我的目的。当然,对于少于 400 个条目,可以手动浏览列表,并为每个条目分配正确的类别。然而,我对创建一个过程感兴趣,它可以很容易地转移到其他地方,因此专门为爱丁堡的风景量身定制的人工干预是不合适的。
步骤 3a:根据 OpenStreetMap 类型分配服务地址类别
步骤 3b:根据服务地址名称覆盖类别
快速检查表明,重新分配似乎是合理的:
# show some differences between classification by name
# and by type returned by the API
df2.loc[(df2.is_coffeeshop) & (df2.type != 'cafe'), ['Premises Name', 'type']].head(10)
我为标记为餐馆或咖啡店的场所重新分配了类别。如果服务地址被标记为两者,则咖啡店类别优先:
# reset category if flagged as restaurant or coffee-shop through name
df2.loc[df2.is_restaurant, 'category'] = 2
df2.loc[df2.is_coffeeshop, 'category'] = 1
第四步:视觉化
最后,我们使用 Python 的 lyum 包将结果可视化为地图上的标记。如果在同一区域中有太多的符号,将单个点添加到标记群集允许我们将符号汇总成组。为每个类别创建单独的簇允许我们使用 LayerControl 选项来单独切换每个类别。我们使用“fa”前缀来使用字体-awesome(而不是标准的 glyphicon)符号。由于 follow 地图本身不在介质上显示,下图显示了地图的静态版本。可以看这里的互动地图。
A static version of the beer garden map — Find the dynamic version in the original post here
补充步骤 5:将地图保存到 png
如果不能在这里嵌入地图的动态版本,我至少想在这篇文章中嵌入一个静态版本。我发现最好的方法(不仅仅是手动截图)是以 HTML 格式保存地图,然后使用 Selenium 保存 HTML 的截图。下面展示了如何做到这一点(硒部分归功于这篇 stackoverflow 帖子)。
注意:为了让它工作,你需要安装 geckodriver。从这里下载文件,放入/usr/bin/local(对于 Linux 机器)。
摘要
在这篇文章中,我们从爱丁堡委员会下载了一个包含桌椅许可的开放数据集。然后,我们使用 Open Street Map API 根据地址获取房屋的类型和 GPS 位置。在根据场所名称进行了一些额外的数据清理之后,我们将场所分成了“咖啡店”、“酒吧/餐馆”和“其他”三个类别,并将其绘制在一个交互式地图上,我们以 HTML 格式保存了该地图。
结论
我们现在有一个工作的啤酒花园和爱丁堡的露天咖啡店地图,可以坐在外面喝着美味的冰咖啡或冰啤酒享受夏天。我已经利用了它,这是我在地图上的一个前提下享受下班后的饮料- Prost!😃
原载于https://walken ho . github . io。
我是如何使用 Python 和 R 来分析和预测医疗预约的!
原文:https://towardsdatascience.com/how-i-used-python-and-r-to-analyze-and-predict-medical-appointment-show-ups-cd290cd3fad0?source=collection_archive---------12-----------------------
一个 R 和 Python 共存的世界
Photo by NEW DATA SERVICES on Unsplash
在过去的几年里,我已经熟悉了 Python,我真的很欣赏我可以用它来做的数据科学过程的广度。我发现 Python 使用起来非常简单,而且有了今天可用的许多库,我几乎可以做任何事情,从 web 抓取到开发深度学习模型。我从 Python 开始,因为我认识的每个人都在使用它,他们说这是正确的选择。
然而,我最近开始使用 R,因为我的一个项目需要使用ggplot
和leaflet
来开发交互式可视化。我的方法很简单——实用而非理论。所以,我开始学习一门关于 R 的课程,我真的很想理解 R 是什么,并且开始摆弄那个项目已经存在的代码。我喜欢它!我们也可以用 R 做很多事情,它对于统计来说非常有用,因为它非常简单,而且它有各种各样的内置函数。
所以,我开始思考,如果我能同时使用 Python 和 R 来创建可行的解决方案会怎么样。在本文中,我将首先讨论 R 和 Python,以及这些天的趋势如何,然后我如何使用这两种语言来预测人们是否会去赴约,准确率为 88%。在完成自己的代码后,我还参考了一些在线 Kaggle 内核,发现了一些非常有用的见解。
下面提供了该存储库:
[## kb22/医疗预约失约预测
此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…
github.com](https://github.com/kb22/Medical-Appointment-No-Show-Prediction)
如果你想在 R 上一门课,这是我正在上的一门课。您可以使用以下链接获得特别折扣:
[## 用 R 编程教程学习 R 的基础知识
通过我们的 R 编程教程学习 R 语言基础。r 编程语言允许开发人员使用…
bit.ly](http://bit.ly/2mqwHMe)
当我开始学习 Python 时,我开始学习 Python 的以下课程(Udemy 通常也会对该课程打折):
[## 完整的 Python 训练营:学习 Python 编程和代码
这是 Udemy 上最全面、最直接的 Python 编程语言课程!你是否…
www.udemy.com](https://www.udemy.com/course/complete-python-bootcamp/)
R vs Python
古老的争论仍在继续,有些人可能更喜欢 R,而有些人可能更喜欢 Python,这完全是你自己的选择。然而,由于我现在同时使用两种语言,我可以更好地告诉大家这两种语言都很棒。
r 带来了内置的统计函数,在绘制图形方面,它比不上令人惊叹的ggplot
库。Python 有很好的机器和深度学习库,更容易使用。
Source: Google Trends
看看 Google Trends 在过去 12 个月里追踪的搜索次数,R 和 Python 在全球范围内都得到了广泛的搜索。根据 TIOBE Index,虽然趋势显示 R 语言的搜索越来越多,但 Python 远远领先于 R 语言,如下图所示:
Source: TIOBE Index
这些数字表明,虽然 Python 在今天更受欢迎,但来自 Google 的搜索结果表明,很多搜索结果往往更偏向于 R 而不是 Python。因此,两种语言技能的良好结合不仅能让你为今天的挑战做好准备,还能让你为未来做好准备。
现在,让我们看看如何使用这两种语言!
使用 R 的探索性数据分析
导入包
你可以使用install.packages()
下载 R 中的包,然后使用library()
将它们导入笔记本.Rmd
文件。我使用ggplot2
来处理图形,gridExtra
来处理图形的网格,lubridate
来处理日期。
导入数据集
我从 Kaggle 获取了关于各种医疗预约以及病人是否出现的数据集。它有 13 个特征和 1 个目标变量。功能read.csv()
允许导入数据集。
Dataset (First half)
Dataset (Second half)
数据集探索
让我们首先来看看行数和列数以及这些列的名称。函数nrow()
返回行数,ncol()
返回列数,names()
返回列名列表。paste()
方法将不同的字符串组合成一个字符串。
数据集有 110527 行和 14 列。目标变量是No.show
并且是否定形式,所以我想把它改成可读性更好的形式。当我将No.show
更改为Showed_up
时,我还必须将列值从No
反转为TRUE
并将Yes
反转为FALSE
。
我们有 13 个特性,让我们进一步探索它们:
- “PatientId”:它是每个患者的唯一标识符,但对任何预测都没有用。
- " AppointmentId:它是每个约会的唯一标识符。
- “性别”:这个人是用 F 表示的女性还是用 m 表示的男性。
- “预定日期”:安排约会的日期。
- “约会日”:约会的当天。
- “年龄”:人的年龄。
- “邻居”:该人所属的邻居。
- “奖学金”:这个人是否有奖学金(定义维基百科)。
- “高血压”:人是否有高血压。
- “糖尿病”:人是否有糖尿病。
- “酒精中毒”:此人是否酗酒。
- “Handcap”:该人是否有身体残疾。
- “SMS_received”:此人是否收到了关于约会的短信。
目标变量是:
- “Showed_up”:描述此人是否赴约。
接下来,让我们看看数据集的摘要。
Dataset summary
仔细观察数据集可以发现,像Alcoholism
、Handcap
等特征。它们被认为是连续值,而不是分类变量。这些日期不被认为是日期,Age
的最小值是-1
,这是错误数据,所以我将删除这些行。
形象化
目标阶层
让我们看看有多少人来赴约,有多少人没来。我将使用ggplot
,它将参数作为数据集,然后是aes()
中的 x 值。geom_bar()
定义我们想要一个条形图,每个条形图的填充颜色为白色,橙色定义为color
橙色,每个条形图的width
定义为0.4
。标题是用ggtitle()
定义的,我用labs()
定义了 x 和 y 轴标签。
Target class distribution
与没来的人相比,来赴约的人更多。我们肯定需要努力确保模型不会出现偏差。
性别分布 让我们看看数据集中是否存在男性和女性之间的分布。我将创建一个条形图,并将列值重命名为F
的Female
和M
的Male
。就像上面的条形图一样,我使用了所有的函数,并用scale_x_discrete
重命名了 x 标签。
Gender distribution
与男性相比,有更多的女性安排了约会。
二进制类分布
由于有许多使用TRUE
和FALSE
定义的二进制类,我将根据目标类文件颜色来绘制它们。aes()
函数接受参数fill
,这基本上让我们基于另一个类绘制给定的数据,在我们的例子中,是目标变量。函数grid.arrange()
帮助我们绘制一系列的行列图形。参数ncol = 2
声明基于我想要的绘图数量,我想要 2 列和 2 行。
Binary class distribution
所有图显示,对于任一布尔值,目标类之间的分布几乎是恒定的。数据分布相当均匀。
预约和预约日期的区别 我注意到,某人预约的时间和实际预约的日期之间的区别可能也很有用。因此,我决定在数据集中创建一个新列Date.diff
,它基本上是两天之间的差异。由于区别在于天数,所以我用as.numeric(unlist(date.diff))
将其解列后转换成数值。
Date diff between schedule and appointment day
该图显示,有许多约会与预定日期同一天。让我们移开那个巨大的钉子,看看我们是否能找到除它之外的任何东西。所以,在上面的剧情中,我会加xlim(1,200)
从 1 开始。
Date diff between schedule and appointment day (≥ 1 day)
请注意,随着天数差异的增加,约会的数量会减少。相差 50 天以上的预约真的少了。似乎没有相关性,因为 50 天之前的计数上升和下降没有任何模式。
约会时间设置 约会的时间或月份也可能影响某人是否出现在约会中。所以,让我们创建数据,看看是否有这样的影响。虽然小时数据很有用,但我注意到每个约会的小时信息都是相同的,所以我们不能使用它。让我们只处理月数据。
使用month
函数,我能够从AppointmentDay
中检索月份。然后,我用它画了一个柱状图。
Monthly distribution of appointments
四月的约会很少,而五月的约会最多。
prop.table()
导致基于边距的对称分布。正如我们从数据中看到的,月份对演出几乎没有影响,因为虚假和真实的比例几乎相同。因此,我们可以删除列本身。
我们可以使用subset()
方法检索数据集的子集,然后通过将参数select
定义为-Month
,我们选择除了月份之外的所有内容。
街区 当我们放眼望去,也有许多不同的街区。让我们用条形图来研究一下它们。
Neighborhoods in the dataset
邻里数据变化很大。Jabour
有非常多的预约,但有些社区的预约少于 10 次。我们应该保留数据,但我们将在模型训练期间创建虚拟变量来容纳该列中的每个值。
年龄
最后,让我们看看年龄变化是如何在数据集中发生的。我们已经移除了数据集中的异常值。我现在将为目标变量中的两个类使用两个相互重叠的散点图。
我首先选择带有Showed_up
的记录作为TRUE
,然后使用table
和as.data.frame
创建一个名为age.show
的频率表。我同样为Showed_up
创建数据帧age.no_show
为FALSE
。使用两次geom_point
,我创建了两个重叠的散点图。
Age count and showed up status
该图显示,约会的次数随年龄变化很大。最大预约是给婴儿的。在 50 岁左右有一个下降然后一个峰值。最后,随着年龄的增长,预约的人越来越少。因此,年龄也可能对目标变量有影响。
现在我们对数据集有了一个相当好的想法,让我们以修改后的形式保存它,然后使用 Python 库进行预测。我将使用write.csv()
将数据集保存到文件dataset_modified.csv
。row.names
as FALSE
确保不保存行索引。
使用 Python 进行分类
在进行适当的数据工程以进行分类之后,我将开发一个人工神经网络来对给定的数据进行训练。
导入库
我将导入必要的库,包括用于 csv 的pandas
、用于数据处理的sklearn
和用于创建人工神经网络的keras
& tensorflow
。
导入数据集
我将使用函数read_csv()
来导入数据集文件dataset_modified.csv
。然后我将使用head()
方法来查看前 5 行。
Dataset (Modified) — Part 2
Dataset (Modified) — Part 2
数据工程
在数据集可以实际使用之前,我将执行许多数据工程步骤。
失约 Kaggle 总是教会我很多东西。即使在我决定做了这么多步骤之后,我还是发现了另一个非常有用的步骤。受到这个 Kaggle 内核的极大启发,我决定看看如果有人之前在目标上错过了一次约会的效果。
正如我们所见,相关值非常高(~0.61),因此它将是目标变量分类的一个重要因素。
删除多余的列 ,因为列PatientId
、AppointmentID
、ScheduleDay
和AppointmentDay
不会直接影响目标变量,所以我用drop()
删除它们。
虚拟列 我将把列Neighbourhood
转换成一组虚拟列。我将使用drop()
删除原始列,然后使用get_dummies()
创建使用concat()
添加到原始数据集中的列。
映射列 我们知道Gender
列被分类为F
或M
,我将使用映射函数将它们转换为 ANN 可以理解的数值。
分割测试训练数据 下一步是分割特征和列,然后使用train_test_split()
创建 33%的测试数据和 67%的训练数据。
最终训练数据总共有 91 列。
缩放数据 神经网络最适合缩放数据,因此,我将使用StandardScaler()
来缩放数据,并将其用于训练神经网络。当使用X_train
时,我们使用fit_transform
,因为它确保它符合那些值并且也转换它。对于X_test
,我们只使用transform
,因为它确保了定标器函数使用来自 X_train 的知识来转换测试数据。
模型生成
数据集已经可以使用了,所以我现在将使用Sequence()
方法创建人工神经网络。我添加四个密集层,分别有 512、1024、2048 和 1 个神经元。我还确保在每一层之后包含Dropout()
,这样神经网络就不会过度适应数据。对于第一个密集层,我们还需要指定input_dim
,它等于我们数据中的列数(91)。
我们的网络有 2,673,665 个不同的参数需要训练。
我现在将使用 0.1 的验证分割来训练模型,这意味着从训练数据中的所有数据来看,模型将对 90%的数据进行训练,并对 10%的数据进行学习测试。
模型预测法
我现在将在测试数据上测试模型,并输出混淆矩阵和准确性。
虽然该模型达到了大约 88%的准确率,但是混淆矩阵表明该模型能够正确地预测某人何时会出现在约会中,但是大约有 50%的人不会出现。
我们可以通过探索更多的数据特征和进行数据工程以确定其他因素来进一步改进该模型。但是现在,88%对于这个模型来说已经足够准确了。
结论
在本文中,我们使用人工神经网络和使用 R 和 Python 的数据探索来开发涉及两种语言的数据工作流。
如果你有任何想法或主意,请分享。还有,你可以在 LinkedIn 上和我联系。如果您喜欢这篇文章,您可能也会喜欢:
[## Google Colab——您在云上的 Python 工作空间
了解 Google Colab
towardsdatascience.com](/google-colab-your-python-workspace-on-cloud-c3aed424de0d) [## seaborn——让绘图变得有趣
Python 中的 Seaborn 库简介
towardsdatascience.com](/seaborn-lets-make-plotting-fun-4951b89a0c07) [## 通过预测游客购买意向学习人工神经网络
使用 Keras 和 Tensorflow 构建人工神经网络
towardsdatascience.com](/learning-artificial-neural-networks-by-predicting-visitor-purchase-intention-724ba2be7c29) [## 在 Kaggle 上使用 CNN 进行深度学习以识别疟疾细胞
医学领域的深度学习
towardsdatascience.com](/deep-learning-to-identify-malaria-cells-using-cnn-on-kaggle-b9a987f55ea5)
我如何使用迁移学习和集成学习在 Kaggle 竞赛中获得 90%的准确率
原文:https://towardsdatascience.com/how-i-used-transfer-learning-and-ensemble-learning-to-get-90-accuracy-in-kaggle-competition-5a5e4c7e63e?source=collection_archive---------11-----------------------
图像分类是一项经典的机器学习任务,自深度神经网络诞生以来,它一直是机器学习研究的关键驱动因素。本文将指导您使用迁移学习和集成方法轻松解决这个问题。
Photo by Blake Connally on Unsplash
1.介绍
在这个比赛中,我要对不同车辆类型的图像进行分类,包括汽车、自行车、货车、救护车等。(共 17 类)。竞赛的数据包括带有类别标签的训练数据和不带标签的测试数据。任务是预测测试数据的秘密标签。你可以在这里找到并下载数据集。
2.迁移学习
迁移学习是机器学习中的一个研究问题,它专注于存储在解决一个问题时获得的知识,并将其应用于不同但相关的问题。[1]
在计算机视觉中,迁移学习通常用预先训练好的模型来表示。预训练模型是由其他人创建的用于解决类似问题的模型。可以使用预先训练的模型作为起点,而不是从头开始构建模型。我在比赛中选择使用的型号有 InceptionV3 、 MobilenetV2、和 Densenet201 。
3.预训练模型
这是一个如何将预训练模型应用于您的问题的示例。
一些注意事项:
- Include-top :是否包含网络顶部的全连通层。您应该在这里设置 False 来自己修改网络。
- globalaveragepool2d:在空间维度上应用平均池。这里,我在基本模型的最后一个输出层应用了平均池操作。
- 类别交叉熵损失:用于单标签分类的损失函数。一个图像只能属于一个类。
- Adel ta optimizer:Adagrad 的一个更健壮的扩展,它基于梯度更新的移动窗口来调整学习速率,而不是累积所有过去的梯度。
- Model.summary: 获取模型的摘要
您也可以对其他模型使用相同的代码概念。在比赛中,我只对其他车型做了小调整。(InceptionV3 和 Densenet201)。
4.准备数据
我们必须将训练数据分成两个文件夹:训练和测试。每个文件夹包含以类别命名的子文件夹,每个子文件夹包含属于该类别的图像。
以下是如何做到这一点的示例:
之后,为了增加数据量并避免过度拟合,我使用 ImageDataGenerator 对训练数据进行了扩充。它将获取原始图像,对其进行随机转换,并返回新的随机转换图像。然后,我为 fit_generator 函数(稍后使用)创建了训练和测试生成器,以便在训练期间动态生成数据。
5.培养
在 Keras 中,使用 fit() 对于可以加载到内存中的较小数据集来说很好。但是在这里,我们的数据集太大了,所以使用 fit() 是不实际的。解决方法是使用 fit_generator() ,它可以在训练期间将图像加载到内存中。
一些注意事项:
- 根据您电脑的内存,您可能想要更改批处理大小。
- 您可能还希望在培训中添加检查点以进行备份,以防培训过程出现问题。
在训练每个模型大约 80 个时期后,下面是每个模型的准确度分数:
- InceptionV3:训练准确率:93.76 %,验证准确率:92.30 %,Kaggle 评分:89.2%
- MobilenetV2:训练准确率:88.25 %,验证准确率:92.30 %,Kaggle 评分:85.6%
- Densenet201:训练准确率:92.3 %,验证准确率:90.3 %
6.集成学习
集成学习是训练多个模型而不是单个模型,并组合来自这些模型的预测。这减少了预测的方差并减少了泛化错误。结果是预测这比任何单一的模型都要好。[2]想要更多的动力,你可以看看 ILSVRC2015 的结果,看到比赛的 12 强使用了多种模式的组合,而不是只有一种。
如何实现集成学习:
集成学习结果: 91.1% Kaggle 评分。
以下是一些预测图像:
Truck image
Tank image
7.摘要
要找到我在这个项目中使用的完整代码,你可以去这个链接。
我希望你在这篇文章中找到一些有用的东西,可以用在你的深度学习和计算机视觉项目中。这是一个有趣和令人兴奋的领域,每个人每天都在尝试新的想法和技术。
我很乐意帮助你,所以如果你有任何问题或改进的想法,请告诉我。
8.参考
- 韦斯特,杰里米;文图拉,丹;肖恩·沃尼克(2007 年)。“春季研究报告:归纳转移的理论基础”。杨百翰大学物理和数学科学学院
- https://machine learning mastery . com/ensemble-methods-for-deep-learning-neural-networks/
我个人关于从艺术到科技转变的故事
原文:https://towardsdatascience.com/how-i-went-from-28k-to-70k-in-one-year-and-a-half-58f4612e7e39?source=collection_archive---------45-----------------------
参加编码训练营的案例
杰西·鲁伊斯
Video on the same topic on Quita youtube channel by author
在大约一年半的时间里(包括自学),我从一名艺术副教授(加上兼职)的收入约 28000 英镑,变成了一名开发人员的收入约 70000 英镑。
我将讨论我的背景和你能实现类似职业转变的可能性。总的来说,我强烈推荐编码训练营进入科技行业。尤其是对于有其他行业工作经验的人来说。但是这是一项艰巨的任务,没有充分的准备和计划是不能参加的。
在这篇文章中,我将重点讨论我为什么以及如何转行。我写过其他文章,讨论我在参加数据科学训练营之前完成的在线课程,以及我参加的训练营的回顾。关于这些文章和其他文章,请参考我的博客。
简而言之,我赶时髦的原因是因为我在经济上依赖于我的父母,并且没有足够的收入独立生活。从这个意义上说,我是一个典型的有创造力的千禧一代。我有几个有声望的(没用?)艺术和哲学学位。然而,在完成研究生学位的几年后,我发现自己破产了,在经济上损失惨重。
从 2017 年开始,我作为兼职教授教了几年美术,但这是零星的临时工作,没有任何福利或工作保障。因此,在我教书并和母亲住在一起的时候,我开始研究职业,进行性格和优势测试,并创建清单。
互联网告诉我,我会成为一名优秀的会计师或软件工程师。后来,我不知何故发现了数据科学,在深入阅读了该领域后,我知道这对我的个性和优势有好处。所以我的第一条建议是了解你的优势、劣势、性格特征,以及它们如何最适合潜在的职业。
既然我知道我想做什么,我需要解决如何做的问题。我想过回学校再拿一个学士或硕士学位。但是后来我了解了训练营,我确信这是我最好的选择,因为它们比传统的学校教育要快。我的第二条建议是考虑你所有的自我教育选择。训练营是找到工作的最快途径。
传统教育体系的衰落不应该被低估。在我接受高等教育期间,虽然由于我的特权,我受到了很好的照顾,但我没有接受任何特定职业的培训或指导。我的父母在经济上支持我,虽然他们想让我成为一名律师,但他们支持我以美术为职业的决定。
我的高等教育教会了我机智、良好的学习习惯、逆境和努力工作。我没有参加任何实习。我确实在工作,研究工作,渴望做一些有创造性和知识性的事情。但坦白地说,我非常沮丧,在大学的大部分时间里都在挣扎。最终,我对自己的了解超过了对职业和现实世界的了解。
因此,我对训练营的信念源于对其功效的赞赏,但我也承认传统高等教育的目的和优势。训练营是专门为学生就业而设计的,而高等教育促进个人发展和智力(对大多数人来说)。
回到进入科技行业,我之所以能够在这么短的时间内找到数据科学领域的工作,是因为我参加了训练营,也是因为我事先进行了自学。如果我没有读完本科/研究生和自学,我怀疑我在新兵训练营会如此成功。我在数学和逻辑方面的优势帮助我理解了密集的统计数据和机器学习算法。
训练营最大的挑战是课程的速度和强度以及毕业后脆弱的求职期。没有人告诉你找工作是最难的部分,因为这是一场心理斗争,会产生自我怀疑、竞争和不确定性。我的第三条建议是,如果你参加训练营,确保你找到一个有很棒的职业咨询团队的训练营,他们会指导你完成整个过程。
最终,训练营的建立是因为对熟练工人的大量需求和你所接受的培训的高度重视。所以如果你正在考虑参加一个,请认真考虑,并找到经历过的人来讨论你的问题。
我希望这篇文章能对那些积极寻求在技术领域发展或开始职业生涯的人有所帮助。如果您有任何问题,请联系我们!
我如何从自动化工程师变成数据科学家
原文:https://towardsdatascience.com/how-i-went-from-automation-engineer-to-data-scientist-9a1c84cbdcdc?source=collection_archive---------36-----------------------
从我进入数据科学和机器学习世界的旅程中得到的建议和教训。
Photo by Allie Smith on Unsplash
在这篇文章中,我想分享一些我在 2.5 年的职业转换旅程中所学到的有价值的见解,希望它能帮助任何正在考虑职业转换的读者。
对我来说,这种转变是从软件工程师到数据科学家,但我相信大多数这些见解适用于任何类型的职业转变。
所以现在开始…
首先,找到你的激情!
“追寻你的激情,其他一切都会水到渠成。这不是浪漫。这是实用主义的最高境界。”~加贝·吉福兹
我并不总是知道我想成为一名数据科学家。其实在 PayPal 开始工作之前,我并没有考虑过职业规划。从这个意义上说,公司内部的一位导师给了我很大帮助,他鼓励我问自己正确的问题,并推动我掌控自己的职业道路。
所以,我想我的第一个建议是花点时间思考一些事情,比如:
你的动力是什么?你最喜欢你工作的哪些方面?你最不喜欢哪方面?你认为自己在 1/3/5 年后会怎样?
如果你能在这个自我发现的过程中找到一个导师陪伴你,那就更好了。
婴儿学步
“朝着正确的方向迈出许多小步,总比大步向前却跌跌撞撞地后退好”~中国的一句古老谚语
好吧,让我们假设这个发现过程让你意识到你想改变职业。
接下来你需要明白的是这种变化不会在一夜之间发生。这是一个由许多小步骤组成的过程。对我来说,这个转变花了两年多的时间。
让我们从头开始(最好的起点:)。当我开始在 PayPal 的安全产品中心担任自动化工程师时,我第一次接触到了数据科学和机器学习的世界。我们有一个非常强大的机器学习团队,刚刚开始进行每周一次的阅读小组会议。在每次会议中,一名团队成员将提交一篇与其当前项目相关或他们个人感兴趣的论文,并开展讨论。起初,我以“只听”的方式参加这些会议。一次又一次,我慢慢地开始掌握越来越多的概念。几个月后,我被要求提交一篇论文。我发现了一篇我觉得很有趣的论文,并把它给 ML 团队的领导大卫看。由于论文作者发表了他们的代码,David 建议我应该尝试复制他们的结果。我很快意识到这不是一个简单的任务,因为代码并不完整,也没有很好的文档记录,但这对我来说是一次很好的学习经历。这是我第一次体验机器学习代码,我有机会了解许多基本概念(例如,反向传播)是如何实现的。这次经历教给我的另一个重要的教训是,学术研究中可重复性的重要性,仅仅因为论文中写的东西并不自动意味着它是真实的。
我迈出的下一小步是自愿做一个关于强化学习的内部介绍性演讲。不是因为我当时对强化学习有所了解,只是觉得它很有意思( AlphaGo Zero 差不多同时发布)。我相信没有比教更好的学习方法了,所以这是我了解这个话题的绝佳机会。
要坚持!
"成功是日复一日的微小努力的总和。"~路易·萨查尔
在这一点上,我已经意识到这是我想追求的道路,所以我开始进入自我学习的高速档。这包括参加吴恩达令人惊叹的机器学习课程,然后是 deeplearning.ai 的深度学习专业化,阅读博客帖子和论文,在 Twitter 和 LinkedIn 上关注有影响力的研究人员和实践者,订阅机器学习和深度学习 DL,参加相关会议,甚至在打扫房间时听 ML 播客。
我决心尽我所能让自己处于这样一个位置,当机会出现时,我会做好准备。每天晚上,一旦我的孩子睡着了,我就会打开我的笔记本电脑学习(特别感谢我那了不起的妻子,她在这段时间里一直陪着我:)。这成了我大约两年的例行公事。
但这还不够。要改变职业生涯,最好得到经理的支持。这就引出了我的下一个观点。
明确你的职业抱负!
“如果你提出要求,世界会在你的职业生涯中与你共谋”~ Sri Shivananda (PayPal 首席技术官)
我很幸运能在一家高度鼓励个人成长和个人发展的公司工作。这不是想当然的事情。即使这同样适用于你,也不要假设你周围的人会猜测你的野心是什么,事情会神奇地自己发生。你必须给别人帮助你的机会。一旦你周围的人意识到你的渴望,机会很可能会出现。
拥抱每一个机会!
尤其是当你觉得这是一个挑战,而你还没有准备好的时候。这些正是最能帮助你成长的经历。
“如果有人给你提供了一个绝佳的机会,但你不确定自己能做到,那就答应吧——然后再学习如何去做!”~理查德·布兰森
我很幸运地得到了我的经理的支持以及当时机器学习团队领导的鼓励和指导,这使我在作为自动化工程师的日常工作之外,还与团队一起参与了几个项目。例如,作为 BGU 和贝宝安全产品中心合作的一部分,我有机会参与一个研究项目。这个项目属于人工智能规划的领域。我参与了实证实验,甚至与人合著了一篇论文。
在那段时间里,我的另一个有意义的经历是在项目为期 5 周的实习项目阶段指导一组 4 名以色列技术挑战研究员。该项目旨在使用机器学习来静态分析网络流量,并确定流量的来源(物理机、虚拟机或 Docker 容器)。我们得到了相当好的结果,甚至基于这个想法提交了一个专利。
如果我没有让我的经理们知道我的雄心壮志,我就没有机会获得这些惊人的机会!
做体力工作
“知道是不够的;我们必须申请。愿意是不够的;我们必须这样做。”~约翰·沃尔夫冈·冯·歌德
一旦你觉得自己掌握了基本知识,你应该获得尽可能多的实践经验。真正的专业知识是通过实践获得的。每当你学习一个新概念的时候,试着真正地“弄脏你的手”,摆弄一些代码。 Kaggle 是一个获得实践经验的绝佳平台,我强烈推荐。对于那些不知道的人来说,Kaggle 是一个由数据科学家和机器学习者组成的非常活跃的在线社区,归谷歌所有。社区非常支持这个领域的新成员。
在获得实践经验方面大有帮助的一个小技巧是找一个犯罪伙伴——一个对这个主题同样(或至少有点)有热情的人,可以陪你走过你的学习旅程。一旦你们一起决定了学习目标或里程碑,你们都不太可能偷工减料或决定跳过学习经历的实践方面。万一你遇到问题,有人给你出主意或向你咨询也总是有帮助的。
对我来说,那个人是我的同事和朋友,他已经是另一个团队的数据科学家和安全研究员。下班后我们开始参加 Kaggle 比赛。
起初,我们处理过去的比赛,几个月后过渡到现场比赛。我们在前 5 场现场比赛中获得了 3 枚奖牌(2 枚铜牌和 1 枚银牌),这表明你不应该害怕投入并开始练习你新学到的技能。Kaggle 的好处是在各个领域有各种各样的比赛,这意味着你总能找到你感兴趣的比赛或与你当前工作相关的比赛,这样你就可以利用领域专业知识,帮助你走在队伍的前面。
不要等待完美的时刻!
“如果我们等到准备好了,那我们就要等一辈子了。”~丹尼尔·汉德勒,假电梯
总会有更多的东西要学。不要等到你觉得已经准备好转变的那一刻,因为那个时刻可能永远不会到来。总会有新的算法需要学习,新的 MOOCs 需要学习,新的图书馆需要了解,更多的技能需要掌握。我们生活在一个技术不断变化和发展的时代,天生的好奇心和自学能力比任何具体技能都更重要。
帮助我实现这一点的是我的导师,他在我们的一次会面中简单地问我:“你在等什么?是什么阻碍了你申请数据科学职位?”。他是对的。那时,我已经集中学习了大约 2 年,并且有足够的实践经验来应对任何技术面试。我决定接受他的建议,开始对数据科学职位进行内部面试(在我的经理的支持下)。
不久之后,我加入了我现在的团队,成为一名数据科学家和安全研究员!
Photo by Hello I’m Nik 🇬🇧 on Unsplash
一些结束语
- 这个建议是基于我的个人经验。这些是对我有用的东西。谈到职业转换,没有对错之分,我相信每个人都应该尝试并找到自己的道路。
- 人们普遍认为,当你做出重大职业改变时,你基本上是从零开始。我不相信这是真的。你可能正在进入一个新的领域,但这并不意味着你过去的所有经历都变得无关紧要。我的软件工程背景使我精通编写模块化和可重用的代码、版本控制和持续集成。我的软件自动化经验也极大地帮助了我的日常工作,并为我提供了一个独特的视角,这是一个“传统培训”的数据科学家可能会缺少的。例如,我非常热衷于将“传统”软件开发中固有的相同质量标准应用到机器学习领域(单元测试、数据验证等)..).我甚至在 PyconIL 做了一个关于它的演讲。所有这些都是说你应该意识到你的优势以及你带来的独特视角和能力。多元化的团队才是更强的团队!
这就是我想分享的,我希望你们中的一些人能够将这些知识应用到你的个人职业生涯中。祝你好运!
原载于 2019 年 8 月 12 日https://medium.com。
我如何赢得 Flipkart ML 挑战赛
原文:https://towardsdatascience.com/how-i-won-the-flipkart-ml-challenge-fcf1fcc9e06a?source=collection_archive---------7-----------------------
深度分析
lipkart 最近为印度工程学院的学生举办了为期一个月的年度机器学习挑战赛,总奖金为₹5,20,000(约 7500 美元)。我的团队在大约 6700 名参与者中胜出。在我告诉你我们是如何做到的之前,让我们记住,如果这个挑战不局限于这么小的目标人群,我可能很难保持在前 10%之内。作为一个题外话,这个博客将主要是理论性的。
问题陈述
给定一幅图像,定位图像中的主要对象。换句话说,它是没有分类部分的对象检测。我们只需要预测边界框。
Examples from the training set
然而,有一个问题,预先训练的模型是禁止的,但是使用标准架构是允许的。有 24000 幅训练图像和 24045 幅测试图像。
评分标准是平均交集除以并集(IOU)。
The IOU function
Custom metric to track mean IOU
当时不知道tf.metrics.mean_iou
的存在,所以自己创建了一个函数,大概要慢很多。
初步分析
乍一看,数据集有很多普通背景的图像,所以我使用 OpenCV 尝试了 Otsu 阈值、分水岭、轮廓等等。这些显然没有产生很好的效果,所以我就不告诉你细节了。
在尝试 Yolo、RetinaNet SSD 和 RCNNs 等标准对象检测架构之前,让我们提醒自己,它们有复杂的方法来平衡定位和分类损失,对于手头的问题来说是多余的。最重要的是,我没有信心能很好地调整它们,所以我没有在这些上面花太多时间。但所有这些都使用标准架构,如 VGG 或 ResNet 作为特征提取器。
这个问题非常类似于一个分类问题。对于一个预测物体精确边界框的网络来说,它应该能够识别那些物体看起来像什么,因为我们没有 Imagenet 权重来帮助我们。理想情况下,如果我们有一个好的本地化网络,我们应该能够通过替换和训练最后一层来使它成为一个好的分类网络。
因此,我使用标准架构,用具有四个输出(x1、y1 和 x2,y2 是左上角和右下角的坐标)的密集层替换最后一层,移除激活并使用经典回归损失。
数据扩充
24,000 张照片不够,所以我应用了亮度对比度增强、沿两个轴翻转、横向移动等技术,最终得到了大约 480,000 张照片。我没有使用像生成器这样的原位方法,在每个时期生成不同版本的图像,因为我想确保网络可以看到每个时期的所有数据。回想起来,发电机也可以工作得很好。
Imagenet 声称拥有大约 5000 万张图片,你可能认为 50 万张不够,但是训练集中的图片可以大致分为大约 10 个类别,与 Imagenet 中的类别数量相差甚远,所以我们不会有问题。
训练技巧
在讨论我的最佳架构之前,这里是我们使用的训练技术。
- 渐进大小增量:由杰瑞米·霍华德推广,这是一种技术,我们首先传入缩小的图像,当学习开始停滞时,渐进地增加大小。这可以防止网络过度适应较大图像中存在的噪声,并有助于更快地收敛。我们依次使用了 64、96、128 和 224 的图像。从随机权重开始时,这尤其有用。当我们达到 224 的时候,我们已经有了一个网络,可以很好地处理较小的图像,就像迁移学习一样。
- 回火:这是一种我们使用原始数据集和大批量进行训练的技术。一旦网络开始过度拟合,我们就用扩充的数据集替换较小的数据集,并通过梯度噪声减少批量大小以引入正则化。在某种程度上,我们正在让网络在淹没它之前熟悉它应该期待的数据类型。
- 带重启的随机梯度下降:这是一个学习率调度器(不是优化器),我们和 Adam 一起使用。在再次重置之前,它逐渐降低固定数量的历元的学习速率,以便网络在停滞时可以容易地跳出局部最小值。循环长度可以改变,逐渐下降到更宽、更可概括的最小值。这篇博客解释得很好。
SGDR with a cycle multiplier of 1
- 快照集成:由于使用了 SGDR,网络将在整个训练过程中收敛到几个不同的最小值。保存每个最小值处的重量检查点并将它们组合在一起会产生很好的结果,如论文快照组合:训练 1 获得 M 个自由中所探讨的。
Save a checkpoint at the flagged points and ensemble them together for better results
- 学习率查找器:显然,找到一个好的学习率对于收敛至关重要。使用一个标准的学习率查找器,将 SGDR 的上限设置为亏损面下降最大的值。将下限设在亏损仍在减少的某个地方。
- 消除间隙层:实际上不是一种训练技术,但据观察,在最后一层之前有全局平均池层的网络比没有全局平均池层的网络表现差大约 3%。主要是因为最后一层现在要学习的输入更少了。
[## ad71/Flipkart-Grid
用于对象定位的 Keras 辅助函数。
github.com](https://github.com/ad71/Flipkart-Grid)
这里讨论的 Keras 回调可以在这个库中找到。PyTorch 用户可以使用更高级的库,如 fastai 已经实现了所有这些。
网络架构
A skip connection
- 对于任何视觉相关的任务,我首先尝试的是训练一个小的 ResNet 作为基准。ResNets 通过引入跳过连接解决了深度 CNN 的消失梯度问题,这使得网络更容易学习恒等函数。使用上面提到的所有技术,我们训练了一个 ResNet34 在公共排行榜上获得 93.41%的平均 IOU。
- ResNeXt :这是下一代的 ResNet,有一些改进和新的超参数。ResNeXt 中的层的工作方式类似于神经元。来自前一层的激活通过 C 不同的路径接收,每个路径执行相同的操作,然后相加在一起。这里, C 称为网络的基数。这些路径是相互断开的,这在某种程度上增加了稀疏性,并有助于减少过度拟合。
Residual block in ResNet vs residual block in ResNeXt with C = 32
观察到较高的基数优于较低的基数,并且具有大 C 的 ResNeXt 比具有宽 ResNet 更好。由于我们只有一个新的超参数,这个网络比 Inception 系列中的任何网络都更容易为新的数据集进行训练和微调。基数为 32 的 ResNeXt 101 是我们性能最好的模型。这篇博客详细解释了 ResNeXts。
激活功能
在我们的第一次尝试中,ResNeXt101 比 ResNet34 表现更好,但差距不是很大。学习停滞不前,尽管我们的验证损失比培训损失要低一些。我们保存了一个检查点,并迅速将新的分类层连接到网络中的一个中间层,并尝试训练它。理想情况下,尽管损耗不会像最后一层损耗那样低,但仍会降低。但事实并非如此。我们的新分类器也停滞不前。这很能说明将死的热路问题。
当使用 ReLU 激活时,随着时间的推移,大的负梯度杀死神经元,因为对于负输入,ReLU 输出 0。由于这个原因,那个特定的神经元完全停止了对梯度变化的反应。死亡的 ReLUs 不一定是一个问题,因为死亡的神经元对于计算偏差是有用的,即使它们已经失去了学习能力。然而,如果你有很多死亡的神经元,学习就会停滞。在我们的例子中,这可能是因为数据中没有足够的变化来适应一个有这么多参数的模型。
为了解决这个问题,我们可以使用 ReLU 的修改,如泄漏 ReLU 或 SELU。这些函数也具有更接近于零的输出激活均值,在某种程度上自调整网络。
Versions of leaky ReLU
The SELU function, where (alpha) = 1.6732 and (lambda) = 1.0507 for standard scaled inputs.
由于时间不够,我们和 SELU 一起冒险,重新训练了整件事,看起来效果不错。这将我们的最终平均 IOU 提高了约 0.5%。
损失函数
到目前为止,我一直在尝试所有众所周知的方法,但理解为什么标准损失函数对于我们试图优化的东西来说是有缺陷的,是挤出精度的最后小数位数的关键。
考虑目标对象宽 100 像素、高 100 像素的情况。假设我们有一个能够正确预测尺寸的网络,但是将预测的边界框向右偏移一个像素并且向上偏移一个像素。
Case 1: 100 x 100 bounding boxes. Target box marked in green, prediction marked in red
在这种情况下,四个坐标的总平均绝对误差为 4 * 1.414 ,总均方误差为 4 * 2 ,而 IOU 为 96.097%
For this case, the IOU is 0.96097, the L1 loss is 1.414 and the L2 loss is 2, for each co-ordinate
考虑另一种情况,目标对象宽 400 像素,高 400 像素。让我们假设同一个网络精确地预测尺寸,但是在每个方向上偏移坐标一个像素。
Case 2: 400 x 400 bounding boxes. Target box marked in green, prediction marked in red
在这种情况下,总平均绝对误差和均方误差与之前的相同**,但是 IOU 更高,为 99.006%**
For this case, the IOU is 0.99006, while L1 and L2 losses are the same as before
这些不一致性表明,对于相同的 MAE 或 MSE,IOU 可能不同。因此,我们想要一个损失函数,对于目标区域较小的包围盒中的错误,它对网络的惩罚更大。
为了进一步证明这种差异,让我们考虑一个更极端的情况。
For the same L1 loss and L2 loss, the IOU is very different this time
虽然 70.71 的像素距离是不可能的,但希望你明白这一点。对于完全相同的 MAE 和 MSE,我们可以找到非常不同的 IOU 分数。这是一个问题。
为了在这个指标上表现良好,我们需要重新定义我们的损失函数。让我们看看为什么基于 IOU 的函数也不能很好地工作。
1 — IOU
:范围在 0 到 1 之间。数值和梯度之间的变化总是很小,导致收敛速度很慢。1 / IOU
:数值之间变化很大,梯度很大,但是函数是无约束的。对于没有交叉点的盒子,损耗爆炸到无穷大。在分母上加一个小值只是一个小技巧,并不能真正解决问题。
这是我最终得出的损失函数:
Where U is the Union, I is the intersection and At is the area of the target bounding box
U — I
给出我们想要最小化的额外区域。At
是我们想要对其进行缩放的因子,这样我们可以针对较小对象中的错误对网络进行更多的惩罚。由于没有更好的术语,我们姑且称这个函数为Scaled Loss
。
The scaled loss function
这个新的损失函数对于 100 * 100 像素的情况给出的损失值为 0.0398 ,对于 400 * 400 像素的情况给出的损失值为 0.0099 ,大约少了 4 倍。这个函数的梯度很大,永远不会爆炸到无穷大(假设目标边界框的面积永远不会为零)。
有时候在训练的时候,损失函数会突然爆炸到inf
,IOU 变成nan
。这只有在目标面积为零时才会发生。分析训练集标签,我发现对于一些图像来说,x1
大于x2
。纠正这些贴错标签的例子就解决了问题。
这个功能有一个缺点。在没有相交的情况下,无论两个不相交的盒子相距多远,该损失函数都给出相同的损失,因为这是基于面积的函数。此外,由该函数形成的损失图不是很平滑。
为了克服这两个问题,我们在网络仅在 MAE 上达到大约 90%的平均 IOU 之后使用了这个复合损失函数。
The composite loss function
结论
大概就是这样。使用所有这些技术,我们能够创建一个网络,当一个接一个地喂入时,每秒预测 23 张图像,当小批量喂入时,每秒预测 73 张图像。我们在公开排行榜上取得了排名 12 ,平均 IOU 为 94.8813% ,在私人排行榜上取得了排名 1 ,平均 IOU 为 94.7079% ,我认为这是最少的超额。
[## ad71/Flipkart-Grid
用于对象定位的 Keras 辅助函数。
github.com](https://github.com/ad71/Flipkart-Grid)
所有自定义指标、损失和回调都上传到这个存储库中,供任何人使用。
谢谢你的时间。
Photo by Rob Bates on Unsplash
我是如何赢得分析金牌的
原文:https://towardsdatascience.com/how-i-won-the-gold-in-analytics-40cf3b45a427?source=collection_archive---------25-----------------------
提示和技巧
在印度商学院
对于那些刚到印度的人来说,印度商学院(ISB)是海得拉巴的一所顶级商学院,提供研究生课程。进去很难,出来也很难。我刚刚完成了为期 18 个月的大数据、机器学习和数据分析课程,并获得了金牌。我的团队还赢得了“最佳顶点项目”,因为我们在模拟年轻人失业方面所做的工作(在这里阅读)。如果你打算在 ISB 或其他任何顶级商学院学习,这里有一些建议和技巧可以考虑。
重要的事情先来。
不要等到最后一刻
这似乎是大多数人正在做的事情。也许是因为家庭和工作等其他承诺,也可能只是拖延。但是你最不想做的事情就是把任务留到最后,就在它们到期的时候。任何事情都可能出错——互联网可能会失灵,你的电脑可能会崩溃,你突然意识到你看错了截止日期(相信我,这是会发生的)。相反,计划在实际截止日期前一两天提交作业。如果需要的话,这将给你额外的时间重新检查并重新提交。
逐渐地
在大部分课程中,我的口头禅是“一寸一寸”。在未来的一段时间里,它将继续存在。有很多时候,一个问题的答案是不清楚的。见鬼,有时候我甚至不明白这个问题。在这种时候,我唯一能做的就是一次迈出一小步——理解问题中每个单词的意思,再读一遍维基页面,再看一遍 youtube 视频。每迈出一小步,下一步就会变得清晰。相反,如果我试图找到最终答案,我会迷失方向,而是一次一小步地往回走。尽可能做到完美。你不会知道所有问题的答案,但是……听说过“千里之行……”这句名言吗?
Yogaa!
看过电影《无限》吗?瑜伽对我来说就像 NZT-48 对埃迪·莫拉一样。我没有一天不做瑜伽或其他形式的运动。ISB 将更多地满足你心灵的需求,而不是你所希望的。你需要满足你身体的需求。我过去常常一天锻炼两次,有时甚至变成一天三次!有人问我是如何找到时间一天锻炼三次的,这实际上很讽刺,因为正是在我工作超负荷的时候,我才会出去跑步或游泳。从思考中休息一会儿,真正去做一些身体上的事情,让我变得更有效率。有数不清的方法可以让头脑远离过度思考和过度分析,任何/所有的方法都会让思考和分析变得更加有效。平我知道更多这方面的信息。
努力,而不是准确性
尽管看起来很讽刺,但即使在机器学习和人工智能的时代,获得回报的是努力,而不是最终结果的准确性。甚至在生活的其他领域,我也越来越多地看到这种情况。如果有人付出了真诚和专注的努力,那么他/她获得回报的机会要比那些侥幸中了头彩的人多得多。给它你的最好的镜头,放开结果。但不要在没有全力以赴的情况下放手!那就是‘放弃’了!奎师那说得漂亮;谷歌“克里希纳放手结果”,你就会明白我的意思。
别傻了,HCC
ISB 有非常严格的荣誉准则,比看起来更严格。所有作业都通过 Turnitin 运行,所有在线考试都通过 Mettl 平台监控。如果你做了任何违反比赛规则的事情,无论这些规则在你看来多么不合逻辑,你都有可能被处以高额罚款。例如,如果规则规定你不能在网上考试中使用纸和笔,那么你不能使用纸和笔,无论你多么不同意这条规则。处罚是预先决定的,荣誉准则委员会(HCC)对此无能为力。因此,请确保您仔细阅读每场考试的细则。如果你想知道更多关于 HCC 的事,给我发信息。
学会说“不!”
他们说这是一个面向职业人士的执行项目,他们说即使你有全职工作也可以做,他们说你每天只需要花 2 个小时来完成这个项目,但是伙计,这些都是轻描淡写!这门课程将要求你做好每一件事,而超越的唯一方法就是专心致志。你需要对很多对你和你周围的人重要的事情说“不”。在这个过程中你可能会失败。你可能会失去一两个女孩/男朋友,一两个项目,当然不仅仅是一两集。但是该怎么办。在这个项目中,你需要做出选择,如果你想在这方面出类拔萃,那就做好准备,让其他事情退居二线。很不幸,但这是事实。
如果你已经读到这里,那么你一定是认真的:)所以,我会给你一些特别的提示,无论如何,它们都会让你与众不同。
用< 3 做
如果你真的热爱你正在做的事情,那么它就会显现出来!这是无法伪造的。当你不爱一个人的时候,买玫瑰是行不通的。而如果你爱一个人,即使你不买玫瑰,也会表现出来!和 ISB 一样-一样但不一样!如果你喜欢这门课程,如果你喜欢数据科学和分析工作,如果你挖掘研究和学习新的东西,那么它会在你的工作质量中表现出来,并给你额外的优势。事实上,这同样适用于任何可交付的产品,任何客户。带着爱去做。
保持乐观
据说大脑在想象做一个动作时和实际做那个动作时有相同的神经活动。因此,通过保持积极的心态和积极的思维(注意,这不同于过度自信),你就为自己的成功做好了准备。有几次我想推迟,尤其是在第二学期,当时的工作量可不是闹着玩的,正是在这种时候,我必须保持积极的态度,积极思考,一步一步来!这是对我有效的方法,但是还有其他方法可以确保你保持积极的心态。要知道隧道的尽头有光明!提约里用他标志性的“ISB 曲线”完美地解释了这一点。如果你想了解更多这方面的知识,我想你只需要去听他的课!
Image by author
在我校对这篇博客的时候,我感觉到无论你在何时何地应用这些技巧,它们都会起作用。真正的挑战可能在于你应用它们的一致性…
祝你好运!
附言:如果有其他方法对你有用,请在下面的评论中提出来,让那些在你之后访问这个页面的人受益
我是如何成为一名定量 UX 研究员的
原文:https://towardsdatascience.com/how-i-wound-up-being-a-quantitative-ux-researcher-ed78878ea040?source=collection_archive---------14-----------------------
不完全是数据科学家,但足够接近的话,你几乎分辨不出差别。这是一个相当模糊的位置。大体上,这就是我在数据世界中的结局。目前截至 Q1 2019 年,不知道未来会带来什么。
在戴上“数据科学家”帽子的无数方式中,我坚定地走上了“数据分析师”的道路。在 DS 作为一个领域被锻造的时代,我也陷入了这种情况,所以入门的门槛与今天有很大的不同。但是谁知道呢,也许有人会对我的古怪路线感兴趣。
That mandarin duck in Central Park from 2018. Because why not?
我花了很多时间作为面向内部的资源,为内部团队提供见解和支持,经常帮助项目经理做出产品决策。这在我处理许多问题的方式中留下了印记:我以前说过,但我认为自己是一个力量倍增器,因为我在数据的帮助下帮助人们更好地完成工作。
几年后,我成了一名“定量 UX 研究员”,这个头衔在很多地方似乎并不存在。除了偶尔发布的招聘启事,我唯一能真正提到它的是脸书的一些人写的这篇文章。他们认为 qUXR 与数据科学家有很大的重叠,但更加以用户为中心。
用几段话来概括用户体验研究这样一个庞大而复杂的领域是相当徒劳的,但它最终归结为理解人与产品之间的关系,人们如何以及为什么使用某种东西,它在他们的生活和世界中的位置。这是一个多学科领域,涉及设计、写作、社会科学(如心理学、社会学、人类学、人机交互等)。平均而言,它比当今数据科学领域的数学硬科学形象更具定性/设计性的公众形象。
虽然 UX 研究领域一直利用各种定量方法,如调查和实验,但随着大数据对理解用户变得越来越重要,一个更传统的定性研究人员不具备充分利用可用数据的工程和定量技能的利基开始出现。从那时起,有才华的人(他们本可以做好数据科学家或分析师的工作,但希望更多地关注理解用户)开始填补这个空缺。我就是这样找到去那里的路的。
我是如何来到这里的
我在获得硕士学位后离开了社会科学,来到了数据科学领域。之后,我对一些行业的分析师职位进行了一次大范围的考察。贯穿始终的一条线索是,我在很大程度上是在较小的初创公司(20-150 人),因为我喜欢身兼数职,并且经常以从数据中获取见解来帮助其他团队的角色告终。
在大学期间,我学习了哲学(不仅仅是任何哲学,大陆哲学!)和工商管理(运营管理、决策支持系统)。后来我获得了社会科学硕士学位。在那里,我混合了计算语言学,同时将社会科学理论、方法论和科学哲学灌输到我的头脑中。这大概也是为什么直到现在我还在那么多的谈论“做科学”的原因。
毕业后,我加入了一家重新设计办公室的室内设计公司。他们使用了一种相对新颖的方法,让人们定期在办公室走动,收集空间利用率的定量数据,以证明人们需要多少会议室和桌子。我在那里做了大量的调查和数据分析,学会了从空间质量评级和自由回答的表格中解读人们对工作空间的潜在问题。
在市场崩盘最严重的时候,我曾在一家广告技术公司短暂工作过。这是一个只有 25 个人的小商店,是一扇有毒的旋转门。但它支付了账单,我在那里学会了 SQL(在工作的第一个小时,在一台生产服务器上)。我也知道了我愿意承受的压力程度。我们就此打住。
后来我去了 Meetup,在那里我花时间支持产品开发团队,与项目经理密切合作,帮助团队评估潜在的功能影响,建立和运行测试,并构建大量的报告。同时,我为整个公司提供数据支持,最终帮助了从法律到客户支持的所有人。
最重要的是,我和我团队中的定性研究员是最好的朋友,我们两人将联手接管世界。一起工作,我们将在 qual 和 quant 方法之间流畅地移动,以理解用户,同时熟悉另一方使用的方法。
后来,我搬到了 Bitly ,体验了一下拥有企业客户的企业是什么样的(Meetup 的组织者订阅模式本质上是一种消费者模式)。动态和问题是非常不同的,更强调来自客户的直接反馈和更集中的范围。我也第一次有机会使用合法的大数据——在 Hadoop 堆栈上运行原始 map/reduce 作业,有时做一些愚蠢的事情,如通过 Hadoop 流协议发送 grep 作业。像往常一样,我是员工中唯一的数据分析师,但我们有几个数据科学家在开发新产品,而且以前的员工建立了非常强大的数据驱动文化。
接下来是初级,一个非常小的(<当时只有 30 个人)公司,设计、制造并在网上销售童装。在一家小型创业公司工作,实际上有合法的供应链要处理,这是非常罕见的。他们实际上是在购买布料,将布料运送到工厂,最后运送到仓库,将产品送到顾客家门口。库存管理和成本计算变得非常复杂。这是我第一次成为唯一一个同时帮助构建基础设施和数据文化的数据工程师。
最后,谷歌向我提供了一份我无法拒绝的工作,不是作为一名数据科学家(在谷歌的工作分类中通常被称为分析师),而是一名 Quant UXR。实际上,我已经和分析师聊过了,我们很开心地发现我们的基本技能基本上是一样的。主要的区别确实可以归结为我与产品团队的关系有多密切,以及我对使用工具产生可解释结果的偏好。
工作怎么样?
不要陷入细节,这是一个研究者的角色,所以它最终是寻找(可操作的)洞察力。根据需要,事情有战术性和战略性。准备切换齿轮来处理任何随机出现的情况,并行运行事情。
你可能正在支持一个全新的产品,此时你正在处理所有传统的创业问题,比如微小的样本量、关于市场适合度的问题、了解初始用户、提高采用率和销量、在你的初始垃圾漏斗页面上运行测试等等。
或者,您可以使用更成熟的产品,该产品具有已建立的用户群、多年的历史数据、实际的工具,重点关注用户群中更深奥的部分,处理大数据,以及处理遗留系统和问题。
工具和方法和典型的 ds 一样,各种形式的 SQL,Hadoop,Python,R,Jupyter 笔记本等。电子表格和幻灯片仍然是不可避免的。你仍然要处理从前端延伸到后端的神秘技术,所以你最好把你的技术技能准备好。一天下来,大部分工作仍然是正确计数。
最大的部分可能是与跨职能团队的持续沟通。你将成为战略会议的一部分,在那里你会得到需要用数据来回答的问题。然后介绍调查结果。除此之外,还要进行一般性研究,以确认(或质疑)即将出台的决策。此外,还需要与人合作来实现一些东西,以及一些小的战术工作。
所有典型的声音材料。
接下来去哪里?
截至 2019 年初撰写本文时,还没有任何进展。我一直喜欢通过查看数据墙来了解用户在做什么。这种工作在世界上总会有一席之地,不管它的头衔是什么。
像往常一样,如果你有任何问题,请随时在 twitter 上联系我。
Here’s another duck because it’s cute and I have too many of these photos.
为什么数据对您的业务很重要?
原文:https://towardsdatascience.com/how-important-is-data-for-your-business-c15a35c6935e?source=collection_archive---------10-----------------------
人体有五个感觉器官,每一个都每秒钟从相互作用中传递和接收信息。今天,科学家可以确定人脑接收多少信息,并猜猜是什么!人类一秒钟接收1000 万比特的信息。当计算机通过高速互联网从网上下载文档时,情况类似。
但是,你知道大脑每秒只能处理 30 比特吗?所以,浪费的信息比获得的信息多。
数据无处不在!
人类在 2010 年超越了 zettabyte。(一个 zetta byte = 100000000000000000000 字节。如果你算上的话,那就是 21 个零:P)
人类倾向于每天生成大量数据;从心率到最喜欢的歌曲、健身目标和电影偏好。你可以在企业的每个抽屉里找到数据。数据不再仅仅局限于科技公司。人寿保险、酒店和产品管理等各种业务现在都在使用数据来制定更好的营销策略、改善客户体验、了解业务趋势或只是收集对用户数据的见解。
在当今快速发展的技术世界中,数据量不断增加,这使得对数据的分析变得更加令人兴奋。从用户数据中收集的洞察力现在是决策者的主要工具。我还听说这年头数据是用来衡量员工成功的!现在评估不是容易多了吗?😛
Forbes 称每天产生 2.5 万亿字节的数据,而我从之前的随机阅读中得知,只有 0.5%的数据得到了分析!这是一个令人难以置信的统计数据。
那么,我们到底为什么要讨论数据及其在您业务中的应用呢?鼓励数据依赖的因素是什么?在这里,我列出了 6 个坚实的理由,让你感谢这篇关于为什么数据对你的业务如此重要的文章。
数据分析和可视化方面
我们想象什么?数据?当然可以。但是数据并不简单。
- 可变性:说明事物如何不同,以及不同多少
- 不确定性:良好的可视化实践框架了由数据变化引起的不确定性
- 背景:有意义的背景有助于我们根据数据的潜在变化来构建不确定性
这三个关键抽屉提出了我们在业务中寻求答案的问题。我们在数据分析和可视化方面的尝试应该集中在边缘化上述三点,以满足我们寻找答案的要求。
1.绘制贵公司的绩效图
拥有数十种数据可视化工具,如 Tableau、Plotly、Fusion Charts、Google Charts 等(我的商业数据可视化教授喜欢 Tableau tho!😛)我们现在有机会探索数据的海洋。
当我们专注于创建绩效图时,我们的主要目标是提供有意义的学习体验,以产生真实而持久的业务成果。在选择策略时,绩效图对于推动我们的决策也非常重要。现在让我们把数据放入这幅图中。绩效映射的数据将包括您的员工记录、他们的工作职责、具有可衡量结果的员工绩效目标、公司目标和季度结果。你的生意里有这种东西吗?什么事?数据是给你的!
在数据可视化工具上实现所有这些数据,您现在可以映射您的公司是否达到了预期目标,您的员工是否被分配了正确的任务。想象你的经济在一个期望的时间框架内,并推断出所有对你重要的东西。
2.改善您品牌的客户体验
只要几个不高兴的顾客就会损害甚至破坏你苦心经营的品牌的声誉。有一件事可以让你的组织达到新的高度,那就是客户体验失败了。下一步做什么?
首先,在行为商业的基础上挖掘你的客户数据库。画出选择、关注点、症结、趋势等。跨越不同的消费者旅程接触点,以确定良好体验的改进点。PayPal 的联合创始人麦克斯·拉夫琴提到,“这个世界现在充斥着数据,我们可以更清楚地看到消费者。”顾客的行为现在比以往任何时候都更加明显。我说,既然你认识到了你的用户,就利用这个机会创造一个完美的产品策略来改善你的客户体验。
企业可以利用数据来:
- 寻找新客户
- 跟踪社交媒体与品牌的互动
- 提高客户保留率
- 捕捉客户倾向和市场趋势
- 预测销售趋势
- 提升品牌体验
3.更快地做出决策,更快地解决问题!
如果你的企业有一个网站,一个社交媒体或涉及支付,你正在产生数据!很多。所有这些数据都充满了对公司潜力以及如何改善业务的深刻见解
我们在商业中寻求答案的问题有很多。
- 我们下一步的营销策略应该是什么?
- 我们应该什么时候推出新产品?
- 这是清仓大甩卖的好时机吗?
- 我们应该依靠天气来观察商店的生意吗?
- 您在新闻中看到或读到的内容会影响业务吗?
这些问题中的一些可能已经引起了你从数据中获得答案的想法。在不同的点上,数据洞察力对决策非常有帮助。但是,根据数字和公司业绩信息做出决策有多明智呢?这是一个稳操胜券的,强有力的,增加利润的力量,你不能错过。
4.衡量公司和员工的成功
大多数成功的商业领袖和前台总是依靠某种类型或形式的数据来帮助他们做出快速、明智的决策。
为了详细说明如何从数据中衡量公司和员工的成功,让我们考虑一个例子。假设你有一个销售和营销代表,他被认为是表现最好的,拥有最多的销售线索。但是,在检查您的公司数据时,您发现该代表的成交率低于您的其他员工,他们获得的销售线索较少,但成交率较高。如果不了解这些信息,您将继续向表现不佳的销售代表发送更多的销售线索,并从未成交的交易中损失更多的钱。
所以现在,从数据中你知道谁是表现更好的员工,什么对你的公司有用。数据让你更清晰,这样你就能获得更好的结果。看多了数字,你倒多了见识。
5.了解你的用户、市场和竞争
数据和分析可以帮助企业预测消费者行为,改善决策,市场趋势,并确定其营销工作的投资回报率。当然可以。你越清楚自己的消费者,就越容易接触到他们。
我非常喜欢这篇文章中介绍的测量、分析和管理的想法。在为你的企业分析数据以了解你的用户、你的市场范围和竞争对手时,相关性是非常重要的。
你根据什么因素和什么信息来分析数据?
- 产品设计:关键词可以准确揭示你的客户在寻找什么样的功能或解决方案。
- 客户调查:通过检查关键词频率数据,你可以推断出竞争利益的相对优先级。
- 行业趋势:通过监控关键词频率的相对变化,你可以识别和预测客户行为的趋势。
- 客户支持:了解客户最头疼的地方,以及应该如何部署支持资源。
结尾注释
在当今快速发展的技术世界中,使用数据并借助数据来运营您的业务是新的标准。如果你不使用数据来引导你的企业走向未来,你肯定会成为一个过去的企业!幸运的是,数据分析和可视化方面的进步使得利用数据发展业务变得更加容易。分析您的数据,获得您需要的洞察力,用数据推动您的公司走向未来。
了解你的作者
Rashi 是一名研究生、UX 分析师和顾问、商业开发人员、技术演讲人和博客作者!她渴望建立一个组织,将商界女性与资源海洋联系起来,让她们对工作和世界充满无畏和激情。请随意给她留言这里!
数据科学如何改变世界?
原文:https://towardsdatascience.com/how-is-data-science-changing-the-world-db0c4b3cdb8?source=collection_archive---------14-----------------------
在本文中,您将了解数据科学家所扮演的角色。围绕数据科学有一层神秘的面纱。虽然数据科学的流行词已经流传了一段时间,但很少有人知道成为数据科学家的真正目的。
所以,我们来探讨一下数据科学的目的。
数据科学的目的
数据科学的主要目的是发现数据中的模式。它使用各种统计技术来分析数据并从中得出真知灼见。从数据提取、争论到预处理,数据科学家必须彻底审查数据。然后,他有责任从数据中做出预测。数据科学家的目标是从数据中得出结论。通过这些结论,他能够帮助公司做出更明智的商业决策。我们将把这个博客分成几个部分,以便更详细地理解数据科学家的角色。
为什么数据很重要
数据是新的电力。我们生活在第四次工业革命的时代。这是人工智能和大数据的时代。大规模的数据爆炸催生了新技术和更智能的产品。大约每天产生 2.5 艾字节的数据。在过去的十年里,对数据的需求急剧增加。许多公司已经将他们的业务集中在数据上。数据创造了 IT 行业的新领域。然而,
- 我们为什么需要数据?
- 为什么行业需要数据?
- 是什么让数据成为珍贵的商品?
这些问题的答案在于企业寻求产品转型的方式。
数据科学是一个非常新的术语。在数据科学出现之前,我们有统计学家。这些统计学家在数据的定性分析方面经验丰富,公司雇佣他们来分析他们的整体业绩和销售。随着计算过程、云存储和分析工具的出现,计算机科学领域与统计学相结合。这催生了数据科学。
早期数据分析基于调查和寻找公共问题的解决方案。例如,对一个地区的一些孩子的调查将导致该地区学校发展的决定。在计算机的帮助下,决策过程被简化了。因此,计算机可以解决更复杂的统计问题。随着数据开始激增,公司开始意识到其价值。它的重要性体现在许多旨在提升客户体验的产品上。各行各业都在寻找能够挖掘数据潜在价值的专家。数据可以帮助他们做出正确的商业决策,实现利润最大化。此外,它给了公司一个机会,根据客户的购买模式来检查客户的行为并采取行动。数据有助于公司提升收入模式,并帮助他们为客户打造更高质量的产品。
数据对于产品就像电对于家用电器一样。我们需要数据来设计迎合用户的产品。这是驱动产品并使其可用的因素。数据科学家就像雕刻家。他篡改数据,从中创造出一些有意义的东西。虽然这可能是一项单调乏味的任务,但数据科学家需要具备正确的专业知识来提供结果。
数据科学为什么重要?
数据创造神奇。行业需要数据来帮助他们做出谨慎的决策。数据科学将原始数据搅拌成有意义的见解。所以,行业需要数据科学。数据科学家是知道如何利用数据创造奇迹的巫师。一个熟练的数据科学家将知道如何从他遇到的任何数据中挖掘出有意义的信息。他帮助公司朝着正确的方向发展。公司需要强有力的数据驱动决策,而他是这方面的专家。数据科学家是统计学和计算机科学各个基础领域的专家。他运用他的分析才能来解决商业问题。
数据科学家非常擅长解决问题,被指派在数据中寻找模式。他的目标是识别多余的样本,并从中获得洞见。数据科学需要各种工具从数据中提取信息。数据科学家负责收集、存储和维护结构化和非结构化形式的数据。
虽然数据科学的角色侧重于数据的分析和管理,但它取决于公司的专业领域。这要求数据科学家具备特定行业的领域知识。
以数据为中心的行业的目的
如上所述,公司需要数据。他们需要数据驱动的决策模型和创造更好的客户体验。在本节中,我们将探讨这些公司关注的特定领域,以便做出更智能的数据驱动型决策。
I .数据科学促进更好的营销
公司正在使用数据来分析他们的营销策略,并制作更好的广告。很多时候,企业在营销他们的产品上花费了天文数字。这有时可能不会产生预期的结果。因此,通过研究和分析客户反馈,公司能够创作出更好的广告。这些公司通过仔细分析客户的在线行为来做到这一点。此外,监控客户趋势有助于公司获得更好的市场洞察力。因此,企业需要数据科学家来帮助他们在营销活动和广告方面做出强有力的决策。
二。获取客户的数据科学
数据科学家通过分析客户的需求来帮助公司获得客户。这使得公司可以根据潜在客户的需求定制最适合的产品。数据是公司了解客户的关键。因此,数据科学家的目的是让公司能够识别客户,并帮助他们满足客户的需求。
三。数据科学促进创新
公司利用丰富的数据创造更好的创新。数据科学家通过分析和创造传统设计中的洞察力来帮助产品创新。他们分析顾客的评论,并帮助公司制作一个与评论和反馈完美契合的产品。利用客户反馈的数据,公司可以做出决策,并朝着正确的方向采取适当的行动。
四。丰富生活的数据科学
客户数据是改善他们生活的关键。医疗保健行业使用他们可用的数据来帮助他们的客户的日常生活。这些行业中的数据科学家的目的是分析个人数据、健康史,并创造产品来解决客户面临的问题。
从以上以数据为中心的公司的实例来看,很明显每个公司使用数据的方式都不同。数据的使用因公司要求而异。所以数据科学家的目的取决于公司的利益。
数据科学家的其他技能
现在,在这篇关于数据科学目的的博客中,我们将看到数据科学家还需要哪些其他的技能。在本节中,我们将探讨数据科学家的工作如何超越分析数据和从数据中获取洞察力。除了使用统计技术得出结论,数据科学家的目标是与公司交流他的结果。数据科学家不仅需要精通数字运算,还应该能够翻译数学术语,以便做出正确的商业决策。
例如,假设一名数据科学家正在分析公司的月销售额。他使用各种统计工具对数据进行分析并得出结论。最终,他获得了需要与公司分享的成果。数据科学家需要知道如何以非常简洁和简单的方式交流结果。管理销售和分销的人可能不理解技术结果和过程。因此,数据科学家必须会讲故事。数据的讲述将使他能够毫无困难地将其知识传递给管理团队。因此,它拓宽了数据科学家的目的。
数据科学是管理和 IT 的结合。数据科学家的目的不仅仅限于数据的统计处理,还包括管理和交流数据,以帮助公司做出更好的决策。
所以,这一切都是为了数据科学。希望你喜欢我们的文章。
摘要
在文章的最后——数据科学的目的,我们得出结论,数据科学家是数据密集型公司的中坚力量。数据科学家的目的是提取、预处理和分析数据。通过这一点,公司可以做出更好的决策。各个公司都有自己的要求,并相应地使用数据。最终,数据科学家的目标是让企业发展得更好。根据所提供的决策和见解,公司可以采取适当的策略并进行自我定制,以增强客户体验。
尽管如此,如果你有任何关于数据科学目的的问题,请通过评论自由提问。我们一定会回复你的。
机器学习与统计学有什么不同,为什么它很重要
原文:https://towardsdatascience.com/how-is-machine-learning-different-from-statistics-and-why-it-matters-5a8ed539976?source=collection_archive---------14-----------------------
Photo by Daniel Prado on Unsplash
统计学和机器学习的异同是一个引发大量讨论的话题。许多高质量的文章和帖子已经从不同的角度解决了这个问题(尤其参见下面的参考文献[1–5])。这篇文章的目的是 a)总结这个主题的大量工作 b)补充我的观点 c)包括有用的比较。
关键点是:
- 机器学习使用统计数据来理解和基准测试数据以及验证模型
- 在某些问题中,人们可以互换统计建模或机器学习(也称为经典 ML)——逻辑回归就是一个例子
- 深度学习是过去几年来炙手可热的机器学习的一个子集,它远远超出了统计方法,为全新类别的问题(如计算机视觉)提供了解决方案,正是在这里,ML 和统计之间的对比非常明显
- 业务目标、技术或其他资源限制决定了哪种方法最适合给定的问题——每种方法都有自己的优势和局限性——在现实世界的问题中,我们可以使用混合方法(例如,逻辑回归用作第一步,然后是深度学习)
先说统计学和机器学习的定义。然后,我们将进一步了解重叠、差异以及这两个领域如何在数据科学和分析的生命周期中共存。
- 统计学是数学的一个分支。 统计建模是将数据中变量之间的关系以数学方程的形式形式化。有两个主要的思想流派:频率主义者和贝叶斯主义者(基于概率——数学的另一个分支,处理预测未来事件的可能性)。当你需要更多地了解数据和估计量的性质时,统计学通常应用于低维问题。估计量属性的常见示例包括 p 值、标准差、置信区间或无偏估计量。注:统计学使用概率论和分布。
- 机器学习(ML)是计算机科学和人工智能的一个子领域。ML 处理构建系统(算法,模型),这些系统可以从数据和观察中学习,而不是显式编程的指令(例如规则)。
《自然》[3]上的这篇论文很好地总结了这种差异。
统计学从样本中得出总体推断,机器学习找到可概括的预测模式。【3】
下面简单总结一下统计学和机器学习的区别。
Comparison of Statistics and ML (multiple sources)
正如麦肯锡【4】的论文中所指出的,ML 算法通常远比它们的统计对应物复杂,并且通常需要在训练过程开始之前做出设计决策。ML 的优势包括卓越的性能和准确性,但其复杂性导致 ML 的解释、偏差和合规性面临额外的挑战。这不仅仅是一个技术问题。该文件正确地指出,所需的可解释性程度是一种政策选择。
特征工程 — ML 更复杂是因为特征工程固有的困难——也就是用哪些特征?每个功能的声音如何?是否符合政策?本文指出了与特征工程相关的三个因素:
- 大量输入
2.非结构化数据(如语音)需要特征工程作为训练开始前的预处理步骤
3.AutoML 可以生成大量复杂的特征来测试数据的许多转换,这会增加不必要的复杂性
超参数也是机器学习中的一个挑战。在训练过程开始之前,必须定义随机森林模型中的树的深度或深度神经网络中的层数。关于超参数的决策通常比统计建模中的类似决策更复杂。
不同的模型类型有自己的怪癖。当像支持向量机这样的二进制分类器通常与 NLP 结合来做出决定时,在这些情况下,性能将对所选择的核函数敏感。
ML 工作流程中的统计数据
考虑具有四个阶段的 ML 工作流的简化版本: (1)获取数据(2)准备数据(3)建模(4)验证。统计是可靠数据准备和合理验证的关键,通常用作建模过程的一部分。
Four Phases of ML and Statistics
数据探索—通常是分析师、数据科学家执行的第一步—由统计数据提供信息。那么预处理是由问题的性质和业务需求驱动的。
当我们想要从总体中创建科学上可靠的样本数据时,也会用到统计学。术语' S 统计显著'总体样本 —意思是我们想要创建合适大小的代表性数据集(样本),然后可以用于 ML。这一步是减少 ML 中一类偏倚的关键。
验证
我们如何验证我们有代表性的样本?公认的方法是检查样本的 p 值,以确保其超过 5%的置信水平(即通过显著性测试)。数值型变量必须用 Kolmogorov-Smirnov 检验,而分类型变量需要用 Pearson 的卡方检验。例如,Bootstrap 是一种重采样方法。
统计学对于从数据中识别和减轻样本或测量偏差也很重要。验证者需要确定开发人员是否采取了必要的步骤来确保公平性。可以对模型进行公平性测试,如果有必要,可以在模型开发过程的每个阶段进行修正,从设计阶段一直到性能监控。
根据美联储银行的金融服务指南[ 美联储 SR11–7],适当的统计测试取决于具体的分布假设和模型的目的。此外,在许多情况下,基于样本信息,统计检验不能明确地拒绝错误的假设或接受正确的假设。
《华尔街日报》最近的一篇文章谈到了金融机构在升级统计模型时如何应对洗钱的挑战。例子故事。例如,U. S. Bancorp 过去一直使用规则来检测欺诈。现在,它拥有 ML 人员和工具来运行更高级的搜索,根据更多的指标来标记那些看起来与其他人有统计差异的客户。
统计和 ML 经常一起使用来提供一个健壮的解决方案。
迷失在翻译中?
很多时候,统计建模和 ML 使用非常相似的方法,因此相互重叠。
逻辑回归-逻辑回归是机器学习从统计领域借用的一种技术。这是一种广泛用于二分类问题的方法,但也可以扩展到多类问题。
这里列出了一些意思相似但名称不同的术语。
Statistics and ML — Terms with Different Names, Similar Meaning
然后对推论有了不同的理解。以下是来自 Quora 帖子的一段经过编辑的摘录:
在统计推断中,我们观察到一些数据,我们想说一些关于产生这些数据的过程的知识。因此,预测、估计误差线、假设检验和参数估计都是统计推断的一部分。
另一方面,来自计算机科学传统的传统机器学习研究人员通常喜欢区分学习和推理。学习与参数估计相关联,并且不被明确地认为是推理问题。因此,术语“推断”的概念比统计学家的概念要窄,被认为是一种预测。例如,在图像处理问题中,给定具有许多缺失像素值的图像,我们可能想要从我们学习的联合分布中填充缺失像素的最可能值。
总结一下,统计学和 ML 有关键的区别。特别是深度学习为解决以前难以解决的问题打开了大门,不需要手工设计功能、深入的领域知识或做出假设,这使它比任何其他分析方法都有优势。
为什么重要?
作为一名实践数据科学家或 ML 工程师,你需要了解统计学的基础知识。是的,你可以在不知道原因的情况下使用现有的库,但是在处理现实世界的问题时,你不会总是遵循一种千篇一律的方法。这就是统计理论的适当知识会有所帮助的地方。我认识许多数据科学家,他们一开始是统计学家,他们带来了一个重统计的观点。转向 ML 的软件工程师带来了另一种观点。
如果你正在招聘、资助或帮助创建数据科学实验室、卓越中心或实践中心,你需要留意这些趋势,并努力平衡团队的角色和思维类型。
让我们以一个轻松的音符结束——作者乔·戴维森【2】。
“当你筹款的时候,它是人工智能。当你在招人的时候,就是 ML。当你实施时,这是逻辑回归。”
希望这篇文章对你有所帮助。查看我的其他文章,并随时在 LinkedIn 上与我联系。
参考资料和阅读材料
- 马修·斯图尔特,博士研究员—https://towards data science . com/the-actual-difference-between-statistics-and-machine-learning-64b 49 f 07 ea 3
- 乔·戴维森—https://towards data science . com/no-machine-learning-is-not-just-glorized-statistics-26d 3952234 E3
- 达尼洛·布兹多克、娜奥米·奥特曼和马丁·克日温斯基——统计学对机器学习https://www.nature.com/articles/nmeth.4642
- https://www . McKinsey . com/business-functions/risk/our-insights/derisking-machine-learning-and-artificial-intelligence
- https://www . quora . com/What-is-the-difference-of-inference-and-learning
- https://stats . stack exchange . com/questions/6/the-two-cultures-statistics-vs-machine-learning
- 罗布·提布拉尼——http://statweb.stanford.edu/~tibs/stat315a/glossary.pdf
- 统计建模:两种文化作者 Leo Breiman 。http://projecteuclid.org/euclid.ss/1009213726
- https://www . slide share . net/benjaminskrinka/essential-ecometrics-for-data-scientists
- https://machine learning mastery . com/relationship-between-applied-statistics-and-machine-learning/
- https://www . kdnugges . com/2016/11/machine-learning-vs-statistics . html
- Phani Srikanth—https://medium . com/data-science-analytics/statistical-learning-vs-machine-learning-f 9682 FDC 339 f
- https://normal deviate . WordPress . com/2012/06/12/statistics-vs-machine-learning-5-2/
- https://www . quora . com/What-is-the-difference-of-inference-and-learning
- https://stats . stack exchange . com/questions/5026/what-is-the-difference-data-mining-statistics-machine-learning-and-ai
- https://medium . com/datadriveninvestor/differences-between-ai-and-machine-learning-and-why-it-matters-1255 b182 fc6
- https://HBR . org/2019/07/building-the-ai-powered-organization,https://HBR . org/2019/03/why-data-science-teams-need-通才-非专家
机器学习是如何革新药物发现的?
原文:https://towardsdatascience.com/how-is-machine-learning-revolutionizing-drug-discovery-25bfc8c0f0dc?source=collection_archive---------18-----------------------
每次一种新药的发现都会在公众和学术界引起兴奋,主要是当它能治愈一种不治之症时。
无论是治疗罕见的精神疾病还是癌症,药物研发一直是卫生保健发展和人类福祉的关键因素。
每个人都知道药物研发是一项昂贵的事业。此外,有时需要数年时间才能找到全球流行病的正确疗法。据估计,一家制药公司平均花费 10-15 年时间和大约 40 亿美元将新药推向市场。
一旦药物配制完成,就该进行测试了。临床试验非常重要,因为它决定了药物的疗效。为此,制药公司需要准备好承受治疗带来的一切的志愿者。
这个过程是如此的危险,以至于它可以将任何制药公司的生存置于严重的危险之中。制药公司必须在对每个志愿者进行实验之前为他们“投保”,这增加了整体研发支出。
像阿尔茨海默氏症和帕金森氏症这样影响中枢神经系统的疾病是无法治愈的。它也没有疫苗可以预防这种情况的发生。
机器学习在这里有什么帮助?
创造一种新药的整个过程会产生大量数据。机器学习为处理化学数据和创造有助于药物开发的结果提供了一个绝佳的机会。
机器学习可以帮助我们在很短的时间内处理多年来收集的数据。此外,它将帮助我们做出更明智的决定,而不是通过预测和实验。
麦肯锡表示,如果我们充分利用大数据和机器学习的潜力,那么它可以帮助医疗保健行业每年创造 3000 亿美元的收入。
专家预测,机器学习可以帮助生物过程的预测建模。这将有助于我们在更短的时间内开发出成功的药物。
与实施相关的挑战
使用机器学习处理数据存在许多挑战。然而,今天并不缺乏数据收集。我们今天面临的唯一挑战是培养和处理产生的复杂数据。
药物开发和机器学习——一个理想的匹配?
人工智能、人工智能、增强现实、虚拟现实和磁共振等新兴技术将成为医疗保健领域最重要的技术。医院和制药公司每天都会产生大量的数据。
通过人工智能和人工智能处理这些数据也有助于找到一些不治之症的正确疗法。这些 AI 和 ML 算法将帮助我们建立新的分子,并事先识别每种药物的生物效应。
2018 年 5 月,8 家大型制药公司和麻省理工学院的研究人员组成了一个新的联盟,该联盟将专注于 ML 在药物发现过程中的应用。
像无锡、辉瑞、安进、拜耳、Sunovion、诺华、礼来和巴斯夫这样的大型研究公司都是 MLPDS(药物发现和合成的机器学习)的一部分。
他们着眼于研究领域,如实验设计,毒性,分子表现和结合亲和力。目前,他们正在使用 ML 工具来计算各种疾病药物的确切配方。
麻省理工学院的研究人员发明了一种智能 WiFi 盒子,可以监测各种各样的生理信号,如步态、呼吸、移动性、行为、睡眠和心率。基于这些因素,ML 算法分析一个人的身体是如何受到影响的。
他们使用传感器传输生理信号,这有助于识别药物如何影响患者的生理状况和疾病进展。这些数据可以帮助我们缩短临床试验的时间,降低成本,并提高对结果的信心。
其他公司
除了这些机构和公司,还有其他参与者也在研究机器学习在药物发现中的应用。
DeepMind Health 一直在推动与穆尔菲尔德眼科医院、伦敦大学学院医院 NHS 基金会、美国退伍军人事务部和英国帝国癌症研究中心等医院的研究。
DeepMind Health 与谷歌的人工智能健康团队和领先的临床医生联盟合作,正在研究如何在乳房 x 光照片中识别乳腺癌的迹象。
乳腺癌每年在世界范围内夺去 50 万人生命的主要原因是因为不准确的检测。乳房筛查有时会检测出癌症,即使它并不存在。而有时,它甚至无法检测到癌症的最后阶段。
DeepMind Health 的目标是使用机器学习算法来仔细分析来自约 7500 名女性的历史非个性化乳房 x 光片,并提高筛查报告的质量。
规章制度
药物开发中与 ML 相关的最大风险之一与偏倚有关。被选择用于处理的数据集可能属于特定的遗传学组。因此,新药可能只对某一组病人有效。
此外,技术人员将不得不说服像 FDA 和 EMA 这样的组织批准药品供公众使用。机器学习在药物发现中的好处和应用还停留在理论上。随着制药公司将其付诸实践,将会出现许多问题。
制药公司对机器学习的接受需要时间,它对行业和我们生活的影响也需要时间。让制药公司、研究人员和监管机构参与关于实施 ML 以及如何实现其全部潜力的对话至关重要。
最后的想法
从上面的讨论可以明显看出,m1 在药物发现和制药工业中具有惊人的潜力。但是,要把它付诸实践,还需要一些润色和强化。
来自麻省理工学院和 2018 年 DARPA Riser 的研究生 Connor Coley 表示,机器学习一直是制药和药物发现行业的一部分,但主要是以结构-性质回归的形式。人们现在已经开始意识到它将改变发展模式的潜力。
由百科全书的首席执行官 Sandeep Agarwal 撰写。
千禧一代对 Robinhood vs. Motley Fool 股票顾问的投资选择
原文:https://towardsdatascience.com/how-is-millennials-investment-choice-compared-to-motley-fool-stock-advisor-6bfe6dbf9cc1?source=collection_archive---------14-----------------------
Photo by Sabine Peters on Unsplash
(这篇文章也可以在我的博客上看到)
Robinhood 是一家受欢迎的交易经纪商,由于其革命性的 0 佣金服务,其用户群主要是千禧一代。The Motley Fool 是一家在互联网上提供金融信息的金融服务公司。杂色傻瓜向订阅用户提供每周股票推荐。该公司声称,他们的专家汤姆和大卫挑选的股票远远跑赢市场。
在这篇文章中,我将比较傻瓜投资组合(最近挑选的股票)和千禧一代投资组合(Robinhood 透露的热门股票)的表现。
一起
傻瓜精选:交易台(TTD)、Appian (APPN)、Zscale (ZS)、Twilio (TWLO)、Zoom Video Communications (ZM)、废物管理(WM)、星巴克(SBUX)、马西莫(MASI)、亚马逊(Amazon)、Zynga (ZNGA)和 SolarEdge Technologies (SEDG)。
千禧一代的选择(T4 榜单前十名):奥罗拉大麻(Aurora Cannabis)、通用电气(GE)、福特(Ford)、Fitbit、GoPro (GPRO)、克罗诺斯集团(CRON)、Hexo (HEXO)、Canopy Growth (CGC)、Snap (SNAP)、Plug Power (PLUG)和 Zynga (ZNGA)。
仔细观察,我们会发现愚人的投资组合似乎比另一个更多样化。它包含科技、消费者和高股息股票。而罗宾汉的用户主要关注科技股和大麻股。
most popular stock list by Robinhood as of the date of this post
我用来比较策略的工具是 StockOptimizr 。StockOptimizr 可以根据历史数据(1 年、2 年或 4 年)计算给定股票列表的最佳分配。衡量投资组合好坏的指标是夏普比率。夏普比率衡量回报/风险的比率。夏普比率高意味着投资组合的收益相对较好,风险相对较低。在这个对比中,我只关注 1 年的历史数据。以下是愚人组合的表现。它强调,在 10 只股票中,只有几只包含在最优分配中。分别是 Appian (7.97%)、Startbucks (38.41%)、SolarEdge(13.56%)、废物管理(39.66%)和 Zynga (0.39%)。今年的总回报率为 59.24%,夏普比率为 2.75。这是相当不错的相比,市场(间谍)只获得约 9%。
Fools’ performance with SPY in one year
现在,让我们来看看千禧一代是如何做的。如下,我们发现,甚至更少的股票被用来做一个最佳的投资组合。只有 Plug Power (21.39%)和 Snap (78.61%)在最优组合中。这可能是因为去年马里胡阿那的股票波动太大。与傻瓜的投资组合 59.24%相比,该投资组合的回报率高达 77.46%。不过值得一提的是夏普比率要低很多,只有 1.35。它的高回报是以承担更多风险为代价的。这也反映出我们的年轻一代愿意为高潜在收益而冒险。
Portfolio built by Top 10 popular stocks in Robinhood
尽管数字是量化的,但很难判断哪个投资组合比另一个更好。这得由你自己的需要来衡量。一般来说,年轻一代有时间为高回报去冒险。老一辈可能倾向于购买更安全的高股息股票。但是应该适用于所有人的几个重要规则是分散投资和存足够的钱进行长期投资。
注来自《走向数据科学》的编辑: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。
我的帖子:
我关于金融和科技的帖子
我的 YouTube 频道
我关于 FAANG 访谈的帖子
从 CRUD web 应用开发到语音助手中的 SDE——我正在进行的机器学习之旅
全栈开发教程:将 AWS Lambda 无服务器服务集成到 Angular SPA 中
全栈开发教程:用运行在 AWS Lambda 上的无服务器 REST API 提供交易数据
全栈开发教程:在 Angular SPA 上可视化交易数据
强化学习:Q 学习简介
半监督学习中静悄悄的革命是如何改变行业的?
原文:https://towardsdatascience.com/how-is-the-quiet-revolution-in-semi-supervised-learning-changing-the-industry-4a25f211ce1f?source=collection_archive---------18-----------------------
Photo by @penguinuhh
混合匹配、无监督数据扩充和 PATE 方法
作为一名辅修计算机科学的人类学学生,我想尽我最大的努力去理解这一发展,以及当它实现时会有什么样的后果。然而,首先,我们必须运行的变化和技术,使一个可行的半监督学习方法的实际方面。然后,我将跳转到一些技术,这些技术结合起来,可能会改变我们在机器学习中处理这一领域的方式。
这是我三天看三个问题的最后一天。
第一天:谷歌如何成为人工智能领域的领跑者?(完成)
第二天:无监督数据增强(UDA)的半监督学习(SSL)取得了哪些进展,为什么它对人工智能领域很重要?(完成)
第三天:SSL 的悄然革命如何改变行业?
今天是最后一天,我将写下这场静悄悄的半监督革命。我将从这个术语是如何产生的开始;以前的惯例;以及 SSL 格局是如何变化的。之后我将很快结束发言。
谁创造了安静的半监督革命?
5 月 15 日,谷歌首席科学家 Vincent Vanhoucke 发表了一篇名为半监督革命的文章。据我所知,这是第一次提到以这种方式使用 SSL 的变化。
他首先谈到了半监督学习(SSL)之前的问题。由于要访问大量数据、有限的监督数据和大量未标记的数据,SSL 似乎是一个显而易见的解决方案。他在图表上展示了他的观点,这些图表通常来自监督和半监督实验。
Illustrative graph by Vincent Vanhoucke
根据 Vanhoucke 的说法,一名机器学习工程师经历了一段旅程,最终回到了图中所示的监督学习。
Illustrative graph by Vincent Vanhoucke
但是他接着说:
一个有趣的趋势是,半监督学习的前景可能会变得更像这样:
Illustrative graph by Vincent Vanhoucke
以前的惯例是什么?
对于工程师来说,SSL 被描述为一个兔子洞,几乎是一种成年仪式,最终只能回到数据标记上来。根据 Vanhoucke 的说法,以前的惯例是:
…首先学习未标记数据的自动编码器,然后对标记数据进行微调。几乎没有人再这样做了,因为通过自动编码学习到的表示往往会在经验上限制微调的渐近性能。
那么什么是自动编码器呢?我们来分析一下。
Autoencoder 是一种人工神经网络,用于以无监督的方式学习高效的数据编码。自动编码器的目的是通过训练网络忽略信号“噪声”来学习一组数据的表示(编码),通常用于降维。随着缩减侧,学习重构侧,其中自动编码器试图从缩减的编码中生成尽可能接近其原始输入的表示,因此得名。
- 输入空间的维度。高维空间(100 或 1000)。空间的体积增加太多,数据变得稀疏。例如,计算优化问题中的每个值的组合。如果你想要一个神秘的倾斜,这一点可以被称为维度诅咒。
渐近线在数学中用来指在无穷远处与曲线相切的直线。 计算复杂性中的渐近符号 是指定义域和值域为 Z+的函数的极限行为,对于定义域大于特定阈值的值有效。因此,这里我们用曲线来近似曲线。通常,优选地,我们寻找紧密跟踪原始曲线的曲线。
- 渐近性能是一种比较算法性能的方法。你可以抽象出底层的细节(例如精确的汇编代码);调查缩放行为(对于非常大的输入,哪种方式更好?).渐近性能:随着输入大小的增长,执行时间如何增长?
Vanhoucke 声称:
…即使是大幅改进的现代生成方法也没有改善这种情况,可能是因为好的生成模型不一定就是好的分类器。因此,今天当你看到工程师微调模型时,通常是从在监督数据上学习的表示开始的…
什么是生成方法?
生成学习是一种理论,涉及到新思想与学习者现有图式的积极整合。生成性学习的主要思想是,为了理解地学习,学习者必须主动构建意义。生成模型仅适用于概率方法。在统计分类中,包括机器学习,两种主要的方法被称为生成方法和鉴别方法。下面显示了生成分类器(联合分布):
是什么改变了 SSL 的前景?
昨天我写了一篇文章,名为谷歌人工智能和半监督学习的发展。文章首先经过了讲解无监督学习、监督学习和强化学习。然后,它继续解释半监督学习(SSL)以及如何利用无监督数据增强(UDA)对 SSL 进行研究。因此,如果你不熟悉这些术语,最好跳回那篇文章。
无论如何,有一些进步提到了向 SSL 的可用性增加的转变。你可能想看看这三个流行的:
- 提高精度的组合方法。MixMatch:半监督学习的整体方法
- 利用无监督数据扩充更好地处理未标记数据
- 维护隐私。PATE 方法(从私人训练数据进行深度学习的半监督知识转移,利用 PATE 进行可扩展的私人学习
有一些新的聪明的方法来给数据贴上自我标签,并表达损失,这些方法与自我标签的噪音和潜在偏见更加兼容。与前两点相匹配的两个最近的工作例证了最近的进展并指向相关文献: MixMatch:半监督学习的整体方法和非监督数据增强。
在 MixMatch 论文中,他们介绍了 MixMatch ,这是一种 SSL 算法,它提出了一种单一损失,统一了半监督学习的主流方法。与以前的方法不同,MixMatch 同时针对所有属性,我们发现它有以下好处:
- 在一项实验中,他们表明 MixMatch 在所有标准
图像基准上获得了最先进的结果(第 4.2 节),例如在具有 250 个标签的 CIFAR-10
上获得了 11.08%的错误率(相比之下,次优方法获得了 38%)。 - 他们在消融研究中表明,MixMatch 大于其各部分的总和。
- 他们证明了 MixMatch 对于不同的私人学习是有用的,使 PATE 框架中的学生能够获得新的最先进的结果,
同时加强了提供的隐私保证和实现的准确性。
一致性正则化通过利用分类器即使在被增强后也应该为未标记的示例输出相同的类分布的思想,将数据增强应用于半监督学习。MixMatch 通过对图像使用标准数据扩充(随机水平翻转和裁剪)来利用一致性正则化的形式。
MixMatch 是一种“整体”方法,它结合了主流 SSL 范例的思想和组件。
MixMatch 是由 Google Brain 团队的成员作为半监督学习方法引入的,它结合了当前半监督学习的主流范式的思想和组件。
通过对半监督和隐私保护学习的大量实验,我们发现在他们研究的所有设置中,MixMatch 与其他方法相比表现出显著改善的性能,错误率通常降低两倍或更多。
在未来的工作中,他们有兴趣将来自半监督学习文献的额外想法融入混合方法,并继续探索哪些组件会产生有效的算法。
另外,大多数关于半监督学习算法的现代工作都是在图像基准上进行评估的;他们对探索 MixMatch 在其他领域的有效性很感兴趣。
使用 UDA 的 SSL。由于获得无标签数据比获得有标签数据容易得多,所以在实际操作中,我们经常会遇到
的情况,即无标签数据的数量与有标签数据的数量差距很大。
为了使 UDA 能够利用尽可能多的未标记数据,他们通常需要一个足够大的
模型,但是一个大模型很容易使有限大小的监督数据过拟合。
为了解决这个困难,他们引入了一种新的训练技术,叫做训练信号退火。TSA 背后的主要直觉是,随着模型在越来越多的未标记示例上进行训练,逐渐释放已标记示例的训练信号,而不会过度拟合它们。
锐化预测。我们观察到,在问题很难并且标记的
例子的数量非常少的情况下,在未标记的例子和增强的未标记的例子
上的预测分布在类别间趋于过度平坦。
基于置信度的屏蔽。屏蔽掉模型不确定的例子。
【可扩展私学】同 PATE 。我将摘录 2018 年 2 月 24 日发布的论文摘要:
机器学习的快速采用增加了对基于敏感数据(如医疗记录或其他个人信息)训练的机器学习模型的隐私影响的担忧。为了解决这些问题,一种有前途的方法是教师集合的私人聚合,或 PATE,它将“教师”模型集合的知识转移到“学生”模型,通过在不相交的数据上训练教师来提供直观的隐私,并通过教师答案的嘈杂聚合来保证强隐私。
结论
使用 UDA 的 SSL 非常类似于根据您刚刚看到的内容重新创建,以便在计算的意义上理解视觉印象。MixMatch 结合了许多方法来使 SSL 更好地工作。PATE 是维护隐私所必需的。当学习必须在需要知道的基础上进行时,SSL 还可以提议保护隐私,这些数据可能是您事先不知道(或不允许知道)的。因此,在这种情况下,提高准确性非常重要,并且可能会使行业变得更好。
这是#500daysofAI 的第 41 天。
希望你喜欢这篇文章,如果有机会记得给我反馈。正如我在引言中提到的,我尽我所能去理解,我写作是为了学习。
祝你一切顺利。
什么是#500daysofAI?
我在挑战自己,用#500daysofAI 来写下并思考未来 500 天的人工智能话题。一起学习是最大的快乐,所以如果你觉得一篇文章引起了共鸣,请给我反馈。
2019 年学数据科学的感受
原文:https://towardsdatascience.com/how-it-feels-to-learn-data-science-in-2019-6ee688498029?source=collection_archive---------1-----------------------
透过(决策树)看到(随机)森林
以下受文章 启发,2016 年 学习 JavaScript 的感受。 不要把这篇文章看得太重。这是讽刺,所以不要把它当作实际的建议。像所有的建议一样,有些是好的,有些是糟糕的。这一块只是一个观点,很像人们对数据科学的定义。
我听说你是要去的人。谢谢你见我,也谢谢你的咖啡。你懂数据科学吧?
嗯,我知道这件事。我去年去了PyData和 奥赖利地层 做了几个模型。
是的,我听说你上周给我们公司做了一个很棒的关于机器学习的报告。我的同事说这真的很有用。
哦,猫狗照片分类器?好的,谢谢。
反正我已经决定不能再忽视数据科学、人工智能、机器学习。多年来,我一直是一名分析师和顾问,在 Excel 工作簿中处理数字,制作数据透视表和图表。然而 我一直在看文章说人工智能会抢走工作,甚至像我这样的白领。
This is all you need to become a confident data scientist (as of 2013). Totally achievable, right? (SOURCE: Swami Chandrasekaran)
我在谷歌上搜索了如何成为一名数据科学家,找到了这张“路线图”,并了解了什么是生存危机。让我问你这个问题:我真的必须掌握这个图表中的一切才能成为一名数据科学家吗?
简短的回答,没有。没有人再使用这个路线图了。是 2013 年的。它甚至没有张量流,你可以在这个图表中完全画出一些路径。我认为“数据科学”在那个时候也变得更加分散和专业化。采取不同的方法可能更好。
好吧,这让我感觉好一点了。那我该回学校吗?我在某处读到很多数据科学家至少有硕士学历。我应该获得数据科学硕士学位吗?
天哪,你为什么要这么做?你必须警惕“数据科学”课程,它在很大程度上是一个更名的“商业分析”学位。此外,日常学术界往往落后于行业,可以教授过时的技术。为了跟上潮流,你最好去 Coursera 或 Khan Academy 自学。
哦。
如果你真的去上大学,也许去学物理或运筹学?很难说。有趣的是,我遇到的许多优秀的数据科学家都来自这些领域。你也许能找到一个好的“数据科学”项目。我不知道, 去和这个博士辍学者谈谈他的观点 。
那么,我该如何开始自学呢?LinkedIn 上的一些人说,那些对数据科学感兴趣的人应该从学习 Linux 开始。然后我去 Twitter,有人坚持认为数据科学家应该学习 Scala,而不是 Python 或 r
LinkedIn 上的那个家伙还差几根薯条就能吃到快乐套餐了。关于 Scala 的家伙,请不要去 Scala 的兔子洞。相信我。现在是 2019 年。Scala 并没有出现在数据科学社区。如果是,py spark就不是个事儿了。而且绝对不要听潮人的语言,就像那个 总在说科特林 的家伙。
还好吗?R 呢?人们似乎喜欢它。
R 擅长数学建模仅此而已。使用 Python,您的学习投资将获得更多回报,并且可以完成更大范围的任务,如数据争论和设置 web 服务。
但是 R 在Tiobe上的排名还是蛮高的,而且它有一吨的社区和资源。用了会疼吗?
看,你可以用 r。如果你只是对数学感兴趣,它可能会更好,用tidy verse它会更好。但是数据科学仍然不仅仅是数学和统计学。相信我,Python 会在 2019 年给你更多的里程。
好吧,那么……我猜我是在学 Python。
你不会后悔的。
Python 硬吗?当机器人接管时,我还能保持市场吗?
当然,Python 是一门非常简单的语言。你可以自动化很多任务,用它做一些很酷的事情。 但是你连 Python 都不需要。 数据科学不仅仅是脚本和机器学习。
什么意思?
嗯,这些都是工具。你使用 Python 从数据中获得洞察力。有时这涉及到机器学习,但大多数时候并不涉及。数据科学可以简单地创建图表。事实上,你甚至不需要学习 Python,使用 Tableau 就可以了。他们宣称,只要使用他们的产品 ,他们就可以 “让你组织中的每个人都成为数据科学家”。
Tableau is confident they can solve your data scientist staffing problem
等等,什么?所以我只需要买一个 Tableau 许可证,我现在就是一个数据科学家了?好吧,让我们对这个推销持保留态度。我可能一无所知,但我知道数据科学不仅仅是做漂亮的可视化。我可以用 Excel 做这个。
当然可以。你不得不承认这是巧妙的营销。绘制数据图表是一个有趣的阶段,它们省略了处理数据的痛苦和耗时的部分:清理、争论、转换和加载数据。
是的,这就是为什么我怀疑学习编码是有价值的。所以我们来谈谈 Python。
其实,坚持住。也许你可以学习 Alteryx。
什么?
还有一个叫Alteryx的软件,可以让你清理、争论、转换、加载数据。它很棒,因为它使用拖放界面来混合数据和…
Alteryx envisions a code-less “data science” experience with their product too
天哪,请停下来。不再有拖放工具。我想学 Python,不是 Alteryx 或者 Tableau。
好吧,抱歉。我只是想通过避免代码让你的生活更简单。也许我也这么做了,因为我们公司买了我们应该使用的许可证。但无论如何,学习 Python 需要学习几个库,比如操作数据框的 Pandas 和制作图表的 matplotlib。其实,划掉 matplotlib。 用阴谋诡计。它用的是 d3.js,好看多了 。
我知道这些单词中的一些。但是什么是数据框呢?
嗯,这是一种在包含行和列的表格结构中操作数据的功能。您可以在 Python 环境中使用数据框完成所有这些很酷的变换、透视和聚合。
等等,这和 Excel 有什么不同?我从大学毕业就开始做这些工作了。这是否意味着我已经是一名数据科学家了?
如果你对这样塑造自己的品牌感到舒服,当然可以。当你去参加聚会和写简历时,我会给那个自称的头衔加个脚注。
那么 Python 和 Excel 有什么不同呢?
Python 与众不同,因为你可以在一个Jupyter笔记本内完成所有工作。您可以逐步完成每个数据分析阶段,并让笔记本直观显示每个步骤。这几乎就像你在创造一个可以与他人分享的故事。毕竟,交流和讲故事是数据科学的重要组成部分。
听起来像幻灯片。我也已经这么做了。我好迷茫。
哦,我的上帝,不。笔记本更加自动化和简化,它使追溯你分析的每一步变得容易。但是仔细想想, 我刚刚想起有些人甚至不喜欢笔记本,因为代码不是很有用。 在笔记本之外更容易模块化代码,以防你需要把它变成一个软件产品。
那么现在数据科学也是软件工程了?
有可能,但我们不要因此而分心。有更紧迫的事情要先学。做数据科学,显然需要数据。
当然可以。
一个很好的起点是抓取网页,就像一些维基百科的页面,然后把它们转储到我们的硬盘上。
等等,我们又要完成什么呢?
嗯,我们正在收集一些数据进行实践。用 抓取网页并解析它美汤 可以给我们很多非结构化的文本数据来处理。
我糊涂了。我刚刚读完一本 130 页的关于 SQL 的书,我以为我会去查询表格而不是浏览网页。SQL 不是访问数据的典型方式吗?
我们可以用非结构化文本数据做很多很酷的事情。我们可以用它来对社交媒体帖子上的情绪进行分类,或者进行自然语言处理。NoSQL 非常擅长存储这种类型的零散数据,因为我们可以存储大量的数据,而无需担心如何使其可用于分析。
我听说过 NoSQL 这个词。那是 SQL 吗?反 SQL?等等,我觉得跟大数据有关吧?
井首, 《大数据》如此 2016 。大多数人已经不再使用这个词了,所以你这样说话就不酷了。像很多激动人心的技术一样, 它已经过了其 Gartner 炒作周期的巅峰 只在少数地方找到了自己的利基。但 NoSQL 基本上是“大数据”运动的产物,成长了像 MongoDB 这样的平台。
好吧,但是它为什么叫“NoSQL”呢?
NoSQL 代表“不仅仅是 SQL ”,支持关系表之外的数据结构。然而,NoSQL 数据库通常不使用 SQL,而是使用一种专有的查询语言。下面是 MongoDB 的语言与 SQL 的比较:
天哪,这太可怕了。你是说每个 NoSQL 平台都有自己的查询语言?SQL 怎么了?
我觉得丫。SQL 没有任何问题,除了它已经存在了几十年。非结构化数据热潮是一个机会,可以做一些不同的事情,并以以前不可能的方式进行大规模扩展。然而,我猜更多的人已经得出结论,将 SQL 保留在 周围是有价值的。这使得分析变得更加容易。事实上,许多 NoSQL 和“大数据”技术都争相以某种形式添加 SQL 层。毕竟,SQL 是一种非常通用的语言,即使有些人觉得它很难学。
唉,好吧。因此,我在这里收集的信息是,作为一名数据科学家,NoSQL 不再需要学习,除非我的工作需要。听起来好像我只知道 SQL 就很安全。
我越想越觉得,是的,我想你是对的,除非你想成为一名数据工程师。
数据工程师?
是的,数据科学家可以分为两种职业。数据工程师与生产系统一起工作,并帮助使数据和模型可用,但较少做机器学习和数学建模工作,这些工作留给数据科学家。这可能是必要的,因为大多数人力资源和招聘人员无法超越“数据科学家”的头衔。仔细想想,如果你想成为一名数据工程师,我会优先考虑学习 阿帕奇卡夫卡 而不是 NoSQL。阿帕奇卡夫卡现在很火。
在这里,这个文氏图可以帮助你。要获得一个“数据科学家”的头衔,你应该在 数学/统计 圈子里的某个地方,理论上与另一个学科重叠。
Data Science Venn Diagram
好吧,我现在还不知道我是想成为一名数据科学家还是数据工程师。我们继续吧。那么,我们为什么要抓取维基百科的页面呢?
很好地充当自然语言处理的数据输入,做类似创建 聊天机器人 之类的事情。
像 微软的 Tay ?这个机器人是否足够聪明,能够预测销售额,并帮助我以适当的库存数量推出新产品?是否存在成为种族主义者的内在风险?
理论上,可能会。如果您摄取新闻文章,也许您可以创建一些模型来识别导致商业决策建议的趋势。但是这真的很难做到。仔细想想,这可能不是一个好的开始。
Move over Gordon Ramsay, this bot is pushing the boundaries of culinary art. It even has a cookbook.
好吧,那么…自然语言处理、聊天机器人和非结构化文本数据可能不是我的强项?
可能不会,但请注意,现在有很多数据科学。谷歌和脸书等硅谷公司处理大量非结构化数据(如社交媒体帖子和新闻文章),显然他们在定义“数据科学”方面有很大影响。然后,我们剩下的人使用关系数据库形式的业务操作数据,并使用不太令人兴奋的技术,如 SQL。
对,听起来没错。我猜他们也将他们的非结构化数据天赋主要用于挖掘用户帖子、电子邮件和故事,用于广告和 其他邪恶目的。
就是这样。但是您可能会发现朴素贝叶斯很有趣,而且有些用处。你可以获取正文并预测它的类别。从头开始实现也很容易:
Categorizing bodies of text with Naive Bayes
你是对的,朴素贝叶斯有点酷。但除此之外,我看不出非结构化数据有什么价值。
然后我们将继续前进。因此,您正在处理大量的表格数据:电子表格、表格和大量记录的数字。听起来好像你想做一些预测或统计分析。
是的,我们终于有所进展了!解决现实问题。这是神经网络和深度学习的用武之地吗?
哇,沉住气。我打算建议从一些具有均值和标准差的正态分布开始。也许用 z 分数和一两个线性回归计算一些概率。
但是,我可以在 Excel 中完成所有这些工作!我错过了什么?
嗯……是的,没错,你可以在 Excel 中做很多这样的事情。但是当你写脚本时,你会得到更多的灵活性。
喜欢 VBA 吗?Visual Basic?
好吧,我要重新开始,假装你没说过。Excel 确实有很好的统计运算符和不错的线性回归模型。但是,如果您需要对每一类项目进行单独的正态分布或回归,那么用 Python 编写脚本要比创建长度可能变成距离到月球度量的可怕公式容易得多。
When you become advanced at Excel, you inflict pain on everyone who works with you.
也可以使用百变库scikit-learn。对于不同的回归和机器学习模型,您可以获得更多强大的选项。
好吧,很公平。所以我想这就进入了数学建模领域。说到数学,我该从哪里开始呢?
传统观点认为线性代数是许多数据科学的基础,这是你应该开始的地方。矩阵相乘和相加(称为点积)是你会一直做的事情,还有其他重要的概念,如行列式和特征向量。 3Blue1Brown 几乎是你能找到线性代数 直观解释的唯一地方。
所以…用一个数字网格和另一个数字网格相乘/相加是我会经常做的事情?这听起来真的没有意义,很无聊。能给我一个用例吗?
嗯……机器学习!当你 做一个线性回归 或者构建自己的神经网络的时候,你会做大量的矩阵乘法和随机权重值的缩放。
好吧,那么矩阵和数据帧有什么关系吗?它们听起来很相似。
实际上,等等……我正在重新考虑这件事。让我来回顾一下这句话。 在实用性方面,你将不需要做线性代数。
哦,来吧!真的吗?我到底学不学线性代数?
在实用性上, 没有你大概不需要学习线性代数 。像tensor flow和scikit-learn这样的库为你做这一切。很繁琐,反正也很无聊。最终,您可能希望对这些库的工作原理有一点了解。但是现在,只要开始使用机器学习库,完全忽略线性代数。
你的不确定性让我不安。我能信任你吗?
表现出一些感激之情!我从另一个兔子洞里救了你。不客气
唉。
还有,在我忘记之前。不要实际使用 TensorFlow。使用Keras因为它使张量流更容易使用。
说到机器学习,线性回归真的有资格成为机器学习吗?
是的,线性回归被归入“机器学习”工具包。
太棒了,我一直在 Excel 中做这个。那么我也可以称自己为机器学习从业者吗?
**叹气技术上来说,是的。但是你可能想拓展一下你的广度。你看,机器学习(不考虑技术)通常是两个任务:回归或分类。从技术上讲,分类就是回归。决策树、神经网络、支持向量机、逻辑回归和线性回归都执行某种形式的曲线拟合。每种模式都有利弊,视情况而定。
等等,所以机器学习只是回归?它们都有效地将曲线拟合到点上?
差不多。像线性回归这样的一些模型解释起来非常清楚,而像神经网络这样的更高级的模型就定义而言是复杂的,难以解释。神经网络实际上只是一些非线性函数的多层回归。当你只有 2-3 个变量时,这看起来并不令人印象深刻,但是当你有成百上千个变量时,这就开始变得有趣了。
好吧,既然你这么说,当然可以。而图像识别也只是回归?
是的。每个图像像素基本上都变成了一个带有数值的输入变量。这倒提醒了我,你得提防 维度诅咒 。这基本上意味着你拥有的变量(维度)越多,你就需要越多的数据来防止它变得稀疏。这是机器学习如此不可靠和混乱的众多原因之一,并且可能需要大量你可能没有的标记数据。
我现在有很多问题。
(开始)
像调度人员或运输这样的问题怎么办?或者解一个数独?机器学习也能解决所有这些问题吗?
当你研究这类问题时,有人会说这不是数据科学或机器学习。这就是“ 【运筹学】 ”。
对我来说,这些似乎是实际问题。所以运筹学和数据科学没有关系?
实际上,有相当多的重叠。运筹学已经给出了很多机器学习使用的优化算法。它还提供了许多像你提到的常见“人工智能”问题的解决方案。
那么我们用什么算法来解决这类问题呢?
嗯,绝对不是机器学习算法,知道这个的人太少了。有更好的算法已经存在几十年了。 树搜索、元启发式、线性规划和其他运筹学方法论 已经被使用了很长时间,并且在这些类别的问题上比机器学习算法做得好得多。
[## 数独和时间表
用树搜索解决调度问题
towardsdatascience.com](/sudokus-and-schedules-60f3de5dfe0d)
那么,为什么每个人都在谈论机器学习,而不是这些算法?
**叹因为那些优化问题已经圆满解决了相当一段时间了,方法从此没有上头条。信不信由你,几十年前,第一个人工智能炒作周期集中在这些算法上。如今,人工智能的炒作被重新点燃,源于机器学习及其很好地解决的问题类型:图像识别、自然语言处理、图像生成等。
那么,当人们提议使用机器学习来解决调度问题,或者像数独这样简单的事情时,他们这样做是错误的吗?
差不多吧,是的。机器学习、深度学习等等……无论今天被炒作的是什么,通常都不能解决离散优化问题,至少不能很好地解决。人们已经尝试过了,但是结果非常不理想。
那么,如果机器学习只是回归,为什么每个人都对机器人和人工智能危害我们的工作和社会如此大惊小怪?我是说…拟合曲线真的有那么危险吗?一个“AI”在刚做回归的时候有多少自我意识?
人们已经发现了回归的一些聪明的应用,比如在给定的回合中找到最佳的棋步(离散优化也可以做到),或者自动驾驶汽车计算转向哪个方向。但是,是的,有相当多的炒作,回归只能有这么多的应用程序和一个任务。
我仍在协调这种脱节。我一直在看关于 DeepMind 在象棋游戏中复制类人智能 的文章,现在 它在星际争霸 中击败人类玩家!这些机器学习算法正在所有这些游戏中击败人类玩家!这是否意味着他们下一步会取代我的工作?
有多少星际争霸玩家威胁要抢走你的工作?
(困惑的沉默)
你真的能说玩星际争霸和做你的工作有任何相似之处吗?
如果你没有受到人类星际玩家的威胁,你为什么要担心机器人星际玩家?他们被硬编码并训练来做好一件事:玩星际争霸。你也可以这样说一个人,他什么也没做,他们对你不再是威胁。
[## 游戏 AI 的实用价值
我们通过自动化消遣获得了什么?
towardsdatascience.com](/ai-research-and-the-video-game-fetish-71cb62ffd6b3)
我不确定是该松口气还是怀疑。首先是国际象棋,然后是星际争霸…也许接下来会是自动化分析和机器人做出战略性商业决策。但也许第三项是对前两项的一大飞跃。我再也不知道了。
某家伙写了一篇关于走向数据科学的文章,关于 深度学习触及其局限性 。你可能想读一下。
[## 深度学习已经达到极限了吗?
又一个人工智能的冬天来了吗?
towardsdatascience.com](/is-deep-learning-already-hitting-its-limitations-c81826082ac3)
好吧,那么我们是如何从数据科学转向人工智能的呢?我越是试图定义“数据科学”,我就越是…我就…我无法描述它。整件事是如此的疯狂和模糊。
在这里,我得到了同一作者的另一篇文章。不错的家伙。
[## “数据科学”已经变得过于模糊
大家专精,散了吧!
towardsdatascience.com](/data-science-has-become-too-vague-538899bab57)
谢谢。我需要出去走走,处理这些事情。如果我从中得到什么,我想我的 Excel 工作可以称为“数据科学”。不过,我不知道自己是否想拥有“数据科学家”的头衔。似乎它可以是任何东西。我可能会把时间投入到别的事情上。希望数据科学之后的“下一件大事”不会那么疯狂。
也许你应该跟随 IBM 一段时间?
为什么?
听说过量子计算 吗?
卡尔·波普尔如何让你成为像乔治·索罗斯一样优秀的数据科学家
原文:https://towardsdatascience.com/how-karl-popper-can-make-you-as-good-a-data-scientist-as-george-soros-2c3256960401?source=collection_archive---------12-----------------------
数据科学之道
波普尔关于“可证伪性”和如何建立更好的机器学习模型的观点
数据科学之道 专栏探讨了几个世纪以来哲学家们是如何攻克机器学习和数据科学的关键问题的。
If Karl Popper were a modern data scientist, he would have used the concept of “falsifiability” when he implemented machine learning models.
卡尔·波普尔最著名的观点是科学通过“可证伪性”前进——这个观点认为一个人不能证明一个假设是真的,或者甚至通过归纳获得真理的证据(哎呀!),但一个人可以反驳一个假设,如果它是假的。
如果波普尔是一名数据科学家…
假设 Popper 是一名现代数据科学家,需要实现一个机器学习解决方案来预测一些感兴趣的现象。考虑到他的科学哲学,他会如何实施他的模型呢?
Popper 将实现一个因果模型。因果机器学习模型直接对建模者旨在预测的现象中起作用的因果机制进行建模。对因果机制进行建模使得能够在对系统进行干预的情况下进行稳健的预测,即使这些干预导致系统的行为方式与它在训练数据中的行为方式根本不同。术语“干预”指的是任何人为的“搞乱”你正在建模的事物的方式。例如,在金融建模中,干预的一个例子可能是新的税收政策。如果你有一个模型可以预测你的电子商务平台的销售收入,那么开展广告活动就是一种干预。
Popper 将通过以下迭代模型反驳算法建立模型:
- 基于如何改进您的模型的先前迭代的想法,您提出了一个更新的模型。
- 你使用新的模型来预测干预的结果。在选择关注哪种干预措施时,优先选择预测结果更令人惊讶的干预措施。
- 你实际上进行干预并观察结果。如果结果与预测不符——嘣!模型伪造。
- 重复步骤 1–3。一直走下去,直到找不到方法去证伪 model 的当前迭代。
你知道波普尔不会做什么吗? 他会而不是专注于优化某些函数的可能性或预测准确性。他知道模型平均来说可以预测得很好,但在重要的边缘情况下仍然预测得很差。
波普尔可能仍然是一个平庸的数据科学家
让我们面对现实吧,有时候你所需要的只是一个很好的预测。一个优秀的数据科学家能够识别何时是这种情况,何时不是。
然而,Popper 方法的另一个问题出现在步骤 1 中。在这一步中,Popper 必须从大量的候选模型中进行选择,这些模型尚未被之前迭代中的干预实验数据所证伪。
大多数数据科学家会根据来自所有这些先前实验的证据在多大程度上支持给定候选人来对候选模型进行排名,例如使用交叉验证,或者基于可能性的标准,如 AIC 或 BIC 。
不是波普,他的口头禅是:
“你无法证明一个假设(即模型)是真的,甚至无法通过归纳法证明它是真的,但如果它是假的,你可以反驳它。”
因为对波普尔来说,可证伪性才是最重要的,所以每一个候选模型都和其他模型处于同等地位。没有什么能帮助他喜欢一个模型。鉴于他必须搜索尚未被反驳的模型的巨大空间,这使他的算法的有效性受到质疑。
然而,我们不必像波普尔那样反对有证据的归纳推理。我们可以使用上面的模型构建算法,并为下一次迭代选择在前一次迭代中得到有力支持的模型。
波普尔如何让你成为像乔治·索罗斯一样优秀的数据科学家?
波普尔给我们的最有价值的想法是,通过设计可能失败的情况,尽最大努力打破你的模型,然后根据这些情况改进模型。
虽然你并不完全需要一个因果模型来做到这一点,但它肯定会使这个过程变得容易得多。如果没有预测干预效果的方法,就很难识别模型的故障模式。仅仅因为你不知道什么样的边缘案例破坏了你的模型,并不意味着一旦你的模型进入生产,这些边缘案例就不会出现。
金融投资是一个罕见的边缘案例可以毁掉你的领域。如果你认为财富是这种建模技术的证据,那么看看亿万富翁投资者乔治·索罗斯就知道了。早在“数据科学”出现之前,索罗斯就已经将数据科学应用于金融市场。
BIllionaire George Soros attributes his investment success to Popper’s philosophy
索罗斯也是波普尔在伦敦经济学院的学生,并称赞波普尔启发了他的“反身性通论”。这是因果理论——因果机制是宏观经济的抽象概念——是他投资策略的核心。他的策略可以总结为之上的迭代模型反驳算法。
我富有只是因为我知道什么时候我错了……我基本上是通过认识到自己的错误而生存下来的。乔治·索罗斯
如果对他有用,也许对你也有用。
延伸阅读:
- 卡尔·波普尔 —斯坦福哲学百科全书
- 归纳问题 —斯坦福哲学百科全书
- 索罗斯乔治。"易错性、反身性和人类不确定性原理."经济学方法论杂志20.4(2013):309–329。
最小二乘回归估计实际上是如何计算的
原文:https://towardsdatascience.com/how-least-squares-regression-estimates-are-actually-calculated-662d237a4d7e?source=collection_archive---------14-----------------------
理解模型输出是如何计算的,有助于理解它们的解释
FWStudio from Pexels
普通最小二乘法是线性回归用来获得参数估计的一种方法。这需要拟合一条线,使得从每个点到回归线的平方距离之和(残差)最小。让我们在下面的图表中想象一下,红线是回归线,蓝线是残差。
下面,我将首先介绍一个例子,然后说明如何使用残差来估计线性模型的参数。然后,我将展示如何计算汇总输出中的每个值。总之,这将揭示普通最小二乘法的内部工作原理,并演示它们是如何结合在一起的。
根据 GPA 预测 ACT 成绩
目标是根据学生的 GPA 预测学生的 ACT 分数。我们首先制作一个包含 15 个 ACT 成绩和 GPA 的数据框架。然后,我们使用 lm 函数创建线性模型。
gpa = c(2.931,3.682,3.113,3.910,2.568,
3.292,3.684,3.835,3.180,3.516,
3.358,2.801,2.729,3.989,2.679)
act = c(28,31,26,36,27,31,28,34,29,32,28,24,30,33,26)
df = data.frame(cbind(gpa,act))mod = lm(act~gpa,data=df)
summary(mod)
act= 11.877+5.376 *GPA
我们看到 gpa 由低 p 值支持,这表明它是 act 的强预测因子。估计是 5.376,这意味着 gpa 每增加 1.0,我们预计 ACT 会增加 5.376 个点。让我们看看汇总表中这些不同的值是从哪里来的。
平方和
下图中每个点是 yᵢ,每个预测值是 ŷᵢ ,平均值是 ȳ 。
残差平方和(RSS/SSE)
eᵢ = yᵢ - ŷᵢ
第个残差是第个实际值和第个预测值之间的差值(蓝线)。各残差平方之和为 RSS。这是为了得到我们的 beta 估计而最小化的。
回想一下,ŷ = b₀ + b₁x
因此,eᵢ = yᵢ - ŷᵢ = yᵢ - b₀ - b₁xᵢ
RSS =σ(yᵢ-b₀-b₁xᵢ)
我们首先对 RSS 取相对于 b₀ 和 b₁ 的偏导数,然后将它们设置为零。
∂rss/∂b₀=-2σ(yᵢ-b₀-b₁xᵢ)
b₀ = ȳ - b₁x̄
∂rss/∂b₁=-2σ(yᵢ-b₀-b₁xᵢ)xᵢ
b₁=(σ(xᵢ-x̄)(yᵢ-ȳ))/σ(xᵢ-x̄)= sxy/sxx
让我们用上面的公式看看结果,从 b₁.开始
avg_act = mean(df$act)
avg_gpa = mean(df$gpa)
b1 = sum((df$gpa - avg_gpa)*(df$act - avg_act))/sum((df$gpa - avg_gpa)**2)
这得出 5.376。请注意,这与 lm 估计的 gpa 相匹配。太好了,让我们为 b₀.重复这个过程
b0 = avg_act - b1*(avg_gpa)
这得到 11.877,与截距估计值相匹配。很好,我们已经展示了如何计算参数估计,但现在我们需要测试它们的重要性。让我们先来看看与 RSS 密切相关的另外两个值。
平方和回归(SSReg)
σ(ŷᵢ-ȳ)
这将对预测值和平均值之间的平方差求和。换句话说,这衡量了回归线解释了多少平方和。回头参考前面的图来想象一下。
总平方和(SST)
σ(yᵢ-ȳ)
SST = RSS + SSReg
让我们检查一下这个等式对我们的例子是否成立。
rss = sum(((df$act - fitted.values(mod)))**2)
ssreg = sum(((fitted.values(mod) - avg_act))**2)
sst = sum(((df$act - avg_act))**2)
all.equal((rss+ssreg),sst)
将 RSS、SSReg 和 SST 与摘要输出相关联
残差标准误差
假设我们的误差是独立的,同方差的,正态分布,均值为 0,方差为σ。残差可用于创建误差方差的无偏估计。剩余标准误差是这个σ估计量的平方根。这让我们知道我们的点离回归线有多远。
n = nrow(df)
p = 1
rse = sqrt(rss/(n-p-1))
这里,p 是非截距预测值的数量。在我们的 SLR 例子中,我们只有一个预测器,所以分母变成 n-2。
性病。(参数估计的)误差
var(b₀| x)=σ[(1/n)+(x̄/sxx)]
sxx = sum((df$gpa - avg_gpa)**2)
sigma_squared = rss/(n-p-1)var_b0 = sigma_squared*((1/n)+(avg_gpa**2/sxx))
se_b0 = sqrt(var_b0)
Var( b₁ |X) = σ /SXX
var_b1 = (rss/(n-p-1))/(sxx)
se_b1 = sqrt(var_b1)
t 值
t 统计量的计算方法是将β估计值除以它们的标准误差。分子是标准的正态变量,分母是具有 n-p-1 个自由度的卡方变量的平方根。因此,这些统计数据遵循具有 n-p-1 个自由度的 t 分布。
t_b0 = b0/se_b0
t_b1 = b1/se_b1
2*pt(t_b0,n-p-1,lower.tail=F)
2*pt(t_b1,n-p-1,lower.tail=F)
多重 R 平方
R = SSReg/SST = 1 - RSS/SST
换句话说,R 是回归线(SSReg)对总方差(SST)解释的方差的度量。
调整后的 R 平方
ᵃᵈʲ = 1 - (RSS/n-p-1)/(SST/n-1)
重新排列调整后的 R 方程,分子中会留下 n-1,分母中会留下 n-p-1。因此,即使在简单的线性回归环境中,调整后的 R 也总是小于 R 的倍数。
F 统计量
f = MSReg/MSE
MS 指均方差。这些值的计算方法是将 SSReg 和 RSS 除以各自的自由度 1 和 n-p-1。因为这是两个卡方变量的比率,所以新的统计数据遵循具有 1 和 n-p-1 个自由度的 f 分布。
f = (ssreg/1)/(rss/(n-2))
pf(f,1,n-p-1,lower.tail=F)
结论
我们已经研究了普通的最小二乘法,以及如何用它来计算参数估计。此外,我们已经展示了如何使用与 RSS 相关的值来计算测试统计信息和诊断信息。
如果检测结果为阳性,是否会感染艾滋病病毒?
原文:https://towardsdatascience.com/how-likely-is-it-that-you-are-infected-with-hiv-if-you-get-positive-test-results-59ae6e5a900a?source=collection_archive---------30-----------------------
解释了条件概率的一个惊人结果。
你曾经得到过让你害怕的医学测试结果吗?
可能是妊娠试验阳性(或阴性)?
也许是艾滋病毒检测呈阳性?
也许是别的什么?
吓到你了吗?嗯,应该是这样的。但也许没有以前那么多。如果得到这样的检测结果,就要谨慎了。但是,与其彻底崩溃,最好还是简单地再做一次测试。
让我们来解释一下为什么这些结果可能没有听起来那么可怕。让我们以艾滋病毒测试为例。
快速的谷歌搜索告诉我,截至 2018 年,美国大约有 3.28 亿人。其中,110 万人为艾滋病毒阳性。
艾滋病毒测试也相当不错。许多消息来源说他们是 99.5%正确的。
“99.5%正确”是什么意思?
这意味着艾滋病毒感染者检测结果呈阳性的比例为 99.5%。这被称为敏感性。
这也意味着未感染艾滋病毒的人得到阴性检测结果的比例也是 99.5%。这被称为特异性。
永远记住,灵敏度和特异性不需要是同一个数字!
让我们开始计算。
事件定义和计算
我们首先需要定义一些事件。
- H 描述某人感染了艾滋病毒的事件
- NH 描述某人未感染 HIV 的事件
- T 描述测试结果为阳性的事件
- NT 描述测试结果为阴性的事件
We can divide our population into infected (H) and not infected (NH) individuals. We can also divide our population into positively tested (T) and negatively tested (NH) individuals.
这意味着一个给定的个体,让我们称他为汤姆,可能是 HIV 阳性( H )或者不是( NH )。此外,他的测试结果可能是阳性( T ),也可能是阴性( NT )。永远记住,医学测试是不完美的,只是因为有人被感染,这并不意味着测试结果这样说,反之亦然!
汤姆感染艾滋病毒的概率由 P(H) 给出,他没有感染艾滋病毒的概率由 P(NH) 给出。因为它们是仅有的两个选择,而且是互补的,所以这两个概率之和是 1。
他的测试结果呈阳性的概率由 P(T) 给出,呈阴性的概率由 P(NT) 给出。同样适用于 P(T) 和 P(NT) 。
H and NH are complimentary events and so are T and NT.
我们来计算一下汤姆感染艾滋病病毒的概率和汤姆不被感染的概率。这意味着我们在寻找事件发生的概率 H 和 NH 。
汤姆是个相当随便的美国人,我们对他一无所知。所以为了计算出他被感染的概率,我们用美国被感染的总人数除以人口数量。
The probability P(H) of Tom being infected and the probability P(NH) of Tom not being infected.
到目前为止,很容易。你还和我在一起吗?因为现在会变得有点棘手。
我们现在对联合活动感兴趣,也就是说,我们将开始混合活动。
Our whole population can be divided into those four groups where the top left for example denotes the event of both T and NH.
我们记得,根据“99%正确”的定义,被感染并得到阳性检测结果的人的比例是 99.5%(这是敏感性)。
同样,未被感染而得到阴性检测结果的人的比例也是 99.5%(这是特异性)。
这意味着我们通过将 0.995 乘以被感染或未被感染的概率来获得联合概率,如下所示:
如果一项测试有 99.5%的正确率,那么它也有 0.5%的错误率。这意味着,没有被感染但检测结果呈阳性的人的比例是 0.5%。然后,我们可以通过下式计算出某人既是 HIV 阴性又是阳性检测结果的概率
我们还需要 P(T) 。查看联合概率的图表有助于我们理解如何计算它。
This is how we can calculate P(T). Note that this is only possible because the two subsets are disjoint (i.e. they have no overlaps).
太好了!我们来计算一下 P(T) 。
厉害!我们快到了。现在,我们需要的是条件概率的定义。
条件概率
条件反射意味着我们“减少”我们的空间。因此,我们不看全部人口,而只看我们控制的那一部分。在我们的例子中,我们知道 Tom 的测试结果是阳性的,所以我们想要以 t 为条件的事件。因此,我们的“新群体”只是测试结果为阳性的群体。所以我们在寻找给定T时 H 的概率。这就是所谓的条件概率。
每当我们知道,我们想要以之为条件的事件,事实上是真的,我们就以某事为条件。在我们的案例中,Tom 已经拿到了他的结果,结果显示他是 HIV 阳性。这意味着 T 是真实事件!
好吧。我们快完成了。我们只需要输入数字,就可以得到汤姆实际上是艾滋病毒阳性的概率,即使他已经得到了阴性测试结果。
40.4%。
就是这个号码。
一个检测结果,汤姆真正感染艾滋病毒的概率“只有”40.4%。
是不是概率很低?没有。
比 99.5%好吗?地狱耶!
让你吃惊了吗?我敢打赌。
我们一会儿会谈到直观的解释。首先,我来回答你更迫切的想法和恐惧。
反过来怎么样?
我知道你现在可能在想什么。你可能在想,“等等,…如果我得到了一个阴性测试结果,这是否意味着我仍然有很高的几率是 HIV 阳性?”
让我们仔细检查一下这个。我们正在寻找给定 NT 的事件 H 的概率。
这真是太低了!所以你很幸运。如果你的测试结果是阴性,你可以非常确定你没有感染病毒。
直观的解释
我记得我第一次必须计算相似数字的概率(把美国和德国互换,调整数字)。
你无法想象我有多困惑,花了多少时间寻找错误。但是不用担心,我们的计算是正确的,直观的解释也相当简单。
想象一下我们测试了美国的每一个人。有 3.28 亿-110 万= 3.269 亿人没有被感染。其中,0.5%的人会得到错误的肯定结果。也就是 163 万人。这远远超过了感染艾滋病病毒的人数。
所以我们没事了。我们的计算是正确的。只是这个数字 99.5%可能没有听起来那么靠谱。
每当我们有两个高度相关但概率非常小的不同事件( H,T )时,条件概率通常会返回不直观的结果。为了说明这一点,我对德国(0.1%感染者)和两个幻想国家 risk land(50%感染者)和 Dreamland(0.001%感染者)做了上述计算。
Infection rates and probabilities that a person is infected if the test results say so.
感染率越低,拿回阳性检测结果就越不容易被感染!
抓狂还是不抓狂?这是个问题。
让我们回到汤姆身上。
- 汤姆应该抓狂吗?大概不会。
- 他会抓狂吗?大概是的。
- 如果他抓狂了会没事吗?当然是了。这完全取决于他。
但是如果我是汤姆,我会再做两到三次检查来确认我的感染状况。
机器学习如何帮助识别药物的有效性和不良反应
原文:https://towardsdatascience.com/how-machine-learning-can-help-identify-effectiveness-and-adverseness-of-a-drug-e23c7933c233?source=collection_archive---------8-----------------------
通过采用 ML 算法建立用于处理神经药物的文本综述的系统,以有洞察力的和视觉上信息丰富的表示形式提供有效性或不良反应的概述。
Photo by Kendal James on Unsplash
你有没有在网上查找你的普通感冒药,却被它下面列出的副作用数量吓坏了?或者浏览评论部分来验证它们,但被列出的评论数量淹没,如果你有一整天的时间,你可能无法阅读?或者希望有一种简单的方法来知道有多少使用它的人对结果感到满意?
我们大多数人都去过那里,做过那种事。作为人类,我们倾向于选择简单明了的信息,这样我们就可以有效地理解它,同时利用最少的时间和资源。
这同样适用于上述情况,在这种情况下,需要一个全面的、视觉上信息丰富的系统来在一个地方总结关于药物的所有信息,这有助于用户在选择特定药物之前做出明智的决定。
ML 如何帮助这一过程?
以博客或专门网站形式发布的用户药物评论信息具有巨大的分析潜力。然而,这些数据大多是文本数据,这意味着在用于分析之前,需要对其进行结构化和清理。
一个完整的端到端系统会将这些非结构化数据考虑在内,并将其转换为可用的特征,然后由合适的算法使用这些特征来确定该药物在给定的药物评论下是否有效。
因此,最终系统的目标是:
- 提供药物的有效性和不良反应的概述,从单独的自动分类综述中汇总成三个不同的类别,即有效、无效和不良。
- 直观地展示和比较药物的不良反应,进一步深入了解每种药物的评论,并按类别进行排名。
下面我们来分解一下文章中的开发过程。
阶段 1:收集和预处理数据
刮评论:
为了开发一个决定性的系统,一个子集的广泛审查数据可在互联网上被考虑。用于治疗癫痫、癫痫发作和双相情感障碍的神经药物的评论是使用 scrapy 搜集的,scrapy 是一个用于开发定制网络爬虫的 Python 库。
最终数据集由七种药物中每一种的平均 200 篇评论组成,然后以 80:20 的比例分成训练和测试数据集。
Examples of scraped reviews
清理评论:
- 使用自然语言工具包(nltk)中的
sent_tokenize
将评论标记成句子。 - 文本的标准化,包括小写转换、分离变形词和纠正拼写错误的词。
- 使用 nltk 获得单词的词根形式。
review = “But since I started alternating, I haven’t had a seizure”
pre_processed_review = preprocess(review)
print(pre_processed_review)['but','since','I','start','alternate','I','have','not','had','seizure']
在这一步中保留停用词、否定和标点符号,以尽可能保留评论中包含的信息。在这一步结束时,清理后的句子就可以被归入适当的类别了。
标注训练数据集:
这句话可以分为三类:
- 有效:指使用该药物后,患者健康状况得到改善的综述。
- 无效:这些综述暗示患者的病情没有变化或恶化,但没有提及使用药物后的任何不良反应。
- 不良反应:综述中明确提到患者使用药物后的不良反应。
建立了一个自动标注器,它根据三个参数来评估句子。
- 由一系列“问题”单词组成的字典,这些单词通常出现在反类别句子中。
problems='hallucinations weakness hairloss tired hair loss nausea shakiness tremor tremors stones weight pounds flu flus lbs drowsiness dizziness appetite manic maniac cold vomiting seizures nauseous vision inflammation tingling numb numbness swollen swelling depression attacks blisters skin rash diarrhoea headache headaches head severe fever sleep pain stress numb'
2.句子中单个单词的 POS(词类)标记,使用 nltk 库生成。POS 标记流程和标记的详细描述可在此处找到。
review = 'laying down is excruciating and im in the process of running test'[('laying', 'VBG'), ('down', 'RP'), ('is', 'VBZ'), ('excruciating', 'VBG'), ('and', 'CC'), ('im', 'NN'), ('in', 'IN'), ('the', 'DT'), ('process', 'NN'), ('of', 'IN'), ('running', 'VBG'), ('test', 'NN')]
3.每个句子的复合 VADER 情感得分。VADER 是一个 python 模块,用于根据极性(积极或消极)和强度(得分)对评论的情绪进行评分。复合得分是一个介于-1 和 1 之间的整数值,用于评估文本中传达的情感。值 0 是表示中性情绪的标度的中心点。
from vaderSentiment.vaderSentiment import SentimentIntensityAnalyzer
def analyze_sentiment(df):
sentiments = []
sid = SentimentIntensityAnalyzer()
for i in range(df.shape[0]):
line = df[‘Review’].iloc[i]
sentiment = sid.polarity_scores(line)
sentiments.append([sentiment[‘neg’], sentiment[‘pos’],
sentiment[‘neu’], sentiment[‘compound’]])
df[[‘neg’, ‘pos’, ‘neu’, ‘compound’]] = pd.DataFrame(sentiments)
return df
Original reviews with VADER Sentiment Scores and category labels.
因此,我们开发了一个初步的评论标注方案,并通过人工标注句子对其进行了进一步的完善。
Pro-tip by Richard Socher highlighting the effectiveness of manual labeling.
被自动标注器错误分类的评论由两个独立的标注器手工标注,冲突由公正的第三个标注器解决。该数据集随后由医疗卫生专业人员进行验证。
训练集现在准备好输入到分类算法中。
阶段 2:选择正确的方法
矢量化:
矢量器用于将每个单词转换成向量,其大小等于整个文档集合(评论)中单词的唯一计数。这种方法被称为“单词袋”模型。该模型将文本转换成机器学习算法所需的数字特征形式。
例如,对某种药物的评论写着“这种药物使我变得更糟”,而另一篇评论说“这种药物使我变得更好”。评论中的独特词的数量被发现是 7 个(“这个”、“药物”、“已经”、“制造”、“我”、“更差”、“更好”)。
因此,审查的方向是
- 这种药让我变得更糟了
- 这种药让我变得更好。
我们可以使用计数矢量器方法(创建单词*评论大小的稀疏矩阵)或术语频率-逆文档频率(TF-IDF)方法(测量单词的频率以及该单词在集合中的稀有度)。
你可以在这里了解更多关于这两种方法及其实现的信息。
创造二字和三字:
在自然语言处理中,文本文档中的每个单词被称为一个“元”。因此,共现单词的组合被称为 n 元语法,其中 n 是所考虑的组合的长度。
例如,“双相情感障碍”将是我们的语料库中经常出现的组合。因此,它可以用一个双词来表示,而不是单个单词“双相”和“障碍”,因为这两个单词可能不会频繁地作为单独的单词出现。
bigram = gensim.models.Phrases(words, min_count=5, threshold=100)
trigram = gensim.models.Phrases(bigram[words], threshold=100)
bigram_mod = gensim.models.phrases.Phraser(bigram)
trigram_mod = gensim.models.phrases.Phraser(trigram)def make_bigrams(texts):
return [bigram_mod[doc] for doc in texts]def make_trigrams(texts):
return [trigram_mod[bigram_mod[doc]] for doc in texts]
可以使用 Gensim(如上所述)或通过使用 scikit-learn 的特征提取模块在矢量化过程中自动生成二元或三元模型,将二元或三元模型作为特征获取。
选择算法:
评论需要分为三类,即有效、无效和不利,因此我们需要使用多类分类器而不是二元分类器。
为了进行对比分析,使用了四种多类算法进行类别预测。
- OneVsRest SVM 分类器:
它涉及为每个类拟合一个 SVM 分类器,同时将所有其他类视为一个类,有效地将问题转化为一个二元分类问题。
此处显示了吴恩达球场的 OneVsRest 分类图解(通过 stats.stackexchange 此处)。 - 逻辑回归多类分类器
- 随机森林分类器
- 基于逻辑回归的 bagging meta-estimator:
这种集成技术使用数据的随机子集来拟合基本类型的单个分类器,然后聚合它们的预测以获得单个预测。
下面给出了使用 scikit-learn 训练和测试上述分类器的代码。
创建特征选择:
算法的性能通过反复试验的方式针对各种特征选择进行了测试。因此,通过结合矢量化技术、被认为是特征的词的数量和评论的情感分数,产生了各种特征组合。下面显示了一个示例
from sklearn.feature_extraction.text import TfidfVectorizervectorizer = TfidfVectorizer(ngram_range=(1, 2), max_features=15000)
vector = vectorizer.fit_transform(corpus)df2 = pd.DataFrame(vector.toarray())
df_final = pd.concat([df2, reviews], axis =1)
Top 15000 word vectors + VADER Sentiment Scores.
这里,我们使用 TF-IDF 将前 15,000 个出现的单词及其二元模型(因为 ngram_range 设置在 1-2 之间)转换为特征向量。每个评论的向量与 VADER 情感分数相结合以获得特征,这些特征将被馈送到分类算法以决定该评论的类别。
类似地,如下创建 7 个其他这样的特征集:
- FS-1:计数矢量器
- FS-2:计数矢量器+ VADER 情感分数
- FS-3:计数矢量器前 10000 个特征+ VADER 情感得分+ n 元语法范围 1–3
- FS-4:计数矢量器所有特征+ VADER 情感分数+ n 元语法范围 1–3
- FS-5:tfidf 矢量器
- FS-6:tfidf 矢量器+ VADER 情绪得分
- FS-7 : Tfidf 矢量器前 10000 个特征+ VADER 情感得分+ n 元语法范围 1–3
- FS-8 : Tfidf 矢量器前 15000 个特征+单词标记化分析器+ VADER 情感分数+ n 元语法范围 1–3
阶段 3:可视化结果
我们以三种格式呈现系统结果:综述分类器、使用 TextRank 的每个类别的摘要以及用于药物比较的综述的交互式可视化绘图。
f1 评分评估:
reviews.groupby("Category").count().CategoryAdverse 1089
Effective 1276
Ineffective 335
我们使用 sklearn 的 f1_score 度量模块中的加权 f1 得分度量来评估性能,因为它具有在多类分类问题中考虑类不平衡的额外优势。它计算每个类的 f1 分数,并通过考虑每个类的支持(如上所示的实例数量)来平均它们。
Various approaches, feature selections, and their respective weighted f1-scores
使用特征选择 8 和逻辑回归方法获得大约 0.74 的 f1 分数。
通过 TextRank 对评论进行排名
TextRank 算法使用 TF-IDF 向量的相似性图来计算每个节点的重要性。与大多数其他评论最相似的节点或评论被认为是其所属类别的“中心”。
Top reviews for the effective category with similarity scores
在这里,有效类别的评论是针对特定药物进行排名的。短语“最佳药物”、“帮助了我很多”、“没有它就无法生活”最能反映有效类的主题,因此使用 TextRank 将包含它们的评论排在顶部。
类似地,将不良类别评论与不良反应字典进行比较,并为药物引起的不良反应生成发生排序图。
Occurrence-ordered graph for adverse category reviews.
使用散景的交互式可视化
webapp 使用 Bokeh(python 中的一个交互式可视化库)来呈现交互式条形图,以便为用户显示药物的并排比较。
bokeh 服务器用于启动服务,该服务响应 webapp 上的更改,以触发更新绘图数据的回调。这些更改由 webapp 的浏览器进行同步,并相应地更新绘图。
要运行散景服务器,通过运行命令在 app.py 中调用一个方法
bokeh serve myapp.py
可视化在本地主机端口 5006 呈现,该端口可以集成到 app.py 中
Bar graph dynamic update in Bokeh using checkboxes.
这里给出了使用散景进行交互式可视化的完整代码。
该代码包含三个主要函数make_dataset
、make_plot
和update
,分别用于创建数据框及其值、静态绘图和基于复选框状态(选中或未选中)更新数据。最后,使用curdoc()
将情节和控制元素放在一起,并将输出呈现给 web 浏览器。
摘要
我想创建一个以用户为中心的 web 应用程序,帮助患者了解更多关于过去使用过类似药物的其他人的经历,并省去他们在在线论坛上阅读数百篇评论的麻烦。
在未来,该系统可以通过提供对评论的认证的支持、考虑其他领域的评论以及通过使用神经网络来提高效率而在许多方面得到改进。
感谢我出色的队友们,是他们努力将这个想法变成现实。
有什么建议可以随意评论。我希望听到您的反馈!
这个网络应用现在在 Heroku 上,预测者在这里。
来自《走向数据科学》编辑的提示: 虽然我们允许独立作者根据我们的 规则和指南 发表文章,但我们并不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。
机器学习如何帮助揭示美国阿片类药物危机
原文:https://towardsdatascience.com/how-machine-learning-can-help-shine-a-light-on-the-u-s-opioid-crisis-8d0937c092d1?source=collection_archive---------47-----------------------
使用 Python 中的 k-means 聚类和主成分分析在 ARCOS 数据集中查找“高产”阿片类药物购买者
由 迈克尔·罗迪奥 、桑雅娜·罗萨里奥、 、 、亚当·张、
Photo credit: Joshua Coleman, Hubble Studio, Los Angeles, United States.
免责声明:本演示中代表的任何观点或意见仅由作者所有,并不代表肾单位研究或肾单位研究分析师的观点或意见。
无监督机器学习的诱人前景之一是,它可以从混沌中提取秩序。设计良好的聚类算法就像是在干草堆中专门寻找针的人。
说到干草堆,很少有人能比得上 ARCOS 的阿片类数据集。
ARCOS 是自动化报告和综合订单系统的缩写,是美国缉毒署对美国处方药交易的记录。这包括处方阿片类药物交易,以及关于谁制造了这些阿片类药物,谁运输了它们,以及谁将它们出售给美国患者的信息。
ARCOS 数据集,在查理斯顿公报邮件和华盛顿邮报领导的法律战之后,由 DEA 在今年夏天首次公开,跨越 4 亿行和 40 多列。它包含了从 2006 年到 2012 年在制造商(如 Purdue Pharma)、分销商(如 AmerisourceBergen、Cardinal Health 和 McKesson)以及全国数千家药店、医院、医生办公室和诊所之间的几乎所有阿片类药物交易。
但从阿片类药物诉讼和美国阿片类药物危机的角度来看,ARCOS 数据集也因其忽略的内容而值得注意。尽管 DEA 记录了阿片类药物“购买者”——药房、医生办公室、诊所或其他向患者出售药物的企业——的违规行为,但 ARCOS 数据集不包含任何此类标志。
我们的 MBA 和数据科学家团队与医疗投资研究公司 Nephron Research 合作,想知道:我们能否找到一种方法,使用纯数据驱动的方法来标记潜在的有问题的阿片类药物购买者?我们能否使用 ARCOS 事务数据集来实现这一目标?
链条中的一环
ARCOS 数据集列出了涉及多种买家的交易,从大型医院到小型诊所。我们最初决定将搜索范围限制在连锁药店,原因有二。首先,阿片类诉讼主要集中在大型上市公司。第二,我们推断连锁药店可能比独立药店有更少的异常值,这适合聚类方法。
我们开始寻找“高产连锁药店”(我们称之为我们的目标),寻找满足两个标准的个体药店:
- 他们卖出了大量的阿片类药物,和
- 在 ARCOS 数据集的七年中,他们迅速提高了阿片类药物的销售量(以百分比计)。
不择手段
正如机器学习项目的常见情况一样,我们的第一轮聚类实际上是从本质数据清理和组织开始的。经过几周时间对大约 4 亿行数据进行平滑和标准化后,我们开发了一组 Python 函数,将交易汇总成简化的药房规模的数字。我们还根据县级美国人口普查局的人口数据对交易进行了加权,以避免位于大城市的药店因交易量过大而受到惩罚。
在我们的第一次聚类迭代中,我们将所有 20 多个维度的事务数据加载到一个 k 均值聚类算法 中。当然,很难想象如此多的维度,所以我们利用 PCA——主成分分析的缩写——将这些维度压缩成两个更容易理解的维度。最初的结果是…
PC1 reflects dimensions relating to absolute sales, while PC2 reflects growth dimensions. Each dot is a chain pharmacy. (Source: Modified DEA ARCOS dataset provided by Nephron Research)
…不太令人鼓舞。我们看到了大量快速增长但规模很小的药店(第二组,紫色部分);许多大药房的销售量几乎没有变化(第三组,黄色);中间是一片药房(第一组,蓝绿色)。
不过,没有高收益的连锁药店。
集群:版本 2
然后,我们决定隔离药物的“强度”,而不是平等对待所有阿片类药物。我们特别关注了三种药物,CDC 的研究表明这三种药物最常与过量用药有关:T2 羟考酮、氢可酮和芬太尼。(芬太尼在 2012 年还没有像最近一样在美国爆发,但由于其纯粹的化学力量,它仍然引起了人们的兴趣)。结果是:
The algorithmically generated PC1 in this plot is the inverse of high sales volume. 0 implies a high sales volume, whereas 50 implies low sales volume. (Source: Modified DEA ARCOS dataset provided by Nephron Research)
现在我们有所进展了。将“药物强度因子”从阿片类药物交易中分离出来,似乎会产生一个符合我们两个标准的连锁药店集群。然而,很难想象五氯苯甲醚产生的奇怪条纹簇,特别是 PC1,它似乎代表了增长率的倒数,很难解释。
集群:版本 3
然后,我们进行了三项改进。首先,我们根据县特定的 CDC 阿片类药物处方率数据以及人口对药房交易进行加权。从我们的单独分析中,我们知道,在 2006-2012 年期间,县级阿片类药物处方与县级阿片类药物过量率显著相关:
There is a fairly strong correlation (0.70) between a county’s average prescription rate per 100 people and average death rate per 100,000 people. (Source: Centers for Disease Control)
其次,我们剔除了所有交易数据,除了与羟考酮、氢可酮和芬太尼相关的交易。
第三,我们使用“肘规则”来解决四个不同的集群。结果是:
Clustering Version 3. (Source: Modified DEA ARCOS dataset provided by Nephron Research)
最后,通过我们的第三次聚类迭代,我们发现了这一点:大量出售危险药物的药店(根据当地人口和处方率进行了调整),并迅速加快了这些药物的销售。此外,在 1%的显著性水平上,高产聚类(在上图中统称为紫色和蓝色)不同于正常产量聚类。
比较独立药店和连锁药店
有了我们的聚类结果,我们继续追踪另一个直觉。到目前为止,我们的聚类实验主要集中在连锁药店,这仅仅是因为连锁药店在阿片类药物危机中吸引了更多的注意力。但是如果我们把我们的分析也应用到独立的零售药店呢?夫妻店会比连锁药店卖更危险的阿片类药物吗?
简而言之:是的。
当我们在同一个聚类分析中将独立药店和连锁药店结合起来时,高收益独立药店的数量远远超过了可比的连锁药店。在这 99 家两个主要成分都在第 60 百分位以上的药店中——称之为超高产药店——所有 99 家都是独立零售商。
Of the high-yield pharmacies in the independent + chain group (orange clusters at left), many are independent pharmacies (light blue, at right). Note: Independent pharmacies are labeled “retail” here, as they are denoted in the ARCOS dataset. (Source: Modified DEA ARCOS dataset provided by Nephron Research)
把所有的放在一起
在项目开始时,我们的任务是在庞大的 ARCOS 数据集中识别潜在的问题药房。通过结合使用数据聚合、k-means 聚类和 PCA(以及额外的 CDC 人口和处方数据),我们发现了 2006 年至 2012 年期间购买危险阿片类药物的连锁药店和独立药店的子集,这些药店的购买量非常大,购买率也越来越高。
如果说我们的分析牵涉到这些药店,或者甚至意味着更大的责任,那也太牵强了。我们的方法只是 ARCOS 数据集的许多潜在数据驱动方法之一。
我们仍然预计连锁药店——而不是独立药店——将与制造商和经销商一起,继续成为阿片类药物诉讼的焦点。此外,虽然阿片类药物诉讼当事人可能不会针对个别独立药店,但我们预计美国药品管理局已经发现并关闭了这些独立药店,并将继续这样做。
最终,我们的目标是证明无监督机器学习是理解 ARCOS 数据集的可行方法。随着阿片类药物诉讼的继续,这种方法肯定会阐明关于谁做了多少以及何时何地做的争论。
本报告是哥伦比亚大学课程 行动分析 的一部分。在整个课程中,哥伦比亚商学院的 MBA 学生和哥伦比亚工程研究生院的商业分析项目的硕士学生一起合作,应用数据科学,为一家公司解决一个实际的商业问题。
机器学习如何降低寻找更好远足的搜索成本
原文:https://towardsdatascience.com/how-machine-learning-can-lower-the-search-cost-for-finding-better-hikes-3d2e499cfcdd?source=collection_archive---------22-----------------------
我最近去了一个周末露营旅行,地点是迷人的 T1,离我在华盛顿州西雅图的住处只有两个多小时的车程。为了计划旅行,我们依靠华盛顿步道协会 (WTA)和一些其他资源来确保我们每天都有最佳的步道路线和露营地点。这些户外探险资源中的许多可以帮助人们计划多天的野营旅行,确定去哪里和父母一起远足,或者确保正确穿越阿斯加德山口,这是一个不到一英里的海拔 2300 英尺的粗略增益。但仍有所欠缺。
我真的希望所有这些徒步旅行资源都有一件事是基于我过去喜欢的徒步旅行的个性化徒步旅行建议(即如果我喜欢 hike X,我会喜欢 hike Y,因为它有类似的徒步旅行路线功能)或基于我过去对徒步旅行的评价(即 Goodreads 基于你的评论的个性化书籍建议)。
这些户外探险应用中的许多都让用户能够通过自定义过滤特定的徒步旅行路径属性(距离、海拔高度、难度等)来搜索徒步旅行。)但是他们缺乏任何智能推荐算法来降低搜索成本,以找到用户真正喜欢的远足。
我开始提出以下问题:
1.什么类型的智能推荐对狂热的徒步旅行者有用?
2.我能否构建一个利用徒步旅行评论的个性化推荐引擎?
3.我能否创建一个能力评分公式,将点评总数和给定提价的平均评分结合起来?
为了回答这些问题,我介绍了如何构建一个全栈机器学习 web 应用程序,该应用程序将根据徒步路线属性和用户评论为人们提供智能徒步建议。这将帮助狂热的徒步旅行者找到更好的路径。
为什么不直接构建这个机器学习应用程序呢?
我实际上已经构建并部署了这个机器学习应用程序,但抓取和使用他们的数据违反了许多公司的服务条款,所以我将它与相应的博客和 GitHub 存储库一起离线。我的确很天真,当时我并没有完全理解刮擦的惯例。
我对此感到非常抱歉,因为我不熟悉如何查看抓取数据。我只是对解决这个问题产生了浓厚的兴趣,并希望在我真正喜欢的应用程序上添加一个智能功能,以便我和我的朋友可以找到更好的徒步旅行。我希望这会给底层应用带来更多的流量。
不幸的是,事情并没有那么顺利——公司礼貌地要求我把我开发的应用程序撤下来。因此,在这篇文章的其余部分,我将分享我如何构建一个假设的线索推荐应用程序的高级视图。我将避免详细讨论如何抓取或提取数据,而是将重点放在管道上。
数据收集和机器学习管道
Hypothetical full data pipeline
数据
在理想的情况下,我会直接从内部数据库下载数据。在一个假设的世界中,我会编写一个 Python web 抓取脚本来获取徒步旅行路线属性和用户徒步旅行评论数据。对于华盛顿州,这将留给我大约 3,500 次徒步旅行和大约 200,000 次用户评论的数据,我希望将这些数据存储在我在本地连接的 MongoDB 数据库中。
徒步旅行路线特色
这些是远足径的功能,我想用它来建立一个类似的远足算法,以及一个基于用户评级的个性化算法。
Synthetically Generated Hiking Trail Features
数字特征包括总距离(以英里为单位)、高程增量(以英尺为单位)和高程严重性。其余的特征将被分类标记为值 0 表示“否”或 1 表示“是”,这取决于该特征是否描述了给定的远足。这些特性中的大部分可以通过清理存储在 MongoDB 中的原始数据直接创建。我还想设计一些额外的功能。我会包括:
海拔严重程度:每英里步行距离的海拔高度,以英尺为单位
人流量:我会解析一个线索摘要段落和用户评论,寻找描述给定线索的典型人流量的语言。这些将被分类为重度、中度、轻度和未知
推荐系统
为了建立机器学习模型,我会利用苹果的开源机器学习库 Turi Create ,因为开发定制推荐模型非常灵活。
项目内容相似度
这个推荐器只考虑了徒步路径属性。它查看每一对不同的徒步旅行,并根据徒步旅行路线的特征计算它们的相似程度。通过首先计算每个特征之间的相似性来计算该相似性分数,然后对这些特征进行加权平均来获得最终的相似性。这是很有用的,因为用户可以指定他们喜欢的远足,这个推荐器将提供最相似的远足。
例如: “如果你喜欢崂山古道,这里有一些与崂山古道最相似的徒步旅行项目。”
模型功效启发式
在构建模型之前,我会有一些具体的试验示例,在这些示例中,我可以测试算法的建议质量。这是我根据自己的经验熟悉的几个例子:
派克市场→ 也许应该得到推荐。其他类似城市的短距离、低海拔步行
宁静湖步道→ 可能应该推荐科尔查克湖,因为它们都是高步行交通,挑战与高山湖相似距离的徒步旅行
Mock Design for how to Test the efficacy of the similar hike algorithm against established expectation
在上面的例子中,这两个测试案例都符合要求,Pike Place Market 返回其他短途城市步行,Lake Serene Trail 返回 Colchuck 湖作为第二个最相似的徒步旅行。
排名因子分解
如果我们有用户给出的实际提价评级,那么选择最佳模型取决于我们是否希望预测用户对任何特定提价的评级,或者我们是否希望模型推荐它认为用户会给予很高评级的提价。我们可能更关心排名表现,因为在中,我们想要推荐用户可能评价很高的提价。
ranking factorization recommender推荐与用户已查看的徒步旅行数据集中的徒步旅行相似的徒步旅行,以及那些将被用户高度评价的徒步旅行。这种推荐背后的直觉是,应该有一些潜在的特征来决定用户如何评价上涨。
Building a Hiking Recommender System with Matrix Factorization
例如: “对于已经对一些涨价进行了评级的用户佩里来说,以下是佩里可能会给予很高评级的涨价。”
建立这个模型
在大多数户外应用程序中,用户会明确地根据星级数增加评分(0 =非常不喜欢,5 =非常喜欢)。如果我们在过去有大约 200,000 个这样的评级(记录表明用户有的评级提升 X 有 Y 颗星),那么我们可以构建排名因子分解推荐器。我会使用一种称为分割验证的技术:我们只取这些评级(称为训练集)的子集(80%)来训练模型,然后我们要求模型预测我们隐藏的 20%的评级(测试集)。
例如,可能会发生这样的情况,一个测试用户给某次远足打了 4 颗星,但是你的模型预测是 3.5 颗星,因此在这个评分上有 0.5 的误差。然后,我们使用均方根误差(RMSE)公式计算整个测试集的平均误差,以获得最终结果。这就是如何量化这个推荐系统的预测性能。在应用程序中实现该模型之前,我会遍历该模型的几个不同的超参数值,以最小化训练集数据上的 RMSE。
人气
基于流行度的推荐器并不智能,但是如果用户以前没有在特定区域徒步旅行过(或者以前从未徒步旅行过!),它们是有用的数据产品和冷启动问题的潜在解决方案。).这些通常很有趣,也是寻找徒步旅行的有用基线。
评论数量
这将根据评论的数量推荐最受欢迎的远足。
平均星级(指定符合条件的最低点评数)
这将根据评分推荐最受欢迎的涨价。我将从分析评论数量的分布开始,来感受一下评论在哪里。在这个合成生成的数据集中,很明显,5 星级(满分)的远足是由少数评论主导的。因此,我认为一次远足至少需要有 100 条评论才能算作推荐。例如,我想确保一次有大约 6 个评论的 5 星评分的远足不包括在内。
Synthetically Generated: 5 Star Ratings dominated by Low Number of Reviewed Hikes
额定功率
我将创建一个从 0 到 100 的自定义评分,将评论数和平均评分混合到同一个分数中。评价为 4.9 星但只有 10 条评论的远足可能不会被评价为 4.6 星但有 1000 条评论的远足。
Synthetically Generated: Distribution of Hike Ratings before blending in the Number of Reviews
第一步:公式
强力评分=(评论数/(评论数+90%分位数的评论数)评分)+(90%分位数的评论数/(90%分位数的评论数+评论数)所有涨价的平均评分)
Synthetically Generated: Distribution of Hike Ratings after applying the formula to blend number of reviews and ratings score
第二步:最小最大缩放器
最小最大缩放器根据使用指定数据的最小和最大值的公式缩放和转换数据,使其在 0 和 1 之间的范围内。然后,我将每个值乘以 100,以将功率评级分数调整到 0 到 100 之间的范围。
Synthetically Generated: Power Ratings Distribution once scaled to values between 0 and 100
申请
一旦我们有了可行的徒步旅行建议的机器学习模型,我会使用 Python 编写的 Flask web 框架来构建应用程序。在花了大约两周的时间编写代码来构建支持 HTML、CSS 和 JavaScript 文件的核心 web 应用程序功能后,我将能够在 Heroku 的云平台上将其作为多页面 web 应用程序发布。
寻找一次和你喜欢的远足相似的远足
为了获得与你喜欢的徒步旅行相似的徒步旅行,用户只需指定他们喜欢的一次徒步旅行,然后将提供一个最相似的徒步旅行列表,其中包含路径信息以及返回各自简档的嵌入式链接。
根据您的评分寻找个性化的徒步旅行
理想情况下,我们应该集成一家户外探险公司的用户登录和个人资料数据,但如果这不可能,我可以创建一个唯一的用户 ID,映射到用户的全名。
为了获得个性化的评论,用户需要输入与其账户相关的全名,在我的例子中就是:Perry Johnson。然后,根据我的评论,我真正喜欢的最有可能徒步旅行的列表将与步道信息和返回各自徒步旅行档案的嵌入式链接一起提供。
结论
通过利用徒步旅行路线属性和用户评论构建这一新颖的数据产品,我们将为狂热的徒步旅行者提供更明智的徒步旅行建议。这将是第一套机器学习算法,可以个性化用户体验,降低搜索成本,以找到更好的徒步旅行路线。
评论或提问?请发电子邮件至:perryrjohnson7@gmail.com 或联系LinkedIn
你可以看看我其他的一些作品:
机器学习如何帮助你给电动滑板车充电
逆向工程行走评分算法
机器学习如何改变能源行业
原文:https://towardsdatascience.com/how-machine-learning-can-transform-the-energy-industry-caaa965e282a?source=collection_archive---------5-----------------------
Photo by Thorsten Hack on Unsplash
2017 年,比尔·盖茨写了一封公开信给世界各地的大学毕业生。他提到,如果让他重新开始人生,寻找机会对当今世界产生重大影响,他会考虑三个领域:“一个是人工智能。我们才刚刚开始探索它将使人们的生活更富有成效和创造性的所有方法。第二是能源,因为让能源变得清洁、可负担和可靠对于战胜贫困和气候变化至关重要。“第三个领域是生物科学。【1】
如今,当各国试图使其能源组合多样化,并对更清洁的能源产生更大的依赖时,它们只剩下一个主要问题。两种主要的可再生能源——太阳能和风能——本质上是可变的。太阳能电池板或风力涡轮机产生的电力从来都不是均匀的,取决于一系列无法控制的外部因素——太阳辐射强度、云量、风速。
即使是德国,这个世界上可再生能源的典范,也发现很难完全依赖可再生能源。在无风和多云的日子里,太阳能和风力发电场几乎不产生任何能量,电网运营商被迫求助于传统发电站来满足能量需求。另一方面,如果是一个风和日丽的日子,并且他们当天 90%的能源需求得到满足,运营商需要在电力过载窒息整个电网之前迅速减少燃煤和燃气发电站的输出。由于电网运营商必须补偿公用事业公司对其输入进行的调整,此类要求每年花费德国客户约 5.53 亿美元。此外,电网运营商最终会排放不必要的二氧化碳,因为额外的电力最终会被浪费掉。除此之外,准确预测消费者的能源需求也是一个挑战。总的来说,保持能源供需平衡可能会变成一场噩梦。
这让我想到了机器学习在整个能源领域可能扮演的角色。尽管它还处于实施的早期阶段,但机器学习可能会彻底改变我们处理能源的方式。其影响范围涵盖了可再生能源预测和智能电网领域。
可再生能源预测
如果我们能够准确预测风力涡轮机在未来 36 小时内的发电量,我们将能够有效地过渡到可再生能源,而不会破坏电网的稳定。但这可能吗?答案是肯定的。我们快到了。
早在 2013 年,IBM 就与美国能源部合作,开始研究如何利用他们的人工智能引擎 Watson 来获得更清洁的电力。这个机器学习模型是从几个预测模型中建立的,后来又从美国约 1600 个地点获得了天气和大气数据。随着时间的推移,这个机器学习模型在预测功率输出方面变得越来越好。
今天,IBM research 有 200 多个合作伙伴使用其太阳能和风能预测技术,可以提前 15-30 天准确预测太阳能/风能条件。IBM 的项目经理亨德里克·哈曼说,IBM 的可再生能源预测技术(称为瓦特-太阳)比下一个最好的太阳预测模型精确 50%。
经济潜力巨大。最近被谷歌收购的英国人工智能公司 DeepMind 是这方面的最佳案例研究。
2018 年,DeepMind 开始将机器学习算法应用于谷歌在美国中部的 700 兆瓦风力发电能力(700 兆瓦足够为一个中等城市供电)。使用基于可用天气预报和历史涡轮机数据的神经网络,它可以提前 36 小时合理预测风力发电输出。DeepMind 的项目经理西姆斯·威瑟斯彭(Sims Witherspoon)表示,仅在一年内,这些机器学习算法就将风能的价值“提高了大约 20% 。【4】
更加依赖机器学习算法也可以节省客户的资金,同时拯救地球。Xcel Energy,一家拥有美国最高总风力发电能力的公用事业公司,正是这么做的。Xcel 能源公司的可再生能源分析师德雷克·巴特利特说:
“自 2009 年以来,预测错误的数量已经下降,为客户节省了约 6000 万美元,并减少了化石储备发电每年超过 25 万吨的二氧化碳排放量。”
智能电网
随着预测能力的提高,各国正在逐步建立“智能电网”,即“监测和控制每个消费者和节点的全自动电力输送网络,确保电力和信息的双向流动”。【第六期】
自 2010 年以来,美国能源部已投资超过 45 亿美元建立智能电网基础设施。他们已经安装了超过 1500 万个智能电表,这些设备在消费者端监控能源需求和供应。此外,他们还投资了被称为【同步相位器】的设备。这些小盒子测量电网特定位置的瞬时电压、电流和频率。这些传感器将与电网通信,并在非高峰时间修改电流,为客户降低价格,同时也减轻了电网的工作负荷。甚至谷歌也应用了这种人工智能技术,以努力降低其数据中心的总功耗,在此过程中节省了数百万美元。【7】
但是即使有了智能电网,也有潜在的担忧。一个收集数百万用户能源使用习惯数据的中央系统可能成为恶意网络攻击的目标。这可能会破坏电网的稳定,同时也会损害宝贵的消费者数据。英国研究人员认为,区块链协议可能是解决方案。使用与比特币相同的技术,分散式账本系统可以避免用户数据单点存储的安全风险。
关键外卖
随着智能电网中预测能力的提高,各国可以越来越多地依赖可再生能源,将太阳能和风能不规则性造成的干扰降至最低。机器学习和能源的融合可能会前所未有地改变世界,并从根本上改变我们对这两个行业的看法。
欢迎给我发电子邮件到kausarp2@illinois.edu或者通过 LinkedIn 联系我!
灵感:@TadasJucikas & 富兰克林·沃尔夫
机器学习如何帮助寻找古代文物
原文:https://towardsdatascience.com/how-machine-learning-could-help-find-ancient-artifacts-a-walk-through-cb718de92057?source=collection_archive---------25-----------------------
在这篇博文中,我们将使用大英博物馆和柏林博物馆的考古数据来训练一个梯度推进模型。第一部分是数据分析和数据结构化部分。在第二部分中,我们将进一步了解梯度推进算法,并将其用于数据。最后,该算法将用于发现潜在的新考古遗址。
Ancient ruins of Laodikeia, Turkey (Own work)
检查数据
在我们开始编程检索和结构化数据之前,理解数据是有用的。数据由 5763 行组成。每一行都有一个经度和纬度,代表古希腊的一个地方,在那里发现或没有发现古代艺术品。文物大多是硬币,双耳瓶,武器和小雕像。下面的地图显示了找到的文物的位置:
第一个特征(列)是地点是否在古希腊神庙附近。这些神庙从著名的特尔斐神谕到不太为人所知的泰奥斯的狄俄尼索斯神庙。在古代,寺庙曾经吸引朝圣者和商业,所以寺庙的邻近表明考古发现的可能性很大。下面的地图显示了各个古希腊神庙的位置:
第二个特征表明该位置是否在古希腊或古罗马战场附近。古代希腊人和波斯人打仗,雅典和斯巴达打仗,罗马人和马其顿人打仗。在这些战斗之后,武器和盔甲丢失并被遗忘,等待以后被发现。下图显示了现代希腊和土耳其最重要的古代战役的位置:
第三个特征表明该位置是否在古代港口附近。这可能是天然港口,古代码头的遗迹,或者是古代文献中提到的(更大的)港口。正如你在下面看到的,这里有很多古老的港口:
第四个特征检查位置是否在古代城邦或罗马城市附近。希腊文化以其城邦文化而闻名,那里没有中央希腊政府,而是一群独立的城邦。希腊最著名的城邦是雅典。罗马人也在该地区建立/升级了城市,最著名的是君士坦丁堡。古代城市周围有一个半径,他们在那里使用土地进行农业、商业、狩猎和采矿。由于城市周围的这些地区有人类活动,这些人类留下痕迹的可能性很大。下图显示了各个古代城市的位置:
最后一个特征表明该位置是否在现代城市附近:
检索数据
现在我们知道我们的数据看起来像什么了。下一步是检索数据,以便我们进行分析。打开您的 Python 解释器。我和 PyCharm 一起工作,社区版免费使用,可以在这里下载。打开 PyCharm 后,键入 ctrl+alt+s 并单击十字(+)。安装以下库,numpy,pandas,sklearn 和 matplotlib。如果您使用不同的应用程序来编写 Python 代码,那么使用 pip install numpy、pandas、sklearn、matplotlib 来安装库。
接下来我们必须下载数据集。数据集可以在这里找到。右键单击网页,然后单击另存为,或按 ctrl+s。将文件另存为 csv。
打开新的 Python 文件。首先,我们必须导入上面添加的库。Pandas 是一个用于数据检索和结构化的库。Numpy 是科学 Python,一个用来做数学计算的库。Sklearn 是一个包含各种机器学习算法的库。Matplotlib 是一个通过绘制图形来可视化数据的库。键入以下内容以导入库:
# libraries needed to run algorithms
import pandas as pd
import numpy as np
from sklearn.ensemble import GradientBoostingClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
很好,现在我们有了所有需要的库。接下来,创建一个名为 Trainer 的类。这个类将获取数据,进行分析,训练梯度推进算法,并使用训练好的算法来预测新的案例。在 Trainer 类中创建一个名为 createABT 的方法。在该方法的第一行,通过读取 csv 创建一个数据帧。在第二行中,混合数据行。这对于在后期阶段应对模型的过度拟合非常重要。最后,返回数据帧。
class Trainer:
#method to get data and build Analytical Base Table
def createABT(self):
df = pd.read_csv("C:/Users/makin/Documents/ABT.csv")
df = df.reindex(np.random.permutation(df.index))
return(df)
创建一个名为 algo 的类的实例,在下一行中让它使用 createABT 方法。现在,数据被检索并放入分析基表中。
algo = Trainer()
df = algo.createABT()
分析数据
让我们使用 pandas describe 命令来检查数据。这个命令向我们显示了每一列的统计信息。
print(df.describe())
由于所有特征都是二进制(0 或 1)特征,因此每一列的平均值反映了数据的分布情况。特征“靠近古代港口”的平均值为 0.94。这意味着 94%的数据点靠近一个古老的港口。这是一个很高的数字,所以这个特性的影响可能会很有限。其他特征分布更加均匀。分类列的平均值为 0.54,这意味着正面和负面训练示例的分布相等。
第二个分析步骤是将特征平均值与分类列进行比较。以这种方式,我们可以检查每个特征的两个平均值,一个是当分类列为 1 时,即已经发现对象,另一个是当分类列为 0 时的平均值。在我们之前创建的 Trainer 类中,我们将创建一个名为 analyzeABT 的新方法,它将数据帧作为输入。首先,我们去掉数据帧中不必要的列。然后我们创建两个空数组,其中存储了每一列的正负平均值。然后,我们使用两个 for 循环来确定每列中的平均值,同时根据肯定或否定分类过滤数据。在这段代码之后,两个数组(pos_mean 和 neg_mean)填充了特性的所有平均值。使用 Matplotlib 库,以下代码将结果可视化:
通过将该方法添加到 python 文件底部的 Trainer 类的 algo 实例中,使该方法可执行。
algo.analyzeABT(df)
该代码将生成下图:
“附近的寺庙”特征和“附近的城邦”特征可能是算法中最重要的特征。该图显示,已证实的考古遗址平均更多地位于寺庙、古代港口和旧城邦附近,而没有文物的遗址平均更靠近古代战场和现代城市。
所以到目前为止的总代码是:
梯度增强是如何工作的?
在深入研究梯度推进代码之前,了解一下梯度推进算法是很有用的。梯度增强基本上是将许多弱预测模型以弱模型集合的形式增强成一个强预测模型。弱预测模型可以是比随机猜测稍微好一点的任何模型。
为了建立梯度增强模型,重要的是弱模型被最佳地组合。弱模型以自适应方式训练,如以下步骤所示:
1)通过使用来自您的群体的数据样本来训练弱模型。
2)增加被步骤 1 的模型错误分类的样本的权重,并减少被正确分类的样本的权重。
3)使用具有来自步骤 2 的更新的权重分布的新样本来训练下一个弱模型。
通过这种方式,梯度推进总是使用在前几轮中难以学习的数据样本进行训练,这导致擅长学习数据的不同部分的模型的集合。
为了衡量我们模型的质量,我们将使用 ROC 值。这是一个衡量真阳性(预测阳性和实际分类阳性)与假阳性(预测阳性但未分类阳性)的指标。ROC 值为 1 是可能的最佳结果。
训练我们的模型
此代码检索数据并将其转换为数据帧。现在,我们将构建一个梯度推进分类器来预测一个潜在的遗址是否适合考古调查。首先创建一个名为 trainingModel 的新方法,它将数据帧作为输入。在该方法中,为 X 值(要素)和 Y 值(分类)创建数据框。将 X 和 Y 数据分割为训练和测试数据,并在数据上训练来自 SKlearn 库的梯度提升分类器。接下来,通过确定真阳性率和假阳性率来计算 ROC 值。同样打印特征重要性,以查看哪些特征(X)对模型预测结果最重要。最后,返回梯度提升模型、真阳性率和假阳性率。以下代码是如何管理这一点的示例:
将以下代码添加到 python 文件的底部,以执行 trainingModel 方法(fpr =假阳性率,tpr =真阳性率,gb =已训练的梯度增强模型:
fpr_gb, tpr_gb, gb = algo.trainingModel(df)
训练模型的结果
下面的代码可视化了经过训练的梯度增强模型的结果。
将以下代码添加到 python 文件的底部,以执行 visualizeResults 方法:
algo.visualizeResults(fpr_gb, tpr_gb)
代码生成下图,显示了 ROC 曲线:
正如你所看到的,ROC 曲线下的面积几乎是 1(它是 0.97),这意味着我们的模型表现得非常好!接下来,我们将检查各个功能。经过 1000 次迭代后,平均特征重要性如下所示:
正如我们在第 1 部分的分析步骤中所预期的,“接近古代港口”的特征并不重要,因为 94%的数据都在古代港口附近。事实证明,“近神庙”和“近城邦”特征对于模型确定位置分类最为重要。
使用我们的模型来识别潜在的考古遗址
我们有一个经过训练的梯度推进模型。经过一些分析后,该模型投入生产看起来一切正常。要将训练好的模型用于新的预测,请使用 SKlearn 函数“predict”。它需要 x 要素作为输入,并预测 ŷ输出。以下代码将要求用户输入要素,模型将给出预测作为响应。如果潜在的搜索位置是好的,它将返回‘这是一个调查的好地方’。否则,代码将返回‘最好去别的地方看看!’。为了方便起见,下面的代码是代码的完整最终版本。testAlgo 方法是新添加的部分:
我们用这个算法在土耳其寻找新的潜在考古遗址。我们去了希腊罗德岛附近的土耳其海岸。这个地方靠近一座古庙,一座古代城邦,而不是一座现代城市。经过训练的算法给出了积极的建议。
我们在这一带潜水寻找双耳瓶,并沿着海岸寻找新的踪迹。在希腊西米岛的对面,我们发现了第一批未知的古代遗迹。在水下 10 米处,我们发现了一块安瓶的碎片。
又过了几英里,我们再次测试了算法的正面结果。在海岸附近徘徊后,我们发现了一个双耳瓶的以下部分:
到目前为止,该算法似乎给出了一个很好的指示,表明一个地点是否适合寻找古代遗迹。根据土耳其法律,我们已经留下了安芙拉的碎片。由于双耳瓶不够稀有,土耳其博物馆对此不感兴趣。显然,该算法不够精确,无法检测新考古遗址的确切位置。但它确实给出了一个很好的初步迹象。在这项研究之后,我们希望将这种算法与卫星图像识别的使用相结合。待续..
非常感谢
古代海港资料来自:
http://www . ancientportsantiques . com/the-catalogue/Greece-islands/
staaliches Museum zu Berlin:
https://www . SMB . Museum/en/research/online-categories-database . html
https://www.britishmuseum.org/research/collection_online/大英博物馆:
T5
维基百科:
https://en.wikipedia.org/wiki/List_of_battles_before_301
https://en.wikipedia.org/wiki/List_of_Ancient_Greek_temples
谷歌地图 API:
https://developers.google.com/maps/documentation/
野外工作:
艾金·卡拉库尔
机器学习如何帮助制造更好的电池
原文:https://towardsdatascience.com/how-machine-learning-is-helping-to-build-better-batteries-cfe3622388aa?source=collection_archive---------46-----------------------
Photo by Frank Wang on Unsplash
介绍
电池是当今世界最重要的设备之一。它们几乎被用于任何便携式电子设备:电话、汽车、玩具,甚至卫星。因此,它们提出了一些基本挑战,需要加以克服,社会才能可持续发展。
减缓减少对化石能源依赖的一个重要问题是,对大多数人来说,可再生能源不能提供恒定的电力流量:太阳能只在晴天可用(对不起,英国),风力涡轮机需要风,等等。正因为如此,产生的电力需要储存起来,目前这种方式效率非常低。
例如,最常见的节能机制之一是“抽水蓄能”水电站大坝。通过使用来自可再生能源的电力将水“泵上大坝”,水被转化为势能,然后当网络需要时,通过让水通过水轮机流回,水又被转化为电力。不用说,在这个过程中会损失很多能量。
此外,目前的电池技术是由稀有矿物制成的,主要是钴和锂,它们是稀有的,并且显然储量有限。由于这些电池无处不在,因此迫切需要提高现有电池的效率,找到一种清洁回收它们的方法,或者找到其他化合物,以使矿物消耗多样化,并有望长期可持续。
此外,电池生产目前有很大的碳足迹。电动汽车的生产贡献了两倍,主要是由于电池。总之,这些问题为电池研究提供了强大的动力。
电池研究
电池研究的问题是解决方案空间的大小。有数千亿个潜在的分子化合物,甚至为了开始测试这些化合物,人们需要找到一种结构,使电池能够工作,能够很好地节约能源,而且非常重要的是,是安全的。
因此,这里的圣杯将是一个函数,给定一个结构,快速输出各种特征,但是当然我们离那个还很远。相反,这篇论文的目的是尝试看看是否有可能预测分子的原子化能量。这种特性可以用来立即过滤掉不好的化合物,从而让研究人员专注于更有潜力的化合物。目前有两种方法用于计算这些,一种缺乏速度(G4MP2),另一种缺乏精度(B3LYP)。
这是 ML 方法的起点。他们采用了三种方法:基于核的岭回归(FCHL)和连续滤波卷积神经网络(SchNet),并采用了不同的目标和模型。最有效的方法是使用δ学习。那是关于 B3LYP 和 G4MP2 能量之间的差异的训练。
总的来说,SchNet-delta 和 FCHL-delta 是最好的性能模型,训练后取得了相似的结果。然而,FCHL 需要更少的训练数据,却需要更强的计算能力,而 SchNet 则相反。此外,FCHL 执行时间与训练数据集的大小成线性比例,因为它需要将当前分子与已知分子进行比较,而神经网络的一个巨大优势是其执行速度。一旦网络被训练,它相当于一系列的矩阵乘法。即使在普通 CPU 上的深度卷积神经网络也能给出十分之几秒的预测结果。因此,如果神经网络能够获得良好的精度,它将免费获得速度。
即使在更重的分子上,这些分子更难预测,而且训练数据更少甚至没有,这些模型仍然达到了比 B3LYP 更好的精确度。
我们最好的模型,SchNet delta,在对 117,232 个分子进行训练后,预测 G4MP2 能量的 MAE 只有 4.5 meV (0.1 kcal/mol):远低于实验和 G4MP2 之间的 MAE(约 0.8 kcal/mol)
结论
总的来说,这是将机器学习应用于研究目的的一个很好的例子。它不是为我们解决问题或写方程,而是帮助研究人员专注于更有前途的道路。这是我个人设想机器学习将发展和实现最多的用例:不是作为中央决策计算机,而是作为人类决策的助手。
作者做了比本文更多的工作,在更多不同的条件下测试了更多的方法,这些都没有在本文中讨论。如果感兴趣,下面提供了链接和参考。
祝你今天开心!玩的开心!
参考
沃德、布莱兹克、福斯特、阿萨里、纳拉亚南、布莱兹克、&柯蒂斯(2019)。从低保真度量子化学计算中机器学习预测有机分子的精确原子化能量。夫人通信,, 9 (3),891–899。doi:10.1557/mrc.2019.107
“里卡多研究发现,电动和混合动力汽车在生产过程中的碳足迹高于传统汽车,但在整个生命周期中的碳足迹却更低”。绿色汽车大会。2011–06–08.检索于 2011 年 6 月 11 日。
机器学习如何改变谷歌及其他公司的医疗保健
原文:https://towardsdatascience.com/how-machine-learning-is-transforming-healthcare-at-google-and-beyond-d4f664b7e27c?source=collection_archive---------20-----------------------
谷歌和其他公司正在招募算法,在医学扫描中发现癌症,预测医院就诊的结果,等等。以下是方法。
机器学习——使用数据模式进行预测的艺术——将改变几乎所有行业,从金融、零售和营销到数字助理和无人驾驶汽车。但是当谈到机器学习(ML)如何造福人类时,几乎没有比医疗保健更有前景的领域了。
几乎每个月我们都会听到一种新的疾病,机器学习模型已经学会比训练有素的临床医生更快更准确地标记这种疾病。ML 正被用于帮助医生在医学扫描中发现肿瘤,加快数据输入,并自动响应医院患者的需求。
这些 ML 驱动的突破出现在关键时刻,因为美国和世界范围内的医生和专家短缺继续增长。随着我们对医生的需求超过供应,我们很可能会发现自己依赖技术来帮助填补空白。
在本帖中,我们将介绍谷歌和其他公司将机器学习应用于医疗保健的一些方法。让我们开始吧。
学习在医学图像中观察疾病
在过去的 5 年里,机器学习已经变得非常擅长分析图像,这主要归功于一种叫做“神经网络的模型神经网络尤其擅长理解非结构化数据,如照片、大块文本、音频片段——这些不是电子表格中简单的数字行的东西(尽管它们也擅长分析这种数据!).
神经网络为识别照片中的人脸和宠物、将手写内容转换为文本、创建流畅的翻译、让您在谷歌照片应用程序中按关键字搜索照片等工具提供了动力。
Neural nets let you search your pictures by keyword in the Google Photos app. Here are all my breakfast pics.
要自己创建这样的视觉模型,你需要一个大型的标记的图像数据集——数百或数千张标记为“狗”和“猫”的狗和猫的图片——你可以用它来“训练”模型自己识别这些标签。
使用同样的技术,研究人员已经能够训练神经网络在医学扫描中发现疾病,有时比训练有素的专业人员更好。
就在上个月,谷歌的研究人员训练了一个神经网络来检测 26 种不同类型的皮肤状况,如黑色素瘤、牛皮癣、湿疹、囊肿等。该模型结合了照片和病史,与皮肤科医生一样准确,比没有经过皮肤专业培训的普通医生更准确。
这仅仅是最近的一大堆几乎有着相同故事情节的研究中的一个。我们已经能够发现转移性乳腺癌,预测前列腺癌是否会变得具有侵略性,并从眼睛后部的扫描中检测出糖尿病视网膜病变(失明增长最快的原因)。
Predicting lung cancer from CT scans. Credit: https://www.blog.google/technology/health/lung-cancer-prediction/
就在今年 5 月,研究人员训练了一个模型,该模型可以通过 ct 扫描预测肺癌的恶性程度,精确度相当于或优于委员会认证的放射科医生。这项工作尤其具有影响力,因为肺癌不仅是最致命的癌症,也是放射科医生最难发现的癌症之一。
这些模型可能不会很快取代医生,但可能过不了多久它们就会充当辅助工具,提醒医生最棘手或最微妙的诊断。
自我解释的医学模型
然而,要成为真正有用的辅助工具,医学成像模型不仅需要发现疾病的存在,还需要解释它们的决策过程。这样,如果医生不同意一个模型的预测,她至少会知道为什么这个模型说它做了什么。
出于这个原因,研究人员通常会建立模型,不仅预测疾病的存在,还会直观地突出有助于这些预测的扫描区域(热图)。
Ophthalmologists were better at detecting DR when aided by deep learning models and their associated decision heat maps, like the one above. Source: https://www.aaojournal.org/article/S0161-6420(18)31575-6/fulltext
上面的模型,经过训练以识别糖尿病视网膜病变(DR,全球增长最快的致盲原因)的存在,突出了视网膜扫描的哪些部分最有助于其决策(DR 或无 DR)。当眼科医生看到这些热图时,他们能够更好地检测糖尿病视网膜病变。
争论医疗数据消防软管
当有一个漂亮、整洁的数据集时,ML 工作得最好(就像一堆带标签的 x 光片)。但是,许多临床数据是分散的,分散在以太网中,如手写表格、处方、用 chicken scratch 草草记下的笔记、存储在数据库中的重要数据,这些数据的格式与其他任何数据都完全不兼容。
也许“数据争论”听起来没有在 CT 扫描中发现肿瘤那么令人兴奋,但 ML 在医疗保健中的大部分作用是帮助捕获、组织和分类数据。
正如神经网络可以被训练来发现图像中的疾病一样,它们也可以被训练来解析文档和表格。例如,我们可以使用模型来分析医疗记录表单,将手写内容转换为文本,并对文本进行语义组织,以便将其存储在数据库中。
Using a ML Vision model, you could extract handwriting to text. Then you could use an ML technique called “Entity Extraction” to understand words in a document and their semantic relationship to each other.
我们越容易处理数据,就越容易建立强大的 ML 模型。为此,谷歌投入了大量资源来构建工具,使医疗数据更容易存储和分析,并帮助开发快速医疗互操作性资源协议( FHIR ),使医疗数据更具互操作性,更容易为其构建软件。
多亏了这些数据辩论工具,我们能够训练以前无法训练的模型。例如,去年,的研究人员能够使用 FHIR 数据构建医院患者就诊的详细时间表:
Credit: https://ai.googleblog.com/2018/05/deep-learning-for-electronic-health.html
利用患者的生命体征、医生笔记、实验室测试等数据,以及时间表中更有组织的数据,研究人员可以训练强大的神经网络模型来预测医院就诊的结果。利用这些时间线,他们可以预测病人住院的时间,他们是否会死亡,以及(如果不会的话)他们会以什么医疗代码出院。
我们对医疗数据的整理越有条理,我们建立的医疗模型就越强大和准确。
学习像医生一样倾听
就像组织数据需要工作一样,首先收集数据也需要时间。想象一次去全科医生办公室的典型拜访:
你的医生问你怎么了。你回答说你发冷,疲劳,喉咙后面有无尽的痰。也许你的医生正在记事本或 iPad 上潦草地记下你说的话,或者也许她有一个助手或“抄写员”代表她做笔记。无论哪种方式,这个过程都是耗时耗力的。
如果其他人(或其他什么东西)可以监听并帮助解决问题呢?如果那个人是 Alexa 呢?还是 Siri?还是谷歌助手?
事实上,语音助手已经部署在医疗中心和医院,帮助完成像 T2 把病人的请求转给工作人员或 T4 向护士提供行政信息这样的任务。
很明显,医疗语音机器人是大型科技公司关心的一个领域:亚马逊最近宣布了一项计划,让开发者更容易为 Alexa 开发符合 HIPPA 的健康语音应用。与此同时,谷歌花了大量时间研究更好的转录医疗对话的方法,探索一旦我们得到这些转录本,可能会做些什么,比如自动绘制病人在医生出诊期间描述的症状。
因此,也许用不了多久,谷歌助手就能为你做更多的事情,而不仅仅是设置你的闹钟和告诉你天气。
我们已经讨论了机器学习在医疗保健领域掀起波澜的许多方式,但到目前为止,我们只触及了可能的表面。因此,请务必关注这些新领域的交集。
感谢阅读!乐意回答下面的任何问题或评论。
想看更多这样的故事?详见。
[1]如果你想玩一个很酷的工具,可以让你自己建立一个这样的模型,看看谷歌的文档理解人工智能。
机器学习是如何让我爱上 WNBA 的
原文:https://towardsdatascience.com/how-machine-learning-made-me-fall-in-love-with-the-wnba-278f06eee503?source=collection_archive---------19-----------------------
Photo: Angel McCoughtry of the Atlanta Dream playing against the Minnesota Lynx.
实现我打造女子运动梦之队的幻想。
我做了一个不知道从哪里冒出来的白日梦。一个全明星女子运动队的形象出现在我眼前。所有团队和运动类型中最伟大的女性运动员在同一个团队中比赛。像马里奥赛车,除了你有小威廉姆斯,丽萨·莱斯利和 Katelyn Ohashi 都在同一个平台上玩,而不是马里奥,桃公主和蟾蜍。我意识到,我可以通过使用数据科学和机器学习工具来设计最好的团队,并预测如果他们互相比赛会是什么样子,从而使这一愿景成为现实。然而,就像所有大梦想(和大数据)一样,我决定从女子体育世界的一个子集开始,逐步从其他女子体育项目中获取数据。所以我开始了我的使命,通过分析来自 WNBA 的数据来实现我的白日梦。大家准备好,终极 WNBA 游戏即将开始。
LA Sparks getting hyped before playing.
第一步:让每个 WNBA 球员都上场(或者,数据采集)
我做的第一件事是从篮球参考收集每一个 WNBA 球员的每场职业统计数据。我总共获得了 923 名 WNBA 球员的数据。下面是我的数据帧头的预览。如果你想知道下面数据框中的每一列代表什么,请查看这个词汇表。我将继续翻译一行,以便您了解如何解释这些数据。洛杉矶火花队的 Farhiya Abdi 总共打了 52 场比赛,并首发了其中的 5 场。平均每场比赛,她在场上打了 9.6 分钟,投篮命中率为 38%,三分球命中率为 25%,两分球命中率为 43%,罚球命中率为 68%。阿卜迪也场均 1 篮板 0.4 助攻 0.2 盖帽 0.4 失误 1.2 个人犯规。最后,阿卜迪平均每场得分 2.9 次。一旦我完成了将所有球员分组到排名的球队,我将使用这些每场比赛的统计数据来模拟前两个球队之间的数据驱动的季后赛。
10 out of 923 per-game career stats for every WNBA player listed on basketball-reference. I can’t help but see this DataFrame as a court where the data are playing against each other.
第二步:按位置划分所有 WNBA 玩家
为了创建最好的团队,我决定根据位置拆分所有球员,并使用机器学习在每个位置内开发排名分组。正如《篮球参考》上记载的那样,WNBA 球员根据这五个位置进行分类:前锋、中锋、前锋、后卫和前锋。在 923 名 WNBA 球员中,有 908 人的位置已经列出。这是按位置分列的运动员名单。
Distribution of positions of all-time WNBA players.
第三步:确定每个职位的最佳绩效比率
在我把所有球员按位置分成五类后,我根据以下类别计算了每个位置的平均表现:投篮命中率(FG%
)、总篮板(TRB
)、抢断(STL
)、盖帽(BLK
)、助攻(AST
)和总得分(PTS
)。一些职位在更多的类别上比其他职位表现更好。例如,前锋球员在更多的表现类别上比其他位置表现得更好,所以他们有四个最好的品质。另一方面,前锋球员更加专业化,在两个方面表现出色。以下是我认为每个职位的最佳表现品质。
- 前锋中锋:
TRB
、BLK
、FG%
、PTS
- 前锋:
AST
,PTS
,STL
- 中心:
BLK
、FG%
、TRB
- 守卫:
AST
、PTS
、STL
- 前进:
FG%
,TRB
步骤 4:使用机器学习在每个位置内创建分级聚类
将 WNBA 球员按照他们的位置进行划分,我用他们表现最好的品质作为我的预测变量,在每个位置内创建了集群。我使用了一个名为 K 均值聚类的无监督机器学习模型来帮助我完成这项任务。K-Means 聚类所做的是围绕中心点对数据进行分组,从而创建相似数据的不同聚类。由字母k
表示的中心点的数量是需要预先确定的参数。寻找最佳的k
来为每个位置创建排名聚类需要多次尝试。我事先也知道我想用相同的数字k
对每个职位进行分组,所以在某些情况下,一个职位的分组比其他职位的分组更清晰。最终我选择了n_clusters = 8
,因为这个数字往往有相对较高的轮廓和较低的惯性分数。轮廓分数越高,组就越明显,惯性分数越低,每个数据点在一个聚类中就越相似。在下图中,您可以看到前中聚类的剪影得分非常高(见左),但警卫聚类的剪影得分很低(见右)。这意味着前锋中的球员群将比后卫中的球员群更加独特。
Here’s an example where my k worked better for Forward-Center compared to Guard, specifically looking at the silhouette scores.
在玩家被分类成组后,由我来决定排名并对任何任务进行调整。集群不会自动转化为排名,有时集群会形成不完美的群体。我将向您介绍我是如何为前锋解释集群的。在下面的集群可视化中(见左图),有八个集群对应于n_clusters = 8
。请记住,我决定了每个职位使用的绩效类别。对于前锋,我选择了助攻、总得分和抢断,因为他们在这些方面表现很好。现在创建排名,我提到了质心计算(右)。质心数据帧的索引指的是特定的簇号,范围在 0 到 7 之间。平均值最高的集群在所有性能类别中表现更好。聚类 5 中的玩家将被排名为最佳,聚类 4 中的玩家排名第二,依此类推。
Cluster visualizations (right) and centroid calculations (left). There’s a lot going on here! I explain how to interpret all of this in the paragraph below.
然而,如果你看一下可视化,你会看到集群 4 中只有一个玩家。对我来说,很容易判断出属于第四类的玩家是华盛顿神秘主义者的艾琳娜·戴尔·多恩。在她所在的位置上,她获得了所有选手中最高的总分(在PTS
可视化中,她的聚类点比其他任何人都远),并且她是五次 WNBA 超级明星。根据这个排名,她进入了第二好的队?嗯,如果你仔细看看,多恩在助攻和抢断方面的表现低于她所在位置的其他球员。然而,如果你仔细看看她的集群(4)与有更多球员的集群 1 相比,他们在抢断和助攻方面明显优于她。因此,我在簇 4 和簇 1 之间交换了位置。新的排序变成分类 5 是最好的,分类 1 是第二好的,分类 4 是第三好的,等等。我仔细检查了所有五个职位的八个聚类,并在每个职位中从最好到最差排列它们。现在是组队的时候了。
第五步:创建八个有 WNBA 球员的排名球队
因为篮球队是由五个位置组成的,我从每个位置取出排序的集群,并将它们重新组合成队。每支球队的规模不同,每个位置的球员数量也不同。由于大多数类别的表现分布是右偏的,因此在每个类别中,表现明显好于其他人的玩家较少(见下图)。因此,八支队伍中最好的队伍会有更少的队员。
Distribution of performance across the categories I chose to measure. Most of the distributions are right-skewed except for free throw percentage. According to this, WNBA players are great at making free throws.
我将团队命名为“团队 1”到“团队 8”,团队 1 表现最好,团队 8 表现最差。为了简洁起见,我将介绍最好的两个团队,您可以访问我的 GitHub 资源库(本文末尾有链接)来查看其余的细节。队 1 有 35 名队员,队 2 有 56 名队员。两支球队都有全明星球员,但事实证明,1 队的球员往往在不止一项技能上比他们位置上的其他球员表现得更好。因此,团队 1 应该是拥有技能能力最全面的球员的团队。由于我没有使用比赛次数来确定排名,所以每个队都有很好的新秀和老将组合。例如,老将辛西娅·库珀场均最高分排名第一,新秀阿贾威尔逊场均最高分排名第二。
Players who had the highest point average per game in Team 1 and Team 2. Image sources: left, right.
下面是梦之队 1 的最终名单,包括 16 名后卫,12 名前锋,3 名中锋,2 名前锋和 2 名前锋。仅举几个亮点:辛西娅·库珀场均得分最高,凯蒂·史密斯打了最多的比赛,塔米卡·凯金斯开始了最多的比赛, Chiney Ogwumike 场均三分命中率最高,布兰妮·格里纳场均盖帽最高。
Team 1 roster comprised of 35 of the best WNBA players as identified through K-Means Clustering.
步骤 6:模拟两个顶尖团队之间的数据驱动游戏
各位,请坐。终极(数据驱动)WNBA 游戏即将开始!为了提示比赛,让我们来看看每个队中开始比赛最多的球员:从 1 队开始 448 场比赛的塔米卡·凯金斯和从 2 队开始 508 场比赛的苏·伯德。进攻篮板也是千钧一发。第一队进攻篮板的平均水平更高,但是他们的分布比第二队更偏,第二队进攻篮板的平均水平和中位数相似。如果第一队的界外球在场外,第二队有更大的机会获得更多的进攻篮板。但不可否认的是,在防守篮板方面,第一队的表现明显好于第二队。这场比赛的三分球成功率会很高,让你有更多的机会在看到球飞过球场并毫不费力地进入篮筐时欢呼。两队三分球命中率都很高。
这是你们期待已久的时刻,这场比赛的赢家。嗯,第一队击败了第二队,因为他们的场均得分比第二队高四分。但是你永远不知道——如果两个队中平均每场得分 20 分的局外者对阵,可以肯定地说这场比赛可能是势均力敌。
Points per game distribution for both teams. On average, players from Team 1 score 4 more points than players on Team 2.
结论
仅仅通过数据观看体育比赛比我想象的要有趣得多。我对我的结果很满意,展望未来,我可能会回到我的数据,以完善我的特征选择过程和模型参数。除了实现让所有女子运动员在同一个平台上比赛的梦想之外,我相信通过这个过程,我还实现了更大的成就:让 WNBA 获得了应有的关注。考虑到体育数据分析是一个蓬勃发展的领域,需要更多地关注妇女的体育数据和对这些数据的分析。最后,通过数据见证了历史上最伟大的 WNBA 球员的壮举,我感到很受鼓舞。我从来都不是一个真正的体育迷,但这个项目让我爱上了 WNBA。对于 WNBA 社区,由于数据科学,你现在有了一个新的粉丝。
LA Sparks showing off their three-pointer skills.
要查看这里引用的代码和分析,请查看我的 GitHub repo 。
感谢肖恩·瓦萨达尼和阿努瓦·卡拉瓦尔帮助我更好地理解篮球。感谢 Riley Dallas 帮助我思考我的建模过程。
Jasmine Vasandani 是一名数据科学家,也是 WNBA 的忠实粉丝。你可以在这里了解她的更多:www.jasminev.co/
线性回归背后的机器学习概念
原文:https://towardsdatascience.com/how-machine-learns-from-data-a-simple-method-for-co2-pollution-prediction-af18430ce12b?source=collection_archive---------19-----------------------
简单 ML 模型在 CO2 预测中的应用
Photo by Alexander Tsang on Unsplash
介绍
在过去的几年里,有很多关于人工智能的炒作。从用声音开灯到完全自主的自动驾驶汽车,你几乎可以在任何地方找到它。
现代 AI 大多需要大量数据。你给的越多,它学的越好。例如,为了训练 AI 理解猫的图像,你需要给出大量猫和非猫的图像,以便它能够区分这两者。
但是 AI 到底是如何从数据中学习的呢?
在本帖中,我们将通过一个非常简单的模型来了解人工智能是如何学习的。我们将关注过去 55 年全球二氧化碳排放量,并试图预测 2030 年的排放量。
二氧化碳排放数据
我们将使用的数据来自世界银行。不幸的是,该数据不是截至 2019 年的当前日期(在撰写本文时)。这是从 1960 年到 2014 年,但这对于这个实验来说很好。
Fig 1: Amount of CO2 Emission annually from 1960 to 2014. Source: WorldBank Data
x 轴对应年份(假设 0 年是 1960 年),y 轴对应 CO2 排放量。根据图表,我们也许能够对 2030 年的价值做一个粗略的估计。
假设我们只是画一条最符合这个数据的直线,如果我们把这条线越拉越远,我们就可以预测未来。
Fig 2: Fit a line and use it to make a rough estimation at year 70 (2030)
请记住,我们无法准确预测未来。事情可能会变得更好,但为了简单起见,我们只是假设变化率是恒定的。
线性回归
让我们引入一点数学知识。上面的蓝线你可能很熟悉。这是一条简单的直线,用下面的等式表示。
嗯哼。现在你记起来了。同样, x 是年份, y 是排放量。为了得到图 2 所示的线,m=446,334,b=9,297,274。不用担心 m 和 b,后面我会详细解释。
如果我们想知道 2030 年的信息(如果从 1960 年算起,是 70 年),我们现在可以使用上面的等式。
现在按照承诺,让我们仔细看看什么是 m 和 b 。
Fig 3: Behavior of m on the line
在图 3 中,当我们改变 m 的值时,直线旋转。因此,变量 m 控制线的方向。而在图 4 中,变量 b 通过上下移动线来控制线的位置。
Fig 4: Behavior of b on the line
学习过程
有了 m 和 b,我们就可以控制这条线,并将其调整到最适合我们的数据。
现在的问题是我们如何找到变量 m 和 b 的值?想法是这样的:
- 随机化 m 和 b 的值。
- 将变量赋予损失函数,以确定该线与数据相比有多差,也称为差错率。
- 根据错误率调整 m 和 b 的值。
- 回到步骤 2。重复直到变量停止变化。
损失函数
如果我们的线路很差,这个损失函数会给出非常大的误差。同时,如果直线与数据拟合得很好,误差也会很小。
Fig 5: The difference between predicted line and actual data
该线每年都有其预测值y’。然后,我们可以将预测值y’与实际值 y 进行比较,找出差异。我们每年计算这个值,取其平均值。这也被称为均方误差 (MSE)。
Fig 6: Closed form of MSE
现在我们差不多准备好更新我们的变量了。有一个小问题。我们之前发现的错误率总是正的。我们几乎不知道哪个方向应该更新我们的线。它应该顺时针旋转还是逆时针旋转?这时渐变下降出现了。
Fig 7: Formula to update each variable (in this case, variable m)
简而言之,这说明了方向以及每个变量对误差的影响程度。越是有效果,越应该改变价值。然后,我们可以使用这些信息来更新我们的变量。我们不会深入探究衍生品,但如果你感兴趣,你可以在 Coursera 上查看这个视频。我发现那里的解释相当清楚。
注意阿尔法阿尔法,也称为学习率,是控制我们应该更新变量的多少。通常,我们将它设置为一个小值,比如 0.001,这样我们就可以慢慢地将变量更新到最佳值。
好消息是:在实践中,我们不会手动进行这种推导。
像 Tensorflow 或 PyTorch 这样的流行框架会自动计算这一点。但是我把它放在这里是为了简单说明它是如何知道向哪个方向改变值的。
履行
那么,您需要像上面描述的那样编写所有代码来让线性回归工作吗?幸运的是,许多现有的库为您简化了一切。在这个例子中,我们将探索为 Python 构建的机器学习库 scikit-learn ,以预测二氧化碳排放。
只需几行代码,scikit-learn 就能让线性回归变得非常容易。仅第 9 行就完成了训练模型所需的所有必要步骤。唷,你是在杞人忧天,不是吗?这不仅适用于线性回归,也适用于用几行代码实现许多其他的 ML 算法。
结论
就是这样。没那么复杂吧(推导部分除外)?线性回归是一种简单而有效的方法,尽管它只是一条直线。在这篇文章中,我们只看了只有一个变量(年份)的情况。实际上,这可以扩展到处理多个变量,但这是后面文章的主题。
参考
- https://en.wikipedia.org/wiki/Linear_regression
- https://towards data science . com/introduction-to-machine-learning-algorithms-linear-regression-14c4e 325882 a
- https://developers . Google . com/machine-learning/速成/descending-into-ml/linear-regression
- https://www . coursera . org/learn/machine-learning/lecture/kCvQc/gradient-descent-for-linear-regression
机器如何理解文本
原文:https://towardsdatascience.com/how-machines-understand-text-994cf4ca9f49?source=collection_archive---------19-----------------------
大多数人通过练习学会阅读。在课堂上,你会被要求大声朗读一篇文章。如果你遇到一个你不会发音的单词,你可能不知道它的意思。当这种情况发生时,你要么问班上的人,要么查这个词。你重复这样做,直到你有足够的理解力去阅读更难的文章。另一方面,机器无法像人一样学习阅读,但是随着自然语言处理(NLP)的出现,我们可以接近它。
自然语言处理和语法
语言包含具有一种或多种含义的单词和决定句子结构的语法规则。机器在学习规则方面非常出色。英语包含许多句子结构的规则。
一个有效的句子由一个或多个名词、动词和冠词组成。例如,让我们检查句子“巴兹·奥德林、尼尔·阿姆斯壮和迈克尔·科林斯去了月球”这个句子包含四个名词("巴兹·奥德林"、"尼尔·阿姆斯特朗"、"迈克尔·柯林斯"、"月亮")、一个连词("和")、一个动词("去了")、一个介词("到")、一个限定词( the )。我们可以将这句话扩展为“华尔街日报报道巴兹·奥德林、尼尔·阿姆斯壮和迈克尔·科林斯在 1969 年登上了月球两个句子都有效;第二句包含第一句的全部内容,顺序相同。考察这些句子的另一种方法是将它们分为名词短语(NP)动词短语(VP)介词短语 (PP)。第二句的 NP 是“华尔街日报”,VP 是“据报道巴兹·奥德林、尼尔·阿姆斯壮和迈克尔·科林斯登上月球”,PP 是“1969 年”第二句是语言句子结构的递归产生的例子。
为机器提供理解语言能力的第一步是编纂这些规则。我们必须编写语法规则,并用词性来标记所有单词(或记号),因为机器天生不知道它们的意思。上下文无关语法(CFG)是一组编纂的语法规则,允许机器确定一个句子是否语法正确。程序员能够为包含几个单词的短句编写 CFG,但是当我们想要检查大型语料库时,这项任务变得乏味且几乎不可能。
自然语言工具包(NLTK)提供了语法规则的总结和他们的 python 实现的例子。NLTK 提供了 CFG 供您使用,因此您不必编纂英语中的每个语法规则和单词。这些语法规则可以让程序解析文本。
机器和模糊性
如果一个短语有一个以上的意思呢?如果一个词可以属于多个词类,有多个意思怎么办?以“切片”这个词为例。在句子“我打算切这些胡萝卜”中,切片指的是一个动词。在句子“我要吃一片片”中,片指的是一个名词,像馅饼或比萨饼。CFG 可以包含许多有效的句子结构和词性 (POS)标签来解决这个问题。
Groucho Marx in “Animal Crackers,” 1930
NLTK 提供了几个如何将自然语言处理应用于模糊文本的例子,包括电影《动物饼干》中的一个笑话上图中展示的这个笑话是在取笑模棱两可的句子结构。如果我们对一个允许歧义文本的 CFG 进行编码,我们将得到两个句子,分别解释 Groucho 穿着睡衣和 Groucho 的睡衣里有一头大象。一个解析树可视化所有可能的有效含义,一个句子可以根据一个编码的 CFG 来读取。Groucho 笑话的解析树如下所示:
The parse tree for Groucho Marx’s joke. Modified from NLTK’s hosted book, Chapter 8. Analyzing Sentence Structure, Section 1.2 Ubiquitous Ambiguity.
NLTK 允许我们通过使用预编码的 CFG 来生成解析树中看到的 POS 标记。获取这些标签的代码如下:
The code to obtain POS tags from text utilizing NLTK
The output from NLTK’s POS method.
NLTK 的.pos_tag()
方法的输出是一个元组列表,其中元组的第一个元素是单词,第二个元素是 POS 标记。在宾夕法尼亚大学语言学系的网站上可以找到词性标签和缩写的列表。输出还包含标点符号,如果它们对您的任务不重要,可以删除。
结论
理解句子的结构和单词所属的词性是教机器阅读的第一部分。词性标签使我们能够完成更困难的任务,如文本预测。如果我们编码 CFG,那么机器可以输出语法正确的句子。NLTK 拥有大量的资源,通过大量的例子让您了解机器如何处理文本以及您可以用它做什么。
修复一个灯泡需要多少工程师——优化事故响应
原文:https://towardsdatascience.com/how-many-engineers-does-it-take-to-fix-a-lightbulb-optimizing-incident-response-785f81d62470?source=collection_archive---------40-----------------------
避免“厨房里厨师太多”的问题—优化关键任务的事件响应
介绍
更换一个灯泡需要多少名工程师?这一讽刺性的假设将用于演示企业如何针对关键任务优化其事件响应。
我们经常在工作场所遇到需要我们与其他人合作来解决时间敏感、业务关键和客户面对的问题的情况。无论是试图解决电子商务网站宕机问题的软件开发人员,还是应对野火事件的第一反应人员,时间就是金钱(有时甚至是人命),因此问题解决得越快,您的客户就越开心,有时也越安全。
加还是不加?
想象一下,你是一个管理灯泡的工程团队的经理。一个特定的灯泡熄灭了,工程团队得到了通知。你的老板疯狂地问你:
需要多少工程师来更换灯泡?
嗯,那要看情况:
- 停机成本(例如,灯泡每坏一分钟,对我们的业务会有什么影响?)
- 工程资源成本
- 风险容忍度
风险
不用花太多时间在风险上,在这个上下文中它指的是一个罕见的机会,一些真正糟糕的事情发生了。稀有和真坏都是相对的/主观的术语。一种标准方法是测量所有可能结果分布的第 95 个百分位数。风险值将被定义为比风险值更糟糕的事情发生的概率为 5%。
95th-percentile of Bad Outcomes. Risk is the location of the red vertical line
黑色垂直线代表平均结果,而红色垂直线代表第 95 百分位。尾巴越粗,垂直线和红线之间的距离就越远,因此,风险就越高。
方法
幸运的是,该团队在过去已经修复了以前的灯泡。因为你是一个数据驱动的经理,你选择通过分析团队的历史数据来解决问题:
数据
假设这一事件在过去已经发生了 38 次。每次,你都指派 1、2 或 3 名工程师,测量修好灯泡所需的时间。
红色“X”标记表示解决问题的平均时间(MTTR),或解决事件所需的平均时间。请注意,平均来说,更换灯泡的工程师越多,更换的速度就越快… 。 1 名工程师平均能在 825 分钟左右完成,而 3 名工程师平均能在 700 分钟以内完成。**
天真的方法
让我们做两个主要假设:
- 你的工程师一年挣 10 万美元(大约 0 . 80 美元/分钟)
- 灯泡每熄灭一分钟,你的企业就会损失 10 美元
确定要部署的工程师数量以最小化总体业务影响的简单方法是使用平均估计值:
增加 2 名工程师最有效,导致最低的平均影响。然而,这种方法忽略了:
- 我们数据的不确定性。虽然 38 个样本似乎足够了,但请注意,我们只有 3 名工程师的 6 个样本,这使得我们对该组的平均(MTTR)估计不太有信心。
- 风险(第 95 百分位),而不是只考虑的平均影响。**
概率方法
给定有限的历史数据,我们可以估计每个部署的工程师数量的解决时间的分布。意识到“厨房里有太多厨师”的现象,我们选择拟合一个偏斜正态分布来解释偏斜的尾部。
采样并绘制后验分布结果:
Sampled Posterior Distribution
请注意,我们从后验数据(灰色)生成的 MTTR 与我们的历史数据(红色)的 MTTR 非常接近。此外,我们的后验分布反映了一些异常值,特别是对于 3 名工程师来说,更换灯泡的时间可能超过 1000 分钟。鉴于 3 名工程师花费 1000 分钟(总共 3000 多分钟)更换灯泡,这种情况是高风险的。
模拟业务影响
我们可以采用上面的后验分布和我们之前的假设(每个工程师 0.80 美元/分钟,断电 10 美元/分钟)来模拟业务影响:
Distribution of Total Business Impact in USD
根据结果的分布,我们可以提取不同的统计数据,即平均值和第 95 百分位,我们可能希望最小化这些数据:
Business Impact Depending on Number of Engineers
结果
如果你的目标是最小化平均影响,那么部署 3 名工程师(如粗体所示)将产生 8445 美元。该决策虽然具有最低的平均影响,但也具有最高的风险(10,535 美元)。有了 3 名工程师,你就有了“厨房里厨师太多”的风险,工程师们互相妨碍,拖延解决问题的时间。3 名工程师的业务影响有 5%的可能性会产生 10,535 美元或更多。
因此,如果风险很高,保守的解决方案是部署 2 名工程师(如粗体所示),风险为 9718 美元。
敏感性分析
我们的决策如何随着不同的员工成本或业务中断风险而改变?在一种情况下,最小化风险所需的最佳工程师数量是 1、2 或 3 名工程师。
Decision Boundary based on employee and downtime costs
上图反映了为了使 对员工和停工成本的业务影响**最小化 95%而需要更换灯泡的最佳工程师数量。**
结论
随着越来越多的行业过渡到数字时代,变得更加数据驱动,优化事件响应不仅变得至关重要,也是影响决策的可行机会。在许多行业中,解决事件的时间差异可能至关重要(例如,对野火做出反应的第一反应者或开发人员将关闭的网站恢复为高流量电子商务网站)。因此,数据驱动的方法使您组织的事件响应变得敏捷、谨慎(考虑风险),最重要的是最优。
2018 年巴尔的摩学校 1000 英尺范围内有多少枪?
原文:https://towardsdatascience.com/how-many-guns-were-within-1-000-feet-of-schools-in-baltimore-in-2018-16deb60ff9db?source=collection_archive---------49-----------------------
对巴尔的摩枪支暴力公开数据的分析显示,数量惊人的枪支犯罪非常接近这座迷人城市的一些最脆弱的居民
根据 1990 年的无枪校园法案,如果枪支穿越州界到达学校【1,000 英尺范围内的人不得拥有枪支(因为国会可以通过监管州际商业来监管枪支),如果持枪者没有获得许可,也不得拥有枪支。想到这一点,我对巴尔的摩发生了多少起持枪杀人案感到好奇。这是我论文的一部分,但由于内容和时间的限制,它不得不从论文和陈述中删除。
我的论文数据分析只到 2017 年,所以我很好奇 2018 年发生了什么。我们来看看,用 R 来看看发生了什么?(请注意,在学校 1000 英尺范围内发生的枪支杀人案或枪击案不一定是使用无证枪支进行的。)
数据
首先,我们从巴尔的摩城市开放数据门户获得 2018 年巴尔的摩枪支杀人和枪击的数据:
这给了我一份 5343 起事件的清单,在这些事件中使用了枪支,并且注明了地点。他们归结为这一点。(注:这些都是举报的罪行。实际数字可能不同。):
犯罪类型|罪名
严重伤害罪| 1474
杀人罪| 273
抢劫—劫车| 337
抢劫—商业| 533
抢劫—住宅| 121
抢劫—街头| 1928
枪击| 677
有了这些信息,包括经度和纬度,我们把它们放到地图上,看看它们发生在哪里。为了创建这张地图,我使用了来自城市开放数据门户的社区统计区域(CsA)的形状文件。
当然,我可以在 QGIS 或 ArcGIS 中完成所有这些操作,它会生成这样的地图:
这里非常拥挤,因为有很多与枪支有关的犯罪。在 QGIS 和其他使用点击式界面的程序中这样做的问题是,你并没有准确地记录你刚刚做了什么。你必须花时间写一本操作手册来精确地复制上面的地图。或者你可以录下画面。
这就是像 R 这样的程序的用武之地。有了它,你在编写代码的同时也在编写操作手册。注释良好的代码允许下一个人抓取你的代码并精确地复制你的结果,而不需要花什么力气去弄清楚你做了什么以及你是怎么做的。所以让我们用 R 复制上面的地图,甚至得到一些关于哪个学校的枪支犯罪数量最多的统计数据。
代码
首先,我们要加载一些库。我已经评论了每个库的使用。
# Load the required libraries ----library(rgdal) # To manage spatial data
library(tigris) # To manage spatial data
library(tmap) # To create the maps
library(tmaptools) # To add more functionality to the maps created with tmap
library(raster) # To manipulate spatial data
library(sp) # To manipulate spatial data
library(rgeos) # To manipulate spatial data
library(sf) # To manipulate spatial data
library(spatialEco) # To join the layers
library(dplyr) # To manage data (make tables and summarize values)
现在,让我们输入数据。
# Import the data and make it readable ----crimes <-
read.csv("data/gun_crimes_2018.csv", stringsAsFactors = F) # Import gun crime data
crimes <-
as.data.frame(lapply(crimes, function(x)
x[!is.na(crimes$Latitude)])) # Remove crimes without spatial data (i.e. addresses)
csas <-
readOGR("data", "community_statistical_area") # Import Community Statistical Area shapefiles
schools <- readOGR("data", "bcpss_school") # Import Schools
现在,让我们把犯罪从一个数据帧变成一个合适的形状文件,并给它正确的投影。
# Create point shapefile from dataframe ----coordinates(crimes) <-
~ Longitude + Latitude # Assign the variables that are the coordinates
writeOGR(crimes, "data", "guncrimes", driver = "ESRI Shapefile") # Write it as a shapefile
guncrimes <- readOGR("data", "guncrimes") # Read it back in
proj4string(guncrimes) <-
CRS("+proj=longlat +datum=WGS84 +unit=us-ft") # Give the right projection
一行简单的代码来查看不同类型的枪支犯罪数量。
table(crimes$Description)
接下来,因为我们要把层放在彼此之上,我们需要确保它们都有正确的投影(坐标参考系统)。
# Fix the projections of the other layers ---pro <- sp::CRS("+proj=longlat +datum=WGS84 +unit=us-ft")
csas <- sp::spTransform(csas, pro)
schools <- sp::spTransform(schools, pro)
所有的图层都在同一个投影上,让我们使用 tmap 来构建我们的第一张地图。
# Create map of Firearm Crimes ----tmap_mode("plot") # Set tmap to "plot" (instead of "view")baltimore1 <-
tm_shape(csas) + # Adds the Community Statistical Areas layer
tm_borders("black", lwd = .5) + # Makes those borders black and thin
tm_shape(guncrimes) + # Adds the layer of gun-related crimes
tm_dots("Dscrptn", # Creates a dot for each gun-related crime, color-coded by type of crime
title = "Crime Type",
size = 0.1) +
tm_compass() + # Adds the north star compass
tm_legend() + # Adds the legend
tm_layout( # Controls the layout of the different elements of the map
main.title = "Map of Firearm Crimes in Baltimore, 2018",
main.title.size = 1,
legend.position = c("left", "bottom"),
compass.type = "4star",
legend.text.size = 0.7,
legend.title.size = 0.9
) +
tm_scale_bar( # Adds the scale bar
size = 0.5,
color.dark = "black",
color.light = "white",
lwd = 1
) +
tmap_options(unit = "mi") # Makes sure the scale bar is in milesbaltimore1 # Let's look at the maptmap_save(tm = baltimore1, # Saves the map
filename = "Maps/baltimore1.bmp", # File name of the image
dpi = 600) # Resolution of the image saved
这是我们创造的:
让我们建立第二个学校位置地图。(在这里,我没有太多的评论,因为它是上面第一张图的复制。):
# Create map of School locations ----baltimore2 <-
tm_shape(csas) +
tm_borders("black", lwd = .5) +
tm_shape(schools) +
tm_dots(
"CATEGORY",
shape = 17,
size = 0.1,
title = "School Type",
col = "red",
legend.show = T
) +
tm_legend() +
tm_compass() +
tm_layout(
main.title = "Map of School Locations in Baltimore, 2018",
main.title.size = 1,
legend.position = c("left", "bottom"),
compass.type = "4star",
legend.text.size = 0.7,
legend.title.size = 0.9
) +
tm_scale_bar(
size = 0.5,
color.dark = "black",
color.light = "white",
lwd = 1
) +
tm_add_legend(
"symbol",
col = "red",
shape = 17,
size = 0.5,
labels = "SCHOOL"
) +
tmap_options(unit = "mi")baltimore2tmap_save(tm = baltimore2,
filename = "Maps/baltimore2.jpg",
dpi = 600)
这是我们得到的结果:
现在,让我们创建一个与枪支相关的犯罪和学校位置的地图:
# Create map of school locations and firearm crimes locations ----baltimore3 <-
tm_shape(csas) +
tm_borders("black", lwd = .5) +
tm_shape(schools) +
tm_dots(
"CATEGORY",
shape = 17,
size = 0.1,
title = "School Type",
col = "red",
legend.show = T
) +
tm_shape(guncrimes) +
tm_dots("Dscrptn",
title = "Crime Type",
size = 0.08) +
tm_compass() +
tm_layout(
main.title = "Map of Firearm Crimes and Schools in Baltimore, 2018",
main.title.size = 1,
legend.position = c("left", "bottom"),
compass.type = "4star",
legend.text.size = 0.7,
legend.title.size = 0.9
) +
tm_scale_bar(
size = 0.5,
color.dark = "black",
color.light = "white",
lwd = 1
) +
tm_add_legend(
"symbol",
col = "red",
shape = 17,
size = 0.5,
labels = "SCHOOL"
) +
tmap_options(unit = "mi")baltimore3tmap_save(tm = baltimore3,
filename = "Maps/baltimore3.jpg",
dpi = 600)
这是地图:
现在,我们要在学校周围建立一个 1000 英尺的缓冲区:
# Create a 1,000-foot buffer around the schools ----
# https://www.rdocumentation.org/packages/raster/versions/2.8-19/topics/bufferbuf <- buffer(schools, # Layer for buffers
width = 304.8, # Buffer in meters
dissolve = F)
plot(buf) # Take a look at the result
确保将英尺转换为米,并确保验证您创建的是您正在寻找的东西。
现在,让我们在地图上看看学校周围的缓冲区:
# Create map with buffers and schools only ----baltimore4 <-
tm_shape(csas) +
tm_borders("black", lwd = .5) +
tm_shape(buf) +
tm_borders("blue", lwd = .5) +
tm_shape(schools) +
tm_dots(
"CATEGORY",
shape = 17,
size = 0.1,
title = "School Type",
col = "red"
) +
tm_compass() +
tm_layout(
main.title = "Map of 1000-ft Buffers Around Schools in Baltimore, 2018",
main.title.size = 1,
legend.position = c("left", "bottom"),
compass.type = "4star",
legend.text.size = 0.7,
legend.title.size = 0.9
) +
tm_scale_bar(
size = 0.5,
color.dark = "black",
color.light = "white",
lwd = 1
) +
tm_add_legend(
"symbol",
col = "red",
shape = 17,
size = 0.5,
labels = "SCHOOL"
) +
tm_add_legend("line",
col = "blue",
size = 0.1,
labels = "1000-ft Buffer") +
tmap_options(unit = "mi")baltimore4tmap_save(tm = baltimore4,
filename = "Maps/baltimore4.jpg",
dpi = 600)
它看起来是这样的:
现在,让我们创建最终的地图:
# Create map with buffer, schools and crimes. This is the final map. ----baltimore5 <-
tm_shape(csas) +
tm_borders("black", lwd = .5) +
tm_shape(buf) +
tm_borders("blue", lwd = .5) +
tm_shape(schools) +
tm_dots(
"CATEGORY",
title = "Schools",
shape = 17,
size = 0.1,
col = "red"
) +
tm_shape(guncrimes) +
tm_dots("Dscrptn",
title = "Crime Type",
size = 0.08) +
tm_compass() +
tm_layout(
main.title = "Map of Firearm Crimes, Schools and 1,000-ft Buffers in Baltimore, 2018",
main.title.size = 0.8,
legend.position = c("left", "bottom"),
compass.type = "4star",
legend.text.size = 0.7,
legend.title.size = 0.9
) +
tm_scale_bar(
size = 0.5,
color.dark = "black",
color.light = "white",
lwd = 1
) +
tm_add_legend(
"symbol",
col = "red",
shape = 17,
size = 0.5,
labels = "SCHOOL"
) +
tm_add_legend("line",
col = "blue",
size = 0.1,
labels = "1000-ft Buffer") +
tmap_options(unit = "mi")baltimore5tmap_save(tm = baltimore5,
filename = "Maps/baltimore5.jpg",
dpi = 600)
这是它的样子:
那看起来像是在 QGIS 中创建的地图吗?绝对的。只是对标记的样子和大小做了一些调整,我们得到了两张相似的地图。
tmap 的好处是它允许你用一行代码创建一个交互式地图。(另一个 R 包,传单,做了一些类似的事情,在我看来,甚至可能更“健壮”。)
# View the final map in interactive mode ---tmap_mode("view") # Set the mode to view in order to create an interactive map
baltimore5
tmap_mode("plot") # Return to plotting if further maps are going to be made
现在,为了分析数据,让我们通过将所有点连接到缓冲区来创建一个数据帧。
# Now to create a dataframe of the gun crimes within the buffer zones ----crimespoints <- as.data.frame(point.in.poly(guncrimes, # Points
buf)) # Polygons
crimesbuffer <-
subset(crimespoints, NAME != "NA") # Creating a dataframe of only the points inside the polygons (NAME is not NA)
如果“ NAME ”是 NA(不可用),那么这意味着该点不在缓冲区内。我将它细分到“ crimesbuffer ”中,在那里我将对 182 所学校进行分析,这些学校在 1000 英尺范围内至少发生了一起(1)与枪支有关的犯罪,我甚至可以对发生在学校 1000 英尺范围内的 2485 起犯罪进行分析。
# Finally, let's see which school had the most gun crimes within 1,000 feet from it ----table <-
count(crimesbuffer,
NAME,
sort = T) # Create a table of names and numbers and sorts it descending
sort(table$n,
decreasing = T) # Sorting the table
table # View the table
hist(table$n) # Histogram of crime counts (Notice a distribution?)
sum(table$n)
由此,我发现 1000 英尺范围内与枪支相关的犯罪最多的学校是位于莱克伍德大街 200 号的威廉帕卡小学。
那所学校方圆 1000 英尺内有 81 起与枪支有关的犯罪。
进一步分析?
从这里开始,你能做的分析类型只受你的数据和想象力的限制。您可以从 CSA shapefiles 中提取社会经济数据,并进行回归,看看是否有任何东西可以预测学校 1000 英尺范围内与枪支相关的犯罪数量。(请记住,您正在处理计数数据,因此您需要使用泊松分布,甚至可能是负二项式回归。还有,记得处理空间自相关。)
至少,你现在可以去找决策者或家长教师协会,告诉他们哪些学校附近发生枪支相关犯罪的风险更高。如果你真的雄心勃勃,你可以使用犯罪数据上的时间代码,比较上学期间的犯罪和放学后的犯罪。最后,您可以将缓冲区扩大或缩小到对您的受众有意义的内容。
这篇博文的上一个版本 出现在我的博客上, 流行病学 ,2019 年 5 月 19 日。
René F. Najera,公共卫生硕士,是一名流行病学家, 业余摄影师 ,跑步/骑自行车/游泳爱好者,父亲,以及“无所不在的伟大家伙”(据了解他大脑内部运作的机密消息来源)。你可以发现他是一名流行病学家,在弗吉尼亚州当地的卫生部门工作,在你当地的塔克里餐厅买墨西哥玉米卷,或者在世界上最好的公共卫生学院的校园里,他是流行病学系的助理。
我的测试需要多少样本?
原文:https://towardsdatascience.com/how-many-samples-do-i-need-in-my-test-db14e668289?source=collection_archive---------20-----------------------
计算二项式测试的最小测试规模需要知道什么,以及如何计算
在我熟悉假设检验的来龙去脉时,我没能找到一个简单问题的直接答案:当实现 A/B 检验时,你需要多大的检验规模?
这个看似简单的问题很难回答,原因有很多。
无效假设可能是真的
对于大多数测试来说,人们都希望证明另一个假设,而不是零假设。人们希望发现他们应用的治疗具有某种效果)。
如果替代假设是真的,但测试规模太小,你可能会错误地认为你不能反驳零假设。随着否定零假设的议程,不断增加样本量直到各组出现统计差异是有意义的。然而,如果处理 A 和 B 在统计学上没有差异,你可以永远增加样本量,这不会改变结果。任何样本量都会告诉你零假设是不能被证伪的。
An A/B test in which the results may be so similar that any difference between them is likely due to random chance.
想一想布尔迪安的驴的悖论:当一头驴又饿又渴时,它被放在食物和水之间。在这个有争议的悖论中,驴因为无法决定是吃还是喝而死于饥渴。
如果我们暂停这个悖论的任何问题,并将其视为对干草(A)或水(B)的需求之间的测试,我们的样本大小为 1(我们的驴),我们的零假设为真(同样饥渴的驴对干草或水的需求没有区别)。
在这种情况下,我们增加多少头驴子(我们的样本量有多大)并不重要——只要驴子同样饥渴,它们中任何一个被选中的比率都会告诉我们,水和干草是同样需要的。即使样本量变得如此之大,以至于我们偶然得到了几头做出选择的驴,这种情况也足够罕见和随机,我们仍然会发现零假设是正确的。
在测试实施前需要知道结果
假设替代假设为真,证明零假设为假的最小样本量取决于许多因素,其中许多因素只有在测试后才能知道。
首先是两组之间预期的成功率差异。例如,如果按钮 A 的性能比按钮 B 好 100%,那么通过较小的样本量就可以清楚地看出,按钮之间的差异是基于按钮的性能,而不是随机的。相比之下,如果按钮 A 的表现比按钮 B 好 5%,那么就需要更大的样本量来确定这两个按钮之间确实存在的差异。
The A/B test to the left is likely to have a bigger difference in performance across buttons than the A/B test to the right. As a result the test to the left needs fewer samples to provide statistical confidence in the difference between the buttons.
成功率也决定了需要测试多少样本。例如,如果您正在测量人们点击链接的比率,那么您的样本大小就是您向其显示链接的人数。点击那个链接的人越多,你从测试中得到的有用结果就越多。
如果你在测试中成功的标准是一小部分人可能会做的事情,例如,购物,你将需要更大的样本量来获得相同数量的结果。
接近 0 或 100%的成功率增加了获得统计显著结果所需的样本量,因为它们给你的测试集中的成功(或失败)比例更小。
The likelihood of success for either button A or button B on the test on the left will be higher than that for the test on the right. As a result, the sample size needed for the test on the left would be lower than the sample size for the test on the right.
那么你的测试需要多少样本呢?
根据上述问题,这个问题只有在假设替代假设为真的情况下才能得到真正的回答。在测试开始时做出这样的假设是与假设检验的思想相违背的。然而,为了设置一个数字,让我们首先假设替代假设为真(处理 A 的表现不同于处理 B)。
要设置最小测试规模,您需要对以下内容进行估计:
- A 和 B 的平均成功率
- A 和 B 之间的百分比差异
最后,您需要知道您的 p 值或您希望在结果中得到的置信区间。
示例测试
让我们创建一个假设的 A/B 测试来计算最小样本测试大小,这将为我们提供两个样本之间差异的期望置信区间。
在这个测试中,我们向个人发送邮件,希望他们去一个网站。待遇 A 是蓝色信封;治疗 B 是一个绿色信封。在这个测试中,我们还将发送相同数量的绿色信封和蓝色信封。
- 期望的置信区间= 95%
- 预期平均成功率= 2% ( Pavg )
- 预期百分比差异 A 和 B = 15%
给定 2%的预期成功率和 15%的预期性能差异,那么性能更好的信封(假设蓝色)具有 2.14% 成功率( Pa ),绿色信封具有 1.86% 成功率( Pb )。Pa 和 Pb 通过以下等式求解:
为了达到 95%的置信区间,你需要一个至少为 1.96 的 z 值。在给定置信区间的情况下计算 z 值需要复杂的数学运算,才能找到一部分曲线在正态曲线下的面积。幸运的是,网上有表格告诉你需要的 z 分数。
对于此测试设置,z 分数可计算如下:
其中 n 是发出的信封总数。这是我们试图解决的测试规模。然后,我们可以填入从我们所做的假设中得知的值(Pa、Pb 和 Pavg):
我们现在可以求解 n,发现我们至少需要发送总共 9,604 封邮件(或者每种颜色 4,802 封邮件)。
如果信封颜色表现之间的百分比差异上升,或者如果平均成功率上升,所需的邮寄者数量就会下降。如果对结果的期望信心下降,所需的邮寄者数量也会下降。
结论
不幸的现实是,要提前知道所需的测试规模,你需要很多你根本无法知道的信息。幸运的是,如果您正在运行比较按钮点击或登录页面的测试,您可以在早期填写平均成功率和百分比差异,以估计您需要向多少人展示您的测试,以便对您的结果有信心。
市场如何愚弄模型和我们
原文:https://towardsdatascience.com/how-markets-fool-the-models-and-us-e9eb60279899?source=collection_archive---------18-----------------------
Curve Fit Market Data with Caution
数据科学曾经是统计学家、科学家和华尔街定量分析师的领域,但由于数据和开源库的无处不在,我们所有人现在都可以开发强大的预测模型。当然,这些模型也有滋生过度自信的能力,尤其是在数据、模型和随机性比比皆是的股市中。
统计学这门学科旨在帮助我们避免被数据和模型所愚弄,但并不是所有人都有时间和兴趣对统计学进行严格的研究。幸运的是,正如下面的简单模拟所示,通过对随机数据进行算法训练,很容易就能感受到预测模型有多么误导人。
“被随机性愚弄”——纳西姆·塔勒布
曲线拟合,或者说寻找最能追踪一系列数据点的函数的过程,并不总是一件坏事。在像国际象棋游戏或人脸和语音识别这样的领域,曲线拟合可能是一种有效的方法,这从根本上讲就是深度学习的神经网络所做的。
但是,当试图通过拟合过去市场数据的模型来预测未来市场行为时,曲线拟合可能会产生危险的误导,因为:
- 大多数市场活动都是随机噪声。
- 人们的行为发生了变化,从追逐 2008 年《QE 邮报》的央行行长,到在之前的熊市中遭受损失、决定长期持有现金的投资者。
- 成功的算法通过反馈回路改变未来的市场行为,使得所有算法的未来永远不确定。像海森堡的不确定性原理一样,如果算法观察到一些有利可图的模式,以低买高卖,他们将通过交易利用这种“阿尔法”,直到价格调整,几乎没有机会剩下(交易中持续发生的阿尔法衰减)。
曲线拟合市场的问题出现在曲线的右边,模型试图预测未来。通过对随机数据应用曲线拟合算法可以很容易地看出这一点,更复杂的模型可以很容易地找到实际上并不存在的因变量和自变量之间的模式和关系,并以高统计置信度做出实际上更容易出错的预测。
第 1 部分:有一个因变量(Y)和一个自变量(X)的数据集
让我们从 100 个 Y 值的简单线性回归开始,这些值在 0.9 和 1.1 之间随机选择,预期均值为 1。线性回归的曲线拟合算法找到最接近数据点的直线的斜率和截距。换句话说,它会找到使线预测的 Y 点与观察到的 Y 值之间的误差最小的斜率和截距。
从上图的等式可以看出,红色回归线的斜率几乎为零,截距为 1。但更值得注意的是 R 平方的微小值,它基本上告诉我们,由于 X 的变化而引起的观察到的 y 的变化的比例只有 0.000007。换句话说,微小的 R 平方告诉我们,当 X=101 时,对这个模型预测 Y 的下一个值的能力的信心非常低。
所以,这不是一个有用的模型,但至少它没有误导我们用它来做预测。
然而,如果我们通过添加指数项或添加更多因子来增加模型的复杂性和解决方案空间,那么算法将能够找到更紧密地跟踪数据的曲线,并且 R 平方将上升。例如,请注意在下一个多项式回归中添加一个 X 平方项如何将 R 平方从 0.000007 显著增加到 0.1017,这表明 Y 中有 10%的可变性是由 X 引起的。
将多项式阶数增加到 5 会进一步将 R 平方增加到 0.1684。如果 Y 和 X 之间存在持续的指数关系,这样的曲线拟合可能不会产生误导,但是这个数据是随机的。
在下面的动画中,您可以看到切换到更复杂的多项式模型如何增加 X=101 时的 Y 预测误差,同时增加预测的可信度,如较高的 R 平方所示:
第二部分:有多个自变量的数据集
现实世界中的大多数现象都是由多个自变量,或者说因素引起的,所以建立多个 - 因素模型通常是有意义的。但是增加因素也会增加曲线拟合的风险,因为每个额外的因素都会以指数方式增加模型的解空间,从而增加其找到更好地跟踪观察点的曲线的能力,但不一定是样本外的点。在市场存在随机噪音的情况下,这一点尤其正确。
以下动画展示了在对具有高度随机性的数据集进行建模时,为什么要对曲线拟合和模型复杂性保持警惕。在这些模拟中,自变量和因变量被赋予 100 个介于-10 和+10 之间的随机值,预期平均值为 0。然后,执行多重回归,为每个 X 因子生成优化的斜率值,这些斜率(或权重)用于绘制蓝色的多重回归线,旁边是用红色绘制的观察到的 Y 点。
首先,这里有一个最简单的模型,它只对两个独立变量回归 Y。请注意,R 平方往往很低,这表明模型在解释 Y 值的可变性方面做得很差,不应该依赖它们来预测未来的结果。
接下来,独立变量的数量增加到 16,为算法提供了在随机噪声中更大的解空间,以搜索具有更好拟合的曲线,结果 R 平方增加 :
第三部分:曲线拟合价格和复合回报数据
曲线拟合价格和复合回报数据集更容易欺骗我们自己。下面的随机 Y 值和 16 个 X 因子被视为回报率和独立复合。然后,复合 Y 值相对于 16 个复合 X 因子进行回归。
这些模型似乎很好地解释了 Y 的可变性,对吗?
当然,由于数据是随机的,曲线拟合算法只是在噪声中寻找将来不会重复的模式。下面的数据在样本内训练数据之外延伸了 30 个点,这表明这些曲线拟合模型对于解释样本外数据是多么的没有价值:
希望这有助于强调随机性欺骗算法和我们是多么容易。对我来说,上述预测最令人清醒的一面是,许多市场活动也是随机噪声,这意味着当用实际市场数据进行回溯测试时,我们也可以轻易地欺骗自己。
结论?
- 你的市场模型越简单越好。
- 当使用市场数据进行回溯测试时,避免对整个数据集进行曲线拟合。
- 通过在样本内数据上建立模型,然后在样本外数据上测试它们,用一种训练有素的方法进行回溯测试,一旦测试完成,抵制改进你的模型。一旦使用了样本外数据,它就变成了样本内数据,从那时起对模型或因素的任何额外改进基本上都是曲线拟合,这可能会降低模型预测未来结果的能力,同时助长对预测的过度自信。
- 避免天真地使用交叉验证工具,如 Scikit-Learn 的分层洗牌分割,否则你将最终在所有数据上训练你的模型,产生一个理想的模型——也就是说,如果你能回到过去。
- 做自己的怀疑者!未来的样本外数据可能会以许多微妙的方式渗入并污染过去的样本内数据,这可能会愚弄模型开发人员,他们没有足够批判性地思考为什么他们的新模型的夏普比率在回溯测试中如此之高。例如,如果您在样本外数据上构建并测试一个多因素模型,您可能会深入了解每个因素在样本外的独立表现。在开发包含这些因素的其他模型时,你如何避免使用这些样本外的见解?
- 人类的智能进化到通过寻找模式来理解现实的复杂性,如果没有我们认知高效的启发式方法,我们甚至很难走过一个房间。但是,像算法一样,我们也在随机噪声中发现模式,并且我们非常擅长合理化为什么我们感知的模式是正确的——所以,再次,扮演你自己的魔鬼代言人,特别是当回溯测试看起来有希望的时候。
Write an algorithm to search for faces in clouds, and if given enough noisy data, it will find them
如果你有任何问题或意见,我很乐意通过 Wade@SchoolsThatLast.com 联系,或者点击这里了解更多
Wade Vagle,CAIA CFA
微软 Azure 机器学习工作室如何阐明数据科学
原文:https://towardsdatascience.com/how-microsoft-azure-machine-learning-studio-clarifies-data-science-8e8d3e6ed64e?source=collection_archive---------8-----------------------
简单易用,但仍需要扎实的数据科学知识
Two great tastes that taste great together — Azure model construction + data science knowledge
我一直渴望试驾市场上最近许多针对“公民数据科学家”的工具之一,如 DataRobot、H20 无人驾驶 AI、亚马逊 SageMaker 和微软在云端的新产品 Microsoft Azure Machine Learning Studio(Studio)。这些工具承诺通过简化机器学习模型的构建来加快数据科学项目的价值实现时间。最终,这将允许数据工程师、程序员、业务分析师和其他没有博士学位的人开始在大量建模机会中打拼,这些公司渴望进入这些机会,但由于数据科学技能短缺,他们解决这些问题的能力有限。
所以我开了一个 Azure 账户,花了几个小时用它们的样本数据从头开始构建了几个机器学习模型。我将在这里描述我的经历,向您展示这个工具是多么容易使用,希望其他人能够快速掌握它的优点和缺点。我认为我是进行这项审查的代表性候选人,因为我现在不是一名工作数据科学家。然而,我是加州大学伯克利分校数据科学专业的研究生,拥有计算机科学学位,上过几门研究生级别的统计学和机器学习课程,并且可以用 Python 编程。
让我先说,我真的,真的…比如微软 Azure 机器学习工作室。它使数据科学工作的流程(即构建、测试和部署数据的预测模型)变得更加简单和直观,无论是对于初学者还是更有经验的数据科学用户。Studio 通过可视化地引导您思考数据源、将数据连接到潜在的模型算法候选、进行数据清理和转换、选择功能、训练模型、测试模型、选择最佳模型,甚至将您新的闪亮的工作机器学习模型部署为 Azure 中的 web 服务以供他人使用,来阐明整个过程。最后,您得到了一个可通过 API 访问的工作模型和一个可视化的、文档化的模型表示,供其他人查看和您继续调优。哇!
正如您将看到的,Studio 是如此易于使用,它使得数据科学看起来几乎看似简单。Studio 确实让这个过程变得更简单,但就像 Reese 的花生酱杯子需要两种口味才能做出美国最畅销的糖果(根据尼尔森的数据),你既需要更简单的模型构建过程(巧克力),也需要里面的花生酱。花生酱是用于特征确定、模型选择和解释,甚至一些编程技巧(用于更复杂的数据适应)的统计知识的有益补充。
我的第一个实验
为了对产品进行测试,我直接跳了进去,并遵循了微软创建模型的一些经过深思熟虑的方法,直到需要时才开始阅读文档。你可以从头开始创建一个机器学习建模实验,或者使用现有的样本实验作为 Azure AI Gallery 的模板。更多信息请参见:复制示例实验,创建新的机器学习实验。我们将从头开始介绍创建实验的过程。
我的第一个模型实验非常简单,使用了加州大学欧文分校、亚马逊、IMDB 等提供的 39 个数据集之一的数据。这是一个线性回归模型,根据不同的变量(如品牌和技术规格)预测汽车价格。
您在交互式工作区中输入 Studio。要开发预测分析模型,您将使用来自一个或多个来源的数据,通过各种数据操作和统计函数转换和分析该数据,并生成一组结果。用 Studio 开发模型是一个迭代的过程。当您修改各种函数和参数时,您的结果会逐渐收敛,直到您对通过评估其得分结果而得到的经过训练的有效模型感到满意为止。
Azure Machine Learning Studio 具有漂亮的交互性和可视化。您将数据集和分析模块拖放到一个交互式画布上,将它们连接在一起形成一个实验,您可以在 Machine Learning Studio 中运行该实验。要迭代您的模型设计,您可以编辑实验,如果需要,保存一个副本,然后再次运行它。当你准备好了,你可以把你的训练实验转换成预测实验,然后把它作为 Azure web 服务 API 发布,这样你的模型就可以被其他人访问了。
首先,我去了位于 https://studio.azureml.net/T3 的 Azure 机器学习工作室,在那里我被要求使用微软账户、工作或学校账户登录。登录后,你会看到一个类似这样的主页。
基本布局显示在左侧的以下选项卡中:
项目——代表单个项目的实验、数据集、笔记本和其他资源的集合
实验-您创建或保存的实验
Web 服务——您从实验中部署的 WEB 服务模型
笔记本—您创建的 Jupyter 笔记本
数据集-您已上传到 Studio 的数据集
训练模型-您在实验中训练并保存的模型
设置—可用于配置您的帐户和资源的设置集合。
在顶层,进行实验并最终将其作为 web 服务发布的推荐工作流如下:
- 创建模型
- 获取数据
- 准备数据
- 定义特征
2.训练模型
- 选择并应用算法
3.对模型进行评分和测试
- 预测新的汽车汽油价格
4.将模型发布为云服务
获取数据
点击机器学习工作室窗口底部的+新建,创建一个新的实验。选择实验 > 空白实验,并将该实验命名为汽车价格预测。有许多其他预先构建的实验可以选择,但我选择了这个作为第一眼。
实验画布的左边是一个样本数据集和模块的调色板,您可以对其进行搜索。我选择了标记为汽车价格数据(原始)的数据集,然后将该数据集拖到实验画布上。当然,Studio 也支持上传多种格式的数据集。
数据科学家欣赏的一个非常好的功能是能够快速查看数据列和分布,以了解我们正在处理的数据。要查看这些数据的样子,只需点击数据集底部的输出端口,然后选择 Visualize 。
数据集和模块的输入和输出端口用小圆圈表示,输入端口在顶部,输出端口在底部。要在实验中创建数据流,需要将一个模块的输出端口连接到另一个模块的输入端口。您可以随时单击数据集或模块的输出端口,查看数据流中该点的数据。
在该数据集中,每行代表一辆汽车,与每辆汽车相关联的变量显示为列。我们将使用特定汽车的变量来预测最右边的列(第 26 列,标题为“价格”)中的价格。请注意给出的每一列的直方图,以及右窗格中数据分布的详细信息。在我用过的其他工具中,这种快速查看似乎更耗时。
准备数据
任何有经验的数据科学家都知道,数据集通常需要一些预处理才能进行分析。在这种情况下,各行的列中存在缺失值。需要清除这些缺失值,以便模型能够正确分析数据。我们将删除任何缺少值的行。此外,normalized-loss列有很大比例的缺失值,因此我们将从模型中完全排除该列。
Studio 让这个过程变得非常简单。他们提供了一个模块来完全删除normalized-loss列(选择数据集中的列),然后我们将添加另一个模块来删除任何丢失数据的行。
首先,我们在左边的搜索栏中键入“选择列”,并将数据集模块中的选择列拖到画布上。然后,我们将汽车价格数据(原始)数据集的输出端口连接到数据集模块中选择列的输入端口,只需单击并在两个点之间画一条线。
通过单击数据集模块中的选择列,我们在该模块的属性窗格中启动列选择器。通过使用带有规则的并从所有列设置开始,通过几个步骤,我们可以排除一个列名,在这种情况下,归一化损失列和模块仍将通过所有其他列。Studio 允许您通过输入文本来双击模块添加注释,这样您就可以一目了然地看到该模块在您的实验中做了什么。在这种情况下,我添加了注释“排除正常损失”
类似地,要删除丢失数据的行,将清除丢失数据模块拖到实验画布上,并将其连接到数据集模块中的选择列。在属性窗格中,选择清洗模式下的移除整行。这些选项指示清除缺失数据通过删除有任何缺失值的行来清除数据。然后双击模块并输入注释“删除丢失的值行”
定义特征
定义特性仅仅意味着我们将选择我们将在模型中用来预测价格的列(特性)。定义特征需要实验,因为一些特征比其他特征具有更强的预测能力。一些特征将与其他特征高度相关,因此不会增加模型的预测能力,并且这些特征不应被包括在内以使模型尽可能简洁。一个简约模型是一个模型,它用尽可能少的预测变量实现了期望的解释或预测水平。
在我们的演练中,我们将继续以微软为例,并假设我们可以预测价格的功能的子集:
{品牌、车身风格、轴距、发动机尺寸、马力、峰值转速、公路里程、价格}
为了添加这些特性,我们将 Dataset 模块中的 Select 列拖到画布上,并将 Clean Missing Data 列的输出连接到其输入。我们双击模块并键入选择预测特征作为我们的描述符。接下来,在属性窗格中点击启动列选择器,选择带规则。我们可以从无列开始,一个接一个地将列名(特性)添加到模型列表中。完成后,单击复选标记(确定)按钮。该模块仅生成我们希望传递给学习算法的那些特征(和相关数据)的过滤数据集,我们将在接下来添加学习算法。
当你开始钻研文档和背后的数据科学时,这听起来肯定比最佳特性选择的现实和复杂性简单得多。在第一次演练中,我们希望它简单,这样我们就可以体验构建模型的整个流程。但是让我给你一些见解,这样读者就不会认为这很容易,他们应该立即向公司的每个分析师推出 Studio。
随着您更多地使用该产品,您会发现应该使用一些模块来选择功能,并且这应该是清理数据后流程中的一个步骤。Studio 为功能选择提供了以下模块:
- 基于过滤器的特征选择:识别数据集中具有最大预测能力的特征。
- Fisher 线性判别分析:识别特征变量的线性组合,该组合能够最好地将数据分组到单独的类别中。
- 排列特征重要性:计算训练模型和测试数据集的特征变量的排列特征重要性分数。
微软提供了这篇关于特性选择模块以及如何使用它们的文章,如果你想了解更多。
https://docs . Microsoft . com/en-us/azure/machine-learning/studio-module-reference/feature-selection-modules # bkmk _ how to
作为特征选择复杂性如何在建模中发挥作用的真实故事,这里有一个由微软 Data Insight 卓越中心的两位企业架构师完成的特征选择示例。它描述了他们将用于财务预测的 Excel 线性回归模型迁移到 Studio 的过程。他们最终成功地从 Studio 获得了更好的预测,并能够将模型作为 web 服务发布,使其更易于访问——为 Studio 欢呼三声!
https://docs . Microsoft . com/en-us/azure/machine-learning/studio/linear-regression-in-azure
但是,请记住,他们需要进行一些学习和调整,了解是使用“在线梯度下降”还是“普通最小二乘法”回归方法,还发现他们需要根据数据集大小调整 L2 正则化权重。他们还描述了他们如何开始使用基于过滤器的特征选择 来改进他们对初始数据元素的选择,并且他们还打算测试其他算法,如贝叶斯或增强决策树,以便与我们将在下一节讨论的线性回归进行性能比较。即使使用像 Studio 这样简单的工具,也需要时间、测试和数据科学培训才能真正产生最佳结果。
我希望看到的一个改进是 Studio 在自动选择最佳特性方面提供更多的帮助。上面的术语听起来不像公民数据科学家所理解的。我确实发现 Studio 中的一些机器学习算法(在下一节中讨论)确实使用特征选择或维度缩减作为训练过程的一部分。当您使用这些算法时,您可以跳过特征选择过程,让算法决定最佳输入,这是朝着正确方向迈出的一步。但是,对于可能不知道如何最好地选择特征的公民数据科学家来说,知道哪些算法可以做到这一点,哪些算法不能做到这一点,以及实际执行特征选择将是一个困难、耗时的过程。
训练模型—选择并应用算法
现在我们准备训练模型。在这个例子中,我们正在进行所谓的监督机器学习,有许多算法可以提供我们所寻求的预测能力。例如,有一些分类模型可以预测主题行可能属于哪个类别(是汽车还是卡车?),有回归算法预测一个数值答案(比如未来股价)。MLS 内置了 25 种模型,用于异常检测、分类、回归和聚类,还有许多看似开放的库模块。
因为我们想要预测价格,价格是一个数字,所以我们将使用一个回归算法——在本例中是线性回归。
我们通过给一个模型一组数据来训练它,这组数据包括我们想要预测的答案(价格。)该模型扫描数据,寻找汽车功能和价格之间的相关性,并在模型(一个数学方程)中捕捉它们。
Studio 将允许我们通过将数据分成单独的训练和测试数据集,将数据用于训练模型和测试模型。这是通过将 S plit 数据模块拖到实验画布并将其连接到数据集模块中的选择列的输出来完成的。
点击分割数据模块将其选中,将数据分成两部分,如图所示,将 75%的数据用于训练,其余 25%用于评分。
此时,我们应该运行实验,以便数据集中的 S elect 列和 Split Data 模块拥有数据和最新的列定义,以便在我们对模型进行评分时向前传递。这可以通过按下屏幕底部的运行按钮来完成。
现在是时候添加我们希望使用的学习算法了,方法是展开画布左侧的机器学习类别并展开初始化模型。选择线性回归模块,并将其拖到画布上。同时找到火车模型模块并将其拖到实验画布上。将线性回归模块的输出连接到列车模型的输入,并将分割数据模块的训练数据(左端口)连接到列车模型,如图所示。
点击火车模型模块,然后点击属性窗格中的启动列选择器,然后选择价格列。价格是我们的模型将要预测的值..将价格从可用列移至选定列列表。
我们终于可以进行实验了。我们现在有了一个经过训练的回归模型,可以进行价格预测。
预测新车价格
既然我们已经训练了模型,我们可以用它来对其他 25%的数据进行评分,以查看我们的模型运行得有多好。我们通过将乐谱模型模块拖到实验画布上,并将火车模型的输出连接到它来实现这一点。然后,我们将 S plit Data 模块的测试数据输出(右端口)连接到 Score Model 模块,如图所示。
现在运行实验,通过点击底部端口并选择可视化来查看分数模型的输出。预测价格显示在列评分标签中,以及模型使用的所有已知特征数据。列价格是数据集中的实际已知价格。
决定我们的模型是否是一个好模型?
在我们发布任何模型供使用之前,最后一步是测试结果的质量。为此,我们将 E 评估模型模块拖到画布上,并简单地将其连接到评分模型的输出。现在,当您再次运行这个实验时,您将能够可视化统计结果。
我认为这个地区的服务还可以做得更好。为了选择最好的模型,用户将不得不反复运行许多不同的实验,保存结果并比较它们,直到你得到一个最适合的模型。这需要统计学知识,并了解何时使用线性回归、分类、逻辑回归或许多开源算法中的一些,这些算法可能非常适合数据建模。更进一步,如果用户真的是公民数据科学家,他们真的理解如何解释这些结果并在上下文中使用它们来决定最佳模型吗?
在这种情况下,对于每个报告的结果,越小越好,因为这表明预测与数据更加匹配(误差更小)。例外情况是决定系数(也称为 R 的平方),我们试图使其接近 1.0 作为模型精度的指标。这个模型对拟合数据的预测精度是 0 . 91。我很想告诉你这很好,但实际上,答案取决于你的数据,你试图预测的东西,以及错误的后果。为了了解这有多复杂,你可以阅读杜克大学 https://people.duke.edu/~rnau/rsquared.htm.分校的文章。公民数据科学家在这方面需要微软的更多帮助。
将模型发布为云服务
一个非常好的特性是 Studio 让你的模型投入生产变得非常容易。对于我们这些既不是数据工程师也不是 IT 人员,但却擅长在云中发布模型作为 API 供他人使用的人来说,这使得您的工作变得更加容易。
发布模型最简单的方法是使用设置 Web 服务按钮,简单地将模型发布为 web 服务经典。此选项通过在确定模型的功能和算法后消除模型中的数据拆分、训练和其他不必要的步骤,将模型从实验转换为预测实验。您最后一次运行模型来检查结果,并且您已经准备好使用 API 密钥供其他人在 Azure 上使用。
您可以在此了解有关如何部署模型的更多信息:
[## 部署一个机器学习工作室 web 服务——Azure Machine Learning Studio
如何将训练实验转换为预测实验,为部署做准备,然后将其部署为 Azure…
docs.microsoft.com](https://docs.microsoft.com/en-us/azure/machine-learning/studio/publish-a-machine-learning-web-service)
可扩展性和性能
部署确实提出了我要部署什么的问题—我可以使用哪些硬件资源,我的服务级别保证是什么,是专用云还是多租户云,安全性等..?
Azure 机器学习服务是多租户的,后端使用的计算资源会有所不同,并针对性能和可预测性进行了优化。Studio 可以部署在数据集不超过 10 GB 的免费层,也可以部署在允许使用更多付费资源和 BYO 存储的标准付费层。
[## 定价-机器学习|微软 Azure
查看 Azure Machine Learning 的定价详情,这是一项用于大数据预测分析的云服务。没有前期成本…
azure.microsoft.com](https://azure.microsoft.com/en-us/pricing/details/machine-learning-studio/)
数据科学中的一个热点问题是使用 GPU 实现非常快的计算性能。我确实看到 Azure 为计算密集型应用程序提供了 GPU,但我没有看到直接为 Studio 指定 GPU 的方法,因为它是一种多租户服务。也许保证所需计算性能的方法是通过标准付费层中的付费 SLA,或者微软可能有其他方法来保证 GPU 访问,这些方法在我的阅读中并不明显。
总结
微软在构建云服务方面做得非常出色,它澄清、简化并确保了构建机器学习模型过程的完整性。他们的过程直观地展示了一种简单明了的获取数据的方法,提供了清理数据和选择模型的工具。Studio 继续要求培训和模型评分,除非正确执行之前的步骤,否则不会让您继续。最终,Studio 甚至使模型作为 web 服务的部署变得更加容易。
但正如我在题目中所说,Studio 并不是让任何人都可以建立机器学习模型的灵丹妙药。机器学习很复杂,仍然需要数据科学知识。用户需要统计知识来理解选择哪种算法,如何选择特性,以及解释哪种模型最适合您的环境的评分结果。此外,为了获得更大的灵活性,可以在清理和转换数据的流程中插入模块,这些模块可以用 R 或 Python 等语言定制..这需要编程技巧。
为了将该产品推向公民数据科学家的下一步,微软必须提供更多内置的数据科学智能。想象一下,如果 Studio 可以查看您的数据和您想要预测的内容,并通过一系列算法运行,尝试不同的功能,对模型进行评分,然后提供具有最佳推荐拟合的模型!这将为用户节省大量时间、精力和成本,并且不需要用户掌握太多的数据科学知识。
我认为 Studio 将很适合许多寻求建立模型的用户,包括公民数据科学家,他们寻求一种带有预建算法的拖放式解决方案,以更高级的企业用户,他们可以将 Studio 工作纳入微软 Azure 机器学习服务的更广泛的生态系统。该服务允许数据科学家在 Python 环境中工作,提供对机器学习算法、部署的更多控制,并支持 PyTorch、TensorFlow 和 scikit-learn 等开源机器学习框架。我期待更多地使用该产品。
关于作者
史蒂夫·迪尔(Steve Dille)是硅谷的产品管理和营销领导者,曾在数据管理、分析、商业智能和大数据领域的公司高管团队中成功完成了 5 次公司收购和 1 次 IPO。最近,他是 SparkPost 的 CMO,在他的帮助下,SparkPost 从一家内部高容量电子邮件发送者转变为领先的预测分析驱动的云电子邮件 API 服务,并从 1300 万美元增长到超过 5000 万美元。他目前正在通过在加州大学伯克利分校攻读信息和数据科学硕士学位,建立数据科学、人工智能和机器学习方面的深厚知识。他过去的学历包括芝加哥大学布斯商学院的 MBA 学位和匹兹堡大学的计算机科学/数学学士学位。他曾在 NCR 担任软件开发人员,在惠普担任产品经理,在赛贝斯(Sybase)担任数据仓库总监,在许多其他初创公司和中型公司担任产品或 CMO 副总裁。