为什么 NumPy 如此重要
我们不能没有它
皮隆·纪尧姆在 Unsplash 上拍摄的照片
笨重的,笨重的。这个图书馆已经成为基础,很难想象一个没有它的世界,或者在它诞生之前。NumPy 从 2005 年就出现了,如果你曾经在 Python 中处理过数据,你一定会以某种方式使用它。
该图书馆最近得到了应有的认可。一组研究人员在著名的科学刊物《自然》上发表了一篇论文,他们中的许多人都积极参与了 NumPy 的维护和开发。在这篇论文中,作者回顾了 NumPy 的历史,它的主要特点,它在当今科学界的重要性,并讨论了它的未来。
是什么让 NumPy 如此优秀?
NumPy 有一个语法,它同时是紧凑的、强大的和富于表现力的。它允许用户管理向量、矩阵和更高维数组中的数据。在这些数据结构中,它允许用户:
- 访问,
- 操纵,
- 计算
你还记得这张照片吗?
研究员凯蒂·布曼在 PBS 上的照片
首次获得黑洞图像的努力之所以成为可能,不仅是因为一组研究人员的辛勤工作和奉献,也是因为 Numpy 的支持。
NumPy 项目有正式的治理结构。团队在早期采用了分布式修订控制和代码审查来改进协作。这反过来意味着清晰的路线图和清晰的过程来讨论大的变化。这些可能看起来不多,但它们有助于激发用户的信心和信任。这是一个保证,每一个变化都是经过深思熟虑的,该库将随着时间的推移得到维护。
该项目由 NumFOCUS 赞助,这是一个促进研究开源思维的非营利组织。近年来,它还获得了多个基金会的资助。这反过来允许项目保持对改进和新特性开发的关注。
在 90 年代中期,科学界出现了两个主要的软件包:Numarray 和 Numeric。
- Numarray 是一个数组处理包,旨在高效处理大型多维数组。
- Numeric 对于小数组处理很有效,并且有丰富的 C API。
但随着时间的推移,他们越来越疏远。这是 NumPy 在 2005 年作为两个世界中最好的一个出现的时候。它最初是由学生、教师和研究人员开发的,旨在为 Python 带来一个先进的开源数组库,可以免费使用,并且不受许可证服务器和软件保护的影响。它广受欢迎,拥有大量的追随者和热情的志愿者。剩下的就是历史了。
快进到 15 年后,NumPy 已经变得必不可少。今天,它支持大多数进行科学或数值计算的 Python 库,包括 SciPy、Matplotlib、pandas、scikit-learn 和 scikit-image。论文的作者创造了以下视觉效果,一张图胜过千言万语:
视觉由 Harris,C.R .,Millman,K.J .,van der Walt,S.J. 等对 Nature " 数组编程用 NumPy
NumPy 基金会
我们先来看看数据结构的概念。数据结构被称为数组。NumPy 是一个使数组处理变得容易的库。但是什么是数组呢?
在计算机科学中,数组是一种数据结构。该数据结构包含相同数据类型的元素。数据类型可以是数字(整数、浮点、…)、字符串(文本、引号" "之间存储的任何内容)、时间戳(日期)或指向 Python 对象的指针。数组很有用,因为它们有助于组织数据。使用这种结构,可以很容易地对元素进行排序或搜索。
形状
每个数组都有一个形状。该形状由( n , m )定义,其中 n 为行数, m 为列数。
*# This array is of shape (2,2)
[1,2
3,4]# This array is of shape (4,2)
[1,2
3,4
5,6
7,8]*
如果上面的结构看起来像矩阵,你就对了。在数学领域,这些元素中的任何一个都是一个矩阵。在使用 NumPy 时,术语矩阵和数组可以互换,可能会导致混淆。
一维数组也称为向量*😗
*# Horizontal, a row vector
[1,2,3]# Vertical, a column vector
[1,
2,
3]*
最后,如果它只包含一个元素,它就被称为标量:**
*# Scalar
[7]*
大步
大步帮助我们解读计算机内存。元素以多维数组的形式线性存储。步幅描述了在内存中向前移动所需的字节数。例如移动到下一行或下一列。让我们以 shape (3,3)的数组为例,其中每个元素占用 8 个字节的内存。
*# Array of shape (3,3)[1,2,3,
4,5,6
7,8,9]*
- 移动到另一列:移动 8 个字节就足够了,这是数组中一个元素占用的内存量。
- 移动到另一行:我们从第一行第一列开始,从 1 开始。要到达第二行,我们需要在内存中跳转三次。我们跳到 2,然后 3,最后到 4。这表示 24 个字节(每个元素 3 次跳转 8 个字节)。*
为了理解这个概念,数组也可以被视为一维数组。注意:多余的空格是为了阅读的目的,有助于可视化不同行的位置。
*[1,2,3, 4,5,6 7,8,9]# Moving from 5 to 7, would require 2 jumps in memory, so 16 bytes.
[1,2,3, 4,**5**,6 **7**,8,9]*
使用 NumPy 的操作
可以在 NumPy 阵列上执行多种操作:
- 索引
*1\. Array x, of shape (3,3)x = [1,2,3,
4,5,6
7,8,9]2\. Indexing the array to return '5'#IN
x[1,2]#OUT
6*
索引 NumPy 数组从 0 开始。对于 x[1,2],1 代表行,2 代表列。当读取 x[1,2]时,我们需要记住我们从 0 开始计数,并在心里为两个[1,2]增加 1。因此,我们到达第 2 行和第 3 列。这个索引上的元素是 6。
- 切片
*1\. Using the original x-array from above, we perform a slice#IN
x[:,1:]#OUT
[[2 3]
[5 6]
[8 9]]*
- 复印
注意,切片创建的是视图,而不是副本。正如 NumPy 的官方文档所解释的:
NumPy 切片创建了一个视图,而不是像内置 Python 序列(如字符串、元组和列表)那样的副本。从一个大数组中提取一小部分时必须小心,因为提取的小部分包含对大的原始数组的引用,直到从该数组派生的所有数组都被垃圾回收,该数组的内存才会被释放。在这种情况下,建议使用明确的
*copy()*
。
*1\. Using the original x-array from above, we perform a slice then copy it#IN
y = x[:, 1:].copy()#OUT
[[2 3]
[5 6]
[8 9]]*
- 矢量化
*1\. Using the original x-array, we perform an additionx = [1,2,3,
4,5,6
7,8,9]y = [1,1,1,
1,1,1,
1,1,1]#IN
z = x + y#OUT
z = [2,3,4,
5,6,7,
8,9,10]*
以相同形状的两个阵列为例,结果是直观的。美妙之处在于,它发生在一条线上。
- 广播
处理不同形状的数组时会出现这种情况。较小的阵列将被“广播”到较大的阵列。结果是一个与两个初始数组形状不同的数组,如下面的乘法示例所示:
*1\. Using two 1D-arrays, we perform a multiplications = [0,
1,
2]t = [1,2]#IN
u = s*t#OUT
[0,0
1,2
2,4]*
- 还原
*1\. Array x, of shape (3,3)x = [1,2,3,
4,5,6
7,8,9]2\. We decide to reduce to one column:#IN
y = np.sum(x, axis=1)#OUT
array([6, 15, 24])3\. We can also reduce our new y array to one row:#IN
z = np.sum(y, axis=0)#OUT
45*
我们在数组上使用了 np.sum() 来减少它们。参数轴定义了操作将在哪个轴上发生。0 表示行,1 表示列。
当前的不足之处
由于其内存中的数据模型,NumPy 无法直接利用加速器硬件,如图形处理单元(GPU)、张量处理单元(TPU)和现场可编程门阵列(FPGAs)。
这导致了新的数组实现框架的出现,如 PyTorch 和 Tensorflow。他们可以在 CPU 和 GPU 上进行分布式训练。
NumPy 的未来
有了正式的治理、路线图和对大型变更的彻底讨论,NumPy 的运营方面看起来很光明。该团队已经实现了软件开发的最佳实践,例如分布式修订控制和代码审查,以改进协作。
资金总是棘手的部分。虽然它从不同的基金会获得资金,但它也造成了对资助者的依赖。希望从早期开始就有一个坚实的热心人社区,那时适当的资助还不是一件事。正如论文作者所报告的,发展仍然主要依赖于研究生和研究人员在空闲时间的贡献。
作者讨论了 NumPy 在未来十年将面临的几个挑战:
1。新的设备 将被开发,现有的专用硬件将进化以满足摩尔定律的收益递减。
2。随着薄幕显微镜和大型综合巡天望远镜(LSST)等设备和仪器的采用,科学数据收集的规模将继续扩大。
3。新一代语言 、解释器和编译器,如 Rust、Julia 和 LLVM,将创造新的概念和数据结构,并决定其生存能力。
最后但同样重要的是,NumPy 将需要新一代的志愿者和贡献者来帮助它前进。也许是你?
你能帮什么忙?
有可能成为 NumPy 的贡献者。作为一名编码员并不是一项要求,因为 NumPy 项目已经发展并具有多面性。该团队正在寻求这些方面的帮助:
- 代码维护和开发
- 社区协调
- DevOps
- 开发教育内容和叙述性文档
- 筹款
- 营销
- 项目管理
- 翻译内容
- 网站设计和开发
- 撰写技术文档
更多信息可以在 这里找到
与 NumPy 更进一步
如果你想深入了解,我发现这些资源很有趣:
- 广播
注请参阅本文中有关广播概念的插图。广播这个术语描述了 numpy 如何对待…
numpy.org](https://numpy.org/doc/stable/user/basics.broadcasting.html)
- 带代码片段的 NumPy 高级讲座
NumPy 是 Python 科学工具栈的基础。其目的是在许多项目上实现高效的操作…
scipy-lectures.org](https://scipy-lectures.org/advanced/advanced_numpy/index.html)
最后的话
NumPy 在科学和数据科学社区中拥有如此重要的地位,我们应该感谢多年来的辛勤工作。该项目面临着挑战,但也有一个坚实的社区,并利用最佳实践来保持组织和交付。NumPy 万岁!
编码快乐!
感谢阅读!喜欢这个故事吗? 加入媒介 可完整访问我的所有故事。
参考
[1] Harris,C.R .,Millman,K.J .,van der Walt,S.J. 等用 NumPy 进行数组编程。性质 **585,**357–362(2020)。https://doi.org/10.1038/s41586-020-2649-2
[2] NumPy 团队(2020 年 9 月检查),案例研究:第一张黑洞图像,https://numpy.org/case-studies/blackhole-image/
[3] NumPy 团队(2020 年 9 月入住),索引,https://numpy.org/doc/stable/reference/arrays.indexing.html*
为什么过期的任务仍然需要很长时间才能完成?
这个问题我们问过自己很多次。下面是答案。
让我困惑了一段时间的典型情况如下:
-我们估计一项任务需要 3 天
-鲍勃已经为这项任务工作了 3 天
-在每日的 scrum 上,他说他只需要再处理几件事情,任务就会完成
-第二天任务没有完成
有时这样的任务即使工作了 5 天也没有完成。由于它们是典型的“更多的研究,更少的开发”任务,许多人建议接受这种不确定性,因为这是研究固有的。虽然我同意一点,但我不想这么容易放弃可预测性。一年前,Erik Bernhardsson 分享了一篇关于时间估计的精彩博文,他总结道,开发任务比预期花费更长时间的原因是膨胀因子(实际时间/预期时间)遵循对数正态分布,我们对中位数的估计是准确的,但对平均任务完成时间的估计不是那么准确。我真的很喜欢他的帖子,去年重读了几次,因为它最终帮助我理解了为什么玩 scrum poker 如此困难。我把他的模型作为我在这里工作的基础,看看我们是否需要微调我们对任务完成的估计。
估计比预期的完成时间短
在上面的例子中,Bob 在任务进行了 3 天时,直觉地认为他真的要完成任务了。毕竟,该任务估计需要 3 天时间。然而,从统计学上来说,我们对 3 天的估计是对基础分布中值的估计。分布的中间值并没有说太多关于值的比例,它只是简单明了地说,50%的时间任务会更快地完成,50%的时间会超过 3 天。中位数的一个问题是,它对任务中的不确定性不敏感。然而,当您想要计算一个特性的开发时间时,您确实想要考虑不确定性。因此,最好计算任务完成时间的期望值,因为我们已经有了几乎所有需要的信息。让我们看看这个期望值是什么样的。
对数正态分布的期望值为:
为了计算这个,我们需要知道两个参数μ和σ。幸运的是,我们有一个中位数的无偏估计,因为这是:
由此,我们可以简单地通过取中位数的对数来计算μ。对于σ来说,情况有点棘手,但并非毫无希望。埃里克的想法是利用冒险的直觉。此外,我的建议是使用 scrum poker 估计值的分布作为σ的未校准估计值。可以肯定的是,这是一个未经校准的估计,因为——尽管它应该与某种不确定性相关联——它仍然没有反映任何特定的比例因子。很可能,这也取决于团队和环境,所以最好根据从 sprints 中收集的实际数据来估计。基本上,您需要个人的估计和实际时间来拟合一个简单的模型,并为您的团队获得σ。一个补充:很可能,一个任务的不确定性可以用一个模型更好地估计,这个模型也考虑了谁是任务的接受者(没有冒犯任何人的意思;).有些人更擅长精简,而有些人则更注重细节。
“做”栏的百慕大三角
所以让我们回到每天的争论中,Bob 说他即将完成我们估计需要 3 天工作的任务(只是作为一个备注,Bob 是一个虚构的人)。问题是我们是否应该接受平均完成时间比我们的估计(中值)要长,或者这个故事比我们看到的要复杂。
假设我们做 scrum poker 的时候投票如下:我:2;约翰:2,鲍勃:3,莎拉:3,琳达:5,玛丽:5。基于此,我们有一个 3 天的估计。现在三天过去了,所以问题是我们是否还应该坚持同样的估计?事实上,结果证明约翰和我在评估任务的难度时都错了,所以人们已经可以直观地看到剩余投票的中位数(扣除我们糟糕的投票)可以被认为更高(现在是 4 天!).更一般地说,当我们在任务开始前进行估计时,我们考虑了各种结果,其中包括任务可能在几分钟内完成的情况(也许如果 Bob 意识到相同的特性已经存在于某个地方,但名称不同),以及非常困难的实现过程的荒谬情况(也许如果该特性比我们想象的更复杂)。从统计学上讲,我们通过对整个分布进行积分来计算期望值。现在,对于任何时间点 t > 0,显然我们不能在积分中考虑 0 和 t 之间的时间,而是必须计算如下期望值:
其中 f(x) 是给定我们考虑从 t 到 ∞ 点的条件概率 x 。因此,我们不考虑我们已经知道没有实现的情况,而只考虑任务至少需要花费 t 时间才能完成的情况。
因此,尽管在分布的峰值之外,紧接在 t 之后的点比更远的点具有相对更高的概率,但是更远的点要多得多,并且曲率也随着远离峰值而变化,因此期望值实际上在膨胀。让我们通过一个例子来说明这一点。让我们用三个例子来说明,(1)任务处于“todo”阶段,我们还没有开始它,(2)任务已经工作了最初估计的时间(展开因子为 1),以及(3)任务已经工作了两倍于最初估计的时间(展开因子为 2)。
三个例子说明预期完成时间如何依赖于已经花费在任务上的时间。在第一个例子中,我们在开始任务之前。完成时间的期望值是最初估计的 1.65 倍。第二,我们已经在任务上花费了预计的时间。根据零分布的彩色区域,预计完成时间是最初估计的 2.77 倍。第三,任务逾期,完成时间进一步增长。使用σ=1 生成零分布,使用当前因子而不是实际时间进行总体估计。
现在你看到一个矛盾的事情:剩余的时间,由 E _ t-t 操作化,随着我们的进行不是在减少,而是在增加。当然,这并不意味着我们不能完成任务;通过将消耗的时间考虑到等式中,有助于对剩余的工作做出更好的估计。我们可以在多种场景中使用这些知识。首先,它可以帮助团队在何时削减或重组任务上做出更好的决策,并在总体上理解他们什么时候可以完成(即,根据经验,当爆发系数已经是 2 时,拒绝在下一个小时内完成的想法)。
第二,这种知识对于识别不可能及时完成的任务也很重要。我们已经看到了几个任务,乍一看似乎很容易处理,但后来却成了项目的怪物。尽早发现这些问题并重新思考可交付成果、处理期望和/或提出替代解决方案至关重要。
此外,本练习中的假设是,在任务执行期间,不存在“检查的反馈效应”。实际上,团队在日常的 scrum 中的反馈或者涉众在评审中的反馈可能会改变方法(和分布),从而也改变了预期的完成时间。事实上,如果你看一下 SiP 数据集(Erik 也看了)中放大因子的分布,右尾并不像人们从标准对数正态分布中预期的那样重,我的假设是,正是那些反馈、控制和重组机制——当放大因子变大时,它们开始起作用——对此负责。所以,我的主要建议是,团队要密切关注每日的争论,以避免故事完成时间的浪费。
代码可在 GitHub 上获得
备注:
- 德里克·m·琼斯根据他对 SiP 数据集的分析为写了一篇有趣的论文。他期待着免费分析你的数据,条件是他可以公开匿名形式的数据。这是为贵公司获取这些参数的绝佳机会。
- 在这篇文章中,我使用了对数正态分布,寻找最佳拟合分布,尽管这是一个活跃的研究领域。
- 在 SiP 数据集中,估计是由单个开发人员进行的,而不是联合工作,而且大多数估计在 2 天以内。
感谢 Adam Csapo 、于尔根哈恩和德里克 m 琼斯对初稿的评论。
为什么是 jK8v!ge4D 不是一个好的密码
讨厌的密码不可避免地会出现在那里。凯利·西克玛的照片。
密码验证有一个基本问题
看看这两个密码:
- jK8v!ge4D
- 绿色电话
你认为电脑破解哪个密码需要的时间最长?还有你觉得哪个密码最容易记住?这两个问题的答案都是密码 2。然而,人们被鼓励创造看起来像数字 1 的密码。人们被教导写一些人类很难记住的密码,没有真正的原因。
让我们谈谈那个。
互联网标准里有很多稀奇古怪的东西。验证就是其中之一。作为一名前端开发人员,我需要验证用户在所谓的输入字段中输入的内容。这些是您在输入用户名、电子邮件、家庭地址、邮政编码等时使用的字段。前端开发人员有责任确保用户不会在这些字段中输入任何恶意或格式不正确的内容。
例如,请求邮政编码的字段通常只允许空格和数字,如果我们知道用户居住在哪个国家,我们也可以将其限制在一定数量的字符内。电话号码通常可以包括数字、加号(仅在开头)和破折号,如果我们觉得自由,可能还会有一些括号。电子邮件地址很难验证,但是一种常见的做法是它们必须包含一个 at 符号(@),后跟一个句点,即使完全有效的电子邮件地址实际上可能没有这些属性。一些网站试图通过强迫人们将他们的名字保持在一定长度内或强迫人们只使用某些字符来验证名字,尽管这种验证从未真正起作用,因为人们的名字可以是任何东西。
实现验证有几个原因。一个是安全问题。验证可以防止用户在字段中输入可能改变数据库或执行其他恶意操作的可怕代码。另一种是强制某种数据类型。如果一个字段应该只由数字组成,数据库工程师可能已经设置了一个只允许数字的数据库列,这意味着不是数字的符号会导致错误发生。
但是最主要的原因,实际上,是帮助用户避免犯错误。
强制您的密码
出于某种原因,前端开发人员被期望照看用户输入传统上认为是好的密码。它应该至少有八个字符长,包括大写和小写字符,一个数字,如果我们感到非常讨厌,它甚至应该包括一个特殊的字符,如感叹号。
这里有一个被普遍认为是可靠密码的例子:jK8v!ge4D。考虑到您经常被要求输入这样的密码,假设我们认为这是一个好的密码是公平的。
不是的。太蠢了。这是个错误的密码。
首先,怎么会有人记得呢?最终发生的情况是,用户记不住密码,所以他们把密码写在某个地方。比如在便利贴上。然后他们最终被“黑”了。
其次,用户最终会为不同的服务使用相同的密码,因为记录一大堆复杂的密码是令人讨厌的。当你为一个体面的网站创建一个帐户时,一些神奇的代码在幕后将你的密码转换成一个哈希(通常被错误地称为加密)。您的密码在数据库中最终看起来像这样:k 5 ka 2 p 8 bfusmovt 1 tzoyyuarekkkbccnqodkzyijl 9 RAE 8 ymnpgh 2 xzzf 0 ndruhgrclwg 78 xs 1 w5 jiypedfx。即使数据库被黑了,黑客也不能对这些信息做任何事情。如果密码足够普通,算法足够简单,那么有可能找出原始密码,尽管有一个经过适当哈希处理的相当不错的密码,它通常是相当安全的。
问题是,并非所有的服务都对用户的密码进行哈希运算。如果您对许多服务使用相同的密码,您可能最终会使用一个编程很差的服务,该服务实际上将您的密码以纯文本的形式保存在他们的数据库中。如果他们最终被攻破,黑客会突然得到你所有账户的密码,而你使用的是同一个密码。这很可怕,而且发生的频率比人们想象的要高得多。
这就是为什么你必须为不同的网站使用不同的密码。然而,今天的用户在成吨成吨的网站上拥有账户。他们怎么能记住所有的密码呢?高级用户可能会使用密码工具,但你不能指望普通用户这样做。
有更好的方法。
破解需要多长时间?
看看这一串字符:gtypohgt。它是八个随机字符,都是小写的。一台现代计算机只需几分钟就能强行破解它。用几个数字替换一些字符,你会看到一个需要一个小时才能破解的密码。让几个字符大写,密码要几天才能破解(g9YPo3gT)。扔一个特殊的标志在那里,它可能需要长达一个月(g9Y!o3gT)。
g9Y!o3gT 在技术上是一个体面的密码。没有人能猜出它,它不在任何常用密码的短名单上,计算机将需要相当长的时间来破解它。问题是这个密码对一个人来说很难记住——没有真正的原因。
现在来看看这个美景:带礼帽的绿色大象(greenelephantswithtophats)。那是 24 个字符,全部小写。没有数字,没有随机字符,没有诡计。然而,这个密码将需要计算机几千年才能破解。你看,每增加一个字符,电脑破解的时间就会大大增加。greenelephantswithtophats 不在任何常用密码的短名单上,也没有人能猜出它。
这是个不错的密码
做一个会讲故事的密码。需要脸书密码吗?afaceforabookbutapizzaforahorse(一本书的脸,一匹马的披萨)怎么样?想象一下。我们的空间记忆是我们最强的记忆。突然,你有了一个非常强大的密码,这个密码很容易记住,而且是某个网站独有的。密码一定是连非常了解你的人都猜不到的东西。你不经常谈论海龟,是吗?你见过紫色的乌龟吗?没有吗?想象一下。你现在有了。在你的密码里撒谎是没问题的:ioncesawapurpleturtleiswear(我曾经看到一只紫色的乌龟我发誓)。一台现代计算机要花几百万年才能破解,甚至你姐姐也猜不出来。
与 littlerufus 一起走在 grand pasroad 的路上需要数百万年的时间才能使用蛮力。人类也不可能猜得到——即使有人知道你的宠物叫鲁弗斯,他们也永远猜不到这句话会是你的密码。照片由杰米街拍摄。
这些密码很容易想象。不会飞的车不会飞。apple smaybegreatbutpearsarelikeheaven。山羊和鞋子在雨天快乐地训练。没有人会猜到这些。
然而,一些网站也不允许这些密码。他们会抱怨你没有加一个数字或者大写字母或者太长,或者其他一些无意义的非技术原因。
所以你可以欺骗系统一点点。加 A1!到任何上述密码的末尾,并且它们将被任何不调用它们太长时间的系统所接受。现在,您有了一个大写字符、一个数字和一个特殊符号。即使这三个在你所有的密码上都是一样的,密码的其余部分也会弥补它。ioncesawapurpleturtleiswear 和 ioncesawapurpleturtleiswearA1!都是计算机无法破解的,这意味着你必须在最后输入这些字符,这只会带来不便。
开发商的意图是良性的。人们输入错误的密码。网站管理者不希望出现任何丑闻,所以他们试图强迫用户输入像样的密码,不管最终会有多麻烦。
下次需要创建密码时,请记住这一技巧。做一个电脑很难破解而你又容易记住的——而不是反过来。
哦,但即使你没有,也要保证远离任何 123456,password123,qwerty 的变种。那些是实际上是糟糕的密码。
嗯,我估计这就是我们逼你写这种 jK8v 的原因吧!ge4D。
完整的一圈。
来自《走向数据科学》编辑的提示: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语 。
为什么政治和机器学习不太匹配
罗亚·安·米勒在 Unsplash 上的照片
随着部署机器学习(ML)带来的机会越来越多,人们很容易忘记负面影响和风险。ML 策略亏损、错过目标或让客户失望的主要原因之一是“坏数据”。坏数据可能以多种形式出现,如果处理和管理不当,可能会导致错误的见解。政治提供了许多误用数据的例子,并将被用来帮助说明这个概念。
在开始之前,定义一些数据科学中常用的术语是很有用的。一个群体被定义为某个群体的每个成员或每个数据点。如果我们希望了解加拿大人在即将到来的选举中的投票意向,我们会说所有加拿大人都包括在人口中。另一方面,样本是从总体中抽取的少量数据点。想象一个样本,3000 名加拿大公民被联系进行民意调查,并询问他们喜欢的候选人。
训练 ML 模型时的第一个常见问题就是没有足够的数据。当样本量很小时,可能会偶然引入偏差和误差。数据可能包含对结果有很大影响的异常值,因为它们对样本的其余部分相对重要。想象一下浏览 twitter 并试图辨别用户的政治观点。一个持有激进观点的用户会打乱你的评估,让你认为这些观点代表了大部分人。
虽然看起来很直观,小数据集可能是错误的,但大数据集也可能欺骗经理和他们的机器学习算法。想想有多少民意调查是在选举期间产生和公布的。似乎每天都有一个新的民意调查宣称要了解当时的选民情绪,结果却发现他们与真实结果相差甚远。
一个著名的例子来自 1936 年的美国大选。在选举前夕,一本名为《文学文摘》的杂志从读者那里收集了 240 万份答案,并预测挑战者阿尔夫·兰登将会使富兰克林·罗斯福总统下台。罗斯福最终获得了自 1820 年以来最高的普选票数。发生了什么事?
管理者需要考虑数据的来源以及在收集过程中可能引入的偏差。《文学文摘》的读者是上层阶级,他们更有可能反对罗斯福推出的政策。还有,倾向于回答民调的人可能和不回答民调的人有不同的看法。这些差异没有在数据中显示出来,并导致不代表总体的见解。
在训练模型之前,管理人员需要确保他们考虑了数据收集过程,确定了潜在的偏差,并确定数据集是否真正代表了他们希望获得洞察力的总体人群。请记住,数据收集和分析流程是数据科学家的工作。管理者的角色不是取代这种专业知识。相反,经理必须询问有关数据收集过程的关键问题,并帮助识别潜在的偏见来源。通过这种理解,公司可以避免部署包含有害偏见的模型,这些偏见会影响他们希望服务的客户。这种批判性思维还将有助于揭示组织中存在的人类偏见,并可能导致关于如何创建机器学习以造福所有人的建设性对话。
为什么概率是走向数据科学的垫脚石
理解概率及其在现实生活中的应用。
照片由 Alexas_Photos 在 Pixabay 上拍摄
F 或者任何第一次踏入数据科学,概率是一个必须知道的概念&一个至关重要的先决条件。数据科学的核心需要统计学的基础知识,从掌握概率**开始。**它是关于解释你获得的结果,并试图用一个模型来解释现实世界的数据。概率知识有助于你更好地完成这些解释。
概率是对不确定性的度量,因为它量化了事件发生的可能性。它给你一个平均 t 的可能性,基于模式的知情决策**。数据科学在很大程度上高度依赖于概率及其应用。**
GIF 由 AsmodeeGames 在 GIPHY 上生成
几个现实生活中应用的概率是:
- 天气预报:预测海浪
- 数据分析:检测数据中的模式
- 金融/股票市场:开发定价模型
- 运动攻略:在球员身上寻找价值。
让我们来看几个例子,看看概率在游戏中是如何运用的
使用概率的概念,可以决定靠近篮筐是投三分球还是两分球。
有史以来最伟大的例子之一就是体育管理是如何通过将统计学&概率应用于棒球比赛并由团队**“奥克兰运动家”创造历史而被彻底改造**的。他们使用了一种叫做打破偏见的方法,一种基于概率频率的方法来预测和发现球员的价值以及他们对团队的意义。
现在最重要的问题"为什么是概率?
数学是确定性的逻辑;概率是不确定性的逻辑。概率在各种各样的领域都非常有用,因为它提供了理解和解释变化,从噪声中分离信号,以及模拟复杂现象的工具。
例如,在以下情况下需要概率:
- 统计学 :概率是统计学的基础和语言,使许多利用数据了解世界的有力方法成为可能。
- 物理学 :爱因斯坦有句名言‘上帝不和宇宙掷骰子’,但目前对量子物理学的理解大量涉及自然界最基本层面的概率。
- 生物学 :无论是基因的遗传还是随机突变的建模,遗传学都与概率深深交织在一起。
- 计算机科学 :概率在研究随机化算法、机器学习、人工智能中也起着必不可少的作用。
- 金融学 :概率在量化金融学中处于中心地位。随着时间的推移对股票价格进行建模并确定金融工具的“公平”价格在很大程度上取决于概率。
- :近年来,政治学变得越来越量化和统计化,例如在预测和理解选举结果方面。
- 医学 :近年来,随机临床试验的发展改变了医学研究,在这些试验中,患者被随机分配接受治疗或安慰剂。
- 人生 :人生是不确定的,概率就是不确定的逻辑。虽然对生活中做出的每个决定进行正式的概率计算是不现实的,但认真思考概率可以帮助我们避免一些常见的谬误,揭示巧合,并做出更好的预测。
有趣的是,概率无时无刻不在我们身边,因此,人们形成了对概率的直觉。潜意识里,概率论帮助我们做出更好的决策,提前计算事情*。我们应该明智地使用它,把我们的情绪放在一边。***
我希望我已经通过这篇文章引起了你对这个美丽主题的兴趣,尽管定义说“不确定性是概率的关键部分”,我希望你重新审视或研究这个有趣主题的事件发生的可能性是 100%,这使它是确定的。非常感谢你朗读这个故事。😃
照片由 Alexas_Photos 在 Pixabay 上拍摄
为什么在 DS/ML 中概率分布是必须的?
综合指南
顾名思义概率分布是一个随机变量在所有可能的结果中总概率的分布。
例如,假设一家银行向其客户提供四种不同类型的借记卡(经典卡、银卡、金卡、白金卡)。每张借记卡都有不同参数的特定值,如最大交易金额、奖励积分、年度服务成本、最大购买金额等。
银行根据客户的年龄、教育状况、职业、工资、家庭规模、居住地等特征提供借记卡。
现在假设一个软件专业人员在银行开户,那么应该给他提供什么样的借记卡。在分析了所有客户特征之后,银行给出了一个概率表,如下所示。
借记卡类型的概率分布
上表表示借记卡的概率分布,其中总概率 (1.0)分布在所有四种类型的借记卡上,并带有相应的概率值。
概率分布在-
- 数据分析
- 决策
本博客强调在上述两种情况下需要概率分布,概率分布类型和正态性检验的不同类型。
让我们用 kaggle 上可用的 澳洲运动员数据集 来讨论一下。这个样本数据包含了运动员的各种身体属性。它包含了对 13 个不同特征的 202 次观察,如身高、体重、体重指数、性别、红细胞计数、白细胞计数等。
数据来源:https://www . ka ggle . com/vikashrajluhaniwal/Australia n-athletes-data-set
现在,让我们尝试建立一个简单的分类模型,一次使用一个变量对运动员的性别进行分类。为此,概率密度函数非常有助于评估一个连续变量的重要性。
附加说明:本文仅包含不同地块在交互模式下的最终可视化输出。为了访问 python 代码,请访问 kaggle 内核这里(https://www . ka ggle . com/vikashrajluhaniwal/5-must-know-probability-distributions)。
a .分析 rcc
由于两种性别类别的 rcc 的 pdf 相互之间略有重叠,因此不可能根据某种条件对所有的点进行正确分类。通过考虑两个 pdf 的交叉点,可以建立一个简单的模型
if(rcc<=4.68):
sex = “female”
else:
sex = “male"
从 pdf 曲线中,我们可以观察到,直到 4.68(交点处的值),属于女性类别的点数比男性多,类似地,在 4.68 之后,男性点数更多。但是该模型导致在 4.68 之后属于女性类别的点的错误分类,并且类似地导致在 4.68 之前属于男性类别的点的错误分类。
同样,我们可以考虑其他变量来建立一个简单的分类模型,就像这样。为了找出最重要的变量,可以使用 pdf 进行单变量分析。
使用 pdf 进行单变量分析
使用 pdf 确定最重要特征的经验法则:-
-
不同类别目标变量的 pdf 曲线之间的间隔越高,分类越好
-
重叠的 PDF 曲线导致最差的分类
现在,让我们使用 PDF 对要素子集执行单变量分析。
b .分析 wcc
由于两种性别类别的 wcc 的 pdf 曲线相互重叠,因此很难得出简单分类的条件。
c .分析体重指数
由于两种性别类别的 bmi 的 pdf 曲线相互重叠,因此简单分类模型将具有较高的误分类水平。
d .分析 pcBfat
使用 pcBfat 可以建立一个简单的模型(如下所示),但是这又会导致一些错误的分类。
if(pcBfat<=11.80):
sex = "male"
else:
sex = "female"
e .分析 lbm
使用 lbm 可以构建一个简单的模型(如下所示),但它再次将低于 64.10 的男性点误分类为女性,将高于 64.10 的女性点误分类为男性。
if(lbm<=64.10):
sex = "female"
else:
sex = "male"
使用 CDF 的单变量分析
以上所有的简单模型都导致了某种分类错误,但是使用 PDF,我们无法计算分类错误的程度。使用 CDF 曲线可以获得误分类误差的大小。
a .分析 rcc
从 CDF 曲线中,我们可以观察到高达 4.68(来自构建模型的条件值)的 12.74%的男性被错误分类为女性,类似地,19%的女性在 4.68 以上被错误分类为男性。
所以总的误分类误差= 12.74 + 19 = 31.74%
b .分析 pcBfat
从 CDF 曲线中,我们可以观察到高达 11.80(来自构建模型的条件值)的 18%的女性被错误分类为男性,类似地,14.70%的男性在 11.80 以上被错误分类为女性。
所以总的误分类误差= 18 + 14.70 = 32.70%
c .分析 lbm
从 CDF 曲线中,我们可以观察到高达 64.10(来自构建模型的条件值)的 12.74%的男性被错误分类为女性,类似地,在 64.10 以上,7%的女性被错误分类为男性。
所以总的误分类误差= 12.74 + 7 = 19.74%
结论
基于 rcc、pcBfat 和 lbm 之间的错误分类误差的最佳预测器是 lbm。
概率分布的类型
基于随机变量的类型(离散或连续),有两种类型的概率分布——离散和连续。在这篇博客中,我们将讨论以下概率分布。
- 离散概率分布
- 离散制服
- 二项分布
2.连续概率分布
- 连续均匀
- 正态分布
- 对数正态分布
1.正态分布
*正态(高斯)*分布是一种钟形曲线,它的分布模式在大多数自然现象中观察到,如身高、体重、标志等。它有两个参数—均值()和标准差()。
服从正态分布的随机变量的 PDF 为
正态分布的性质
- 均值=中位数=众数
- 本质上对称
- 曲线下的总面积= 1
- 随着我们远离平均值,PDF 值降低
- 随着方差的增加,分布范围也增加,曲线变得更宽
- 68–95–99.7 经验法则
- 68.2%的数据位于距平均值一个标准差以内
- 95%的数据位于距平均值两个标准差以内
- 99.7%的数据位于距平均值三个标准差以内
如果我们事先知道一个变量遵循正态分布,那么我们就可以很容易地说出这个变量的许多属性,而不需要查看实际数据。
通过可视化和偏斜度检查身高、体重栏的正态性
从曲线中我们不难看出,身高和体重几乎呈正态分布,但存在少量的不对称性,这可以通过的偏斜度来衡量。****
****偏斜度:是一个统计参数,用来衡量随机变量分布中均值的不对称性。该参数值可以是正数、负数或未定义。负值表示数据左偏,而正值表示数据右偏。
这里,身高稍微偏左,而体重稍微偏右。
现在让我们试着回答下面的问题。
- 身高<=165 cm?
- What % of athlete has a height between 165 and 185 cm?
- What % of athlete has height > 185 cm 的运动员占百分之几?
对于一个均值和标准差有限的随机变量,利用 切比雪夫不等式 可以很容易地回答以上这些问题。
假设高度强烈遵循正态分布,那么它的分布应该如下图所示**
如果身高特征完全符合正态分布,那么使用正态分布的 CDF,上述问题将很容易回答**
常态测试
正态性检验用于确定数据是否正态分布,或者样本数据是否来自正态分布总体。有各种各样的图形和数字测试来确定这一点。
1。图形测试
- 直方图/密度图
- Q-Q 图
2.数字测试
- 夏皮罗-维尔克试验
- 科尔莫戈罗夫-斯米尔诺夫试验
a. QQ 剧情
这是一种比较两个概率分布的图形方法,通过绘制它们的 分位数 来进行比较。对于正态性测试,一个分布是 w.r.t .我们想要测试的给定样本,另一个分布是标准正态性分布。
stats models 和 scipy 包中有内置方法可以绘制 Q-Q 图。我们也可以手动绘制。**
手动绘制 Q-Q 图的步骤
假设 X 是代表给定样本的随机变量,Y ~ (0,1)是服从标准正态分布的随机变量,其中均值(**)等于 0,标准差(∑)等于 1。
- 计算 x 的所有百分位数,比如 x’₁,x’₂,x’₃…………x’₁₀₀.这些百分位数也称为样本分位数。
- 计算 y 的所有百分位数,比如 y’₁,y’₂,y’₃…………y’₁₀₀.这些百分位数也称为理论分位数。
- 将 x 的每个百分位数与 y 的相同百分位数相对照,即 2d 点形成为(x’₁,y’₁)、(x’₂,y’₂)、(x’₃,y’₃)…………)…(x’₁₀₀,y’₁₀₀).
- 如果所有点都在一条直线上(参考线 y=x),那么 X 遵循正态分布。**
从图中我们可以假设身高特征遵循正态分布吗?****
在这里,大多数点都落在参考线上,所以我们的假设似乎相当安全。
夏皮罗-维尔克检验
这是一个检验样本是否正态分布的数值测试。这是一个基于假设的测试,其中无效和替代假设定义如下-****
H₀(Null 假设:**样本为正态分布
H₁(Alternate 假设:**样本不是正态分布
这样,如果为 W 统计量获得的 p 值 小于显著性水平 ( α ),则零假设被拒绝,反之,如果 p 值 大于 α ,则零假设被拒绝失败。****
这里对于 α = 0.05,得到了 p 值(0.2120)>α,所以我们没能拒绝无效的假设,即身高来自于一个正态分布的总体。****
柯尔莫哥洛夫-斯米尔诺夫(K-S)检验
K-S 检验提供了一种方法—
- 检查样本是否来自参考概率分布(单样本 K–S 检验)
- 检查两个样本是否来自同一分布(双样本 K-S 检验)
这是一种基于假设的检验,其中单样本K–S 检验的无效假设和替代假设定义如下-**
H₀(Null 假设)😗*样本遵循参考分布
H₁(Alternate 假设)😗*样本不遵循参考分布
这里对于 α = 0.05,得到 p 值(0.7958) > α ,所以我们未能拒绝无效假设,即身高服从正态分布。****
切比雪夫不等式
通过遵循 68–95–99.7 的正态分布数据集的经验法则,我们知道有多少%的数据位于 k 标准差与均值之内,但是如果数据不遵循正态分布呢?或者如何知道对于任意随机分布,数据的多少部分位于 k 标准差内?****
要回答这类关于随机分布数据的分散性的问题 切比雪夫不等式 就是 的运用。
切比雪夫不等式 表示不超过 1/k 的分数的数据落在超过 k 标准差远离平均值的地方**
简单来说
换句话说,对于具有有限均值和有限标准差的样本,至少数据的**1-(1/k)部分落在 k 标准差内。
下面我们用几个 k 的值来多探讨一下不等式。
- 对于 k = 2,1-(1/k)= 0.75,即至少 75%的数据落在任意随机分布的的两个标准差内。****
- 对于 k = 3,1-(1/k)= 0.89,即至少 89%的数据落在任意随机分布的均值的三个标准差内。****
下面我们试着用切比雪夫不等式来回答一下问题。**
- 身高在 160.68-199.52cm 的运动员占百分之几?
- 身高在 150.97-209.23cm 的运动员占百分之几?
2.对数正态分布
如果随机变量 X 的自然对数正态分布为正态分布,则称该随机变量为对数正态分布。换句话说,如果 log(X)正态分布*,则 X ~ LogNormal( ,σ )。*****
对数正态分布随机变量的 PDF 为
让我们画出 ferr 特征的分布图。
我们可以观察到 ferr 特征遵循某种对数正态分布,其中右边部分比左边部分长。**
使用 QQ 图比较 ferr 的分布与对数正态分布
**QQ 图可用于通过绘制两个概率分布的分位数来比较它们。
从上面的 QQ 图中,我们可以观察到,大多数点并没有紧密地位于参考线上,因此 ferr 特征并没有严格遵循对数正态分布。
3.二项分布
二项分布是一种离散概率分布,用于从 n 伯努利轨迹中准确获得 k 个成功。
伯努利尾迹的特征—
- 每条线索只有两种可能的结果——成功和失败。
- 步道的总数是固定的。
- 在所有的试验中,成功和失败的概率保持不变。
- 这些轨迹是相互独立的。
二项式分布是一种从【n】伯努利轨迹中计算 k 成功概率的方法。
**二项式随机变量的 PMF 如下所示
其中 p =成功的概率, (1-p) =失败的概率
k =成功次数,而 (n-k) =失败次数
从基础数据集中,我们可以观察到只有 12.37%(25/202)的运动员打篮球,现在如果我们选择一个由 50 名运动员组成的随机样本
- 恰好两个运动员打篮球的概率是多少?
- 最多 10 个运动员打篮球的概率是多少?
- 至少 20 个运动员打篮球的概率是多少?
由于上述所有问题从固定数量的试验(50)中获得不同数量的成功(2,10,20),且 p = 0.1237,因此二项式分布可用于回答这些问题。**
4.均匀分布
4 .离散均匀分布
**离散均匀分布是一种对称分布,具有以下特性。
- 它有固定数量的结果。
- 所有的结果都同样可能发生。
如果一个随机变量 X 遵循离散均匀分布并且它有 k 个离散值比如 x₁、x₂、x₃…………x₁₀₀,则 X 的 PMF 为**
从给定的数据集中,我们可以观察到性别特征有两个可能的值男性和女性。有几乎相等数量的男(100) 和女(102) 运动员所以如果我们假设性别特征严格遵循均匀分布那么****
因此,随机的运动员有 50%的机会成为男男,同样,随机的男运动员有 50%的机会成为女女。****
4.b 连续均匀分布
如果在 a 和 b 中定义了连续均匀分布的随机变量 X ,则 X 的 PDF 为
让我们考虑一组数据的 wcc 值在 4.40 和 5.40 之间,另一组在 7.70 和 9.90 之间。该数据子集的分布如下所示,其中概率在连续范围的所有三个箱中是相同的。****
结束注释
在到目前为止的旅程中,我们讨论了不同种类的概率分布,特别强调了在 DS/ML 上下文中对概率分布的需求。
为什么概率在数据科学中很重要
数据科学
了解更多关于概率的知识,以及为什么我们数据科学家需要了解它
Riho Kroll 在 Unsplash 上拍摄的照片
L 运用概率基础知识应用数据科学概念。我们可以说出一些流行的术语,如“决策”、“推荐系统”、“深度学习”。像 Tensorflow 或 Pytorch 这样著名的深度学习框架都是基于概率的概念来实现的。因此,了解什么是概率以及它是如何工作的,将有助于我们在学习数据科学的道路上走得更远。
依赖和独立
粗略地说,我们说两个事件 E 和 F 是相关的,如果知道一些关于 E 是否发生的信息,就给了我们关于 F 是否发生的信息(反之亦然)。否则他们就是独立的。
例如,如果我们掷一枚硬币两次,知道第一次掷的是正面并不能告诉我们第二次掷的是正面。这些事件是独立的。另一方面,知道第一次翻转是否是正面肯定会给我们关于两次翻转是否都是反面的信息。(如果第一次翻转是正面,那么肯定不是两次翻转都是反面。)这两个事件是相依的。数学上,我们说两个事件 E 和 F 是独立的,如果它们都发生的概率是每个事件发生的概率的乘积:
P (E, F) = P( E) * P( F)
在上面的例子中,“第一次翻转正面”的概率是 1/2,“两次翻转反面”的概率是 1/4,但是“第一次翻转正面和两次翻转反面”的概率是 0。
贝叶斯定理
要了解贝叶斯定理是如何工作的,请尝试回答下面的问题:
Steve is very **shy and withdrawn**, invariably helpful but **with very little interest in people** or in the world of reality. **A meek and tidy soul**, he has a need for order and structure, and **a passion for detail**. How likely Steve to be one of those:
1\. A librarian
2\. A farmer
很多时候,我们(非理性地)会认为史蒂夫“最有可能成为”一名图书管理员。嗯,如果我们了解农夫和图书管理员的比例,我们就不会这么想了。这么说吧,大概是 20/1。
在图书管理员类别中,假设 50%的图书管理员符合问题中的性格特征,而在农民类别中,假设只有 10%。
好吧,假设我们有 10 个图书管理员和 200 个农民。给定描述的农民的概率将是:
5/(5+20) = 1/5 ~ 20%
如果我们猜测候选人可能是图书管理员。我们可能错了。
下面是贝叶斯定理的公式。
P(H|E) = P(H)*P(E|H) / P(E)
其中:
P(H) = Probability of hypothesis is true, before any evidenceP(E|H) = Probability of seeing the evidence if hypothesis is trueP(E) = Probability of seeing the evidenceP(H|E) = Probability of hypothesis is true given some evidence
随机变量
是一个变量,其可能值具有相关的概率分布。一个非常简单的随机变量,如果硬币正面朝上,等于 1;如果硬币反面朝上,等于 0。一个更复杂的方法可能是测量投掷硬币 10 次时观察到的人头数,或者从范围(10)中选择一个数值,其中每个数字的可能性相等。相关分布给出了变量实现其每个
可能值的概率。硬币投掷变量在概率为 0.5 时等于 0,在概率为 0.5 时等于 1。range(10)变量的分布为 0 到 9 之间的每个数字分配概率 0.1。
连续分布
通常,我们会希望对结果的连续体进行分布建模。(出于我们的目的,这些结果将总是实数,尽管在现实生活中并不总是这样。)例如,均匀分布对 0 到 1 之间的所有数字赋予相等的权重。因为在 0 和 1 之间有无限多的数字,这意味着它分配给各个点的权重必然为零。为此,我们用概率密度函数(pdf)来表示连续分布,使得在某个区间看到某个值的概率等于该区间上密度函数的积分。
均匀分布的密度函数可以用 Python 实现,如下所示:
def uniform_pdf(x):
return 1 if x >= 0 and x < 1 else 0
或者如果我们想为累积分布函数创建一个方法:
def uniform_cdf(x):
if x < 0:
return 0
elif x < 1: return x
else:
return 1
结论
概率很有趣,但需要大量的学习。有很多关于概率的东西我在这篇文章中没有涉及,比如正态分布,中心极限定理,马尔可夫链或者泊松过程…所以花点时间去了解更多。
参考
从零开始的数据科学书——乔尔·格鲁什著
为什么处理是学习 Python 的最佳方式
用 yasai 写的 p5.js 草图生成的柏林噪声图像。
学习 Python 有所有的好处,没有缺点
无论你是一个有经验的程序员,或者你从来没有编程过,你可能从来没有听说过 Processing。在创造性计算和视觉艺术领域,处理是一个众所周知的工具,但它在其他领域却显得非常小众。处理是(我引用官网):
一个灵活的软件速写本和一种语言,用于学习如何在视觉艺术的背景下编码。
在上面的引用中,Processing 被同时称为 sketchbook 和语言,因为最初(早在 2001 年)Processing 只与 Java 编程语言的定制/简化版本一起提供,因此它既是语言又是编码环境。从那以后,很多事情都变了。Processing 已经发展成为一个大型的社区支持项目,拥有大量的附加组件、视频教程和外部库。其中,在 2010 年和 2014 年之间,开发了 Python 模式。从那时起,就有可能使用 Python 编程语言在处理 IDE 中实际编程,我在这里告诉你为什么这是学习和/或教授 Python 的一个极好的方法。
忘记 Python 安装的噩梦吧
加工的本质使一切都变得容易。从安装处理应用程序本身,到开始使用第一批提供的视频教程,一直到导航复杂的示例和安装扩展。这就是处理-Python 协作的亮点。
Python 是接近编程世界的伟大语言,因为它的易用性和语法非常接近书面英语。然而,如果有一件事是绝对而不是适合初学者的,那就是安装过程。Python 是非常不明确的,它有几个版本(其中一些已被弃用)。此外,安装可以通过许多不同的渠道进行:Rodeo、Anaconda、brew、python.org…仅举几例!处理消除了学习者和 Python 之间的任何障碍,将安装程序置于任何其他处理模式之中!选择 Python 模式进行处理,单击 install,就可以开始了。
有人可能会说,使用类似于 Anaconda Navigator 的东西会让初学者以同样的易用性获得类似的结果。然而,Anaconda Navigator 仍然保留了 Anaconda 的大部分强大功能,因此界面更加复杂。此外,Navigator 只是一个包管理器,用户必须从那里选择并安装一个代码编辑器,增加不必要的步骤,这是 Python 初学者不应该担心的。
图片由 Processing 提供的一键安装的作者提供。
视觉反馈的力量
如引言中所述,“处理”是视觉艺术领域中一个非常著名的软件。这是因为处理的优势在于能够在代码和视觉效果之间建立紧密的联系,这使得使用代码生成视觉效果变得极其简单。Processing 并不是唯一允许这样做的软件( OpenFrameworks 是游戏中的另一个大玩家),但它绝对是最容易和最平易近人的环境之一。
当在处理中观察 Python 时,好处更加明显。Python 语言的脚本特性意味着第一次接触它的用户通常必须看到他们的第一个脚本的结果以文本的形式出现在 Python 控制台中(或者 ASCII arts,如果他们正在学习的教程很有趣的话)。处理彻底改变了这种范式,并提供了从第一行代码生成视觉效果的能力。能够以可视化的方式看到几行代码的结果是一个非常强大的工具,可以使学习之旅更加有趣和互动。
随着学习者变得更擅长编程,处理环境也随之增长,为视觉艺术世界提供了越来越多的深度:3D 环境、网格、纹理等等。最终,即使有一天处理环境可能会成为专业程序员的限制,但它为他们提供了轻松切换到更强大环境的工具。这甚至没有提到处理框架已经以许多不同的方式衰落了:从让你将草图移植到基于网络的环境的 p5.js,到让你在移动和基于 Linux 的平台上运行处理草图的 Android 和 Pi 的处理。
Golan Levin 的处理示例短片,标题为 Yellowtail,由 Jonathan Feinberg 翻译成 Python。
证明文件
最后,也是最重要的,文档:处理项目充满了优秀的文档!从参考手册开始,不仅包含每个内置功能的解释,还包含可以复制粘贴到草图中的现成代码,一直到由独一无二的丹尼尔·希夫曼制作的数千个视频教程。无论你被一个问题困住,或者你只是喜欢跟随一个指导你通过复杂的加工草图的错综复杂的教程,你一定会找到你需要的。
作者图片取自丹尼尔·希夫曼的编码训练提要,展示了数千个教程的多样性。
结论
总之,处理使 Python 入门变得更有趣和更具交互性。它为用户提供了一个测试和学习所有 Python 基础知识的良好环境,并支持程序员成长为一个强大的工具,直到学习者的旅程结束。
虽然我强烈认为 Python 的优势还在于虚拟环境的管理和外部模块的安装,但我认为这两个主题可以放在一边,以利于程序员旅程开始时更好的学习体验。
为什么心理学家可以成为伟大的数据科学家
数据驱动职业心理技能需求象限。图片由作者提供。
心理学和数据科学的交叉点
在我之前的一篇文章中,我谈到了从心理学(或任何社会科学)到数据科学的过渡。重点主要是成为一名成熟的数据科学家所需的技能。
以及如何做到这两点。
towardsdatascience.com](/5-tips-for-making-the-transition-from-psychologist-to-data-scientist-8198fbbbb19e)
然而,如果你已经完成了转变,那该怎么办呢?作为一名数据驱动的专业人士,你能做些什么来利用你现有的心理学知识?丢掉多年的学习,忽视你所学的一切,这将是一种耻辱!
我真的相信心理学家有特定的技能,可以用来成为伟大的数据科学家!当然,作为一名心理学家,我有偏见,但是让我们暂时忽略这一点😉*
作为一名数据驱动型专业人员,本文将重点介绍在您的工作中可以使用哪些心理技能,以及如何使用。
这个不会像教程一样不言自明。这里的目的是激励你寻找创造性的方法在你的工作中既是心理学家又是数据科学家。我希望通过给你提供一些清晰的例子来实现这一点,这些例子可能会触发你以新的方式应用旧的心理学方法。
*注:本文中的技巧并不专属于心理学家或有社会背景的人。焦点就在于此,因为心理学家可能比软件工程师更善于沟通。
1.心理技能
马库斯·温克勒的照片
让我们从头开始,为什么我会认为心理学家可以成为伟大的数据科学家?当然,这不是因为他们是伟大的程序员,也不是因为他们有丰富的 git 经验,对吗?不要!这主要是因为他们通常已经获得了两种广泛的技能:
- 通讯技能💬
- 研究技能🔍
现在你可能认为这看起来没什么,通过观察这两项技能,我倾向于同意你的观点。这似乎并不令人印象深刻…然而,掌握这些技能需要付出巨大的努力,使用它们的影响可能比你想象的要大。
这两种技能都是总括性的概念,因此包含了几个子技能,每个子技能都以自己的方式对心理学和数据科学领域做出了贡献。
下面,我将简要介绍其中的一些技能,让您感受一下为什么沟通和研究技能对数据科学来说比您可能意识到的更重要。
ELI5💬
Explain itlikeIam5(Eli 5)常用于对复杂的话题要求简单的解释。如果你能向一个 5 岁的孩子解释,你就真正理解了这个主题,并表明你能在所有知识水平上交流这些概念。
作为一名心理学家,你已经接受过这样的训练。你的病人理解复杂的方法是至关重要的,比如认知行为疗法,因为如果他们不理解,就很难实施治疗。
利益相关者管理💬
通过会议、电话会议、午餐等认识到公司是社会组织,这一点很重要。能够在高级水平上交流是非常有利的。
尤其是当涉及到利益相关者管理时,真正理解他们的问题,以及他们更喜欢的解决方案,需要你作为一个专业人士对他们有一种感觉。这个人为什么要求这个功能?他们想达到什么目的?
道德决策💬
不管你的专业是什么,心理学家都应该了解伦理学。在数据科学的背景下,这涉及到患者的保密性、隐私、决策等。理解并在复杂的伦理环境中工作有助于防止偏差,如选择偏差、确认偏差或反应偏差。
检测数据中常见的(认知)偏差
towardsdatascience.com](/how-to-detect-bias-in-ai-872d04ce4efd)
实验知识🔍
现在,那些有社会背景的人学到的不仅仅是沟通技巧。在大多数项目中,很大一部分课程是为了理解涉及人类的实验设置。
实验设计的严谨性、对结果细致入微的解释、求知欲,这些都是优秀心理学家必备的技能。
统计数字🔍
有趣的是,大多数心理学项目都比你想象的更注重统计。在我的项目中,四分之一的课程是某种形式的统计学。这包括从统计测试和验证问卷,到 A/B 测试和
那些学习社会科学的人往往比大多数其他专业的人对实验设计和统计学有更深入的了解。鉴于大量的机器学习源于统计学,这是一项非常棒的技能。
主题🔍
当分析人类行为时,比如为 A/B 测试设计实验或解释个人的地理数据,那么很好地掌握驱动人类的事物肯定会有帮助。
心理学家在分析与人类行为相关的数据时会有很大的帮助!
2.数据专业人员的类型
马库斯·温克勒的照片
尽管上述技能很重要,但它们可能更重要或更不重要,这取决于你实际从事的工作。到目前为止,我一直在寻找数据科学家的视角。在实践中,数据科学家之间的工作可能会有很大不同,因为数据领域内的职业仍然没有明确定义。
数据职业
为了理解心理学如何有助于数据驱动的专业人士,重要的是你要定义你想成为什么样的专业人士!
根据我的经验,数据驱动型专业人士大致有 7 种*:
- 经理(管理一个由数据驱动的专业团队)
- 商业智能顾问
- 数据分析师
- 数据科学家
- 机器学习工程师
- 数据工程师
- 人工智能研究员
这些角色对技术和心理技能的需求有很大不同。例如,经理通常不需要像人工智能研究人员那样多的技术知识,但肯定应该更倾向于心理学,以便正确地管理团队。
最适合你的数据职业可以浓缩成一个简单的问题:
在你的工作中,你希望心理技能和技术技能之间达到什么样的平衡?
回答这个问题可能会帮助你了解你想成为什么样的专业人士。如果这个问题的答案是你不是在找技术工作,那么大多数心理学专业都会适合你(例如,临床心理学、社会心理学家、I/O 心理学家等。).
然而,如果有一定数量的心理和技术技能是你想要的,这个问题就变得更难了。答案……一个象限!
3.数据中的心理学象限
你的心理技能实际上有多大帮助很大程度上取决于你所做的工作类型。如果您是一名数据工程师,并且主要专注于创建数据管道,那么拥有这些技能就不那么有帮助和必要了。
下面,我创建了一个象限,显示了几种职业中对心理技能的需求与对技术技能的需求。尽管这是对现实的简化(谁真的想看一个四维图😅),希望这能帮助你决定最适合你的职业。
数据驱动职业心理技能需求象限。图片由作者提供。
如上所述,心理技能通常对应于沟通和研究技能。在上面的象限中,更加强调沟通技能,以便将其与技术技能分开。
技术技能包括数据领域内的各种技能,如编程、机器学习、MLOps、数据架构等。
有趣的是,在填写象限时,我开始注意到职业相对位置的趋势。技术和心理技能之间似乎存在一条曲线:
对技术技能的更高需求往往导致对心理技能的更低需求,反之亦然。
低技术高心理
我把通常需要更多心理技能而不是技术技能的职业放在了右下象限:商业。
那些在商业象限的人更有可能担任咨询/建议角色或者管理角色。随着对沟通和领导技能的更大需求,BI 顾问和经理填补了一个伟大的适合!
BI 顾问可能非常专业,尤其是当他们还负责底层数据模型的时候。然而,通常情况下,它更多的是关于理解业务,而不是创建复杂的算法分析。这个象限中的许多其他职业也是如此。
高技术低心理
我把通常需要更多技术技能而不是心理技能的职业放在了左上方的象限中:工程师。
工程师象限中的人大多具有技术背景,如数据工程师或机器学习工程师。虽然拥有一些心理技能是有帮助的,但这不是工作的必要条件,因为你与利益相关者的互动不如数据科学家。
高技术和高心理
我把通常需要高心理和技术技能的职业放在了右上象限:独角兽 (ish)。
你不会经常看到人们同时拥有高技术和心理技能,因为这些技能很难独立获得,更不用说一起获得了。您可以在象限的人口中看到这一点:右上角没有角色。
在我看来,即使是数据科学家这种典型的独角兽角色,也不需要具备与人工智能研究员相同的技术技能。他们确实需要广泛的技术和心理技能,只是不是专家的水平。
低技术低心理
我把通常不需要多少心理和技术技能的职业放在右上方的象限中:无数据。
每个象限都需要一个名称,所以我将所有与数据无关的角色都称为无数据。我怀疑有任何数据角色不需要技术和心理技能。
注:由于数据驱动的职业通常定义不清,上述职位应被视为一种指示,而非事实。此外,这是我的观点,也是我对自己经历的偏见。
4.如何在数据科学中运用心理学
马库斯·温克勒的照片
最后,百万美元问题:
作为一名数据科学家,我如何在工作中真正运用心理学?
虽然这可以通过多种方式实现,但我想从三个方面入手:
- 利益相关者沟通
- 展示结果
- 分析人类行为
利益相关者
由于利益相关者对他们的项目有看似模糊的需求,与他们的沟通通常是非常困难的。这通常不是涉众的错,而是要求那些需求的人的错!当你写下这些需求时,你需要理解涉众的意图。
它从超越需求开始。对于每个需求,询问涉众他/她想用这个需求完成什么。为什么要预测下一年的销售额?拥有这些知识,你想达到什么目的?
意识到双方都缺乏理解。涉众对你的工作知之甚少,反之亦然。跨过那座桥需要你开始认同利益相关者。
注意:在分析我和他人之间的沟通错误时,帮助我的是假设我是错误的。通过假设这是我自己的错误,我可以开始认识到我如何以不同的方式处理这种情况。如果你责怪对方沟通不畅,下次就没什么机会了。
沟通
优秀的沟通技巧可能需要几年的时间来培养,但是关注几个方面会对你的技巧有很大的帮助。让我们关注一种单一的沟通形式:呈现。
展示您最新的分析结果可能比您预期的更加困难。您需要传达您的结果、技术假设、对业务的影响、验证指标等。所有这些都是有趣的过程。
这里有一些让你开始的提示:
- 了解你的受众
- KeepItSimple, S tupid (KISS)
- 解释一下我喜欢我 T21
- 像讲故事一样对待它
- 专注于一条信息
保持简单,专注于一条信息,并用大多数人都能理解的方式解释,这是良好沟通的关键。
即使对于技术观众来说,从简单开始也是最好的。从一开始就钻研技术含量很高的内容需要极大的注意力。对于技术人员来说,你需要对你所展示的东西和你所应用的方法产生直觉。
分析人类行为
解释您的分析结果通常需要一定程度的领域知识。作为一名心理学家,人类行为是你的专业知识。然而,没有多少组织专门致力于分析人类行为。
幸运的是,大多数组织都有某种形式的关于人类行为的数据。例如,这可能是客户评论、票据,甚至是人力资源数据。现在所有的组织都有一个网站,你至少可以分析人们如何使用一个组织的网站,并开发一个行为流程。
在任何组织中,你都不需要寻找太多的行为数据。识别这些用例或问题可能是有益的,因为它允许你炫耀你的心理学领域的知识!
**结束所有注释的注释:**尽管这篇文章比我预期的要长,但它仍然缺少相当多的信息和脚注。为了压缩信息,我在这里或那里做了一些假设,但有时感觉未压缩的信息是必不可少的。我意识到我有时过于笼统,所以如果我遗漏了重要信息或者过于笼统,请纠正我。找到平衡被证明是相当困难的😅。
感谢您的阅读!
如果你像我一样,对人工智能、数据科学或心理学充满热情,请随时在 LinkedIn 上添加我,或者在 Twitter 上关注我。
有关心理学和数据科学交叉的更多信息,请点击下面的帖子之一:
以及如何做到这两点。
towardsdatascience.com](/5-tips-for-making-the-transition-from-psychologist-to-data-scientist-8198fbbbb19e) [## 如何检测人工智能中的偏差
检测数据中常见的(认知)偏差
towardsdatascience.com](/how-to-detect-bias-in-ai-872d04ce4efd)
为什么纯粹的情感分析在当今的行业中不起作用
入门
对下一级情感分析的完整介绍。
作者图片
在过去的几十年里,感知分析已经被多种类型的行业广泛使用。它不仅可以产生有用的见解,还可以通过利用机器学习的能力而不是手动收集和分析一堆数据中的信息来节省时间和精力。它只是对输入(通常以句子或文档的形式)是否包含正面或负面意见进行分类。下面一个简单的例子清楚地表明,情绪是负面的。
看起来很简单,对吧?当数据变得更长、更复杂时,问题就出现了。假设我们有一个超过 500 个单词的文档,或者……大约 50 个单词,就像下面的例子一样。它可能谈论不止一个单一的主题。如果文件的最终输出将只是正面或负面,它是否真的代表了整个文件的思想?如果这份文件包含积极和消极的情绪呢?情感分析的输出会是什么?
在这个大数据扮演非常重要角色的时代,大量非结构化信息很可能会产生各种各样的场景。大多数公司肯定希望从中获取尽可能详细的知识。不幸的是,情感分析不能满足他们的要求。
然后,怎么做?
今天,我们至少知道情感分析的 4 个子领域:基于方面的情感分析、有针对性的情感分析、有针对性的基于方面的情感分析和基于概念的情感分析。我们将看看他们中的每一个是如何做的比常规的情绪分析更多。
基于方面的情感分析(ABSA)
这是最常见的情感分析类型。除了情绪,还有一个叫做相位的东西应该被考虑。这里的方面是指预定义类别的列表,并且非常依赖于数据的领域。假设我们拥有的数据是关于笔记本审查的,我们将很可能定义离portability
、connectivity
、operation_performance
以及任何其他与笔记本相关的东西不远的方面类别。许多公司利用 ABSA 来更好地了解他们自己的重要方面。与情绪分析不同,ABSA 可以给他们提供更详细、更结构化的信息。因此,他们只需要专注于改善那些容易产生负面情绪的方面。
SemEval 与 ABSA 相关的数据集一起举办了一场比赛(Pontiki 等人,2016 年)。从 SemEval 笔记本电脑数据集,下面是一个例子,以帮助您更好地理解。根据我们前面提到的一系列方面,示例中包含的方面是可移植性和连接性,它们的极性都是积极的。请注意,带下划线的单词并不是系统的真正输出。它们可以作为相应方面(可移植性和连接性)的线索和证据。
另一方面,还有另一种类型的 ABSA。实际上,输出和实现是完全不同的,但是人们经常使用同一个术语,这导致了混淆,尤其是对于那些刚刚了解这个领域的人。与前面的 ABSA 不同,这里的方面是直接从文档中提取的。它可以是任何东西,只要在文件中有说明,并且代表正在讨论的东西。通常以单词或短语的形式出现。因此,可以肯定地说,这种类型的情感分析比前一种更独立于领域。以下是取自 SemEval 数据集的一些示例。这里可以提取的方面是服务和人民,他们的极性分别是消极的和积极的。
目标情感分析
这个子领域通常被称为基于实体的情感分析,因为它分析出现在文档或句子中的实体。潜在的假设是在文档或句子中应该至少有一个实体被提及。实体通常以产品、人员、位置、组织等形式出现。下面是 Vo 和张(2015)的一个例子,其中的实体是窗户和,它们的极性分别为正和负。
基于方面的目标情感分析(TABSA)
顾名思义,这个任务基本上是有针对性的情绪分析和 ABSA 的结合。有三个组件需要分析:实体、方面和情感。摘自 Sentihood 数据集(Saeidi 等人,2016 年),下面是句子和输出可能看起来像什么的示例。
提到了两个实体:Boqueria 和 Gremio。博克里亚的设计是积极的,而服务是消极的。而且 Gremio 的服务(工作人员)和食物都是正面的。有趣的是,这两个实体有相同的方面(服务),但有不同的情感。换句话说,这项任务提供了对多个实体进行比较的优势。这对于公司来说非常有用,尤其是当他们想要将自己的产品与竞争对手的产品进行比较,并挖掘更多关于他们的信息时。
基于概念的情感分析
基于概念的情感分析方法侧重于通过使用网络本体或语义网络对文本进行语义分析,这允许聚合与自然语言观点相关联的概念和情感信息(Cambria,2013)。基本上和 aspect 差不多但是更一般。这就是为什么它能比其他产品产生更详细的输出。
让我们再来看看这篇文章开头的 50 个单词的例子。通过使用基于概念的情感分析,我们可以从这篇综述中获得几个概念(或主题),即使它们并不都有情感。检查我的余额和进行转账是有效概念的例子,但是没有情感。而另外三个是有效的概念,有感情。阅读和分析结果似乎有点困难。这就是为什么在实践中,结果通常以关系图、词云等形式可视化。
结论
总之,情感分析有助于从任何领域,甚至是一般领域,给出更广泛的想法。但是,如果我们想要更细粒度的信息,根据我们想要关注的部分,有许多选项可用。
参考
[1]庞蒂克等, SemEval-2016 任务 5:基于方面的情感分析 (2016),第十届语义评价国际研讨会论文集
[2] DT。Vo 和 Y. Zhang,【2015】,第 24 届国际人工智能联合会议论文集
[3] Saeidi 等人,感知:基于目标特征的城市街区情感分析数据集 (2016),2016 年科林会议录
[4] E. Cambria,概念级情感分析介绍 (2013),墨西哥人工智能国际会议
[5] A. Lowe,概念层次情感分析:理解文本反馈中情感的下一层次
如果你喜欢阅读这篇文章,并想在这里听到更多我和其他作者的意见,请加入 Medium 和订阅我的时事通讯。或者直接点击下面的链接。谢谢大家!
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@arfinda/membership) [## 每当 Arfinda Ilmania 发布时,都会收到一封电子邮件。
每当 Arfinda Ilmania 发布时,都会收到一封电子邮件。通过注册,您将创建一个中型帐户,如果您还没有…
medium.com](https://medium.com/subscribe/@arfinda)
为什么 Python 比 R 更适合数据科学职业
新数据科学家将从学习 Python 中获益更多的四个原因
新数据科学家都面临着一个极其重要的问题: 我该学 Python 还是 R?
这个问题非常重要,因为学习你的第一门编程语言需要数百个小时。试图两者都学是不切实际的,尤其是当你刚刚开始职业生涯的时候。
那么你应该选哪个呢?
根据我的经验,我相信如果你选择 Python,你的职业生涯会受益更多。
在我看来,Python 是从事数据科学职业的更好选择,尤其是如果你刚刚起步的话
我给你四个我认为 Python 是你职业生涯更好选择的理由,但是我也要明确一点 我不认为 R 是一个糟糕的选择 。
选择 R 不会对你的工作机会产生负面影响,根据你的团队,你甚至可能需要学习它。事实上,脸书将 R 用于其内部调查工具的分析组件,并且我们所有的数据科学基础设施都支持这种语言。
也就是说,我相信如果你首先学习 Python,作为一名实践数据科学家,你将更快地变得富有成效,并且你将能够在统计建模之外的重要领域更好地为你的团队做出贡献。
因此,学习 Python 将使你能够为你的公司带来更大的影响,你的职业生涯也将因此受益更多。
原因 1:无论如何,你可能都必须学习 Python
大多数公司要求他们的数据科学家做的不仅仅是预测建模(即机器学习)。至少,您可能需要维护为模型提供数据的数据管道,而这些数据管道很可能是用 Python 构建的。
如今管道的行业标准是基于 Python 的气流,在脸书,我们使用基本相同的内部 Python 工具。
事实上,我估计我们脸书的数据科学家每周 100%使用 Python,而大约 10%的人积极使用 r。
因此,选择 Python 可能更有效:虽然一旦找到工作,你可能会避免使用 R,但你不太可能避免使用 Python。
原因 2: Python 更容易学习
获得就业机会所需的时间非常重要,尤其是如果你在大学以外自学的话。
Python 以简单易学而闻名。学习了 Python 和 R(尽管对 Python 的了解更深),我认为 Python 的名声是当之无愧的。
当您开始使用统计建模之外的语言特性时,Python 易于学习的好处尤其明显。这些特性包括打包项目以供分发、开发命令行界面、用 SQLAlchemy 之类的 ORM 建模数据结构等等。
使用 Python 将使您更容易精通这些特性,您的职业生涯也将因此受益。
原因 3: Python 有一个更大的社区
Python 是世界上最流行的编程语言之一,在 stack overflow、kaggle 甚至 medium 等网站上都有一个庞大的社区。
因此,当你不可避免地遇到你自己无法解决的问题时,你更有可能找到在你之前遇到过的人,寻求帮助,并得到解决方案。
这意味着您将花费更少的时间来调试系统的兼容性问题,而将更多的时间用于交付对公司产生影响的代码。
原因 4:使用 Python 部署模型更容易
最后,在您的职业生涯中,您可能会希望将您的模型实时提供给最终用户。为了解决这个问题,您需要构建一个基于 REST 的 web 应用程序,这对于 Python 来说要容易得多。
事实上,Python 拥有一些世界上最流行的 web app 框架,即 Django 和 Flask。您公司的内部部署工具更有可能支持那些框架,而相对来说不太可能支持 r。
这些框架的流行也意味着它们受到平台即服务提供商的良好支持,如 Heroku、Amazon Lightsail 和许多其他提供商。您将能够在线发布您的个人项目,而这只是在 r。
最重要的是,如果你足够幸运,你的公司在自己的产品中使用 Python 框架,那么学习 Python 意味着你会很危险,足以建立自己的应用内跟踪。能够自主地为您的模型捕获更多的特性将会对您能够提供的影响产生巨大的影响。
当然,所有的决定都有取舍,选择学习 Python 而不是 R 也不例外。尽管我相信 Python 是数据科学职业的更好选择,但考虑它带来的负面影响也是值得的。
对我来说,最大的缺点是 Python 没有与 Rstudio 等效的工具。与 Python 最有可比性的工具是 Jupyter notebook,但我个人认为 Rstudio 更好,因为它具有数据探索功能。
编辑:自从写了这个故事, Marcelo Garcia 指出免费使用的 Spyder 包是 Rstudio 的 Python 替代品。我还没有机会尝试 Spyder,但它看起来很棒!
R 在学术界也非常流行,所以 R 中的包文档更有可能直接引用学术研究。这些文档对于从事“前沿”研究的数据科学家来说非常有用。
但是我不认为缺少 Rstudio 等价物就足以否定 Python 的相对优势。数据科学学术界的职业也更加罕见,这使得 R 的研究相关优势对大多数数据科学家来说不太相关。
所以尽管 R 有优势,我相信如果你选择学习 Python,你的职业生涯会受益更多。
最后,我觉得再次值得一提的是 我不觉得学 R 是个坏选择, 只是那个 Python 更有可能是你职业生涯更好的选择。根据您的具体情况,学习 R 可能对您更有意义。
不管你选择哪种语言,你都不应该觉得你不能改变你的想法。所有编程语言的相似之处比不同之处多得多:学习你的第二语言比学习你的第一语言要容易得多。
事实上,我自己已经选择先学 R 了!所以我很难强烈反对 R,即使我现在推荐 Python 作为你职业生涯的更好选择。
感谢阅读!如果你觉得这些内容有用,我写的是关于数据科学和编程的文章,所以请关注我,获取更多类似的文章。
为什么 Python 不是未来的编程语言
意见
尽管未来几年对它的需求量会很大
Python 为我们提供了很好的服务——但是它会长久吗?戴维·克洛德在 Unsplash 上的照片
It 花了编程社区几十年的时间来欣赏 Python。但自 2010 年初以来,它一直在蓬勃发展,并最终在受欢迎程度上超过了 C、C#、Java 和 JavaScript。
但是这种趋势会持续到什么时候呢?Python 最终什么时候会被其他语言取代,为什么?
给 Python 设定一个确切的到期日会有太多的猜测,它可能会像科幻小说一样过时。相反,我将评估目前推动 Python 流行的优点,以及将来会破坏它的弱点。
是什么让 Python 现在流行起来
Python 的成功反映在堆栈溢出趋势中,该趋势测量平台上帖子中的标签数。鉴于 StackOverflow 的规模,这是一个很好的语言流行指标。
StackOverflow 上各种编程语言的标签快照。
虽然 R 在过去几年中一直处于停滞状态,许多其他语言也在稳步下降,但 Python 的增长似乎是不可阻挡的。几乎 14%的 StackOverflow 问题被标记为“python ”,而且这一趋势还在上升。这有几个原因。
它是旧的
Python 在九十年代就已经出现了。这不仅意味着它有足够的时间成长。它还获得了一个庞大的支持性社区。
因此,如果你在用 Python 编码时遇到了任何问题,你很有可能通过谷歌搜索就能解决。仅仅是因为有人已经遇到了你的问题,并写了一些有帮助的东西。
这是初学者友好的
这不仅仅是因为它已经存在了几十年,给了程序员时间来制作精彩的教程。不仅如此,Python 的语法非常易读。
首先,不需要指定数据类型。你只需要声明一个变量。Python 将从上下文中理解它是整数、浮点值、布尔值还是其他什么。这对初学者来说是一个巨大的优势。如果你曾经不得不用 C++编程,你就会知道你的程序不能编译是多么令人沮丧,因为你把一个浮点数换成了一个整数。
如果你曾经不得不同时阅读 Python 和 C++代码,你就会知道 Python 是多么容易理解。尽管 C++在设计时就考虑到了英语,但与 Python 代码相比,它的可读性相当差。
快速全面的 Python 入门指南。
medium.com](https://medium.com/the-renaissance-developer/learning-python-from-zero-to-hero-8ceed48486d5)
它是多功能的
自从 Python 出现这么久以来,开发人员已经为每一种用途制作了一个包。如今,你可以找到几乎所有东西的包装。
想要处理数字、向量和矩阵吗?NumPy 是你的男人。
想为科技和工程做计算?使用 SciPy 。
想在数据处理和分析领域做大?给熊猫一个机会。
想从人工智能入手?为什么不用 Scikit-Learn 。
无论您试图管理哪种计算任务,都有可能有一个 Python 包来完成它。这使得 Python 在最近的发展中处于领先地位,这可以从过去几年机器学习的激增中看出。
Python 的缺点——以及它们是否是致命的
基于前面的阐述,你可以想象 Python 将在未来很长一段时间内保持在 sh*t 之上。但是像所有技术一样,Python 也有它的弱点。我将逐一检查最重要的缺陷,并评估这些缺陷是否致命。
速度
Python 很慢。非常慢。平均而言,使用 Python 完成一项任务所需的时间是使用任何其他语言的 2-10 倍。
这有各种各样的原因。其中之一是它是动态类型的——请记住,您不需要像在其他语言中那样指定数据类型。这意味着需要使用大量的内存,因为程序需要为它在任何情况下都能工作的每个变量保留足够的空间。大量的内存使用意味着大量的计算时间。
另一个原因是 Python 一次只能执行一个任务。这是灵活数据类型的结果——Python 需要确保每个变量只有一种数据类型,而并行进程可能会弄糟这一点。
相比之下,普通的网络浏览器可以同时运行十几个不同的线程。还有一些其他的理论。
但是到了最后,所有的速度问题都不重要了。计算机和服务器变得如此便宜,以至于我们谈论的是几分之一秒。最终用户并不真正关心他们的应用程序是在 0.001 秒还是 0.01 秒内加载。
Bobby 对 Python 中速度问题无关性的漂亮解释。
medium.com](https://medium.com/@trungluongquang/why-python-is-popular-despite-being-super-slow-83a8320412a9)
范围
最初,Python 是由动态限定作用域的。这基本上意味着,为了计算一个表达式,编译器首先搜索当前块,然后依次搜索所有调用函数。
动态范围的问题是每个表达式都需要在每个可能的上下文中进行测试——这很繁琐。这就是为什么大多数现代编程语言使用静态作用域。
Python 试图过渡到静态范围,但是搞砸了。通常,内部作用域——例如函数中的函数——能够看到和改变外部作用域。在 Python 中,内部作用域只能看到外部作用域,而不能改变它们。这导致了很多混乱。
兰姆达斯
尽管 Python 具有很大的灵活性,但 Lambdas 的使用还是相当有限的。Lambdas 在 Python 中只能是表达式,不能是语句。
另一方面,变量声明和语句总是语句。这意味着兰姆达斯不能用于他们。
表达式和语句之间的区别是相当随意的,在其他语言中不会出现。
空白使代码可读性更强,但可维护性较差。照片由欧文·史密斯在 Unsplash 上拍摄
空白
在 Python 中,使用空白和缩进来表示不同级别的代码。这使得它在视觉上很吸引人,理解起来很直观。
其他语言,例如 C++,更多地依赖于大括号和分号。虽然这可能在视觉上没有吸引力,对初学者也不友好,但它使代码更易于维护。对于更大的项目,这更有用。
像 Haskell 这样的新语言解决了这个问题:它们依赖空格,但是为那些不想使用空格的人提供了另一种语法。
移动开发
随着我们见证从桌面到智能手机的转变,很明显我们需要健壮的语言来构建移动软件。
但是用 Python 开发的移动应用并不多。这并不意味着不能这样做——有一个名为 Kivy 的 Python 包可以实现这个目的。
但是 Python 并没有考虑到移动。因此,即使它可能对基本任务产生可接受的结果,你最好的选择是使用一种为移动应用程序开发而创建的语言。一些广泛使用的移动编程框架包括 React Native、Flutter、Iconic 和 Cordova。
明确地说,笔记本电脑和台式电脑应该在未来很多年都会存在。但是既然移动早就超过了桌面流量,那么可以肯定的说,学习 Python 还不足以成为一个经验丰富的全能开发者。
运行时错误
Python 脚本不是先编译再执行的。相反,每次执行时它都会编译,所以任何编码错误都会在运行时显现出来。这导致性能差、耗时,并且需要大量的测试。比如,很多测试。
这对初学者来说很好,因为测试教会了他们很多东西。但是对于经验丰富的开发人员来说,用 Python 调试复杂的程序会让他们出错。这种性能的缺乏是在 Python 上设置时间戳的最大因素。
Rust、Go、Kotlin、TypeScript、Swift、Dart、Julia 如何促进您的职业发展并提高您的软件开发技能
towardsdatascience.com](/top-7-modern-programming-language-to-learn-now-156863bd1eec)
将来什么会取代 Python 什么时候
编程语言市场上有一些新的竞争对手:
- Rust 提供了与 Python 相同的安全性——没有变量会被意外覆盖。但是它用所有权和借用的概念解决了性能问题。根据 StackOverflow Insights 的说法,它也是最近几年最受欢迎的编程语言。
- Go 非常适合 Python 这样的初学者。它如此简单,以至于维护代码更加容易。有趣的一点:Go 开发者是市场上收入最高的程序员之一。
- Julia 是一种非常新的语言,与 Python 正面竞争。它填补了大规模技术计算的空白:通常,人们会使用 Python 或 Matlab,并用 C++库修补整个事情,这在大规模中是必要的。现在,人们可以使用朱莉娅,而不是在两种语言之间周旋。
虽然市场上有其他语言,但 Rust、Go 和 Julia 是修复 Python 弱点的语言。所有这些语言都在未来的技术中表现出色,尤其是在人工智能领域。虽然它们的市场份额仍然很小,正如 StackOverflow 标签的数量所反映的那样,但所有这些标签的趋势都很明显:向上。
StackOverflow 上各种编程语言的标签快照。
鉴于 Python 目前无处不在的受欢迎程度,这些新语言中的任何一种取代它肯定需要五年,甚至整整五年的时间。
这将是哪种语言——Rust、Go、Julia 或未来的新语言——目前还很难说。但是考虑到 Python 架构中的基本性能问题,不可避免地会出现这种情况。
为什么 Python 需要“pass”语句
什么时候用“pass”?有其他选择吗?
对于像我这样从其他语言转向 Python 编程语言的人来说,经常会发现 Python 有一些非常独特的语句。“pass”语句就是其中之一,你很少能在其他编程语言中找到这样的东西。我一直在用 Java,C,C#,JavaScript,Objective-C,Swift,Scala 等等,没有一个有“通过”的语句。
其实“pass”语句在 Python 中是一个非常简单的表达式。在本文中,我将介绍这一独特语句的几个不同方面,包括它的用法、需要使用它的场景、使用它的好处、Python 需要它的原因以及潜在的替代方案。
定义
那么,Python 中的“pass”语句是什么呢?
一般来说,“通过”语句仅仅是一个空操作。具体来说,当它被执行时,什么都不会发生。
因此,“通过”语句通常在语法上用作占位符****。当没有代码需要执行时,我们可以把“pass”语句放在那里。
情节
由sendocomun在 Pixabay 上拍摄的照片
那么,我们可能或者需要使用“通过”语句的场景有哪些呢?事实上,它并不局限于在任何特定的场景中使用。然而,当然,到处放也没什么意义。所以,这里我总结了五种不同的典型场景。
1.循环往复
“pass”语句可用于循环语句,如 for-loop。
for i in range(10):
pass
或者 while 循环。
while true:
pass
因此,我们不需要在循环中编写任何逻辑,因为“pass”语句充当占位符,不做任何事情。
2.在 if-else 条件下
当我们定义一个 if-else 条件时,我们可以先决定条件,然后再考虑条件语句。
if a == 2:
pass
else:
pass
3.在函数中
它也经常被用在一个函数中。
def func(param):
pass
当我们想定义一个函数,但又想以后实现它时,我们可以使用“pass”语句。
4.在一个班级
有时我们想创建一个类,但在以后实现它,如下所示。
class Cat(Animal):
passclass Dog(Animal):
pass
我们知道猫和狗是动物,所以我们想创建这些子类,并在以后实现它们。
5.在 try-expect 子句中
这是“pass”语句的另一个常见用例。
try:
print(x)
except:
pass
在这种情况下,我们希望使用 try-except 语句,但是我们实际上并不关心异常是什么。所以,我们可以只使用“通过”语句。
使用“通行证”的好处
我们已经谈了很多关于“通”的说法。然而,我们为什么需要使用它呢?换句话说,使用它有什么好处?
首先,虽然“pass”语句什么都不做,但它仍然可以像我们在其他编程语言中所做的那样使用— //TODO
。注释和“pass”语句的主要区别之一是后者可以被大多数 IDE 工具着色,因为它是一个关键字。
此外,与一段将被完全忽略的注释不同,“pass”语句毕竟是有效的代码。它将被翻译识别。因此,它被迫遵循 Python 语法的缩进,并帮助构造完整的代码片段。
Python 为什么需要“pass”?
让我们尝试一个不使用“pass”语句的函数。
无论我们是否放置了#TODO
注释,代码都无法执行,因为 Python 依赖于缩进而不是花括号{}
。注释#TODO
是缩进的,但是会被解释器忽略。因此,我们不得不使用“通过”语句。它是一段有效的代码,不会被解释器忽略,成为函数的主体。
让我们更进一步。如果我们只需要一段有效的代码,“pass”语句可能不是唯一的选择。例如,我们可以使用一个字符串或一个数字,但不需要将它们赋值给任何变量,如下所示。
这次我们通过了编译。
但是字符串和数字放在函数体中没有任何意义,非常明显的是“pass”语句更加整洁优雅。
其他选择
确实有一些其他关键字可以实现与“通过”语句类似的结果,例如return
、yield
、continue
和break
。
为什么我们不用它们?
首先,“pass”语句永远不会改变代码执行的顺序,也不会在它自己的域中产生任何影响。所以,如果我们把它们用于同样的目的,这是最安全的选择。
也就是说,
return
和yield
将停止一个功能的执行break
将停止一个循环continue
将停止当前循环
除此之外,这些关键词并不一般化。它们只能在特定的场景下使用。
return
和yield
只能在一个函数中使用break
和continue
只能在一个循环中使用
因此,尽管一些关键字可以用于相同的目的,但还是建议使用“pass”语句。
摘要
照片由 Engin_Akyurt 在 Pixabay 上拍摄
在本文中,我介绍了 Python 中一种独特的语法,即“pass”语句。它是一段代表“空操作”的有效代码,通常在循环、函数、类等中用作占位符。使用它有几个好处,例如 IDE 会将它作为一个关键字。此外,Python 需要提供这样的关键字,因为它依赖缩进来定义函数的域等。因此,需要使用一段有效的代码作为占位符,而不是大多数其他编程语言中使用的“待办事项”注释。最后,虽然也有一些其他关键字如“返回”可以用来实现同样的事情,但它不够一般化,也没有“通过”语句那么整洁。
** [## 通过我的推荐链接加入 Medium 克里斯托弗·陶
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
medium.com](https://medium.com/@qiuyujx/membership)
如果你觉得我的文章有帮助,请考虑加入 Medium 会员来支持我和数以千计的其他作者!(点击上面的链接)**
为什么 Python 将在未来十年保持无可争议的地位
意见
了解为什么不管反对者怎么说,python 在下一个十年仍将保持原样和相关性
凯利·西克玛在 Unsplash 上的照片
ython 是一种非凡的改变游戏规则的编程语言,它将编程的前景提升到了一个完全不同的水平。python 的迅速崛起给整个行业带来了极大的好处,但是随着它越来越受欢迎,它总是会招致批评。
最近,我一直在阅读一些文章和观看一些视频,这些文章和视频暗示 python 的辉煌时代已经结束。
python 招致的批评通常从“它是一种缓慢的语言”到“全局解释器锁”,到“动态键入”,再到“缺乏移动应用程序”。
这些批评是真的吗?它们真的重要吗?
python 会在这个十年的剩余时间里保持相关性和完美性吗?
今天,我们将分析事实,打破一些神话!
我们开始吧!
主要的批评,它们重要吗?
Joel M Mathey 在 Unsplash 上拍摄的照片
1.Python“非常慢”:
不可否认,与 C、C++和 Java 等语言相比,python 速度较慢。这些语言更快的主要原因之一是因为它们是静态类型的,但 python 是一种动态类型的编程语言。
这些语言是在运行前编译的,不像 python 是在运行时编译的。
Python 还从其他编程语言导入外部库,而不是本地代码。
简单来说,这些因素是 python 慢的主要原因,但真正的问题!
有关系吗?
对于最终用户来说,这几乎没有什么不同。你的程序运行时间是 0.0001 秒还是 0.001 秒并不重要。
此外,如果你的计算速度是一个重要因素,值得注意的是汇编语言将比 C,C++,甚至 Java 快得多,但几乎没有人使用它们。
然而,python 速度的不足被其更快的开发时间和整体的简单性所弥补。
也就是说,可以对 python 代码进行优化,使其执行速度稍快一些。即使改进不明显,对大多数情况来说,这也不是什么大问题。
2.全局解释器锁(GIL):
Python 全局解释器锁(GIL)是 python 处理进程时使用的一种进程锁。一般来说,python 只使用一个线程来执行写好的语句集。GIL 限制了 python 中现成的并行编程。
这意味着在 python 中一次只能执行一个线程。在 python 中,单线程进程和多线程进程的性能是相同的,这个问题的原因是 GIL。
python 的开发者收到了很多关于这个问题的抱怨,但是他们不能带来像移除 GIL 这样重大的改变而不引起向后不兼容的问题。
有关系吗?
全局解释器锁是 python 中一个有争议的特性。它的引入是为了避免内存泄露和死锁问题。
它对整个计算过程的负面影响大于正面影响。然而,这在某种程度上可以用 python 中的多处理来解决。
多重处理允许你同时运行多个不相关的进程。对于 CPU 密集型任务,多处理优于多线程。
3.缺乏对移动应用开发的贡献:
Java 和其他编程语言在移动开发行业占主导地位。像 android studio 这样的应用程序利用了像 Java 和 XML 这样的编程语言。
Python 为计算机和服务器端系统提供了各种各样的开发。不幸的是,python 不太适合移动应用程序。事实上,python 甚至被认为是基于移动应用的弱势语言。
有关系吗?
智能手机、平板电脑和其他小型设备的普及程度正在上升。Python 在这方面的不足可能会阻碍它在未来作为一门重要语言的存在。
然而,事情可能不会像预期的那样糟糕,因为随着 python 的进步以及语言和框架的不断更新,它甚至可能为移动应用程序开发开辟一个市场。
承认 python 缺乏光彩的地方是很有意义的。但是理解这些因素对普通程序员的影响也同样重要。
现在让我们来看看使 python 成为一个发电站的因素,以及为什么它将在未来几年中发挥作用。
为什么 Python 将在未来十年保持相关性?
GIF 来自 GIPHY
1.初学者学习的最佳编程语言:
对于没有编程语言的初学者来说,Python 是一种非常棒的入门语言。Python 简单易学。它还有助于理解面向对象编程的基本概念。
Python 对于任何人来说都是最好的入门方式,即使是之前没有编程或编码语言经验的人,尤其是那些打算在数据科学、人工智能、机器学习等领域更进一步的人。
它有一个简单的方法,任何人都可以用它来学习这门语言。Python 极其通用,并且具有平台独立性。这意味着 python 也可以导入用其他编程语言构建的基本模块。
总的来说,Python 是一门开始学习的极好的语言,并且完全值得。它还可以在需要时帮助转换到其他语言。
2.受欢迎程度和社区支持:
在撰写本文时,Python 是世界上第二流行的语言,仅次于 JavaScript。这种受欢迎程度似乎不会很快降低。
要了解更多关于 python 和其他编程语言在 2020 年及以后的流行程度,我强烈推荐大家通过下面的链接查看我以前的一篇文章。
讨论当今 10 种最流行的编程语言的范围、优缺点
towardsdatascience.com](/10-most-popular-programming-languages-for-2020-and-beyond-67c512eeea73)
Python 还有一个精彩的社区,不断更新和更新版本。总的来说,python 社区充满了了不起的人,并且不断更新以改进 python。
社区成员积极参与开发新模块,以跟上编程世界的发展。与各种库和框架相关的大量资源正在不断开发。
3.在人工智能/数据科学领域占据主导地位:
GIF 来自 GIPHY
Python 的专长在于其执行可视化任务、探索性数据分析的能力,当然还有在机器学习、深度学习和神经网络方面的人工智能领域。
通过 python 模块和库可以访问的各种框架有助于解决复杂的机器学习和深度学习问题。
在这个时候说 python 在人工智能和数据科学领域的能力是显著的,几乎是无与伦比的,这不会错。
然而,正在崛起的新兴语言可能会对 python 构成潜在威胁,成为其巨大的竞争对手。我们将在以后的文章中更多地讨论这三种潜在的语言。
就目前而言,python 是一种很好的编程语言,可以帮助您开始数据科学之旅,解决复杂的机器学习和深度学习项目。
安德鲁在 Unsplash 上的照片
结论:
说到这里,我们来到了文章的结尾。
如果你是一个初学编程的人,在网上听到这些批评,你认为 python 可能不是当今时代学习的最好语言,那么你就被误解了。
希望我能够传达这样的信息,尽管有些人加入批评 python 的行列,批评它的一些缺点,但这并不意味着这种出色的编程语言的流行程度或性能将在未来几年内逐渐消失。
Python 仍然是相关的,被认为是初学者学习入门语言的客观的好选择。
它在人工智能领域的贡献是巨大的,它在机器学习、数据可视化和深度学习方面的相关性将在未来几年保持不变。
我很想知道观众的想法。如果你同意或不同意我的观点,请在下面留下你的评论。任何建设性的积极性、观点或批评都受到高度鼓励和赞赏。
看看我的其他一些文章,你可能会喜欢读!
浅析一种简单的密码技术及如何破解密码!人工智能和机器如何…
towardsdatascience.com](/breaking-the-code-analysis-of-brute-force-attack-with-code-in-python-6070389449d4) [## 必须使用内置工具来调试你的 Python 代码!
python 调试器模块指南,包含有用的代码和命令。有效且高效地利用这一工具…
towardsdatascience.com](/must-use-built-in-tool-for-debugging-your-python-code-d5f69fecbdbe) [## 聚类无监督学习简明指南!
借助聚类算法详细理解无监督学习的概念。
towardsdatascience.com](/concise-guide-to-unsupervised-learning-with-clustering-4924cdbb27cb) [## 4 个基本正则表达式操作符使自然语言处理变得更简单!
了解四种基本的常规操作,以清理几乎任何类型的可用数据。
towardsdatascience.com](/natural-language-processing-made-simpler-with-4-basic-regular-expression-operators-5002342cbac1) [## 带有完整代码片段和有用链接的 5 个最佳 Python 项目创意!
为 Python 和机器学习创建一份令人敬畏的简历的 5 个最佳项目想法的代码片段和示例!
towardsdatascience.com](/5-best-python-project-ideas-with-full-code-snippets-and-useful-links-d9dc2846a0c5) [## 人工智能是破解宇宙奥秘的关键,下面是原因!
人工智能、数据科学和深度学习的工具是否先进到足以破解人类大脑的秘密
towardsdatascience.com](/artificial-intelligence-is-the-key-to-crack-the-mysteries-of-the-universe-heres-why-56c208d35b62)
谢谢你们坚持到最后。我希望你们都喜欢这篇文章。祝大家有美好的一天!
分析 2019-nCoV(冠状病毒)数据—为什么质量和感觉检查在数据科学中如此重要?
世界卫生组织和 Kaggle 的 2019-nCoV(冠状病毒)数据库如何用不同的影响数字讲述相同的故事…
图片来源:WebMD.com
“我 真诚地为每一个中国人的安康祈祷。愿上帝给冠状病毒受害者和他们的家人足够的力量,让他们度过这段艰难的时光。请遵循 世卫组织网站 中概述的建议,以保持安全并受到保护
世界卫生组织担心什么?(问题背景)
“冠状病毒(CoV)是一个大的病毒家族,可引起从普通感冒到更严重疾病的疾病,如 中东呼吸综合征(MERS-CoV) 和 严重急性呼吸综合征(SARS-CoV) 。 一种新的冠状病毒(nCoV) 是一种以前在人类中未被识别的新毒株。关于始于中国武汉的冠状病毒爆发的消息变化很快。这种与 SARS 和 MERS 密切相关的呼吸道感染一直在中国蔓延,其他几个国家也诊断出了病例,包括美国、澳大利亚、日本等。”
[## 新型冠状病毒(2019-nCoV)——世卫组织新型交互式、基于网络的冠状病毒在线培训…
世卫组织的在线训练是目前对抗冠状病毒爆发的最佳武器;涵盖检测方法…
medium.com](https://medium.com/@angeleastbengal/novel-coronavirus-2019-ncov-whos-new-interactive-web-based-online-training-for-coronavirus-d0865f0b47af)
在哪里可以找到真实世界的信息?(数据来源)
约翰·霍普斯金大学创建了一个在线仪表板来监控冠状病毒的当前情况,数据从同一链接中提取,并以 csv 格式提供。大部分数据收集自各种来源,包括 【世卫组织】美国疾控中心ECDC中国疾控中心()NHC和 DXY 。DXY 是一个中文网站,几乎实时地汇总 NHC 和当地 CCDC 疫情报告,提供比国家一级报告组织所能提供的更多的当前区域病例估计,因此用于所有报告的 mainland China 病例(确诊、疑似、恢复、死亡)。美国病例(确诊、疑似、康复、死亡)取自美国疾病预防控制中心,所有其他国家(疑似和确诊)病例数据取自相应的地区卫生部门。 数据存在于国家、省&日期级别,包含约 368 条记录。****
图片来源:约翰·霍普斯金大学
我的数据来源可靠吗?(探索性数据分析)
分析领域中非常熟悉的术语,涉及构建摘要、检查数据重复、缺失值、关键绩效指标的分布。因为我们有大约 368 条记录,所以我在 Excel 中做了所有的数据验证。以下是我的发现:
- 368 条记录中的 ~66 条记录没有州/省信息
- 19 在中国、Mainland China、马拉西亚、巴西等国家获得的记录没有确诊、死亡或恢复病例的信息
- ****“上次更新”时间馈送不符合数据类型一致性,需要清理,特别是 2020 年 1 月 23 日馈送
- 描述性统计— 由于病例大多局限于中国,观察到较高的标准差或方差。世界其他地方的事件非常少
EDA —数据处理前的原始数据
我们有冠状病毒感染的风险吗?(调查结果)
迄今为止,这种风险仍主要局限在中国,然而,在美国和其他国家也发现了一些人际传播的病例。
泰国、香港、日本、新加坡位居前列,但仅构成 1%的病例 。 确诊病例总数持续上升,但确诊病例的百分比增长至今没有显示出任何线性趋势,而死亡与确诊病例的比率保持平稳。
为了监控实时更新,我创建了一个基于 QlikSense 的仪表盘,带有每日更新连接器,用于分析不同场景的数据。
数据截止到 2020 年 1 月 29 日;冠状病毒对全球的整体影响——特别是中国和 Mainland China
数据截止到 2020 年 1 月 29 日;增长率和死亡与确诊率——中国与世界其他地区
数据从不说谎!但是,我如何验证真相呢?(质量和感觉检查)
任何分析的最大挑战是验证我们报告的数字。通常,数据整理过程很繁琐,需要在数据被使用之前进行大量清理。清理涉及可能会使我们的结果产生偏差的近似和假设。代码错误、数据收集根中的无效信息、仪表板中的系统或后端问题通常可能代表不正确的数字。因此,10K 报告说,通过真实的来源和一点点谷歌搜索可以确保正确的输出。为了验证仪表板上的数字,我查阅了世卫组织网站上的形势报告。以下是我的发现:
- 我的仪表板中报告了约 25000 例确诊病例,比世卫组织报告的高得多,约 17000 例(确诊+疑似+严重+死亡)
- 约 20 个国家& 45 个省至少有一例确诊病例,与世卫组织报告的 16 个国家一致
- 迄今为止,全球报告了约 2.3%的死亡病例和约 1.9%的康复病例
- 确诊病例的增长百分比没有显示任何线性/非线性趋势,随着时间的推移保持平稳,但有突然的峰值
作者简介:高级分析专家和管理顾问,帮助公司通过对组织数据的商业、技术和数学的组合找到各种问题的解决方案。一个数据科学爱好者,在这里分享、学习、贡献;你可以在链接上和我联系;
为什么科学计算对 Julia 如此重要
这种年轻的科学编程语言有什么了不起的?
(图片由作者提供)
介绍
在过去的十年里,科学计算的热潮越来越高涨,随之而来的是程序员在数学计算和数据处理方面有了更多的选择。有一种语言可能不如这个领域的其他语言流行,比如 Python 和 R,它是一种开源的、多范例的、非常动态的语言,叫做 Julia。
Julia 是一种语言,它不仅被创建用于一般用途的应用程序,而且非常适合科学计算和计算分析。虽然这本身意味着 Julia 可能比不是为做这些操作而构建的语言更适合这些应用程序,但该语言也有许多非常好的属性,这使它非常适合科学计算,而不仅仅是为了做这些而构建的。
速度
正如您可能已经预料到的,在科学和统计中使用 Julia 语言的第一个主要好处是速度。语言的速度是可靠的,一致的,最重要的是;可复制。Julia 代码不仅几乎和 C 编程语言一样快,而且写起来也快得令人难以置信。与 C 代码甚至 C++代码相比,编写 Julia 代码的一个巨大优势是,使用 Julia,您可以将方法用作模板。例如,在 C++中,我们可以获取任何类并对其进行子类化——本田思域是轿车,是汽车,是交通工具。在 Julia 中,我们可以对使用多态分派的方法应用同样的“模板化”策略。
所有这些结合在一起,就形成了一种语言,它可以像 C 一样科学地用于相同的应用程序,但它的编写速度和易用性更类似于 Python、Nimrod 或 JavaScript。对于常规的通用应用程序来说,这当然是非常强大的,但它在机器学习、数据分析和科学计算等应用程序中得到了进一步的证明。
句法
Julia 支持的另一件大事是语法表达式。这些允许您将公式归属于标识符,并创建使用参数执行算术的简单且传统的科学方法。当然,有很多地方需要用到这一点 dispatch 本身就是一种语法表达。然而,作为一个例子,我们可以做 f(x ),其中 f(x)等于 x 的阶乘:
f(x) = factorial(x)
虽然这不是 Julia 中的唯一例子,但我们可以通过类似 sigma 的东西更进一步:
∑(x) = sum(x)
当然,我们也可以在表达式中加入算术:
μ(x) = sum(x) / length(x)
浮点精度
去年,我写了一篇文章,预测 Julia 可能是 Scala 的绝佳替代品。我反对使用 Scala 的一个重要理由是缺乏浮点精度,这是任何 Java 后代编程语言都会继承的问题。Julia 可以处理大数据操作,比如 Scala,同时使用不同的类型,比如 BigInt 和 BigFloat,将浮点精度保留到精确的小数。这些测量在科学上非常重要,这取决于你在做什么;小数部分可能意味着有效假设和接受零假设之间的差异。
生态系统
茱莉亚最大的弱点之一就是年轻。当你的编程语言如此新的时候,它很难成为未来的编程语言。然而,尽管它相对年轻,Julia 已经有了很多很棒的科学应用软件包。其中一些包甚至可能没有其他语言的对应部分。
你想用神经网络做机器学习吗?你想做生物信息学,占星学,量子计算,最优化,还是统计绘图?Julia 有可以执行所有这些操作的软件包。虽然它们可能不像其他语言中的一些包那样成熟,但是它们在不断地被改进,并且您总是可以自己提交代码来推进项目。
动态打字
许多科学语言的目标通常是动态类型化和功能化。然而,Julia 将泛型带到了一个全新的层次,它允许语言既具有传统的不可变数据、结构和常量类型的功能,又具有面向对象的功能,可以同时编辑包含在构造类型中的数据。
Julia 不仅是动态类型的,而且这种语言本身在本质上也是非常动态的——它几乎可以做任何你想让它做的事情,只要通过使用多分派作为范例来建立你想要的数据存储和操作方式。
结论
有很多很好的理由让科学程序员尝试 Julia 编程语言。Julia 不仅编译快,编写和开发也超级快。这对于所有使用该语言的程序员来说都是一个巨大的优势,但对于需要不断调整函数以处理新数据并改变在工作中处理特定类型的方式的科学程序员来说,这可能更为重要。
此外,Julia 是一种令人难以置信的动态语言,具有多态调度和语法表达式,允许人们操纵该语言编写类似科学公式的内容。当然,这不仅对科学程序员来说是一件好事,对任何打算使用同一方法对几种不同类型执行多重操作的程序员来说也是如此。与许多竞争对手相比,Julia 在计算分析方面也相当准确,这使它领先于计算高浮点值有问题的语言。
最后,尽管 Julia 的生态系统还很年轻,许多软件包还没有完全成熟,但是目前软件包开发的水平是惊人的。有这么多不同的软件包可用于这么多不同的科学应用,而且随着时间的推移,这只会变得更好。
对于科学编程来说,Julia 确实正在发展成为一种未来使用的奇妙语言。
为什么 Scrum 对数据科学来说很糟糕
越来越多的数据科学团队似乎在追赶 scrum 潮流,但这是个好主意吗?
Scrum 不适合大多数数据科学团队。图片来源
Scrum 是软件工程中一种流行的项目管理方法,最近这种趋势已经延伸到了数据科学。虽然 Scrum 在标准软件工程中的效用仍有争议,但在这里我将详细说明为什么它在数据科学(以及数据工程)中毫无疑问没有一席之地。这并不是说“敏捷”作为一个整体对数据科学有害,而是说 Scrum 的具体原则:冲刺、单一产品所有者、scrum master、每日站立(以及一连串的其他会议)不适合数据科学团队,并最终导致较差的产品。
冲刺/估计
Scrum 通常在两周的冲刺阶段优先创建“可交付成果”。虽然这在软件工程的某些领域可能很有效,但在数据科学领域却非常失败。数据科学本质上是一个科学过程,涉及研究、实验和分析。数据科学项目很难评估,因为很多时候他们要求团队做一些以前没有做过的事情。诚然,数据科学家可能在没有利用数据集或利用所需的特定技术之前就已经设计了类似的模型。这意味着在这个过程中有很多不确定性。像数据质量比预期的差、超参数调优的问题,和/或某项技术不起作用,都可能导致在 sprint 结束时“交付”失败。这意味着点估计通常不是毫无价值的,因为它们基于以前的项目,而这些项目通常与当前正在进行的项目没有相似之处。
此外,即使数据科学家“交付”了 sprint 所需的项目,在许多情况下,他们也可能牺牲了代码质量、模型健壮性或文档,以满足 sprint 的任意结束。我经常听到管理层正面描述两周冲刺中“更紧急”的好处。但是请记住,这种紧迫性也有缺点,主要是数据科学家更容易犯错误和忽略事情。
另一方面,我见过提前完成工作的数据科学家,他们因为害怕在 sprint 结束前无法完成新的故事而犹豫不决。因此,在下一次冲刺之前,他们只是闲坐几天。
但是我们不能分解这些大任务吗?Scrum 的支持者会争辩说,这里的问题不是 Scrum,而是需要更好地分解大任务(很可能需要额外的耗时整理会议)。然而,即使分解大任务也不能消除数据科学的不确定性。例如,像训练 XGBoost 模型和报告结果这样的任务,可能比单次 sprint 花费更长的时间,因为代码中缺少需要编码的值,或者根本不存在需要的数据。是的,这可以通过让之前的故事“探索数据集并填充缺失值”来解决,但是正如我将在第二部分描述的,大多数 PO 缺乏优先处理这些类型故事的专业知识,因为它不能立即完成交付。
不断旋转
与上述观点相关,Scrum 经常导致从一个项目到另一个项目的不断转换。的确,许多人认为旋转是一种“令人满意的”特性,然而这种方向的不断变化经常导致一事无成,有前途的项目被搁置,仅仅是因为它们没有产生直接的可交付成果。在数据科学领域尤其如此,许多项目需要在员工时间和资源上进行长期投资。我见过很多次有前途的项目被终止,因为它们没有足够快地交付性能改进,或者产品所有者只是看到了一些更耀眼的东西,他们想专注于这些东西。
缺乏跨团队授粉
Scrum 经常创造一个可怕的狭隘的焦点,只关注自己团队的冲刺门票,而排除其他一切。它阻碍了数据科学家(或任何人)为公司的其他计划做出贡献;他们的技能可能有所帮助的其他计划。它还倾向于推掉可能影响其他团队的重要问题,除非该团队与产品负责人直接接触。
产品负责人(PO)的角色
Scrum 的另一个关键问题是它将太多的权力放在了 PO 的手中。PO 通常负责积压工作,并确定哪些问题需要优先处理。然而,产品负责人通常对数据科学项目的技术细节了解不多。因此,诸如代码重构或模型性能的进一步分析等必要的工作经常被推到后面。此外,缺乏直接的“进展”可能会导致产品负责人完全离开项目。这并不是说数据科学家不应该定期与利益相关者沟通以确定票证的优先级,而是说,不是在所有会议上都有一个专门的产品负责人来决定任务的优先级,这对团队和产品本身的长期发展都是适得其反的。
日常站立、梳洗和其他时间浪费
我很少见过需要每天开会的团队。队友之间的交流很重要,但是,通常每周两次或三次就足够了。同样,应该鼓励队友在遇到困难或需要帮助时伸出援手。然而,每日站立通常除了微观管理员工之外什么都不做。
梳理(或细化)是 Scrum 团队的一次会议,会上讨论产品待办事项,并准备下一个冲刺计划。
梳理是另一个不必要浪费时间的环节。正如我上面提到的,数据科学中的技术复杂性通常意味着 sprint 的目标常常无法实现,或者只能达到很差的结果。这反过来经常导致更多的梳理会议(或我们过去称之为预梳理)的理由,以便“分解那些大问题”在永无止境的循环中,这些会议继续消耗越来越多的数据科学家的时间。
复古会议是我喜欢的少数几个 scrum 会议之一,然而,在这些会议上的建议通常不会被认真对待。例如,在我职业生涯中参加的几次 sprint 回顾会上,大多数队友都建议不要每天都站着说话,但是 scrum 主管和管理层对这些建议不予考虑,因为“那不是 scrum。”然而,相比之下,建议增加更多的梳理会议几乎总是毫无疑问地颁布。
Scrum 大师
另一个本质上无用的角色是 scrum master。scrum 大师的正式定义是:
scrum master 是团队角色,负责确保团队遵循敏捷价值观和原则,并遵循团队同意使用的流程和实践。“-敏捷联盟
什么…?在实践中,scrum master 扮演了一个非技术性的忙人角色,他强迫团队成员参加前面提到的无意义的会议,拖着 JIRA 卡片到处走,同时宣扬 scrum 将如何带领你的团队走向救赎的准则(例如,每次冲刺交付更多的分数)。
错误的二分法和不真实的 Scrum 论证
最后,Scrum 的支持者经常在将 Scrum 与瀑布和其他旧的项目管理方法进行比较时制造一个稻草人。此外,在许多公司,管理层采取要么全有要么全无的方法。有可能采用 Scrum、敏捷或其他形式的项目管理,而不完全遵循它们。例如,你可以在没有产品负责人、sprints 或 scrum 大师的情况下,利用像故事、史诗等想法。
我经常看到的另一个普遍趋势是人们说“你所经历的不是真正的 Scrum,等等等等实际上是瀑布。如果你有一个更好的产品负责人就好了……”这没有意识到 Scrum 作为一个系统滋生了这些类型的问题。委派一个单一的角色作为产品所有者必然会引起问题。当然,你可以有一个特别好的 PO,他有多年的 DS 经验或了解团队,但这可能不会发生。此外,冲刺的核心是鼓励在任意决定的持续时间结束时疯狂冲刺,以满足“承诺”。它还从根本上假设所有的功都可以被具体估计。Scrum 可能在软件工程领域工作,在那里有非常好定义的问题,这些问题仅仅是微小的变化(尽管即使这样,你也有 POs 和 Scrum masters 的问题)。然而,当存在任何不确定性时(比如在数据科学、数据工程和 Devops 中),Scrum 就会崩溃,导致时间和资源的浪费。
你应该用什么来代替?
这就引出了一个核心问题:你应该如何管理一个数据科学团队。没有单一的答案。我发现有一种基于看板的方法很有效,它没有产品负责人,但是与利益相关者定期讨论(每周或每隔一周)。此外,在制品限制似乎有助于简化流程。就像我上面提到的,一周两次会议(周二/周五)或者其他方式通常都很有效。
然而,这种方法并不适用于所有的团队。这就是为什么,特别是对于数据科学,我建议尝试许多不同的方法来确定什么对您的团队有效。关键是找到一个适合你的团队和利益相关者的系统,而不是一个仅仅迎合上层管理人员关于数据科学家团队应该如何运作的想法的系统。
附加链接
数据科学家为什么要用函数?
让我们看看为什么必须将代码包装在函数中。
重要的事情先来
在开始学习数据科学之前,我就已经是一名软件工程师了。在过去的几年里,它让我理解了一个问题,通常初学者不会理解这个问题:用函数将代码分解成块。
过去几年,数据科学领域受到了大肆宣传,允许它以指数速度增长;随着互联网的出现,现在学习者可以简单地去 YouTube 或 Medium,开始理解和应用一切。
现在,让我们一起来看看这些标准方法之间的主要区别。
由格伦·卡斯滕斯-彼得斯在 Unsplash 上拍摄的照片
我们学习的方式
我不知道你的学习过程,但在我的数据科学课程中,我遇到了一个问题:为了以更简单的方式传递内容,我们的老师通常倾向于避免复杂的事情;如果这会使以后的解释变得非常困难,他们为什么要把代码包装在函数中呢?
我记得,在我的一堂课上,我的老师说了以下的话:
“还记得上节课我们要写的函数吗?没用的,其实是我的错;但我们不会在那上面浪费时间,只要写下面的代码就行了……”
这才是真正的错误!我们没有重写函数,解决问题,让我们知道它是如何工作的,以及函数有多大的好处,而是被教导要避免这样做,仅仅因为一行代码就可以破坏整个项目。他仅仅因为一个问题就忽略了功能系统的整体能力。
使用最简单的方法
今天,我们将深入了解函数的重要性;为了简单起见,我们用一个简单的例子:**发现一个人的身体质量指数。**我们将使用公制版本,因此公式如下:
体重(公斤)/(身高(米) 2)*
图片由雷南·洛里科拍摄——中号
这里,我们使用了一种使用两个“野蛮”数字的方法;这真的很容易做到,对不对?你只需要访问这两个数字,然后把结果插入到新的变量中,真的令人印象深刻。
您可以通过将固定数字转换为变量来增加一些抽象层次,这样我们可以通过简单地修改这个变量来轻松地将数字转换为总和,让我们来看看:
这对初学者来说是一种令人印象深刻的方式,但是让我们检查一下主要问题:修改。现在我们有了一个重量和高度的列表来测量身体质量指数,我们需要将代码包装在一个循环中…一些问题开始出现了。
这里有一些问题,让我们列举一下:
- 这里我只是打印输出,但是假设您需要将结果存储在一个变量上,或者更糟,应用一些修改;一个循环变得越重,我们需要花在它上面的时间就越多;
- 众所周知,随着时间的推移,代码变得陈旧,需要进行一些改进;假设在未来的某个时刻,你的公司决定为超重的人制作额外的标签,你会怎么做?
将数据包装在函数中
我想,现在你开始明白函数对每个人有多重要,但对我们这些数据科学家来说,它变成了处理数据的琐碎部分;
现在让我们修改一下上下文:假设我们已经从一个随机的人那里收集了五个月的身体质量指数结果,并且需要给出不同的建议。首先,让我们看一下数据集。
图片由雷南·洛里科拍摄——中号
正如你可以检查以上没有什么特别的,对不对?只是数据框架上的数据,非常简单;但是 特色工程 怎么样?你如何从数据中获得重要的洞察力?忠告:没有功能,真的很辛苦;正如我之前说过的,函数是数据科学家日常工作中微不足道的一部分,你需要使用它。让我们验证一个与我们的上下文非常匹配的函数:
哇哦。那是什么?冷静下来,先在功能上准确的看一下,没什么难懂的,只是实际体重和过去一个月的差异;现在,我们的数据框架看起来像这样:
哎呀!我忘了去掉身高一栏,这样才有意义……忽略它——雷南·罗利科
在数据帧上追加身体质量指数
还记得我们在本文开始时在循环中添加的代码吗?在处理真正的数据科学项目时,它不是真正抽象的?我们来看看它的功能版本:
正如你所看到的,现在我们能够以一种简单的方式使用特性工程,编写可重用的代码;一天结束时,我们的数据框架看起来像这样:
最后三列是使用函数——雷南·洛里科创建的
奖金
有了这个函数,现在我们能够毫无问题地处理未来的数据;你可以随时调用它来预测任何人的身体质量指数,换句话说,现在你可以不用担心所谓的样板文件了。看看下面的 gif:
作者:雷南·洛里科——中号
别忘了
你浪费在重写代码上的时间越多,你在真正重要的事情上投入的精力就越少;重用代码!数据科学领域的大数据工作,这意味着每一秒钟都取决于性能。
就这样,伙计们!
我希望你喜欢这个内容,并能熟练运用你的新知识!如果你想每天都学习有趣的东西,我很乐意与你分享精彩的内容!
另外,你可以在 Github 上查看我的个人资料。所有的关键概念都可以学习和重用!
UI/UX 设计师。夜间跨平台开发者。还有,我讲数据科学和人工智能。解散…
www.github.com](https://www.github.com/renfelo)
我为什么要信任一个人工智能系统?
你如何区分人工智能系统的可解释性、可解释性和透明性?这些术语和信任有什么关系?
伯纳德·赫曼特在 Unsplash 上的照片
在过去的几年里,人工智能系统已经变得无处不在,并越来越多地影响着我们的日常生活。使用搜索引擎,跟随电影推荐或拍照被强大的新算法修正。这些算法也是决定我的信用度,我获得医疗保健的机会,甚至我是否必须进监狱。虽然这些算法正越来越多地影响我们与世界互动的方式以及我们被视为公民的方式,但我们可能想提出一个问题,即我们是否应该信任这些系统。
在过去,科学发明要经过几个阶段才能得到值得信赖的产品。例如,玛丽·居里(Marie Curie)或威廉·伦琴(Wilhelm Rö ntgen)等科学家对放射性元素和一般辐射进行了实验,并取得了突破性的发现。像莱特兄弟这样的早期飞机先驱在奥托·李林塔尔这样的工程师的工作基础上开发了第一架飞行器,这些工程师研究了空气动力学的基本原理,帮助我们了解如何开发飞行器。在人们信任产品之前,商业应用中的安全使用(如 x 光或商用飞机)通常需要长达十年的实验和法规的引入。人工智能系统似乎大多跳过了这一重要的开发步骤,但越来越多的人询问人工智能系统和隐含偏见、隐私或安全问题。
幸运的是,在过去的几年里,人们一直在热烈讨论如何让人工智能系统更加值得信赖,答案往往是它们必须更加透明。然而,在人工智能系统的环境中,透明意味着什么?我们希望每一行代码都是开源的吗?非专家真的能理解像卷积神经网络(CNN)和变压器这样的算法是做什么的吗?机器学习专家能否解释主要的神经网络技术是做什么的,以及这些系统是如何做出决定的?
在这篇文章中,我想探讨三个术语,它们将帮助消费者、人工智能开发者和人工智能系统提供商在人工智能系统所做的事情中灌输信任。我想提供三个不同的术语的清晰定义:(1)可解释性,(2)可解释性,以及(3)透明性。它们都通过另一个重要的概念联系在一起:信任。
可解释性
当人工智能工程师使用监督机器学习方法时,她基于训练数据创建 ML 模型。为了改进模型,已经开发了特征工程技术来选择最具预测性的特征。自从深度学习出现以来,这一步经常被忽略,因为网络中的隐藏层通常可以被视为肩负着特征工程任务的工作。例如,卷积神经网络的不同层可以通过学习如何识别图片的部分,如边缘、形状或甚至片段(如人脸的部分),来识别视觉识别任务的重要特征。
不同的层关注不同的特性(来自:https://developer . NVIDIA . com/discover/artificial-neural-network)
然而,ML 模型的工程师可能不会检查这些层,而只是简单地运行网络,而不能解释网络实际学到了什么。这可能会导致不可预见的后果,正如 Sameer Singh 和他的同事们的工作所显示的。他们研究了似乎为给定任务(例如,文本分类、视觉识别)提供高准确度的分类器,但是分类器可能没有出于正确的原因而学习了决策边界。如果某个特定特征恰好与分类器必须学习的类别高度相关,就会发生这种情况。这样的模型会做出正确的预测,但不能很好地概括。
例如,关于不同流行主题的帖子的文本分类系统可以包含写帖子的人的姓名。如果有一个非常多产的作家总是写同一个主题,这个名字可能会成为这个特定类别的一个很好的预测。然而,一旦作者选择了不同的主题,这个模型就会失效。由于使用模型作为黑盒的这种缺陷, Singh 等人发明了一种称为局部可解释模型不可知解释(LIME)的系统,该系统允许 ML 模型开发者更仔细地查看用于具体示例分类的特征。
LIME 是一个与模型无关的工具,用于解释分类器针对给定示例做出的决策。该工具允许开发人员通过局部近似黑盒模型来检查为什么一个文本被标记为某种方式。它关闭实例的某些部分(例如,使图片的某些部分变灰或省略文字)。然后,LIME 基于这些所谓的扰动实例创建了一个简单的回归模型。线性模型更容易解释,因为你可以很快看出哪些变量具有很高的权重。
为错误的原因预测正确的话题(来源:)https://www . oreilly . com/content/introduction-to-local-interpretable-model-agnostic-explaining-lime/
来自 20 个新闻组数据集的给定文本分类示例显示了单词 posting 如何对这篇文章的正确分类产生重大影响。然而,令牌帖子出现在电子邮件标题中,实际上与帖子中讨论的主题无关,分类器突然变得不太可信。
Singh 等人还对受试者进行了一些实验,对他们是否信任分类器的结果进行评级。他们为 20 新闻组任务创建了两个分类器:一个使用所有的标记,包括误导性的标记,如发帖,另一个使用一组干净的标记,以确保分类器更好地泛化。使用 Mechanical Turk,他们询问非人工智能专家,在给定 LIME 生成的解释的情况下,他们更信任哪个分类器。他们发现,受试者能够根据石灰产生的描述来区分分类器。
如果特性名称是描述性的,并且能够以易于用户使用的形式呈现给用户,那么 LIME 创建了可理解的描述。作者使用解释这一术语,因为即使对于机器学习的非专家来说,图片片段或文字也是可以理解的。然而,如果特征需要语言学专家知识(解析树的 c-command )或特定领域知识,那么将更难以将 LIME 的输出作为解释呈现给 AI 系统的用户。
因为 LIME 的输出与机器学习算法使用的特征密切相关,LIME 的描述对 ML 工程师很有用,可以更好地解释她正在开发的模型的内部工作方式(有关类似模型的相当全面的概述,请参见 DipanjanSarkar 的 文章)。人工智能系统的用户也可能从这些描述中受益,但它仍然缺乏对模型为什么选择某个标签的解释。LIME 或类似系统没有提供自然语言描述来证明标签的选择是正确的。
可解释性
诚然,可解释人工智能的方法经常与简单解释 ML 模型工作方式的方法重叠,决策树等方法经常被用作可解释人工智能的标准例子。我对可解释性的定义更加严格,可能超出了当前方法所能提供的范围,但我认为可解释性需要基于自然语言描述,就像人类在人工智能系统给出自动生成的摘要、分类结果或问题答案时会提供的那样。
各种各样的研究项目正在解决这样一个问题,即如何向用户提供对人工智能系统的更好的解释。在 DARPA 资助的名为可解释的人工智能(XAI)的项目下,人们可以找到几个研究如何更好地解释用户在查看 ML 算法输出时可能产生的问题的倡议。这些答案通常对军事和安全应用至关重要,对监控运输、支持医疗应用或法律研究的系统也是如此。
吉尔平等人(2018) 最近对可解释性方法的文献综述总结了以前的方法,分为三类:(1)处理,(2)表征,(3)解释产生。类别处理和表示包括代理方法,如 LIME,但也包括决策树,以及对神经元层在神经网络中所起作用的分析,类似于我所说的可解释性。第三类工作包含脚本对话或基于注意力的方法来自动产生解释。
当前的解释生成方法通常集中在多模态系统上,如生成解释和识别图片中用于活动识别任务(ACT-X)和视觉问题回答任务(VQA-X)的区域。 Huk Park et al. (2018) 例如,开发了生成口头辩护和突出显示用于视觉识别任务的图片中的区域的方法。
Huk Park 等人(2018 年)开发了一个提供多模态解释的指向和调整模型
生成叙事是向不一定是 ML 专家的用户解释模型输出的第一步。人工智能系统的用户应该能够向系统提问,以便真正地与输出进行交互。特别是,询问为什么问题和反事实对于使人工智能系统对用户更加透明很重要。
透明度
AI 系统提供商主要负责让 AI 系统更加透明。透明度是增加对人工智能系统信任的另一种方式,因为它允许用户“看引擎盖下”。然而,这并不意味着每个系统都需要开源或者训练数据必须公开。尽管学术界强烈推动这样做,但想要销售基于人工智能系统的产品的公司无法做到这一点。
然而,公司可以通过识别人工智能系统的开发使用了哪些数据源,通过合并结果显示的置信区间来显示更多的透明度(即,我 97%确定这张照片显示的是一个苹果)。当他们提供图像识别或文本分类等服务时,他们还应该根据他们如何处理来自少数群体的数据或预期的输入格式来确定能力的界限。
米切尔等人的作品。指出在交付基于人工智能的系统时包括模型卡。模型卡记录了用户、软件开发人员、政策制定者以及受影响的个人可能遇到的一系列重要问题。该列表包括以下一些问题:
- 你能提供模型的基本信息吗?(模型是谁开发的?用了什么算法?目前使用的是哪个版本?什么时候训练的?)
- 预期用途是什么?(主要的预期用途和用户是什么?哪些用法超出范围?)
- 使用了哪些指标?(报告了哪些模型性能指标,为什么?如果使用决策阈值,它们是什么,为什么?)
- 该模型的伦理含义是什么?(例如,模型是否使用任何敏感数据(例如,受保护的类)?模型使用中可能存在哪些风险?)
其他行业在遵循通常通过运营和安全审计强制执行的法规方面付出了大量努力。例如,航空业受到严格管制,以确保飞机安全运行。新药的开发受到临床试验几个阶段的指导。心理学中的人体实验需要得到机构审查委员会的批准,以确保参与者不会受到任何伤害。
主动描述人工智能系统的数据集、方法和限制,对于向科技公司目前正在开发的此类系统灌输信任至关重要。更具体地说,解释可以帮助用户更好地理解机器学习模型为什么做出特定的决定,而增加模型的可解释性的方法可以帮助模型开发者产生更好的模型。
相信我!
人工智能系统的发展已经达到了历史上的一个关键时刻,就像炼金术变成了化学,或者第一架飞行器变成了商用飞机。与描述空气动力学的周期系统和数学方法类似,AI 正在快速开发数学方法,以驱动越来越多的高级系统的进一步开发。在人工智能系统中加强可解释性、可解释性和透明度将增加对人工智能系统的整体信任,类似于安全设备和法规如何导致更安全的化学产品和飞机。
为什么您应该关心日志记录?
从 Python 初学者提升到中级
由 Ales Krivec 在 Unsplash 上拍摄的照片
作为一个初学者,我们经常发现我们更倾向于写代码来完成工作,而不是如何完成工作。很少考虑整体应用程序的设计和应该遵循的最佳实践。虽然这对初学者来说没问题,但随着我们在编程之旅中不断前进,在将代码投入生产之前,我们还需要考虑应用程序的其他方面。正确的日志记录是将中级或高级开发人员与新手区分开来的一个方面。在本文中,我们将学习 Python 的’Logging’模块的基础知识。值得注意的是,尽管我们展示的是 Python 示例,但整体概念并不仅限于 Python,还可以应用于其他语言。
伐木及其重要性
作为 noobs,我们总是使用强大的 print() 函数在控制台中打印东西,也许是为了调试或显示中间变量和输出值。这在编码阶段很好,但是当你的应用程序在生产环境中运行时,它们需要适当的跟踪监控。日志记录是在应用程序执行不同任务或事件时提供有关应用程序信息的过程。日志记录提供了以下好处:
**问题诊断:**假设用户报告了一个 bug,您想要在您的开发环境中复制这个场景。现在,如果您已经在日志文件中记录了用户活动,那么引用这些日志并在非生产环境中复制它以供进一步分析可能会更容易。
bugs——作者 Xkcd
**分析:**通过分析网站日志,人们可以获得更多关于网站高峰时间的信息,或者流量来自哪个地区,或者用户在特定页面上花了多少时间等等。通过在日志文件中记录更多数据,您可以进一步分析用户行为,这可能会改善用户的整体体验。
大学网站—作者 Xkcd
我应该在日志中包含什么?
要记录的信息是主观的,取决于特定应用程序的上下文。但是,建议至少包括以下信息:
时:记录事件的时间戳
谁:应用名或用户名
其中:事件的上下文(登录模块、文件上传模块等。)
What :活动类型或错误类别(数据库错误、文件 I/O 等。)
切记不要在日志中包含任何敏感信息。
日志记录级别
Python 为此提供了一个内置模块,我们将在下面探讨。在进入代码之前,让我们看看这个包提供的不同级别的日志记录。“日志记录级别”主要讨论我们的日志中包含的信息类型。有 5 个这样的级别:
来源:Python 官方文档
根据我们的具体需求,我们可以选择一个或多个日志记录级别。它们都有一个与之相关联的数值。通常,我们选择这些级别中的一个,大于或等于所选日志级别的所有其他级别都会被捕获到我们的日志文件中。让我们借助一个例子来看看这一点。
来源:Python 官方文档
在下面的代码片段中,在第 1–7 行之间,我们正在导入 python 日志 模块,创建一个名为“ MY_FIRST_logger ”的 LOGGER 对象,并将日志记录级别设置为“ 警告 ”。这告诉程序不要捕获低于“警告”级别的日志(即调试&信息)。
从第 9–13 行开始,我们简单地指定了一个文件处理程序,并将其附加到我们的 logger 对象上。
在第 15–19 行,我们向上面列出的所有不同的日志记录级别发送消息。
运行这段代码后,让我们看看日志文件(my_log1.log)的内容。如下所示,它只打印“警告”及以上级别的记录。如果我们将日志记录级别设置为“DEBUG ”,那么所有的行都会出现在日志文件中。
my_log1.log 文件的内容(来源:作者)
可以使用参数 logger.level 检查记录器的当前级别。
***print(logger.level)
30***
接下来,让我们将这个 logger 函数添加到一个执行两个整数的除法并返回余数的程序中。我们还将在日志记录中添加更多信息,如时间戳、上下文等。这里使用的日志记录只是为了说明,可能不一定相关。在异常捕获块中添加这些日志命令是一种常见的做法,这样可以使日志更加全面。
函数“division”用不同的参数调用了 3 次。让我们检查一下日志文件在执行后的样子。
my_log2.log 文件的内容(来源:作者)
如上所述,由于除数为零,对该函数的第三次调用导致了一个 ZeroDivisionError 错误。查看日志,我们可以知道程序未能完全执行(因为计算了“余数”因故障未打印)。但是,因为我们在日志文件中记录了输入参数,所以我们可以从一个合理的起点来判断是什么导致了这个问题,并从那里开始着手。很明显这是一个过于简化的问题,但是对于一个有几十种方法的更复杂的应用程序,这是我们必须考虑的。
现在,我们可以根据我们的具体需求选择一个或多个上述级别,并且基于所选的日志记录级别,它们将显示在日志文件中。通常在生产中,它被设置为 info 及以上。
在结论中,我们探讨了在我们的开发过程中使用日志模块背后的动机。我们还浏览了不同级别的日志记录,以及如何在 Python 代码中实现它们。
非常感谢您的阅读,我希望这篇文章能让您对在您的下一个项目中使用 loggers 有一个基本的了解和认识。
您可能还喜欢:
使用 Python OpenCV 在图像和视频中检测人脸的介绍。
towardsdatascience.com](/face-detection-in-10-lines-for-beginners-1787aa1d9127) [## 使用 Streamlit-Python 向您的仪表盘添加动画图表
利用 ATP 网球排名数据对比网球四大
towardsdatascience.com](/add-animated-charts-to-your-dashboards-with-streamlit-python-f41863f1ef7c)
参考资料和进一步阅读:
[## 日志 HOWTO - Python 3.8.5 文档
日志记录是跟踪某些软件运行时发生的事件的一种方式。该软件的开发人员添加了日志调用…
docs.python.org](https://docs.python.org/3/howto/logging.html)*
为什么要关心粒子物理?
从万维网到尖端人工智能,没有它我们将一事无成
阿特拉斯粒子探测器。欧洲核子研究中心提供
W 惶然坐在火车上,前往工作。我正在研究一篇研究论文,而你却在上下打量我。
“你为什么会成为粒子物理学家?”
“因为我喜欢,”我直截了当地回答。
是的,但是——你的工作是由政府资助的。“所以很明显,你所做的事情应该会引起公众的兴趣,”
是的,当然。科学总是公众感兴趣的。这是因为对世界如何运转感到好奇是人类的天性。科学是找到答案的最佳途径,”
当然,但是我们不应该用科学来解决更大的问题吗?还有比搞笑小颗粒更重要的东西!癌症、人道主义危机、战争……
今天的科学是明天的技术
“你是对的,”我承认。当然,这些问题更为紧迫,我们绝对应该资助科学家和组织去解决它们。
但是我们也应该资助粒子物理学家。想想看:爱因斯坦在一个多世纪前发表了他的相对论。然而,如果没有它,我们今天就不会有 GPS,”
真的吗?我不知道。“这是为什么,”
嗯,全球定位系统和绕地球轨道运行的卫星一起工作。你在地球上的位置是根据这些卫星到你的设备的距离计算出来的。但是你需要考虑到它们绕地球运行的速度非常快。爱因斯坦的理论预测,对于快速移动的物体,时间会走得快一点。如果我们不考虑这一点,全球定位系统会非常不准确,你几乎无法使用它。
GPS 就像太空中的大钟!而且它的时间跑得比我们快……大英百科全书解释了它是如何工作的。
www.britannica.com](https://www.britannica.com/video/185396/GPS-satellites-relativity)
哦,哇。所以,如果政府没有资助爱因斯坦做他的理论,我们还会在没有现在位置的情况下使用地图吗?
事实上,无论如何你都会有全球定位系统。爱因斯坦是一个例外——他在做专利律师的时候,利用业余时间进行物理研究。他没有得到任何发展自己理论的资金。
看到了吗?“你已经过时了!”你脱口而出,脸上带着羞怯的笑容。
哦,不!没有粒子物理学的资助,我们就不会有万维网。
“什么?”
你没听错。万维网是由欧洲粒子物理研究所的粒子物理学家发明的。
万维网的起源,以及它的发明者蒂姆·伯纳斯·李的最初提议
home.cern](https://home.cern/science/computing/birth-web/short-history-web)
那些家伙一定是天才。“但是他们为什么不专注于他们的粒子呢?”
“你看,”我开始说道,“在欧洲粒子物理研究所,每年都会产生大量的数据。许多研究人员只在欧洲粒子物理研究所呆一两年,然后继续在他们自己的实验室从事他们的项目。因此,科学家们开发了一个系统,可以从任何地方获取信息。瞧,万维网诞生了!
哇哦。“我不知道。”
没有粒子物理学家的贡献,今天的互联网将是不可想象的。克里斯蒂娜@ wocintechchat.com 在 Unsplash 上的照片
我微笑。是的,如果三十年前没有发生这种事情,今天的世界可能会是一个非常不同的地方。
好的,但那是不久前的事了。那么为什么今天人们还在那里工作呢?“我们不是在浪费钱吗,”
嗯,首先,我们对基本粒子还是很好奇的。这是主要的动机。希格斯玻色子 已经被发现,但是仍然有很多我们想要解开的谜团。
另外,这个叫做万维网的粒子物理学工具得到了广泛的应用。CERN 内部和周围不断开发新的工具。为什么这些不能对公众有用呢?
“那会是什么样的工具,”
比如机器学习和人工智能。粒子物理学家是这些技术的最早开发者和采用者之一。他们帮助理解他们收集的大量数据。
[## AI 你准备好了吗?数据驱动投资者的 Rhea Moutafis
正如我们今天所知,人工智能正在改变生活
medium.com](https://medium.com/datadriveninvestor/are-you-ready-for-ai-5301640e6c0d)
这么说,粒子物理学是一门包含大量数据的科学?
没错。这就是为什么欧洲粒子物理研究所和世界各地的粒子物理学家在开发这些算法时处于最前沿。这并不意味着他们是唯一的参与者——还有许多计算机科学家、数据工程师和其他相关人员。
但是粒子物理学家确实在帮助推进这个领域,因为他们需要这些工具来处理粒子数据。“我们仍处于起步阶段——但你可以期待人工智能以类似于万维网的方式改变世界。”
我们会看到这是否会发生…说到技术革命,还有量子计算。这在未来也很重要,对吗?粒子物理学家也研究这个吗?
它可能会改变我们今天所知的世界
medium.com](https://medium.com/@rheamoutafis/is-the-era-of-quantum-internet-upon-us-c1e2c73382f0)
没那么多。量子物理学与粒子物理学有很多联系,但它们并不相同。与此同时,量子计算,尤其是量子互联网,可能会彻底改变整个科学计算。粒子物理学家可以从中受益,就像许多其他科学分支一样。谁知道这会带来什么样的技术和社会进步呢?
“是啊,谁知道呢,”你回答,凝视窗外。听起来确实很酷。粒子物理学似乎在每个人的生活中扮演着相当重要的角色,但以你意想不到的方式。
“你完全正确,”我回答道,当我们走向车门准备下车时,我心满意足地微笑着。
你必须、应该和不应该使用乳胶的理由
最好的排版系统是开放的、免费的,它已经存在了 30 多年
阿玛多·洛雷罗在 Unsplash 上的照片
如果你必须写下一份文件,你会运行你默认的文本处理器(可能是 MS Word ),甚至不考虑任何其他选项。这款处理器可能满足您的所有需求。我敢说 95%的用户都不知道什么是 LaTeX。这完全没问题。然而,很可惜。因为 LaTeX 是有史以来最成功、最令人惊叹的自由软件项目之一。它已经存在了三十多年,有两位图灵奖获得者直接参与了它的设计和实现。乳胶一定有特别之处。希望在读完这篇文章后,你会考虑尝试一下。
我不会展示如何使用 LaTeX,因为周围有很多精彩的教程。我只会列举你什么时候必须,应该,不应该使用 LaTeX。
一点历史
唐纳德·克努特(1974 年图灵奖)于 1968 年出版了他的第一版计算机编程的艺术,当时他 30 岁。那时,书籍是使用 monotype 设置印刷的。Knuth 对最终的印刷很满意。然而,1976 年的第二版不得不再次排版,因为原来的字体已经不再可用。当克努特收到校样时,他很失望。他发现他们低人一等。
他致力于设计他的排版系统。我们说的是七十年代末,当时数字排版本身就是一个有待解决的问题。史蒂夫·乔布斯本人为这个话题做出了贡献。Knuth 计划在 1978 年休假一年来完成这个项目。他低估了这项任务的复杂性。最终的解决方案直到 1989 年才准备好!Knuth 将这种语言称为 TeX,每个字母都是大写的希腊字母 tau τ、epsilon ε和 chi χ。特克斯是τέχνη (techne)的缩写,意思是“艺术”和“工艺”。克努特一直坚持你应该把它读成/tɛk/.
当莱斯利·兰波特(2013 年图灵奖)开始使用 Knuth 的 TeX 时,他开始为自己的目的编写一些宏。LaTeX 只是 LAmport 的 TeX,它是 TeX 之上的一组宏,使之更容易。这是我们今天的主要收藏。
乳胶可以做什么?
有了 LaTeX,你可以不费吹灰之力就拥有高质量的排版(我认为是最好的)文档。因为它是免费的。不费吹灰之力。是的,毫不费力。这个索赔是巨大的。每个人都可以用一个免费的、几乎可以在任何地方运行的软件,写出纯文本和使用标记来获得专业的结果。这就是 LaTeX 成为学术界和工程界标准的原因。
这听起来很棒……但是正如你从这篇文章的标题中可以预料到的,它有一些缺点。最主要的是学习曲线。LaTeX 不是一个所见即所得的解决方案,需要一个学习期。让我给你一些指导,告诉你什么时候必须、应该和不应该使用它。当然这一切都来自于我使用 LaTeX 超过 15 年后的观点和经验。
什么时候必须使用乳胶?
- 你是在学术界,尤其是在任何 干 学科。在这种情况下,手稿就是一切。内容真的很重要,需要大量的工作。在博士论文的情况下,你必须考虑花一些时间学习 LaTeX,以使你的最终结果有所不同。我看过用 MS Word 写的博士手稿,我不得不说,不知何故(对我来说),它降低了手稿的价值。
- 你有丰富的参考书目。专业著作可能会管理数百篇引文。引文必须有一致的格式,否则你的参考书目部分会很乱。为了节省时间,必须搭配 LaTex + BibTeX。用引用条目填充 BibTex 文件,标记它们,并使用 latex 文档中的标记作为参考。编译器会完成剩下的工作。我知道有针对 MS Word 和其他文本处理器的插件和解决方案。但是记住,三十年了,这个问题已经用明文解决了。从我的经验来看,这些插件很麻烦。
- 您正在使用公式。插件可以轻松管理公式,如:
其他公式如
可能写不出来。管理数学公式的每个像样的解决方案都是基于 LaTeX 的。为什么不直接用?
- 你希望数字尽可能使用最好的质量。诸如 SVG 之类的格式不能用于您的文本处理器。使用 LaTeX,您可以生成嵌入了 SVG 图形的 PDF 文档。没有多少解决方案能提供这样的东西。
- 你想要免费的解决方案。
- 你想让它向前兼容。乳胶已经存在三十多年了。我们可以对旧文件进行排版,看看它们原本是什么样的。
- 一个入口点,多种输出格式。因为 LaTeX 是一个排版系统,你可以得到 DVI、PDF、HTML、XML 等格式的输出。只有一份文件。
- 忘记文档布局。LaTeX 有点像 HTML + CSS。一旦你定义了文档结构,你就使用了一种标记语言,编译器会帮你把所有的东西都联系起来。不再用双倍行距而不是一倍行距分隔段落。
什么时候应该使用乳胶?
- 您是 LaTeX 新手,您必须开始一个新项目,并且您正在寻找它提供的所有优势。
- 您希望您的文档在众多文档中脱颖而出。你会的。LaTeX outcomes 有一个人人都欣赏的独特品质。
- 你正在考虑写一本书、一篇文章或一份手稿,也许会自己出版。随着亚马逊自助出版等平台的采用,这是一种常见的情况。有了 LaTeX,你可以从原始文本到高质量文本。epub,。mobi 电子书文件。
什么时候不应该使用乳胶?
- 您的文档已经以另一种格式编写。内容物很可能容易被转移到乳胶中。然而,文档的布局可能很难得到。
- 你在做协同工作,你是唯一的乳胶从业者。不要进入乳胶。想都别想。我的经验是,在开始一个共享的 LaTeX 项目后,你的同事会抱怨,你最终会在截止日期前两个小时将所有东西都转移到一个普遍理解的格式。
- 你的文档布局对你来说意味着一切。你正在考虑一个迷人的打印,有 30 种字体,文本行穿过正文,图像在文档的每个可能的地方,等等。那么很可能 LaTeX 不是你的候选人。想想 QuarkXPress。
当人们抱怨乳胶时,他们会说…
- 难。LaTeX 的学习曲线比 MS 要陡峭得多,这是事实。然而,获得一个基本的 LaTeX(文本、图形、标题、表格)文档并不困难。外面有一百万个例子。复杂性来自于理解 LaTeX 使用的概念,比如浮动对象。
- 我看不到我在做什么。LaTeX 不是所见即所得的解决方案。你必须编译然后检查输出。幸运的是,有一些程序如 TeXMaker 提供了更好的用户体验。
- 数字没有出现在我想要的地方。这是一个关于 LaTeX 中人物放置工作方式的经典误解。LaTeX 会计算您的图形在文档中的最佳位置。然而,可以使用调节器改变位置。
- 我不能轻易改变我的文档的布局。这是真的。如果你想建立自己的文档结构,你需要对宏有更深的理解。有一个很好的社区可以帮助你。然而,这可能需要一些时间和努力。幸运的是,已经有大量定义的模板可供使用。
而现在…
如果你已经读到这里,谢谢。我可能引起了你的兴趣。如果是这样,你可以从这里开始学习一些基础知识,如果你需要一些帮助,请查看 StackExchange 。
你呢?你使用 LaTeX 的体验是怎样的?你对新手或有经验的用户有什么建议?
本文的第一个版本发表在:https://jmtirado . net/why-you-should-learn-latex-or-at-that-it-a-try/