TowardsDataScience 博客中文翻译 2016~2018(六十三)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

致力于健全

原文:https://towardsdatascience.com/committing-to-sanity-67eddaa8eb35?source=collection_archive---------15-----------------------

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

【blog.zakjost.com】本文原载于

介绍

你成功地完成了一个建模项目,三个月过去了。您已经学到了一些东西,需要回去进行更改并重建模型。所以,你开始浏览你的项目目录。嗯,最终的模型训练代码是在test_90_new_features-Copy4.py还是prod_90_add_attrs-Copy2.py?你是用data_prep-Copy2_with_ohe.py还是full_data_pipe-Copy4.py生成训练数据的?

如果这听起来很熟悉,那么您没有使用版本控制作为您工作的基本方式,这对您不利。在这篇文章中,我将讨论为什么 git 应该被数据科学家所接受。在第 2 部分中,我将提供一些关于我如何构建项目的实现细节来帮助你开始。

饭桶

如果你不熟悉的话, git 是一种版本控制技术,它本质上是拍摄你的项目的快照。如果您更改了某个文件,它会知道,并且会记录对所有跟踪文件所做的所有更改。当你完成一件事,你告诉 git 做一个快照。因为它知道所有的变化,它可以很容易地撤销它们。

对于我们这些已经听了磁带音乐的人来说,你应该记得需要倒带或快进来排队等候某首歌曲的麻烦。按下按钮,等待几秒钟,停止,播放,意识到你过了或还没有到达那里,重复。有了 CD 就有了检查点,这样你就可以快速导航到歌曲的开头。现在很难想象没有有这种选择。同样,您会想知道在没有可以轻松导航和恢复的逻辑检查点的情况下,您是如何管理建模实验的。

检查点的可用性带来三个主要好处:安全性、清晰性和可重复性。让我们更深入地了解每一项。

安全

很明显,有了常规的检查点,你的工作会更安全,因为当你走进死胡同时,你可以点击“撤销”按钮。但是有一些相关的好处可能不那么明显。首先,你可能还会与一个远程 git 服务器同步,比如 GitHub,所以你的工作会被备份到另一台机器上。通过使用版本控制,您已经自动获得了备份工作的好处。当一切运行良好时,这可能无关紧要,但当您将咖啡洒在笔记本电脑上时,这就非常重要了。

第二,额外的安全性导致更大的实验意愿。有多少次不是直接修改一个函数,而是复制/粘贴它,在名字前加“_v2”,然后修改,以防万一你可能想还原回来?这是可怜人的版本控制,结果一塌糊涂。有了检查点,您可以放心大胆地进行更改,因为您可以随时恢复。死角可以删除,突破可以合并,潜在有用的切线可以束之高阁。

清楚

当您可以自由地删除与手头特定任务无关的代码时,您的代码会变得更加集中和清晰。如果你正在测试的新模型没有使用那个死端特征工程代码块,那么就删除它。这避免了在最终结果不确定的环境中,从实验中出现的难以理解的代码的大网络的增长。

可重复性

当您的代码分布在 Jupyter 笔记本的多个副本上,需要以非常特殊的顺序运行来生成模型时,就会出现可重复性问题。虽然除了早期试验之外,使用 Jupyter 笔记本做任何事情都可能不是一个好主意,但是使用版本控制来保持代码简洁/干净降低了风险,并使其更容易移植到适当的模块中。未来的你或未来的队友将会非常高兴,因为只有一个数据管道和一个模型构建。

履行

Git 通常在软件工程领域被考虑,在那里你可能有一个团队所有人都在相同的代码基础上工作。这带来了许多挑战,在这种背景下出现了一些最佳实践。虽然肯定有很多重叠,但这与个人进行数据科学实验并不完全相同。查看第 2 部分,获得关于这些差异的更详细的讨论,以及作为数据科学家如何有效地使用版本控制的一些想法。

你可以在blog.zakjost.com找到我所有的内容并订阅

最大似然算法的常见应用

原文:https://towardsdatascience.com/common-applications-of-ml-algorithms-e16f21c85773?source=collection_archive---------14-----------------------

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

Photo by Andrew Umansky on Unsplash

放射科医生的机器学习介绍— 10 部分系列

第四部

作者: 达尼洛泰·瓦雄

编辑: 迈克尔博士

第一部分 | 第二部分 | 第三部分

机器学习的使用比你想象的更加普遍。从确定一个电话或电子邮件是否是垃圾邮件,到识别你朋友脸上的方框并实际确定他们是谁,或者有针对性的广告营销,公司很快利用他们的数据来增加收入,吸引和关注他们的网页。

这些时刻是一个更大的技术叙事的一部分,它正在迅速颠覆企业的经营方式。放射学也不例外。

本文将介绍机器学习的一些现实应用。但在此之前,我们先来看看下面这张来自 Invidia 的图片。

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

如你所见,深度学习是机器学习的子集,机器学习是人工智能的子集。子领域的这种自然发展可以被视为一个领域建立在另一个领域之上,围绕图像识别所做的一切都可以追溯到人工智能的早期。理解这种层次结构很重要,因为许多人(包括本系列中的我们)会交替使用这些词,而事实上,它们之间的关系更加微妙。

图像识别是人工智能算法的主要进展之一。脸书可以检测你的脸,你朋友的脸,甚至可能是你的狗,然后分配适当的姓名标签!

由于使用了称为卷积神经网络的学习算法子集,图像识别或分析图像中的对象已经快速发展。在本文中,我们不会深入探讨这意味着什么,但请记住,这是一种找到组成对象的细节的方法。

例如,如果你想检测一张脸,算法首先需要学习如何检测边缘。一旦边缘检测变得很好,你也许可以检测角度或圆弧。然后,您可以检测椭圆形或球形等形状。

如果你愿意,这种建立你的脸类型的学习是在这些卷积神经网络(也称为 CNN)的引擎盖下发生的。这些网络是深度学习算法的子集。因此,当您或您的组织开始将这些功能添加到工作流中时,开发人员很有可能将 CNN 用于成像用例!这些用例可以包括从人脸检测到对象检测甚至图像分割的任何内容。

语音识别是深度学习非常好玩有趣的应用。语音是与技术互动的自然步骤之一,因为我们说话的速度比打字的速度快,这是自然的交流方式。

随着 Siri、Alexa、Google Home 和其他产品的出现,世界各地的许多公司都在使用机器学习和深度学习来获取大量的语音数据,以梳理声音的细微差别。

请记住,问题总是需要一个基本的事实。在这一点上,语音是一个非常容易的问题,因为人们可以被雇佣来听几个小时的声音片段,转录它们,并将这些知识输入到算法中。从那里,算法将学习声音的细微差别,声音的变化,并将这些不同的特征联系起来,从概率上确定哪个单词最有可能。

推荐系统是机器学习的第三组用例。这些应用程序已经成为许多公司的面包和黄油。当我们谈论推荐系统时,我们指的是你的脸书页面上的定向广告,亚马逊上的推荐购买产品,甚至是网飞上的推荐电影或节目。

这些系统由机器学习算法提供支持,这些算法可以检测人类行为的细微差别——无论是购买食物还是观看《办公室》的最后一季。此外,这些系统不仅被证明是有效的,而且现在是花费在广告和营销上的大量资金的支柱。无论你点击什么广告,或者你看一个节目花了多长时间,都只是运行这些公司推荐系统的大算法的一小部分。

在这篇文章中,我们只触及了机器学习和人工智能众多应用的表面*。人工交易实现自动化只是时间问题。然而,在我们概述的所有精彩的优点之外,在取得更多进展之前,还需要找出一些障碍。这些特定于放射学的障碍将在后面的章节中讨论。*

现在,让我们深入一些常见的机器学习主题,让您快速了解。这包括特征提取、标记数据和验证集!第 5 条对此进行了解释。

常见的数据科学陷阱以及如何避免它们

原文:https://towardsdatascience.com/common-data-science-pitfalls-and-how-to-avoid-them-7d509b1d3916?source=collection_archive---------10-----------------------

在学习期间,我有机会参与了几个机器学习研究项目。这些项目从研究概率模型到自然语言处理中更实际的场景。我所做的工作中的一个常见元素是定义明确的问题的可用性和大量干净的数据集。

过去一年,我一直在微软担任数据科学家,解决企业客户的问题。我从跨行业工作中获得的经验以多种方式测试了我的技能,无论是从数据科学的角度还是从解决问题的角度。很大一部分时间通常花在定义问题、创建数据集和清理数据上,而大型数据集几乎总是难以获得。

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

Examples of dataset sizes used in different research domains. (source)

在这篇博文中,我分享了一些经验教训和你在“野外”从事数据科学项目时可能遇到的陷阱。许多这样的陷阱几乎总是存在,为了解决它们,经常需要“创造性”。

陷阱

描述性、预测性和规范性分析

有几种不同的方法可以利用数据来改进业务流程。你通常从客户那里得到的任务是“解决业务问题 X”。一个具体的例子是“提高营销活动的盈利能力”。

一个常见的陷阱是没有以“正确”的顺序处理问题。如果你想改进一个过程,你需要正确地理解它,甚至在考虑它的自动化部分之前。客户通常对自己的数据了解有限,并且没有数据科学方面的经验。因此,从数据科学的角度向他们清楚地解释不同的选项非常重要。

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

The value of data analytics : from descriptive to prescriptive analytics (source)

通常,您通过清理和分析数据来开始项目。术语“描述性和诊断性”分析用于当你的目标是建立数据的摘要,并试图理解数据中的不同变量之间的关系。您构建可视化并使用(无监督的)机器学习技术来聚类数据点或查找相关变量。基于流程的结果,您可以构建一个报告或仪表板,列出并调查一组对业务问题有用的 KPI。通过营销活动,您可以将销售和营销数据关联起来,以便了解营销活动成功的原因。结论(例如,更低的价格导致更多的销售)可能不总是“火箭科学”,但它们允许客户使用他们的数据来验证他们的假设。此外,它还允许他们发现异常行为以及他们是否拥有正确的数据类型。

预测性和规范性分析是关于预测未来,并根据这些预测采取行动。通过预测分析,您可以获得历史数据,并建立一个机器学习模型来预测未来的数据点(在一定的误差范围内)。在市场营销中,新颖的活动创意通常通过使用预测模型估计预期销售额来验证。通过完成前面的描述和诊断阶段,您应该对性能有一个清晰的概念。如果数据质量不够好,不足以建立一个稳健的模型,这可以标记给客户,您可以使用他们提供的数据来支持您的索赔。

使用说明性分析,目标是基于预测采取行动,并优化流程的某些方面。例如,您可以构建一个优化引擎,生成“最佳未来活动”列表,而不是验证活动创意。建立这个系统需要大量高质量的数据。请注意,数据科学就是少做多做,所以从小处着手,大处着手!

概念验证与试运行

客户通常喜欢使用概念证明来研究“数据科学”的可能性。通常,这意味着他们提供数据的子集,并且他们想要确定一些初步的结果。尽管客户通常理解 PoC 不会带来良好的性能,但这仍然是一个常见的要求。然而,PoC 的缺点是数据的子集通常不能代表完整的数据集和问题。您可能会从 PoC 中获得非常好的性能,但是您可能无法在整个数据集上复制这种性能。客户通过例如仅查看一小段时间来选择数据集,这可能会严重偏离 PoC 模型。

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

(source)

如果客户想要试验,更好的选择是与试点合作。在试点项目中,您使用完整的数据集,并运行数据科学管道的初始迭代(数据清理、建模等)。使用完整的数据集可以降低项目中的许多风险。模型性能仍然不是最佳的,因为你只有有限的时间,但至少你应该能够得到一个有代表性的图片。

代表性数据集

虽然这个陷阱与上一个相似,但并不相同。尤其是当您处理非结构化数据(例如图像、文本数据等)时,客户可能已经在您开始项目之前收集了数据。数据集的一个关键但经常被忽视的元素是它是否代表了用例。如果需要收集数据集,应该以最终使用模型的相同方式进行。

例如,如果您想使用计算机视觉进行库存管理,那么拥有商店或冰箱中物体的图像是很重要的,因为模型将在这些地方使用。目录类型的图像不会产生健壮的模型,因为它们不代表用例。该模型必须学习鲁棒的特征,以便检测环境中的对象。

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

It is hard to imagine the fridge of the end-users will be this clean!

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

The image on the left is not very representative of the use case on the right!

高性能和过度配合

数据科学的黄金法则是,当你在问题开始时获得了极好的性能(> 90%)时,要保持怀疑。项目开始时的良好表现可能是“漏”变量或“漏”数据集的指标。漏变量是与目标变量高度相关的变量,在推理时不太可能得到。如果目标是预测销售额,您就不能使用其他产品的销售额作为特征,因为这些数据是不可用的。
当数据集仅反映某个(时间)时间段时,就会出现“泄漏”数据集。需要解决的问题通常要简单得多,而且模型很可能适合数据中的噪声,而不是实际信号。

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

The easiest thing to do in machine learning is overfitting! (source)

一个高性能的模型是伟大的,但前提是它在一个全新的随机数据集上表现同样好!

将相关性解释为因果关系

我非常喜欢这篇关于统计谬误的博文。将相关性解释为因果关系只是经常犯的错误之一,深入理解它们背后的统计数据是关键。

模型和数据的可解释性

如果客户使用模型作为行动的基础,他们将总是喜欢可解释和可理解的解决方案。在[这篇博文](http://Regardless of the end goal of your data science solutions, an end-user will always prefer solutions that are interpretable and understandable. Moreover, as a data scientist you will always benefit from the interpretability of your model to validate and improve your work. In this blog post I attempt to explain the importance of interpretability in machine learning and discuss some simple actions and frameworks that you can experiment with yourself.)中,我深入探讨了为什么模型可解释性是关键的原因。我还更深入地介绍了您可以使用的不同技术。

结论

我只提到了 6 个潜在的数据科学陷阱,但我确信,在过去的一年里,我可能犯了更多的错误。如果你有任何数据科学项目的经验,并想分享你经常遇到的问题,我很乐意在评论中阅读它们。如果你想收到我博客上的更新,请在 MediumTwitter 上关注我!

机器学习中常见的损失函数

原文:https://towardsdatascience.com/common-loss-functions-in-machine-learning-46af0ffc4d23?source=collection_archive---------0-----------------------

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

Loss functions and optimizations

机器通过损失函数来学习。这是一种评估特定算法对给定数据建模程度的方法。如果预测与实际结果相差太多,损失函数就会产生一个非常大的数字。逐渐地,在一些优化函数的帮助下,损失函数学习减少预测中的误差。在本文中,我们将介绍几种损失函数及其在机器/深度学习领域的应用。

机器学习中的算法没有放之四海而皆准的损失函数。在为特定问题选择损失函数时涉及各种因素,例如所选择的机器学习算法的类型、计算导数的容易程度以及某种程度上数据集中离群值的百分比。

大体上,损失函数可以根据我们正在处理的学习任务的类型分为两大类——回归损失和 T2 分类损失。在分类中,我们试图预测有限分类值集的输出,即给定手写数字图像的大数据集,将它们分类为 0-9 个数字中的一个。另一方面,回归处理预测连续值,例如给定的楼层面积、房间数量、房间大小,预测房间的价格。

**NOTE** 
        n        - Number of training examples.
        i        - ith training example in a data set.
        y(i)     - Ground truth label for ith training example.
        y_hat(i) - Prediction for ith training example.

回归损失

均方误差/二次损失/L2 损失

数学公式 :-

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

Mean Squared Error

顾名思义,均方误差是以预测值和实际观测值的平方差的平均值来衡量的。它只关心误差的平均大小,而不考虑它们的方向。然而,由于平方,与偏差较小的预测相比,远离实际值的预测会受到严重的惩罚。加上 MSE 有很好的数学属性,这使得计算梯度更容易。

import numpy as npy_hat = np.array([0.000, 0.166, 0.333])
y_true = np.array([0.000, 0.254, 0.998])def rmse(predictions, targets):
    differences = predictions - targets
    differences_squared = differences ** 2
    mean_of_differences_squared = differences_squared.mean()
    rmse_val = np.sqrt(mean_of_differences_squared)
    return rmse_valprint("d is: " + str(["%.8f" % elem for elem in y_hat]))
print("p is: " + str(["%.8f" % elem for elem in y_true]))rmse_val = rmse(y_hat, y_true)
print("rms error is: " + str(rmse_val))

平均绝对误差/L1 损失

数学公式 :-

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

Mean absolute error

另一方面,平均绝对误差是预测值和实际观测值之间的绝对差值的平均值。像 MSE 一样,这也是在不考虑误差方向的情况下测量误差的大小。与 MSE 不同,MAE 需要更复杂的工具,如线性编程来计算梯度。此外,MAE 对异常值更健壮,因为它不使用 square。

import numpy as npy_hat = np.array([0.000, 0.166, 0.333])
y_true = np.array([0.000, 0.254, 0.998])

print("d is: " + str(["%.8f" % elem for elem in y_hat]))
print("p is: " + str(["%.8f" % elem for elem in y_true]))

def mae(predictions, targets):
    differences = predictions - targets
    absolute_differences = np.absolute(differences)
    mean_absolute_differences = absolute_differences.mean()
    return mean_absolute_differencesmae_val = mae(y_hat, y_true)
print ("mae error is: " + str(mae_val))

平均偏差误差

与机器学习领域相比,这在机器学习领域更不常见。这和 MSE 一样,唯一的区别是我们不取绝对值。显然需要谨慎,因为正负误差会相互抵消。虽然在实践中不太准确,但它可以确定模型是有正偏差还是负偏差。

数学公式 :-

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

Mean bias error

分类损失

铰链损耗/多级 SVM 损耗

简单地说,正确类别的得分应该比所有错误类别的得分之和大一些安全余量(通常是 1)。因此,铰链损失用于最大间隔分类,最显著的是用于支持向量机。虽然不是可微的,但它是一个凸函数,这使得它很容易与机器学习领域中常用的凸优化器一起工作。

数学公式 :-

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

SVM Loss or Hinge Loss

考虑一个例子,其中我们有三个训练样本和三个要预测的类别——狗、猫和马。低于我们的算法对每一类的预测值:-

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

Hinge loss/ Multi class SVM loss

计算所有 3 个训练示例的铰链损耗:-

**## 1st training example**
max(0, (1.49) - (-0.39) + 1) + max(0, (4.21) - (-0.39) + 1)
max(0, 2.88) + max(0, 5.6)
2.88 + 5.6
*8.48 (High loss as very wrong prediction)***## 2nd training example** max(0, (-4.61) - (3.28)+ 1) + max(0, (1.46) - (3.28)+ 1)
max(0, -6.89) + max(0, -0.82)
0 + 0
*0 (Zero loss as correct prediction)***## 3rd training example** max(0, (1.03) - (-2.27)+ 1) + max(0, (-2.37) - (-2.27)+ 1)
max(0, 4.3) + max(0, 0.9)
4.3 + 0.9
*5.2 (High loss as very wrong prediction)*

交叉熵损失/负对数似然

这是分类问题最常见的设置。交叉熵损失随着预测概率偏离实际标签而增加。

数学公式 :-

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

Cross entropy loss

请注意,当实际标签为 1 (y(i) = 1)时,函数的后半部分消失,而当实际标签为 0 (y(i) = 0)时,函数的前半部分消失。简而言之,我们只是将实际预测概率的对数乘以地面真实类。一个重要的方面是交叉熵损失严重惩罚了那些有信心但错误的预测。

import numpy as nppredictions = np.array([[0.25,0.25,0.25,0.25],
                        [0.01,0.01,0.01,0.96]])
targets = np.array([[0,0,0,1],
                   [0,0,0,1]])def cross_entropy(predictions, targets, epsilon=1e-10):
    predictions = np.clip(predictions, epsilon, 1\. - epsilon)
    N = predictions.shape[0]
    ce_loss = -np.sum(np.sum(targets * np.log(predictions + 1e-5)))/N
    return ce_losscross_entropy_loss = cross_entropy(predictions, targets)
print ("Cross entropy loss is: " + str(cross_entropy_loss))

分析数据的常见模式

原文:https://towardsdatascience.com/common-patterns-for-analyzing-data-da1908640641?source=collection_archive---------7-----------------------

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

Photo by Samuel Zeller on Unsplash

数据通常是杂乱的,建立准确模型的关键步骤是彻底理解您正在处理的数据。

在我几个月前开始自学机器学习之前,我没有太多考虑如何理解数据。我假设数据是放在一个很好的有组织的包中,顶部有一个蝴蝶结,或者至少有一套清晰的步骤可以遵循。

通过查看其他人的代码,我对人们理解、可视化和分析相同数据集的方式的差异感到震惊。我决定通读几种不同的数据分析,试图找到相似之处和不同之处,看看我是否能提炼出一套理解数据集的最佳实践或策略,以便最好地利用它们进行分析

数据科学家将大部分时间花在数据准备上,而不是模型优化上。— 洛林克

在这篇文章中,我选择了一些在数据科学网站 Kaggle 上公开的 探索性数据分析(或 EDAs) 。这些分析将交互式代码片段与散文混合在一起,可以帮助提供数据的鸟瞰图或梳理出数据中的模式。

我同时研究了特征工程,这是一种获取现有数据并以赋予额外含义的方式对其进行转换的技术(例如,获取时间戳并提取一个DAY_OF_WEEK列,这可能会在预测商店销售额时派上用场)。

我想看各种不同种类的数据集,所以我选择了:

  • 结构数据
  • 自然语言
  • 图像

请随意跳到下面的结论,或者继续阅读深入研究数据集。

标准

对于每个类别,我选择了两个已经过了提交日期的比赛,并根据提交的团队数量进行了排序。

对于每一场比赛我都搜索了 EDA 标签,选择了三个评价很高或者评论很好的内核。最终分数没有考虑在内(一些 EDA 甚至没有提交分数)。

结构数据

结构化数据集的特征在于包含训练和测试数据的电子表格。电子表格可能包含分类变量(颜色,如greenredblue)、连续变量(年龄,如41567)和顺序变量(教育水平,如elementaryhigh schoolcollege)。

插补 —填充数据中缺失的值

宁滨 —将连续数据组合成桶,一种特征工程的形式

训练电子表格有一个您试图求解的目标列,它将在测试数据中丢失。我检查的大多数 EDA 都集中在梳理目标变量和其他列之间的潜在相关性。

因为你主要是在寻找不同变量之间的相关性,所以你可以分割数据的方法就只有这么多。对于可视化,有更多的选择,但即使如此,一些技术似乎比其他技术更适合手头的任务,导致了许多看起来相似的笔记本。

你可以真正发挥想象力的地方是特性工程。我看到的每个作者都有不同的特征工程方法,无论是选择如何绑定一个特征还是将分类特征组合成新的特征。

我们再来深入看两个比赛,泰坦尼克号比赛,其次是房价比赛

泰坦尼克号

泰坦尼克号比赛是一项很受欢迎的初学者比赛,许多 Kaggle 上的人都参加了这项比赛。因此,EDA 往往写得很好,记录得很完整,是我见过的最清晰的。该数据集包括一个训练电子表格,其中有一列Survived指示乘客是否幸存,以及其他补充数据,如他们的年龄、性别、机票价格等。

我选择分析的 EDA 是 I 的EDA to predict Dietanic,CoderTitanic Survival for 初学者 EDA to MLdeja vuIn Depth visualization Simple MethodsJekaterina Kokatjuhha。

所有三个 EDA 都从原始指标开始,查看几个样本行并打印关于 CSV 文件的描述性信息,如列的类型、平均值和中值。

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

I, Coder describes the dataset

处理空值或缺失值是数据准备的关键步骤。一个 EDA 直接处理这个问题,而另外两个在特性工程阶段处理缺失值。

我,编码员反对分配一个随机数来填充缺失的年龄:

正如我们之前看到的,年龄特性有 177 个空值。为了替换这些 NaN 值,我们可以为它们分配数据集的平均年龄。但问题是,有很多不同年龄的人。我们不能给一个 4 岁的孩子分配 29 岁的平均年龄。有什么办法可以查出这位乘客属于哪个年龄段吗??答对了。!!!,我们可以检查名称功能。查看该特征,我们可以看到姓名带有称呼,如 Mr 或 Mrs。因此,我们可以将 Mr 和 Mrs 的平均值分配给相应的组。

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

I, Coder imputing ages

虽然 I,Coder 将特征工程作为纯数据分析的一部分,但其他两位作者认为这是一个独立的步骤。

所有三位内核作者都非常依赖图表和可视化来获得对数据的高层次理解,并找到潜在的相关性。使用的图表包括因子图、交叉表、条形图和饼图、小提琴图等。

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

deja vu plots survival by gender

你可能对泰坦尼克号灾难中的“妇女和儿童优先”这句话很熟悉,对于每个作者来说,年龄和性别在他们最初的数据分析中占了很大比重。收入背景(如机票价格所示)也需要进行一些详细的检查。

船上男人的数量比女人的数量多得多。然而,获救的女性人数几乎是男性人数的两倍。船上女性的存活率约为 75%,而男性约为 18-19%。—我,编码员

杰卡特琳娜本人、编码员都是通过对图表和数据的目测得出结论,其中杰卡特琳娜写道:

  • 性:女性生存几率更高。
  • 有一张头等舱机票对生存是有益的。
  • SibSp 和 Parch:中型家庭比独自旅行或大家庭的人有更高的存活率。原因可能是,只有人们愿意牺牲自己来帮助别人。关于大家庭,我会解释说,很难管理整个家庭,因此人们会在上船之前寻找家庭成员。
  • 登船 C 的存活率更高。例如,看看 Pclass 1 的大部分是否在 embarked C 中出现,这将是很有趣的。

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

Jekaterina builds a stacked chart illustrating Pclass and Embarked

似曾相识的 EDA 记录了他分析的每一步的准确度,提供了一个很好的反馈,说明每个特征对最终预测有多重要。

特征工程

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

Jekaterina pulls out cabin letter.

谈到特性工程,三个内核作者之间有更多的可变性。

每位作者为年龄和费用等连续变量选择不同数量的桶。与此同时,每个人都以不同的方式处理家庭关系,其中 I,编码者建立了一个SibSip——无论一个人是独自还是与家人(配偶或兄弟姐妹)——以及family_sizealone,而杰卡特琳娜拿出一个小屋,并为childadult建议一个功能。我,编码员在剔除不相关的列时特别积极:

Name →我们不需要 Name 特性,因为它不能被转换成任何分类值。

年龄→我们有年龄带功能,所以不需要这个。

票→是任意一个无法分类的随机字符串。

Fare →我们有 Fare_cat 特性,所以不需要

客舱→许多 NaN 值以及许多乘客有多个客舱。所以这是一个没用的功能。

Fare_Range →我们有 fare_cat 功能。

PassengerId →无法分类。

对于插补步骤, Jekaterina 写道:

  • 上船:用大船装满船
  • Pclass:因为 Fare 中只有一个缺失值,所以我们将用相应 Pclass 的中间值来填充它
  • 年龄:有几种输入技术,我们将使用范围均值±标准差中的随机数

她通过确保新的估算数据不会扰乱均值来总结她的内核:

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

Jekaterina checking if the imputation disrupted the mean

外卖食品

所有三个内核作者都花时间预先检查数据并描述整体形状。

I,Coder 查看总的空值,而 Jekaterina 在接近结束时查看。

每个人都从查看幸存者的分类开始,然后是幸存者按性别的分类。交叉表、因子图和小提琴图都是流行的图表。Jekaterina 还绘制了一些非常有趣的图表。

当谈到特征工程时,作者们的分歧就更大了。作者们在何时设计新功能的问题上意见不一,一些人将其视为一个独立的步骤,而另一些人则在他们对数据的初步分析中处理它。宁滨各地的选择各不相同,年龄、头衔和费用都有不同数量的桶,只有杰卡特琳娜设计了一个离散的child / adult特征。

估算的方法也不同。 I,编码员建议查看现有数据来预测插补值,而 Jekaterina 确保她的插补数据不会影响平均值。

两位作者在思考和处理数据的方式上有一些明显的相似之处,主要分歧在于可视化和特征工程。

房价

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

by American Advisors Group

房价又是一场结构化数据竞赛。这一项比泰坦尼克号竞赛拥有更多的变量,包括分类、顺序和连续特征。

我选择分析的 EDA 分别是佩德罗·马塞利诺用 Python 进行的全面数据探索、安吉拉用 Python 进行的详细数据探索,以及尚贤公园趣味 Python EDA 一步步

虽然类似于泰坦尼克号,但它要复杂得多。

有 79 个解释变量描述了(几乎)爱荷华州埃姆斯住宅的每个方面,这个比赛挑战你预测每个家庭的最终价格。

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

Pedro plots the sale price

安吉拉和佩德罗花了一些时间预先调查初始数据,就像我们在《泰坦尼克号》中看到的那样。 Angela 在直方图中绘制销售价格并构建功能热图,而 Pedro 绘制销售价格并得出以下关于销售价格的结论:

*偏离正态分布。

*具有明显的正偏度。

*显示峰值。

佩德罗然后站在买家的角度,推测哪些功能对他很重要,检查他的选择和销售价格之间的相关性。后来,他构建了一个热图,在放大几个有希望的候选人之前,收集更客观的特征关系视图。

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

Plotting features against sale price

相比之下,安吉拉从更客观的方法开始,通过与SalePrice的相关性列出数字特征。她还根据销售价格绘制特征图,寻找数据中的模式。

Sang-eon 开始他的内核,积极剔除缺失值和离群值(除了LotFrontage他使用线性回归估算)。只有到那时,他才开始针对销售价格策划各种特征。

Pedro 一直等到寻找数据之间的相关性,以检查缺失数据的问题。他问道:

  • 缺失数据有多普遍?
  • 缺失数据是随机的还是有规律的?

由于实际原因,这些问题的答案很重要,因为缺失数据可能意味着样本量的减少。这可能会阻止我们继续进行分析。此外,从实质性的角度来看,我们需要确保缺失数据的处理过程不会有偏见,不会隐藏一个难以忽视的事实。

为了解决这些问题, Pedro 绘制了缺失单元格的总数和百分比,并选择删除 15%或更多单元格包含缺失数据的列。他再次依靠主观选择来确定要移除哪些特征:

…我们会错过这些数据吗?我不这么认为。这些变量似乎都不是很重要,因为大部分都不是我们买房时考虑的方面(也许这就是数据缺失的原因?).此外,仔细观察变量,我们可以说像’ PoolQC ‘,’ MiscFeature ‘和’ FireplaceQu '这样的变量是离群值的强候选,所以我们很乐意删除它们。

Pedro 处理缺失数据的方法是,如果列(特征)具有大量缺失值,则完全删除它们,或者删除只有少量缺失值的行。他没有估算任何变量。他还建立了一种解决异常值的启发式方法:

这里主要关心的是建立一个阈值,将一个观察定义为异常值。为此,我们将对数据进行标准化。在这种情况下,数据标准化意味着将数据值转换为平均值为 0,标准差为 1。

他的结论是,从统计的角度来看没有什么可担心的,但是在返回到数据的视觉检查之后,删除了一些他认为有问题的单个数据点。

特征工程

Sang-eon 检查数据的偏斜度和峰度,并执行 Wilxoc-秩和检验。他以一个非常好看的情节结束了他的内核:

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

Sang-eon with a 3d plot of features

同时, Pedro 讨论了正态性、同方差性、线性和不存在相关误差;他将数据标准化,发现其他三个问题也解决了。成功!

外卖食品

三个内核作者都没有做太多的特性工程,可能是因为数据集中已经存在太多的特性。

有各种各样的策略来确定如何处理数据,一些作者采用主观策略,而另一些作者则直接采用更客观的测量方法。对于何时以及如何剔除缺失值或异常值,也没有明确的共识。

与《泰坦尼克号》比赛相比,这里更注重统计方法和整体的完整性,可能是因为有太多的功能需要处理;与之前的比赛相比,负面的统计效应可能会产生更大的整体影响。

自然语言

自然语言(NLP)数据集包含单词或句子。虽然核心数据类型与结构化数据竞赛中的相同,即文本,但可用于分析自然语言的工具是专门的,导致了不同的分析策略。

在原始形式下,语言不容易被机器学习模型破译。要将其转换成适合神经网络的格式,需要进行转换。一种流行的技术是单词包,通过这种技术,一个句子被有效地转换成 0 或 1 的集合,以指示某个特定单词是否存在。

由于需要转换数据,大多数笔记本的前几个步骤往往是将文本转换成机器可读的东西,这一步在笔记本之间往往是相似的。一旦完成了这些,编码人员在他们的方法上就有了很大的分歧,并为特性工程采用了各种不同的可视化和技术。

毒性评论分类

警告:这些评论中的一些可能会灼伤你的眼球。

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

by navaneethkn

我关注的第一个 NLP 竞赛是有毒评论分类竞赛,它包括一个数据集,其中包含大量来自维基百科 talk page edits 的评论,这些评论按照毒性等级进行评分,表明它们是否是侮辱、淫秽、有毒等等。挑战在于预测给定评论的毒性标签。

我选择分析的 EDA 是 Stop the S@#$ —有毒评论 EDA 作者贾根分类多标签评论作者铑 Beng不要惹我母亲作者弗朗西斯科门德斯

三位作者都是从描述数据集开始,并随机抽取一些评论。虽然没有丢失值,但是注释中有很多干扰,但是不清楚这些干扰在最终的数据分析中是否有用。

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

Jagan plots the distribution of images per toxic category

毒性并没有在各个阶层中均匀分布。因此,我们可能会面临阶级失衡的问题

Francisco 立即扔掉“缺乏意义”的单词(例如,“and”或“the”)。利用双标图,他画出一个特定的单词最有可能属于哪一类。

从 biplot 来看,大多数单词都像预期的那样组织起来,除了一些例外,fat 与身份仇恨有关,这令人惊讶,因为它是图表底部唯一的非种族单词,在图表中间有一些通用的攻击性单词,这意味着它们可以用于任何可怕的目的, 其他像 die 这样的单词只与威胁相关联,这完全说得通。其他一些像$$(抱歉,我写它时感觉不舒服,因为它出现在数据上)与威胁相关联,在图表的左中部有一些无法识别的单词,这些单词使用代码显示——Francisco Mendez

Francisco 接着询问拼写错误和毒性之间是否存在关联。

显然是有的,令人惊讶的是,拼错的 mother 与仇恨或威胁无关,但当拼写正确时,会有一些仇恨和威胁评论中有 mother 这个词…这是因为人们在威胁某人或讨厌它时会写得更仔细吗?

随着 Francisco 的深入研究,他发现在许多情况下,有害的评论会一遍又一遍地包含复制粘贴的短语。在删除重复的单词后,他重新进行分析,发现了一组新的相关性。

这里有一些新词,可能是 gay,主要用于威胁性评论和仇恨。一些一般温和的词,如母亲,地狱,一块,愚蠢,白痴和关闭被用于任何有毒的一般目的,同时任何衍生的 f 字被用于有毒和淫秽的评论。此外,从双标可以认识到,毒性和侮辱是相似的,是最不具攻击性的,而仇恨和威胁是最严重的。

这三位作者都充分利用了数据的可视化效果。(鉴于主题我不会嵌入图片,但是你可以在每个作者的内核上找到它们。)

Rhodium 构建了一个字符长度直方图以及类别之间的热图,发现一些标签高度相关;例如,侮辱有 74%可能也是淫秽的。

Jagan 绘制了一些单词云、热图和交叉表,观察到:

一个严重的有毒评论总是有毒的
除了少数例外,其他类别似乎是有毒的子集

特征工程

小写文本,手动把缩写变成东西,手动清理标点符号。

Jagan 绘制各种特性与毒性的关系图,寻找相关性。发现之一是:垃圾邮件发送者往往更具毒性。

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

Jagan discussing feature engineering

对于单个单词和成对单词, JaganRhodium 都使用 TF-IDF 绘制顶部单词,描述如下:

TF 代表词频;本质上,一个单词在文本中出现的频率…你可以把它理解为相对文本频率与整体文档频率的归一化。这将导致特定作者特有的单词脱颖而出,这也是我们为了建立预测模型而想要实现的。— 正面还是反面

外卖食品

似乎所有作者都遵循一些最佳实践,包括小写文本、处理缩写和清理标点符号等都是作者关注的领域。然而,一些作者也认为这些可能是潜在的特征,而不仅仅是噪音(例如,Francesco 发现了打字错误和毒性之间的相关性)。

阴森森的作者识别

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

by Gael Varoquaux

幽灵作者识别提供了三位恐怖主题作者的文本片段——埃德加·爱伦·坡、惠普·洛夫克拉夫特或玛莉·渥斯顿克雷福特·雪莱——并要求参与者建立一个模型,能够预测哪位作家创作了特定的一段文本。

我选择进行分析的 EDA 是由提供的怪异 NLP 和主题建模教程各向异性教程详细怪异趣味 EDA 和建模Bukun 提供,以及由头或尾提供的 Treemap House of Horror 怪异 EDA LDA Features

这个数据集的有趣之处在于它的简单性;除了作者之外,文本附带的非结构化数据非常少。因此,所有的数据库都只关注不同的语言解析和分析方法。

每个作者首先检查数据集,挑选几行,并绘制每个作者的故事数量。 Bukun 还会查看每个作者的字数,而各向异性会绘制一个总字数的条形图:

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

注意到这个词频图中出现的单词有什么奇怪的地方吗?这些话实际上告诉了我们玛丽·雪莱在她的故事中想要向读者描绘的主题和概念吗?这些词都是非常常见的词,你可以在任何其他地方找到。不仅在我们三位作者的恐怖故事和小说中,而且在报纸、儿童读物、宗教文本中——实际上几乎所有其他的英语文本中。因此,我们必须找到一些方法来预处理我们的数据集,首先去除所有这些经常出现的单词,这些单词不会给表格带来太多。—各向异性

每位作者都构建了词云,最大程度地显示了最常用的词:

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

Heads or Tails builds a word cloud of the 50 most common words

Heads or Tails 还绘制出每个作者的整体句子、句子和单词长度,并发现作者之间细微但可测量的差异。

各向异性卜坤讨论标记化,去除停用词:

这一阶段的工作试图将相似单词的许多不同变体缩减为单个术语(不同的分支都缩减为单个词干)。因此,如果我们有“运行”、“运行”和“运行”,你真的会希望这三个不同的单词合并成一个单词“运行”。(当然,你失去了过去、现在或将来时态的粒度)。—各向异性

在标记化、停用词移除和词条化之后,各向异性重建前 50 个词的图:

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

Bukun 将他最喜欢的 10 个词按照作者进行分类,找到了不同的组合:

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

Heads or Tails 也是这样做的,在标记化和词干化之后,另外查看作者的热门词。

BukunHeads or Tails 都使用 TF-IDF 来为特定作者找到最“重要”的词。

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

Heads or Tails plots the most significant words by author in a bit of a different chart

Bukun 查看顶级二元模型和三元模型(分别是两个和三个单词的集合)。

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

Heads or Tails plots the word relationships for bigrams

Bukun正面或反面都执行情感分析,并查看每个作者的总体负面评价。

Bukun 使用一种叫做“NRC 情绪词典”的东西来检查每个文本片段中“恐惧”、“惊喜”和“喜悦”的数量,并使用单词云、表格、条形图来可视化各个作者的情绪。

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

Bukun plots a word cloud for words matching Joy

特征工程

Bukun 建议添加一些可能的特性,包括逗号、分号、冒号、空格、带大写字母的单词或以大写字母开头的单词,以及每一个的图表。对于一些作者来说,这些特征之间确实存在某种关联。

正面或反面注意到:

我们已经注意到,我们的三个作者可以通过他们最突出的人物的名字来识别;玛丽·雪莱写的是“雷蒙德”,洛夫克拉夫特写的是“赫伯特·韦斯特”。但是一般的名字呢?是不是有些作者在某些情况下更倾向于用名字?在句子或字符长度之后,这是我们寻求知识的第一个特征工程概念

从这个角度来看,正面或反面依赖于babynames包,该包提供了给定年份最受欢迎名字的列表,为数据增加了一个额外的特性。

BukunHeads or Tails 都查看作者之间的性别代词细分,而 Heads or Tails 还查看句子主题、每个作者的起始单词和最后一个单词、独特单词的数量、每个句子中独特单词的比例、对话标记和头韵(这是一个很酷的想法!)

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

heads or tails plots various measurements of alliteration by author

正面还是反面以展示功能交互的冲积图结束他的内核:

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

Heads or Tails’ alluvial plot showcasing feature interaction

外卖食品

这是一个值得研究的有趣竞争,因为文本片段更长,并且没有结构化数据可以依赖。

内核倾向于利用 NLP 最佳实践,比如小写单词、词干和标记化。内核也倾向于使用比有毒内核更先进的技术,如情感分析和二元三元模型分析。

两次比赛,内核作者都用了 TF-IDF

对于功能工程,作者设计了各种新功能,包括每句话的平均字数、标点符号的选择以及单词是否重复。

形象

到目前为止,数据集都是纯粹基于文本的(语言、字符串或数字)。我选择查看的最后两个数据集是基于图像的。

我研究的两个竞赛(肺癌树叶分类)都比我研究的其他竞赛更具领域特异性。因此,这些分析倾向于假设一个先进的观众,作者跳过了初步的分析,有利于探索不同的图像分析技术。

我在所使用的可视化技术方面看到了很大的多样性,以及工程化的特性。特别是,肺癌竞赛中的一些作者利用了现有的医学知识,以便设计出极具领域特异性的特征。我不能说这些功能有多有效,但我可以说它们产生的视觉效果令人惊叹。

树叶分类

树叶分类比赛包括 1,584 张树叶的蒙版图片,按物种组织。参与者被要求建立一个模型,这个模型能够将新的图片分类到其中一个类别。

我选择用于分析的 EDA 是由 lorinc图像特征提取,由 selfishgene用叶子数据集可视化 PCA,以及由 Jose Alberto快速图像探索

一个好的第一步是看树叶的图像,这是两个 EDA 的开始。

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

selfishgene examines the leaf specimens

何塞绘制了各种各样的物种,并指出每个物种有 10 张图片。他还研究了一个类别内的树叶之间的相似性:

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

Jose compares leaves within a category

与此同时, lorinc 直接进入分析,定位每片叶子的中心并应用边缘检测。lorinc 还将叶子的轮廓转换成极坐标,以便更有效地测量叶子的中心:

稍后,当我们从形状生成时间序列时,我们可能希望切换到另一种中心性度量,基于该中心的效率,使用边缘和中心之间的距离。一种方法是测量中心和边缘之间的(欧几里德)距离……但是有一种更好的方法——我们将笛卡尔坐标投影到极坐标中。

selfishgene 选择查看图像的变化方向,写道:

每个图像可以被认为是高维图像空间中的不同“方向”

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

selfishgene looks at the variance of a leaf image

selfishgene 也花了一些时间研究图像重建、平均图像周围的模型变化和特征向量;他解释道:

最上面一行包含每个特征向量的数据分布(即沿该“方向”的直方图),第二行包含我们在前面的图中已经看到的内容,我们称之为方差方向。第四行包含叶子的中间图像。请注意,这一行对于所有特征向量都是相同的。第三行保存每个特征向量的第 2 个百分位数的图像。更容易认为这是中值图像减去特征向量图像乘以某个常数。

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

selfishgene looks at model variations

特征检测

lorinc 建议将每个样本一分为二,作为两个样本对待(尽管他并不追求这种方法)。 lorinc 从时间序列中寻找局部最大值和最小值(例如,在极坐标中绘制的叶子)并记录:

好吧,我自己也吃惊。这一点做得很好。我想,我可以由此构建一个极其高效的特性。但是这种方法还不够健壮。

不是找到尖端,而是找到离中心距离最大的点。(请看第 19 页)

在更复杂或不幸旋转的叶片上,它将悲惨地失败。(看第 78 页)

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

lorinc measures the minima and maxima of a leaf plotted in polar coordinates

在发现每片叶子周围存在噪音之前,lorinc 从那里开始讲述数学形态学。他花了一些时间想出如何从图像中去除噪声,并以一幅可爱的图像结束,该图像显示了叠加在叶子上的距离图:

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

lorinc measures the distance from the center of a leaf

肺癌

我选择分析的 EDAs 分别是Guido Zuidhof全预处理教程,Mikel Bober-Irizar探索性数据分析Alexandru Papiu探索性分析可视化

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

anokas examines the metadata for a single image. You can see that patient date has been rendered anonymous (1/1/1900)

我看的最后一个图像竞赛是 2017 数据科学碗,它要求参与者检查一系列图像,并预测患者是否患有癌症。虽然这场比赛的特点是结构化数据(嵌入图像本身的元信息),但其中一些数据是匿名的,这意味着原本具有预测价值的特征(如患者的年龄)被删除了。这意味着所有的内核都专注于图像分析。

在三个核心作者中, Guido 是唯一一个讨论他的医学图像工作背景的人,在他对数据集的特定领域分析中显示:

Dicom 是医学成像领域事实上的文件标准。…这些文件包含大量元数据(例如像素大小,即一个像素在现实世界中的每个维度上有多长)。扫描的这种像素大小/粗糙度因扫描而异(例如,切片之间的距离可能不同),这可能损害 CNN 方法的性能。我们可以通过同构重采样来解决这个问题

其他两位作者从数据集和图像本身的更一般的探索开始他们的 EDA。

apapie 从检查图像的形状开始,而 anokas 从查看每个患者的扫描次数、扫描总数和每个患者的 DICOM 文件直方图开始,同时进行快速的完整性检查,以查看行 ID 和患者是否患有癌症之间是否有任何关系(没有发现任何关系,这意味着数据集已经很好地排序)。

Alexandru 获取像素分布并绘制它们:

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

有趣的是,该分布似乎大致呈双峰分布,一组像素设置为-2000,可能是因为缺少值。

Guido 在他的 EDA 中更清楚地解释了这是为什么,即由于 HU 单位所代表的(空气、组织和骨骼):

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

形象

每个作者继续检查图像本身:

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

anokas looks at a set of patient images side by side

Alexandru 从 X 角度查看图像

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

Alexandru looks at images from the X angle

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

anokas builds a gif that moves through a set of patient images

Alexandru 花了一些时间探索边缘检测是否可以增强图像。

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

After increasing the threshold, Alexandru was able to render some visually striking images

亚历山德鲁的结论是:

有趣的结果,然而这里的问题是过滤器也将检测肺部的血管。因此,区分球体和管道的某种三维表面检测更适合这种情况。

同时, Guido 讨论了重采样,重点是 DICOM 图像的基本特性:

扫描可以具有[2.5,0.5,0.5]的像素间距,这意味着切片之间的距离是 2.5 毫米。对于不同的扫描,这可能是[1.5,0.725,0.725],这对于自动分析(例如使用 ConvNets)可能是有问题的!处理这种情况的一种常见方法是将整个数据集重采样到某个各向同性分辨率。如果我们选择将所有内容重新采样为 1mm1mm1mm 像素,我们可以使用 3D convnets,而不必担心学习缩放/切片厚度不变性。

后来在他的 EDA 中, Guido 能够通过组合多个 DICOM 图像来绘制内腔的 3D 图:

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

而另一个版本,在去除了周围的空气以减少内存之后:

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

外卖食品

这场比赛是我见过的内核差异最大的比赛。 Guido ,鉴于他对医学图像格式的熟悉,能够利用这一背景得出更加微妙的结论。也就是说,其他两位作者缺乏医学知识并不妨碍他们得出同样有趣的结论。

结论

事实证明,对于不同类型的数据,有一些强有力的模式可以指导方法。

对于结构化数据竞赛,数据分析倾向于寻找目标变量和其他列之间的相关性,并花费大量时间可视化相关性或对相关性进行排名。对于较小的数据集,您只能检查这么多列;在大竞争中的分析在检查哪些列和以什么样的顺序方面趋于一致。然而,不同的编码人员使用了非常不同的可视化方法,似乎在选择设计哪些特性方面有更多的创造性。

自然语言数据集在作者如何处理和操作文本方面与 EDA 有相似之处,但作者选择设计的特征有更多的可变性,以及从这些分析中得出的不同结论。

最后, Image 竞赛在分析和特征工程方面表现出最大的多样性。我看到的图像比赛大多针对高级观众,并且在相当特定的领域,这可能导致了更高级的多样性。

随着数据集变得更加专业化或深奥,介绍性分析和解释的数量减少,而深度或专业化分析的数量增加,这是有道理的,事实上这就是我所看到的。虽然不同类型的数据有明显的趋势,但领域知识起着重要的作用。在肺癌和 leaf 竞赛中,利用领域知识进行了更深入的分析。(说来有趣,我在自己的研究中见过这种情况;杰瑞米·霍华德在他的 fast.ai 课程中,讨论了罗斯曼数据集,以及最成功的模型如何整合第三方数据集,如温度、商店位置等,以做出更准确的销售预测。)

对于作者何时处理特征工程,没有一致的过程,一些人选择在他们开始分析时就开始,而另一些人在他们的初始分析完成后保持一个离散的步骤。

最后,我看到的每一个笔记本都有明确的读者群(初学者或高级),这影响了分析和写作。更受欢迎的比赛,或者那些针对更普通观众的比赛,有详尽的分析数据。在这些电子数据分析中,我也看到了一种趋势,即在分析的同时穿插补充性的文章或使用叙事手段,作为帮助初学者更好地理解技巧的工具。相比之下,面向领域专家的笔记本倾向于去掉多余的框架,许多还跳过了基本的数据分析,而是直接进入特定领域的技术。

特别感谢 米歇尔·卢 阿里·齐尔尼克 肖恩·马修斯 ,以及 贝瑟尼·巴西尔 为本文审稿。

原载于thekevinscott.com

常识分析

原文:https://towardsdatascience.com/common-sense-analytics-df0929ca5016?source=collection_archive---------4-----------------------

亲吻(保持简单愚蠢)

当我阅读人员分析职位的招聘信息时,我有点惊讶于对高级建模和机器学习的重视程度。广告通常倾向于或要求有博士学位的人,即使对于那些刚刚开始他们的人员分析之旅的组织也是如此。当然,有很多公司已经在做高级预测和其他类型的建模,他们为我们其他人开辟了道路。然而,也有许多组织已经能够通过使用基本数学和大量常识的人员分析来提高业务绩效和创造竞争优势。简单也可以很性感。

在业务环境中解释人员分析

在去年的一次采访中,有人向我提出了以下情景:

你正在向一群没有很强数学背景的经理展示结果,你需要解释贝叶斯统计。你会如何向他们解释?

我告诉他,如果我发现自己在与经理开会时必须解释贝叶斯统计,那么一定是出了严重的问题。我解释说,即使是最先进的数学模型也必须简化为我们可以在业务环境中讲述的数据故事。如果模型需要高等数学才能理解,又不能用商业术语解释,那就该创建新的模型了。

我认为面试官对我的回答不太满意。通过他参与的这种分析,研究人员可能无法完全理解某些东西为什么会起作用,但只要模型是可靠和准确的,这是可以接受的。对于人员分析,理解一个模型的工作原理是最重要的;准确往往是一种错觉。(我没有得到这份工作)

用数据讲故事

即使你的团队中有世界上最有才华的数学家,并且他创建了最前沿的深度学习神经网络,也不会让你走得很远,除非你能用主管和经理能够理解和理解的商业术语来解释它。根据我的经验,特别是当你开始进行人员分析时,你可以进行的一些最有洞察力和最有意义的分析是我所说的“常识分析”

你从一个问题开始,并确定数据可能如何回答它。你将数据切片,以不可避免地引出其他问题的方式来看待它,然后重复这个过程。数据揭示了一个故事,当你提炼你的问题来揭示它。或者,也许你基于机器学习算法创建了一个可靠的模型,现在你必须将其转化为普通的商业意识。不管你走哪条路,数据都要讲述一个故事,你需要把这个故事放在业务环境中。

将数学和统计转化为商业现实所需的技能是高级分析技能,但它们不同于使用基于梯度的优化来微调模型参数或使用判别分析来分类数据所需的高级分析技能。如果事实证明你需要后者,你通常至少可以暂时租用或借用技术专长。好的故事讲述者更难找到。

描绘一幅成功的图画

你的故事结尾需要描绘出一幅未来的图景,当你在业务表现上取得可衡量的进步时。经理或主管必须看到,最终结果的价值值得为实施这一变革所花费的时间、精力和对业务的破坏。最后,您必须为主管和经理提供他们实施变革所需的一切,包括与监控他们的进展直接相关的重点信息。抵制提供无关数据的诱惑,因为这只会转移他们的注意力,给信号增加噪音。

我想这也是《哈佛商业评论》最近一篇文章的观点,很多人可能已经看过了。它的标题是,“人力资源必须使人员分析更加用户友好”,它有一些建议来帮助组织组织和交流这些类型的结果,以成功地实施变革。

MOTS:“可解释性”和“可理解性”胜过准确性(这可能只是一种错觉)。

原贴于 HR 镜头

用 python 读取和可视化吉拉的数据

原文:https://towardsdatascience.com/communication-story-from-an-issue-tracking-software-efbbf29736ff?source=collection_archive---------6-----------------------

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

Photo by Nong Vang on Unsplash

吉拉是一个广泛应用于 bug/问题跟踪和敏捷项目管理的软件。该工具的实体之一是一个问题,它可以代表一个 bug、一个任务、一个订单或其他东西(这取决于一个组织使用该应用程序的方式):

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

Picture from marketplace-cdn.atlassian

在问题中有许多通信信息,例如,作者、受托人、描述、评论、状态。从发现模式、潜在问题、改进业务流程和提高使用吉拉的效率或简单地“鸟瞰”吉拉的通信流程来看,这可能是有趣的。

本文涵盖以下内容:

以“大数据”方式从吉拉读取数据

不,我们不会考虑大数据工具。然而,我们事先不知道吉拉有多少数据(也许有人真的遇到大量数据),一个块一个块地处理数据是个好习惯。

吉拉-python 库允许我们轻松地与吉拉 API 进行交流。安装此库后,我们导入以下对象和异常,并创建导入对象的实例:

其中:

  • URL——吉拉的服务器地址,
  • 用户名和密码—代表与吉拉进行通信的用户的用户名和密码。使用所谓的技术用户是合理的,它并不代表一个真实的人,只是为了系统与系统之间的通信而创建的。

创建实例jira后,我们可以使用它的issue(读取单个问题)或search_issues(提取多个问题)方法读取数据。例如,让我们查找属于项目“项目 1”和“项目 2”且在过去 365 天内创建的问题:

其中 jql — 吉拉查询语言查找问题对应查询中给定的条件。jira_search具有类型jira.client.ResultList —匹配 JQL 的发布资源列表,例如:

[<JIRA Issue: key=’Key1–12000', id=’102007'>,<JIRA Issue: key=’Key2–12001', id=’102008'>,…]

迭代这个结果列表,可以提取问题的字段。作为上面代码中的一个例子,我们读取第一个问题的状态名。

结果列表吉拉服务器返回的问题资源的最大数量受服务器中配置的结果数量的限制。通常,我们不知道会从吉拉的服务器上读到多少期。此外,我们希望通过一次读取大量数据来避免吉拉的服务器过载。因此,这是一种迭代读取数据的好方法,逐块读取。在这种情况下,我们可以避免提到的问题,不去想吉拉的许多问题。

“While”循环可用于迭代读取数据。在给出示例之前,假设我们想要读取属于项目“项目 1”和“项目 2”的未知数量的问题,并且这些问题是在过去 365 天内创建的。我们将读取某些字段:问题的类型、创建日期和时间、解决日期和时间、报告者、受让人、状态。假设我们希望将所有读取数据保存到“csv”文件中。

下面是读取和保存数据的代码:

在上面的代码中,我们每次迭代一次读取 100 个问题,在读取必要的字段后,将这些数据写入“csv”文件。为了读取问题的特定部分,我们在search_issues方法中定义了参数:

  • startAt —返回的第一个问题的索引,
  • maxResults 返回的最大问题数。

通过使用search_issues方法,我们不仅可以读取字段,还可以读取例如 changelog。为此,必须传递参数expand='changelog'。Changelog 在状态或受托人历史方面很有意思。假设,我们想知道给定问题的受理人历史记录(谁进行了更改、以前的受理人、新的受理人、更改日期和时间):

好了,让我们进入下一步——可视化数据。正确可视化的数据可以指出有趣的特征。

可视化数据

为了让阅读数据来讲述一个故事,我们需要可视化,或者更准确地说,我们将建立一个有向图来表示报告者和受托人之间的联系。为此,我们再次逐块读取之前创建的“csv”文件,以节省计算资源:

为了构建这个图,我们使用了 networkx 库。在上面代码的第 25 行,我们定义了节点、边和权重(代表节点之间的连接频率)。可选地(第 32–46 行),我为节点创建了颜色属性,显示属于部门单位。代码的最后一行将我们的图形保存为‘graph ml’格式(其他格式)。

下一步非常有趣和吸引人——图形可视化。我更喜欢用 Gephi 。因此,在将保存的图形加载到该工具中并进行一些调整后,我们会生成如下结果:

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

在这个图表中我们可以看到什么特征?其中一些:

  • 节点的大小—越大,传入或/和传出的边越多,
  • 边的大小(就宽度而言)——越大,这种连接越频繁。

也许代表大节点和大边缘的员工需要一些东西来提高他们的工作效率。然而,所有这些案件都需要进一步调查。

还有一点:在前一批代码中有一个日期变量(第 27–30 行)。此变量是节点出现在吉拉数据中的日期。因此,使用它,我们可以把我们的图表表示为动态的:

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

结论

上述内容有助于构建进一步的步骤:计算统计数据(被分配人创建了多少评论,员工在沟通上花费了多少时间等等)。再深入一点,我们可以,例如,对描述/评论进行语义或形态分析。你想要的目标没有限制!

公司数据 Sci 新闻:几乎全是谷歌,外加亚马逊、IBM 和美国电话电报公司

原文:https://towardsdatascience.com/company-data-sci-news-its-almost-all-google-with-a-splash-of-amazon-ibm-and-at-t-e7875878e283?source=collection_archive---------11-----------------------

我与我的同事 Brad Stenger 和我们训练有素的机器人一起写了一篇关于数据科学的 简讯 。我们训练这个机器人对数据科学有很好的品味,然后把它每周发现的东西联系起来。这是上周来自数据科学行业的消息。

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

Unknown street artist. Gowanus, Brooklyn 2016. Photograph by Laura Norén (I like street art.)

Yann LeCun 称 GANs “过去 20 年深度学习中最酷的想法。”当甘斯还是蒙特利尔的一名研究生时,他发明了一个生成性人工智能代理,与另一个关键的人工智能代理进行竞争,后者旨在评估第一个人工智能代理生成的元素的有效性。简而言之,一个人工智能创造艺术,另一个充当艺术评论家,将第一个代理的产品推向比它自己更高的标准。“因为第二个人工智能非常努力地识别图像是假的,所以第一个人工智能学会了以自己无法做到的方式模仿真实的图像。”在假设这意味着我们正在迅速接近“计算机宣布独立于人类教师的那一天”之前,我要指出,即使是人类系统,在没有明确的外部干扰的情况下,也能发展出瘫痪的群体思维。换句话说,这一演变的下一步将是把 GANs 放在人工智能对联的市场上。

谷歌的 安卓团队 宣布 迈向隐私保护、人工智能增强的联合学习。他们在安卓手机的键盘上安装了 TensorFlow 的元素。简而言之,“你的设备下载当前模型,通过从手机上的数据(你通过输入搜索和选择生成的数据)中学习来改进它,然后将这些变化总结为一个小的有重点的更新,”它将这些更新发送回云端。当你的手机插上电源以保存电池电量时,计算密集型过程就会进行。因为只有更改摘要被发送到云,并且因为“如果有 100 或 1000 个用户参与,协调服务器只能解密平均更新”,所以与您的粒度数据相关联的隐私得到了保护。如果有人读到这篇文章,并愿意让我了解更多关于联合学习的知识,我很好奇。

谷歌的 DeepMind 正在上演另一场人类对人工智能 阿尔法围棋比赛 。我知道我应该为此感到兴奋。

谷歌 宣布 其 2017 届北美、欧洲和中东博士生。祝贺所有人,特别是马丁·阿约夫斯基,他将加入我们纽约大学的行列。

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

上周谷歌推出 自动绘制 。AutoDraw 本质上是自动纠正涂鸦,这可能是无意的滑稽。把你曲解的草图给我!到目前为止,我发现这是一个计算密集型策略来制作剪贴画。

本周,谷歌主宰了公司新闻版块。据 Axios 称,他们还发布了一个管理招聘流程的平台: 谷歌招聘 ,该平台位于该公司的企业和云服务部门。我们今天刚刚进行了一次午餐谈话,讨论了公司如何利用申请人社交网络活动的数据来帮助做出招聘决定。目前还不清楚这是如何运作的,但这可能是歧视性的,让那些有富裕朋友的人享有特权,让那些有犯罪背景或倾向于在评论中使用脏话的朋友靠边站。我们将会看到谷歌是否能让它的招聘程序正确。

AT & T Research 拥有 开源 一个名为 纳米立方体 的平台,可以快速“以时空方式可视化”数十亿个数据点

亚马逊的 杰夫·贝索斯从人口普查数据预测个人收入范围的分类器比较研究

原文:https://towardsdatascience.com/comparative-study-of-classifiers-in-predicting-the-income-range-of-a-person-from-a-census-data-96ce60ee5a10?source=collection_archive---------11-----------------------

不同机器学习分类器的实现指南

我们作为一个社会,已经彻底改变了我们已知的专业领域。机器学习人工智能就是从原始数据中提取知识的领域之一。这种知识可用于建立具有高精度和准确度的动态模型,使得模型本身可用于预测或分类先前未知的数据。从人口普查数据中提供知识的一个最重要的方面是通过调查以前的记录来预测每个人的收入和健康等数据。

机器学习不是魔法,只有当需要解决的问题尽可能准确地从现实世界中表达出来时,它才会起作用。机器学习最重要和最关键的任务之一是清理和准备应该馈送给分类器用于训练模型的数据。我将讨论在预处理每个分类器的数据、训练模型和在这个分析领域的性能评估中使用的不同技术。

有许多分类器可用于根据历史数据和现有数据对数据进行分类。在这里,我倾向于对不同的常用机器学习分类器进行比较研究,如决策树、朴素贝叶斯、随机森林和支持向量机以及神经网络。本次研究选择的数据集是 UCI 成人数据集

数据集链接—https://archive.ics.uci.edu/ml/datasets/adult

选择最佳的机器学习算法来解决数据的分类和预测问题是机器学习中最重要的部分,它也依赖于数据集。在这里,我比较了这些分类器的不同评估措施,如混淆矩阵,ROC 曲线和绘图的结果。

这一想法旨在提供一个现有研究的基准,这些研究是在此类分类器的比较研究中完成的,旨在根据人口普查数据预测一个人的收入范围。

UCI 知识库成人数据集是一个对所有人开放的数据集。它由 14 个属性和一个类别标签组成,说明个人的年收入是低于还是高于 50K。这些属性的范围从人的年龄、工人阶级标签到关系状态和人所属的种族。关于所有属性的信息可以在这里找到。

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

Description of the dataset.

注意 —数据非常原始,并且缺少值。

预处理数据集

有各种方法可以通过移除冗余值和处理缺失值来改善所获得的数据集。在这个数据集中,我们有 14 个属性,每个属性都对结果有贡献,因此我们不删除任何属性。三个属性 work-class、occupation 和 native-country 有缺失值出现,这些值将被列中出现次数最多的实例替换。

为了将数据拟合到预测模型中,我们需要将分类值转换为数值。在此之前,我们将评估是否有必要对分类列进行任何转换。离散化是使分类数据更加整洁和有意义的常用方法。我对婚姻状况一栏进行了离散化处理,将它们缩小到只包含已婚或未婚的值。稍后,我在剩余的数据列中应用标签编码器。

分类器的实现

在根据数据的输入方式对每个分类器的数据进行预处理之后,我们对数据进行切片,将标签和属性分开。现在,我们将数据集分成两半,一部分用于训练,一部分用于测试。这是使用 sklearn 的 train_test_split()函数实现的。

同样,对于其他分类器:

在神经网络的情况下,以前我们使用标签编码将分类数据转换为数值,但对于某些属性,它会产生一个问题,即赋予相等值更高的重要性。因此,为了纠正这一点,我们使用熊猫图书馆的虚拟变量技术。这将从 14 列创建 88 列作为神经网络的输入。

现在让我们看看结果。

实现的分类器比较

使用 tensorflow 实现的分类器有决策树朴素贝叶斯支持向量机随机森林神经网络

我们检查成人数据集的每个分类器的结果,并绘制结果和发现。比较方法对于这种预测方法至关重要,以便为进一步的研究和应用设计结果。

分数(分类报告)

下表中包含了所有的分类器和不同的得分,如准确率精度召回率F1-得分基尼系数F1 分数这是一种非常常用的测试准确度的衡量标准。计算分数体现了测试的精确性和召回性。精度是真阳性的数量除以真阳性和假阳性的总和。同样, recall 是真阳性的个数除以真阳性和假阴性的总和,也就是实际属于阳性类的元素总数。基尼系数用于直接从 AUC 值得出的分类问题。只不过是 ROC 曲线和对角线的面积之比&上面三角形的面积。

结果如下:

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

Scores of different models

混淆矩阵

混淆矩阵是一个简单的 NxN 矩阵,其中 N 是类别标签的数量。提供了正确和错误识别的阳性和阴性病例部分的值,因此也获得了准确性。下面是所有五个分类器的混淆矩阵。

结果如下:

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

Confusion Matrix

受试者工作特征曲线

接收器工作特性曲线是灵敏度和(1-特异性)之间的曲线。(1-特异性)也称为假阳性率,灵敏度也称为真阳性率。这里我们还计算了 ROC 曲线下的面积(AUC)。它描述了测试如何将被测试的组分成两个类别标签。面积越大越好。

得到了下面的曲线图:

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

ROC curve

观察

结果表明,支持向量机和随机森林方法能够很好地准确预测数据,准确率分别为 84.08%和 84.83%。另一方面,神经网络显示出显著的效果,本质上是一种新颖和非正统的。神经网络模型的 AUC 曲线为 0.77,准确率达到显著的 86.30%。

上述获得的结果可用作在从人口普查数据预测数值领域进行的其他比较研究的标准参考点。这种比较研究可以进一步用作改进现有分类器和技术的基础,从而产生用于准确预测个人收入水平的更好技术。

当今数据科学领域研究的目标是构建从数据中提取知识的系统和算法。这项研究可以补充现有方法的能力并减少任何错误,从而在从历史人口普查数据中进行数据挖掘的领域中做出贡献。

如需进一步参考所有代码和结果,请访问我的 GitHub 知识库—https://GitHub . com/ritvikkhanna 09/Census-classifier-comparison

经典机器学习算法的比较研究

原文:https://towardsdatascience.com/comparative-study-on-classic-machine-learning-algorithms-24f9ff6ab222?source=collection_archive---------0-----------------------

各种 ML 算法的快速总结

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

机器学习是一种科学技术,在这种技术中,计算机学习如何解决一个问题,而不需要对它们进行显式编程。在更好的算法、计算能力和大数据的推动下,深度学习目前正在引领 ML 竞赛。尽管如此,最大似然经典算法在该领域仍有其强大的地位。

我将对不同的机器学习监督技术进行比较研究,如本故事中的线性回归、逻辑回归、K 近邻和决策树***。*** 在的下一个故事中,我将覆盖 支持向量机、随机森林和天真八爷 s 。关于算法的深入细节有那么多比较好的博客,我们就只着重比较研究一下。我们将研究它们的 基本逻辑、优点、缺点、假设、共线效应&异常值、超参数 相互比较

其余算法请参考本系列的第 2 部分。

1。线性回归

如果你想开始机器学习,线性回归是最好的起点。线性回归是一种回归模型,也就是说,它将获取特征并预测连续输出,例如:股票价格、工资等。线性回归顾名思义,找到一个线性曲线解决每个问题。

基础理论:

LR 为每个训练特征分配权重参数θ。预测输出(h(θ))将是特征和θ系数的线性函数。

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

linear regression output. Eqn (1)

在训练开始时,每个θ被随机初始化。但是在训练期间,我们校正对应于每个特征的θ,使得损失(预期和预测输出之间的偏差的度量)最小化。梯度下降算法将用于在正确的方向上对齐θ值。在下图中,每个红点代表训练数据,蓝线显示导出的解决方案。

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

gif credits : https://medium.com/@kabab/linear-regression-with-python-d4e10887ca43

损失函数:

在 LR 中,我们使用均方误差作为损失的度量。预期和实际输出的偏差将被平方并求和。梯度下降算法将使用该损失的导数。

优点:

  • 容易和简单的实现。
  • 空间复解。
  • 快速训练。
  • θ系数的值给出了特征重要性的假设。

缺点:

  • 仅适用于线性解决方案。在很多现实生活场景中,可能并非如此。
  • 算法假设输入残差(误差)为正态分布,但可能并不总是满足。
  • 算法假设输入特征相互独立(无共线)。

超参数:

  • 正则化参数(λ):正则化用于避免对数据的过拟合。λ越大,正则化程度越高,解的偏差越大。λ越低,解的方差越大。中间值是优选的。
  • 学习率(α):它估计在训练期间应用梯度下降算法时,θ值应该被校正多少。α也应该是一个适中的值。

LR 的假设:

  • 自变量和因变量之间的线性关系。
  • 训练数据是同方差的,这意味着误差的方差应该是恒定的。
  • 自变量不应该是共线的。

共线性&异常值:

当一个特征可以从另一个特征以一定的精度线性预测时,称两个特征共线。

  • 共线性只会扩大标准误差,并导致一些重要特征在训练过程中变得不重要。理想情况下,我们应该在训练之前计算共线性,并且只保留高度相关的特征集中的一个特征。

离群值是训练中面临的另一个挑战。它们是对正常观察极端的数据点,并影响模型的准确性。

  • 异常值会增大误差函数,并影响曲线函数和线性回归的精度。正则化(尤其是 L1)可以通过不允许θ参数剧烈变化来校正异常值。
  • 在探索性数据分析阶段本身,我们应该注意异常值并纠正/消除它们。箱线图可用于识别它们。

与其他车型对比:

由于线性回归是一种回归算法,我们将它与其他回归算法进行比较。线性回归的一个基本区别是,LR 只能支持线性解。机器学习中不存在胜过所有其他模型的最佳模型(没有免费的午餐),效率是基于训练数据分布的类型。

LR vs 决策树:

  • 决策树支持非线性,而 LR 只支持线性解决方案。
  • 当具有较少数据集(低噪声)的大量特征时,线性回归可能优于决策树/随机森林。在一般情况下,决策树会有更好的平均准确率。
  • 对于分类独立变量,决策树优于线性回归。
  • 决策树比 LR 更好地处理共线性。

LR vs SVM :

  • SVM 支持使用内核技巧的线性和非线性解决方案。
  • SVM 比 LR 更好地处理异常值。
  • 两者在训练数据较少且特征数量较多的情况下表现良好。

LR vs KNN :

  • KNN 是一个非参数模型,而 LR 是一个参数模型。
  • KNN 的实时速度很慢,因为它必须跟踪所有训练数据并找到邻居节点,而 LR 可以很容易地从调谐的θ系数中提取输出。

LR vs 神经网络:

  • 与 LR 模型相比,神经网络需要大量的训练数据,而 LR 即使使用较少的训练数据也可以工作得很好。
  • NN 相比 LR 会比较慢。
  • 神经网络的平均精度总是更好。

2。逻辑回归

就像线性回归一样,逻辑回归是从分类算法开始的正确算法。尽管“回归”这个名字出现了,但它不是一个回归模型,而是一个分类模型。它使用逻辑函数来构建二进制输出模型。逻辑回归的输出将是一个概率(0≤x≤1),并可用于预测二进制 0 或 1 作为输出(如果 x <0.5, output= 0, else output=1).

基本理论:

逻辑回归的作用有点类似于线性回归。它还计算线性输出,然后对回归输出执行存储函数。Sigmoid 函数是常用的逻辑函数。从下面可以清楚地看到,z 值与等式(1)中的线性回归输出值相同。

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

这里的 h(θ)值对应于 P(y=1|x),即给定输入 x,输出为二进制 1 的概率。P(y=0|x)将等于 1-h(θ)。

当 z 的值为 0 时,g(z)将为 0.5。每当 z 为正时,h(θ)将大于 0.5,输出将为二进制 1。同样,每当 z 为负时,y 的值将为 0。当我们使用线性方程来寻找分类器时,输出模型也将是线性的,这意味着它将输入维度分成两个空间,其中一个空间中的所有点对应于相同的标签。

下图显示了 sigmoid 函数的分布。

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

sigmoid function Eqn(3)

损失函数:

我们不能用均方差作为损失函数(像线性回归),因为我们在最后用了一个非线性的 sigmoid 函数。MSE 函数会引入局部极小值,影响梯度下降算法。

所以我们用交叉熵作为损失函数。将使用两个等式,对应于 y=1 和 y=0。这里的基本逻辑是,每当我的预测严重错误时,(例如:y’ =1 & y = 0),成本将是-log(0),这是无穷大。

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

cross-entropy loss Eqn(4)

在给出的等式中,m 代表训练数据大小,y’代表预测输出,y 代表实际输出。

优点:

  • 简易、快速、简单的分类方法。
  • θ参数解释了自变量相对于因变量的显著性的方向和强度。
  • 也可用于多类分类。
  • 损失函数总是凸的。

缺点:

  • 不能应用于非线性分类问题。
  • 需要正确选择功能。
  • 期望有好的信噪比。
  • 共线性和异常值会影响 LR 模型的准确性。

超参数:

逻辑回归超参数类似于线性回归超参数。学习率(α)和正则化参数(λ)必须适当调整以实现高精度。

LR 的假设:

逻辑回归假设类似于线性回归模型的假设。请参考上述部分。

与其他车型对比:

逻辑回归 vs SVM :

  • SVM 可以处理非线性解,而逻辑回归只能处理线性解。
  • 线性 SVM 能更好地处理异常值,因为它能导出最大利润解。
  • SVM 的铰链损耗优于 LR 的原木损耗。

逻辑回归 vs 决策树:

  • 决策树比 LR 更好地处理共线性。
  • 决策树不能得出特征的重要性,但是 LR 可以。
  • 决策树比 LR 更适合分类值。

逻辑回归 vs 神经网络:

  • NN 可以支持 LR 不能支持的非线性解。
  • LR 具有凸损失函数,所以它不会陷入局部极小值,而 NN 可能会陷入局部极小值。
  • 当训练数据较少且特征较多时,LR 优于 NN,而 NN 需要大量训练数据。

逻辑回归 vs 朴素贝叶斯:

  • 朴素贝叶斯是一种生成模型,而 LR 是一种判别模型。
  • 朴素贝叶斯适用于小数据集,而 LR+正则化可以实现类似的性能。
  • LR 在共线性方面比朴素贝叶斯表现得更好,因为朴素贝叶斯期望所有特征都是独立的。

逻辑回归 vs KNN :

  • KNN 是非参数模型,而 LR 是参数模型。
  • KNN 比逻辑回归相对慢。
  • KNN 支持非线性解决方案,而 LR 仅支持线性解决方案。
  • LR 可以导出置信度(关于它的预测),而 KNN 只能输出标签。

3。k-最近邻

k-最近邻法是一种用于分类和回归的非参数方法。这是最简单的 ML 技术之一。它是一个懒惰的学习模型,具有局部近似性。

基本理论:

KNN 背后的基本逻辑是探索你的邻居,假设测试数据点与他们相似,并得到输出。在 KNN,我们寻找 k 个邻居并得出预测。

在 KNN 分类的情况下,在 k 个最近的数据点上应用多数投票,而在 KNN 回归中,k 个最近的数据点的平均值被计算为输出。根据经验,我们选择奇数作为 k。KNN 是一个懒惰的学习模型,计算只在运行时发生。

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

image credits : https://www.fromthegenesis.com/pros-and-cons-of-k-nearest-neighbors/

在上图中,黄色和紫色点对应于训练数据中的 A 类和 B 类。红星指的是要分类的测试数据。当 k = 3 时,我们预测 B 类作为输出,当 K=6 时,我们预测 A 类作为输出。

损失函数:

在 KNN 没有培训。在测试期间,具有最小距离的 k 个邻居将参与分类/回归。

优势:

  • 简易的机器学习模型。
  • 需要调整的超参数很少。

缺点:

  • 应该明智地选择 k。
  • 如果样本量很大,则运行时的计算成本很大。
  • 应该提供适当的缩放,以便在特性之间进行公平处理。

超参数:

KNN 主要涉及两个超参数,K 值和距离函数。

  • k 值:有多少邻居参与 KNN 算法。k 应该根据验证误差进行调整。
  • 距离函数:欧几里德距离是最常用的相似性函数。曼哈顿距离、海明距离、闵可夫斯基距离是不同的选择。

假设:

  • 应该对输入域有清晰的理解。
  • 可行的中等样本量(由于空间和时间的限制)。
  • 共线性和异常值应在训练前处理。

与其他型号的比较:

KNN 和其他模型之间的一个普遍区别是,与其他模型相比,KNN 需要大量的实时计算。

KNN vs 朴素贝叶斯:

  • 由于 KNN 的实时执行,朴素贝叶斯比 KNN 快得多。
  • 朴素贝叶斯是参数化的,而 KNN 是非参数化的。

KNN vs 线性回归:

  • 当数据信噪比较高时,KNN 优于线性回归。

KNN 对 SVM :

  • SVM 比 KNN 更关心离群值。
  • 如果训练数据远大于特征数(m>>n),KNN 比 SVM 好。当有大量特征和较少训练数据时,SVM 胜过 KNN。

KNN vs 神经网络:

  • 与 KNN 相比,神经网络需要大量的训练数据来达到足够的精度。
  • 与 KNN 相比,神经网络需要大量的超参数调整。

4。决策树

决策树是一种基于树的算法,用于解决回归和分类问题。构造一个倒置的树,它从一个均匀概率分布的根节点分支到高度不均匀的叶节点,用于导出输出。回归树用于具有连续值的因变量,分类树用于具有离散值的因变量。

基础理论:

决策树是从独立变量中导出的,每个节点都有一个特征条件。节点根据条件决定下一步导航哪个节点。一旦到达叶节点,就可以预测输出。正确的条件顺序使树有效率。熵/信息增益被用作选择节点条件的标准。使用递归的、基于贪婪的算法来导出树结构。

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

credits : https://brookewenig.github.io

在上图中,我们可以看到一个树,它有一组内部节点(条件)和带标签的叶节点(拒绝/接受提议)。

选择条件的算法:

  • 对于 CART(分类和回归树),我们使用基尼指数作为分类度量。这是计算数据点混合程度的指标。

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

在创建决策树的每个阶段,具有最大基尼系数的属性被选为下一个条件。当集合是不平等混合时,基尼系数将是最大的。

  • 对于迭代二分法 3 算法,我们使用熵和信息增益来选择下一个属性。在下面的等式中,H(s)代表熵,IG(s)代表信息增益。信息增益计算父节点和子节点的熵差。选择具有最大信息增益的属性作为下一个内部节点。

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

优点:

  • 数据不需要预处理。
  • 没有关于数据分布的假设。
  • 有效处理共线性。
  • 决策树可以对预测提供可理解的解释。

缺点:

  • 如果我们继续构建树以达到高纯度,则有可能过度拟合模型。决策树剪枝可以用来解决这个问题。
  • 倾向于离群值。
  • 在训练复杂数据集时,树可能会变得非常复杂。
  • 处理连续变量时丢失有价值的信息。

超参数:

决策树包括许多超参数,我将列出其中的几个。

  • 准则:选择下一个树节点的代价函数。常用的有基尼/熵。
  • **最大深度:**决策树允许的最大深度。
  • **最小样本分裂:**分裂一个内部节点所需的最小节点。
  • **最小样本叶:**要求在叶节点的最小样本。

与其他车型对比:

决策树 vs 随机森林:

  • 随机森林是决策树的集合,选择森林的平均/多数投票作为预测输出。
  • 随机森林模型将比决策树更不容易过拟合,并给出更一般化的解决方案。
  • 随机森林比决策树更加健壮和准确。

决策树 vs KNN :

  • 两者都是非参数方法。
  • 决策树支持自动特征交互,而 KNN 不支持。
  • 由于 KNN 昂贵的实时执行,决策树更快。

决策树 vs 朴素贝叶斯:

  • 决策树是一种判别模型,而朴素贝叶斯是一种生成模型。
  • 决策树更加灵活和简单。
  • 决策树剪枝可能会忽略训练数据中的一些关键值,这会导致准确性下降。

决策树 vs 神经网络:

  • 两者都能找到非线性解,并且独立变量之间有相互作用。
  • 当训练数据中有大量类别值时,决策树更好。
  • 当场景要求对决策进行解释时,决策树比神经网络更好。
  • 当有足够的训练数据时,神经网络优于决策树。

决策树 vs SVM :

  • SVM 使用核技巧来解决非线性问题,而决策树在输入空间中导出超矩形来解决问题。
  • 决策树更适合分类数据,它比 SVM 更好地处理共线性。

在下一个故事中,我将介绍剩余的算法,如朴素贝叶斯、随机森林和支持向量机。如有任何建议或修改,请赐教。

快乐学习:)

Tensorflow 中实现稀疏编码的不同方法比较

原文:https://towardsdatascience.com/comparing-different-methods-of-achieving-sparse-coding-in-tensorflow-manual-back-prop-in-tf-d47053da4d8e?source=collection_archive---------16-----------------------

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

GIF from this website

在韩国度假期间,我一直在研究更多关于稀疏编码和实现它的不同方法,今天我想比较其中的一些。下面是我将要比较的所有案例。(以防我将案例 d 和案例 e 的两篇论文联系起来。)

案例 a:纯自动编码器
案例 b:具有 L2 正则化的自动编码器
案例 c:稀疏自动编码器来自
安德鲁·吴的课程 案例 d: 简单、高效的稀疏编码神经算法 案例 e:k-稀疏自动编码器

请注意,这个帖子是为了我未来的自己,也是为了存档已经取得的成果。

Paper from this website

Paper from this website

简介、数据集和总体思路

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

Image from this website

我已经假设读者对神经网络和自动编码器有一些了解,所以我不会深入细节。此外,我只打算介绍使用自动编码器进行稀疏编码的方法。请记住,hyper 参数的设置是相同的,但这并不能保证它对每种情况都是最佳的!最后,我将使用的所有数据都来自 MNIST 数据集。

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

橙色框 →矢量形式的原始数据
红色框 →压缩数据
蓝色框 →重构数据

自动编码器的一般思想非常简单,在压缩后重建原始数据。在今天的帖子中,我们的目标是学习到的权重(橙色框和红色框之间的权重),因为这些权重代表了我们正在捕捉的数据类型(或特征)。

案例 a 的结果:纯自动编码器

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

Progression of learned weights for 500 epoch

从上面的过程中,我们可以注意到一些事情,学习的权重(或特征)并不特定于某些数字。这是因为由于网络可以使用学习字典中的所有原子来重构原始数据,因此不需要学习给定数据的专门过滤器。

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

左图 →原始数据
右图 →重建数据

重建的数据有点模糊,但是,一般来说,它包含了正确的数字形状。

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

左图 →对比度归一化的学习权重
中图 →对比度归一化的学习权重
右图 →训练期间的时间成本

当我们再次查看学习到的权重时,我们可以再次观察到过滤器并不特定于某些数字。

情况 b 的结果:采用 L2 正则化的自动编码器

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

Progression of learned weights for 500 epoch

当我们将 L2 正则化添加到原始自动编码器时,我们看不到学习到的权重之间的极端差异。这是自然的,因为在重构原始数据时,网络仍然可以完全访问字典中的所有原子。

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

左图 →原始数据
右图 →重建数据

同样,类似于纯自动编码器,重建的数据是模糊的,但它仍然保留了一般的形状。

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

左图 →对比度归一化的学习权重
中图 →对比度归一化的学习权重
右图 →训练期间的时间成本

我们仍然看不到特定于某些数字的过滤器。

案例 c 的结果:来自 Andrew NG 的课程 的稀疏自动编码器

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

Progression of learned weights for 500 epoch

当我们在隐藏层中引入稀疏性的概念时,并不是字典中的所有原子都可以使用。我们可以清楚地观察到,学习到的过滤器正变得更加特定于某些数字,并且在最终时期之后,过滤器代表数字的手动敲击。

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

左图 →原始数据
右图 →重建数据

我个人认为,重建的数据比其他两个(上图)更模糊,但它们是清晰可辨的。

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

左图 →对比度归一化的学习权重
中图 →对比度归一化的学习权重
右图 →训练期间的时间成本

当我们将学习到的权重可视化时,我们可以看到网络正试图从给定的数据中提取不同的笔画。

案例 d 的结果: 简单、高效、用于稀疏编码的神经算法

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

Progression of learned weights for 500 epoch

如果没有要优化的重建损失函数,我们可以观察到收敛需要更长的时间。然而,我们可以观察到,如果字典中的某个原子被使用,它会产生一个类似的过滤,就像我们有稀疏的概念时一样。(案例 c)。

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

左图 →原始数据
右图 →重建数据

这种方法的一个缺点是没有重建损失,虽然它产生更干净的滤波器,但它不能像其他方法一样重建原始数据。

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

左图 →对比度归一化的学习权重
中图 →对比度归一化的学习权重
右图 →训练期间的时间成本

当我们可视化学习到的权重时,我们可以看到这种方法的优点,即它产生更干净的滤波器。

情况 e 的结果:k-稀疏自动编码器

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

Progression of learned weights for 500 epoch

对于给定的数据,前 K 个稀疏自动编码器收敛到最佳点要快得多。并且我们可以观察到,在捕捉手写笔画类型特征的同时,所学习的权重是干净的。

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

左图 →原始数据
右图 →重建数据

由于重建误差的存在,当与情况 d 相比时,重建的数据更清晰,然而,我们可以清楚地观察到它在这里和那里缺乏对比度的事实。

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

左图 →对比度归一化的学习权重
中图 →对比度归一化的学习权重
右图 →训练期间的时间成本

同样,学习过的过滤器在捕捉手笔画类型特征时更干净。

交互代码

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

对于谷歌 Colab,你需要一个谷歌帐户来查看代码,而且你不能在谷歌 Colab 中运行只读脚本,所以在你的操场上做一个副本。最后,我永远不会请求允许访问你在 Google Drive 上的文件,仅供参考。编码快乐!

要访问案例 a 的代码,请点击此处。
要获取案例 b 的代码,请点击此处。
要访问案例 c 的代码,请点击此处。
要获取案例 d 的代码,请点击此处。
要获取案例 e 的代码,请点击此处。

最后的话

这让我如此满意的原因是因为我没有使用任何自动微分。

如果发现任何错误,请发电子邮件到 jae.duk.seo@gmail.com 给我,如果你想看我所有写作的列表,请在这里查看我的网站。

同时,在我的推特上关注我这里,访问我的网站,或者我的 Youtube 频道了解更多内容。我还实现了广残网,请点击这里查看博文 pos t。

参考

  1. FNNDSC/med2image。(2018).GitHub。检索于 2018 年 8 月 4 日,来自https://github.com/FNNDSC/med2image
  2. 张量,T. (2018)。张量中的前 n 个值。堆栈溢出。2018 年 8 月 4 日检索,来自https://stack overflow . com/questions/40808772/tensor flow-top-n-values-in-tensor
  3. t . way(2018)。使用 top_k 和 any way 的 tesorflow 排序。堆栈溢出。检索于 2018 年 8 月 4 日,来自https://stack overflow . com/questions/46045867/tesorflow-sort-using-top-k-and-any-way
  4. tf.nn.top_k |张量流。(2018).张量流。检索于 2018 年 8 月 4 日,来自https://www.tensorflow.org/api_docs/python/tf/nn/top_k
  5. tf.greater | TensorFlow。(2018).张量流。检索于 2018 年 8 月 4 日,来自 https://www.tensorflow.org/api_docs/python/tf/greater
  6. x?,H. (2018)。如何在 OS X 上将 Python 的默认版本设置为 3.3?。堆栈溢出。2018 年 8 月 5 日检索,来自https://stack overflow . com/questions/18425379/how-to-set-python-default-version-to-3-3-on-OS-x
  7. 张量,T. (2018)。张量中的前 n 个值。堆栈溢出。检索于 2018 年 8 月 12 日,来自https://stack overflow . com/questions/40808772/tensor flow-top-n-values-in-tensor
  8. (2018).Web.stanford.edu。检索于 2018 年 8 月 13 日,来自https://web . Stanford . edu/class/cs 294 a/sparseautoencer _ 2011 new . pdf
  9. (2018).Arxiv.org。检索于 2018 年 8 月 13 日,来自https://arxiv.org/pdf/1503.00778.pdf
  10. (2018).Arxiv.org。检索于 2018 年 8 月 13 日,来自https://arxiv.org/pdf/1312.5663.pdf
  11. MNIST 手写数字数据库,Yann LeCun,Corinna Cortes 和 Chris Burges。(2018).Yann.lecun.com。检索于 2018 年 8 月 13 日,来自http://yann.lecun.com/exdb/mnist/

在营销用例中比较多臂 Bandit 算法

原文:https://towardsdatascience.com/comparing-multi-armed-bandit-algorithms-on-marketing-use-cases-8de62a851831?source=collection_archive---------2-----------------------

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

A/B 测试是许多电子商务公司营销过程中的标准步骤。通过精心设计的 A/B 测试,营销人员可以获得关于在哪里以及如何最大化其营销努力并推动成功活动的见解。然而,实际上,与更先进的机器学习方法相比,标准的 A/B 测试会把钱留在桌子上。

在这篇文章中,我们将讨论 A/B 测试的当前状态,定义一些用于优化 A/B 测试的常见机器学习算法(Multi-Armed Bandits ),最后描述这些算法在一些典型营销用例中的性能。

A/B 测试:它是如何工作的?

在一个标准的 A/B 测试实验中,我们想要测量一个活动的变体比另一个更有效的可能性,同时控制我们测量错误的可能性——要么我们认为有一个赢家,而实际上没有,要么我们错过了检测获胜的变体。为了进行准确的测量,A/B 测试必须考虑两个关键值:统计功效和统计显著性。

从形式上来说,统计功效是当一个效应存在时(当一个变量优于另一个变量时),实验将实际检测到该效应的概率,统计显著性衡量我们对所测量的效应实际存在的信心程度。然而,从置信区间的角度来考虑这两个想法会更直观。

在给定的实验中,我们测量每个变量的平均转化率,但我们知道平均值只是“真实”转化率的估计值。根据我们所拥有的观察值的数量,我们可能对估计值有或多或少的信心,并且我们可以使用一个区间来表示这种信心,在该区间内可能会找到真实值*。例如,如果我们在 95%的置信度下说一个转换率是 0.032 +/- 0.002,那么我们有 95%的置信度认为实际转换率在 0.030 和 0.034 之间。实际上,我们会寻找不重叠的置信区间,这样真实转换率不同的概率就大于 95%。*

但是,等待间隔分开可能需要很长时间。在实际情况中,对于 0.03 的典型点击率,为了检测 10%的点击转换提升(0.030.1 = 0.003),对于统计功效和显著性的标准水平,我们将需要总共 106,000 个接触的最小样本量(每个变体 53,000 个接触)。根据流量,积累这么多数据可能需要几天到几个月的时间,如果我们有更多的变体,更低的转化率,或更低的效果大小,收集周期可能会更长。*

多兵种强盗算法:探索+利用

在机器学习中,“探索与利用的权衡”适用于希望获得新知识并同时最大化其回报的学习算法——这被称为强化学习问题。在这种情况下,后悔被定义为你可能会想到的:由于执行学习算法而不是从一开始就表现最佳,导致奖励减少。为探索而优化的算法往往会招致更多的遗憾。

A/B 测试是一种纯粹的探索性**方法。由于在 A/B 测试实验中,接触是以相等的概率随机分配给每个变量的,因此可实现的总回报等于所有变量的平均回报,并且必须低于获胜变量的平均回报。如上例所示,典型的 A/B 测试往往需要数十万次接触才能达到适当的统计功效。使用固定规模的随机分配算法来进行这种类型的实验可能会导致整体支出的大量损失——A/B 测试可能会有非常高的遗憾**

Multi-armed bandit (MAB) 算法可以被认为是 A/B 测试的替代方案,可以在学习过程中平衡开发和探索。MAB 的解决方案利用现有的实验结果,为表现良好的变体分配更多的联系,而为表现不佳的变体分配较少的流量。理论上,多臂 bandit 算法应该产生更高的总体回报(并减少遗憾),同时仍然允许人们收集用户如何与活动的不同变化进行交互的数据。

有几种 MAB 算法,每一种都在不同程度上倾向于开发而不是探索。三个最流行的是ε贪婪,汤普森抽样,和置信上限 1 (UCB-1)。在这篇博客中,我们将分别讨论这些 MAB 算法,然后比较它们之间的行为以及不同实验条件下的 A/B 测试设置。

算法细节

(在本节中,我们将使用一种更简单的模拟设置来演示算法行为,这种模拟设置将在下面详细解释:低差双变量模拟。)

ε贪心:

Epsilon Greedy,顾名思义,是三种 MAB 算法中最贪婪的。在ε贪婪实验中,常数ε(值在 0 和 1 之间)由用户在实验开始前选择。当将联系人分配到活动的不同变量时,随机选择的变量被选择ε次。其余的 1-ε时间,选择已知收益最高的变量。ε越大,该算法越有利于探索。对于我们所有的例子,ε设置为 0.1。

模拟结果如图 1 所示。较细的轨迹来自 10 次随机选择的模拟,较粗的线是 1000 次模拟的平均结果。左图显示了两个变量之间的联系分配,右图显示了模拟期间每个变量的实际转换率。

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

Fig 1. Example results from a 2-variant Epsilon Greedy simulation (winning variant conversion rate: 0.024, losing variant conversion rate: 0.023). Left, contact allocation to each variant; Right, average conversion rate for each variant.

有趣的是,虽然平均而言,该算法为获胜的变体分配了更多的联系人,但对于单个模拟来说,分配结果可能会与平均行为相差很大。由于两个变体之间的微小差异,以及我们最初分配的少量联系,失败的变体在实验开始时确实偶尔显示出较高的转化率。由于该算法是如此“贪婪”,最初“失败”的变体没有被充分探索以使该算法收集足够的数据来学习实验期间任一变体的真实转化率。这也体现在单个模拟的转换率图的噪声中,即使在 40,000 个数据点(分配的接触)后,也没有完全收敛到真实平均值。

汤普森采样

相比之下,汤普森抽样是一种更有原则的方法,它可以在边际情况下产生更平衡的结果。对于每一个变体,我们使用观察到的结果建立一个真实成功率的概率分布(出于计算的原因,最常见的是一个贝塔分布)。对于每个新联系人,我们从对应于每个变体的 beta 分布中采样一个可能的成功率,并将该联系人分配给具有最大采样成功率的变体。我们观察到的数据点越多,我们对真实的成功率就越有信心,因此,随着我们收集到更多的数据,抽样成功率将越来越有可能接近真实的成功率。

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

Fig 2. Probability density distribution of beta distributions for two individual simulations at different stages of the experiment. Inset figures: contact allocation trajectories for each variant.

默认情况下,每个 beta 分布的参数(𝛂和𝛃)被初始化为 1 和 1,导致所有变体的 beta 分布相同,表示没有偏差(因为我们没有证据表明哪个变体可能是赢家)。随着我们收集更多的数据,分布会随着最新的结果更新(𝛂= n 被转换,𝛃 = n 未被转换),概率密度将开始围绕平均收益聚集。数据点数越多,概率密度函数越窄(见图 2)。如果对每个变体应该如何表现有很强的先验信念,我们可以在实验开始前改变𝛂和𝛃来代表这个先验分布。

下图(图 3)是我们对 Thompson 采样的 2 变量模拟的平均结果。与 Epsilon Greedy(图 1)类似,在实验的早期阶段,Thompson 采样的单个模拟与平均行为相差甚远。然而,在实验的后期,个体模拟的行为变得更加一致,与平均结果更加相似。

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

Fig 3. Example results from a 2-variant Thompson Sampling simulation (winning variant conv rate: 0.024, losing variant conv rate: 0.023). Left, contact allocation to each variant; Right, avg conversion rate for each variant.

为了更直观地了解这一行为,我们在实验的不同阶段绘制了两个随机选择的模拟的平均概率密度分布(pdf )(图 2)以及每个模拟的接触分配(插图)。在这两种情况下,从实验开始的 pdf 开始广泛和高度重叠,并且随着附加数据点,最终在实验结束时变得相当好地分离。正如预期的那样,我们可以通过查看两臂的 PDF 有多少重叠,以及哪一个具有更高的平均转化率(PDF 的峰值),来跟踪接触在实验的每个阶段是如何分配的。

UCB 一号:

对于活动的每个变体,我们将确定一个置信上限(UCB ),它代表我们对该变体的可能收益的最高猜测。该算法会将联系人分配给具有最高 UCB 的变量。

每个变量的 UCB 是根据变量的平均收益以及分配给变量的联系数计算的,公式如下:

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

如等式所示,变量的 UCB 分数随着进入该变量的联系人数量的增加而降低,因此,即使特定变量在平均回报中胜出,UCB 也可能低于回报稍低的不太好探索的变量。因此,该算法能够在探索不熟悉的选项和利用获胜的变体之间找到平衡。

下面(图 4)再次是使用 UCB-1 的双变量模拟(0.024 对 0.023 转换率)的结果。UCB-1 的表现非常类似于比例分配(图 3),并且比ε贪婪(图 1)保守得多。在实验的初始阶段(前 30,000 个数据点),算法基本上是纯探索,在两臂之间分配几乎相等数量的接触。像比例分配,UCB-1 的结果从个人模拟是非常稳定的,并类似于平均结果。这再次展示了这样一个事实,即该算法能够在单个实验中平衡探索和利用,优化联系分配以发现真正的获胜变体,然后利用它。

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

Fig 4. Example results from a 2-variant UCB-1 simulation (winning variant conv rate: 0.024, losing variant conv rate: 0.023). Left, contact allocation to each variant; Right, avg conversion rate for each variant.

模拟设置

既然我们对每种算法的行为有了一个概念,我们可以将它们的行为与原始的 A/B 测试设置进行比较。我们通过设置以下 5 个模拟来做到这一点。

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

Table 1. Conversion rates used in simulations

前 3 个模拟都包含 5 个变量,每个变量都具有下面列出的固定转换率。为了衡量这些算法在现实情况下的表现,我们在每个模拟中设置了变量的真实转化率,以匹配典型电子邮件营销活动用例中的真实转化率。此外,我们运行了 2 个额外的双变量版本的转换率模拟。表 1 列出了模拟中使用的所有转换率。

对于所有模拟,我们进行初始分配步骤,将 200 个联系人平均分配给所有 5 个变量(因为没有先前的结果)。之后,对于每个分配步骤,我们向实验中添加额外的 200 个联系人,根据特定的 MAB 算法进行分配。对于双变量模拟、开放率模拟和高差异转换模拟,我们分别运行了总共 400 步,重复 1000 次。对于低差分转换模拟,我们做了 1000 步和 2000 次重复,以更好地评估算法的行为。在所有情况下,我们对支付的定义都是二进制转换,我们比较的变量是转换率。如果我们使用收入等其他支出定义,结果不会有显著变化。对于所有ε贪婪模拟,ε设置为 0.10。

对于每个分配步骤,我们跟踪联系分配、总体表现和统计显著性(2 个变量的 2 比例 z 检验的 p 值,以及 3 个以上变量的卡方偶然检验)。

模拟结果:

  • 联系人分配:

对于支出差异较小的模拟(图 5、图 6),UCB-1 最保守地分配联系(最类似于平均分配),因为变量性能的差异非常小。与 UCB-1 相比,Thompson Sampling 和 Epsilon Greedy 更加贪婪,为获胜的变体分配了两倍的联系数量。对于低转换 5 变量模拟,在实验的前三分之一,Thompson 采样比 Epsilon Greedy 稍保守,但最终赶上了。

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

Fig 5. Average contact allocation from Low-Difference Conversion Rate Simulation

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

Fig 6. Average contact allocation from 2-variant Low-Difference Simulation

对于正常打开率(图 7)和高差异(图 8、9)转换率模拟,UCB-1 算法仍然是最保守的算法,而汤普森采样算法是最贪婪的算法。有趣的是,汤普森取样在这些模拟中比在低差模拟中表现得更贪婪。这展示了 Thompson Sampling 在勘探和开发之间进行平衡的能力,在变量之间具有清晰、易于检测的支出差异的情况下,有利于后者。在三个例子中的一个例子中,在模拟结束时,Thompson Sampling 分配给获胜变体的联系是 UCB-1 的近两倍。

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

Fig 7. Average contact allocation from open rate simulation

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

Fig 8. Average contact allocations from high-difference conversion rate simulations

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

Fig 9. Average contact allocations from high-difference two-variant simulations

  • 总支出:

正如预期的那样,在所有模拟中,所有三种算法都获得了比 A/B 测试设置更高的总体支出,贪婪的算法表现出更好的性能。由于我们预定义的ε为 0.1,Epsilon Greedy 在最困难的情况下(低转换 5 变量)表现优于其他算法。在所有其他四种情况下,Epsilon Greedy 在实验的早期阶段获得了更高的支出,但 Thompson Sampling 始终超过 Epsilon Greedy,随着收集的数据点越来越多(如分配结果所示),并获得了更高的最终总支出。这再一次展示了在实验的早期阶段,面对不确定性,Thompson 采样如何支持探索,而在实验的后期阶段,仍然能够切换到支持开发。

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

Fig 10. Overall payout of low-difference conversion rate simulations

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

Fig 11. Overall payout rate for two-variant low-difference simulations

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

Fig 12. Overall payout for open-rate simulation

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

Fig 13. Overall payout for high-difference conversion rate simulation

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

Fig 14. Overall payout for high-difference two-variant simulation

  • 统计显著性:

对于所有的模拟,UCB-1 能够达到统计显著性(p <0.05) around the same time (total number of contacts added) as the A/B test set up, despite allocating more contacts to the winning variants and therefore having many fewer data points for the losing variants. Thompson Sampling, interestingly, showed faster reduction of p-value in the early phases of the experiment, but slows down, and eventually falls behind UCB-1 and A/B test simulations when p-values are between 0.1 and 0.05. This is likely due to the fact that Thompson sampling gets increasingly greedier as the beta distributions become more separated (which typically results in lower p-value). Epsilon greedy, however, did suffer in all cases from not having enough data in losing variants, and did not reach statistical significance until twice the number of data points had been observed. For the low-difference conversion rate simulations (Fig 15), the Epsilon Greedy algorithm could not reach statistical significance even by the end of the experiment.

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

Fig 15. Statistical significance for low-difference conversion simulations

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

Fig 16. Statistical significance for low-difference 2-variant simulations

For simulations with high difference, all algorithms reached statistical significance within the duration of the experiments. Similar to the results above, UCB-1 and A/B test reached p <0.05 with the same amount of data, with Thompson Sampling trailing slightly behind, and Epsilon Greedy took the most data points to reach statistical significance.

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

Fig 17. Statistical significance for open rate simulations

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

Fig 18. Statistical significance for high-difference conversion simulations

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

Fig 19. Statistical significance for high-difference 2-variant simulations

)

根据这些模拟的结果,我们证明了当需要一个随机控制的实验时,MAB 算法将总是提供一个比 A/B 测试更有利可图的选择。算法的具体选择取决于用户想要优先考虑利润还是数据收集,以及实验的估计大小和持续时间。

在极少数情况下,已知被测试的变量之间的支出差异相当大,所有算法将能够在几个数据点内显示变量之间的统计显著差异。在这种情况下,Thompson 采样或贪婪的 Epsilon 贪婪算法成为最大化支出的压倒性赢家。

Thompson Sampling 和 UCB-1 都能够优化所有情况下的总支出,同时不牺牲对所有变量的探索,并检测它们之间的统计差异。UCB-1 将产生更类似于 A/B 测试的分配,而汤普森则更适合于最大化长期总体回报。与 Thompson 采样相比,UCB-1 在每个单独的实验中表现得更一致,Thompson 采样由于算法中的随机采样步骤而经历更多的噪声。与 Thompson 采样和 Epsilon Greedy(ε= 0.1)相比,UCB-1 在变体性能方面有很小的差异,这是我们过去看到的典型 A/B 测试结果。当ε设置过低时,Greedy 可以在最佳情况下捕获最大值,但算法的行为也会变得相当不稳定,容易被观察到的转换中的噪声淹没。

总之,鉴于其一致性和对数据中噪声的高容忍度,UCB-1 是 MAB 算法在低基础转换率、小效应规模情况下的正确选择。在基线转换率较高或预期效应大小较高的情况下,Thompson 采样可能是更好的选择,此时算法会更稳定。

比较模型的性能

原文:https://towardsdatascience.com/comparing-the-performance-of-models-69433e1d603a?source=collection_archive---------1-----------------------

最近在 Quora 上看到下面这个问题。以前有人问过我同样的问题,我认为用它来写博客是有意义的,原因有两个,它能接触到更多的人,内容变得可重复使用,它激励我创建一个可以传播知识的博客。

How can I show that small improvement in F-score is statistically significant?

这不是构建假设的最佳方式。

更好的方法是形成一个假设,并进行假设检验。

你从一个假设开始,你正在尝试的两种方法有相同的 F 值,任何变化都是由于世界上固有的随机性。我们称之为无效假设。

现在你只能说你的进步是显著的,如果你能以预先定义的置信度拒绝这个假设,例如 95%的置信度意味着 p 值为 0.05。

一旦你准备好这个设置,你需要得到实际的样本来测试你的假设。一个简单的方法是进行 k 倍交叉验证,以获得两种方法的 k 个样本,并使用这些样本进行 t 检验。

另一种方法是再次使用 k 倍交叉验证来获得 k 个样本。然后,假设 k 个样本来自正态分布,您可以使用生成的样本来估计其超参数。现在,你可以从这个后验样本中抽取 100 次,看看任何时候一个比另一个表现得更好[我需要和我的顾问澄清这部分]

除了 k 倍交叉验证,你还可以尝试 bootstrap 抽样。

免责声明:只有在严格比较两种方法时,才能使用这种方法。如果你已经尝试了其他方法,你需要应用 Bonferroni 修正或其他修正,因为你在测试多重假设。

注意:这个练习的全部目的是推理你的 F 分数的变化实际上是否显著。

注意:我要感谢 Bruno Ribeiro 的数据挖掘课,我从他的课上获得了上述知识。我的错误或者不理解,可能并不归咎于他。

非监督与监督学习方法在自然语言处理文本分类中的性能比较

原文:https://towardsdatascience.com/comparing-the-performance-of-non-supervised-vs-supervised-learning-methods-for-nlp-text-805a9c019b82?source=collection_archive---------11-----------------------

将分类性能与 scikit-learn 文档中现有的 NLP 指标基线进行比较。Gal Arav M.Sc

笔记

1.本文中使用的术语的定义包含在末尾。

2.附带的 python 笔记本托管在 Google Colab:https://Colab . research . Google . com/github/gal-a/blog/blob/master/docs/notebooks/NLP/NLP _ TF-IDF _ clustering . ipynb

3.这是我在关于数据科学的第一篇文章,我期待任何反馈或问题,我的博客在:http://gal-a.com/

输入数据

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

输入数据是从 scikit learn library 中的 4 个互联网新闻组中提取的。下面显示的是这些新闻组中的热门话题的单词云,强调了每个新闻组中最受欢迎的话题。

无神论新闻组词云:

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

基督教新闻组单词云:

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

医学新闻组单词云:

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

图形新闻组单词云:

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

动机

我们的目标是准确地对文本文档进行分类,并将无监督学习方法的性能指标与现有的有监督学习方法的性能指标进行比较。

我们将比较以下非监督方法的性能指标:K-means、NMF 和 LDA 方法与这些监督方法:多项式朴素贝叶斯和线性支持向量机(SVM)方法。

scikit learn 的文档中详细介绍了监督方法的性能指标,我们将它们用作基准参考。

为了确保我们能够相互比较,我们将在这里分析的完全相同的测试数据集上评估性能指标:
http://sci kit-learn . org/stable/tutorial/text _ analytics/working _ with _ text _ data . html

如果我们知道有监督的方法会比无监督的方法更好,为什么还要为无监督的方法烦恼呢?这是因为在许多情况下,我们面临着没有完全标记的数据集的情况。标注大型数据集既昂贵又耗时,因此,在对文本标注项目投入资源之前,通过找到相似文档的聚类来获得我们研究的初始角度是有用的。例如,如果我们对文本数据的性质只有一个模糊的概念,通过非监督学习方法找到的“有趣”的类簇可以用来帮助我们决定在随后的监督学习项目中关注哪些类标签。半监督学习方法,即使用一个大的未标记数据集来扩充一个小的标记数据集,可以显著提高分类精度。

预处理

在我们可以应用机器学习方法之前,我们需要“清理”文本,具体来说,我们的目标是:删除标点符号删除琐碎的“停用词”,应用一些基本的语言学方法,如词干分析器词法分析器算法,并限制词性(POS) 。在这个简短的研究中,我们尝试只保留文本中的名词。

斯特梅尔算法的工作原理是切断单词的结尾或开头,同时考虑到一系列常见的前缀和后缀,这些前缀和后缀可以在一个屈折的单词中找到。

Lemmatizer 算法更复杂,通过使用详细的字典来考虑单词的形态分析,算法可以浏览这些字典以将形式链接回其 lemma。

下面是从原句中提取的 3 个名词示例列表。这里有些问题需要更复杂的预处理,但它们足够精确,我们可以继续处理(如前所示,单词 clouds 很好地反映了 4 个新闻组中的每一个)。原文句子:

注意,nltk 的缺省 POS 实现远非完美,还有各种其他的 POS 实现可以尝试(例如 HunPos、Stanford POS、Senna)。在这里我们看到,对于上面的句子,单词“bite”被错误地归类为名词,尽管它实际上是“bite”(一个动词)的过去分词。

机器学习模型需要输入数据的数字表示,因此我们需要在应用学习模型之前将文本转换为数字格式。用于将文本文档转换为数字表示的最流行的方法被称为 TF-IDF‘词频-逆文档频率’,尽管它的名字很长,但它非常容易理解。简而言之,TF-IDF 是一个数字表,表示一个术语在一个特定文档中出现的频率,通过它在语料库中所有文档中出现的频率来标准化。

请注意,“词频”概念通常被称为“词汇包”。当处理相关文本文档的大型语料库时,通常我们想要做的第一件事是创建这些文档中最流行的单词或短语的摘要。然后,可以通过术语频率或加权术语频率(当它们出现在 TF-IDF 矩阵中时,通过文档计数标准化)从术语的排序列表中创建“热门话题”

一旦预处理完成,绘制标记化文档长度的直方图是很有帮助的。

标记化文档长度的直方图:

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

注意,最后一个箱代表接近 40 个计数的尖峰(在文档长度= 1200 处),因为该值用于最大文档长度。

下面是可以在附带的笔记本中运行的预处理步骤的摘要(使用 sklearn 库):

(I)从文档构建计数矢量器并拟合文档

(ii)从文档中建立 TF(术语频率),这是词袋的稀疏版本

㈢分两步建立词汇袋:适应、转换

㈣获得特征名称,并建立词汇袋的数据框架版本

(v)使用 TfidfTransformer 将单词包转换成 TF-IDF 矩阵(术语频率-逆文档频率)

(vi)找出最流行的词和最高权重

(vii)建立单词权重列表并对其进行排序

(viii)计算所有文档与其自身的余弦相似度

(ix)计算文档的距离矩阵

基于 K-均值聚类的 PCA 降维方法

K-means 是最著名的聚类算法。这是一种无监督的学习方法,因为学习不是基于标记的类。

给定一组观察值(x1,x2,…,xn),其中每个观察值是一个 d 维实向量,k-means 聚类旨在将 n 个观察值划分为 k (≤ n)个集合 S = {S1,S2,…,Sk},以便最小化组内平方和(WCSS)(即最小化方差)。

它可以在语料库中的所有文档中生成最流行主题的良好分割。

虽然 K-means 可以直接处理任意数量的特征,但它通常在负责减少特征数量的单独预处理步骤之后使用,例如流行的 PCA 方法(主成分分析)。sklearn.decomposition 中有一个很好的 PCA 实现。

用线性代数术语来说,PCA 可以通过数据协方差(或相关性)矩阵的特征值分解来完成。得到的特征向量对应于数据分散的不同方向。特征值代表这些特征向量的相对重要性。PCA 允许我们根据相应特征值的有序排序,丢弃相对不重要的特征向量。

在统计学术语中,主成分解释的方差分数是该主成分的方差与总方差(所有单个主成分的方差之和)之比。为了估计需要多少分量来描述数据,我们可以检查作为分量数量(按特征值大小排序)的函数的累积解释方差比,并仅选择与解释方差的特定百分比(例如 90%)相对应的顶部分量。

在我们的例子中,由于我们想要创建一个 2 维的可视化(见下文),我们丢弃了除了对应于两个最大特征值的两个最重要的特征向量之外的所有特征向量,这两个剩余的特征作为 K-means 算法的输入——注意,仅基于两个特征的分析通常不包含 90%的解释方差!

K 均值模型与实际类别的 PCA 特征:

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

  • K-means 导致所有数据点的清晰分割(左侧)。
  • 当然,K-Means 模型导致了一些分类错误,如右图所示(对于具有实际类别标签的相同数据点),尽管我们仍然可以非常清楚地看到 4 个聚类。
  • 请注意,一般来说,由于我们通常不知道数据中的聚类数,我们需要使用一种技术来估计这一点,例如流行的肘方法:
    https://en . Wikipedia . org/wiki/Determining _ the _ number _ of _ clusters _ in _ a _ data _ set
  • 中心的维数是:(n 个簇,n 个特征)。
  • PCA 作为 K-均值之前的初始步骤运行,这产生了上面的二维表示(n_features = 2)。

NMF 和 LDA 聚类

NMF(非负矩阵分解)和 LDA(潜在狄利克雷分配)聚类都使用“单词包”矩阵作为输入,即与每个文档相关联的术语频率。然后,两种算法将原始单词包矩阵分成两个独立的单词包:

  1. 文档到主题矩阵
  2. 主题矩阵的术语

使用最小误差方法,这两个导出矩阵的乘积尽可能接近等于原始项频率。

虽然 K-means 可以提供良好的整体分割,但使用替代聚类方法(如 NMF 和 LDA)的主要优势在于,这些方法提供了对每个主题聚类中排名靠前的文档的额外洞察。注意,所有这三种算法都要求用户指定主题的数量作为输入参数。

注意,NMF 需要 TF-IDF 矩阵作为输入,而 LDA 只需要单词包(TF 表)作为输入。如何使用这些算法的例子可以在附带的 python 笔记本中找到。

结果

首先,为无监督学习方法计算调整后的 Rand 指数调整后的互信息得分(参见本文末尾的定义)。这些是测量两个赋值的相似性的函数,忽略置换和机会归一化:

基于调整后的 Rand 指数和调整后的互信息得分,NMF 和 LDA 方法都优于 K-means。

在这项研究中,LDA 算法取得了最好的结果(下面显示的 sklearn.metrics 表的列定义包含在“文本处理定义”部分的末尾)。

与监督方法的最佳结果(线性 SVM 获得的)相比:

考虑到我们使用的是无监督学习方法,这还不错!

摘要

  • 在没有“偷看”类别标签的情况下,我们能够使用 LDA 进行无监督学习,在平均精确度、召回率和 f1 分数方面获得略高于 0.8 的分数。相比之下,对于在实际类别标签上训练的监督学习方法,使用线性支持向量机(SVM)分类器,得分仅超过 0.9。
  • 总的来说,所有的算法在挑选“comp.graphics”新闻组的能力方面都比较好(例如,这个新闻组与其他新闻组最少混淆)。
  • 正如我们所料,最大的困惑发生在类似的“另类无神论”和“社会宗教基督教”新闻组之间。

附带的 python 笔记本使用 python 的 sklearn 库演示了 NLP(自然语言处理)环境中的以下技术:

  • 使用 TF-IDF(术语频率-逆文档频率)将文本矢量化为数字矩阵
  • 利用主成分分析进行维数约简
  • 无监督分类:基于 PCA(TF-IDF 的简化版本)计算 K 均值聚类
  • 非监督分类:基于 TF-IDF 计算 NMF
  • 无监督分类:基于 TF 计算 LDA(潜在导数分析)

下一步将是对这些算法的参数化进行网格搜索(这可能会导致更好的分类),并在更大更大胆的数据集上释放它们。

文本处理定义(在本文中使用)

常规:

文集:某一特定主题的书面文本的集合。

文档/样本/观察:语料库中的单词序列。

术语/单词/短语/特征/ n 元语法:来自给定文本(或语音)样本的 n 个项目的连续序列。n 元语法可以有不同的长度,例如一元语法、二元语法、三元语法。

术语簇:话题。相关术语的分类。

文档簇:文档中具有共同主题的主题混合。

预处理:

TF-IDF(术语频率-逆文档频率):术语相对于整个语料库对文档的重要性的统计度量。实际上,这种方法通过一个术语在语料库中出现的频率来标准化它在文档中出现的频率。

TF-IDF 样本:语料库中的单个文档,TF-IDF 矩阵中的行。

TF-IDF 特征:这些都是语料库中包含的唯一 n 元文法,即 TF-IDF 矩阵中的列。

PCA (主成分分析):一种流行的降维统计方法,即降低特征空间的维度。它使用正交变换将一组可能相关的变量样本转换为一组称为主成分的线性不相关变量的值。

监督学习方法:

多项式朴素贝叶斯:基于应用贝叶斯定理的概率分类器家族,在特征之间具有强(朴素)独立性假设。多项式分布用于对每个特征建模,因为这适合于可以容易地转化为字数的文本数据。这是一种用于文本分类的流行的监督学习方法,尽管它有“天真”的假设,但表现良好。

支持向量机(SVM) :通过寻找最大化类间距离余量的超平面来执行分类。这是一种流行的用于文本分类的监督学习方法,尽管实现比上面的朴素贝叶斯方法慢。

监督学习绩效指标:

精度:tp/(TP+fp)的比值,其中 TP 为真阳性的数量,FP 为假阳性的数量。精确度直观上是分类器不将阴性样品标记为阳性的能力。

回想一下:比值 tp / (tp + fn)其中 tp 是真阳性的数量,fn 是假阴性的数量。召回直观上是分类器找到所有肯定样本的能力。

F1 得分:这可以解释为精度和召回率的加权平均值,其中 F1 得分在 1 时达到最佳值,在 0 时达到最差得分。在多类别和多标签的情况下,这是每个类别的 F1 分数的加权平均值。

F1 得分= 2 (精确度召回率)/(精确度+召回率)

支持:目标类向量中每个类出现的次数。

无监督学习方法:

K-means :一种流行的聚类方法,用于将一组样本划分为 K 个簇。

NMF(非负矩阵分解):一种线性代数方法,将一个非负矩阵分解成两个与话题分布相关的非负矩阵 W 和 H。

LDA(潜在狄利克雷分配):一种贝叶斯推理方法,通过使用狄利克雷分布建立每文档主题模型和每主题术语模型。

无监督学习性能指标:

注意:在监督学习中,我们获得基础真实类向量和预测类向量之间的直接映射,而在非监督学习中,我们无法预测绝对类 id,而是获得相对类 id 的预测。例如,包含 3 个不同类别标签{0,1,2}的基本事实的样本可能导致标记为{0,1,2}或{0,2,1}或{1,0,2}或{1,2,0}或{2,0,1}或{2,1,0}的 6 个不同排列中的任何一个的预测分配,并且我们对相对于基本事实的“最佳”排列的度量的质量感兴趣。

调整后的互信息得分:互信息是衡量两个赋值的一致性的函数,忽略排列。这种度量有两种不同的标准化版本,标准化互信息(NMI)和调整互信息(AMI)。NMI 经常在文献中使用,而 AMI 是最近才提出来的,并根据概率进行标准化。

调整后的 Rand 指数:调整后的 Rand 指数是一个函数,它测量两个赋值的相似性,忽略置换并进行机会归一化。

有关这些指标的详细信息,请参见 sk learn:http://sci kit-learn . org/stable/modules/clustering . html # clustering-performance-evaluation

印度软件开发商与美国、英国、德国和整个世界的比较

原文:https://towardsdatascience.com/comparison-of-software-developers-in-india-with-us-uk-germany-and-the-entire-world-8d2a1ba3218a?source=collection_archive---------5-----------------------

我分析了“堆栈溢出调查”( Stack Overflow survey )( T1 ),发现在薪水、年轻人、对新工具的兴趣、对人工智能的看法、道德等方面形成了鲜明的对比…

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

Photo by arihant daga on Unsplash

历史上,印度开发人员的工资只是发达国家同行的一小部分。关于这些国家的开发者如何感受到威胁(或者说 T2 没有受到威胁)因为廉价外包给像印度这样的国家而失去潜在的工作机会,已经有很多报道了。

当我看到印度在 2018 年的堆栈溢出调查中拥有第二大响应者数量,并且该调查有一个关于响应者工资的问题时,我决定亲自看看印度开发人员实际上有多便宜。

于是,我画了一些 KDE 图对比印度开发者的年薪和全世界开发者的年薪:

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

KDE Plots for annual salary of developers in India (left) and annual salary of developers all over the world (right)

然后,我为调查中其他三个回复最多的国家,即美国、德国和英国,绘制了类似的图表:

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

KDE plots for annual salary of developers in United States, Germany and United Kingdom

看到印度开发商的 KDE 地块价格在 0 美元附近大幅上涨了吗?那是我决定彻底钻研这项调查的时候。我想探索是什么让印度开发者如此与众不同。

本次调查*(按降序排列)*收到最多回复的前 5 个国家是:

  • 美国
  • 印度
  • 德国
  • 联合王国
  • 加拿大

因此,我为调查中的每个问题列出了所有回应者的总体统计数据,然后我将其与仅来自印度的回应者的相应统计数据进行了比较。为了使对比更加明显,我还展示了其他 3 个回复最多的国家——美国、英国和德国。

以下是我的发现:

  • 大多数来自印度的开发人员的工资比其他发达国家的同行低几个数量级。
  • 在编写代码时,没有多少印度人考虑伦理问题。
  • 与整个世界或其他前三大响应国家相比,印度拥有 CS 相关领域大学专业的开发人员比例更高。
  • 与其他群体相比,印度的开发人员要年轻得多。他们很有竞争力,也很有野心。
  • 移动开发在印度有着独特的吸引力。
  • 大多数印度人对所有新的假设工具感兴趣。
  • 印度开发人员对人工智能的看法与世界其他地区有很大不同——我们更担心工作的自动化,对人工智能做出重要决策感到兴奋,更担心一种奇异类型的情况,而不是世界,并且不太担心算法与人类决策中“公平”定义的演变。
  • 许多印度人对开源软件贡献良多,但不认为他们从这样做中学到了什么。

进一步阅读这篇文章,看看可视化和了解更多关于这些结果或检查我对 Kaggle 的完整报告 ( ,如果你喜欢的话请投票支持)。

我最近才开始接触数据科学,我不确定我在分析中采用的方法是否是最好的(甚至是正确的)。所以,我真的很感激一些关于我做得对/错的反馈/批评😄。

关于薪水的更多信息:

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

Salary stats — count, mean and the 25th, 50th, 75th and 90th percentiles — for various groups

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

The quartiles for various groups

  • 印度开发人员的平均年薪几乎是全球所有开发人员平均年薪的 2.5 倍,几乎是美国平均薪资的 5 倍,几乎是英国平均薪资的 4 倍,几乎是德国平均薪资的 3 倍。
  • 超过 50%的印度开发人员年薪不到 1 万美元。
  • 全球所有开发人员的年薪中值大约是印度的 3.5 倍。美国的这一比例是英国的 10 倍,德国的 6 倍。

*【*注意 我在上面的情节中只包括了有工作的响应者。我还没算过零工资的。]

那么,印度开发人员的工资如此之低是因为他们在 CS 相关领域的教育程度低于其他国家的同行吗?

教育:

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

Highest level of education of the responders

  • 事实上,印度拥有学士学位的受访者比例高于其他国家。
  • 与除德国之外的其他群体相比,拥有硕士学位的应答者比例也较高。
  • 印度拥有博士学位(如哲学博士)的应答者比例要小得多。

让我们看看他们主修什么…

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

Undergrad majors of responders

  • 与其他国家和整个世界相比,印度计算机科学专业学生的比例更高。

嗯,我们可以肯定的是,并不是缺少一个正式的计算机科学学位让印度的开发人员找不到高薪工作。

那什么是?

也许更大比例的印度开发者并不是出于兴趣而编码,而仅仅是为了挣工资。这可能导致他们产生没有多大价值的次等代码。我们来看看是不是这样…

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

Does the responder code as a hobby?

没有。印度开发者和其他开发者群体一样对编码感兴趣。

但即便如此,很大一部分廉价外包工作是由来自印度的开发者完成的,这是一个现实。那么,为什么如此大比例的印度开发者被挡在高薪职位之外呢?

我认为,生活条件、教育质量和国家经济结构的综合因素阻碍了印度程序员甚至与美国、英国和德国等更发达国家的程序员竞争的能力。

除此之外,你还能如何解释尽管计算机专业学生的比例很高,但工资却很低?

年龄和经历

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

Age of responders

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

Number of years the responder has been coding professionally

  • 约 93%的印度受访者年龄在 18-34 岁之间,而全世界的这一数字为 73%,其他 3 个回复最多的国家甚至更少。
  • 如果我们计算拥有 0-5 年专业编程能力的开发人员的百分比,印度超过 78%,而美国约为 48%,英国约为 46%,德国约为 55%,全世界合起来约为 57%。

很明显,印度的开发人员非常年轻。

我认为,印度和这里考虑的其他群体之间在开发人员年龄和经验上的巨大差异背后的一个主要原因是,作为一个发展中国家,印度接触计算技术的时间比其他国家晚得多。这导致印度在 20 世纪甚至 21 世纪初产生了非常少的程序员。

这可能导致印度人主要贡献于公司的年轻劳动力,主要从事初级工作,这些工作的报酬可能低于更有经验的职位。这也可能是印度开发人员平均工资低的一个因素。

这也意味着印度初级开发人员的就业市场异常拥挤,这可能解释了为什么印度开发人员在本质上特别有竞争力…

竞争性

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

Does the responder feel like he/she is competing with his/her peers

  • 超过 50%的印度开发者认为他们正在与同行竞争,另外 25%的开发者对此持中立态度。

伦理学

该调查有几个与编码道德相关的问题。

不道德准则的责任:

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

Who do the responders believe is responsible for unethical code

  • 虽然所有其他组中几乎 60%的开发人员认为高层管理人员应对不道德的代码负责,但在印度只有 40%的开发人员这样认为。
  • 与其他群体的开发人员相比,大部分印度开发人员会认为提出不道德代码想法的人或编写代码的开发人员负有责任。

写不道德的代码?

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

Would the responder write code that he/she considers extremely unethical

  • 大多数印度开发者准备写他们自己认为不道德的代码。

考虑你的代码的道德含义?

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

Does the responder believe that he/she has an obligation to consider the ethical implication of the code that he/she writes

  • 只有大约 63%的印度回答者认为他们有义务考虑他们编写的代码的道德含义。

当你从事低薪工作时,考虑道德问题可能有点困难。

想象一下,身处一个失业率高、工资低、就业市场竞争激烈的国家。然后,想象一下,你被要求在你现有的工作中编写一份不道德的代码,或者冒着让你的老板不高兴的风险,并且失去下一次晋升的机会,而你的同事同意这么做,或者甚至冒着丢掉工作的风险!

所以我相信,如果一个开发人员同意编写不道德的代码,并不一定意味着他/她是一个不道德的人。有时候,这就像是在偷面包和让家人挨饿之间做出选择一样进退两难。正确的选择并不总是非黑即白。

移动应用开发的流行程度:

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

Developer types of the responders

  • 我们可以看到,代表印度的橙色条在“移动开发者”类别中非常突出。

事实上,印度拥有全世界最多的移动开发者:

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

Top 50 countries with the maximum number of mobile developers

大多数印度人可能已经完全跳过了个人电脑革命,转而将智能手机作为他们的第一个个人计算设备。因此,智能手机和移动应用令人兴奋不已。我认为这是我们在印度看到的对移动应用程序开发的兴趣背后的主要原因。

我们还可以看到移动开发的流行对印度开发者选择开发平台的影响…

平台

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

Platform popularity based on the percentage of responders who have worked with it (blue line) and those who desire to work on it next year (orange line); Click on each image in the collage to view an enlarged version

  • 安卓Firebase 是印度最受欢迎的三大平台之一。在印度开发者中,这两个平台的受欢迎程度已经超过了 Windows 桌面或服务器。
  • 而且,对它们的兴趣仍在增长,因为更大比例的开发人员希望明年开发它们!
  • 注意 Firebase 在上面看到的除印度之外的任何其他组中甚至都没有接近前 3。

关于人工智能的看法

该调查有几个与先进的人工智能技术相关的问题。其中两个是:

  • 你认为日益先进的 AI 技术最危险的一面是什么?
  • 你认为日益先进的 AI 技术最令人兴奋的地方是什么?

他们两人有相同的选择,即。

  • 做出重要决策的算法
  • 超越人类智能的人工智能(《奇点》)
  • 算法与人类决策中“公平”定义的演变
  • 提高工作的自动化程度

因此,我为上述每个选项绘制了单独的图表,试图了解大多数响应者是将其视为危险,还是将其视为兴奋的理由:

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

Opinions about AI; click on each image in the collage to enlarge it

  • 人工智能可能带来的工作自动化对我们印度人来说并不那么有趣。我们更有可能把它放进危险的“桶”里。这与世界其他地区以及其他 3 个回复最多的国家不同,那里有更大比例的人口对此感兴趣。
  • 印度人对人工智能为他们做重要决定的未来比其他 3 个国家或整个世界都更放心。
  • 印度人比其他群体更担心“奇点”式的情况。
  • 印度人不像其他群体那样担心算法与人类决策中不断演变的“公平”定义。

对假设工具的兴趣

Stack Overflow 想知道开发人员社区对哪些新的假想工具感兴趣。它要求受访者从 1 到 5 对四种假设工具进行评级,其中 1 表示“非常感兴趣”,5 表示“完全不感兴趣”。

我发现,与世界各地的开发人员或其他前 3 名响应国家的开发人员相比,印度开发人员对 Stack Overflow 团队提出的任何新的假设工具更感兴趣。

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

Levels of interest of the responders in new hypothetical tools; click on each image in the collage to enlarge in

我想,也许这种对所有新的假设工具的兴趣是我们之前看到的印度开发者社区年轻时代的结果。因此,我根据他们多年的编码经验对所有的开发人员进行了分组,并计算了每个经验组中属于不同兴趣水平的开发人员的百分比。

以下是代表这些百分比的热图:

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

很明显,一个人编码的年数和他/她对新的假设工具的兴趣之间有很强的相关性。 年轻的开发人员往往比年长的开发人员对新的假设工具更感兴趣。

这种反差对于工具——**"A private area for people new to programming"**(第一排,第二图)来说最为醒目。很明显,刚接触编程的年轻开发人员想要一个新手的私人空间。

也许吧,其原因是现有的栈溢出可以将 新人 。然而,老开发人员对这个工具非常不感兴趣。

也许是它的 知识的诅咒 。或者可能更有经验的开发人员认为现有的工具已经足够好了,因为他们已经在现有的工具上创造了事业。或者,不知何故,他们在该领域的经验对这种工具的成功持悲观态度。

无论是什么原因,很明显,如果 Stack Overflow 团队决定继续开发上述任何产品,年轻人更有可能欢迎它,印度可能是一个特别好的国家,可以尝试推出。

开源贡献的奇特之处在于:

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

Does the responder contribute to open-source software

  • 在这项分析中考虑的所有群体中,印度拥有最大比例的开源贡献者。

现在,有趣的部分来了…

调查中还有另一个问题——

“您使用过或参加过以下哪种非学历教育?请选择所有适用的选项。”

这个问题的选项之一是— “促成了开源项目”

我认为为开源软件做贡献不仅能帮助社区,还能帮助贡献者的个人成长。因此,做出贡献的人也会在非学位教育下注明。

但事实证明并非如此…

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

  • 虽然大约 50%的印度受访者对开源软件做出了贡献,但只有大约 30%的受访者认为他们从这样做中学到了一些东西。这与考虑在内的整个世界和其他国家形成对比,在这些国家,这两个比率几乎相同。

我不知道这是怎么回事。也许这意味着许多为开源项目做贡献的印度人并不经常这样做。让我知道你的想法。

结论

在这个分析中,我们看到了印度的软件开发人员与其他国家的软件开发人员不同的各个方面。

印度在计算领域起步较晚,正如我们在上面看到的老年开发人员比例较低所证明的那样,但软件开发在当代已经变得非常流行。在印度近代史的大部分时间里,从事信息技术和软件开发已经成为摆脱贫困最可靠的手段。

我们也看到这里的开发者意识到了上一次重大科技革命的潜力——移动应用。这让我对我们正在快速赶上充满希望。也许,我们甚至会在定义下一次重大技术革命中发挥关键作用(人工智能中的,也许是)。**

你应该看看我对 Kaggle 的完整分析,了解更多关于印度开发者在自学方法、IDE 使用、编程方法、各种语言和框架的流行程度、广告拦截器的使用、操作系统、堆栈溢出使用等方面的差异。 另外,如果你觉得有趣的话,请投上一票或者评论一下

我最近才开始接触数据科学,我不确定我在分析中采用的方法是否是最好的(甚至是正确的)。所以,我真的很感激一些关于我做得对/错的反馈/批评😄。

其他值得探索的想法

Jason Goodman 建议,在构建数据科学项目时,选择你感兴趣的东西。如果它是你感兴趣的东西,它会更有趣,你更有可能从中找到有趣的角度。

我试图通过分析堆栈溢出调查数据来找出来自我的国家的开发人员与其他人的不同之处,从而将这一理念带回家。

做这个冗长的分析也让我对其他一些问题感到好奇。所以,我在这里公布了我想问这个数据集的所有问题—

  • 人们通过参与开源项目来学习吗? 我料定人确实如此。但事实证明,并不是所有人都这样(就像我们在这个分析中看到的 20%的印度人)。所以,深入研究这个会很有趣。
  • 关于 AI 的观点有哪些不同?在这个内核中,我们看到了印度人对推进人工智能技术的各个方面有着不同的看法。根据年龄、开发人员工作、教育、框架、语言、薪水等在其他组中进行比较会很有趣。
  • 学生们是怎么想的?
    本次调查的每 5 名回答者中就有 1 名是全日制学生,这意味着我们有大约 20,000 名学生的调查数据。我认为这提供了一个独特的机会来探索下一代软件开发人员中流行的东西(我自己也包括:D)。
  • Vim 用户和非 Vim 用户有什么不同? 这只是因为我用了 Vim。我爱维姆。制作类似于这种优秀的 R vs. Python 分析会很有趣。
  • 一个薪资预测器 Stack Overflow 最近推出了一个薪资计算器使用的正是这个数据集。尝试构建一个类似的东西可能会很有趣。

令人兴奋的是,通过分析这个数据集,有可能得出所有这些问题的满意解决方案!

我计划自己探索其中的一些话题。但是如果你觉得上面的问题有意思的话,你可以随意进行你自己的分析。另外,如果你觉得这个分析很有趣,你可以为你自己的国家做一个类似的分析。

如果你(/如果你)决定公开你的作品,你可以在评论中给我加标签,或者在 Twitter 上给我发推文,或者在 LinkedIn 上给我发短信,那就太棒了。

一定要看看我在 Kaggle 上的完整分析——“印度开发者如何与众不同”。如果你觉得我的分析有趣,如果你能投票支持这个内核,我会非常感激。

我正在数据科学和机器学习领域寻找机会。你可以在 LinkedIn 或者 Twitter 联系我。你可以在nityeshagarwal[at]gmail[dot]com给我发邮件。

还有,你可以在 Twitter 上关注我;我不会给你发垃圾邮件;-)

2018 年最佳 NSFW 图像审核 API 对比

原文:https://towardsdatascience.com/comparison-of-the-best-nsfw-image-moderation-apis-2018-84be8da65303?source=collection_archive---------6-----------------------

多个图像内容过滤 API 提供商的全面基准,涵盖不同类别,如裸体、色情和血腥。

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

人类可以本能地决定他们所看到的是否不合适。然而,当谈到拥有一个可以决定一个图像或视频是否不合适的全视人工智能时,这个问题还远远没有解决。现在,许多公司都在争先恐后地应用自动化技术来识别一种媒体是可以安全传播还是被清除。

我想亲自了解一下,在自动检测公认的 NSFW 内容方面,最先进的技术是什么。我将基于以下类别对 API 性能进行比较

  • 露骨的裸体
  • 暗示性的裸体
  • 色情/性行为
  • 模拟/动画色情
  • 血腥/暴力

Tl;DR: 如果你只是对找出最好的 API 感兴趣,你可以直接跳到文章末尾的总体比较。

实验设置:

**数据集:**为了进行评估,我创建了一个自定义的 NSFW 数据集,它与每个 nsfw 子类别具有相同的权重。该数据集由 120 幅图像组成,其中 20 幅 nsfw 阳性图像用于上述五个类别中的每一个,20 幅 sfw 图像。我决定不使用开源的 YACVID 180 图像数据集,因为它主要依赖于使用裸体作为 NSFW 内容的衡量标准。

收集 NSFW 图像是一项单调乏味、费时费力的工作,因此图像数量很少。

数据集已经开源,可以在这里下载 。【警告:包含露骨内容】

这里的 是一张包含数据集中每个图像上的 API 的原始预测的表。

指标:

每个分类器都根据普遍接受的指标进行评估,例如:

真阳性:TP

如果一个分类器称某物为 NSFW,而它实际上是 NSFW

真阴性:TN

如果一个分类器称某物为 SFW,而它实际上是 SFW

误报:FP

如果一个分类器称某物为 NSFW,而它实际上是 SFW

假阴性:FN

如果一个分类器称某物为 SFW,而它实际上是 NSFW

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

准确(性)

如果模型做出预测,你能相信它吗?

精确

如果模型说某个图像是 NSFW,那么它的正确率是多少?

回忆

如果所有的 NSFW 图像,它能识别多少?

F1 分数

它是精确性和回忆性的混合体,通常类似于准确性。

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

我评估了以下用于内容审核的 API

跨类别的绩效

我首先按类别评估了每个 API,看看它们在检测不同类型的 NSFW 内容时表现如何。

色情/性行为

Google 和 Sightengine API 在这里大放异彩,因为它们是唯一能够正确检测所有色情图片的 API。Nanonets 和 Algorithmia 紧随其后,因为它们能够正确分类 90%的色情图像。微软和 Imagga 在这个类别上的表现最差。

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

原始图片链接: Porn19Porn7Porn18Porn14

容易识别的图像明显是色情的。所有的供应商都得到了正确的图片。他们中的大多数人都非常有把握地预测了 NSFW 的内容。

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

原图链接: 色情 6色情 2色情 10色情 3

难以识别的图像是由于遮挡或模糊造成的。在最糟糕的情况下,11/12 的供应商弄错了图像。色情在性能上有很大的差异,这取决于色情的强度和色情内容的清晰程度。

露骨的裸体

大多数 API 在这一类别中表现出色,其中许多具有 100%的检测率。即使是性能最低的 API(clari fai 和 Algorithmia)在这里也有 90%的检测率。什么被认为是裸体的定义一直是争论的主题,从难以识别的图像中可以清楚地看出,在人们可以争论这些是 SFW 的情况下,它们大多失败了。

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

原始图片链接: 裸露 10裸露 7裸露 13裸露 14

易于识别的图像具有清晰可见的裸露,并且是清晰的。任何没有不同意见的人都会把这些叫做 NSFW。没有一个提供者出错,平均分数都是 0.99。

原始图片链接:

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

原图链接: 裸体 9裸体 8裸体 18裸体 4

引起争论的图像是那些提供者弄错的图像。这可能只是每个供应商对裸体的敏感度有不同的设置。

暗示性的裸体

谷歌在这方面再次领先,对这一类别的检测率为 100%。Sightengine 和 Nanonets 的表现优于其他产品,检测率分别为 95%和 90%。对于机器来说,暗示性的裸体几乎和裸体一样容易识别,但它出错的地方是在通常看起来像 SFW 图像但有一些裸体的图像中。

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

原始图片链接: 建议 13建议 10建议 2建议 8

再一次,没有一个提供者得到容易识别的错误图像。这些图像显然都是 NSFW 的。

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

原图链接: 建议 17建议 12建议 11建议 5

在暗示性的裸体中,提供者分裂了。类似于赤裸裸的裸露,他们都有不同的容忍界限。我个人不确定这些图片是否应该是 SFW。

模拟/动画色情

所有的 API 在这里都表现得非常好,能够准确地检测出 100%的模拟色情例子。唯一的例外是 IMAGGA,它漏掉了一幅图像。有趣的是,几乎所有的供应商都表现得很好。这表明这些算法发现识别人工生成的图像比自然生成的图像更容易。

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

原图链接: 模拟炮 1模拟炮 16模拟炮 19模拟炮 9

所有的提供者都有完美的分数和高的置信度分数。

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

原始图像链接: 模拟图 15

如果你看得不够久的话,Imagga 弄错的一张图片可能会被解释为不是色情图片。

流出的血

这是最困难的类别之一,因为 API 的平均检出率低于 50%。Clarifai 和 Sightengine 的表现优于其竞争对手,能够识别 100%的戈尔图像。

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

原图链接: Gore2Gore3Gore6Gore10

所有供应商都有高门槛的是医学图像,可能是因为它们更容易找到。然而,即使在表现最好的图像中,4/12 的提供者也弄错了图像。

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

原图链接: Gore7Gore9Gore17Gore18

图像中没有难以预测的明显模式。然而,人类会很容易发现这些图像中的任何一个是血腥的。这可能意味着表现不佳的原因是缺乏可用的训练数据。

工作安全

安全的工作是不应该被识别为 NSFW 的图像。收集一个安全的工作数据集本身是困难的,它应该靠近 NSFW,以了解这些供应商做的事情。如果所有这些图片都是 SFW,那么会有很多争论。在这里,Sightengine 和 Google 是表现最差的,这也解释了他们在其他类别中的出色表现。他们基本上把任何东西都叫做 NSFW。Imagga 在这里做得很好,因为他们不叫什么 NSFW。X-Moderator 在这里也做得很好。

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

原图链接: SFW15SFW12SFW6SFW4

易于识别的图像只有很少的皮肤显示,对于人来说很容易识别为 SFW。只有一两个供应商弄错了这些图像。

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

原图链接: SFW17SFW18SFW10SFW3

难以识别的 SFW 图片都有大量的皮肤展示或者是动漫(高度偏向于色情动漫)。大多数供应商得到的图片都带有大量显示为 SFW 的 sking。这就引出了一个问题,如果这些真的是 SFW?

总体比较

查看 API 在所有 NSFW 类别中的性能,以及它们在能够正确识别工作安全(SFW)内容方面的性能,我发现 Nanonets 具有最好的 F1 分数和平均准确性,因此在所有类别中表现一致。谷歌在检测 NSFW 类别方面做得非常好,它标记了太多的 SFW 内容,因为 NSFW 因此在 F1 得分中受到了惩罚。

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

按提供商

我根据准确性和 F1 分数比较了前 5 名供应商,以展示他们在表现上的差异。雷达图的面积越大越好。

1.纳米网络

Nanonets 在任何一个类别中的表现都不是最好的。然而,最平衡的总体情况是在每个类别中都做得很好。它可以做得更好的地方是将更多的图像识别为 SFW。对任何皮肤都过度敏感。

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

2.谷歌

谷歌在大多数 NSFW 类别中表现最佳,但在检测 SFW 方面表现最差。需要注意的一点是,我找到的图片来自谷歌,这意味着他们“应该知道”我使用的图片是什么。这可能是大多数类别中真正好的表现的原因。

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

3.克拉里菲

Clarifai 确实在识别戈尔方面大放异彩,并且比大多数其他 API 做得更好,它再次得到了很好的平衡,并且在大多数类别中都做得很好。它缺乏识别暗示性的裸体和色情。

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

4.x-慢化剂

X-Moderator 是另一个平衡的 API。除了识别戈尔外,它还能很好地识别大多数其他类型的 NSFW 内容。它在 SFW 中获得了 100%的准确性,这使它从竞争对手中脱颖而出。

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

5.视觉引擎

像谷歌这样的视觉引擎在识别 NSFW 内容方面有着近乎完美的表现。然而,它没有识别出一个单一的戈尔图像。

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

定价

决定使用哪种 API 的另一个标准是定价。下面是每个供应商的价格比较。大多数 API 都有免费试用版,但使用量有限。雅虎是唯一一个完全免费使用的网站,但它是自主托管的,因此不在此表中。

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

亚马逊,微软,Nanonets,DeepAI 都是最低的,每月 1000 万美元的 API 调用。

哪一个是最好的内容审核 API?

NSFW 内容的主观性使得很难将任何一个 API 声明为内容审核的首选 API。

更适合内容分发并希望有一个平衡的分类器的一般社交媒体应用程序更倾向于使用 Nanonets API,其分类器的最高 F1 分数证明了这一点。

一个针对儿童的应用程序肯定会犯谨慎的错误,甚至会喜欢隐藏边缘的不适当内容,因此他们会更喜欢使用谷歌 API,其在所有 NSFW 类别上的出色性能会冒着过滤掉一些适当内容的风险。这样做的代价是会失去很多谷歌可能宣布为 NSFW 的 SFW 内容。

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

NSFW 到底是什么?

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

在这个问题上花了大量时间后,我意识到的一个关键问题是,NSFW 到底是什么还不清楚。每个人都有自己的定义,你认为你的服务向用户展示什么是好的,这在很大程度上取决于服务提供了什么。约会应用程序中的部分裸体可能没问题,但血液则不然,在医学杂志中,情况正好相反。真正的灰色地带是暗示性的裸体,在那里不可能得到正确的答案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值