Kotlin 怎么可能成为 Android 上 ML 的新“Python”?
📱移动机器学习
强大的数组操作使它变得简单。
如果你是一个编程爱好者,开发 ML 算法听起来会很刺激。重要的事情,首先。假设您要用 Python 创建一个决策树分类器。你为什么要这么做?您很可能会使用 NumPy 进行数组操作,使用 Pandas 处理数据。有些人可能会使用 scikit-learn 的DecisionTreeClassifier
。如果您打算从头开始创建决策树,您可以使用 Python 轻松完成。
像其他编程语言一样,在 Python 中,不需要显式指定变量的数据类型。此外,它有许多软件包可以通过 pip 获得,所以拯救我们的生命!但是随着我们周围边缘设备数量的增加,你可能不得不在 iOS,Android,Rasberry Pi 等平台上编写 ML 算法。说到 Android(因为我是一名 Android 开发人员,你可能已经从故事的标题中推断出来了),在 Java 上使用数组可能是一场噩梦(还记得那些分号吗!).
进入科特林。一种新的 Android 编程语言。它拥有易于使用的数组操作方法,这使得它功能强大且对开发人员友好。它的语法也类似于 Python。在这个故事中,我们学习了一些优秀的 Kotlin 函数,这些函数将帮助你在 Android 中进行 ML 之旅。
1.映射数组中的元素
如果你想对你的一些用户照片进行图像分类或检测,我们可以使用 Kotlin 的map
功能。
片段 1
在 Java 中,您可能必须编写一个for
循环来遍历文件,并将它们逐个转换为Bitmap
。
特别是,Kotlin 中的 map()函数对于在数组上执行不同的操作非常有用。
计算存储在数组中的数的最小值、最大值和平均值对于各种 ML 算法都很重要。无论是 Python 中的argmax
函数还是max
和min
函数,我们都可以在 Kotlin 中拥有它们!
片段 2
在上面的代码片段中,我在
map
函数中使用了map
函数来规范化多维数组。
看看我们如何连续使用map
对一个数组执行任何操作。还有更多像groupBy
和binarySearch
这样的方法可能有用。见本文档。
2.过滤阵列
例如,在决策树算法中,您需要数组中某个元素的概率来计算信息增益。同样,对于 TF-IDF,我们也需要计算词频和 IDF。使用 Kotlin 的count
和filter
方法,可以更容易地处理数组中各种元素的概率和频率。
片段 3
在为 NLP 模型预处理数据时,过滤也很有用。可以使用filter
函数执行一些任务,比如标记化、删除停用词和标点符号。
片段 4
一个你可以创建一个( word , frequency )
词汇表并将其存储为HashMap<String,Int>
的例子,
代码片段 5
3.科特林协程
Kotlin 协同程序可以帮助我们在后台线程上运行 ML 模型,从而提供优质的用户体验。如果您使用一个模型来增强图像的分辨率(超分辨率),您会希望异步运行它。在这里了解更多关于使用 Kotlin 协程的信息,
[## 掌握 Android 中的 Kotlin 协程——分步指南
在这篇博客中,我们将掌握 Android 中的 Kotlin 协同程序。我们将讨论协程到底是什么,以及…
blog.mindorks.com](https://blog.mindorks.com/mastering-kotlin-coroutines-in-android-step-by-step-guide) [## 协程概述- Kotlin 编程语言
异步或非阻塞编程是新的现实。无论我们是创建服务器端、桌面还是移动设备…
kotlinlang.org](https://kotlinlang.org/docs/reference/coroutines-overview.html)
听起来不错。在哪里可以看到代码?
我们都喜欢决策树,对吗?你也可以用 Kotlin 编写代码,
从 Scikit Learn 到 Android 的旅程。
becominghuman.ai](https://becominghuman.ai/designing-decision-trees-from-scratch-on-android-68bf7ee0d01a)
它们很简单,对吗?我们需要有挑战性的东西!前馈神经网络(带反向传播)怎么样?
[## 用 Kotlin(或 Android)编写前馈神经网络
添加层,单位和激活了!
heartbeat.fritz.ai](https://heartbeat.fritz.ai/coding-feed-foward-neural-networks-in-kotlin-or-android-b93efd47538f)
强化学习,Q 学习?我们也供应那个!
探索 Q 学习与冰湖环境,都在安卓!
heartbeat.fritz.ai](https://heartbeat.fritz.ai/q-learning-with-the-frozen-lake-environment-in-android-937cf48dcc52)
Android 上的端到端 FaceNet 实现(100%使用 Kotlin),
[## 使用 FaceNet 在 Android 设备上进行人脸识别
利用 Android 的 FaceNet 和 Firebase MLKit 的强大功能。
towardsdatascience.com](/using-facenet-for-on-device-face-recognition-with-android-f84e36e19761)
更多示例
作为一个热衷于 ML + Android 的开发者,我一直在 Kotlin 中从头开始构建 ML 算法。
结束了
在 Java 中规范化多维数组!来源。
那么,Kotlin 对于机器学习来说怎么样?希望你会觉得比 Java 好!如果你有更多使用 Kotlin 的 ML 算法的例子,一定要在评论中提到它,让它出现在这里!感谢阅读!。
为什么是 Sigmoid:概率观点
视频教程
你知道为什么 sigmoid 函数的输出可以解释为概率吗?
飞越太浩湖,2018 年春天,我和 DJI 马维克航空公司拍摄的照片
如果你以前上过任何机器学习课程,你一定在某个时候遇到过逻辑回归。有一个 sigmoid 函数将线性预测值与最终预测值联系起来。
根据您所学的课程,这个 sigmoid 函数通常是凭空产生的,并作为将数字线映射到所需范围[0,1]的函数引入。有无限多的函数可以做这种映射,为什么是这个呢?
需要注意的一个关键点是,sigmoid 的输出被解释为一个概率。很明显,0 和 1 之间的任何数字都不能被解释为概率。解释必须来自模型公式和随之而来的一系列假设。
如果不想看全文,可以在这里看视频版:
“为什么是乙状结肠”这个问题曾经困扰了我很久。网上很多回答都没有切中要害。我发现的这类答案最常提到的关键词是“logit”和“log odds ”,只是简单地将 sigmoid 转换为它的逆函数,这不仅没有解释为什么我们选择 log odds 作为线性预测器的目标,也没有说明这种选择的含义。一些更好的提到了“广义线性模型”,但它们与介绍性课程有着相同的弱点,介绍性课程提到了概念,但没有真正回答“为什么”的内在联系。真正的答案应该可以帮助你从零开始设计这个算法,而不需要事先了解它。当你面对一个只有基本概率和统计知识的二元分类问题时,你应该能够想到“好吧,解决这个问题的最符合逻辑的方法之一就是遵循这个精确的模型设计”。
在这篇文章中,我将尽最大努力以一种易于阅读的方式安排逻辑流程,这样就清楚了 sigmoid 是带有一些重要假设的概率二进制分类的自然设计选择。就像讲故事一样,逻辑不一定是好的和线性的,一些点可能看起来是平行的,但它们都有助于逻辑模型的设计动机。所以如果你关心这个话题,请坐下来耐心听我说一会儿。这将是一篇很长的帖子,信息量相当于机器学习书籍中的一整章。
一些关键词和主题在前面:
- 线性回归的概率解释,最大似然估计
- 高斯鉴别分析
- 逻辑回归的潜在变量公式
- 从替代方案中获得洞察力:概率单位模型
- 指数族、广义线性模型和标准连接函数
1.线性回归的概率解释,最大似然估计
这里提到线性回归的原因是为了看看我们如何将它视为数据的概率模型,以及我们是否可以将类似的想法应用于分类。
我们假设我们的目标变量 y 和输入 x 通过(上标 I 是数据点的索引)相关
其中,ε是一个误差项,表示未建模效应或随机噪声。我们假设噪声来自不同的源并且不相关,所以基于中心极限定理它应该是高斯的。我们可以写出分布并将误差表示为目标值和线性预测值之间的差值,
我们称之为给定 x 的 y 的分布,以θ 为参数。我们不以θ为条件,因为它不是随机变量,而是要学习的参数。接下来,我们将可能性定义为
可能性是θ的函数。当被视为 y 和 X 的函数,且θ固定时,它只是概率密度函数。但当被视为θ的函数时,这意味着通过改变θ,我们可以将分布“拟合”到观察到的数据。寻找最佳拟合的过程称为最大似然估计(MLE)。换句话说,MLE 是在假设分布类型(在这种情况下是高斯分布)和参数(在这种情况下是θ,请注意,我们只关心平均值,而不关心方差/协方差矩阵)的情况下,试图找到使观察数据的概率最大化的分布。因为我们假设了独立的观察值,所以我们进一步以下面的形式将它写成单个数据点的乘积。
由于对数变换是单调的,我们使用下面的对数似然来优化 MLE。
为了找到描述生成数据的真实基础模型的最佳高斯,换句话说,就是最佳θ,我们需要找到给出最大对数似然的峰值。最大化上面的表达式等价于最小化下面的项,
现在我们看到了神奇之处:这正是最小二乘法!
简而言之,为什么线性回归使用最小二乘法拟合数据?
因为它试图以线性预测器加高斯噪声项的形式找到最佳模型,使从中提取数据的概率最大化。
线性回归的概率公式不仅为我们后来的逻辑回归公式提供了一个鼓舞人心的例子,而且它还展示了模型设计的合理解释。我们将带有高斯噪声的线性预测器映射到目标变量。对于二元分类,如果我们可以做一些类似的事情,那就太好了,即,将带有某物的线性预测器映射到属于两个类别之一的概率(后验 p(y=1|x)),并使用 MLE 来证明模型设计,即它最大化了从我们的参数化分布中提取观察数据的概率。我将在第 3 节展示如何做到这一点,但接下来,让我们看一个激励人心的例子。
2.一个令人振奋的例子:高斯判别分析
让我们考虑对 1D 数据的二进制分类任务,其中我们已经知道两个类的基本生成分布:具有相同方差 1 和不同均值 3 和 5 的高斯分布。两个高斯都有 50k 个数据点,即相同的先验,p(C0) = 0.5 = p(C1)。(Ck 代表 y 的类)
由于我们在数据中只有一维,我们能做的最好的事情就是在某个地方画一个垂直的边界,尽可能的把两个类分开。视觉上很明显,边界应该在 4 左右。使用一种生成方法,其中我们知道类条件 p(X|Ck),这是两个高斯函数,以及先验 p(Ck),我们可以使用贝叶斯规则得到后验
结果绘制如下
我们可以清楚地看到后验中的边界,即我们算法的最终概率预测。红色区域被分类为 0 级,蓝色区域为 1 级。这种方法是一种生成模型,称为高斯判别分析(GDA) 。它模拟连续的特征。你可能听说过它的兄弟离散特征:朴素贝叶斯分类器。
现在看看 S 形的后验边界周围,它描述了两个类之间的不确定性的过渡。
如果我们能够在事先不知道类条件的情况下直接建模这个 S 形状,岂不是很酷?
但是怎么做呢?让我们解决一些数学问题。
请注意,红色和蓝色曲线是对称的,它们的总和总是 1,因为它们在贝叶斯定理中是归一化的。让我们看看红色的。它就是 p(C0|X ),它是 X 的函数。我们通过将顶部和底部分成以下形式,对前面的等式进行了一点修改,
对于右下角的项,我们可以取消先验,因为它们是相等的,并插入高斯条件句。
好吧,这很好!我们在 exp()里面有一个 x 的线性函数,如果我们设 z = -2x + 8,写出它的后验,就变成了,
**这就是逻辑 s 形函数!**如果你问为什么 z 有负号,那是因为为了方便起见,我们希望 p 和 z 在相同方向上是单调的,这意味着增加 z 将增加 p。这种情况的逆过程被称为对数几率或 logit ,这是我们可以使用线性函数建模的部分。
回头看看上面的逻辑流程,到底发生了什么,使得有一个 sigmoid 形式的后验概率和 x 对 z 的线性函数成为可能?这将为我们提供一些见解,以决定何时我们可以这样对分类建模。
对于 sigmoid 形式,您可以看到它自然地来自两个类别的 Bayes 规则,即目标变量的 Bernoulli 分布。它不要求类条件句是高斯型的!可能有一族分布具有相似的指数形式,符合我们上面的推导!只要输出 y 是二进制的,输入 X 在它们的类条件分布中就可以有一定的灵活性。
接下来,z 的线性形式。在本例中,我们有两个高斯函数,方差相同,先验为。这些事实让我们在推导中,抵消了先验和 X 的二次项。这个要求看起来挺严格的。事实上,如果我们改变高斯函数的形状,决策边界就不再是一条直线。考虑下面 2D 的例子。如果两个高斯函数具有相同的协方差矩阵,则判决边界是线性的;在第二张图中,它们具有不同的协方差矩阵,判定边界是抛物线。
来源:K. Murphy,机器学习:概率观点
这告诉我们,如果我们使用 sigmoid 函数和线性边界直接对后验模型进行建模(判别方法),这也被称为逻辑回归,与 GDA 的生成方法相比,它有一些优点和缺点。
- GDA 具有比逻辑回归强得多的假设,但是当高斯假设为真时,它比逻辑回归需要更少的训练数据来实现类似的性能。
- 但是如果类条件句的假设不正确,逻辑回归做得更好,因为它不需要对特征的分布建模。
在凯文·墨菲的机器学习:概率观点的第 8.6.1 节中,对 GDA 和逻辑回归进行了广泛的比较。我在这里讨论 GDA 只是为了说明这一点
当我们试图用一些假设对一个伯努利目标变量建模时,sigmoid 函数会自然出现。
3.逻辑回归的潜在变量公式
现在回到第一点。我们通过定义带有高斯噪声项的线性预测因子来设计线性回归。我们能在二进制分类的情况下做一些类似的事情吗?是的,我们可以!让我们这样来看,
线性预测值加上此处的误差评估为我们所谓的潜在变量,因为它是不可观测的,并且是根据观测变量 x 计算的。二元结果由潜在变量是否超过阈值(本例中为 0)决定。(注意,为了方便后面的累积分布解释,判定阈值被设置为 0,而不是通常的 0.5。从数学上讲,这里的值是 0 还是 0.5 并不重要,因为线性预测器可以更新偏差项进行补偿。)
如果我们假设误差项有一个 逻辑分布 ,,其累积分布是逻辑 sigmoid 函数(如下并排所示),那么我们就得到逻辑回归模型!
来源:维基百科
将潜在随机变量表示为 Y*,线性预测值表示为 z,累积分布表示为 F,则观察结果 y = 1 的概率为,
我们让 F 成为 sigmoid 函数,所以它在 0 左右对称,
所以我们可以写作,
现在我们达到了目标,伯努利结果的概率表示为线性预测值的 sigmoid!
上面给了我们线性预测器 z 和预测 p 之间的关系,函数 F,或者机器学习上下文中的激活函数就是逻辑 sigmoid。激活函数的逆函数称为链接函数,它将预测映射回 z。它是逻辑回归中的 logit 。
概括地说,推导基本上是说如果我们假设误差项具有逻辑分布,我们的伯努利结果的概率是线性预测值的 sigmoid。
如果你仔细观察推导,这个公式并不需要一个逻辑分布来工作。只需要在 0 附近对称分布。什么是合理的替代方案?一个高斯!
如果我们假设误差是高斯型的呢?
它实际上给了我们另一个与逻辑回归相似的模型,也能完成这项工作。它被称为概率单位回归。
4.另一种选择:概率单位模型
与设计用于解决相同任务的替代模型进行比较是深入了解我们的主题:逻辑回归及其假设的一个很好的方法。
如前一节所述,二元分类的概率单位模型可以用相同的潜在变量公式表示,但存在高斯误差。你可能想知道为什么它不像逻辑回归那样被广泛使用,因为假设高斯误差似乎更自然。一个原因是高斯分布不具有封闭形式的 CDF,并且其导数在训练期间更难计算。逻辑分布的形状与高斯分布非常相似,但其 CDF(也称为逻辑 sigmoid)具有封闭形式且易于计算的导数。
我们来看看推导过程
φ是高斯的 CDF。注意,我们除以σ得到一个标准正态变量,并利用对称性得到最后的结果。这说明我们不能分别识别θ和σ,因为 p 只取决于它们的比值。这意味着潜在变量的规模没有确定。因此,我们设置σ = 1,并以潜在变量的标准差为单位解释θ。
上述推导与逻辑回归的唯一区别在于激活函数被设置为高斯 CDF,而不是逻辑 sigmoid ,即逻辑分布的 CDF。高斯 CDF 的逆函数被称为概率单位,它在这里被用作链接函数。
概率单位回归作为一种惯例更多地用于生物和社会科学。它通常产生与逻辑回归相似的结果,并且更难计算。如果你不是这方面的专业统计学家,逻辑回归是首选模型。
还有另一个叫做互补双对数的链接函数,可以用于伯努利响应,我不会在这里详细介绍,但如果你有兴趣,可以阅读一下。
5.指数族、广义线性模型和标准连接函数
到目前为止,我们已经看到了线性回归、逻辑回归和概率回归。它们的主要区别之一是链接功能。如果我们把它抽象出来,并做一些额外的假设,我们可以定义一个更广泛的模型类别,称为广义线性模型。
GLM 对 p(y|x)的期望值进行建模,即μ= E[y | x;θ].**对于线性回归,μ只是线性预测器,换句话说,它的连接函数就是恒等函数。**但对于其他情况,p(y|x)可以是指数形式或其他形式,如果我们仍然想以某种方式使用线性预测器,我们必须将其转换以匹配输出。
为了跳到 GLM,我们首先利用一个很好的数学形式,将一些最广泛使用的分布组合在一起,这样我们就可以研究它们的共享属性。我们可以查看如下所示的共享表单,而不是查看每个带有各自参数的发行版,
可以调整成这种形式的分布称为指数族(注意,它与指数分布不同)。这里,y 是我们试图预测的目标响应变量。统计学家为这些术语起了一些别出心裁的名字。**但我在这里关注的是η项,也称为自然参数。**出于我们的目的,我们可以假设 T(y)(称为充分统计量)只是 y。因此,自然参数η只是将 exp()中的结果 y 映射到左边的概率。让我们用一个具体的例子来说明我的意思。
对于均值为μ的伯努利目标变量,我们可以写为
自然参数η原来是 logit!
由于这种指数族公式,logit 也被称为伯努利分布的规范链接函数。
正如我们之前看到的,概率单位也是一个链接函数,但它不是规范的,因为它不属于这里的指数族设置。
现在我们有能力跨越到 GLM。利用指数族及其自然参数,我们可以根据结果 y 的分布为我们的线性预测器定义一个规范链接函数。在伯努利结果的情况下,这种方法为我们提供了 logit 链接和逻辑回归。
指数族给了我们很多好的性质。表明它们的对数似然总是凹的(等价地,负对数似然总是凸的),并且它们的基于梯度的优化共享相同的形式,因此我们总是可以使用一些迭代算法来找到最佳拟合。
除了伯努利分布,其他一些著名的指数分布包括高斯分布、泊松分布、伽玛分布、指数分布、贝塔分布和狄利克雷分布。
要为机器学习任务选择 GLM,请考虑目标变量 y 的类型。例如,
- 如果 y 是一个实数值,使用高斯(最小二乘回归)
- 如果是二元的,用伯努利(逻辑回归)
- 如果是计数,使用泊松(泊松回归)
等等。
摘要
在介绍性的课程和书籍中,解决方案经常在没有充分理由的情况下强加给读者。从许多不同的资源中寻找线索并理解它们并不容易。希望这篇文章能为有疑问的人提供一个比较全面和直观的答案。学习的目标不仅仅是知道如何,还要知道为什么,这样我们才能在实际应用中概括我们的学习。
这个话题引出了广义线性模型这个更广泛的话题。glm 是一类强大的模型,没有像深度学习一样受到关注。在许多情况下,正确应用 GLMs 可以完成工作,同时使您的生活更加轻松。与深度学习技术相比,GLM 的优势在于数学的简单性和经过充分研究的可解释性。对基础理论的深刻理解也可以帮助机器学习研究人员和实践者开发新的方法。如果你有兴趣进一步探讨这个话题,我推荐 Philippe Rigollet 的麻省理工学院 18.650 应用统计学讲座和我的参考资料。坚持学习!
参考
- 主教。模式识别和机器学习。斯普林格,2006 年。第四章。
- K. P .墨菲。机器学习:概率观点。马萨诸塞州剑桥。[美国]:麻省理工学院出版社,2013 年。
- 吴恩达的机器学习讲座和笔记,第一至第三部分。
- 罗德里格斯(2007 年)。广义线性模型讲义。网址:http://data.princeton.edu/wws509/notes/
- 麻省理工学院 18.650 统计学应用讲座菲利普·里戈莱特https://www.youtube.com/watch?v=X-ix97pw0xY
为什么智能软件在人工智能炒作了十年之后仍然让风投们兴奋不已
奥尔加·塔科夫斯基(Olga Tarkovskiy)描述的 Gartner 炒作周期。
竞争的加剧和对盈利能力的重新重视将使智能软件成为首席执行官们的首要任务
竞争将加速智能软件的采用
公司赚取利润要困难得多。过去 20 年,竞争扭曲了利润分配。前 10%的公司现在贡献了 80%的利润。虽然企业利润名义上将继续增长,但利润率预计将从 GDP 的 10%上升至 8%。数字化和采用智能软件是生存的关键。
高管们知道这一点,也有压力。Gartner 最新的首席执行官调查显示,与前几年相比,盈利能力成为重中之重。不幸的是,削减人员和预算是实现这一目标的首选手段。幸运的是,技术被视为下一个最佳解决方案。我认为智能软件是最好的解决方案。
什么是智能软件?它是一种软件,使用独特的内部和外部数据源,通过数据驱动的洞察来交付业务成果。人工智能的商品化和云服务提供商的可用性使得创建智能软件比以往任何时候都更容易。
智能软件有真正的价值。麦肯锡的研究显示,只有 3%的公司是“人工智能高绩效者”,即在商业活动中采用人工智能的公司。这些公司的收入增长或成本节约超过 10%的可能性是其他公司的三倍或四倍,这对利润率有明显的影响。
虽然人工智能已经成为精灵之尘近十年了,但它的应用还没有跟上。58%的公司在至少一个职能或业务部门的流程或产品中嵌入了至少一项人工智能功能。有多少人收养了两个或更多?30%.五个以上?3% 。企业距离前沿还有很大差距。这意味着企业家仍然有很大的空间来构建下一代智能软件,以定义行业和专业人士的工作方式。
我感兴趣的智能软件类型
智能商务应用
运营需要更加高效。但这意味着什么呢?这意味着公司职能部门需要更有效率——财务、人力资源、营销等。例如,将处理发票的时间从一天减少到一秒钟。在过去的十年中,IBM 和甲骨文公司在业务流程管理软件上投入了数十亿美元,但仍有很大一部分工作是自动化的。以目前的人工智能能力,超过 50%的这些活动可以自动化。企业家们发现了这一差距,并开发了三类我称之为商业运作软件的软件:横向的、跨职能的和功能性的。
横向一直是 UiPath、Signavio 和 AppSheet 的 RPA/BPM/No-code 方法。企业中有多个流程,在整个企业的单一界面中拥有自动化功能是一个强大的工具。
跨职能是指跨越不同职能的流程。合同管理就是一个很好的例子。DocuSign 是这方面的先驱,现在我们看到像 Lexion 这样的下一代创业公司正在利用机器学习的最新进展,从复杂的文件中准确提取信息,以提醒相关方履行义务。
功能性是指解决特定功能流程的解决方案。例如,应用程序跟踪系统主要是为人力资源团队设计的。Greenhouse 是这一领域的先锋,现在我们看到了下一代智能软件。Checkr 通过自动化流程和使用 NLP 对刑事指控进行分类,使用机器学习来加快背景调查。有 200 种独特的方式来报告指控被“驳回”。
GTM 软件(销售和营销)将继续令人兴奋,因为增长仍然是重中之重,但盈利能力的重新重要性将使商业空间更加令人兴奋。
智能垂直应用
解决特定行业痛点的垂直应用也很有吸引力。一些行业在数字化方面继续落后,更不用说人工智能了,因为数字化是先决条件。这为拥有领域和机器学习专业知识的创始人提供了一个机会,他们可以开发专有的数据集和解决方案,与现状相比,这些数据集和解决方案具有更大的优势。竞争迫使数字化程度较低的公司加快采用智能软件。发展缓慢的行业已经见证了“全栈”创业颠覆了他们的行业。零售领域的亚马逊 vs 沃尔玛。交通领域的优步 vs 出租车。现在,我们看到它发生在数字化和生产率增长较低的地区。物流领域的 Flexport。医疗保健的发展。农业中大量存在。
以下是一些初创公司构建智能应用来解决制药和农业领域特定流程痛点的例子。这些行业尤其令人感兴趣,因为它不仅与提高企业利润密切相关,还与直接拯救和改善生活密切相关。
在制药领域,FDA 要求在批准治疗前进行广泛的临床试验。每年有数以万计的患者注册,然而 85%的试验被延迟,主要是由于患者招募的延迟。每一天的延误都会造成几十万到几百万的损失。Deep 6 AI 将不同的数据集缝合在一起,在几分钟内而不是几个月内识别出高质量的预期患者。通过使用公共和专有数据集模拟合成对照患者,Unlearn Health 更进了一步。这不仅使所需的患者数量减半,而且也给了所谓的对照组患者接受有效治疗的机会,而不是被排除在对照组之外。
在农业领域,Aquabyte 通过使用高分辨率计算机视觉来计算海虱(对鲑鱼来说是一种致命的寄生虫),确定鱼的健康状况,并优化饲料数量,从而提高了养鱼效率。Taranis 为农场提供叶片级分辨率的航空影像,以便更好地管理作物。它甚至可以识别和计算一片叶子上的昆虫数量。每年因病虫害造成的损失高达 3000 亿美元。
开发智能应用程序的工具
随着数据成为智能软件的中心,我们需要工具来处理数据太少的问题,以及最近出现的数据太多的问题,也就是数据扩充的问题。在过去的几年里,数据标签公司作为交钥匙解决方案出现。最近,出现了两种互补的解决方案,它们采取了不同的方法:模拟生成更多的数据,以及(由于缺乏更好的术语)数据压缩——不是魔笛手意义上的压缩。模拟是一种相对更成熟的解决方案,像 MightyAI(被优步收购)和 AI Reverie 这样的计算机视觉初创公司提供了建立更好的计算机视觉模型的解决方案。数据压缩有不同的观点,因为数据越多不一定越好。保留好的数据,扔掉坏的。像 Gradio 这样的公司评估未标记的数据,并丢弃无用的数据。它不仅提高了模型精度,还降低了存储成本,加快了模型训练。
即将到来的深度潜水
在接下来的几个月里,我将深入探讨我感兴趣的特定领域,并更多地讨论每个领域背后的驱动因素。如果你正在一家初创公司从事所讨论领域的工作,你会很乐意与人交谈,只是呆在外面。
注:观点是我自己的。同样在 kenn.io.
为什么中小型企业必须采用不同于大型企业的分析方法
许多人在一级防范禁闭期间开始学习新技能,其中最受欢迎的是数据科学。唯一的问题是,这些课程通常是基于大公司使用的方法,因此对中小企业不实用。
原因:外推
好吧,为什么?
想象一下,有一袋 5 公斤重的大米,每一粒大米都代表你的产品/服务的一个潜在客户。一粒谷物的质量代表了潜在客户的预算。
你的公司需要知道单个颗粒的平均质量是多少。这代表了潜在客户必须花费的预算。
你购买 50 克大米作为测试数据集,测量每粒大米的质量并记录下来。这需要一段时间,但你会完成的。
(免责声明:数据科学不是一个简单或容易的过程,请做好长时间投入的准备,因为“在 10 分钟内构建一个tensor flow机器学习模型”的文章听起来很好,但在现实世界中并没有那么简单。)
你算了一下,完美的工作完成了!您的公司预算购买米粒,但是您发现每粒米粒的质量低于您在测试中计算的平均值。因此,此次购买的投资回报低于预期。
你的方法没有任何问题,但是你做了一个危险的假设:
“你的测试数据集代表了大米的整体。”
为什么这很重要?SME 通常没有能力收集足够的测试数据来获得整个数据集的代表性样本。
**这就是中小企业与大企业的差距所在,因为中小企业的预算限制意味着这些测试只能在一小部分潜在客户身上进行。然而,对结果的解读方式往往与大型企业相同,在大型企业中,结果代表了更大比例的潜在客户 。
作者图片
这对大公司有用,因为他们的预算足够高,可以接触到一定数量的潜在客户,从而对其他人的行为做出良好的预测。对于中小企业来说,预算并没有延伸到这一步,他们往往连 1%的潜在客户都达不到。
这个概念被称为外推,是一种有用的技术,但只有当您外推的数据代表整个数据集时才有效。
作为一个中小企业,你正处于一个两难的境地。你没有足够的预算来获得足够的数据,所以推断可能会给你带来不正确的结论。然而,如果没有一些数据,你会觉得你在完全盲目地做决定。
对于 SME 来说,思考你的方法是至关重要的。如果你是在推断,了解你的样本代表真实数据的比例是很重要的。使用我之前的例子,首先确定有多少米粒存在,然后看看你的样本代表的比例。
如果有 5 公斤的大米,但您的测试数据只有 5 克,那么当应用于 5 公斤的大米时,测试结果不太可能相似。这将根据数据而变化,有时数据点的变化会小得多,因此你不需要太多的测试数据来做出可靠的预测。
我想说的是,你可以使用最先进的分析和统计技术,但是如果你不考虑你要解决的问题的背景,那么你的模型再好也没用。在现实世界里是行不通的。
那么,中小企业能做些什么来解决这个问题呢?
- 首先花更多时间了解问题,而不是直接构建解决方案。相信我,从长远来看,会让你少很多痛苦。
- 不要孤军奋战,有比大多数人意识到的更多的数据。寻找公共数据或与其他 SME 合作,你拥有的数据越多,你就能更好地理解问题。(Twitter API、世界银行数据集、政府数据集、Data.world 都是很好的起点,不会让你付出任何代价)。**
- 除非你有真正可证实的证据来支持你的主张,否则不要做任何假设。分析的目标不是确认你的偏见(有意识或无意识),而是理解实际发生的事情。
如果你有兴趣讨论文章中提到的任何事情,以及它可能对你的组织产生的影响,请不要犹豫,通过LinkedIn联系我。
为什么在冠状病毒的时代,空间是特殊的
不,我不是指带有地图的仪表盘,而是更深刻的方式。
Patrick Assalé 在 Unsplash 上的照片
我相信你注意到了地图在几乎每个新冠肺炎仪表板或数据可视化中的普遍使用。如果你已经看过著名的约翰·斯诺(John snow)1854 年的《流行病学之父——伦敦霍乱地图》,那么空间数据分析如何帮助抗击流行病就不足为奇了。
然而,地理或空间数据科学正在以更微妙的方式帮助对抗这种疫情,这些方式并不在聚光灯下,比如一直存在的仪表盘和新冠肺炎案例的其他数据可视化。
我的意思是,我们往往会忘记全球范围内的流动模式,这些模式可以加强对病毒传播的研究和预测。我们也有更频繁的卫星重访世界各地,以监测人类活动。让我们对空间数据科学进行一些创新性的使用和应用,以应对新冠肺炎大流行。
隔离状态下的流动性
尽管对智能手机跟踪数据的隐私问题感到担忧,但它们在新冠肺炎下的使用让我们对社交距离措施下人们的运动有了无与伦比的洞察力。事实上,国家利用这些可用的技术和移动数据集来研究或预测流行病的传播和规模。最近,欧盟委员会规定利用手机的移动数据来应对新冠肺炎的流行病。
聚合的和去匿名化的数据集已经通过不同的计划提供,例如脸书的永久数据和谷歌的新冠肺炎社区移动性报告。
为了应对流行病,流动性是我们需要的一项重要信息。正如研究显示的那样,使用在线社交网络等这类数据集被证明对流行病学家和其他希望预测新冠肺炎等疾病传播的人很有用,一项使用脸书数据的研究表明了这一点。
社会联系指数——脸书
以脸书的社会联系指数为例,我们可以了解人们的一般运动模式,还可以模拟概率并预测疾病通过人际接触传播的可能性。
社会联系指数衡量两个地理区域之间的联系强度,以脸书友谊纽带为代表。这些联系可以揭示关于经济机会、社会流动性、贸易等方面的重要见解。(脸书数据为好)
意大利的社会联系例子。
社区移动性报告——谷歌
谷歌还在网上发布了社区移动报告,在新冠肺炎会议期间,世界上大多数国家都可以使用。测量了 6 种类型的移动性(零售和娱乐、杂货店和药店、公园、公交车站、工作场所和住宅)的增减。从伦敦谷歌社区移动性报告的摘录中可以看出,除了居住区,所有这些群体的移动性都有所下降,我们可以看到居住区在家的时间有所增加。
因此,流动性数据不仅可以使我们了解人类在这些困难时期的流动性和行为,还可以帮助建模和研究新冠肺炎的传播以及社会距离预防措施如何影响疾病的传播。事实证明,这些数据集对于解决和减少这种疫情的传播至关重要。
从卫星图像上鸟瞰
从太空观察冠状病毒的影响也是另一个空间数据科学前沿,它说明了这种流行病对世界经济和社会的深远影响。卫星图像可以从鸟瞰图揭示生命是如何在这个疫情下停止的。由于许多集会被取消,通过卫星图像可以很容易地看到空的地方。
麦加大清真寺,或称哈拉姆清真寺,位于沙特阿拉伯的麦加。左(2 月 14 日),右(3 月 3 日)——来源
研究我们在哪里看到最高的下降活动,并应用深度学习和人工智能来检测和分类冠状病毒对这些地方的社会经济影响,对于等待我们的漫长恢复过程至关重要。
气候和新冠肺炎
卫星图像的另一个重要的微妙洞见是人类活动的完全停止如何影响环境。对于气候研究人员来说,这是一个研究气候动态的好时机。由于监测大气的卫星任务的发射,我们现在可以收集和探索人类的足迹和气候。例如,由欧洲航天局(欧空局)和荷兰共同资助的对流层监测仪器(TROPOMI)公开提供的 sentinel 5 数据。
2019 年新冠肺炎和去年西班牙的二氧化氮排放量— 来源
结论
迄今为止所做的空间分析只是冰山一角,使用移动数据集和地球观测数据来揭示这一时期社会经济变化的隐藏模式和见解有着巨大的潜力。世界各地可用的开放和免费的空间数据集在研究和绘制不同交通方式、连通性和移动模式的变化,以及深入了解社会距离和隔离的真实世界动态方面具有更大的潜力。
在抗击新冠肺炎的战斗中部署空间成分的微妙和不那么微妙之处,可能会在冠状病毒疫情期间引出许多未解的问题。为什么世界各国不同地区的死亡率差异如此之大?地理、天气、人口年龄分布、生活方式等条件如何影响冠状病毒的传播或遏制?
编者注: 走向数据科学 是一份以研究数据科学和机器学习为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里 。
参考
[1]http://pages.stern.nyu.edu/~jstroebe/PDF/SCI_and_COVID.pdf
[2]https://science . science mag . org/content/early/2020/03/25/science . abb 4218
为什么专门的数据科学项目令人失望
来自多位数据科学家的想法
我收到的最常见的问题之一是:
我应该参加数据科学训练营或大师赛吗?
我通常建议人们避免这些专门的数据科学项目,因为它们倾向于缺乏严谨性来为学生准备快速发展的数据科学世界。
我认为这些程序极其昂贵,试图利用数据科学热潮。因此,比起培养学生,他们更关注钱。
然而,我不确定我是否过于偏见,所以我在 LinkedIn 上提出了这个问题。我被回复的数量惊呆了。事实上,它们是如此之好,以至于我想试着提供一个总结和一些额外的想法。
不过,总的来说,大多数人似乎同意这些程序通常令人失望,并且没有提供成为一名成功的数据科学家的必要元素。
坚实的基础是关键
到目前为止,我看到的最大趋势是建立基于数学、统计学和计算机科学的基础的重要性。
RiskLens 的首席数据科学家 Tyler Byers 说:
我拿到了 DS 的一半硕士学位。与现有的各种 MOOC 选项相比,我对缺乏严谨性感到非常失望,尤其是考虑到价格问题(edX、Coursera、Udacity 一直是我的首选)。
似乎这些专门的项目通常并不专注于建立一个强大的技能基础,而是试图用足够的知识教授最热门的领域。例如,能够拼凑足够的 Keras 代码用于图像分类。
虽然我认为每个人都需要从某个地方开始,但如果你的学习就此止步,你将没有做好进入数据科学领域的准备。
正如乔·里斯所说:
扎实的数学背景很有帮助。我会说学习基础知识——数学、统计学、计算机科学。
我完全同意。感觉就像最先进的技术每周都在变化,如果你不从根本上理解这些模型是如何工作的,你就无法随着事情的变化而适应和调整。
这更像是给某人一条鱼,而不是教他或她钓鱼。你可能会离开一个有一些额外技能(鱼)的专业项目,但这些技能在进入劳动力市场时很快就会显示出缺乏深度。
也就是说,如果你找到一个专门的数据科学项目,提供强大的基础课程,如统计,微积分和线性代数,这可能是非常好的。
事实上,乔·赫勒在乌达城的纳米度中发现了价值:
Udacity 有一个纳米学位项目,它像关注 w 框架 API 一样关注数学。我很喜欢,也学到了很多。
另一方面,如果你看到的都是高水平科目的课程,你可能会去别处看看。
工作组合
这些类型的项目似乎做得很好的一个领域是确保每个学生在结束时都有一个项目组合。这很好,但是你可以用更少的钱达到同样的效果。正如马特·哈里森所说:
Y 你需要一些能给你带来作品集的东西来谈论。如果你很有动力,你可以免费这么做。💰⌛大多数人积极性不高,因此需要花钱才能感到有动力。MS 和 bootcamp 都能给你一个作品集。(反过来也一样)。🤔🏋️🐍
我完全同意。网上有大量令人惊叹的课程,它们将帮助你获得建立优秀投资组合所需的技能。而且大部分都是免费的!然而,你从自学中得不到的一件事是与一个受人尊敬的项目的联系。虽然这看起来没什么大不了的,但是通过最初的简历筛选是很重要的。
我认为这是专业项目失败的另一个领域。大多数都不是知名大学,即使项目很好,也更容易被招聘者忽略。有趣的是,少数与名牌大学相关的专业似乎缺乏严格性,除非它们是统计学或计算机科学等更传统学位的一部分。
此外,虽然您可能会从数据科学训练营获得一系列工作,但我发现对项目的理解往往是肤浅的。通常,它们需要你做足够的工作来让它工作,但不是真正理解你所开发的东西的内部工作原理。
软技能很重要
Ryan Russon 强调了软技能的重要性:
我可以说,我在美国海军获得了一些最有价值的经验,因为在那里我真正学会了如何有效地与人们和他们的期望合作,这也是我认为数据科学的真正价值所在。
几乎所有的技术课程都忽略了这一点,并且很少帮助学生发展软技能。不过,我认为这可能是一个专业项目具有优势的领域。
他们似乎试图变得更全面,我见过一些课程更侧重于领导力和沟通。这太棒了!但是通常缺乏基本的技术知识。要是有一个既能提供扎实的基础知识又能提供软技能培训的项目就好了。
保持好奇
最后,从评论和想法中可以清楚地看到,无论你选择什么样的项目,你都必须保持好奇心,并不断学习。
学习不会随着你的正规教育而结束。
因此,无论你选择如何学习数据科学,我希望你可以将你对该领域的热情融入到学习生活中。
不过,总的来说,如果你想继续深造,我会确保你选择的任何项目都能提供严谨的基础知识、你有深厚知识的工作组合,还有一个额外的好处——帮助你建立软技能。
不幸的是,似乎大多数专业项目目前都没有达到目标。
你可以在这里看到关于这个主题的所有评论。
这篇文章也可以在这里找到。
加入我的 邮箱列表 保持联系。
如何在 SQL 中创建带参数或不带参数的函数
调试这个简单的错误可能会浪费您几个小时的时间。
你不应该经历我在学习用 SQL 编写函数查询时的痛苦经历。在我最终发现括号花费了我很多时间之前,我已经花了很长时间仔细研究了我写的查询。
在本文中,通过查询示例,您将学习如何用 SQL 编写带参数或不带参数的函数。我找出了浪费我时间的简单错误。
下面的查询是一个没有参数的函数,它对 sales 列中的销售额进行求和。我使用了 AdvertureWorks 2012 数据库——销售。SalesTerritory 表—在本教程中。
注意:您可以使用任何其他数据库来遵循本教程。
如何在 SQL 中创建不带参数的函数
第一行创建了一个函数,然后将其命名为“YTDSALES()”。你可以给你的函数取任何名字。当没有参数时,记得在函数名中添加括号。
在下一行中,写下单词“RETURNS ”,后跟您想要的任何名称。我在这里用了" MONEY ",因为我想得到钱的总数。接下来写下关键字“AS”和“BEGIN”。
“将@YTDSALES 声明为 MONEY”出现在第 5 行。您可以将“@”与您选择的任何单词一起使用,而不一定是“@YTDSALES”。
以“SELECT @YTDSALES =”开始第六行,后跟列(SalesYTD),您希望在括号前加上“sum”。你应该包括表(销售。SalesTerritory),它包含列(SalesYTD)。
然后写“RETURN @YTDSALES”和“END”完成函数。运行您的查询。您将看到“命令成功完成”在你的屏幕上。
您刚刚创建了一个函数。要运行您的函数,请运行以下查询:
在上面的第一行,您可以给“@RESULT”起任何名字。
记得包括“dbo”你的函数名。在这种情况下,它是 dbo。YTDSALES()。创建函数时检查第一行,以了解函数的名称。这里,YTDSALES()是函数的名称。
将“PRINT @RESULT”作为查询的最后一行。
运行查询,您将获得指定列中数字的总和。
如何在 SQL 中创建带参数的函数
带参数的函数可以直接提取准确的信息。编写带参数的函数和不带参数的函数几乎是一样的。下面指出两者的区别。
首先运行上述查询来创建一个函数。
运行以下查询查看结果:
带参数的 SQL 函数和不带参数的 SQL 函数的区别之一是括号—()。注意上面查询的第一行,与带括号的查询函数不同,它没有括号!如果您错误地添加了一个括号,您将得到以下错误消息:
要亲身体验这个错误,请在上面创建的函数的第一行添加括号。
其他的区别是这里使用的“组”和“太平洋”这两个词。为了澄清起见,“GROUP”是列的名称,“Pacific”是“GROUP”列中要从中获取数据的地点名称之一。
当查询是有序的(没有括号)时,创建的带有参数的函数给出“Pacific”区域的总数。
结论
带参数的函数和不带参数的函数之间的差别很小。没有参数的函数的第一行以空括号结束。带参数的函数的第一行没有括号。请注意这一差异以及本文中提到的其他差异,以避免花费大量时间调试函数查询。
为什么回火稳定分布?
来源:无限可分分布?[ 点击
迈向稳定的分销之旅#0
资产收益的应用:为什么不是正态分布和稳定分布?
嗨,我是卢武铉( ρ )!欢迎来到“稳定分销之旅”系列
在写这个系列的过程中,我周围的人让我写一篇文章,解释为什么需要它而不涉及数学,我决定总结一下,放在第 0 部分。因此,在这里,我们要讨论的是为什么我们需要“回火稳定分布”。此外,我将尝试在不涉及数学方程的情况下进行解释。
我们开始吧!
来源:什么是厚尾分布?[ 点击
我宁愿从为什么(不是)正态和稳定分布开始,因为调和稳定分布是为了克服这两种分布在资产回报建模中的缺点而开发的。
资产收益分布的尾部比正态分布重,但比稳定分布薄(Grabchak 和 Samorodnitsky,2010)
为什么(不是)正态分布?
- 正态分布使用方便。两个正态变量的和也是正态的,这在金融应用中很重要 1) 两只股票的和将遵循高斯分布假设股票是高斯的 2)根据对数收益的定义,今天的收益可以写成前“n”天收益序列的和。
- 易于以封闭形式计算各种风险度量(如 VaR 和 es)
- 资产收益不是正态分布的。 不适合对分布具有非对称、偏斜和尖峰特性的资产收益建模
- 尾巴 较轻,即它衰变得太快 (如果你不熟悉尾巴,请查阅第一部分 这篇文章 )
为什么(不是)非正态稳定分布?
- 优于正态分布。它允许控制分布的偏斜、厚尾和对称程度。
- 采样频率不一致! 经验估计的尾部指数似乎对更频繁的回报较低,对不太频繁的回报较高(Gencay 等人,2001)。
- 这意味着你可能会发现每日(不太频繁)的回报有一个有限的方差,而微观二次抽样序列的回报有无限的方差。[ 尾巴悖论 ]
- 对于非正态稳定分布,方差和高阶矩都是无穷大!然后发生了什么?
金融应用中的无穷方差问题
如果我们在金融应用中没有有限方差,会发生什么?两个最常用的金融应用变得毫无意义。
均值-方差投资组合构建
- 如果方差(和高阶矩)不是有限的,就不能定义均值-方差投资组合。
期权价格建模
- 为了获得定义良好的期权定价模型,收益分布的均值、方差和高阶矩必须存在。
我们想要什么?
让我们通过对稳定分布的尾部做一些事情来使矩(例如,均值和方差)是有限的,这样我们就有了具有较轻尾部的“类稳定”分布。
由卢武铉编辑,来源:Pixabay
怎么做?方法有很多!
修改尾巴!!怎么会?
1.截断尾部
2.在尾部乘以更快的衰减函数
3.翘起尾巴
更多详情,请参见[ 点击
一些插图
我提供两个例子。第一个是截尾,第二个是 TS 分布的尾部比稳定分布轻,比正态分布重。
截断尾巴!
资料来源:M. Grabchak,卢武铉编辑
正态< TS < Stable
We can see from the below graphs (log scale) that the 回火稳定分布位于尾部正态分布和稳定分布的中间。
资料来源:计算统计手册(第 1031 页)
为什么(不)回火稳定分布?
- 能够控制一个偏斜的、肥胖的尾巴的水平,并且分布对称
- 它有有限的时刻!
- 像稳定分布一样,只有特征函数是已知的。
- 密度或分布函数不存在封闭形式的公式。
- 利用快速傅立叶(FFT)技术进行最大似然近似时,统计推断的难度
最后,这里列出了一些类型的调和稳定分布。
1 + 6 种 TS
- 平滑截断稳定分布(STS)
- 经典 TS (CTS)
- 广义经典 TS(GTS)
- 修改后的 TS (MTS)
- 普通 TS (NTS)
- 快速下降的 TS (RDTS)
- 基姆-拉切夫 TS
摘要
我们讨论了为什么需要“缓和稳定(TS)分布”。我希望这份文件对你有帮助。如果你有任何问题,请在下面评论。我希望你对接下来会发生什么感到好奇。下一次,我将带着“稳定分布之旅[部分。1:什么是厚尾分布?”【点击
参考
- 风险值计算中的重尾分布,2010,A. Misiorek 和 R. Weron
- 米(meter 的缩写))Grabchak 和 G. Samorodnitsky (2010 年)。“财务回报的方差是有限的还是无限的?一个悖论和一个解释。”量化金融 10(8):883–893。
- 资产管理和风险管理中的重尾分布手册,2019,S. Stoyanov 等人。
- 《金融模型百科全书》(第 3 卷),241-258 页,2012 年,弗兰克。法博齐
我还为上面所有的参考资料添加了超链接。有关详细信息,请查阅参考资料。如果有我错过的任何事情,我将稍后更新参考。
感谢您阅读本文档。如果你觉得这个文档有用,不要忘记分享它。
为什么特斯拉不使用激光雷达
哪种技术最适合自动驾驶汽车
戴维·冯迪马尔在 Unsplash 上拍摄的照片
几乎每一家从事无人驾驶汽车的公司现在都在使用激光雷达。优步、Waymo 和丰田都用它,但特斯拉不用。我想回顾一下这两种相互竞争的技术能够提供什么,以及我们应该对未来的自动驾驶汽车有什么期待。
激光雷达与视觉
激光雷达是一种通过发射激光并检测它们返回需要多少时间来测量距离的方法。这个想法类似于雷达,但我们使用的不是无线电波,而是激光。这项技术在探测甚至高达毫米的物体时非常精确。
计算机视觉是人工智能的一个领域,训练计算机理解视觉世界。这基本上是对人类视觉的逆向工程。
特斯拉的愿景
(埃隆·马斯克在特斯拉自主日)
特斯拉一直严重依赖视觉,并与激光雷达传感器背道而驰。与此同时,所有其他公司使用激光雷达,似乎并不关心。埃隆·马斯克甚至说:
激光雷达是一个傻瓜的差事…任何依赖激光雷达的人都注定要失败。——埃隆·马斯克
如果你想了解埃隆对技术选择的所有想法,请务必查看他在特斯拉自主日的讲话。
费用
照片由 Pepi Stojanovski 在 Unsplash 拍摄
特斯拉另辟蹊径最明显的原因是成本。在汽车上放置一个激光雷达设备的成本大约为10,000 美元。谷歌及其 Waymo 项目已经能够通过引入大规模生产来略微减少数量。然而,成本仍然相当可观。
特斯拉高度关注成本,确保人们买得起汽车。在已经很贵的汽车上增加激光雷达的价格意义重大。
实际道路应用
照片由 Charlie Deets 在 Unsplash 上拍摄
最重要的一点,也是会议中高度强调的一点,就是与人类视觉的相关性。作为人类,我们不会为了开车而朝各个方向发射激光。正如埃隆·马斯克所说,汽车也不应该。
我们在路上看到的一切都充满了视觉信息。所有的标志,转弯,十字路口都是为了帮助我们导航。所有这些都是静止的物体,激光雷达能够如此精确地探测到它们真是太好了。
当移动物体出现在路上时,问题就开始出现了。人、狗、飞来飞去的塑料袋,都是我们在路上经常遇到的物体。激光雷达无法探测它们是如何移动的,甚至无法探测这些物体是什么。
激光雷达无法区分道路颠簸和塑料袋。这是会议中提到的一个例子,考虑到这一点非常重要。如果我们在高速公路上高速行驶,并且有一个塑料袋,我们不需要快速停车。如果我们撞上了,问题不大。
现在,如果汽车停下来,真正的危险就来了。后面的车可能无法对我们在路中间停车做出如此迅速的反应。这种情况进一步证明了制造自动驾驶汽车时对细节的关注。
特斯拉明确表示,他们的相机和雷达系统能够检测到一个物体是什么。向前看的雷达能够迅速判断前方是否有问题。一旦一个物体进入视线,摄像机将决定这个物体是什么,然后汽车可以对这种情况做出反应。
适应
从 Autonomy Day 和埃隆·马斯克的其他采访中,另一个重要的收获是,系统是为了适应而生的。他们谈论了很多关于所使用的神经网络以及该系统如何能够使用所提供的数据来做出合理的决定。
特斯拉竞争对手的一个大问题是缺乏这种适应能力。这些系统中的大多数要么严重依赖带有道路线的高精度地图,要么从未在真实道路上测试过。是的,我们已经看到 Waymo 在城市中行驶。然而,只有大型道路具有高效率的地图。在这些演示中,照明、天气条件和交通都很理想。大多数人不会每天都在这样的路上开车。
更小的道路,有意想不到的转弯和大小变化的车道,更为常见。另外,特斯拉是一辆你可以买到的真车。人们已经驾驶特斯拉汽车行驶了超过 10 亿英里,而 Waymo 只测试了大约 1000 万英里。
特斯拉能够积累的大量困难且不可预测的道路数据是无价的。这就是系统学习和不断改进的方式。这种概念实际上很有前景,因为客户实际上看到了不断的改进。
准确(性)
Jannes Glas 在 Unsplash 上的照片
从康奈尔大学发表的一篇研究论文中可以推导出另一个有趣的观点。本文讨论了如何使用立体相机生成几乎与激光雷达地图一样精确的 3D 地图。
我们可以从这篇论文中得出结论,除了花费 7500 美元购买激光雷达设备,您还可以购买几台仅花费 5 美元的相机,并获得几乎相同的精度。因此,当特斯拉的人说这种硬件很快就会过时时,他们可能有道理。
最后的想法
随着自动驾驶汽车领域投入了多少资金,以及竞争的不断加剧,我们可以相当乐观地认为,这种汽车正在到来。特斯拉是否会成为这样做的公司,我们无法知道,甚至可能不需要知道。事实上,可能有几种方法来开发无人驾驶汽车。我们甚至可能最终看到两者的结合,这并不令人惊讶。
说到特斯拉,我们实际上可以购买这样一辆车。他们被带到世界各地,实际上可以实时观察到进展情况。你不能买 Waymo 或优步汽车。
特斯拉的决定的原因包括在这里,但这并不意味着我们都应该赌特斯拉。也许其他一些公司会先制造出自动驾驶汽车。我们所知道的是,一些公司会这样做,我们应该密切关注该领域发生的一切。
参考资料:
[1]王,杨,曹伟林,加尔格,d,哈里哈兰,b,坎贝尔,m .,&温伯格,K. Q. (2019)。来自视觉深度估计的伪激光雷达:弥补自动驾驶 3d 物体探测的差距。在IEEE 计算机视觉和模式识别会议论文集(第 8445–8453 页)。
[2]自动驾驶评测。(2019 年 4 月 27 日)。 Elon Musk 在相机上对比自动驾驶和自动驾驶汽车的激光雷达[视频]。YouTube。https://youtu.be/HM23sjhtk4Q
[3]霍金斯,A. J. (2019)。Waymo 将向不会与其机器人出租车业务竞争的客户出售激光雷达。2020 年 09 月 07 日检索,来自https://www . the verge . com/2019/3/6/18252561/waymo-sell-lidar-laser-sensor-av-customer-robot-taxi-competition
测试如何完全扭曲冠状病毒致死率
加速测试势在必行。
在传染病爆发期间,如世界目前正在经历的新冠肺炎疫情,了解疾病的致命性至关重要——人们希望知道他们感染疾病后死亡的可能性。使用多种不同的方法来评估这一点,在本文中,我们将描述这些方法,并讨论与获取这些指标相关的困难。
测量杀伤力
疾病致死率有三个主要的衡量标准:病死率(CFR)、感染致死率(IFR)和死亡率(MR)。死亡率可以通过死亡人数除以总风险人口来计算。这告诉我们一个人在人群中死亡的概率。另一方面,CFR 使用相同的分子,但将其除以确诊病例数。也就是说,它表示一个人被感染(并报告它)而死亡的人的百分比。IFR 与 CFR 相同,只是它将死亡人数除以感染总人数。这考虑到了被感染的人,无论他们是否报告。在一个没有病毒病例未被发现并且所有病例都被报告的世界里,IFR 和 CFR 将是等同的。然而,正如我们将要讨论的,这是很难实现的,因为现实中并不是所有的感染都被考虑在内。
测量死亡率
为了测量死亡率,我们首先需要了解感染期间事件的时序。
感染期间的事件年表
这种疾病发病过程的年表有助于我们理解测量真正的发病至死亡间隔的困难。下面是时间表的分解(图 1)。从患病到康复/死亡,整个过程可能需要 2-6 周。
图 1
感染——病毒在你体内扩散,你被感染了。在这个阶段,你可能甚至不知道你已经被感染了。
B. 显示/不显示症状—您可能会也可能不会显示症状。如果没有症状,你就不太可能去做检查。
C. 接受测试——你可能会接受测试,也可能不会。如果你患有这种疾病,但没有进行检测,CFR 是无效的。如果你没有接受测试,你现在就退出了这个过程。
D. 结果——你得到了你的结果。这种滞后在不同的国家差别很大(在韩国你一天就能得到结果,而在美国需要 3-5 天)。在极少数情况下,可能会出现假阴性——例如,如果你是阳性,测试会返回阴性结果——但这种情况非常罕见,几乎可以忽略不计。
E. 住院——根据您病情的严重程度,您可能需要住院,也可能不需要住院(大约有5–20%的人需要住院)
F. 结果——从那以后,你的症状要么减轻,要么康复,要么死亡。
测试值
在像新冠肺炎这样的疫情期间,不清楚有多少人被感染,这使得很难准确测量 IFR。这是因为有许多没有症状的人没有意识到他们已经感染了病毒。这也可能是因为人们可能无法获得检测,检测结果需要很长时间才能处理,或者他们只是不报告自己的疾病。由于这个原因,IFR 将总是小于 CFR,因为它具有相同的分子和更大的分母。
在理想的情况下,如果人群中的每个人都经常接受检测,那么我们就能准确地知道有多少人被感染了。在这种情况下,IFR 将与 CFR 完全相同。然而,许多患有这种疾病的人(如新冠肺炎的情况)没有接受检测,因此没有被列入病死率的分母。不管原因是什么,这严重扭曲了 CFR。为了进一步了解 IFR 和 CFR 之间存在的差异,让我们来看看不同国家是如何协调对新型冠状病毒的检测的。
各国的检测率差异很大,这严重影响了它们的病死率。图 2 绘制了人均测试的 CFR,它清楚地表明 CFR 随着更多测试的实施而降低。德国、韩国和挪威实施了积极主动的测试。相比之下,意大利也进行了大量测试,但他们的反应是被动的;他们只在情况变得严重时才进行测试。尽管 CFR 可能因医疗保健、感染人群的年龄组合、基础设施等而异。,它很可能无法解释这种巨大的偏差。也就是说,除了其他因素之外,这些国家中的低 CFR 几乎肯定是其测试的函数。换句话说,德国的 CFR 更接近 IFR,而印度尼西亚和西班牙的 CFR 要高得多,因为他们主要测试的是已经患病的人。此外,与反应性检测(只对已经患病的个人进行检测)相比,从感染到死亡的过程在主动检测(国家在大规模疫情爆发前进行检测)下要长得多。
关键测量值如何因测试率差异而变化
图 3: CFR 与发病至死亡间隔的关系
在我最近的工作中,我们通过修改发病到死亡的时间间隔和疾病爆发的增长进行了多次模拟,以确定符合实际死亡人数的发病到死亡和死亡率的组合。我们在瑞士重现了这一点(图 3,4)。图 3 显示了发病至死亡间隔和病死率的组合,其中模型和实际数据最接近。从理论上讲,发病到死亡的时间间隔有很大的范围。
图 4:高斯核密度估计
在图 4 中,我们显示了死亡开始的分布以及高斯核密度估计,该估计最小化了模拟死亡数和实际死亡数之间的差异。我们估计 22 天的发病至死亡间隔是瑞士的最佳估计。图 5 显示了许多其他国家的这一数字,分散在人均检测中(点越大意味着病例越多)。
图 5:发病到死亡的时间间隔与人均检测
这表明发病到死亡和检测的流行之间有很强的相关性;广泛的测试导致更长的发病至死亡持续时间。几乎可以肯定的是,如果年龄结构、医疗保健和基础设施相似,每个国家的发病至死亡间隔应该很接近。这一措施的巨大差异明确表明,在检测较少的地方,发病至死亡的时间几乎肯定比实际时间短。也就是说,只有当人们已经生病时才进行测试。
像冰岛这样的国家,随机测试了 5000 多人,发现大约一半测试呈阳性的人没有症状。包括美国在内的大多数国家只检测那些出现发烧、咳嗽等症状的人。这使得发病到死亡的时间间隔更短,从而增加 CFR。因此,由于在不同国家进行的测试实践的差异,很难获得标准化的数字,使得 CFR 难以估计。
牵连
**我们不应该相信 CFR—**CFR 的变化应该表明年龄、合并症等因素的差异。CFR 目前强烈依赖于测试的事实表明,我们不能依赖 CFR 来确定我们的总体 IFR 或死亡率。
我们应该增加检测— 这不仅能让我们隔离感染者&追踪接触者,还能帮助确定真正的发病至死亡间隔。这将有助于我们计算 CFR。
我们不能相信我们的感染传播模型— 许多预测感染病例数的模型依赖于 R0(基本繁殖数),而 R0 又依赖于传染期的持续时间。然而,这个时间间隔是不可靠的,所以我们不能完全相信这些模型预测的感染数量。
编者注: 走向数据科学 是一份以研究数据科学和机器学习为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里 。
为什么冠状病毒死亡率具有误导性
死亡率可能比我们想象的要高得多。
图片:约翰霍普金斯医学
你可能知道,冠状病毒,或新冠肺炎,是一种导致呼吸系统疾病的新病毒。它的起源可以追溯到 2019 年末的中国武汉。与 SARS、MERS 等其他动物源性冠状病毒不相上下。尽管大多数病例局限于湖北省(武汉是其中的一部分),但它已经蔓延到香港、台湾、日本、德国、美国,甚至可能还有朝鲜。尽管关于该病毒性质及其生长的新细节仍在出现,但我们知道它有一个2-14 天的潜伏期,每个感染者的平均传播次数大致在2-2.5的范围内。截至 2 月 14 日,超过 64,000 人被怀疑/确认感染,近 1400 人死亡。
尽管媒体似乎没完没了地报道该病毒,但许多问题仍未得到解答。真的只有 60,000+确诊病例,还是这个数字被缩小了?死亡人数是否也少报了?病毒每天传播的速度有多快?有多危险?为了让我们准确地衡量它带来的危险,有必要计算病死率(CFR)。即使病毒传播很快,如果人们在感染后没有死亡,它也不是一个大的威胁。
目前,病死率的计算是不正确和误导的。截至目前,是用死亡人数除以感染人数计算出来的。下图显示了湖北省自 1 月 22 日以来的“误导性”CFR。基于这些计算,目前的病死率确定为 2.5%左右。然而,这是不正确的,因为它没有考虑一个非常重要的因素:滞后效应。
数据提供JHU·CSSE
什么是滞后效应?
假设 2020 年 1 月 10 日有 100 个人感觉不舒服。让我们跟踪他们一段时间。他们中的一些人在几天的时间里就病重了。一些人康复了,而另一些人继续生病。如果我们能从现在开始快进一年,我们就能准确知道死于这一群体的人数。大多数患病的人会康复,其他人会死去。在这一点上,你可以计算出这个群体的死亡率,死亡人数与最初被感染人数之比。例如,我们可以用这种方法来计算 2002 年在中国爆发的 SARS 的病死率,因为每个感染 SARS 的人现在要么已经康复,要么已经死亡。新冠肺炎的情况并非如此,因为它仍在继续。
在感染过程中,我们有不同阶段的不同人群。也就是说,昨天刚生病的几千人今天不会死;但是今天死去的人可能来自更早的年代。因此,用死亡人数除以感染人数来计算病死率是完全不正确的。正确的方法是分别跟踪每个队列,确定每个队列的死亡率。当然,当疾病完全停止时,这两种方法就会趋同。冠状病毒的流行正在进行,并没有停止,这种方法不会奏效。相比之下,这将与计算 SARS 病死率的工作。
这是描绘它的图解方式。
数据提供 JHU CSSE
x 轴上是群组成员被感染后的天数(他们都在同一天被感染), y 轴上是群组内的累积死亡率(死亡人数/感染人数)。
报告称,出现症状需要 2-14 天,可能还需要几周左右的时间,否则你可能会死亡。因此,不管队列成员的性质如何,死亡人数在最初几天可能为零。
为了便于说明,我们将看两个不同的组。假设一组是来自武汉的 25 岁男性(通过 2 %的 CFR 建模并在 14 天内达到峰值),另一组代表 80 岁男性的队列(通过 5%的 CFR 建模并在 7 天内达到峰值)。我们可以假设后者会比前者上升得更快,达到更高的高度,并更快达到稳定。这意味着,由于免疫力普遍较低,整体健康状况较差,更多 80 岁以上的老人将会更快死亡。心脏病和糖尿病患者以及长期吸烟者也是如此。除了这些因素(非常老和非常年轻的人表现出更多的脆弱性),群组曲线将随着国家、财富等而变化。
那么,为什么我们不能按队列计算并找到 CFR 呢?
这个想法在理论上听起来很简单:找到每天感染的人数,并在队列水平上跟踪他们,我们就可以得到病死率。在实践中,这有点困难。这里有一些挑战。
- 感染日期:由于潜伏期不一且仍不确定,因此很难确定感染日期。此外,不同群体的症状会有所不同,记录每个表现出咳嗽或发烧等症状的人会非常耗时。由于新冠肺炎没有明确的症状,咳嗽等不明确的症状很可能是流感或普通感冒的症状。
- 被感染的人数:可能有许多人没有接受检测,但却感染了病毒,且下落不明。这甚至更难,因为有些人已经感染,但没有症状。现在,由于武汉人被强制隔离,这稍微容易一些。
- 死亡时间:我们不知道人们死于感染需要多长时间,因为人们出现症状的日期可能不同,即使他们都在同一天感染,也可能在不同的日期报告。
- 死亡的风险随着年龄、健康状况等而变化:病人和老人比健康人更容易受到伤害。如果每个感染队列中不同风险群体的比例发生变化,病死率也会发生变化。
- 死亡风险因地而异:对于任何快速传播的传染病,选择用于确定 CFR 的样本都是有偏差的,因为病毒传播如此之快,影响不同地方的不同人。到目前为止,病死率主要由 1 月份在武汉市感染冠状病毒的人组成。随着病毒转移到不同的地方,死亡率必然会不同,因此,必须代表所造成的威胁,以便采取足够的预防措施。例如,由于人们的免疫力/健康、卫生设施、获得医疗服务的机会等因素,它对索马里人民造成的危险将远远高于对瑞士人民的危险。因此,为了准确评估这种威胁,CFR 应该用每个队列来表示。
理想情况下,我们如何解决这个问题?
我们需要在队列水平上有更多的粒度数据来帮助我们建立 CFR 模型。不幸的是,似乎没有这方面的数据。
三角形图表是按群组计算死亡率的正确方法。我们需要为尽可能同质的群体构建这些三角形图表,以确保某些成员不会扭曲死亡率。年龄、高风险医疗群体和国家是值得关注的细分领域。使用这些,我们可以最准确地测量每组的病死率。
下面是死亡率的三角形图表示例。
数据提供JHU·CSSE
这里,最上面的行描述了较老的组群,较新的组群由较低的行表示。每一列代表他们被感染后的额外一天,方框中的数字代表队列中的累计死亡人数。从右到左对角扫描方框,给出同一天每个群组的数字。
为了对死亡人数进行建模,需要做两个假设。
1)在所有队列中有 5%的病死率。
2)如果有人死亡,他们在感染病毒后 7 天内死亡。此外,数据仅来自武汉所在的湖北省。
数据提供JHU·CSSE
我们可以立即看到最顶行和最底行之间从冷到暖的梯度。这意味着较老的组群开始时规模较小,而较新的组群规模较大,表明了新冠肺炎的扩散。(见上图)
尽管这些信息可以描绘出正在发生的事情的全貌,阐明新冠肺炎病毒传播的基本性质,但该模型有几个不足之处。首先,并非所有信息都可用,因此整行都没有数据。可能有死亡人数没有被计算在内,尤其是在震中武汉。我们很可能大大低估了感染人数。我们也不明白一旦被感染,人们需要多长时间才会死亡。我们不知道老年人和年轻人的组合;健康有病;等等。尽管有缺陷,这个模型仍然是说明性的。
好的,这里有一些初步分析显示数据严重不正确
接下来,我们使用该模型(病死率为 5%,死亡天数为 7 天)来比较湖北省的预测死亡人数和实际死亡人数。
数据提供 JHU CSSE
该图将累积死亡数模型与假定的病死率和死亡时间与北京报告的数字进行了比较。我们的模型,以目前的参数,是惊人的接近。然而,考虑到除死亡时间和病死率之外的大量因素,我们永远无法完全确定真正的数字是多少。以下是一些关键的见解。
- 如果感染人数确实是正确的,那么 CFR 可能远远高于 2.5%,接近 5%甚至更高。
- 如果死亡时间长于 7 天,那么 CFR 将甚至大于 5%,并且可能高达 10%或更高。
- 如果受感染的人数显著增加,CFR 可能会变得非常小(甚至小至 1%)。
应该注意的是,有多种方法可以通过改变这些参数来获得相同的死亡人数。不管怎样,很有可能数据是严重错误的(更多的人被感染)或者我们有一个严重的危机(CFR > 5%)。
外卖食品
- 目前计算新冠肺炎病死率的方法存在固有缺陷,因为它没有考虑滞后效应。
- 提出了一种新的(基于队列的)计算病死率的方法。
- 使用特定参数(5% CFR &死亡前 7 天),模型和实际数据非常一致。
- 这意味着要么病死率比想象的高,要么病例数比报道的高得多。
这里是一个更新,显示了病死率的可能性范围。另一个更新显示温暖的天气不会抑制增长。再来一次更新,我将揭示美国可能会经历多少死亡
编者按:towardsdatascience.com是一家以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家。想了解更多关于疫情冠状病毒的信息,可以点击 这里 。
为什么欧盟必须进一步质疑人工智能中的信任、卓越和偏见
以下是对 2020 年 2 月 19 日欧盟委员会发布的《人工智能白皮书——欧洲实现卓越和信任的方法》的公开回应。该文件可以在这里找到:https://EC . Europa . eu/info/sites/info/files/commission-white-paper-artificial-intelligence-feb 2020 _ en . pdf
信用:【https://ec.europa.eu/futurium/en/ai-alliance-consultation
这份白皮书代表了欧洲人工智能政策的重要转变;从个人权利语言到社会关系语言的转变。我赞扬作者确保欧洲人工智能的未来植根于明确定义的公共价值观和共同的基本权利,如人类尊严和隐私保护。同样,整个文件中的关系语言令人钦佩地表明,委员会在提交建议时认真对待可持续发展目标、欧洲绿色协议和类似多边协议的邀请。该政策文件的两个组成部分是建立一个以“卓越生态系统”和“信任生态系统”为中心的政策框架,这两个组成部分在关系愿景中有很好的基础,表明经济政策框架将代表社会经济范围内各种人口的愿望。
然而,本白皮书中有几个元素可以使用更细微的差别和更有意识的参与。最值得注意的是,在本文档中,术语“信任”明显缺乏定义。虽然信任很重要的论点已经很明确了,但是“信任什么?”和“信任谁?”没有得到充分的回答。同样,围绕多样性、在进一步创建和执行这些建议时身份的平等代表性以及对可能受到影响的各种社区的下游影响,也缺乏重要的社会政治分析。该文件推荐的以人为中心的方法背后的理论是明确定义的,但是在这种方法的创建和应用中,哪些人将被卷入和迎合的问题没有明确说明。人们有理由担心,在制定这种以人为本的方法时,如果不充分关注代表性和多样性,可能会使那些在当前技术环境中已经处于无能为力境地的人进一步边缘化。
我还想请作者在定义“优秀”时更明确一些。该文件认为,欧盟可以通过更有效地与民族国家合作,集中研究和创新社区的努力,提供资源以更好地解决当前经济市场中存在的技能短缺等方式,培育卓越的生态系统。不幸的是,这份文件假设了优秀的定义,但这个定义从未被充分探讨过。这份文件最接近于一个定义,当谈到创建一个生态系统时,它使用一种沿着整个价值链刺激研究和创新的策略,加速采用基于人工智能的解决方案。我批评这种对“卓越生态系统”定义的片面探索,因为我担心没有明确意图的无节制增长对下游的影响。同样,这种片面的定义为经济体系的延续留下了空间,这种经济体系以已经边缘化的、较小的和较新的公司以及地球本身为代价,提升了已经掌权的机构和个人。
最后,我想评论一下委员会对多样性和偏见的分析。该文件正确地指出了解决人工智能技术中的偏见的困难,以及随着人工智能技术在世界各地变得更加普遍,人工智能技术中的偏见可能造成的巨大伤害。然而,作者没有回答这个关键问题,即谁应该对人工智能技术中存在的有害偏见负责,以及欧盟法律应该如何强制解决技术系统中的偏见。我很欣赏人工智能中解决偏见困难的微妙之处,但是我强烈建议委员会增加几个他们建议的解决这些困难的具体机制。
为什么 ETL 的未来不是 ELT,而是 EL(T)
在过去十年中,我们存储和管理数据的方式已经完全改变。我们从 ETL 世界转向 ELT 世界,像 Fivetran 这样的公司推动了这一趋势。然而,我们不认为它会就此停止;ELT 是我们头脑中向 EL(T)的过渡(EL 与 T 解耦)。为了理解这一点,我们需要辨别这一趋势的潜在原因,因为它们可能会显示未来会发生什么。
这就是我们在本文中将要做的事情。我是 Airbyte 的联合创始人,这是即将到来的新的数据集成开源标准。
ETL 有什么问题?
从历史上看,数据管道过程包括提取、转换和加载数据到仓库或数据湖中。这种顺序有严重的缺点。
顽固
ETL 本质上是僵化的。它迫使数据分析师事先知道他们将使用数据的每一种方式,他们将产生的每一份报告。他们做出的任何改变都可能代价高昂。它可能会影响初始提取下游的数据使用者。
缺乏可见性
对数据执行的每个转换都会掩盖一些底层信息。分析师不会看到仓库中的所有数据,只会看到在转换阶段保存的数据。这是有风险的,因为结论可能是基于没有经过适当切片的数据得出的。
分析师缺乏自主权
最后但同样重要的是,构建基于 ETL 的数据管道通常超出了分析师的技术能力。它通常需要工程人才的密切参与,以及提取和转换每个数据源的额外代码。
一个复杂的工程项目的替代方案是在一个临时的、时间密集的、最终不可持续的基础上进行分析和构建报告。
什么改变了,为什么英语教学变得更好了
基于云的数据计算和存储
ETL 方法曾经是必要的,因为本地计算和存储的成本很高。随着雪花等基于云的数据仓库的快速增长,以及基于云的计算和存储成本的直线下降,几乎没有理由在最终目的地加载之前继续进行转换。事实上,翻转这两者可以让分析师以自主的方式做得更好。
ELT 支持分析师的敏捷决策
当分析师可以在转换数据之前加载数据时,他们不必在决定需要获得的确切模式之前预先确定他们想要生成什么样的洞察。
相反,底层的源数据被直接复制到一个数据仓库,构成了一个**“真实的单一来源”然后,分析师可以根据需要对数据执行转换。分析师将总是能够回到原始数据,并且不会遭受可能会损害数据完整性的转换,**让他们放手去做。这使得商业智能过程无比灵活和安全。
ELT 在整个公司推广数据素养
当与基于云的商业智能工具(如 Looker、Mode 和 Tableau)结合使用时,ELT 方法还拓宽了对跨组织的通用分析集的访问。即使相对非技术用户也可以访问商业智能仪表板。
我们也是 Airbyte 英语教学的忠实粉丝。但是 ELT并没有完全解决数据集成问题,它也有自己的问题。我们认为 EL 需要与 t 完全解耦。
现在发生了什么变化,为什么 EL(T)是未来
数据湖和数据仓库的合并
Andreessen Horowitz 有一篇关于数据基础设施如何发展的精彩分析。这是他们在与行业领导者进行大量访谈后得出的现代数据基础架构的架构图。
作者图片,灵感来自 a16z 的分析
数据基础架构在高层次上有两个目的:
- 通过使用数据帮助企业领导者做出更好的决策— 分析用例
- 将数据智能构建到面向客户的应用中,包括通过机器学习— 运营用例
围绕这些广泛的用例,已经形成了两个并行的生态系统。
数据仓库构成了分析生态系统的基础。大多数仓库以结构化格式存储数据。它们旨在从核心业务指标中获得洞察力,通常使用 SQL(尽管 Python 越来越受欢迎)。
数据湖是运营生态系统的支柱。通过以原始形式存储数据,它提供了应用程序和更高级数据处理需求所需的灵活性、规模和性能。数据湖可以在多种语言上运行,包括 Java/Scala、Python、R 和 SQL。
真正有趣的是,现代数据仓库和数据湖开始变得越来越相似——它们都提供商品存储、本机水平扩展、半结构化数据类型、ACID 事务、交互式 SQL 查询等等。
因此,您可能想知道数据仓库和数据湖是否正在走向融合。它们在堆栈中可以互换吗?数据仓库也将用于运营用例吗?
EL(T)支持两种用例:分析和运营 ML
与 ELT 相反,EL 将提取-加载部分与可能发生的任何可选转换完全分离。
运营用例在利用传入数据的方式上都是独一无二的。有些可能使用独特的转换过程;有些甚至不使用任何转换。
对于分析案例,分析师将需要在某个时候根据自己的需要对传入的数据进行规范化。但是将 EL 从 T 中分离出来可以让他们选择任何他们想要的标准化工具。 DBT 最近在数据工程和数据科学团队中获得了很多关注。它已经成为转换的开源标准。甚至 Fivetran 也与他们整合,让团队使用 DBT,如果他们习惯了的话。
EL 扩展更快,并利用整个生态系统
转型是所有边缘案例的所在。对于任何公司内的每一个特定需求,对于每一个工具,都有一个独特的模式规范化。
通过将 EL 从 T 上解耦,这使得行业能够开始覆盖连接器的长尾。在 Airbyte,我们正在建设一个“连接器制造厂,这样我们可以在几个月内生产 1000 个预制连接器。
此外,如上所述,它将帮助团队以更容易的方式利用整个生态系统。你开始看到一个满足所有需求的开源标准。从某种意义上说,未来的数据架构可能是这样的:
作者图片
最终,提取和加载将与转换分离。你同意我们的观点吗?如果是这样,你可能有兴趣看看 Airbyte 是做什么的。
原载于 2020 年 11 月 3 日https://airbyte . io。
为什么 2020 年对数据科学家来说是一个头疼的问题
冠状病毒的影响将波及数据科学项目
“你的模型和你的数据一样好”是数据科学中最基本的假设。好的数据等于好的模型!冠状病毒已经影响了全球数百万人的生活,对航空业造成了严重破坏,并粉碎了全球股票市场。冠状病毒无疑将继续影响许多人的日常生活,这取决于它得到控制的速度。和所有人一样,数据科学家也会受到影响。不,我不是说在家工作。
在经济学中,“反应滞后”一词用来表示一旦实施纠正措施,影响经济所需的时间。同样,数据科学家将滞后感受到这一巨大异常的影响,滞后的长度将取决于许多因素。
那么它将如何影响数据科学家?
预测将是乏味的
到目前为止,大多数团队已经意识到他们的预测模型失败了,这不是他们自己的错。无论模型多么稳健,它们总是容易受到异常的影响。这就是我们所处的行业。数据科学背后的核心力量是预测除随机事件之外的一切。如果你的模型能捕捉到数据中除随机性以外的所有预测信息,那就是你能做的最好的了。
但是,当 5 年后你使用 2020 年的数据时,有些事情很有趣,记住一个词;冠状病毒
零售和能源等依赖预测模型的行业正争先恐后地告诉投资者,他们将无法实现季度目标。这些都是公司正在处理的短期问题。
从长远来看,数据科学家将不得不应对 2020 年的扭曲数据。一个典型的预测模型需要至少 12 个月的数据,甚至更多,具体取决于应用。这种扭曲的数据会出现在每一个需要历史时间序列数据的数据科学项目中,这些数据会受到当前形势的影响,例如旅游、能源和金融行业等。这肯定会影响预测模型的结果,因为这种异常数据不仅仅是一个你可以扔掉的离群值。
整个数据是离群值吗?
传统上,当一些数据不符合数据集其余部分表现出的属性时,我们只是将它们标记为离群值,并将其从我们的模型中剔除。然而,考虑到冠状病毒现在是一种疫情病毒,并且迄今为止已经持续了几个月以上,我们不能简单地通过将其标记为异常值来丢弃整个数据。我们该如何处理?在这种不确定的情况下,我们如何设计我们的模型?还是我们接受它超出了作为数据科学家的范畴?
值得思考的一点
像这样的事件总是随机的,不在数据科学领域的控制之内。尽管这提出了一个重要的问题,数据科学家如何处理反映随机事件的扭曲数据,尤其是在预测中?我们是否必须等待数据再次积累,然后才能寻找解决问题的线索?或者我们可以用更早的类似惨淡情况的历史数据?所有这些问题都需要讨论和集思广益。但这并不仅限于冠状病毒。历史上有许多事件(想想经济衰退、战争)对生成的数据有类似的影响。我们是否仅使用数据来读取特定时期的数据?或者把它作为一个特例?我确信全球的数据科学家将不得不尽快回答这些问题。目前,在这样一个不确定的时期,这些数据足够丰富,可以从中得出重要的见解。
注意安全,保持健康!
关于作者
Usman Gohar 是一名数据科学家,明尼阿波利斯数据科学的共同组织者,也是一名技术演讲人。他非常热衷于最新的数据科学研究,机器学习,并通过帮助和授权年轻人在数据科学中取得成功而蓬勃发展。你可以在 LinkedIn 、 Twitter 、Medium&follow onGithub上和他联系。
为什么抖音让它的用户如此痴迷?让你上瘾的人工智能算法。
通过期限从 JaySanProduction
Tick Tok 正在席卷全球。根据 Sensor Tower 的数据,这款短视频应用在 App Store 和 Google Play 上的全球下载量已经超过了 20 亿次**。这个耸人听闻的应用程序背后有什么魔力让你如此痴迷?不意外,答案是 ML backed 推荐引擎。**
目录(预计阅读时间 15 分钟)
- 抖音概况。
- 抖音推荐系统的原型(数据、特征、目标、算法和训练机制)
- 抖音的推荐工作流程(实时实施, 必读)
好吧,我们实话实说吧。谁不喜欢狗的滑稽动作和滑稽的猫视频?尤其是在全球封锁的悲痛时期。
但这只是解释了抖音空前成功的一部分。在不到两年的时间里,它从一个小型粉丝社区的“唇同步”应用程序发展到 2020 年拥有近 8 亿月活跃用户的病毒应用程序。总的来说,带有#冠状病毒标签的抖音视频已经被观看了 530 亿次。
2020 年 1 月,抖音成为美国下载量最大的应用。(可见传感塔
抖音全球总下载量由传感器塔
它以产生病毒歌曲和滑稽的哑剧视频而闻名。
通常人们每天花 52 分钟在这款应用上,Snapchat、Instagram 和脸书的每日使用时间分别为 26 分钟、29 分钟和 37 分钟。
来自奥伯罗的报道
除了增长黑客战略,这个 60 秒的短视频应用程序充满了迷因、喜剧、舞蹈和人才。配备业内数一数二的 推荐引擎 ,不需要搜索也不知道看谁。点击一下就可以提供个性化的订阅源。
这种对容易获得的快乐的无止境的快速刺激使人很难停止浏览抖音。有人称之为终极时间杀手,它会吸走你的业余时间,并以某种方式创造出“抖音的 5 分钟等于现实生活中的 1 小时”的扭曲空间。
今天,我们将讨论抖音如何通过交互使用机器学习来分析用户的兴趣和偏好,然后为不同的用户显示个性化的提要。
推荐引擎对于数据科学社区来说并不陌生。相反,一些人认为它是老一代人工智能系统,因为缺乏令人眼花缭乱的效果,如图像识别或语言生成。
然而,该建议仍然是占主导地位的人工智能系统之一,在几乎所有的在线服务和平台上都有最广泛的实现。例如,YouTube 视频建议、您从亚马逊收到的活动电子邮件、您在浏览 kindle 书店时可能也会喜欢的书籍。
事实上,根据 Gomez-Uribe 和网飞的首席产品 Neil Hunt 发表的 研究论文 称,个性化和推荐的综合效果每年为网飞节省超过 10 亿美元。此外,80%的订户从引擎的建议列表中选择视频。
现在让我们来看看 TikTock 的不同之处。
1.推荐引擎介绍。
(对于已经熟悉这个话题的人,请跳到下一节。)
关于推荐引擎有用的文章和在线课程太多了,我不想重新发明轮子。
下面是两个资源,可以帮助你建立一些推荐引擎的基础知识。
除了基本的,工业化的推荐引擎需要一个健壮的后端和架构设计来集成。下面是一个主要的例子。
推荐引擎—由 Catherine Wang 创建,保留所有权利
一个实时系统应该有一个坚实的数据基础(用于收集和存储),以支持解决不同业务问题的多个抽象层(算法层、服务层和应用层)。
2.抖音推荐系统设计的原型
以用户为中心的设计仍然是原型的核心。简单来说,抖音只会推荐你喜欢的内容,从冷启动调整到为活跃用户明确推荐。
如果你点击了一个跳舞的视频,你的反馈最初会被定制为娱乐类别,然后后续机制会跟踪你的行为进行进一步分析,最终只会为你提供精确的建议。
高级工作流。
3 主要组件—由 Catherine Wang 创建,保留所有权利
在抖音的原型中,有三个主要的构建模块,1)标记内容,2)创建用户简档和用户场景,以及 3)训练和服务推荐算法。
我们将在下面的内容中逐一讨论。
2.1 数据和特征
首先,数据。如果我们正式描述推荐模型,它是一个符合用户对用户生成内容的满意度的函数。提供该功能需要从输入数据。
内容数据 —抖音是一个拥有海量用户生成内容的平台。每种类型的内容都有其特点,系统应该能够识别和区分它们,以提供可靠的推荐。
用户数据——这些包括兴趣标签、职业、年龄、性别、人口统计等。它还包括基于 ML 的客户聚类的潜在特征。
场景数据 —该数据根据不同的场景跟踪使用场景和用户的偏好变化。例如,当用户在工作、旅行或通勤时,他们喜欢观看什么类型视频
一旦收集了相关数据,就可以导出四种关键工程特征,并输入到推荐引擎中。
- 关联特征 : 表示内容属性与用户标签之间的关联,包括关键词匹配、分类标签、来源匹配、主题标签,以及用户与内容之间的向量距离等潜在特征。
- 用户场景特征 :从场景数据中设计,包括地理位置、时间、事件标签等。
- 趋势特征: 它们基于用户交互,代表全球趋势、热点话题、热门关键词、趋势主题等。
- 协同特性: 基于协同过滤技术。它平衡了狭义推荐(偏见)和协作推荐(泛化)。更准确地说,它不仅会考虑单个用户的历史,还会分析相似用户组的协作行为(点击、兴趣、关键词、主题)。
该模型将通过学习上述特征来预测内容是否适合场景中的用户。
2.2 无形目标
在推荐模型中,点击率、阅读时间、点赞、评论、转发都是可以量化的目标。您可以使用模型或算法来拟合它们,然后做出最终的预测。
但是,其他无形的目标是无法用那些可量化的指标来评价的。
例如,为了维护一个健康的社区和生态系统,抖音的目标是压制涉及暴力、诈骗、色情、胀气的内容,以及新闻等高质量内容。
为了这个目标,边界控制框架需要被定义在可量化的模型目标之外。(内容审核系统)
2.3 算法
推荐目标可以表述为一个经典的机器学习问题。然后通过包括协同过滤模型、逻辑回归模型、因子分解机、 GBD、深度学习等算法进行求解。
协作过滤的一个例子
一个工业级的推荐系统需要一个灵活的、可扩展的 ML 平台来建立实验管道,快速训练各种模型。然后将它们堆叠起来,以便实时提供服务。(例如,结合 LR 和 DNN,SVM 与 CNN)
除了主要的推荐算法,抖音还需要训练内容分类算法和用户描述算法。下面是内容分析的层次分类结构。
分级分类树—由 Catherine Wang 创建,版权所有
从主根向下钻取。向下每一层都是主类别和子类别。与单独的分类器相比,使用层次分类机制可以更好地解决数据偏斜问题。
2.4 培训机制
抖音使用实时在线训练协议,它需要较少的计算资源,并提供快速反馈。这些对于流媒体和信息流产品非常重要。
用户行为和动作可以被即时捕获,然后反馈给模型,以反映在下一个提要中。(例如,当您点击一个新视频时,您的订阅源将根据您的最新操作快速改变)
最有可能的是,抖音正在使用 Storm Cluster 来处理实时样本数据,包括点击、显示、收藏、喜欢、评论和分享。
他们还将自己的高性能系统构建为模型参数和特征服务器(特征库和模型库)。 特征库 可以保存和服务数千万个原始特征和工程矢量。并且 模型库 将维护和提供模型和 tuned_parameters。
在线培训机制(简化版)—由 Catherine Wang 创建,保留所有权利
整个训练过程是:1)在线服务器捕获实时数据,然后将它们存储到 Kafka 中,2) Storm cluster 消费 Kafka 数据和产品特征,3)特征存储收集新特征和推荐标签,以构建新的训练集,4)在线训练管道重新训练模型参数,将它们存储到模型存储中,5)更新客户端推荐列表,捕获新的反馈(用户动作)并再次循环。
3.抖音的推荐工作流程
抖音从未向公众或技术社区透露其核心算法。但基于该公司发布的零碎信息,以及极客使用逆向工程技术发现的踪迹。我得出以下结论。
(免责声明——这是我的解释和推断,可能与抖音的做法有所不同)
推荐工作流程-由 Catherine Wang 创建,保留所有权利
第 0 步:用户生成内容(UGC)双重审核系统
在抖音,每天有数百万的内容由用户上传。恶意内容更容易发现单机审查系统的漏洞,而人工审查在这种情况下是不现实的。因此,双审查成为抖音筛选视频内容的主要算法。
机器审核: 一般来说,Duo-audit 模型(基于计算机视觉)可以识别你的视频图像和关键词。它主要具有两个主要功能:1)检查剪辑中是否有违反,并检查文案。如果涉嫌违规,内容将被模型拦截,并标记为黄色或红色供人工审查。2)通过从视频中提取图片和关键帧,抖音的 duo audit 算法会将提取内容与其庞大的存档内容库进行匹配。重复将被选中,降低流量,减少推荐引擎的权重。
人工审核: 主要关注 3 个区域:视频标题、封面缩略图、视频关键帧。对于通过双重审核模型标记为可疑的内容,技术人员将手动审查它们。如果认定为违反规定,该视频将被删除,并暂停帐户。
第一步:冷启动
抖音推荐机制的核心是 信息流漏斗。 当内容通过 duo-audit 审核后,将被放入冷启动流量池。例如,在你的新视频通过审查过程后,抖音会分配 200-300 个活跃用户的初始流量,在那里你可以获得几千次曝光。
在这种机制中,一个新的创造者可以与一个社会影响者(可能有数万名追随者)竞争,因为他们有相同的起点。
步骤 2:基于公制的称重
通过最初的流量池,视频可以获得成千上万的观看次数,那些数据将被收集和分析。在分析中要考虑的指标包括喜欢,观点,完整的观点,评论,追随者,转发,分享数据等。
然后,推荐引擎将根据这些初始指标和您的帐户得分(无论您是否是高质量的创作者)来衡量您的内容。
如果引擎决定对你的内容进行加权,前 10%会额外增加 10,000-100,000 的流量曝光。
第三步:用户档案放大器
将进一步分析来自步骤 2 业务池的反馈,以决定使用用户简档放大器。在这一步中,跑赢的内容将在特定的用户群(如体育迷、时尚爱好者)中得到强化和放大。
这类似于“猜你喜欢什么”功能的概念。推荐引擎将建立一个用户简档库,以便它可以找到内容和用户组之间的最佳匹配。
第四步:精品潮流池
不到 1%的内容将最终进入趋势池。内容在这个池中的曝光率比其他池高一个数量级。因为趋势内容会无差别的推荐给所有用户。(假设,不管你是谁,你可能想看“黑人的生命很重要”的最新抗议者视频)
其他步骤:延迟点火
一些 Tiktokers 会注意到,他们的内容在发布了几周后突然获得了巨大的关注。
主要有两个原因:
- 首先,抖音有一个算法(昵称“掘墓人”)来回顾旧的内容和挖掘高质量的候选人曝光。如果你的内容被这个算法选中,这表明你的帐户有足够的垂直视频来获得一个干净的标签。这个标签将增加你的内容在掘墓人中的可见性。
- 第二,“新潮效应。”这意味着,如果你的一个内容获得了数百万的浏览量,它会将流量导向你的主页,从而增加我们旧内容的浏览量。这种情况经常发生在垂直创作者(如:滑稽猫视频创作者)身上。一个新潮的视频将点燃所有其他高质量的视频(人们想看到更多你可爱、好奇的猫)。
限制:流量峰值
如果一个内容云通过了信息流漏斗(duo-audit,weighing iterations,amplifiers),创作者的账号就会获得过度的曝光、用户互动和粉丝。
但是根据研究,这个高暴露时间窗口很窄。通常,窗口期会持续一周左右。过了这个时间段,这个内容和账号就会降温,甚至后续的视频也很难变得新潮。
为什么?
主要原因是抖音希望引入多样性,并消除算法中的无意偏差。通过这种设计,推荐引擎将不会倾向于特定类型的内容,从而确保新内容将获得平等的机会进入潮流池。
参考文献:
- *【https://www.businessofapps.com/data/tik-tok-statistics/ *
- https://media kix . com/blog/top-tik-Tok-statistics-demographics/
- https://en.wikipedia.org/wiki/TikTok
- http://shop.oreilly.com/product/9780596529321.do
- https://sensortower.com/
- https://www . nytimes . com/2020/06/03/technology/tiktok 是未来. html
**关于我,我是👧🏻谁住在澳大利亚的墨尔本。我学的是计算机科学和应用统计学。我对通用技术充满热情。在一家全球咨询公司担任人工智能工程师领导👩🏻🔬,帮助组织集成人工智能解决方案并利用其创新力量。在LinkedIn上查看更多关于我的内容。
为什么训练集应该总是小于测试集
在小样本上测试机器学习模型不是一个好主意
图片由来自 Pexels 的 luis gomes 拍摄
在机器学习领域,数据科学家经常被告知在大型训练数据集上训练监督模型,并在少量数据上测试它。训练数据集总是被选择为大于测试数据集的原因是有人说用于训练的数据越大,模型学习得越好。
我一直认为这种观点实际上并不完全正确,在本文中,我将向您展示为什么您应该保持尽可能小的训练集,而不是保留大部分数据用于测试目的。
衡量模型性能的问题
监督模型的真正任务不是在尽可能大的数据集上学习,而是以一种在未知数据上模型性能令人满意的方式学习。这就是为什么我们在看不见的数据集上执行模型交叉验证。
数据科学家通常会提供一些在此类测试数据集上计算的模型性能指标,如 AuROC、准确度、精度、均方根误差等。这个想法是,如果我们的模型在看不见的数据上表现得很好,那么它在生产环境中也可能表现得很好。
但是我们对模型性能的测量有多精确呢?如果我说我的模型在 100 条记录的测试数据集上有 86%的 AuROC,而另一个人说另一个模型在 10.000 条记录的测试数据集上仍有 86%的 AuROC,这两个值有可比性吗?如果你是一家大公司的经理,你被要求根据模型预测投资一些钱,你会选择哪一个?
我给你剧透一下。测试集越大,对其计算的任何性能指标的精确度就越高。
模型性能的精确度
我是一个物理学家,所以我总是被告知每一个测量都必须有一个误差估计。我可以告诉你我身高 1.93 米,但是我不会给你任何关于这个估计的精确度的信息。是 1 厘米,还是 12 厘米?你说不准。正确的信息可能是:我身高 1.93 +/- 0.01 米,这是 1.93 米,误差估计为 1 厘米。如果有人试图测量我的身高,他可能会得到 1.93 +/- 0.12 米,这是 1.93 米,误差估计为 12 厘米。哪种测量方法更准确?当然是前者。其误差比后者低一个数量级。
同样的方法可以应用于机器学习模型。每次计算模型性能(例如,AuROC、accuracy、RMSE)时,您都在执行一个测量,这个测量之后必须有一个误差估计。
那么,如何计算这种测量的误差估计呢?有许多技术,但我更喜欢使用 bootstrap,这是一种重采样技术,允许您计算估计的标准误差和置信区间。bootstrap 样本中可观察值的标准差是我们可以在报告中使用的标准误差。很容易证明,误差估计随样本容量的平方根而减小。
这就是为什么您必须使用大型测试集的原因。它提供了对未知数据的模型性能的更好估计。
例子
在以下 Python 示例中,我将模拟包含 4 个独立正态分布要素的 100 万条记录数据集,然后根据以下线性模型人工创建一个目标变量:
线性模型预测和样本 y 值之间的误差是正态分布的。
然后,我将拟合线性模型,计算 RMSE 及其标准误差,并向您展示测试集越大,标准误差越小,因此 RMSE 值的精度越高。
你可以在我的 GitHub 资源库找到完整的代码:https://GitHub . com/gianlucamalato/machine learning/blob/master/Small _ training _ large _ test . ipynb
首先,让我们导入一些库。
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
让我们用 4 个正态和独立分布的特征来模拟 100 万条记录。
np.random.seed(0)
X = np.random.normal(size=4000000).reshape(1000000,4)
现在,我们可以应用正态分布噪声来创建输出变量。
y = []
for record in X:
y.append(np.sum(record) + np.random.normal())
y = np.array(y)
小型测试集
现在,让我们将我们的 X,y 数据集分成训练集和测试集,测试集大小是总大小的 20%。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
现在我们可以拟合线性回归模型。
model = LinearRegression()
model.fit(X_train,y_train)
在计算模型性能之前,让我们先定义一个函数,用 100 个样本的自举来计算 RMSE 及其误差估计。
def estimate_error(X_test,y_test):
n_iter = 100
np.random.seed(0)
errors = [] indices = list(range(X_test.shape[0]))
for i in range(n_iter):
new_indices = np.random.choice(indices,
len(indices),replace=True) new_X_test = X_test[new_indices]
new_y_test = y_test[new_indices] new_y_pred = model.predict(new_X_test) new_error = np.sqrt(mean_squared_error(new_y_test,new_y_pred)) errors.append(new_error) return np.mean(errors),np.std(errors)
这些是结果:
所以我们有一个等于 1.0028 +/- 0.0015 的 RMSE。
大型测试集
如果我们使用一个覆盖总人口规模 80%的测试集会发生什么?
随机分割和模型训练变成:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.8, random_state=42)model = LinearRegression()
model.fit(X_train,y_train)
新 RMSE 的估计是:
所以我们有 1.00072 +/- 0.00075。我们的误差已经减少了一个数量级,所以最后一个测量更准确。
到底发生了什么?
这些数字里没有魔法。简单地说,这是大数定律和自举技术的一种效果。对于更大的数据集,样本中的任何可观测估计值都变得非常接近其在样本总体中的值。
结论
更大的测试数据集确保更准确地计算模型性能。对较小数据集的训练可以通过分层抽样等抽样技术来完成。它将加速你的训练(因为你使用更少的数据),并使你的结果更可靠。
参考
[1]吉安卢卡·马拉托。自举。任何数据科学家的瑞士军刀。数据科学记者。https://medium . com/data-science-reporter/the-bootstrap-the-Swiss-army-knife-of-any-data-scientist-ACD 6 e 592 be 13
[2]吉安卢卡·马拉托。分层抽样以及如何在 R 中进行。走向数据科学。https://towards data science . com/layered-sampling-and-how-to-perform-it-in-r-8b 753 efde 1 ef
[3]吉安卢卡·马拉托。机器学习中如何从庞大的数据集中正确选择样本。数据科学记者。https://medium . com/data-science-reporter/how-to-corrective-select-a-sample-from-a-high-dataset-in-machine-learning-24327650372 c
为什么迁移学习会成功或失败?
理解迁移学习和领域适应背后理论的(几乎)无数学指南。
来源:Sebastian Ruder,via slideshare
D 在 2016 年的 NIPS 教程演讲中,吴恩达表示,转移学习——机器学习的一个子领域,模型被学习,然后部署在相关但不同的领域——将是未来几年机器学习商业成功的下一个驱动力。这种说法很难反驳,因为避免从头学习大规模模型将大大减少 it 所需的高计算和注释工作,并节省数据科学从业者的大量时间、精力,最终节省资金。
作为后面这些话的一个例子,考虑一下脸书的 DeepFace 算法,该算法在 2014 年首次实现了接近人类的人脸验证性能。它背后的神经网络是在 440 万张 标记的人脸上训练的——大量的数据必须被收集、注释,然后训练整整 3 天,还没有考虑微调所需的时间。毫不夸张地说,如果没有脸书的资源和深度学习工程师,大多数公司和研究团队将不得不投入数月甚至数年的工作来完成这样的壮举,其中大部分时间都花在收集足够大的标注样本来构建这样一个精确的分类器上。
这就是迁移学习神奇地介入的地方,它允许我们在相关数据集之间使用相同的模型,就像如果它们来自相同的来源,我们会做的那样。尽管迁移学习算法在计算机视觉和自然语言处理等挑战性任务中非常有效和有用,但在实践中也很失败,解释为什么它可能会或可能不会发生是我下面要尝试做的。
追根溯源
到开始我对迁移学习理论的简单而轻松的介绍,让我介绍一下 Homer,一个快 30 岁的家伙,他因为机器学习的炒作而变得非常兴奋,并决定自动分类他在 Aliexpress 上为他的在线商店购买的所有奇怪的东西。荷马的主要动机源于他的懒惰,事实上,全球速卖通上翻译的英文描述通常非常混乱,至少可以说,这意味着只有荷马购买的照片才能提供任何关于实际商品的信息。
因此,Homer 下载了一个巨大的标注了亚马逊上销售的商品的数据集,希望一个分类器能够很好地处理他在全球速卖通上的图片。“是什么让他这么想的?”你可能会问。嗯,首先,Homer 假设有那么多来自亚马逊的图像,他可以使用最先进的具有 1 万亿层的深度神经网络为它们学习一个低错误的分类器。此外,在他祖母海边的房子度过的所有暑假期间,荷马有机会阅读了瓦普尼克先生和切尔沃嫩基斯先生的所有最新作品,他们(非常)宽泛地提出了以下不等式:
荷马知道,由于神经网络的能力能够从输入其中的任何垃圾中很好地学习,右手边的第一项可以变得尽可能小。此外,Homer 认为,第二项分子中神经网络的高度复杂性将由他可支配的大样本量来补偿,从而使其也接近于 0。困扰 Homer 的最后一块拼图是左手边,因为他不确定亚马逊上看不见的商品的分类错误是否会接近全球速卖通上的分类错误。为了解决这个问题,他做了如下简单的假设:
“什么样的距离?”一个好奇的读者会问,这样做是对的。但是荷马并不在乎这些细节,他现在对自己很满意,并继续进行下面的终极不等式:
“现在我知道该做什么了,”荷马对自己说,他指的是转移学习,而不是他那不安定的生活。“首先,我需要找到一种方法来转换来自亚马逊的图像,使它们看起来尽可能与来自全球速卖通的图像相似,从而缩短它们之间的距离。然后,我将在转换后的图像上学习一个低错误分类器,因为我仍然有它们的基本事实标签,并将在我的全球速卖通图像上进一步应用这个分类器。”
思考片刻后,他对自己的想法变得不确定了。“我是不是漏掉了什么?”他问自己,同时从速卖通网站订购了一把激光军刀伞,碰巧的是,他照做了。
什么叫做相似?
虽然荷马关于迁移学习的直觉在最后一个不等式中被形式化了,但他仍然缺乏一个关于距离的明确定义的概念,他可以用这个概念来衡量两个数据集之间的可迁移性。
“粗略地说,”荷马自言自语道,“有两种比较数据集的可能方式:无监督的和有监督的。如果我选择有监督的,这意味着我同时考虑图像和它们的标签来测量距离;如果我选择无监督的,我只考虑图像。”
这两种方法都困扰着荷马,但原因不同。对于监督方法,他必须有速卖通图像的标签,这是他最初试图通过迁移学习获得的东西。至于无监督的,他认为这是不够准确的,因为两个图像可能看起来很相似,即使它们属于不同的类别。“这怎么可能?”你可能会想。嗯,看看速卖通和亚马逊网站上卖的以下两件商品,告诉我它们属于哪一类。
在全球速卖通(左图,来源:宁波 Creight Co .,via aliexpress)和亚马逊(右图,Regal Fish Supplies,via amazon)上销售的商品图片。
很明显,左边的那个是睡枕(很明显,不是吗?!),而右边的是三文鱼片。为了避免这种混乱,荷马决定提出以下假设:
Homer 认为,将标注函数放入等式中——从各自的在线平台输出任何可能项目的类别的函数——是考虑数据集注释和图像实际相似性的最直接方式。令人惊讶的是,这就是他如何(几乎)得出与迁移学习理论的开创性论文中的定理 1 极其接近的结果。
一个理论将他们联系在一起
如果我告诉你,大多数关于迁移学习理论的论文都可以归结为 Homer 从他对机器学习原理的最基本理解中得出的不等式,你可能会很惊讶。那些众多的论文和荷马脚踏实地的推理之间的唯一区别是,荷马必须通过做出假设,而不是通过实际证明与出版作品相反的预期结果。
我现在将向您展示一个稍微重新表述的不等式,它抓住了定理 1 和荷马推理的本质,然后我们将看到它如何用于证明所有那些在之前在 Medium 上讨论过的迁移学习算法。我的改写如下:
在这里,我的目标域是我想要分类的任何数据集,而不需要手动注释它;在 Homer 的例子中,它由在 Aliexpress 上销售的商品的图像组成。我的源域,在同一个例子中是丰富的 Amazon images,是任何带注释的数据集,我可以为其生成一个低错误模型,用于目标域的后记。右边的第二项是两个域之间的无监督距离,我们通常可以在不知道任何一个域中实例的标签的情况下计算该距离。致力于迁移学习的研究人员为这个术语提出了许多不同的候选词,其中大多数采取了这两个领域的(边缘)分布之间的某种差异的形式。最后,第三项代表通常所说的先验适应性:一个不可估计的量,只有当真正的目标域的标记函数已知时,我们才能计算它。后一种观察使我们得出以下重要结论。
虽然迁移学习算法可以显式地最小化我们不等式的前两项,但先验适应性项仍然不可控,潜在地导致迁移学习的失败。
如果你在这一点上等待一个神奇的解决方案,那么我将不得不说没有这样的解决方案,这将使你失望。您可以使用基于内核的、矩匹配的或对抗性的方法,但这不会改变任何事情:最终您将受到不可估计项的支配,该项可能最终用其看不见的手影响您的模型在目标域中的最终性能。然而,好消息是,在大多数情况下,它仍然比完全不传输要好。
回到现实生活
我现在将展示一个在这篇论文中提供的简单例子,它强调了遵循上述哲学的迁移学习方法的一个缺陷。在本例中,我们将考虑两个一维数据集,分别代表源域和目标域,并使用下面给出的代码生成。
**import** numpy **as** np
np.set_printoptions(precision=1)**def** generate_source_target(xi):
k=0
size = int(1./(2*xi))
source = np.zeros((size,))
target = np.zeros_like(source)
**while** (2*k+1)*xi<=1:
source[k] = 2*k*xi
target[k] = (2*k+1)*xi
k+=1
**return** source, target
执行这段代码会在区间[0,1]中产生两组点,如下图所示。
例如,当ξ = 0.1 时,它将返回以下两个列表:
source,target = generate_source_target(1./10)print(source)
[0\. 0.2 0.4 0.6 0.8]print(target)
[0.1 0.3 0.5 0.7 0.9]
我将进一步将标签 1 归属于来自源域的所有点,将标签 0 归属于来自目标域的所有点。我的最终学习样本将因此变成:
source_sample = [(round(i,1),1) **for** i **in** source]
target_sample = [(round(i,1),0) **for** i **in** target]
print(source_sample)
[(0.0, 1), (0.2, 1), (0.4, 1), (0.6, 1), (0.8, 1)]print(target_sample)
[(0.1, 0), (0.3, 0), (0.5, 0), (0.7, 0), (0.9, 0)]
为每个样本找到一个完美的分类器容易吗?是的,因为在源域的情况下,它可以使用阈值函数来完成,对于坐标小于 0.8 的点输出 1,否则输出 0。这同样适用于目标域,但这一次分类器将为坐标小于 0.9 的所有点输出 0,否则输出 1。最后,我们现在将确定这两个畴之间的距离取决于ξ,因此可以通过减小它来使其任意小。为此,我们将使用 1-Wasserstein 距离,在我们的例子中,它正好等于ξ。让我们使用下面的代码来验证它:
**from** scipy.stats **import** wasserstein_distance**for** xi **in** [1e-1,1e-2,1e-3]:
source, target = generate_source_target(xi)
wass_1d = wasserstein_distance(source,target)
print(round(np.abs(wass_1d-xi),2))0.0
0.0
0.0
总的来说,我们现在有了一个可以学习完美分类器的源域和一个可以任意接近它并且也存在完美分类器的目标域。现在,我们提出的问题是:在这种看似非常有利的情况下,迁移学习能成功吗?!嗯,你可能已经猜到了,不,它不能,原因隐藏在我之前提到的不可估计项中。事实上,在这个设置中,无论您做什么,同时对两个域和都好的分类器是不存在的。实际上,其最低可能误差将正好等于 1-ξ,同样,通过相应地操纵ξ,可以使其任意接近 1。正如《建立迁移学习理论的基础》一文中的作者所说,
“当没有对源域和目标域都表现良好的分类器时,我们不能指望通过在源域只训练目标模型来找到好的目标模型。”
遗憾的是,这个对于所有无法访问目标领域标签的迁移学习方法都是正确的。
便笺后
虽然这篇文章看起来有点悲观,但是它的主要目的是向感兴趣的读者提供迁移学习理论的一般理解,而不是欺骗他或她使用迁移学习方法。事实上,迁移学习算法在实践中通常非常有效,因为它们经常应用于它们之间有很强语义联系的数据集。在这种情况下,假设不可估计的项很小是合理的,因为很可能存在一个对两个域都适用的好分类器。然而,正如生活中经常发生的那样,除非你尝试一下,否则你永远不会知道是否是这样,这就是它的美妙之处。
如果你想更深入地讨论你感兴趣的关于迁移学习理论的论文背后的技术细节,请在评论中告诉我。
为什么真的是假的是假的
->假的?
Python 很酷:在使用了这么多年之后,有一些奇怪的小东西让我感到惊讶。我最近偶然发现了一行非常简单的代码,我所知道的大多数有经验的 python 程序员不通过谷歌搜索就无法解释它。
WTF…
为什么令人惊讶?我想这是因为如果一个人被要求执行这个命令,他不会输出这个结果。我是这样推理的。
我需要执行第一条is
语句,这将给我False
,然后执行第二条is
,这将给我True.
:
有了括号,它确实像预期的那样工作。同样,如果你从右到左以相反的顺序做,你会得到同样的结果。
然后我想…
也许是is
操作符在与另一个is
组合时执行方式不同。
python is
操作符所做的是比较对象的 id。当你做a is b
时,你实际上是在问id(a) == id(b)
,即这些是否是相同的对象(不像a==b
只比较值)。Python 的id
操作符实际上指向存储对象的真实内存地址。
我知道id
有一些意想不到的行为。例如,[-5,256]范围内的整数的 T12 总是相同的,而对于其他整数,它在内存中分配单独的位置。我的意思是:
这是 Python 使用的一种启发式方法。下面是来自文档的解释:
当前的实现为所有在
-5
和256
之间的整数保留了一个 integer 对象数组,当你在这个范围内创建一个 int 时,你实际上只是得到了一个对现有对象的引用。所以应该可以改变1
的值。我怀疑 Python 在这种情况下的行为是不确定的。😃
这是我所知道的,但是这里我们处理的是广播到0
和1
的布尔值的比较,它们依次落入[-5,256]范围。事实上,如果你检查一下,它们都指向同一个内存地址。
所以,这肯定是某个用双is
语句把事情搞砸的东西。
啊哈…
然后我问自己:*当你在一个语句中有多个比较操作符时,Python 中实际上发生了什么?*以下是文档中所说的:
形式上,如果 a 、 b 、 c 、…、 y 、 z 是表达式, op1 、 op2 、…、 opN 是比较运算符,那么
a op1 b op2 c ... y opN z
相当于a op1 b and b op2 c and ... y opN z
,只是每个表达式最多求值一次。
所以实际上发生的是语句True is False is False
被替换为语句True is False and False is False
。显然,第一个True is False
被评估为False
,它决定了最终结果。
附:如果你喜欢这个故事,可以考虑在 medium 上关注我或者订阅我的 电报频道 或者 我的 twitter 。
为什么会变成咸菜?
图片来自 Pixabay 的照片组合【我没有得到免费使用的泡菜里克图片:(】
泡菜是什么
Pickle 是一个 python 模块,用于将 python 对象序列化为二进制格式,并将其反序列化回 python 对象。
使用 pickle 的两个重要用例
第一种情况:
你在做一个机器学习问题,用的是最爱: jupyter 笔记本。您分析了数据并确定了将有助于您的模型的主要特征。您执行特征工程,并且您知道这将是您将传递给机器学习模型的最终数据。但是特征工程需要大量时间,并且您不希望在关闭笔记本电脑后丢失特征工程数据。
这就是泡菜的用武之地。
您只需将特征工程数据传递到 Pickle 并以二进制格式保存它。然后,当您准备好执行建模时,就可以加载这些数据了。
转储数据(保存)
#Code Example
#Import the module
import pickle#Do Some Feature Engineering
feature_engineered_data = do_feature_engineering(data)#Dump it(save it in binary format)
with open('fe_data.pickle','wb') as fe_data_file:
pickle.dump(feature_engineered_data, fe_data_file)
加载回数据
#Code Example
#Import the module
import pickle#Load the data - No need to do Feature Engineering again
with open('fe_data.pickle','rb') as fe_data_file:
feature_engineered_data = pickle.load(fe_data_file)#Continue with your modeling
那么到底有什么优势呢?
功能工程可能是一个繁重的过程,您不希望在笔记本电脑关机的情况下重做它。因此,以可重用的格式存储它是有益的。
假设您为 EDA、功能工程和建模管理不同的笔记本。使用 Pickle,您可以将数据从一个笔记本转储到另一个笔记本。
第二种情况:
一个更流行的案例是 pickle机器学习模型对象。
您已经完成了特征工程、建模,并获得了相当好的精确度,万岁!你在这里的工作已经完成,所以你关掉笔记本电脑,好好睡一觉。
第二天早上,您得到另一个测试集来测试模型,但是因为您关闭了笔记本电脑,所以您必须再次训练模型,这需要 6 个小时!
这就是泡菜再次出现的地方
保存训练好的模型,并在有新数据进行测试时加载该模型。
甩掉模特
#import module
import pickle#Train the data
model.fit(X_train, X_test)#Dump the model
with open('fitted_model.pickle','wb') as modelFile:
pickle.dump(model,modelFile)
加载模型
#import module
import pickle#Load the model - No need to TRAIN it again(6 hours saved)
with open('fitted_model.pickle','rb') as modelFile:
model = pickle.load(modelFile)#Predict with the test set
prediction = model.predict(X_test)
可以使用 Pickle 保存最终数据,用多个模型进行训练,也可以保存模型,用多个数据进行测试,不需要再次训练模型。多棒啊。
你对这些用例有什么看法,你还能想到哪些其他用例?请在评论中告诉我!
为什么样本使用 n-1?——她问
简单的视觉演示,以清除这个臭名昭著的疑问!
奥斯潘·阿里在 Unsplash 上的照片
在直接进入主题之前,让我们先来看看分别用于人口统计和样本统计的符号:
为了一致的解释,我将引用我以前博客中的相同信息:
推论统计学背景中的一个重要定理,没有它,推论统计学就没有…
towardsdatascience.com](/central-limit-theorem-simplified-7a0689519a46)
继续 X 星球上 1000 名男性(总人口)的相同身高数据集:
(图片由作者提供)
正如我以前的博客中关于中心极限定理的演示活动所讨论的,评估专家从预先确定样本大小的总体中抽取样本,每个人给出 10 个总体均值的评估。我们有 5 个自称的评估专家来评估不同抽样选择的平均值:
(图片由作者提供)
让我们以第一个评估专家选择两个样本大小为例。对于他的第一个样本,他根据两个导出值(155 cm 和 165 cm)的平均值估计样本平均值为 160 cm。
(图片由作者提供)
(图片由作者提供)
请注意,评估专家在整个评估实践中并不知道总体均值,他对总体的最佳猜测是他从总体中得出的两个观察值的均值。这对于我们来说是显而易见的,因为我们很清楚总体分布和总体均值,但根据他的说法,总体均值的一个最佳可行位置是收集的观测值的均值,我们也很清楚,在该均值附近方差度量最小。因此,当我们使用 N(如在人口统计中)编写方差计算公式时,请注意当我们试图用样本数据估计它时会出现什么问题:
(图片由作者提供)
大绿条反映可行的总体平均位置(对于我们的数据,它是大红条-实际位置)。上述表示的目的是让您明白,总体均值可以在任何地方,与之相关的方差总是大于估计专家使用样本数据均值估计的方差。
注意我们的实际差异是如何被当前公式低估的。
进一步澄清,评估专家以样本数据平均值的形式给出最佳评估,再次重复是总体平均值的可行位置之一。正如我们所知,这里的总体均值(170)位于估计均值(160)的右侧,但如果我们使用其他数据集,它可以在任何地方。假设样本数据平均值处的总体平均值位置缩小了方差测量值,即方差在样本数据平均值附近最低。这是我们需要通过操纵分母来扩大方差度量的唯一原因,用 n-1 代替 n 来补偿低估。
如果你想到,通过使用修改后的公式,我们仍然不能很好地进行估计,请记住,当我们增加样本量时,估计会提高(在本例中,我们只取两个样本量,样本量的增加最终会反映出估计的准确性)
为什么分母必须是 n-1,而不是 n-2,n-3 或 n-10?
当我们从总体数据中抽取一个样本时,很明显它的平均值是固定的(一个常数值):
让我们取一个任意的样本= 2,5,7,10,16 (5 个数据点)
样本均值= (2+5+7+10+16)/5 = 8
现在,如果我给某人这个样本的 4 个数据点和样本平均值(固定的),他/她能解出第 5 个数据点吗?答案是肯定的!
这是关键点,在样本统计中,我们失去了一个自由度,因为存在样本均值的约束(固定)。这就是为什么我们总是从样本量中减去 1 = n-1
这个 n-1 修正最初被称为贝塞尔修正,如果您对详细的推导感兴趣,请参考下面提到的链接:
[## 贝塞尔校正
在统计学中,贝塞尔的修正是在样本方差和样本……的公式中使用 1 代替 n
en.wikipedia.org](https://en.wikipedia.org/wiki/Bessel%27s_correction#Proof_of_correctness_%E2%80%93_Alternative_1)
对于人口统计,我们没有任何限制,因为人口数据点的选择对实际人口平均值没有任何影响,这就是为什么 N 被用作计算的分母。
这篇博客到此为止,我希望这个简化的解释最终消除了在分母中使用 n-1 而不是 n 来表示被低估的样本统计量的疑虑。偏差的唯一来源于估计练习,这是达到人口统计测量的接近近似值的唯一现实方法。最终的结论是通过使用贝塞尔的修正使有偏方差输出**(被低估——通过样本计算获得)无偏。**
我将在接下来的博客中介绍一个低调但非常重要的“自由度”概念,因为它对于解决统计学中的主要解释挑战非常重要,请保持关注
谢谢!!!
为什么 VAE 是基于可能性的生成模型
罗马法师在 Unsplash 上拍摄的照片
生成模型是学习从现有数据生成真实数据样本的强大工具
当我们必须决定使用什么具体方法来实现生成模型时,我们必须处理泛化与可解释性的权衡:简单的方法是可解释的,但它们的泛化能力明显低于像(大)神经网络这样的方法,神经网络已经显示出惊人的能力,但它们被认为是黑盒,因为我们仍然缺少一个合理的理论。
然而,从更抽象的角度来看这个领域,我们有一个很好的理论,它可以帮助我们理解一些重要的特征,并提供重要的见解,当我们必须监控这种模型的训练时,这将是有用的
我们将在这里集中讨论这个问题
最大似然估计
最大似然估计是参数估计的基本工具
从贝叶斯定理
贝叶斯定理,来自 https://www.saedsayad.com/naive_bayesian.htm
我们看到可能性被标识为 P(X|C ),但是它是什么意思呢?
严格来说,它代表一个条件概率,因此给定 C 为真,X 的概率是多少
但是当 C 是一个分布时会发生什么呢?
P(X|C)仍然是概率,因此它的输出在[0,1]中吗?
这个问题的答案是否定的:P(X|C)的输出恰好是非负的(事实上,贝叶斯公式中的所有其他项都是非负的,并且后验概率一定是非负的,因为它是一个概率),但它不是一个概率,因此它可以大于 1
那么这个值如何转化为后验概率呢?
这是贝叶斯公式中其他两项的工作:先验和证据(分母),虽然前者来自假设(因此在计算方面不存在问题),但后者需要计算,这实际上通常非常困难,因为它涉及非常大空间上的棘手积分。
无论如何,如果我们专注于可能性,我们就不必担心处理棘手的积分
想法是使用似然性作为两个分布 X 和 C 之间的相似性度量,并在其上定义一个优化问题
但是请注意,可能性不是距离,因为它不是对称的:所以 P(X|C)不是 P(C|X)
要理解什么样的顺序对你有效,只要想想你想要什么样的后验概率:可能性的顺序是相反的。
但是哪两个发行版?
因为我们的目标是在数据集 D 上训练生成模型 G(X ),那么我们将有
-
D:训练集中数据的分布
-
G(X):生成数据的分布
这意味着将训练转换为以最大化 P(D | G(X))为目标的优化问题
实际上,我们将使用本质上是参数函数的神经网络来实现 G(X ),我们称之为 G(X;因此,问题的最终目标是找到最大化数据集和生成数据之间的似然性的θ值
生成模型学习的最大似然法
生成模型
因此,虽然现在应该清楚我们的生成模型是参数化的,以及我们使用什么框架来估计它的参数,但我们还没有定义什么是 X
这是一个很好的观点,因为生成模型本身不需要额外的输入 X,它应该像一个黑盒
- 按下按钮,我们就可以从中获取样本
- 并允许我们改变一些设置,因为它们通过微分与结果有某种联系
但是实际上,如果我们使用一个神经网络,那么它就是一个完全确定性的架构:它没有任何新颖性,给定相同的输入和相同的参数化,那么它总是返回相同的输出
那么我们如何增加新鲜感呢?
为此我们需要一个额外的输入
我们终于能够将它与标题联系起来,并开始处理最初的问题,所以让我们介绍一下变分自动编码器
VAE
关于 VAE 的详细介绍,我推荐这篇来自 TDS 的文章
逐步建立导致 VAEs 的推理。
towardsdatascience.com](/understanding-variational-autoencoders-vaes-f70510919f73)
来自https://towardsdatascience . com/understanding-variable-auto encoders-vaes-f 70510919 f 73
简而言之,VAE 的生成部分是解码器,它本质上是一个将潜在空间中的点映射到可观察空间中的点的函数,用于图像生成
-潜在空间作为 N 维欧几里得空间,所以潜在码本质上是 N 个实元素的向量
-作为 W x H x 3 张量空间的可观察空间,用于 W x H 大小的 RGB 图像
因此,从统计的角度来看,解码器得到输入分布 Z,并将其转换为输出分布 X,因此 G(Z) -> X 和 Z 的每个样本 Z 属于潜在空间,X 的每个样本 X 属于可观察空间
这个公式给出了在最大似然估计框架中使用的第二个术语:发生器分布,所以让我们用正确的符号重写这个公式
MLE 解码器培训
我们可以开始训练解码器了吗?
从技术上来说,是的,我们可以开始随机采样发电机潜在空间,并从数据集中随机选取图像,尝试调整θ,以对齐 2 个分布
它永远不会起作用,因为不仅潜在代码和期望输出之间没有关系,而且它还会随着时间而改变。
因此,让我们至少将潜在空间代码与数据集中的每个样本相关联:随机选择,但至少随时间保持不变。
在这种情况下,解码器将最好地完全过拟合训练集,但是将具有零泛化能力,因此完全无用。
我们缺少的组件是编码器,它与解码器的功能相反:从可见空间映射到潜在空间。
让我们用 F(X) -> Z 来表示它,让我们假设用神经网络来实现它,还有另一个参数函数
理论上,它应该增加参数空间大小,但是实际上编码器和解码器共享它们的权重(在某种意义上,它们的参数化是另一个的转置),所以让我们用θ来标识它们两者的参数化
加上这个就结束了循环,允许我们从图像生成代码,从代码生成图像。
因此,从分布角度来看,我们通过对数据集进行采样获得分布 X,该分布由编码器转换为分布,该分布由解码器转换为分布 X’,因此,通过比较 X 和 X’,可以在 MLE 框架中进行训练,我们可以表示如下
全自动编码器的 MLE 训练
结论
在这里,我们已经详细地展示了自动编码器如何在最大似然估计框架中被训练,以及为什么它们被称为基于似然的生成模型
为什么皮蓬对芝加哥公牛队来说如此便宜?
尽管他对球队做出了宝贵的贡献,但斯科蒂·皮蓬的合同不仅仅是偶然的。
来源:芝加哥公牛队的脸书页面
对于那些看过网飞的《最后的舞蹈》的人来说,纪录片提出的最好奇的一点是芝加哥公牛队的小前锋斯科蒂·皮蓬相对较低的工资。1987 年被公牛队选中,这位球员在 20 世纪 90 年代统治 NBA 期间成为全明星迈克尔·乔丹的主要搭档。尽管如此,在这支球队赢得的最后一个总冠军期间,公牛队的球星只有联盟第 112 高的工资,只有公牛队的第 6 高。相比之下,乔丹在 1997-98 赛季赚了 3300 万美元,而皮蓬只赚了不到 270 万美元
是什么导致了皮蓬这样的结局?在纪录片的第二集,集中在旧金山的历史,皮蓬解释说,他接受了公牛队最初的安全建议。这名球员担心职业生涯过早结束,而目前保护球队和球员的工资帽规则在 1991 年并不存在。哥伦比亚广播公司体育频道的山姆·奎因详细介绍了皮蓬的合同条款。
虽然人们普遍认为皮蓬接受了一份糟糕的合同,但如果公牛队能够重新谈判他的合同或放弃他,根据他的潜力,皮蓬在 1997-98 赛季应该赚多少钱?首先,让我们后退一步:鉴于皮蓬在 1996-97 赛季的表现,下赛季皮蓬对公牛队的价值是多少?根据收集的数据,在 1996-97 赛季,皮蓬的 VORP 为 6.1,调整后的使用率为 15.7%(分别落后于迈克尔乔丹的 8.6 和 15.8%)。但是,我们知道,这个表现并没有体现在皮蓬那个赛季的工资上。皮蓬的薪水仅排在第六位,相当于中锋卢克·朗利薪水的 80%,调整后的使用率为 7.5%,VORP 仅为 0.1%。换句话说:皮蓬是公牛队第二有价值的球员,但他的收入远非如此。
根据从 hoopshype.com 收集的数据(参见我的 Github 访问我的网页抓取脚本),在 1996-97 年期间,一名小前锋的平均工资为 150 万美元。皮蓬的合同保证他的工资为 225 万美元。尽管他的工资比小前锋的平均工资高 55%,但他无法获得小前锋中 24 个最高工资之一。但是据报道,皮蓬可以得到更多。事实上,他真的做到了,当他与公牛队和火箭队签署了一份先签后换的协议,几乎是他年薪的三倍。
图 1:小前锋的工资分布(1996-97)
但是 90 年代 NBA 一个球员的工资受什么影响呢?GM 怎么决定一个球员值多少钱?也许他们依赖于球员的统计数据,以前的成绩,球员可能给球队带来的影响(好的和坏的),球队对具有某些特征的球员的需求,以及最终他们可以付给球员多少钱。根据现有的统计数据,任何对此感兴趣的人的第一个明显的尝试是设计一个回归模型并对其进行调整。不幸的是,我们可能会认识到,使用球员统计数据的线性模型构建起来会非常复杂,并且可能会产生糟糕的结果。这就是为什么我试图使用尽可能少的球员数据来回答这个问题,并通过替补球员(VORP)、球员效率等级(PER)和年龄来解释每个赛季的工资。我还使用游戏和玩的分钟数来估计一种“调整后的使用率”,由下面的表达式给出:
因此,很容易理解,调整后的使用率永远不会高于 0.20,因为一名球员在球场上的时间不能超过一支球队上场时间的 20%。
但是,我没有构建回归模型,而是将统计数据分为以下 5 个百分点:
图 2:统计百分比
根据皮蓬的贡献,这可能是预测皮蓬应得工资的一个好方法,因为俱乐部总经理不能最大化为每个球员支付的每单位货币所获得的 VORP 或 PER,原因有三:(i) NBA 不是一个竞争性的劳动力市场(有限数量的俱乐部试图获得有限数量的有价值的球员);(ii)俱乐部和球员之间的谈判更类似于拍卖(如果球员不同意俱乐部给他的条款,他可以期待另一个球队的提议);以及(iii)谈判采取长期合同的形式(这意味着俱乐部和球员不会根据生产率逐年谈判工资)。
一个球员挣的工资可以由这些百分比决定吗?一旦我将百分位数作为字符加载,我们可以运行单向方差分析(ANOVA)来回答这个问题。正如我们在下面的 p 值中看到的,我们应该否认我们的零假设(H0 ),即根据变量的百分位数,总体均值是相等的。
图 3:方差分析—百分位数
正如我们在下面的交互图中看到的,VORP 和 PER 似乎都是很好的解释变量,因为绩效越低,工资就越低。在 1996-97 赛季期间,NBA 俱乐部的管理人员成功地根据球员的预期表现来决定球员的工资。只有当我们关注年龄在第 5 百分位的球员时,情况似乎才不是这样,对此最合理的解释可能是当一名球员即将满 30 岁时,他与他签订了更长的合同:随着球员年龄的增长,他不能像过去那样发挥作用。
图 4:互动图(绩效 x 工资 x 年龄)
所以,我的下一步是使用这些数据对我的基础进行聚类。作为一个通常的步骤,我运行了一个肘方法来帮助我发现最佳数量的集群,然后我运行了 Kmeans 算法,最佳数量为 4 个集群。请注意,我没有缩放数据,因为我的所有变量已经处于相同的比例。然后,我将每个球员的聚类数合并到我的主数据框中,发现皮蓬与迈克尔·乔丹、丹尼斯·罗德曼、克里斯·穆林、哈基姆·奥拉朱旺、雷吉·米勒等并列第一。
图 5: Kmeans 分析
有了这些聚类的知识,我们现在可以根据球员的表现和对球队的重要性以及他的职位来分析他的期望工资:
图 6:创建我的箱线图
这就是我们得到的。毫不奇怪,表现更好、对球队更重要的球员过去会挣得更多,这种情况一直持续到我们的时代。根据该图,集群 1 中玩家的平均工资曾经比其他集群中玩家的平均工资至少高 1.8 倍。但是引起我注意的是最低工资和标准差的值。凯文·加内特(160 万美元)、雷·阿伦(180 万美元)、阿伦·艾弗森(220 万美元)等人签下的新秀合同可以解释为什么一个贡献更多的球员工资相对较低。但是皮蓬的收入甚至低于平均工资(225 万美元)。
图 7: Bloxplot 和平均工资(按组)
到目前为止,我们已经有了很好的线索,但还没有确定一个值。我试图采用卡方独立性检验,使用平均工资作为我的参考值,来发现球员的工资是否与其集群和位置相关,因为我们对集群 1 的小前锋的工资感兴趣。p 值表示聚类和位置在统计上相互关联。进行分析,并检查观察值和期望值。正如我之前所展示的,一个小前锋在第一个赛季的平均工资是 200 万美元,但预期的平均工资应该在 270 万美元左右——不是很高,但比皮蓬那个赛季的工资高出 50 万美元。
图 8:卡方检验
那么,小前锋的工资怎么样呢?他们以前比其他位置的球员挣得多吗?少?上面的方框图告诉我们,在第一个集群中,小前锋的平均工资是 200 万美元,标准差是 70 万美元。一旦罗德曼的收入几乎是皮蓬的三倍,考虑到拉特里尔·斯普雷维尔是 1996-97 赛季收入最高的小前锋(700 万美元),认为小前锋过去收入更少并不为过——特别是如果我们考虑到在 90 年代, 大个子(大前锋或中锋)曾经在比赛中有更大的影响力——如果你怀疑这一点,我强烈推荐你柯克·戈德斯贝里的书,《翻滚的球》!
为了消除这种怀疑,除了 Tukey 测试之外,我还使用每个位置的平均工资来评估这种可能性,答案是位置可以决定球员的工资
图 9:方差分析—位置
根据这一点,我们可以说,这场比赛中最伟大的小前锋之一是一个便宜货,不仅因为他的合同不好,还因为 NBA 高管没有为大部分小前锋支付应有的工资。大前锋和中锋是最受关注的球员,也许是因为当时这项运动的特点,争夺空间是一个决定性因素,他们因此得到了更好的交易——哈基姆在乔丹之上被选中,公牛队的第三人是篮板手,甚至查尔斯·巴克利在 1993 年当选 MVP 都不是巧合。他们都是球员,除了荒谬的天赋,还有身体,力量和为空间而战的意愿。
皮蓬最好的机会是尝试得到一份更好的合同,就像他在 1997-98 赛季所做的那样。但是考虑到大个子是最有目标的球员,公牛队的高管们没有动力给他一份更好的合同,如果他们认为他们可以为那个位置找到另一个好球员的话。即使是 33 岁的勇士队传奇人物克里斯·穆林,那个赛季也只赚了 280 万美元(比标准偏差多一倍)。
最后,有人可能会说皮蓬应该像斯普雷威尔一样至少赚 700 万美元,但如果一个先签后换的交易可以给球队带来两名出色的球员,为什么要给皮蓬 700 万美元并超越上限呢?我们可以分析公牛队高层在 1996-97 赛季末面临的选择,是给皮蓬一份新合同。但这需要一堆博弈论,这是另一个帖子的问题。
为什么我们绝对没有过度宣传冠状病毒
系统地
冠状病毒爆发的定量研究。在 Unsplash 上由 Ani Kolleshi 拍照
Disclaimer:如果定量分析和微分方程吓到你了,别担心。本文重要的外卖都印在 ** 粗体 ** (而且是重要的!).此外,图表中有大量的智慧,即使你不在乎所有这些是如何计算的。
新闻告诉我们要保持社交距离。政府告诉我们要自我隔离。世界卫生组织(World Health Organization)正在讨论拉平新感染的曲线,这样我们就不会让世界卫生系统超负荷运转。
有些人声称这完全是一场骗局。其他人看到了情况的严重性,但不明白为什么这比季节性流感更糟糕。其他人再次认为,人死于许多不同的原因,冠状病毒造成的死亡人数与全因死亡率相比看起来相当小。
他们错了。
日冕是一个巨大的威胁。数字说明了一切。
在这个故事中,我将对世界范围内的疫情进行定量分析。这样做的目的是估计如果我们不采取行动,我们将不得不哀悼多少死者。这应该非常清楚地表明您是否需要关注(即自我隔离)。
[## 如果你因为冠状病毒而被锁在家里,11 堂最好的数据科学课
不用花一分钱就可以开始你的职业生涯
towardsdatascience.com](/11-best-data-science-classes-if-youre-locked-home-because-of-coronavirus-ca7d2d74a454)
有多少人被感染了?
出于几个原因,我使用德国的数据作为例子。一方面,欧洲是疫情的新中心,所以选择一个欧洲国家是有意义的。
另一方面,德国并不是第一个遭受日冕袭击的欧洲国家,因此它有更多的时间做好准备。这包括建立测试中心。所以确诊病例的数字可能更接近现实。
我选择了德国,而不是我居住的法国,因为测试似乎要好得多。截至记者发稿时,德国目前的确诊病例比法国多 50%。但是死亡人数也少了八倍!由于两国的医疗保健系统相似,这表明法国的许多病例没有被发现。
图 1:病毒爆发以来人均确诊电晕病例数。水平轴上的第 1 天转化为 2 月 24 日,此时开始获取数据。
德国官方数据由罗伯特·科赫研究所记录。从 3 月 4 日起的数据从他们的档案中提取;对于 2 月 24 日至 3 月 3 日之间的数据,我使用了相应的维基百科页面。不幸的是,由于官方来源没有提供数据,我无法提取恢复的人数。但是由于这个数字到目前为止还很小,忽略它不会使结果有很大偏差。
从 3 月 16 日起,德国推出了社交距离措施,如关闭学校、幼儿园和大学、酒吧、剧院和电影院,鼓励人们在家工作。由于这些措施需要一些时间来产生可见的效果,我们也包括了从 3 月 16 日到记者发稿时的数据。
图 1 显示了自爆发以来德国冠状病毒检测呈阳性的人口比例。截至记者发稿时,这一比例约为万分之十七。相比之下,普通流感每年平均影响 1 万人中的 61 人。
自疫情爆发以来,科罗纳啤酒的销量直线下降(尽管这种啤酒与病毒无关)。照片由汉尼斯·里克特在 Unsplash 上拍摄
会有多少人被感染?
下面是一些数学原理——如果你不介意,可以向下滚动到图 2。
我使用 先生模型来估计德国将出现的感染人数。
在这个模型中,我们有三组人: S 是易感者,即尚未被感染的人。我是目前被感染的人——这是我们感兴趣的。而 R 则是已经痊愈或者死亡的人。
对于时间点 t ,I 表示易感、感染或康复的人口比例,分别为 s(t)、i(t) 和 r(t) 。请注意,我使用小写符号来谈论人口的比例。
这些分数是如何随时间变化的?开始时,除了一小部分感染者——2 月 24 日德国 8279 万人中的 16 人——每个人都是易感的。因此,在时间 t=0 ,我们有以下情况:
越来越多的人被感染,并最终康复(或死亡)。让 b 是被感染者每天传播病毒的平均次数。那么易感人群的数量将随着 b 以及感染者与易感者相遇的次数而减少。我们可以这样写:
同样,让 k 成为每天康复的人的分数。那么最终康复(或死亡)的人数的变化是:
我们假设这个国家的人口数量保持不变,也就是说,没有大规模的移民潮,也没有太多的出生和其他原因造成的死亡。这是一个合理的近似值,考虑到 EU-边境目前已经关闭,出生率也不算太高。那么所有组的变化总和必须为零:
因此,感染者的比例变化如下:
仅此而已!
这组微分方程有解析解,但是有点难处理。所以我让我的计算机来做这项艰苦的工作,用数字来解决它。
当然,我们希望模型能够很好地描述现实。我做了一个有根据的猜测,人们平均生病 15 天,因此 k = 1/15。还有,我猜测一个生病的人平均大约三天就会传染给别人一次,所以 b =1/3=0.33。
我稍微调整了一下模型以更好地适应数据。在图 2 中, b =0.32,但 b 仍为 15。第 12-23 天的感染率被低估了,但之后的感染率与之前持平。这可能会稍微影响我们的结果;稍后我将详细介绍这一点。
图 2:病毒爆发以来德国人均感染人数。红点是截至发稿时的真实数据,蓝线是拟合数据的模型。水平轴上的第 1 天转化为 2 月 24 日,此时开始获取数据。
现在有趣的部分来了:在疫情高峰期会有多少人被感染?这如图 3 所示。我用了和以前一样的模型,但它将在未来几个月展示。
根据我们的模型,在大约第 65 天——也就是离新闻发布还有 40 天——几乎一半的德国人口将在没有任何政府干预的情况下被感染。这太可怕了。
对这个模型有一个警告:即使它在数学上构建得很好,也没有办法调整参数使它更好地匹配第 12 天和第 23 天之间的数据。因此,它可能比实际情况更陡峭,并且在模型中峰值可能太早。
唯一的选择是低估一切。如果我稍微把感染率改成 0.31(而不是 0.32),模型曲线一直在数据下面。有趣的是,这并没有显著改变事情。当我低估时,高峰在 45 天后,46%的德国人口将被感染——非常接近高峰的 47%,如下图所示。
如果政府和人民不采取行动,几乎一半的德国人口将在五月初感染上科罗纳。
图 3:德国从病毒爆发到 6 个月后人均感染人数的模型。水平轴上的第 1 天转化为 2 月 24 日,此时开始获取数据。
医院会有多满?
根据迄今为止最大的研究,许多病例非常轻微,只有 19%的病例是严重的。
目前还不清楚有多少严重的病例需要住院治疗,但让我们假设它约占所有病例的 5%。这是一个乐观的猜测;我假设其他 14%的严重病例有足够的护理人员和设备在家治疗。
如果 5%的病人被感染,这意味着 2.35%的德国人口在高峰期需要病床。
德国是世界上人均医院床位密度最高的 T4 之一,每 1000 名居民拥有 8 张床位。但在高峰期,我们每 1000 名居民需要 24 张床位!
如果你看看重症监护室对床位的需求,情况会更糟。这些都是电晕病患者急需的,但德国每 10,000 名居民只有 3 张重症监护病床。
另外,我还没算上因为电晕以外的其他原因生病的人。这意味着医院将会非常非常拥挤…
即使每四个重症病例中只有一个需要住院治疗,德国也需要比现在多三倍的医院床位(以及医生和护士……)。这还不包括对重症监护室、人工呼吸器等的额外需求。
在疫情爆发的高峰期,医院的床位将变得稀缺。纽约公共图书馆在 Unsplash 上由拍摄的照片
有多少人会死?
不到两个月,德国的疫情将达到顶峰。这段时间不足以开发出治疗方法或疫苗。
因此,人们可以很容易地说,死亡率将会是至少 2.3%,而它到目前为止一直是。
为了估计德国科罗纳的死亡人数,我们首先要估计有多少人被感染。我对图 3 中的曲线进行积分,然后乘以 k。
请记住, k 是每天好转的人的比率,所以 k 的倒数是感染的持续时间。因此,曲线下的面积除以持续时间得出了感染人数。
结果是 99%的德国人会在接下来的 6 个月内被感染。因此,德国每 50 个人中就有 1 个以上会死亡。
太可怕了。
在接下来的六个月里,德国的每个人——或任何其他与电晕打交道的国家的每个人——都会有至少两三个死去的熟人、朋友或亲戚要哀悼。
我们能做什么?
很多!即社会距离和隔离。
在我们的模型中,这意味着减少参数 b ,因为我们想要降低每天的平均感染率。我们无法真正改变 T21,因为这是疾病的内在属性。
图 4 显示了当每日感染率从 b =0.32 降至 b =0.14 时的感染人数。这意味着一个被感染的人每七天才会感染另一个人,而在上面的模型中是每三天。
你可以看到两点:第一,峰值下降到人口的 16%。如果医院里没有人患有其他疾病,也不需要额外的重症监护室,这就足够医疗保健系统处理了。在这种情况下,如果不建设额外的设施,每个人都得到他们需要的护理仍然是不太可能的。但至少没那么糟糕。
图 3:从病毒爆发到 6 个月后德国人均感染人数的模型,包括一些社交距离和隔离。水平轴上的第 1 天转化为 2 月 24 日,此时开始获取数据。
其次,峰值几乎是未来的三倍。这意味着,如果我们将社交活动减半,主要爆发将在 2020 年秋季。这将给我们更多(但可能不够)时间来开发治疗方法和疫苗。
在这种情况下,受感染的总人数也会下降,从之前的 99%下降到 83%。假设死亡率保持不变,这意味着你通过隔离拯救了六分之一人的生命。这在德国挽救了 30 万条生命。
社会距离将使医院免于人满为患,让我们有时间开发治疗方法,并拯救每个国家成千上万人的生命。
最后一点:呆在家里。拯救一条生命。
我知道当你总是穿着睡衣四处闲逛,而你一天的外出只是带着你的狗散步半个小时时,这感觉并不十分英勇。我知道——我住在法国,我们都被隔离在这里。
但是你正在做一些英勇的事情。延缓这场危机的高峰——拉平曲线——必须是我们当前的首要任务。洗手,不要摸脸,呆在家里。留下来。在。回家。
是的,我只是在重复世界各国政府的说法。因为我的定量分析证实了他们所说的一切!你不需要理解所有的分析,但是如果你是一个像我一样的极客,你可以随意探索它们的更多细节
最后,保持健康!
编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里 。
为什么我们如此想走出这条路?
工作使我们习惯于
(摄影:兰迪·欧)
上周早些时候,我认真考虑讨论数据人员如何需要非常谨慎地对待他们在公共场合谈论的关于新冠肺炎的事情。有很多没有上下文的数据和图表,对我们这些做数据的人来说就像一块磁铁。我们很容易在工作中制作一些图表,得出一些不切实际的结论,并通过传播对该领域专家的不信任,意外地造成弊大于利(只需看看第 4 页上他们模型参数的复杂性)。
这种情况的一个例子是在这个 twitter 线程这里[自删除]:
补充说明:这并不是说数据科学家和工程师垄断了新冠肺炎的可疑判断。我向熟悉病毒学和流行病学的人询问了一些他们见过的疯狂事情的例子,并得到了一些 MDs 甚至流行病学家的链接,这些人显然说了一些他们专业领域之外的不正确的事情。但是我已经超出了我的能力范围,不能评价这些人发的推特的质量,所以我避免在这里直接链接任何东西。
与此同时,我偶然看到 Amanda Makulec 的帖子,内容是关于在制作新冠肺炎图表 之前需要考虑的 10 件事情,在我这个外行看来,这非常合理,可以作为在处理新冠肺炎数据时不要完全介入的指南。
回到数据科学,我对整个情况思考得越多,我就越好奇为什么我们会有这种冲动?
我可以想象,我们中的大多数人不会认为我们天真的笔记本电脑天气模型可以揭示一些隐藏的真相,而专业气象学家和超级计算机还没有发现这些真相。为什么我们会认为我们可以比那些花了整个职业生涯思考这个问题的人更好地预测疾病的传播?大喊邓宁-克鲁格、${ field }的狂妄或天真是很容易的,但这并不令人满意。这些人很多既不傻,也没有恶意,为什么呢?
然后我突然想到,我确实是被雇来在我的日常工作生活中做同样的高周转理论分析的,这是导致这些问题的原因。有时候,我天真的方法工作得出奇的好,但是即使它们不成功,如果我做错了事情,我也会得到奖励,但是迭代最终把事情做对(ish)(T1)。这在本质上与正确的科学是相反的。隐藏无效结果的强大压力导致了文件抽屉问题。
问题出在我们围绕自己建立的世界里。
在工业界,人们偏向于行动,而不是正确
机会成本在工业中是真实存在的。决策是在不确定和竞争的条件下做出的,因为没有什么是可以保证的。走出校门的人必须学会的最重要的事情之一是,如何判断什么时候工作“好到足以”用于商业决策。这是一个非常不同的严谨标准,与学术场合的要求不同。
由于决策将在一定时间内做出,无论数据是否可用,数据从业者的角色是在给定约束的情况下提供尽可能多的数据驱动的指导。可以接受的是,所提供的信息是不完整的,有助于增加成功几率的任何东西都比什么都没有好。
当然,我们可以主张等待收集更多的数据,而且肯定会有做出正确决定的时候。但是,当一项交易绝对需要在一周内签署,或者有紧急情况,等待将不是一个选项。
一个例子
想象一下,你在一家销售小配件的电子商务网站工作。有一天,你注意到有一笔不寻常的订单。他们都来自一个通常不会订购很多小配件的州。从以前的销售模式经验来看,这闻起来足够可疑,看起来像某种欺诈,尽管你不确定为什么。你是做什么的?
在这种情况下,大多数人会收集这些可疑订单的数据,寻找模式。都是出自一小撮 IP 吗?都是发往同一个地址吗?是否有某种外部事件以某种方式推动了对小配件的需求(比如疫情恐慌或名人代言)?)营销团队是否购买了该地区的电视广告?
有了这些数据,你需要找到一个令人信服的案例,让管理层知道该怎么做。您是否决定这不是欺诈,并接受将产品运出(可能被盗)的风险,并且订单的资金被收回?还是宣布是欺诈需要取消所有订单,甚至可能全国暂时封锁?您需要迅速做出决定,因为这些订单通常会在 24 小时内发货,除非停止发货,否则您避免损失的选择将变得极其有限。每一分钟,面临风险的资金都在增加。
如果我处于这种情况,我很可能会主张迅速冻结所有可疑订单,为进一步调查赢得时间,而不会让公司面临进一步的风险。在大多数情况下,需要一两个线图,几个谁在下订单的描述,上层管理人员会很容易同意这样的决定。这些年来,我已经非常擅长用数据来与决策者交流这类论点,以引起他们的注意。
看一看决策的风险状况。如果订单是合法的,让订单通过的风险要比给客户带来不便的风险大得多。如果他们的订单有问题,合法买家可能会稍后回来,欺诈不太可能做同样的事情。管理层同意最初的分析,并暂时锁定整个州中具有类似特征的每个人。
如果经过进一步调查,我们发现这实际上是一场欺诈(因为有些人溜了进来),我看起来就像一个阻止了一场灾难的英雄。"阻止了价值 X 美元的诈骗!"诸如此类。
如果我们发现我错了,并且拒绝了好的订单,公司会立即转向路线修正和损失控制。我们发表一份公开声明,也许提供折扣来挽回失去的顾客。我不太可能因为失败而受到指责,因为根据当时的信息,每个人都同意这是正确的决定。
我被称为失败者的唯一真正原因是,我在分析和报告中犯了重大错误或遗漏,近乎于疏忽。
门槛极低。
失败往往不是什么大事
由于奖励结构的不对称,我习惯于以特定的方式行动。以这种方式做了十多年后,它几乎是自动的。
我不在一个错误会导致生命损失或 T2 损失数十亿美元的行业工作。从全局来看,我的失败“无关紧要”。成本相对较低,失败是“快速失败,学习,重复”的科技文化的一部分。这是意料之中的事,我很大程度上被这个事实所掩盖。显然,我更希望尽可能经常有积极的结果,我也在努力做正确的事情,但我的负面影响很小。
最重要的是,整个过程有一个棘轮机制,在这种机制下,具有可见负面影响的变化可以回滚,而正面影响可以保留。拥有撤销按钮意味着你可以非常鲁莽。我敢肯定,你可以看到这是如何不能很好地转化为没有撤销按钮的情况,如紧急疫情通信。
理论?怕什么?
工业工作本质上(通常)是非常理论化的。虽然有“最佳实践”的总体主题,如“具有这些属性的电子邮件具有良好的回复率”,或“人脸往往会吸引用户的注意力”,但它很少被提炼到科学意义上的严格理论。我们通常不会在寻求一个有弹性的、可概括的真理的层面上运作。我们只是对找出适合当前情况的方法感兴趣。
这种做事方式的好处是你可以跟上不断变化的情况。也许没有一个神奇的好邮件或注册页面的通用理论。它可能会随着时间的推移而改变。最佳实践会随着时间的推移而发展。
理论性意味着我们经常用一套类似的工具来解决一系列问题,这些工具在本质上是通用的。例如,线性回归几乎在任何地方都有效,并给出合理的结果,尤其是当你盲目地进入一个问题空间时。当跨领域应用方法时,有趣的事情也会发生。
这种做事方式的问题在于,如果不考虑阐明理论概念,我们就很难真正坐下来思考和探索这个问题的所有因素。这意味着我们的模型不能解释许多产生误差的因素。所以我们最终使用相对简单的模型,因为任何更复杂的东西都会被抛弃。
当你在这样的条件下工作很长一段时间,就很容易认为简单化的模型对每个问题“足够好”,而不是某一组问题。这对于开始一场 Kaggle 竞赛来说可能是好的,但当你涉入一个确实有理论和精炼模型的领域时,它就不起作用了,这些理论和模型已经被许多科学家审查和实地测试了几十年。
所以等等,这里有什么危害?
你可能会问,坏处在哪里?最坏的情况是,我们让公众意识到情况的危险,对吗?现在每个人都落后了,这有什么不好?我们需要马上行动!
当我坐在办公桌前,越来越恐惧地看着美国对新冠肺炎的笨拙回应时,我并不是不赞同这种观点。但即便如此,我认为把东西扔在那里还是很危险的。原因如下。
我最近一直在翻阅各种各样的应急沟通手册,主要是由世卫组织和 FEMA 等政府机构编写的,以了解所有应急管理官员正在努力做些什么。他们的指导方针很大一部分集中在负责处理紧急情况的人需要如何通过有效的沟通建立和保持与社区的信任,以便当机构试图告诉公众以某种方式行动时,公众愿意倾听。
如果公众对沟通有足够的接受度,并且已经了解了情况,那么公众的行动和管理机构的目标更有可能是一致的。这将被认为是一件好事。我们希望人们现在洗手,避免大规模的人群聚集,但我们需要人们的合作来做到这一点。
这就是人们发表不负责任的言论所造成的损害。这不是因为“制造恐惧”或“传播恐慌”,而是因为它侵蚀了公众对专家的信任,无论他们是政府专家还是医学专家,他们试图让人们为了共同利益改变他们的行为。
信任很容易失去,也很难赢得,尤其是在有死亡风险的情况下。所以侵蚀的影响往往是不利的。这上面也没有撤销按钮。在这个时代,谣言一旦开始,就会很快失控。
在这种环境下,数据和可视化尤其危险,因为人们把重量和可信度归因于彩色图片和数字。即使这些数字完全是胡说八道,仅仅是数字的存在和右边标有“已感染”的红色可怕图表就让人们很难忽视。
这里是 Aner Tal 和 Brian Wansink 在 2016 年发表的一篇名为“被科学蒙蔽”的可爱论文,其中(在 3 项研究中的第 1 项)61 名参与者在一项基于土耳其机器人的研究中发现,当一种药物的广告有一个与广告文本相比没有添加新信息的图表时,它会更有说服力。虽然纯文字说服了 2/3 的参与者相信药物是有效的,除了一个人以外,所有看过图表的人都认为药物是有效的。
多亏了科学的神奇光环,我们才真正有了进入人们信息处理的作弊代码。这既可以用来行善,也可以用来作恶。
请小心这种力量。
这篇文章最初发表在 3 月 17 日兰迪的时事通讯上:计数材料。你可以免费订阅,一周收到一次类似的帖子,没有重新发布的延迟。
为什么我们关心日志丢失
Kaggle 比赛中最常用的度量标准
(图片由作者提供)
机器学习管道中最关键的部分是性能评估。要了解模型的性能和缺点,需要一个强大而全面的评估过程。
对于分类任务,日志丢失是最常用的指标之一。它也被称为交叉熵损失。如果您关注或参加 Kaggle 竞赛,您会发现原木损失是评估指标的主要选择。
在本帖中,我们将看到是什么让日志丢失成为首选。在开始举例之前,让我们简要解释一下什么是日志损失。
对数损失(即交叉熵损失)通过比较实际类别标签和预测概率来评估性能。使用交叉熵来量化比较。
交叉熵量化了两个概率分布的比较。在监督学习任务中,我们有一个目标变量,我们试图预测。使用交叉熵比较目标变量的实际分布和我们的预测。结果是交叉熵损失,也称为对数损失。
在计算对数损失时,我们取预测概率的自然对数的负值。我们对预测越有把握,测井损失就越低(假设预测是正确的)。
例如,-log(0.9)等于 0.10536,而-log(0.8)等于 0.22314。因此,90%的把握比 80%的把握会导致更低的测井损失。
如果你想进一步阅读,我在另一篇文章中详细解释了熵、交叉熵和对数损失的概念。这篇文章更像是一个实践指南,展示了日志丢失如此重要的原因。
在分类任务中,模型通常为每个类别输出一个概率值。那么具有最高概率的类别被指定为预测类别。传统的度量标准,如分类准确度、精确度和召回率,通过比较预测类和实际类来评估性能。
考虑下面的情况。
import numpy as npy_true = np.array([1,0,0,1,1])
这是一个二元分类任务,有 5 个观察值标记为 0 或 1。这是两个不同模型的输出。
y_pred1 = np.array(
[[0.2, 0.8], #predict 1
[0.6, 0.4], #predict 0
[0.7, 0.3], #predict 0
[0.65, 0.35], #predict 0
[0.25, 0.75]]) #predict 1y_pred2 = np.array(
[[0.1, 0.9], #predict 1
[0.7, 0.3], #predict 0
[0.85, 0.15], #predict 0
[0.55, 0.45], #predict 0
[0.2, 0.8]]) #predict 1
虽然预测的概率不同,但是当选择具有最高概率的类别时,预测的类别是相同的。
因此,如果我们使用分类准确度来比较这两个模型,则两个模型的结果将是相同的。
from sklearn.metrics import log_loss, accuracy_scorey_pred1_classes = np.array([1,0,0,0,1])
y_pred2_classes = np.array([1,0,0,0,1])accuracy_score(y_true, y_pred1_classes)
0.8accuracy_score(y_true, y_pred2_classes)
0.8
两个模型都正确地预测了 5 次观察中的 4 次,因此精确度为 0.8。看起来这些模型的表现是一样的。这样想是错误的,因为预测的概率之间有很大的差异。
现在让我们基于日志损失来比较它们。
log_loss(y_true, y_pred1)
0.4856log_loss(y_true, y_pred2)
0.3292
如你所见,差别很大。认为这两个模型表现相同是错误的。
如果预测是正确的,则测井损失奖励在预测时更加确定。90%的对数损失小于 80%的对数损失。
另一方面,如果预测是错误的,它也惩罚更高的概率。假设对于特定的观察,真实的类标签是 1。两个模型预测结果为 0,概率分别为 0.65 (65%)和 0.55 (55%)。0.65 的对数损失高于 0.55 的对数损失。
考虑下面的场景。
(图片由作者提供)
所有预测的概率都是相同的,除了一个观察结果是唯一的错误预测。第二个模型更能确定错误的预测。让我们计算这种情况下的对数损失。
log_loss(y_true, y_pred1)
0.4856log_loss(y_true, y_pred2)
0.6550
第二个模型的对数损失更高,因为错误预测的概率更高。
对数损失考虑了预测的概率。它不仅基于正确的预测来评估性能,而且根据预测的概率来惩罚错误的预测。
这就是为什么 log loss 是一种稳健且全面的评估度量,并被广泛用于机器学习领域的原因。
感谢您的阅读。如果您有任何反馈,请告诉我。