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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

具有深度更新过程的间歇需求预测

原文:https://towardsdatascience.com/intermittent-demand-forecasting-with-deep-renewal-processes-f152d3f59f35?source=collection_archive---------51-----------------------

让我们面对现实吧。任何在零售、物流、电子商务等领域从事时间序列预测工作的人。肯定会诅咒那条从不表现的长尾巴。可怕的间歇时间序列使预测者的工作变得困难。这种麻烦使大多数标准预测技术变得不切实际,提出了关于度量标准、模型选择、模型集成等等的问题。更糟糕的是,可能会有这样的情况(比如在备件行业,出现间歇性模式的是流动缓慢但非常关键或高价值的项目。

注释

Y - i 时间序列的第元素

n -时间序列的索引

i -非零需求指数

Qi -需求间隔,即两个非零需求之间的差距。

Mi-非零需求点的需求规模。

传统方法

传统上,有一类算法采用稍微不同的路径来预测间歇时间序列。这组算法将间歇性需求分为两部分——需求规模和需求间隔——并分别建模。

克罗斯顿

克罗斯顿提议对 MQ 分别应用单一指数平滑,如下所示:

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

得到这些估计后,最终预测,

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

这是一个单步提前预测,如果我们必须扩展到多个时间步,我们将得到一个具有相同值的平面预测。

克罗斯顿

Syntetos 和 Boylan,2005 年指出,Croston 预测对间歇性需求有偏见,并提出用需求区间估计的β进行修正。

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

克罗斯顿(SBJ)

Shale、Boylan 和 Johnston (2006)得出了到达遵循泊松过程时的预期偏差。

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

作为更新流程的克罗斯顿预测

更新过程是一个到达过程,其中到达间隔是正的、独立的和同分布的(IID)随机变量。这个公式概括了任意长时间的中毒过程。通常,在泊松过程中,需求区间是指数分布的。但是更新过程的内部需求时间是有限的。

Turkmen 等人 2019 年将 Croston 及其变体铸造到更新过程模具中。定义在正整数上的随机变量 MQ 完全定义了 Yn

深度更新过程

一旦克罗斯顿预测被视为一个更新过程,土库曼等人提出,估计他们使用一个单独的 RNN 为每个“需求规模”和“需求间隔”。

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

在哪里

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

这意味着我们有一个单一的 RNN,它接受输入的是 M和 Q并把这些信息编码到一个编码器中( h )。然后,我们在这个隐藏层的顶部放置两个独立的 NN 层,以估计 MQ 的概率分布。对于 MQ 而言,负二项分布是本文建议的选择。**

负二项分布

负二项分布是一种离散的概率分布,通常用于对计数数据进行建模。例如,售出的 SKU 数量、访问网站的人数或呼叫中心接到的服务电话数量。

该分布源自一系列的伯努利试验,即每个试验只有两种结果。一个经典的例子是掷硬币,可以是正面也可以是反面。所以成功的概率是 p 失败的概率是 1-p (在公平的抛硬币中,这是各 0.5)。所以现在如果我们继续进行这个实验,直到我们看到 r 成功,我们看到的失败次数将会是负二项分布。

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

当我们应用这一点时,成功和失败的语义不一定成立,但重要的是只有两种结果。

网络体系结构

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

作者图片

我们的贡献

本文只讨论了提前一步的预测,这也是你会在很多间歇性需求预测文献中发现的。但在现实世界中,我们需要比这更长的时间来进行适当的规划。无论是 Croston 还是深度更新流程,我们生成 n 步提前预测的方式都是一样的,即需求规模(M)/需求间隔时间(Q)的平面预测。

除了现有的 Flat 方法之外,我们还引入了两种新的输出解码方法——精确解码和混合解码。假设我们用预测长度 5 来训练模型。

该模式的原始输出将是:

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

在平面解码下,我们将只选取第一组输出(M=22 和 Q=2 ),并生成一个单步超前预测,并对所有 5 个时间步长扩展相同的预测。

确切的说

精确解码是一种更有把握的解码方式。在这里,我们预测需求规模为 M 的需求,每个内部需求时间为 Q,并使预测的其余部分为零。

杂交

在混合解码中,我们将这两者结合起来生成预测,该预测还考虑了模型预期的长期变化。我们使用 M/Q 值进行预测,但我们会根据后续步骤更新 M/Q 值。例如,在我们的例子中,我们将预测前两个时间步的 11(22/3 ),然后预测下一个时间步的 33(33/1 ),依此类推。

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

履行

我已经使用 GluonTS 实现了该算法,Glu onts 是一个基于 MXNet 的神经时间序列预测框架。AWS 实验室是开源项目的幕后支持者,亚马逊内部使用 DeepAR 等一些算法来进行预测。

实施的模型

本文讨论了该模型的两个变体——离散时间 DRP(深度更新过程)和连续时间 DRP。在这个库中,我们只实现了离散时间 DRP,因为它是更流行的用例。

如何安装?

该软件包上传到 pypi 上,可以通过以下方式安装:

pip install deeprenewal

推荐 Python 版本:3.6

【https://github.com/manujosephv/deeprenewalprocess】源代码:

如果你运行的是 Windows,需要使用你的 GPU(我推荐),你需要先安装支持 GPU 的 MXNet==1.6.0 版本 MXNet 官方安装页面

如果你在安装 GPU 版本时遇到困难,你可以试试(取决于你的 CUDA 版本)

pip install mxnet-cu101==1.6.0 -f [https://dist.mxnet.io/python/all](https://dist.mxnet.io/python/all)

相关 Github 问题

使用

examples 文件夹中还有一个笔记本,展示了如何使用该模型。相关摘录如下:

论文的实验和结果

本文在两个数据集——零件数据集和 UCI 零售数据集上对模型进行了评估。对于概率预测的评估,他们使用分位数损失。

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

作者使用具有 10 个隐藏单元的单个隐藏层,并使用 softplus 激活将 LSTM 嵌入映射到分布参数。他们使用了全局 RNN,即所有时间序列共享 LSTM 参数。他们评估了提前一步的预测。

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

我们的实验和贡献

实验设置

我们没有重建实验,而是扩大了范围。我们选择的数据集是 UCI 零售数据集,而不是提前一步预测,而是提前 39 天预测。这更符合现实世界的应用,在现实世界中,您需要不止一步的提前预测来进行计划。除了与 Croston 及其变体进行比较,我们还与 ARIMA、ETS、NPTS 和 Deep AR 进行了比较(这是本文中提到的后续步骤)。

资料组

UCI 零售数据集是一个交易数据集,包含一家总部位于英国的注册无店铺在线零售商在 2010 年 1 月 12 日至 2011 年 9 月 12 日之间发生的所有交易。该公司主要销售独特的适合各种场合的礼品。这家公司的许多客户都是批发商。

栏目:

  • 发票号:发票号。名义上,分配给每笔交易的 6 位整数。如果此代码以字母“c”开头,则表示取消。
  • 库存代码:产品(物品)代码。名义上,一个 5 位数的整数,唯一分配给每个不同的产品。
  • 描述:产品(物品)名称。名义上。
  • 数量:每笔交易每种产品(物品)的数量。数字。
  • 发票日期:发票日期和时间。数字,每笔交易生成的日期和时间。
  • 单价:单价。数字,单位为英镑的产品价格。
  • CustomerID :客户编号。名义上,一个唯一分配给每个客户的 5 位整数。
  • 国家:国家名称。名义上,每个客户居住的国家的名称。

预处理:

  • 分组依据为库存代码国家发票日期 - >数量之和单价的平均值
  • 用零填充以使时间序列连续
  • 将数量的下限值裁剪为 0(去除负值)
  • 仅采用长度超过 52 天的时间序列。
  • 列车测试拆分日期:2011–11–01

统计:

  • 时间序列数:3828。过滤后:3671
  • 数量:平均值= 3.76,最大值= 12540,最小值= 0,中值= 0

时间序列分割

使用我们之前讨论过的相同的分割——间歇的、不规则的、平滑的和不稳定的——我将数据集分成四份。

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

作者图片

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

作者图片

我们可以看到,数据集中几乎 98%的时间序列是间歇的或不规则的,这对于我们的用例来说是完美的。

结果

基线比较

我们选择的基线是克罗斯顿预测。我们还对克罗斯顿做了轻微的修改,即 SBA 和 SBJ。因此,让我们首先针对这些基线进行比较,包括一步预测和 n 步预测。我们也将评估点预测(使用 MSE、MAPE 和 MAAPE)和概率预测(使用分位数损失)

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

1 步超前点估计值(中值)

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

领先一步概率预测

我们可以看到,DRP 模型在点预测和概率预测方面都大大优于基线方法。

现在让我们来看一下 n 步提前预测。

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

n 步超前点估计值(中值)

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

超前 n 步概率预测

在这里,我们看到了一个不同的画面。在预测点上,克罗斯顿在 MSE 上做得更好。DRP 在 MAPE 做得很好,但是我们知道 MAPE 倾向于预测不足,并且当我们观察间歇性需求模式时,它不太可靠。因此,从预测的角度来看,我不会说 DRPs 的长期预测优于 Croston。我们注意到的是,在 DRPs 中,混合解码在 MAPE 和 MSE 方面都比平面解码好得多。

扩展比较

为了进一步比较这些结果,让我们也包括来自其他流行预测技术的结果。我们在点估计稳定中加入了 ETS 和 ARIMA,在概率预测稳定中加入了 DeepAR 和 NPTS。

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

1 步超前点估计值(中值)

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

领先一步概率预测

在 MSE 上,ETS 占据了头把交椅,尽管在 MAPE 和 MAAPE 上,DRP 保住了他们的位置。在概率预测方面,DeepAR 有非常高的分位数损失,但当我们看加权分位数损失(按量加权)时,我们看到它出现在顶部位置。这可能是因为 DeepAR 在大部分时间预测为零(或接近零),并且只预测大批量 SKU 中的良好数字。在所有三个分位数的损失中,NPTS 似乎以微弱优势胜过 DRPs。

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

n 步超前点估计值(中值)

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

超前 n 步概率预测

当我们看长期预测时,我们看到 ARIMA 和 ETS 在点估计(MSE)方面做得相当好。在概率方面,Deep AR 扭转了这一局面,并成功成为最佳概率模型。

几个预测的例子

间歇

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

作者图片

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

作者图片

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

作者图片

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

作者图片

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

作者图片

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

作者图片

稳定(较少间歇)

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

作者图片

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

作者图片

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

作者图片

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

作者图片

参考

  1. 阿里·卡内尔·土库曼,王渔洋,蒂姆·贾努斯考斯基。“具有深度更新过程的间歇性需求预测”。arXiv:1911.10416 [cs。LG] (2019)
  2. 斯蒂芬妮格伦 。《负二项实验/分布:定义,例子》摘自StatisticsHowTo.com:对我们其他人来说的基本统计!https://www . statistics show to . com/negative-binomial-experiment/

原载于 2020 年 10 月 13 日【http://deep-and-shallow.com】

尼日利亚西北部和中北部的境内流离失所者

原文:https://towardsdatascience.com/internal-displacement-in-north-west-north-central-nigeria-b313c939b3b5?source=collection_archive---------33-----------------------

我们能从数字中学到什么?

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

图片来自难民署 KORA

近年来,尼日利亚境内流离失所者人数激增,特别是在该国北部。虽然受影响的人口有一个共同点——在国内流离失所和易受伤害,但他们在人口和地理分布以及安置原因方面可能有不同的特点。我认为,对所有参与向国内流离失所者提供人道主义服务的利益攸关方,最重要的是,对国家各级政府,更好地理解这些是必要的。

设定了这个论述的大背景,具体的背景是尼日尼亚西北中北部**区。**我的目标是通过询问一些具体问题,并使用下述数据集寻求答案,收集关于这两个地区的境内流离失所者的一些信息:

数据集:

尼日利亚位移数据—中北部&西北区—位置评估。 发布者 :国际移民组织

数据集涵盖 2019 年 9 月 4 日至 10 月 16 日期间,包括受流离失所影响最严重的州,包括: 贝努埃、纳萨拉瓦和中北部高原;西北部的卡杜纳、卡诺、卡齐纳、索科托和赞法拉 如下图:

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

尼日利亚地图。每个州的数字代表该州使用的当地语言的数量。FCT 和贡贝州的语言计数不可用。

问题 1:

a .报告的国内流离失所者有多少人口?

b .各区之间的人口规模有显著差异吗?

据报告,这两个地区共有 445,901 名境内流离失所者。这个数字相当于瓦里和阿萨巴(两个城市都在尼日利亚南部)人口的总和,从国际角度来看,甚至超过了德国苏黎世的人口。

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

图 A:国内流离失所者的区域分布。

大约 53%的国内流离失所者在中北部地区,47%在西北部地区。这两个地区的国内流离失所者人数只有 6%的差异。一般来说,这对于行政和服务交付来说可以认为是无关紧要的。

虽然这两个地区的国内流离失所者人数没有很大差别,但如果从州一级往下看,情况就不一样了。

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

图 B:国内流离失所者在各州的分布情况。

我们可以看到,国内流离失所者人数最多的两个州(贝努埃和高原)属于中北部。贝努埃和普拉托加起来约占整个中北部和西北地区境内流离失所者总数的 47%。同样位于中北部的纳萨拉瓦州的国内流离失所者人数最少,在这两个地区的国内流离失所者总人数中几乎微不足道。我们可以得出结论,中北部地区报告的各州显示了国内流离失所者人口的最高范围。

国内流离失所者是社会中的弱势群体,他们需要政府的干预以及人道主义组织和社会普通成员的援助才能生存。当国内流离失所者聚集在一起时,集中提供社会服务的办法可能效果最好。然而,当他们在地理上分散时,那么应用分布式解决方案交付可能比传统的集中式方法更好。为了获得这方面的一些见解,我问道:

问题 2:

国内流离失所者地点在各州各地方政府辖区的分布情况如何?

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

图 C:收容国内流离失所者的地方政府机构占每个州地方政府机构总数的比例。

以下是观察到的情况:

  1. 数据显示,境内流离失所者站点遍布东道州的大部分地方政府。
  2. 更准确地说,每个州 60%以上的地方政府所在地都有境内流离失所者。
  3. 值得注意的是,在高原州、赞法拉州和纳萨拉瓦州,所有地方政府辖区都有境内流离失所者。
  4. 卡诺州和卡齐纳州是仅有的拥有 30 多个地方政府所在地的州。此外,这两个州的 30 多个地方政府所在地有境内流离失所者。

问题 3:

各州境内流离失所者的性别分布情况如何?

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

图 D:各州女性与男性国内流离失所者比例图表。

数据显示,在这两个地区的所有州中,女性境内流离失所者人数更多。这种差距在贝努埃州最为突出。

如下图所示,进一步观察发现,在这两个地区的所有州,女性境内流离失所者平均多 9%(性传播疾病多 2.6%)。

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

图 E:各州女性与男性境内流离失所者的比例。

一个后续问题是:这一趋势(更多女性境内流离失所者)在地方政府一级是否保持?

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

图 f。

上文图 F 显示,这一趋势确实存在,因为 93%的地方政府中女性境内流离失所者多于男性。在这 93%中,约 21%的女性对男性的比例超过 16%,超过了州一级的最大百分比差异。

问题 4:

各州可以关注什么来阻止或减少人们流离失所的机会?

为了解决这个问题,首先,我们需要知道为什么大多数国内流离失所者流离失所。数据集中提供的一个数据点是大多数人流离失所的**原因。**这样,我们可以从解决上述问题 4 的角度收集一些见解。

在数据集中,部族冲突、叛乱、绑架、武装抢劫和自然灾害被列为大多数境内流离失所者流离失所的原因。每种原因下的人口比例如下:

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

在这两个地区(中北部和西北部),约 66%的境内流离失所者因社区冲突而流离失所。

这表明,解决现有的社区冲突和预防未来的事件将在所有国家减少 66%的国内流离失所者。

我们将进一步观察这些原因是否以及如何在各州报告中有所不同。

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

图 G:

在贝努埃、普拉托、纳萨拉瓦和卡杜纳等州,部族冲突仍然是境内流离失所的主要原因。非常值得注意的是,贝努埃省 100%的境内流离失所者和高原省 91%的境内流离失所者将部族冲突作为他们流离失所的主要原因。

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

图 H

索科托和赞法拉讲述了一个不同的故事。在这里,大多数国内流离失所者——索科托的 94%和赞法拉的大约 65%——称武装抢劫是他们流离失所的主要原因。

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

从所提供的数据来看,卡诺仍然是叛乱成为境内流离失所主要原因的唯一一个州。在卡齐纳州,社区冲突和自然灾害是流离失所的主要原因。事实上,卡诺和卡齐纳是仅有的两个报告自然灾害对国内流离失所有重大影响的州。

推论和建议:

  1. 一个国家的境内流离失所者往往分散在地方政府所在地,因此政府和非政府组织需要采取分布式服务提供方法,以更好地帮助境内流离失所者。
  2. 妇女往往占国内流离失所者人口的大多数。因此,在规划时,政府和非政府组织需要多分配一点资源来满足妇女的具体需求和/或服务。
  3. 虽然社区冲突是这两个地区和一些州流离失所的主要原因,但州行政人员需要分配更多资源,解决各自州流离失所的主要原因。

总之,必须指出,所提供的数据并没有告诉我们一个国家内的国内流离失所者是否来自同一个国家。由于出于这样或那样的原因在一个国家流离失所的人可以在该国境内或境外寻求庇护,这意味着流离失所的重要原因不一定发生在庇护国。因此,可以得出这样的结论:流离失所的原因很少归因于国家。

感谢阅读,请注意,此练习的源代码可在 Github 上的 此处 获得。

可解释与可解释的机器学习

原文:https://towardsdatascience.com/interperable-vs-explainable-machine-learning-1fa525e12f48?source=collection_archive---------6-----------------------

可解释的模型和可解释的模型之间的区别以及它为什么重要

从医疗诊断到信贷承保,机器学习模型正被用于做出越来越重要的决策。为了信任由这些模型驱动的系统,我们需要知道它们是如何做出预测的。这就是为什么可解释的模型和可解释的模型之间的区别如此重要。我们理解模型的方式以及我们能够真正理解的程度取决于它们是可解释的还是可解释的。

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

简而言之,一个可解释的模型可以被人类理解,而无需任何其他的帮助/技术。我们只看模型概要/参数就能理解这些模型是如何做出预测的。我们也可以说一个可解释的模型提供了它自己的解释。相比之下,一个可解释的模型不会提供自己的解释。就其本身而言,这些模型过于复杂,人类无法理解,它们需要额外的技术来理解它们如何做出预测。

在本文的其余部分,我们将:

  • 使用示例,深入探究我们如何将模型分类为可解释的或可解释的
  • 触及我们可以用来理解一个可解释的模型如何工作的技术
  • 讨论可解释性的概念以及它与可解释和可解释模型的关系

可解释的机器学习

我们说,如果一件事能够被理解,它就是可解释的。考虑到这一点,我们说如果一个模型能够被人类自己理解,那么它就是可解释的。我们可以查看模型参数或模型摘要,并准确理解它为什么做出某个预测/决策。我们下面讨论的可解释模型的例子包括决策树和线性回归。

在图 1 中,我们有一个决策树,它被训练来预测某人是否会拖欠汽车贷款。假设一个月收入 3000 美元的 29 岁的人提出申请。然后,基于这种模式,一个自动承保系统给了她一笔贷款。我们可以很容易地遍历树的节点,看看为什么做出这个决定。这个人超过 25 岁,所以我们在第一个节点向右走。那么她有一个大于 2000 的收入,所以我们又回到了无叶节点。换句话说,模型预测学生不会拖欠贷款。

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

图 1:默认预测的决策树(来源:作者)

从这个例子继续,假设我们想要一个模型,使用一个人的年龄和收入来预测给予一个人(Y)的最大贷款规模。我们使用线性回归,得出以下等式:

Y = 100 *年龄+10 *收入+ 200

我们看到,一个人每衰老一年,他们预测的最大贷款额就会增加 100 美元。同样,贷款规模随着收入的增加而增加。对于这个人(26 岁,收入 3000 美元),最大贷款额预计为 32800 美元。

所以就像决策树一样,我们可以查看这个模型的参数,并准确理解为什么它会做出这样的预测。这是因为这些模型相当简单。决策树只有几个节点,线性回归模型只有 3 个参数。随着模型变得越来越复杂,我们不能再以这种方式理解它们。

可解释的机器学习

你可以把 ML 模型想象成一个函数。模型特征是输入,预测是输出。一个可解释的模型是一个复杂到人类无法理解的函数。另一个名称是黑盒模型。我们需要一种额外的方法/技术来窥视黑盒并理解模型是如何工作的。

这种模型的一个例子是随机森林。简而言之,随机森林由许多决策树组成,在进行最终预测时,所有单个树的预测都会被考虑在内。为了理解一个随机的森林是如何工作的,我们必须同时理解所有的树木是如何工作的。即使有少量的树,这也是不可能的。

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

AlexNet 的架构(来源:Satya Mallick&Sunita Nayak

当我们开始考虑像神经网络这样的算法时,事情变得更加复杂。为了便于理解, AlexNet ,一个用于图像识别的卷积神经网络,有 62,378,344 个参数。相比之下,我们上面的简单回归模型只有 3 个参数。对于人类来说,仅仅通过查看参数权重来理解像 AlexNet 这样的模型是如何工作的是不可能的。

用于理解可解释模型的技术

我们需要一些额外的技术来理解像上面讨论的算法是如何进行预测的。这些可能包括像特征重要性评分这样的技术。这些技术试图确定每个单独的特征能够多好地预测目标变量。分数越高,特征对模型越重要,换句话说,特征对模型预测的影响越大。

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

来源: flaticon

还有一大堆试图分解单个预测的技术。因此,与着眼于整体预测的特征重要性不同,这些技术将解释每个特征如何对一个特定的预测做出贡献。这包括模型不可知的方法,如石灰SHAP 。这意味着它们可以用来解释任何 ML 模型的预测。它们还包括为特定模型创建的方法,例如用于解释神经网络预测的 DeepLIFT

当使用这些技术做出任何结论时,都应该小心谨慎。这是因为这些技术只能提供模型实际预测的近似值。为了验证任何结论,可以结合使用多种技术,或者使用数据可视化来验证这些技术。领域知识也是一个重要的工具。任何与以前的经验/知识相反的结果都应进行更详细的分析。

可解释性

到目前为止,我们已经讨论了可解释或可解释的模型,但是应用这种二元标志可能没有意义。这是因为一个模型的可解释性是在一个范围内的,在这个范围内,一些模型比另一些模型更具可解释性。换句话说,可解释性是一个模型能够被人类理解的程度。如果一个模型比另一个模型更容易让人理解它是如何做出预测的,那么这个模型就比另一个模型更容易解释。

在图 2 中,我们可以看到可解释性谱的含义。卷积神经网络比随机森林更难解释,而随机森林比决策树更难解释。大多数模型通常可以分为可解释的或可解释的,其中可解释的模型在光谱的右边,可解释的模型在光谱的左边。然而,有一个灰色地带,在那里你会发现人们对分类有不同意见。

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

图 2:可解释性谱

例如,像上面讨论的线性回归模型,可以容易地被人理解,并被归类为可解释的模型。在这种情况下,我们只有两个特征(年龄和收入),但如果我们添加更多的特征,模型将变得更加复杂,更难解释。然而,还不清楚回归模型在什么时候变得可以解释。

可解释性-准确性权衡

从上面我们可以看到,一般来说,越不复杂的模型越容易解释。因此,为了更高的可解释性,可能会有较低准确性的折衷。这是因为,在某些情况下,简单的模型可以做出不太准确的预测,但这实际上取决于你试图解决的问题。例如,使用可解释的模型(如逻辑回归)来进行图像识别,结果会很差。即便如此,对于许多问题,一个可解释的模型和一个可解释的模型表现一样好。

在下面的文章中,我们比较了一个可解释的模型,逻辑回归,和一个可解释的模型,神经网络。我们表明,通过对我们的问题进行一些思考,并从我们的数据集创建新的特征,我们可以通过一个可解释的模型实现类似的准确性。它很好地实践了我们在本文中讨论的一些概念。

[## 特征工程的力量

为什么您可能只应该使用逻辑回归来建模非线性决策边界(使用 Python 代码)

towardsdatascience.com](/the-power-of-feature-engineering-b6f3bb7de39c)

成为推荐会员

如果你觉得这篇文章很有帮助并且想看更多,你可以成为我的 推荐会员 来支持我

图像来源

图片为本人或从 www.flaticon.com 的获得。在后者的情况下,我拥有他们的高级计划中定义的“完全许可”。

参考

[1] C. Rudin,停止解释高风险决策的黑盒机器学习模型,转而使用可解释的模型(2019),https://www.nature.com/articles/s42256-019-0048-x

[2] R. Gall,机器学习可解释性 vs .可解释性:两个可以帮助恢复对 AI 信任的概念(2018),https://www . kdnugges . com/2018/12/Machine-Learning-explability-interprebility-AI . html

[3] S. Mallick & S. Nayak,卷积神经网络中的参数数量和张量大小(CNN) (2018 年),https://www . learnopencv . com/Number-of-Parameters-and-Tensor-Sizes-in-convolutionary-Neural-Network/

在 10 分钟内解释线性回归(非技术性)

原文:https://towardsdatascience.com/interpret-linear-regression-in-10-mins-non-technical-3f78f1f1dbd1?source=collection_archive---------19-----------------------

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

简·kopřiva 在 Unsplash 上的照片

当有那么多伟大的文章和对最常见算法的解释时,为什么还要花力气写这个呢?一个高管或非技术人员如何解读线性回归?所有的文章都很注重技术细节。

我喜欢理解事物减去额外努力后的样子。

线性回归是最基本的算法。尽管浏览线性回归教程可以让一个高中生在大约五分钟内理解并实现一个 Python 模型,但在生产环境中应用机器学习算法时还有更多细微差别。

这个博客和即将到来的系列文章的目的是用通俗的语言来捕捉和解释线性回归的微妙之处。你可以关注我这里了解更多。

线性回归模型是什么意思?

你记得我们在学校学过的直线方程吗?数学上,直线的表示表示为
y = MX + b。

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

直线方程(来源)

**y = mx + b**Where, if you were to imagine a straight line (as shown above),**m**: The slope of the line (The angle at which the line is turned)**b**: The intercept (On the Y-Axis, how much higher or lower is the line)**y**: The dependent/ target variable (The value we want to predict)**x**: The independent/ predictor variable (The variable that we use to make the prediction)

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

萨曼莎·加德斯Unsplash 上拍摄的照片

线性模型的真实解释:

让我们从一个管理者的角度来看模型,而不是一个精通技术的人。

机器学习模型只是一种能够表示或猜测接下来会发生什么的方法,某些东西属于哪里,或者什么样的特征组合将最适合知道接下来会发生什么。

一个机器学习模型是不是魔法。它只是数据的数学最佳表示。

直线模型中的直线代表直线。数据必须是这样的,即数据中有一个线性趋势,以便能够使用线性回归。让我们来看一个线性模型的经典例子——牛顿第一运动定律。

Force = Mass x Acceleration ( F = m x a )

现在让我们来解释一下。如果物体的质量不变,那么,当我们增加物体的加速度时,所施加的力也会增加。

为了与前面的公式进行比较,

y = mx + bFor this case, 
y = mxand, there is no intercept: '**b'** here. This means that the graph will pass through the origin. (when x = 0, y = 0)

现在让我们看看什么是线性回归中的回归。在机器学习中,

  • 因变量表示为“y”
  • 将要使用的独立变量表示为“X”

回归只是在自变量和因变量之间建立一种关系。线性回归是在特征和因变量之间建立一种关系,这种关系最好用直线来表示

线性回归有两种类型:简单线性回归和多元线性回归。

  • 简单线性回归:用一个自变量预测一个因变量
  • 多元线性回归:用多个自变量预测一个因变量

所以,如果你有一个数据科学家说:

我将对独立特征和预测值运行多元线性回归模型,理解他将尝试通过数据制作一条直线,该直线尽可能接近输入数据点。

可以用各种方法在数据中画一条线。

问:您认为最佳拟合线意味着什么?
答:在这里,你会听到数据科学家说,他们正试图最小化成本函数

问:成本函数/误差函数是什么意思?
A .汇总误差的函数。作为一个用户,你会想要一个最优成本函数,因为这将意味着你有最少的可能误差。

最佳拟合线将具有倾斜和截距,以使其通过或尽可能接近数据点。

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

萨法尔·萨法罗夫Unsplash 上拍摄的照片

代码?

为了能够解释模型的简单性和执行,您必须深入理解实现。在我的 Github 上,你可以随意使用同样的工具。如果您在机器学习笔记本的流程中遇到任何问题,请在那里提出问题或在下面发表评论。我强烈建议你在 MediumLinkedIn 上关注我,以便最大限度地接触科技前沿。

如果你想在旧的硬件上运行最新的模型,你可以参考这里的链接在云上免费运行它。

https://towards data science . com/running-jupyter-notebook-on-the-cloud-in-15-mins-azure-79b 7797 e4ef 6

评估:

作为一个被动的观察者,看着数据科学家向你展示的各种模型,你必须能够判断一个模型是否适合你的需求。请注意,我非常小心地避免在这里使用“好的 T4”或“坏的 T6”这个词。这是一个有意识的决定,因为它因情况而异。

然而,关于这一点,我已经听了太多遍了,我决心为您提供用例和直觉,以便您可以评估该模型是否适合您。在这里,我将强调指出,主管级别的人员可以查看数据科学 Jupyter 笔记本(代码)或提出问题,如下所述。

我将解释问题,但不解释答案,因为这是数据科学家的职责。

如果数据科学家无法回答,数据科学家需要进一步的培训,然后你才能决定相信结果。

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

卡洛斯·穆扎在 Unsplash 上的照片

  • 清理数据了吗?你采取了什么步骤,为什么?受影响的列有哪些?
  • 按行和列,丢失值 /损坏数据的百分比是多少?你如何处理丢失的数据?
  • 您是否对数据执行了异常值分析?你能给我看一下箱线图并向我解释它们以及你为什么决定保留异常值(或移除它们)的理由吗?
  • 给我看一下单变量图并详细解释给我听。请确保明确记录并提及有趣的趋势。
  • 给我看一下二元图并解释因变量的有趣趋势。确保你谈论的是与商业背景相关的最重要的变量。(索要热图)

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

凯文·Ku 在 Unsplash 上的照片

  • 对数据进行了特征工程吗?有哪些衍生/新功能?

  • 什么是测试列车拆分?为什么?火车测试数据中有溢出吗?

  • 是如何处理****分类变量并生成粘性变量的?有没有考虑过 哑变量陷阱

  • 在绘制模型时,**变量应逐个删除,**变量应在每个变量删除后进行统计和 VIF 分数分析。有人跟踪了吗?

  • 是否考虑过统计模型的 F 统计量p 值(一般小于 0.05)?

  • 有没有考虑过多重共线性的可能性?你能给我看看 VIF T21(可变通货膨胀系数)吗?(VIF > 10 可能表示多重共线性)

  • 你对测试数据的结果进行验证了吗?R 平方值是多少?(越接近 1 越好)

  • 什么是调整后的 R 平方值?这可用于比较具有不同数量特征的模型(越接近 1 越好)

如果你已经到了这种地步,那是令人钦佩的。这意味着你有真正的兴趣,你应该理解建模的细微差别。假设我们处理的是基本干净的数据,问上述问题将有助于我们解释线性回归模型。要进一步了解如何评估一个线性回归模型,你可以参考这里的链接。

结论:

虽然上述问题可能有助于您理解数据科学家所做的工作,但诠释数据科学的最佳方式就是亲自动手!无论是代码还是对代码的解释,获得理解的最佳方式是亲自动手,在 KaggleProjectPro 上查看一些行业标准实现。

[## Anish Mahapatra -数据科学家-穆适马公司| LinkedIn

我正在努力理解数学、商业和技术如何帮助我们在未来做出更好的决策…

www.linkedin.com](https://www.linkedin.com/in/anishmahapatra/)

我花了很多时间研究,并且非常喜欢写这篇文章。如果这对你有帮助,给我点爱!😄我也写关于千禧一代的生活方式咨询聊天机器人金融!如果您对此有任何问题或建议,请随时通过 LinkedIn联系我或关注我这里,我很想听听您的想法!

解释主成分分析(PCA)

原文:https://towardsdatascience.com/interpret-principal-component-analysis-pca-b8b4a4f22ece?source=collection_archive---------10-----------------------

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

故事。若昂·布兰科在 Unsplash 上的照片

数据可以告诉我们故事。反正我是这么听说的。作为一名为财富 300 强客户工作的数据科学家,我每天都要处理大量的数据,我可以告诉你,数据 可以 告诉我们故事。您可以对数据应用回归、分类或聚类算法,但特征选择和工程可能是一项艰巨的任务。很多时候,我看到数据科学家采用自动方法进行特征选择,如递归特征消除(RFE)或使用随机森林或 XGBoost 利用特征重要性算法。所有这些都是很好的方法,但可能不是获取所有数据“精华”的最佳方法。

理解 PCA 的细微差别

主成分分析的直觉

如果我们有两列代表 X 和 Y 列,你可以用 2D 轴来表示。假设我们添加了另一个维度,即 Z 轴,现在我们有了一个称为超平面的东西来表示这个 3D 空间中的空间。
现在,包含 n 维的数据集也无法可视化。

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

重新对齐轴以捕捉数据中的最大差异

PCA 的思想是在 n 维空间中重新排列轴,这样我们可以捕获数据中的大部分差异。在行业中,没有太大差异的特征被丢弃,因为它们对任何机器学习模型没有太大贡献。这些代表数据中大部分方差的新轴被称为主成分。

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

层次。Alexander Schimmeck 在 Unsplash 上拍摄的照片

使用主成分的原因是为了处理相关的预测值(多重共线性)以及在二维空间中可视化数据。

PCA 是一种统计过程,用于将可能相关的特征的观察结果转换成主成分,使得:

  • 它们彼此不相关
  • 它们是原始变量的线性组合
  • 它们有助于获取数据集中的最大信息

PCA 是数据中基础的变化。

主成分分析的方差

如果一个列的方差越小,它包含的信息就越少。PCA 以这样的方式改变基,使得新的基向量捕获最大方差或信息。这些新的基向量被称为主分量。

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

乔恩·泰森在 Unsplash 上的照片

主成分分析作为一种降维技术

想象一下很多数据科学家面临的情况。您已经收到数据,执行了数据清理、缺失值分析和数据插补。现在,您继续进一步分析数据,注意分类列,并通过创建虚拟变量对数据执行一次性编码。现在,我们进行特征工程,制造更多的特征。我有过这样的经历,这导致了超过 500 个,有时是 1000 个特性。

[## 在 15 分钟内在云上运行 Jupyter 笔记本电脑#Azure

文章做到了标题所说的。在 Azure 笔记本电脑(免费或付费)上运行 Jupyter Notebook,其成本仅为……

towardsdatascience.com](/running-jupyter-notebook-on-the-cloud-in-15-mins-azure-79b7797e4ef6)

我应该如何将如此多的特征输入到一个模型中,或者我应该如何知道重要的特征?如果我们继续使用递归特征消除或特征重要性,我将能够选择对预期输出贡献最大的列。然而,如果我们错过了一个对模型有更大贡献的特性呢?模型迭代的过程容易出错且繁琐。PCA 是我们可以利用的一种替代方法。

主成分分析是一种经典的降维技术,用于捕捉数据的本质。它可以用来捕捉超过 90%的数据方差。

:方差不表示列间关系或变量间的相关性。我们对协方差矩阵进行对角化,以获得如下基向量:

  • 无关联的
  • 线性相关
  • 解释最大方差的方向

PCA 的算法寻求找到对角化协方差矩阵的新的基向量。这是使用特征分解完成的。

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

照片由路易斯·费利佩Unsplash 上拍摄

主成分分析算法

  1. 将数据集中的所有信息表示为协方差矩阵。
  2. 对协方差矩阵执行特征分解。
  3. 新的基础是在步骤 I 中获得的协方差矩阵的特征向量
  4. 在新的基础上表示数据。新的基也被称为主成分。

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

我在 draw.io 中制作的 PCA 流

密码

现在,我在这里写的文章如果没有实际的编码经验是写不出来的。我相信你的代码应该在它该在的地方,不是在介质上,而是在 GitHub 上。

[## anishmahapatra 01/masters-机器学习-1

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

github.com](https://github.com/anishmahapatra01/masters-machine-learning-1/tree/master/04DimensionalityReduction-pca/pca-help-assignment/Anish-PCA-and-Clustering-Assignment)

我已经列出了注释代码和一个使用 PCA 的样本聚类问题,以及帮助您入门的必要步骤。

逻辑步骤详述如下:

  • 缺失值和异常值分析完成后,标准化/规范化数据以帮助模型更好地收敛
  • 我们使用 sklearn 的 PCA 包对数字和虚拟特征进行 PCA
  • 使用 pca.components_ 查看生成的 pca 成分
  • 使用 PCA.explained_variance_ratio_ 了解数据解释的差异百分比
  • Scree 图用于了解需要使用多少个主成分来获取数据中的期望方差
  • 运行机器学习模型以获得期望的结果

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

乔丹·怀特菲尔德Unsplash 上的照片

[## 在 10 分钟内解释线性回归(非技术性)

当有那么多伟大的文章和对最常见算法的解释时,为什么还要花力气…

towardsdatascience.com](/interpret-linear-regression-in-10-mins-non-technical-3f78f1f1dbd1)

结论:

恭喜你!如果你已经设法达到文章的这个阶段,你是令人敬畏的。起初,主成分分析似乎令人望而生畏,但是,随着你学会将它应用于更多的模型,你将能够更好地理解它。

所以,关于我的一点点。我是一家顶级数据科学公司的数据科学家,目前正在攻读数据科学硕士学位。我花了很多时间研究,并且非常喜欢写这篇文章。如果这对你有帮助,给我点爱!😄我也写关于千禧一代的生活方式咨询聊天机器人财经!如果您对此有任何问题或建议,请随时在 LinkedIn 上联系我或关注我这里,我很想听听您的想法!

[## Anish Mahapatra -数据科学家-穆适马公司| LinkedIn

我正在努力理解数学、商业和技术如何帮助我们在未来做出更好的决策…

www.linkedin.com](https://www.linkedin.com/in/anishmahapatra/)

解释你的回归

原文:https://towardsdatascience.com/interpret-your-regression-d5f93908327b?source=collection_archive---------50-----------------------

逐步实现逻辑回归

如果你手头有一个分类任务,你的 go-to 算法是什么?如果不是逻辑回归或者即使是,你有没有发现线性回归和逻辑回归之间的相似之处?如果是,那是因为逻辑回归本身就是一个线性模型。但是不要担心,在这篇文章中,你将通过解释一个逻辑回归和它的参数,你将得到为什么这个算法被认为是线性的答案。

使用的数据集是 UCI 机器学习库中可用的宫颈癌(风险因素)数据集。你可以在这里从那里得到干净的版本。

目标变量为‘活检’,存储布尔值 0,代表癌症阴性病例,1,代表癌症阳性病例。

预测器或特征是-

  • 荷尔蒙避孕药——(对/错)
  • 抽烟——(对/错)
  • 怀孕数量
  • 性病:诊断数量
  • 宫内节育器——(对/错)

数据集的清理和预处理、分类变量的虚拟编码和分割以通常的方式完成。接下来的步骤可以参考这里的

微软研究院的 InterpretML python 包已经用于该数据集的探索。

这篇文章遵循类似于解释你的回归——线性回归的结构,并处理逻辑回归的可解释性。

从目标变量的可视化开始探索性数据分析,观察到 2 个类别非常不平衡,因此,这是不平衡分类的情况。所有的分类变量本身也是不平衡的。

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

连续特征“怀孕次数”是高度正偏的,即右尾巴比左尾巴更长。这种分布预计会减少怀孕次数,如 1 次、2 次等。更加普遍。

逻辑回归方法用于分类任务,假设二项式分布产生了目标变量,我们需要为一组给定预测值的成功概率建模“p”。这里的‘p’是女性患宫颈癌的概率。

由于逻辑回归被认为是线性模型,为了简单起见,首先考虑一个简单的线性方程

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

记住标准 8 课,函数是在数学中首次引入的,考虑这样一个函数,logit 函数,给出如下

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

logit 函数的值域为[0,1],值域范围为∞到∞。

现在,考虑这个函数的逆函数,

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

这是 逻辑函数 ,其范围在∞~之间,域在 0 ~ 1 之间。

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

逻辑曲线

现在让我们来看最有趣的部分。考虑一个介于 0 和 1 之间的值“p”。所以, f§ = log { p/(1-p) } 。如果假设“p”是女性患宫颈癌的概率,那么 p/(1-p) 是女性可能患宫颈癌的“几率”,其中“几率”只是定义事件概率的另一种方式。因此, 可以被认为是女性可能患有癌症的对数几率。

现在,f§的范围位于∞和∞之间,可以有把握地假设:

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

另一种写法是

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

这个公式用于解释模型,因为 logit 可以解释为成功几率的对数

对于将线性模型与结果参数联系起来的任意函数 g§ = y,该模型被称为 广义线性模型 。所以,当你在线性回归模型上使用逻辑斯蒂函数时,你会得到逻辑斯蒂回归的算法。

现在剩下的唯一工作是将概率值分类,这是使用一个简单的条件完成的。如果’ p’ > 0.5,则类为 1,否则为 0。

在宫颈癌数据集上训练逻辑回归给出了93%的准确度,这看起来相当高,但是由于这是一个不平衡的分类,因此需要进一步分析。

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

逻辑回归的权重被解释为特征 x 的一个单位的变化改变了𝛽单位的成功几率的对数,就像简单线性回归的情况一样。但是为了简单起见,解释是根据比值比进行的,比值比只不过是对数比值的指数。

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

在所有其他特征保持不变的情况下,怀孕数量的增加改变或增加了癌症与非癌症的几率 1.07 倍。

对于使用宫内节育器(IUD)的女性,在所有其他特征保持不变的情况下,与未使用 IUD 的女性相比,患癌与未患癌的几率低 0.58 倍。

这些解释总是附带一个注释,即“所有其他特征保持不变”,以避免变量之间的相互作用。

为了进一步分析分类模型的准确性,绘制了精度-召回曲线,因为这是不平衡分类的情况。

“然而,如果类分布中有很大的偏差,ROC 曲线可能会对算法的性能表现出过于乐观的看法。[……]在信息检索中经常使用的精确回忆(PR)曲线,已经被引用作为 ROC 曲线的替代,用于类别分布中具有大偏斜的任务。”

——杰西·戴维斯和马克·戈德里奇,
(引自戴维斯,j .和戈德里奇,M. 2006,

精确回忆和 ROC 曲线的关系,ICML 06:第 23 届机器学习国际会议论文集)

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

精确回忆曲线提醒人们注意这一点:对于大多数阈值来说,模型只是稍微高于无技能线。无技能线是一条平行于 x 轴的线,其值为数据集中阳性病例的比率,在本例中为 0.06。但这与 93%的高准确率相矛盾。

对混乱矩阵的研究将澄清这种情况。

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

观察到该分类器已经不能正确地分类任何阳性类别(类别 1)。大多数情况属于 0 类,并且所有预测都属于 0 类,这一事实导致分类器的高准确度。因此,这种类的不平衡需要通过对数据集中的类 1 进行过采样或对类 0 进行欠采样来补偿,目前这已经超出了本文的范围。

这就是逻辑回归如何发挥作用的,人们希望这种算法被认为是线性的背后的逻辑,以及对权重的解释现在已经很清楚了。逻辑回归仍然是机器学习世界中最强大的算法之一,由于其简单性,在不久的将来不会对其地位和重要性构成威胁。

本文基于 Christoph Molnar 的《可解释的机器学习》一书的探索,第 4.2 节你可以在这里找到 Github repo

解释你的回归

原文:https://towardsdatascience.com/interpret-your-regressions-1-cae5c2f4c0f9?source=collection_archive---------37-----------------------

线性回归演练

“如果你把数据折磨够了,自然总会招供的。”
——罗纳德·科斯
(引自科斯,R. H. 1982。经济学家应该如何选择?
美国企业研究所,华盛顿特区)

你有多少次冒险越过。fit()和。你做的无数机器学习模型的 predict()方法?想知道术语“权重”实际上代表什么,以及它在不同算法中的不同解释吗?在梯度推进中,预测是由先前的树模型做出的预测的加权和,因此,权重指的是模型中每个变量的相对重要性。另一方面,在广义线性模型中,权重意味着目标变量随着相应特征的单位变化而变化。

在本文中,您将了解机器学习世界中最广泛使用的算法之一——线性回归,并且在文章结束时,您将揭示这个看似简单的算法所包含的许多秘密。

这里使用的数据集是 UCI 机器学习库中可用的自行车共享数据集。你可以从这里得到清理后的版本。

目标变量,也称为回归变量,是某一天借出的自行车总数。

使用的预测器或回归器是-

  • 季节:季节(1:冬季,2:春季,3:夏季,4:秋季)
  • 节假日:当天是否为节假日
  • 工作日:如果该日既不是周末也不是节假日,则为 1,否则为 0。
  • 天气状况:

- 1:晴,少云,部分多云,部分多云

- 2:薄雾+多云,薄雾+碎云,薄雾+少云,薄雾

- 3:小雪、小雨+雷雨+散云、小雨+散云

- 4:暴雨+冰托盘+雷雨+雾、雪+雾

  • temp :归一化温度,单位为摄氏度。
  • 嗡嗡声:归一化湿度。
  • 风速:归一化风速。
  • 自 2011 年起天数:自 2011 年 1 月 1 日起的天数。

数据集的初始预处理、虚拟编码和分割是以通常的方式完成的。接下来的步骤可以参考这里的

InterpretML python 包 已用于该数据集的探索。InterpretML 是一个开源的 python 包,用于训练可解释的机器学习模型和解释黑盒系统。

从目标变量的可视化开始探索性数据分析,可以假设它遵循正态分布,因为它似乎是近似对称的。

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

接下来,我们观察到,所有类别的分布都呈现出明显的不平衡,回归方程与“temp”和“days_since_2011”的正相关值分别为 0.63。这两个特征预计将在模型中占有很高的权重。

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

相关矩阵

另一个要观察的点是‘天气坐 _ 1’和‘天气坐 _ 2’之间的相关值为-0.94。这让我们想到了线性回归的假设之一,不存在多重共线性。多重共线性意味着回归模型中的部分或全部解释变量之间存在某种关系。比如,在家庭用电量对其收入和房屋面积的回归中,有一个约束条件,即收入较高的家庭通常拥有较大的房屋。因此,不可能分别测量两个预测因素对目标的影响。在给定的数据集中,“weathersit_1”和“weathersit_2”都是指晴空和有雾(不清晰)的天空,它们是互补事件,因此,它们之间存在高度负相关。这两个变量都保存在数据集中,不会被删除,但是它们对自行车数量的影响无法以通常的方式确定。

训练一个简单的线性回归模型,假设目标变量与特征共享一个线性关系,给我们一个 79%的相关值。因此,可以说该模型能够解释目标变量中存在的全部变化的 79%。

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

查看残差的直方图显示,分布是负偏斜的,即左尾部比右尾部相对更长。这就违背了homoscedastacy的假设,即误差分布的方差应该是常数,或者在一个模型中,

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

从图中可以清楚地看出,残差不遵循这样的分布,因此可以说是异方差的。因此,在这种情况下,不能使用普通的最小二乘法(这是执行线性回归最常用的方法),而需要使用加权最小二乘法。

然而,既然模型已经建立和拟合,让我们继续解释模型的权重。

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

x 轴代表分配给相应预测变量的权重的数值。

在连续特征中,“温度”的权重最高。这与我们的观察结果一致,即“温度”与自行车数量之间存在有效的相关性。在所有其他特征保持不变的情况下,气温每升高 1 摄氏度,自行车的预期数量就会增加 5282 辆。

“weathersit_1”表示晴朗的天气条件,并在分类特征中获得最大权重。在这样的日子里,预计会有更多的人去骑自行车,这是正常的如果所有其他特征保持不变,与其他天气条件相比,自行车的数量估计会多 1730 辆。

这些解释总是带有“假设所有其他特征保持不变”的条款,因为即使一个特征值发生变化,也会在模型中产生交互作用,从而影响目标变量。

需要注意的一点是,“days_since_2011”在模型中似乎没有任何重要性,尽管它与目标变量存在相关性。为了进一步研究这个问题,我们来看一下个体预测是如何进行的。

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

x 轴代表各自权重和特征值的乘积。

与整个数据集相比,某些要素对预测自行车数量的贡献非常小或非常大。与平均值和特征“days_since_2011”相比,温度(0.48 度)对预测值的贡献非常小,因为此实例来自 2012 年末(703 天)。

数据集中引入了“days_since_2011”特征,以说明自行车租赁服务随着时间的推移变得越来越受欢迎的趋势。这导致将自相关引入到模型中。比如说,在消费支出对收入的时间序列回归中,往往会发现,当期的消费支出,除了当期的收入之外,还取决于上一期的消费支出。如果你的收入是卢比。每月 10000,在三月,你花了卢比。9000,你在 4 月这个月花的少是很自然的。像这样的回归被称为自回归,因为其中一个解释变量是因变量的滞后值。在该数据集中,可能是第 7 天下了大雨,因此,接下来的几天自行车数量比平时有所减少。因此,这种自回归需要通过变量的变换来调整。

既然你已经读完了这篇文章,我们假设你已经了解了“简单”线性回归的广阔世界。希望这篇文章能帮助你更好地理解算法,建立更有效的模型。

本文基于克里斯托夫·莫尔纳尔的《可解释的机器学习》一书的探索,第 4.1 节你可以在这里找到 Github repo

可解释性和 TCAV

原文:https://towardsdatascience.com/interpretability-and-tcav-1a08e0a6cf63?source=collection_archive---------37-----------------------

确保专家知识反映在你的深度学习模型中

当我在写硕士论文并试图获得研究成果时,我暂停了一分钟,想真正欣赏机器学习领域的突破性发现。这些想法只是基于一些常识和简单的数学。

我目前正在研究一个模型预测的可解释性。我想分享我对什么是可解释性的理解,并进一步解释概念激活向量及其重要性。一如既往,我会尽可能用简单的语言来解释。这里有几个概念可以帮助你。

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

照片由像素上的 Pixabay 拍摄

**可解释性/解释:**假设,有一个模型被训练来将一组图像分类为猫或者不是猫。可解释性是解释为什么一个特定的图片被归类为猫。这对于确认领域专业知识是否已经反映在 NN 模型中是很重要的。此外,它有助于用户建立信任,这是使用模型所必需的。

**局部解释:**如果我们考虑一个单一的数据点/一只猫的单一图像,并解释为什么它被这样分类,那么它将是一个局部解释。假设,它可能是那只猫的脸和身体的像素。

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

图片:Hjvannes/ 维基共享资源

全局解释:将解释在这种情况下,在模型中产生分类的特定特征或概念。在将图像分类为猫或不是猫的例子中,全局解释可能是猫的胡须或耳朵。你可以看到我强调了模型这个词,因为这些特性有助于理解模型的整体行为,而不仅仅是一个单独的图像。

好了,我想你现在已经掌握了基本知识。

现在让我们讨论一种局部解释方法,即 s aliency maps 。对于那些不太了解显著图的人来说,它指定了每个输入特征对于预测的重要性。也就是说,类别概率对每个像素的导数,即像素的微小变化会改变特定类别的概率吗?如果是,那么增加多少?

显著图的问题是确认偏差,我们只看到我们认为真实的东西。因此,现在代替人类的主观判断,如果我们有一个定量的判断来理解哪个概念更重要,这将是一个更好的质量测量。此外,由于人类不考虑像素,我们应该考虑人类可以理解的高级概念。此外,理解一个模型为什么起作用是相当重要的,而不是局部的解释。所以我们想集中在一个全球性的解释上。这些欲望导致了和的关系,激发了的创造力。

TCAV 提供了一个定量的解释,说明我们在为预测进行训练后得出的概念有多重要。但是,你如何表达一个概念呢?我们用一个向量来做,即ConceptAactivationVector(CAV)。

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

(a)概念和随机对象的图像(b)类别图像©从图像的模型中收集激活(d)线性分类器和与决策边界正交的 CAV)使用概念中 w.r.t .变化的导数的 TCAV 分数。来源: TCAV 论文 [1]

对于 CAV,我们拍摄概念的图像和一些其他随机图像,然后我们拍摄我们正在研究的网络的激活。现在,因为我们有激活和概念,我们训练一个线性分类器来从随机图像中分离概念。与决策边界正交的向量给出了 CAV,它是一个向概念图像移动并远离随机图像的向量。

现在对于 TCAV 分数,我们做一些类似于我们在显著图中做的事情。TCAV 分数告诉我们每个概念对预测有多重要。这意味着类别概率对每个概念的导数,即概念的微小变化会改变特定类别的概率。

论文中,TCAV 被应用于预测糖尿病视网膜病变(DR)这一影响眼睛的糖尿病并发症的现实世界问题。该模型被训练为使用基于复杂标准的 5 分分级来预测 DR 水平,其中 0 级对应于没有 DR,4 级对应于增生性 DR。医生根据诊断概念诊断 DR,例如微动脉瘤(MA)或泛视网膜激光疤痕(PRP),不同的概念在不同的 DR 水平上更突出。 1

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

4 级和 1 级 DR 的 TCAV 结果。相关的概念用绿色表示,不相关的用红色表示。来源: TCAV 论文

使用 TCAV 测试了这些概念对模型的重要性分数。对于某些 DR 级别,TCAV 认为正确的诊断概念非常重要。然而,该模型经常将 1 级(轻度)过度预测为 2 级(中度)。考虑到这一点,医生说她想告诉模型不要强调 HMA 对于 1 级的重要性。因此,当专家不同意模型预测时,TCAV 可能有助于帮助他们解释和修复模型错误。因此,确保领域专业知识在模型中得到反映。[ 1

这很棒,但是这个工具需要人类收集相关的概念。有进一步的研究讨论了如何在没有人类监督的情况下做到这一点。

参考文献

[1]https://arxiv.org/pdf/1711.11279.pdf 论文:TCAV

W & B——CAM 和 GradCAM 深度学习的可解释性

原文:https://towardsdatascience.com/interpretability-in-deep-learning-with-w-b-cam-and-gradcam-45ba5296a58a?source=collection_archive---------26-----------------------

生产中的机器学习

这份报告将回顾 Grad-CAM 如何反驳神经网络不可解释的常见批评。

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

点击查看互动报道。所有的代码都可以在这里找到。

训练一个分类模型很有趣,但是你有没有想过你的模型是如何进行预测的?你的模型是不是真的看了图像中的狗,才以 98%的准确率将其归类为狗?很有趣,不是吗。在今天的报告中,我们将探讨为什么深度学习模型需要可解释,以及一些有趣的方法来窥视深度学习模型的内幕。深度学习的可解释性是一个非常令人兴奋的研究领域,在这个方向上已经取得了很多进展。

那么,为什么要关心可解释性呢?毕竟,企业或项目的成功主要是由模型的准确性来判断的。但是为了在现实世界中部署我们的模型,我们还需要考虑其他因素。例如,有种族偏见?或者,如果它对人类的分类准确率为 97%,但对男性的分类准确率为 99%,而对女性的分类准确率仅为 95%,那该怎么办?

了解模型如何做出预测也可以帮助我们调试您的网络。[查看这篇关于使用 PyTorch 和 W & B 使用渐变和可视化调试神经网络的博文,了解其他一些有帮助的技术]。

在这一点上,我们都熟悉这样一个概念,即深度学习模型根据用其他更简单的表示形式表达的学习表示进行预测。也就是说,深度学习允许我们从更简单的概念中构建复杂的概念。这里有一篇惊人的distilt Pub帖子,可以帮助你更好地理解这个概念。我们还知道,在一些监督学习任务(如图像分类)的情况下,这些表示是在我们用输入数据和标签训练模型时学习的。对这种方法的批评之一是神经网络中学习到的特征是不可解释的。

今天,我们将着眼于解决这一批评的两种技术,并揭示神经网络学习的“黑盒”性质。

  • 类别激活图(CAM)
  • 梯度凸轮

类别激活映射

已经观察到,卷积神经网络的各层的卷积单元充当对象检测器,即使在为分类任务训练网络时没有提供关于对象位置的这种先验。尽管卷积具有这种显著的性质,但是当我们使用完全连接的层来执行分类任务时,它就失去了作用。为了避免使用完全连接的网络,一些架构,如网络中的网络(T2)和谷歌网络(T4)都是完全卷积的神经网络。

全局平均池(GAP)是这种架构中非常常用的层。它主要用作调整剂,以防止训练时过度拟合。学习区分性定位的深度特征的作者发现,通过调整这样的架构,他们可以扩展 GAP 的优势,并可以保留其定位能力,直到最后一层。让我们试着快速理解使用 GAP 生成 CAM 的过程。

**类别激活图简单地指示图像中的区别区域,CNN 使用该区域将该图像分类到特定类别中。**对于这种技术,网络由 ConvNet 和 Softmax 层(用于多类分类)组成,在卷积特征图上执行全局平均池。该图层的输出用作全连接图层的要素,该图层可生成所需的分类输出。给定这个简单的连通性结构,我们可以通过将输出层的权重投射回卷积特征图上来识别图像区域的重要性。

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

图 CAM 的理想网络架构( 来源 )

让我们尝试实现这一点。😄

步骤 1:修改你的模型

假设您已经用 Conv 块和几个完全连接的层构建了深度分类器。我们将不得不修改这个架构,这样就没有任何完全连接的层。我们将在输出层(softmax/sigmoid)和最后一个卷积块之间使用GlobalAveragePooling2D层。

CAMmodel对我们的猫狗分类器进行了必要的修改。这里我用预先训练好的 **VGG16** 模型来模拟我已经训练好的猫狗分类器。

def CAMmodel():
     ## Simulating my pretrained dog and cat classifier. 
     vgg = VGG16(include_top=False, weights='imagenet')
     vgg.trainable = False
     ## Flatten the layer so that it's not nested in the sequential model.
     vgg_flat = flatten_model(vgg)
     ## Insert GAP
     vgg_flat.append(keras.layers.GlobalAveragePooling2D())
     vgg_flat.append(keras.layers.Dense(1, activation='sigmoid'))

     model = keras.models.Sequential(vgg_flat)
     return model

一个简单的实用程序flatten_model返回我的预训练模型中的图层列表。这样做是为了在使用Sequential模型修改时各层不会嵌套,并且可以访问最后一个卷积层并将其用作输出。我在从flatten_model返回的数组中追加了GlobalAveragePooling2DDense。最后,返回顺序模型。

def flatten_model(model_nested):
    '''
    Utility to flatten pretrained model
    '''
    layers_flat = []
    for layer in model_nested.layers:
       try:
          layers_flat.extend(layer.layers)
       except AttributeError:
          layers_flat.append(layer)

    return layers_flat

接下来,我们用适当的模型输入形状调用model.build()

keras.backend.clear_session()
model = CAMmodel()
model.build((None, None, None, 3)) # Note
model.summary()

第二步:用CAMLogger回调重新训练你的模型

由于引入了新的层,我们必须重新训练模型。但是我们不需要重新训练整个模型。我们可以通过使用vgg.trainable=False来冻结卷积块。

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

图 2:再训练模型后的度量图。

观察:

  • 就训练和验证准确性而言,模型性能有所下降。我达到的最佳训练和验证精度分别是99.01%95.67%
  • 因此,为了实施 CAM,我们必须修改我们的架构,从而降低模型性能。

步骤 3:使用CAMLogger查看类激活图

CAM类的__init__中,我们初始化cammodel。注意这个cammodel有两个输出:

  • 最后一个卷积层的输出(此处为block5_conv3
  • 模型预测(softmax/sigmoid)。
class CAM:
  def __init__(self, model, layerName):
    self.model = model
    self.layerName = layerName
    ## Prepare cammodel
    last_conv_layer = self.model.get_layer(self.layerName).output
    self.cammodel = keras.models.Model(inputs=self.model.input,
                                       outputs=[last_conv_layer, self.model.output])

  def compute_heatmap(self, image, classIdx):
    ## Get the output of last conv layer and model prediction
    [conv_outputs, predictions] = self.cammodel.predict(image)
    conv_outputs = conv_outputs[0, :, :, :]
    conv_outputs = np.rollaxis(conv_outputs, 2)
    ## Get class weights between 
    class_weights = self.model.layers[-1].get_weights()[0]
    ## Create the class activation map.
    caml = np.zeros(shape = conv_outputs.shape[1:3], dtype=np.float32)
    for i, w in enumerate(class_weights[:]):
      caml += w * conv_outputs[i, :, :] caml /= np.max(caml)
    caml = cv2.resize(caml, (image.shape[1], image.shape[2]))
    ## Prepare heat map
    heatmap = cv2.applyColorMap(np.uint8(255*caml), cv2.COLORMAP_JET)
    heatmap[np.where(caml < 0.2)] = 0 return heatmap
  def overlay_heatmap(self, heatmap, image):
    img = heatmap*0.5 + image
    img = img*255
    img = img.astype('uint8')
    return (heatmap, img)

compute_heatmap方法负责生成热图,这是 CNN 用来识别类别(图像类别)的区分区域。

  • 输入图像上的cammodel.predict()将给出形状(1,7,7,512)的最后一个卷积层的特征图。
  • 我们还提取形状(512,1)的输出层的权重。
  • 最后,计算从最终层提取的权重和特征图的点积,以产生类别激活图。

现在我们把所有东西都包装在回调中。CamLogger回调集成了wandb.log()方法,将生成的激活图记录到 W & B 运行页面上。通过调用overlay_heatmap()方法,从 CAM 返回的热图最终叠加在原始图像上。

步骤 4:从 CAM 中得出结论

从下图中我们可以得出很多结论。👇注意examples图表包含验证图像及其预测分数。如果预测得分大于 0.5,则网络将图像分类为狗,否则分类为猫。而CAM图表有其对应的类激活图。让我们回顾一些观察结果:

  • 该模型通过查看图像中的面部区域将图像分类为狗。对于一些图像,它能够看到整个身体,除了爪子。
  • 该模型通过观察耳朵、爪子和胡须将这些图像归类为猫。

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

图 3:看着狗的脸和猫的胡须,爪子和耳朵。

  • 对于错误分类的图像,模型没有看到它应该看到的地方。因此,通过使用 CAM,我们能够解释这种错误分类背后的原因,这真的很酷。

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

图 4: CNN 在看别的东西。

这是为什么呢?即使耳朵、爪子和胡须出现在图像中,为什么它会看着别的东西呢?我能想到的一个原因是,由于我们没有在我们的猫狗数据集上微调我们的预训练VGG16,作为特征提取器的 CNN 并不完全熟悉我们数据集中出现的模式(分布)。

  • 当同一类的多个实例出现在图像中时,模型只查看其中的一个。但这没关系,因为我们不关心物体检测。请注意,由于这个原因,可信度很低。

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

图 5:只查看一个事件。

其他用例:

CAM 可用于弱监督的目标定位任务。链接论文的作者在 ILSVRC 2014 基准数据集上测试了 CAM 执行本地化任务的能力。该技术能够在该数据集上实现 37.1%的目标定位前 5 名误差,这接近于由完全监督的 CNN 方法实现的 34.2%的前 5 名误差。

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

图 6:更多的例子。点击此处查看更多此类示例。

梯度加权类激活图

尽管 CAM 很棒,但它也有一些局限性:

  • 为了使用 CAM,需要修改模型。
  • 修改后的模型需要重新训练,这在计算上是昂贵的。
  • 因为完全连接的致密层被移除。模型性能肯定会受到影响。这意味着预测分数没有给出模型能力的实际情况。
  • 用例受到架构约束的限制,即在输出层之前执行卷积映射间隙的架构。

什么是好的视觉解释?:

  • 当然,该技术应该将图像中的类本地化。我们在 CAM 中看到了这一点,而且效果非常好。
  • 应该捕获更精细的细节,即激活图应该是高分辨率的。

因此 Grad-CAM:通过基于梯度的定位从深度网络进行视觉解释,这是一篇非常惊人的论文,作者提出了对 CAM 和以前方法的修改。他们的方法使用流入最终卷积层的任何目标预测的梯度来产生粗略的定位图,该定位图突出显示图像中的重要区域,用于预测图像的类别。

因此 Grad-CAM 是 CAM 的严格推广。除了克服 CAM 的局限性,它还适用于涉及 CNN 的不同深度学习任务。它适用于:

  • 具有全连接层(例如 VGG)的 CNN,无需对网络进行任何修改。
  • CNN 用于结构化输出,如图像字幕。
  • CNN 用于具有多模态输入的任务,如视觉问答或强化学习,无需架构改变或重新训练。

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

图 7: Grad-CAM 概述( 来源 )

让我们实现它😄

第一步:你的深度学习任务

我们将关注图像分类任务。与 CAM 不同,我们不必为此任务修改模型并重新训练它。

我使用了一个在ImageNet上预先训练的VGG16模型作为我的基础模型,我用它来模拟迁移学习。

通过使用vgg.trainable = False,基线模型的层变成不可训练的。请注意我是如何在模型中使用完全连接的层的。

def catdogmodel():
  inp = keras.layers.Input(shape=(224,224,3))
  vgg = tf.keras.applications.VGG16(include_top=False, weights='imagenet', input_tensor=inp,
                                            input_shape=(224,224,3))
  vgg.trainable = False

  x = vgg.get_layer('block5_pool').output
  x = tf.keras.layers.GlobalAveragePooling2D()(x)
  x = keras.layers.Dense(64, activation='relu')(x)
  output = keras.layers.Dense(1, activation='sigmoid')(x) model = tf.keras.models.Model(inputs = inp, outputs=output)

  return model

你会在链接的笔记本中找到班级GradCAM。这是一个来自 Grad-CAM 的修改实现:用 Keras、TensorFlow 和 Deep Learning 可视化类激活图,这是一篇令人惊叹的博文,作者是 PyImageSearch.com 的 Adrian Rosebrook。我强烈建议查看那篇博文中的GradCAM类的逐步实现。

我对它做了两处修改:

  • 在进行迁移学习时,即如果你的目标(最后一层)卷积层不可训练,tape.gradient(loss, convOutputs)会返回None。这是因为tape.gradient()默认不跟踪不可训练的变量/层。因此,要使用该层来计算你的渐变,你需要通过在目标层输出(张量)上调用tape.watch()来允许GradientTapewatch。因此发生了变化,
with tf.GradientTape() as tape:
      tape.watch(self.gradModel.get_layer(self.layerName).output)
      inputs = tf.cast(image, tf.float32)
      (convOutputs, predictions) = self.gradModel(inputs)
  • 最初的实现没有考虑二进制分类。最初的作者也谈到了输出的软最大化。所以为了训练一个简单的猫狗分类器,我做了一个小小的修改。因此发生了变化,
if len(predictions)==1:
      # Binary Classification
      loss = predictions[0]
    else:
      loss = predictions[:, classIdx]

GRADCAM类可以在模型训练后使用,也可以作为回调使用。这是他博客文章的一小段摘录。

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

第三点激励我从事这个项目。我围绕这个GRADCAM实现构建了一个定制回调,并使用wandb.log()来记录激活映射。因此,通过使用这个回调,您可以在训练时使用 GradCAM。

第三步:使用GRADCamLogger并训练

鉴于我们正在处理一个简单的数据集,我只训练了几个时期,这个模型似乎工作得很好。

下面是 GradCAM 自定义回调。

class GRADCamLogger(tf.keras.callbacks.Callback):
    def __init__(self, validation_data, layer_name):
      super(GRADCamLogger, self).__init__()
      self.validation_data = validation_data
      self.layer_name = layer_name def on_epoch_end(self, logs, epoch):
      images = []
      grad_cam = [] ## Initialize GRADCam Class
      cam = GradCAM(model, self.layer_name) for image in self.validation_data:
        image = np.expand_dims(image, 0)
        pred = model.predict(image)
        classIDx = np.argmax(pred[0])

        ## Compute Heatmap
        heatmap = cam.compute_heatmap(image, classIDx)

        image = image.reshape(image.shape[1:])
        image = image*255
        image = image.astype(np.uint8) ## Overlay heatmap on original image
        heatmap = cv2.resize(heatmap, (image.shape[0],image.shape[1]))
        (heatmap, output) = cam.overlay_heatmap(heatmap, image, alpha=0.5) images.append(image)
        grad_cam.append(output) wandb.log({"images": [wandb.Image(image)
                            for image in images]})
      wandb.log({"gradcam": [wandb.Image(cam)
                            for cam in grad_cam]})

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

图 8:培训后的指标。

步骤 4:从 GradCAM 中得出结论

GradCAM 是 CAM 的严格概括,应优先于 CAM。为了理解这项技术的理论基础,我推荐阅读 Divyanshu Mishra 的使用 GradCam 揭开卷积神经网络的神秘面纱,或者只是阅读链接的论文。我们可以得出一些有趣的结论,包括:

  • 模型看着狗的脸来正确分类,而我不确定猫。

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

图 8:看狗狗的脸。

  • 该模型能够在图像中定位该类的多个实例,即预测分数考虑了图像中的多个狗和猫。

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

图 9:查看多次出现。

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

图 10:更多的例子。点击此处查看更多此类示例。

结论

类激活图Grad-CAMs 是将一些可解释性/可解释性引入深度学习模型的几种方法,并且被相当广泛地使用。这些技术最吸引人的是执行目标定位任务的能力,即使没有事先训练模型的位置。GradCAM 在用于图像字幕时,可以帮助我们理解图像中的哪个区域用于生成某个单词。当用于视觉 Q & A 任务时,它可以帮助我们理解为什么模型会得出特定的答案。尽管 Grad-CAM 具有类别区分能力,并能定位相关图像区域,但它无法像像素空间梯度可视化方法(如引导反向传播和去卷积)那样突出精细细节。因此,作者将 Grad-CAM 与引导反向传播相结合。

感谢阅读这篇报道直到最后。我希望你发现这里介绍的回调对你的深度学习魔法有帮助。请随时在 Twitter( @ayushthakur0 )上与我联系,获取对本报告的任何反馈。谢谢你。

机器学习中的可解释性

原文:https://towardsdatascience.com/interpretability-in-machine-learning-ab0cf2e66e1?source=collection_archive---------14-----------------------

为什么我们需要理解我们的模型如何做出预测

我们应该永远相信一个表现良好的模型吗?一个模特可能会拒绝你的抵押贷款申请或者诊断出你患有癌症。这些决定的后果是严重的,即使它们是正确的,我们也希望得到解释。一个人可以告诉你,你的收入太低,还不上抵押贷款,或者某个特定的细胞群可能是恶性的。一个提供类似解释的模型会比一个只提供预测的模型更有用。

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

来源: flaticon

通过获得这些解释,我们说我们正在解释一个机器学习模型。在本文的其余部分,我们将更详细地解释可解释性的含义。然后,我们将继续讨论能够解释您的模型的重要性和好处。然而,仍然有一些不利因素。最后,我们将讨论这些问题,以及为什么在某些情况下,你可能更喜欢一个不太容易解释的模型。

我们所说的可解释性是什么意思?

在之前的一篇文章中,我讨论了模型可解释性的概念,以及它与可解释的机器学习的关系。总而言之,可解释性是模型能够被人类理解的程度。如果人类更容易理解模型 A 如何做出预测,那么模型 A 比模型 B 更容易解释。例如,卷积神经网络比随机森林更难解释,而随机森林比决策树更难解释。

记住这一点,我们说一个模型是一个可解释的模型,如果它可以在没有任何其他帮助/技术的情况下被理解。可解释的模型是高度可解释的。相比之下,如果没有额外技术的帮助,可解释的模型太复杂而难以理解。我们说这些模型可解释性低。我们可以在图 1 中看到这些概念是如何关联的。一般来说,模型可以分为可解释的或可解释的,但人们会有不同意的灰色区域。

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

图 1:可解释性谱(来源:作者)

为什么可解释性很重要?

如前所述,我们需要额外的技术,如特征重要性时间,来理解可解释模型是如何工作的。实现这些技术可能需要大量的工作,而且重要的是,它们仅仅提供了一个模型如何工作的近似值。所以,我们不能完全确定我们理解了一个可解释的模型。在比较可解释的模型时,我们可能会遇到类似的情况。

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

来源: flaticon

例如,逻辑回归和决策树。这些都不需要额外的技术,但逻辑回归可能仍然需要更多的努力来解释。我们需要了解 sigmoid 函数以及系数与赔率/概率的关系。这种复杂性也可能导致我们解释上的错误。一般来说,模型的可解释性越强;越容易理解,我们就越能确定我们的理解是正确的。可解释性很重要,因为从中可以获得很多好处。

更容易解释

我们的第一个好处是,可解释的模型更容易向其他人解释。对于任何话题,我们理解得越好,就越容易解释。我们还应该能够用简单的术语解释它(即不提及技术细节)。在工业界,有许多人可能希望对你的模型如何工作有简单的解释。这些人不一定有机器学习的技术背景或经验。

例如,假设我们创建了一个模型来预测某人是否会提出人寿保险索赔。我们希望使用这种模式来实现公司人寿保险核保的自动化。为了在模型上签字,我们的老板会要求详细解释它是如何工作的。一个不满的顾客可能会要求解释为什么他们没有被批准投保人寿保险。监管者甚至可以要求法律做出这样的解释。

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

来源: flaticon

试图向这些人解释神经网络如何进行预测可能会引起很多混乱。由于不确定性,他们甚至可能不接受解释。相比之下,像逻辑回归这样的可解释模型可以用人类的术语来理解。这意味着它们可以用人类的术语来解释。例如,我们可以准确地解释顾客的吸烟习惯在多大程度上增加了他们的死亡概率。

更容易检测、检查和修复错误

上述关系是因果关系(即吸烟导致癌症/死亡)。一般来说,机器学习模型只关心联想。例如,模型可以使用某人的原籍国来预测他们是否患有皮肤癌。然而,就像吸烟一样,我们能说某人的国家导致癌症吗?这是因为皮肤癌是由阳光引起的,而一些国家只是比其他国家更阳光。所以只能说皮肤癌和某些国家有关。

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

图 2:狼对哈士奇的实验(来源: M .图里奥·里贝罗,s .辛格& C .盖斯特林

华盛顿大学的研究人员做了一个实验,这是一个很好的例子,说明了联想可能出错的地方。研究人员训练了一个图像识别模型,将动物分类为哈士奇或狼。利用莱姆,他们试图理解他们的模型是如何做出预测的。在图 2 中,我们可以看到该模型基于图像背景进行预测。如果背景有雪,动物总是被归类为狼。他们基本上建立了一个探测雪的模型。

问题是狼与雪联系在一起。狼通常会出现在雪地上,而哈士奇则不会。这个例子告诉我们,模型不仅可以做出不正确的预测,还可以以错误的方式做出正确的预测。作为数据科学家,我们需要对我们的模型进行感官检查,以确保它们不会以这种方式做出预测。你的模型越容易解释,这就越容易做到。

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

来源: flaticon

更容易确定未来的绩效

随着时间的推移,模型的预测能力可能会下降。这是因为模型特征和目标变量之间的关系可能会改变。例如,由于工资差距,收入目前可能是性别的良好预测因素。随着社会变得更加平等,收入将失去其预测力。我们需要意识到这些潜在的变化及其对我们模型的影响。对于可解释的模型来说,这更难做到。由于不太清楚特性是如何被使用的,即使我们知道对单个特性的影响,我们也不一定能说出对模型整体的影响。

更容易从模型中学习

试图在未知中寻找意义是人类的天性。机器学习可以帮助我们发现数据中我们不知道存在的模式。然而,我们不能仅仅通过观察模型的预测来识别这些模式。如果我们不能解释我们的模型,任何教训都会丢失。最终,一个模型越难解释,就越难从中学习。

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

来源: flaticon

算法公平性

重要的是,你的模型要做出公正的决定,这样它们就不会延续任何历史上的不公正。确定偏见的来源可能很困难。它通常来自模型特征和受保护变量(例如种族或性别)之间的关联。例如,由于南非强制隔离的历史,种族与某人的地理位置\邻里关系密切相关。位置可以作为种族的代表。使用位置的模型可能会偏向某个种族。

使用一个可解释的模型并不一定意味着你会有一个无偏的模型。这也不意味着更容易确定模型是否公平。这是因为大多数公平性度量(例如,假阳性率、不同影响)是模型不可知的。对于任何模型来说,它们都很容易计算。使用一个可解释的模型所做的是更容易识别和纠正偏差的来源。我们知道使用了哪些特性,并且可以检查哪些特性与受保护的变量相关联。

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

来源: flaticon

可解释性的缺点

好的,我们明白了…可解释的模型很棒。它们更容易理解、解释和学习。它们还允许我们更好地检测当前绩效、未来绩效和模型公平性。然而,可解释性也有不好的一面,在某些情况下,我们更喜欢一个可解释的模型。

易受操纵

基于 ML 的系统容易受到操纵或欺诈。例如,假设我们有一个自动发放汽车贷款的系统。一个重要的特征可能是信用卡的数量。顾客的卡越多,她就越危险。如果客户知道这一点,他们可以暂时取消所有的卡,获得汽车贷款,然后重新申请所有的信用卡。

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

来源: flaticon

当客户取消信用卡时,她偿还贷款的概率不会改变。客户操纵模型做出了不正确的预测。模型的可解释性越强,操作起来就越透明和容易。即使模型的内部工作是保密的,情况也是如此。特征和目标变量之间的关系通常更简单,更容易猜测。

要学的更少

我们提到过,可解释的模型更容易学习。另一方面,他们不太可能教给我们新的东西。像神经网络这样的可解释模型可以自动对数据中的交互和非线性关系进行建模。通过解释这些模型,我们可以发现这些我们从来不知道存在的关系。

相比之下,像线性回归这样的算法只能模拟线性关系。为了对非线性关系建模,我们必须使用特征工程将任何相关变量包含在我们的数据集中。这将需要预先了解这些关系,这违背了解释模型的目的。

领域知识/专业技能要求

构建可解释的模型可能需要大量的领域知识和专业技能。通常,可解释的模型,如回归,只能对数据中的线性关系进行建模。为了模拟非线性关系,我们必须执行特征工程。例如,对于医疗诊断模型,我们可能希望使用身高和体重来计算身体质量指数。了解哪些特征是可预测的,以及要创建哪些特征需要特定领域的领域知识。

你的团队可能没有这方面的知识。或者,您可以使用一个可解释的模型,该模型将自动对数据中的非线性关系进行建模。这消除了创建任何新特征的需要;基本上把思考留给了计算机。不利的一面是,正如我们在上面已经彻底讨论过的,对如何使用特征进行预测的理解较差。

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

复杂性-准确性权衡

从上面我们可以看到,一般来说,越不复杂的模型越容易解释。因此,为了更高的可解释性,可能会有较低准确性的折衷。这是因为,在某些情况下,更简单的模型可能做出不太准确的预测。这真的取决于你要解决的问题。例如,使用逻辑回归进行图像识别会得到很差的结果。

对于许多问题来说,一个可解释的模型和一个可解释的模型表现得一样好。在下面的文章中,我们比较了一个可解释的模型,逻辑回归,和一个可解释的模型,神经网络。我们表明,通过对我们的问题进行一些思考并创建新的特征,我们可以用一个可解释的模型实现类似的准确性。它很好地实践了我们在本文中讨论的一些概念。

[## 特征工程的力量

为什么您可能只应该使用逻辑回归来建模非线性决策边界(使用 Python 代码)

towardsdatascience.com](/the-power-of-feature-engineering-b6f3bb7de39c)

图像来源

所有图片都是我自己的或从www.flaticon.com获得的。在后者的情况下,我拥有他们的高级计划中定义的“完全许可”。

参考

[1] C .莫尔纳尔,可解释机器学习(2020)【https://christophm.github.io/interpretable-ml-book/

[2] C. Rudin,停止解释高风险决策的黑盒机器学习模型,转而使用可解释的模型(2019),https://www.nature.com/articles/s42256-019-0048-x

[3] M .图里奥·里贝罗,s .辛格和 c .盖斯特林,“我为什么要相信你?”:解释任何分类器的预测(2016)【https://arxiv.org/abs/1602.04938 T2

可解释聚类

原文:https://towardsdatascience.com/interpretable-clustering-39b120f95a45?source=collection_archive---------36-----------------------

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

如何使用 CART 来消除描述集群时的猜测

聚类算法如 K-Means、凝聚聚类和 DBSCAN 是强大的无监督机器学习技术。然而,总结每个集群的关键特征需要相当定性的方法,成为需要领域专业知识的冗长且不严格的过程。

一项经常被忽视的技术可能是数据科学家武器库中的王牌:使用决策树来定量评估每个集群的特征。具体来说,在对未标记的数据进行聚类之后,我们可以将相应的聚类作为标签分配给每个样本。然后,我们可以使用标签作为目标变量来训练一个购物车模型,然后检查生成的决策树来突出显示集群的特征。

数据聚类

在对数据进行相应的处理后,我们可以选择我们喜欢的聚类算法。通常,选项有:

  • k 均值
  • 凝聚聚类
  • 基于密度的噪声应用空间聚类

k 均值

K-Means 是最常见的无监督学习技术,主要是由于它的简单性和有效性。这是一种快速算法,可以在数百万次观察中运行,但它也有缺点。首先,它不能很好地处理非球形的数据结构。当点的密度不均匀时,也就是说在分布的某些区域中密度比其他区域中的密度高,它的表现也不好。最后,还必须选择聚类数 K,这需要做出某种程度上的定性决定。

虽然对于前两个问题,除了选择另一种算法之外没有补救方法,但是可以以相对严格的方式选择聚类的数量 K。我们可以迭代地运行 K-Means 算法,增加 K 的数量,直到一个稍大的数字(例如 50)。然后,我们可以在图表上为 K 的每个值绘制一个性能度量。通过检查图表,我们可以找到“肘部”,即性能达到峰值的地方,然后在较高的 K 值下产生边际回报。我们可以选择的 K 值正好是性能增益相对于 K 的增加处于边际的时候。在许多性能测量中,最常用的通常是轮廓系数、失真和差距统计。

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

凝聚聚类

凝聚聚类是一种分层聚类,它迭代地将样本分组在一起,从每个样本的一个聚类开始,到整体的单个聚类。这是执行聚类时的首选方法之一,因为它允许快速选择 k 的最佳值。事实上,我们可以绘制树状图,这是一种在 x 轴上显示样本分组的树结构,而在 y 轴上显示来自其他分组的信息增益。

类似于肘分析,我们可以简单地选择从进一步分裂中获得的信息略微增加的聚类数,因此不值得额外的复杂性。

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

基于密度的噪声应用空间聚类

最后,作为参考,DBSCAN 是另一种广泛用于聚类分析的技术。它的工作原理是检查附近样本的密度,如果密度足够高,就将样本分配给聚类。然而,由于凝聚聚类已经是一种成功的技术,DBSCAN 在实践中不太常见。

解释集群

现在我们已经对未标记的数据进行了聚类,我们可以提取聚类信息并将其作为标签分配给每个样本。

例如,使用凝聚聚类,我们可以首先选择我们选择的聚类数 K…

cut = scipy.cluster.hierarchy.cut_tree(Z, n_clusters=K)

…然后提取标签,将它们分配给数据:

labels = list([i[0] for i in cut])
labeled_data = pd.DataFrame(data, columns=data_columns)
labeled_data['label'] = labels

最后,我们可以继续使用标记数据集作为训练来训练决策树。为了避免一棵巨大的树,我建议把它构造成一个二元分类问题,如果一个点在所选的聚类中,y 等于 1,否则 y 等于 0。这将为每个集群重复,给你不同的更简单的决策树,更容易理解,并在以后提出。具体来说,我们可以绘制决策树,使用:

fig, axes = mp.subplots(nrows = 1, 
                        ncols = 1, 
                        figsize = (4,4), 
                        dpi=300)sklearn.tree.plot_tree(model,
                       feature_names = X.columns,
                       filled = True,
                       class_names=True);

通过检查决策树,我们可以突出相应聚类的特征。例如,我们可能会看到,只有在某些条件下,观测值才会被分配到这样的集群中。

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

摘要

我们可以通过结合无监督和有监督的学习技术来阐明聚类。具体来说,我们可以:

  • 首先,使用 K-Means、凝聚聚类或 DBSCAN 对未标记的数据进行聚类
  • 然后,我们可以选择要使用的聚类数 K
  • 我们给每个样本分配标签,使其成为一个监督学习任务
  • 我们训练一个决策树模型
  • 最后,我们检查决策树的输出,以定量地突出集群的特征

参考

麻省理工学院的一些同事最近完成了一项有趣的工作,利用优化使聚类变得可解释。你可以在这里阅读更多相关信息

要阅读更多类似的文章,请关注我的Twitter*LinkedIn或我的 网站 *

可解释的机器学习模型

原文:https://towardsdatascience.com/interpretable-machine-learning-models-aef0c7be3fd9?source=collection_archive---------16-----------------------

对逻辑回归模型和决策树解释的全面介绍。

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

Unsplash 上由 Fabrice Villard 拍摄的照片

亚马逊的一个机器学习模型从一堆简历中只选择了男性。根据该模型,另一个模型解雇了表现不佳的教师。这种模式是歧视性的,可能对社会有害。他们会做出错误的决定,并以负面的方式影响人们的生活。要解决这个问题,您可以开始解释您的模型。可解释性意味着人类可以理解决策的原因。

对于机器学习模型的可解释性已经做了很多研究。有不同的方式来解释你的机器学习模型。最容易的划分是在可解释模型和模型不可知方法之间。可解释的模型是解释它们自己的模型,例如从决策树中你可以很容易地提取决策规则。模型不可知方法是可以用于任何机器学习模型的方法,从支持向量机到神经网络。在本文中,重点将放在可解释的模型上,如线性回归、逻辑回归和决策树。这是另一篇关于模型无关方法的文章。

资料组

您可以使用模型可解释性的一个领域是医疗保健。为了了解模型如何决定一个人是否患有心脏病,我们使用了克利夫兰数据库中具有以下特征的数据集:

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

我们将尝试使用逻辑回归和决策树来预测目标,并解释我们建立的模型。你可以在 Kaggle 上找到心脏病 UCI 数据集。

密码

这篇关于可解释模型的文章(以及关于模型不可知方法的文章)的代码可以在 GitHub 上找到。

可解释的模型

您可以解释的模型包括线性回归模型、逻辑回归模型和决策树。因此,在这些情况下,不需要模型不可知的方法,尽管您也可以使用它们来获得更多的见解。在简单介绍线性回归之后,我们将在数据集上构建一个逻辑回归模型和决策树,看看我们如何解释结果。

线性回归

在线性回归中,您可以使用权重(或系数)来找出哪些特征是最重要的,这些特征具有最高的权重。对于一条记录,如果在保持其他记录不变的情况下将其中一条记录添加到某个特征值中,则预测值将根据该要素的权重而增加。

逻辑回归

对于逻辑回归,解释的方式有点不同,因为一个系数是比值比的自然对数。要解释这些系数,您需要进行从系数到比值比的转换。我们可以使用下面的函数:

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

根据前两个等式,我们可以用 ln( a )代替 b ,得到 a 。所以如果我们把 e 提高到比值比的自然对数的幂(等于我们从逻辑回归模型得到的系数),我们就得到比值比。

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

太好了!经过这种变换后,它有点像线性回归,但是当你改变一个特征值时,它不是增加,而是改变一个因子。值在 1 左右的比值比影响最小,而更高或更低的比值比影响更大。

因此,让我们在心脏病数据集上建立一个逻辑回归模型,以了解发生了什么。我们为每个特性获得了以下系数,我们可以对它们进行变换( e 的系数幂)以获得比值比。您可以在下表中看到这些值,这些值按降序排列:

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

现在我们可以开始解释这个模型了:

  • 胸痛型影响高。当这个值增加 1 时,患心脏病的概率增加 120.1%。
  • 如果斜率变量增加 1,概率增加 94.2%。
  • 空腹血糖是一个二元变量。如果该值为 1(真),患心脏病的几率比该值等于 0(假)时高 13.9%。
  • 在底部我们看到性别变量。这个赔率在 1 以下,1/4 左右。这意味着女性患心脏病的可能性几乎是男性的四倍!

当这样的结果看起来很奇怪时,最好的办法就是调查你的数据。你可能想知道为什么年龄和胆固醇水平的影响很小。这个模型告诉我们,高胆固醇水平比低胆固醇水平好一点。这是事实吗?男性和女性的巨大差异也引发了质疑!为了研究这一点,我们可以使用一个目标图,你可以在 GitHub 上的笔记本中找到一个关于性别特征的图。

决策树

让我们看看决策树向我们展示了什么!决策树就像一个规则系统,从根节点开始,然后沿着记录的路径到叶节点,在那里可以看到预测。当你的树有更高的深度时,很难解释,但是仍然可行。

下面你可以看到一个决策树的图像,建立在心脏病数据集上。

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

在每个决策节点上,您会看到四行文本。第一行代表决策规则。如果记录的条件为真,则沿着左边的分支,如果为假,则沿着右边的分支。第二行上的基尼系数是基尼系数的值,这个值越低,split⁴.越好第三行和第四行显示当前节点中有多少来自训练集的样本,以及它们是如何划分的。你可能想知道这些颜色意味着什么。如果一个节点是橙色或蓝色,这意味着对于该节点中样本的最大部分,目标变量(患有心脏病)分别等于 0 或 1。颜色越深,节点越均匀。

因此,让我们从测试集中提取一条记录,并跟踪树的节点,看看最终的预测会是什么。这是新的记录:

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

让我们从决策树的根节点开始。判定规则是:特征 X₂ (cp,胸痛型)小于或等于 0.5。对于我们的新记录,值是 0,所以小于 0.5。这种说法是正确的,我们沿着左边的分支。下面的特征是 X₁₁ (ca,透视着色的主要血管数),这个值大于 0.5,所以该陈述是假的,我们继续看 X₃ (trestbps,静息血压)是否小于或等于 109。事实并非如此,因为它等于 150。又这么假。下一个节点检查 X₁(性别)是否小于 0.5。不,这个记录是 1,他是男性。现在我们找到了该记录的叶节点,预测值为 0。这个预测是正确的!所以对于这个记录,模型只用了四个特征,cp,ca,trestbps 和 sex。

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

新记录从根节点到叶节点的路径

好的,这是一种找出为什么一个记录有某种预测的方法。只有树的图像,很难看出哪些特征对模型是重要的。我们可以用不同的方法提取树的特征重要性。最简单的方法是使用 scikit-learn 的特性重要性。特征的重要性被计算为由该特征带来的标准的(标准化的)总缩减。它也被称为基尼系数

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

您应该相信这些特性的重要性吗?你可以说,像 cp、ca、chol 和年龄这样的特征在预测心脏病方面非常重要。这是可能的,但首先要测试你的模型!请记住,这些特性的重要性仅基于训练集和当前树。scikit-learn 中计算特性重要性的方法不是最好的。最好使用一种与模型无关的方法,比如置换特征重要性。好奇?在下一篇关于模型不可知方法的文章中阅读它!

[1] J. Dastin,亚马逊废除了对女性有偏见的秘密人工智能招聘工具 (2018),路透社

[2]c·奥尼尔,数学毁灭的武器 (2016),新冠

[3] 我如何解释逻辑回归中的优势比?、UCLA:统计咨询集团

线性回归的解释

原文:https://towardsdatascience.com/interpretation-of-linear-regression-dba45306e525?source=collection_archive---------4-----------------------

线性回归是从事 ML 和统计分析的人谈论最多的术语。顾名思义,线性回归就是对数据拟合一条线,在目标“y”变量和解释“x”变量之间建立关系。它可以用下面的等式来表征:

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

让我们来看一个样本数据集,它是我从 Coursera 上一门名为“商业统计线性回归”的课程中获得的。

数据集看起来像:

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

图一

第一行的解释是,第一次行程花费了 489.4 分钟,通过一辆使用了 3 年的卡车将 42 个包裹运送到区域 b。在这里,花费的时间是我们的目标变量,而“区域 A”、“卡车运输”和“包裹”是我们的解释变量。因为列“Region”是一个分类变量,所以应该用一个数值对它进行编码。

如果我们的分类变量中有“n”个标签,那么就增加“n-1”个额外的列来唯一地表示或编码分类变量。这里,区域 A 中的 1 表示行程是到区域 A,而 0 表示行程是到区域 b。

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

图二

以上是在数据集中进行的线性回归的总结。因此,根据上述结果,我们的线性方程为:

分钟数=-33.1286+10.0171 包裹量+ 3.21卡车运输量+106.84 * A 区

释义:

b=10.0171: 这意味着在其他变量保持不变的情况下,如果包裹数量增加 1,则需要多花 10.0171 分钟才能送达。

b=3.21: 这意味着如果车龄增加 1 个单位,交货时间将增加 3.21 分钟,其他变量保持不变。

b=106.84: 这意味着在其他变量保持不变的情况下,与 b 区域相比,a 区域的交货时间将多花 106.84 分钟。当解释一个分类变量的系数时,总有一个参考变量要比较,这里参考的是区域 B,因为我们给区域 B 赋值 0。

b=-33.1286 : 它在数学上是指一辆车龄为 0 的卡车将 0 个包裹运送到 b 地区所花费的时间,从商业角度来看这没有任何意义。有时截距可能会提供一些有意义的见解,有时它只是为了拟合数据。

但是,我们必须检查这是否定义了 x 变量和 y 变量之间的关系。我们得到的拟合只是对样本数据的估计,还不能得出结论说这种相同的关系可能存在于真实数据中。我们必须检查我们得到的参数在统计上是否有意义,或者只是为了使数据符合模型。因此,我们检查拟合优度和 x 变量的显著性是极其重要的。

假设检验

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

图 3,来源:流明学习

假设检验可以通过多种方式进行,如 t 统计检验、置信区间检验和 p 值检验。这里,我们将检查对应于每个系数的 p 值。

对于每个假设检验,我们定义一个置信区间,即(1-α),这样这个区域被称为接受区域,其余两侧面积为α/2 的区域(在双尾检验中)是拒绝区域。为了进行假设检验,我们必须假设一个无效假设和一个替代假设。

零假设:这个 x 变量对 y 变量没有影响,即 H: b=0

替代假设:这个 X 变量对 Y 变量有影响,即

h₁**:b0**

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

图 4

只有当 p 值大于α/2 时,零假设才被接受。从上表可以看出,所有的 p 值都小于 0.05/2(如果我们取 95%的置信区间)。这意味着 p 值位于拒绝区域的某处,因此,我们可以拒绝零假设。因此,我们所有的 x 变量在定义 y 变量时都很重要。并且,x 变量的系数在统计上是显著的,并且不仅仅是将数据拟合到模型中。

我们自己的假设检验

上面的假设是 statsmodel 自己做的默认假设。让我们假设,我们有一个普遍的信念,即在保持所有其他变量不变的情况下,随着车龄的增加,交付时间增加 5 分钟。现在我们可以测试这个信念在我们的模型中是否仍然成立。

零假设 H₀ : b₂=5

备选假设 H₁ : b₂ ≠5

OLS 回归结果表明,货车运输系数的取值范围为:【1.293,5.132】。对于这些系数值,该变量被认为具有统计显著性。区间的中点**【1.293,5.132】就是我们由模型给出的估计系数。因为我们的检验统计量是 5 分钟,并且它在【1.293,5.132】,**范围内,所以我们不能忽略零假设。因此,我们不能忽视这样一个普遍的观点,即通过一辆一年的旧卡车需要额外的 5 分钟时间。最后,b₂取 3.2123,只是假设提供了足够的证据,证明我们估计的 b₂是一个好的估计。然而,5 分钟也可以是对 b₂.的可能的良好估计

测量拟合优度

R 平方值用作拟合优度的度量。值 0.958 表示 Y 变量中 95.8%的变化可以用 X 变量来解释。Y 的其余变化无法解释。

总 SS=回归 SS +剩余 SS

R 平方=回归 SS/总 SS

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

图 5,作者图

R 平方的最小值可以是 0,最大值可以是 1。较低的 R 平方值表明拟合度较差,并表明您可能遗漏了一些重要的解释变量。R 平方的值随着 X 变量的增加而增加,而不管增加的 X 变量是否重要。因此,为了对此进行调整,有一个调整后的 R 平方值,该值仅在额外的 X 变量对模型的改善超过偶然预期时增加,而在额外的变量对模型的改善小于偶然预期时减少。

残差图

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

在进行线性回归之前,对这种随机误差有一些假设。

  1. 随机误差的平均值为 0。
  2. 随机误差具有恒定的方差。
  3. 误差呈正态分布。
  4. 错误实例是相互独立的

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

图 6

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

图 7

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

图 8

在上面的图中,残差与 X 变量图显示了我们的模型假设是否被违反。在图 6 中,残差与地块图似乎是分散的。残差围绕零随机分布,并且似乎具有恒定的方差。其他 x 变量的残差图也是如此。因此,关于随机误差的初始假设仍然成立。如果残差中存在任何曲率/趋势,或者方差似乎随着 x 变量(或任何其他维度)而变化,那么这可能意味着我们的线性模型存在巨大的问题,因为初始假设被违反了。在这种情况下,应执行 box cox 方法。这是一个过程,其中有问题的 x 变量经受像对数或平方根这样的变换,以便残差具有恒定的方差。x 变量的这种转换就像是一种试凑法。

多重共线性

多重共线性发生在多元回归模型中的独立变量之间存在高度相关性时,尽管独立变量被单独测试为重要,但这可能导致不显著的 p 值。

让我们考虑一下数据集:

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

数据集来自商业统计线性回归-Coursera

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

用 MPG 作为我们的响应变量,位移作为 X 变量来拟合数据。

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

将 MPG 作为我们的响应变量,将气缸作为 X 变量来拟合数据。

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

将 MPG 作为响应变量,将气缸和排量作为 X 变量来拟合数据。

从上述结果中,我们看到位移和圆柱体似乎是统计上重要的变量,因为在进行单变量线性回归的前两个结果中,它们的 p 值小于 alpha/2。

当进行多元线性回归时,两个 x 变量被证明是不重要的,因为它们的 p 值大于α/2。然而,根据前面的两个简单回归,这两个变量都很重要。这可能是由于数据集中的多重共线性造成的。

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

我们可以看到,排量和气缸之间有很强的相关性,相关系数为 0.94。因此,为了处理这样的问题,在线性回归中应该避免高度相关的变量之一。

整体代码可以在这里找到。

感谢阅读!

学习的诠释

原文:https://towardsdatascience.com/interpretations-in-learning-part-1-4342c5741a71?source=collection_archive---------46-----------------------

深度学习的不确定性

为什么我们应该关注深度学习中的不确定性

作者:萨穆尔·麦克唐纳,大学机器学习研究员马克斯·凯尔森

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

介绍

由于深度学习在图像分类 等非常具体的任务中的优势,人工智能(AI)在科学和工业领域都变得无处不在。虽然深度学习的成功值得庆祝,但我们必须意识到并协调以下两个事实:

  1. 科学旨在解释现实,而
  2. 深度学习努力解释自己

考虑到这种并列关系,我们可以相信深度学习是一种解释现实的科学工具,并反过来在工业中利用这些发现吗?可以说不是,因为我们被深度学习无法提供的隐藏风险和解释蒙蔽了双眼,尤其是在做出超出训练样本的预测时。

能够解释一个预测,然后解释问题,对于人工智能的一般性能来说是基本的,对于安全性、可靠性和公平性来说绝对是至关重要的。因此,为了推进人工智能,我们也必须推进对学习的解释。

在这篇博客中,我提供了关于深度学习的直观入门,并提出不确定性是我们在推理重要性和因果关系之前应该解决的第一级可解释性(图 1)。

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

图 1:定量解释的规范结构。所有的模型都具备预测能力,这是不确定性的基础,而不确定性反过来又告知重要性和因果关系。有了因果关系,也许是终极的解释能力,我们可以回答反事实的“如果”和“为什么”类型的问题,并开始远离训练示例进行推理(一些统计和机器学习迄今无法做到的事情) 。(作者图)

深度学习和不确定性入门

最简单的说,深度神经网络是灵活的函数, f **,**映射一些高维输入, x **,**到一些目标 y=f(x)。这种从 xy 的映射通常被称为任务,例如,读取基因组签名( x )并预测患者是否患有癌症(y= 1)(y= 0)。神经网络几乎自动地从经验(即数据)中学习任务,因此深度学习模型变得如此广泛。

传统神经网络(NNs)的可解释性的一个限制是它们通常是确定性的。这意味着给定单个输入 x ,确定性 NN 将预测每次重复正向传播的相同输出y=f(x)(见下图 2)。输出没有变化,这限制了网络模拟现实固有随机性的能力。此外,与概率性替代方法相比,确定性神经网络对不确定性的估计过于自信。因此,为了解释的安全性、稳健性和可靠性,我们必须采用一些概率方法;即贝叶斯神经网络

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

图 2:一个前馈神经网络。每个黑点代表一个参数向量(或神经元)。一层神经元将转换数据(从左侧输入)并将激活向前传播到下一层。最终输出层产生预测。(图由作者提供)

贝叶斯神经网络可以通过随机化模型的参数来扩展传统的神经网络。【 注: 证明贝叶斯神经网络是有特定的理论动机的,源于贝叶斯法则,但这对于大多数对统计学不感兴趣的人来说是深奥的,也是不必要的。我们现在可以忽略这一点,只需要理解为什么我们应该关心深度学习中的不确定性。 ]

每次 BNN 正向传播输入 x ,随机参数的不同实现将转换信息,以在每次重复时产生不同的输出 f ( x)。这个过程重复足够多的次数,这样我们就可以得到预测值的分布**p(f(x)(图 3)。**

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

图 3:产生一个输出分布p(f(x)带有蒙特卡洛漏失 。每个模拟都有不同的权重配置,黑色节点表示活跃的神经元,灰色节点表示“退出”的神经元。退出的神经元中的参数都被设置为零。其思想是,多次向前传递,每次具有不同的重量配置,产生输出 p ( f ( x)的分布。这反过来提供了一种检查模型不确定性(即方差或熵)的机制。(图由作者提供)****

p(f(x))分布的方差定义了关于神经网络的模型不确定性的概念。模型不确定性是 BNN 提供的不确定性的两个不同组成部分之一,如果我们有更多的训练示例或更合适的模型架构,模型不确定性就会减少。****

我们可以建模的不确定性的另一个组成部分是数据不确定性,它表明数据本身固有的随机性。(关于模型和数据不确定性之间差异的图示示例,请参见下面的图 4a 和 4b。)**

这些不确定性为我们提供了必要的先决条件,以增加对重要性和因果关系进行推理的解释能力(回想上面的图 1)。此外,不确定性本身使得与可靠性、预测性能、优化、可解释性和风险管理相关的有用解释成为可能。

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

图 4a:对一些数据示例(洋红色点)进行训练时,数据不确定性为粉红色,模型不确定性为绿色。(图由作者提供)

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

图 4b:对许多数据示例(洋红色点)进行训练时,数据不确定性为粉红色,模型不确定性为绿色。(图由作者提供)

上面的图 4a 和 4b 说明了当 BNN 被给予更多的训练样本时,不确定性是如何降低的。这些数字还涉及到我将在本系列的下一篇博客文章中详述的内容。也就是说,使用 BNNs,总的不确定性可以分解为两个部分:数据不确定性(风险)和模型不确定性。

风险管理:不确定性的应用

当我们对不确定性(包括模型和数据)有了很好的估计时,许多应用程序就变得可用了。在这里,我将介绍一个这样的应用程序,它应该足以让您入门。本博客系列的第 2 部分将对不同种类的不确定性提供更加全面和技术性的解释,此外还有执行下面演示内容的示例代码。

许多任务涉及大量需要管理的风险,无论是为了安全、科学诚信还是经济利益。为了说明这一点,考虑下面图 5 中描述的案例研究。

如果无人驾驶车辆对图像进行推断(图 5a)以预测该图像的不同部分属于什么对象,并错误地预测部分路径属于道路(图 5c),则汽车可能驶离道路并危及安全。通过拒绝不确定性高于某个合适阈值的预测,可以避免这种行为(图 5e)。因此,模型不确定性可以提高 AI 在生产中的预测性能和安全性。

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

图 5:图像分割的不确定性。我们看到,认知(模型)的不确定性在道路附近的人行道周围更大,这表明该模型可以通过在更多的例子上进行训练而受益,这些例子在阴天街道中承载与道路相邻的混凝土路径。图自肯达尔和加尔(2017)

那么,我们如何决定不确定性的阈值呢?一种方法是使用以下程序进行风险规避。首先,我们可以从最不确定到最不确定对预测进行排序。整套装置的误差率可能是,比方说 1/100(即 99%的精确度),但是这可能不够精确,不能在工业中安全地实施。如果我们“放弃”(即丢弃),比方说前 5%最不确定的预测(忽略该预测是否正确),我们会期望发出一些错误的预测,因为错误的预测通常与大量的不确定性一致。因此,剩余的一组现在可以具有改进的误差率,比如 1/1000,这可以改进足以商业化的可靠性(图 6)。**

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

图 6:使用 GTEX v8 数据预测组织类型任务的风险规避。这里的任务是在给定一些基因组信息的情况下,预测 45 种组织类型中的一种。细节不重要,任务也不是特别难。该图表明,通过去掉前 5%最不确定的预测,可以获得 100%的准确性。(图由作者提供)

应该注意的是,非贝叶斯模型可以执行类似的风险规避过程,但是这些不确定性的质量较差 。因此,与贝叶斯替代方法相比,非贝叶斯神经网络在风险管理中的效率较低,并且需要您放弃更多的示例来获得期望的可靠性增益(即预测性能)(我们将在本博客系列的后续部分进一步详细探讨这一概念)。

结论和未来工作

为深度学习配备改进的不确定性估计,允许新的应用程序提高我们提供的人工智能解决方案的准确性、公平性、科学完整性、可靠性和安全性。

这个博客系列的目的是展示可解释人工智能在实践中的价值。因此,在本博客系列的未来部分,我将:

  • 提供深度学习中不确定性的综合教程(包括风险管理的例子);
  • 给出关于确定性过度自信的细节(即我们为什么要关心 BNNs);
  • 展示我们对非分布数据稳健的方法;
  • 基准最先进的 BNNs
  • 提供不确定性的高级应用实例;和
  • 说明重要性和因果关系

承认

我要感谢来自昆士兰大学的 Fred Roosta ,他在过去的一年里慷慨地为我提供了指导和监督,帮助我努力理解深度学习中的不确定性。感谢 Helena Foley 和 Maciej Trzaskowski 对本文的帮助。

参考

  1. https://www.springboard.com/blog/narrow-vs-general-ai/
  2. 梅赫拉比,n .,莫尔斯塔特,f .,萨克塞纳,n .,勒曼,k .,高尔斯蒂安,a .,2019。机器学习中的偏见和公平问题综述。arXiv 预印本 arXiv:1908.09635
  3. 珍珠杂志,1995 年。实证研究的因果图。Biometrika,82(4),第 669–688 页
  4. 伊恩·古德菲勒、约舒阿·本吉奥和亚伦·库维尔。深度学习。麻省理工出版社,2016
  5. 尼尔,R.M .,2012。神经网络的贝叶斯学习(卷 118)。施普林格科学&商业媒体
  6. https://www . cs . ox . AC . uk/people/yarin . gal/website/blog _ 3d 801 aa 532 C1 ce . html
  7. 肯德尔,a .和 Gal,Y. 2017。计算机视觉的贝叶斯深度学习需要哪些不确定性?《神经信息处理系统进展》,第 5574–5584 页
  8. 奥瓦迪亚,k .等人 2019。你能相信你的模型的不确定性吗?数据集转移下的预测不确定性评估。NeurIPS 大会 2019。

使用 LIME 解释黑盒 ML 模型

原文:https://towardsdatascience.com/interpreting-black-box-ml-models-using-lime-4fa439be9885?source=collection_archive---------24-----------------------

模型可解释性

通过乳腺癌数据建模直观地理解石灰

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

国立癌症研究所Unsplash 上拍摄的照片

对于任何人来说,在医学领域支持机器学习的潜力几乎是老生常谈。有很多例子可以支持这种说法——其中一个例子是微软利用医学成像数据帮助临床医生和放射科医生做出准确的癌症诊断。同时,复杂的人工智能算法的发展极大地提高了这种诊断的准确性。毫无疑问,医学数据的应用如此惊人,人们有充分的理由对其好处感到兴奋。

然而,这种尖端算法是黑盒,可能很难解释。黑盒模型的一个例子是深度神经网络,在输入数据通过网络中的数百万个神经元后做出单个决策。这种黑盒模型不允许临床医生用他们先前的知识和经验来验证模型的诊断,使得基于模型的诊断不太可信。

事实上,最近对欧洲放射科医生的调查描绘了一幅在放射学中使用黑盒模型的现实画面。调查显示 只有 55.4%的临床医生 认为患者不会接受没有医师监督的纯人工智能应用。 [1]

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

在接受调查的 635 名医生中,超过一半的人认为患者还没有准备好接受仅由 AI 生成的报告。图片作者。

下一个问题是:如果人工智能不能完全取代医生的角色,那么人工智能如何帮助医生提供准确的诊断?

**这促使我探索有助于解释机器学习模型的现有解决方案。**一般来说,机器学习模型可以分为可解释的模型和不可解释的模型。不严格地说,可解释的模型提供与每个输入特征的重要性相关的输出。此类模型的示例包括线性回归、逻辑回归、决策树和决策规则等。另一方面,神经网络形成了大量无法解释的模型。

有许多解决方案可以帮助解释黑箱模型。这些解决方案包括 Shapley 值、部分依赖图和局部可解释模型不可知解释(LIME ),这些在机器学习实践者中很流行。今天,我将集中讨论石灰。

根据 Ribeiro 等人[2] 的 LIME 论文,LIME 的目标是*“在对分类器局部忠实的可解释表示上识别一个可解释模型”。**换句话说,石灰能够解释某个特定点的分类结果。** LIME 也适用于所有类型的模型,使其与模型无关。*

E

这听起来很难理解。让我们一步一步地分解它。想象我们有下面的玩具数据集,有两个特征。每个数据点都与一个基本事实标签(正或负)相关联。

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

作者图片

从数据点可以看出,线性分类器将不能识别分隔阳性和阴性标记的边界。因此,我们可以训练一个非线性模型,比如神经网络,来对这些点进行分类。如果模型训练有素,它能够预测落在深灰色区域的新数据点为正,而落在浅灰色区域的另一个新数据点为负。

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

作者图片

现在,我们对模型在特定数据点(紫色)上做出的决定感到好奇。我们问自己,为什么这个特定的点会被神经网络预测为负值?

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

作者图片

我们可以用石灰来回答这个问题。LIME 首先从原始数据集中识别随机点,并根据它们到感兴趣的紫色点的距离为每个数据点分配权重。采样数据点离感兴趣的点越近,时间就越重要。(在图中,较大的点表示分配给数据点的权重较大。)

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

图片作者。

利用这些不同权重的点,LIME 提出了一个具有最高可解释性和局部保真度的解释。

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

图片作者。

使用这组标准,LIME 将紫色线确定为兴趣点的学习解释。我们看到,紫色线能够解释神经网络在感兴趣的数据点附近的决策边界,但无法解释其更远的决策边界。换句话说,学习的解释具有高的局部保真度,但是低的全局保真度。

让我们看看 LIME 的作用:现在,我将重点关注 LIME 在解释使用威斯康星州乳腺癌数据训练的机器学习模型中的使用。

威斯康星乳腺癌数据集:了解癌细胞的预测因子

UCI 在 1992 年发表的威斯康星州乳腺癌数据集【3】,包含 699 个数据点。每个数据点代表恶性或良性的细胞样本。对于以下特征,每个样品还被赋予 1 到 10 的数字。

  • 团块厚度
  • 细胞大小的均匀性
  • 细胞形状的均匀性
  • 单一上皮细胞大小
  • 有丝分裂
  • 正常核仁
  • 平淡的染色质
  • 裸核
  • 边缘粘连

让我们试着去理解这些特征的意义。下图使用数据集的特征显示了良性和恶性细胞之间的差异。

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

感谢我医学院的朋友岳婷对这些特性的解释。图片作者。

从该图中,我们看到每个特征的值越高,细胞越有可能是恶性的。

预测细胞是恶性的还是良性的

既然我们理解了数据的含义,让我们开始编码吧!我们首先读取数据,并通过删除不完整的数据点和重新格式化 class 列来清理数据。

数据导入、清理和浏览

**#Data Importing and Cleaning** import pandas as pddf = pd.read_csv("/BreastCancerWisconsin.csv", 
                 dtype = 'float', header = 0)
df = df.dropna() #All rows with missing values are removed.*# The original data set labels benign and malignant cell using a value of 2 and 4 in the Class column. This code block formats it such that a benign cell is of class 0 and a malignant cell is of class 1.*def reformat(value):
    if value == 2: 
        return 0 #benign
    elif value == 4:
        return 1 #malignantdf['Class'] = df.apply(lambda row: reformat(row['Class']), axis = 'columns')

去掉不完整的数据后,我们简单的探究一下数据。通过绘制细胞样品类别(恶性或良性)的分布图,我们发现良性(0 类)细胞样品比良性(1 类)细胞样品多。

import seaborn as sns
sns.countplot(y='Class', data=df)

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

通过可视化每个特征的直方图,我们发现大多数特征具有 1 或 2 的模式,除了团块厚度和空白染色质,它们的分布从 1 到 10 更均匀地展开。这表明团块厚度和空白染色质可能是该类别的较弱预测因子。

from matplotlib import pyplot as plt
fig, axes = plt.subplots(4,3, figsize=(20,15))
for i in range(0,4):
    for j in range(0,3):
        axes[i,j].hist(df.iloc[:,1+i+j])
        axes[i,j].set_title(df.iloc[:,1+i+j].name)

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

模型训练和测试

然后,将数据集以 80%-10%-10%的比例分成典型的训练-验证-测试集,并使用 Sklearn 建立 K-最近邻模型。经过一些超参数调整(未显示),发现 k=10 的模型在评估阶段表现良好,其 F1 值为 0.9655。代码块如下所示。

from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold **# Train-test split**
X_traincv, X_test, y_traincv, y_test = train_test_split(data, target, test_size=0.1, random_state=42) **# K-Fold Validation** kf = KFold(n_splits=5, random_state=42, shuffle=True)for train_index, test_index in kf.split(X_traincv):
    X_train, X_cv = X_traincv.iloc[train_index], X_traincv.iloc[test_index]
    y_train, y_cv = y_traincv.iloc[train_index], y_traincv.iloc[test_index]from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import f1_score,**# Train KNN Model** KNN = KNeighborsClassifier(k=10)
KNN.fit(X_train, y_train)**# Evaluate the KNN model** score =  f1_score(y_testset, y_pred, average="binary", pos_label = 4)
print ("{} => F1-Score is {}" .format(text, round(score,4)))

使用石灰的模型解释

一个 Kaggle 鉴赏家可能会说,这个结果很好,我们可以在这里结束这个项目。然而,人们应该对模型的决策持怀疑态度,即使模型在评估中表现良好。因此,我们用石灰来解释 KNN 模型对这个数据集做出的决定。这通过检查所做的决定是否符合我们的直觉来验证模型的有效性。

import lime
import lime.lime_tabular**# Preparation for LIME**
predict_fn_rf = lambda x: KNN.predict_proba(x).astype(float)**# Create a LIME Explainer**
X = X_test.values
explainer = lime.lime_tabular.LimeTabularExplainer(X,feature_names =X_test.columns, class_names = ['benign','malignant'], kernel_width = 5)**# Choose the data point to be explained**
chosen_index = X_test.index[j]
chosen_instance = X_test.loc[chosen_index].values**# Use the LIME explainer to explain the data point**
exp = explainer.explain_instance(chosen_instance, predict_fn_rf, num_features = 10)exp.show_in_notebook(show_all=False)

在这里,我挑选了三点来说明如何使用石灰。

解释样本被预测为恶性的原因

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

在这里,我们有一个数据点,实际上是恶性的,并预测是恶性的。在左图中,我们看到 KNN 模型预测该点有接近 100%的概率是恶性的。在中间,我们观察到 LIME 能够按照重要性的顺序,使用感兴趣的数据点的每个特征来解释这个预测。根据莱姆的说法,

  1. 事实上,样本的裸细胞核值大于 6.0,这使其更有可能是恶性的。
  2. 由于样本具有较高的边缘粘连,它更可能是恶性的而不是良性的。
  3. 由于样本的凝块厚度大于 4,它更有可能是恶性的。
  4. 另一方面,样本的有丝分裂值≤1.00 的事实使其更有可能是良性的。

总的来说,考虑到样本的所有特征(在右图中),该样本被预测为恶性的。

这四个观察结果符合我们的直觉和我们对癌细胞的了解。了解了这一点,我们更加确信模型根据我们的直觉做出了正确的预测。让我们看另一个例子。

解释为什么样本被预测为良性

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

这里,我们有一个细胞样本,预测是良性的,实际上是良性的。LIME 通过引用(以及其他原因)解释了为什么会出现这种情况

  1. 该样品的裸核值≤ 1
  2. 该样品的正常核仁值≤ 1
  3. 它还具有≤1 的簇厚度
  4. 细胞形状的均匀性也≤ 1

同样,这些符合我们对为什么细胞是良性的直觉。

解释样本预测不明确的原因

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

在最后一个例子中,我们看到该模型不能以很高的可信度预测细胞是良性的还是恶性的。使用 LIME 的解释,你能看出为什么会这样吗?

结论

LIME 的用途不仅限于表格数据,还包括文本和图像,这使得它的用途非常广泛。然而,仍有工作要做。例如,这篇论文的作者认为,当前的算法应用于图像时太慢,没有用。尽管如此,LIME 在弥合黑盒模型的有用性和难处理性之间的差距方面仍然非常有用。如果你想开始使用 LIME,一个很好的起点是 LIME 的 Github 页面

如果你对机器学习的可解释性感兴趣,一定要看看我的文章,这篇文章着重于使用部分依赖图来解释黑盒模型。

如果有任何反馈,请随时通过 LinkedIn 联系我。感谢您的宝贵时间!

[## 特拉维斯唐| LinkedIn

Gojek 的数据分析师](https://www.linkedin.com/in/voon-hao-tang/)

参考

[1] Codari,m .,Melazzini,l .,Morozov,S.P. 等人人工智能对放射学的影响:欧洲放射学学会成员的 EuroAIM 调查 (2019),成像洞察

[2] M. Ribeiro,S. Singh 和 C. Guestrin,‘我为什么要相信你?’解释任何分类者的预测 (2016),KDD

[3]威廉·h·沃尔伯格博士,威斯康星乳腺癌数据库 (1991),威斯康星大学医院,麦迪逊

通过数据科学解读气候变化

原文:https://towardsdatascience.com/interpreting-climate-change-through-data-science-321de6161baf?source=collection_archive---------48-----------------------

用 FB Prophet 预测未来 CO₂水平

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

图片由来自 Pixabay 的 Gerd Altmann 提供

被困在付费墙后面?点击这里使用我的朋友链接阅读完整的故事!

在过去的几十年里,全球年平均气温的记录稳步上升。温度每增加一分,大气中积累的热量就会呈指数增加,从而导致局部和全球天气模式的变化。因此,在此期间,我们目睹了与天气相关的灾害稳步增加,如长期干旱、更严重的降水和洪水、严重的热带气旋,以及最近加州野火突然激增。气候变化的长期影响包括变化的天气模式、海岸侵蚀和海平面上升。

二氧化碳(CO₂)是一种重要的吸热(温室)气体,它是通过人类活动和燃烧化石燃料释放的。根据联合国政府间气候变化专门委员会(IPCC)的报告,自工业革命开始以来,截至 2018 年 1 月,CO₂浓度已从 280 ppm(百万分之一)上升至 407 ppm。在同一时期,全球平均气温比工业化前的基线上升了大约 1⁰C。 换句话说,进入地球大气层的额外 125 ppm 的 CO₂相当于全球气温上升了大约 1⁰C.

任何与气候变化有关的事情都会引起激烈的争论,CO₂的变暖效应也不例外。与 CO₂推动全球气温上升的普遍观点相反,一些人认为气温的变化导致了大气 CO₂的变化——而不是相反。在使用冰芯研究过去的气候变化时,科学家观察到 CO₂滞后于温度。这使得一些人认为 CO₂滞后否定了 CO₂.的变暖效应事实上,争论的双方都站得住脚,因为 CO₂和全球气温之间存在正反馈循环。换句话说,变暖导致更多的 CO₂,更多的 CO₂导致变暖。这种正反馈循环进一步加剧了全球变暖的影响。

夏威夷莫纳罗亚天文台:

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

夏威夷莫纳罗亚岛大气二氧化碳(ppm)

夏威夷莫纳罗亚天文台,是最古老的连续 CO₂监测站,由于其远离任何大陆的位置,已经成为 CO₂水平的全球标准。上图显示了在莫纳罗亚天文台测得的每月大气 CO₂水平。 x 轴代表时间, y 轴代表以百万分率(ppm)测量的每月 CO₂水平。随着时间的推移,CO₂浓度稳步上升,目前的浓度比几百万年来都要高。

预测未来 CO₂水平:

为了将全球变暖限制在 1.5 ⁰摄氏度,到 2030 年,全球碳排放量需要在 2010 年的水平上惊人地下降 45%(IPCC,联合国)

在这项研究中,让我们利用数据驱动建模的进步来预测未来的 CO₂水平。一旦建模,预测的未来 CO₂水平可以用来评估我们在实现 IPCC 排放目标方面还有多远,以及这对全球气温上升意味着什么。时间序列预测问题是一种困难的预测建模问题。与回归预测建模不同,时间序列还增加了输入变量之间序列相关性的复杂性。

co₂时间序列的分解:

从莫纳罗亚火山观测大气 CO₂时间序列,我们可以看到有一个强季节性的上升趋势。CO₂的年度高峰出现在春季(5 月),此时融化的积雪暴露了土壤微生物,释放出大量的 CO₂.秋季(9 月)CO₂水平通常较低,因为大气中的 CO₂被大量夏季植物吸走。时间序列分解技术允许我们将一个时间序列分解成单独的组成部分。分解技术背后的思想是,任何序列都可以表示为其组成部分的和(或积): a)水平,b)趋势,c)季节性,和 d)残差。为了执行这个数据分解,我们将使用 statsmodel 包中的季节性分解函数,如下所示:

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

时间序列分解—可加模型:y(t) =趋势(t)+季节性(t)+残差(t)

上图显示了时间序列的各个组成部分。由于季节变化在时间上是相同的量级,我们选择的加性模型分解是好的。

**趋势:**是指一个时间序列在一段较长的时间内自然地向相对较高或较低的值发展。从 CO₂的数据来看,我们看到了上升趋势。

**季节性:**固定时间段内重复的模式。季节性可以是每周、每月或每年。

**残差:**表示与其余数据不一致的随机和不规则(异常值和缺失值)影响。

建立预测模型:

有几种时间序列预测方法和软件包可用,但脸书的预言家是一种快速可靠的方法,可以在建模/预测时间序列数据的最初阶段获得非常好的结果。Prophet 是一个加法回归模型,通过将时间序列分解为趋势、季节性和残差分量来拟合非线性趋势。关于先知背后的数学细节,请阅读这篇论文

从莫纳罗亚天文台,我们有从 1958 年 3 月到 2020 年 1 月近 62 年的月度数据。1958 年 3 月至 2013 年 10 月之间的月度数据用于“训练”模型,剩余的数据集(2013 年 11 月-2020 年 1 月)用于“验证”模型。一旦通过验证,该模型可用于预测未来 50 年的 CO₂水平。

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

CO₂对 2070 年前未来 50 年的预测

上图显示了 CO₂的观测值、估计值和预测值,以及 95%的置信区间。总的来说,FB Prophet 模型在捕捉长期趋势和季节性方面非常稳健。2015 年巴黎协定是最新的国际气候条约,旨在将本世纪全球气温上升幅度控制在 2 摄氏度以下,并有望限制在 1.5 度,低于工业化前的水平。

按照 CO₂目前的增长速度,50 年内污染水平将达到百万分之 530,使我们的气温上升幅度可能超过 3 摄氏度。

与 RCP 通路的关系:

为了使气候研究和政策制定标准化,政府间气候变化专门委员会(IPCC)提出了四种预示不同气候未来的情景。四个代表性的浓度路径(RCP)通常被称为 RCP2.6、RCP4.5、RCP6.0 和 RCP 8.5。RCP 的数值(2.6、4.5、6.0 和 8.5)指的是 2100 年的目标辐射强迫(以瓦特/平方米测量)。这些情景旨在涵盖从非常高(RCP8.5)到非常低(RCP2.6)的未来温室气体浓度。通过预测未来的 CO₂水平,我们可以估计相应的地表温度变化和单位面积的能量变化率。这些相互关联的度量有助于定义不同的 RCP 场景并对其进行基准测试。

收尾思路:

显然,世界各国在实现气候变化目标方面做得还不够,一切照旧。随着气温上升,我们可以预计,与极端天气相关的灾害的频率和严重程度将会增加,冰川融化和沿海洪水导致大规模迁移,干旱和火灾破坏雨林和全球食品供应链。应对气候变化和建设低碳未来需要做更多的工作。人们普遍认为,低碳未来意味着失去传统工作和更强劲的经济。与普遍的看法相反,像特斯拉这样的公司站在对抗碳排放的最前沿,并展示了实现这一目标的方法。

如果你喜欢这篇文章,这里还有一些你可能喜欢的文章:

[## 使用深度学习的飓风路径预测

每年 6 月 1 日到 11 月 30 日之间的时间窗标志着北大西洋飓风季节。在此期间…

medium.com](https://medium.com/@kap923/hurricane-path-prediction-using-deep-learning-2f9fbb390f18) [## 使用生成对抗网络的随机天气生成器

使用 GANs 对多元分布建模

towardsdatascience.com](/stochastic-weather-generator-using-generative-adversarial-networks-a9856b0f83ef)

解释线性和逻辑回归中的系数

原文:https://towardsdatascience.com/interpreting-coefficients-in-linear-and-logistic-regression-6ddf1295f6f1?source=collection_archive---------7-----------------------

如何解释你的系数,让每个人都能理解

虽然我在下面简要总结了线性回归和逻辑回归,但这篇文章更关注模型的系数。有关线性和逻辑回归模型的更多信息,请点击 此处 此处

我过去在一家餐馆工作时,每次换班开始时,员工们都会进行同样的谈话:我们会有多忙,为什么。是假日周末吗?天气怎么样?安排了哪些大型体育赛事?

尽管我们以行为经济学家的权威身份发言,但我们的预测更多地是基于轶事证据和直觉,而不是数据。但是我们有所发现。当然,许多因素(例如天气)和我们将会有多忙是有关系的。我们以自己的方式进行了一点民间回归分析。

回归分析

回归分析试图定义因变量(y)和任意数量的自变量(X)之间的关系。

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

来源:https://imgflip.com/memetemplate/151224298/

在线性回归中,y 变量是连续的(即有无限的可能性)。在逻辑回归中,y 变量是分类的(通常是二进制的),但是使用 logit 函数可以将 y 变量视为连续的(了解更多关于此处的信息)。

在线性或逻辑回归中,每个 X 变量对 y 变量的影响用 X 变量的系数表示。虽然两个模型的系数看起来相似,但它们需要以非常不同的方式来解释,本文的其余部分将解释如何解释它们。

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

对于数学人来说

(我将为这两个模型使用 sklearn 内置的“load_boston”房屋数据集。对于线性回归,目标变量是给定社区中自有住房的中值(以 10,000 美元计);对于逻辑回归,我将 y 变量分为两类,超过 21k 美元的中值标为“1”,低于 21k 美元的中值标为“0”。)

线性回归系数

首先,让我们看看更直接的系数:线性回归。在实例化和拟合模型之后,使用.coef_属性查看系数。

linreg = LinearRegression()
linreg.fit(X, y)
linreg.coef_

我喜欢创建一个熊猫数据框架,清楚地显示每个独立变量及其系数:

pd.DataFrame(linreg.coef_, 
             X.columns, 
             columns=['coef'])\
            .sort_values(by='coef', ascending=False)

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

如我所说,解释线性回归系数相当简单,您可以像这样口头描述这些系数:

“当所有其他变量保持不变时,[X 变量]每增加一个单位,[y 变量]就增加[系数]。”

因此,对于可变 RM(每所房子的平均房间数),这意味着当平均房间数增加一个单位(想想“5”到“6”)时,在所有其他因素都不变的情况下,该社区房屋的中值增加了约 6960 美元。另一方面,随着一氧化氮浓度增加一个单位(以每 1000 万分之一计算),房屋的中值将减少约 10,510 美元。

逻辑回归系数

逻辑回归模型以同样的方式进行实例化和拟合,.coef_属性也用于查看模型的系数。(注意:您需要使用.coef_[0]进行逻辑回归,将其放入数据框架中。)

logreg = LogisticRegression()
logreg.fit(X, y)
log_odds = logreg.coef_[0]pd.DataFrame(log_odds, 
             X.columns, 
             columns=['coef'])\
            .sort_values(by='coef', ascending=False)

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

对数赔率

然而,逻辑回归系数并不容易解释。这是因为逻辑回归使用 logit link 函数来“弯曲”我们的最佳拟合线,并将我们的分类问题转换为回归问题。(再次,了解更多这里。)

由于使用了 logit 函数,逻辑回归系数表示给定 X 变量的值时,观察值在目标类(“1”)中的对数概率。因此,需要将这些对数奇系数转换为常规奇系数,以便理解它们。幸运的是,这可以通过简单地对对数概率系数求幂来实现,你可以用np.exp()来实现:

odds = np.exp(logreg.coef_[0])
pd.DataFrame(odds, 
             X.columns, 
             columns=['coef'])\
            .sort_values(by='coef', ascending=False)

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

可能性

现在这些系数开始变得更有意义了,你可以这样口头描述几率系数:

“当所有其他变量保持不变时,【X 变量】每增加一个单位,观察值在(y 类)的几率是观察值不在(y 类)的几率的【系数】倍。”

因此,随着变量 RM(同样,房间的平均数量)增加一个单位,观察中表示的房屋在目标类(“1”)中的几率是它们不在目标类中的几率的 6 倍以上。另一方面,当一氧化氮浓度增加一个单位时,房屋处于目标类别的几率仅为 0.15。对于小于 1 的赔率(我们的负系数),我们可以取 1/赔率来更好地理解它们。所以一氧化氮增加 1,房子不在目标类的几率是 1/0.15 或者 6.66x(不祥!)和它在目标类中的几率一样大。

结束了

够简单!但是,当我第一次学习如何使用线性和逻辑回归对数据建模时,模型系数的这种差异对我来说并不清楚,我也不太确定如何口头解释逻辑回归模型的系数。我希望这能帮助刚接触这些概念的学生理解如何解释线性和逻辑回归中的系数。

通过减少训练期间的非线性来解释神经网络

原文:https://towardsdatascience.com/interpreting-neural-networks-by-reducing-nonlinearities-during-training-eca0fa7cbbf0?source=collection_archive---------61-----------------------

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

作者图片

机器学习和神经网络被越来越广泛地使用,尽管事实上它们大多是作为黑盒运行的,我们对它们如何产生输出几乎没有什么洞察力。这使得使用这些系统做出的决策很难仔细检查和说明。

在这篇笔记中,我描述了一个简单的解决方案,它使得从一个采用参数校正线性单元(PReLUs)的神经网络中提取规则成为可能。这是通过引入一个与反向传播平行施加的力来实现的,该力旨在将前序简化为单位函数,然后使神经网络折叠成一个更小的线性函数和不等式系统,适合人类决策者审查或使用。

由于这种力量降低了神经网络的能力,预计它也有助于避免过度拟合。

简介

机器学习解决方案,更具体地说,神经网络,被用于我们生活中越来越多的领域。同时,由于很难在任何层面上掌握它们是如何运作的,因此它们可以被视为黑箱,对于需要对业务和/或法律原因负责的公司来说,不太愿意采用它们。这一事实也会影响这类系统中公共场所的信任度。

正因为如此,提供能够帮助我们理解这些模型如何得出某个决定的工具是一个活跃的研究领域。这些工具包括可视化工具、识别最重要输入的工具、允许对输入数据进行实验以了解模型对不同信号的相对重要性的工具,以及本笔记的重点,显著降低神经网络的复杂性,使其能够从中提取决策“规则”,然后供人类决策者审查甚至使用。

这些规则可以采取的一种形式是封闭的、相对简单的代数表达式(例如,线性函数),其行为对于人类来说比由涉及数百万范围内的参数和非线性函数的神经网络实现的完整功能更可预测。

在这篇笔记中,我描述了一种在训练过程中降低神经网络复杂性的方法,这种方法允许将其输出描述为一个简单的线性函数系统,该系统限于由线性不等式定义的区域。特别地,考虑前馈神经网络,其中所有非线性是参数校正线性单元(PReLUs ),定义为

f ( x ) = max(0, x ) + a min(0, x ),

其中 0 ≤ a ≤ 1。

设网络的输入为向量(或张量,我们将其展平) I = ( i [1】, i [2],。。。, i [ n ]),输出为向量(或张量) O = (o[1],o[1],。。。,o[ m ])。

作为线性函数组合的神经网络

很容易看出,这样一个网络的输出 O 可以表示为一组 i [ x ]的线性组合,每个组合都被一组关于 i x 的线性不等式限制在输入值的特定区域内。

直觉上,这是正确的,因为只要(也就是说,在可能的输入向量的区域内)PReLUs 的输入没有从负到正的交叉,输出就是输入的线性函数,反之亦然;并且因为这些区域的边界也是线性的。

更正式地说,我们可以通过为任何给定的神经网络构建一个合适的线性组合和不等式系统来证明这种说法是正确的。对于网络中的所有预试,让我们决定它们的输入是负的还是非负的。如果前奏的数量是δ,这意味着 2**δ个可能的场景。在每种情况下,神经网络都变得完全线性,输出是输入的线性函数,事实上,网络内部的所有部分结果也是输入的线性函数。这需要 PReLUs 的输入也是输入 I 的线性函数,产生δ线性不等式(条件),其标出了该场景适用的输入空间的区域。

自然地,产生输出的 2δ线性组合的这个系统,每个由δ条件控制,很可能是多余的,因为条件可能不是独立的,或者可能是矛盾的,在这种情况下,输入空间的一些 2δ区域将是空的。但是该系统将是神经网络输出的精确描述。

虽然对于我们人类来说,线性函数似乎很容易解释和预测,但很明显,如果δ在大多数现代神经网络中处于数千或数百万的范围内,2**δ函数就不是这样了。因此,我们需要构建我们的神经网络的输出的近似,其在输入空间的大得多的区域中是线性的,并且具有小得多的不同区域。这相当于试图找到另一个很好地逼近我们网络的神经网络,但只包含少量的预序。

将预序简化为线性

这可以通过继续训练原始神经网络,同时在它的每个前序上施加力,使它的参数 a 向 1 移动来实现。

注意,如果 a = 1,那么 PReLU 退化为恒等函数 f ( x ) = x ,不再是非线性。在某种意义上,它消失了,并且神经网络围绕着它“崩溃”,因为在退化的预露之前的线性映射和在它之后的线性映射现在可以合并成单个线性映射。

因此,这种力量在逼近训练数据和减少预试次数之间找到了平衡,从而产生了一种神经网络,这种神经网络可以表达为一组线性函数和人类消耗的不等式。通过消除非线性,这种力也降低了神经网络的能力,因此可以预期它有助于避免过拟合。

我选择了一个独立于 a 的力,并在每个反向传播步骤后施加,以调整率η移动参数,但不会超过 1:

a[t+1]= max(0,min(1,a[t]+ηSGN(1a[t))。

在我的研究中,我认为任何前提都是完全线性的,如果

一> 0.9995。

η还依赖于网络表现出的当前误差,以允许网络最初无干扰地训练,然后越来越积极地将 PReLU 参数拉到 1。特别是,

η = η[0] 0.01 最大值(0,log(err)-2)

其中η[0] = 0.01 是整个模型的学习率,log()是 10 的底,而 err 是训练误差。这意味着当训练误差下降到 0.01 以下时,η将开始变得非零,并且可以随着训练误差下降而无限增长(尽管 a 参数无论如何都会被限幅)。

例子

演示上述内容的示例代码可在https://github.com/csirmaz/trained-linearization获得。该代码实现用 PReLU 参数上的力来训练小型神经网络,并且包含从模型的权重和其他参数中提取线性不等式和组合的系统的逻辑。

神经网络本身有 4 个输入节点、3 个输出节点和 4 个隐藏层,每层有 5 个节点。这些层由可训练的完全连接层链接,随后是 PReLU 激活,最后一个完全连接层除外,它只是提供输出。

期望网络学习以下关系:

out[1]= in[1]xor in[2]
out[2]= in[3]xor in[4]
out[3]= in[1]in[2]

其中所有的输入和输出都是 0 或 1,一些额外的噪声被添加到输入中。对于输入的 0 和 1 的所有 2**4 种可能组合,代码根据上述表达式生成训练数据。为每批训练数据生成新的噪声。

下图显示了一个经过训练的模型。两个非线性足以解决这个问题,实际上训练确定了一个解决方案,其中只有两个预实验是非线性的。

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

作者图片

(有 4 个输入节点(顶部)和 3 个输出节点(底部)。红线表示正重量,蓝线表示负重量。从右边引出的线表示偏差值。绿色方框标记被认为是线性的预课,而红色方框标记非线性预课。)

虽然在视觉化中,输入和输出之间的关系还很不清楚,但是一旦其他的前奏被认为是线性的,所有的权重都被压缩成非常简单的表达式。下面是代码的输出,列出了两个非线性初值产生的两种情况的表达式。这些完全对应于训练数据中的关系。

IF +0.00*in1 +0.00*in2 -1.00*in3 -1.00*in4 +1.00 < 0
  (PReLU #3 on level 1 is neg. ln(1-weight)=-2.58)
IF +1.00*in1 +1.00*in2 -0.00*in3 -0.00*in4 -1.00 < 0
  (PReLU #1 on level 4 is neg. ln(1-weight)=-2.60)
THEN
  out1 = +1.01*in1 +1.01*in2 -0.00*in3 -0.00*in4 +0.00
  out2 = -0.00*in1 -0.00*in2 -1.03*in3 -1.03*in4 +2.04
  out3 = -0.00*in1 -0.00*in2 +0.00*in3 +0.00*in4 -0.00IF +0.00*in1 +0.00*in2 -1.00*in3 -1.00*in4 +1.00 < 0
  (PReLU #3 on level 1 is neg. ln(1-weight)=-2.58)
IF +1.00*in1 +1.00*in2 -0.00*in3 -0.00*in4 -1.00 > 0
  (PReLU #1 on level 4 is pos. ln(1-weight)=-2.60) 
THEN 
  out1 = -1.01*in1 -1.01*in2 +0.00*in3 +0.00*in4 +2.02 
  out2 = -0.00*in1 -0.00*in2 -1.03*in3 -1.03*in4 +2.04 
  out3 = +1.00*in1 +1.00*in2 +0.00*in3 +0.00*in4 -1.01 IF +0.00*in1 +0.00*in2 -1.00*in3 -1.00*in4 +1.00 > 0
  (PReLU #3 on level 1 is pos. ln(1-weight)=-2.58) 
IF +1.00*in1 +1.00*in2 +0.00*in3 +0.00*in4 -1.00 < 0
  (PReLU #1 on level 4 is neg. ln(1-weight)=-2.60) 
THEN 
  out1 = +1.01*in1 +1.01*in2 +0.00*in3 +0.00*in4 +0.00 
  out2 = -0.00*in1 -0.00*in2 +1.00*in3 +1.00*in4 +0.01 
  out3 = -0.00*in1 -0.00*in2 -0.00*in3 -0.00*in4 +0.00 IF +0.00*in1 +0.00*in2 -1.00*in3 -1.00*in4 +1.00 > 0 
  (PReLU #3 on level 1 is pos. ln(1-weight)=-2.58) 
IF +1.00*in1 +1.00*in2 +0.00*in3 +0.00*in4 -1.00 > 0 
  (PReLU #1 on level 4 is pos. ln(1-weight)=-2.60) 
THEN 
  out1 = -1.01*in1 -1.01*in2 -0.00*in3 -0.00*in4 +2.02 
  out2 = -0.00*in1 -0.00*in2 +1.00*in3 +1.00*in4 +0.01 
  out3 = +1.00*in1 +1.00*in2 -0.00*in3 -0.00*in4 -1.01

参考文献

[1]何、、任、,“深入研究整流器:在 ImageNet 分类上超越人类水平的性能”,微软研究院,2015 年 2 月 6 日。http://arxiv.org/abs/1502.01852

【https://epcsirmaz.blogspot.com】最初发表于

解释基于文本的机器学习模型

原文:https://towardsdatascience.com/interpreting-text-based-machine-learning-models-aa37218195c9?source=collection_archive---------19-----------------------

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

本·怀特在 Unsplash 上的照片

可解释文本预测的工具和技术

就像任何其他机器学习任务一样,重要的是要有工具来解释基于文本的机器学习模型如何得出它们的预测。

能够理解和解释机器学习模型如何得出预测是非常重要的。对模型如何得出结论的准确理解将使您能够构建更好、更准确的模型,并确保这些模型不会传播数据集中可能存在的偏差。

在这篇文章中,我想分享一些解释基于语言的机器学习的工具和技术。

用黄砖想象

为机器学习准备文本数据的一个常见步骤是对单词进行标记。这一步将语言片段分解成它们的组成部分,通常是单词。在建立模型之前,了解您正在处理的数据的大致模式会很有用。这可以为您使用的处理技术提供信息,甚至在您建立模型之前,就有可能揭示偏差的趋势。

Yellowbrick 是一个基于 scikit-learn 构建的机器学习模型可视化库。在其他可视化中,它包含了一些有用的可视化文本标记的方法。

为了说明其中的一些技术,我将使用当前 Kaggle 竞赛中的一个数据集,它可以在这里下载。这个数据集包含许多推文和一个目标标签,它告诉我们一条推文是否是关于一场真正的灾难。

在使用这个数据集之前,我已经执行了一些基本的文本清理任务。其中包括删除标点符号、特殊字符和停用词。

下面的代码读入数据并执行这些任务。

import pandas as pd
pd.set_option('display.max_colwidth', -1)
import re
import nltk.corpus
nltk.download('stopwords')
from nltk.corpus import stopwords
stop = stopwords.words('english')# Reads in the data
train_data = pd.read_csv('train.csv')# Drops all columns text and target
cols_to_drop = ['id', 'keyword', 'location']
train_data = train_data.drop(cols_to_drop, axis=1)# Removes punctuation and special characters
def  clean_text(df, text_field, new_text_field_name):
    df[new_text_field_name] = df[text_field].str.lower()
    df[new_text_field_name] = df[new_text_field_name].apply(lambda elem: re.sub(r"(@[A-Za-z0-9]+)|([^0-9A-Za-z \t])|(\w+:\/\/\S+)|^rt|http.+?", "", elem))  
    # remove numbers
    df[new_text_field_name] = df[new_text_field_name].apply(lambda elem: re.sub(r"\d+", "", elem))

    return dfdata_clean = clean_text(train_data, 'text', 'text')# Removes stop words 
data_clean['text'] = data_clean['text'].apply(lambda x: ' '.join([word for word in x.split() if word not in (stop)]))

干净数据集的前几行如下所示。

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

接下来,我们将使用 yellowbrick 库来标记文本并检查频繁出现的单词。

import matplotlib.pyplot as plt
%matplotlib inline
from sklearn.feature_extraction.text import CountVectorizer
from yellowbrick.text import FreqDistVisualizervectorizer = CountVectorizer()
docs       = vectorizer.fit_transform(data_clean['text'])
features   = vectorizer.get_feature_names()visualizer = FreqDistVisualizer(features=features, orient='v')
visualizer.fit(docs)
visualizer.show()

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

一个有用的练习可能是将这两个目标标签的数据分别可视化,以理解模型可以用来进行预测的数据中的模式。

灾难推文的代码和输出如下所示。

disaster_tweets = data_clean[data_clean['target'] == 1]
vectorizer = CountVectorizer()
docs       = vectorizer.fit_transform(disaster_tweets['text'])
features_disaster   = vectorizer.get_feature_names()visualizer_disaster = FreqDistVisualizer(features=features_disaster, orient='v')
visualizer_disaster.fit(docs)
visualizer_disaster.show()

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

接下来,我们对非灾难性的推文重复这个过程。

non_disaster_tweets = data_clean[data_clean['target'] == 0]vectorizer = CountVectorizer()
docs       = vectorizer.fit_transform(non_disaster_tweets['text'])
features_non_disaster   = vectorizer.get_feature_names()visualizer_non_disaster = FreqDistVisualizer(features=features_non_disaster, orient='v')
visualizer_non_disaster.fit(docs)
visualizer_non_disaster.show()

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

从这个分析中我们可以看到,有很多表示灾难的词,如火灾新闻灾难在灾难微博中出现得非常频繁,但在非灾难微博中出现得很少。

用 Shap 解释模型

Shap(SHapley Additive explaints)是一个 python 库,它使用博弈论的方法来为从机器学习模型中得出的预测提供解释。它包括解释基于文本的模型的功能,并与包括 scikit-learn 在内的各种机器学习和深度学习库一起工作。

在我们使用这个库来解释一个模型之前,我们首先需要建立一个模型。下面的代码将我们的数据分成训练集和测试集,并训练一个简单的基于逻辑回归的分类模型。

from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import TfidfVectorizer
import sklearn X_train, X_test, y_train, y_test = train_test_split(data_clean['text'],data_clean['target'],random_state = 0)vectorizer = TfidfVectorizer(min_df=10)
X_train = vectorizer.fit_transform(X_train)
X_test = vectorizer.transform(X_test)model = sklearn.linear_model.LogisticRegression(penalty="l1", C=0.1)
model.fit(X_train, y_train)

接下来,我们将导入 shap 并使用summary_plot函数来探索模型中使用的特性重要性。

import shap
shap.initjs()explainer = shap.LinearExplainer(model, X_train, feature_dependence="independent")
shap_values = explainer.shap_values(X_test)
X_test_array = X_test.toarray()shap.summary_plot(shap_values, X_test_array, feature_names=vectorizer.get_feature_names())

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

我们可以看到,我们用 yellowbrick 探索的灾难推文中频繁出现的许多词具有很高的特征值。

我们也可以用 shap 来解释个别预测。

ind = 0
shap.force_plot(
    explainer.expected_value, shap_values[ind,:], X_test_array[ind,:],
    feature_names=vectorizer.get_feature_names()
)

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

用 ELI5 进行解释

ELI5 是另一个 python 库,它同样为预测提供解释。它有一些非常好的渲染,特别是对基于文本的模型的解释。

它支持大多数常用的机器学习库,包括 scikit-learn、XGBoost 和 Keras。它还可以很好地与 scikit-learn 管道一起工作。

与 shap 类似,ELI5 提供了特征重要性的权重,这有助于在全局范围内为模型提供解释。

使用我们上面训练的模型,并提供用于预处理文本的矢量器,我们可以产生如下所示的可视化效果。默认情况下,对于二元分类,ELI5 将显示阳性类的要素权重。

import eli5eli5.show_weights(model, vec=vectorizer, top=10)

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

这个库中我最喜欢的功能是一个工具,它可以在原始文本上叠加对单个预测的解释。第一条推文的例子如下所示。我们可以看到,该模型预测这是一条灾难性的推文,并且该模型使用了突出显示的单词来进行预测。

eli5.show_prediction(model, data_clean['text'].iloc[0], vec=vectorizer)

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

原始数据集中的行显示这是正确预测的,是一条灾难性的推文。

print(data_clean.iloc[0])

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

让我们看一个非灾难推文的例子。

eli5.show_prediction(model, data_clean['text'].iloc[57], vec=vectorizer)print(data_clean.iloc[57])

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

这让我们了解了模型是如何进行预测的,并可能揭示模型中的任何偏见或道德问题。

本文简要概述了解释和调试基于文本的机器学习模型的技术。所有这些工具都有更多的功能,可以让您更深入地了解模型是如何执行的。值得看一看每一项的文档,并探索其他可用的特性。

如果您想探索自然语言处理中的更多概念,我最近写了两篇文章,在本文中使用了相同的数据集。它们包括:

构建机器学习模型参加 Kaggle 比赛的指南

自然语言处理的文本清理方法指南

感谢阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值