TowardsDataScience 博客中文翻译 2019(一百五十三)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

通过分析快速产生业务影响

原文:https://towardsdatascience.com/delivering-business-impact-with-analytics-quickly-8de0e2b6bf61?source=collection_archive---------34-----------------------

保险分析案例研究

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

第一次打开数据集既有挑战性又令人兴奋。将原始数据转化为见解是我最喜欢分析的一部分,但它也可能是压倒性的。你应该从哪里开始?您应该运行哪些分析?您如何确保您所做的事情具有切实的业务影响?

强有力的初步分析不一定会给你答案,但它会告诉你接下来应该问哪些问题。

数据集处理一组财产和意外保险代理机构的代理绩效。这些数据包括 2005 年至 2015 年期间的机构列表、按产品划分的保费以及按产品划分的损失。

为了产生业务影响,理解与业务最相关的数据和指标的上下文非常重要。对于保险数据,有两个关键考虑因素将有助于指导我们从哪里开始分析。

首先,保险业专注于降低风险——他们收取高于支出的保费的能力是他们继续经营下去的原因。因此,感兴趣的度量是损失率,其近似计算为总损失除以承保的保费。了解对损失率有正面和负面影响的因素,可以为产品策略和定价等领域提供信息。

第二,大多数保险是通过经纪人或代理人销售的,而不是直接从保险公司购买。那么,除了产品之外,了解机构的构成和表现是另一种可以推动快速影响的分析。在优秀员工中寻找可以推广到更广泛的机构群体的特质,可以提高整体效率。

此外,确定为保险公司提供最佳价值的代理类型可以为未来的合作战略提供信息。所有业务都受到时间和资源的限制。数据可以确保可用的时间和资源集中在正确的地方。

考虑到上述情况,看到这些数据没有关于业务或其目标的额外背景,我有 3 个关键问题想要回答:

  • 与更高(或更低)损失率相关的变量是什么?
  • 代理商如何根据价值进行细分?
  • 相对于他们的潜力,这些机构的表现如何?

这三个问题的综合答案告诉我们应该关注哪些产品,哪些机构提供的价值最大(和最小),以及哪些机构应该继续关注。

首先,随着时间的推移,损失率在最初几年稳步增长,然后趋于稳定。

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

对我来说,一个有趣的早期发现是,如果你只去除数据集中前 1%的损失,损失率会下降 30%以上。剔除前 5%的亏损,亏损率下降了近 70%,剔除前 10%的亏损,亏损率仅为 2%。换句话说,前 10%的损失约占总损失比率的 96%。

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

对我来说,这表明损失集中在一小部分产品或代理上。了解哪些产品和机构造成了亏损,将是未来制定更有利可图的政策的关键。

从产品的角度来看,我们可以看到,房屋保险应该是进一步调查的第一个领域。按净保费计算,它是第二大类别,也是赔付率最高的类别之一。我的直觉是,这是一个竞争更加激烈的市场,抑制了任何可以更好地对风险进行定价的定价能力,但这将是一个需要更多研究的领域。

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

将数据汇总到其产品线,并去除前 1%的异常值,财产保险产品的整体损失率比商业保险高出约 50%,这可能是由房主造成的。

初步探索性分析的要点和含义是:

  • 少数亏损驱动多数亏损比率。深入了解遭受这些损失的保单的产品、定价和一般承保,以了解它们的共同点,可能会产生有价值的见解。
  • 房主保险是一个需要进一步调查的明确领域,以了解尽管净保费很高(这应该会分散风险),但其损失率却较高的原因。
  • 财产保险比商业保险风险更大。随着时间的推移,在商业上取得适当的平衡可能是有益的。

现在我们对绩效和绩效的潜在驱动因素有了更好的理解,我们将分析机构本身。

聚类是一种寻求在数据中找到自然分组的技术。它在创建一个更加微妙的故事时非常有用,因为数据集中的每个人并不都有相似的行为,聚类可以帮助识别数据中有相似行为的组。

在测试了不同的集群后,我选择了五个作为最佳数量,下面的可视化显示了集群在数据集内感兴趣的关键指标上的差异:

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

Number of agencies by Cluster: 1 = 323; 2 = 335; 3 = 434; 4 = 316; 5 = 215

根据这一分析,我将集群分类如下:

  • 集群 1 :稳定,规模适中,表现良好
  • 集群 2 :中等增长,大,表现良好
  • 群组 3 :下降、非常小、表现显著不佳
  • 集群 4 :增长型、中型、高性能
  • 集群 5 :下降、规模小、中度表现不佳

从商业角度来看,我从上面的图表和分析中有几点收获。

首先,尽管数据集中有大约 1,600 家机构,但其中只有大约 60%对业务有影响。关系的质量比伙伴的数量更重要。

其次,尽管第 3 组的损失率非常惊人,但该细分市场的平均规模及其承保的总保费意味着它实际上不会对业绩产生过大影响。我的建议是考虑终止与大多数机构的合作关系;他们提供的价值(或缺乏价值)不太可能抵得上他们创造的收入,如果大多数人不再是代理合作伙伴,业务将不会受到什么影响。

我要说的第三点是,我们应该关注第四组中的机构,以理解为什么它们的规模在这段时间内翻了一番。目前的数据集有其局限性,但可能的解释是,这些机构正在增加他们的代理人数量,而其他人没有,或者他们正在服务于经济衰退后增长更快的特定行业(或当地社区)。我排除的一个解释是,有一组特定的产品,它们提供的频率高于大多数其他细分市场;数据中没有证据表明这是真的。

最后,我想了解为什么集群 1 和集群 2 具有相似的平均代理人数量、代理机构数量和损失率,但集群 2 提供的保费是集群 1 的 2 倍。

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

Median Products by Cluster

对于聚类 1 和聚类 2,我们发现,与聚类 1 相比,聚类 2 中的典型代理多销售了 4 种产品。在这些产品中,有一种产品更有可能被集群 2 售出,这种产品是平均保费收入最高的产品之一。进一步的定性信息(例如,与每个集群中的机构通话以更好地了解他们的业务)将是一个有用的起点。

最后的分析将试图衡量每个机构的效率,因为它与他们的保费收入有关。该分析量化了一个机构在给定可用资源的情况下相对于其同行的表现。在这里,我们认为资源是一个机构中生产者(代理商)的数量和提供的独特产品的总数;2014 年写的保费收入就是产出。

举例来说,让我们假设只有两个代理商,他们都有 5 个生产商和 10 个销售产品。第一家代理公司有 100 万美元的书面保费,第二家有 50 万美元。我们会认为代理 1 以 100%的效率运行,代理 2 以 50%的效率运行,因为给定相同的投入,代理 2 只产生 50%的产出。

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

Blue is for the full cluster, Orange is for only those that generated revenue in 2014. Cluster 2’s Blue and Orange dots overlap.

虽然没有一个集群一定表现高效,但从方向上看,结果如何映射到之前看到的收入表现并不令人惊讶。正在下降的集群 3 和集群 5 的效率最低。

集群 2 的运行效率是集群 1 的两倍多,这有助于解释为什么他们的收入显著更高。实际上,在其他条件相同的情况下,他们的代理比集群 1 的代理在销售方面做得更好,并且他们通常提供更多的产品,如前面的分析所证明的。

此分析的下一步是:

  • 找出高效机构的共同特征——它们做的有什么不同?他们卖的是什么产品?他们是如何培训他们的制片人/代理人的?
  • 瞄准表现不佳、潜力大的机构。根据代理商数量或过去的业绩,哪些代理商最有增长潜力?哪些公司已经产生了丰厚的收入(因此是很好的合作伙伴),并有扩大规模的潜力?

结论

在大约 1 天的工作时间内,我们可以快速了解导致更好和更差结果的因素(通过损失率衡量)、推动大部分收入和对业务最有价值的机构,以及当前基础内提高效率的跑道。

我们还确定了数据中需要进一步研究的领域。按保费排名第二大类的屋主险,为什么赔付率这么高?为什么群组 2 中的机构比群组 1 中的机构表现突出?为什么集群 4 比其他细分市场增长更快?高效率的机构做了什么导致了超出预期的表现?这可以扩展到其他机构吗?

接下来,可以与更广泛的团队讨论这些发现的意义,以及优先关注哪些研究领域将为组织带来最大价值。

交付数据科学而不交付软件

原文:https://towardsdatascience.com/delivering-data-science-without-delivering-software-2c43fcc140ad?source=collection_archive---------22-----------------------

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

Data Science Tools (Photo: Author)

你总是需要交付完整的软件吗?

“R vs Python”或“软件技能 vs 统计技能”这样的争论不时出现在数据科学领域。这些争论有时似乎有一个隐藏的假设,即对于一个数据科学家来说,唯一可能的交付品是一个以模型为中心的功能完整的软件。也就是说,人们经常使用的论点只有在完成的软件是目标时才有意义。

如果不是呢?如果有其他方法来传递数据科学的价值会怎样?

最显而易见的方法是写一份报告来传递一个结果。这个建议可能看起来微不足道,但有时,随着对生成功能预测模型的关注,简单地写下你从数据中学到的东西的想法似乎会丢失。

然而,在许多情况下,真正的价值可能在于更好地了解情况。例如,虽然能够根据已知因素预测一段时间内的销售额是有用的,但是为了知道订购多少库存,能够增加销售额也是可取的。因此,在正确的情况下,你的识别杠杆的模型可能比成熟的预测模型更有用。

如果你从一个黑盒模型开始,对输入变量如何影响最终结果的了解有限,那么识别杠杆会很困难。然而,现在有一些方法可以追溯性地发现模型中的重要因素——有像 LIME 或 SHAP 这样的工具可以让你做到这一点。

有时,有用的不一定是输入变量和目标之间的直接关系,而是创建特征过程中的副产品。在发现用户丢失数据的原因的基础上,追踪可疑的丢失数据可能会让您对用户的问题有所顿悟。

在每一种情况下,你更有可能是在组织中已经存在的知识的基础上浮出水面并不断积累。根据泰曼定律,“任何看起来不同或有趣的信息通常都是错误的”。这意味着你不太可能发现真正原创的东西——然而,在大多数组织中,大多数知识都是非结构化的,以无定形的模糊概念存储在人们的头脑中。即使知识不模糊,也很少写下来。

数据科学可以通过建立一个有效的知识库来为组织提供服务,该知识库包含来自根据可用数据测试组织信念中的主题专家的书面发现。这可能比数据科学家能够提供的几乎任何东西都更有价值。

通过数据分析构建知识通常需要对代码有简单的理解——通过 R 或 Python 运行回归的技巧更多地在于选择输入和理解结果。将增加组织的知识储备的目标放在你的脑海中,避免被编码特定答案的最佳方式的辅助思想分散注意力。

罗伯特·德格拉夫的书《管理你的数据科学项目》》已经通过出版社出版。

在 Twitter 上关注罗伯特

兑现人工智能的承诺

原文:https://towardsdatascience.com/delivering-on-the-promise-of-artificial-intelligence-f6424a75d61c?source=collection_archive---------22-----------------------

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

Photo by Alex Knight on Unsplash

你不断听到关于人工智能(AI)的说法。Nvidia 的 CEO “AI 要吃掉软件了。”马克·库班惊呼,“人工智能、深度学习、机器学习——无论你在做什么,如果你不懂,就去学吧。因为否则,你会在三年内变成一只恐龙。”

然而,与此同时,你会读到关于公司未能利用人工智能执行的文章。有些人甚至声称85%的努力都会失败。

作为创业公司的一部分,你没有资本也没有时间进行人工智能的潜在昂贵的失败实验,但你也不能落后。那么从哪里开始

我经常和初创公司的创始人交谈,也经常被问到这个问题。我想提出 3 个步骤来帮助你最大化在人工智能上成功执行的机会。你可能会惊讶于它们都不需要最先进的人工智能。

总是从数据开始

数据是 AI 的命脉。想想你听到的所有关于人工智能的公司:谷歌、脸书、亚马逊、网飞。他们都有大量数据,并且每天都在增长。他们不仅拥有大量数据,还拥有大量专有数据。没有其他人拥有亚马逊的所有销售数据,没有其他公司能够获得所有网飞展会背后的消费者数据。

大量的专有数据是一个巨大的好处。

幸运的是,几乎每个公司都会产生某种类型的专有数据。如果你从事电子商务,你有哪些消费者在购买什么产品的数据。如果你是一家 SaaS 公司,你有客户如何与你的产品互动的数据。

你的人工智能之旅的第一步应该是坐下来回答以下问题:

  • 我的公司产生哪些数据资产?
  • 它们的专有程度如何?
  • 我现在有多少数据?
  • 我的数据增长速度有多快?
  • 数据存储在哪里?如何访问它们?

如果在此分析之后,您发现您有大量的专有数据在快速增长,并且可以合理地访问,那么您已经为下一步做好了准备。

如果你在识别专有数据方面有困难,那么试着想想如何改变这种情况。你没有为你的网站利用谷歌分析吗?你在广告中使用脸书像素吗?想办法让你的公司为你生成数据。

如果你的公司里没有人知道这些数据最终在哪里或者如何提取,你需要首先回答这些问题。也许做一些谷歌搜索,找出如何提取谷歌分析数据。或者雇一个自由工程师来帮你。

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

Photo by NeONBRAND on Unsplash

确定影响

既然你已经有了一些可以利用的数据资产,你需要确定你要用人工智能解决的第一个问题。在这一步骤中,我的首要建议是

忽略人工智能的宣传,专注于从数据中创造价值

对于这一步,我会 AI 定义为任何使用数据以可扩展方式交付价值的机器辅助过程。这可能是对人工智能的一个过于宽泛的定义,但它应该允许你不在乎你正在做的事情是否是“最先进的”,而是专注于从你的数据中创造价值。维基百科将人工智能定义为“机器展示的智能”我相信利用技术(机器)使用数据来创造影响(智能)肯定属于这个定义。可伸缩性至关重要。如果你不能用技术扩展你的解决方案,那就不算数。

以下是选择要解决的问题时要考虑的一些事项:

  • 如果我能解决这个问题,会有多大影响?
  • 这个问题看起来有多难?
  • 我们目前有没有人可以使用数据和技术实施解决方案?
  • 给定一些数据,人类可以解决这个问题,这看起来合理吗?

我会回答你能想到的 3-5 个最有影响力的项目的问题。你在寻找一个有影响力的问题,它已经有数据,并且看起来不太有挑战性。优先解决简单的问题,尝试并确保快速取得第一次胜利。如果你认为你已经有一个员工可以尝试解决这个问题,这是一个巨大的奖励。如果没有,试着找一个热衷于解决问题并且不怕学习新技能的员工。互联网上有大量的资源可以用来学习数据分析和人工智能。否则,可以在 Upwork 等平台上雇佣一名自由职业者。只是要确保向他或她提供清晰明了、易于访问的描述良好的数据。这通常是一个更好的第一步,而不是一个新员工,以防你发现自己没有想象中准备好。

拥有科学的心态

用数据解决问题真的是一个科学的过程。它往往包括发展一个假设,测试这个假设,然后学习一些东西。并重复。

不要期望你的第一个假设会成功

通过上一步,您可能已经提出了这样一个假设,即您可以使用销售数据来识别适合追加销售的客户。你已经看过一些数据,并且非常有信心看到产品购买之间的相关性。因此,您重新安排员工来解决问题,实施您的解决方案,您的追加销售率不会改变。好吧,我想你已经失败了——是时候继续前进了。

不。你测试了一个假设,而那个假设失败了。现在你需要深入研究,了解原因,开发一个新的假设,并测试它。也许你看到的相关性不是因果关系;也许你的代码中有一个 bug 也许你的测试需要运行更长时间。你需要提出一个假设来解释为什么它失败了。这将指导你的下一步行动。

这个测试假设、学习和重复的过程需要时间。这就是为什么选择一个看起来能迅速见效的问题更好的主要原因。这将有望让你在初次尝到成功的滋味之前不必经历太多的失败。

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

Photo by Clark Tibbs on Unsplash

现在——去做吧

这就是了。花时间想想你有什么数据资产,分析潜在的影响领域,像科学家一样思考。如果你从这三个步骤开始,你将处于一个坚实的位置,开始用数据和人工智能为你的初创公司提供价值。这些步骤也不需要你有很强的背景或对人工智能的理解——你只需要战略性地思考你的问题和你的数据。一旦你有了这样的理解,你就可以让别人(或者你自己)来执行人工智能。只要确保你能像科学家一样思考就行了!

本文可在这里找到。

使用亚马逊 Kinesis Data Firehose 向亚马逊 S3 提供实时流数据

原文:https://towardsdatascience.com/delivering-real-time-streaming-data-to-amazon-s3-using-amazon-kinesis-data-firehose-2cda5c4d1efe?source=collection_archive---------1-----------------------

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

在这篇文章中,让我们探索什么是流数据,以及如何使用亚马逊 Kinesis Firehose 服务来制作一个应用程序,将这些流数据存储到亚马逊 S3。作为实践体验,我们将使用 AWS 管理控制台接收模拟股票报价机数据,我们将从中创建一个交付流并保存到 S3。在实现之前,让我们先看看什么是流数据,什么是亚马逊 Kinesis。

流数据是由许多数据源连续生成的数据。这些可以同时以小尺寸发送。这些流数据可以通过 Amazon Kinesis、Apache Kafka、Apache Spark 和许多其他框架等工具收集。流式数据的一些例子是

  • 应用程序生成的日志文件
  • 来自 web 应用程序或移动应用程序的客户交互数据
  • 金融股票市场数据
  • IOT 设备数据(传感器、性能监视器等…)

亚马逊 Kinesis 是亚马逊提供的一项服务,使其易于收集。处理和分析实时流数据。目前,亚马逊 Kinesis 提供了四种类型的 Kinesis 流数据平台。

  • Kinesis 数据流 —用于实时收集和处理大量数据记录
  • kine sis Data fire hose——用于向亚马逊 S3、Redshift 等目的地传送实时流数据…
  • kines 数据分析 —用于使用标准 SQL 处理和分析流数据
  • Kinesis 视频流——用于全面管理从设备传输实时视频的服务

亚马逊 Kinesis 数据消防软管

亚马逊 Kinesis data firehose 是亚马逊提供的一项完全托管的服务,用于向亚马逊服务提供的目的地交付实时流数据。目前,亚马逊 Kinesis Firehose 支持四类亚马逊服务作为目的地。

  • 亚马逊 S3——一个易于使用的对象存储
  • 亚马逊红移—Pb 级数据仓库
  • 亚马逊弹性搜索服务——开源搜索和分析引擎
  • Splunk —用于分析机器生成数据的智能运营工具

在这篇文章中,我们将看看如何使用亚马逊 Kinesis Firehose 将流数据保存到亚马逊简单存储(S3)。在开始实现我们的应用程序之前,让我们先来看看 Amazon Kinesis Firehose 的关键概念。

Kinesis 数据消防水带交付流—kine sis 数据消防水带的底层实体。

数据生产者 —将数据记录发送到 Kinesis 数据消防软管的实体。(例如:发送日志文件的 web 或移动应用程序)

记录——我们的数据生成器发送给 Kinesis 消防水带交付流的数据。

缓冲区大小和缓冲区间隔 —这些配置决定了在将它们传送到目的地之前需要多少缓冲。

现在我们已经学习了 Kinesis Firehose 的关键概念,让我们进入流程的实现部分。下图显示了我们的交付流的基本架构。数据生产者将记录发送到我们的流中,我们将使用 Lambda 函数对其进行转换。之后,转换后的记录将通过 Kinesis Firehose 保存到 S3。我们还将在转换之前将流数据备份到 S3 存储桶。

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

对于这篇文章,我们将创建一个交付流,其中的记录将是股票行情数据。我们将使用 AWS 管理控制台接收模拟股票行情数据,并将 S3 作为我们的目的地。模拟数据将具有以下格式。

{"TICKER_SYMBOL":"JIB","SECTOR":"AUTOMOBILE","CHANGE":-0.15,"PRICE":44.89}

创建亚马逊 Kinesis 数据消防水带交付流

可以通过控制台或 AWS SDK 创建 Kinesis 消防水带传输流。对于我们的博客文章,我们将使用 ole 来创建交付流。在交付流创建之后,我们可以随时更新和修改它。

首先转到分析类别下的 Kinesis 服务。如果你以前从未使用过 Kinesis,你会看到下面的欢迎页面。

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

点击开始创建我们的交付流。在下一页中,您将看到四种类型的向导,用于为四种类型的数据平台服务创建 Kinesis 流。在这篇文章中,我们使用的是通过 Kinesis Firehose 传送流传送流数据,这是第二种选择。

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

提供传送流名称的名称。在来源下选择直接上传或其他来源。该选项将创建生产者应用程序直接写入的交付流。如果选择了 Kinesis 流,那么传送流将使用 Kinesis 数据流作为数据源。为简单起见,我们选择了第一个选项。

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

转换记录

在下一页中,我们将需要配置数据转换配置。Kinesis Firehose 可以调用 Lambda 函数来转换传入的源数据,并将转换后的数据传送到目的地。Lambda 函数的蓝图由 AWS 提供。但是在创建 Lambda 函数之前,让我们看看在转换数据之前我们需要知道的需求。

来自 lambda 函数的所有转换记录都应该包含下面描述的参数。

  • recordid —调用过程中从 Kinesis Firehose 传递到 Lambda 的记录 id。转换后的记录应该包含相同的 id。
  • 结果 —已被 Lambda 函数转换的数据的状态。
  • 数据 —转换后的数据

有几个为我们提供的 Lambda 蓝图,我们可以使用它们来创建用于数据转换的 Lambda 函数。我们将使用这些蓝图之一来创建我们的 Lambda 函数。

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

过程记录页面中的** s 转换源记录,AWS Lambda** 选择启用。这将提示您选择一个 Lambda 函数。选择新建。在这里,我们得到了数据转换的 Lambda 蓝图。选择通用水龙带加工作为我们的蓝图。

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

这将把我们带到 Lambda 函数创建页面。为我们的函数提供一个名称。然后,我们需要提供一个 IAM 角色,它能够访问我们的消防软管交付流,并被允许调用腐败批次操作。

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

在查看策略文档中,选择编辑并将以下内容添加到策略中。

{
            "Effect": "Allow",
            "Action": [
                "firehose:PutRecordBatch"
            ],
            "Resource": [
                "arn:aws:firehose:your-region:your-aws-account-id:deliverystream/your-stream-name"
            ]
        }

确保在保存策略之前编辑您的地区、您的 aws 帐户 id、您的流名称

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

创建 IAM 角色后,我们将被重定向回 Lambda 函数创建页面。在此选择创建的角色。之后,我们需要编写自己的 Lambda 函数代码来转换我们的数据记录。Lambda blueprint 已经用我们需要遵循的预定义规则填充了代码。

如上所述,我们的流数据将具有以下格式。

{"TICKER_SYMBOL":"JIB","SECTOR":"AUTOMOBILE","CHANGE":-0.15,"PRICE":44.89}

为了这篇文章的简单,我们将对这个记录做一个简单的转换。在流式传输记录时,我们将忽略“更改”属性。因此,我们转换后的记录将只有属性 ticker_symbolsectorprice 属性。将以下代码粘贴到 Lambda 函数中来实现这一点。

'use strict';
console.log('Loading function');exports.handler = (event, context, callback) => {
    /* Process the list of records and transform them */
    const output = event.records.map((record) => {
        console.log(record.recordId);
        const payload =JSON.parse((Buffer.from(record.data, 'base64').toString())) const resultPayLoad = {
                ticker_symbol : payload.ticker_symbol,
                sector : payload.sector,
                price : payload.price,
            };

        return{
            recordId: record.recordId,
            result: 'Ok',
            data: (Buffer.from(JSON.stringify(resultPayLoad))).toString('base64'),
        };
    });
    console.log(`Processing completed.  Successful records ${output.length}.`);
    callback(null, { records: output });
};

创建 Lambda 函数后,返回到交付流创建页面。在这里选择我们刚刚创建的新 Lambda 函数。

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

目的地

在下一页中,我们将被提示选择目的地。在这篇文章中,我们将把我们的记录保存到 S3。

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

在 S3 目的地选择 S3 桶,我们将存储我们的记录。如果您尚未创建 S3 存储桶,您可以选择创建新的。如果您想在 Lambda 完成转换过程之前备份记录,那么您也可以选择一个备份存储桶。

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

选择目的地后,我们将被重定向到配置页面。在这里,我们可以首先选择缓冲区大小和缓冲区间隔、S3 压缩和加密以及错误日志。除了 IAM 角色之外,保留所有配置设置的默认值。我们需要为 Kinesis 提供一个 IAM 角色来访问我们的 S3 桶。如果您已经有一个 IAM 角色,您可以在不创建新角色的情况下选择它。

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

查看我们的配置后,点击创建交付流创建我们的亚马逊 Kinesis 消防软管交付流。新的 Kinesis 消防水带交付流将在创建状态中花费一些时间,然后才可供我们使用。在交付流状态变为活动后,我们可以开始从生产者向其发送数据。

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

现在我们已经创建了交付流。现在让我们测试我们创建的交付流。点击交付流并打开带有演示数据的测试节点。

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

点击开始发送演示数据。这将开始向我们的交付流发送记录。发送演示数据后,点击停止发送演示数据以避免进一步充电。请注意,根据您的存储桶的缓冲配置,新对象可能需要几分钟才会出现在您的存储桶中。为了确认我们的流数据保存在 S3,我们可以去目的地 S3 桶和验证。验证流数据是否也没有更改属性。转换前的所有流记录都可以在备份 S3 存储桶中找到。

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

我们现在已经使用亚马逊 Kinesis Firehose 为 S3 成功创建了一个交付流,并成功进行了测试。你可以更深入地了解 Kinesis Firehose,它的目的地可能是亚马逊红移,也可能是 Kinesis 数据流的生产商。跟随这个文档深入了解亚马逊 Kinesis Firehose。

交货日期估计

原文:https://towardsdatascience.com/delivery-date-estimation-5aff1a0ff8dc?source=collection_archive---------10-----------------------

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

在处理与时间相关且动态变化的环境时,您可能面临的技术挑战。

在戴尔,我们尽最大努力为客户提供卓越的体验。这也适用于满足我们的产品交付期限。在复杂的供应链中,向客户提供准确的预计交货日期并不容易。大型组织中的供应链团队可能很大,而且高度矩阵化,但是他们有一个共同的目标,那就是快速、准时地向客户提供产品。在下订单时,我们会利用我们所掌握的最佳信息为客户提供一个预计的交货日期。它需要考虑几个因素,如库存水平、地区、假期、预期的未来需求等。这些因素以及大量的历史数据使得这个问题成为应用机器学习的完美用例。

在本文中,我们将探索一些微妙的技术学习,以及我们在尝试将算法智能和机器学习引入这一重要挑战时面临的一些挑战。我们还将举例说明解决这些问题的一些方法。

我们开始吧。

准时订单与竞争力

估计交货日期有点棘手,需要保持一定的平衡,以确保订单不会延迟,同时尽可能在交货时间内报价。当客户下订单并得到承诺的交货日期时,我们必须履行订单并按时交货:在我们提供的预计日期或之前(在某些情况下,在特定的日期范围内)。应对这一挑战的简单方法是为客户提供较长的交付时间。例如,如果我们认为产品可以在一周内交付,我们可以提供一个月的交付日期,以最小化迟到的风险。然而,如果客户能在更短的时间内从竞争对手那里得到类似的产品,我们可能会失去这笔生意。

在准确性和竞争力之间有一个不断的权衡,当然,我们的目标是优化这两者。

绝大多数机器学习算法都是用对称的代价函数优化来构造的。在这种情况下,任何一个方向的误差成本都是一样的——晚 X 天或早 X 天的误差是一样的。在我们的例子中,有一个被认为代价更高的错误:我们宁愿早交货也不愿晚交货。我们通过创建一个定制的不对称成本函数,将这种业务逻辑编码到机器学习模型中,该函数对延迟订单的惩罚比对早期订单的惩罚更重。

下图显示了常规成本函数和不对称成本函数之间的比较。

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

Comparison between regular cost function and customize asymmetric cost function

我们希望将延迟订单的百分比保持在非常低的水平,同时在任何优化问题中,我们也希望尽可能地最小化成本函数,以实现零损失。通过这种方式,我们将能够为客户提供准确且有竞争力的交货时间。

选择目标变量

最直观的目标变量是订单周期时间(从订单输入到最终交付的总天数)。但是,要准确预测这个时间,我们应该考虑两个方面:

  • 计量单位:产品是在工作日生产和交付的,因此我们的目标变量的计算应该只包括工作日。这样,我们消除了周末和节假日对交货日期估计的影响。
  • 周期时间定义:总交付时间可以分为两个主要部分:构建/准备时间(订单输入和订单发货之间的时间)和发货时间(从订单发货到客户收到订单的时间)。因为运输时间通常由更一般的因素(运输提供商、天气、运输类型等)控制。建议使用一个主模型来预测订单的构建/准备时间,并使用一个额外的子模型来预测订单离开工厂后的运输时间(该模型将取决于与该特定问题更相关的其他因素)。

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

Timeline emphasizing the possible target variables

考虑到以上几个方面,我们可以确定没有外部效应被引入到模型中。这样,模型应该能够仅根据订单的特征来预测准备时间,而不需要外部数据源,如假期或运输选项。

基于时间的训练\测试分割

训练和评估机器学习模型通常需要一个训练集和一个测试集(以及一个交叉验证集来优化模型参数)。在大多数情况下,通过将 20%的数据作为模型不可见的测试数据,并将其余数据用于训练,来随机进行训练和测试拆分。

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

Random 80/20% split

当处理与时间相关且动态变化的环境时,例如大型公司供应链,其中环境的特征随着时间而变化,最好使用基于时间的分割,甚至应用基于时间的交叉验证来提供统计上稳健的模型评估。为此,我们使用一种取自时间序列领域的方法,即时间序列交叉验证,它形成了一种“滑动窗口”训练方法。

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

Time-based split

所建议的方法还可以帮助我们模拟实时生产环境,在这种环境中,机器学习模型根据到目前为止所有可用的订单进行训练,并用于预测未来订单的交付时间。

总之,我们分享了在使用机器学习估计订单交付日期时遇到的主要挑战。我们的目标是提高准确性并按时交付产品,同时保持竞争力的交付时间。为此,我们使用非对称成本函数来预测选定的目标变量,并通过使用独特的训练\测试分割方法来最佳模拟真实世界的行为。

特别感谢:

Kyle West 和 Oshry Ben-Harush,感谢他们在这个项目上的合作,感谢他们校对、审阅这篇文章并给出了令人敬畏的技术反馈。

推荐阅读

如果你想了解更多关于非对称成本函数的知识,我推荐阅读 Prince 的梯度提升的自定义损失函数,它在这个项目的工作中帮助了我。

需求曲线和人工智能的危险

原文:https://towardsdatascience.com/demand-curves-and-the-dangers-of-ai-65233bd77da8?source=collection_archive---------16-----------------------

人工智能如何利用零售店的监控摄像头揭示客户的支付意愿。

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

如果价格从 20 美元降到 1 美元,你会买多少件新 t 恤?管理经济学家一直在处理这个问题,它使用个人需求曲线(IDC)为消费者理论奠定了基础。IDC 显示了消费者在给定价格下将购买的商品数量。它可以用来估计每个人在不同价格水平下会购买多少单位的产品。目标是通过设定最优价格来实现利润最大化。也许 20 美元太高,1 美元太低。每个消费者对这些价格会有不同的反应,因为每个人有不同的口味和偏好。

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

Demand Curve

但是,通过总结个人曲线,公司可以建立市场需求曲线(MDC ),它代表了所有个人在不同价格下的需求量。MDC 与 IDC 具有相同的外观,但适用于该市场上的所有个人。MDC 更相关,因为该公司不能歧视价格,例如,对低收入个人以 5 美元出售 t 恤,而对高收入个人以 90 美元出售。相反,公司需要设定价格,而不管谁是买家。所以,MDC 再次帮助经理们找到公司利润最大化的最优价格。

鉴于每个消费者有不同的偏好,构建个人需求曲线在历史上可能是困难的。但随着人工智能的进步,零售公司可以通过监控摄像头跟踪消费者行为来实现构建个人需求曲线的算法。据报道,拉尔夫·劳伦、克罗格、沃尔格林和其他零售商店正在使用摄像机追踪消费者行为。人工智能可以跟踪消费者进入商店的那一刻,直到收银台付款。商店还可以使用面部识别,识别特定顾客在店内查看不同产品时对不同价格的反应。如果顾客回到商店,他的脸可以用来检索他的个人需求曲线,该曲线先前存储在他们的数据库中,然后改变消费者倾向于购买的产品的一些价格。它还可以通过检测面部表情和对标签上价格的反应来确定顾客购买产品的可能性。因此,商店可以建立概率 IDC,而不是建立传统的个人需求曲线。概率模型可以使用来自面部表情和先前购买的历史数据。

企业在改变产品价格时必须有一定的灵活性。但是在过去的几年里,一些企业越来越多地采用一种有争议的替代方案,叫做动态价格(或者更聪明的定价)。例如,酒店和运输等行业严重依赖动态价格,因为需求可能会因音乐会或商业峰会等大型活动而发生巨大变化。公司通过选择一个或多个基准和潜在变量来计算自己的价格,从而采用动态价格。这些变量包括竞争对手的价格(例如,比最低电子商务网站价格低 5%)、一天中的时间(例如,餐馆可能有午餐和晚餐菜单)、高峰需求(例如,雨天的优步)、加价(例如,油价和汽油)、一周中的天数(周末的电影院)。动态价格很不受消费者欢迎,原因有几个。该战略不断提醒消费者,公司的目标是从他们身上获取尽可能多的价值。这也可以被视为一种不公平的优势,因为消费者并不总是拥有相同的资源来得出他们自己对公平价格的评估。最后,消费者倾向于将价格与价值而不是需求联系起来,这意味着消费者从产品的益处而不是稀缺性来看待产品。

《罗宾逊-帕特曼法案》等法律禁止价格歧视,但价格歧视的表现条件非常复杂。现代经济理论将价格歧视分为三个不同层次:完全歧视、直接分割和间接分割。【1】完全歧视是价格基于每个个体的支付意愿变化的条件——个体需求曲线。当一些消费者变量被用来设定价格时,如性别和性别,直接细分就存在了。最后,间接细分通过一个代理变量发生,如包装尺寸和数量。

价格歧视和动态价格在用于直接细分和完全歧视时是一个危险的领域。使用监控摄像头跟踪消费者的行为超出了公平的做法,应该受到法律的限制。国会应该关注这个问题,并提出新的立法来防止这种做法。商店前面的标志显示商店监视其顾客可能是一个可行的选择,但这还不够。如果消费者看到了明显的好处,他们应该能够选择加入。大多数商店拒绝透露,甚至拒绝回应是否有此类行为。随着人工智能领域的进步,消费者、企业和政府机构应该意识到滥用,并防止不断监视消费者以构建他们的个人需求曲线。

【1】巴新,伊万。管理经济学,第四版。Routledge,2012 年。

使用 TensorFlow 2 和 Keras 在 Python 中使用 LSTMs 进行需求预测

原文:https://towardsdatascience.com/demand-prediction-with-lstms-using-tensorflow-2-and-keras-in-python-1d1076fc89a0?source=collection_archive---------5-----------------------

了解如何通过深度学习从多元时间序列数据中预测需求

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

TL;DR 学习如何使用多元时间序列数据预测需求。在 Keras 和 TensorFlow 2 中建立一个双向 LSTM 神经网络,并使用它进行预测。

时间序列模型最常见的应用之一是预测未来值。股票市场将会如何变化?明天 1 个比特币值多少钱?下个月你打算卖多少咖啡?

没听说过 LSTMs 和时间序列?阅读前一部分来学习基础知识。

本指南将向您展示如何使用多元(许多特征)时间序列数据来预测未来需求。您将学习如何预处理和缩放数据。你要建立一个双向 LSTM 神经网络来进行预测。

在浏览器中运行完整的笔记本

GitHub 上的完整项目

数据

我们的数据伦敦自行车共享数据集托管在 Kaggle 上。由赫里斯托·马夫罗季耶夫提供。谢谢!

自行车共享系统、公共自行车计划或公共自行车共享(PBS)计划是一项服务,在该服务中,个人可以付费或免费短期共享自行车。——维基百科

我们的目标是根据伦敦自行车份额的历史数据预测未来自行车份额的数量。让我们下载数据:

!gdown --id 1nPw071R3tZi4zqVcmXA6kXVTe43Ex6K3 --output london_bike_sharing.csv

并将其加载到熊猫数据框中:

Pandas 足够聪明,可以将时间戳字符串解析为 DateTime 对象。我们有什么?我们有 2 年的自行车共享数据,定期记录(1 小时)。就行数而言:

(17414, 9)

那也许可以。我们有什么特点?

  • 时间戳 —用于分组数据的时间戳字段
  • 计数 —一辆新自行车股份的计数
  • t1——实际温度,单位为摄氏度
  • T2——以摄氏度为单位的温度“感觉像”
  • 嗡嗡声——湿度百分比
  • 风速 —风速,单位为千米/小时
  • 天气 _ 代码 —天气的类别
  • is_holiday —布尔字段— 1 节假日/ 0 非节假日
  • is_weekend —布尔字段—如果当天是周末,则为 1
  • 季节 —类别野外气象季节:0-春季;1-夏天;2-摔倒;3-冬天。

我们能在多大程度上根据数据预测未来的需求?

特征工程

我们会做一点工程设计:

所有新特性都基于时间戳。让我们更深入地研究这些数据。

探测

让我们从简单的开始。让我们来看看自行车份额的变化情况:

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

那有点太拥挤了。让我们来看看每月的相同数据:

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

我们的数据似乎有很强的季节性成分。夏季对生意有好处。

按小时共享自行车怎么样:

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

大多数自行车共享的时间根据周末或非周末有很大不同。工作日包含上午和下午晚些时候的两个大高峰(人们假装在中间工作)。周末下午早些时候到晚些时候似乎是最忙的。

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

按一周中的某一天来看数据,会发现自行车份额的数量要高得多。

我们小小的功能工程努力似乎有了回报。新功能可以很好地分离数据。

预处理

我们将使用最后 10%的数据进行测试:

15672 1742

我们将扩展建模中使用的一些功能:

我们还将扩大自行车份额的数量:

为了准备序列,我们将重用同一个create_dataset()函数:

每个序列将包含历史记录中的 10 个数据点:

(15662, 10, 13) (15662,)

我们的数据格式不适合训练 LSTM 模型。我们能多好地预测自行车份额的数量?

预测需求

让我们从一个简单的模型开始,看看效果如何。一层双向 LSTM,带漏层:

记住在训练时不要打乱数据:

估价

以下是我们为 30 个时代训练模型后的结果:

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

你可以看到这个模型学得很快。大约在第五纪元时,它已经开始有点过度适应了。你可以试着调整它,改变单位的数量,等等。但是我们能用它来预测需求吗?

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

那对你的眼睛来说可能太多了。让我们放大预测:

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

请注意,我们的模型只预测未来的一个点。也就是说,它做得很好。虽然我们的模型不能真正捕捉到极值,但它在预测(理解)一般模式方面做得很好。

结论

你只是拿了一个真实的数据集,对它进行预处理,然后用它来预测自行车共享需求。您已经使用双向 LSTM 模型对原始数据集的子序列进行了训练。你甚至得到了一些非常好的结果。

在浏览器中运行完整的笔记本

GitHub 上的完整项目

LSTMs 对于时间序列数据还有其他应用吗?

[## 用 Python 进行机器学习的黑客指南

Scikit-Learn、TensorFlow 和 Keras 深度学习实践指南了解如何解决现实世界的机器学习…

leanpub.com](https://leanpub.com/Hackers-Guide-to-Machine-Learning-with-Python/)

最初发表于https://www.curiousily.com

视觉亲属关系验证:Python 熊猫教程

原文:https://towardsdatascience.com/demo-for-rfiw-2020-task-1-kinship-verification-8a8ed7081bcc?source=collection_archive---------36-----------------------

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

野外家庭的视觉识别

认识野外的家庭

目录

问题定式化

亲属关系验证的目标是确定不同主体的一对人脸是否是特定类型的亲属,像亲子。这是一个经典的布尔问题,系统响应要么相关,要么不相关。即分别为真或假,并形成自动亲属关系识别的一对一范例。

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

Given a pair of faces, the task here would be to determine whether or not either is a father-son pair.

概观

这个基本演示展示了在野外识别家庭( RFIW )数据挑战中使用熊猫的一些技巧。具体来说,亲属关系验证(任务一)。 FIW 数据集支持 RFIW。这里的目的是演示如何通过几个简单的步骤完成评估。此外,我们还看到了如何轻松地生成既吸引人又富有洞察力的可视化效果。

我们将评估配对,并对用于评估的特征进行分析。具体来说:

  • 将所有特征加载到字典中。
  • 根据验证协议进行评估。
  • 生成 ROC 曲线。
  • 使用信号检测模型(SDMs)可视化不同关系类型的亲缘和非亲缘分数分布。

设置环境和打印样式

准备数据

假设特征被提取,存储为 pickles ,并以与人脸图像相同的目录结构和命名方案保存。特征以字典的形式读入,键设置为无文件扩展名的相对文件路径(即//)。参见准备特性 —更改 i/o 方案以修改单个单元。为此,使用在 Pytorch 的 MSCeleb 上训练的 ArcFace 对人脸进行编码(来源, Github )。但是,任何功能都可以插入。

准备特征并计算分数

加载 pickle 文件并确定关系类型

Processing 143168 pairs of 11 relationship types
[‘BB’ ‘SS’ ‘FS’ ‘FD’ ‘SIBS’ ‘MD’ ‘MS’ ‘GFGS’ ‘GFGD’ ‘GMGS’ ‘GMGD’]

在 LUT 建立图像列表和加载功能

计算每对的分数

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

The output of cell above: head (top) and tail (bottom)

表格的顶部包含阳性对,而底部是阴性对。看分数差异。正如我们所希望的,亲属对似乎比非亲属对得分更高(即更相似)。

通过信号检测理论分析性能

在大多数情况下,标签从一个单独的文件中加载。然而,在这里,我们根据受试者 1 和 2 的家庭 ID (FID)来推断标签是亲属还是非亲属

生成接收机工作特性(ROC)曲线

以前,这一部分只包含代码片段和图形。感谢 Abal Harith 的评论激发了本文的阐述。尽管如此,未来的博客将会更深入,但下面描述的是最低限度。

验证中提出的一对一协议直接转化为布尔分类的经典问题。因此,ROC 曲线是评估两类问题的一种传统方法,如是/否、垃圾邮件/非垃圾邮件、患病/未患病,以及(我希望)在这一点上毫不奇怪的亲属 / 非亲属。本质上,ROC 曲线的每个点都是做出正确决策的概率,假设感兴趣的样本确实是阳性(即y= {是,垃圾邮件,患病,或亲属},其中标签 y 是针对目标对的)。具体来说,ROC 曲线直观地描述了作为假阳性率(FPR)函数的真阳性率(TPR)。作为回报,是一个由滑动阈值决定的权衡比率。换句话说,ROC 曲线揭示了做出的正确(即 KIN )决策的数量中正确和错误决策的数量(即每次预测被推断为肯定时的正确率)。此外,找到曲线下的面积(AUC)会将该图转换为单个值 v ,其中v∈ℝ:v∈【0,1】。

首先,将 random(即 50-50)绘制成一条穿过对角线的虚线。如果 ROC 曲线低于 random,那么我们只能说你最好抛硬币:)尽管如此,为了直观的帮助:

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

ROC curves for all pairs

现在生成每种关系(即成对)类型的 ROC 曲线:

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

ROC curves for each relationship types

显然,祖孙辈似乎是最糟糕的一群。此外,平均而言,FP 是丰富的,这是不好的。

ROC 曲线不是这篇文章的重点。因此,让我们就此打住——我尊敬地提到乔斯林·德索萨萨朗·纳克希德 这里这里。两位作者都很好地描述了这个主题的介绍性观点。尽管如此,我们只考虑积极的预测,因此,未来的博客将沉迷于其他指标,同时指出这些指标可能会产生误导的情况(例如,患病/未患病,其中阳性(即患病)的数量通常比阴性少得多)。

让我们对分数分布做一些分析。

信号分析

接下来,为每种关系类型绘制信号检测模型(SDM)。由此,我们将分数的分布视为标签的函数(即,亲属与非亲属)。

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

SDM for the different pair-wise types.

类似于 SDM,但是让我们看看小提琴的情节,作为两类可分性的另一种可视化的手段。

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

Violin plot comparing scores of KIN to NON-KIN per category.

突击测验

你看出 ROC 曲线和 SDM 之间的关系了吗?数学上?直觉上?请在下面评论您的想法和解决方案。未来的演示将探索这一概念。

人工智能对民主的真正威胁

原文:https://towardsdatascience.com/democracys-unsettling-future-in-the-age-of-ai-c47b1096746e?source=collection_archive---------11-----------------------

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

Photo by Brett Zeck on Unsplash

前所未有的挑战和新机遇——信息泡沫、少数人的暴政以及自由和平等的未来

全球政治的黑暗势力对民主制度构成了根本性的挑战。然而,在这个以打击恐怖主义和其他邪恶行为者为特征的时代,人们很少承认或分析技术变革对政治的影响。

政策制定者和政治家倾向于忽视技术在定义未来社会政治系统中的重要性。数字革命带来了前所未有的挑战,破坏了民主的一些基本理念。因此,探索 AI 所代表的危险和机遇对于确保民主的未来活力和维护当代世界秩序至关重要。

过去,新技术的效果展现得相对较慢,让政府有时间进行调整。然而,人工智能(AI)和机器人技术正在进行的技术革命的步伐不仅会快得多,而且会随着时间的推移而加快。不幸的是,监管者往往没有充分意识到新技术的后果,并在负面影响变得明显之前采取必要的改革。第四次工业革命不会是一个单一的分水岭事件——它将是一系列巨大变化的级联,破坏将以越来越快的速度发生,迫使人类不断改造自己。

人工智能涉及机器对人类智能的模拟。与传统的计算机程序不同,人工智能算法(为解决特定问题而创建的指令集)可以自我学习——换句话说,程序员插入数据,然后对数据进行分析,以获得趋势和重要的推论。由于这些技术的复杂性和在几乎所有生活领域的可能应用,它们将极大地改变世界秩序——人类的首要目标必须是最大限度地增加其好处,减少其负面影响。对人工智能对自由民主的影响进行更深入的研究,是解决我们今天面临以及明天可能面临的问题的关键。

人工智能驱动的信息泡沫

2009 年 12 月 4 日。发生了一件在很大程度上未被注意到的事情,但它标志着科技公司所使用的商业模式的一个转折点,并将对社会产生深远的影响。谷歌默默宣布将使用五十七个信号定制搜索结果。换句话说,从 2009 年开始,就没有标准的谷歌了。

人工智能算法被领先的科技公司广泛使用,除了谷歌,还包括脸书、亚马逊和微软。这些公司不断收集我们的活动数据,以便根据每个人的兴趣、愿望和偏好为其量身定制信息。

最初,这种算法是为了帮助我们避免在信息洪流中迷失方向。在一个注意力稀缺的世界,互联网的个性化是确保信息符合我们独特个性的最佳方式,允许有效和方便的网络体验。

然而,算法的个性化也有负面影响。由于个性化算法为人们提供了他们可能参与的信息,人们很快将自己隔离到信息泡沫中,在那里他们自己的信念得到加强,他们不会暴露于相反的观点。这导致了确认偏差,扭曲的世界观和挫伤的创造力。

创造了过滤泡沫这个术语的互联网活动家伊莱·帕里泽(Eli Pariser)写道:“如果任其自生自灭,个性化过滤器会起到一种无形的自动宣传作用,向我们灌输自己的想法,放大我们对熟悉事物的渴望,并让我们忘记隐藏在未知黑暗领域中的危险。”。信息泡沫创造了由熟悉事物组成的虚拟世界:它们是反映我们自己观点的单向镜子。用比尔·盖茨在的话来说,信息泡沫“让你和志趣相投的人一起离开,所以你不会混合、分享和理解其他观点。”

过滤泡沫对社会和民主政治有着深远的影响。由于回音室效应,某些复杂或令人不快的问题被排除在公共讨论之外,因为人们不太可能注意那些难以理解或令人不快的事情,而这些问题的理解对于民主的正常运作是必要的。

过滤气泡也起到了隐形宣传的作用(比如,举了的例子,60%的脸书用户不知道故事的算法管理)。他们强迫人们相信他们所消费的信息代表了无可争议的事实——从而扩大了党派偏见。

在过去,真理是独立于观察者的。但是,在信息泡沫时代,真理的概念正在失去其普遍性,并被相对化和个性化——这使得达成共识变得更加困难,因为现在争论的每一方都相信自己的一贯正确。

当人们被局限于方便的意识形态框架时,他们不太可能达成政治妥协,而更有可能发现自己与他人意见相左。信息泡沫通过促进身份群体的形成助长了政治两极分化,导致无法采取集体行动,最终导致社会分裂甚至完全崩溃。

然而,领先的科技公司已经在解决这个问题上取得了长足的进步。例如,在 2017 年,脸书将其趋势主题列表去个性化,从而扩大了用户对他们感兴趣的主题和他们支持的观点的接触,以及对不同观点和重要全球问题的接触。

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

Photo by Element5 Digital on Unsplash

大数据、大技术和少数人的暴政

然而,人工智能将不仅仅影响个人。人工智能算法在政治中的使用既带来了新的机遇,也对整个民主进程提出了挑战。

以前,政治家宣布他们的观点,公民选出他们认为最能代表他们国家利益的人。如今,事实正相反:政客们研究选民的观点,并相应调整自己的观点。

候选人越来越多地使用人工智能来通过研究选民的社交媒体活动来分析关于选民偏好的数据。当一个候选人发现他的平台不是一个受欢迎的平台时,他可以改变它以符合人们的要求。民主最终可以通过人工智能的实施得到加强:分析数据库可以让潜在候选人更准确地了解公民的需求,从而弥合政治家和普通公民之间的鸿沟,改善民主进程。正如佩德罗·多明戈斯(Pedro Domingos)所言,多亏了艾,“民主运作得更好,因为选民和政治家之间的沟通带宽大大增加了。”然而,也有不好的一面。如果候选人的信念反映了人工智能对选民偏好的研究,民主选举可能会变成蛊惑人心的大规模呼吁,而不是美国开国元勋所设想的理性审议过程。

然而,更重要的是,人工智能和政治营销的融合将为政治家提供工具,不仅使他们能够检查选民的意愿,而且能够操纵他们。利用设计巧妙的算法,政治家们可以研究个人观点,并通过个性化的广告促使犹豫不决的选民支持他们。这反过来可能会导致少数人的暴政。毕竟,如果候选人知道某些公民是她坚定的支持者,她就不会把精力集中在他们身上——因为她可以只瞄准摇摆不定的选民,这些人将确保她的胜利。这意味着一个国家的命运可能由数十万摇摆不定的选民决定,这些选民将受到来自各方的宣传攻势,因此不太可能做出理性的决定。

人工智能时代的自由与平等

民主的两个基本支柱是自由和平等。人工智能侵蚀了这两个原则。

正如哈拉里(Y. N. Harari)所指出的,全民公决和选举总是关乎人类情感,而不是理性,因为如果民主是理性决策的问题,那么给每个人平等的投票权就没有意义,因为一些人显然比其他人更理性、更有知识,特别是在经济和政治方面。但是,在选举日,一个诺贝尔经济学奖获得者的选票与一个普通出纳员的选票具有同等的分量。正如哈拉里在为 21 世纪写的 21 课中所写的,

不管是好是坏,选举和公民投票与我们的想法无关。它们关乎我们的感受。而说到感情,爱因斯坦和道金斯也不比任何人强。民主假定人类的感情反映了一种神秘而深刻的“自由意志”,这种“自由意志”是权威的最终来源,并且尽管有些人比其他人更聪明,但所有人都是平等自由的。像爱因斯坦和道金斯一样,一个不识字的少女也有自由意志,因此在选举日,她的感觉——以她的选票为代表——和其他任何人一样重要……这种对心灵的依赖可能是自由民主的致命弱点。一旦有人——无论是在北京还是在旧金山——获得了侵入和操纵人心的技术能力,民主政治就会变异成一场情感木偶剧。

人工智能将允许我们产生可以操纵我们的思想和行动的算法,从长远来看,比我们自己更了解我们。甚至在今天,我们越来越相信算法——例如,大多数人相信谷歌是他们唯一的知识来源。我们很可能在未来被迫更加依赖算法,因为在政治宣传泛滥的情况下,算法不会像普通选民那样被操纵。

民主还有另一个决定性特征:平等——社会平等和机会平等。然而,人工智能的实施可能会创造历史上最不平等的社会,因为数据正逐渐变成我们最宝贵的资产。谁控制了数据,谁就控制了未来。

自古以来,土地就是最重要的资产。他们那个时代最强大的国家——如波斯、马其顿和罗马帝国——也是最大的。然而,自从工业革命以来,土地的重要性一直在下降,而工厂和机器已经成为真正的动力来源。

在当今时代,数据将超越土地和机器,成为最重要的资产,为了控制数据的流动,将会爆发战争。数据将是经济的主要驱动力。数字流对 GDP 增长的影响已经超过了历史悠久的商品和服务贸易。

但是,就像几乎所有技术先进的行业一样,由于算法对数据的依赖,数据驱动的经济自然会走向垄断。这种依赖创造了一个自我强化的循环。如果一家公司在竞争中占了先机,就很难抗拒市场集中的过程。有了更好的服务,就会吸引更多的顾客。更多的用户将提供更多的数据,而更多的数据将改进人工智能算法。反过来,更先进的人工智能算法将吸引更多的客户,这些客户将为公司提供额外的数据,等等,无止境。这解释了为什么科技行业如此严重地被垄断,以及为什么像谷歌、亚马逊和微软这样的公司在他们的领域完全处于主导地位。

如果不加监管,未来的经济将由垄断构成,这将导致前所未有的权力集中,因为基于人工智能的算法和机器人消除了大多数工作岗位,导致数百万人失业。民主国家将如何应对一个一无是处的阶层的需求,这个阶层正遭受着比剥削更糟糕的事情——无关紧要?

共产主义和社会主义出现在工业革命之后,因为统治阶级无法满足工人阶级的要求。新的技术革命可能会带来新的意识形态和运动,给民主带来压力,并试图利用无用的人的怨恨为自己谋利。

因此,人工智能可以说是民主的最大威胁,因为它破坏了民主的基础支柱。

民主能经受住这些前所未有的挑战吗?我想是的。民主具有有效解决现代性问题的独特能力,其固有的灵活性和务实的韧性将使其能够适应新的现实。

开放社会(有时被称为自由民主)有一个内在优势:它们是反身性的,因此能够有效应对挑战。简单地说,反身性理论认为,我们对事件的感知会影响这些事件。因此,由于开放社会为非传统的批判性思维提供了途径,它们比意识形态竞争对手更有能力应对现代性的挑战。结果,即使在史无前例的社会变革和生存威胁中,自由民主国家也能成功适应并繁荣发展,这要归功于它们对批评的开放和对改革的接受。

人工智能驱动的技术时代的到来标志着人类历史的转折点。人工智能提供了以前无法想象的机会,将有助于我们加强自由民主。

我们的最终目标必须是通过鼓励对人工智能的影响进行更积极、非党派的讨论来确保民主的可行性,以便设计出管理其影响的蓝图。这将需要加强多边合作,以避免可能导致人工智能军备竞赛和加剧全球不平等的零和思维;公众更好地理解人工智能和一般政治,以改善民主进程;最重要的是,在人工智能驱动的世界的三大支柱之间进行更广泛的协调:政府、科技公司和民间社会。民主的未来掌握在我们手中。

原载于 Areo 杂志

与 H2O 一起使机器学习民主化

原文:https://towardsdatascience.com/democratising-machine-learning-with-h2o-7f2f79e10e3f?source=collection_archive---------3-----------------------

H2O 概述:开源、分布式内存机器学习平台

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

Photo by Pixabay from Pexels

为了社会和经济的稳定,让每个人都能接触到人工智能是很重要的。

Kaggle days 是一个为期两天的活动,数据科学爱好者可以面对面地相互交流,交流知识,并一起竞争。Kaggle days 旧金山刚刚结束,按照惯例,Kaggle 还为参与者组织了一次黑客马拉松。我在 Twitter 上关注了 Kaggle 几天,来自Erin LeDell(H2O . ai 的首席机器学习科学家)的以下推文引起了我的注意。

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

Source: Twitter

我已经用 H2O 做了一段时间的实验,发现它在解决 ML 问题时非常无缝和直观。看到它在排行榜上表现如此之好,我想是时候写一篇关于它的文章了,让其他人更容易过渡到 H2O 的世界。

H2O . ai:H2O 背后的公司

H2O.ai 位于加州山景城,提供一套机器学习平台。H2O 的核心优势是其高性能的 ML 组件,这些组件紧密集成在一起。在 2019 年 1 月发布的报告中,H2O.ai 在 Gartner 数据科学平台魔力象限中是一个有远见的人。

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

Source: Gartner (January 2019)

让我们简单看一下 H2O.ai 的产品:

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

H2O.ai Products and Solutions

H2O

H2O 是一个开源的、分布式内存机器学习平台,具有线性可扩展性。H2O 支持最广泛使用的统计&机器学习算法,也具有 AutoML 功能。H2O 的核心代码是用 Java 编写的,它的 REST API 允许从外部程序或脚本访问 H2O 的所有功能。该平台包括 R、Python、Scala、Java、JSON 和 CoffeeScript/JavaScript 的接口,以及内置的 web 接口 Flow,

由于这篇文章的主要焦点是关于 H2O,我们将在文章的后面了解更多。

H2O 苏打水

苏打水 允许用户将 H2O 的快速、可扩展的机器学习算法与 Spark 的能力相结合。苏打水是 H2O 用户的理想选择,他们需要管理大型集群以满足其数据处理需求,并希望将数据从 Spark 传输到 H2O(反之亦然)。

H2O4GPU

H2O4GPU 是一个开源的 GPU 加速的机器学习包,带有 Python 和 R 中的 API,允许任何人利用 GPU 来构建高级机器学习模型。

H2O 无人驾驶人工智能

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

Driverless AI’s UI

H2O 无人驾驶 AI 是 H2O.ai 的自动机器学习旗舰产品。它完全自动化了应用数据科学中一些最具挑战性和生产力的任务,例如特征工程、模型调整、模型集成和模型部署。有了无人驾驶人工智能,各种熟练程度的数据科学家只需在 GUI 上点击几下,就可以训练和部署建模管道。无人驾驶 AI 是一种商业许可产品,有 21 天的免费试用版。

什么是 H2O

最新版本叫做 H2O-3 是 H2O 的第三次化身。H2O 使用熟悉的接口,如 R、Python、Scala、Java、JSON 和 Flow notebook/web 接口,并与 Hadoop 和 Spark 等大数据技术无缝合作。通过更快、更好的预测建模,H2O 可以轻松、快速地从数据中获得洞察力。

高层架构

H2O 使得从多个来源导入数据成为可能,并拥有一个用 Java 编写的快速、可扩展的分布式计算引擎。这里是该平台的高级概述。

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

A High-Level architecture of h2o

支持的算法

H2O 支持很多常用的机器学习算法。

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

Algorithms supported by H2O

装置

H2O 提供了一个可以从 CRAN 安装的 R 包和一个可以从 PyPI 安装的 python 包。在本文中,我将只使用 Python 实现。另外,你可能想看看文档中的完整细节。

先决条件

  • 计算机编程语言
  • Java 7 或更高版本,你可以在 Java 下载页面获得。要构建 H2O 或运行 H2O 测试,需要 64 位 JDK。要使用命令行、R 或 Python 包运行 H2O 二进制文件,只需要 64 位 JRE。

依赖关系:

pip install requests
pip install tabulate
pip install "colorama>=0.3.8"
pip install future
  • pip 安装
pip install **-**f http:**//**h2o**-**release**.**s3**.**amazonaws**.**com**/**h2o**/**latest_stable_Py**.**html h2o
  • 康达
conda install -c h2oai h2o=3.22.1.2

注意:在 OS X El Capitan 中从pip安装 H2O 时,用户必须包含--user标志。比如说-

pip install -f [http://h2o-release.s3.amazonaws.com/h2o/latest_stable_Py.html](http://h2o-release.s3.amazonaws.com/h2o/latest_stable_Py.html) h2o --user

关于 R 安装,请参考官方文档此处

测试装置

每个新的 python 会话都从初始化 python 客户端和 H2O 集群之间的连接开始。一个集群是一组协同工作的 H2O 节点;当作业提交到集群时,集群中的所有节点都处理该作业的一部分。

要检查是否一切就绪,请打开 Jupyter 笔记本,键入以下内容:

import h2o
h2o.init()

这是一个本地的 H2O 集群。在执行单元时,一些信息将以表格的形式显示在屏幕上,其中包括节点数量、总内存、Python 版本等。如果您需要报告一个 bug,请确保包含所有这些信息。此外,h2o.init()确保没有 H2O 的先前实例在运行。

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

Running h2o.init() (in Python)

默认情况下,H2O 实例使用所有内核和大约 25%的系统内存。但是,如果您希望为它分配固定的内存块,您可以在 init 函数中指定它。假设我们想给 H2O 实例 4GB 内存,它应该只使用 2 个内核。
#分配资源
h2o.init(nthreads=2,max_mem_size=4)

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

现在,我们的 H2O 实例只使用了 2 个内核和大约 4GB 的内存。但是,我们将使用默认方法。

在 Python 中使用 H2O 导入数据

安装成功后,就该动手处理真实世界的数据集了。我们将使用著名的葡萄酒数据集解决一个回归问题。这里的任务是 预测白葡萄酒 的质量,给定一组特征作为输入,范围为 0-10。

这里有一个到 Github 资源库 的链接,如果你想跟进或者你可以点击下面的图片在我的活页夹上查看。

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

数据

这些数据属于葡萄牙“Vinho Verde”葡萄酒的白色变种。

数据导入

从本地 CSV 文件导入数据。该命令与pandas.read_csv非常相似,数据作为H2 of frame存储在内存中。

wine_data = h2o.import_file("winequality-white.csv")
wine_data.head(5)# The default head() command displays the first 10 rows.

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

Displaying the first 5 rows of the dataset

电子设计自动化(Electronic Design Automation)

让我们探索数据集以获得一些见解。

wine_data.describe()

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

Exploring some of the columns of the dataset

这里所有的特征都是数字,没有任何分类变量。现在让我们也来看看各个特征之间的相互关系。

import matplotlib.pyplot as plt
import seaborn as sns
plt.figure(figsize=(10,10))
corr = wine_data.cor().as_data_frame()
corr.index = wine_data.columns
sns.heatmap(corr, annot = True, cmap='RdYlGn', vmin=-1, vmax=1)
plt.title("Correlation Heatmap", fontsize=16)
plt.show()

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

和 H2O 一起做模特

我们将建立一个回归模型来预测葡萄酒的质量。在 H2O 模块中有很多算法可以用于分类和回归问题。

将数据拆分为测试集和训练集

由于我们只有一个数据集,让我们将它分成训练和测试部分,以便我们可以评估模型的性能。我们将使用split_frame()功能。

wine_split = wine_data.split_frame(ratios = [0.8], seed = 1234)wine_train = wine_split[0] # using 80% for training
wine_test = wine_split[1] #rest 20% for testingprint(wine_train.shape, wine_test.shape)
**(3932, 12) (966, 12)**

定义预测变量

predictors = list(wine_data.columns) 
predictors.remove('quality')  # Since we need to predict quality
predictors

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

广义线性模型

我们将建立一个默认设置的广义线性模型(GLM)。广义线性模型(GLM)根据指数分布估计回归模型的结果。除了高斯(即正态)分布,还包括泊松、二项式和伽玛分布。你可以在文档中读到更多关于 GLM 的信息。

# Import the function for GLM
from h2o.estimators.glm import H2OGeneralizedLinearEstimator# Set up GLM for regression
glm = H2OGeneralizedLinearEstimator(family = 'gaussian', model_id = 'glm_default')# Use .train() to build the model
glm.train(x = predictors, 
                  y = 'quality', 
                  training_frame = wine_train)print(glm)

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

GLM model’s parameters on the Training set

现在,让我们在测试数据集上检查模型的性能

glm.model_performance(wine_test)

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

做预测

使用 GLM 模型在测试数据集中进行预测。

predictions = glm.predict(wine_test)
predictions.head(5)

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

同样,您可以使用其他监督算法,如 分布式随机 Fores梯度推进机器 ,甚至 深度学习 。你也可以调整超参数。

H2OAutoML:自动机器学习

自动化机器学习 ( AutoML ) 是将机器学习应用于现实世界问题的端到端过程自动化的过程。AutoML 使得真正意义上的机器学习成为可能,甚至对于在这个领域没有主要专业知识的人也是如此。H2O 的 AutoML 倾向于将模型的训练和调整部分自动化。

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

H2O AutoML: Available Algos

在这一部分,我们将使用 H2O 的 AutoML 功能来解决预测葡萄酒质量的回归问题。

导入 AutoML 模块

from h2o.automl import H2OAutoML
aml = H2OAutoML(max_models = 20, max_runtime_secs=100, seed = 1)

在这里,AutoML 将为 20 个基本模型运行 100 秒。默认运行时间是 1 小时。

培养

aml.train(x=predictors, y='quality', training_frame=wine_train, validation_frame=wine_test)

排行榜

现在让我们看看 automl 排行榜。

print(aml.leaderboard)

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

AutoML Leaderboard

排行榜显示了 AutoML 构建的前 10 个模型及其参数。最好的模型放在最上面是一个堆叠的系综。

领导者模型存储为aml.leader

单个模型的贡献

让我们看看这个元学习者的个人模型的贡献。

metalearner = h2o.get_model(aml.leader.metalearner()['name'])
metalearner.std_coef_plot()

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

XRT(极度随机化的树)的贡献最大,其次是分布式随机森林。

预言

 preds = aml.leader.predict(wine_test)

上面的代码是最快的入门方式,然而,要了解更多关于 H2O AutoML 的信息,值得看一看深入的 AutoML 教程(有 R 和 Python 版本)。

停工

h2o.shutdown()

使用心流——H2O 的网络用户界面

在本文的最后一部分,让我们快速了解一下 H2O 的开源 Web UIFlow。FLow 是一个基于 web 的交互式计算环境,您可以将代码执行、文本、数学、情节和富媒体结合到一个文档中,就像 Jupyter 笔记本一样。

发射流程

一旦 H2O 启动并运行,你所需要做的就是将你的浏览器指向 http://localhost:54321 ,你就会看到我们非常漂亮的用户界面流。****

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

Launching H2O flow

流动界面

这里是流接口的一个快速浏览。你可以在这里 阅读更多关于使用和操作 的信息。

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

H2O’s flow interface

Flow 旨在帮助数据科学家快速轻松地创建模型、导入文件、分割数据框,以及完成在其他环境中通常需要大量输入的所有工作。

工作

让我们看一下同样的葡萄酒例子,但这次是流动的。以下视频解释了使用 flow 的模型构建和预测,这是一目了然的。

Demonstration of H2O Flow

要深入了解 FLow 及其功能,请参考下面的文章:

** [## 使用 Flow 开始使用 H2O

看看 H2O 的开源 UI,它将代码执行、文本、情节和富媒体结合在一个文档中。

towardsdatascience.com](/getting-started-with-h2o-using-flow-b560b5d969b8)**

结论

H2O 是一个强大的工具,鉴于它的能力,它真的可以永远改变数据科学的进程。人工智能的能力和优势应该面向所有人,而不是少数人。这是民主化的真正本质,而民主化的数据科学对于解决威胁我们星球的真正问题应该是至关重要的。

民主化人工智能(第 2 部分):个人人工智能

原文:https://towardsdatascience.com/democratize-ai-part-2-the-personal-ai-bedf819ace44?source=collection_archive---------25-----------------------

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

卡罗尔·丹弗斯的人工智能遇到了大问题。

作为一名来自克里母星哈拉的“高贵的战斗英雄”,卡罗尔刚刚发现她认为自己真实的大部分事情都是谎言。而不是随便一个谎言。似乎“最高智慧”——统治克里文明的高级人工智能——一直在公然欺骗她。关于她真正的地球起源,关于她神秘力量的来源,以及关于正在进行的对抗邪恶的斯克鲁尔恐怖分子的战争的基础。看起来,诡计、背叛和银河种族灭绝,并不在由一个先进的星际文明的最优秀的头脑组成的统治人工智能的视野之下。不止有点心疼。对于那些对地球自身历史有所了解的人来说,这是令人沮丧的熟悉。

作为重生的惊奇队长卡萝尔令人生畏的挑战是如何挑战全能的最高智慧。毕竟,SI 本质上控制了 Kree 的计算世界,进而控制了它的公民。一旦她在身体上被俘虏,卡罗尔的精神状态似乎就在 SI 的掌握之中。

在整部电影中,卡罗尔纯粹的勇气和决心在艰难生活的倒叙中得到了展现。这些品质在她与 SI 的对决中再次闪耀。然而,事实证明,卡罗尔作为惊奇队长并没有击败 SI 的邪恶意图就其本身的计算为基础的条款。从来没有“人工智能对人工智能”的皇家战役。相反,她最终做了电影中的超级英雄的事情:使用她潜在的宇宙魔方的力量,在 SI 可疑的阴谋中冲出一条路。

这是一场极具娱乐性的成功盛会——但并不完全是一个可供他人效仿的蓝图。毕竟,我们当中很少有人拥有那种在拳头中翻腾的原始宇宙能量。

从现代文学到流行娱乐,中央机器智能运用社会控制的主题并不新鲜。埃姆·福斯特的短篇小说《机器停止了》,首次出版于 1909 年,是文学的先驱。《惊奇队长》只是这类电影中的最新一部。从“2001:太空漫游”到“终结者”系列,情节围绕着一小群具有独立思想的人类反抗统治人工智能的专制权威。正如在《惊奇队长》电影中一样,这种挑战很少在与人工智能相同的虚拟条件下运作,更不用说成功了。相反,抵抗通常是通过现实世界的身体动作来提供的(除非,就像在《黑客帝国》中一样,一个人足够幸运地成为“唯一”,尽管配备了很棒的打斗动作)。甚至在《我的机器人》中,超级人工智能 VIKI 也是由一个流氓机器人将纳米机器人注入她的操作系统核心来完成的。肯定非常有趣。但是,这些拔掉机器插头的变体并没有为我们自己的未来提供最佳的人工智能治理策略。

抛开“人工智能统治世界”的遥远场景,我们的社会此时此刻仍然面临着规模较小但仍然紧迫的挑战。即:在一个日益被第三方人工智能主导的世界里,我们每个人如何能够希望充分保护和促进我们合法的生活利益?

正如这个三部曲系列的第一部分 所描述的那样 ,复杂且不断深化的社会挑战源于我所称的制度 ai:网络“屏幕”、“官僚主义”和环境“场景”的混合这些人工智能由企业和政府机构拥有和控制,相当于嵌入并塑造我们日常生活方方面面的重要决策系统。重要的是,这些系统受制于其机构主人的优先事项,而不是我们其他人。由此导致的人类能动性的丧失有可能成为我们的新现状。

非常清楚的是,这种担忧并不是任何想要将人工智能妖魔化为一种技术的症状。人工智能为许多提高生活质量和挽救生命的应用提供了令人难以置信的潜力。例如,仅仅在医疗保健领域中,已经报道的进步确实令人震惊。作为训练有素的医生和研究人员手中的先进工具,人工智能可以为人类提供巨大的好处。真正的问题归结为那些使用技术工具的人的实际动机和控制。

下面,我将解释一种挑战机构 ai 片面扩散的潜在有效方法是引入人类代理的人工智能——姑且称之为 个人 ai。这些虚拟化身将直接服务于我们每一个人,以及我们选择的利益群体——包括家人、朋友和其他社会关系。本系列的第三部分(即将推出)将提出一个行动计划——“如何”——来帮助实现这些愿望。

迄今为止,大多数关于 AI 民主化的提议——创造更大的透明度,更平衡的优先事项,以及对基本人权更少的伤害——都集中在改变现有机构的做法和行为上。一些专门的组织,从 AI Now ,到人类未来研究所,到人工智能伦理和治理倡议,正在努力工作,以发现、探索和提出对现有人工智能系统中一些更致命的缺陷的有意义的修复。其他人,如 IEEE 的专业软件工程师,正在推广基于道德人工智能的新技术标准和实践。这些团体和许多其他团体正在从事非常有价值和有益的努力,以使机构人工智能更接近人类核心价值观。

值得注意的是,这些组织倾向于在这些第三方控制的算法系统之外进行操作时倡导改进。这意味着他们的工作往往相当于寻求在不同程度上限制我们社会中那些能够接触到所有技术工具和所有个人数据的人的快速发展的活动。它们不会对即将到来的世界构成正面挑战,在这个世界上,只有相对较少的人开发和部署人工智能,表面上是为了我们其他人的利益。简而言之,他们的努力非常重要,但还不完全。

尽管如此,在新生的人工智能领域,仍有机会支持一种互补和有效的方法。普通人实际上应该拥有类似的技术,而不是继续充当数据捐赠者和侵入性算法系统的对象。在人工智能的特定背景下,这意味着人们应该有自己的个人人工智能,只对自己独特的兴趣负责。

那么这到底意味着什么呢?简而言之,我们每个人都应该有一个高度个性化的虚拟智能,在日常生活中支持我们。这些计算代理将存在于我们的个人设备上,由我们选择的值得信赖和负责的实体为我们管理。这些个人认可机构将成为我们值得信赖的顾问和积极的倡导者,部分是通过积极与第三方机构认可机构合作。

这并不意味着,例如,让亚马逊和苹果完全重新编写他们的 Alexa 和 Siri 应用程序。相反,这相当于用他们自己的人工智能武装普通人,然后这些人工智能将与那些机构人工智能直接交互。事实上,如果这些实体打算为我们调解我们的生活,也许虚拟个人代理的引入可以被认为是一种“反调解”的形式,一种引入一些制衡以平衡计算竞技场的方式。与目前的第一代虚拟助手不同,第二代版本将由它服务的实际人类来选择和控制。

因此,个人人工智能旨在代表其客户的利益,帮助塑造和管理她与虚拟世界的互动。特别是,应用程序可以不断地、直观地与来自在线/离线世界的持续不断的数据流进行交互。这将需要无数的实时同步活动:从识别、分析和研究特定情况,到推荐和执行选项,到与第三方就参与条款进行谈判,在必要时,甚至推翻和阻止有害的第三方请求。所有这些都不需要客户有意识的参与。

**这种虚拟界面功能可以在许多不同的场景中发挥出来。**一些包括拥有个人人工智能:

管理和保护其客户的在线和离线个人数据和信息流动,以及与第三方的其他数字互动;

确保在线推荐引擎提供相关信息,而不是有害内容,如“深度假货”或令人上瘾的视频;

质疑金融和医疗算法的效力,找出可能损害其客户的偏见和其他缺陷;和

防止环境设备(智能扬声器、面部识别摄像头、生物传感器)参与不必要的监控。

最后一个场景涉及将在线计算能力带入离线空间。这将使我们每个人都能应对来自物联网(IoT)设备的大量隐形信号。我们不再需要在没有任何知识或同意或求助的情况下进入一个充满摄像头和传感器的物理环境。在这些情况下,个人人工智能可以根据我们的偏好提出建议或做出决定,允许或拒绝第三方访问个人信息的能力,例如我们的精确物理位置或独特的生物特征。

个人人工智能概念有可能演变成一种全新的范式,让人类使用虚拟连接相互交流。通过访问你的个人信息,并使用先进的机器学习工具,随着时间的推移,你的人工智能将真正了解你,并促进你的最佳利益。因此,个人 AI 应用程序有望成为基本的可信代理,不断地与个人用户联系在一起,并完全代表个人用户。人类既有知识的力量(透明度)又有行动的能力(机会)的实际能动性将得到加强,而不是简单地被剥夺。

因此,回到本系列文章的第一部分,无论是《我的机器人》中的侦探德尔·史普纳,还是作为自动驾驶汽车操作员的你,都会处于更有利的位置。每个人都有自己的超级中介代理,通过“屏幕、场景和镜头”积极地与第三方人工智能打交道。我们数字生活的真正个人化身。

这种个人赋权可能吗?绝对的。随着技术的飞速发展,个人人工智能开始变得可行。例如,IEEE 工作组 P7006 正在为个人数据人工智能代理开发新的行业标准。像开放人工智能这样的组织是开源人工智能软件,旨在实现有益的、以人类为中心的目的。此外,像 Silk Labs 和 Perceptio(现在都是苹果公司的一部分)和 Google(刚刚在 Google I/O 上宣布的)这样的公司正在建立这样的“设备上,云外”人工智能。这意味着实际的计算和个人数据可以驻留在最终用户的设备上,而不是从远处的云中控制。因此,机构认可机构不再需要无形的束缚。

也有一个成熟的商业模式来支持这项技术。真正的可信度应被视为一种商业溢价。毕竟,受托人、合作社、信用合作社、社会企业和一系列职业都是建立在向作为客户的个人提供可信的建议和服务的基础上的。那些相同的模型应该在计算智能空间中工作得特别好,在那里我们大多数人都需要一个实体来帮助我们建立和管理我们的个人人工智能。

真正的挑战不是技术或商业上的。关键是我们所有人都要求个人人工智能在不久的将来成为真正可行的选择。

但是现在能做些什么来实现它呢?也许确保基于人工智能的技术支持普通人利益的最佳方式是帮助为这种技术创造一个实际的生态系统。个人和实体都有机会推动个人人工智能市场的发展。一个这样的例子是作者的 GLIAnet 项目,该项目旨在基于值得信赖的数字代理,包括人工智能“化身”,创建一个新的网络生态系统

在本系列的第三部分(即将推出),我们将详细研究一个行动计划,将个人人工智能的这一引人注目的愿景变为现实。也许下一次,惊奇队长自己的计算“超级代理”将被证明是她超级宇宙能量的有益补充。

将人工智能大众化

原文:https://towardsdatascience.com/democratize-artificial-intelligence-48643394440f?source=collection_archive---------23-----------------------

它会变得不那么可怕

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

Photo from Unsplash

对未知的恐惧

每个人都知道害怕未知的感觉。在约你喜欢的人出去之前难以忍受的紧张。在学校或工作场所进行重要演示之前,你越来越出汗的手。害怕未知是每个人一生中迟早都会经历的少数普遍经历之一。事实上,“对未知的恐惧可能是一种,或者可能是根本的恐惧”(Carleton,2016)。我们每个人都熟悉的东西应该很容易定义,然而,定义害怕未知到底意味着什么却出奇地困难。Carleton (2016)将对未知事物的恐惧(FOTU)定义为“个体在任何意识水平或处理点感受到的信息缺失导致的体验恐惧的倾向”。这个定义特别有趣,因为它允许将 FOTU 教解释为许多其他恐惧的重要组成部分。

只要熊在动物园的笼子里,你就不怕和熊面对面站着。当你在山里徒步旅行时遇到一只熊,很可能会引起截然不同的反应。这是为什么呢?如果只要熊在笼子里,你就不怕它,那么熊本身就不应该让你感到害怕。有人可能会说,事实上,你害怕的是在山里遇到熊的未知情况。你不知道熊是否看到或闻到了你。你不知道这只熊是吃饱了,还是已经饿坏了,正在拼命寻找食物。除了与熊有关的未知因素,还有几个与你自己有关的未知因素会引起恐惧。你知道遇到熊时该如何应对吗?你应该跑吗?慢慢移动?所有这些未知因素导致了你正在经历的事情和你正在经历的恐惧程度。如果你以前读过关于遭遇熊的故事,并且确切地知道如何行动,你不仅会减少恐惧,你不受伤的几率也会大大增加。

媒体中的人工智能

类似于熊的遭遇,人工智能让很多人感到害怕。当人们读到像“埃隆·马斯克:‘记住我的话——人工智能远比核武器更危险’”这样的标题时,他们会非常害怕人工智能,这是理所当然的。这些文章以产生点击量为目的,试图耸人听闻地报道技术领导者的言论,以最大限度地增加他们的广告收入。然而,与此同时,他们对实际情况和这些人实际所说的话描绘了一幅不完整的画面。如果你读了上面的文章,马斯克实际上描述了人工智能看似无穷无尽的应用,然后呼吁为人工智能的发展奠定坚实的基础,让每个人都参与进来。这篇文章更合适的标题应该是“人工智能将为人类生活带来许多好处——但我们需要教育人们避免潜在的风险”。不幸的是,媒体公司不太可能转向更有教育意义的标题,如果这意味着收入的减少。因此,必须采取其他措施来使人工智能民主化,并使每个感兴趣的人都可以使用它。毕竟,如果你知道你在处理什么,你就能更好地对特定问题做出明智的决定。

让人工智能民主化的方法。

在已经确定,一般来说,FOTU 可以通过教育人们引起他们恐惧的问题来减少,是时候介绍一些减少 FOTU 的方法了。这样做,恐惧的减少不仅有利于现在更加了解人工智能现状的个人,也有利于该国政府所说的个人是公民。Moore (2006)确定了恐惧对经济的“影子价格”,并试图计算减少恐惧投资的“影子成本”之间的权衡。这些发现意味着决策者不应该把对普通大众的人工智能教育的投资视为支出,而是对经济的投资。

因此,这里有三个步骤来克服人工智能方面的 FOTU:

1.定义你的恐惧

克服 FOTU 的第一步是定义并承认你的恐惧。关于人工智能,这些恐惧可能是多方面的,取决于你是谁。一些例子包括:

  • 人工智能到底是什么?
  • 人工智能会取代我的工作吗?
  • 人工智能将如何影响我孩子的生活?
  • 等等。

通过明确你害怕什么,你已经减少了让你害怕的未知事物的数量,并迈出了战胜它们的第一步。

2.识别有用的资源

记住之前定义的恐惧,寻找可以帮助你更多了解它们的资源。对于那些不太可能对你造成身体伤害的恐惧来说尤其如此。尽管直面一只熊以了解它对你做跳跃动作的潜在反应会有很大的风险,但自学人工智能不太可能有这种效果。有几个人主张人工智能的民主化,因此,有许多(免费)资源可用。仅举几个例子:

  • 书籍:书籍总是学习新话题的好起点。人工智能领域的领导人有几本书是针对普通公众的,试图解释人工智能对日常生活的影响,比如李开复(谷歌中国前副总裁)关于人工智能地缘政治影响的书
  • 在线课程:取决于你想深入人工智能的程度,有几个在线学习平台非常重视无障碍人工智能教育。这种平台的一个例子是 coursera,由吴恩达(斯坦福大学计算机科学兼职教授)共同创立,如果你完成的速度足够快,它可以让你免费完成几门人工智能课程。
  • 在人工智能领域工作的人:和许多其他职业一样,大多数在人工智能行业工作的人都很乐意和你分享他们的见解。根据我的个人经验,能够与对该主题感兴趣的人交流思想,会给人工智能研究人员、数据科学家、机器学习工程师等带来巨大的快乐…

3.重新评估你的恐惧

完成这两个步骤后,花点时间重新评估你的恐惧。重新审视一下你在第一步中发现的恐惧,问问自己它们是否还像以前一样可怕。如果是的话,太好了。如果没有,请返回步骤二,尝试查找更多信息以进一步降低 FOTU。由于这个过程是高度迭代的,你很可能会发现自己在某个时候不得不回到第二步。技术在快速发展,因此,每隔一段时间更新你的知识是必要的。

结论

虽然已经有很多很好的资源来自学人工智能,但增加可用资源的数量可能会增加一般的人工智能意识和知识。如上所述,不仅将公共资源投资于人工智能的发展,而且投资于人工智能的民主化,应该符合决策者的利益…确保这两者齐头并进将带来巨大的社会和经济效益,同时提高公众对当代最重要的技术发展之一的决策能力。然而,在进行这些公共投资之前,每个人都应该努力减少他们对人工智能的 FOTU,并在这个过程中鼓励其他人也这样做。

参考文献:

[1] R. Nicholas Carleton, 对未知的恐惧:一个人的恐惧能统治他们所有人吗? (2016)《焦虑障碍杂志》(第 41 卷)

[2]西蒙·克里斯托弗·摩尔, 减少恐惧的价值:利用欧洲社会调查 (2006)进行的分析,应用经济学

使用业务示例揭开混淆矩阵的神秘面纱

原文:https://towardsdatascience.com/demystifying-confusion-matrix-29f3037b0cfa?source=collection_archive---------12-----------------------

深入混乱矩阵,了解 ROC 的阈值、曲线下面积(AUC)及其对模型评估的主要影响。

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

Source: Unsplash image by Leo Foureaux

你刚刚开始机器学习,完成了监督线性回归。现在你可以建立一个准确度还不错的模型了。现在,您转到分类模型。你训练这个模型,并用验证(测试)数据测试它,瞧,你得到了高达 91%的准确率。但是准确性是评估你的模型的正确方法吗?一个混乱矩阵将回答这个问题。网上有很多教程会解释什么是混淆矩阵。这篇文章将帮助你理解企业如何在他们的商业解决方案中使用混淆矩阵分析。

什么是混淆矩阵?

简单来说,混淆矩阵包含我们的预测数据的计数,相对于原始数据分为 4 个部分。它可以为一个分类问题而形成。

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

Outline of a confusion matrix for 2-way classification

让我们以垃圾邮件过滤器为例来理解这四个部分。有些电子邮件是垃圾邮件,有些不是。我们的垃圾邮件过滤器将预测这一点。
1)真实否定(TN):最初是非垃圾邮件,被预测为非垃圾邮件。
2)真阳性(TP):原本是垃圾邮件,预测为垃圾邮件。
3)假阴性(FN):原本是垃圾邮件,预测为非垃圾邮件。
4)误报(FP):原本不是垃圾邮件,预测为垃圾邮件。

我们可以清楚地看到,TN 和 TP 是我们的模型的正确预测,精确度可以通过:(TN+TP)/(总预测)来计算。但是公司很少纯粹根据准确率分数来做决定。从混淆矩阵中可以得出许多值,如灵敏度、特异性、召回率、精确度等。根据手头的业务问题来选择。我们可以很容易地在网上找到这些性能指标的公式。现在,让我们使用银行试图预测贷款违约者的业务场景来理解这些点指标的重要性。

银行贷款违约者混淆矩阵评估

一家银行创建了一个模型,使用其以前的数据库来预测客户是否违约。此处 TN 实际并预测为非违约TP 实际并预测为*违约。*模型的误差为 FN 和 FP,其中 FN 实际上是违约者但被预测为非违约者,FP 实际上是被预测为违约者的非违约者。
在这种情况下,公司将关注两个参数:

  1. 真阳性率(TPR) :真阳性率也称为**敏感度。**在这种情况下会是,TP/(TP+FN)。该指标将向我们显示所有*实际违约者中有多少被正确预测。银行将为此需要一个高价值。理想情况下,它应该是 1,因为如果银行能够预测违约者并以 100%的把握拒绝他们的申请,这将对银行有利。
  2. 假阳性率(FPR) :假阳性率由(FP/TN+FP)给出,又称1——特异性。该指标将向我们显示,在所有非违约者中,有多少人被 ML 模型预测为违约者。FPR 值越低越好。理想情况下,它应该为零,因为高值意味着如果实施 ML 模型,银行将拒绝潜在的好客户,从而减少银行的整体业务。*

阈值及其对混淆矩阵的影响

我们可以理解的一点是,混淆矩阵可以根据手头的业务问题进行分析。现在让我们试着理解混淆矩阵是如何形成的。正如我们在图中看到的,我们有一组 Y-original,我们的模型给出 Y-概率作为分类问题的输出。根据我们的例子,这里的 Y 概率是 Y 为 1(违约者)或 0(非违约者)的概率。

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

Predicted value with default threshold i.e. 0.5

我们可以设置一个阈值,将所有大于阈值的值归类为 1,小于阈值的值归类为 0。这就是预测 Y 的方法,我们得到了“Y 预测”。我们通常得到混淆矩阵的阈值的默认值是 0.50 。这就是事情开始变得有趣的地方。我们可以改变这个阈值。阈值的变化将导致 Y 的预测值的变化,因此新的混淆矩阵将不同,更重要的是 TPRFPR 值也将变化。因此,我们可以想象,对于阈值的每个唯一值,我们将得到不同的 TPR 和 FPR 值。当这些不同的 TPR(灵敏度)FPR(1-特异性)值被绘制在散点图上,并且一条线穿过它们时,我们得到了著名的接收器工作特性(ROC) 曲线。

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

ROC with high AUC

对于不同的分类机器学习模型,ROC 曲线是不同的。就像敏感性或准确性一样,ROC 曲线的曲线下面积(AUC)被视为评估模型的非常有价值的度量。图中的 ROC 具有高 AUC。我们还可以看到图中有一个 ,这里 TPR(灵敏度)相当高,而 FPR(1-特异性)非常低。如果我们回头看看我们业务需求,我们需要高 TPR 和低 FPR,这正是我们从这个 ROC 上的得到的。该点对应的阈值可以说是最佳阈值。但是在现实生活中,建立一个具有很高 AUC 的模型并不总是可能的。这是一个合适的分类模型的 ROC 的样子:

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

从图中可以看出,要获得好的真阳性率,假阳性率也必须提高。因此,必须在它们之间进行权衡。现在到了业务部分,银行有效地在减少违约者(提高 TPR)和减少将良好客户错误分类为可能违约者(降低 FPR)之间进行平衡。因此,在这种情况下,组织不能仅仅依赖模型的准确性。在得出任何结论和做出业务决策之前,需要对混淆矩阵进行深入分析,并将其与业务问题联系起来。因此,在最终确定 TPR 和 FPR 值之后,可以很容易地追溯相应的阈值,并且该阈值将用于客户类型的最终预测(Y_pred)。我们现在可以理解不同的业务问题需要不同的分析来建立正确的模型。

我希望您觉得这篇文章很有趣,并且现在对混淆矩阵如何在真实的商业场景中使用有了更好的理解。我期待在评论中听到你们的评论。我也欢迎任何问题、建议或讨论。

感谢阅读。

使用类激活图解密卷积神经网络。

原文:https://towardsdatascience.com/demystifying-convolutional-neural-networks-using-class-activation-maps-fe94eda4cef1?source=collection_archive---------9-----------------------

机器学习每天都在获得指数级的动力,其应用在每个领域都在增加,无论是金融领域中琐碎的股票价格预测,还是计算机视觉领域中复杂的任务,如对象的检测和分割。没有哪个领域没有受到人工智能革命的影响,在某些领域,机器学习算法甚至超过了人类水平的性能。例如,ImageNet challenge 每年都举办各种计算机视觉任务,如图像分类、对象检测、图像定位等,每年表现最好的算法的错误率都在不断下降,2017 年,38 个参赛团队中有 29 个团队的准确率超过 95%。据报道,大规模 ImageNet 数据集上的人类前 5 名分类错误率为 5.1%,而最先进的 CNN 达到了约 3.57%的准确度。

随着机器学习系统性能的提高,系统的可解释性逐渐降低。这种趋势在深度学习算法中更为常见,这些算法包括数百万个参数和数百层,与线性回归、K 近邻、决策树等基本机器学习算法相比,解释这些算法极其困难。这些算法已经变得像黑匣子一样,从用户那里获取输入,并给出超出预期的输出,但对导致这种输出的因果信息却不提供直觉。这些算法可能适用于准确性是主要要求的任务,如 Kaggle 竞赛,数据科学家不必向各种利益相关者解释和说明结果。但是在结果可解释性非常重要的应用中,黑盒性质会导致各种障碍。例如,如果某个图像识别系统被训练来检测图像中的肿瘤,并且在验证和测试集的准确性方面表现得非常好。但是,当你向利益相关者展示结果时,他们会问你的模型是从图像的哪个部分学习的,或者这个输出的主要原因是什么,你最可能的答案是“我不知道”,无论你的模型有多完美,利益相关者都不会接受,因为这关系到人的生命。

随着机器学习特别是深度学习领域研究的增加,正在进行各种努力来解决可解释性问题并达到可解释 AI 的阶段。

在 CNN 的情况下,已经发现了各种可视化技术,其中之一是类激活图(CAM)。

在论文中介绍的类激活图或 CAM 通过使用 CNN 中的全局平均池来学习用于区别性定位的深度特征。特定类别的类别激活图指示 CNN 用来识别类别的区分区域。

建筑:

这篇论文的作者在 Network 中使用了类似于 GoogLeNetNetwork 的网络架构。网络主要由大量卷积层组成,在最终输出层之前,我们执行全局平均池。如此获得的特征被馈送到具有 softmax 激活的完全连接的层,该层产生期望的输出。我们可以通过将输出层的权重反投影到从最后一个卷积层获得的卷积特征图上来识别图像区域的重要性。这种技术被称为类激活映射。

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

Architecture and Working

全局平均池层(GAP)优于在 Oquab 等人中使用的全局最大池层(GMP ),因为与仅识别一个区别部分的 GMP 层相比,GAP 层有助于识别对象的完整范围。这是因为在 GAP 中,我们对所有激活取平均值,这有助于找到所有有区别的区域,而 GMP 层仅考虑最有区别的区域。

间隙层产生最后卷积层中每个单元的特征图的空间平均值,然后加权求和以产生最终输出。类似地,我们产生最后卷积层的加权和,以获得我们的类激活图。

简单工作

在定义了架构之后,让我们看看如何产生类激活图。让我们考虑一个图像,它包含一个我们已经为其训练了网络的对象。softmax 层输出模型被训练的各种类的概率。通过使用所有概率的 Argmax,我们找到最有可能是图像中存在的对象的类别。提取对应于该类别的最终层的权重。此外,提取来自最后一个卷积层的特征图。

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

Extracting weights from final layer and Building a Model to Output the feature maps as well as the final predicted class.

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

Features represents the Feature Map obtained from the last layer and results represents the class probabilities for each class.

最后,计算从最终层提取的权重和特征图的点积,以产生类别激活图。通过使用双线性插值对类别激活图进行上采样,并将其叠加在输入图像上,以显示 CNN 模型正在查看的区域。

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

The code shows iterating through ten images, upsampling the extracted feature maps for the predicted class and finally performing dot product between the feature maps and final layer weights.

实施和结果:

我按照论文中的指导使用 Keras 实现了类激活映射。

最初,以下模型架构使用 3 个卷积层,每个卷积层之后是 max-pooling 层,最后一个卷积层之后是 GAP 层,最后一个输出层激活 softmax。

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

Architecture of First Model

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

Model Architecture

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

Model 1 Summary

上述模型在 MNIST 数据集上进行训练,并在训练、验证和最终测试集上产生了大约 99 %的准确度。

执行了上面提到的以下步骤,并且获得了如下所示的输出:

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

Outputs

使用原始方法获得的输出是令人满意的,但它仍然令人困惑,因为由于每个卷积层之后的后续最大池层丢失了空间信息,它并不完全清楚。

为了解决这个问题,我稍微调整了一下架构,删除了所有 max-pooling 层,从而保留了空间信息,这将有助于提高模型的本地化能力。但是,由于移除了最大池层,特征图的维数较大,因此训练时间也较长。

以下架构用于第二部分:

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

Architecture of Model 2

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

Tweaked Model

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

Model 2 Summary

第二个模型在训练、验证和最终测试集上给出了 97%准确度。

以下输出是从调整后的模型中获得的:

注意:在第二个模型中,没有应用最大池,因此在向前传递期间没有维度的减少。因此,我们不需要对从最后一个卷积层获得的特征图进行上采样。

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

The output of the Tweaked version

结论:

类激活图或 cam 是查看 CNN 模型在训练时所见内容的好方法,并为开发人员和利益相关者提供见解,这对模型的可用性和生命周期至关重要。在 CAMs 的帮助下,开发人员可以看到模型正在查看图像中的哪个区域,并可以用于检查模型中偏差的原因、缺乏概括能力或许多其他原因,这些原因在修复后可以使模型在现实世界中更加健壮和可部署。

随着计算机视觉和深度学习领域研究的不断发展,各种深度学习框架,如 Tensorflow、Pytorch 等,不断向其环境中添加新的包,以方便用户,并专注于可解释性。Tensorflow 在可解释模型领域迈出了良好的一步,推出了一个名为 tf.explain 的特殊包,说明使用了哪些技术(如类激活映射等)为您实现和优化,您只需导入库,创建其对象,传递输入并在几秒钟内接收结果,而无需花费时间从头开始实现算法。

要了解如何使用 tf.explain 库,可以参考下面的 教程 作者迪潘坚(DJ)萨卡尔

希望你喜欢这篇文章,如果想了解更多信息和相关内容,请随时在 Linkedin 上联系我,或者在 twitter 上关注我。我的 Github 上有这篇文章的代码。

使用 GradCam 解密卷积神经网络

原文:https://towardsdatascience.com/demystifying-convolutional-neural-networks-using-gradcam-554a85dd4e48?source=collection_archive---------4-----------------------

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

(source)

卷积神经网络(CNN)和其他深度学习网络已经在各种计算机视觉任务中实现了前所未有的突破,从图像分类到对象检测、语义分割、图像字幕以及最近的视觉问题回答。虽然这些网络实现了卓越的性能,但它们缺乏可分解成直观和可理解的组件的能力,这使得它们很难解释。因此,当今天的智能系统失败时,它们失败得非常可耻,没有警告或解释,让用户盯着不连贯的输出,想知道为什么。

深度学习模型的可解释性对于建立信任并将其成功融入我们的日常生活至关重要。为了实现这个目标,模型透明性对于解释他们为什么预测他们所预测的是有用的。

概括地说,这种透明性在人工智能(AI)进化的三个阶段都是有用的。

首先,当人工智能相对弱于人类,还不能可靠地“部署”时,透明性和解释的目标是识别故障模式。

第二,当人工智能与人类相当并且可靠地“可部署”时,目标是在用户中建立适当的信任和信心。

第三,当人工智能明显强于人类时,解释的目标是机器教学,即教人类如何做出更好的决定。

之前的文章中,我们讨论了卷积神经网络中的可解释性问题,并讨论了一种非常流行的技术,称为类激活图或 CAM,用于在一定程度上解决该问题。虽然 CAM 是一种很好的技术,可以揭开 CNN 工作的神秘面纱,并在开发的应用程序中建立客户信任,但它们有一些局限性。CAM 的一个缺点是,它要求特征映射直接位于 softmax 层之前,因此它适用于特定类型的 CNN 架构,该架构在预测之前立即对卷积映射执行全局平均池。(即 conv 特征地图→全球平均池→softmax 图层)。在某些任务上,这种体系结构可能比一般网络实现的精度差,或者根本不适用于新的任务。

在这篇文章中,我们讨论了一个 CAM 的推广,称为 Grad-Cam。Grad-Cam 于 2017 年发布,旨在改善 Cam 的缺点,并声称可以兼容任何一种架构。该技术不需要对现有模型架构进行任何修改,这使得它可以应用于任何基于 CNN 的架构,包括那些用于图像字幕和视觉问答的架构。对于全卷积架构,Grad-Cam 简化为 Cam。

方法:

一些先前的作品已经断言,CNN 中的更深层次的表示捕获了最好的高级结构。此外,CNN 自然地重新训练在全连接层中丢失的空间信息,因此我们可以期望最后的卷积层在高级语义和详细的空间信息之间具有最佳的折衷。

与 Cam 不同,Grad-Cam 使用流入 CNN 最后一个卷积层的梯度信息来了解每个神经元,以做出感兴趣的决策。为了获得任何类别 c 的宽度 u 和高度 v 的类别区别定位图,我们首先计算类别 c 的分数 yc(在 softmax 之前)相对于卷积层的特征图 Ak 的梯度。这些流回的梯度被全局平均汇集,以获得目标类的神经元重要性权重 ak。

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

Figure 1.Calculating weights ak

在为目标类 c 计算 ak 之后,我们执行激活图的加权组合,并在其后跟随 ReLU。

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

Figure 2. Linear Combination followed by ReLU resulting in final class discriminative map.

这导致与卷积特征图大小相同的粗略热图。我们将 ReLU 应用于线性组合,因为我们只对对感兴趣的类别有积极影响的特征感兴趣。如果没有 ReLU,类激活映射会突出显示比所需更多的内容,因此会导致低本地化性能。

每个计算机视觉任务的完整流水线如图 2 所示,以便更清楚地了解这一重要概念。

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

**Figure 3.**Complete pipeline extending towards specific tasks.

使用 Keras 实现 Grad Cam

实施分为以下步骤:-

  1. 首先,我们需要一个模型来运行向前传递。我们使用在 Imagenet 上预先训练的 VGG16。您可以使用任何模型,因为与 Cam 不同,GradCam 不需要特定的架构,并且与任何卷积神经网络兼容。

2.定义模型后,我们加载一个样本图像并对其进行预处理,使其与模型兼容。

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

Input Image

3.然后,我们使用该模型对样本图像进行预测,并解码前三个预测。正如您在下图中看到的,我们只考虑了模型中的前三个预测,模型中的第一个预测是 boxer。

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

Decoded predictions and Target Class

5.在下一步中,我们找到目标类得分 yc 相对于最后一个卷积层的特征图 Ak 的梯度。直观地,它告诉我们每个渠道对于目标阶层有多重要。变量 grads 返回一个张量,将在下面的步骤中使用。

6.这样获得的梯度然后被全局平均,以获得对应于目标类的神经元重要权重 ak ,如图 1 所示。这将返回一个传递给 Keras 函数的张量,该函数将图像作为输入,并返回 pooled_grads 以及来自最后一个卷积层的激活贴图。

7.之后,我们将每个激活图与相应的混合梯度相乘,该混合梯度作为权重来确定每个通道对于目标类有多重要。然后,我们取沿着通道的所有激活图的平均值,并且所获得的结果是最终的类别区分显著图。

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

Class Discriminative Map

8.然后,我们对生成的热图应用 ReLU,以便只保留对输出图有积极影响的要素。但是我们看到热图中没有太多的负强度,因此在应用 ReLU 后热图没有太大的变化。

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

Class Discriminative Map after ReLU

9.然后,我们将热图的每个强度值除以最大强度值,以便标准化热图,使所有值都在 0 和 1 之间。

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

Class Discriminative Saliency Map after Normalization

10.最后,我们对生成的热图进行上采样,以匹配输入图像的尺寸,并将其覆盖在输入图像上,以便查看结果。

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

Final Saliency Map with Bull Dog as Target Class

结论:

在这篇文章中,我们学习了一种解释卷积神经网络的新技术,卷积神经网络是一种艺术架构,特别是对于图像相关的任务。Grad Cam 对其前身 Cam 进行了改进,并提供了更好的定位和清晰的类别区分显著图,这些图指导我们揭开黑盒模型背后的复杂性。可解释机器学习领域的研究正在以更快的速度前进,并被证明对于建立客户信任和帮助改进模型至关重要。

在接下来的文章中,我将探索该领域中与卷积神经网络相关的更多最新研究,并将借助直观的可视化和简单的实现来揭开复杂概念的神秘面纱。如果你喜欢这篇文章,留下掌声激励我,如果你有任何建议,请随时在 Linkedin 上与我联系,或者在 twitter 上关注我。

使用 ScoreCam 解密卷积神经网络

原文:https://towardsdatascience.com/demystifying-convolutional-neural-networks-using-scorecam-344a0456c48e?source=collection_archive---------11-----------------------

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

(source)

最近,越来越多的注意力集中在机器学习模型的可解释性上,主要是深度学习模型,因为它们具有黑箱性质。一种重要的深度学习架构是卷积神经网络(CNN ),它在计算机视觉领域取得了突破,包括图像分类、对象检测、语义分割、实例分割、图像字幕等。在 CNN 的改进和发展方面的进展是指数级的,并且架构已经被极大地简化,但是预测结果不能被分解成直观的和完全可理解的部分。

理解和解释模型对于建立人们对我们系统的信心至关重要。CNN 解决的最常见的问题是图像分类,通常称为显著图或属性图的视觉解释方法用于找到影响模型预测的最有影响力的特征。有几种用于生成显著图的技术,其中最常见的是基于梯度的可视化,其反向传播关于输入层的目标类分数的偏导数。然而,基于梯度的地图的问题是它们通常质量低并且具有随机噪声。其他方法包括基于扰动的方法,该方法通过向输入添加小噪声(扰动)并观察预测的变化来工作。另一个是类激活图(CAM ),我最近在我的帖子中解释了它以及它们的扩展,比如 Grad-Cam 和 Grad-Cam++。它们通常通过激活图的线性加权组合来生成显著图,以突出图像空间中的重要区域。然而,它们也遭受与图像中的目标对象无关的随机噪声的问题,并且权重不能很好地捕捉每个激活图的重要性。

计分摄像机:

在这篇文章中,我将尝试解释最近的一篇论文 Score-Cam,它是对前面提到的方法的改进,并试图使 CNN 的可解释性与其前辈一样。

Score-Cam 建立在类激活映射的基础上,并声称可以解决以前报告的无关噪声问题,并生成更清晰和有意义的解释。在 Score-Cam 中,研究人员遵循基于扰动的方法的思想,该方法掩盖了原始输入中的部分区域,并观察目标分数的变化。所获得的激活掩模被视为输入图像的一种掩模,其掩蔽输入图像的部分,并使模型在部分掩蔽的图像上进行预测。然后利用目标类的分数来表示激活图的重要性。

使用基于扰动的方法的屏蔽激活示例

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

Figure 1. Input Image

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

Figure 2. Masks applied on Input Image.

与著名的 Grad-Cam 不同,Score-Cam 没有利用梯度,因为研究人员认为传播的梯度非常不稳定,并在基于梯度的显著图中产生随机噪声。图 3 中显示了梯度的不稳定特性,其中当输入图像稍微改变时,梯度会急剧改变,即使这种改变不会被人眼察觉,也不会改变预测结果。这就是为什么有理由怀疑基于梯度的方法减少冗余噪声的有效性。

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

Figure 3. The partial derivative changes sharply for indistinguishable changes in the input image.

方法:

各种以前的作品,如凸轮,GradCam 等。已经断言了这样一个事实,即 CNN 中更深的层捕获更高级别的视觉信息。此外,卷积要素自然会保留在完全连接的图层中丢失的空间信息,因此通常期望最后一个卷积图层在高级语义和详细空间信息之间提供最佳折衷,并且这些图层中的神经元会在输入图像中寻找特定于类的语义信息。因此,在 Score-Cam 中,我们使用最后一层来获得包含平衡表示的激活图。

相比之下,GradCam 和 GradCam++使用流经 CNN 最后一层的梯度信息来表示每个激活图的重要性。在 Score-Cam 中,我们使用特定目标类的得分权重。因此,Score-Cam 可以摆脱对梯度的依赖,并作为更通用的框架工作,因为它只需要访问模型的类激活图和输出分数。

Score-Cam 的流水线如图 4 所示,显示了实现最终显著图的所有步骤。

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

Figure 4. The pipeline of the Score-Cam.

为了使用 Score-Cam 获得类别区分显著图,该过程被分成以下步骤:

  1. 第一步是将图像传递给 CNN 模型并执行 forward_pass。在正向传递之后,从网络中的最后一个卷积层提取激活。
  2. 从具有 1xmxn 形状的最后一层获得的每个激活图然后使用双线性插值被上采样到与输入图像相同的尺寸。
  3. 在对激活图进行上采样之后,所得到的激活图被归一化为[0,1]范围内的每个像素,以保持像素之间的相对强度。使用图 5 中的所示的公式实现标准化。

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

Figure 5. Normalizing each Activation Map

4.在激活图的归一化完成之后,通过将每个归一化的激活图(**1×W×H)乘以原始输入图像(3×W×H)以获得形状为3×W×H .**的掩蔽图像 M,激活图的高亮区域被投影到输入空间上

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

Figure 6. Element-Wise Multiplication of all the activation maps with the Input Image.

5.由此获得的掩蔽图像 M 然后被传递到具有 SoftMax 输出的卷积神经网络。

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

Figure 7. The Output Score Sk is obtained by the Softmax Operation.

6.在得到每个类的分数后,我们提取目标类的分数来表示第 k 个激活图的重要性。

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

Figure 8. The score of Target Class used as weights.

7.然后,我们计算目标类得分和每个激活图之间的线性组合的所有激活图的总和。这导致单个激活映射具有与输入类相同的大小。

8.最后,我们将逐像素 ReLU 应用于最终的激活图。我们应用 ReLU 是因为我们只对对感兴趣的类有积极影响的特性感兴趣。

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

Figure 9.

分数 CAM 在 KERAS 中的实现;

我们将遵循之前在图和方法中描述的相同管道。

  1. 我们使用在 Imagenet 上预先训练的 VGG16 作为整个管道的模型。

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

2.我们加载上面图 1 的中所示的输入图像,对其进行预处理,使其适合传递到 VGG16 模型中。

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

3.之后,我们通过模型传递图像,并获得每个类别的预测分数。我们从预测中提取目标类的索引。

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

4.然后,我们从大小为(1×14×14×512)的最终卷积层中提取激活。

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

5.然后,我们对所有激活图进行上采样,以匹配原始输入图像的大小。

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

Function to Upsample Activations

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

6.然后,我们使用图 5 中的公式对 512 个激活图进行标准化。

注意:我们在分母中添加了一个非常小的项,即 1e-5,以防止被零除的误差导致 nan 值。

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

7.在步骤 6 之后,我们通过在掩模和输入图像之间执行元素乘法来投影在原始图像上产生的掩模,如图 6 中的所示。

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

8.这样获得的掩蔽图像然后通过 VGG16 模型向前传播,并且获得 softmax 分数。

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

9.在获得所有类的分数后,我们只需提取与我们的目标类相对应的分数。在我们的输入图像的例子中,我们有两个类,但是为了演示的目的,我们将把狗作为我们的目标类。

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

Here 242 corresponds to the index of the class dog.

10.现在,我们已经得到了生成类别区分显著图所需的全部内容,即归一化的激活图和用作权重的目标类别的分数。现在,我们执行目标类 softmax 分数和标准化激活图的逐元素乘法。

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

11.在最后一步完成并且我们有了结果之后,我们对所有的激活图执行求和(512),并且我们组合所有的图以产生形状为1×224×224×3的单个激活图

12.为了获得最终的显著图,我们对上一步中获得的激活图执行逐像素 ReLU。

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

Pixel-Wise ReLU

获得的最终类别判别图如下面的图 9 所示。

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

Score-Map Saliency Map

正如我们所看到的,分数凸轮是阶级歧视,以及有更少的噪音相比,其前身。

Score-Cam 的优势:

  1. 像 Grad-Cam 和 Grad-Cam++这样的 Score-Cam 可以用在任何卷积神经网络架构中,并且不需要像 Cam 那样重新训练模型来产生显著图。
  2. Score-Cam 具有类别区分性,可以去除不相关的噪声,从而生成有意义的显著图。
  3. 使用 Softmax 分数作为权重,并消除对不稳定梯度的依赖。

结论:

在这篇文章中,我们讨论了最近发布的一篇关于基于分数的类激活映射(Score-Cam)的新架构的论文,该架构提供了一种解决模型可解释性问题的新方法。该论文介绍了一种架构,其中去除了无用的噪声,并且仅产生重要的显著图。此外,它消除了对目标类别梯度的依赖,并产生了一种更通用的方法来产生显著图。本文从两种产生显著图的方法中得到启发,主要是扰动图和类激活图,并提出了一种结合两者优点的方法。

要了解更多关于 Score-Cam 的信息,请阅读以下链接提供的论文【https://arxiv.org/abs/1910.01279。

希望你喜欢这篇文章,如果有进一步的讨论、疑问或相关内容,你可以通过 Linkedin 联系我,或者通过 Twitter 关注我。

去神秘化——深度图像先验

原文:https://towardsdatascience.com/demystifying-deep-image-prior-7076e777e5ba?source=collection_archive---------11-----------------------

使用深度图像先验的图像恢复介绍。

在这篇文章中,我将主要关注图像恢复的任务,以及如何使用之前的深度图像来解决这个任务。

图像恢复简介

图像恢复是指从退化图像中恢复未知真实图像的任务。图像退化可能发生在图像形成、传输和存储过程中。这一任务在卫星成像、弱光摄影中具有广泛的应用范围,并且由于数字技术、计算和通信技术的进步,从退化图像中恢复干净图像是非常重要的,因此已经发展成为与图像处理、计算机视觉和计算成像交叉的研究领域。

图像恢复主要有三个任务:

图像去噪:

图像去噪是指恢复被加性噪声污染的图像。这是图像恢复中最简单的任务,因此已经被几个技术团体广泛研究。

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

Fig.1 (left)noise add image, (center)true image, (right)Gaussian noise

2.超分辨率:

超分辨率是指从一组低分辨率图像产生高分辨率图像(或高分辨率图像序列)的过程。

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

Fig2. (left)low resolution image, (right)high resolution image

3图像补绘:
图像补绘是对图像中丢失或损坏的部分进行重建的过程。内画实际上是一种古老的艺术,需要人类来画出画中已经变质和丢失的部分。但是在今天的世界中,研究已经提出了许多方法来使用深度卷积网络来自动完成这项任务。

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

Fig. 3 (left) input, (right) output

什么是深度图像先验?

随着 alexnet 在 2012 年 image-net 竞赛中的成功,卷积神经网络变得非常流行,已经用于每个计算机视觉和图像处理任务,并且已经广泛用于执行逆图像重建任务,并且已经实现了最先进的性能。
深度卷积网络已经取得了成功,因为它们能够从大量图像数据集进行学习。Dmitry Ulyanov 的惊人论文“Deep Image Prior”表明,为了解决像图像恢复这样的逆问题,网络的结构是足够的,并且施加了强先验以从降级图像恢复原始图像。该论文强调,为了执行这些任务,不需要预先训练的网络或大型图像数据集,并且可以仅在考虑降质图像的情况下执行。

为了完成图像恢复的任务,学习先验和显式先验是研究人员常用的两种方法。

在学习-先验中是一种训练深度卷积网络的直接方法,以通过数据集学习世界,该数据集将有噪声的图像作为输入,将干净的图像作为期望的输出。
另一方面,explicit-prior 或手工制作的 prior 方法,是我们在其中嵌入硬约束并教导什么类型的图像是自然的、人脸等。从合成数据中。像自然这样用数学表达约束是非常困难的。

在深度图像先验中,作者试图通过使用卷积神经网络构造一个新的显式先验来弥补两种流行方法之间的差距。

让我们从技术角度出发…

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

Fig.4. (left)clean image, (center)corrupted image, (left) restored image

x干净图像 退化图像* x恢复图像**

我们可以使用最大后验分布来估计经验数据中的未观测值

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

使用贝叶斯规则,我们可以将其表示为似然*先验。**

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

我们可以通过对等式应用负算法,将等式公式化为优化问题,而不是分别处理分布。(1)

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

e(x;ẋ) 是作为似然负对数的数据项,R(x)是作为先验负对数的图像先验项。

现在的任务是在图像 x 上最小化等式(2)。传统的方法是用随机噪声初始化 x ,然后计算函数相对于 x 的梯度,并遍历图像空间,直到我们收敛到某个点。

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

Fig. 5 visualization of regular approach

另一种方法是构造一个函数 g ,它用随机θ初始化,来自不同空间的输出可以映射到图像 x,并使用梯度下降更新θ,直到它收敛到某个点。因此,我们可以在θ上优化,而不是在图像空间上优化。

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

FIg. 6 Visualization of parameterized approach

但是,为什么这种方法是可能的,为什么我们应该使用它?。这是可能的,因为从理论上讲,如果 g 是满射的g:θx***(如果至少有一个 θ 映射到图像 x )那么这个优化问题是等价的,即它们有相同的解。但在实践中, g 在优化方法搜索图像空间的方式上发生了巨大的变化。我们实际上可以把 g 作为超参数来对待,并对其进行调优。如果我们观察,g(θ)作为一个先验,有助于选择一个好的映射,它给出一个期望的输出图像,并防止使用得到错误的图像。
所以,与其优化两个分量之和。我们现在将只优化第一项。*

现在,Eq 2。可以表示为,

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

其中, z 是随机固定输入图像,θ是随机初始化的权重,其将使用梯度下降来更新,以获得期望的输出图像。

但是仍然不清楚为什么我们应该考虑这种参数化方法。理论上乍一看,它似乎会产生原始噪声图像。在论文中,作者进行了一项实验,该实验表明,当使用梯度下降来优化网络时,卷积神经网络不愿意噪声图像,并且更快和更容易地下降到看起来自然的图像。

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

Fig. 7 Learning curves for the reconstruction task using: a natural image, the same plus i.i.d. noise, the same
randomly scrambled, and white noise. Naturally-looking images result in much faster convergence, whereas noise is rejected.

逐步深入图像先验

ẋ =被破坏的图像(被观察)
1。初始化zT8:用均匀噪声或任何其它随机图像填充输入 z。

2。使用基于梯度的方法求解并优化函数。

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

3.最后,当我们找到最佳θ时,我们可以获得最佳图像,只需将固定输入 z 正向传递给具有参数θ的网络。

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

Fig. 8: Image restoration using the deep image prior. Starting from a random weights θ 0 , we iteratively
update them in order to minimize the data term eq. (2). At every iteration the weights θ are mapped to image
x = f θ (z), where z is a fixed tensor and the mapping f is a neural network with parameters θ. The image x is
used to compute the task-dependent loss E(x, x 0 ). The gradient of the loss w.r.t. the weights θ is then computed and used to update the parameters.

结论

该论文试图表明,在具有随机化权重的深度卷积神经网络结构内构造隐式先验的方法非常适合于图像恢复任务。该论文中显示的结果在很大程度上表明,适当手工制作的网络架构足以解决图像恢复任务。

使用 MS Excel 揭开前馈和反向传播的神秘面纱

原文:https://towardsdatascience.com/demystifying-feed-forward-and-back-propagation-using-ms-excel-30f5aeefcfc7?source=collection_archive---------7-----------------------

深入探究神经网络的奥秘,超越理论界限,在 MS Excel 中实现它。

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

近年来,关于神经网络(NNs)已经说了很多,也写了很多——从感知器的概念到神经元的复杂多层结构。本文试图揭开两种基本算法的神秘面纱,前馈反向传播,这两种算法使得神经网络能够工作。使用 Microsoft Excel 以最简单的形式解释了这些技术。

所考虑的例子是非常基础的,与真实世界的例子相去甚远。这里的意图是保持简单直观,理解工作逻辑,而不是关注背后复杂的数学。

首先,我只考虑了一个输入向量 V= [X1=1,X2= 0,X3=1,X4=0],它有一个由 3 个神经元和一个输出层组成的隐藏层。目标输出是 1。

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

Neural Network with One Hidden Layer

网络设置-

输入和输出- 作为一个例子,假设我们期望算法对于‘X1’&‘X3’(比如说 1)的指示非零值给出输出‘1’,对于‘X2’&‘X4’给出输出‘0’。因此,这里考虑的输入向量是[1,0,1,0]。

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

Input and Output

前馈:

步骤 1:初始化网络参数

第一步是使用 MS Excel 中的 rand() 函数初始化权重和偏差。

(附注:下表中突出显示的单元格代表基于建议公式的导出值)

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

Weights and Biases — Input to Hidden Layer

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

Weights and Biases — Hidden to Output Layer

步骤 2:计算隐藏层节点的净输入

净输入只不过是输入乘以权重,然后按偏差递增。使用输入向量[1×4]和权重[4×3]的矩阵乘法,结果矩阵的维数为[1×3]。要在 excel 中实现这一点,请使用 =SUMPRODUCT() 得出如下结果矩阵[1X3]

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

Input times Weight

在突出显示的单元格中使用公式来获得输入乘以权重:

=SUMPRODUCT({1,0,1,0},{0.49,0.35,0.44,0.80})

=SUMPRODUCT({1,0,1,0},{0.72,0.90,0.58,0.92})

=SUMPRODUCT({1,0,1,0},{0.38,0.43,0.39,0.21})

现在,给这些输入乘以权重加上偏差

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

Net Input

要在突出显示的单元格中使用的公式,以获得净输入

= SUM(0.92,0.40)

=SUM(1.30,0.00)

=SUM(0.76,0.99)

步骤 3:通过激活函数(Sigmoid)传递净输入

让我们将“步骤 2”的输出[1.33,1.30,0.99]作为输入传递给隐藏层的每个神经元处的激活函数[f(1.33),f(1.30),f(0.99)],这可以通过在 MS Excel 中键入 f(x) = 1/(1+exp (-x))来轻松完成。

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

Output at Hidden Layer

要在突出显示的单元格中使用的公式,以获得隐藏层输出:

=1/(1+exp(-1.33) )

=1/(1+exp(-1.30))

=1/(1+exp(-0.99))

步骤 4:计算输出节点的净输入

现在,“步骤 3”的输出[0.79,0.79,0.73]将作为输出节点的输入。让我们重复“步骤 2”,输入向量为[0.79,0.79,0.73],权重向量为[0.71,0.16,0.57],输出偏差为[0.83]。

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

Net Input at Output Node

在突出显示的单元格中使用的公式,用于在输出节点获得净输入

=SUMPRODUCT ({0.79,0.79,0.73},{0.71,0.16,0.57}) + 0.83

其中简化后= 1.93

步骤 5:获得神经网络的最终输出

让我们将从“步骤 4”[1.93]接收到的输出作为 f(1.93)传递给激活函数,这也可以使用 f(x)=1/(1+exp(-x))来计算,从而得到神经网络的最终输出。

=1/(1+exp(-1.93))

前馈网络输出=0.87

反向传播:

一旦获得前馈的输出,下一步是通过与目标结果比较来评估从网络接收的输出。

现在,神经网络设计者控制的一个明显的事情是权重和偏差(也称为网络参数)。因此,这里的挑战是找到能够最小化误差平方和的最佳权重和偏差: *E=1/2 ∑(网络输出-目标输出)*由网络接收,在这种情况下=[0.5 *(0.13)]= 0.00798

我们需要单独查看这些权重和偏差所造成的误差,然后不断更新它们以减少误差。这个过程将被重复直到收敛。一旦达到最优,该网络将被称为训练过的网络。让我们开始在 Excel 中实现这个理论。

步骤 1:更新权重[wH1,wH2,wH3]

使用链式法则 ( 我将跳过这里的推导)计算误差函数 E 相对于权重【wH1,wH2,wH3】的导数,简化后等于

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

其中,sigmoid 函数 f(x)的导数= [f(x)(1-f(x)]*

所以,[ d (E)/d(wH1),d(E)/d(wH2),d(E)/d(wH3)] =

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

Derivative of E with respect to WH1, WH2 and WH3 respectively

要在突出显示的单元格中使用的公式:

=乘积(-0.13,0.87,0.13,0.79)

=乘积(-0.13,0.87,0.13,0.79)

=乘积(-0.13,0.87,0.13,0.73)

新的更新权重将是**【初始权重】— [{(学习率)* [d(E)/d(wH1),d(E)/d(wH2),d(E)/d(wH3)]],**其中,学习率被假定为 0.5

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

Updated weights after 1st Iteration

通过使用-

=(0.71)-乘积(0.5,-0.0110)

=(0.16)-乘积(0.5,-0.0110)

=(0.57)-乘积(0.5,-0.0102)

步骤 2 —在输出节点更新偏置 BO

对于偏差,使用链式法则计算误差函数 E 相对于偏差 BO 的导数,简化后等于

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

所以,d(E)/d(BO)= 1

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

Derivative of Error E with respect to output node bias

要在突出显示的单元格中使用的公式:

=乘积(-0.13,0.87,0.13)

新的更新偏差[BO] 新的=[初始偏差]—[学习率*{d(E)/d(BO)}]

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

Update Bias at Output node after 1st Iteration

要在突出显示的单元格中使用的公式:

=(0.83)-乘积(0.5,-0.0139)

步骤 3-更新权重[w11,w12,…w43]

为了更新“隐藏输入”层的权重,让我们计算误差 E 相对于权重【W11,W12…w43】的导数,其在简化后等于

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

所以,[ d (E)/d(w11),d(E)/d(w12),……d(E)/d(w43)] =

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

Derivatives of error E with respect to weights w11, w12,….w43

要在突出显示的单元格中使用的公式:

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

MS Excel formula to be used to get the derivatives

新的更新权重=[初始权重]—[学习率* (d(E)/dwij)]

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

Updated Weight after 1st Iteration

要在突出显示的单元格中使用的公式:

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

MS Excel formula to be used to update the weights

步骤 4:更新偏差[BH1,BH2,BH3]

同样,使用链式法则计算误差 E 相对于隐藏节点偏差的导数,简化后等于

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

所以,[ d (E)/d(BH1),d(E)/d(BH2),d(E)/d(BH3)] =

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

Derivative of error E with respect to Bias at Hidden nodes

要在突出显示的单元格中使用的公式:

=乘积(-0.13,0.87,0.13,0.71,0.79,0.21)

=乘积(-0.13,0.87,0.13,0.16,0.79,0.21)

=乘积(-0.13,0.87,0.13,0.57,0.73,0.27)

新的更新偏差=[初始偏差]—[学习率* (d(E)/d(BHi))]

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

Updated Hidden node Bias after 1st Iteration

要在突出显示的单元格中使用的公式:

=(0.40)-乘积(0.5,-0.0016)

=(0.00)-乘积(0.5,-0.0004)

=(0.22)-乘积(0.5,-0.0016)

因此,我们已经完成了前馈反向传播的一个循环,重复相同的步骤,即使用这些更新的参数再次运行前馈将使您更接近目标输出,反向传播将再次用于更新这些参数。这种前馈和反向传播的循环过程将继续下去,直到误差变得几乎恒定,并且在目标输出中没有太多进一步改进的余地。

上述模型在 Excel 中实现,经过 100 次迭代后,网络的行为如下所示。随着每次迭代,网络输出朝着目标输出(蓝线)前进,误差(红线)减少。

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

为什么选择 MS Excel?

在 excel 中实现这些复杂概念的主要优势是为这些网络的工作方式提供了坚实的基础,如果您非常了解基础知识,理解复杂架构的工作方式会容易得多。

接下来是什么:

在我接下来的系列文章中,我将尝试将这些概念与相关的数学联系起来。此外,输入可以通过不同的方式传递到网络,训练网络参数也有不同的方式。我将在以后的文章中谈到这些细节。

希望这种在 excel 中演示神经网络的努力将有助于初学者轻松地理解前馈和反向传播的概念。如果您需要在 excel 中实现一个现成的神经网络作为工作模型,请联系我。

揭开 TensorFlow 2.0 中 GANs 的神秘面纱

原文:https://towardsdatascience.com/demystifying-gans-in-tensorflow-2-0-9890834ab3d9?source=collection_archive---------4-----------------------

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

本教程向您展示了如何在新的 TensorFlow 版本 2.0 中轻松实现生成式对抗网络(GAN)。我们将关注基本实现,这为可选的增强留有余地。在我们仔细研究实现之前,我们需要理解 GANs 背后的思想和理论。如果你已经熟悉 GANs 背后的理论,你可以跳到实现部分。

甘斯背后的理论

GAN 的主要焦点是通过对抗过程从零开始生成数据。这个过程包括两个模型——鉴别器和生成器。鉴别器了解来自数据分布的样本是真的还是假的,而生成器试图产生假样本来欺骗鉴别器。

“生成模型可以被认为类似于一队伪造者,试图生产假币并在不被发现的情况下使用,而鉴别模型类似于警察,试图检测假币。”[1]

让我们从理论上来理解 GANs 背后的基本过程。鉴别者和发生者可以被认为是多层次的感知,它们相互竞争。发生器 G(z) 馈入先前的输入噪声p _ z(z),该噪声随后作为鉴频器的输入。鉴别器 D(x) 的输出是一个单一标量,它代表发生器产生的输入数据 x 是真实样本还是虚假样本的概率。如果 D(x) 等于 1,鉴别器绝对确定输入是来自训练数据的真实样本,如果 D(x)0 鉴别器知道它被生成器愚弄了。

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

The idea behind generative adversarial networks

挑战在于,我们训练 D 最大化分配正确标签的概率,同时训练 G 最小化分配正确标签的概率。在文学中,这也被称为最小最大游戏。

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

等式的蓝色标记部分定义了成为真实图像的概率,红色部分定义了成为虚假图像的概率。上面的方程也可以理解为鉴别器的目标,下面的方程可以理解为生成器的目标,我们想优化它来更好的忽悠鉴别器。

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

发电机输入是均匀或正态分布的样本,我们在下文中称之为噪声。然后,鉴别器被输入真实图像和噪声。通过神经网络计算误差,它学习如何区分它们。

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

履行

如果你想复制粘贴或者只是想根据你的需要调整笔记本,在 GitHub 上检查代码。

首先,我们将导入我们需要的基本库。我们将使用 TensorFlow 2.0 来构建网络和对抗过程,使用 NumPy 来生成噪声,使用 matplotlib 来保存图像。还要确保您使用的是 TensorFlow 2.0 —下面的代码无法在旧版本上运行!

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from tensorflow import kerasprint(tf.__version__)

之后,我们需要定义一些在整个实现过程中需要的全局变量。参数 BATCH_SIZE 定义了一次向神经网络中输入多少样本。我们将 BUFFER_SIZE 参数设置为等于训练数据集的长度,以便进行完美的洗牌(单击此处)。如果您想使用不同的批量或数据集,不要忘记调整这些变量。 OUTPUT_DIR 定义了路径,在训练期间,发生器的输出图像存储在该路径中。

BATCH_SIZE = 256
BUFFER_SIZE = 60000
EPOCHES = 300
OUTPUT_DIR = "img" # The output directory where the images of the generator a stored during training

现在,我们将直接从 TensorFlow 加载 MNIST 数据集——我们总共有 60.000 张图像,高度和宽度为 28 像素(列表中的每张图像代表一张图片)。

在我们将要实现神经网络之前,数据被传递到一个 tf.data.Dataset 对象中。一个 tf.data.Dataset 表示一个元素序列,其中每个元素包含一个或多个张量对象——我们将使用它作为迭代器来批量存储我们的图像,并在以后循环遍历它们。此外,图像被归一化到-1 和 1 之间(由均匀分布产生的相同范围)。

为了构建生成器和鉴别器,使用了 tf.keras 模型子类化 API,这为我们构建模型提供了更多的灵活性。这意味着,我们将为鉴别器和生成器实现一个类。在构造函数中,我们将定义网络的层,在调用方法中,我们将定义模型的前向传递。我们将向网络中输入 100 维的噪声,并输出大小为 784 的向量。稍后,我们将把这个向量重塑成一个 28x28 的矩阵(图像的原始大小)。此外, generate_noise 方法用于从均匀分布中创建随机数据点。

上面描述的目标函数就是二元交叉熵。它只接受输入鉴别器的噪声和真实的标签,因为发生器认为它产生真实的图像。

我们对鉴别器目标做了同样的事情,但是现在我们把假的和真的损失加在一起。此外,我们增加了一点平滑的目标的真实损失,以避免过度拟合。

鉴频器网络的实现方式与发生器类似。唯一的区别是,我们将一个 784 维的向量(28*28 = 784)作为输入,并只输出一个神经元,它可以告诉我们输入的是假图像还是真图像。

作为优化器,我们将使用 RMSprop 优化器。这只是我做的一个武断的决定——你可以随意使用你想要的任何其他优化器。

generator_optimizer = keras.optimizers.RMSprop()
discriminator_optimizer = keras.optimizers.RMSprop()

下一步是定义在一个单独的训练步骤中应该发生什么。通过使用发生器和鉴别器的梯度,我们同时训练两个网络。首先,根据我们之前定义的批量大小,会产生一些噪声。然后,我们将真实图像和虚假图像输入鉴别器,并计算其损失。最后一步是对生成器进行同样的操作,并应用这些渐变。

最后一步是定义一个描述整个训练的函数。感谢 tf.data.Dataset 对象,我们可以轻松地迭代我们的数据。最后一个函数将每隔 50 个时期生成的所有图像保存到您在变量 OUTPUT_DIR 中定义的目录中。

正如你在我的 jupyter 笔记本上看到的,我进行了 300 次训练,取得了很好的结果。我认为,当涉及到像 MNIST 这样的简单数据集时,通过更多的微调和更深入的生成器以及鉴别器,您实际上可以获得更好的结果。

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

Exemplary results of the implemented GAN

请记住,这是您能想到的最简单的 GAN 实现之一。在鉴别器和生成器中使用卷积可以获得更好的结果。你可以查看 TensorFlow 团队提供的使用卷积而不是密集层的教程(点击此处)。

链接到 Jupyter 笔记本:https://github.com/MonteChristo46/GAN-Notebooks

参考

Goodfellow 等人(2014):生成对抗网络。arXiv:1406.2661

通过生成密码来揭开生成模型的神秘面纱—第 2 部分

原文:https://towardsdatascience.com/demystifying-generative-models-by-generating-passwords-part-2-38ad3c325a46?source=collection_archive---------23-----------------------

从概率到深度学习方法

理解朴素贝叶斯模型和变分自动编码器(VAE)在生成任务中的区别。

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

Photo by Isis França on Unsplash

介绍

你好,这又是“揭开生成模型的神秘面纱”帖子的第二部分,所以如果你还没有阅读第一部分,我真的强烈建议你在这里阅读

在上一篇文章中,我们讨论了判别模型和生成模型之间的区别,窥视了迷人的概率世界,并利用这些知识开发了一个可以为我们生成密码的朴素贝叶斯。现在,我们将稍微改变一下我们的方法,并探索当概率失败时,深度学习如何帮助我们。

不是很有用的朴素贝叶斯

假设您已经掌握了第 1 部分的上下文知识,我将直接切入正题。开发的多项式朴素贝叶斯模型是基于这样一个假设,即每个特征都是相互独立的,并且它工作得非常好!但是让我们稍微改变一下问题的提法,观察一下它的表现。不要有 4 个特性,固定的顺序,每个特性有有限的选择,让我们定义一个字母表,包含所有出现在初始特性选择中的字母、数字和特殊字符。这些将是:

小写 : [‘a ‘,’ b ‘,’ c ‘,’ e ‘,’ f ‘,’ g ‘,’ h ‘,’ I ‘,’ j ‘,’ k ‘,’ l ‘,’ m ‘,’ n ‘,’ o ‘,’ p ‘,’ r ‘,’ s ‘,’ t ‘,’ y’]
数字 : [‘0 ‘,’ 1 ‘,’ 2 ‘,’ 3 ‘,’ 4 ‘,’ 7 ‘,’ 8 ‘,’ 9’]
特殊 : [’ !‘,’ @ ‘,’ $ ‘,’ % ‘,’ * ‘,_’] 大写 : [‘A ‘,’ E ‘,’ T ‘,’ P’]

为了使这个新问题尽可能接近前一个问题,我们将密码的最大长度限制为 15 ,因为这是我们的密码数据集中的最大长度。另外,让我们定义另一个虚构的人物,叫做< NULL >。因为下面将要描述的模型必须填充密码的所有 15 个位置,所以空字符<只是模型告诉用户不要在这里放置任何东西的一种方式。因此,从我们的角度来看,任何空字符都将被忽略。

经过所有这些变化,字母表现在总共包含 19+8+6+4 + 1= 38 个字符(大写+小写+数字+特殊字符+空字符)。因此,在我们的样本空间中有 38 种⁵可能的组合!当然,这是一个比以前大得多的样本空间,但是让我们观察一下朴素贝叶斯模型在这些情况下的表现。

下面的列表说明了在当前问题上下文中使用旧的朴素贝叶斯模型生成的密码:

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

你能发现这里的问题吗?由于依赖于条件独立性假设,每个字符位置都是**独立推断的,**因此密码中没有一个单词是有意义的。这将使记住密码变得极其困难,这不是我们想要的。

回想一下,在第 1 部分中,对输出格式和输入都有约束。我们特别要求模型基于有限的选择集进行一些采样,这不可避免地是有意义的,而且它们确实是独立的!尽管如此,这一次,样本空间非常大。在所有可能的组合中,只有极小的一部分类似于一个单词或遵循一开始就定义好的格式,因为每个字母都依赖于前面的字母。举个例子,我们的密码序列第四位出现“e”的概率,应该是前三个字母是“caf”而不是“pas”的时候更大!希望这在某种程度上解释了为什么 Naive-Bayes 等统计模型在非结构化数据上表现不佳。

表征学习的深度模型

然而,这并不意味着我们不能处理非结构化数据。近年来,深度学习已经获得了大量的研究和行业关注,很明显,非结构化数据是深度学习模型擅长的领域!毫无疑问,这是因为他们有能力对输入数据的底层结构/依赖性进行建模。

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

A typical example of a deep learning model with fully connected layers

但是这怎么可能呢?你可能会想。好吧,经过训练的深度学习模型中神经元的深度堆叠分层,可以被设想为从高维空间到低维潜在空间的映射(降维)。在这样的空间中,建模数据点之间的关系变得更加容易,甚至可能执行算术运算。例如,潜在空间表示的一个广泛使用的应用是使用深度学习模型生成单词嵌入

你可以在我的旧博客这里了解更多关于单词嵌入的内容。

更正式的说法是,这被称为表征学习,作为人类,我们经常使用它,甚至没有注意到。尽管如此,对一台机器来说,这仍然是一项极其困难的任务。举个例子,回想一下你最后一次试图向某人描述一个人的时候。最有可能的是,你提到了头发颜色、体型、服装、眼睛颜色、皮肤颜色等等……而与你交谈过的人马上就能想象出你所描述的那个人的照片!所有用于这种描述的特征都是低维特征,我们的大脑知道如何转换到更高层次的维度,或者换句话说,一个图像!同样,大脑的感官输入以高维度表示,但人类的认知能力允许我们将这些转换为低维特征!这难道不令人兴奋吗??

自动编码器

A utoencoder[1]是一种神经网络架构,可以更精确地描述为连接在一起的编码器和解码器。编码器是一个较小的神经网络,它将高维数据映射到较小的潜在空间,同时保留原始数据的主要特征。同样,解码器只是一个反向编码器。它从潜在空间获取输入,并试图重建原始数据。

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

Credit: Jeremy Jordan — Introduction to Autoencoders

请注意,网络最窄的部分位于中间。这部分被称为网络的“瓶颈”,本质上是迫使自动编码器丢弃一些信息并只存储重要的特征,而不仅仅是将信息从输入传递到输出。

在生成建模环境中,网络作为一个整体被训练,但是只需要解码器部分来生成数据。通过最小化原始输入重构输出的误差来执行训练。

在这篇文章中,我将跳过对网络如何工作的正式描述,因为我的主要目的是强调与概率学习的区别,但如果你想了解更多,斯坦福大学有一个关于自动编码器的优秀教程。

让我们重新看看密码生成的例子,开发一个自动编码器,它可以为我们生成密码,并观察它与独立的朴素贝叶斯模型相比如何。

TL;DR;

请注意,下一节的所有代码都可以在这里找到:

[## apogiatzis/vae-lstm-自动编码器-密码生成

这个库包含了名为“通过…揭开生成模型的神秘面纱”的系列文章的第 2 部分的相关代码

github.com](https://github.com/apogiatzis/vae-lstm-autoencoder-password-generation)

所以,如果你是为了代码而来,请随意跳过其余部分,但我建议你打开笔记本,跟着读,因为如果和文章的其余部分一起阅读,代码会更有意义。

一个热编码

最初,密码必须被转换为向量,以便作为输入传递给任何类型的深度学习模型。对于这样的任务,最著名的技术之一是一键编码。一般来说,一种热编码适用于分类数据,通俗地说,它将一个项目表示为“one-of-X ”,其中 X 是所有可能类别的一个实例。在文本数据的上下文中,假设有固定的词汇,并且每个标记被表示为与词汇长度相同的稀疏向量,其中数字 1 指示该标记是对应于相关向量索引的类的实例。

让我们看一个例子来澄清任何混淆。假设我的词汇表只包含 5 个字符(“a”、“b”、“c”、“d”、“e”),那么一个热编码中的单词“bad”可以表示为:

one_hot_encoding("bad") = [[0, 1, 0, 0, 0], [1, 0, 0, 0, 0], [0, 0, 0, 1, 0]] 

体系结构

如前所述,自动编码器通常遵循标准的堆叠架构,但有许多参数可以调整,如堆叠层数、单元数、连接单元的方式等…此外,自动编码器可以采用非对称架构,其中解码器与编码器具有不同的结构。不管是什么情况,这个概念都是一样的。

对于我们的密码生成场景,我采用了 BiLSTM 自动编码器架构,如下图所示。BiLSTM 层只是普通 LSTM 层的双向版本。这一选择背后的主要原因是利用一个擅长捕获顺序依赖关系的模型,但是任何其他顺序模型也适用于这里描述的内容。

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

履行

为了实现上面的模型,使用了带有 Tensorflow 后端的 Keras 功能 API。更准确地说,密码是如上所述的一个热编码,然后分别通过 16、10 和 6 个单元的 3 个 BiLSTM 层。然而在幕后,输出维度是加倍的,因为例如第一层在一个方向上输出 16 个单位,在相反方向上输出 16 个单位。最后,输入通过具有 6 个单元的全连接密集层,这是瓶颈。换句话说,当密码到达瓶颈时,它被表示为一个 6 维向量。接下来,解码器获取这个 6 维向量,并尝试重建密码。

该模型的训练是在由 1000 个密码组成的数据集上进行的,该数据集的结构在本教程的第 1 部分中进行了描述。经过 3 个 00 代的训练,模型达到了 95% 的准确率。

请注意,瓶颈层的大小对模型重建原始数据的准确性有着重要影响,因为它最终决定了在编码阶段保留多少信息。更复杂的数据需要更大的瓶颈尺寸,以便捕捉可能携带的所有细微差别。尽管如此,考虑到在这种情况下的最终目标是生成新密码,6 维似乎足够了,并且重建精度确实是可接受的。

更仔细地检查结果,很明显,该模型在仅从 6 个值重建密码方面做得相当不错!

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

生成密码

现在是表演的时候了!让我们看看我们令人敬畏的模型的运行情况,并生成一些密码。对于此任务,只需要模型的解码器,因为我们将有效地采样 6 个随机值,并将它们馈送到解码器以获得密码:

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

Generated passwords from autoencoder

结果很有趣。首先,很明显,自动编码器在生成密码方面肯定比朴素贝叶斯模型做得更好!

这应该是“啊哈!”认识到深度学习在识别非结构化数据中隐藏的相关性时可以变得多么强大的时刻!

里面有一些非常有用的密码,甚至有一些原始密码中没有的单词,比如haakerman11$

然而,他们中的大多数都很离谱。密码 1、2、3、5、6 和 7 完全没有意义。但是到底是什么问题导致了这一切呢?让我们通过视觉化潜在空间来进一步检查正在发生的事情。

通过对潜在空间中的 200 个密码使用 t-SNE(一种用于可视化高维数据的技术),我们确实可以观察到相似的密码聚集在一起(即hackerman密码都在左上角,下面是hyper,然后是ninja,以此类推……)。

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

显然,星团并没有真正的对称结构。更具体地说,空间的右上部分完全是空的,这让我们想知道如果从那个区域取样,密码会是什么样的。此外,聚类之间存在大的间隙,并且正 y 轴比负 y 轴具有更大范围的点。结果,采样变得很成问题,因为当从潜在空间随机采样时,如果该点不在已经看到的点附近,解码器将不知道如何解码。另外,我们如何知道从哪里采样,因为点甚至不在原点周围。

事实上,所有这些问题是普通自动编码器的主要弱点之一,但是有一种更现代的自动编码器叫做变型自动编码器,它采用了一种有趣的方法来解决这个问题!

可变自动编码器

可变自动编码器(VAE)[2]于 2013 年首次推出,是一种特殊类型的自动编码器,它采用贝叶斯方法来形成一个更通用、内在连续的潜在空间,以随机采样新数据点。

通俗地说,它与标准的自动编码器几乎是同一个模型,只是在中间多了一层。这是一个完全连通的稠密层,它不是将密码直接映射到潜在空间中的一个点,而是输出一个多元正态分布。更准确地说,它映射到定义多元正态分布的参数。

统计复习

让我们做一个简短的统计复习来阐明这些概念。正态(又名高斯)分布是由两个参数定义的概率分布。即均值(μ)和方差(σ)(也有标准差,但只是方差的平方根)。在正式术语中定义为:

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

Normal Distribution Equation

正态分布关于平均值是对称的,可以通过其钟形曲线很容易地识别出来。要从正态分布中采样一个点,您可以使用以下公式:

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

其中,ε从标准正态分布(μ = 0,σ = 1)中采样。这也被称为重新参数化技巧,也有助于模型的反向传播。(见此处)

此外,正态分布可以在多个维度上定义,这里称为多元正态分布。更正式地,n 维的多元正态分布被定义为:

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

Multivariate Normal Distribution

其中 μ 是均值向量,而σ是协方差矩阵。在 2D,它们看起来如下图所示:

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

ρ是维度之间的相关性。

在 VAEs 的情况下,相关系数ρ是不相关的,因为它假定维度之间没有任何相关性。严格地说,这意味着协方差矩阵是对角的,因此多元正态分布等价于一组独立的正态分布。

证据和更多细节可以在这里找到:http://cs229.stanford.edu/section/gaussians.pdf

回到问题上来

回到密码生成问题,如前所述,我们不是将密码编码到潜在空间中的具体点,而是将其编码到一组正态分布的参数中。然后从它们中的每一个中随机抽取一个变量,在我们的潜在空间中形成一个点!

需要说明的另一个技术性问题是,在现实中,我们将其映射到方差的对数,而不是方差本身。这个调整允许方差取(-inf,inf)中的任何值,而不仅仅是正值。

到目前为止一切顺利,但是你可能会想,所有这些是如何解决我们的问题的呢?

实际上,这使得 VAE 在生成新数据时有两个非常好的特性。更具体地说完整性连续性!例如,从概率分布中采样意味着每个输入密码映射到一个区域而不是单个点,从而迫使解码器为潜在空间中落入该分布的点生成类似的数据。例如,假设点(1,1)映射到密码“mypass”,点(1.1,1.1)应该映射到类似的密码。

损失函数

然而,仅仅给潜在空间中的样本点增加一个概率分布并不能解决所有问题。还有一件事需要调整,以完善我们的变化自动编码器。即修正损失函数。

我们已经确保了相似的数据点应该是非常接近的,但是那些具有完全不同特征的数据点呢?进一步解释,密码“Mypass”不应该直接紧挨着潜在空间中的“SomethingRandom”。然而,我们希望避免如下图所示的数据点簇之间存在巨大的间隙。所以从技术角度来说,无论何时发生这种情况,模型都应该受到惩罚。

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

这是通过在损失函数中引入“Kullback-Leibler (KL)”散度来实现的。简而言之,KL 散度是一种度量两种分布差异的指标(即它们之间的差异)。关于 KL 更彻底的解释可以在这个牛逼的帖子里找到。

对于 VAEs,我们希望惩罚任何偏离标准正态分布(μ = 0,σ = 1)的分布。这奖励了在潜在空间的原点周围均匀分布的模型,否则惩罚它。

在数学上,它表示为:

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

KL Divergence from Standard Normal Distribution

对潜在空间中所有维度的均值和方差进行求和。

总之,最终损失函数变为:

损失=分类 _ 交叉熵+KL _ 散度

履行

好了,理论到此为止!让我们把事情做好!提醒一下,代码包含在上述章节提供的笔记本中。

当然,除了使用 Keras API 的Lambda层实现的额外采样层之外,模型架构与前面的相同。同样,该模型在 1000 个密码的数据集上训练,超过 300 个时期,达到 85%的准确率**。请注意,精确度低于标准自动编码器的精确度。请记住,这里的准确性只是指绝对的准确性,因此它只反映了重建的准确性。它没有说任何关于潜在空间的结构,而这正是 VAEs 的意义所在!但是总的来说,由于更复杂的损失函数使得训练更加困难,所以预期的准确度更低。**

通过观察下图中的密码重建,我们可以看到该模型在解码密码方面仍然做得不错。

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

生成密码

这可能是 post 系列中最激动人心的部分。让我们使用最终确定的变分自动编码器来生成一些密码!

为了创建新的密码,只需从均值为 0、方差为 1-3 的正态分布中抽取点就足够了,因为理论上我们在潜在空间中的所有点都分布在标准正态分布的周围。

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

这就对了。比传统的自动编码器好得多!很明显,这些密码中的大部分实际上都是有意义的!记住……与前一篇文章中的朴素贝叶斯相反,我们没有在模型中的字母之间强加任何类型的结构或依赖性。一切都是深度学习本身衍生出来的!

最后,我们可以使用 t-SNE 观察其结构的变化来可视化 2D 图中的潜在空间。

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

Latent Space Visualization for VAE

诚然,潜在空间的变化视觉化并不完全是我所期待的,我也不确定为什么。我原本期望在潜在空间中看到更密集的点,但相反,中间有一个很大的间隙。它可能是一个小数据集,SNE 霸王龙本身,或者它可能需要更多的训练,但我不能确定。因此,如果你们中的任何人对可能发生的情况有所了解,请在下面的评论中告诉我。

代码:

再一次避免你一路向上滚动。这里是包含这篇文章所有相关代码的存储库:

**[## apogiatzis/vae-lstm-自动编码器-密码生成

这个库包含了名为“通过…揭开生成模型的神秘面纱”的系列文章的第 2 部分的相关代码

github.com](https://github.com/apogiatzis/vae-lstm-autoencoder-password-generation)**

结论

“通过生成密码来揭开生成模型的神秘面纱”系列文章到此结束。在这些文章中,我们探讨了区别建模与生成建模的区别,并分析了一些生成模型,以确定它们的内部工作方式、优势和弱点。采用密码生成场景作为在实践中应用模型的基础,我们使用 Keras API 在 Python 中描述、分析、实现和测试这些模型,并使用真实的实际案例来突出每个案例中的问题。

总之,我们已经看到,当特征的数量很少或者在处理之前可能需要某种形式的特征工程时,像朴素贝叶斯这样的概率模型表现得相对较好。然而,当特征的数量非常大时(即处理非结构化数据),深度学习的表现远远超过统计模型,因为重要的特征被识别为训练的一部分。更准确地说,这篇文章特别关注标准和变化的自动编码器,以展示生成性深度学习的能力。

在这篇文章的最后,我们实现了一个有效的可变自动编码器,只需从正态分布中解码 6 个点就能生成新密码。

我真的希望你和我一样喜欢这些演示,并且这些帖子让你深入了解了简单的生成建模。非常感谢任何反馈。

参考资料:

[1]杰弗里·E·辛顿和鲁斯兰·R·萨拉胡季诺夫。用神经网络降低数据的维数。《科学》,313(5786):504–507,2006。

[2]迪德里克·P·金马和马克斯·韦林。自动编码变分贝叶斯,2013。

用简单的 Python 例子揭开假设检验的神秘面纱

原文:https://towardsdatascience.com/demystifying-hypothesis-testing-with-simple-python-examples-4997ad3c5294?source=collection_archive---------4-----------------------

假设检验是推断统计学的基础,也是数据科学家的一项重要技能。我们用非常简单的 Python 脚本来演示这个概念。

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

Source: https://luminousmen.com/post/demystifying-hypothesis-testing

介绍

假设检验是推断统计学中的一个关键工具,用于确定一个 总体参数 的值可能是多少。我们经常根据一个 样本数据分析 得出这个结论。

不确定“人口”和“样本”在统计学中的确切含义?见此文。

[## 统计学中的人口是什么?

统计学定义>什么是统计学中的总体?统计学中的人口是什么?在统计中,样本是…

www.statisticshowto.datasciencecentral.com](https://www.statisticshowto.datasciencecentral.com/what-is-a-population/)

随着商业、科学、技术、社会和政治事业中数据驱动决策的出现,假设检验的概念对于理解和在正确的环境中应用变得至关重要

为此,在统计分析中使用了大量的测试。这可能会让人困惑。参见这篇优秀的文章,全面了解在什么情况下使用哪种测试。

[## 统计测试——何时使用哪一种?

对于一个来自非统计学背景的人来说,统计学最令人困惑的方面总是…

towardsdatascience.com](/statistical-tests-when-to-use-which-704557554740)

假设检验的基础有两个属性:(a) 原假设和(b) 备择假设。

通常,零假设是无聊的东西,即假设没有有趣的事情发生。

另一个假设是,其中动作是,即一些观察/现象是真实的(即不是偶然的),统计分析将为我们提供更多关于这方面的见解。

查看该文档,获取关于该主题的快速和全面的指南。

流程是怎样的?

统计学家持悲观态度,从零假设开始,在样本数据中计算某种检验统计量。它是由,

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

这里,‘最佳估计’来自样本,例如样本中某些数据的样本均值或比例。标准误差代表估计值的可变性,通常取决于方差和样本量。

然后他们问这个简单的问题,

“对于这个样本(考虑到它的大小和控制它的合适的概率动力学),如果零假设为真,观察到这个极端的检验统计的机会是多少?”

这个机会——观察检验统计量的概率值——就是所谓的 p 值

因此,p 值是观察检验统计的概率,假设零假设为真。并且这个概率是在某个概率分布的假设下计算的(测试统计是从这个概率分布产生的)。想法是这样的,

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

如果这个特定值非常小(小于预定的临界值,我们可以拒绝零假设。

请注意,在某些情况下,我们必须使用概率分布的两侧(如上图红色所示)。这就是所谓的“双边”或“双尾”测试。在这些情况下,备择假设一般以“ x 不等于 y ”的形式表示。

在其他情况下,假设以“ x 大于 y ”或“ x 小于 y ”的形式处理问题。在这种情况下,只需要检查概率分布的一侧,我们称之为“单侧”或“单尾”检验。

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

Source: https://www.fromthegenesis.com/why-hypothesis-testing/

实际上,我们已经在观察者(我们自己)的头脑中注入了足够的怀疑,怀疑我们基本假设 的有效性——零假设是真的。

这里有一篇总结 p 值及其用途的好文章。

[## 对于数据科学,您应该从头开始了解 p 值的所有内容

什么是 p 值?在数据科学中用在什么地方?又该如何计算呢?我们在此回答所有这些问题…

medium.com](https://medium.com/analytics-vidhya/everything-you-should-know-about-p-value-from-scratch-for-data-science-f3c0bfa3c4cc)

这是假设检验流程,总结如下:

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

关于这种 p-value 方法有很多活跃且不那么讨人喜欢的讨论,但这种方法长期以来一直相当有效。因此,在本文中,我们将遵循这一点。然而,保持开放的心态,寻找其他方法。

假设检验的一个简单例子?

你看关于网飞的电影或电视剧吗?那么,你肯定接受了一种叫做 A/B 测试的假设测试。

网飞向不同的用户群展示同样的节目,不同的设计。记录用户的反应(点击/不点击/浏览/不浏览/回来看或不看),并使用古老的假设检验方法进行分析。

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

用 Python 进行假设检验

推动 Python 作为统计建模语言流行的最重要因素之一是它作为数据科学和机器学习的首选语言的广泛使用。

如今,随着越来越多的企业在其运营中应用数据科学,对数据科学专业知识的需求非常大。Python 提供了强大功能、多功能性和来自其社区的支持的正确组合来引领潮流。

虽然 Python 在数据争论、可视化、通用机器学习、深度学习和相关的线性代数(张量和矩阵运算)以及 web 集成方面最受欢迎,但它的统计建模能力远没有宣传得那么好

很大一部分数据科学家仍然使用其他特殊的统计语言,如 R、MATLAB 或 SAS over Python 来进行建模和分析。虽然每种方法都为统计分析提供了各自独特的特性和功能,但对于一名有前途的数据科学家来说,了解更多有关可用于描述性和推断性统计的各种 Python 框架和方法的知识是非常有用的。

关于如何开始使用 Python 进行统计建模的全面讨论,请参阅本文。

[## 使用 Python 进行统计建模:指南和顶级库- Kite 博客

推动 Python 作为统计建模语言流行的最重要因素之一是它的广泛使用…

kite.com](https://kite.com/blog/python/statistical-modeling-python-libraries/)

在本文中,我们展示了用 Python 进行假设检验的四个简单例子(使用来自 Statsmodels 包 的函数)。这四种情况出现在大部分统计分析中,

  • 一个人口比例
  • 人口比例的差异
  • 一个总体平均值
  • 人口的差异意味着

真实情况的代码示例

整个 Jupyter 笔记本都在这里 。个别案例用现实生活中的例子来说明。他们来了,

一个人口比例

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

研究问题:前几年,52%的父母认为电子产品和社交媒体是他们青少年睡眠不足的原因。现在是否有更多的父母认为他们的孩子睡眠不足是由电子产品和社交媒体造成的

人群:有青少年的父母(13-18 岁)
兴趣参数 : p(比例)

**零假设:**p = 0.52
备选假设: p > 0.52(注意这是单侧检验)

数据:调查 1018 人。56%的受访者认为,他们青少年的睡眠不足是由电子产品和社交媒体造成的。

方法:单组比例采用z-统计检验 。我们使用 Statsmodels 包中的proportions_ztest()函数。注意参数alternative="larger"表示单边测试。该函数返回两个值-z 统计值和相应的 p 值。

import statsmodels.api as sm
import numpy as np
import matplotlib.pyplot as pltn = 1018
pnull = .52
phat = .56sm.stats.proportions_ztest(phat * n, n, pnull, alternative='larger')>> (2.571067795759113, 0.005069273865860533)

结论:由于 z 检验的计算 p 值(~0.005)非常小,我们可以拒绝无效假设,即认为青少年睡眠不足是由电子产品和社交媒体造成的父母比例与前几年的估计相同,即 52% 。虽然我们不接受替代假设,但这非正式地意味着这个比例很有可能超过 52%。

人口比例的差异

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

Source: http://www.ymcamidtn.org/swim-lessons

研究问题 : 黑人孩子的父母和西班牙裔孩子的父母报告他们的孩子上过游泳课的人口比例有显著差异吗

人口:6-18 岁黑人儿童的所有父母和 6-18 岁西班牙裔儿童的所有父母
感兴趣的参数:P1-p2,其中 p1 =黑人,p2 =西班牙裔

零假设: p1 — p2 = 0
备选假设: p1 — p2 ≠ 0

数据 : 247 名黑人儿童家长。36.8%的家长报告说他们的孩子上过游泳课。308 名西班牙裔儿童的父母。38.9%的家长报告说他们的孩子上过游泳课。

逼近:人口比例差异需要 t 检验 。此外,这里的人口服从二项式分布。我们可以将两个带有适当二项式分布参数的总体量传递给 t 检验函数。

我们可以使用 Statsmodels 中的ttest_ind()函数。该函数返回三个值:(a)检验统计量,(b)t 检验的 p 值,以及©t 检验中使用的自由度。

n1 = 247
p1 = .37

n2 = 308
p2 = .39

population1 = np.random.binomial(1, p1, n1)
population2 = np.random.binomial(1, p2, n2)sm.stats.ttest_ind(population1, population2)>> (0.9309838177540464, 0.3522681761633615, 553.0)

结论:由于 p 值(~0.352)相当高,我们无法拒绝人口比例差异为零的零假设*。*

但是,如果我们可以对 5000 名父母而不是几百名父母进行抽样调查,会发生什么呢?查看笔记本看结论如何变化。

一个总体平均值

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

研究问题:假设组织了一场成年人的侧手翻比赛。数据如下所示,

(80.57, 98.96, 85.28, 83.83, 69.94, 89.59, 91.09, 66.25, 91.21, 82.7 , 73.54, 81.99, 54.01, 82.89, 75.88, 98.32, 107.2 , 85.53, 79.08, 84.3 , 89.32, 86.35, 78.98, 92.26, 87.01)

成年人的平均侧手翻距离(以英寸为单位)是否大于 80 英寸

人群:所有成年人
感兴趣参数 : μ,人群平均侧滑距离。

***零假设:*μ= 80
备选假设 : μ > 80

数据 :
25 名成年被试。
μ=83.84
σ=10.72

方法:我们使用 Statsmodels 包中的 z 测试,用alternate='larger'作为参数来表示单尾测试。

*sm.stats.ztest(cwdata, value = 80, alternative = "larger")>> (1.756973189172546, 0.039461189601168366)*

结论:由于 p 值(0.0394)低于标准置信水平 0.05,我们可以拒绝*零假设成年人(人口数量)的平均侧滑距离等于 80 英寸。有强有力的证据支持另一个假设,即平均车轮距离实际上高于 80 英寸。*

正态性目测检验:对于 z 统计量的单总体均值检验,基本假设是数据的正态性。我们应该经常检查。

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

人口的差异意味着

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

Source: https://www.shdoonline.org/blog-5/

研究问题 : 考虑到 NHANES 数据 中的成年人,男性的平均 体重指数 是否明显高于女性

观点:国家健康和营养检查调查(NHANES)是一项研究计划,旨在评估美国成人和儿童的健康和营养状况。这项调查的独特之处在于它结合了面试和体检。

人口:NHANES 数据中的成年人。
感兴趣参数:μ1-μ2μ1-μ2,体重指数。

零假设: μ1=μ2
备选假设: μ1≠μ2

数据:

女性 2976 人,μ1=29.94,σ1=7.75
男性成年人 2759 人,μ2=28.78,σ2=6.25

μ1−μ2=1.16

方法:我们可以再次使用 z 统计量进行假设检验。但是在这里,测试必须是“双边的”,因为在替代假设中出现了不平等,即男性的身体质量指数可以高于或低于女性。计算 p 值时,两边的概率必须相加。

*url = "https://raw.githubusercontent.com/kshedden/statswpy/master/NHANES/merged/nhanes_2015_2016.csv"
da = pd.read_csv(url)females = da[da["RIAGENDR"] == 2]
male = da[da["RIAGENDR"] == 1]sm.stats.ztest(females["BMXBMI"].dropna(), male["BMXBMI"].dropna(),alternative='two-sided')>> (6.1755933531383205, 6.591544431126401e-10)*

结论:由于 p 值(6.59e-10)极小,我们可以拒绝*零假设即男性的平均身体质量指数与女性的相同。*

外卖食品

从这些例子中有一些简单的收获,

  • 将你的统计推断问题归入一个设定的类别可能不会太难。如果你正在做一个临床药物试验或网站设计选择的 A/B 测试,你可能在比较两个总体均值。如果你试图判断一些制造过程变化的影响,你可能会遇到一个比例问题。
  • 一旦你解决了你的问题,就遵循一个屡试不爽的程序。确定你的人口,感兴趣的参数,构建一个无效和替代假设。预先确定 p 值阈值。通常为 0.05 ,但根据您的应用进行调整。
  • 此后,选择一个适合你的推理问题类型的测试——t 测试、z 测试、卡方测试或类似的测试。简单直观的函数存在于 Python 包中,如 Scipy 或 Statsmodels。使用选择的函数运行测试,并检查 p 值拒绝/未能拒绝零假设
  • 理解 p 值的真正含义。我们从不接受另一个假设,我们只是给出充分/不充分的证据来拒绝零假设。
  • 你可以试验不同的样本大小、不同类型的概率分布或生成模型,以检查这些对你的结论的影响。但是基本过程是一样的。
  • 你可能想知道当你拒绝一个为真的无效假设时会发生什么,反之亦然。这些问题与第一类和第二类错误有关,在数据科学的说法中,你可能知道它们的其他名称——假阳性假阴性。通过对数据和样本进行实验,了解它们是如何产生的以及如何应对。

摘要

在本文中,我们展示了简单而直观的现实生活中的例子,以及可以使用紧凑的 Python 代码回答的推断统计研究问题。

这些例子说明了假设检验概念的应用,对于数据科学家和分析专业人员来说,掌握假设检验是一项非常有价值的技能,他们使用数据来收集见解并做出业务/科学决策。

如果你有任何问题或想法要分享,请联系作者tirthajyoti【AT】Gmail . com。另外,你可以查看作者的 GitHub 资源库中其他有趣的 Python、R 和机器学习资源中的代码片段。如果你像我一样对机器学习/数据科学充满热情,请随时在 LinkedIn 上添加我在 Twitter 上关注我。

* [## Tirthajyoti Sarkar - Sr .首席工程师-半导体、人工智能、机器学习- ON…

通过写作使数据科学/ML 概念易于理解:https://medium.com/@tirthajyoti 开源和有趣…

www.linkedin.com](https://www.linkedin.com/in/tirthajyoti-sarkar-2127aa7/)

享受中等:https://medium.com/@tirthajyoti/membership*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值