为什么对新冠肺炎死亡率的比较具有误导性
新冠肺炎的综合死亡率是特定年龄死亡率的平均值。由于各州和国家的人口统计学差异,大多数“总死亡率”的比较是误导性的或无用的。
从最年轻的人到最年长的人,新冠肺炎的死亡率相差多达 400 倍。当计算新冠肺炎的总死亡率时,总死亡率是年轻人、老年人和介于两者之间的所有人(即整个人口)的死亡率的综合。
在我们抛开测试差异后,不同州和国家的死亡率差异主要是人口统计学差异的结果,而不是疾病本身差异的结果。
这篇文章解释了为什么新冠肺炎不同地区的明显差异主要不是生物学的作用,而主要是 T2 数学的作用。
加权平均是如何工作的:新冠肺炎的例子
综合死亡率计算为特定年龄死亡率的加权平均值。(在本文中,当我说“致死率”时,我指的是感染致死率,或 IFR 。有关加权平均值的一般描述,请参见此文章。)
让我们来看看加权平均值是如何影响疾病致死率的。
假设新冠肺炎 40 岁以下人口的死亡率为 0.022%,40 岁及以上人口的死亡率为 1.04%。我没有编造这些数字;它们是根据我在本系列第 2 部分中介绍的实际费率计算的。
再假设你有两个国家:青年的美国和老年的共和国,它们的名字暗示了人口统计数据。让我们看看这种病毒在这两个国家是如何发展的。
青年的美国
在年轻的美国,100%的人口年龄在 40 岁以下。由于 40 岁以下人口的死亡率为 0.022%,这意味着整个国家的死亡率为 0.022%。这显示在表 1 中。
表 1 —假设国家和美国的新冠肺炎死亡率,其中所有人口的年龄都在 40 岁以下。总感染死亡率为 0.022%。
总死亡率是一个加权平均值,但老年人口的权重为零,因为在这个假设的例子中,老年人口占 0%。因此,整个权重为 0.022%系数,总结果为 0.022%。
一个从美国青年广播的记者可能会报道,“新冠肺炎的风险被大大夸大了。我们看到的死亡率只有五千分之一。新冠肺炎远没有季节性流感致命。”
在我们开始谈论吸烟、重症监护室床位或合并症之前,意大利的死亡率比美国相同疾病的死亡率高 53%。这种差异并不是这种疾病在这两个国家表现不同的结果;这是因为人口统计学不同。
老年共和国
与此同时,在老龄化的 T4 共和国,100%的人口年龄在 40 岁或以上。
同样,总死亡率是一个加权平均值,其中一个权重是零,但在这种情况下,年轻人口是 0%,因此 100%的权重是基于老年人口及其 1.04%的比率。如表 2 所示。
表 2——假设国家老年共和国的新冠肺炎死亡率,其中全部人口年龄在 40 岁或以上。总病死率为 1.04%。
与《美国青年》的记者不同,《老年共和国》的记者有权做出这样的报道:“新冠肺炎令人难以置信地致命,杀死了超过 1%的感染者。它的致命性是季节性流感的十倍。”
在这两种情况下,疾病是相同的,但记者们对新冠肺炎在他们国家的致命性的不同说法都是正确的,因为这些国家的人口统计数据不同。
两国的联合
现在,假设年轻的美国和老年的 T2 共和国合并成一个国家。我们可以称这个组合为美利坚合众国、,因为图中显示的人口数和死亡率实际上是美国的正确数字。
为了组合这些数字,我们计算一个加权平均值,其中两个权重都不为零。如表 3 所示。
表 3-美国新冠肺炎死亡率。总病死率为 0.51%。
来自美国的记者可以准确地报道“新冠肺炎的总死亡率为 0.5%。”
对于同样的疾病,一个国家的死亡率怎么可能是另一个国家的 50 倍?
由于基于年龄的死亡率完全相同,这三个国家的总死亡率相差 50 倍。这种疾病在这三个国家没有什么不同。一个 65 岁的人从老年共和国搬到青年美国不会神奇地将他们的风险从 1.04%降低到 0.022%。不管他们生活在哪个国家,他们的风险是完全一样的。
问题在于这些国家的人口不同,因此不同人口面临的综合风险也不同。这种死亡率上的差异不是医学现象。这是一种基于加权平均值计算方式的数学现象。
与真实国家的真实死亡率比较
到目前为止,我已经给出了一个基于年龄的体重的简化视图,使数学更容易理解。为了更现实的目的,我们需要使用更小的年龄段。表 4 显示了美国更详细的基于年龄的人口和死亡率。
表 4——美国基于年龄的详细新冠肺炎死亡率。按年龄划分的感染率(IFRs)来自本系列的第 2 部分,其中描述了 IFRs 的计算方法。
在疫情早期,意大利有大量关于死亡率的新闻报道。没有充分覆盖的是意大利人口比美国人口年长多少。意大利是世界上人口最老的国家之一。它拥有 16000 多名 100 岁以上的人。
如果我把我为美国计算的相同的基于年龄的死亡率简单地应用于意大利人口,我得到的结果如表 5 所示。意大利的总死亡率为 0.78%,而美国的总死亡率为 0.51%。
表 5 —意大利基于年龄的死亡率。意大利人口的总死亡率为 0.78%。
这使得意大利的死亡率比美国高 53%。(数学上是(0.78%-0.51%)/0.51% = 52.9%。)
在我们开始谈论意大利吸烟率上升 40%的影响,或者意大利人均重症监护室床位不到美国一半的 T2 事实之前,仅仅因为人口年龄的差异,意大利在新冠肺炎的死亡率就比美国高 53%。在意大利,一个 65 岁的不吸烟且没有并发症的人和一个 80 岁的人有着同样的风险。从比例上来说,区别在于意大利 80 岁的老人是美国的两倍。
当计算中考虑了所有相关变量时,新冠肺炎的“总死亡率”可用于特定的统计目的。出于其他目的,新冠肺炎没有一个正确的总死亡率,我们需要停止迷惑自己,以为有。
从国家到州:州死亡率
同样的现象也出现在美国的州一级。美国的平均年龄是 38.2 ,但是各州的平均年龄从犹他州的 31.0 到缅因州的 44.9 不等。
从表 6 可以看出,新冠肺炎在犹他州的总死亡率为 0.36%。请注意,基于年龄的死亡率仍然没有改变。
表 6 —犹他州的新冠肺炎总死亡率为 0.36%。
由于缅因州人口较老,其死亡率为 0.63%,如表 7 所示。
表 7–缅因州的新冠肺炎总死亡率为 0.63%。
仅仅基于人口统计学的差异,缅因州的死亡率比犹他州高 75%(或 1.75 倍)。
为了形成鲜明的对比,我们可以比较一下加拿大努纳武特地区,那里的平均年龄为 26.2 岁。如表 8 所示,如果这种病毒曾经到达那么远的北方,它将导致 0.16%的总死亡率。(努纳武特目前没有新冠肺炎病例报告。)
表 8 —努纳维特的总体新冠肺炎死亡率为 0.16%。
缅因州的死亡率比犹他州高 75%,比努勒维特高 3.9 倍,因为缅因州 70 岁和 80 岁的老人比犹他州或努勒维特多得多。疾病没有什么不同,但是人群不同。
结论
媒体报道没完没了地关注新冠肺炎的总死亡率,但“总死亡率”几乎毫无意义。从年轻人到老年人,死亡率相差 400 倍,而且由于国家和州人口统计的差异,死亡率也相差 2-4 倍。
当计算中考虑了所有相关变量时,新冠肺炎的“总死亡率”可用于特定的统计目的。
出于其他目的,新冠肺炎没有一个正确的总死亡率,我们需要停止迷惑自己,以为有。
这是关于新冠肺炎死亡率的 5 集系列报道的第 3 集:
- 第一部分 :为美国建立一个全面的基础 IFR
- 第二部分 :基于年龄的 IFRs
- 第 3 部分:基于人口统计的各州和各国 IFRs 的差异
- 第四部分 :按个别年份分列的 IFRs
- 第 5 部分:有无共病的国际财务报告准则
更多详情请访问新冠肺炎信息网站
更多美国和州级数据,请查看我的新冠肺炎信息网站。
我的背景
20 年来,我一直专注于理解软件开发的数据分析,包括质量、生产率和评估。我从处理噪音数据、坏数据、不确定性和预测中学到的技术都适用于新冠肺炎。
为什么计算熊猫和 NumPy 的标准差会产生不同的结果?
好奇?让我们来谈谈统计数据、人口和样本…
图片由皮克斯拜的 Gerd Altmann 提供
有多少人注意到当你用 pandas 计算标准差并与 NumPy 函数的结果比较时,你会得到不同的数字?
我打赌你们中的一些人没有意识到这个事实。即使你知道,你也可能会问:为什么?
在这篇短文中,我们将证明:
使用两个库的标准偏差结果确实是不同的(至少乍一看是这样),
讨论为什么会这样(关注总体、样本,以及这如何影响每个库的标准偏差的计算)
最后,向您展示如何使用 pandas 和 NumPy 获得相同的结果(最后,他们应该就标准差这样一个简单的计算达成一致)
让我们开始吧。
NumPy 和 pandas 的标准差
让我们首先创建一个带有权重和高度的简单数据框,稍后我们可以使用它来计算标准差。
import pandas as pddf = pd.DataFrame({'height' : [161, 156, 172],
'weight': [67, 65, 89]})
df.head()
这是一个只有两列三行的数据框。我们将只关注一个列,即 weight ,并比较这个特定列的 pandas 和 NumPy 的标准偏差结果。
先从熊猫说起吧:
df.weight.std()
13.316656236958787
现在让我们使用 NumPy 做同样的事情:
import numpy as np
np.std(df.weight)
10.873004286866728
我们得到 13.31 和 10.87。它们确实是完全不同的数字,为什么会这样呢?
人口标准差
出现上述数字差异的原因是软件包使用不同的公式来计算标准偏差。最常见的标准差公式是:
其中:
σ =总体标准差
人口数量
xi =来自总体的每个值
=人口的意思
这个等式指的是总体标准差,这是 NumPy 默认使用的。
当我们收集这些数据时,实际上很少与人群打交道。更有可能的是,我们将研究人口样本,而不是整个人口本身。
样本标准偏差
当我们研究样本而不是人群时,问题会有所改变。因此,标准差的新公式为:
其中:
σ =样本标准偏差
N =样本的大小
=来自样本的每个值
=样本意思
这个等式指的是样本标准差,这是熊猫默认使用的。
总体和样本之间的差异
正如你已经注意到的,区别在于等式的分母。当我们计算样本标准差时,我们除以 N- 1 ,而不是像我们计算总体标准差时那样只使用 N 。
这是因为在统计学中,当从样本中计算总体标准差时,为了得到一个无偏估计量,我们应该使用(N-1)。这就是所谓的一个自由度,我们减去 1 是为了得到一个无偏估计量。
我将不讨论为什么我们应该使用一个自由度的细节,因为这是一个相当复杂的概念。如果你愿意,你可以看这个视频来更好地理解。
那么熊猫标准差是正确的吗?
所以我告诉过你,为了得到无偏估计量,你应该用 N-1。这是通常的情况,因为大多数情况下你要处理的是样本,而不是整个群体。这就是为什么熊猫的默认标准差是使用一个自由度计算的。
然而,情况可能并不总是如此,所以在使用其中一个之前,请确定您的数据是什么。同样,如果您想使用一个特定的库来实现其中一个,您可以使用参数 ddof 来控制两个包中的自由度。
让我们看一下以前的例子,在这个例子中,我们使用 pandas 得到了 13.31σ=,使用 NumPy 得到了 10.87σ。
*df.weight.std()
13.316656236958787import numpy as np
np.std(df.weight)
10.873004286866728*
您可以通过使用 ddof 参数来更改 NumPy 中的自由度,以将其更改为无偏估计量:
*import numpy as np
np.std(df.weight, ddof=1)
13.316656236958787*
您可以看到,现在结果与熊猫计算给出的默认标准差相同。
同样,您可以更改默认的熊猫标准差计算,使其不使用自由度:
*df.weight.std(ddof=0)
10.873004286866728*
总结
在本文中,我们讨论了计算样本和总体的标准差,并触及了统计学中自由度的概念。
我们已经演示了如何在 pandas 和 NumPy 中计算标准偏差,以及如何能够控制两个包中的自由度。
我希望这解决了最初的好奇心,并解释了为什么在使用一个库或另一个库时,标准差结果最初似乎是不同的。
最初发表于 aboutdatablog.com: 为什么计算熊猫和 NumPy 的标准差会得出不同的结果?,2020 年 4 月 29 日。
PS:我正在 Medium 和aboutdatablog.com上撰写以简单易懂的方式解释基本数据科学概念的文章。你可以订阅我的 邮件列表 在我每次写新文章的时候得到通知。如果你还不是中等会员,你可以在这里加入。**
下面还有一些你可能喜欢的帖子
** [## python 中的 lambda 函数是什么,为什么你现在就应该开始使用它们
初学者在 python 和 pandas 中开始使用 lambda 函数的快速指南。
towardsdatascience.com](/what-are-lambda-functions-in-python-and-why-you-should-start-using-them-right-now-75ab85655dc6) [## Jupyter 笔记本自动完成
数据科学家的最佳生产力工具,如果您还没有使用它,您应该使用它…
towardsdatascience.com](/jupyter-notebook-autocompletion-f291008c66c) [## 当你开始与图书馆合作时,7 个实用的熊猫提示
解释一些乍一看不那么明显的东西…
towardsdatascience.com](/7-practical-pandas-tips-when-you-start-working-with-the-library-e4a9205eb443) [## Pandas 数据操作函数:apply()、map()和 applymap()
以及如何在熊猫身上正确使用它们…
towardsdatascience.com](/pandas-data-manipulation-functions-7b3519fc1370)**
为什么 CronTab 是终极数据科学后端工具
为什么 CronJobs 被低估为简单自动化的支柱。
介绍
数据科学的最终目标通常是自动化。虽然使用 Python、R 或 C 可以对传入的数据和预测做到这一点,但这些语言在运行系统操作方面做得不太好,而您可能需要运行系统操作来完成某些任务。通常可能会有一个您希望每天运行的脚本,或者一个需要在特定时间执行的简单文件移动。
幸运的是,在 Unix/GNU+Linux 中,我们又有了 Bourne Shell,简称 BASH。学习 Bash 将允许您通过 ssh、管理器或本地终端调用任何应用程序服务器端。这就是为什么今天使用的几乎所有服务器都是类 Unix 的根本原因,因为 Bash 已经成为计算开发前沿的主要工具和必需品。虽然 bash 很棒,但它并不是现成的自动化脚本,为了利用 Bash 命令自动运行脚本,我们需要使用一个名为 CronTab 的工具。
CronTab 是什么?
CronTab 是一个通常在服务器后端使用的工具,它允许用户指定运行 Bash 命令的时间。这个 Bash 命令的范围可以从移动和获取文件到运行 Python 脚本,这是非常强大的。这在哪里会派上用场?我发现 CronTab 在数据科学中的一个很好的用途是运行一个脚本,该脚本重新训练并输出一个序列化的模型供端点使用。
这可能是最容易也是最被低估的重新训练机器学习模型的方式。使用 CronTab,您可以在大约 30 秒内用一个文件设置再培训。这对于在数据库中存储数据的模型,或者可以向其中添加数据的模型(如 LSTM 模型)尤其有用。
使用 CronTab
使用 CronTab 相对简单,而且相当容易。首先,您需要从各自的包管理器安装 CronTab:
sudo dnf install crontab
为了编辑 cronjobs,您需要运行 crontab -e。
crontab -e
这应该会在 GNU Nano 或 VIM 中打开一个配置文件。为了安排 CronTab,您需要将适当的时间转换为 cron 时间戳。首先,*当然意味着列表中任何值的全部。这些值按以下顺序排列:分钟、小时、日(一个月中)、月、日(一周中),当然这些都存储为整数,例如:
4 5 * * *
翻译过来就是:
“一周中每一天的每一个月的每一天的第 4 小时的第 5 分钟。”
换句话说,这将运行在
4:05
另一个简单的例子:
* * * * 2
这将在每个星期一运行,因为 2 是一周的第二天,当然是星期一。添加时间戳后,我们还需要给 cronjob 一个命令。这可以是任何 Bash 命令,但是请记住,您需要将完整的目录放入您正在使用的任何文件中。
5 * * * * . /var/www/rebuild_endpoints.sh
现在,如果您在 Nano 中,只需按 CTRL+O,然后按 CTRL+X,您的 Cronjob 就可以工作了!如果您在 VIM 中,那么只需:wq 来写文件并关闭 VIM。这就是全部了!
结论
我想强调一下这个强大的工具,因为以我的经验来看,它真的比任何人想象的都有用。我通常使用它在特定时间将新的更新模型自动放入我的端点,这样我的模型就可以用新数据进行训练,而无需维护工作。我保证,如果您熟悉服务器、Bash 和 CronTab 作为您的数据科学武库中的一个工具,您肯定不会后悔,并且您可能会惊讶于它原来是多么有价值!
为什么要首先明确数据科学模型的目的?
图片由名词项目和【thebluediamondgallery.com 提供
“如果给我一个小时来拯救地球,我会用 59 分钟来定义问题,用 1 分钟来解决问题。”
阿尔伯特·爱因斯坦说过。数据科学模型开发也是如此吗?
您可能同意,模型开发过程经常会失去对要解决的问题的关注,导致未满足的期望,甚至放弃项目。在数据科学项目中,十分之八的项目失败是很常见的。但是为什么会这样呢?
通常在项目开始时,没有计划好正确的涉众的识别以及与他们的紧密合作。尽管这是项目成功的基础,但它缺乏极端的关注和判断。
首先,关键是要知道如何使用这些模型,它们的结果是什么,以及这些结果将达到什么目的。确切地说,模型的目标并没有清楚地列出来。模型将被使用的端到端过程没有被清楚地阐明和记录。模型在这些过程中的影响没有得到广泛的讨论和认可。仍然有许多不清楚的陈述和未完成的工作。流程的完整大图是不可用的或高质量的。包含模型及其真实影响的流程图没有经过彻底的探索、审查和批准。它如何影响过程之外的实体没有被充分考虑。
此外,当正确的利益相关者没有参与这些讨论时,流程细节没有得到足够的引出、验证和批准。急于进入下一步,做更令人兴奋的开发模型的工作会分散开发团队的注意力。充足的时间没有在计划中被封锁,或者没有建立适当的质量关口,它使团队双方产生分歧。
所有这些不明确的目标,对这些模型使用方式的期望差距,最终会产生许多问题,最终,您可能会发现开发该模型是为了解决一个与预期不同的问题。
因此,如何确保模型的目的是绝对明确的,并且它们是相应地构建的。所有的模型实际上都是错误的——一个模型只在目的上是正确的。因此,为了建立一个合适的模型,在项目开始的时候,就需要与合适的涉众进行接触。与利益相关者的讨论必须深入和严格,以得出关于模型的目标及其使用的绝对合理的结果。它需要完整地阐述端到端流程,模型将如何使用,以及它们将如何解决问题,并经过彻底的讨论、同意、记录和批准。最后,模型在端到端流程中的影响必须得到利益相关方的验证和批准,以确保它们符合组织的价值观、原则和行为准则。
因此,明确模型的目的、它们的目标以及它们要实现的结果是极其重要的,之后的一切都要遵循这个目标。然后开发的模型将满足所有的期望,并且也是合乎道德的。
最初发表于【https://www.seemasutradhar.com】
为什么削减工作签证不能解决失业问题
八分之一的美国人发现自己失业了,随着新冠肺炎案件的攀升,党派分歧使国会的反应陷入瘫痪。为了应对后果,美国参议院的一些人要求特朗普总统减少移民,本月,政府暂停发放许多新的工人签证,同时寻求开始“对一系列广泛的移民法规进行永久性修改”。尽管限制的最终形式和持续时间仍不明朗,但这些政策有帮助吗?先前的研究和分析对削减工作签证以解决 COVID 失业提出了质疑。事实上,这可能会让事情变得更糟。
**首先,先前的研究表明,减少移民可能不会为公民创造就业机会。**早期对专业和非专业职业的调查未能发现增加限制的好处,一项以美国为重点的研究观察到“H-1B[签证]就业的大幅下降没有被本地就业的增长抵消”6[7]。特别是对于 H-1B 劳工来说,美国可能只是缺少能胜任签证持有者工作的工人,而这些人的技能绝对需要多年的学习。事实上,研究表明,总的来说,移民实际上可能会减少长期失业。综上所述,早期的研究强调了新限制的风险和有限的好处。
与去年同期相比,COVID 期间每个主要职业群体的失业率都有所上升(2020 年 5 月对 2019 年 5 月)。左边的失业人数增加了。先前和新的失业在右边。
考虑到这些先前的发现,对最近数据的分析进一步表明,潜在的收益无法证明限制工人签证的成本是合理的。在疫情之前就有很多关于这个主题的研究,因此,尽管之前的证据已经不鼓励减少这些签证,但本分析转向最近的信息。然而,即使有可能不正确的假设,即从签证持有者手中夺走的每一份工作都将流向同一主要职业群体的公民,并且随着所有签证的完全取消,失业率仅下降了不到半个百分点(13.3%至 12.9%),只有四个主要的 BLS 职业群体的改善超过一个百分点[9[10]。鉴于这一慷慨的预测将限制发挥到了极致,来自最新订单的实际数字可能要少得多**。此外,鉴于早期的发现“减少上限导致 1B 就业下降,而没有产生本地就业的抵消性增长”和典型的不可约失业率,这些令人沮丧的预测可能高估了*收益,进一步警告这些限制[ 6 ][ 11 ]。
即使对签证工人的减少做出了慷慨的预测,大多数职业群体的失业率也下降很少。请考虑一下,失业率大幅上升的职业群体(左侧)的预期收益往往非常小(右侧)。
鉴于这一低上限,仔细观察就能解释为什么签证工人的分布削弱了改善失业率的潜力。为了更深入地理解这些发人深省的预测,数据显示,只有 1/200(0.5%)的美国就业劳动力持有受调查签证*,而 BLS 追踪的大多数(82%)主要职业群体持有客工签证的比例不到 1%。这意味着美国签发的签证数量太少,不足以对 COVID 的大规模失业产生重大影响。此外,在 COVID 期间失业率高增长的职业中,外来工人很少。具体而言,平均只有 0.2%的失业大幅增加的职业(2020 年 5 月与 2019 年 5 月相比,绝对值≥5%)持有这些签证,相比之下,相对较小(<绝对值 5%)增加的职业持有这些签证的比例为 2.2%(p<0.05)。鉴于疫情期间外来工集中在表现相对较好的职业,在最需要帮助的地方几乎没有潜在收益。
持有签证的工人比例最大的职业群体(左图)失业率的增幅往往最低(右图)。例如,“计算机和数学职业”在图表的左侧排名靠前,而在右侧排名靠后。
最后,在讨论了减少外来工人的低潜在收益后,本文转向了高潜在成本。由于签证限制,一些工作可能会流向本地工人,但经济可能会失去其他工作,这是一个难以预测的成本。然而,考虑到失业和签证集中度之间的不匹配,考虑到签证工作人员*所从事的八分之一以上(13.5%)的工作目前没有足够的公民甚至有可能担任这些职位,如果将所有签证工作人员的工作给予相同主要专业群体的失业公民。当然,公民可能会改变职业,但特别是对于 H-1B 的职位,这可能需要相当长的时间,许多角色需要多年的培训。无论如何,本地劳动力供应限制了签证减少带来的收益,并为潜在风险描绘了一幅令人担忧的画面。**
圆点代表 BLS 各主要职业群体。那些失业率大幅上升的国家,持有签证的工人相对较少。这种不匹配可能会增加潜在的失业和限制。
也就是说,上述预测可能高估了收益,低估了成本。根据之前的研究结果,外来务工人员的减少可能会导致工作转移的效率低于上述预测,尤其是 H-1B 或类似签证。从观察签证上限下降的先前研究来看,与从上述假设中可能看到的情况相比,签证减少后本地就业的有限增长可能表明“低替代性”[ 6 ]。例如,其他效率低下的情况,如并非某个主要职业群体中的所有个人都具备同一群体中所有其他工作的资格,或者地理位置不匹配,可能会进一步恶化前景。这意味着这种分析可能不仅高估了收益,而且低估了生产率的损失。由于任何危及这些工作的事情,无论是缓慢淘汰还是快速减少,都需要非常谨慎,这些预测的局限性进一步强调了不可能的失业减少无法证明风险的合理性。
已审查的临时工人签证类别汇总,以及每类签证的总数(仅限于 2020 年 5 月生效的签证)。详情请见下文*。
**这项分析发现,减少外来工人带来的不太可能的收益在规模上仍然有限,这表明先前研究中充分记录的风险几乎没有上升空间。**这些临时签证项目为美国提供了获得多样性、人才和未来增长的重要途径,尽管有证据表明低可替代性进一步限制了这些可能的收益,但这些项目的数量太少,不可能实现美国所需的失业改善。这些工人中的许多人从事着对国家生产力和推动国家创新至关重要的工作。总体来看,这些数据和之前的研究减少了削减这些重要签证的理由。尽管人们希望在疫情期间保护美国经济,但政策制定者将需要把目光投向别处。这些违背文献建议的减少,以及如此小的不太可能的收益,根本无法抵消高的潜在成本。
感谢 克里斯库恰尔切克 和 史瑞亚斯贾亚娜 对本文早期草稿的建议和评论。
想要在数据、设计和系统的交叉点上做更多的实验吗? 关注我更多 !
*分析在以下方面利用 OFLC 数据:H-1B、H-1B1、E-3、H-2A 和 H-2B[10]。这主要是参议员和特朗普政府讨论的项目,但 OPT(授予在美国学习的国际学生短期签证)、EB-5(外国投资者)、L1(现有员工的公司内转移签证)和 H4(家属)除外[4][5][12]。
** 请注意,这些预测使用全面淘汰签证,以获得影响的“上限”。目前的政策针对新签证[5]。也就是说,所讨论的动力仍然存在,但收益和成本都较小。然而,如果增加新的法规或扩大目前的限制,政策可以发展成为一个更大的逐步淘汰。
仪表板没有死
有很多很棒的新工具。为什么仪表板还挂着?
原始数据。去那里找点理智吧!(照片由克林特·王茂林在 Unsplash 上拍摄)
我刚刚在 Medium 上读到一篇关于仪表板之死的好文章。它认为专门版本的 Jupyter 笔记本比传统的商业智能仪表盘要好得多。我必须承认,我立刻爱上了这个想法!
如果你不知道这些笔记本是什么:它们基本上是一种用嵌入的代码块编写格式化文档(想想:MS Word)的方法,这些代码块可以直接在页面上执行,并在页面上显示结果。这使您可以漂亮地记录和解释整个过程,还可以直接对代码进行更改和试验,直接在页面上看到更改后的结果。这种方法在机器学习应用程序中变得非常流行,在这些应用程序中,实验确实是获得好结果的最重要的步骤之一。
如果我认为自己是一个仪表板用户,我肯定会喜欢这种方法,原因正如文章中所述:笔记本让你清楚地看到过程,并有机会玩它。
当然,我现在可能是一名管理用户,但我有 IT 和设计背景,我喜欢数学。为了让笔记本电脑方法为你的非工厂标准 CEO 工作,我认为首先需要解决一些挑战。
实际的数据源
这个总是房间里最大的。即使在这些当前的笔记本电脑出现之前,自助报告也不是什么新鲜事。it 的主要挑战过去是,现在仍然是让最终用户可以使用正确的数据源。典型的事件链是:首先,将报告工具直接附加到日常工具的生产实例中。这为用户提供了最新状态的所有数据。显而易见的缺点是,其中一个用户会通过创建非常苛刻的(或简单错误的)数据请求而使您的生产系统瘫痪。然后,将您的报告工具附加到生产系统的每日拷贝中。不错的选择。用户试图愉快地挖掘,但有些人实际上需要接近实时的数据,并对每天的转储感到不满。这可能没问题,我们不必让每个人都开心。然而,更重要的是,许多用户会发现他们不理解源系统中的数据结构。您的后端系统的关系数据库在设计时并没有考虑到报告!用户可能需要构建复杂的连接来理解数据,在许多情况下,这可能并不明显。他们可能认为他们正在按地区汇总一个月的所有汽车销售,而实际上是在汇总销售和取消的优惠。最重要的是,我们也突然开始碰到讨厌的数据保护法,并需要确保个人数据不会被大多数报告用户接触到。因此,你开始用漂亮的 OLAP 立方体构建老式的数据仓库结构,或者开始创建业务视图,使用户更容易选择正确的数据。由于对原始数据进行操作时,性能也可能会有问题,所以您也开始对其进行一些整合。
这是一项繁重的工作,但它确实允许管理用户执行自助报告。在某种程度上,他们面临着与使用准备好的仪表板时相同的困境。他们需要信任准备好的数据源。
访问权限
当谈到数据源时,我想到的是至少知道自己在做什么以及为什么做的用户。我的经验告诉我,这些不是唯一的用户类型。
我真的要看手册才能了解这个吗?—与 Raj 在 Unsplash 的公路旅行照片
进入通常使用仪表板的职位的人可能有一些很好的资格,但数据科学通常不是其中之一。通常他们喜欢玩所有的开关,并会很快对结果形成强烈的意见。因此,通过提供所有工具的笔记本风格的方法,准备好快速找到数据科学家们调整得面目全非的工作。因此,即使您打开了处理数据的可能性,您仍然希望保持一个基本的工作流程,即有人请求一个关键绩效指标(KPI ),有人创建一个不会被实验覆盖的有效且安全的版本。
仪表板的用例
虽然许多经典的仪表板可能只是因为有人说 KPI 对于执行管理评审很重要而创建的,但是一些仪表板实际上有定义的用例。它们要么显示一些由多名经理监控和讨论的商定 KPI,因此只要小组没有就新定义达成一致,就应该始终保持不变。或者用于监控外部合同中的服务级别协议(SLA)。这些类型的仪表板应该非常简洁、清晰和简单地显示所需的信息。其中一些甚至可以提供给外部供应商,所以这里没有游乐场。
斗争是真实的
虽然所有这些都与笔记本背道而驰,但到目前为止,我仍然是这个想法的忠实粉丝。
仪表板需要做好。最重要的是,一定数量的文档必须对每个用户可用。如今,利益相关者有时交换得如此之快,以至于数据人员可能永远也不会了解每一个路人。前一天你和一位首席财务官一起定义了一个 KPI,第二天另一位首席财务官就来曲解它。在我们公司制作的仪表板上,通常每个 KPI 都有一个折线图,在每个图表的一角总是有一个小问号。如果您单击它,就会看到文档。根据您的访问权限,您甚至可以直接编辑它或发出变更请求。这已经一次又一次地被证明是有价值的。
仪表板也需要是活的。如果你的目标是了解公司的内部运作,然后迭代地做得更好,你需要不断地调整你的仪表板来反映变化。此外,每次查看您的仪表板都会让您对新的 KPI 有新的想法。因此,你需要它建立在一个灵活的平台上,你需要可用的人力来实施变革。好的仪表板需要数据探索和迭代方法。在某种程度上,注定是一个笔记本。
总之:我相信仪表板在商业环境中有它的位置,并且会一直存在下去。同时,如果它们的基础是笔记本式的技术,我会很高兴。数据科学家将使用笔记本来构建流程。然后,他会将一些结果分配给仪表板视图中的插槽。然后将这种观点与人分享。根据他们的访问权限,他们的仪表板上可能有一个详细信息按钮,将他们带到笔记本。这可以是只读访问,也可以允许编辑或衍生工作。
如果这就是未来,我爱它!谁在研究它?我想跟着去!
为什么数据在数据科学问题中被表示为‘向量’?
向量代数在数据科学中的应用
科学和数学被用来描述我们周围的世界。有许多量只需要一次测量就能描述出来。例如线的长度、任何形状的面积或任何表面的温度。这样的量称为 标量 。任何可以用数字(正数或负数)表示的量都叫做标量。该值被称为大小。
另一方面,有些量需要至少两次测量来描述。除了大小,它们还有一个相关的“方向”,例如速度或力。这些量被称为“矢量”。
当我们说一个人跑了 2 公里,这是一个标量,但是当我们说一个人从他的初始位置向东北跑了 2 公里,这是一个矢量。
假设您正在收集某个班级中一组学生的一些数据。您正在测量每个学生的身高和体重,为 5 名学生收集的数据如下:
这里的每一个测量都是一个标量。所以单独看身高或体重是标量。
然而,当你把每个学生作为一个整体来观察时,即每个学生的身高和体重加在一起,你可以把它看作一个向量。
在这个表示中,每个学生都是一个向量。它由两个特征描述:身高和体重。现在,**根据标准定义,在这个向量中没有真正的“方向”。**但是,当我们在多个维度上表示数量时(在这种情况下,是 2——身高和体重),就会有一种相对于彼此的方位感。因此,当我们观察 5 个学生(5 个向量)时,他们对彼此有一个大小和“方向”的概念。
因为大多数有用的数据集总是有不止一个属性,所以它们都可以用“向量”来表示。给定数据集中的每个观察值都可以被认为是一个向量。一个数据集的所有可能的观测值构成了一个向量空间。这是一种很奇特的说法,说外面有一个空间,每个向量在那个空间中都有自己的位置。
将数据表示为向量的好处是,我们可以利用向量代数来寻找数据中的模式或关系。
向量有什么帮助?
莎伦·麦卡琴在 Unsplash 上的照片
看向量空间中的向量,可以快速比较,检查是否有关系。例如,你推断出 相似的 向量之间的角度较小,即它们的方向彼此接近。在我们的样本数据中,学生(5.4,54)和(5,50)非常相似。
向量之间的角度表示它们之间的“相似性”。相同方向(接近 0 度角)的向量是相似的,而相反方向(接近 180 度角)的向量是不相似的。理论上。如果向量彼此成 90 度(正交),则它们之间没有关系。有没有一个数学函数可以捕捉到这种关系?
想想三角函数——余弦。
上面的描述听起来可能有点晦涩难懂。所以,不要忘记,我们在这里谈论的是数据的 【表示】 ,以这种方式帮助我们找到一种关系或模式。向量形式就是这样一种表示。
余弦相似性
余弦相似性是一种度量,它给出了向量之间角度的余弦。它可以用两个向量的“点积”来计算。数学上,
****
所以现在每当你在数据科学中听到向量,想想它们之间的点积和夹角余弦。你会看到这些向量有多相似或不相似。
文本矢量化
将数据集转换或变换为一组向量的过程称为矢量化。在属性已经是数字的情况下,将数据集表示为向量更容易。文本数据呢?
“单词嵌入”是将单词或文本表示为向量的过程
有许多将文本转换/表示为向量的技术。最简单的方法之一是计数矢量器。下面是查尔斯·狄更斯的《双城记》中前几行文字的片段:
那是最好的时代,
那是最坏的时代,
那是智慧的时代,
那是愚昧的时代
如何将上述 4 个句子转换成向量:
****第一步:从你的文本集合中获取独特的单词。你所拥有的全部文本被称为“语料库”
这里唯一的单词(忽略大小写和标点)是:
****['age',
'best',
'foolishness',
'it',
'of',
'the',
'times',
'was',
'wisdom',
'worst']****
这是来自包含 24 个单词的语料库的 10 个单词的词汇表。
****第二步:为每个句子创建一个由 10 个零组成的列表
****第三步:对于每个句子,开始一个一个的读单词。计算每个单词在句子中的总出现次数。现在确定这个单词在上面的词汇表中的位置,在那个位置用这个计数代替零。
对于我们的语料库,我们得到的向量是:
“这是最好的时代”= [0 1 0 1 1 1 1 1 0 0]
“这是最坏的时代”= [0 0 0 1 1 1 1 1 0 1]
“这是智慧的时代”= [1 0 0 1 1 1 0 1 1 0]
“那是愚蠢的时代”= [1 0 1 1 1 1 0 1 0 0]
Python 中的代码:
****from sklearn.feature_extraction.text import CountVectorizer****documents = [‘it was the best of times’, ‘it was the worst of times’,’it was the age of wisdom’,’it was the age of foolishness’]****vectorizer = CountVectorizer()
sentence_vectors = vectorizer.fit_transform(documents)****print(sentence_vectors.toarray())****
输出:
一个纯 Python 代码(不使用任何内置库)来计算两个句子之间的余弦相似度:
**import math
import re
from collections import CounterWORD = re.compile(r”\w+”)def cosine(vector1, vector2):
intersect = set(vector1.keys()) & set(vector2.keys())
numerator = sum([vector1[x] * vector2[x] for x in intersect])sum1 = sum([vector1[x] ** 2 for x in list(vector1.keys())])
sum2 = sum([vector2[x] ** 2 for x in list(vector2.keys())])
denominator = math.sqrt(sum1) * math.sqrt(sum2)if not denominator:
return 0.0
else:
return float(numerator) / denominatordef text_to_vector(text):
words = WORD.findall(text)
return Counter(words)sentence1 = “it was the age of foolishness”
sentence2 = “it was the age of wisdom”vector1 = text_to_vector(sentence1)
vector2 = text_to_vector(sentence2)cosine = cosine(vector1, vector2)print(“Cosine Similarity:”, cosine)**
“那是智慧的时代”和“那是愚蠢的时代”之间的余弦相似性是
余弦相似度将是 0 到 1 之间的一个数。结果越接近 1,相似度越大。
0.83 的值表明这个例子中的两个句子非常相似。这是因为单词- 'it ‘,’ was ‘,’ the ‘,’ age ‘,’ of '在两个句子中重复出现。然而,最后一个词“智慧”和“愚蠢”完全改变了句子的意思,它们在这方面非常不同。有什么问题?问题在于使用的“矢量化”方法。为了捕捉句子的语义,我们需要使用更高级的单词到向量的转换技术。我将在下一篇文章中介绍处理这种情况的另一种矢量化技术。
结论
本文的目的是提供使用向量表示数据背后的直觉。数据科学或机器学习的动机是找出观察值之间的模式和关系。将数据可视化为向量并使用向量代数来操作它们,解决了很多数据问题,尤其是在自然语言处理、文本分类和文本分析领域。
以哲学的角度来结束这篇文章-
“我们都是带菌者。我们许多人仍在寻找方向”
您可能也会喜欢下面的文章:
为什么数据领导者必须在新冠肺炎期间进攻
随着疫情迫使组织进行数字化转型,首席数据和分析官必须迎接挑战
在短短几个月内,新冠肺炎取得了顶级商业领袖奋斗了几十年的成就:该病毒成为了组织数字化转型的意外催化剂。随着人与人之间的身体接触越来越有限,这个世界正在迅速接受一种各种意义上的数字生活方式。
然而,社会关闭也引发了全球经济衰退。与之前的衰退不同,这次衰退对企业造成了双重打击。在一端,市场变得脆弱,客户正在消失。另一方面,供应链中断和劳动力转移带来了内部挑战。
以下是技术领导者必须如何应对,以迅速重塑他们的业务。
数据在数字化转型中的作用
在数字化企业中,数据是连接从供应链到内部运营再到面向市场的一切的单线。从这一数据价值链中获得洞察力的组织已准备好脱颖而出,成为市场领导者。
最能从数据价值链中获得洞察力的组织会脱颖而出。
德勤研究了表现出最高分析成熟度的几家大公司。研究发现,这些公司中有近一半在过去的一年中大大超过了他们的商业目标。为了超越竞争对手,德勤建议企业领导人更广泛地部署分析,并投资于数据驱动的文化。
受益于数据驱动领导力的不仅仅是企业。疾病控制和预防中心 (CDC)在美国政府应对冠状病毒危机中发挥着关键作用。在快速上升的健康危机中,该组织感到需要一个数据领导者来确保更快的国家响应,并发出招聘首席数据官(CDO)。
随着数据和技术领导力变得越来越重要,CDO 或首席分析官(CAO)等数据领导者的职责应该是什么?
数据领袖应该打进攻还是防守?
照片由 Mpho Mojapelo 在 Unsplash 上拍摄
今年早些时候,我在 CDAO APEX 冬季活动中主持了一场由来自不同行业的首席数据和分析官(CDAO)参加的小组讨论。2020 年 1 月最大的担忧是,许多组织认为他们的领导团队不需要以数据为中心的角色。为这一角色配备人员的组织似乎没有就工作职责达成一致。
在这一片混乱中,数据领导者在幕后悄悄地扮演着配角。
疫情让人们关注 CDAOs 的作用。
公众意见分为两个责任领域,通常称为“防御”和“进攻”活动。从防御的角度来看(可以说是更广泛持有的观点),CDAOs 被期望拥有数据的收集、管理和存储。他们的任务是数据治理和实现对信息的轻松访问。他们通过数据安全和法规遵从性计划来保护信息资产。
另一方面,一些组织指望 CDAOs 发挥进攻作用——促成创收活动。在这些组织中,他们被期望在产品改进、客户参与和业务创新方面提供帮助。
数据领导者的角色发生了怎样的变化?
照片由 Fachry Zella Devandra 在 Unsplash 上拍摄
随着疫情推动数字化转型,形势在短短几周内就发生了逆转。突然之间,数据在组织中有了新的重要性,CDAOs 的角色也立即受到关注。
在当前的全球封锁中,数据可以发现业务中的瓶颈,并帮助领导者快速关注眼前的优先事项。通过揭示客户行为的转变和市场变化,数据可以在当今不确定的经济中提供更好的可见性。
今天的数据领导者正在通过利用内部和外部数据并促进从这些资产中获得洞察力来领导组织计划。
这次危机中的进攻和防守任务
在整个组织中,数据领导者正在推动战略计划,不仅要确保业务连续性,还要确保收入增长。以下是他们承担的一些主要职责:
**通过监控供应链的多个层级,帮助识别原材料中断。**组织正在重新审视他们生成的数据,并重新利用这些数据来远程监控机器,这项任务以前需要现场工作人员完成。
通过确定****营销的替代渠道,帮助组织的产品适应遥远的世界。随着大多数产品在网上提供,数据正在帮助塑造产品功能,并根据使用模式制定路线图。
解决客户的棘手问题并监控他们的数字化采用情况。来自 Google Trends 等公开来源的数据正在帮助组织了解消费者行为的转变,并获得需求上升的类别的早期信号。
在 CDAO 的投资组合中,这些显然是令人不快的职责。数据领导者正在通过将这一新角色与一些防御活动进行对比来平衡这一角色,这些防御活动是为社交距离时代量身定制的,例如:
- 确保在企业范围内访问更新的客户情报源和公共数据流。
- 扩大数据治理的范围,以支持分布式工作人员,同时确保安全性和法规合规性。
- 通过帮助解决员工的协作和生产力挑战,简化向远程工作的过渡。
- 通过利用来自协作工具和应用程序使用的数据流,实现高绩效的虚拟团队。
- 根据后 COVID 时代的需求调整法规合规性。
- 通过使用人工智能驱动的计算机视觉算法,探索数据可以帮助满足新需求的方式,例如保持社交距离。
托马斯·塞勒在 Unsplash 上的照片
数据领导者必须在前线承担进攻责任,这是当前的需要。通过平衡他们对防御任务的关注,他们可以总结他们的投资组合,并继续发挥关键的领导作用。
尽管存在诸多负面影响,但新冠肺炎危机为领导人提供了一个展示数据真正价值的黄金机会。现在是技术和数据领导者采取攻势,利用这一势头让他们的组织坚定地走上数据驱动之路的时候了
这篇文章是企业家项目中第一篇 发表的 。增加了插图。基思·约翰斯顿在 Unsplash 上拍摄的标题照片。
为什么在数据和人工智能优先的时代,数据管理仍然是一项挑战
意见
公司在数据管理方面面临哪些挑战,以及如何着手应对这些挑战
詹姆斯·哈里逊在 Unsplash 上拍摄的照片
数据是现代组织的燃料。随着 it 在整个企业中的扩散,越来越多的人将它集成到他们的业务和运营决策中。这意味着,拥有强大的数据管理策略和基础架构对于每个数据驱动型企业的成功至关重要。
然而,即使我们正在向数据优先和人工智能驱动的组织转变,数据管理仍然是一个需要解决的基本挑战。如果公司没有考虑如何管理数据的基本原则,他们就无法在数据创新和人工智能部署方面取得进展。在这方面,下面我们将探讨什么是最普遍的挑战,以及组织如何应对这些挑战。
突出的挑战
由于遗留系统和缺乏特定领域的能力等一些持续存在的障碍,组织无法部署和扩展他们的人工智能计划。在企业组织中,使用传统数据和系统尤其是一个问题,因为数据存储在不同的孤岛系统中,很难在通用数据平台中找到和聚合数据,以加快数据驱动的决策。
谈到特定领域的能力, BARC 调查报告称,企业严重感受到外部知识的缺乏和市场上存在的技能差距。寻找合适的技能是一个普遍的挑战,因为公司的数据管理需求无法通过使用外部资源来完全满足。
此外,如果没有明确定义的数据治理政策和规则来管理数据的使用和数据操作,数据管理就无法正常进行,这是大多数组织仍在摸索的问题。在这里,我们不能忽略提到一个数据驱动型公司的首要敌人,那就是糟糕、不一致和糟糕的数据质量。随着组织收集的数据量大幅增加,由于数据源的多样性、难以集成的各种数据类型、庞大的数据量以及数据变化的快速步伐,确保数据质量变得更加困难。
蒂尔萨·范·迪克在 Unsplash 上拍摄的照片
所有这些挑战,加上数据和高级分析对于支持复杂的业务流程变得越来越重要,给 IT 部门带来了更大的压力,他们需要提供更快、连续、可靠、安全和更高质量的数据来支持不同职能部门的分析需求。
所有上述情况都表明,迫切需要对公司的数据管理战略、平台和基础设施进行改造和彻底检查,以便在数据和人工智能优先的时代茁壮成长和生存。如果我们没有现代数据战略和平台形式的正确基础来支持它,我们就不能谈论将人工智能部署到生产中。
如何开始成功的数据管理过程
数据管理是一个复杂的过程,包括与我们如何收集、管理、存储和分析数据相关的各种主题,如数据安全性、数据质量、MDM、数据仓库、数据集成、数据库管理。每一个领域都需要公司中相关利益方的特别关注。
但是在这里,我们将概述如何开始创建良好数据管理计划的几个最佳实践,尤其是在考虑将数据迁移到混合或云环境时。
首先也是最重要的一点,专家建议建立整个计划的目标是至关重要的。就像任何其他转型项目一样,将数据管理集成到流程中应该符合数据战略的最终目标。此步骤的一部分是定义您的具体需求,这些需求应该清楚地传达给您的内部 IT 部门或 IT 咨询公司。您的数据管理计划应包括您处理的数据类型、您的存储需求、需要实施的任何限制以及所需的安全措施。
一旦定义了您的目标和规范,就该对您的整个数据进行审计了,如果按照类型和来源进行分类,这很容易做到。为了更清晰地形象化,建议您创建一个流程图,展示数据进出企业的路径。
在决定数据迁移策略和解决方案之前,您应该花时间定义您的数据和数据库需求。下一步是定义如何记录您的数据,以及需要什么样的记录。定义元数据——意味着收集、处理和解释数据的内容、地点、时间、原因和方式——使数据和文件能够被发现、使用和正确引用。
你的下一步应该是建立评估数据质量的流程,并在出现错误时进行修改。创建数据存储和保存策略是该过程中的关键步骤,因为它应该考虑到从成本到安全性再到合规性的方方面面。
在定义您的数据策略时,这是下一步,您应该确保它们涵盖所有之前的步骤。制定任何许可和共享协议,以及媒体禁运政策和法律或道德限制,也应在这一阶段完成。
您的计划还应阐明参与数据收集、数据输入、质量控制、元数据创建、备份、数据准备和归档提交的所有员工的所有数据相关任务的角色和职责。
最后,不要忘记为您的迁移和持续数据管理活动制定预算。
数据管理案例研究
以上是关于开始数据管理计划时要考虑的最重要的事情的简短指南。为了了解它在实践中是如何做到的,让我们探索一些在成功的数据管理方面有所作为的创新公司。我们将看两个来自数据 2020 峰会的演讲者演示,它们展示了成功的数据管理之旅和方法。
Hyperight AB 在数据 2030 峰会上的照片/版权所有
H & M 集团前数据管理架构师 Alex Astrogold 介绍了 H & M 集团在利用动态信息模型和解决方案实现业务转型的过程中的数据管理历程。Alex 一步步讲述了他们的数据战略和愿景是如何变化的,他们实施的引入主数据管理和透明数据质量原则的新系统,以及他们长期数据治理的发展。H & M 集团的数据管理计划促成了定制数据战略办公室的成立,该办公室将协助 it 部门并支持所有数据计划。在这里阅读 H & M 的数据管理之旅的详细总结。
Hyperight AB 在数据 2030 峰会上的照片/版权所有
另一个成功案例研究来自EMEA 联盟 Reltio 高级总监 Kate Tickner ,她在去年的数据 2020 峰会上发言。Kate 的演讲侧重于现代数据管理方法,重点是推动数字客户体验经济取得更大成功。
正如 Kate 所指出的,今天的现代消费者希望他们对某个品牌的体验是方便、有见识、高效和友好的。如果公司的员工手边没有消费者的信息,这是很难实现的。这意味着,我们在上一部分中谈到的所有步骤都应该针对您的客户数据进行整理,以便能够在客户体验时代完成。然而,旨在提供客户服务的传统系统无法提供及时且可操作的客户洞察——公司需要现代技术来支持客户的自动化行动。这将我们再次引向重塑公司数据管理战略、流程和基础设施,以实现数据驱动的转型。
为数据和人工智能设置您的数据管理-第一个十年
为了应对创建数据管理战略和平台的所有挑战和需求,使之与企业愿景保持一致,并实现敏捷、协作、受监管、面向未来、道德和客户驱动的方法,我们准备了一项计划,旨在解决设计面向未来的数据管理战略和技术堆栈时最关键的支柱:数据治理、数据质量、支持云或多云的基础设施和数据运营。
Data 2030 峰会 是一场圆桌会议,将数据管理社区聚集在一个平台上,讨论如何通过为新的十年建立现代数据管理战略和平台,在整个企业中实现更快的数据创新和人工智能部署。
原载于 2020 年 10 月 5 日 Hyperight.com**的 。
为什么数据标准化对非线性分类器很重要
数据归一化对线性和非线性 SVM 分类器精度性能的影响
术语“标准化”通常指术语标准化和规模化。虽然标准化通常旨在重新调整数据,使其均值为 0,标准差为 1,但调整侧重于改变数据集值的范围。
正如在[1]和许多其他文章中提到的,当特征具有不同的范围时,需要数据标准化。例如,当我们有体重和身高特征时,归一化是很重要的,因为它们的取值范围有不同的尺度:例如,体重为[~ 45–130Kg]而身高为[~ 120–230cm]。
然而,许多文章没有提到数据标准化也很重要的其他应用。通常,在这些应用中,由于所有特征的相似尺度或每个特征的相对信息,数据标准化可能不那么明显或容易实现。频域中的时间序列就是一个例子,因为,首先,原则上频率幅度的尺度是相同的,其次,因为每个频率(特征)的归一化可能导致相对信息的丢失。
那么,在什么情况下数据规范化是必要的呢?为了回答这个问题,本文展示了一个说明性的例子,该例子比较了线性分类器(具有线性核的 SVM 分类器)和非线性分类器(具有 RBF 核的 SVM 分类器)在实施数据归一化之前和之后的性能。
正如将要观察到的,结果表明实现数据归一化不会影响线性分类器的精度,但是它会显著影响非线性分类器的精度。
文章结构:
本文首先介绍 Python 代码,并简要描述它的用途。然后,给出了解释为什么数据的规模影响非线性分类器的数学方程。最后,它会根据数据集的规模显示超参数调整后非线性分类器的新结果。
如果你对 SVM 量词感兴趣,强烈推荐阅读:
Drew Wilimitis,支持向量机中的内核绝招 (2018),中
关于 SVM 分类器的进一步信息在本文的结尾有所说明(参考文献。[3]、[4]和[5])。
导入 Python 库:
导入 Python 库
建立数据集:
数据集是使用 make_blobs() 函数创建的,该函数生成具有高斯分布的点的 blob。生成了具有 1000 个数据的两个 blobs 数据集。数据集的中心在(100,100)和(200,200)上,它们的标准差是 120。
生成两个各向同性高斯斑点数据集
实现数据标准化和缩放:
正如[2]中所解释的,有不同的方法来标准化数据。对于本文,数据集使用最小-最大归一化技术进行归一化。该方法将每个特征的最小值调整为 0,将最大值调整为 1。根据以下公式,其余的值被转换成 0 到 1 之间的十进制数。
最大-最小归一化:I =行(数据),j =列(要素)
为了研究尺度效应对分类器结果的影响,对原始数据进行了数据归一化,并对归一化数据进行了放大(50 和 300 倍)。
向上缩放数据集值=数据集值*缩放值
标准化数据
放大数据
所有生成数据的曲线图如下:
图 1:生成的数据图。
声明并运行线性核 SVM 分类器:
使用 Python 上的 sklearn 库创建了具有线性内核的 SVM 分类器。一半的数据用于训练,另一半用于测试。
对 x_orig 数据运行 SVM 线性核分类器的代码示例
线性分类器的结果如图 2 所示。可以看出,规模并不影响其性能。
图 2:精度≈ 0.71
声明并运行具有 RBF 内核的 SVM 分类器:
具有 RBF 核的 SVM 分类器的方法类似于上面提到的方法。首先,使用 Python 上的 sklearn 库创建分类器。然后,一半的数据用于训练它,另一半用于测试它。
与线性分类器相比,这个非线性分类器有两个超参数需要调整: gamma 和 c 。当超参数 gamma 被设置为常量值 1 时,分类器使用多个 c 值迭代 20 次。
绘制径向基核 SVM 分类器的精度图
非线性分类器的结果如图 3 所示。该图的坐标轴是:
- x 轴:超参数 c 的值
- y 轴:分类器的精确度
如图 3 所示,标度确实影响精度性能,通过归一化数据获得更高的精度。
图 3:不同数据集的 RBF 核分类器的精度性能
总之,线性核不受数据的放大和归一化的影响,而 RBF 核 SVM 分类器的精度高度依赖于数据集的规模。
对于这个特定的分类器,这种依赖性来自于在实现内核技巧时使用的欧几里德距离:
对于这个特定的核,指数的值与欧几里德距离的平方成比例地增加。因此,为了提高具有较大比例的数据集的精度,当比例放大 50 倍和 300 倍时,伽马值应分别反向减小 5 倍和 30 倍。
绘制不同伽马值的 RBF 核 SVM 分类器的精度
图 4:使用不同 gamma 值的 RBF 核分类器的精度性能
如图 4 所示,一旦超参数根据数据集的比例进行了调整,放大数据的精度与归一化数据的精度相同。
如果你喜欢这篇文章,请考虑 订阅 。你将获得我所有的内容+所有其他来自牛逼创作者的文章!
参考文献:
[1] Urvashi Jaitle,为什么数据规范化对于机器学习模型是必要的 (2018),Medium
[2]张,理解机器学习中的数据归一化 (2019),中
[3] 内核 SVM (2015),堆栈交换
[4] Brandon Rohrer,支持向量机如何工作 (2017),YouTube
[5] CodeEmporium,支持向量机 (2018),YouTube
“为什么是数据科学?”—非数据科学家简介
让我们给流行词世界带来一些结构。
当我开始“数据科学”之旅时,世界很简单:
我学习数学。我完成了数学硕士学位。我攻读了数学博士学位。
数据探索世界分为数学、运筹学和计算机科学。
没人谈论数据科学。
为什么这样介绍?
今天,世界更加复杂。
在我关于数据分析的讲座中,学生来自许多不同的部门和学科。有些人有数学或物理背景,有些人来自计算机科学。一半的与会者来自工程、自然科学、管理和人文学科。
一些学生已经参加了这个领域的讲座,其他人是专业人士,对一些人来说,这是第一次接触这个主题。
这种多样性完美地反映了当今数据科学的多元化。
我的讲座是学术世界和朴实的实践之间的桥梁。
学生们有很多很多问题,尤其是关于这个领域本身。
我应该从哪里进入职业世界?外面有什么职位?找工作时要考虑的关键是什么?什么是工作的现实,什么是广告?
所以,我决定总结并向更广泛的读者发布它们。
我在这个领域已经工作了 20 多年了。我的工作一直与数据和数据管理有关,理解它们,提取见解,预测,优化,学习,自动化,最后,为决策提供基础。
在写博士的时候,我在统计研究所,有机会见到很多统计学、模式识别和机器学习领域的大腕。统计学和机器学习在当时几乎是同义词,数据科学还不存在。
所有关于这些领域之间差异的解释都是后来才出现的。
例如,在统计研究所工作时,研究有不同的角度。当博士候选人完成博士学位时,他/她可以选择他/她想获得博士头衔的学科。一些人选择了计算机科学,一些工程,其他环境科学,或者——像我一样——数学。
所以,我是在告诉你,在过去的 20 年里什么都没有改变吗?
当然不是。
很多事情已经发生了变化,并且仍在发展。让我们开始看看统计学、机器学习、人工智能和计算机科学最初的相互作用,以及它是如何演变成数据科学的。
统计学,计算机科学,还是机器学习?
先说统计。您可能会将统计数据大多与推断(基于数据寻找人口的属性)和预测联系在一起。这对于大约一半的统计世界来说是正确的。另一半稍微复杂一点,可以写满一本书。我只关注非常有限的摘录。
在统计学中,有两个学派,频率学派和贝叶斯学派。
非常笼统地说,频率主义者认为长期的发生频率是定义概率的唯一真理。通过重复测量,任何测量值的频率给出了该值的可能性。一切都只能根据这些数据来估计。真实值是未知的,但最终是任何测量值。人们在没有任何预先假设的情况下计算频率。
贝叶斯主义者认为概率是一种信任度和可信度的度量。数据是现实,并调整信念,即先验假设。我们对一个事件的了解与概率有关。这就是贝叶斯公式中的条件的来源。对于贝叶斯人来说,未知的“真实”价值可以用概率来描述。
一个比另一个好吗?不,不是的。它们只是我们世界的两个视角。
当然,还有一个交叉点:经验贝叶斯。
在经验贝叶斯中,我们从数据所代表的真实证据中学习。或者简而言之:算法正在从数据中学习——统计学习。
我们现在转向机器学习。从五十年代到八十年代,机器学习是一个与人工智能密切相关的领域。像最初的人工智能一样,机器学习基于逻辑、符号和基于知识的方法。但是为了解决实际问题,需要基于概率的方法。因此,在 90 年代,机器学习远离了最初的人工智能,专注于使用概率论和统计方法的实际的、基于数据的学习,并在研究和合作中靠近这些领域——不仅是在方法论上,也在个人合作中。它成为了自己公认的学科,并发展成为今天基于数据的学习算法。
我的博士学位研究的是非参数经验贝叶斯世界,具有潜在的,即隐藏层,我开发了一种从数据中学习的新算法。是统计学,也是机器学习。
你可以看到“统计学”和“机器学习”的区别是非常重叠的,而且往往没有分离的可能。
一个比另一个好吗?
号码
从一个领域到另一个领域的过渡是流畅的。每门学科都有它的优点和缺点,交叉施肥是常见的。
差异化重要吗?
嗯,是也不是。
不。最后,“标签”并不重要。重要的是方法、应用,以及最重要的价值创造。
是的,有关系。像每个新兴领域一样,机器学习、深度学习和数据科学是新的发展、新的方法,并包含新的哲学。
拒绝新的、边界移动的想法和发展是人类的天性。
要获得某个专业领域的认可和欣赏,你需要展示你工作的价值。你必须给它贴上不同的标签,因为人们想要一个身份。它代表了新的哲学,给了人们一个家。
这是一个自然而有效的发展。变化和发明是我们的日常生活,应该被接受。
科技的进步
现在,让我将数据科学带入游戏。
过去 30 年发生了很多技术变革:
- 计算能力的指数增长
- 数据存储可能性的指数增长
- 这些技术成本的指数下降
技术变得大众负担得起,随之而来的是大量数据的产生。
我们不再需要对信息的产生、共享和优化小心翼翼。我们可以生产、传输和储存它。
所有这些都为新的可能性提供了机会。
在九十年代,由于技术的进步,机器学习可以找到它的目的地。
海量的数据使我们有可能从中学习,并使我们能够开发新的算法来解决高维问题。
“[……]许多事情都变了。一个只是数据量[……]。数据量增加了,复杂性也增加了,方法也增加了[…]。方法变化如此之快;你还必须学会新方法[…]”—诺贝尔奖得主爱德华·莫索尔在被问及科学的本质是否已经改变时
数据科学的新范式
由此,处理数据的范式发生了转变。它在科学界发生了变化,在商界也发生了变化。这个世界可以把结果完全建立在数据和数据中的许多模式的基础上。统计学和机器学习都是这个故事的一部分。
在商业中,理解向数据和基于事实的决策发展。
这种变化需要一种新的思维方式:一种基于数据的深思熟虑的科学的新范式,以在研究、科学、和商业中做出决策:数据科学。
了解了所有的背景和历史发展,人们是否将其命名为机器学习、统计学或数据科学并不重要。相关的是作品的内容,而不是标签。
现代资料工作
我们已经看到了数据科学包含的各种各样的主题(通常令人困惑)。
现实中的数据科学是什么?
我通常使用处理数据的典型步骤进行解释。
现代、简化的数据架构(数据架构基于规则、策略和治理定义数据和信息流)包含以下步骤:数据源、数据捕获、数据存储、数据监管、数据探索、数据供应和数据消费。
Isabelle Flueckiger 制图
这些话背后的含义是什么?
数据源:处理关系数据、流数据、结构化数据和非结构化数据的不同数据源。
数据捕获:在数据暂存中工作,一个临时存储位置,即具有云、文件共享、拖放区,以及在数据摄取中工作,具有批处理、临时和实时数据。
*数据存储/储存库:*数据存储层的各种选项,用于存储原始数据、过程数据和管理数据,例如云、NoSQL、数据集市等。
数据监管:包含数据和元数据的标准化、验证和保护,以管理和维护它们。
数据探索:利用统计学、高级分析和机器学习探索数据,确保数据民主化。
数据供应:提供访问和工具,创建、准备和启用流程,以便将数据提供给用户。
数据消费:报告、商业智能、数字营销、客户关系管理(CRM)、数据分析、机器学习、应用程序、机器人和商业分析。
这个列表显示,我们有相当多的不同数据任务,直到最后,我们可以从数据中产生和呈现洞察力。
对于每一步,我们都需要专业的数据专家。
根据你的谈话对象或公司如何宣传数据科学家的角色,每个阶段都可以作为数据科学的工作来推销。
关于数据科学包含什么的不同观点有:
No 1: 数据科学包括从数据源到消费的所有这些数据步骤。
No 2: 数据科学包含从数据捕获、数据监管、数据探索、数据供应到数据消费的任务。
No 3: 数据科学仅包含数据监管、数据探索和数据消费的部分,即它包括数据准备、数据清洗、机器学习、高级分析和构建数据产品。
取决于你和谁说话,有一个或另一个定义被使用。
技术咨询大多意味着第一。
加州大学伯克利分校排名第二。
3 号零件在市场上卖得很好。这是花式方法的广告,趣味因素的辐射。所有的“数据科学”MOOC 课程和招聘广告都位居第三。
注意:这是目前数据科学领域最多 20%的工作!
可以观察到数据科学家在就业市场上的高度波动,这是事实。其中一个主要原因是这份工作不符合人们的期望。期望的不匹配通常是无意造成的,而是由于缺乏对数据科学领域的了解。
你可以找到许多想要雇佣“数据科学家”的直线经理,因为他们认为,有了一个小型的数据科学家团队,他们的公司就可以拥有谷歌和亚马逊。但他们中的许多人不知道数据科学包含什么,不少受雇的数据科学家最终成为拥有 Excel 文件的业务分析师。
基于我的实践经验和模糊不同数据主题之间界限的技术进步,我倾向于将数据科学定义为第一。
这对你来说意味着:不要只相信工作简历中的漂亮描述或直线经理告诉你的话,这一点永远是至关重要的。
听起来很糟糕?
问,问,问!
问,直到你发现提供的“数据科学”工作包含什么。我并不是说所有非机器学习的工作都不令人兴奋。相反,有许多令人兴奋的高薪数据工作。
好消息是:这使得许多人可以进入数据科学领域。
你不需要成为机器学习的博士和伟大的程序员。你不需要和所有这些编码书呆子竞争。找到自己的利基进入。然后,发展自己。
连接圆点
把这些都结合起来,听从我的建议:
建议 1:不要被所有的流行语和解释所有细微差别的人所迷惑。获得主题的大图,探索你感兴趣的地方,从你的能力开始。
忠告 2:当心广告!如果你正在寻找进入数据科学领域,不要在意它是如何被标记的。透过表面,问,问,问。像四岁小孩一样问问题,总比期望不一致好。
建议之三:找到自己的利基。不是所有数据科学领域的人都需要是机器学习极客,优秀的程序员,也不需要有学术背景。探索不同的入门选择,以此为起点,在这个伟大学科的不同方向上发展自己。
建议四:玩得开心!作为一名数据科学家,并不是所有的日子都令人兴奋。思想开放,把一切都当成学习新东西的机会。在这个领域你可以得到很多乐趣。
为什么数据科学是我获得的最大技能
为什么机器学习和统计学给了我生活中真正的优势。
在我的一生中,我对许多我喜欢做的不同事情感兴趣。我从小就对计算机感兴趣,编程也是如此。我也培养了一些爱好,比如演奏音乐和烹饪。我特别喜欢曼陀林、扬琴、吉他、小提琴、钢琴,但最重要的是,
低音。
一张我的旧乐器的照片,包括我的旧克门切!
此外,我还获得了更多的实用技能,如平面设计、开发和运营,我可以把一辆车拆开,然后再组装起来。这种扩展介绍是必要的,因为我的数据科学技能胜过了所有这些技能。我的数据科学知识和技能让我在生活中走得比我所学的任何东西都更远,同时处于技术的前沿,并且在我需要时非常适用于任何场景。
受欢迎的
众所周知,机器学习是一个巨大的新兴领域。最近媒体对该领域的报道更是火上浇油。数据科学职位的教育、背景和批判性思维能力(第三个是最重要的)可能很难获得。去年,福布斯估计,2020 年将有超过 20 万个数据科学职位空缺。随着越来越多的公司开始需要人工智能,并使用机器学习来跟踪具有准确统计数据和简洁计算机的分析,预计数据科学的新领域将在未来十年内爆发。
也就是说…鉴于这个日期,我们应该对此持怀疑态度,
2020 年 3 月 24 日(股票市场刚刚死亡,我们正在进入一场全球衰退,因为未来的疫情。)
幸运的是,许多数据科学工作可以远程工作!此外,雇佣大多数数据科学家的大公司可能在一两年后疫情结束时仍然存在。
尖端的
机器学习是最前沿的技术,有一个完整的技术时代以它命名,被称为
《人工智能时代》
随之而来的是一系列的好处,其中最大的好处就是事物总是在不断变化。这可能既是一个可怕的现实,也是一个令人兴奋的冒险。总是有新的东西需要学习,这意味着对于像我这样的人来说,当你学习了所有的东西后,你的兴趣不会消失。这对很多人来说也很可怕,因为这会让技术面试变得非常伤脑筋。
处于前沿也意味着你可以很容易地和其他人一起热衷于这个爱好,不管他们是否真的参与其中。
多才多艺的
我真正喜欢我的数据科学超能力的是,我可以进入任何我想要的行业或工作类型。例如,如果我想从事医学,我可以很容易地找到一份医学分析师的工作或一系列类似的工作。总的来说,统计学是一种非常有价值的资产,可以从你的大脑中提取出来。我们在日常生活中看到的和在工作场所看到的一样多,并且能够通过统计推断出客观想法的可能性,而不是做出有根据的猜测。
对于许多我想做的事情,我可以在我的大脑中使用机器学习来想到一个很好的方法来完成它们。这很令人兴奋,解决了我生活中很多用定性思维解决不了的问题。几乎可以在你愿意收集、抓取或查找数据的每一个场景中使用的东西显然是非常强大的。
不仅仅是预测建模
当然,尽管机器学习是数据科学的一个巨大组成部分,但这个难题还有很多你可能没有想到的部分。有趣的是,根据您的职位,您可能实际上做了大量的管道铺设、基础工作和部署模型,而不是实际创建模型。
我想添加的一些值得注意的内容包括通信/业务、使用开发运营工具部署端点以及 Unix 管理。当然,这将根据您所处的位置而有所不同,但很可能 Unix 和 Bourne SHell 在进行数据科学研究时会派上用场!此外,数据可视化是数据科学家的一项常见技能。
更好的程序员
在很多方面,作为一名数据科学家,我已经成为一名非常优秀的程序员。如果不是在我的算法中利用了很多计算概念,我永远也不会坚持这些概念。由于它们的统计能力,我还学会了大约四种新语言。
(src = http://julialang.org/)
如果没有数据科学,我可能不会成为函数式编程的支持者,也可能永远不会尝试 Julia,不会了解与 JRE 相对的 SBT。我从数据科学信息中学到的东西现在是我深深关心的东西,我把这一切都归功于数据科学!
结论
如果你不是在研究数据科学,我当然会推荐它!这不仅很有趣,而且是一门非常值得参与的科学。此外,我认为数据科学经常被误认为是一种非常特殊的技术,但现实是你可以将机器学习应用于几乎任何有数据收集的场景。
这是我发现与数据科学家会面令人兴奋的地方,因为他们通常来自各行各业。虽然通常情况下,这些符合数据科学、商业、编程和统计/数学的三大支柱,但各行各业都有一些独特的人进入 DS/ML 世界,并且对它爱不释手!拥有数据科学技能并能够使用预测模型来预测未来,感觉就像拥有不可思议的超能力一样!
为什么数据科学可能不值得
意见
软件开发可能更适合你的 3 个原因。
被认为是 21 世纪最热门的工作可能并不那么热门。数据科学已经伴随我们有一段时间了,它不再只是一个时髦词。个人和公司都利用它来创造价值和金钱,但它真的是未来的职业吗?
由 Robynne Hu 在 Unsplash 上拍摄
作者注: 这是一篇观点片,所以大概有一定程度的偏颇。你所在国家的工作和你的技能可能会有所不同。我们用不同的眼睛看世界。请在评论区留下你的想法和经历。
如果你在做任何与软件相关的事情,你可能会考虑转到数据科学领域。为什么不呢,工作应该无处不在,薪水一般比软件开发高,你的头衔中有“科学家”这个词会让你的母亲感到骄傲。
好吧,也许不是最后一个,但你明白了。
在这个领域呆了一段时间后,我探索了一些库和其他很酷的东西,写了大约 80 篇与数据科学相关的文章,同时还探索了其他选择(如 web 和移动开发),我发现自己有足够的资格来分析这个领域的好与坏。
今天的重点将主要放在坏事上,因为互联网上充斥着*“为什么你应该成为一名数据科学家”和“在一个月内学会数据科学”*类型的文章。
也就是说,理想的读者是那些知道加入这个领域会有什么好处,但也想知道可能有什么缺点的人。此外,已经在该领域工作了一段时间的人可能也会发现这些要点很有用。
好了,事不宜迟,我们从第一个开始吧!
1。数据科学很无聊
是的,你没看错。大多数数据科学归结为从源表中提取数据,执行一些聚合和计算,然后将结果存储在适合分析的新表中。嗯,这完美地描述了一个 ETL 过程,而不是数据科学。
此外,您会花一些时间清理和准备数据,这也不完全与数据科学相关。最后,我们有处理预测建模的部分—这也不是新的,但在过去几年中变得很受欢迎。
Joshua Rawson-Harris 在 Unsplash 上拍摄的照片
这三个要素结合起来,再加上得体的表达和沟通技巧,就能让你成为一名普通的数据科学家。
但是等等,数据科学不会给世界带来革命吗?
是,也不是。是,专业人员将能够更好地完成他们的工作(像医生一样),不是,你的 ETL 管道绝对没有人感兴趣,与你的“数据科学家”职位无关。
2。数据科学正在实现自动化
或者至少是有趣的部分。你知道,最初让你加入这个领域的时髦词汇。像预测模型,机器学习等等。不要误解我的意思,很多东西在这里还不能自动化,但是很大一部分已经自动化了。
这很可悲,因为当大众担心日常工作变得自动化时,我们实际上已经自动化了我们工作中所有有趣的东西。好看。
我的意思是,你见过专业的云环境吗?如果没有,也没关系,因为它们看起来很悲伤。基本上你能适应的算法数量是有限的,只要数据以正确的方式准备好,任何知道精度越高越好的人都可以测试出所有的组合,并得到一个相当不错的解决方案!
我的意思是,它不会比一个拥有 10 多年经验的高级数据科学家开发的更好,但是问问你自己— 准确性增加 2%真的有多重要?
试着从雇员和雇主的角度来思考这个问题。由数据科学家团队开发的稍微好一点的模型真的值得花费时间和金钱吗?对一些公司来说是这样,但大多数公司对“企业云环境”的内容完全满意。
3。工作列表太糟糕了
访问你最喜欢的工作列表网站,搜索数据科学工作。你可能会想到像 SQL、Python、R、Statistics 这样的技能会出现——而且你做出这样的假设是完全正确的。问题是,这些仅仅是需求的 30%!
其他一些可能包括一般的编程、API、版本控制,甚至一些前端技能。这对你来说很糟糕。
即使你是软件开发出身,并且具备上述所有技能,数据科学领域仍然没有这样的工作。
让我们来看看 2020 年 5 月 16 日拍摄的来自 Indeed.com 的的列表,仅限美国:
数据科学— 9,474 个工作岗位
软件开发人员——66,647 份工作
这是一个很大的区别。
你现在可能会想,软件开发比数据科学更广泛,因此有更多的工作机会。这是绝对正确的,这也是为什么我也在软件开发中寻找一个更窄的领域——**Java 开发者。**让我们看看有多少份工作列表:
Java 开发人员——29324 人
是啊,大约三倍多。
但即使这还不足以说服你,以下几个词肯定会让你信服— 大多数数据科学职位都是高级职位。
没错。大多数中小型公司对数据科学家的需求不同于对软件开发人员的需求。也许他们甚至在寻找他们的第一个数据科学家!你真的认为他们会雇用实习生或大三学生来处理数据科学相关的工作吗?三思而后行。
判决
也许我对数据科学有点太苛刻了。也许在你的国家情况不同。但也许不是——在做出如此重大的决定时,你应该意识到利弊。
在这个世界上,机器学习的自动化程度已经让普通软件开发人员有足够的信心使用它,如果我今天选择未来的职业,我会三思而行。
不要误解我的意思,数据科学仍然很棒,但是要准备好花大约 90–95%的时间在 ETL、数据处理和准备上,另外 5–10%做你真正感兴趣的事情(预测建模)。
你有什么想法?在你的国家情况怎么样? 在下面的评论里让我知道。
感谢阅读。
喜欢这篇文章吗?成为 中等会员 继续无限制学习。如果你使用下面的链接,我会收到你的一部分会员费,不需要你额外付费。
[## 通过我的推荐链接加入 Medium-Dario rade ci
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@radecicdario/membership)
为什么数据科学需要产品经理
数据科学项目失败的常见原因以及项目管理如何扭转局面。
2019 年, Gartner 预测,80%的人工智能项目无法扩展以提供商业价值——数据科学项目将会失败。尽管许多其他帖子(参见此处的、此处的和此处的)提供了数据科学失败的不同原因,但它们掩盖了根本原因:缺乏数据科学产品经理。
任何业务中的大多数项目失败可以归结为两个主要原因:人员的失败或过程的失败(然而,过程的失败通常是由人员的失败引起的)。正如雷伊·达里奥在《原则》中所说,“让合适的人担任合适的角色来支持你的目标,是无论你选择完成什么都成功的关键。”数据科学项目也不例外。在本文中,我讨论了数据科学项目失败的一些常见原因,以及数据科学产品经理如何成为防止这些失败的关键。
如果你不尝试,你就不会失败
大型组织中的业务领导通常不具备识别有效数据科学项目所需的技术专业知识。一个过度劳累的企业领导发现了一个有大量数据支持的半技术性问题。或者,也许他们正在寻求自动化视觉质量控制等极其重复的过程,他们立即认为这是一个很好的数据科学项目。
在失败的项目中,业务领导会要求数据科学团队来处理它,团队会在没有适当确定项目范围的情况下抓住机会发挥作用。或者,数据科学团队确定了项目的范围,但由于他们对业务问题和他们试图释放的价值缺乏清晰的理解,他们同意了一个项目,并考虑了一个价值低得多的解决方案。不管怎样,这个项目产生的结果令人失望,每个人都很沮丧。
一个好的数据科学产品经理通过拒绝那些在开始之前就注定要失败的数据科学项目来防止项目失败。DSPM 可以向商业领袖解释为什么一个问题在技术上很难解决,而不需要过于技术化。如果数据科学解决方案是可能的,DSPM 还可以阐明业务领导者期望释放什么样的业务价值,并确保该解决方案实际上提供了该价值。通过这种方式,数据科学产品经理甚至可以在项目开始之前就防止项目失败。
防止瞄准镜蠕动
因此,您的团队设法在一个可行的项目上与业务领导保持一致。你花了一两个月的时间来解决它,当业务领导说“等等,还有一件事……”时,你已经接近了终点线。在你知道之前,又过了几个月,还看不到结束的迹象,你试图解决的当前问题看起来一点也不像原来的问题,你取得的任何进展都有可能让你想起一个小小的叠木塔——杂乱无章,随时可能自行倒塌。
发生了什么事?你的瞄准镜刚刚失灵了。一个好的数据科学产品经理通过设定严格的工作范围并让业务负责人对该范围负责来防止这种情况发生。如果需求改变,DSPM 决定项目是否仍然可行。良好的范围界定和在项目成果上推动共识无论如何都应该防止范围蔓延:DSPM 的另一个关键作用。
数据在哪里?
很好,所以您实际上有一个范围很好的问题,至少从技术角度来看,并不太难。你开始处理它…直到你意识到没有带标签的训练数据,或者如果有的话,它藏在十几个不同的数据库甚至 excel 文件中。呀。你真的要让数据科学家在办公室里跑来跑去各个部门,询问谁拥有哪些数据库,拉动 X 的最佳方式是什么?数据科学家知道去哪里找或者问谁吗?同样,这也是优秀的数据科学产品经理扭转乾坤的时候了。由于 DSPM 连接到业务,他们已经有了一个好主意,在哪里寻找和 ping 谁。DSPM 可以安排会议和数据争论,让数据科学家专注于编码和训练算法,并为企业创造价值。
给我看看钱
亚历山大·密尔斯在 Unsplash 上拍摄的照片
在所有这些例子中,数据科学产品经理的基本目标是确保数据科学团队提供商业价值。关注和优先考虑商业价值是一项技能,通常是数据科学家(尤其是初级数据科学家)所缺乏的。
当公司招聘数据科学家时,他们通常会寻找直接来自博士和硕士项目的申请人。虽然学者们希望研究棘手的、智力上和技术上具有挑战性的问题,但他们很少面对回答这样一个问题:什么样的潜在价值使这个问题值得解决?事实上,学者们更倾向于根据问题的内在难度而非外在价值来评估问题。(我不是说这是学术界的问题,只是学术界和商界区别的一个现实)。
简而言之,大多数公司雇佣的数据科学家对解决难题比对实际提供商业价值更感兴趣。
另一方面,数据科学产品经理对解决有价值的问题更感兴趣,并优先考虑容易的“无聊”问题,而不是简单的、高风险的“性感”问题。当你有一个数据科学产品经理来确保你确实在处理有价值的、可解决的问题,而不是你的团队想在明年的会议上展示的概念的理论证明时,你的数据科学项目失败的可能性会小得多。*
*这并不是说我不认为在会议上演讲也有价值——只是你应该专注于提供商业价值,然后写一篇关于它的论文,而不是从事学术研究,然后试图通过发现商业价值来证明它。
我们说的是同一种语言吗?
数据科学产品经理通过充当数据科学团队和业务利益相关者之间的翻译,使数据科学项目更加成功。当数据科学项目失败时,通常是由于数据科学团队和他们的利益相关者之间的沟通中断:看看上面的例子就知道了。如果数据科学团队没有正确理解他们试图解决的问题,即他们试图释放的商业价值,那么他们就会失败。同样,如果业务负责人没有从技术角度理解问题有多难,或者不能用数据科学团队能够理解的方式解释业务问题,那么项目就注定要失败。
一个好的数据科学产品经理是一名翻译:以业务利益相关者可以理解的方式解释困难的技术概念,同时还能够向几乎没有领域知识的人传达业务目标和问题。
谁是优秀的数据科学产品经理?
所以,你应该立即开始写一份数据科学产品经理的职位描述,对吗?嗯,也许吧。事实是,如果您正在从事数据科学项目,您已经有某人(或多人)在履行 DSPM 的职责,只是没有信用、责任或专业知识。通常,数据科学经理或业务分析师将扮演 DSPM 的角色,但特别是在较小的公司或初创企业中,数据科学家最终会身兼两职。
如果你在一家较小的公司,成为数据科学产品经理不一定是一个全职角色,但它应该是某人职责的一个明确部分,对履行数据科学产品管理相关职责有明确的期望。
如果你决定雇佣一名全职 DSPM,以下是你应该寻找的一些特征:
- 对数据科学概念的技术理解。他们不需要会用 python 编码,但要能理解哪些模型最适用于某些情况(即 CNN 的用于图像分类)。他们应该对团队正在解决的问题所需的训练数据的数量和质量有相对的直觉。
- 有足够的知识提出解决方案/替代方案
- 向非技术观众阐述技术概念的能力。
- 根据业务价值对机会进行优先排序的能力。
- 能够传达为什么项目对于可能没有直接业务背景的技术团队是重要的或有价值的。
- 中级 SQL 技能,以便他们能够自己提取和评估数据集。
- 了解数据科学团队正在解决的技术问题将如何解决业务问题。
总之,数据科学产品经理需要能够跨越数据科学和业务的其余部分,脚踏两个阵营,同时生活在两个世界中。
概括一下
数据科学项目失败的原因有很多;解决错误的问题、未能收集适当的培训数据以及范围蔓延只是其中的一部分。幸运的是,如果您的数据科学团队设置正确,如果您有合适的人成功履行数据科学产品经理的职责,所有这些问题都是可以预防的。
这篇文章最初发表于theanalyticallife.com。我在我的时事通讯中分享这样有意义的内容,这里。
为什么数据科学家应该写作
我早就想写这个了
阿特·拉索夫斯基在 Unsplash 上拍摄的照片
这是一篇我很久以来一直想写的文章。在实践了近 4 年的数据科学和写作之后,我早就应该分享我对这两者如何相互作用的感受了。
数据科学是一个多维领域。通常将视为编程、统计和领域知识的结合。数据科学家应该是逻辑分析师、多才多艺的问题解决者和能干的程序员。
这足以让你忙起来,但是它忽略了所有这些技能所依赖的基础:沟通。
我对数据科学家的首要建议是什么?花时间写。写代码?不,其实像写。
老实说,我不确定这是出自左场还是只是强化一个你可能在之前已经听过的想法。不管怎样,这个主题很重要,值得用几百个字来描述。如果我能说服一个人尝试更频繁地写作,那么嘿,让我们称之为成功。
沟通就是影响
从分析商业问题到建立机器学习模型,如果你不能传达你做了什么,你是如何做的,以及它的吸引力,那么你的努力很可能就白费了。我以前在中写过,当你作为数据科学家的工作完成后:
数据科学家受雇为决策提供信息,并对业务产生影响。您所做的所有幕后探索性数据分析和可视化通常会在报告或某种明智的决策中体现出来。
数据科学家应该无情地优先考虑影响。当我们的大部分工作都是告知决策和说服他人以我们的方式思考时,沟通是必不可少的。不管我们喜欢与否,写作是我们进行交流的主要工具。
讲故事
数据科学家应该掌握的另一项技能是讲故事的艺术。由于数据素养的提高和对数字推理的兴趣,数据故事和新闻业在过去几年里已经起飞。
通过把你的发现变成一个故事,它不仅使你的作品更容易理解,也使你的观众更感兴趣。关于正确讲述数据的例子,只要看看汉斯·罗斯林就知道了。观看他的一次演讲就能改变你对数据的看法。
创造性的出路
整天和数据打交道会让你付出代价。在分析数据或构建模型一天之后,我们所有人都有一些放松的方式。这对健康的生活方式来说是自然而重要的。
写作是你进行创作的一个很好的途径。作为数据科学家,我们的创造力主要体现在解决问题的技巧上。写作感觉像是一种不同形式的创造力。
创造和发布新事物的艺术感觉与构建模型或报告一些探索性数据分析不同。尝试一下,挑战你的思维,用不同于平常的方式工作。这对你有好处。
加速你的学习
这也是我当初开始写作的原因。我试图进入数据科学领域,跟踪一堆时事通讯,阅读博客帖子,并试图理解这一切。在某个时候,我意识到如果我把它付诸实践并试着教给别人,我会学得更好。所以我开了一个博客。这条来自大卫·罗宾逊的建议总结了我的想法:
几乎每一位有抱负的数据科学家都问过我找工作应该怎么做,我都给过他们这个建议:开博客,写关于数据科学的文章
我再怎么强调这种做法的重要性也不为过。不管你上过多少 Coursera、DataCamp 或 bootcamp 的课程,你仍然需要将这些工具应用于实际问题的经验。这并不是数据科学独有的现象:无论你现在专业做什么,我相信你现在比你完成课程时做得更好。
这无论如何都不是强制性的。不像编程技能、技术知识或特定领域的问题解决那样。但是掌握写作,我们交流的主要工具,无疑是有帮助的。你是如何掌握任何东西的?当然是有实践的。****
所以去写 船上的东西 !
写作可以成为让其他事情更有效的超级力量。至少对我来说是这样。试试看,让我知道它是如何工作的!
感谢阅读!在 Twitter 上找到我,不要忘记 订阅 我的每周简讯,获取任何新帖子和有趣的链接。看看下面一些类似的帖子:
为什么 DataOps 会继续存在
借助 DataOps,数据工程师和数据科学家可以一起工作,带来一定程度的协作和沟通,共同的目标是为业务提供有价值的见解。
图片由 DataOps.dev 上的 Ascend.io 拍摄
过去十年人工智能和机器学习的出现永远改变了数据格局。据估计,到 2021 年,全球企业每年将在大数据和人工智能驱动的数字化转型工作上花费超过 1.8 万亿美元。作为对新冠肺炎疫情的回应,网飞、Zoom 和 Dropbox 等网络提供商已经认识到,在能够扩展其 IT 运营和基础设施的同时,自动化是满足需求的关键因素。贝恩公司最近的一份报告预计,在未来两年内,采用自动化技术的公司数量将至少翻一番。随着企业争相采用这些新技术,海量数据和互联系统将继续增长,变得更加复杂。
随着复杂性的不断增加,企业将被迫使用新的工具和技术来重新思考其数据处理方法。随着企业继续在整个组织中追求更高级的数据分析和人工智能计划,DataOps 有可能与不断加快的数据开发和创新生命周期保持同步。借助 DataOps,数据工程师和数据科学家可以一起工作,带来一定程度的协作和沟通,共同的目标是为业务提供有价值的见解。
释放数据操作的潜力
数据操作绝不是一个新的术语或方法;然而,企业已经开始越来越多地采用 DataOps 实践,以便能够扩大和实现他们在数据、分析和机器学习方面的投资。DataOps 为数据和分析领域带来了灵活性和稳定性,使数据团队不仅能够快速构建,而且能够在数据复杂性激增时安全地构建。
数据复杂度=数据系统 x 数据工作者 x 数据产品
DataOps 由一系列原则、理念和实践组成,统一了数据产品的构建者和消费者,明确关注交付速度、质量和灵活性。DataOps 采用集成方法来更好地推动独立数据团队之间的协作,并尽可能实现自动化,以最大限度地减少手动瓶颈和错误。
Gartner 副总裁兼分析师 Nick Heudecker 在最近的一篇博客文章中将 DataOps 定义为“一种协作式数据管理实践,专注于改善整个组织中数据管理者和消费者之间的沟通、集成和数据流自动化。DataOps 的目标是创建可预测的数据、数据模型和相关工件的交付和变更管理。DataOps 使用技术自动交付具有适当安全、质量和元数据级别的数据,以提高数据在动态环境中的使用和价值。”
DataOps 的核心目标是缩短数据管道开发生命周期的端到端时间,利用自动化技术简化项目并加快价值实现。传统的数据管道开发需要手动和重复的过程,容易出现人为错误和疏忽,导致脆弱的管道和高昂的维护成本。将 DataOps 应用于数据开发生命周期,使数据工程师能够专注于对业务至关重要的新数据产品,并为能够承受未来不可避免的变化的数据架构带来稳定性。
此外,将 DataOps 应用于数据开发生命周期可以减少数据科学家花费在提取和产生有意义的见解上的时间,从而转变业务。例如,自动化数据管道技术为包括数据工程师和数据科学家在内的数据团队提供了可扩展的解决方案,最终为整个组织创造商业价值。
从 DevOps 到 DataOps:未来十年的战略
DataOps 正在迅速成熟并成为主流实践。然而,围绕数据运营以及如何在组织内应用数据运营,业内仍存在许多常见的误解。
最常见的数据操作误解之一是它只是“数据的开发操作”通过利用 DevOps 方法,公司和团队在创建和维护软件产品方面实现了速度、质量和灵活性。DataOps 为构建数据产品的团队设定了同样的目标——让更多的开发人员能够更快、更安全地构建越来越复杂的系统。然而,数据管道确实存在根本性差异,需要独特的要求来实现这一宏伟目标。
与 DevOps 改变软件开发方式类似,DataOps 正在改变数据产品的创建方式。DevOps 的核心租户拥有自动化系统,确保正确的代码在生产中运行,并通过安全检查确保其正常工作。有了 DataOps,每个处理数据的人都能得到类似的保证是至关重要的,也就是说,他们处理的数据是正确的、及时的,并且与其他系统同步。随着 DevOps 的大部分重点转移到更小的系统,如微服务和定义良好的 API,我们同样看到 DataOps 的重点转向关键资产数据,以及简单、增量定义、自动化和经过测试的数据集。
未来几年,DataOps 的广泛实施将是公司的一次重大转型。凭借更短的开发周期、更高的迭代频率、零维护和包容性的数据驱动创新,DataOps 将为数据和分析领域带来敏捷性。数据运营是一个不断变化的概念,将在未来几年继续发展,但有一点是肯定的:数据运营将继续存在。
深度学习为什么要用 GPU?
为什么你也应该…
约瑟夫·格雷夫在 Unsplash 上的照片
T 这里有很多关于深度学习 GPU 的信息。你可能听说过这个领域需要一些巨大的计算机和难以置信的能力。也许你见过人们花几天甚至几周的时间训练他们的模型,然后发现他们的代码中有一个 bug。此外,我们在谈论游戏和图形设计时最常听到 GPU。这篇文章将帮助你了解这里实际发生了什么,以及为什么 Nvidia 是深度学习领域的巨大创新者。
图形处理单元
GPU 是一种非常擅长处理专门计算的处理器。我们可以将其与中央处理器(CPU)进行对比,后者在处理一般的计算方面表现出色。CPU 为我们日常使用的设备上执行的大部分计算提供动力。
GPU 可以比 CPU 更快地完成任务。然而,并不是每种情况都是如此。性能在很大程度上取决于所执行的计算类型。GPU 非常擅长可以并行运行的任务。
并行计算
并行计算是一种计算架构,其中几个处理器同时执行多个较小的计算,这些计算是从一个整体较大的复杂问题中分解出来的。
如果我们的处理单元中有多个内核,我们可以将任务分成多个更小的任务,并同时运行它们。这将利用我们现有的处理能力,更快地完成我们的任务。
CPU 通常有四个、八个或十六个,而 GPU 可能有千个!从这里我们可以得出结论,GPU 最适合可以同时完成的任务。由于并行计算处理这样的任务,我们可以看到为什么在这种情况下会使用 GPU。
神经网络是并行的
(图片由 Brighterion 提供)
我们已经得出结论,当一个巨大的任务可以被分解成许多更小的任务时,GPU 是最好的选择,这就是 GPU 被用于并行计算的原因。如果我们看一看神经网络,我们可以注意到它们是令人尴尬的并行*。这意味着我们甚至不需要划分任务,也不需要决定哪个部分属于哪个核心。神经网络是专门为并行运行而设计的。由于它们是深度学习的基础,我们可以得出结论,GPU 非常适合这项任务。*
此外,神经网络是并行的,因此它们不必依赖彼此的结果。一切都可以同时运行,而不必等待其他内核。这种高度独立的计算的一个例子是卷积。
盘旋
(动画由以色列维卡制作)
这是一个没有数字的卷积的例子。左边是输入通道,右边是输出通道。在动画中,计算的过程是按顺序进行的,而现实生活中并非如此。实际上,所有的操作都可能同时发生,它们都不依赖于任何其他计算的结果。
因此,计算可以在 GPU 上并行进行,并且可以产生结果。从例子中我们可以看到,并行计算和 GPU 可以大大加速卷积运算。相比之下,在 CPU 上运行相同的卷积将导致顺序执行,类似于动画中的情况。这个过程需要更多的时间。
Nvidia 硬件和软件
(图片来自 Nvidia.com)
这是我们可以了解 CUDA 的地方。Nvidia 是一家生产 GPU 的公司,他们创造了 CUDA,这是一种可以很好地连接到他们生产的硬件的软件。该软件允许开发人员轻松利用 Nvidia GPUs 的并行计算能力。
简单来说, GPU 是硬件,CUDA 是软件。正如你可能已经猜到的,使用 CUDA 需要 Nvidia GPU,CUDA 可以从 Nvidia 的网站上完全免费下载。
GPU vs CPU
(图片来自 Nvidia.com)
CUDA 允许我们有选择地在 GPU 或 CPU 上运行计算。如果 GPU 好得多,为什么不把它用在所有事情上呢?
答案是 GPU 只对特定类型的任务更好。例如,如果我们的数据在 CPU 上,将其移动到 GPU 可能会很昂贵。所以在任务相当简单的情况下,使用 GPU 的成本会更高。我们可以得出结论,只有当任务足够大并且可以被分解为更小的任务时,GPU 才会表现得更好。对于小流程,只会让事情变得更慢。
出于这个原因,在刚开始时使用 CPU 通常是可以接受的,因为最初的任务会很短很简单。
GPGPU
(英伟达中国 GTC)
当 GPU 最初被创建时,它主要是为了处理计算机图形,这就是这个名字的由来。现在,越来越多的任务转移到 GPU,Nvidia 是这一领域的先驱。CUDA 是近 10 年前创建的,直到现在开发人员才开始使用它。
深度学习和其他类型的并行计算导致了一个新领域的发展,称为 GPGPU 或通用 GPU 计算。
Nvidia 的 GTC 演讲是深度学习领域每个人的必看之作。当我们听到 GPU 计算栈的时候,我们应该把 GPU 想成是底层的硬件,中间是 CUDA 软件架构,顶层是 cuDNN 这样的库。
结论
GPU 在当前深度学习和并行计算的发展中发挥着巨大的作用。凭借所有这些发展,Nvidia 公司无疑是该领域的先锋和领导者。它为创作者提供硬件和软件。
只用一个 CPU 就开始创建神经网络当然没问题。然而,现代 GPU 可以加快任务的速度,并使学习过程变得更加愉快。
资源:
[1]以色列牧师。(2018 年 5 月 23 日)。奥塔维奥·古德的卷积神经网络可视化[视频]。YouTube。【https://youtu.be/f0t-OCG79-U 号
[2]英伟达。(2016 年 9 月 26 日)。中国 GTC:AI,深度学习与黄仁勋&百度的吴恩达【视频】。YouTube。https://youtu.be/zeSIXD6y3WQ
[3]并行计算定义。(未注明)。检索自https://www . omni sci . com/technical-glossary/parallel-computing
为什么开发人员会爱上函数式编程
从 Python 到 Haskell,这种趋势不会很快消失
功能代码目前正在兴起。布鲁克·卡吉尔在 Unsplash 上的照片
F 函数式编程已经存在了过去 60 年,但迄今为止它一直是一个小众现象。尽管像谷歌这样的游戏规则改变者依赖于它的关键概念,但今天的普通程序员对此知之甚少甚至一无所知。
这种情况即将改变。不仅仅是像 Java 或 Python 这样的语言采用了越来越多来自函数式编程的概念。像 Haskell 这样的新语言正在走向完全函数化。
简单来说,函数式编程就是为不可变变量构建函数。相比之下,面向对象编程是关于拥有一组相对固定的函数,你主要是修改或添加新的变量。
由于其本质,函数式编程非常适合按需任务,如数据分析和机器学习。这并不意味着你应该告别面向对象编程,转而采用完全函数式编程。然而,了解基本原则是很有用的,这样你就可以在适当的时候利用它们。
编程语言有一种更加函数化的趋势。这意味着什么,我们在这条路上处于什么位置?
medium.com](https://medium.com/@elizarov/functional-programing-is-on-the-rise-ebd5c705eaef)
这都是为了消除副作用
要理解函数式编程,首先需要理解函数。这听起来可能很无聊,但归根结底,这很有见地。所以继续读下去。
天真地说,函数是一种将一些输入转换成一些输出的东西。只不过事情并不总是那么简单。考虑 Python 中的这个函数:
def square(x):
return x*x
这个函数很简单;它接受一个变量x
,大概是一个int
,或者一个float
或者double
,并计算出它的平方。
现在考虑这个函数:
global_list = []def append_to_list(x):
global_list.append(x)
乍一看,这个函数似乎接受了一个变量x
,无论是哪种类型,都不返回任何值,因为没有return
语句。但是等等!
如果事先没有定义global_list
,这个函数就不会工作,它的输出是同一个列表,尽管有所修改。尽管global_list
从未被声明为输入,但当我们使用该函数时,它会发生变化:
append_to_list(1)
append_to_list(2)
global_list
这将返回[1,2]
,而不是一个空列表。这表明列表确实是函数的一个输入,尽管我们没有明确说明。这可能是个问题。
对功能不诚实
这些隐性输入——或者在其他情况下称为输出——有一个官方名称:副作用。虽然我们只是使用了一个简单的例子,但是在更复杂的程序中,这些会导致真正的困难。
想想你将如何测试append_to_list
:你需要阅读整个定义,理解它在做什么,定义global_list
,并以这种方式测试它,而不是仅仅阅读第一行并用任何x
测试函数。当您处理具有数千行代码的程序时,本例中的简单内容会很快变得乏味。
好消息是有一个简单的解决方法:诚实地对待函数的输入。这要好得多:
newlist = []def append_to_list2(x, some_list):
some_list.append(x)append_to_list2(1,newlist)
append_to_list2(2,newlist)
newlist
我们其实没怎么变。输出仍然是[1,2]
,其他都保持不变。
然而,我们改变了一件事:代码现在没有副作用了。这是个好消息。
当你现在看函数声明的时候,你就知道到底发生了什么。因此,如果程序没有按预期运行,您可以很容易地单独测试每个函数,并指出哪个函数有问题。
保持你的功能的纯净就是保持它们的可维护性。照片由克里斯蒂娜@ wocintechchat.com在 Unsplash 上拍摄
函数式编程就是编写纯函数
一个明确声明了输入和输出的函数是没有副作用的。而一个没有副作用的函数就是纯函数。
函数式编程的一个非常简单的定义是:只用纯函数编写程序。纯函数从不修改变量,只创建新的变量作为输出。(在上面的例子中我作弊了一点:它遵循了函数式编程的思路,但仍然使用了全局列表。你可以找到更好的例子,但这里讲的是基本原理。)
此外,你可以从一个给定输入的纯函数中得到一定的输出。相反,不纯函数可能依赖于某个全局变量;因此,如果全局变量不同,相同的输入变量可能导致不同的输出。后者会使调试和维护代码变得更加困难。
发现副作用有一个简单的规则:因为每个函数都必须有某种输入和输出,所以没有任何输入或输出的函数声明一定是不纯的。如果您采用函数式编程,这些是您可能想要更改的第一个声明。
什么函数式编程不是(唯一的)
Map
和reduce
循环不是函数式编程中的东西。考虑这些 Python 循环:
integers = [1,2,3,4,5,6]
odd_ints = []
squared_odds = []
total = 0for i in integers:
if i%2 ==1
odd_ints.append(i)for i in odd_ints:
squared_odds.append(i*i)for i in squared_odds:
total += i
对于您尝试进行的简单操作,这段代码相当长。它也不是函数式的,因为你在修改全局变量。
相反,请考虑以下情况:
from functools import reduceintegers = [1,2,3,4,5,6]
odd_ints = filter(lambda n: n % 2 == 1, integers)
squared_odds = map(lambda n: n * n, odd_ints)
total = reduce(lambda acc, n: acc + n, squared_odds)
这是全功能的。它更短。这样更快,因为你不需要遍历数组中的很多元素。一旦你理解了filter
、map
和reduce
是如何工作的,代码也就不难理解了。
那个不代表所有功能代码都用map
、reduce
之类的。这也不意味着你需要函数式编程来理解map
和reduce
。只是当你抽象循环时,这些函数会频繁出现。
λ函数
当谈到函数式编程的历史时,许多人会从 lambda 函数的发明说起。尽管 lambdas 毫无疑问是函数式编程的基石,但它们不是根本原因。
Lambda 函数是可以用来使程序功能化的工具。但是你也可以在面向对象编程中使用 lambdas。
静态打字
上面的例子不是静态类型的。然而,它是实用的。
尽管静态类型给你的代码增加了一层额外的安全性,但它并不一定是实用的。不过,这也是一个不错的补充。
函数式编程在某些语言中比在其他语言中更容易。照片由克里斯蒂娜@ wocintechchat.com在 Unsplash 上拍摄
一些语言变得比其他语言更加实用
Perl 语言
Perl 对副作用采取了与大多数编程语言非常不同的方法。它包括一个神奇的论点,$_
,这使得副作用成为其核心特征之一。Perl 确实有它的优点,但是我不会用它来尝试函数式编程。
Java 语言(一种计算机语言,尤用于创建网站)
祝你用 Java 写函数代码好运。不仅你的程序有一半是由关键字组成的;大多数其他 Java 开发人员也会认为你的程序是一种耻辱。
这并不是说 Java 不好。但是它不是为那些最好用函数式编程解决的问题而设计的,比如数据库管理或机器学习应用程序。
斯卡拉
这是一个有趣的问题:Scala 的目标是统一面向对象和函数式编程。如果你发现这种奇怪,你并不孤单:虽然函数式编程的目标是完全消除副作用,面向对象编程试图将它们保留在对象内部。
也就是说,许多开发人员将 Scala 视为一种帮助他们从面向对象过渡到函数式编程的语言。这可能会使它们在未来几年更容易充分发挥作用。
解密一个看似复杂的概念
medium.com](https://medium.com/madhash/what-exactly-is-functional-programming-ea02c86753fd)
计算机编程语言
Python 积极鼓励函数式编程。您可以从以下事实中看出这一点:默认情况下,每个函数至少有一个输入self
。这很像 Python 的禅:显式比隐式好!
Clojure
据其创建者称,Clojure 大约有 80%的功能。默认情况下,所有值都是不可变的,就像在函数式编程中需要它们一样。但是,您可以通过在这些不可变值周围使用可变值包装器来解决这个问题。当你打开这样的包装,你得到的东西又是不可改变的。
哈斯克尔
这是为数不多的纯函数式静态类型语言之一。虽然这看起来像是开发过程中的时间消耗器,但是当你调试程序的时候,这是非常值得的。不像其他语言那么容易学,但是绝对值得投入!
这还只是大数据时代的开始。由奥斯汀·迪斯特尔在 Unsplash 上拍摄的照片
大数据来了。它带来了一个朋友:函数式编程。
与面向对象编程相比,函数式编程仍然是一种小众现象。然而,如果在 Python 和其他语言中包含函数式编程原则有任何意义的话,那么函数式编程似乎正在获得牵引力。
这很有道理:函数式编程非常适合大型数据库、并行编程和机器学习。所有这些都在过去十年里蓬勃发展。
虽然面向对象代码有无数的优点,但是函数式代码的优点也不应该被忽视。作为一名开发者,学习一些基本原则通常足以提升你的水平,并为未来做好准备。
感谢阅读!如果您想知道如何在 Python 代码中实现更多的函数式编程元素,请继续关注。我将在下一篇文章中介绍这一点。
为什么开发人员像喜欢 Python 一样喜欢 TypeScript
以及如果您正在处理前端 web 或后端节点开发,为什么您可能会考虑转换
Python 和 TypeScript 是最受欢迎的编程语言之一。由 Unsplash 上的奥比·奥尼耶德拍摄的照片
Python 是我的谋生工具,我喜欢它。尽管我对这种语言有一些的批评,我还是强烈推荐给任何开始从事数据科学的人。无论如何,该领域更有经验的人倾向于成为 Python 的传播者。
然而,这并不意味着你不能不时地挑战你所在领域的极限,例如通过探索一种不同的编程范式或一种新的语言。
Python 的竞争对手名单很长: Rust 、 Go 、 Scala 、Haskell、 Julia 、Swift、C++、Java、R 都在上面找到了入口。在这样一个拥挤的领域,JavaScript 和 TypeScript 没有得到那么多的认可是可以理解的。
这并不意味着 TypeScript 不是一般编程世界的主要内容。然而,在数据科学家中,它从来没有特别流行过。
您可以得出结论,TypeScript 可能不太适合数据科学。但是不要急。尽管它可能并不适合数据科学的每一个部分,但在某些领域它比 Python 有明显的优势。
如果您恰好在这些领域中的一个领域工作,那么值得尝试一下 TypeScript。如果你不这样做,谁知道你下一站会在哪里?这个领域发展迅速。如果你能超越你的鼻子,你就有竞争优势。
Rust、Go、Kotlin、TypeScript、Swift、Dart、Julia 如何促进您的职业发展并提高您的软件开发技能
towardsdatascience.com](/top-7-modern-programming-language-to-learn-now-156863bd1eec)
TypeScript: JavaScript,但类型安全
大约十年前,微软的软件工程师注意到 JavaScript 不再能满足他们所有的需求。一方面,这种语言发展迅速,增加了非常有趣的新功能。另一方面,管道中的特性没有一个能够解决一个基本问题:JavaScript 对于小程序来说很棒,但是用它编写整个应用程序却是一团糟。
解决这个问题有几种可能性:例如,可以使用不同的语言,或者用更好的语法重新设计 JavaScript。微软的开发团队采取了不同的方法:他们通过扩展 JavaScript 来创建 TypeScript。通过这种方式,他们能够使用 JavaScript 的所有新特性,同时去掉对大型项目不利的东西。
与 Python 类似,JavaScript 在运行时编译,这意味着您需要运行代码来调试它。另一方面,TypeScript 是编译的。这提供了一个额外的安全层,因为程序员在执行之前就获得了关于可能的错误的信息。对于像 Python 或 JavaScript 这样的非编译语言,一旦意识到代码的行为不符合预期,定位 bug 可能会非常耗时。
然而,JavaScript 和 TypeScript 之间的关键区别是类型检查器。在编译时,会检查每个 TypeScript 程序的数据类型是否彼此一致。
手动做这件事听起来可能微不足道。但是当你在做有数千行代码的项目时,你会感谢上帝拥有它。
还有一些其他的区别,比如 TypeScript 有匿名函数和异步函数。匿名函数是函数式编程的一个关键特性,它可以使程序在大数据负载下更加高效。
当您需要并行执行多个操作时,或者当您处理不应该中断后台进程的 I/O 操作时,异步编程非常有用。在 Python 和 Javascript 中,异步编程是可能的,但是在 TypeScript 中,它是从核心内置的。
TypeScript 是 JavaScript 的超集。图片由作者提供,参考了 Guru99 和维基百科。
打字稿是如何流行起来的
如果你讨厌 JavaScript 中不断出现的不合逻辑却又令人捧腹的 WTF-moments ,那么我有个坏消息要告诉你:你也会在 TypeScript 中看到所有这些东西。
但是这些语法上的小问题并不是程序员如此喜欢 TypeScript 的原因。更确切地说,它可以归结为这样一个想法:你使用一个伟大的产品——JavaScript——并添加一些更伟大的东西——静态类型。
当然,我并不是说 JavaScript 总是很棒,或者静态类型总是最好的做事方式。但是对于构建大型微软风格的应用程序来说,这似乎非常有效。
也就是说,TypeScript 的受欢迎程度仍然只有 JavaScript 的一小部分。这可能是由于年龄:打字稿是八岁。JavaScript 的历史是它的三倍!Python 也是这个领域的老古董,已经有三十年的历史了。
尽管还很年轻,但有些领域打字是不可避免的。这增加了它的受欢迎程度。例如,当谷歌宣布 Angular.js 将在 2016 年与 TypeScript 一起运行时,StackOverflow 上的标签数量出现了爆炸式增长。
TypeScript 只有 Python 和 JavaScript 的一小部分吸引力。尽管如此,在某些地区这是不可避免的。图片来自 StackOverflow Trends
TypeScript 可能比 Python 有优势
JavaScript 之所以流行是因为它可以在任何地方运行。你可以在服务器、浏览器或任何你喜欢的地方运行它。你编译一次,它在任何地方都有效。当它第一次出现的时候,它几乎就像魔术一样。
因为它是建立在 JavaScript 之上的,所以 TypeScript 也有这种魔力。Python 也是!当然,它的实现略有不同,因为它使用解释器而不是虚拟机。但这并不能改变这样一个事实:就“随处运行”而言,TypeScript 和 Python 是不相上下的。
泛型和静态类型等特性使得在 TypeScript 中进行函数式编程比在 Python 中更容易。这可能是一个优势,因为由于数据科学、并行编程、异步编程等的发展,对函数代码的需求正在增长。
另一方面,Python 一直在添加更多的和更多的函数式编程特性。当涉及到数据科学、机器学习等等时,Python 处于前沿的最前沿。
这使得并行编程和异步编程成为可能。尽管在两种语言中你都可以完成和 的事情,但还是有很大的区别:在 Python 中,你需要使用特定的库来完成任务。在 TypeScript 中,所有库从核心来说都是异步的。由于后者在默认情况下功能更强大一些,所以进行并行编程通常会更容易一些。
换句话说,如果您是一名参与异步流程和并行计算的 Python 开发人员,您可能想尝试一下 TypeScript。
TypeScript 比 Python 好吗?有时候。照片由第九合作在 Unsplash 上拍摄
是什么让 TypeScript 对数据科学如此重要——或者不是
许多数据科学家处理异步和并行编程。您可能已经在考虑用 TypeScript 而不是 Python 编写您的下一个项目了。然而,这是否是一个好主意取决于许多其他因素。
首先,TypeScript 没有一种简单的方式来处理列表理解。例如,在处理大型数组时,这可能会令人沮丧。
其次,TypeScript 中没有本机矩阵操作。Python 有 NumPy 以及许多其他工具,这使得它们变得很容易。因此,如果您的项目大量使用线性代数,您可能希望远离 TypeScript。
第三,如果你不太熟悉 JavaScript,你肯定会有困惑的时候。因为 TypeScript 是建立在 JavaScript 之上的,所以它继承了它的所有特性——好的、坏的和 WTF。虽然,老实说,遇到这些现象也很有趣…
最后,你要考虑到编程不是一个孤独的职业。在数据科学领域有一个庞大的 Python 社区,它提供支持和建议。但是在这个时候,TypeScript 在数据科学家中并不流行。所以你可能无法在 StackOverflow 和其他地方找到对你的问题有帮助的答案。
也就是说,如果您正在开始一个没有太多大数组和矩阵运算的小项目,您可能无论如何都想尝试一下 TypeScript。尤其是当它涉及一些并行或异步编程时。
[## Python vs. Node。JS:哪个最适合你的项目?
使用一组预定义的因素对 Python 和 Node.js 进行详细比较
towardsdatascience.com](/python-vs-node-js-which-one-is-best-for-your-project-e98f2c63f020)
底线:知道在哪里使用你的工具
没有一种语言适用于所有的任务。当然,有些语言比其他语言更有趣或更直观。当然,热爱你的工具很重要,因为这会让你在困难的时候坚持下去。因此,从 TypeScript 或 Python 这样广受欢迎的语言开始并不是一个坏主意。
但是最终你不应该像坚持一种宗教一样坚持一种语言。编程语言是工具。哪种工具最适合你取决于你想用它做什么。
目前,Python 对于数据科学来说意义重大。但是在一个快速发展的领域,你需要能够超越你的鼻子。随着你的任务的变化,你的工具也在变化。
另一方面,TypeScript 有一个围绕前端 web、后端节点和移动开发的活跃社区。有趣的是,这些领域与数据科学的交叉比人们想象的更频繁。尤其是 Node,在数据科学家中越来越受欢迎。
当然,这并不意味着你应该一次涉猎十几种语言。真正精通一门语言有巨大的价值。但是从长远来看,对其他语言和技术保持好奇将有助于你保持领先地位。
所以,当你想尝试新事物时,不要犹豫。为什么不用 TypeScript?
谷歌为什么收购 DoubleClick?
这项 31 亿美元的收购如何帮助谷歌成为今天的数字广告巨头
是什么给了一家伟大的公司额外的活力和火花?我一直对探索这个很感兴趣。在这一系列博客文章中,我希望从战略角度分析和剖析有趣的技术话题。希望在这个过程中,我们都能学到一两件关于如何成为一家伟大企业的事情。
谷歌宣布,它已同意在 2007 年以 31 亿美元收购一家名为 DoubleClick 的公司。双方同意的收购价格几乎是一年前收购 YouTube 价格的两倍?什么?YouTube 是当前数字领域的标志性支柱,是世界上访问量最大的网站之一,也是其母公司谷歌的巨大收入来源。即使在那个时候,YouTube 也有巨大的潜力,这是显而易见的——那么为什么谷歌愿意为一家至少我以前从未听说过的公司支付这么多钱呢?
数字广告的过去和现在
为了理解为什么这次收购如此重要,我们需要先回过头来理解数字广告的前景。广告业是一个庞大的行业。2019 年,仅在美国,所有渠道(数字、电视、印刷等)的广告总支出。)估计为 2400 亿美元。其中,超过一半(1300 亿美元)是数字广告——数字广告是通过互联网提供给在谷歌上搜索、观看 YouTube、浏览脸书或 Instagram 等的人的广告。包括移动设备和桌面设备。数字广告(尤其是移动广告)也是广告市场中增长最快的部分,几年前,它将电视挤到了第二位,此后再也没有回头。
但回到 2007 年,当谷歌收购 DoubleClick 时,数字广告支出仍处于相对初级阶段——数字广告支出仅占总广告支出的 12%,相比之下,电视广告支出占 39%(尽管数字广告支出的增长速度比所有其他类型的广告支出快很多倍)。
数字广告支出的构成在 2007 年也非常不同——40%是付费搜索。付费搜索是指公司竞标在搜索引擎的搜索结果页面上显示广告的权利(通过挑选感兴趣的关键词和每个关键词的相关出价金额)。和现在一样,当时的头号搜索引擎谷歌以 75%的市场份额统治着付费搜索市场。为什么当时付费搜索的份额如此之大?
付费搜索早期成功和流行的原因是它易于使用和衡量。一点背景知识将有助于理解这一点。
传统广告的特点是库存有限——在篮球比赛期间,公路旁的广告牌和广告时段都是有限的。广告商必须向所有观众展示相同的广告(每个观看超级碗的观众看到的广告都是一样的),但也有例外(国家电视/广播网络的本地节目部分允许他们用本地广告轰炸我们;但是即使这样,整个本地观众也会看到相同的广告)。这意味着,为了获得最好的投资回报率,广告和它的产品必须吸引普通观众。在其萌芽阶段,数字广告面临着相反的问题。有了互联网广告,个性化广告位的供应几乎是无限的。某人在互联网上浏览网站或玩游戏的每一秒钟都是为他或她提供与此人特定兴趣相关的产品广告的机会——突然之间,广告商拥有的潜在广告位多得不知如何是好。问题是瞄准了。在对用户了解不够的情况下,他们很难识别这些兴趣并提供相关广告,这意味着数字广告活动的投资回报率往往低于预期。
照片由 Edho Pratama 在 Unsplash 上拍摄
不过付费搜索是个例外。锁定付费搜索广告要容易得多,因为用户在每次搜索中都清楚地陈述了他感兴趣的主题或意图。当有人搜索“购买二手车的最佳地点”时,这个人的意图变得非常清楚(即使很少或没有关于这个用户的事先数据)。放置在这个人的搜索结果中的二手车广告将有非常高的点击通过(点击通过是指用户点击一个广告),允许谷歌及其搜索引擎竞争对手为这些广告中的每一个收取高昂的价格,也就是每次点击的成本。
但是付费搜索并不适用于所有类型的广告。从高层次上来说,广告(以及一般的营销)试图做两件事情中的一件——让人们执行一个特定的行为(比如购买产品 A)或者建立品牌意识(比如 T2)。付费搜索广告对前者非常有效(因为即使它是一个广告,它也是相关的信息),但对后者就不那么有效了。如果我在进行谷歌搜索时,对我要找的东西有一个相当清晰的想法,那么我可能不会花时间去看一个旨在强化现有品牌或向我介绍一个新品牌的煽情视频。相反,我可能会认为这些尝试令人分心和烦恼。大多数人不会去谷歌的网站浏览;相反,这是他们寻找信息旅程中快速的第一步。
这就是显示和视频广告进入 (当我说显示向前发展时,我也指视频) 。展示广告是当我们访问和浏览网站时出现的交互式图像或视频(它们可以作为横幅出现,或者悬停在旁边,甚至暂时占据我们的整个屏幕)。展示广告是数字方面最接近传统电视广告的东西。如今,许多在电视广告上花费数百万美元的公司也在展示广告活动上花费了同样多甚至更多的钱(通过脸书、Instagram、YouTube 或 IMDb 等热门网站投放)。在过去十年中,正是视频广告的增长(以及在较小程度上其他展示广告形式的增长)使得数字广告从电视广告中夺取了如此多的市场份额。
今天,谷歌是为用户提供展示和视频广告的主要参与者。当你访问互联网上的一个随机网站(这似乎与谷歌无关)并看到一个广告时,它可能是由谷歌拥有的技术间接带给你的。但回到 2007 年,情况就大不一样了。
谷歌的困境
2007 年,虽然谷歌是付费搜索巨头,但它在展示广告领域的地位相对较低。事实上,谷歌可能将其在展示广告方面的弱点视为一种生存威胁。当然,AdSense 上有一些,这是一个广告网络,将广告客户与谷歌网络(一个同意让谷歌决定为他们显示哪些广告的网站集合)上可用的广告位进行匹配。但是谷歌网络主要由像个人博客这样的小网站组成,这些网站上的广告更可能是横幅广告而不是视频。
斯文·布兰德斯马在 Unsplash 上的照片
所以谷歌需要解决一个“鸡和蛋”的问题。谷歌网络中没有庞大的第三方网站(内容出版商),它很难吸引像耐克或香奈儿这样的大品牌广告商。如果没有愿意为视频广告展示(和点击率)支付高价的超级优质广告商,谷歌很难吸引最好、最大的网站加入谷歌网络。在广告界的行话中,谷歌缺乏吸引需求(广告商希望发起一场大型数字广告活动)所必需的库存(有吸引力的网站上的广告位)。
今天听起来很奇怪,谷歌将很难打入任何广告相关市场,但在当时有几个原因:
- 请记住,虽然谷歌拥有世界上访问量最大的网站,但普通用户实际上不会在谷歌的搜索和结果页面上花太多时间(一旦你得到了方向,你通常会匆忙前往目的地)。
- 谷歌有理由认为,在主页(和搜索结果页面)上塞满广告会降低其可信度。
- 最后,广告行业的现有结构对现有企业来说非常轻松且有利可图。没有人渴望给谷歌这样的新贵(尤其是已经在相关市场拥有类似垄断地位的公司)一个权力地位。
与此同时,谷歌拥有一些独特而巨大的优势:
- 它完全规划了互联网,甚至比创建网站的人更了解网站。这就是为什么即使在 2007 年,AdSense 已经是一个主要的收入来源。
- 它可以访问用户的全部搜索历史(和电子邮件)。那时,谷歌可能比历史上任何一家公司都更了解普通人。
- 它还知道你查看搜索结果后去了哪个网站。
换句话说,谷歌拥有宝贵的数据,可以帮助网站,甚至是已经拥有大量专有数据的大型网站,最大限度地发挥展示广告空间的价值。它还拥有关于用户兴趣和背景的无与伦比的数据,广告商可以利用这些数据显著提高他们的展示和视频广告活动的关注度和回报。它只是需要解决“鸡和蛋”的问题。
解决方案:购买 DoubleClick
来自《圣何塞水星报》的消息称:
“在与分析师和记者的电话会议上,埃里克·施密特说,在一次战略评估显示销售展示广告的机会比谷歌高管此前想象的要大,而且双击公司在进入市场方面做得非常出色之后,谷歌决定出价收购双击公司。”
对谷歌来说,收购 DoubleClick 是一次巨大的成功。2007 年,DoubleClick 是一家擅长提供展示广告的公司,与主要网站和广告商(他们都是其软件的用户)都有大量的关系。也许对谷歌来说更有吸引力的是,他们即将建立 DoubleClick Ad Exchange,这是一个广告商可以实时竞标广告清单(网站上可以展示广告的位置)的市场。
谷歌一夜之间从一个预告片变成了展示广告的领导者(同时阻止了主要搜索竞争对手微软的同样行为)。此外,谷歌现在有了一个明确的途径来利用其独特而宝贵的网站和用户知识。它可以作为一个平台这样做——通常是整个价值链中最有利可图的位置。
在 DoubleClick 之前,我想象谷歌和主要广告商之间的对话是这样的:
Google: Hey Chanel, it's Google again. I know everything about my users and can help you target your brand message better than ever before! Will you consider doing some brand advertising through me?Chanel: Oh sounds great! Can I show a 40 second video starring Charlize Theron on your main page whenever someone searches "purse"?Google: No. That would be super lame. Our users expect our main page to be clean and reasonably minimalist.Chanel: ... Then where can I play my video to ensure that it gets tons of views? It was really expensive to produce.Google: How about on the sidebar of this one nifty travel blog?Chanel: ... <hangs up>
双击之后,就不再需要给主要的广告商打电话了。他们可能已经在客户名单上,以及所有主要网站的注意。相反,谷歌可以只是坐在中间代理交易,从它投放的每一个广告中收取少量费用(和数据)(这种权力地位不是瞬间的;而是仍然花了几年时间来完全建立收购后的关系)。
这种权力经纪人的地位也与其现有业务产生了巨大的协同效应。一个明显的受益者是 AdSense(以及谷歌拥有的其他广告服务业务部门)——谷歌现在对广告市场的双方都有更大的吸引力,可以利用 DoubleClick 的关系来显著扩大广告库存和自己的知识,以提高每个广告的平均投资回报率。这为谷歌创造了一个良性的反馈循环,其广告的优异表现吸引了更多的广告商(需求),这反过来又吸引了更多的网站(供应),等等,以指数级的速度扩大了其覆盖范围和市场力量。与此同时,它可以使用其整个套件或产品,如搜索、地图、Chrome,最终还有 Android,来不断完善其广告定位算法。
在另外两个领域,此次收购对谷歌来说是一个巨大的胜利(但对用户隐私和市场竞争来说是一个损失):
- 虽然谷歌花了几年时间在这方面全力以赴,但通过使用 cookies,谷歌可以在用户访问通过 DoubleClick 提供广告的网站时跟踪他们。由于 DoubleClick(或谷歌本身)提供的广告在随后几年变得如此流行,这相当于谷歌知道你在网上的几乎所有地方(除非你改变你的隐私设置)。
- 具有讽刺意味的是,谷歌对搜索广告将停止增长的担忧是没有根据的。由于谷歌作为互联网门户的地位,以及最终移动互联网使用的爆炸式增长,谷歌继续从搜索相关广告中获得数十亿美元的收入。希望(或需要)进入这一巨大市场的广告行业参与者受到极大的激励,在谷歌的广告交易平台(通过收购 DoubleClick 收购的平台)上进行交易。这最终让他们建立了这个星球上最大、最强大的广告交易所。成为一个双边市场中最大的经纪人(就像广告交易所,谷歌在那里代理内容网站和广告商之间的交易)已经带来了巨大的优势,因为双方的参与者自然都想在最大的市场中交易(所以你的相对大不断吸引更多的参与者,这使你变得更大)。但最重要的是,谷歌的专有数据和搜索优势使他们能够在其交易所交易中获得额外的独特价值。
值得注意的是,2014 年,谷歌推出了一个私人(仅限受邀者)广告交易所,优质内容出版商(最好的网站)和优质广告商可以在这里进行交易。这让交易双方的大品牌对广告内容和广告出现的地方有了更多的控制权。在短短的几年里,谷歌已经从局外人变成了最负盛名的数字广告交易的经纪人……这一切都得益于它收购 DoubleClick 时获得的技术。
我为什么会涉足数据科学?
我不是一个“数字迷”
莱斯·安德森在 Unsplash 上的照片
当你开心的时候,时间过得很快
我一直是一个反思自己行为并试图从中吸取教训的人。我在数据科学团队担任产品分析师的新职业生涯已经超过 90 天了,所以我认为是时候做一些反思和思考了,为什么我决定颠覆我美好而稳定的生活,走上一条艰苦工作、奋斗和数字的漫长道路。
它从数据开始
我决定转变生活的核心是我对数据的热爱。我喜欢收集它。我喜欢清理它。我喜欢看着它。我喜欢和数据打交道!我对数据的热爱源于两个种子:
我喜欢股票市场。我找到了一份软件技术支持的工作。
两颗种子发芽了
小时候,我记得听到父母一直在谈论市场。我爸爸总是播放新闻,并在早餐时看报纸上的每日报价。我在年轻的时候接触了股票市场这个创造财富的引擎,我对通过拥有一家公司的一部分来赚钱的想法着迷了。我还没有成为一个伟大而富有的投资者,但我确实尝试过一段时间的日内交易,并接受了一群交易者的指导。他们让我接触到一些昂贵的数据…
大约一年前,我在一家软件公司找到了一份技术支持的工作,在那里我学习了 SQL 的基础,对计算机科学有了兴趣,并接触了软件开发生命周期。随着我对 SQL 的热爱,我开始在家里创建数据库。
我的第一个用例:收集昂贵的股票数据!
每天,我都会从他们允许我访问的 feed 中手动抓取数据。我会把它转储到一个 SQL 数据库中,试图过滤掉噪音,揭示高概率交易。总的来说,它产生了一些好的结果,但当市场环境发生变化时,我的结果就乱了套。
我意识到,比起每天交易,我更喜欢创建一个算法来排列和分析我的股票数据。
朝着正确方向的努力
在我变得更加精通 SQL 之后不久,我尝试了一下 Python。我看了几个 YouTube 教程,用 BeautifulSoup 从雅虎搜集了股票数据。我觉得这很酷,但我并不太喜欢。没过多久,我就开始看到“数据科学”这几个字到处冒出来。我想,“我喜欢数据,我喜欢科学,我应该看看这个!”
我认识谁?
当时我已经在这家软件公司工作了大约 6 年,我知道我们有一个数据科学团队,所以我决定看看经理是否有兴趣进行一次非正式的聊天。我告诉他我对数据的热情和学习更多数据科学的愿望,我担心我会失败,因为我的背景是技术写作和软件支持,而不是计算机科学和统计…
本质上,他让我相信我的背景没有我的好奇心和求知欲重要。
几个月后,在读了几本关于机器学习的入门书籍后,我报名参加了一个分析编码训练营,作为训练自己学习编码的一种手段。MOOCs 是一种很好的学习方式,尤其是如果你有基础的话,但一开始我无法专注足够长的时间来获得很多东西。如果你正在考虑一个编码营,看看我写的关于我的经历的文章。
由 pxhere.com 提供
倒带时间很快
当我大约 26 或 27 岁时,我的生活发生了重大转变:
我决定认真对待我的激情。
例如,我认识很多人,他们从一个爱好跳到另一个爱好,或者总是被最新的闪亮的东西分心。我没有那样做,而是决定看看我能把我关心的几个爱好推进到什么程度:
流放之路
计算机
写作
数据……数据科学?
学习编码
我为自己建立的心智框架让我坚持自己的热情并认真对待它们,结合新兵训练营的课堂环境和我的 SQL 经验,让我茁壮成长。我第一个告诉你,我的 python 代码还在新手水平,可能有点超越;不管怎样,我几乎每天都在家里和工作中专心致志地编码,努力达到下一个级别。我从新兵训练营毕业才大约六个月,我不仅在一个数据科学团队找到了一份工作,还对通过媒体和我的博客与世界分享我的编码项目产生了热情!
来回答这个问题
在进入数据科学并失眠研究算法和我可以用来聚集客户使用数据的新方法之前,我有一个相当甜蜜的生活:很少抱怨,稳定的关系,体面的钱…那么什么给了呢?
我看到了成为一个不断发展的领域的一部分的机会,在这个领域中,我可以探索我的激情,并与聪明和志同道合的人在一起。
虽然我不是数据科学家,但我可以和已经成为或想要成为数据科学家的人一起工作,我认为这很棒。不要误解我,我也和许多其他有趣的人一起工作,我努力维持我在公司任职期间建立的友谊。对某件事感到陌生,但有一个希望看到我成功的支持网络,这种感觉很好。这就是我大部分时间在工作和与妻子相处时的感受!
剥洋葱皮
除了机会、对数据的热爱和对编码的奉献,我的数据科学决定还有另一个组成部分…我对修辞理论的兴趣在大学里激起,并让我走上了获得科学和技术通信学位的道路。
数据科学和数据分析为我提供了新的工具,我可以用这些工具来启发观众。
包装东西
虽然标题有点“点击诱饵”,但在我在数据科学团队度过头 90 天后,我不得不反思我为什么会涉足数据科学。虽然感觉要学的信息太多了,但我很高兴自己完成了这个转变。总的来说,是我对数据的热爱、对学习的执着、支持性的关系,以及我的激情组合,让我这个不喜欢数字的人变成了一个从事数据科学的人。查看我的 GitHub 和关于我最新项目的文章:
在 GitHub 上注册你自己的个人资料,这是托管代码、管理项目和构建软件的最佳地方…
www.github.com](https://www.github.com/bendgame)
谢谢大家!
- 如果你喜欢这个, 关注我的 Medium 了解更多
- 通过订阅 获得完全访问权限并帮助支持我的内容
- 我们连线上LinkedIn
- 用 Python 分析数据?查看我的 网站
[## Python 中的仪表盘,适用于初学者和使用 Dash 的其他人
使用 Python 中的 Dash 初学者教程构建一个基本的和高级的仪表板
medium.com](https://medium.com/swlh/dashboards-in-python-for-beginners-and-everyone-else-using-dash-f0a045a86644) [## 成为数据科学领域新产品分析师的 4 个成功秘诀
帮助我在数据科学领域获得早期成功并战胜冒名顶替综合症的 4 个技巧
medium.com](https://medium.com/swlh/4-tips-for-finding-success-as-a-new-product-analyst-in-data-science-30b01e18fa86)
为什么数字技术公司要做机器人研究
在家实现人工智能的目标
通过让自主代理与世界互动来学习如何学习。为什么像脸书和谷歌这样的大型科技公司雇佣机器人专家来给他们多余的会议室带来活力。
这最初发表在我的机器人学免费时事通讯上&自动化,民主化的自动化。
一个关于机器人和人工智能的博客,让它们对每个人都有益,以及即将到来的自动化浪潮…
robotic.substack.com](https://robotic.substack.com/)
你在哥哥的另一间技术办公室里闲逛,看到一个中等大小的会议室,里面全是机器人。当你拜访朋友,在他们的广告技术创业公司的办公室里尝试新的微型咖啡馆时,这不是你所期望的(嗯,当访问者被允许时),但这正日益成为现实。
大型科技公司在探索性研究上投入了大量资金(T2,每年 100-200 亿美元,在最大的公司中),并持有更多资金以备不时之需(苹果、微软、谷歌、亚马逊和脸书共持有5500 亿美元现金)。就数十亿美元而言,雇佣几个机器人研究人员只是沧海一粟。它也收集了更多的顶尖人才,但我认为这比我考虑的更有助于短期发展。
机器人作为一个行业的前景在未来十年(或者更快,取决于疫情的延续,正如我详细写的)将产生近乎指数级的影响。科技公司希望抓住的部分是那些在你家里实现其算法的机器人。正如我在中所写的,推荐是一个游戏和自动化,
一个 推荐系统和这些平台的总主题 *是:*如果我们能预测用户想做什么,那么我们就能把那个特性做成我们的系统。
将这种情况扩展到占据你生活和家庭空间的代理,问题就变得复杂了:如果它能出现并询问你过得如何 ,那么关闭你的数据或关闭你的应用就无法逃脱设备。**
我是这些技术的大力支持者,但是为什么大公司在这个领域大量投资的框架(一个重要原因)是重要的。自主代理可以在家中获得更多、更多的巨大收益——包括为独居的高危人群提供安全,帮助做家务,在对话中与你的数字生活(电子邮件)互动,等等。我们需要确保我们的建设是正确的。
来源 Pexels。
具身人工智能
给予自主代理人与物理世界互动的能力。
我认为这是一个更加微妙的话题,而不仅仅是翻译人工智能和机器学习的最先进方法——通过身体互动进行学习是我们体验的第一种学习类型。孩子们通过触摸了解新的物体,以及它们如何与他们正在萌芽的生命互动。
尝试在硬件中学习的任务有不同的限制:样本更有价值(我们不能永远运行硬件),结果可以直观地解释(与人类的操作方式很好地联系起来),以及学习可能存在的更多证据。我们试图模仿自然,因为它是可行的,但是没有理由机器智能不能远远超越我们人类的学习方式。
构建为硬件设计的人工智能系统调整目标和方法,为我们每天都在交互的更多数字人工智能方法创建一个反馈回路,如计算机视觉和自然语言处理。 我会继续打开这个盒子 学习机器人将如何与传统的机器学习研究协同工作。
所以,我想扩展一下具身 AI 的定义: 学习如何学习 ,通过让自主智能体拥有与世界互动的新方式。
总结一下——了解脸书在机器人技术方面的努力、脸书的室内探索项目(Habitat) 、微软的公共、研究网站、苹果的招聘信息,或者谷歌大脑的机器人团队。亚马逊在这件事上的目标要直接得多(物流、送货、接管更多行业等)。
来源—作者。我正在研究如何安全地让四旋翼飞行器(上图)在人们家里学习飞行。
家用机器人的发展前景
这是体现人工智能的地点、时间和方式——我们需要进一步思考的问题。
- 家用机器人的神秘世界:我们需要解释为什么一些机器人公司给他们的玩具配上人脸是如此疯狂。此外,提问:为什么支援机器人针对的是最脆弱的目标——儿童和老人?
- 不要把你的机器人局限于你的世界观:我们怎样才能改变我们训练和制造机器人的方式,让它们更广泛地发挥作用?
- 给算法密钥:是什么限制了 Alexa et。不要变得非常有用,不要过度安排时间,不要例行采购,等等?不仅仅是隐私问题。
- 当个人机器人不再糟糕的时候:把所有的部分组合在一起将是一个挑战
来源-作者。
为什么婴儿潮一代还在经营一切?
关于婴儿潮一代占社会主导地位的数据
弗拉德·萨尔古在 Unsplash 上拍摄的照片
既然伊丽莎白·沃伦已经退出了民主党初选,我们知道我们的下一任总统要么是一位超重的 73 岁现任总统(唐纳德·川普),一位认知能力下降的前副总统(乔·拜登——77 岁),要么是一位刚刚从心脏病发作中康复的老年参议员(伯尼·桑德斯——78 岁)。
这种令人遗憾的事态只是一个更广泛趋势的最新和最明显的例子——婴儿潮一代拒绝到步 到社会的一边。随着现代医学的进步,人们的寿命越来越长,更重要的是工作时间越来越长。这对个人来说很好,但对世界来说却有可怕的后果。以下是婴儿潮一代仍然占据主导地位的 5 个领域,它们阻碍了新一代人和整个人类的进步。
1.政治
下面是显示美国总统当选时年龄的直方图。最后一个例外是唐纳德·特朗普,他在 70 岁时进入椭圆形办公室。在特朗普之前,大多数总统(包括像华盛顿、林肯和罗斯福这样的伟人)都是在 50 出头或 50 多岁时就职的。
https://en . Wikipedia . org/wiki/List _ of _ presidents _ of _ the _ United _ States _ by _ age
如果民主党在 2020 年获胜,我们最终会有一个头发比 Wilco 音乐会还要白的男人,他的手机可能被编程为使用最大尺寸的字体。虽然年龄只是一个数字,但我认为我们希望总司令的年龄低于 70 岁。
看看政府的其他部门,我们会发现它们同样陈旧过时。现任美国参议员的平均年龄是 63 岁,超过四分之一的人超过 70 岁。
我们的民选官员无法应对现代世界的挑战,这有什么好奇怪的?我们取笑 Ted Stephens 在 2006 年称互联网为“一系列管子”,但我们认为我们现在的代表现在知道得更多吗?技术正在改变我们生活的方方面面,而负责监管技术的人甚至不知道如何下载 Chrome。
2.经济
从有线电视到早餐麦片,很多人都在谈论 T2 的千禧一代是如何扼杀一切的。报道不足的是,这有多少应归咎于婴儿潮一代。如果我们看看年轻一代的钱有多少,难怪他们会吝啬在苹果蜂的夜晚。
通过控制政府,婴儿潮一代能够利用他们的政治权力来保护他们的经济利益。2008 年后,联邦政策主要倾向于保护金融资产(股票、债券、房地产等)的价值。).我不认为婴儿潮一代的政治家创造了导致婴儿潮一代资产升值的政策是巧合。通过优先考虑现状和不进行任何结构性改革,美国的不平等已经达到惊人的水平,国家的大部分财富都集中在已经很富有和非常老的人手中。年轻选民中社会主义的崛起是这种情况的自然结果。
数据来自https://dqydj . com/按年龄划分的资产净值计算器-美国/
3.商业
金融资产的牛市不仅对婴儿潮一代的政治家有利,对婴儿潮一代的首席执行官也是好事。对于美国大公司的领导人来说,平均年龄已经上升到 56 岁,许多人现在已经 70 多岁了。
https://www . alvarezandmarsal . com/sites/default/files/files/Age-CEO-CFO-COO . pdf
此外,趋势显示,高管年龄持续增长。
就我个人而言,我不会把这归咎于某些道德上的失败,比如高管拒绝退休。然而,我确实担心这种古老的血统会减缓经济的发展。新公司成立率处于历史低点。企业似乎越来越陷入短期思维,为下一个季度而不是未来十年做计划。
即使在专业人士中,平均年龄也上升了。现在 30%的医生都超过 60 岁了。律师事务所没有扩大年轻合伙人的队伍。我们到处都能看到老年人使用旧的思维方式,并且没有为新的问题做好计划。
4.大学
如果年轻人控制了竞争机构,婴儿潮一代对企业和政府的统治就不会如此令人担忧。例如,美国大学系统是国家的一个独立支柱,通过研究项目和技术发展为我们的经济成功提供基础。
唉,我们在这里也看到了下降。在这十年里,大学被各种问题所困扰,比如学费飞涨、管理人员激增,以及研究中的治理问题,这些问题导致了像复制危机这样的事情。
这可能是巧合,但所有这些负面趋势都与大学校长的老龄化相吻合。美国教育委员会的研究表明,绝大多数大学校长都超过了 60 岁。
https://www.aceacps.org/summary-profile/#demographics
大学是未来伟大想法诞生的地方。同样是那些在 60 年代抗议像越南战争这样的重大问题的婴儿潮一代,现在正在对学生们穿什么样的万圣节服装实施严格的规定。
5.报刊
我们社会的第四等级传统上被赋予了控制过度权力的责任。鲍勃·伍德沃德和卡尔·伯恩斯坦一起揭露水门事件时 29 岁(1972 年 28 岁)。同年,亨特·S·汤普森 35 岁,他写下了开创性的“竞选中的恐惧和厌恶”。我们最著名的记者现在年纪大了很多,作品也少了很多。
例如,《纽约时报》一半的专栏作家——塑造国家叙事的人——是婴儿潮一代。像保罗·克鲁格曼(67 岁)和托马斯·弗里德曼(66 岁)这样的老人把 NYT 观点作家的平均年龄提高到 53 岁以上。虽然《纽约时报》仍会报道重大新闻,但当今的重大事件往往由局外人来处理。充满高薪婴儿潮一代的新闻机构积极地错误地对待伊拉克和对国家安全局窃听事件坐视不管,而不是向公众报道。
当“灰色女士”让新贵出版物失去流量,并吸收他们最优秀的人才时,很明显,整个新闻业被老一辈人所控制。将财富和权力集中在老年人身上的同样的结构性问题,也将人们的注意力集中到了由旧领导人领导的旧机构。
最后的想法
2020 年的世界正在快速变化。美国正在失去经济和政治实力,技术进步正在彻底改变每个行业,气候变化和病毒性流行病等全球性问题威胁着我们的生活方式。我认为这些新问题需要新鲜血液来面对。
去年流行的“ Ok Boomer ”模因不是对老年人的肤浅批评,而是对我们社会的权力结构存在严重问题的最终承认。我们所依赖的系统和机构在物理上和隐喻上都僵化了。它们导致了影响到每个人的问题,从大学生到退休老人。只有用新的思维和新的想法,我们才有希望面对我们面临的挑战。
为什么 GANs 需要这么多噪音?
形象化甘人如何在低维潜在空间中学习
图片来源:像素
生成对抗网络(GANs)是一种在给定一组旧的“真实”样本的情况下生成新的“虚假”样本的工具。这些样本实际上可以是任何东西:手绘数字、脸部照片、表现主义绘画,你能想到的都有。为此,GANs 学习原始数据集背后的底层分布。在整个训练过程中,生成器逼近这个分布,而鉴别器告诉它哪里出错了,两者通过军备竞赛交替改进。为了从分布中抽取随机样本,给发生器随机噪声作为输入。但是,你有没有想过为什么 GANs 需要随机输入?常见的答案是“所以它们不会每次都生成相同的东西”,这是真的,但答案比这稍微微妙一些。
随意采样
在我们继续 GANs 之前,让我们绕道考虑从正态分布中抽样。假设你想用 Python 来做这件事,但是你从来没有读过numpy
文档,也不知道np.random.normal()
的存在。相反,你所要做的就是random.random()
,它在区间(0,1)内均匀地产生值。
图 1:从我们的输入均匀分布(蓝色)和目标正态分布(橙色)中抽取的 100k 个样本的直方图。
简而言之,我们希望将图 1 中的蓝色分布转换成橙色分布。幸运的是,有一个函数可以做到这一点:逆累积分布函数,也称为分位数函数。图 2 中所示的(非反转)累积分布函数(CDF)描述了对于某些指定的 x ,从所讨论的分布中抽取的任何随机值将等于或小于 x 的概率。
图 2:标准正态分布的 CDF。
例如,在图 2 中的点 x=0 ,y = 0.5;这意味着 50%的分布低于零。CDF 的一个便利特性是输出范围从 0 到 1,这正是我们从random.random()
函数中获得的输入!如果我们将 CDF 倒置(翻转过来),我们得到分位数函数:
图 3:标准正态分布的分位数函数。
这个函数给出了分位数(我们的 x ,范围从 0 到 1)和正态分布中相应值之间的精确关系,允许我们直接从正态分布中采样。即 *f(random.random()) ~ N(0,1),*其中输入空间中的每个点对应输出空间中的一个唯一点。
图 4:说明使用分位数函数将均匀分布(蓝色)映射到正态分布(橙色)的动画。
这和甘斯有什么关系?
在上面的场景中,我们拥有分位数函数,但是如果我们没有,并且必须学习从输入空间到输出空间的映射,那该怎么办呢?这正是 GANs 要解决的问题。在之前的文章中,我举例说明了如何使用 GANs 从正态分布中取样,如果你处于数据紧急状态,并且没有可用的分位数函数。在这种情况下,我发现更有帮助的是,不要把 GANs 想象成随机采样的工具,而是把某个 k 维潜在维(输入)空间映射到某个 p 维样本维(输出)空间的函数,然后可以用它把潜在空间的样本转换成样本空间的样本。在这种情况下,很像分位数函数,没有随机性。
头脑中有了地图,让我们考虑如何从 2D 正态分布中抽取随机样本,仅将 0 到 1 之间的 1D 随机样本作为输入。
图 5:2D 正态分布(橙色)和 1D 均匀分布(蓝色),各有 100k 个样本。
我们如何将蓝线中的 100k 个样本映射到橙色斑点中的 100k 个样本?没有什么好办法。当然,我们可以使用阿砣曲线,但是这样我们就失去了有用的属性,即输入空间中的点靠在一起会导致输出空间中的点靠在一起,反之亦然。正是由于这个原因,**GAN 的潜在空间的维数必须等于或超过其样本空间的维数。**这样,函数就有足够的自由度将输入映射到输出。
但为了好玩,让我们想象一下,当只有一维输入的 GAN 被赋予学习多维分布的任务时会发生什么。希望结果不会让你吃惊,但是看起来很有趣。
2D 高斯
让我们从图 5 所示的问题开始:将 0 到 1 之间的 1D 范围映射到 2D 正态(或“高斯”)分布。我们将使用一个典型的普通 GAN 架构(代码在文章末尾)。
图 6:潜在维度为 1 的 GAN 试图学习 2D 高斯分布。灰点是从真实分布中抽取的样本,红点是生成的样本。每一帧都是一个训练步骤。
如你所见,这可怜的东西不知所措。只有一个自由度,它几乎不能探索样本空间。更糟糕的是,因为生成的样本在 1D 流形中是如此密集(这张 gif 中的灰点和红点一样多!),鉴别器能够偷懒,从来不需要努力从假货中辨别出真正的点,因此生成器不能获得非常有用的信息(当然也不足以学习空间填充曲线,即使它有这个能力!).
图 6 显示了前 600 个训练步骤。30k 后,结果如下:
图 GAN 在 30k 训练步骤后从图 6 中学习到的分布。
这是一个可爱的小曲线,但几乎不是高斯分布。GAN 在 30k 步后完全无法学习映射。作为背景,让我们考虑当给定 2D、3D、10D 和 100D 潜在空间以映射到上述分布时,具有相同架构和训练例程的 GAN 的表现如何:
图 30k 训练步骤后,具有 2D、3D、10D 和 100D 潜在空间的 GANs 的输出
2D 潜在空间 GAN 比上面的 1D GAN 好得多,但是仍然离目标分布很远,并且有几个明显的缺陷。3D 和 10D 潜在空间产生具有视觉上令人信服的结果的 GAN,而 100D GAN 产生似乎是具有正确方差但错误均值的高斯分布。但是,我们应该记住,在这个特殊的问题上,高维 GANs 是作弊的,因为许多均匀分布的平均值近似正态分布。
八个高斯人
图 9:八个高斯分布
八高斯分布(图 9)就像它听起来的那样:八个 2D 高斯分布围绕原点排列成一个圆,每个高斯分布的方差足够小,几乎不会重叠,并且协方差为零。虽然样本空间是 2D,但该分布的合理编码有三个维度:第一维是离散的,描述模式(编号为 1 到 8),另外两个分别描述该模式的 x 和 y 位移。
我用 latent_dim=1 对一个 GAN 进行了八步高斯分布 600 步的训练,结果如下:
图 10:一个潜在维度为 1 的 GAN 试图学习八高斯分布。灰点是从真实分布中抽取的样本,红点是生成的样本。每一帧都是一个训练步骤。
正如所料,GAN 努力学习有效的映射。30k 步后,这是学习到的分布:
图 11:GAN 在 30k 训练步骤后从图 10 中学习到的分布。
GAN 显然很难将 1D 潜在空间映射到这个 3D 分布:最右边的模式被忽略,模式之间产生了相当数量的样本,样本不是正态分布的。为了进行比较,让我们考虑 30k 步后的另外四个 gan,潜在维度分别为 2、3、10 和 100:
图 12:30k 训练步骤后,具有 2D、3D、10D 和 100D 潜在空间的 GANs 的输出
如果不实际测量真实分布和学习分布之间的 KL 差异,很难判断哪个是最好的(soon™️将在后续文章中推出!),但低维 GANs 似乎在模式间的负空间产生的样本更少。更有趣的是,2D GAN 没有显示模式崩溃,3D 和 10D GAN 仅显示轻微的模式崩溃,而 100D GAN 在两种模式下都无法产生样本。
螺旋形
图 13:螺旋分布。随着螺旋从圆向外延伸,密度分布减小,并且在臂的横向上密度是均匀的
图 13 所示的螺旋分布在某些方面比八高斯分布简单。GAN 只有一种模式(虽然拉长和扭曲),不会被迫离散化其连续输入。可以用两个维度有效地描述它:一个描述沿螺旋的位置,另一个描述螺旋内的横向位置。
我用 latent_dim=1 训练了一个 GAN 600 步,结果如下:
图 14:潜在维度为 1 的 GAN 试图拟合螺旋分布。灰点是从真实分布中抽取的样本,红点是生成的样本。每一帧都是一个训练步骤。
同样,GAN 努力学习有效的映射。30k 步后,这是学习到的分布:
图 15:GAN 在 30k 训练步骤后从图 14 中学习到的分布。
类似于八高斯分布的情况,GAN 在映射螺旋分布方面做得很差。省略了螺旋的两个区域,并且在负空间中生成了许多样本。我在的另一篇文章中详细讨论了这个低效的映射问题,所以我在这里不再赘述;相反,让我们考虑另外四个 gan,其任务是在 30k 步后学习该分布,同样具有 2、3、10 和 100 的潜在维度:
图 16:30k 训练步骤后,具有 2D、3D、10D 和 100D 潜在空间的 GANs 的输出
同样,在没有实际测量 KL 散度的情况下,很难判断哪个是最好的,但是负空间中覆盖范围、均匀性和采样数量的差异是值得考虑的。
关闭思路
人们很容易被 GAN 的热情所吸引,并把它们当作神奇的机器,用随机数作为燃料来弹出新的样本。了解工具的基本工作原理对于有效地使用它和在它出现故障时排除故障是至关重要的。对于 GANs,这意味着理解生成器正在学习从某个潜在空间到某个样本空间的映射,并理解这种学习是如何展开的。将 1D 分布映射到更高维度分布的极端情况清楚地说明了这项任务有多复杂。
本项目中使用的所有代码都可以在以下 GitHub repo 中获得:
甘斯和低维潜在空间:可视化甘斯如何学习时,饥饿的随机噪音。
github.com](https://github.com/ConorLazarou/medium/tree/master/12020/visualizing_gan_dimensions)
为什么我有一个数据科学博客?分享代码的 7 个好处
通过写作学习,获得反馈,为开源社区做贡献,建立职业关系,等等
帕特里克·福尔拍摄的照片
我的博客statsandr.com于 2019 年 12 月上线。虽然和其他人相比,9 个月的写作时间很短,但我已经可以说这是一次不可思议且非常丰富的冒险!
随着 45 篇文章的发表(在撰写本文时)以及从描述性统计、概率、推断统计到 R Markdown 和数据可视化的主题,我已经看到了通过技术博客分享我的代码的许多好处。
在这篇文章中,我强调了其中的 7 个(排名不分先后),希望它能给你们一些人以启发和激励。在本文的最后,我还提到了一些创建自己的博客所需的现代解决方案。
请注意,在这 9 个月里,我没有从我的博客谋生,这不是我的目标,因为我需要把它作为一个优先事项。 1 不过,我已经从读者那里得到了足够多的正面反馈,更重要的是,我已经学到了足够多的东西来继续写作。
(对于感兴趣的读者,请看一年后对该博客的评论——以及对未来计划的一些想法。在这篇评论中,我通过分析页面浏览量、会话、用户和与{googleAnayticsR}
包的互动来追踪它在 R 中的表现。)
#1 通过写作学习
我真的很喜欢学习许多不同领域的新东西。作为我在大学的助教职位的一部分,我通过向来自不同背景的学生教授统计学学到了很多东西(我现在仍在学习)。
在创办这个博客之前,我相信我理解了一个统计学概念,只要我能够把它教给我的学生。如果我不能用清晰易懂的方式解释它,这意味着我需要更彻底地研究它,因为我实际上并没有完全理解它。
这通常被称为费曼技术。这种学习方法是基于这样一个事实,为了完全掌握一个主题,你需要能够用简单的术语解释给别人听。
通过这篇博客,我实际上意识到,为了学习和完全理解新的东西,一个人必须:
- 能够清楚地传达它,并用简单的术语教授它,
- 但是也能够以精确简洁的方式写下来
因此,尽管这个博客最初是为了分享我最熟悉的统计学概念(希望它对一些人有用),但我现在也用它来通过写作来学习。我认为这种额外的学习方式实际上和教学一样有效,因为写作可以让我巩固我的理解。
显然,我主要是在学习统计学及其在 R 中的应用,因为它们是博客的主要话题。然而,我从来没有想到我还会学到这么多关于:
- 网络开发和搜索引擎优化/分析(这是当今越来越重要的技能)
- 项目管理(当你从零开始构建一个东西并希望开发它的时候)
- 写作(作为一个非英语母语的人,我仍然需要提高这项技能)
- 交流结果(任何数据科学家都会告诉你,没有适当交流的结果是无用的,写博客是一个很好的练习)
- 营销/公共关系/品牌管理(想想社交网络和如何处理读者的各种问题)
- 等等。
维护博客教会了我一些基本技能,这些技能通常是在全职工作中传授的。有了博客,你负责从内容到读者询问的一切,就像一个负责一个项目的员工,他必须与最终用户打交道和沟通。
不要误解我,除了例外,我不认为博客可以完全取代个人发展方面的工作,但它肯定有助于学习广泛的重要技能。除了工作之外,阅读书籍和完成数据科学在线课程也是获得技能的其他例子,但博客往往更加多样化和实用,使其更加有益(在我看来)。
我学习的另一种方式是通过对我写的关于的主题进行研究。
一个例子是我在 R 中关于离群点检测的帖子。作为任何描述性分析的一部分,我被用来检查潜在的异常值。因为我对这个话题很熟悉,所以我决定写一写。然而,我发现这篇文章不够完整,所以我做了进一步的研究。事实证明,事实上有几个我不知道的统计测试。我写了这些测试,现在每当我检查潜在的异常值时,我都包括这些新技术。
最后但同样重要的是,我经常收到读者的电子邮件,要求写一个他们选择的主题。有时,我从未听说过他们建议的主题,所以出于好奇,我做了一些研究。即使我还没有写出来,因为我对它还不够熟悉,至少我知道它的存在,我或多或少知道这是关于什么的。
如果学习的唯一好处没有说服你开始你的博客,看看我在下面的章节中经历的其他好处。
#2 获得反馈
从更有经验的用户那里获得反馈、建议和建设性的批评。注释对纠正我代码中的拼写错误和 bug 有很大的帮助,同时也有助于提高我的 R 技能。
你会惊奇地发现,尽管你花了无数的时间来检查你的代码,总有人会发现你漏掉的一个打字错误。例如,来自世界各地人们的宝贵反馈无疑提高了我日常使用的闪亮应用程序的质量和完整性。
因此,博客可以被看作是一种强大的同行评审方法,可以让你了解一个概念、代码或 R 实践。在做一个玩具例子时犯错误并改正它们也比在工作场所的真实项目中犯错误要好。
此外,一些人将他们的博客文章汇总成文章或书籍,因此博客可以被视为一种方式:
- 朝着长期出版目标取得渐进进展,以及
- 在这个长期目标的每一步接受反馈。
#3 提醒未来自己的个人笔记
有多少次你在电脑的文件夹中搜索一段代码,最终在谷歌上寻找解决方案,因为你不记得你为哪个项目写了这段代码?它每天都发生在我身上。
有了按主题组织的博客帖子,现在我花的时间少多了(挫败感也少了!)去找我几个月前写的代码片段。这也允许我保持我的代码和 R 实践是最新的,因为我只需要在一个地方编辑它们。
这方面的一个例子是我的一篇关于 R 中的图形与 [{ggplot2}](https://www.statsandr.com/blog/graphics-in-r-with-ggplot2/)
的文章。与 R base 中默认可用的图相比,我更喜欢带有{ggplot2}
包的图,但是我不能记住所有的层和它们的参数。现在每当我使用这个包纠结于一个情节时,我就简单地重温相应的文章来寻找解决方案。我的许多文章也是如此,每次我忘记代码或它如何工作的细微差别。
你可以将你的代码存储在不同的文件中(例如,R Markdown 文档或 R 脚本,就像我过去经常做的那样),但是博客文章有这样的优势:
- 代码段突出显示,并且
- 通过向全世界公开它,你不得不保持它的整洁、完整和最新。
#4 为开源社区做贡献
我学到了很多,而且我每天都在学习 R,这要感谢那些相信开源和免费材料的开发者和科学家们免费提供的资源。
在某种意义上,通过博客免费提供我所有的代码和文章是我的方式:
- “回报”帮助我学习的人,感谢我现在站在这里的人,以及
- 提前付钱,我将来会从谁那里学到更多。
如果你也相信分享你的知识或专长,拥有一个博客绝对是为社区做贡献的一个好方法。你的贡献不一定要巨大,只要增加了什么,就会有人用。请记住,每个人都是从初学者开始的,即使是世界专家也是其他领域的初学者。而且你会看到,随着你不断地与他人分享你的知识,有些人会欣赏它,因为他们可以从中学习。
就我而言,如果我的小小贡献对一些人更好地理解统计学或学习 R 有用,我的目标就达到了。其他对某个话题充满热情的人可能想把这个话题告诉人们,希望更多的人反过来对这个话题做出贡献。你完全可以自由选择你想为社区做的贡献。
#5 保持谦逊,保持好奇
自从发布我的博客以来,我发现了许多其他高质量的数据科学博客。我越是看到不同主题的新事物,越是看到人们做出不可思议的事情,我就越意识到我其实知道的不多。这让我想起了保持谦逊的。
除此之外,通过与来自不同背景和世界各地的科学家分享我的代码,它允许我考虑其他观点并练习开放思维,这反过来又帮助我保持好奇。
在我看来,谦虚和好奇是保持学习的良好开端。我不想失去好奇心,否则我可能会失去学习的欲望。
供您参考, R-bloggers 和 R Weekly 是两家专注于 R 的优秀博客聚合商,而forward Data Science在 Medium 上发布了大量高质量的博客文章,涵盖了许多与数据科学相关的主题。如果你有兴趣发现更多的技术博客,请订阅这些博客。
#6 学会不追求完美,分清主次
无论你在博客上花了多少时间,请记住,不可能事事都完美。作为一个完美主义者,我不能否认我希望生活中的每件事都能完美运行。
在写我的第一篇文章时,我的完美主义倾向有时如此普遍,以至于这是一个真正的弱点:我可以花几分钟思考两个词之间是否需要逗号(这当然不会有任何影响)。然而,在某些时候,改进某样东西花费了太多的时间和精力,以至于它的附加值不如你花时间生产新东西所能创造的附加值大。
随着你每天不断学习,情况会变得更糟。因此,一篇过去看似完美的文章今天可能不再被认为是完美的,所以你想改变或增加你以前所有文章的一个小细节。我不是说你不应该编辑一篇博客文章,它甚至是值得推荐的!尽管如此,我还是建议你,只有当它真的增加了一个重要的价值时,才编辑它。否则,我认为最好是把时间和精力花在创造别的东西上。
有了博客,你将逐渐学会把你的努力和时间(这是有限的资源,随着时间的推移似乎越来越少)用在最有成效的地方。换句话说,你将学会优先考虑。
#7 建立联系和职业关系
通过分享你在某个特定领域的实践,你有时会遇到一些人,他们实际上与你从事相同的课题,或者有着相似的研究兴趣。除其他外,以下情况就是如此:
- 我在收集的关于冠状病毒的顶级 R 资源。它开始只有 5 个资源,然后当我逐渐添加越来越多的资源时,里斯·莫里森(Rees Morrison)联系了我,他正在收集相同主题的博客帖子,我将他的博客帖子添加到了原始收集中。
- 展示由雷南·泽维尔·科尔特斯开发的 R 包,该包可用于在新冠肺炎检疫隔离期间下载免费的斯普林格图书。
- 我写了一篇关于分析新冠肺炎在比利时的传播的文章,这篇文章与另外三名研究人员合作,引发了一场研讨会,并制作了代表比利时新冠肺炎医院住院人数的图表。
这些合作扩展了我的专业网络,让我能够与来自不同大学和不同国家的新研究人员建立联系。如果不首先分享我对某个特定主题的分析,我永远不会认识这些人。
我确信一个博客可以带来无数的合作,让整个旅程更加有趣和丰富。谁知道呢,你职业生涯的下一个篇章可能会由你过去共事过的一个人来塑造。
即使你的博客没有带来任何合作,它仍然是一个自我推销的伟大工具**。做一些研究,练习,写一个主题有助于成为(并被视为)该领域的专家。此外,在申请工作或项目时,你的博客将成为你的作品集。招聘人员肯定会希望看到你的能力。**
无论你的博客是一些卓有成效的合作的起源还是你工作的展示,它都是你申请理想工作时的宝贵财富。
如何开始自己的博客?
自从开始写博客以来,我的学习曲线加速了,对统计学和 R 有了更深的理解,我的沟通技巧也有了很大的提高。我从未意识到维护博客作为一种学习技巧有多么有用。这带来了额外的好处,能够为自己和他人存储信息和代码,这对于获得反馈和与其他研究人员联系是必不可少的。
如果这 7 个好处已经说服了你,那么好消息是,现在创建自己的博客比以往任何时候都更便宜、更容易。
对于非技术博客,我推荐 Medium 或 WordPress,因为它易于设置,并且不需要代码。对于技术博客**,有大量的静态站点生成器可供选择,但是我强烈推荐使用 Hugo 和[{blogdown}](https://bookdown.org/yihui/blogdown/)
包(我是在看完这本书后创建我的博客的)。然后你可以把它放在 GitHub 上,并用 Netlify 发布。 3**
感谢阅读。我希望这篇文章回答了诸如“你为什么有一个博客?”或者“它的目的是什么?”,谁知道呢,给了你开自己博客的动力。如果你仍然犹豫不决,我真心建议你去做,记住最难的部分是开始。如果你对一个话题有耐心和热情,你只需要开始,其余的就会随之而来。
和往常一样,如果您有与本文主题相关的问题或建议,请将其添加为评论,以便其他读者可以从讨论中受益。
- 我有意避免在这篇文章中写经济激励,因为我认为这不是开博客的好动机。首先,许多人不会用他们的博客赚钱,也永远不会。第二,确实也有很多人通过他们的博客赚钱,但对他们中的大多数人来说,这些钱不值得花时间。从我的个人经验来看,博客有时非常耗时,我肯定会在别的地方更容易赚钱。此外,正如你所看到的,我选择不放广告或横幅,因为我认为这会恶化阅读体验(当我在其他博客上看到广告和横幅时,我觉得它们非常讨厌)。这当然是我的观点,这仍然是一个个人选择的问题,也是一个权衡的问题:糟糕的阅读体验和更多的钱,还是更好的阅读体验和更少的钱。我也倾向于让读者选择支持我的项目,而不是给他们强加广告或横幅。 ↩︎
- 甚至以英语为母语的人也可以通过博客提高写作技巧。 ↩︎
- 注意,我不是程序员,也不是计算机科学家,所以我没有创建网站的广泛知识。肯定有更多的选项可用,但我发现这些选项是给定我的计算机技能和我的目标的最佳选择。 ↩︎
相关文章
- R 闪亮中的抵押贷款计算器
- 如何发布闪亮的应用程序:以 shinyapps.io 为例
- 如何在 GitHub 上上传 R 代码:MacOS 上的 R 脚本示例
- 如何在 R 中一次对多个变量进行 t 检验或方差分析,并以更好的方式传达结果
- 如何在 R 中创建简历的时间线?
原载于 2020 年 9 月 2 日【https://statsandr.com】。**