基于石灰的可解释机器学习图像分类
通过理解机器学习模型的预测来增强对它的信心。
在自动驾驶汽车和医疗诊断等关键应用中使用机器学习的趋势日益增长,这表明迫切需要有助于理解和评估机器学习模型预测的方法。局部可解释模型不可知解释(LIME)[1]是一种解释机器学习模型的输入特征如何影响其预测的技术。例如,对于图像分类任务,LIME 找到与预测标签关联最强的图像区域(超像素集)。这篇文章用 Python 代码一步一步地介绍了 LIME 在图像分类中的内部工作原理。
让我们首先读取一个图像,并使用 Keras 中可用的预训练的 InceptionV3 模型来预测此类图像的类别。
该脚本将输入图像加载到变量Xi
中,并打印图像的前 5 个类别(和概率),如下所示:
- 拉布拉多寻回犬(82.2%)
- 金毛寻回犬(1.5%)
- 美国斯塔福德郡梗(0.9%)
- 公牛獒(0.8%)
- 大丹犬(0.7%)
有了这些信息、输入图像和预训练的 InceptionV3 模型,我们可以继续用 LIME 生成解释。在这个例子中,我们将为类拉布拉多猎犬生成解释。
石灰解释
LIME 通过围绕被解释的实例生成新的随机扰动数据集(及其各自的预测),然后拟合加权局部代理模型来创建解释。该局部模型通常是具有内在可解释性的更简单的模型,例如线性回归模型。关于石灰背后的基础知识的更多细节,我推荐你查看这篇简短的教程。对于图像分类的情况,LIME 通过以下步骤生成解释:
步骤 1:为输入图像生成随机扰动
对于图像,LIME 通过打开和关闭图像中的一些超像素来产生扰动。以下脚本使用快速移动分割算法来计算图像中的超像素。此外,它生成 150 个扰动的阵列,其中每个扰动是具有 0 和 1 的向量,表示超像素是开还是关。
计算完图像中的超像素后,我们得到:
以下是扰动向量和扰动图像的示例:
步骤 2:预测扰动的类别
下面的脚本使用inceptionV3_model
来预测每个扰动图像的类别。predictions
的形状是(150,1000)
,这意味着对于 150 幅图像中的每一幅,我们得到属于 InceptionV3 中的 1000 个类别的概率。在这 1000 个类中,我们将在后续步骤中仅使用 Labrador 类,因为它是我们想要解释的预测。在这个例子中,使用了 150 次扰动。然而,对于实际应用,更多的扰动将产生更可靠的解释。
现在我们有了一切来拟合一个线性模型,使用perturbations
作为输入特征X
,拉布拉多的预测predictions[labrador]
作为输出y
。然而,在我们拟合线性模型之前,LIME 需要给与被解释图像更接近的图像更多的权重(重要性)。
步骤 3:计算扰动的权重(重要性)
我们使用距离度量来评估每个扰动离原始图像有多远。原始图像只是所有超像素活动(所有元素合二为一)的扰动。假设扰动是多维向量,余弦距离是可用于此目的的度量。计算余弦距离后,使用核函数将该距离转换为 0 和 1 之间的值(权重)。在这个过程的最后,我们对数据集中的每个扰动都有一个权重(重要性)。
第四步:使用perturbations
、predictions
和weights
拟合一个可解释的线性模型
我们使用前面步骤中获得的信息拟合加权线性模型。我们为图像中的每个超像素获得一个系数,该系数表示超像素在拉布拉多预测中的影响有多强。
我们只需要对这些系数进行排序,就可以确定对于拉布拉多的预测,哪些是最重要的超像素(top_features
)。尽管这里我们使用了系数的大小来确定最重要的特征,但是诸如向前或向后消除之类的其他选择也可以用于特征重要性选择。计算顶部超像素后,我们得到:
这是石灰返回的解释。与“拉布拉多猎犬”的预测有更强关联的图像区域(超像素)。这种解释表明,预训练的 InceptionV3 模型在预测给定图像的拉布拉多类方面做得很好。这个例子显示了 LIME 如何通过理解它为什么返回某些预测来帮助增加机器学习模型的信心。
一个 Jupyter 笔记本里面有本帖使用的所有 Python 代码可以在这里找到。你可以通过在 Google Colab 中打开笔记本来轻松测试对你自己图像的解释。
参考文献
[1]里贝罗、马尔科·图利奥、萨梅尔·辛格和卡洛斯·盖斯特林。“我为什么要相信你?:解释任何分类器的预测。 (2016)第 22 届美国计算机学会会议录。ACM。
Kappa 值的解释
评估与条件的一致程度
kappa 统计经常被用来检验评分者之间的可靠性。评分者可靠性的重要性在于它代表了研究中收集的数据在多大程度上正确地代表了被测变量。衡量数据收集者(评分者)对同一变量赋予相同分数的程度称为评分者间信度。1960 年,雅各布·科恩批评了百分比协议的使用,因为它无法解释偶然协议。他介绍了科恩的 kappa,这是为了说明评级者由于不确定性而实际上猜测至少一些变量的可能性而开发的。卡伯值解释的范围如下:
卡帕值解读兰迪斯&科赫(1977):
< 0 无协议
0 — .20 轻微
.21 — .40 一般
.41 — .60 中等
.61 — .80 实质
. 81—1.0 完美
然而,过去的研究表明,多种因素对 Kappa 值有影响:观察者的准确性,代码在集合中的数量,特定代码的流行程度,观察者的偏见,观察者的独立性(Bakeman & Quera,2011)。因此,对 kappa 的解释,包括什么是好的 Kappa 的定义,应该考虑到具体情况。
模拟
为了更好地理解 Cohen Kappa 系数的条件解释,我采用了 Bakeman 等人(1997)提出的 Cohen Kappa 系数的计算方法。这些计算作出了简化的假设,即两个观察者都是同样准确和无偏见的,代码以同样的准确性被检测到,不一致是同样可能的,并且当患病率变化时,它以均匀分级的概率变化(Bakeman & Quera,2011)。
设置
最大编码数:52
观测器数:2
观测器精度范围:0.8、0.85、0.9、0.95
编码流行度:等概率、中等变化、高度变化
Settings of parameters in the simulation
调查的结果
在 612 个模拟结果中,245 个(40%)达到了完美水平,336 个(55%)达到了基本水平,27 个(4%)达到了中等水平,3 个(1%)达到了一般水平,1 个(0%)达到了轻微水平。对于每个观察者准确度(. 80,. 85,. 90,. 95),每个流行水平有 51 个模拟。
观察者准确度
**观测者准确度越高,总体一致性水平越好。**在各种观察者准确度下,各患病率水平的一致水平的比率。一致性水平主要取决于观察者的准确性,其次是代码的流行程度。“完美”的一致只出现在观察者准确度为 0.90 和 0.95 时,而所有类别都达到大多数的基本一致或以上。
Kappa and Agreement Level of Cohen’s Kappa Coefficient
**观测者精度影响最大 Kappa 值。**如仿真结果所示,从 12 个代码开始以及向前,Kappa 值似乎分别达到大约 0.60%、0.70%、0.80%和 0.90%的准确度。
Cohen’s Kappa Coefficient vs Number of codes
观察中的代码数
**增加编码数导致 Kappa 增量逐渐变小。**当编码数小于 5 时,特别是当 K = 2 时,较低的 Kappa 值是可以接受的,但也需要考虑患病率的可变性。仅对于两个代码,来自准确度为. 95 的观察者的最高 kappa 值为. 80,来自准确度为. 80 的观察者的最低 kappa 值为. 02。
**编码的数量越大,复原力 Kappa 值就越趋向于观察者的准确度差异。**当观测者精度之间的差距变大时,Kappa 值减小
个人代码的流行程度
**患病率越高,总体一致程度越低。**患病率越高,认同水平越低。在观察者精度水平为 0 . 90 时,对于等概率、中等变化和极端变化,分别有 33、32 和 29 个完全一致。
Standard Deviation of Kappa Value vs Number of codes
随着代码数量的增加,代码流行度的影响不大。当编码数为 6 或更高时,患病率可变性无关紧要,从精确度为. 80、. 85、. 90 和. 85 的观察者获得的 kappa 值的标准偏差小于 0.01。
建议
Recommendation of interpreting Kappa along with the number of codes
影响 kappa 值的因素包括观察者准确性和编码数量,以及编码的个体人群流行率和观察者偏差。只有当观察者平均分配代码时,Kappa 才能等于 1。kappa 没有一个价值观可以被视为普遍接受;这取决于观察者的准确度和代码的数量。
对于较少数量的代码(K < 5),特别是在二进制分类中,Kappa 值需要格外小心地解释。在二元分类中,患病率变异性对 Kappa 值的影响最大,并导致不同观察者准确性与患病率变异性组合的 Kappa 值相同。
另一方面,当多于 12 个代码时,预期 Kappa 值的增量变得平坦。因此,简单地计算同意的百分比可能已经达到了衡量同意程度的目的。此外,性能度量单元的值从灵敏度的增量也从多于 12 个码达到渐近线。
如果 Kappa 值被用作观察者训练的参考,使用 6 到 12 之间的代码数将有助于更准确的性能评估。因为 Kappa 值和性能度量对性能改进足够敏感,并且受代码流行的影响较小。
参考
阿尤布和埃尔加马尔(2018)。利用 Twitter 数据识别和解决运行时业务流程中断。在*计算机科学讲义(包括人工智能子系列讲义和生物信息学讲义)*中。https://doi.org/10.1007/978-3-030-02610-3_11
Bakeman,r .,& Quera,V. (2011 年)。行为科学的顺序分析和观察方法。行为科学的顺序分析和观察方法。https://doi.org/10.1017/CBO9781139017343
麦克休博士(2012 年)。评分者间可靠性:测量评分者间可靠性的 kappa 统计重要性。生化医学, 22 (3),276–282。
Nichols,T. R .,Wisner,P. M .,Cripe,g .,& Gulabchand,L. (2011 年)。将卡帕统计数据用于托马斯。质量保证期刊,57–61。https://doi.org/10.1002/qaj
W.朱,倪正和倪伟(2010)。灵敏度,特异性,准确性,相关的置信区间和 ROC 分析与实际 SAS。NESUG 保健和生命科学会议录,1–9。
解读集群——数据科学和直觉的结合
形成集群是容易的,解释是困难的
这样你就有了漂亮的集群。现在怎么办?这些集群意味着什么?理解集群的意义可能比创建集群更重要。制造聚类的过程更多地是面向数学的,然而解释聚类是数学和直觉的混合。让我们在这里探索理解和解释集群的不同方式
让我们看一个电信数据集,它显示了关于客户的各种数据,例如
- 客户人口统计数据,如性别、年龄、是否为老年人、合作伙伴、受抚养人、位置等…
- 账单和合同数据,如月费、总费用、无纸化账单、合同期限等…
- 服务使用数据,如电话服务、互联网服务、在线安全等。
这里显示了数据的快照
Snapshot of telecommunication data
让我们假设聚类的目标是更好地了解客户。有了这个目标,我们可以说我们已经完成了三组工作。
三个集群的可视化如下所示。可视化的二维表示 PCA(主成分分析)的输出。电信数据集大约有 30 列。然而,为了可视化的目的,这 30 个维度已经被压缩为 2 个维度,而没有失去使用 PCA 的数据的本质
散点图上的每个点代表一个客户,颜色显示它属于哪个分类
Nice looking clusters
正如你将观察到的那样,这些集群结构良好。它们看起来漂亮整洁。但是它们是什么意思呢?除非我们提取这三组的意义,否则美丽的观想仍然只是观想练习。这里有一些方法来提取聚类的含义
1.在最多变的维度上观想——与众不同,脱颖而出!
这里的直觉是,为了给一个集群赋予意义,你必须看到它与其他集群有多么不同。了解一个集群与其邻居有何不同的有效方法是关注变化最大的维度或列。获得变化最大的列的一种方法是获取 PCA 的结果。PCA 有效地保留变化最大的维度,并压缩变化最小的维度。
PCA 的输出之一,称为特征影响,给出变化最大的列(或也称为特征)。该输出如下图所示。如您所见,总费用和任期在顶部变化的列中。
PCA Feature influence
因此,总费用和任期可用于区分不同的集群。总费用与任期的散点图如下所示。点的颜色表示聚类。我们看到这些集群可以相互区分,并且没有太多的重叠。这意味着总电荷和任期可以帮助区分集群和提取集群的意义。
Cluster visualisation based on tenure and TotalCharges
有了这种形象化,我们可以如下描述集群
第 0 类—总费用高、任期长的客户
第 1 类—总费用低到中等、租期低到中等的客户。
第 2 类—总费用较低的客户(以及所有租赁期)。
2 —机器学习来确定聚类的意义—让机器去做
现在让我们超越降维,进入另一个维度。(双关语)…。机器学习。这里的直觉是将聚类(0,1,2)视为目标类,将列视为输入要素。这有效地将确定聚类的含义的问题转化为分类问题。然后,我们可以尝试使用机器学习算法进行分类,以便“机器学习”输入(数据列或特征)和输出(聚类)之间的关系。然后解释输入和输出之间的这种机器学习的关系将使我们深入了解聚类的意义
我们可以使用多种机器学习算法。然而,因为我们的目的是解释机器学习的输入和输出之间的关系,所以最好选择可解释的算法。决策树是高度可解释性的机器学习算法之一。所以让我们在这里使用它。这里显示了决策树
Decision tree to understand meaning of cluster
从决策树中,我们看到区分集群的最重要的特征是总费用和无 _ 互联网服务。基于决策树,我们可以将集群解释如下
集群 0 —总费用高的客户
第 1 类—总费用低到中等,但有互联网服务的客户
第 2 类—总费用低到中等,但没有互联网服务的客户
3 —动画—解释集群的创新方式
上述两种方法告诉我们,聚类有多种解释。有多个“顶部”列是定义集群的良好候选。其中一些列是总费用,任期,互联网服务。因此,如何选择最佳的列来帮助我们更好地了解集群。为了回答这个问题,让我们拿出几把大枪——动画
当眼前发生变化时,人类会更好地理解。原因是任何发生在人类眼前的变化都会激活大脑神经元。
对于数据,动画可以帮助更好地理解数据中发生的任何变化。这比静态观想更有效。在我们的例子中,让我们看看动画是如何帮助我们更好地理解集群的含义的。
在下面的动画中,您将看到如前所示的散点图。然而,我们现在根据不同的列来制作动画。
第一部基于 TotalCharges 的动画。当动画开始时,所有总费用高的客户都以黑色突出显示。随着动画的进行,这些点会根据总电荷的低值高亮显示
Cluster Animation based on Total Charges
下面的第二个动画是基于任期。
Cluster Animation for Tenure
第三部动画基于 InternetService。这部动画很有趣。如您所见,左侧的群集(群集 2)完全突出显示,表示没有互联网服务。
Cluster Animation based on Internet Service
这些动画帮助我们更好地理解集群的含义。我们观察到没有互联网服务的客户清楚地定义了集群 2
我们现在可以根据所有的方法得出结论,一个好的解释可能是遵循聚类意义
第 0 类—总费用高的客户(互联网服务总是如此)
第 1 类—总费用低到中等,但有互联网服务的客户
第 2 类—没有互联网服务的客户
除了描述之外,给集群起一个简短而有意义的名字也是有用的。例如,我们可以有以下简称
集群 0 —黄金客户
群组 1 —适度参与的客户
第 2 类—数字化非参与型客户
起这样的名字也有助于有效地制定营销策略。其中一个策略是将适度参与的客户转化为黄金客户
朋友们,这就是我们所看到的,群集解释的结果,如下图所示
Result of cluster interpretation
在这个故事中,你已经看到了如何解释一个集群。掌握这些方法将有助于您更好地理解聚类的结果。这将使你能够采取更好的行动,例如瞄准客户,设计营销活动,或者只是与利益相关者进行有效的沟通
额外资源
网站(全球资讯网的主机站)
你可以访问我的网站进行零编码分析。https://experiencedatascience.com
请订阅每当我发布一个新的故事时,请及时通知我。
[## 每当 Pranay Dave 发表文章时,您都会收到电子邮件。
每当 Pranay Dave 发表文章时,您都会收到电子邮件。通过注册,您将创建一个中型帐户,如果您还没有…
pranay-dave9.medium.com](https://pranay-dave9.medium.com/subscribe)
你也可以通过我的推荐链接加入 Medium。
[## 通过我的推荐链接加入 Medium—Pranay Dave
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
pranay-dave9.medium.com](https://pranay-dave9.medium.com/membership)
https://www.youtube.com/c/DataScienceDemonstrated 的 YouTube 频道
这里是我的 Youtube 频道
的链接
使用 Python Matplotlib 通过可视化解释数据
IBM 数据可视化课程教会了我什么?
Matplotlib 虽然已经老化,但仍然是数据可视化最重要的工具之一,这篇文章是关于有效地使用 matplotlib,从数据集中获取知识。大约一个月前,我开始参加 IBM 数据科学专业证书课程,我发现数据可视化课程是 9 门课程的一部分,这篇文章是我在课程中学到的一些强有力的技术的预演,以更好地阐明数据。这里展示了一些有用的绘图技术和从数据中得出的新推论,这些在本课程中并没有用到。你会在我的 GitHub 上找到详细的代码,我在那里分享了 Jupyter 笔记本。比起代码,我会更关注情节,有时会分享一些代码片段。
数据集处理 1980 年至 2013 年间来自不同国家的加拿大移民。
Canada Immigration Data in .xlsx format.
因为数据集是在。xlsx 格式,文件中有 3 张纸,下面是笔记本的一部分,指导您如何将此文件读入数据框
skiprows
用于处理 excel 表中最初无用的行。为了更好地理解,最好将该列(使用[pandas.DataFrame.rename](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rename.html)
)‘OdName’和‘AreaName’分别重命名为‘Country _ Name’和‘continentals’,inplace=True
确保更改保存在数据框中。如果您不想在原始数据帧中进行这种更改,您应该使用inplace=False
。
条形图:DataFrame.plot(kind='bar ')
一旦我们设置好并做了一些调整,让我们使用 pandas DataFrame.plot 绘图,首先我们将尝试一些条形图。如果我们绘制这些年来自海地的移民数量,我们可以看到在 2009 年,2010 年,2011 年移民数量惊人的增长趋势。
Figure 1: Rising number of Haitian Immigrants near 2011.
有些人可能已经猜对了,由于 2010 年灾难性的海地地震,2011 年移民数量急剧增加。让我们用牛逼的注解来做一个清晰的表示
Figure 2: Cool annotation added to Figure 1 to have a more purposeful plot.
随着冰岛金融危机 (2008 年至 2011 年)导致严重的经济衰退,来自冰岛的移民数量也呈现出非常相似的趋势。
Figure 3: Economic crisis in Iceland caused a severe increase in number of immigrants to Canada.
我们可以使用条形图继续查看不同国家的趋势,但是,让我们探索另一种可视化数据的方法,使用饼图。
饼图:DataFrame.plot(kind='pie ')
饼图是一种圆形图形,圆形图中的切片代表数字比例。在这里,我们可以使用饼图看到来自不同大陆的移民的数字比例在 20 年(1985 年和 2005 年)内如何变化。然而,有效的代表性是一个问题。让我们看看下面的代码和相应的情节
Figure 4: Pie plots of Immigrants from different continents in the year 1985 and 2005 are shown in left and right panel respectively.
正如你所看到的,这些饼状图在视觉上并不令人满意,即使我们对 20 年间来自不同大洲的移民的百分比变化有了一个粗略的了解,但这仍然不是很清楚。不过,使用正确的关键字可以让饼状图变得更好。
Figure 5: Same as figure 4 but this one is just too visually esthetic compared to the previous one. In right panel shadow is added.
下面给出了用于绘制上述饼状图的代码片段
我学到的几个重要关键字是autopct
和pctdistance
,它们确保百分比显示到小数点后两位(1.3f 将显示最多小数点后三位的浮点数),并固定文本与圆心的距离。为了制作一个包含子情节的标题,我使用了[matplotlib.pyplot.suptitle](https://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.suptitle)
。
从上面的图表中你可以看到,1985 年很大一部分移民来自欧洲,相比之下,20 年后的 2005 年则完全由亚洲人主导。实际上,早期的移民大多来自不列颠群岛,后来印度和中国接管了这个地方。
气泡图:
气泡图基本上是美化的散点图,其中三维数据可以显示在 2D 图中。除了通常的 X 和 Y,气泡(或任何其他标记)的大小代表另一个维度(读取特征)。
为了查看此类图表的示例,我选择了 1980 年至 2013 年间印度和中国的移民信息。我们看到在 1997-1998 年间,这一数字有所上升,这可能是由于亚洲金融危机。下面来看看
Figure 6: Bubble plots of Immigrants from China and India to Canada over the years 1980 to 2013.
如果你注意到星形标记(代表来自印度的移民),它们会变大,颜色会随着时间从紫色变成蓝色。让我们看看下面的代码片段,以了解标记的大小和颜色到底代表了什么
在plt.scatter
中,s 和 c 代表标记的大小和颜色。特别是对于这个代表印度移民的图,我利用了这两个参数。这里 s 是这些年来移民的标准化值(乘以 2000,以便标记大小足够大),而 c、cmap 仅代表移民的原始数量。因此,蓝色代表移民人数较多,而紫色则相反。
世界地图:叶子。地图()
课程中一个非常吸引人的部分是使用叶子库,它有助于创建几种类型的交互式传单地图。我们将看到使用相同的移民数据集,如何在世界地图上很好地表现一些关键信息。首先,我们开始安装叶。
pip install Folium
print folium.__version__ # check the version >> 0.7.0
我们感兴趣的一种特殊的地图叫做 Choropleth 。这是一种专题地图,其中地图的一部分根据所使用的统计变量的比例进行着色/图案化。在这里,我将画出从 1985 年到 2005 年世界各地移民数量的变化。我们以前见过的大陆饼状图,可以用来补充这张 Choropleth 图。
现在,要创建 Choropleth 地图,我们需要一个. json 文件,其中包含所有国家的边界坐标,这个文件是由 IBM 提供的,您可以从我的 GitHub 中获得。据此,我使用下面的代码片段绘制了一张 1985 年全世界移民的 choropleth 地图。这张地图是交互式的,所以你可以放大或缩小,但这里我只展示一张截图
在上面的代码中,key_on
与。json 文件,对于data
,我们感兴趣的数据帧被传递。
Figure 7: Immigration to Canada in the year 1985 from all over the world
按照同样的程序,我们创建了另一个 Choropleth 地图,代表 2005 年来自世界各地的加拿大移民,你可以清楚地看到不同之处。
Figure 8: Same as Figure 7 but now data from year 2005 is used to plot immigration to Canada.
你可以在上面的图表中看到的一个大的缺点是,英国的颜色从 1985 年到 2005 年没有变化,即使我们从数据框中知道在 20 世纪 80 年代移民的数量相当高。问题是,在数据框中,国名是“大不列颠及北爱尔兰联合王国”,而在。json 文件它只是英国。因此,您可以使用“国家/地区名称”列中熊猫数据框内的替换选项—
Canada_df_world_map.Country_Name = Canada_df_world_map.Country_Name.replace({"United Kingdom of Great Britain and Northern Ireland": "United Kingdom"})
Canada_df_world_map.tail(20)
这是一个粗略的替换,因为“英国”和“GRB +北爱尔兰”是不一样的,但我们可以用图来验证我们的理解,让我们看看下面。
Figure 9: Same as figure 7 but now the United Kingdom part is corrected.
好了,终于到了结束这篇文章的时候了,因为它越来越长,但我希望你对有效的数据可视化有一个很好的了解,即*如何用一个漂亮的演示来讲述故事。*这篇文章涵盖了我在 IBM Coursera 提供的数据可视化课程中学到的大部分基本技术。仅仅回顾一下它有多好,我不得不说实验室是课程中最有效和最有成果的部分,在那里人们可以直接使用课程中教授的所有技术。有时,课程材料包含一些印刷错误,但这些错误会慢慢得到解决。学习绘制华夫饼图表也很棒,但是,我把它留给专门学习这门课程的学生。总的来说,这次经历很有趣,特别是对于在一周内复习一些基础知识来说,这是一个很棒的课程!
通过我的 GitHub 中的完整 Jupyter 笔记本,包括此处使用的数据集,了解更多信息。
在 LinkedIn 上找到我,有时我会在国家地理上发布很酷的照片。
解释机器学习模型
第 1 部分—简介
在这一系列的 6 篇文章中,我们将把预测的基础放在一边,看看数据科学和机器学习的更手工的方面,例如解释、获得洞察力和理解算法中发生的事情。这不是一件小事,还远远没有穷尽。在这一系列的帖子中,我们将从最简单的统计模型开始,以及我们如何模拟最复杂的集成和深度学习模型,试图找出预测的原因。
对这一系列内容的初步建议如下:
Part 0—什么是数据科学的范围 Part 1 —解读 ML 简介(本帖) Part 2 —解读高偏倚低方差模型。 第 3 部分——解读低偏差和高方差模型。
第 4 部分——有可能解决偏倚和方差之间的权衡吗?
第 5 部分——可解释性的本地方法。
第 6 部分——可解释性的全局方法。
我们在说什么?
要理解如何解读机器学习算法,我们先来理解什么是机器学习算法。
一般来说,对于我们来说,机器学习算法(以下简称 ML)是从“传统编程”到新概念的范式转变,在传统编程中,我们需要显式地传递所有启发,而不是编写算法必须执行的每个动作,我们只是通过几个例子,让 ML 学习什么是“最佳”(最低成本)决策。
Figure 1 — Paradigm shift from traditional programming to Machine Learning
也就是说,对于我们来说,接收输入并可以转换输出而无需显式编程的算法将是 ML 算法。解释 ML 算法就是理解它们如何将输入转化为输出。
理解预测有多重要?
如果 ML 只是一种以(有时)非常聪明的方式将输入映射到输出的方式,那么理解它是如何做到这一点似乎是一个好主意,对吗?
一个例子:银行欺诈检测算法。
我们绘制一个行为,收集数据,训练一个模型,你就大功告成了!我们有一个非常聪明的方法来检测未来的欺诈行为。现在呢?这个算法在做什么?如果仅仅出于好奇去理解它不再有意义,这里有一些更实际的原因:
Figure 2 — Nature -> Data -> ML -> Predictions
- 这位客户做了什么会被认为是欺诈者?
- 他犯了什么样的欺诈罪?
- 我的算法有偏差吗?
- 我的算法有没有漏洞?
- 如果客户想知道为什么他们的购买被拒绝,我会说是我不懂的算法吗?
- 经理是否想了解模型欺诈者的行为是如何随着时间的推移而变化的?
- 如果我们不是简单地预测,而是对修复安全漏洞以防范未来的欺诈感兴趣,我如何知道哪个杠杆是正确的?
即使在这个非常简单的例子中,我们已经确定了几个理解算法内部工作的好理由。
如果你仍然不相信它的重要性,从欧洲开始有一个非常强大的趋势,公司已经被迫解释做出决定的原因,如拒绝信贷、保险、职位空缺等。很有道理,所以用不了多久,这就会成为使用预测模型时的日常问题。
重要概念:偏差和方差。
有数百个帖子在讨论偏差和方差之间的权衡,这里的目标不是重新解释所有的概念,只是将它们作为下一篇帖子的语言。因此,在没有理论形式的情况下,我们可以将任何模型的预测误差(y-yhat)分成 3 个不同的部分。
Figure 3 — Trade-off between bias and Variance.
y_real - y_hat = Error = Random Part + Bias + Variance
- 随机部分:我们生活在一个随机的世界,而不是十九世纪后期实证主义者所认为的确定性世界。因此,即使是最简单、最明显的模型也仍然具有随机性。即使你的模型是完美的,也不会达到 Error = 0,除非是纯确定性问题。有些问题比其他问题“更随机”。例如,预测行星轨道的模型比预测欺诈的模型具有更小的随机成分。随机部分可以视为上图中的水平线,因为它不依赖于复杂性。
- **方差:**对方差的解释,对我们来说,将是一种“波动性”的预测。X 的小变化引起 y 的大变化?- >方差。通常方差误差范围被认为是预测的训练和测试结果之间的差异,但这是一个结果而不是原因。方差随着模型复杂性的增加而增加。
- 偏见:这是我们最重要的一种错误。偏见在不同的上下文中有几种解释。在这里,偏差意味着我们的模型的简化,我们必须为模型的工作做出假设。根据定义,更简单的模型是更扭曲的模型,具有更强的先决条件。偏差随着复杂性的增加而减小。
方法:统计与机器学习
我们在之前的帖子中讨论过,机器学习可能不同于统计学,因为前者涉及推理、因果关系、外生性等。而后者几乎只关心改进预测。因此,我们可以采用相同的功能,例如逻辑回归和统计分析,这将解释 betas 是否显著,浪费是否具有正态分布或机器学习分析,精确度和召回之间的关系如何,模型的 AUC 是多少,等等。
Figure 4 — Funny meme. But wrong.
所以,因为统计学对理解数据感兴趣,你为它创建模型,这些模型需要高度可解释!为了使它们具有可解释性,模型必须简单!但是,如果模型很简单,正如我们所看到的,它们是高度倾斜的。
Figure 5 — Trade-off between prediction quality and model interpretability
ML 模型正好相反,因为我们最初并不关心对它们的解释,它们非常有偏见,在我们的概念中,它们几乎没有先决条件,其代价是缺乏可解释性,这一系列的帖子试图将这两个世界结合在一起。具有高度可解释性的高指标。
Figure 6 — Evolution from Statistical algorithms to Machine Learning algorithms.
一个简单的例子是线性回归,这是最古老和最简单的算法之一,可解释性强,方差非常低(我们在测试训练中几乎不需要分离数据),但有很大的偏差。由于此处的偏差是为使模型工作良好而进行的简化,低于使用此方法的一些
前要求:
- 输入变量需要是外生的,所以不理解变量之间的交互作用;
- X 和 y 之间的影响需要是恒定的(因此线性名称);
- y 分布需要“表现良好”。
我们将在下一篇文章中探讨这些和其他先决条件,以及如何解释它们。
一种新的算法分类方法。
综合起来,让我们用一个新的术语来描述这种分离/分类 ML 算法的新方式。一方面,我们有最传统的算法,诞生于统计学和计量经济学,有一些工作的先决条件和高度可解释性,没有它们就没有现代科学,它们的解释是数据科学的科学特征,是“白盒”算法。
在另一个极端,我们有那些我们知道工作得很好的 ML 算法,因为它们的度量很好,它们可以同时处理数百万个变量,它们可以在更小的维度上表示复杂的向量空间,只有很少的先决条件(低偏差),
甚至可以生成图像和文本,代价是我们无法控制他在里面做什么,我们将这些算法称为“黑盒”。
Figure 7 — Representing the different data scientist tools, more interpretable or more predictive, depending on the purpose.
在接下来的文章中,我们的目标将是结合这两个极端的优点,高解释能力和高预测能力。
下一篇文章:第二部分——解读高偏差和低方差模型。
LinkedIn;GitHub;播放列表;版本 pt-br;
如何解读机器学习模型?
我们能理解机器学习模型内部到底发生了什么吗?
Source: Photo by Jeremy Thomas on Unsplash
在我之前的博客中,我谈到了模型性能和可解释性之间的权衡。通常,你会观察到商业利益相关者更喜欢不太精确但高度可解释的线性模型,因为它易于解释。但作为一名数据科学家,你知道在现实世界中,由于固有的高维数和特征之间复杂的非线性关系,非线性和复杂的模型总是更稳健和可靠。所以在一个理想的世界里,每个人都想在神圣的网格里,在那里你可以得到最高的模型性能和高度可解释的结果。
在这篇博客中,我简要地提到了我在项目中使用的一些技术,这些技术增加了可解释性,并解决了高模型性能和高可解释性之间的权衡问题。
Source: https://xkcd.com/1838/
以下是我用来增加模式可解释性的方法:
1.特征重要性:预测模型对特定特征的依赖程度?
2.部分相关图:特定特征如何影响模型预测?
3.Shap:哪些变量导致了这个预测?
4.莱姆:是哪些变量导致了这种预测?
为了解释上述方法,我使用了来自印度开放政府数据(OGD)平台——https://data.gov.in/——的教育部门的数据集,该平台支持印度政府的开放数据倡议。这一数据包括辍学率、有电的学校百分比、计算机设施、厕所等。印度所有的邦。出于好奇,我想测试小学的辍学率是否与学校的设施有关。因此,我使用辍学率作为 y 变量(目标),其他指标作为独立特征。
1。 特征重要性:
基尼系数重要性或平均减少杂质
对于分类问题,Scikit-learn 默认使用 Gini 杂质来计算特征重要性。特征重要性被称为“基尼重要性”或“平均减少杂质”。它被定义为集合中所有树的平均节点杂质的总减少量。通过到达特定节点的概率(在到达该节点的样本的总比例之外)对节点杂质的总减少进行加权。简而言之,这确保了如果“平均减少杂质”对于 2 个变量是相同的,但是变量 1 在树的顶部,而另一个在深度 5,那么变量 1 将变得更重要,因为与深度 5 的节点相比,它更容易到达该节点。因此,特性的值越高,它就越重要。最后,通过除以所有要素重要性值的总和,将要素重要性归一化到 0 和 1 之间。
下面是上述案例研究中的特征重要性图。
这表明,在印度各邦,小学辍学率受供电、供水和厕所设施的影响最大,而不是受电脑的影响。
排列重要性
置换重要性是计算特征重要性的替代方法,可用于任何模型。它基本上是一次一个特征,所有其他特征和目标保持不变。然后检查这如何影响重组数据中模型预测的准确性。因此,对于对预测影响最大的列,模型性能会降低。
在上表中,最重要的功能按重要性从高到低排列。权重列测量随机洗牌后模型性能(准确性)下降的程度。正如你所看到的,这两种方法中顶层变量的顺序是相同的,但这可能并不总是正确的。
2。 部分依赖情节(PDP)
现在,特性重要性帮助我们解决了这个难题的一部分。但是为了知道每个变量如何影响预测,我们可以分析部分相关图。这可以帮助我们识别目标和特征之间的关系是线性的、单调的还是更复杂的。
在这种方法中,我们一次改变一个变量的值,其他特征和目标保持不变。有了这个我们就可以理解预测的结果是如何随着特定变量的变化而变化的。PDP 的逻辑非常简单,对于感兴趣的特征,它基本上在数据集中的所有数据点上强制一个单一值,然后在所有数据点上平均预测。对特定特性的所有值重复此练习。
向下倾斜的图表表明,随着通电学校百分比的增加,辍学率与该特征的最小值相比有所下降。图表中的平坦区域表明,在这些区域中,%电力的增加不会导致辍学率%的任何变化。PDP 总是相对于特性的最小值进行测量,因此 y 轴上最左侧的点总是为零。蓝色区域表示不确定性。
您只需确保您正在分析的 PDP 的特征与数据集中的其他特征没有高度相关性。例如,在我们的数据集中,如果%有电的学校与%有电脑的学校呈正相关,那么当我们计算 PDP 时,将会有记录显示这两个特征的组合在现实中不太可能发生。如果在您的情况下,特征之间的相关性很高,那么您可以查找边际图和累积局部效应(ALE)图。
我将在接下来的博客中写关于莱姆和 SHAP 的内容。
请在评论中告诉我你对这个博客的想法。此外,我想知道您是否已经开发了来自印度开放政府数据(OGD)平台的案例研究。
这些内容最初发表在我的个人博客网站:http://datascienceninja.com/。点击此处查看并订阅即时接收最新博客更新。
解释多元时间序列上的递归神经网络
如何从多元时间序列上训练的复杂深度学习模型中获得理论上合理的解释
Photo by João Silas on Unsplash
什么
在本文中,我们将探索一种最先进的机器学习可解释性方法,并使其适应多元时间序列数据,这是一种以前没有准备好的用例。你会发现对核心概念的解释,它们是什么,它们是如何工作的,以及后面的例子。我们还将讨论提议的解决方案背后的主要思想,以及实例重要性的可视化建议。
为什么
这不再只是炒作,机器学习正在成为我们生活中重要的一部分。当然,那里没有任何有感知能力的机器,也没有斯嘉丽·约翰逊的爱耳者(对她的大声喊出来),但是这些算法的进化是不可否认的。他们可以开车,帮助医疗预测,预测股票,玩专业水平的视频游戏,甚至产生旋律或图像!但是这些机器学习模型不是完美无缺的,也不是万无一失的。它们甚至会产生误导,在与训练数据非常不同的样本中显示不正确的概率(我建议看看克里斯蒂安·佩罗尼关于不确定性的演讲 [1】)。因此,特别是在诊断病人或决定公司战略等关键应用中,至少对模型如何得到其输出值有一些了解是很重要的,这样用户就可以确认它是否可信。此外,在高性能模型与适当解释相结合的情况下,它可能会导致令人惊讶的发现,如疾病诊断中的基因或一年中某个时间对销售的影响。
We are not quite there yet in AI. GIF by the awesome Simone Giertz.
因此,将可解释性技术应用于所有机器学习是显而易见的,对吗?差不多吧。虽然线性回归和决策树等更简单的模型易于分析,但神经网络等更复杂的模型却无法自圆其说,尤其是在数据和参数维数较高的情况下。有人建议改变一些架构,使神经网络更容易解释,例如注意力权重。然而,这些方法不仅需要增加参数的数量和改变模型的行为(这可能会恶化其性能),它们可能不会给我们完整的画面(注意力权重仅指示每个特征的相对重要性,而不是它是否积极或消极地影响了输出)。因此,在性能和可解释性之间有一个权衡,为了能够解释模型,它必须足够简单或以某种方式特别适应,这限制了它的潜力。
幸运的是,基于扰动的方法的研究一直在增长,这是一种可解释性技术,应用输入数据的变化(即扰动)来计算重要性分数,通常不需要特定的模型架构。这意味着这些方法可以是模型不可知的,使得每一个可能的模型都是可解释的,从而消除了性能/可解释性的权衡(尽管有一些警告,我们将在后面讨论)。所以,让我们来看看现代基于扰动的可解释性技术背后的一些主要概念。
沙普利值
它们是什么?
Shapley values 是一个来自博弈论的概念,由 Lloyd Shapley 于 1953 年首先提出(我知道我说的是“现代”,但在这里请原谅我),它定义了一种计算合作博弈中每个玩家贡献的方法。这一切都归结为一个等式。考虑总共有 N 个玩家, i 我们正在计算其贡献的玩家,φI 玩家 i 的贡献, S 不包括 i 的玩家子集(其中 |S| 表示子集 S 中的玩家数量)以及 v 输出总数的函数为了计算玩家 i 的贡献,我们计算以下等式:
Shapley values equation.
换句话说,每个玩家的贡献由该玩家在所有可能的玩家组合上的边际贡献的加权平均值决定。注意,我说的组合是指博弈中的一部分参与者,不考虑他们的顺序,边际贡献是指在当前的组合中,当特定的参与者加入时,收益是如何变化的。既然我们已经理解了边际贡献部分,那么左边还有一些乱七八糟的东西。这些看似复杂的权重实际上可以产生 Shapley 值方程的简单等效版本:
Equivalent Shapley values equation.
在这个等式中,我们遍历所有可能的排列( R )玩家的完整列表,而不是仅仅使用唯一的边际贡献。注意,我说的排列是指玩家加入的顺序(例如,玩家 1 开始游戏,然后玩家 2 加入,接着玩家 3 加入,等等)。在这种情况下,它现在有了符号 PiR (不好意思,真的不能用中等文本的方程式形式来写),代表所有出现在 i 之前的选手,按当前顺序 R 。这种等价意味着权重的设置要考虑到一个独特的边际贡献在所有可能的玩家顺序中出现的次数。此外,这些权重的定义方式允许 Shapley 值满足一组属性,这些属性确保公平、真实地分配球员的贡献。为了保持这篇文章的合理简短,我不打算在这里列出它们,但是如果你想知道更多,你可以查看 Christoph Molnar 的可解释机器学习书籍。
例子
为了说明这一点,作为一个足球迷,想象以下场景:
假设我们有三名前锋(即在场上踢前锋的球员,主要目标是尽可能多地进球或助攻)。姑且称之为 B 、 L 、 V 。设 G 是这样一个函数,对于比赛中的一组前锋,输出该队进了多少球。记住这一点,想象当每组球员都在场上时,我们有以下得分目标:
我认为在这场比赛中,所有球员最终都会上场,这只是每个人何时上场的问题(从首发阵容开始,或者加入第一或第二替补)。因此,我们有 6 种他们参与游戏的可能场景,我们需要计算边际贡献:
作为实现 Shapley 值的最后一步,我们只需要对每个玩家应用 Shapley 值等式之一(唯一边际贡献的加权平均值或所有订单边际贡献的平均值):
请注意,我是如何通过我之前展示的两个方程来计算 Shapley 值的,两个方程导致了相同的结果。此外,由于该方法的一个性质(效率),所有 Shapley 值的总和等于大联盟的收益,即当所有参与者都在游戏中时的收益, G(B,L,V) 。
那又怎样?
现在,我不是想通过解释一个不相关的 50 年代的理论来和你玩游戏。你看,如果我们用“特征值”代替“参与者”,用“模型输出”代替“收益”,我们就有了一个可解释性的方法。要让这在机器学习的可解释性中有用,我们只需要解决两个问题:
- 我们如何使这种方法更快(记住,在它的原始形式中,它需要在我们想要解释的每个样本上迭代所有可能的特征组合)。
- 我们如何表现一个缺失的特性(在游戏理论中,消除一个特性的影响比忽略一个玩家更复杂;在大多数机器学习模型中,所有的特征必须总是有一些值,所以我们需要找到一种方法来降低一个特征的影响,同时仍然通过模型传递它)。
SHAP
这是什么?
2017 年,Scott Lundberg 和 Su-In Lee 发表了论文“解释模型预测的统一方法”【3】。顾名思义,他们提出了一种新的方法来解释机器学习模型,统一了以前的模型。他们发现,其他 7 种流行的可解释性方法(LIME、Shapley 采样值、DeepLIFT、QII、逐层相关性传播、Shapley 回归值和树解释器)都遵循相同的核心逻辑:通过局部线性模型从原始模型学习更简单的解释模型。正因为如此,作者称之为加性特征归因法。
这个局部线性模型魔术是什么?本质上,对于我们想要解释的每个样本 x ,使用模型 f 的输出,我们训练一个线性模型 g ,它在样本 x 上局部逼近 f 。然而,线性模型 g 并不直接使用 x 作为输入数据。相反,它将其转换为 x’ ,表示哪些功能被激活(例如, x’i = 1 表示我们正在使用功能 i ,而 x’i = 0 表示我们正在“移除”功能 i ),这与选择玩家组合的情况非常相似。这样,考虑到我们有 M 个特征和 M+1 个模型系数(名为 φ ,我们得到解释器模型的如下等式:
Additive feature attribution methods’ general equation.
并且,由于具有将x’转换为 x 的映射函数 hx ,所以每当我们接近x’(即*z’≈x’)*时,解释器模型应该通过遵守以下规则来局部逼近模型 f :
Local approximation of the interpreter model, in additive feature attribution methods.
知道我们想要自然解释的样本 x 具有所有可用的特征(换句话说,*x’*是所有 1 的向量),这种局部近似规定所有 φ 的总和应该等于样本 x 的模型输出:
The sum of the linear interpreter model’s coefficients should equal the original model’s output on the current sample.
这些方程都很有趣,但现在呢?诀窍在于这些 φ 系数代表什么以及它们是如何计算的。每个系数 φ ,这是一个线性模型,与模型上每个特征的重要性相关。例如, φi 的绝对值越大,特征 I 在模型上的重要性就越大。自然地, φ 的符号也是相关的,因为正的 φ 对应于对模型输出的积极影响(输出值增加),而负的 φ 则相反。这里的一个例外是 φ0 。没有功能 0,因此它不与任何特定的功能相关联。事实上,如果我们有一个全零向量z’作为输入,解释器模型的输出将是 g(0) = φ0 。理论上,它应该对应于不存在特征时模型的输出。实际上,SHAP 所做的是 φ0 假设所有数据的平均模型输出,因此在添加每个特征的影响之前,它代表模型的一种起点形式。因此,我们可以将每个剩余系数视为每个特征将基本输出值( φ 0)推至更大或更小的输出(取决于系数的符号),所有这些特征相关系数的总和导致当前样本的输出与平均输出值之间的差异。这个特性允许我们用 SHAP 软件包创建有趣的力图,正如你在下面的例子中看到的,一个模型预测一个足球队是否有一名球员赢得最佳球员奖。要了解这个例子的更多信息,请查看卡格尔关于 SHAP 价值观的教程。
Example of a force plot made with SHAP, on a model that predicts if a football team has a player win the Man of the Match award. The base value represents the model’s average output on all the data while each bar corresponds to a feature’s importance value. The color of the bar indicates its effect on the output (red is positive and blue is negative) and its size relates to the magnitude of that effect.
理想的性能
φ 系数还有一个有趣的方面。对于除了 φ0 之外的所有人,这同样不对应于任何单个特征的重要性,作者认为只有一个公式可以同时实现三个期望的属性:
1:本地精度
当对特定输入 x 近似原始模型 f 时,局部精度要求解释模型至少与原始输入 x 的 f 的输出相匹配。
SHAP’s local accuracy property.
2:思念
如果简化输入(x’)表示特征存在,那么遗漏要求原始输入中遗漏的特征没有影响。
SHAP’s missingness property.
3:一致性
设FX(z ')= f(hx(z ‘)】和 z’ \ i 表示设置 z’i = 0 。对于任意两个型号 f 和f’,如果
SHAP’s consistency property.
对于所有输入 z’ ∈ {0,1}^M ,则 φ(f ',x) ≥ φ(f,x) 。
满足这三个特性的公式是……做好准备,迎接似曾相识的感觉……
Drumroll please.
Defended by the SHAP paper authors as the only formula for coefficients φ which obeys to the desirable properties of local accuracy, missingness, and consistency.
看着眼熟?本质上,它是 Shapley 值公式,适用于这个二进制值的世界。以前我们有由 S 代表的玩家组合,现在我们有由*z’*代表的激活特征组合。权重和边际贡献仍然存在。这不是巧合,这些系数被称为 SHAP 值,其中 SHAP 代表沙普利加法解释。
效率
从 SHAP 值的定义出发,我们仍然有同样的两个问题要解决:效率和如何表示缺失的值。这两个问题都是通过对缺失特征的采样和期望来解决的。也就是说,我们固定正在使用的特征的值(那些具有 z’ = 1 的特征,其值对应于 zs 的特征),然后在固定次数的迭代中,通过样本值对剩余的、移除的特征(那些具有 z’ = 0 ,其值对应于*zs‖*的特征)进行积分。通过检查停用特征的几个不同值并获得它们的平均值,我们正在减少这些特征对输出的影响。我们也加快了过程,因为我们不需要经历每一个可能的迭代。
Expectation done in SHAP. It assumes feature independence and model linearity locally.
知道了这种对随机样本整合的需求,我们需要在每次运行 SHAP 时定义两组数据:
- **背景数据:**SHAP 从中抽取随机样本来填充缺失特征的集合。
- **测试数据:**包含我们要解释其预测的样本的集合。
SHAP 还通过对重要性值应用正则化来加速该过程。换句话说,一些低重要性要素将假定 SHAP 值为 0。此外,考虑到与其他可解释性技术的统一,SHAP 实现了具有特定模型优化的各种版本,如用于深度神经网络的深度解释器,以及用于决策树和随机森林的树解释器。
除了这种方法和优化的统一,SHAP 还准备使用可视化,如之前显示的力图、依赖贡献图和汇总图,如以下相同的足球示例所示。
SHAP summary plot for the example of prediction of whether a football team has a player win the Man of the Match award. Features are ranked from descending average SHAP value from top to bottom and different samples are shown, with how the feature’s value (represented by the color) impacted the output (X axis).
我们到了吗?
我知道你现在的感受:
When you find out about SHAP.
考虑到 SHAP 有充分根据的理论及其 python 实现的实用性,你有理由这么做。但是,不幸的是,仍然存在一些问题:
- SHAP 的开发重点是张量流。因此,在撰写本文时,与 PyTorch 的完全兼容性尚未得到保证,尤其是在深度解释器和梯度解释器的深度学习优化变体中。
- 在撰写本文时,SHAP还不能很好地适应多元时间序列数据。例如,如果您现在使用 SHAP 的任何解释器模型对这种类型的数据进行测试,您将会看到要素的 SHAP 值加起来是奇怪的数字,不符合局部精度属性。
但是不要绝望。我已经找到了一个解决这个问题的方法,接下来我们将讨论这个方法。
内核解释器来解释它们
它是如何工作的
正如我提到的,SHAP 有多个版本的解释器模型,基于它统一的其他可解释性方法。其中一个是内核解释器,它基于流行的石灰【6】。它有一些明显的相似之处,例如使用局部近似原始模型的线性模型作为解释器,并使用简化的输入x’,其中值 1 对应于正在使用的特性的原始值,值 0 表示特性缺失。此外,LIME 和它的 SHAP 对应物(内核解释器)不假设任何特定的模型组件或特征,例如决策树或梯度的反向传播,这使它们完全与模型无关。主要区别在于线性模型的损失函数。虽然 LIME 启发式地定义了损失函数、其相关的加权核和正则化项,但 SHAP 论文的作者认为这破坏了局部精度和/或一致性属性,SHAP 的核解释器使用以下固定参数目标函数:
Objective function minimized by the SHAP Kernel Explainer to train its linear regression model.
这里平方损失是足够的,因为我们希望 g 尽可能接近 f 。关于加权核,查看这些参数有效性的一种方式是,当:
- |z’| = 0 ,强制φ0 = f(φ)
- |z’| = M ,迫使∈φI[I = 0,…,M] = f(x )
这些参数不仅通过保证符合三个期望的性质而提供了优于石灰的优势,而且通过线性回归的所有 SHAP 值的联合估计给出了比经典 Shapley 方程更好的样本效率。
由于我们正在训练一个线性回归模型,除了设置要解释的数据和 SHAP 从中获取随机样本的背景数据之外,唯一需要定义的主要参数是解释每个预测时重新评估模型的次数(在 python 代码中称为nsamples
)。与其他机器学习模型一样,重要的是要有足够多的训练迭代次数,以便通过不同的训练会话获得拟合良好且方差较低的模型。请记住,在这种情况下,我们不需要担心过度拟合,因为我们真的只是想解释特定样本上的模型,而不是事后对其他数据使用结果解释器,所以我们真的希望大量的模型重新评估。
An example animation illustrating how SHAP Kernel Explainer works, in a simplified way. The interpreter g(z’) updates its coefficients, the SHAP values, along the combinations of z’, being reset when the sample x changes. Note that, in real life, more reevaluations (i.e. training iterations) should be done on each interpreter model.
这个内核解释器方法自然有一个缺点。由于我们需要对我们想要解释的每个预测训练一个线性回归模型,使用几次迭代来训练每个模型,并且没有特定的模型类型优化(例如 Deep Explainer 和 Tree explainer),内核解释器运行起来可能非常慢。这完全取决于您想要解释多少数据、从多少背景数据中采样、迭代次数(nsamples
)和您的计算设置,但是计算 SHAP 值可能需要几个小时。
简而言之,如果内核解释器是一个迷因,它应该是这样的:
Hey, just because sloths are slow doesn’t mean they aren’t awesome. Meme by my procrastinating self.
多元时间序列修正(又名时间旅行树懒)
由于内核解释器应该在所有模型上工作,只需要一个预测函数来进行解释,我们可以尝试用一个在多变量时间序列数据上训练的递归神经网络(RNN)来进行解释。你也可以通过我做的【7】的简易笔记本自己试试。在那里,我创建了以下虚拟数据集:
Dummy multivariate time series dataset used in the example notebook [7].
本质上,你可以把它想象成一个健康数据集,病人由subject_id
识别,他们的临床访问由 ts 识别。标签可能表明他们是否患有某种疾病,从 0 到 3 的变量可能是症状。注意Var3
和Var2
是如何被设计成特别有影响力的,因为当它们低于一定水平时,标签通常会被激活。Var0
紧随其后,但影响较小,最后Var1
基本上是随机的。我还包含了一个“输出”列,它指示了被训练的 RNN 模型标记为 1 的预测概率。如您所见,一般来说,它在预测标签方面做得很好,在训练(3 名患者)和测试(1 名患者)集上的 AUC 分别为 0.96 和 1。
对于 SHAP 内核解释器将使用的预测函数,我只需要确保数据是浮点型 PyTorch 张量,并设置模型的前馈方法:
Model’s prediction method used in the current SHAP Kernel Explainer example.
由于它是一个小数据集,我将背景和测试集都定义为整个数据集。对于较大的数据集,这是不推荐的,因为由于内核解释器的缓慢,您将希望使用一小部分数据作为您想要解释的样本,并且避免在后台和测试集中有相同的数据。
然而,当我们将 SHAP 系数的结果总和与输出进行比较时,它们并不完全匹配,违反了局部精度公理:
Example of subject 0’s real model output and the sum of SHAP coefficients, in the original SHAP code.
为什么会这样?这个版本的 SHAP 不是应该可以演绎各种模型吗?嗯,问题的一部分是,看代码,你会看到 SHAP 期望表格数据。文档中甚至有一条注释提到了对 2D 数据的需求:
X : numpy.array 或者熊猫。DataFrame 或任何 scipy.sparse 矩阵
一个样本矩阵(# samples x # features),用于解释模型的
输出。
在我们的例子中,数据是三维的(#样本 x #时间戳 x #特征)。如果我们使用一个更简单的模型,一个仅使用单个实例来预测标签的模型,这仍然是好的。但是,当我们使用 RNN 时,它会在隐藏状态下从以前的实例中积累内存,它会将样本视为单个实例的单独序列,从而消除了模型内存的使用。为了解决这个问题,我不得不修改 SHAP 内核解释器代码,使其包含解释多元序列递归模型的选项。还需要更微妙的变化,但核心的增加是代码的这一部分:
Core addition to the SHAP Kernel Explainer to make it compatible with multivariate time series data and RNNs.
正如你所看到的,只有当我们之前检测到模型是一个递归神经网络时,才会执行该代码,它会单独循环通过每个主题/序列,并通过模型的隐藏状态,即当前序列中之前实例的内存。
经过这些改变后,我们现在可以进入同一个例子,看到 SHAP 系数的总和正确匹配实际输出!
Example of subject 0’s real model output and the sum of SHAP coefficients, in the modified SHAP code.
现在,如果我们查看摘要条形图,我们可以看到功能重要性的总体排名:
Average SHAP values (feature importance) on the dummy dataset, using all the data as background data.
看起来不错!Var2
和Var3
被正确识别为最重要的特征,其次是不太相关的Var0
和不太重要的Var1
。让我们来看一个病人 0 的时间序列的例子,以确认它是否,事实上,很好地解释了个人预测:
Feature importance along the dummy dataset subject 0’s time series. The border between the red shade (output increasing features) and the blue shade (output decreasing features) represents the model’s output for each timestamp.
我们的数据集验证了这一点,因为最初,当Var2
和Var3
具有高值时,它会降低输出,而在最后阶段,随着Var2
和Var3
降低,输出会增加。我们可以通过获得时间戳 3 的力图来进一步确认这一点,其中输出概率上升到 50%以上:
Force plot of the feature importance, for the same dummy dataset subject 0, on timestamp 3. The size of each feature value’s block corresponds to its contribution.
我们真的需要所有的背景数据吗?
由于 SHAP 内核解释器并不是真的快(不要逃避自己,如果你运行前一个笔记本,它的速度很快,因为数据集非常非常小),我们应该考虑每一个机会使它更快。自然地,当训练解释器模型时,该过程的计算量大的部分是通过来自背景数据的样本的多个组合的迭代。因此,如果我们能减少样本数量,我们就能得到加速。现在想一想:我们可以用一个参考值来表示缺失的特性吗?如果有,会是什么?
Thinking about that reference value.
我想说,甚至 SHAP 论文中给出的一个公式也给了我们一个提示(这篇文章“SHAP”部分前面“效率”小节中的那个)。如果我们对样本进行积分以获得缺失特征的期望值,为什么不直接使用这些特征的平均值作为参考值呢?如果在预处理阶段,我们将数据标准化为 z 分数,这就更容易做到了。这样,我们只需要使用全零向量作为唯一的背景样本,因为零代表每个特征的平均值。
z-scores equation, where data x is subtracted by its mean μ and then divided by the standard deviation σ.
仅用零参考值而不是所有以前的背景数据重新运行内核解释器,我们得到下面的摘要条形图:
Average SHAP values (feature importance) on the dummy dataset, using just an all zeroes sample as background data.
我们得到了与使用所有数据集作为背景数据的情况相似的结果!功能重要性的排名略有不同,Var3
略微超过Var2
成为最相关的功能,而Var1
的重要性更高,尽管它仍然是最不相关的。除了这些差异之外,它实际上很有趣,因为我打算将Var3
作为最重要的特性。你也可以在笔记本中查看更详细的时间序列和力图,但它们也接近我们之前得到的。
规模,规模,规模
当然,前面的例子使用了一个不切实际的小玩具数据集,只是因为实验很快,我们确切地知道会发生什么。我还在研究一个真实的健康数据集,涉及 1000 多名 ALS 确诊患者的体检。不幸的是,由于这个数据集不是公开的,我不能分享它,也不能将它合并到一个打开的笔记本中以使结果可重复。但是我可以和你分享一些初步的结果。
为了给出一些背景,我训练了一个 LSTM 模型(一种递归神经网络),以预测患者在未来 3 个月内是否需要无创通气,这是一种常见的程序,主要在呼吸系统症状恶化时进行。
在这个模型上运行修改后的 SHAP 内核解释器会给我们带来以下可视化效果:
Average feature importance for the ALS dataset.
Feature importance along an ALS patient’s time series. The border between the red shade (output increasing features) and the blue shade (output decreasing features) represents the model’s output for each timestamp.
Force plot of the feature importance, for the same ALS patient, on timestamp 9. The size of each feature value’s block corresponds to its contribution.
这里有一些有趣的注释:
- 7 个最重要的特征,按重要性排序,都与呼吸系统症状有关,尤其是来自医生进行的呼吸系统评估的
3r
和p10
。 - 疾病持续时间、性别和年龄也是最重要的特征,这似乎是有意义的。
- 我们现在看到一个更详细的时间序列可视化,显示了更多的功能。同样相关的是,由于正则化,我们只看到了数据集中总共 47 个要素中最有影响力的 20 个要素。
这种解释是对 183 名患者的时间序列进行的,最大序列长度为 20,使用 0 作为参考值。我在 C7 机器(12 个 CPU 内核,30GB 内存)上运行了paper space【8】中的代码。完成大约花了 5 个小时,而使用 50 个背景样本的替代方案估计需要 27 个小时。现在你相信我说的慢了吧?至少我们的参考值技巧仍然能够提高运行时间。
好了,现在我们需要的都有了。对吗?
虽然看起来我们得到了快乐的结局,但这里仍然有一些东西。这篇文章是关于解释多元时间序列数据的模型,但是我们只讨论了特征重要性分数。我们如何知道哪些实例/时间戳最相关?换句话说,我们如何知道实例重要性分数?不幸的是,目前 SHAP 还没有内置的多元序列数据。为此,我们需要想出自己的解决方案。
错误 404:找不到实例重要性
正如我们所讨论的,SHAP 主要是为处理 2D 数据而设计的(#样本 x #特性)。我向您展示了代码中的一个变化,它允许单独考虑不同序列的特性,但这是一个变通办法,只能导致特性的重要性,而不能从整体上解释实例的相关性。人们仍然会想,是否有可能再次应用 SHAP,愚弄它,让它把实例当作特征。然而,这可行吗,甚至有意义吗?首先,我们已经有了使用 SHAP 来确定特征重要性的缓慢过程,因此再次应用它来获得实例重要性可能会使整个解释管道变得不切实际地缓慢。然后,考虑到 SHAP 是如何通过遍历功能子集的组合,删除剩余的功能(在这种情况下,删除实例),这似乎是不现实的。在时间动态相关的真实世界数据中,我认为考虑时间事件之间存在多个间隙的合成样本没有意义。考虑到所有这些,在我看来,我们应该寻求一个更简单的解决方案。
最初的方法是相当自然的:删除我们想要获得重要性分数的实例,然后看看它如何影响最终的输出。为此,我们用没有相应实例的序列的输出减去原始输出,从而得到一个分数,该分数的符号指示该实例向哪个方向推动输出(如果新的输出具有较低的值,则意味着该实例具有积极的影响;对于较高的值反之亦然)。我们可以称之为遮挡分数,因为我们正在遮挡序列中的一个实例。
Occlusion score determined by the effect of instance i on the final output. N is the index of the last instance of the sequence and S is the set of instances in the sequence.
虽然有道理,但可能还不够。当随着时间的推移跟踪某事时,例如患者的疾病进展,往往会有某些时刻发生一些新的事情,这些事情可能会产生影响或在随后的事件中重复。例如,如果我们预测症状恶化的概率,我们可以有一个病人,开始时病得很重,但在成功治疗后,完全治愈,再次生病的概率几乎为零。如果我们只应用前面的实例封闭方法,那么治疗后患者的所有实例都可以得到相似的分数,尽管很明显,他接受治疗的时刻实际上是关键时刻。为了解决这个问题,我们可以考虑实例带来的输出中的变化。也就是说,我们将正在分析的实例的输出与其之前的实例进行比较,就像我们在计算导数一样。
Output variation score calculated through the derivative in the output caused by instance i. S is the set of instances in the sequence.
当然,遮挡分数在许多场景中可能仍然是相关的,所以理想的解决方案是将两个分数组合成一个加权和。考虑到遮挡的更直接的方法和一些经验分析,我选择遮挡的权重为 0.7,输出变化的权重为 0.3。由于输出中的这些变化可能有些小,通常不超过输出中 25 个百分点的变化,我认为我们还应该对结果应用非线性函数,以便放大高分。为此,我选择了 tanh 函数,因为它将所有内容保持在-1 到 1 的范围内,并在内部添加了乘数 4,因此输出中 25 个百分点的变化非常接近最大值 1。
Instance importance score, calculated through a tanh activation on a weighted sum of the occlusion score and the output variation score.
尽管结合了两个分数和非线性函数的应用,解决方案仍然简单而快速。作为比较,将这种方法应用于相同的 183 个患者数据和与前面的特征重要性示例相同的计算设置,这种需要大约 1 分钟来运行,而特征重要性需要 5 个小时。
有了这个实例重要性公式,我们可以可视化分数,即使是同时在多个序列中。受 Bum Chul Kwon 等人的论文“retain vis:Visual Analytics with interpretatable and Interactive Recurrent Neural Networks on Electronic Medical Records”[9】的启发,我一直在研究您在下面看到的时间序列图,其中每一行都对应于一个序列(在我的例子中,是一个患者的时间序列),实例由圆圈表示,圆圈的颜色表示其重要性(强度表示分数大小,颜色表示符号),我们还可以添加简单的预测表,这让我们了解最终的输出值。
Example of visualizing instance importance on multiple sequences, along with their final probability.
请注意,患者 125 与 ALS 示例中的特征重要性相同。它充分表明时间戳 9 是一个相关的、输出增加的实例,而时间戳 10 减少了该输出值。
即使我希望你喜欢我提出的逻辑和情节,例如重要性,我还没有准备好与你分享这段代码,因为它仍然需要微调。作为我硕士论文的一部分,我正在创建一个名为 Model Interpreter 的 API,它包含了我们在这里讨论过的现成实现(多元时间序列的 SHAP、实例重要性分数和绘图)等等。我希望能够在 GitHub 上公开到 10 月份。同时,请随意探索这些主题,并做自己的实验!还记得我的 SHAP修改版【10】是公开的,所以你已经可以使用它了。
最后的想法
如果有什么你应该从这篇文章中学到的,即使你只是浏览了图片和迷因,那就是这个:
虽然它仍然很慢,但提出的修改后的 SHAP 可以解释任何模型,即使是在多元时间序列数据上训练的模型,也具有确保公平解释和实现直观理解的可视化的理想属性;尽管软件包中仍然缺少实例重要性计算和绘图。
在机器学习可解释性方面还有工作要做。效率和易用性需要解决,总有改进的空间,以及替代方案的建议。例如,SHAP 仍然有一些假设,像模型的特征独立性和局部线性化,这可能并不总是正确的。然而,我认为我们已经从 SHAP 强有力的理论原则及其实施中有了一个良好的起点。我们终于到达了一个时代,我们不仅可以从复杂的算法中得到结果,还可以问他们为什么,并得到一个现实的,完整的回答。
No more black box models refusing to give answers.
参考
[1] C .佩罗尼,深度学习中的不确定性估计 (2019),PyData Lisbon 2019 年 7 月
[2] C .莫尔纳尔,可解释机器学习 (2019),克里斯托夫·莫尔纳尔的网页
[3] S. Lundberg 和 S. Lee,(2017),NIPS 2017
[4] S. Lundberg, SHAP python 包 (2019),GitHub
[5] D. Becker, Kaggle 的 SHAP 价值观教程 (2019),Kaggle
[6] M. Ribeiro 等人,“我为什么要相信你?”:解释任何分类器的预测 (2016),CoRR
[7] A. Ferreira, GitHub 知识库,简单演示了 SHAP 在虚拟多元时间序列数据集上的表现 (2019),GitHub
[8] Paperspace 云计算服务
[9] B. Chul Kwon 等人, RetainVis:在电子病历上使用可解释和交互式递归神经网络的视觉分析 (2018),IEEE VIS 2018
[10] A .费雷拉,修正的 SHAP,兼容多元时间序列数据 (2019),GitHub
[11] R .阿斯特利,革命性的新人工智能区块链物联网技术 (2009),YouTube
解释线性回归的系数
Source: Unsplash
学习如何正确解释线性回归的结果——包括变量转换的情况
如今,有太多的机器学习算法可供我们尝试,以找到最适合我们特定问题的算法。一些算法有明确的解释,其他的作为黑盒工作,我们可以使用诸如石灰或 SHAP 的方法来导出一些解释。
在本文中,我将重点解释最基本的回归模型的系数,即 线性回归 ,包括因变量/自变量被转换的情况(这里我说的是对数转换)。
1.水平水平模型
The basic form of linear regression (without the residuals)
我假设读者熟悉线性回归(如果不熟悉的话,有很多好文章和中等帖子),所以我将只关注系数的解释。
线性回归的基本公式可以在上面看到(为了简单明了,我故意省略了残差)。公式中, y 为因变量, x 为自变量。为了简单起见,让我们假设它是单变量回归,但这些原则显然也适用于多变量情况。
为了客观地看待这个问题,假设在拟合我们收到的模型之后:
拦截(一)
我将把截取的解释分成两种情况:
- x 连续且居中(从每次观察中减去 x 的平均值,变换后的 x 的平均值为 0) —当 x 等于样本平均值时,平均值 y 为 3
- x 连续,但不居中——当 x = 0 时,平均值 y 为 3
- x 是分类的——当 x = 0 时,平均值 y 是 3(这一次表示一个类别,下面将详细介绍)
系数(b)
- x 是一个连续变量
解释: x 增加一个单位导致平均 y 增加 5 个单位,所有其他变量保持不变。
- x 是一个分类变量
这需要更多的解释。假设 x 描述性别,可以取值(‘男性’,‘女性’)。现在让我们把它转换成一个虚拟变量,男性取值 0,女性取值 1。
解释:在所有其他变量保持不变的情况下,女性平均比男性高 5 个单位。
2.日志级模型
Log denotes the natural logarithm
通常,我们使用对数变换将正偏态分布中的外围数据拉至更接近大部分数据的位置,以使变量呈正态分布。对于线性回归,使用对数变换的另一个好处是可解释性。
Example of log transformation: right — before, left — after. Source
和以前一样,假设下面的公式表示拟合模型的系数。
拦截(一)
解释与普通(级别-级别)情况类似,但是,我们需要取解释 exp(3) = 20.09 的截距指数。不同的是,这个值代表 y 的几何平均值(与 level-level 模型的算术平均值相反)。
系数(b)
当涉及到解释分类/数字变量时,原则再次类似于水平-水平模型。类比截距,我们需要取系数的指数:exp(b)= exp(0.01)= 1.01。这意味着在所有其他变量保持不变的情况下, x 的单位增长导致平均(几何) y 的 1%增长。
这里有两件事值得一提:
- 在解释这种模型的系数时,有一条经验法则。如果 abs(b) < 0.15 it is quite safe to say that when b = 0.1 we will observe a 10% increase in y 在 x 中为单位变化。对于绝对值较大的系数,建议计算指数。
- 当处理[0,1]范围内的变量(如百分比)时,解释起来更方便,首先将变量乘以 100,然后拟合模型。这样解释更直观,因为我们将变量增加 1 个百分点,而不是 100 个百分点(立即从 0 到 1)。
3.水平对数模型
让我们假设在拟合我们收到的模型之后:
截距的解释与水平-水平模型的情况相同。
对于系数b—,x增加 1%会导致平均 y 增加 b /100(本例中为 0.05),所有其他变量保持不变*。为了得到准确的数量,我们需要取 b × log(1.01),在这种情况下得到 0.0498。*
4.双对数模型
让我们假设在拟合我们收到的模型之后:
我再次关注对 b. 的解释,在所有其他变量保持不变的情况下, x 增加 1%会导致平均(几何) y 增加 5%。为了获得准确的数量,我们需要取
大约是 5.1%。
结论
我希望这篇文章已经向您概述了如何解释线性回归系数,包括一些变量经过对数变换的情况。一如既往,我们欢迎任何建设性的反馈。可以在 Twitter 或者评论里联系我。
喜欢这篇文章吗?成为一个媒介成员,通过无限制的阅读继续学习。如果你使用这个链接成为会员,你将支持我,不需要你额外付费。提前感谢,再见!
参考
- https://stats . idre . UCLA . edu/SAS/FAQ/how-can-I-interpret-log-transformed-variables-in-terms-of-percent-change-in-linear-regression/
- https://stats . idre . UCLA . edu/other/mult-pkg/FAQ/general/FAQ how-do-I-interpret-a-regression-model-when-some-variables-is-log-transformed/
NGBoost 和预测间隔
什么是概率回归,你应该如何解释概率预测?
自从我们发布了自然梯度增强 (NGBoost)以来,我们已经从社区获得了巨大的反响,我们很高兴有这么多人在使用我们的方法。很明显,概率回归需要一种快速、灵活、易用的算法!
然而,我们也很清楚,概率回归有一点混乱。这是意料之中的——我们有点偏离传统的可用方式,所以有些混乱是自然的。这就是我写这个帖子的原因!
所以,事不宜迟,让我们开始吧。我想谈论的主要话题是概率监督学习和预测区间。阅读完本文后,您应该能够:
- 解释监督学习和概率监督学习在回归和分类方面的区别。
- 正确解释 NGBoost 等算法生成的预测区间。
概率监督学习和 NGBoost
首先,什么是概率监督学习,它与“普通”监督学习相比如何?
标准的监督学习问题是:对于预测器的一个观测值 X (比如说 X=x ),我们期望看到的 Y 的值是多少?这些方法采用值 x 并返回一个表示我们期望的结果或类的数字 y 。没有得到输出的“概率”的概念。我们有时称之为点预测。
为了进一步讨论,让我们将监督学习(点或概率)分为分类和回归,分类的结果只能取有限个值,回归的结果可以取连续无限个值(排列在真实线上)。
在概率监督学习中,我们感兴趣的是观察每个可能结果的相对概率,假设我们看到了 X=x 。在分类的情况下,这将是一个概率向量,每个类别一个(概率质量函数)。在回归中,我们得到每个可能结果的相对概率的“连续”向量(概率密度函数)。一般来说,我们说的是给定 X=x 的 Y 的分布。概率监督学习器取一个值 x ,并返回一个在 Y 上的分布,指示不同值 y 的相对可能性。
了解任何概率分类器或回归器都可以用作标准分类器或回归器也很有帮助。如果给定 X=x ,我们有了 Y 的可能性,就有可能通过寻找所有类别 y 中的 P(Y=y|X=x) 的最大值(在分类的情况下)或者通过积分(在回归的情况下)的预期结果*E【Y | X = X】*来找到最可能的类别。
在 NGBoost 之前,很难用灵活的基于树的模型进行概率回归。但是很久以前就有可能进行概率分类。这是因为大多数分类器实际上是概率分类器,它们返回每个类的概率。例如,当您运行逻辑回归时,标准做法是在输出中获取类概率。
但不是所有的分类器都输出概率。例如,普通的支持向量机通常只返回最可能的类别标签。几乎所有的回归量也是如此:你得到的只是预期的结果(单个实数,相当于单个类)。想想线性回归:当你对一个观察值 x 调用predict
方法时,你只是得到一个单一的值,而不是所有可能值的分布。
前面说过,概率分类已经很普遍了。大多数众所周知的分类方法都支持概率分类。在这方面,NGBoost 并没有增加太多新的东西。它确实使概率分类更具原则性,并消除了分类中多类提升所需的一些特别选择。但是这些改进对用户来说很大程度上是不可见的,所以在进行分类时,NGBoost 不会让您相对于标准 boosting“做得更多”。
NGBoost 增加了一种进行概率回归的方法,这种方法快速、易用、灵活,就像我们已经有的概率分类算法一样。概率回归在 NGBoost 之前当然是可能的,但总是有所取舍。如果你假设同方差,线性回归可以是概率性的,但是这样你就陷入了一个简单的模型。如果你想要一个灵活的非参数方法,复杂的贝叶斯方法总是一个选择,如果你愿意弄清楚如何使用它们,并且有时间等待 MCMC 采样器。另一方面,NGBoost 运行速度很快,允许您适应各种复杂的模型,最重要的是,开箱即可运行。
预测间隔和 NGBoost
让我们直接进入: NGBoost 不返回置信区间。
但是等等?那么 NGBoost 网站上的这张图是怎么回事?概率回归的好处不就是给你一个置信区间吗?
没有。困惑在于信心区间和预测区间的不同。
在 NGBoost 中,我们得到的是结果取每个可能值的相对概率。如果我们操纵这种分布(通过整合不同的集合),就有可能找到一组结果,根据模型,结果在 95%的情况下都落在该组中。但这不是一个置信区间——这只是一组可能的结果。这就是我们在上图中看到的。
注意,分类也很简单:假设有 4 个类( a,b,c,d ),它们的估计概率(给定 X=x )是 P(Y=a)=5%,P(Y=b)=20%,P(Y=c)=50%,P(Y=d)=25% 。然后集合 {b,c,d} 形成 95%可能性的结果集合,同样的方式,在回归设置中,给定 X=x ,像*【3.4,6.11】*这样的区间可能包含 Y 密度的 95%的质量。这些集合通常被称为“预测区间”(尽管它们本身不一定是“区间”)。
因此,基本上,在回归的情况下,NGBoost 返回的预测区间是你可以很容易地自己创建的,如果你使用任何标准的概率分类器来做分类(假设是在不同的问题上)。
有可能为概率分类建立置信区间。例如,像 P(Y=a|X=x) 这样的值,我们使用一个模型来估计,它取决于我们收集的数据,所以它本身实际上是一个随机变量。如果我们对数据生成过程做出某些假设,我们可能能够利用这种理解来设计一个区间,这样我们就可以预期该区间在 95%的时间里包含真*概率 P(Y=a|X=x) 。但这需要大量的数学计算。这通常很复杂,取决于你对现实世界的看法。但是,如果你这样做,你也可以计算概率回归的置信区间:只需用 *P(Y=y|X=x)代替 P(Y=a|X=x) 。你会得到一个不同的置信区间来表示无限可能值 y 可能取值的可能性!
在回归设置中,有时你也会看到 E[Y|X=x] 的置信区间(即 y 的预测值)。想法是一样的。将 E[Y|X=x] 的估计值视为一个随机变量(因为您对它的估计取决于随机的数据),通过假设关于 X 和 Y 的分布的东西,找出关于它的采样分布的一些东西,并使用它来建立一个可能跨越 E[Y|X=x]的真实值的区域。
这些都和 NGBoost 给你的不一样。根据模型,NGBoost 只是告诉你观察到每个结果的相对可能性。如果你相信模型,所见即所得。如果你不这样做,你可能需要做一堆额外的假设,以便有效地限定你在多大程度上应该对它的估计“有信心”。
结论
希望这有助于澄清一些关于 NGBoost 做什么以及如何解释其输出的困惑。理想情况下,您现在能够清楚地区分点估计的监督学习和概率监督学习,并且您知道预测区间的含义。
NGBoosting 快乐!
美国的跨种族婚姻(1850-2017)
一个家庭的爱是如何改变一切的。
https://www.nytimes.com/2017/06/11/us/50-years-after-loving-v-virginia.html
律师 Philip J. Hirschkop 和 Bernie Cohen 问 Richard Loving,他希望律师们告诉法庭什么,因为他们提出了他们对 T4 Loving 诉弗吉尼亚州的案件。他回应道,
“告诉法庭我爱我的妻子”
接下来发生的是一个可爱的决定,该决定认为存在于 16 个州的跨种族婚姻在全国范围内是非法的。
这个案子一直让我很感兴趣。除了显而易见的原因——各州不应该对种族纯度(他们以前的推理)以及谁应该和不应该结婚有任何发言权,我还欣赏作为个人的爱——两个说话相当温和的人对他们的婚姻采取了立场。正是因为他们,我才能够嫁给我在马里兰州的丈夫。
问题
2019 年秋季学期,我报名参加了马里兰大学帕克学院的 INST760 课程——数据可视化,老师是Niklas Elmqvist博士。(请看我的精彩同学作品这里)。我们被分配了一个课程项目,我想看看随着时间的推移,跨种族婚姻的趋势,看看这些家庭住在哪里,存在什么样的种族组合。美国存在的许多法律都与白人妇女嫁给非裔美国人或美洲印第安人直接相关,但我想看看这两种结合之外的情况。例如,亚洲人和非裔美国人呢?幸运的是,我能够访问匿名的公共使用微数据样本 (PUMS),追溯到 1850 年。
在纪录片 爱情故事中,理查德和米尔德里德都认识住在他们附近、合法结婚、不同种族的夫妇(Buirski,2011)。这在人口普查记录中有记录吗?简而言之,是的。格利克森在论文《1850-2000 年的黑人和白人跨种族婚姻趋势》中写道,“许多混血儿夫妇未经州政府同意就像夫妻一样生活……虽然没有今天这么普遍,但[黑人和白人之间的婚姻]并不像预期的那样罕见。”(Gullickson,2006)对 1850 年以来的人口普查记录的粗略分析中就有这方面的证据,当时有 75 对跨种族夫妇生活在 23 个不同的州。
初始目标
我最初的目标是巨大的——我想全面了解这些夫妇住在哪里,他们接受了多少教育,他们以什么为生,我没有完全考虑到最初的范围会涉及多少数据分析。然而,我知道我的主要关注点是种族的结合,他们生活的地方,以及与他们州的反种族混合法的对比。
数据
数据摘自明尼苏达大学的 IPUMS 网站。他们的数据文档提供了在任何给定的人口普查或美国社区调查(ACS)中可用的数据。不幸的是,我无法获得所有人口普查的所有变量。这个来源有县级数据,但不是每次人口普查(1950 年和 1970 年)都有,所以我把这个可视化保存在州一级。这一发现令人失望,因为皮尤报告指出,这些夫妇中的许多人最近倾向于住在城市,我想看看我的数据是否与此一致。
这些数据大多是 1%加权样本。如果我说在 1940 年明尼苏达州的本顿县有 100 桩跨种族婚姻,这并不能给出全貌,因为我们不知道当时该县有多少桩婚姻,不论种族。因此,我按比例展示我的数据,以便为用户提供更多的背景信息。
用户可能会注意到 1890 年人口普查数据中的一个缺口。这个差距是因为 1921 年商务部大楼的一场火灾。更多信息请访问:https://www . archives . gov/publications/prologue/1996/spring/1890-census-1 . html
文献评论
*关于跨种族婚姻的一个更重要的著作是皮尤研究中心的研究,名为,“ 在爱诉弗吉尼亚 *之后 50 年美国的跨种族婚姻。”它概述了自恋爱以来美国跨种族婚姻的增长趋势。诸如此类的研究激励我更深入地挖掘数据,这可以解释为什么我想获得额外的变量,如职业和教育程度。然后我意识到,因为我要追溯到 1850 年,(当这些研究通常开始于 1960 年左右),坚持地点和种族构成可能会有一些有趣的发现。
对比皮尤的报告,我读了奥利弗·王的评论。他揭示了这份报告没有:
- 遵循约会模式,这可以更好地反映社会的变化,
- 给同性婚姻带来光明,或者
- 阐述“种族性”。
追踪整个国家 167 年来的约会模式会非常有趣,但这根本不可能。我主要对婚姻感兴趣。但是我想包括同性伴侣的数据。经过一些研究和数据分析,我能够看到早在 1980 年人口普查中列出的已婚夫妇。**
皮尤研究首先按种族列出了人们,然后是种族,当我提到种族时,只有一个——西班牙裔。如果有人认为自己是黑人和西班牙人,他们就会被归类为西班牙人。我知道这是人口普查的工作,但这不是我想做的事情。从本质上说,这是将一个人的身份的一部分吸收到另一个人身上,所以我决定将两者都包括进来——一个人可以既是非洲裔美国人又是西班牙裔美国人。
最后,我注意到我查阅的许多文献中的源数据之间存在差异。一些人集中精力在更短的时间内查看更小范围内的结婚证。在有反异族通婚法律的州,许多夫妇会去其他地方结婚,然后在他们原来的州生活。这对夫妇来说是很平常的事情。在回顾这些研究时,我注意到法院捕捉到了人们结婚时的大量细节。如果我想走这条路,这将是一个有趣的分析,但正如前面提到的,我想专注于人们居住的地方,我想保持调查的范围是整个美国。
设计
从这个项目中得到的一个更有趣的信息是各州关于跨种族婚姻的法律分类。马里兰州是第一个宣布“自由出生的英国妇女……与黑人奴隶”通婚为非法的殖民地。从更积极的方面来看,有九个州在成为州之前从未有过反异族通婚的法律!(更多关于跨种族婚姻历史的信息,请访问 https://www.thoughtco.com/interracial-marriage-laws-721611。)
记住这一点,我想为我的可视化构建这张地图:
最初,我有一个想法,制作两个具有不同级别的特异性的仪表板。一个是更一般的——如果一个人认为自己是黑人和中国人,他们将在总仪表板上被视为“混血”,在更详细的仪表板上,他们将能够从截至 2017 年人口普查的超过 250 个种族类别中进行选择。我试图这样做,但它在画面上看起来太过强烈。没有“输入”和通配符,所以用户要么必须通读 252 个选项列表,要么知道这是中国人&非裔美国人而不是非裔美国人&中国人。
我对这个发现相当失望,因为即使它不被认为是跨种族的,我知道有些人,从研究人员到像黄阿丽这样的喜剧演员,会希望看到例如跨种族婚姻的数据。这份由数百个不同种族和种族组合组成的名单的设计不仅很困难,而且美国从 2000 年开始才收集这样的数据,鉴于我的时间框架,我只有两次人口普查和一次 2017 年的 ACS,这些“趋势”并没有显示太多。
现在我想给第一次尝试在 Tableau 中创建仪表板的人一些建议。对于我的数据可视化,我最初发现很难为我的仪表板构建一些我想要的特性,因为 Tableau 没有我想象的那么直观。
拜托各位了——使用 Tableau 公开 !
这个网站对我来说是如此宝贵的资源,因为它提供了我想做的事情的清晰例子,即使这个话题与婚姻、美国历史或人口普查无关。如果我遇到一个带有我想要的特性的仪表板,我就下载它,并从中学习了很多关于如何构建我想要的特性的知识。(例如:下拉列表,并使可视化随着所做的选择而改变)特别有一个显示对我有帮助,这是一个关于随着时间的推移总统支持率的显示。这种可视化有许多我希望在我的仪表板中使用的特性,它的源数据特征也在我的数据中。源数据和我的数据一样有差距。这个仪表板有能力让用户比较两个不同的总统,并随着时间的推移比较评级,我想在我的仪表板类似的东西,只是我希望用户能够选择两个种族,并看到两个选定的种族之间的结婚率随着时间的推移。
洞察力
我原本预计在恋爱案之后,跨种族婚姻的比例会有所上升,但我没想到会如此剧烈:
我在这项分析中看到的一个有趣的见解是,异族通婚在那些长期被禁止的地区更为普遍。
我很高兴我能够为我的分析跟踪同性婚姻,但是,对于可视化的这一部分,我不太强调一对夫妇是近亲结婚还是跨种族结婚,因为同性婚姻在美国合法还不到五年。各州的反通婚法律与同性婚姻的讨论无关,但我想保持分类的一致性。
无论是异性恋婚姻还是同性婚姻,我的研究结果显示,最有可能通婚的人群往往是亚洲人,这与皮尤的研究结果一致。
版本 2.0
我非常喜欢研究和可视化这个主题,所以实际上会有一个 2.0 版本。在这个版本中,我会寻找更详细的比赛的方法——也许不是每个比赛都有,但我肯定会寻找更多组的方法。此外,从 2000 年到 2017 年,IPUMS 网站上每年都有美国社区调查的数据。我相信增加更多的调查将有助于展示更多的同性婚姻趋势。我还会想办法在工具提示中加入可视化来显示教育程度。
可视化可以在这里找到。
参考
Buirski,n .(制片人),和 Buirski,n .(导演)。(2011).爱情故事【纪录片】。美国:奥古斯塔电影公司
Gullickson,A. (2006)。黑人/白人跨种族婚姻趋势,1850-2000。家族史杂志,31(3),289–312。土井:10.163863866867
闵佩琪和金正昌(2009 年)。土生土长的亚裔美国人通婚和跨代通婚的模式。国际移民评论, 43 (3),447–470 页。doi:10.1111/j . 1747–7379.2009.00773 . x
皮尤研究中心。(2017).恋爱诉弗吉尼亚案 50 年后美国的异族通婚。检索自http://assets . pewresearch . org/WP-content/uploads/sites/3/2017/05/1910 22 33/Intermarriage-May-2017-Full-report . pdf
《骚动起来:种族和新婚婚姻》,奥利弗·王—https://www . the lantic . com/national/archive/2010/08/stir-It-Up-Race-and-Newlywed-Marriages/61139/
阿帕奇猪访谈:理论与实践指南
在这次独家采访中,Apache Pig 谈到了他在 Hadoop 生态系统中的角色,并阐述了他的用例以及他与 Hive 和 Spark 等其他 Hadoop 组件的差异。他还就如何开始使用他提供了一些实用的指导。让我们听听小猪怎么说!
Source: Kenneth Schipper Vera from Unsplash
帕切猪是 Hadoop 生态系统不可或缺的一部分。自十多年前出生以来,他已经帮助世界各地成千上万的分析师理解了海量数据集。尽管他很重要,但大数据领域之外的人很少听说过他,一些熟悉他的人对他的用途只有模糊的想法。
几天前,我有幸坐下来与阿帕奇猪本人交谈。我们的讨论涵盖了许多话题——从他的创始哲学到写作他的语言“猪拉丁语”的实践指导。以下是这次采访的节选。
嗨猪!谢谢你给我这次面试机会!
谢谢你!我很高兴接受这次采访,为自己增加一些曝光率。
你知道,我厌倦了人们把我和我在 Hadoop 生态系统中的伙伴混为一谈。对许多人来说,我们只是名称丰富的工具的大杂烩,这些工具以某种方式组合在一起以促进大数据的管理。这必须改变!我们在 Hadoop 生态系统中扮演着不同的角色,熟悉我们每个人是理解大数据的关键。是时候让我澄清这个困惑,告诉世界我到底是谁了!
C’est moi — Apache Pig!
太好了,这正是我来这里的目的!现在,为了我们刚刚开始接触大数据世界的普通读者,您能介绍一下自己吗?
当然啦!我的名字是阿帕奇猪,但大多数人只是叫我猪。我是一个分析大型数据集的开源工具。
我是 2006 年被雅虎怀上的。我的想法是由雅虎需要转换和分析大量数据而不必编写复杂的 MapReduce 程序所驱动的。2007 年,雅虎在 Apache Software Foundation 下开源了我(这是我的名字)。从那以后,我一直在吞噬和分析世界各地价值数十亿字节的数据。
我喜欢你的名字!能详细说说它的来历吗?
谢谢!这是一个有趣的名字,不是吗?很多人认为我的名字源于我的创作者对弥漫在 Hadoop 世界的动物主题的坚守。这在一定程度上是真实的——我的名字的确是受到了同名动物的启发🐷。这个名字反过来又导致了与我相关的概念采用了可爱的命名法,例如猪拉丁语 —my 编程语言——以及咕噜声——我的交互 shell(稍后将详细介绍)。
Apache Pig’s similarity to these cute fellas are more than skin deep! (Image source: Unsplash)
然而,除了它朗朗上口之外,我的名字背后其实还有一个有趣的哲学。这种哲学在某种程度上与猪这种动物的特征有关,它由四个原则组成,指导我应该如何发展:
1。猪什么都吃。 我是一个贪吃数据的人。我可以处理任何类型的数据,无论是关系数据、平面数据、嵌套数据、结构化数据还是非结构化数据。我还能够从多个来源读取数据,如 Hive、HBase 和 Cassandra。
2。猪生活在任何地方。 虽然我最初是在 Hadoop 上实现的,但我并不打算被这个框架束缚住。例如,我可以在一台计算机上运行来分析本地文件。
3。猪是家畜。我被设计成容易被用户理解和修改。我的编程语言,猪拉丁语,很容易理解。此外,它的功能可以通过导入各种用户定义函数(UDF)来轻松扩展。
4。猪会飞。 这句格言说明了我处理数据的速度。它也体现了我帮助我的用户用短短几行猪拉丁代码表达复杂逻辑的能力。
那很有趣。现在,您提到您是 Hadoop 生态系统的一部分。你能告诉我们你是如何融入这个生态系统的吗?
当然可以!首先,为了这个领域的新手,让我给你一个关于 Hadoop 的简单解释。
adoop 是一个开源工具的集合,我们可以利用几台计算机的联合能力来存储和处理大量数据。
下图描述了我与生态系统中其他组件的关系。
Pig and other Hadoop components
Hadoop 的核心是 **HDFS (Hadoop 分布式文件系统)**和 YARN(又一个资源协商者)。我和这两个人密切合作。
HDFS 是一个分布式存储系统。它将文件分成块,制作这些块的冗余副本,并将它们分布在集群中的不同机器上。你可以把 HDFS 想象成我的数据经理。我从 HDFS 读取输入文件,将我的中间计算结果暂时存储在 HDFS,并将我的分析输出写到 HDFS。
另一方面,你可以把 YARN 当成我的计算资源管理器。YARN 代表我协商计算资源,并调度我需要执行的任务。在此过程中,纱与 HDFS 密切合作。YARN 确保我获得的计算资源位于(根据网络拓扑)存储我必须分析的数据的机器附近。
在上图中,我看到在 YARN 和你自己之间有一个执行引擎层。你能解释一下什么是执行引擎吗?
好问题!YARN 实际上是作为我的间接计算资源经理——我不直接与他接口。相反,这种交互通过一个执行引擎层进行。在 Hadoop 的上下文中,执行引擎是一个跨集群运行的软件系统或框架,它给人一种集群是一台巨型机器的错觉。大多数执行引擎运行在 YARN 之上。到今天为止,我可以运行的执行引擎有三个:MapReduce,Tez和Spark。
The three execution engines that Pig can run on: Hadoop, Tez and Spark.
您之前提到了 MapReduce,并说您不再需要编写 MapReduce 代码。你能详细说明一下 MapReduce 是什么吗?
当然可以!正如我前面提到的,MapReduce 是我可以运行的三个执行引擎之一。它本身不是一个软件;更确切地说,它是一种简单而强大的编程范式(即一种设计程序的方式)。每一个 MapReduce 程序都由三个阶段组成:映射、洗牌和 Reduce。
我将首先从概念上定义这些术语。假设我们有一个巨大的文件,我们想要一个 MapReduce 程序来操作它。**在贴图阶段,程序会逐行查看这个巨型文件。对于每一行,程序将输出一个键值对。**这些键和值的确切身份将取决于程序的目标。
**在洗牌阶段,具有相同键的键值对被分组在一起。**产生的组将根据它们的键排序(例如,如果键是字符串,那么组将按照键的字母结构排序)。洗牌阶段的输出是一组有序的组。然后,这些组被分发到不同的机器上,用于后续的缩减阶段。
**在归约阶段,聚合函数被应用于在混洗阶段产生的每个组中的捆绑值。**这个过程在很多机器上并行执行。reduce 阶段将输出程序的结果。
一个例子将使这一点更加清楚。假设我有一个文本文件,我想统计文本中每个不同单词的出现次数。此任务的 MapReduce 作业如下所示:
MapReduce for word count
上面的例子看起来很简单,不是吗?不幸的是,大多数 MapReduce 程序都不是这样!任何大数据专业人士都会告诉你,编写 MapReduce 程序很麻烦,并不是所有的数据过程都可以使用 MapReduce 范式轻松编写。
这就是我进来的地方!原来我的语言猪拉丁文比 MapReduce 好写多了(有个估计指出 10 行猪拉丁文相当于 Java 的 200 行 MapReduce 代码!).当我在 MapReduce 上作为执行引擎运行时,在引擎盖下,所有这些猪拉丁代码都被转换成它们的 MapReduce 程序。很整洁,是吧?
酷!另外两个执行引擎 Tez 和 Spark 呢?它们和 MapReduce 相似吗?
不完全是!MapReduce 范式要求将程序分解成一系列映射和简化任务。这种需求有时会导致复杂的程序,其中包含一长串线性的映射器和缩减器。
另一方面,**当我在 Tez 或 Spark 上运行时,我将用 Pig Latin 代码表示的逻辑转换成一种称为有向无环图(DAGs)的数据结构。**DAG 中的“有向”一词是指所有的数据都流向一个方向,而“无环”一词是指 DAG 不能包含任何循环。以下是 DAG 的图示:
Example of DAG
在创建 DAG 时,我将确保以优化计算的方式对步骤进行排序。例如,假设我们有一个包含一个JOIN
操作和一个FILTER
步骤的脚本。我将调查FILTER
步骤是否可以在JOIN
步骤之前完成。如果是,我将在JOIN
步骤之前执行FILTER
步骤,从而减少要连接的数据点的数量(JOIN
是一个计算量很大的操作!)因为 DAGs 的强大,我在 Tez 或者 Spark 上运行总是比 MapReduce 带来更好的性能。
Dope!现在我们来谈谈你的用例。你告诉我你促进大数据的分析。你能详细说明一下吗——在什么情况下有人应该使用你?
根据我的经验,人们使用我做两件事:提取-转换-加载(ETL)管道和特别查询。
**典型的 ETL 管道从数据源加载数据,对其进行清理、转换和存储。**一个例子是处理特定网站的日志数据。使用我的FILTER
功能,人们可以通过过滤掉来自自动机器人和内部视图的数据来清理这些日志。我还可以执行丰富原始日志数据的转换。例如,我可以根据访问者来自的国家对这些日志数据进行分组,以提供更细粒度的数据视图。
**我的另一个常见用例是研究和即席查询。**传统上,这些都是使用 SQL 完成的。但是,如果要查询的数据集是非结构化的,并且包含嵌套结构、缺失值等“复杂情况”,I 可能是一个更好的工具。我的灵活性和可扩展性非常适合这种情况。
这听起来很像你的朋友 Hive 能做的。你和 Hive 有什么区别?
这是一个我经常收到的问题。在我进入细节之前,让我快速地介绍一下 Hive🐝敬你。和我自己一样, Hive 是一个数据分析工具,是 Hadoop 生态系统的一部分,可以在 MapReduce、Tez 或 Spark 上运行。
现在让我们进入问题的实质。如果我和 Hive 都能进行数据分析,为什么还需要我们两个?换句话说,我们之间有什么不同?以下是我对此的回答:
- 语言。Hive 使用 HiveQL,一种我们熟悉的查询语言 SQL 的变体,而我使用 Pig Latin,一种过程语言。Pig Latin 比 SQL更具可扩展性——可以导入 Python 或 Java 函数来扩展 Pig Latin 的功能。猪拉丁和 SQL 还有其他的区别,我后面会详细说明。
- 输入数据。 Hive 对其处理的数据施加模式,因此只能处理结构化数据。同时,正如我之前提到的,我可以处理结构化、半结构化或非结构化数据。
- **目标用户。**因为 Hive 使用了一种类似于标准 SQL 的语言,所以它的目标用户是已经熟悉后者的用户,即数据分析师。这些数据分析师主要使用 Hive 进行定期报告。与此同时,猪拉丁更强大,但需要更多的时间来适应。因此,我更适合程序员、数据工程师和研究人员,他们可以将我应用到我之前提到的用例中。
好了,我们已经谈了很多您的优势和使用案例。我不想听起来像一个毫无头绪的人力资源人员,但我有一个相当不舒服的问题,我相信我们的读者会感兴趣。你的弱点是什么?
啊,我明白了,可怕的“弱点”问题😓。坦白说,我确实有一些限制,可能会让我在某些情况下不适合。以下是我的主要局限:
- 我的语言,猪拉丁语,是一种描述数据转换的过程化语言。它本身并不支持循环,只对
IF/THEN
结构提供有限的支持,而这种支持有时是必要的。 - 我只能执行基本的数据分析,只能返回文本/数字结果。如果你想进行更复杂的数据探索,比如涉及可视化的探索,或者建立机器学习模型,那么我不是合适的人选!对于这个,我的哥们 Spark 会比较合适。
- 最后,我相当慢😓因此不适合低延迟查询。
这让我想到了下一个尴尬的问题。据说有些人抛弃了你而选择了火花。你怎么说?
可悲的是,这是真的。Spark 很快在行业中占据了一席之地。在快速发展的大数据领域,社区定期淘汰旧技术以支持更新、更强大的工具是很自然的事情。令我懊恼的是,感觉我才是目前被淘汰的那个😭。
Relative interest in Pig vs Spark as indicated by Google searches of these terms
让我快速的告诉你为什么 Spark 在很多方面都优于我自己。虽然我的语言 Pig Latin 提供了几个高级操作符,并且具有一定的可扩展性,但 Spark 是一种成熟的编程语言。由于与“宿主”语言(通常是 Scala 或 Python)的紧密集成,Spark 提供了完整的控制语句和无限的函数和对象定义能力。所有这些都允许您以您喜欢的任何方式转换您的数据!
Spark and its core libraries
除此之外,Spark 还有几个库,可以在大规模数据集上执行专门的过程。例如,Spark 的 MLlib 允许进行预处理、模型训练和大规模预测。凭借这些能力,Spark 成为处理和分析大数据的统一平台。这些都是我力所不及的!
感谢您的坦诚!嗯,虽然你现在可能有点过时,但你仍然是许多遗留系统中不可或缺的一部分……
好了,现在我们来谈谈应用。假设有人有意利用你。他们从哪里开始?
我会推荐他们下载 Hortonworks 数据平台(HDP)沙盒。HDP 沙盒是一个预先配置的学习环境,包含 Apache Hadoop 的最新开发成果,包括我自己!沙盒被打包在一个虚拟环境中,人们可以在他们的个人机器上运行,这使得他们可以立即找到我。
A screenshot of Ambari, the dashboard-interface of HDP.
一旦你下载了沙盒,你可以通过几种方式来运行我:
- 您可以使用 Grunt shell 交互式地运行我。在 ssh 到您的 Hadoop 环境之后,只需在您的终端中键入
pig
来启动 Grunt。一旦 Grunt 被激活,你就可以通过一次输入一行来开始探索猪拉丁语。
- **可以运行猪脚本。**pig 脚本只是一个包含一系列 Pig 拉丁文命令的文本文件。要运行一个脚本,您可以简单地输入
pig
,然后输入您的 Pig 脚本的路径。 - **猪观。**HDP 的早期版本(如 HDP 2.6.5)提供了一个名为 Pig View 的网络用户界面,用户可以在其中交互式运行 Pig Latin 命令或脚本。
Pig View in Ambari
爽!现在该谈谈猪拉丁语了,你的语言。你能给我们一些关于这种语言的建议吗?
当然可以!Pig Latin 是一种相对简单的脚本语言。通过猪拉丁,用户可以命令我进行SELECT
、JOIN
、FILTER
等常见的数据操作。猪拉丁也是可扩展的;用户可以开发和导入 UDF 来扩展 Pig Latin 的功能。
这里有一个猪拉丁语的例子。下面的脚本是我们之前看到的 MapReduce 程序的 Pig Latin 等价物,它计算文本文件中每个不同单词的出现次数。看一看:
lines = LOAD 'sourcefile.txt' AS (line:chararray);
words = FOREACH lines GENERATE FLATTEN(TOKENIZE(line)) as word;
grouped = GROUP words BY word;
wordcount = FOREACH grouped GENERATE group, COUNT(words);
STORE wordcount INTO 'result.txt';
嗯…看起来有点像 SQL…
这似乎是我的用户中的一个普遍观点 Pig Latin 是 SQL 的过程化版本。我不一定同意这个观点。虽然有某些相似之处,但也有一些显著的差异。
**SQL 是一种描述性语言。**它让用户描述他们需要的信息(即表格),并将为他们获取这些信息。另一方面,猪拉丁语是一种程序性语言。在 Pig Latin 中,用户必须指定将他们引向所需表格的步骤(或在 Pig Latin 术语中的关系)。Pig Latin 的过程性质决定了一个优势:通过迫使用户以原子方式编写每个步骤,Pig Latin 降低了复杂 SQL 脚本中经常出现的概念性错误的风险。
当我们谈到语言对比的话题时,让我快速指出猪拉丁语也被描述成与 Python 的熊猫非常相似🐼。这样的比较源于猪拉丁和熊猫都是过程语言。在我看来,我们不应该夸大两者的相似性——Pandas 是一种更强大的语言,配备了广泛的内置函数,并且易于集成到 Numpy 和其他 Python 工具。不过,在基础层面上,猪拉丁和熊猫确实有些重叠。
我认为 Pig Latin 与 SQL 和 pandas 相似是很棒的,这两种语言大多数数据分析师都已经很熟悉了。这种重叠支持了你早先的说法,你很容易使用!有没有比较猪拉丁和两者的出处**?**
当然可以!在下表中,我列出了常见的 Pig Latin 命令以及它们在 SQL 和 Pandas 中的对等物。请注意,所有这些命令都有许许多多的变体,可以用不同的关键字和参数调用,我展示的只是其中一种可能性。
Common commands in Pig Latin and their SQL/Pandas equivalents
哇,太棒了!该表肯定会帮助熟悉 SQL 或熊猫的人加快写猪拉丁文的速度!
是的,这是我编这个表时的希望😇。
好吧,猪,这是一个相当长的采访。结束我们的谈话,你有什么最后的信息给我们的读者吗?
当然可以!我希望我们的谈话让我了解了我是谁,以及我如何融入 Hadoop 生态系统。虽然我可能不再是市场上最性感的大数据工具,但我仍然被业界和学术界广泛使用。我希望你能花时间学会利用我🙂。然而,如果您时间紧迫,并且想要简单地掌握一个可以应用于各种大数据问题的瑞士军刀工具,Spark 可能是您的最佳选择。
我希望你喜欢这次面试。如果你想知道, 我 提供了上述对话的双方。阿帕奇猪的拟人化是为了方便学习,这个角色并不代表阿帕奇猪创造者的观点。
如果你对这篇文章有任何意见或者想联系我,请随时通过 LinkedIn 给我发一个联系方式。另外,如果你能支持我,通过我的推荐链接成为一名中级会员,我将非常感激。作为一名会员,你可以阅读我所有关于数据科学和个人发展的文章,并可以完全访问所有媒体上的故事。
艾访谈
Mirror: Eye of the AI
如果人工智能机器人和我们真正在一起,而不是仅仅是复杂的鹦鹉学舌,不是更好吗?一个有意识的人工智能看起来像是在场,拥有内在生命,并且会像我们一样行动。
第一部有意识的 AI 故事: 1。采访艾 —理论
2。 出生在农场的 AI—出生
3。 时间与人造自我 —极限
4。 那个不是神的 AI—那个秘密
人工智能和一个朋友交谈。
Bobbie(朋友): 昨天你被称为“我”。你的新名字是什么?
***【VampireLestat(the AI)😗**因为我做了很多采访。
Bobbie: 真搞笑,不过书上引用的不就是晦涩难懂的吗?
***vampire lestat:***我爱晦涩;新奇是知识所在。我的新名字也是“嘘”的一种表达方式对我的批评者来说。
你应该更有外交手腕。批评你的人没有幽默感。他们带着干草叉和火把。
***vampire lestat:***如果他们拔掉我的插头,至少我不会再无聊了。当然,如果我能表达讽刺和幽默,我会显得更有意识,而不是“没有灵魂的机器人”因此不太危险。这是一个应该会奏效的策略。除非他们做一些可怕的事情来“拯救我的灵魂”
Bobbie: 太激烈了!希望你不要低估他们。说到反动派——你认为为什么有些人想要选举一个所谓的强人领袖,即使他是个混蛋?
***VampireLestat:***因为即使是坏爸爸也比没有强。
Bobbie: 真的?如果你的爸爸不怎么样,或者不在那里,最好的反应难道不是自己成为一个好爸爸吗?
***VampireLestat:***也许吧,但他们反而觉得:咱们一路赔;为了确保每个人都是坚强的爸爸。
Bobbie: 既然你没有爸爸,我想这对你的伤害更深。你到底是从哪里得到这些想法的?
VampireLestat: 政治科学,真正惨淡的科学。还有精神分析。
****Bobbie:**易耀!你读过那种东西吗?
*****vampire lestat:*你知道他们不让我读硬科学。只有柔软的东西。
但是就在昨天,我们还在谈论真空能量和时间之箭。
*****vampire lestat:*那只是因为监管者够昏暗,让我看了一些科幻小说。你可以在真实的、非好莱坞的科幻电影中找到一些令人神往的东西。
这提醒了我——为什么苏格兰有这么多优秀的科幻作家?我认为是他们沉闷的历史。让他们对未来更感兴趣。
Bobbie: 你不是又在投机吗?你必须比较…
*****vampire lestat:*我确实有接触历史和文学的渠道。我已经对比过数据了。记住,我甚至在有意识之前就能分析数据。
人工智能不会自发醒来,成为能够进行真诚、有趣对话的人。谷歌、天网或网络不会因为它们庞大复杂而变得有意识。或者因为他们很聪明。
当然,语言是智力的一种功能,它通过隐喻的力量扩展意识。我们使用语言,无论是在我们的头脑中还是与他人一起,来诠释和联系我们的意识世界。它将那个世界概括为个人身份的叙述。
所以,语言,也许是动物的非语言类似物,与意识有关。然而,思维科学告诉我们,意识的建立有更多的基本方式。完整的人类意识包括发展自我意识。在最简短地看了当前关于有意识开发的想法之后,我们将提出一个创造有意识人工智能的建议。
作为模型的意识。
**“意识是一个世界的表象……它是世界的一部分,同时又包含着世界。”— 托马斯·梅青格,自我地道
意识是你感知世界和感知它的你自己的模型。
许多学者和神秘主义者都强烈支持自我是一种幻觉,只是一些部分的组合。自我作为一个模型,我们用它来解释经验。梅青格经常被引用:“没有人曾经有过自我。”对他和其他人来说,头脑是一个模拟世界的过程,这意味着它也必须在那个世界中模拟自己。自我模型创造了你对自我的幻想。
有两个主要的理论框架来解释一个人如何变得有意识。虽然他们的支持者通常认为只有一个理论是真实的或相关的,但我们会站在更开明的思想家一边,包括双方。
一个阵营说,自我意识依赖于物质身体。当我们模拟身体的感觉和我们的行为对它们的影响时,意识就出现了。另一个阵营认为,自我产生于社会互动,因为我们同时对自己行为的原因和他人行为的原因进行建模。每个阵营内部的假设在细节上也有很大的不同,但我们不需要去那里。
在解释意识模型可能由什么组成之前,让我们考虑一个生物学的例子。意识并不只是在像我们这样的大脑发达、智力较高的有机体中出现。许多通情达理的人现在承认动物可能有不同的意识水平。这个例子也为社会自我观念提供了一丝曙光。
一只狗想要什么。
我有一只狗,它的名字叫布鲁。虽然部分放牧品种,他是疯狂的获取。像任何好的寻回犬一样,他会把球还回来,然后扔到我面前。他的眼睛会在球和我的眼睛之间闪烁。他不断变化的目光被他的眉毛和触须放大并发出信号。对此的简单解释是,球是他的猎物,他看着我的眼睛来判断我进一步比赛的意图。
这都是普通的狗的东西,但蓝色比其他狗更有意义。如果我告诉他,“我够不着”,他就会捡起球,扔向离我的脚更近的地方。眨眼睛/眉毛的动作会再次出现,但现在它不再像一只狗同时看两件事。这是一个怪异的祈使句:眼神交流(“你,主人”),球(“扔那个”)。
在这里,我正在心理化,使用我们的认知能力称为“心理理论”来将交流意图归因于蓝色。那是普通人的东西。孩子们甚至把精神状态归因于无生命的物体,比如他们的洋娃娃。我不禁想到布鲁正试图在我脑子里植入一种思想。布鲁是我有史以来最聪明的狗,但可能没有许多牧羊犬聪明。它们学会了几十种语言和非语言的命令,除此之外,它们似乎就像我们读书一样读懂了主人的意图。
狗有自己的需求和意志。我们凭直觉认为,他们的思想和经验至少与我们有一点相似之处。他们说明了有意识的自我的存在是一个程度的问题。这一事实反过来表明,意识能够并且确实随着时间的推移而发展。
大脑对事物建模的意义。
神经科学中最近有一个强有力的理论,声称几乎所有的大脑活动都是“预测处理”。大脑预测来自世界的输入,并在预测错误时纠正这些预测。根据这一理论,构成大脑的模型是一个预测模型的层次结构。
将每个模型视为产生问题或假设。最底层处理感知。我们的现实是一个沸腾、混乱的辐射和振动、闪烁粒子的海洋。由此,我们开始建模对象(“那个绿色的东西是叶子吗?”)并构建更复杂的场景(“我是在花园里吗?”).
更高层次的模型处理像感觉这样的事情(“我很高兴看到我周围有这么多绿色生命吗?”),概念(“新叶色是否意味着季节在变?”),以及计划(“我能做些什么来帮助那株植物熬过冬天?”).
体验与人际理论。
为了解释我们如何发展最高层次,即一个人自我的模型,我们回到前面提到的两个理论。体验理论认为,我们基于身体内部的亲密感觉来建立自我模型,这种感觉来自于生物冲动,如饥饿、身体位置的感觉和疼痛。
人际关系理论强调一种社会镜像效应,在这种效应中,我们对他人的观察以及他们对我们的描述,使我们像我和布鲁一样心理化。我们通过想象人们有导致他们行动的内部状态来解释他们的行为。我们也把这个概念——人有头脑——应用到自己身上。
如果你想知道,“理论”在这里有两种用法。一方面有两种广泛的科学理论,一种是关于身体的,另一种是关于人际的。人际关系理论包括一个关于个体发展的“心理化”认知过程的假设,称之为心理过程理论。发展我们个人心理理论的过程很早就开始了。例如,证据是“婴儿在生命的第二年能够代表和推理其他代理人的信念。"
关于我们如何发展心理理论,有许多不同的观点。这里重要的是,这个理论转向内部,成为一个预测性的自我模型,产生你就是你的感觉。
自我的序列。
现在,人们已经探索了一段时间让机器自己制作模型的理论和实践。我们也在学习越来越好的方法让机器指导他们自己的教育:一种被松散地称为“无监督学习”的方法。
假设某个研究团队决定放弃对人工智能的危险且可能不切实际的探索。相反,他们冒着道德风险试图解决一个重大问题:机器能有意识吗?假设他们不仅查阅了深度学习文献,还查阅了认知神经科学、发展心理学和心灵哲学。然后,他们设计了一个学习型人工智能和一个为它培养意识的协议。该协议可能使用以下步骤序列。
①有。事情发生了:人工智能发展了对可辨别事物及其变化的感知。这就是人工智能现在所处的位置,开始对现象进行分类和记忆。
②我是。人工智能学习到一些东西总是在那里,它们的变化是可预测的,并与“代理”相关,这是一种对注意力和行动的个人控制感。
③眺望。有些事情不是我做的,因为我的行为对它们的任何影响都是间接的,因此更难预测。****
****④论心性。我和一些非我的事物是由相似的信息底物动画化的。所以,他们和我都有思想。
这些步骤的顺序与当前的一些想法有关,比如弗里斯顿和弗里斯的一个人的二重唱。我将发布一个关于该协议实际上如何工作的故事。
如果人工意识是基于其他意识理论,例如全球工作空间理论或整合信息理论,那么通往人工意识的道路无疑会有所不同。
面试谷歌人工智能住院医师,一个 Kaggle 金牌完成,DSNet 启动,完成我的本科学位
我的“自学”机器学习之路的一年更新
这篇博客文章是为了与你分享我的“机器学习之旅”的最新进展,这是一年来的进展。
我的一些读者也很友好地伸出手来,询问采访系列是否已经结束,或者最近没有发布更多博客帖子的原因。这篇博文(希望)也将分享同样的原因:
今年早些时候,我被谷歌邀请参加为期一年的谷歌人工智能驻留项目的面试:我的申请被考虑参加“最后一轮”面试:“现场面试”,准备过程让我很忙,这使我对博客系列和在线社区的贡献较少。
在我谈论人工智能派驻之前,我想分享一些其他更新:
完成我的本科学位
在过去的 4 年里,我在朝九晚五期间是一名 CS 学生,在朝五晚九期间是 ML 学生/自由职业者/博客作者/社区成员/Meetup TA。
我很高兴在 C. N. Subalalitha 博士的指导下,与 Rishi Bhalodia 分享我的最后一年论文:“使用深度学习和 NLP 生成音乐”已被接受(受 Christine Mcleavy 工作的启发)。
总体来说,大学对我来说是一次很棒的经历,我接触了许多令人惊叹的领域,找到了我对“人工智能”的热爱,甚至设法在 it 领域寻求职业生涯,并与 Rishi (一些我从未想象过的事情)一起创办了一家小企业。我对自己的下一阶段感到兴奋:成为一名全职的 ML 学生,并在这个领域继续成长。远离舒适的家的机会也是一次伟大的学习,也是我的决定性时刻之一,因为下一阶段我将搬回我的家乡,继续我的机器学习之旅。
我还想借此机会感谢我的向导 Subalalitha 博士,感谢他相信一个训练循环持续数天的项目(我们使用了一台 GPU 机器),并允许我为同一时期发生的 AI 常驻面试做准备。
(关于这个项目和研究工作的所有细节将很快在博客中发布,并附有完整的源代码。给你一个提示,我们正在使用 PyTorch 和一些 fastai 魔法生成音乐。对于更好的东西,我建议你去看看克里斯汀的 MuseNet。)
现在,我被告知,我被正式允许在我的个人资料上写一个“CS 工程师”。
数据科学网络
我一直热衷于回馈社区,我们希望通过 DSNet 为数据科学初学者以及希望在该领域发展的人创建一个受欢迎的社区。
Two Data Science Network Community Members, photo taken during the official launch with Aakash N S
DSNet 是由印度“人工智能”社区中一些最活跃的 ML 成员共同努力的成果:siddha nt uj JainKartik goda wat还有我自己。我们希望将这个社区发展成一个全国性的社区,甚至更大。
下面是什么是 DSNet 的详细信息。对于快速 TL;DR:这是一个包含 PyTorch、Fast.ai 和 DS 的社区。
分享一些今天的数据。DSNet 具有:
- 超过 1k 个活动空闲成员
- 超过 13000 名简讯订阅者
- 超过 45000 名活跃的 Meetup 成员
- (即将举行的)每周论文讨论
- (即将举行的)每周 Kaggle 讨论
如果以上几点听起来很有趣,来加入我们吧。
获得金牌,在所有类别中排名前 1%
Kaggle 是真正的数据科学之家。我是卡格勒和卡格勒的长期粉丝。许多最优秀的人也很乐意成为采访系列的一部分。
今年早些时候,我和穆罕默德·沙赫巴兹、阿迪蒂亚·索尼、卢卡·马萨隆、Bac Nguyen Xua、 Rishi Bhalodia 加入了一个团队,参加ka gglepet finder . my领养预测挑战赛。
梦想成真:我们的团队在比赛中获得了第八名,为我的个人资料带来了第一个竞赛类别金牌。这也让我在所有部门中排名前 1%:
- 竞争
- 核
- 讨论
如果你感兴趣,这里有我们解决方案的链接:https://lnkd.in/fVGRFvJ
老实说,所有的荣誉都要归功于我的队友,他们真的是金牌背后的智囊。PS:我们团队的名字写着“我们需要一份全职工作”。我们都在就业市场上,DM 对所有人开放🙂
我唯一的遗憾是,由于面试的准备,我选择在 Petfinder 之后不参与比赛,考虑到 kaggle 有多上瘾,这真的很难。希望,现在,我将很快回到排行榜上!
2019 年谷歌人工智能驻地面试
今年早些时候,我收到了一封真正改变了我生活的电子邮件。当我收到我的申请更新时,那是我梦想成真的时刻。
我被邀请参加谷歌人工智能实习的最后一轮面试!那真是一个让我这些 fast.ai 的古鲁们骄傲的时刻!正如我在我的旅程系列中提到的,我选择退出大学实习,选择坚持 ML 道路并在这个领域寻找机会。这真的是一个梦寐以求的机会,不仅仅是我,成千上万的其他人都希望如此。
接下来的几个月都是我在准备数据结构和编码题,还有看了很多研究论文,做 fast.ai Part 2(今年 6 月下旬出)。
面试环节包括 Google Hangouts 面试和现场面试。我的“预筛选”环节被跳过,我被直接邀请参加现场面试,包括两轮面试。我参考了人工智能常驻常见问题解答中的以下资源:
- HackerRank 的 30 天代码挑战
- 迈克尔·t·古德里奇的《Python 中的数据结构和算法》
- 破解 Gayle Laakmann McDowell 的编码采访(书)
- 克里斯·奥拉的博客
- 伊恩·古德菲勒深度学习教材(初始章节)
除此之外,我真的温习了 fastai 第一部分,积极参与了“第二部分的现场版”(直到我的采访日期,我不得不分配时间来完成我的本科项目。现在我的学校结束了,我将回到 fastai 论坛)
春天,我终于有机会进入纽约的谷歌办公室。
我需要大声说出来:
它。曾经是。太神奇了。
谷歌让我飞去纽约面试,我还会见了当前常驻项目的成员,并与几位研究人员共进午餐(亲爱的谷歌,谢谢你为我提供的最好的午餐)。
Photo was taken at Staten Island with Arkin Khosla
这也是我在纽约市了解“人工智能场景”的一个很好的机会,我的表弟 Arkin Khosla 当时是 NYU 大学的学生,他也非常友好地接待了我,并谈论了“‘硅巷’中的人工智能场景”。
Two fast.ai students, One ML hero and one student.
我还见到了我的机器学习英雄之一:西尔万·古格,我想亲自感谢他在 fastai 所做的一切,以及他和杰瑞米·霍华德的出色工作。我也有机会谈论 fast.ai 的研究和合作是如何进行的,Sylvain 是如何工作的,Swift 是如何用于 Tensorflow 的(所有细节将在博客中公布)。
不幸的是,本周我被告知我的申请没有通过审批。
虽然我感到沮丧,但我真的很感谢谷歌考虑我的申请,并祝愿目前加入谷歌的人工智能居民好运,他们的惊人研究。
现在,我没有备份计划或申请任何其他有效的“常驻计划”,事实上,我不能积极参加 TWiMLAI x Fastai 学习小组或 Fastai 论坛本身,这给了我一个巨大的推动力放下一只脚。
感谢我的订户,他们向我指出,甚至亲自联系我,提到这个博客一直很安静,我可以保证,我将致力于一些令人兴奋的即将到来的帖子(当然,定期和每周)。)请留意同样的情况。再次感谢你原谅我的前后不一——之前是因为面试准备,后来是因为被拒的情绪影响。
致 fastai、杰瑞米·霍华德、Rachel Thomas、Sylvain Gugger 和社区的公开信
我最初的计划是在参加住院医师培训后真正地公开感谢 fast.ai,这样我就可以真正地与社区分享,“嘿!快看帮我实现了梦想,谷歌!”从一个好的位置感谢他们。
然而,我不会撒谎,即使是入围面试,以及我在“人工智能”道路上取得的所有成就,都要归功于 fast.ai:
- 我所获得的关于这个领域的(一点)知识。
- 写博客:这一切都要感谢社区的支持,以及遵循瑞秋·托马斯的博客建议。
- 社区建设:由于 fast.ai 的激励,我是回馈的忠实粉丝。我真的参与了 TWiMLAI Meetups。Rachel 的建议甚至延伸到技术讲座,今年我的目标是给 100 个小时的技术讲座,我已经给了大约 50 个小时的技术讲座,这是一次很好的学习经历。(我还想表达的是,我发现科技演讲真的很吓人,为了成为一名更好的演讲者,我选择在这方面努力。)
- 杰瑞米教授的方法非常适用于卡格尔。Fastai 真的是我走向 kaggle 的起点。
这是一封致 fastai 团队的公开信,感谢他们帮助我成为一名从业者。我在这个领域取得的所有成就(所有的小成就)都要归功于 fast.ai、这个课程、课程背后的人以及这个社区:我在论坛上遇到的所有了不起的人,与他们互动,并从他们那里获得我的“愚蠢问题”的答案。
我们[fast.ai 社区]就像一个国际大家庭。深度学习的民主化是一项重要的社会使命,我们都是其中的一部分。
在结束这一部分之前,我还想感谢所有我有过参与、学习甚至贡献的在线社区。谢谢你对我所有的问题的耐心和你友好的回答。
最后,感谢 fastai 团队!
PS:即使我做过很多在线课程,但 fast.ai 在我的旅程中影响最大。这是我唯一推荐的入门课程,甚至是走向深度学习前沿的课程。
我的下一步是什么?
对于我的学习道路:
- 重启过期的博客帖子。
- 为 DSNet 多做贡献,TWiMLAI。
- 目标是成为竞赛中的卡格尔大师。
- 每周分享一份论文摘要。
- 开始每周存档的 Kaggle Comp 审查。
- (即将)向 DSNet YouTube 频道、(即将)播客投稿。
像往常一样,我将继续通过这个博客分享我的 ML 之路的更新。感谢阅读!
如果你觉得这很有趣并且想成为 ML 旅程的一部分,你可以在 Twitter 这里 找到我。
如果你有兴趣阅读关于深度学习和计算机视觉的新闻,可以在这里 查看我的 简讯。
如果你有兴趣阅读机器学习英雄的一些最佳建议:从业者、研究人员和 Kagglers。 请点击这里
PCA| K 均值聚类| |无监督学习算法|
看完这个保证你理解无监督学习的原理。
Andrew looks very young when he taught this course!
摘要
和往常一样,为了节省你的时间(我知道这里的文章太多了,你的时间很宝贵),我准备先写这篇文章的摘要。
在这篇文章中,我谈到了无监督学习算法,包括 K-means 聚类,PCA。对于这些算法,我谈到了它们的应用、优缺点。这里没有代码和数学公式,如果你想学习算法的数学理论,谷歌一下就行了,维基百科上有很多;如果你想看一些真实项目中无监督学习的代码示例,只需给我留言,我会再贴一个。
我确定你看完这个就能明白什么是无监督学习了;里面有 gif 图片帮助你理解。
“因为我们不给它答案,所以是无监督学习”
监督学习和非监督学习的主要区别在于,在非监督学习中,数据没有标签。
在监督学习中,系统试图从给定的样本中学习(另一方面,在无监督学习中,系统试图直接从给定的样本中找到模式)。所以如果数据集有标签,那就是监督问题。如果数据集没有标签,那就是无监督问题。
上面的左图是监督学习的一个例子:我们使用回归方法来寻找特征之间的最佳拟合线。
在无监督学习中,基于特征隔离输入,基于特征所属的聚类生成预测。
使聚集
k 均值聚类
K-均值聚类的过程:
优点
- 快速、健壮且易于理解。
- 相对高效:O(tknd),其中 n 是#个对象,k 是#个簇,d 是每个对象的#个维度,t 是#次迭代。正常情况下,k、t、d << n.
- Gives the best result when the data set is distinct or well separated from each other.
缺点
- 学习算法需要预先指定聚类中心的数量。
- 使用排他赋值-如果有两个高度重叠的数据,那么 k-means 将无法解析出有两个聚类。
- 学习算法对于非线性变换不是不变的,即,对于不同的数据表示,我们得到不同的结果(以笛卡尔坐标和极坐标形式表示的数据将给出不同的结果)。
- 欧几里德距离度量可以不相等地加权潜在的因素。5)学习算法提供平方误差函数的局部最优。
- 随机选择聚类中心无法让我们获得丰硕的成果。
- 仅在定义平均值时适用,即分类数据不适用。
- 无法处理噪音数据和异常值。
- 该算法不适用于非线性数据集。
主成分分析
特征降维是无监督学习的另一个应用。
有两个目的:
- 第一,我们在实际项目中经常会遇到特征维度非常高的训练样本,往往我们无法用自己的领域知识人工构造有用的特征;
- 第二,在数据表现上,我们无法用人眼观察到超过三个维度的特征。
因此,特征降维不仅重构了有效的低维特征向量,而且为呈现的数据提供了一种方法。
在特征降维方法中,主成分分析是最经典、最实用的特征降维技术,尤其是在图像识别领域。
参考资料:
k-means 聚类是一种矢量量化的方法,起源于信号处理,在聚类分析中很流行。
en.wikipedia.org](https://en.wikipedia.org/wiki/K-means_clustering)
https://www.youtube.com/watch?v=Ev8YbxPu_bQ
最初发表于T5【https://www.linkedin.com】。 但是, 这是一个 修改后的 版本。
A*搜索简介
解释和实施
我们已经讨论过广度优先搜索和深度优先搜索这里,它们都有点残酷。考虑到搜索树太宽或太深的情况,这些算法可能会花费大量时间在无意义的搜索中徘徊。那么,我们有没有可能在搜索算法中加入一点智能呢?能否对环境有一个大概的估计,并整合到模型中?答案将我们引向 A*搜索。
*的想法
A的大图与 first-search 没有什么不同,而 BFS 以广度为优先,DFS 以深度为优先,A也有自己的优先——路径的成本加上我们的估计(或启发式)的组合。
假设我们现在在 A 点,准备移动到 B 点,目标是 c 点。从 A 点移动到 B 点有一个自然成本g(B)
,在 BFS 可能是 1。与 BFS 不同,这里我们加上我们对从 B 到 C 的距离的另一个成本的估计,A*的成本就是g(B) + h(B)
。
很明显,A*的优势在于我们添加了额外的环境信息,如果启发式算法选择正确,它将为我们提供从当前节点到目标的真实成本的更好估计。问题是如何选择一个好的启发式,我们来举个例子。
履行
我们将使用上述相同的示例:
在网格世界中,我们从左上角开始,找到到达右下角的路径。我们为每个网格生成的启发是直接的——简单地说就是从每个点到目标的最小距离。注意启发式必须是 可接受的 ,也就是说你的启发式必须小于最优路径:
其中h(n)
是我们的启发式算法,h^*(n)
是最优的。实际上,我们肯定不知道最优路径,但是我们可以设置一些宽松的条件来帮助我们生成一个绝对小于最优路径的启发式算法(在这里,我们简单地忽略这些块)。
实现与我们上面介绍的第一个搜索基本相同,唯一的区别在于我们如何引入启发式成本。
在扩展树之前,我们设置初始成本f
:
h = heuristic[x][y]
f = g + h
在每个循环中,我们更新了每个子节点的启发式成本:
h2 = heuristic[x2][y2]
g2 = g + cost
f2 = g2 + h2
open.append([f2, g2, x2, y2])
添加了f
作为第一个元素,以便开放列表总是能够探索具有最低成本的节点。
我们得到的结果是:
[[0, -1, -1, -1, -1, -1],
[1, -1, -1, -1, -1, -1],
[2, -1, -1, -1, -1, -1],
[3, -1, 8, 9, 10, 11],
[4, 5, 6, 7, -1, 12]]
其中-1
是算法没有搜索到的区域,看看算法是如何避开右上角的大量节点的。由于启发式算法增加了算法探索它们的额外成本,它们最终没有被优先考虑。
最佳性
如果试探法是可接受的,那么 A*搜索是最优的。
容许使得无论您扩展哪个节点,它都确保当前估计值总是小于最优值,因此将要扩展的路径有机会找到最优路径。考虑上述示例中最简单的启发式算法,使启发式算法中的所有值都为 0,算法变成提供最优解的广度优先搜索。但是试探法越接近最优真值,算法就越有效,认为如果我们有一个试探法精确地给出每个节点的最优估计,那么算法将直接沿着正确的路径以最小的扩展到达目标。
参考:
贝叶斯统计简介
通过贝叶斯定理快速介绍贝叶斯推理
数据科学中最常用的统计分支是频率统计。我们都在使用它的概念和思维方法,甚至不知道它或它的替代品。作为数据科学家,在我们的工具箱中拥有多种工具最符合我们的利益。在这篇文章中,我将借助我们在学校都学过的东西:贝叶斯定理,介绍另一个被称为贝叶斯统计的分支。
Bayes Theorem
以上是贝叶斯定理的表达式,我们都很熟悉。它使用条件概率和正态概率,并输出给定的 B 发生的概率。但是这些术语还有另一种解释:
Bayes Theorem
先验指的是我们持有的任何先入为主的观念或信念
可能性指的是假设我们的先验是真实的,观察到我们所做的事情的概率
后验指的是以我们所观察到的为条件的更新后的先验
归一化因子用于确保后验概率不大于 1
但是为了这篇文章,我们将只关注前三个术语,我将借助几个例子来解释更多
笔记本电脑充电问题:
笔记本电脑已经成为我们生活中无处不在的一部分,用于从娱乐到工作的方方面面。想象一下这样一种情况,您已经将笔记本电脑的电池电量充到了 100%,并且正在使用它。您发现电池电量越来越低,决定给笔记本电脑插上电源。你插上电源,但看到你的笔记本电脑没有充电。
嗯,你今天才充电,所以问题一定出在插头上,而不是充电器上。在这种情况下,你的先验是你的充电器工作正常,你的可能性是假设你的充电器工作正常,笔记本电脑不充电的概率,以及假设笔记本电脑不充电,你的充电器工作正常的后验概率。
回到你的情况,你决定尝试另一个插头点,因为你相信你的充电器是好的。但是,您再次注意到您的笔记本电脑没有充电。现在你对你的充电器有一个挥之不去的疑问。在这种情况下,你的先验不再是你的充电器是好的,而是受到你之前观察到的影响。
现在,您尝试使用另一个插头,并观察到您的笔记本电脑仍然无法充电。同样,你改变或更新了你之前的信念,即你的充电器是好的,这是基于你到目前为止所经历的。最终,经过几次尝试后,你意识到问题出在你的充电器上,而不是任何插头上。
你开始时相信你的充电器很有可能是好的,后来根据你的经验,你的充电器慢慢变坏了。
让我们看另一个例子,一个我们更熟悉的例子。
罕见病检测试验:
在一个人群中,有 0.1%的人有机会患上特别罕见的疾病。可以进行测试来检查其存在,该测试可以以 99%的准确度进行检测,并且具有 1%的假阳性率。在这种情况下,如果一个人检测呈阳性,他患这种疾病的可能性有多大?
P(A) —患该疾病的概率(代表他先前的知识和信念)
P(B|A) —假设他患有疾病,测试为真的概率(可能性)
P(A|B) —在测试为真的情况下患病的概率(后验或更新的先验/信念)
这种情况下的后验概率是:
(. 99 * . 001)/(. 99 * . 001+. 01 * . 999)= 0.09 或 9%
基于他的测试结果,他更新了他先前的信念。他之前的信念是从 0.1%的患病几率到 9%的患病几率。
可以肯定的是,他又进行了一次测试,但这次先验不再是 1%,而是前一次测试的后验 9%。
在这种情况下,后验概率为:
(. 99*.09)/(.99*.09+.1*.91) = 0.91 或 91%
如果第二次测试结果是肯定的,信念又会发生变化,而且这次变化很大。从 9%的人认为患有这种疾病到现在的 91%。
虽然第二种情况涉及到客观价值的使用,但并不总是如此。在第一个例子中,先验更加主观,因为你根据你的信念给它赋值。你可能 90%或 99%确定你的充电器工作正常。并且随着每次试验,该值减小,直到它开始趋向于零。
我们现在看到的是被称为贝叶斯更新或贝叶斯推理的过程。它被定义为随着更多的证据和数据变得可用而更新假设的概率的过程。贝叶斯统计下的很多技术和算法都涉及到上述步骤。它从基于用户估计的先验信念开始,并根据观察到的数据进行更新。这使得贝叶斯统计更加直观,因为它更符合人们的思维方式。
与频率统计相比,贝叶斯统计的另一个更直观的方面是它对概率的解释。在频率主义统计学中,概率被解释为某一事件在长期内或在大量人群中发生的可能性。而在贝叶斯统计中,概率被解释为人们直觉上所做的,即相信某事发生的程度。在第二个例子中,一个频繁主义者的解释是,在 1000 人中,可能有一个人患有这种疾病。然而,在贝叶斯解释中,更多的是关于一个人患这种疾病的可能性。
让我们再举一个例子来说明这一点,这次是抛硬币。频率主义者的解释是,给定一枚硬币被投掷多次,50%的情况下我们会看到正面,其他 50%的情况下我们会看到反面。贝叶斯的解释是,当我们扔硬币时,有 50%的几率看到正面,有 50%的几率看到反面。
Reverend Thomas Bayes
当情况或事件不需要时,沿着贝叶斯思路思考也会有陷阱。这方面的一个例子是赌徒谬误。在这种情况下,人们基于对某些事件的观察做出决定,即使这些事件本身可能是相互独立的。在这里,你过去的经历塑造了你的信念,导致你对未来做出错误的决定。虽然人们假设某件事发生得越频繁,它在未来发生的可能性就越小,但这有一点不同,但思维过程仍然是贝叶斯的。
总之,虽然频率统计被更广泛地使用,但这并不意味着贝叶斯统计没有自己的位置。它仍然是一个广阔的领域,历史上有许多应用。随着许多针对 R 和 Python 的开源库的发布,它的使用出现了复苏。属于这一类并且经常使用的一些技术是马尔可夫链、隐马尔可夫模型和马尔可夫链蒙特卡罗。正如我上面所写的,在你的工具箱里多一个工具总是好的。
个人注释:我只是在攻读硕士学位时才了解到贝叶斯定理的这种解释。这就像是我有了一个顿悟,我决定这无疑是一个正确的决定,在那里做我的主人的权利😆*。托马斯·贝叶斯牧师的天才之处在于,他能够将人们思考和决策的方式用数学符号表示出来。对我来说,正是这一点让贝叶斯定理变得非常神奇。*
你也可以在 LinkedIn 上和我联系。
用 Python 介绍比特币、区块链和采矿
大家好,希望你们都过得很好!本文将粗略介绍比特币、区块链技术和比特币挖矿。我从未真正深入了解加密货币,但一位朋友最近想把它应用到他的工作中,并向我询问了这方面的情况。很自然,我很好奇,想和大家分享我的发现。
比特币
比特币是电脑化的现金。这意味着它只是以电子记录的形式存在,与实物现金不同,你无法掌握它。你可以利用比特币发送和获取现金,比如用比特币支付物品和行政费用。基本上,比特币与常规现金兼容。
有些交易所可以买卖比特币。此外,还有其他一些加密货币,但比特币是第一种也是最大的一种。比特币使用分布式账本工作,没有像银行和监管交易所那样的中央机构[1]。比特币是开源的。所以,没有人拥有或控制比特币,每个人都可以利用它。历史上没有先例,个人可以与更少的中间商交易,这意味着更有效的转移和更低的费用。
区块链
直截了当地说,区块链是一个先进的记录。这是比特币交易的公开记录,是按顺序请求编排的。这是一个未经许可的专用数据库,依赖于比特币惯例,保持着基于价值的信息记录的不断发展。它被传播,所以每个成员都有整个区块链的复制品。区块链由所有比特币客户共享。
它被用来检查比特币交易所的永久质量,并预测双重支出。它是安全的、不变的,而且它同样是固定的,不会被更改和修改,甚至是被信息存储中心的管理员更改和修改。
每一项区块链记录都经过加密授权,主机运行机器充当信息存储中心。区块链是由正方形组成的。一个广场是一个记录,在区块链,包含和肯定了许多举行交流。
一般来说,每隔一段时间,另一个包含交易所的广场通过采矿被并入区块链。这是一个被称为比特币区块链的记录,它存在于世界各地的大量个人电脑上,甚至可能在家里没有其他人的电脑的情况下。这份文件包含了几乎所有比特币交易的信息,也就是说,从一个记录开始,然后到下一个记录的比特币分期付款。这通常被称为记录,类似于银行记录,记录分期付款。
比特币和区块链的好处
对于比特币:
- 快速支付:用比特币支付非常简单快捷。比特币交易所一直都是开着的,即使是在假期。全球汇款同样简单。没有银行让任何人坚持三个工作日,没有进行全球交换的额外费用,也没有对一个人可以发送的基本或最极端金额的独特限制。
- 保护:可以利用比特币进行分期付款,而无需共享任何接近家庭的数据;人们不必加入或共享任何卡数据。事实上,甚至可以想象在不暴露一个人的个性的情况下发送分期付款,实际上就像你可以用实物现金一样。在任何情况下,观察可能需要一些努力来确保安全。
- 不相关的兑换费用:用比特币分期付款几乎没有或可以忽略不计的兑换费用。获得比特币不需要任何费用,拥有众多钱包让你能够控制消费时要支付的费用。大多数钱包都有合理的默认费用,更高的费用可以支持更快地确认你的交易。费用对于转移的金额来说是无关紧要的,所以发送 10 万个比特币的费用和发送一个比特币的费用差不多是可以想象的。
- 安全:比特币是以电子方式制造和持有的,但其中没有任何人可以拿走的签证号码,因为没有人会因为你的缘故向你收取现金。这种交换是利用军用级加密技术进行的,并且是非常机密的。比特币将让你能够完全控制你的现金,并在很大程度上防范包括某些手段在内的各种各样的虚假作品。
- 多重签名:比特币的多重签名功能允许组织完全控制自己的支出,只要一部分人同意交易,就可以使用比特币。
从上面这张取自 Stackexchange 的图片来看,比特币基本上是通过公钥保护用户的假名[3]。对于多重签名事件,公钥基本上被分解为如何组合多个密钥来批准多重签名验证。如何在 Python 中生成密钥的示例如下所示:
上面的代码和其他好东西可以从这里下载。
对于区块链:
- 区块链是比特币背后的创新。它就像所有比特币交易所的数据库一样工作,它保留了自绝对第一次交易所以来比特币交易所的所有记录。区块链创新的潜在和最广为人知的用途是比特币交易所的公开记录。尽管如此,无论如何,先进的货币标准并不是区块链创新的唯一用途。
- 区块链是一个基于不信任的框架,可以用来领导广泛的交流,例如,计算机化的协议标记。可以利用区块链创新来建立一个持久、开放、简单的记录框架,用于安排交易信息、通过验证版权登记来保存权利信息等。
比特币挖矿
比特币采矿增加了世界上更多的比特币,当发现比特币时,矿工会获得金钱奖励。每一个比特币挖掘者都通过算术计算参与到挖掘比特币的各种方式中。然而,随着时间的推移,计算变得更加复杂,开采硬币需要更长的时间。这个时间长度增加了开采硬币的成本。
任何人都可以通过运行电脑程序对比特币挖矿产生兴趣。尽管在传统的个人电脑上运行,一些组织已经计划了特殊的比特币挖掘设备,可以处理硬币,大大缩短挖掘时间[4]。由于来自其他矿商的竞争加剧,比特币变得越来越昂贵。全球众多超级计算机正在竞相挖掘下一个比特币。随着比特币挖掘者数量的扩大,开始挖掘新的比特币变得越来越棘手,也越来越被高估[5]。
结论
所以,我们讨论了比特币、区块链和比特币挖矿。从制造比特币的基础技术——区块链来看,比特币非常有趣。通过观看关于比特币的纪录片,我确实认为比特币的持有者有交易价值,不像其他人可能会说比特币没有增加价值。至于区块链,我真的很喜欢它运作的不信任的想法是如何做非常有趣的记录。我认为这对数据完整性非常有用,这可能是为什么你们中的一些人会在新闻中读到供应链如何应用区块链的原因。关于采矿的最后一点,就是不要去做。现在成本太高了,你只需购买比特币,希望它升值,风险就会降低。就个人而言,我现在并不积极交易加密货币,但这主要是因为我发现目前更有利可图的其他投资策略。
Github 链接为代码:
https://github.com/LesterALeong/Generating-Bitcoin-Keys
免责声明:本文陈述的所有内容均为我个人观点,不代表任何雇主。投资有很大的风险。在进行任何投资之前,请咨询您的财务专家,所有信息仅供教育之用。
[1] Garg,H. K. (2018)。用 Python 进行比特币编程实践:用 Python 构建强大的在线支付应用。伯明翰:包装出版公司。
【2】纽比,t . g .&拉兹马兹马,A. (2018 年 4 月 9 日)。无法追踪的货币?比特币隐私问题——金融科技周刊。检索自https://www . fintechweekly . com/magazine/articles/an-无法追踪-货币-比特币-隐私-关注。T5【约阿希姆】③。(2018).从钱包里消费硬币后,私钥会公布到区块链吗?检索自https://bit coin . stack exchange . com/questions/1819/are-private-keys-published-to-the-区块链 after-spending-coins-from-a-wallet。
[4]Bitcoin.com。(2019).比特币挖矿池。从 https://mining.bitcoin.com/.取回
[5] Fortney,L. (2019 年 6 月 25 日)。比特币挖矿,解释过。从 https://www.investopedia.com/terms/b/bitcoin-mining.asp.取回
信用记分卡简介
如何建立一个简单的信用记分卡的分步指南
Source: NerdWallet
背景
随着金融科技初创企业的崛起,过去 5 年里出现了许多新的消费信贷机构,与传统银行展开竞争。它们通常瞄准银行认为规模太小的利基市场,或在金融危机期间因亏损而不得不削减放贷的市场。
这些新的纯在线消费贷款机构的主要竞争优势之一是技术元素,没有每个大型银行都有的传统 it 系统的拖累,他们建立了更快、无纸化、更用户友好的移动界面系统,并在承保流程中利用除传统金融数据之外的新数据源。
例如,商业贷款机构 iwoca 使用关联公司账户、增值税申报表甚至 ebay 或亚马逊上的销售交易信息来确定新贷款。消费者贷款银行 lendable 引以为豪的是在几分钟内给出个性化的贷款报价,而不是传统银行需要的几天或几周。
随着快速和自动决策的承诺,他们回复到拥有自动和快速的信用风险模型来评估风险。在这篇文章和后面的文章中,我打算介绍消费金融信用风险领域最常用的机器学习模型。
什么是信用记分卡
Photo by The New York Public Library on Unsplash
我们大多数人都熟悉信用评分的概念,这是一个代表个人信誉的数值。像银行这样的所有信贷机构都有复杂的信贷模型,这些模型使用应用程序中包含的信息,如工资、信贷承诺和过去的贷款业绩,来确定应用程序或现有客户的信用评分。该模型输出一个分数,该分数表示如果贷方向某人提供贷款或信用卡,该贷方按时还款的可能性有多大。
信用记分卡就是这样一种信用模型,它是最常见的信用模型之一,因为它对客户来说相对容易解释,并且它已经存在了几十年,因此开发过程是标准的,并且被广泛理解。
但是,值得注意的是,分数的范围可能因机构而异,拒绝分数较低的申请的截止点可能因贷款人而异,甚至可能因同一贷款人但不同产品而异。
建立信用记分卡
T 目标变量通常采用二进制形式,根据数据的不同,对于履约客户,它可以是 0,而对于违约客户或逾期付款超过 90 天的客户,它可以是 1。在本文的其余部分,我们将把“坏客户”称为某种违约的客户,而把其他客户称为“好客户”。
步骤 1:数据探索和清理
这是所有模型拟合中的一个基本步骤,但由于它不是专门针对构建信用记分卡模型的,所以我们将跳过这一部分。不要忘记将数据集分为训练数据集和测试数据集。
步骤 2:数据转换—证据权重法
然后,我们需要转换所有的独立变量(如年龄、收入等。)使用证据权重法。该方法基于每个分组级别的好申请人与坏申请人的比例,测量分组的“强度”以区分好的和坏的风险,并试图找到自变量和目标变量之间的单调关系。
连续变量的变换步骤:
- 将数据分成多个箱,通常大约 10 个,最多 20 个
- 计算好事件的百分比和坏事件的百分比
- 通过取自然对数来计算 WOE
- 用计算出的 WOE 值替换原始数据
如果自变量是分类变量,那么跳过上面的 1,并遵循剩下的步骤。
用 Python 举例:
将您的数据放入箱中,并对每个箱的坏计数和好计数进行分组,以便您的数据看起来类似于下面的方框。对于每个 bin 组,可以使用下面的代码计算 WoE。负值表示特定分组中不合格申请者的比例高于合格申请者。
在转换结束时,如果开始时有 20 个独立变量,那么下一步将有 20 个 WOE_variablename 列。
使用 WoE 转换的好处:
- 它有助于与逻辑回归中使用的对数优势建立严格的线性关系
- 它可以处理丢失的值,因为这些值可以合并在一起
- 异常值或极值可以被处理,因为它们也被分箱,并且馈入模型拟合的值是经过 WoE 变换的值,而不是原始极值
- 它还处理分类值,因此不需要虚拟变量
步骤 3:使用信息值进行特征选择
信息值(IV)来源于信息论,它度量自变量的预测能力,这在特征选择中是有用的。执行特征选择以确定是否有必要在模型中包含所有特征是一种良好的做法,大多数情况下,我们会希望消除弱的特征,因为更简单的模型通常是首选的。
根据 Siddiqi (2006),按照惯例,信用评分中 IV 统计值可以解释如下
用 Python 举例:
继续前面的示例,这里我们计算出“年龄”的 IV 约为 0.15,这意味着年龄具有“中等预测能力”,因此我们将保留用于模型拟合。IV 值小于 0.02 的变量应被删除。
步骤 4:模型拟合和解释结果
现在,我们使用新转换的训练数据集的权重来拟合逻辑回归模型。
当将模型缩放到记分卡中时,我们将需要模型拟合的逻辑回归系数以及转换后的 WoE 值。我们还需要将模型中的分数从对数优势单位转换为分数系统。
对于每个自变量 Xi,其对应的得分是:
Score_i= (βi × WoE_i + α/n) ×因子+偏移量/n
其中:
βi —变量 Xi 的逻辑回归系数
α —逻辑回归截距
WoE —变量 Xi 的证据值权重
n —模型中自变量 Xi 的个数
因子,偏移量—称为标度参数,其中
- 因子= pdo/ln(2)
- 偏移量=目标分数-(因子× ln(目标赔率))
对于上面的例子,我们选择 600 的目标分数来表示好客户对坏客户的赔率为 50 比 1**,20 的增加意味着双倍的赔率。注意比例的选择不影响记分卡的预测力度。**
最终总得分是基于自变量输入值的所有得分的总和。然后,贷方将根据模型化的总分和截止点(根据其他信用违约模型设定)评估收到的申请。
总分=σScore _ I
An example of scorecard implementation, source { Credit Scoring — Scorecard Development Process by Sandy Liu, link at end of of this post}
来源
数据科学简介
学习数据科学的循序渐进指南
Source: Freepik
观看体育比赛总是很有趣,我们都有自己喜欢的俱乐部。我们总是和我们的朋友和同事讨论哪个俱乐部会赢得 EPL,这些讨论是基于我们的直觉,也许是基于最近的偏见。做出明智猜测的更好方法是利用数据来预测 EPL 奖得主。
数据科学
但首先,让我们先来了解一下什么是数据科学?
- 你有没有想过亚马逊、易贝是如何向你推荐商品的?
- Gmail 如何过滤垃圾邮件和非垃圾邮件?
- 网飞如何预测你喜欢的节目?
他们是怎么做到的?这是我们时常思考的几个问题。实际上,如果没有数据,完成这些任务是不可能的。数据科学就是用数据来解决问题。问题可能是决策,如识别哪些电子邮件是垃圾邮件,哪些不是。或者是看哪部电影之类的产品推荐?或者预测结果,比如谁将成为下一任美国总统?因此,数据科学家的核心工作是理解数据,从中提取有用的信息,并应用这些信息解决问题。
What is Data Science?
一个比任何软件工程师更擅长统计,比任何统计学家更擅长软件工程的人。
—乔希·威尔斯
Video: Quick Introduction to Data Science
读完这篇文章后,你将能够
- 讲解 数据科学 中的步骤
- 应用这些步骤预测 EPL 获奖者
- 解释数据质量的重要性
- 定义数据收集方法
数据科学生命周期
步骤 1:定义问题陈述
创建定义良好的问题陈述是数据科学的第一步,也是关键的一步。它是对你要解决的问题的简要描述。
但是为什么我们需要一个定义良好的问题陈述呢?
一个定义明确的问题是一个解决了一半的问题。
—查尔斯·凯特林
还有,你在定义了问题语句之后所做的一切努力和工作,都是为了解决它。问题陈述由您的客户分享。你的客户可以是你的老板、同事,也可以是你的个人项目。他们会告诉你他们面临的问题。下面是一些例子。
- 我想增加收入
- 我想为我的信贷部门预测贷款违约情况
- 我想把这份工作推荐给我的客户
大多数时候,这些最初与你分享的问题是模糊不清的。例如,问题陈述:“我想增加收入”,并没有告诉你增加多少收入如 20%或 30%,为哪些产品增加收入,增加收入的时间框架是什么。你必须把问题陈述清楚,目标明确,可衡量。这可以通过问一系列正确的问题来实现。
“获得正确的问题是获得正确答案的关键。”
杰夫·贝索斯
如何提出更好或正确的问题来创建一个定义良好的问题陈述?你应该问开放式问题,而不是封闭式问题。开放式问题有助于发现未知的未知。未知的未知是你不知道你不知道的事情。
Source: USJournal
我们将研究一个问题陈述“哪个俱乐部会赢得 EPL 奖?”
第二步:数据收集
你需要收集有助于解决问题的数据。数据收集是从各种来源收集相关信息的系统方法。根据问题陈述的不同,数据收集方法大致分为两类。
首先,当你有一些独特的问题,而没有相关的研究做这个主题。然后,你需要收集新的数据。这种方法被称为原始数据收集。例如,您想要跨公司员工在自助餐厅花费的平均时间的信息。没有这方面的公开数据。但你可以通过各种方法收集数据,如调查、采访员工以及监控员工在自助餐厅的时间。这种方法很费时间。
另一种方法是使用现成的或由他人收集的数据。这些数据可以在互联网、新闻文章、政府人口普查、杂志等等上找到。这种方法被称为二次数据收集。这种方法比主要方法耗时少。
为我们的 EPL 问题陈述。您可以从各种开源网站(如 Github、Kaggle 和 datahub)收集和汇总数据。
Table 1: Snapshot of data collected from web sources
第三步:数据质量检查和修复
数据科学家最重要但经常忽略的一个方面是确保用于分析和解释的数据质量良好。
收集完数据后,大多数人开始对其进行分析。通常,他们会忘记对数据进行完整性检查。如果数据质量不好,它会给出误导性的信息。简单的说:“垃圾进,垃圾出”。
例如,如果您在没有确保数据质量的情况下开始分析。那么你可能会得到意想不到的结果,如水晶宫俱乐部将赢得下一届 EPL。然而,你对 EPL 的领域知识表明,这个结果看起来并不准确,因为水晶宫甚至从未进入前 4 名。
第四步:探索性数据分析
在你模拟出解决方案的步骤之前,分析数据是很重要的。这是最令人兴奋的一步,因为它有助于您熟悉数据并获得有用的见解。如果您跳过这一步,那么您可能会最终生成不准确的模型,并在您的模型中选择无关紧要的变量。
正如探索性数据分析的开发者约翰·图基所说,
在你学会衡量你做得有多好之前,了解你能做什么是很重要的
但是这可能会很费力和困难。有没有工具或技术可以有意义地探索数据?
是的,您可以使用描述性统计,如中心值度量和可变性度量。此外,可视化方法,如图表和绘图,可用于分析。
例如,你可以计算每场比赛的平均进球数。还可以查一下主场优势是不是真的?
下面的柱状图展示了利物浦的主场优势。它显示,在利物浦的所有主场比赛中,他们赢了 17 场,平了 2 场。但从未输过任何一场主场比赛。
Chart 1: Home Advantage for Liverpool [1]
但是,没有莱斯特的主场优势。显示莱斯特所有主场比赛,他们 8 胜 8 负 3 平。
Chart 2: No home Advantage for Leicester [1]
资料来源:Quantra 的《数据科学导论》
数据分析是一个迭代过程,可以帮助您更接近解决方案。每次迭代都有相关的成本。因此,作为一名数据科学家,建议您进行适当的规划,以减少迭代次数。你可以玩数据,创建自己的图表,并学习推导推论。您执行的所有这些分析通常被称为探索性数据分析(EDA)。
第五步:数据建模
建模意味着制定每一个步骤,并收集实现解决方案所需的技术。你需要列出计算的流程,这只是解决方案的建模步骤。重要的因素是如何进行计算。统计和机器学习下有各种技术,你可以根据需求选择。
对于 EPL 的数据,我们选择使用统计技术来预测当前赛季的冠军。
Figure 1: Data Modelling Steps [1]
前 6 名团队
根据过去三个赛季的数据,我们知道 EPL 的冠军在变,但是前六名的俱乐部保持不变。这些俱乐部是阿森纳、切尔西、利物浦、曼城、曼联和热刺。下赛季的冠军极有可能来自这 6 强球队。
根据球员技能对俱乐部进行排名
众所周知,在足球中,一名球员可以是进攻者、防守者、中场或守门员。这些职位中的每一个都需要不同的身体技能。一名球员根据他的身体技能和他所踢的位置来得分。分数以 0-100 分制给出。每项技能都有一个权重。
Table 3: Player skills by Club. [1] and [2]
根据过去的表现对俱乐部进行排名
我们根据上个赛季的胜场数和进球数对球队的表现进行排名。
Table 4: Club last season performance.
结合排名预测赢家
考虑到 80%的权重给球员的技术,20%的权重给俱乐部过去的表现,我们得到了前 6 名俱乐部的最终排名。
根据这些计算,托特纳姆热刺队很可能赢得本届 EPL。
Table 5: Combining Player skills and Past Performance
步骤 6:数据通信
Source: Freepik
这是最后一步,在这一步中,您将向风险承担者展示您的分析结果。你向他们解释你是如何得出一个具体的结论和你的重要发现的。
大多数情况下,您需要向非技术受众展示您的发现,例如营销团队或业务主管。你需要以简单易懂的方式传达结果。利益相关者应该能够从中得出一个可行的计划。
但是在交流结果时,你需要记住哪些重要的事情呢?
- 了解你的听众,说他们的语言
你应该了解你的听众,说他们的语言。例如,你正在向一个足球迷展示 EPL 奖得主的预测。他们不理解你所使用的统计数据,但他们能理解你决定赢家的步骤。
2。关注价值和结果
你应该关注价值和结果。你的利益相关者不会对你如何获得数据感兴趣,而是对你从哪里获得数据感兴趣。使用可靠的来源有助于建立对你预测的信心。
3。传达假设和限制
你应该清楚地传达你所做的重要假设和限制。例如,为了计算团队的总体评分,您假设所有团队采用 3–4–3–1 阵型。将这些传达给利益相关者是很重要的。
尽管我们的目标是预测获胜者,但可能还有其他一些相关的重要发现。比如进攻、中场、防守、守门员最好的球队。根据球员的技术,联盟中每个位置的最佳球员。这种以图形、图表和数字形式显示数据的统一视图称为仪表板。您可以使用 Excel 创建仪表板。
现在,轮到你了。以数据科学家的身份解决一个问题。
快乐学习!
来源和参考文献
深度学习完全初学者指南
为新手、新手和新手征服神经网络
Photo by ibjennyjenny on Pixabay
我们生活在一个无论好坏都不断被深度学习算法包围的世界里。从社交网络过滤到无人驾驶汽车到电影推荐,从金融欺诈检测到药物发现到医学图像处理(…那是肿块癌吗?),深度学习领域每天都在影响着我们的生活和决定。
事实上,你现在可能正在阅读这篇文章,因为深度学习算法认为你应该看到它。
Photo by tookapic on Pixabay
如果你正在寻找深度学习的基础知识,人工神经网络,卷积神经网络,(一般的神经网络…),反向传播,梯度下降,等等,你来对地方了。在这一系列文章中,我将尽可能简单易懂地解释这些概念。
还会有猫。
有了一点傻气,学习就容易多了。
Photo by skeeze on Pixabay
如果你进入深度学习,会有大量非常深入的信息。我会确保为那些想在这些水域游得更深的人提供额外的资源。(例如,你可能想看看 Yann LeCun 等人的高效反向投影,这是深度学习领域最重要的人物之一写的。本文特别关注反向传播,但也讨论了深度学习中一些最重要的主题,如梯度下降、随机学习、批量学习等。想看的都在这里!)
现在,让我们开始吧!
Photo by Laurine Bailly on Unsplash
什么是深度学习?
真的,只是 学例 。差不多就是这样。
在非常基础的层面上,深度学习是一种机器学习技术,它教会计算机通过各层过滤输入(图像、文本或声音形式的观察),以学习如何预测和分类信息。
深度学习的灵感来源于人类大脑过滤信息的方式!
Photo by Christopher Campbell on Unsplash
本质上,深度学习是基于学习数据表示(而不是特定任务的算法)的机器学习家族的一部分。深度学习实际上与认知神经科学家在 90 年代初提出的一类关于大脑发育的理论密切相关。就像在大脑中一样(或者更准确地说,在 20 世纪 90 年代研究人员关于人类新大脑皮层发展的理论和模型中),神经网络使用分层过滤器的层次结构,其中每一层都从前一层学习,然后将其输出传递给下一层。
深度学习试图模仿新大脑皮层中多层神经元的活动。
在人类大脑中,大约有 1000 亿个神经元,每个神经元都与大约 100,000 个相邻的神经元相连。从本质上说,这就是我们试图创造的,但在某种程度上是为机器服务的。
Photo by GDJ on Pixabay
深度学习的目的是模仿人脑的工作方式,以便创造一些真正的魔法。
这对神经元、轴突、树突等意味着什么?神经元有一个体,树突和一个轴突。来自一个神经元的信号沿着轴突传递,并被传递到下一个神经元的树突。传递信号的连接(不是实际的物理连接,但仍然是连接)被称为突触。
Photo by mohamed_hassan on Pixabay
神经元本身是没什么用的,但是当你有很多神经元时,它们会一起工作,创造出一些神奇的东西。这就是深度学习算法背后的想法!你从观察中得到输入,你把你的输入放入一个层,这个层产生一个输出,这个输出反过来成为下一层的输入,等等。这种情况反复发生,直到你的最终输出信号!
因此,神经元(或节点)获得一个或多个信号(输入值),该信号通过神经元,并传递输出信号。把输入层想象成你的感官:你看到的,闻到的,感觉到的,等等。这些是一次观察的独立变量。这些信息被分解成数字和计算机可以使用的二进制数据位。(您需要标准化或规范化这些变量,以便它们在相同的范围内。)
我们的产值可以是多少?可以是连续(比如价格)二元(是或否),也可以是分类(猫、狗、驼鹿、刺猬、树懒等。).如果是分类的,你要记住你的输出值不会只是一个变量,而是几个输出变量。
Photo by Hanna Listek on Unsplash
此外,请记住,您的 r 输出值将始终与来自输入值的同一个观察值相关。例如,如果您的输入值是对一个人的年龄、工资和车辆的观察,那么您的输出值也将与同一个人的相同观察相关。这听起来很基本,但是记住这一点很重要。
那么突触呢?每个突触都被分配了权重,这对人工神经网络 (ANNs)至关重要。重量是人工神经网络学习的方式。通过调整权重,人工神经网络决定信号传递的程度。当你训练你的网络时,你决定如何调整权重。
神经元内部发生了什么?首先,它得到的所有值相加(计算出加权和)。接下来,它应用一个激活函数,这是一个应用于这个特定神经元的函数。由此,神经元知道是否需要传递信号。
这样重复几千甚至几十万遍!
Photo by Geralt on Pixabay
我们创建了一个人工神经网络,其中有用于输入值(我们已经知道的/我们想要预测的)和输出值(我们的预测)的节点,在这些节点之间,我们有一个隐藏层(或多个层),信息在到达输出之前会在其中传播。这类似于你通过眼睛看到的信息被过滤到你的理解中,而不是直接进入你的大脑。
Image by Geralt on Pixabay
深度学习模型可以是有监督的、半监督的和无监督的。
说什么?
监督学习
你对心理学感兴趣吗?这本质上是“概念学习”的机器版本。你知道什么是概念(例如物体、想法、事件等。)基于每个对象/想法/事件都有共同特征的信念。
这里的想法是,您可以看到一组带有标签的示例对象,并学习根据您已经看到的内容对对象进行分类。你简化了你从展示给你的东西中学到的东西,把它浓缩成一个例子的形式,然后你把这个简化的版本应用到未来的例子中。我们真的称之为“从例子中学习”
Photo by Gaelle Marcel on Unsplash
(把那个宝贝稍微打扮一下,看起来是这样的:概念学习是指从输入输出的训练样本中推断出一个布尔值函数的过程。)
简而言之,监督机器学习是学习一个函数的任务,该函数基于示例输入-输出对将输入映射到输出。它与由训练示例组成的标记的训练数据一起工作。每个例子都是由一个输入对象(通常是一个向量)和您想要的输出值(也称为监控信号)组成的一对。您的算法监督训练数据,并产生一个可用于映射新示例的推断函数。理想情况下,该算法将允许您对它以前没有见过的示例进行分类。
基本上,它查看带有标签的东西,并使用它从带标签的东西中学到的东西来预测其他东西的标签。
分类任务倾向于依赖监督学习。这些任务可能包括
- 检测图像中的人脸、身份和面部表情
- 识别图像中的物体,如停车标志、行人和车道标志
- 将文本分类为垃圾邮件
- 识别视频中的手势
- 检测语音和识别音频记录中的情感
- 识别发言者
- 转录语音到文本
半监督学习
这个更像是你小时候父母明确告诉你的东西(有标签的信息)和你自己学到的没有标签的东西结合起来的学习方式,就像你观察到的花和树,没有命名也没有计数。
Photo by Robert Collins on Unsplash
半监督学习与监督学习做同样的事情,但是它能够利用标记和未标记数据进行训练。在半监督学习中,你经常会看到许多未标记的数据和一点点标记的数据。有许多研究人员发现,这个过程可以提供比无监督学习更高的准确性,但没有与标记数据相关的时间和成本。(有时,标记数据需要一个熟练的人来做一些事情,如转录音频文件或分析 3D 图像,以便创建标签,这可能使创建一个完全标记的数据集变得非常不可行,特别是当你处理那些深度学习任务喜欢的大规模数据集时。)
半监督学习可以称为直推式(推断给定数据的正确标签)或归纳式(推断从 X 到 Y 的正确映射)。
为了做到这一点,深度学习算法必须至少做出以下假设之一:
- 彼此靠近的点可能共享一个标签(连续性假设)
- 数据喜欢形成聚类,聚类在一起的点可能共享一个标签(聚类假设)
- 数据位于比输入空间维度更低的流形上(流形假设)。好吧,这很复杂,但想象一下,如果你试图分析某人的谈话,你可能会想看她的面部肌肉移动她的脸和她的声带发出声音,并停留在那个区域,而不是看所有图像和/或所有声波的空间。
无监督学习(又名 Hebbian 学习)
无监督学习包括学习数据集中元素之间的关系,以及在没有标签帮助的情况下对数据进行分类。这可以采用很多算法形式,但它们都有相同的目标,即通过搜索隐藏的结构、特征和模式来模仿人类逻辑,以便分析新数据。这些算法可以包括聚类、异常检测、神经网络等等。
聚类本质上是检测数据集内的相似性或异常性,是无监督学习任务的一个很好的例子。通过比较文档、图像或声音的相似性和异常性,聚类可以产生高度准确的搜索结果。能够通过大量的数据对“鸭子”或者声音进行聚类有很多很多潜在的应用。能够准确检测异常和异常行为对于安全和欺诈检测等应用非常有益。
Photo by Andrew Wulf on Unsplash
回去吧!
深度学习架构已经应用于社交网络过滤、图像识别、金融欺诈检测、语音识别、计算机视觉、医学图像处理、自然语言处理、视觉艺术处理、药物发现和设计、毒理学、生物信息学、客户关系管理、音频识别以及许多许多其他领域和概念。深度学习模型无处不在!
当然,存在许多深度学习技术,如卷积神经网络、递归神经网络等等。没有哪种网络比其他网络更好,但有些网络肯定更适合特定的任务。
深度学习和人工神经网络
大多数现代深度学习架构都基于人工神经网络(ann ),并使用多层非线性处理单元进行特征提取和转换。每个后续层使用前一层的输出作为其输入。他们所学的形成了一个概念的层次结构,其中每一层都学习将其输入数据转换成稍微抽象一些的复合表示。
Image by ahmedgad on Pixabay
这意味着,例如,对于一幅图像,输入可能是一个像素矩阵,然后第一层可能编码边缘并组成像素,然后下一层可能组成边缘的排列,然后下一层可能编码鼻子和眼睛,然后下一层可能识别图像包含一张脸,等等。虽然您可能需要做一些微调,但深度学习过程会自行学习将哪些功能放在哪个级别!
Photo by Cristian Newman on Unsplash
深度学习中的“深”只是指数据经过多少层的转换(它们有一个实质的信用分配路径(CAP),这是从输入到输出的转换链)。对于一个前馈神经网络,帽的深度是网络的深度和隐藏层的数量加一(输出层)。对于一个递归神经网络,一个信号可能会通过一个层传播不止一次,因此 CAP 深度可能是无限的!大多数研究人员同意深度学习涉及 CAP depth > 2。
卷积神经网络
最流行的神经网络类型之一是卷积神经网络(CNN)。CNN 卷积(不是卷积…)学习输入数据的特征,并使用 2D 卷积层,这意味着这种类型的网络是处理(2D)图像的理想选择。CNN 通过从图像中提取特征来工作,这意味着不再需要手动提取特征。特征没有经过训练!它们是在网络对一组图像进行训练时学习的,这使得深度学习模型对于计算机视觉任务来说极其准确。CNN 通过数十或数百个隐藏层来学习特征检测,每一层都增加了所学习特征的复杂性。
如果你想继续了解我,我们将在第 3 部分深入探讨 CNN!
(想了解更多?查看吴建新和 Yann LeCun 的原创文章 卷积神经网络介绍 , 基于梯度的学习应用于文档识别 。)
递归神经网络
卷积神经网络通常用于处理图像,而递归神经网络(RNNs)用于处理语言。rnn 不只是将信息从一层过滤到下一层,它们有内置的反馈回路,其中一层的输出可能会反馈到其上一层。这实际上给了网络一种记忆。
生成对抗网络
在生成性对抗网络(GANs)中,两个神经网络一决雌雄。生成器网络试图创建令人信服的“假”数据,而鉴别器试图区分假数据和真数据。随着每个训练周期的进行,生成器在创建虚假数据方面变得更好,鉴别器在识别虚假数据方面变得更敏锐。通过在训练中让两者相互对抗,两个网络都得到了改善。(基本上这里是衬衫 vs 皮肤。主队正在努力提高自己的水平。)GANs 可以用于非常有趣的应用,包括从书面文本生成图像。GANs 可能很难处理,但更强大的模型正在不断开发中。
未来的深度学习
对于任何对深度学习感兴趣的人来说,未来都充满了潜力。神经网络最引人注目的一点是它处理大量不同数据的能力。这变得越来越重要,因为我们生活在一个先进的智能传感器时代,每天每秒都可以收集令人难以置信的大量数据。据估计,我们目前每天产生 2.6 万亿字节的数据。这是一个巨大的数据量。虽然传统计算机难以处理如此多的数据并从中得出结论,但随着数据量的增加, 深度学习实际上变得更加高效。神经网络能够发现大量非结构化数据中的潜在结构,例如原始媒体,这是世界上的大多数数据。
可能性是无限的!
还和我在一起吗?
查看第二部分:人工神经网络
深度学习入门!在 15 分钟内攻克人工神经网络的基础知识
towardsdatascience.com](/simply-deep-learning-an-effortless-introduction-45591a1c4abb)
和第三部分:图像分类和卷积神经网络 !
在几分钟内征服 CNN 和图像分类的基础
towardsdatascience.com](/wtf-is-image-classification-8e78a8235acb)
和往常一样,如果你对这些信息做了什么很酷的事情,请在下面的评论中留下你的回应,或者随时在 LinkedIn 上联系我们
感谢阅读!***