原文:TowardsDataScience Blog
协议:CC BY-NC-SA 4.0
10 篇必读的机器学习文章(2020 年 4 月—5 月)
原文:https://towardsdatascience.com/10-must-read-machine-learning-articles-april-may-2020-ddd851?source=collection_archive---------51-----------------------
作者图片
在机器学习方面已经完成了许多令人惊叹的工作,以及 2020 年 4 月和 5 月发布的有趣的数据集。在这篇文章中,我们将浏览一些最大的人工智能新闻、研究论文和来自世界上一些最大的科技公司的公开数据集,包括微软、脸书、谷歌和优步。
无论您认为自己是数据科学初学者、中级还是专家,无论您的技能水平如何,都可以从下面的文章中获得有趣的信息。
机器学习新闻
- 开源 BiT:探索大规模计算机视觉前期训练
从谷歌人工智能博客中,研究人员介绍了大转移(BiT):通用视觉表示学习,这是一种在大规模图像数据集上进行预训练的新方法。
图片来自 ai.googleblog.com
模型和数据集是开源的,文章中有下载链接。有趣的是,该团队表示,仅在更大的数据集上进行预训练并不总是会导致更高的模型准确性。为了从较大数据集的预训练中获得最大收益,必须扩展较小的模型架构,必须增加计算预算,以及更长的训练时间。
2.优步放松其人工智能实验室:看看他们的一些顶级作品
许多公司受到了新冠肺炎危机的负面影响,优步的拼车服务无疑受到了很大冲击。由于这些挫折,该公司已经决定关闭他们的人工智能实验室。他们发表了官方声明:
“鉴于必要的成本削减和对核心的日益关注,我们决定逐步关闭孵化器和人工智能实验室,以寻求优步工厂的战略替代方案。”
本文通过回顾优步人工智能团队所做的一些最好的工作,向该公司的人工智能实验室致敬,包括人工智能生成算法、POET(成对的开放式开拓者)、PLATO 平台等等。
3.物体是揭示视觉和语言之间世界的秘密钥匙
图片来自microsoft.com
这篇文章来自微软研究博客,解释了视觉和语言预训练(VLP)的巨大进步及其在图像-文本对数据上训练大型模型的潜力。在文章中,研究团队还引入了 Oscar(对象语义对齐预训练),以展示如何将对象用作锚点,以绘制图像和文本之间的语义连接。
4.介绍 Holopix50k:图像超分辨率的新基准数据集
图像超分辨率有可能改善虚拟现实、视频监控和许多其他技术。
图片来自 leiainc.com
为了给研究人员提供高质量的图像超分辨率和深度估计训练数据,Leia Inc .最近发布了 Holopix50k,这是世界上最大的“野外”立体图像对数据集。
5.亚马逊科学家作者热门深度学习书籍
作为世界上最大的科技公司之一,亚马逊一直处于将机器学习应用于企业目的的前沿。通过 Amazon SageMaker,他们为数据科学家提供了一个大规模构建和部署 ML 模型的平台。现在,亚马逊一些最伟大的数据科学家发布了一本名为《深入学习》的开源书籍。这本书教授深度学习背后的思想、数学和代码。此外,作者计划根据用户的评论和反馈不断更新这本书。
6.脸书发布仇恨迷因数据集并发起挑战
图片经由ai.facebook.com
脸书的人工智能团队建立并开源了一个新的数据集,以帮助研究人员创建检测仇恨言论的模型。“仇恨迷因”数据集有超过 10,000 个多模态示例。除了数据集,他们还发起了一项名为“仇恨迷因挑战”的比赛,由 DrivenData 主办,总奖金为 10 万美。
如果你对仇恨言论检测感兴趣,你也应该看看这篇文章重点介绍了脸书·艾在该领域的进展。
机器学习指南和专题文章
7.如何用 WSL 使用不准确的数据进行机器学习
对于预算较少的独立研究人员和团队来说,很难获得大量的训练数据。解决这个问题的一个方法是使用更容易收集的低质量注释。
图片来自 lionbridge.ai
在本文中,作者通过几种基于图像的数据的弱监督学习(WSL)技术,解释了利用弱注释进行机器学习的方法。
8.人工智能如何改变谷歌地图的故事
谷歌地图在过去二十年里发展迅猛,用户界面不断发展,对现有的设计和功能进行了调整。这篇文章讲述了谷歌地图如何发展的故事,特别是谷歌如何使用机器学习来改善他们的平台。
此外,文章还解释了谷歌为使地图平台达到今天的水平而进行的所有收购,以及谷歌地图的未来扩张计划。
9.如何使用数据增强技术将图像数据集放大 10 倍
该指南由 AI Summer 的创始人撰写,解释了什么是数据增强,以及如何使用数据增强来增加影像数据集大小的指南和提示。从基本的图像操作到基于 GAN 的数据增强,本指南为该领域的初学者和中间用户提供了有趣的信息。
10.疫情正在清空呼叫中心,人工智能聊天机器人正在涌入
由于许多国家实行隔离和封锁,许多公司被迫关闭了大部分呼叫中心。然而,对于政府组织来说,在疫情期间,来电者的数量增加了,大多数团队没有人员来处理增加的数量。
这篇文章讲述了纽约州 Ostego 县的 IT 主管如何实现 IBM Watson chatbot 来处理新冠肺炎的查询,尽管大量裁员。
新冠肺炎文章和资源
已经发布了大量关于新冠肺炎的文章,所以我们没有在上面的章节中包括任何与 COVID 相关的文章。然而,如果你正在寻找这样的文章或新冠肺炎数据集,下面是一些可能对你有用的资源。
- 新冠肺炎开发者资源中心
- 全球冠状病毒数据集库
- 人工智能技术如何对抗冠状病毒
希望您从上面的一篇文章中学到了一些新的东西,可以应用到您自己的项目中。尽管由于新冠肺炎,全球遭遇挫折,但我们已经看到在 2020 年初,在机器学习方面做了很多伟大的工作。在今年剩下的时间里,我们可能会看到更多令人惊叹的文章。
为了跟上人工智能和机器学习的所有最新动态,请务必在 Twitter 和 Medium 上关注我。
10 篇必读的机器学习文章(2020 年 3 月)
原文:https://towardsdatascience.com/10-must-read-machine-learning-articles-march-2020-80da9c?source=collection_archive---------8-----------------------
虽然新冠肺炎占据了全世界的头条,但值得注意的是,在机器学习的世界里,许多公司都在照常运营。当然,现在几乎每个人都采取了一些措施来对抗冠状病毒的传播。然而,许多研究人员正在努力工作,以保持人工智能世界的进步和创新。
这个列表将展示机器学习领域最近的一些工作和发现,以及初学者和中级数据科学家的指南和资源。
机器学习新闻
1.谷歌推出云人工智能平台管道 —本文解释了谷歌云人工智能平台的测试版,以帮助机器学习开发。该公司将他们的平台描述为一个简单且易于安装的机器学习工作流环境。
2.人工智能植入物让截肢者能够控制假肢手——来自《麻省理工科技评论》,这篇文章概述了一项惊人的研究,旨在帮助截肢者更好地控制假肢的运动。保罗·塞德娜教授(该研究的共同领导者)声称,在最初的校准后,“思想和行动之间没有差距。”
3.人工智能正在改变视频游戏行业——一个增强和合成媒体的时代——正如标题所示,这篇文章解释了人工智能和游戏行业的现状。它详细介绍了人工智能中对改善视频游戏具有巨大潜力的领域,如增强现实和生成式人工智能模型。
4.人工智能的突破可能会显著改善 Oculus Quest——作为虚拟现实消费市场的先驱之一,Oculus 自 2014 年被脸书收购以来已经显著增长。他们的增长很大一部分可能要归功于 Oculus Quest,这是有史以来第一款无绳独立 VR 游戏系统。这篇文章解释了人工智能的突破如何在不改变硬件的情况下将 Quest 的图形功能提高 67%。
ML 指南和专题文章
5.FastAI 简介 —在本指南中,数据科学学生达里奥·拉德契奇对 Fast AI 进行了很好的概述,这是一个广泛用于机器学习的库。本指南详细解释了如何使用 Fast AI 处理 MNIST 数据集,一步一步地介绍了整个过程。
6.CNN 和 RNN 有什么区别? —本机器学习基础知识指南对卷积神经网络和递归神经网络进行了简要介绍。它解释了如何在计算机视觉和 NLP 中使用它们,以及两种类型的人工神经网络之间的基本差异。
7.数据分析的未来 —公司将如何经营我们的数据?我们能利用数据来改善教育系统吗?从规范分析的道德伦理到教育和虚拟助手,这篇文章让我们一瞥数据分析的未来。
8.社交媒体数据挖掘技术 —数据挖掘和数据收集是当今许多企业正在使用的非常广泛的研究领域。本文简要介绍了社交媒体中的数据挖掘,以及如何使用它来发展在线业务。
机器学习资源
9.谷歌数据集搜索——尽管这个专门的数据集搜索引擎已经在谷歌的开发日历上出现了一段时间,但它最终在今年年初退出了测试。正如在《走向数据科学中报道的,谷歌数据集搜索让你可以访问超过 2500 万个开放数据集。
10.来自每个国家的冠状病毒数据集 —几乎每个人都想到了新冠肺炎,这个数据集聚合器每周更新一次,当新的数据集可用时就会添加进来。这个列表中的许多数据集每天都在更新。
正如你所看到的,每天仍然有大量的机器学习工作在进行。我们希望你从这些人工智能新闻文章中获得一些新的见解,或者从某个指南中学到一些新的东西。
更多机器学习新闻和指南,别忘了关注我的黑客正午、推特、我的个人博客。
你应该知道的 10 个数字函数
原文:https://towardsdatascience.com/10-numpy-functions-you-should-know-1dcc5?source=collection_archive---------2-----------------------
数据科学和人工智能的例子
Numpy 是一个用于科学计算的 python 包,提供了高性能的多维数组对象。这个库广泛用于数值分析、矩阵计算和数学运算。在本文中,我们展示了 10 个有用的 numpy 函数以及数据科学和人工智能应用。我们开始吧!🍀
1.numpy.linspace
numpy . Lin space(start, stop , num=50 , endpoint=True , retstep=False , dtype=None , axis=0 ) 函数返回由函数的前两个参数定义的指定间隔内均匀分布的数字生成的样本数量由第三个参数 num 指定。如果省略,将生成 50 个样本。在使用这个函数时要记住的一件重要事情是,停止素是在返回的数组中提供的(默认情况下 【端点=真】 ,不像在内置的 python 函数 范围 中那样。
例子
Linspace 函数可用于为 x 轴生成均匀间隔的样本。例如,如果我们想要绘制一个数学函数,我们可以通过使用 numpy.linspace 函数轻松地为 x 轴生成样本。在强化学习中,我们可以使用该函数进行离散化,提供连续空间(状态或动作)的最高和最低值,生成一致的离散空间。
下图显示了 4 个数学函数:(1)正弦,(2)余弦,(3)指数,以及(4)对数函数。为了生成 x 轴数据,我们使用 linspace 函数,生成从 0 到 100 的 111 个数据点,包括 0 和 100。你可能会注意到,为了生成数学函数,我们再次使用了 Numpy 。我们可以参考文档来观察 Numpy 提供的大量数学函数:)
2。numpy . digital
也许你从来没有听说过这个函数,但是在强化学习中使用连续空间确实很有用。numpy . digitize(x,bin, right=False ) 函数有两个参数:(1)一个输入数组x;以及(2)一个数组*bin,*返回每个值所在 bin 的索引迷惑?让我们看一个例子👌
例子
在上面的代码中,我们总共有 5 个 bin:
- x < 0 → Index 0
- 0≤ x < 1 → Index 1
- 1≤ x < 2 → Index 2
- 2≤ x < 3 → Index 3
- 3≤ x → Index 4
Therefore, if we provide as an input 0.5, the function returns 1, since that is the index of the bin to which 0.5 belongs.
In 强化学习,我们可以用等间距网格离散化状态空间。离散化允许我们将为离散空间设计的算法,如 Sarsa 、 Sarsamax 或预期 Sarsa 应用于连续空间。
想象我们有下面的连续空间。代理可以在任意位置(x,y),其中 0≤x≤5,0≤y≤5。我们可以通过提供一个组来离散化代理的位置,表示代理所在的网格。
我们可以通过使用 numpy.digitize 函数轻松实现这种离散化,如下所示:
我们将考虑任何小于 1 的值属于库索引 0,任何大于或等于 4 的值属于库索引 4。瞧!我们已经把一个连续的空间变成了一个离散的空间。
3。numpy.repeat
numpy . repeat(a, repeats , axis=None )* 函数repeats 数组的素。重复次数由第二个参数指定重复。*
例子
假设我们有两个不同的数据框,包含 2017 年和 2018 年的销售额,但我们只想要一个数据框,包括所有信息。
2017 年销售额
2018 年销售额
在合并两个数据框之前,我们需要添加一列,指定产品销售的年份。我们可以通过使用 numpy.repeat 函数来添加这些信息。随后,我们使用 pandas.concat 函数连接两个数据帧。
销售
4.numpy.random
4.1.numpy.random.randint
numpy . random . randint(low, high=None , size=None , dtype=‘l’ )* 函数返回区间[low,high]中的随机整数。如果 高 参数缺失(无),则从区间[0,低]中选取随机数。默认情况下,返回一个随机数(int)。为了生成一个随机整数数组,数组的形状在参数 size 中提供。*
例子
该函数可用于模拟随机事件,如抛硬币或掷骰子,如下所示。
4.2。numpy.random.choice
numpy . random . choice(a, size=None , replace=True , p=None )* 从给定数组中返回一个随机样本。默认情况下,返回单个值。要返回更多的素,可以在参数 size 中指定输出形状,就像我们之前使用 numpy.random.randint 函数一样。*
例子
上面显示的随机事件也可以通过使用 numpy.random.choice 来模拟。
默认情况下,素被选中的概率相等。为了给每个素分配不同的概率,可以提供概率数组。使用这个参数 p ,我们可以模拟一个有偏的硬币翻转如下:
4.3.数字随机二项式
我们可以使用 numpy 来模拟各种各样的统计分布,如正态分布、贝塔分布、二项式分布、均匀分布、伽玛分布或泊松分布。
numpy . random . binomial(n, p , size=None ) 从二项分布中抽取样本。当有两个相互排斥的结果时,使用二项分布,提供 n 次试验的成功次数以及单次试验的成功概率
我建议阅读文档并发现 numpy.random 库提供的广泛功能。
5.numpy.polyfit
numpy.polyfit( x , y , deg , rcond=None , full=False , w=None , cov=False ) 函数输出一个 deg 的多项式,即【T50
这个函数在线性回归问题中非常有用。线性回归模拟因变量和自变量之间的关系,获得最符合数据的直线。
y =a+bx
其中 x 为自变量, y 为因变量, b 为斜率, a 为截距。要获得系数 a 和 b,我们可以使用 numpy.polyfit 函数,如下所示。
例子
假设我们有一个包含 5000 名男性身高和体重的数据框。
正如我们所观察到的,两个变量呈现线性关系。
我们通过以下方式用 numpy.polyfit 函数获得最佳拟合线性方程:
该函数返回线性模型的斜率( 5.96 )和截距( -224.50 )。现在,我们可以利用得到的模型( y=5.96x-224.50 )来预测一个人的体重(看不见的数据)。这个预测可以通过使用 numpy.polyval 函数来获得。
6.numpy.polyval
numpy . polyval(p, x) 函数计算特定值的多项式。之前我们已经通过使用 numpy.polyfit 函数得到了一个预测一个人(体重= 5.96 身高-224.50) 体重的线性模型。现在,我们使用这个模型通过 numpy.polyval 函数进行预测。假设我们想预测一个 70 英寸高的男人的体重。作为参数,我们提供从最高次到常数项( p=[5.96,-224.49] )的多项式系数(用 polyfit 获得),以及一个用来计算p*(x = 70)的数。
下图显示了回归线和预测重量。
7.numpy .楠
Numpy 库包括几个 常量 如非数字(Nan)、无穷大(inf)或 pi。在计算中,not number 是一种可以解释为未定义值的数字数据类型。在 Pandas 中,我们可以使用 not 数字来表示缺失值或空值。不幸的是,脏数据集包含具有其他名称的空值(例如 Unknown、—、n/a ),因此很难检测和丢弃它们。
例子
假设我们有以下数据集,其中包含马德里市的房屋信息(出于解释目的,此数据集有所缩减)。
具有非标准缺失值的数据框
通过使用 熊猫,我们可以很容易地分析缺失值。data frame . info方法。此方法打印有关数据框的信息,包括列类型、非空值的数量和内存使用情况。
info 方法的输出
正如我们所观察到的,info 函数没有检测到意外的空值(Unknown 和-)。我们必须将这些值转换成熊猫可以检测到的空值。我们可以通过使用 numpy.nan 常量来实现这一点。
在分析数据之前,我们必须处理缺失值。为此,有不同的方法:(1)手动分配缺失值(如果我们知道数据),(2)用平均值/中值替换缺失值,或(3)删除有缺失数据的行,以及其他方法。
在用标准空值替换(Unknown 和-)之后,在 num _ bedrooms 和 num _ balconies 列中检测到两个缺失值。现在,通过使用熊猫可以很容易地删除那些丢失的值。DataFrame.dropna 函数(方法 3)。
删除空值之前的数据帧
删除空值后的数据帧
8.numpy.argmax
numpy . arg max(a, axis=None , out=None ) 函数返回一个轴上最大值的索引。
在 2d 数组中,我们可以很容易地获得最大值的索引,如下所示:
我们可以获得沿指定轴的最大值的索引,为 轴 属性提供 0 或 1。
例子
在强化学习任务中, numpy.argmax 非常有用。 Q 表是一个动作值函数估计,包含每个状态-动作对的,假设代理处于状态 s,并采取动作 a,遵循策略 π 直到剧集结束。
q 表
我们可以通过选择为每个状态提供最大 期望回报 的动作 a 来容易地获得策略
Q 表中的策略
在上面的例子中, numpy.argmax 函数返回策略:状态 0 →动作 0,状态 1 →动作 2,状态 2 →动作 1。
9.numpy .挤压
numpy . squeeze(a, axis=None ) 从数组的形状中删除一维条目。参数 轴 指定了我们要挤出的轴。如果所选轴的形状大于 1,则出现 值错误 。如何使用 numpy.squeeze 函数的示例如下所示。
正如我们所观察到的,只有轴 0 和轴 2 可以被删除,因为它们的长度都是 1。轴 1 有 3 个素;因此,会引发 ValueError。
例子
Pytorch 是基于 torch 库的开源机器学习库。该库提供了多个数据集,如 MNIST、Fashion-MINST 或 CIFAR,我们可以用它们来训练神经网络。首先,我们用 torchvision.datasets 函数下载数据集(例如 MNIST)。然后,我们通过使用torch . utils . data . data loader创建一个 iterable。这个 iterable 被传递给 iter() 方法,生成一个迭代器。最后,我们通过使用 next() 方法获得迭代器的每个素。这些素是形状为[N,C,H,W]的张量,其中 N 表示批量大小,C 表示通道数量,H 表示输入平面的高度(以像素为单位), W 表示宽度(以像素为单位)。
为了可视化前一批素,我们必须删除第一个轴,因为matplotlib . py plot . im show函数接受 shape (H,W)的图像作为输入。
批次的第一个图像
10.数字直方图
numpy . histogram(a,bin = 10, range=None , normed=None , weights=None , 密度=None 该函数返回 2 个值:(1)频率计数,以及(2)箱边缘。
例子
以下数据框包含 5000 名男性的身高。我们创建一个直方图,将 kind=‘hist’ 传递给 plot 方法。
默认情况下,直方图方法将数据集分成 10 个箱。请注意,x 轴标签与箱子尺寸不匹配。这可以通过传入一个包含箱子尺寸列表的 xticks 参数来解决,方式如下:
感谢阅读!!🍀 🍀 💪并且使用 Numpy!
用于数据分析的 10 个我最喜欢的 Python 库
原文:https://towardsdatascience.com/10-of-my-favorite-python-libraries-for-data-analysis-597e09cca026?source=collection_archive---------3-----------------------
一些你应该在 Python 中使用的优秀分析包的快速概要。
(图片由作者提供)
介绍
目前地球上最流行的通用编程语言是 Python 编程语言。这不仅是因为 Python 非常简单,而且相对较快,而且 Python 有一个杀手级的生态系统,其中的工具适合从商业到金融和科学的各个学科。在数据科学的奇妙世界中,有一个领域肯定证明了这一点。
当然,Python 也是当今用于数据科学的最流行的编程语言。虽然大多数使用这种语言的科学家可能都熟悉许多广为人知且广泛使用的软件包,如 Scipy、Sklearn 和 Matplotlib,但也有一些大多数数据科学家从未听说过的软件包非常棒!
№1: Plot.ly
首先,我将介绍一个非常有名的数据可视化库,但有些人可能从未听说过。Plot.ly 是一个图形库,将交互性提升到了一个全新的水平。我真心建议使用 Plot.ly,而不是 Matplotlib 或 Seaborn。这是因为 Plot.ly 附带了许多不同的工具,大多数科学家肯定会喜欢这些工具。Plot.ly 里到底有多少?
嗯…
基本制图
Plot.ly 预装了普通数据科学家甚至只是计算机程序员可能期望的所有奇妙工具。散点图、条形图和折线图都是 Plot.ly 模块的主要内容。虽然 Matplotlib 可以实现类似的目标,但 Plot.ly 具有相同的功能,同时还具有默认样式和 Java-script 交互性,这使得探索数据变得更加有趣和容易。除此之外,使用 Plot.ly 比使用许多竞争对手的产品更有利于展示。
除此之外,Plot.ly 还有一些鲜为人知的图表,你很难在大多数其他数据可视化包中找到。漏斗图、饼图、小提琴图和树状图只是使用 Plot.ly 库探索数据的一些独特而有趣的方法的几个例子。
三维(three dimension 的缩写)
除了基本情节的漂亮造型之外,Plot.ly 还配备了功能齐全的 3D 可视化系统,可与现代技术的一些最佳产品相媲美。Plot.ly 处理 3D 的一大优势是性能。虽然 3D 可视化当然非常复杂和密集,但 Plot.ly 似乎可以相对轻松地处理许多这些应用程序。3D 可视化也很棒,因为新的轴通过探索数据在 3D 空间中的位置值,允许更多的理解。此外,Z 轴还可以表示各种特征,从而可以一次查看多种不同的相关性。
地图
在最近的技术发展中,一件令人惊讶的事情是地理数据。地理数据在 FIPS 发展到如此程度,主要是因为智能手机和全球定位系统(GPS),这为数据科学奠定了坚实的基础。这当然是因为现在的数据比以往任何时候都更容易获得,包括地理数据在内。
也很难否认 Plot.ly 对地图的漂亮处理。特别是 Plot.ly 的 clorepleths,使用起来绝对是一种享受,可以在几秒钟内实现引人注目的可视化。
金融的
虽然金融方面的东西肯定不是我的大部分领域知识,但 Plot.ly 对一些金融可视化有很大的支持。这也显示了 Plot.ly 的多功能性,因为可视化依赖于许多科学家的领域内外。就像 Plot.ly 中的所有东西一样,金融图表易于使用,也很漂亮——不久前,我参与了一个项目,在这个项目中,我们跟踪货币的价值,并使用 LSTM 模型创建了一个完整的网络应用程序,该应用程序将重新训练自己,并根据它所学的知识预测新数据。在这种情况下,Plot.ly 因其易于使用和 Javascript 集成的烛台数据可视化而真正派上了用场。
统计的
为了增加 Plot.ly 的不合理功能,Plot.ly 还支持几种不同类型的统计图。此外,Plot.ly 的统计绘图非常成熟,使得绘制分布图等事情变得相对简单和容易。
多语言
Plot.ly 的另一个优点是它是用 c 编写的,因此,它使用 LLVM 编译器库,并且只需一个简单的 API 就可以兼容一系列编程语言。Plot.ly 不仅适用于 Python 用户,还适用于 R 用户、C 用户以及任何愿意实现它的其他语言的用户群。甚至有一个使用 Plots.jl 包的 Julia 语言实现。
开源
Plot.ly 的最后一个优点是它是开源的。虽然这对某些人来说好处不大,但是如果需要的话,能够进行更改或者理解代码在您的机器上是如何运行的,总是一个优势。作为开源软件还意味着 Plot.ly 可以用于实际的商业应用程序,不仅对那些将编程作为业余爱好的人来说是有价值的,对现实世界的专业人士来说也是如此。
№2:gg 图
我推荐的第二个使用 Python 进行数据分析的工具是 GGPlot.py。任何有 R 编程语言经验的科学家都可能使用过 GGPlot 或 GGPlot2。R 和 Python 包都很棒,让绘图变得轻而易举,而且更加深入。虽然 R 实现确实值得一试,但是 Pythonic 版本也确实非常棒。
注重统计的
GGPlot 包和 Python 的 Plot.ly 包之间的一个显著区别是,GGPlot 更加注重统计。Plot.ly 是一个很好的数据可视化工具,但也是针对更典型的数据可视化,而不是专门的统计绘图。
基于几何图形
关于 GGPlot 另一个值得注意的重要事情是它的图形和可视化方法。一般来说,GGPlot 在几何上更加模块化。这意味着可以很容易地添加或更改成分。这对数据科学更有利,因为通常有某个想法或数据点可能比其他的更需要强调。
№3:散景
Bokeh 是另一个交互式绘图库,它是基于现代网络浏览和计算而构建的。与 Plot.ly 类似,Bokeh 可能不像 GGPlot 那样可扩展,但通过与 Javascript 的难以置信的集成,它提供了许多优于前者的好处。每个数据科学家都喜欢交互式可视化,Bokeh 经常将这一点带到一个非常高级和简单的 API,并带来令人惊叹的结果。
类似于 Plot.ly
作为一种可视化工具,散景与 Plot.ly 非常相似,这并不是一件坏事。这意味着使用散景可以非常容易地创建漂亮的交互式可视化效果。
图表
虽然散景在许多方面与 Plot.ly 相似,但散景肯定不是这种情况。不仅支持所有典型的可视化技术,而且散景还允许用户创建几乎任何东西的有趣的交互式可视化。散景的一个相对常见的用途是网络图的可视化,这真的很酷!除此之外,它还提供了人们可能从 Plot.ly 库中期待的地理数据可视化。
第四名:交响乐
脱离可视化世界的是一个奇妙的 Python 包,叫做 SymPy。MATLAB、Mathematica 和 Julia 程序员们,抓紧你们的帽子——SymPy 是一个 Python 模块,它允许 Python 程序员和科学家使用更多的数学绑定。这使得这种语言从一种更典型的软件工程方法转向数学,而在另一端,代码经常被写成数学。
酷图书馆
Pythonic 代码和数学的许多令人惊叹的实现使用 SymPy 进行后端数学计算。以下是一些直接从他们主页上摘下来的著名例子:
- Cadabra :张量代数和(量子)场论体系使用 SymPy 作标量代数。
- ChemPy :用 Python 写的对化学有用的包。
- Lcapy :教学线性电路分析实验 Python 包。
- Spyder :科学的 Python 开发环境,相当于 Rstudio 或 MATLAB 的 Python;Spyder 的 IPython 控制台可以启用完整的 SymPy 支持。
兰比菲
很容易,SymPy 必须提供的最酷的东西是修改语言内部的任何表达或功能的能力。我之前谈过为什么我认为 Lambda 是 Python 开发人员可用的最好工具之一。如果你想读一篇关于这个话题的文章,你可以在这里查阅:
在过去的十年中,Python 编程语言已经进入了许多领域的人的脑海…
towardsdatascience.com](/scientific-python-with-lambda-b207b1ddfcd1)
虽然 Python 的 lambda 本身就是一个很好的内联参数,但是使用 SymPy 的 Lambdify 函数,它变得更加强大。它是这样工作的:
首先,您可以创建一个用作数学函数的表达式,在本例中为 sin(x)。
import numpya = numpy.arange(10)expr = sin(x)
然后,该函数可以通过 lambdify,成为其自身的一个非常实用的版本:
f = lambdify(x, expr, "numpy")
这是所有 SymPy 的基础,并使使用 Python 编程语言进行科学计算变得更加容易。使用这个函数实际上可以让 Python 探索 Julia 语言的一个好处,语法表达式。如果你想学习更多关于 Julia 语言如何使用表达式的知识,你可以在这里查看完整的教程:
朱莉娅的面包和黄油:句法表达和多重调度
towardsdatascience.com](/how-to-use-syntactical-expressions-and-dispatch-in-julia-67ce155e4af9)
№5:火焰
Blaze 生态系统是一组 Python 库,使得用 Python 编程语言查询和处理数据变得容易得多。Blaze 生态系统实际上由几个不同的包组成:
- 火焰
- 达斯克
- 数据形状
- DyND
- 奥多
对于 Python 编程语言来说,这些都是极好的、有用的、制作精良的工具。然而,我将把重点放在我用得最多并且发现最有价值的两个方面,因为它与科学计算有关。
火焰
Blaze 是一个在完全不同的存储系统上查询各种数据的界面。这对于检索和分析大数据转储非常有用,这些大数据转储可能需要通过算法进行分解,而且可能位于不同存储介质的不同部分。对于那些在特殊环境下工作的人来说,这是一个非常有用的工具,并多次拯救了我的生命。
达斯克
Dask 是一个非常独特的包,它允许在 Python 中进行简单和大多数可变的并行计算。Python 中的并行计算在某种程度上一直是该语言的一个挑战,此外,对于该语言可用的许多最大的包来说,优化已经变得难以置信地困难,因为该语言并没有考虑到并行计算的思想。
也就是说,随着语言本身朝着这个方向发展,Dask 是一个很好的工具,可以与 GPU 支持保持一致,并与 CuArrays 一起工作。Dask 还具有由相关程序员明确编码的动态任务调度和大数据收集功能。
№6:橙色
Orange 是一个用于数据挖掘的 Python 库。这与数据分析有什么关系?Orange 有一整套收集数据的工具,这些数据以后可以用于分析,而分析离不开数据。也就是说,数据争论是数据科学过程中非常重要的一步,Orange 有助于使这一过程更加简单。
更酷的是,该模块附带了一些分类和回归模型,您可以在新挖掘的数据上使用它们!
№7: Gensim
Genism 是一个用于主题建模的 Python 库。Genism 的伟大之处在于它既易于使用,又非常强大。使用 Gensim,您可以创建比您的计算机占用更多内存的可扩展统计语义,也可以部署到真实的生产环境中。此外,Genism 可以很容易地实现来执行自然语言处理。
№8: Theano
Theano 是另一个数学 Python 库,它允许程序员高效地处理大量数据。虽然它可能比不上 SymPy 之类的以数学为中心的东西,但它做了许多非常酷和有趣的事情,使 Python 中的线性代数变得有趣多了。最重要的是,与许多类似的解决方案相比,Theano 非常准确,而且相对较快。最重要的是,该包与 Numpy 紧密集成,并动态集成 C 代码,使 Python 运行更快。
№9: SciPy
如果您已经使用 Python 进行了一周的统计,那么您很可能已经使用了 SciPy。SciPy 是 Python 语言中统计测试的首选包。SciPy 不仅通常是一个使用起来很快的包,而且它也是一个值得尊敬的包,并且已经被证明超时工作效果非常好。SciPy、Pandas 和 Numpy 的结合使 Python 成为普通科学家甚至更多数据科学家工作的伟大语言。
包括的
关于 SciPy,可以肯定的一点是,该模块具有很强的包容性。虽然这可能意味着有时很难找到你到底需要什么,但这也意味着你需要的一切都唾手可得——在我看来,这是一笔不错的交易。SciPy 库将从统计到分布,甚至微分方程的所有内容都变成了任何人都可以使用的简单易懂的函数!
№10:海风
我推荐的最后一个用于 Python 编程语言数据分析的工具是 Python 经典之作:
海博恩。
Seaborn 是 MatPlotLib 的扩展。将统计绘图集成到模块中的 PyPlot。Seaborn 为绘制、操作和使用漂亮的统计图形提供了一个高级界面。虽然与 Bokeh 或 Plot.ly 相比,Seaborn 的外观可能会显得苍白,但它在速度方面的重要性令人难以置信。当处理具有大量观测值的数据集时,尝试使用 Seaborn 而不是 Plot.ly 或 Bokeh 进行数据可视化可能是个好主意。Seaborn 的简单性是其最大的好处,因为它使 MatPlotLib 中熟悉的绑定变得快速而容易使用。
结论
如果现代开发人员使用的一种语言拥有数据分析和可视化的最佳生态系统,它很可能是 Python。Python 有很多工具,这些工具不仅对统计观察很有用,而且对使语言本身更具统计性也很有用。此外,就可视化而言,很少有语言能与 Python 编程语言提供给基于 Python 的科学家的惊人模块相媲美。也就是说,这些是我真正喜欢的模块——但是还有更多,所以在回复中了解更多肯定会很有趣!
过去 10 年中被忽视的 10 项机器学习进展
原文:https://towardsdatascience.com/10-overlooked-machine-learning-advances-in-the-last-10-decades-2e9fe9f2f073?source=collection_archive---------23-----------------------
今天的机器学习是建立在近一个世纪的科技进步之上的。一些最重要的进步在当时被低估了,大多数今天仍然被忽视。这篇文章分享了过去十年中机器学习的一个被忽视的进步。
人工智能和机器学习领域最著名的进展已经受到了太多的关注,看看那些被忽视的东西往往更有意思。考虑到这一点,本文描述了每个十年的机器学习趋势,并确定了每个十年中一个重要但被忽视的发展。
1920 年代:我们想象机器学习
20 世纪 20 年代是唯一一个《T2》十年来最著名的电影是关于人工智能的十年。也是在这里,一部成功的国际戏剧将“机器人”一词引入英语。
雅科夫·普罗塔扎诺夫(я́ков·протазааззно)导演的电影《阿丽塔》(аэли́та)是 20 世纪 20 年代最被忽视的进步:一部无声的俄罗斯科幻电影,它是根据阿列克谢的一本书改编的,该书是托尔斯泰的作品,也以《阿丽塔:机器人的反抗》和《阿丽塔:火星女王》的形式发行
Aelita 想象了不同星球上人和机器之间的关系,这有助于它比当代科幻电影更好地经受住时间的考验,后者想象了一个没有实现的未来世界。当时有更多有影响力的电影制作人,甚至在俄罗斯也有,但没有一个人如此深刻地关注艾。虽然一些内容在今天已经站不住脚了,但大部分(尽管不是全部)都是电影中工程师的想象,而不是真实的事件。
一个世纪前 Aelita 的核心经验是我们今天仍然需要学习的:人类和机器的理想组合不应该由一个过于专注于自己的工作而无法与社会互动的特权工程师来幻想。
你可以在线免费观看这部电影:
二十世纪二十年代俄罗斯的无声电影《艾丽塔》
20 世纪 30 年代:第一个机器学习产品
第一台电子计算机建于 20 世纪 30 年代,第一台计算机的复制品正在计算机历史博物馆展出。
由 Homer Dudley 开创的 Voder 是 20 世纪 30 年代一项被忽视的机器学习进步:一种可以从键盘发出逼真人声的语音合成器。令人难以置信的是,在电子计算机发明的同一十年里,达德利试图将一台电子计算机变成一种商业产品。我尤其喜欢他看到了它对语言障碍者的影响。虽然 Voder 在纽约的世界博览会和旧金山的金门国际博览会上进行了演示,但像后来许多来到湾区的人工智能初创公司一样,它并不成功。
然而,Dudley 使用的压缩技术被通信社区所采用,并且相同类型的表示仍然是今天语音识别技术的基础。后来,他发现在 20 世纪 60 年代发布的语音合成技术套件产品获得了成功。
Voder 的早期演示视频可以在这里看到:
20 世纪 40 年代:概率模型
20 世纪 40 年代最著名的进步发生在第二次世界大战期间,包括美国爱国好战的计算机建造者和英国爱国但受压迫的密码破译者。
Stanislaw Ulam 在 20 世纪 40 年代开发的蒙特卡罗方法被忽视了。在蒙特卡罗方法发展之前,所有的模型都被认为是确定性的,概率是用来衡量置信度的。使用蒙特卡罗方法,概率第一次被融入到模型中。
我们今天使用的几乎每一种机器学习算法都是基于概率分布的,Ulam 在 20 世纪 40 年代将其作为当时流行的组合方法的替代方法。但是,这些方法中的许多方法在几十年里都没有在机器学习中得到普及,Ulam 在那个时候已经被更著名的合作者所掩盖。这项工作还受到了第二次世界大战期间的事实的阻碍:最初的蒙特卡罗方法论文/备忘录可能是一份永远不会公开的机密文件。
这种方法的名字来源于蒙特卡洛赌场,该赌场经常公开,不像战争时期的备忘录/文件,它是在那里首次公布的。
20 世纪 50 年代:无监督的机器学习
20 世纪 50 年代是名人统计学家的十年,他们在其他社会影响中宣布吸烟和肺癌之间的关系是相关的,而不是因果关系,所以每个人都应该继续吸烟(在自然!).与机器学习最相关的是第二著名的无监督机器学习算法期望最大化 (EM),该算法首次发表后被引用超过 10,000 次。
20 世纪 50 年代一个被忽视的进步是 Tore Dalenius 发明的第一个最著名的无监督机器学习算法 K-Means 。与期望最大化的 10,000+引用不同,最初的 K-Means 论文今天还没有 300 次引用:
最优分层的问题。托雷·达勒纽斯。斯堪的纳维亚精算杂志,1950 年。泰勒&弗朗西斯。
与本文中几乎所有其他被忽略的人不同,Dalenius 没有维基百科页面,这一事实凸显了这项工作是如何被忽略的,并且 Dalenius 被错误地从维基百科的K-Means 的历史部分中忽略也没有帮助,该部分只引用了 5 年多后发表的工作。不可思议的是,dale nius在维基百科的差分隐私历史条目中被提及:
“迈向统计披露控制的方法学”。托雷·达勒纽斯。Statistik tidskrft。1977.
另一篇文章被引用的次数稍微多一点,但是引用次数仍然不到 500 次。“差分隐私”允许像你的手机这样的智能设备使用机器学习来根据你的需求定制其行为,而不会泄露你的身份。这可能是未来十年机器学习进步最重要的领域之一,如果 Dalenius 在这两个领域都有第一篇论文,那将令人印象深刻!
这是 1950 年 K-Means 论文的摘要,如果你自己知道,你可以判断达伦纽斯是否值得被认为是最早的发明者:
把“strata”换成“cluster”,自己决定这看起来是不是像 K-Means。一个有趣的观察:斯堪的纳维亚精算杂志仍然存在,并且从 1918 年开始出版!
60 年代:合作
60 年代举办了至今仍在运行的首届 AI 大会;毕业了第一批纯粹专注于人工智能的博士生;并介绍了第一个机器学习模型,其中不同的组件相互作用,而不是独立行动。在计算机为人的时代,美国授予了第一批计算机科学学科的博士学位。专注于机器学习的人从(硬件)工程、数学、语言学和心理学等领域的背景走到一起,进行合作,形成了我们今天所知的机器学习领域。
最被忽视的进步也是在合作方面:当时最大的技术合作是太空竞赛,其中最被忽视的人是凯瑟琳·戈布尔、玛丽·杰克森和多萝西·沃恩,所有的有色人种女性都是在美国种族隔离仍然合法的时候开始职业生涯的,她们都对美国宇航局最早的太空任务的成功至关重要。一部关于他们在美国宇航局工作的电影不足以弥补他们当时没有得到的认可,包括只允许男性名字出现在研究论文上的政策。如果不是他们的一位 NASA 同事有一个女儿,后来成为了一名作家,他们的故事可能不会为人所知。
戈贝尔、杰克逊和沃恩是一个重要的提醒,即使多年后被认为“被忽视”,大多数人已经有特权把他们的名字印在(后来被忽视的)纸张、艺术品或产品上。对于历史上大多数被忽视的人来说,他们所取得的成就没有留下任何记录。
电影《隐藏的人物》:看看这部电影,想想我们改变了多少。例如,有多少其他“十年总结”文章忽略了数据注释社区的多样性?
20 世纪 70 年代:人机界面
除了现代搜索引擎的一些统计基础之外,20 世纪 70 年代是当今最流行的数据驱动的机器学习的“人工智能冬天”。尽管如此,人机交互和人工智能在这段时间里走到了一起,最著名的是十年前的第一款街机游戏,并在十年后的第一款家用游戏机中达到高潮。
电脑游戏激发了我们对与智能机器互动的想象:历史上第一次,人们开始普遍考虑超越智能电脑,即使当时的游戏没有使用我们今天所说的机器学习。
当电脑游戏告诉我们人类如何解读机器的智能时,社会科学家正在研究电脑如何帮助我们理解人类的智能。
20 世纪 70 年代最被忽视的进步仍然是创建精确训练数据最广泛使用的指标,Krippendorff 的 alpha。原始论文今天只有大约 250 次引用:
估计区间数据的可靠性、系统误差和随机误差。克劳斯·克里本多夫。教育与心理测量,30 (1),1970 年
今天,大多数机器学习训练数据是由多个人并行注释相同的数据来创建的,以避免任何一个人的错误。例如,当自动驾驶汽车得知某个物体是“骑自行车的人”时,这是因为多个人对同一视频进行了注释,并同意某个物体是“骑自行车的人”,从而克服了任何个人可能将骑自行车的人错误地分类为“摩托车”或“行人”的错误。假设不是所有的注释者都能看到训练数据中的每一幅图像,也不是所有的对象都彼此一样频繁,那么我们如何准确地计算出人们彼此有多少一致呢?Krippendorff 的 alpha,现在已经有半个世纪的历史了,仍然是计算我们的数据集中整体一致性水平最常用的指标。
Krippendorff 的 alpha 应该被称为“Krippendorff 的公牛”,因为像公牛一样,它是机器学习中最努力但不被重视的指标之一。它被广泛应用于各种数据类型——比任何一种算法都要广泛。因此,Krippendorff 的 alpha 对当今更多机器学习应用的准确性的影响可能比任何其他算法都要大。
Krippendorff 的 alpha 也叫“Krippendorff 的公牛”,因为这个算法非常有效,也可能是因为“alpha”的字面意思是“公牛”
80 年代:机器超越人
20 世纪 80 年代见证了第一次真正的人工智能繁荣,主要是人工智能的符号方法,但也有统计方法,如 T2 神经网络和结合统计和符号方法的方法,如 T4 决策树。虽然大多数算法都有更早的前身,有些甚至更早,但到了 20 世纪 80 年代,硬件已经足够先进,通用的机器学习算法可以针对任何有数据的问题进行训练。
虽然当时几乎没有任何一种机器学习进步进入第一台个人计算机,但计算能力的进步意味着计算机可以在简单的任务中超过人类。人们也开始理解分布在全球网络上的信息的内在力量。正是这种对智能、联网计算机的理解,导致艺术家们思考人工智能和人类之间的新关系,发表在现在著名的小说、漫画和电影中,所有这些都是联网人工智能对人类的操作。
在 20 世纪 80 年代,我们如何想象人工智能的一个被忽视的进步是伊恩·M·班克斯的小说《游戏玩家》。班克斯没有想象一个人工智能刚刚超过我们的崩溃社会,而是想象一个人工智能已经远远超过人类能力的先进社会,以至于人们处于后匮乏社会,过着休闲和星际旅行的生活。
虽然将小说设定在一个近乎完美的社会听起来很无聊,但班克斯发现了托尔斯泰(是的,就是那个托尔斯泰)关于人际关系的观察的完美补充:“幸福的家庭都是相似的,不幸的家庭各有各的不幸”。班克斯发现人工智能恰恰相反,可以总结为:不快乐的人工智能都试图以同样的方式毁灭人类,每一个快乐的人工智能都以自己的方式破坏人类”。人工智能(小说中的“思想”)破坏人类个体的无数方式是一个广阔的画布,比一部机器异常专注于杀死所有人的小说更有趣。银行的世界在大范围内同样可怕,这些社会的底层比当时许多更直接的反乌托邦小说、漫画和电影更黑暗、更坚韧。
游戏的玩家以人类(或类似人类的生物,对乌苏拉·勒奎恩大加赞赏)为中心,玩着可能更容易被人工智能赢得的棋盘游戏。它被公开质疑:为什么人类会选择继续玩一个人工智能可以击败他们的游戏?
这个故事与今天非常相关,在 AI 超越特级大师之后,一位著名的围棋选手最近退出了。尽管这与国际象棋大师们早先做出的将人类和机器玩家结合起来的决定形成了对比。我们显然需要花更多的时间来思考我们与人工智能的未来关系,以防它不试图杀死我们所有人。当我们把所有需要的东西都自动化后,我们还剩下什么角色?
银行的另一本文化书籍正被拍成电视剧,因此它可能不会被忽视太久。
90 年代:AI 在你手中
20 世纪 90 年代是人们开始定期与人工智能互动的时候,最著名的是基于智能新算法的搜索引擎得到广泛传播。
一个被忽视的进步是马自达 Cosmo Eunos。是的,汽车是机器学习中最被忽视的进步之一。这是第一辆拥有 GPS 导航的汽车,并且只配备了自动变速器,这在今天的跑车中几乎是闻所未闻的。它还有一个一次性的旋转发动机,这使它比任何汽车都安静,直到几十年后电动汽车出现。
全球定位系统、触摸屏和自动变速器的自动化在 1990 年感觉很超前,就像自动驾驶汽车在今天感觉很超前一样。我们与智能汽车的关系总是比任何其他产品更能抓住人们的想象力,无论是解决犯罪的会说话的汽车还是感受到健身者因不够智能而愤怒的未来汽车。
考虑到通货膨胀因素,马自达 Cosmo Eunos 仍然是马自达有史以来最昂贵的汽车。不幸的是,它只在日本有售,而且是在汽车和电子经济泡沫破裂时发行的。在许多方面,这是泡沫的顶点,日本的发明家正处于他们想象力的巅峰。最终,在 1996 年停产之前,马自达的销量不到 1 万辆。
汽车专家最近的一篇评论称它为比今天市场上的任何东西都更狂野,其内部造型和早期的触摸板与星际迷航下一代宇宙飞船相比。这是这个时代最令人向往的汽车,也是第一款预示着完全自动驾驶体验的汽车,即使司机仍然是由方向盘后面的人驾驶。
在 20 世纪 90 年代,这种风格是另一回事。
2000 年代:数据十年
随着互联网和廉价数码相机的迅速发展,2000 年意味着比以往任何时候都有更多的数据可用。这是当数据量第一次被认为与算法对模型准确性同样重要的时候。因此,毫不奇怪,今天最流行的数据集是在这十年中建立的。
在这个十年的开始,一个命名实体识别数据集足够聪明地知道,虽然英语和德语是两种关系最密切的语言,但这两种语言对名称的处理非常不同,特别是在名词的大写方式上。将近 20 年后,NLP 的研究人员已经解决了这个问题……忽略德语的结果,只报告英语的结果,希望没人注意到。十年后,最著名的计算机视觉数据集诞生了。
2000 年代机器学习中一个被忽视的进步是由国家标准与技术研究所(NIST) 创建的法律数据集。你可能没有听说过 TREC 2009 法律跟踪,除非你在 NLP 工作的法律文件。当时只有 5 个团队参与了评估,该数据集从那以后就没有在学术界流行过。
然而,这项任务走在了时代的前面:建立在数据基础上的系统的回忆准确性是作为人类审查工作的一个功能来衡量的。这不是孤立地想象机器学习的抽象准确性任务。这项任务特别关注机器学习如何帮助人类。这种被称为电子发现的任务在今天是一个价值 100 亿美的产业。今天没有多少机器学习行业价值数十亿美,这一行业在 2000 年代从机器学习中发展出来,几乎没有人注意到。对于 2000 年代创建的任何其他类型的机器学习数据集,甚至没有一个市场接近这样的规模。
对律师来说,“时间就是金钱”,这句话被写进了 TREC 2009 法律追踪的评估标准中。
2010 年代:迁移学习
最近的十年是我们真正展示机器学习模型如何从一项任务适应另一项任务的第一个十年,最终形成了现在主导自然语言处理的模型,这些模型被专门设计为通用模型,以适应非常不同的任务。
十年刚刚过去,很难确定迁移学习的哪个方面是最重要的。很难将功劳归于神经架构的进步,因为大多数都是在更早的时候发明的,你可能已经忘记了(像我一样,直到写这篇文章),一篇关于计算机视觉中的迁移学习的基础论文使用了 SVM 作为分类器,而不是神经模型。将功劳归于特征的矢量表示也是困难的。NLP 和计算机视觉社区可能在过去十年中发展迅速,但信息检索社区会指出,自 20 世纪 90 年代以来,他们一直在用特征的矢量表示为搜索引擎提供,并向你推荐 15,000+引用的论文。
因此,迁移学习的进步是关于比算法本身更广泛的目标:允许模型容易地用于不同的用例选择,从而支持不同的人群。
一项被忽视的进展是由 David Jurgens、Yulia Tsvetkov 和 Dan Jurafsky 撰写的一篇论文:
将方言的可变性纳入社会公平的语言识别。大卫·尤尔根斯,尤利娅·茨韦特科夫和丹·茹拉夫斯基。2017.计算语言学协会第 55 届年会会议录
语言表达是人工智能中最大的偏见。对于世界上 99%的语言来说,许多人认为理所当然的人工智能,如搜索引擎、垃圾邮件过滤和语音识别,根本不起作用。因此,了解人们在说什么语言是解决这种偏见的最重要的步骤之一,包括吸收每种语言中不太常见的变体(方言)的能力。研究人员特别观察了与健康相关的数据,发现它极大地提高了代表性不足的人群的准确性,使开发更具社会包容性的工具成为可能。
然而,这篇论文只有大约 20 篇引文。研究人员本身也没有被忽视:Jurgens、Tsvetkov 和 Jurafky 是密歇根大学、卡内基梅隆大学和斯坦福大学的研究人员,但这篇论文没有进入其中任何一所大学被引用次数最多的前 10 名。
有多少其他机器学习论文将其准确性与人类发展指数进行了比较?
结论
上个世纪机器学习中被忽视的 10 个进步是:一部电影;一个产品;机密备忘录;瑞典发明家/会计师;人类计算机;协议度量;一本小说;一辆汽车;数据集;和一篇研究论文。
过去 10 年中被忽视的 10 项机器学习进展
很容易忘记将我们带到机器学习当前状态的发明、思想和社会变革的漫长历史。回想过去,让我们的想象力被长达一个世纪的进步重新点燃,这很有趣!
罗伯特·芒罗| 2020 年 1 月| @WWRob
感谢
如果没有我们完全任意的日历和以 10 为基数的计数系统,这篇文章是不可能完成的。我感谢我们 3 . 4 亿年前被忽视的祖先,他决定每只手的 5 个手指应该是标准的。我还要感谢 16 世纪被忽视的医生,T2,他发明了我们的日历。教皇格里高利在路易吉死后继续推广“格里高利”日历,向每个人保证“这是路易吉希望的…以他最喜欢的教皇的名字命名日历。”
让我的数据分析过程更高效的 10 个熊猫窍门:第 1 部分
原文:https://towardsdatascience.com/10-pandas-tricks-to-make-my-data-analyzing-process-more-efficient-part-1-78a0cc1636f3?source=collection_archive---------26-----------------------
我希望我早点知道的技巧
由 Max Duzij 在 Unsplash 上拍摄的照片
Pandas 可能是 Python 中最重要的数据分析库,它就像 Python 中的 Excel。在这篇文章中,我想分享 10 个熊猫的技巧,我希望我作为一个初学者能早点知道。
我将用我以前的文章作为例子,它讨论了新冠肺炎期间的空中交通。数据集包含 7 个独立的 cvs 文件,包含 7 个月的飞行数据。每个文件大约有 200 万行数据。你可以在这里查看原始数据集。
2020 年全球航班数据的探索性数据分析
towardsdatascience.com](/visualization-of-air-traffic-during-covid-19-pandemic-c5941b049401)
read_csv()
read_csv
可能是 Pandas 中最常用的函数,它用于读取 csv 文件并创建数据帧。
df=pd.read_csv(path_data/'1.csv')
如果文件很大,可能需要一段时间来读取,所以你可以考虑先读取一小部分,用nrows
快速浏览,然后用df.info()
检查数据帧
默认情况下,日期时间列作为对象加载。我们可以用parse_dates
正确读出。
如果您已经知道您需要哪些列来进行分析,您可以使用usecols
来只读取您需要的列。
您也可以使用dtype
自行指定数据类型。
selectt_dtypes()
有时您需要选择具有相同数据类型的列进行分析。可以用selectt_dtypes
。例如:
复制()
copy()
在熊猫的数据分析中很重要。
假设我们有一个数据帧df1
我们分配一个新的数据帧df2 = df1
,然后做一些计算
你也会发现df1
的变化。
如果不想要,可以用copy()
避免。
concat()
如果你有多个数据帧,你想把它们放在一起,你可以使用concat()
,例如:
如果你有多个大文件要处理,你也可以将pd.concat
和pd.read_csv
合并
它比编写循环来读取和连接多个文件更方便、更快。
值计数
value_counts()
用于计算唯一值。
您可以通过设置normalize=True
对其进行规范化
您也可以使用bins
将连续数据转换成离散区间,从而将其用于连续数据
感谢阅读,我将在第 2 部分文章中继续其他 5 个技巧。
我希望我早点知道的技巧
towardsdatascience.com](/10-pandas-tricks-to-make-my-data-analyzing-process-more-efficient-part-2-b72ea43a0bb5)
有兴趣也可以看看我之前关于 Python 和 Numpy 的文章。
我希望我能早点知道的技巧。
towardsdatascience.com](/7-python-tricks-to-make-my-code-better-and-smarter-60dfde0b6c49) [ 让我的代码更好更聪明的 7 个小技巧
我希望我早点知道的技巧
towardsdatascience.com](/7-numpy-tricks-to-make-my-code-better-and-smarter-9e8a4ccf43d1)
让我的数据分析过程更高效的 10 个熊猫窍门:第二部分
原文:https://towardsdatascience.com/10-pandas-tricks-to-make-my-data-analyzing-process-more-efficient-part-2-b72ea43a0bb5?source=collection_archive---------13-----------------------
我希望我早点知道的技巧
由 Max Duzij 在 Unsplash 上拍摄的照片
Pandas 可能是 Python 中最重要的数据分析库,它就像 Python 中的 Excel。在这篇文章中,我想分享 10 个熊猫的技巧,我希望我作为一个初学者早点知道。你可以在这里查看文章的第一部分:
[ 让我的数据分析过程更高效的 10 个熊猫窍门:第 1 部分
我希望我早点知道的技巧
towardsdatascience.com](/10-pandas-tricks-to-make-my-data-analyzing-process-more-efficient-part-1-78a0cc1636f3)
我将用我以前的文章作为例子,它探讨了新冠肺炎期间的空中交通。数据集包含 7 个独立的 cvs 文件,包含 7 个月的飞行数据。每个文件大约有 200 万行数据。你可以在这里查看原始数据集。
2020 年全球航班数据的探索性数据分析
towardsdatascience.com](/visualization-of-air-traffic-during-covid-19-pandemic-c5941b049401)
地图
map()
是一个有用的函数,可以用其他值替换序列中的值。
例如,如果我们有一系列机场代码名称,并且我们希望用全名来替换它们,我们可以使用map
来完成这项工作。
replace()
也是做这项工作的一个选择。
map()
也可以拿功能举例:
应用
apply()
是一个将函数应用于数据帧或序列的函数。
如果我们有一个数据框架:
我们可以对数据帧应用一个函数:
我们也可以通过设置axis=0
来进行列方式的计算
并按axis=1
行
您也可以按不同的列进行计算
询问
query()
用于搜索和过滤符合您想要的特定条件的行。
例如,我们有一个包含航班信息的数据帧。
如果我们只想查看来自阿姆斯特丹的航班,可以使用query()
进行搜索。
如果您想要搜索多个机场,您可以将它们放在一个列表中:
也可能有多个条件:
分组依据
groupby()
是通过对数据分组来探索数据集的强大工具。
再以飞行数据帧为例。
我们可以使用groupby
来查看每天的航班数量
我们可以对数字列进行一些计算,例如mean()
(这里没有意义)
我们可以使用agg()
对不同的列进行不同的操作:
也可以按多个组进行分组:
结合concat()
、query()
和groupby()
,很容易看到不同机场每天的航班数量:
切割()
cut()
用于 bin 连续值。例如,如果我有一个包含几个数字的列表。
df=pd.DataFrame({'A':[1,2,4,6,7,2,9,2,1,6,8,9,3,4,6,9,6,3,1,2,4,6,8]})
我们可以使用cut()
来绑定这些值:
我们还可以给箱子分配标签:
可以使用qcut()
将变量离散成大小相等的桶
就是这样。感谢阅读。欢迎评论和建议。
有兴趣可以看看我关于 Python 和 Numpy 的文章。
我希望我能早点知道的技巧。
towardsdatascience.com](/7-python-tricks-to-make-my-code-better-and-smarter-60dfde0b6c49) [ 让我的代码更好更聪明的 7 个小技巧
我希望我早点知道的技巧
towardsdatascience.com](/7-numpy-tricks-to-make-my-code-better-and-smarter-9e8a4ccf43d1)
深度学习时代理解图像分类应该阅读的 10 篇论文
原文:https://towardsdatascience.com/10-papers-you-should-read-to-understand-image-classification-in-the-deep-learning-era-4b9d792f45a7?source=collection_archive---------7-----------------------
快速浏览十年来图像分类的最佳论文,帮助您快速学习计算机视觉
自己画
序
计算机视觉是一门将图像和视频转换成机器可理解的信号的学科。通过这些信号,程序员可以基于这种高层次的理解来进一步控制机器的行为。在许多计算机视觉任务中,图像分类是最基本的任务之一。它不仅可以用于许多真实的产品,如谷歌照片的标记和人工智能内容审核,而且还为许多更高级的视觉任务打开了一扇门,如物体检测和视频理解。由于自深度学习取得突破以来,该领域的变化非常快,初学者往往会觉得太难学习了。与典型的软件工程主题不同,关于使用 DCNN 进行图像分类的优秀书籍并不多,理解这一领域的最佳方式是阅读学术论文。但是读什么报纸呢?我从哪里开始?在这篇文章中,我将介绍 10 篇适合初学者阅读的最佳论文。通过这些论文,我们可以看到这个领域是如何发展的,以及研究人员是如何在以往研究成果的基础上提出新观点的。尽管如此,即使你已经在这方面工作了一段时间,理清大局对你还是有帮助的。那么,我们开始吧。
1998 年:LeNet
基于梯度的学习在文档识别中的应用
从 基于梯度的学习应用到文档识别
LeNet 于 1998 年推出,为未来使用卷积神经网络进行图像分类研究奠定了基础。许多经典的 CNN 技术,例如池层、全连接层、填充和激活层,被用于提取特征和进行分类。通过均方误差损失函数和 20 个历的训练,该网络在 MNIST 测试集上可以达到 99.05%的准确率。即使在 20 年后,许多最先进的分类网络总体上仍然遵循这种模式。
2012 年:AlexNet
基于深度卷积神经网络的图像网分类
来自【ImageNet】用深度卷积神经网络分类
虽然 LeNet 取得了很大的成绩,显示了 CNN 的潜力,但由于计算能力和数据量的限制,这方面的发展停滞了十年。看起来 CNN 只能解决一些简单的任务,如数字识别,但对于更复杂的特征,如人脸和物体,带有 SVM 分类器的 HarrCascade 或 SIFT 特征提取器是更受欢迎的方法。
然而,在 2012 年 ImageNet 大规模视觉识别挑战赛中,Alex Krizhevsky 提出了一种基于 CNN 的解决方案,并将 ImageNet 测试集 top-5 的准确率从 73.8%大幅提高到 84.7%。他们的方法继承了 LeNet 的多层 CNN 的思想,但是大大增加了 CNN 的规模。从上图中可以看出,与 LeNet 的 32x32 相比,输入现在是 224x224,而且许多卷积核有 192 个通道,而 LeNet 的通道是 6 个。虽然设计没有太大变化,但参数增加了数百倍,网络捕捉和表示复杂特征的能力也提高了数百倍。为了训练这样一个大模型,Alex 使用了两个 GTX 580 GPU,每个 3GB RAM,这开创了 GPU 训练的趋势。此外,ReLU 非线性的使用也有助于降低计算成本。
除了为网络带来更多的参数之外,它还通过使用丢弃层来探索由更大的网络带来的过拟合问题。它的局部响应归一化方法后来没有得到太多的欢迎,但启发了其他重要的归一化技术,如 BatchNorm,以解决梯度饱和问题。综上所述,AlexNet 为未来 10 年定义了事实上的分类网络框架:卷积、ReLu 非线性激活、MaxPooling 和密集层的组合。
2014 年:VGG
用于大规模图像识别的超深度卷积网络
来自 Quora "https://www.quora.com/What-is-the-VGG-neural-network
随着使用 CNN 进行视觉识别取得如此巨大的成功,整个研究界都炸开了锅,所有人都开始研究为什么这个神经网络工作得这么好。例如,在 2013 年的“可视化和理解卷积网络”中,马修·泽勒讨论了 CNN 如何提取特征并可视化中间表示。突然,从 2014 年开始,每个人都开始意识到 CNN 是计算机视觉的未来。在这些直接追随者中,来自视觉几何小组的 VGG 网络是最引人注目的一个。在 ImageNet 测试集上取得了 93.2%的前 5 名准确率和 76.3%的前 1 名准确率。
遵循 AlexNet 的设计,VGG 网络有两个主要的更新:1) VGG 不仅使用了像 AlexNet 更广泛的网络,而且更深入。VGG-19 有 19 个卷积层,而 AlexNet 只有 5 个。2) VGG 还证明了一些小的 3×3 卷积滤波器可以取代 AlexNet 的单个 7×7 甚至 11×11 滤波器,实现更好的性能,同时降低计算成本。由于这种优雅的设计,VGG 也成为了其他计算机视觉任务中许多开创性网络的主干网络,例如用于语义分割的 FCN,以及用于对象检测的更快的 R-CNN。
对于更深的网络,多层反向传播的梯度消失成为更大的问题。为了解决这个问题,VGG 还讨论了预训练和重量初始化的重要性。这个问题限制了研究人员不断增加更多的层,否则,网络将真的很难收敛。但是两年后我们会看到更好的解决方案。
2014 年:谷歌网
用回旋更深入
从 到
VGG 有一个好看且易于理解的结构,但它的表现在 ImageNet 2014 竞赛的所有决赛选手中并不是最好的。GoogLeNet,又名 InceptionV1,最终获奖。就像 VGG 一样,GoogLeNet 的主要贡献之一是用 22 层结构推动了网络深度的极限。这再次证明了更深更广的确是提高精度的正确方向。
与 VGG 不同,GoogLeNet 试图正面解决计算和梯度递减问题,而不是提出一个更好的预训练模式和权重初始化的解决方案。
瓶颈初始模块从 到
首先,它通过使用一个名为 Inception 的模块探索了非对称网络设计的思想(见上图)。理想情况下,他们会追求稀疏卷积或密集层,以提高功能效率,但现代硬件设计并不适合这种情况。因此,他们认为网络拓扑级别的稀疏性也有助于功能的融合,同时利用现有的硬件能力。
第二,它通过借用一篇名为《网络中的网络》的论文中的思想来解决高计算成本问题。基本上,在进行像 5×5 卷积核这样的繁重计算操作之前,引入 1×1 卷积滤波器来降低特征的维度。这种结构后来被称为“瓶颈”,并广泛应用于许多后续网络中。与“网络中的网络”类似,它也使用了一个平均池层来取代最终的全连接层,以进一步降低成本。
第三,为了帮助梯度流向更深的层,GoogLeNet 还对一些中间层输出或辅助输出进行了监督。由于复杂性,这种设计后来在图像分类网络中不太流行,但在计算机视觉的其他领域越来越流行,如姿态估计中的沙漏网络。
作为后续,这个谷歌团队为这个盗梦空间系列写了更多的论文。“批量标准化:通过减少内部协变量偏移来加速深度网络训练”代表 InceptionV2。2015 年的“重新思考计算机视觉的初始架构”代表 InceptionV3。而 2015 年的“Inception-v4,Inception-ResNet 以及剩余连接对学习的影响”代表 InceptionV4。每篇论文都在初始网络的基础上增加了更多的改进,并取得了更好的结果。
2015:批量正常化
批量标准化:通过减少内部协变量转移加速深度网络训练
inception 网络帮助研究人员在 ImageNet 数据集上达到了超人的精确度。然而,作为一种统计学习方法,CNN 很大程度上受限于特定训练数据集的统计性质。因此,为了实现更好的准确性,我们通常需要预先计算整个数据集的平均值和标准差,并首先使用它们来归一化我们的输入,以确保网络中的大多数图层输入是接近的,这转化为更好的激活响应。这种近似方法非常麻烦,有时对于新的网络结构或新的数据集根本不起作用,因此深度学习模型仍然被视为难以训练。为了解决这个问题,Sergey Ioffe 和 Chritian Szegedy(Google net 的创始人)决定发明一种更智能的东西,叫做批处理规范化。
从 批量归一化:通过减少内部协变量加速深度网络训练
批量标准化的想法并不难:我们可以使用一系列小批量的统计数据来近似整个数据集的统计数据,只要我们训练足够长的时间。此外,除了手动计算统计数据,我们还可以引入两个可学习的参数“scale”和“shift ”,让网络学习如何自行标准化每一层。
上图显示了计算批量标准化值的过程。如我们所见,我们取整个小批量的平均值,并计算方差。接下来,我们可以用这个小批量平均值和方差来标准化输入。最后,利用一个比例和一个偏移参数,网络将学习调整批量归一化结果,以最佳地适应随后的层,通常是 ReLU。一个警告是,我们在推断过程中没有小批量信息,因此一个变通方法是在训练过程中计算移动平均值和方差,然后在推断路径中使用这些移动平均值。这个小小的创新如此具有冲击力,所有后来的网络都马上开始使用它。
2015 年:ResNet
用于图像识别的深度残差学习
2015 年可能是十年来计算机视觉最好的一年,我们已经看到许多伟大的想法不仅出现在图像分类领域,还出现在各种计算机视觉任务中,如对象检测、语义分割等。2015 年最大的进步属于一个名为 ResNet 的新网络,即残余网络,由微软亚洲研究院的一群中国研究人员提出。
从 深度残差学习进行图像识别
正如我们之前对 VGG 网络所讨论的,变得更深的最大障碍是梯度消失问题,即,当通过更深的层反向传播时,导数变得越来越小,最终达到现代计算机架构无法真正有意义地表示的点。GoogLeNet 试图通过使用辅助监督和不对称启动模块来解决这一问题,但这只是在很小程度上缓解了问题。如果要用 50 层甚至 100 层,会不会有更好的方式让渐变流过网络?ResNet 给出的答案是使用剩余模块。
ResNet 在输出中增加了一个身份快捷方式,这样每个剩余模块至少不能预测输入是什么,而不会迷失在野外。更重要的是,残差模块试图学习输出和输入之间的差异,而不是希望每一层都直接适合所需的特征映射,这使得任务更容易,因为所需的信息增益更少。想象一下,你正在学习数学,对于每一个新问题,你都有一个类似问题的解决方案,所以你需要做的就是扩展这个解决方案,并试图让它发挥作用。这比为你遇到的每个问题想一个全新的解决方案要容易得多。或者像牛顿说的,我们可以站在巨人的肩膀上,身份输入就是那个巨人对于剩余模。
除了身份映射,ResNet 还借鉴了 Inception networks 的瓶颈和批量规范化。最终,它成功地建立了一个具有 152 个卷积层的网络,并在 ImageNet 上取得了 80.72%的顶级准确率。剩余法也成为后来很多其他网络的默认选项,比如 Xception、Darknet 等。此外,由于其简单美观的设计,它仍然广泛应用于当今许多生产视觉识别系统。
随着剩余网络的出现,出现了更多的不变量。在《深度剩余网络中的身份映射》中,ResNet 的原作者尝试将激活放在剩余模块之前,取得了较好的效果,这个设计后来被称为 ResNetV2。此外,在 2016 年的一篇论文“深度神经网络的聚合残差变换”中,研究人员提出了 ResNeXt,它为残差模块添加了并行分支,以聚合不同变换的输出。
2016 年:例外
例外:深度可分卷积深度学习
从" 例外:深度可分卷积深度学习 "
随着 ResNet 的发布,看起来图像分类器中大多数唾手可得的果实都已经到手了。研究人员开始思考 CNN 魔力的内在机制是什么。由于跨通道卷积通常会引入大量参数,因此 Xception network 选择研究这种操作,以全面了解其效果。
就像它的名字一样,Xception 起源于盗梦空间网络。在初始模块中,不同转换的多个分支被聚集在一起以实现拓扑稀疏性。但是为什么这种稀疏有效呢?Xception 的作者,也是 Keras 框架的作者,将这一思想扩展到了一个极端的情况,即一个 3x3 卷积文件对应于最终连接之前的一个输出通道。在这种情况下,这些并行卷积核实际上形成了一种新的操作,称为深度卷积。
从"深度方向卷积和深度方向可分离卷积
如上图所示,与传统卷积不同,传统卷积将所有通道包括在一次计算中,深度卷积仅单独计算每个通道的卷积,然后将输出连接在一起。这减少了通道之间的特征交换,但也减少了许多连接,因此产生了具有较少参数的层。但是,此操作将输出与输入相同数量的通道(如果将两个或更多通道组合在一起,则输出的通道数量会更少)。因此,一旦通道输出合并,我们需要另一个常规的 1x1 滤波器或逐点卷积来增加或减少通道数量,就像常规卷积一样。
这种想法原本并不奇怪。这在一篇名为“大规模学习视觉表现”的论文中有所描述,在 InceptionV2 中偶尔也会用到。Xception 更进一步,用这种新类型替换了几乎所有的卷积。实验结果证明效果很好。它超越了 ResNet 和 InceptionV3,成为一种新的 SOTA 图像分类方法。这也证明了 CNN 中跨通道相关性和空间相关性的映射可以完全解耦。此外,Xception 与 ResNet 具有相同的优点,设计简洁美观,因此它的思想被用于其他后续研究中,如 MobileNet、DeepLabV3 等。
2017 年:移动互联网
MobileNets:用于移动视觉应用的高效卷积神经网络
Xception 在 ImageNet 上实现了 79%的前 1 名准确率和 94.5%的前 5 名准确率,但与之前的 SOTA inceptions 3 相比,这两个准确率分别只提高了 0.8%和 0.4%。新的图像分类网络的边际收益越来越小,因此研究人员开始将注意力转移到其他领域。MobileNet 在资源受限的环境中极大地推动了图像分类。
“MobileNets:用于移动视觉应用的高效卷积神经网络”中的 MobileNet 模块
与 Xception 类似,MobileNet 使用了如上所示的深度方向可分离卷积模块,并强调了高效率和更少的参数。
“MobileNets:用于移动视觉应用的高效卷积神经网络”中的参数比
上述公式中的分子是深度方向可分离卷积所需的参数总数。分母是相似正则卷积的参数总数。这里 D[K]是卷积核的大小,D[F]是特征图的大小,M 是输入通道的数量,N 是输出通道的数量。由于我们将通道和空间特征的计算分开,所以我们可以将乘法转化为加法,这是一个较小的量级。更好的是,从这个比值可以看出,输出通道的数量越大,使用这个新的卷积可以节省越多的计算量。
MobileNet 的另一个贡献是宽度和分辨率倍增。MobileNet 团队希望找到一种规范的方法来缩小移动设备的模型大小,而最直观的方法是减少输入和输出通道的数量,以及输入图像的分辨率。为了控制这种行为,比率 alpha 与通道相乘,比率 rho 与输入分辨率相乘(这也会影响要素地图的大小)。因此,参数的总数可以用下面的公式表示:
“MobileNets:用于移动视觉应用的高效卷积神经网络”
虽然这种变化在创新方面看起来很幼稚,但它具有巨大的工程价值,因为这是研究人员第一次总结出一种规范的方法来调整网络以适应不同的资源约束。此外,它还总结了改进神经网络的最终解决方案:更宽和高分辨率的输入导致更好的精度,更薄和低分辨率的输入导致更差的精度。
随后在 2018 年和 2019 年,MobiletNet 团队还发布了《MobileNetV2:反向残差和线性瓶颈》和《寻找 MobileNetV3》。在 MobileNetV2 中,使用了一种反向剩余瓶颈结构。在 MobileNetV3 中,它开始使用神经架构搜索技术搜索最佳架构组合,我们将在接下来介绍这一点。
2017 年:纳斯网
用于可伸缩图像识别的学习可转移架构
就像针对资源受限环境的图像分类一样,神经架构搜索是 2017 年左右出现的另一个领域。通过 ResNet、Inception 和 Xception,我们似乎达到了人类可以理解和设计的最佳网络拓扑,但如果有更好、更复杂的组合,远远超出人类的想象,会怎么样呢?2016 年一篇名为《具有强化学习的神经架构搜索》的论文提出了一种思想,利用强化学习在预定义的搜索空间内搜索最优组合。众所周知,强化学习是一种为搜索主体寻找目标明确、回报丰厚的最优解的方法。然而,受计算能力的限制,本文只讨论了在一个小的 CIFAR 数据集上的应用。
NASNet 搜索空间。" 学习可扩展图像识别的可转移架构 "
为了找到像 ImageNet 这样的大型数据集的最佳结构,NASNet 创建了一个为 ImageNet 量身定制的搜索空间。它希望设计一个特殊的搜索空间,这样在 CIFAR 上的搜索结果也可以在 ImageNet 上很好地工作。首先,NASNet 假设 ResNet 和 Xception 等优秀网络中常见手工制作的模块在搜索时仍然有用。所以 NASNet 不是搜索随机的连接和操作,而是搜索 ImageNet 上已经被证明有用的这些模块的组合。第二,实际搜索仍然是在分辨率为 32x32 的 CIFAR 数据集上执行的,因此 NASNet 只搜索不受输入大小影响的模块。为了使第二点起作用,NASNet 预定义了两种类型的模块模板:Reduction 和 Normal。与输入相比,归约像可能具有归约的特征图,而对于正常像,情况也是如此。
从" 学习可扩展图像识别的可转换架构 "
尽管 NASNet 比手工设计的网络有更好的度量,但它也有一些缺点。寻找最佳结构的成本非常高,只有像谷歌和脸书这样的大公司才能负担得起。此外,最终的结构对人来说没有太大的意义,因此在生产环境中更难维护和改进。2018 年晚些时候,“MnasNet:移动平台感知神经架构搜索”通过用预定义的链式块结构限制搜索步骤,进一步扩展了 nasNet 的想法。此外,通过定义权重因子,mNASNet 给出了一种更系统的方法来搜索给定特定资源约束的模型,而不仅仅是基于 FLOPs 进行评估。
2019 年:效率网
EfficientNet:重新思考卷积神经网络的模型缩放
2019 年,CNN 的监督图像分类似乎不再有令人兴奋的想法。网络结构的剧烈变化通常只会带来很小的精度提高。更糟糕的是,当相同的网络应用于不同的数据集和任务时,之前声称的技巧似乎不起作用,这导致了对这些改进是否只是在 ImageNet 数据集上过度拟合的批评。另一方面,有一个技巧永远不会辜负我们的期望:使用更高分辨率的输入,为卷积层添加更多的通道,并添加更多的层。虽然非常残酷,但似乎有一种原则性的方法可以按需扩展网络。MobileNetV1 在 2017 年提出了这一点,但后来重点转移到了更好的网络设计上。
摘自"" efficient net:反思卷积神经网络的模型缩放 "
在 NASNet 和 mNASNet 之后,研究人员意识到,即使有计算机的帮助,架构的改变也不会产生那么大的好处。所以他们开始退回到扩展网络。EfficientNet 就是建立在这个假设之上的。一方面,它使用 mNASNet 的最佳构建块来确保良好的基础。另一方面,它定义了三个参数α、β和ρ来相应地控制网络的深度、宽度和分辨率。通过这样做,即使没有大型 GPU 池来搜索最佳结构,工程师仍然可以根据他们不同的要求,依靠这些原则参数来调整网络。最后,EfficientNet 给出了 8 个不同的变体,它们具有不同的宽度、深度和分辨率,并且对于小型和大型模型都获得了良好的性能。换句话说,如果你想要高精度,请使用 600x600 和 66M 参数的高效 B7 网络。如果您想要低延迟和较小的型号,请选择 224x224 和 5.3M 参数 EfficientNet-B0。问题解决了。
阅读更多
如果你读完了以上 10 篇论文,你应该对 CNN 图像分类的历史有了很好的了解。如果你喜欢继续学习这个领域,我还列出了一些其他有趣的论文来阅读。虽然没有被列入前十名,但这些论文在各自领域都很有名,并激励了世界上许多其他研究人员。
2014 年:SPPNet
用于视觉识别的深度卷积网络中的空间金字塔池
SPPNet 借鉴了传统计算机视觉特征提取中特征金字塔的思想。这个金字塔形成了一个不同尺度的特征词包,因此可以适应不同的输入大小,摆脱了固定大小的全连通层。这个想法也进一步启发了 DeepLab 的 ASPP 模块,以及用于对象检测的 FPN。
2016 年:DenseNet
密集连接的卷积网络
康奈尔大学的 DenseNet 进一步扩展了 ResNet 的想法。它不仅提供层之间的跳过连接,而且具有来自所有先前层的跳过连接。
2017 年:SENet
压缩和激励网络
例外网络证明了跨通道相关性与空间相关性没有太大关系。然而,作为上届 ImageNet 比赛的冠军,SENet 设计了一个挤压和激励块,并讲述了一个不同的故事。SE 块首先使用全局池将所有通道压缩为更少的通道,应用完全连接的变换,然后使用另一个完全连接的层将它们“激发”回原始数量的通道。所以本质上,FC 层帮助网络学习输入特征图上的注意力。
2017 年:ShuffleNet
ShuffleNet:一个用于移动设备的非常有效的卷积神经网络
ShuffleNet 建立在 MobileNetV2 的反向瓶颈模块之上,它认为深度方向可分离卷积中的点方向卷积牺牲了精度,换取了更少的计算。为了弥补这一点,ShuffleNet 增加了一个额外的频道洗牌操作,以确保逐点卷积不会总是应用于同一个“点”。在 ShuffleNetV2 中,这种信道混洗机制还进一步扩展到了 ResNet 身份映射分支,因此身份特征的一部分也将用于混洗。
2018:锦囊妙计
卷积神经网络用于图像分类的技巧包
锦囊妙计集中在图像分类领域使用的常见技巧。当工程师需要提高基准性能时,它是一个很好的参考。有趣的是,这些技巧,如混合增强和余弦学习率,有时可以实现比新的网络架构更好的改进。
结论
随着 EfficientNet 的发布,ImageNet 分类基准似乎走到了尽头。利用现有的深度学习方法,除非发生另一次范式转变,否则我们永远不会有一天能够在 ImageNet 上达到 99.999%的准确率。因此,研究人员正在积极寻找一些新的领域,如大规模视觉识别的自监督或半监督学习。与此同时,对于工程师和企业家来说,使用现有的方法找到这种不完美技术的实际应用变得更加困难。未来我还会写一份调查,分析那些以图像分类为动力的现实世界计算机视觉应用,敬请期待!如果你认为还有其他重要的论文可以阅读,请在下面留下评论,让我们知道。
原载于http://yanjia . Li2020 年 7 月 31 日
参考
- Y.Lecun,L. Bottou,Y. Bengio,P. Haffner, 基于梯度的学习应用于文档识别
- Alex Krizhevsky,Ilya Sutskever,Geoffrey E. Hinton, 使用深度卷积神经网络的 ImageNet 分类
- 卡伦·西蒙扬,安德鲁·齐泽曼, 用于大规模图像识别的极深度卷积网络
- 克里斯蒂安·塞格迪、、贾、皮埃尔·塞尔马内、斯科特·里德、德拉戈米尔·安古洛夫、杜米特鲁·尔汉、文森特·万霍克、安德鲁·拉宾诺维奇、
- Sergey Ioffe,Christian Szegedy, 批量归一化:通过减少内部协变量移位加速深度网络训练
- 何、、、、、、 用于图像识别的深度残差学习
- Franç ois Chollet, 例外:深度可分卷积深度学习
- Andrew G. Howard,Menglong Zhu,,Dmitry Kalenichenko,,Tobias Weyand,Marco Andreetto,Hartwig Adam, MobileNets:用于移动视觉应用的高效卷积神经网络
- 巴雷特·佐夫,维贾伊·瓦苏德万,黄邦贤·施伦斯,阔克诉勒, 学习用于可伸缩图像识别的可转移架构
- 谭明兴,郭诉乐, EfficientNet:卷积神经网络模型缩放的再思考
- 何、、、、、, 空间金字塔池深度卷积网络用于视觉识别
- 黄高,刘庄,劳伦斯·范·德·马腾,基利安·q·温伯格,
- 、沈李、萨缪尔·阿尔巴尼、、吴,压缩-激发网络
- 、林、、、 ShuffleNet:一种用于移动设备的极其高效的卷积神经网络
- 佟鹤,,张航,,,谢,卷积神经网络用于图像分类的锦囊妙计
Github 上的 10 个流行数据科学资源
原文:https://towardsdatascience.com/10-popular-data-science-resources-on-github-7ae288ff4a75?source=collection_archive---------22-----------------------
一些顶级的 GitHub 库将教你所有关于数据科学的知识
照片由 Richy Great 在 Unsplash 上拍摄
数据科学领域带来了各种科学工具、流程、算法和从结构化和非结构化数据中提取知识的系统,用于识别其中有意义的模式。
数据科学正在成为本世纪最重要的技术之一。个人和企业惊讶地看到 数据科学在众多领域 中的能力,例如教育、医疗保健、研究、信息技术等等。如果你也渴望学习数据科学,互联网上有很多资源会对你有用。
GitHub 就是这样一个令人惊叹的平台,一个所有软件工程师都聚集的社区。这篇文章背后的目标是让你从我们为你收集的最流行和顶级的 Github 库开始尽可能多地学习数据科学。请继续阅读!
数据科学是让数据变得有用的学科
了解数据科学访谈中的最新问题趋势
towardsdatascience.com](/top-data-science-interview-questions-and-answers-for-entry-level-and-mid-level-folks-ce81ad8fa9bb)
Github 上的数据科学资源
称 GitHub 仅仅是一个代码库和协作平台是不公平的,因为它远不止于此。知道 GitHub 的人不多,但是 GitHub 也是最好的地方之一,可以了解大量使用各种编程语言构建的项目,这些语言现在可以用于各种现代用例。在本节中,我们列出了 10 个顶级 GitHub 存储库,它们将教会你所有关于数据科学的知识。
1.数据科学 iPython 笔记本
星星: 19.7k
分叉者: 6.3k
涵盖的主题:深度学习、scikit-learn、Kaggle、大数据、Python 库、Python essentials、AWS 等等。
作者:多恩·马丁
GitHub 链接:https://GitHub . com/donne Martin/data-science-ipython-notebooks
来自脸书的技术负责人 Donne Martin 的数据科学 IPython 笔记本 repo 涵盖了广泛的热门主题和技术工具,如大数据、 机器学习 、业务分析、Python 基础知识以及一些命令行实用程序、 TensorFlow 、 Keras 、熊猫【等
每本 IPython 笔记本都包含关于基础、实现、有用提示的深入信息,以及一些与主题相关的有用练习。其中一些甚至涵盖了更有经验的专业人士的高级主题。我们建议查看回购协议,了解所涉及工具的完整列表。
看看吧,你为什么要读它们?
towardsdatascience.com](/python-books-you-must-read-in-2020-a0fc33798bb) [ GitHub 上十大热门 Python 项目
像这样的 GitHub 项目是人们创造力和才华的完美展示
towardsdatascience.com](/top-10-trending-python-projects-on-github-fb852cd58262)
2.开源数据科学大师
星星: 16.3k
分叉者: 5.6k
涵盖的主题:数据分析,Python,R
作者:克莱尔·科特尔
GitHub 链接:https://github.com/datasciencemasters/go
由 数据科学家 Clare Corthell,Luminant 数据科学咨询的创始合伙人之一创建,开源数据科学硕士是一门学习数据科学的开源课程。本课程的源材料本质上是基础性的,面向步入数据科学世界的初学者。
整个课程分为三个部分,包括来自华盛顿大学的介绍性视频、来自哈佛大学的视频和课程材料,以及一本基于数据科学和开源工具的书。
该报告涵盖了基于 Python 的数据科学的一些介绍性主题,如关系代数、统计、图形、可视化、数据争论技术、数据管理、回归、分类和预测分析等等。
熟悉 R 的个人不会被排除在外,因为课程也提供 R 资源。
可视化在数据科学中扮演着重要的角色,因为它们有能力表示…
blog.digitalogy.co](https://blog.digitalogy.co/top-r-libraries-for-data-visualization/)
3.牛逼的数据科学
星星: 14.4k
分叉者: 4.1k
涵盖的主题:什么是数据科学,为什么数据科学,数据集数据科学学院,MOOCs,数据集,播客和博客,书籍,时事通讯。
作者:法蒂赫·阿克蒂尔克,侯赛因·梅尔特&奥斯曼·温古尔,雷杰普·埃罗尔
GitHub 链接:https://github.com/academic/awesome-datascience
发烧友法提赫·阿克图尔克、胡塞因·梅尔特、雷杰普·埃罗尔和奥斯曼·温古尔是这个令人敬畏的数据科学报告的创造者,该报告专门针对数据科学领域的新手。 repo 使用 Python ,由大量资源组成,这些资源分为几个部分,以便于浏览:
●信息图表
●教授数据科学的大学
●海量在线开放课程列表
●用于实践的样本数据集
●数据科学博客作者及其博客列表
●时事通讯、期刊、出版物和杂志
●数据科学播客
●书籍
●各种以数据科学为中心的工具列表
●可视化工具
●少量教程
●以及其他类似超赞系列的链接
4.数据科学家路线图
星星: 3.2k
分叉者: 914
By: MrMimic
GitHub 链接:【https://github.com/MrMimic/data-scientist-roadmap
MrMimic 的 repo 提供了各种关键领域的全面覆盖,以及一系列常用的工作工具,这是精通数据科学所必需的。
这份极有价值的数据科学家路线图归功于 Swami Chandrasekaran ,毕马威(KPMG)的总经理和前 IBM 工程师,他在他的信息图中精心展示了数据科学家必须具备的技能。
地铁地图将每个主题列为一个区域/领域,而车站代表你必须完成该区域的主题。为了方便起见,域根据难度进行编号,从 1 到 10。
Swami Chandrasekaran 的数据科学技能路线图
5.斯坦福 Tensorflow 教程
星星: 9.7k
分叉者: 4.4k
By: 芯片呼延
GitHub 链接:https://github.com/chiphuyen/stanford-tensorflow-tutorials
由斯坦福大学讲师 Chip Huyen 创建,回购是斯坦福大学名为 tensor flow for Deep Learning Research 的课程的部分,包含该课程的代码示例。本报告的内容分为作业和范例,同时还包括课程中使用的工具清单。
代码示例涵盖了使用 TensorFlow 的各种任务,如建模、简单线性和逻辑回归、卷积网络、递归神经网络。学生可以公开使用这个回购,从斯坦福大学最优秀的头脑之一那里了解上述数据科学主题。
6.数据科学博客
星星: 5.3k
分叉者: 1.6k
涵盖主题:数据科学博客列表
作者: Artem Golubin
GitHub 链接:https://github.com/rushter/data-science-blogs
由 Artem Golubin 创建,数据科学博客 repo 充满了互联网上一些信息量最大、写得最好、免费的数据科学博客的链接。收集的内容包括许多知名数据科学从业者、处于创新前沿的企业(如亚马逊)和各种其他网站如KD nuggets的深刻见解。
此回购中列出的博客涵盖了广泛的主题,包括该行业中具有不同技能和经验水平的人的最新动态。如果你使用 RSS 阅读器,你不会失望,因为 repo 中的大多数链接都是 RSS 友好的。
最值得信赖和享有盛誉的来源,让您了解数据科学领域的最新动态。
towardsdatascience.com](/best-data-science-blogs-to-follow-in-2020-d0eb4)
7.数据科学资源
星星: 2k
分叉者: 995
涵盖的主题:数据科学工具、博客、演示、教程、课程等等。
作者:乔纳森·鲍尔
GitHub 链接:https://github.com/jonathan-bower/DataScienceResources
回购最初是由乔纳森·布鲁尔创建的,作为他获得的所有最好和高质量数据科学资源的一站式来源。通过看到其他人的兴趣,乔纳森公开了回购给每个人。
Jonathan 包含的不仅仅是数据科学中涉及的技术组件。他的 repo 是帮助识别和理解现实世界中涉及的最佳数据科学实践以及它如何解决行业中的实际问题的资源的家园。如果你想深入了解公开的数据科学的实际实施和好处,以及它为你开辟的职业道路,这份报告会非常有帮助。
看看吧,你为什么要读它们?
towardsdatascience.com](/data-science-books-you-must-read-in-2020-1f30daace1cb)
8.数据科学最佳资源
星星: 808
分叉者: 365
涵盖的主题:数据科学博客、书籍、课程、回购、人工智能、Git 和 Github
作者: Tirthajyoti Sarkar
GitHub 链接:https://github.com/tirthajyoti/Data-science-best-resources
由 Tirthajyoti Sarkar 创建的这个策划回购包含了大量非常有用的资源,可供任何有兴趣了解这十年来最热门技术的人使用。回购的创造者已经纳入了来自趋势领域的几个关键主题,如数据科学、 人工智能 、云计算、Web 技术、等等。
除了详细介绍这些主题之外,repo 还附带了各种书籍、文章、视频、MOOCs、编程教程和指南,以补充各种主题,并结构化个人的数据科学学习过程。
9.火花笔记本
星星: 3k
分叉者: 640
安迪·彼得雷拉
GitHub 链接:https://github.com/spark-notebook/spark-notebook
安迪彼得雷拉在 GitHub 上的 Spark Notebook repo 主要面向企业环境,帮助他们的现代数据科学家和数据工程师配备基于网络的编辑器,这些编辑器能够与Scala、[SQL](http://www.sqlcourse.com/intro.html#:~:text=SQL%20(pronounced%20%22ess%2Dque,for%20relational%20database%20management%20systems.)查询、标记和JavaScript无缝协作。如此强大的编辑器可以简化处理海量数据的工作,以完成探索、分析和学习相关的任务。
这款笔记本的亮点 包括多火花上下文支持,允许你用一个新的 JVM 运行每个笔记本。它还支持数据驱动的配置,独家使用 Scala 作为编程语言,并使用动态和反应组件来创建更直观和交互式的可视化。
10.学数据科学
星星: 2.5k
分叉者: 1.6k
涵盖的主题:线性回归、逻辑回归、随机森林和 K 均值聚类
作者:尼廷·博尔万卡
【https://github.com/nborwankar/LearnDataScience】GitHub 链接:
Nitin Borwankar 的 repo 对任何对数据科学感兴趣的人开放,它包含一个以 IPython 笔记本形式的该领域学习材料的精选集合。repo 涵盖了数据科学中的四个主要主题,包括线性回归、逻辑回归、随机森林和 K 均值聚类,以及它们各自的数据集。
每个主题都有自己的 IPython 笔记本,为您提供技术概述、数据探索工具以及从数据集中提取见解的步骤。学习数据科学报告对于那些希望了解数据科学基础知识,同时有现成的实践工具来尝试这些数据探索技术的人来说非常有价值。
面向数据科学的流行 Python 库概述
towardsdatascience.com](/top-python-libraries-for-data-science-c226dc74999b)
结论
GitHub repos 不仅是现代代码的重要信息源,也是其背后技术的重要信息源。类似于互联网上的其他来源,如社交媒体帐户、参考网站、指南、视频等,GitHub 也值得成为您关于数据科学以及其他趋势技术的可靠和有用的知识来源。
在整篇文章中,我们简要讨论了一些最受欢迎的 GitHub 存储库,用于学习数据科学,这些存储库中的大多数都包含值得浏览的资源,可以帮助您在行业中找到一份声誉好、收入高的工作。如果你正在学习数据科学,我们强烈建议你查看这些回复,我们相信你会找到一些有价值的东西。祝你好运!
注: 为了消除各种各样的问题,我想提醒你一个事实,这篇文章仅代表我想分享的个人观点,你有权不同意它。
如果你有更多的建议或想法,我很乐意倾听。
更多有趣的读物
我希望这篇文章对你有用!以下是一些有趣的读物,希望你也喜欢
使用谷歌人工智能中心将想法变为现实
towardsdatascience.com](/top-google-ai-tools-for-everyone-60346ab7e08) [ 2020 年你必须使用的最好的 Python IDEs 和代码编辑器
具有显著特性的顶级 Python IDEs 和代码编辑器
towardsdatascience.com](/best-python-ides-and-code-editors-you-must-use-in-2020-2303a53db24) [ 2020 年必读的机器学习书籍
看看吧,你为什么要读它们?
towardsdatascience.com](/machine-learning-books-you-must-read-in-2020-d6e0620b34d7) [ Python vs. Node。JS:哪个最适合你的项目?
使用一组预定义的因素对 Python 和 Node.js 进行详细比较
towardsdatascience.com](/python-vs-node-js-which-one-is-best-for-your-project-e98f2c63f020) [ 数据科学家的最佳数据科学工具
数据科学工具,使任务可以实现
towardsdatascience.com](/best-data-science-tools-for-data-scientists-75be64144a88)
关于作者
克莱尔丁。是Digitalogy—的内容制作者和营销人员,这是一个技术采购和定制匹配市场,根据全球各地的特定需求,将人们与预先筛选的&顶尖开发人员和设计师联系起来。在 上跟我连线Linkedin&Twitter。
个性化 Jupyter 笔记本需要知道的 11 个实用技巧
原文:https://towardsdatascience.com/10-practical-tips-you-need-to-know-to-personalize-jupyter-notebook-fbde20?source=collection_archive---------5-----------------------
作者图片
定制 JUPYTER
如何使用 CSS 创建优秀的 Jupyter 笔记本用户界面
你是一个使用 Jupyter Notebook 作为你的编译器的 python 程序员吗?如果您想尝试在 Jupyter Notebook 中运行 python 代码的新体验(以下简称;Jupyter),你可以通过你喜欢的颜色,字体系列来改变和个性化它。你可以应用我推荐的 11 个实用技巧来构建你的 Jupyter 用户界面。
当您打开它时,您可能看到的默认 Jupyter 如图 1 所示。
图一。Jupyter 中的默认主页(左)和 python 页面(右)(图片作者/ Rizky MN )。
在这个故事的结尾,我将把我的 Jupyter 个性化到我的主题中,如图 2 所示。
图二。Jupyter 中的个性化主页(左)和 python 页面(右)(图片作者/ Rizky MN )。
这个故事是将登陆页面应用到 Jupyter 的后续故事。我重用了那个故事中的一些代码,并从罗德里戈·西尔维拉的故事中给了一些额外的 CSS 定制。他使用 CSS 构建独特的 Jupyter 主题。我试着解释我使用的每个 CSS 代码的含义。
要使用 CSS 定制它,您需要检查目录~/中名为 custom.css 的文件。jupyter/custom。如果有,可以给它添加一些 CSS 代码。但是,如果您还没有它,您需要在提到的目录中创建文件。如果目录不可用,您需要创建目录。您可以在图 3 中看到我提到的文件。
图 3。Linux 中 custom.css 的目录(图片作者/ Rizky MN )。
我说的目录是 Linux 的。如果您使用不同的操作系统,您需要找到 Jupyter 的安装目录。对于 Windows 用户来说,我认为它在下面的目录中。
C:\Users\YourUsername\Anaconda3\Lib\site-packages\notebook\static\custom\custom.css
但是,我没有检查过。
01.自定义标题
当您打开 Jupyter 时,您将被定向到默认的 Jupyter 主页, http://localhost:8888/tree。默认主页界面如图 4 所示。
图 4。默认的 Jupyter 主页(图片作者/ Rizky MN )。
要定制 Jupyter 主页的标题,您需要在 custom.css 文件中添加以下代码
#ipython_notebook::before{ content:"Welcome to my Jupyter Notebook" }#ipython_notebook img{ display:none; }
添加上面的代码后,您需要保存文件并刷新 Jupyter 页面。刷新后的界面如图 5 所示。
图 5。Jupyter 主页的定制标题(图片由作者/ Rizky MN 提供)。
标题页从 Jupyter 徽标更改为“欢迎使用我的 Jupyter 笔记本”您可以通过在 custom.css 文件中写下您想要的标题来自由更改文本。更新后的 custom.css 文件如图 6 所示。
图 6。更新后的 custom.css 文件(图片作者/ Rizky MN )。
02.自定义字体
您可以更改 Jupyter 中使用的字体,包括标题字体、工具栏字体和单格字体。要更改标题字体,您需要定义您使用的字体,如下面的 CSS 所示
#ipython_notebook::before{ content:"Welcome to my Jupyter Notebook"; font-family: Verdana; font-weight: 700; color: orange; }
我将标题默认字体改为 Verdana,权重为 700,颜色为橙色。如果您在 custom.css 中添加上面的 CSS,保存它,并刷新 Jupyter 页面,您将看到 Jupyter 的更新界面,如图 7 所示。
图 7。Jupyter 主页的自定义标题字体(图片由作者/ Rizky MN )。
如果你想改变正文中使用的字体,你可以添加这个 CSS
[@import](http://twitter.com/import) url([https://fonts.googleapis.com/css?family=Open+Sans](https://fonts.googleapis.com/css?family=Open+Sans));body{ font-family: 'Open Sans'; font-weight: 600; }
我把正文字体改成 Open Sans。首先,我需要从 font.googleapis.com 进口。您也可以使用与前一个类似的 CSS 来更改权重。更新后的界面如图 8 所示。
图 8。Jupyter 主页的自定义正文字体(图片由 Author / Rizky MN )。
如果你想从一个文件中导入字体,你可以使用这个 CSS
@font-face { font-family: roboto-regular; src: url('../font/Roboto-Regular.ttf'); }
下面是更改 Jupyter 界面的 CSS,如图 8 所示。
#ipython_notebook::before{ content:"Welcome to my Jupyter Notebook"; font-family: Verdana; font-weight: 700; color: orange; }#ipython_notebook img{ display:none; }[@import](http://twitter.com/import) url([https://fonts.googleapis.com/css?family=Open+Sans](https://fonts.googleapis.com/css?family=Open+Sans));body{ font-family: 'Open Sans'; font-weight: 600; }
我喜欢 Lato 字体,所以我在我的 Jupyter 主题中使用它。我使用 Verdana (serif)使其不同于默认字体(sans-serif)。
03.自定义徽标
您可以用您的徽标更改 Jupyter 的标题。在这个故事中,我将使用我最喜欢的徽标,如图 9 所示。
图 9。我的 logo(图片作者/ Rizky MN )。
要将它应用到 Jupyter 页面中,可以使用这个 CSS
#ipython_notebook img{ display:block; background: url("logo.png") no-repeat; background-size: contain; width: 100px; height: 30px; padding-left: 100px; padding-right: 50px; -moz-box-sizing: border-box; box-sizing: border-box; }
我将我的徽标放在 custom.css 的一个类似目录中,因此我声明我的徽标名为 logo.png。您可以更改宽度、高度和其他 CSS 来精确放置您的徽标。结果如图 10 所示。
图 10。为你的 Jupyter 定制的 logo(图片作者/ Rizky MN )。
如果您检查 python 页面,您将看到更新后的界面,如图 11 所示。
图 11。Jupyter 中为您的 python 页面定制的徽标(图片由作者/ Rizky MN )提供。
如果您将所有的字体都改为宽度为 700 的 Verdana 字体,您可以看到不同之处,如图 12 所示。
图 12。在 Jupyter 中为您的 python 页面定制的徽标和字体(图片由作者/ Rizky MN 提供)。
04.自定义标题素
现在,我们重点讨论如何在 Jupyter 中自定义 Python 页面的界面。我想把 body 素背景色上面的所有素都改成和我的 logo 背景色相似的颜色(蓝色,十六进制颜色索引#78abd2)。我用这个 CSS 来改变它
body > #header { background: #78abd2; }
您可以在图 13 中看到结果。
图 13。Jupyter 中定制的 header 素(图片作者/ Rizky MN )。
接下来是改变导航栏的背景颜色(文件,编辑,查看等。).要改变它,你可以使用下面的 CSS。
#notebook_name { font-weight: 500; color: white; }
用上面的 CSS,我把字体颜色改成白色,加粗一些。结果如图 14 所示。
图 14。Jupyter 中定制的 header 素(图片作者/ Rizky MN )。
然后,我将使用这个 CSS 改变最后一个检查点的字体颜色
.checkpoint_status, .autosave_status { color: white; }
结果如图 15 所示。
图 15。Jupyter 中定制的 header 素(图片由 Author / Rizky MN )。
下一步是改变导航栏的背景颜色(文件,编辑,查看等)。要改变它,你可以使用下面的 CSS。
.navbar-default { background: none; border: none; }
我去掉了导航栏的背景色,这样它就有了和标题背景色(蓝色)相似的颜色。我还移除了每个导航选项的边框。结果如图 16 所示。
图 16。Jupyter 中的自定义导航栏(图片由作者/ Rizky MN )。
下一步是改变导航栏中的字体颜色,并使用 CSS 添加动画。
.navbar-default .navbar-nav > li > a, #kernel_indicator { color: white; transition: all 0.25s; }
结果如图 17 所示。
图 17。Jupyter 中的自定义导航栏(图片由作者/ Rizky MN )提供。
我提到的动画是当你把光标移动到其中一个导航栏选项,比如文件,文件的颜色会变成黑色。
您可以添加的另一个动画是显示选定导航栏的下划线。要添加它,您可以使用这个 CSS
.navbar-default .navbar-nav > li > a:hover, #kernel_indicator:hover{ border-bottom: 2px solid #fff; color: white; }
结果如图 18 所示。
图 18。Jupyter 中的自定义导航栏(图片由作者/ Rizky MN )。
当我将光标移至“导航”时,动画会在“导航”下方显示下划线。当你另一个地方,它就会消失。
05.自定义背景
在我们定制了标题素之后,我们将定制正文素。首先,我将把 body 素的背景色改为白色。要改变它,可以使用这个 CSS。
.notebook_app { background: white !important; }
结果如图 19 所示。
图 19。Jupyter 中定制的身体素(图片作者/ Rizky MN )。
06.自定义单格宽度
要改变单格宽度,可以使用这个 CSS
.container { width: 95% !important; }
结果如图 20 所示。
图 20。Jupyter 中的自定义单格宽度(图片由作者/ Rizky MN 提供)。
07.自定义单格之间的边框
接下来是隐藏单格之间的边界。要隐藏它,您可以使用这个 CSS
div.input_area { border: none; border-radius: 0; background: #f7f7f7; line-height: 1.5em; margin: 0.5em 0; padding: 0; }#notebook-container{ box-shadow: none !important; background-color: white; }
结果如图 21 所示。
图 21。Jupyter 中定制的边框单格(图片作者/ Rizky MN )。
08.向所选单格添加动画
您可以添加动画,使选定的单格将被放大,并有阴影效果。要应用它,您可以使用下面的 CSS
div.cell { transition: all 0.25s; border: none; position: relative; top: 0; }div.cell.selected, div.cell.selected.jupyter-soft-selected { border: none; background: transparent; box-shadow: 0 6px 18px #aaa; z-index: 10; top: -10px; }
结果如图 22 所示。
图 22。Jupyter 中的自定义细胞动画(图片由作者/ Rizky MN )。
09.自定义输出单格
默认情况下,输出单格是左对齐的,如图 23 所示。
图 23。Jupyter 中的默认输出对齐方式(图片由 Author / Rizky MN )。
要改变它,你可以使用这个 CSS
.output { align-items: center; }
结果如图 24 所示。
图 24。Jupyter 中的自定义输出对齐(图片由作者/ Rizky MN 提供)。
10.自定义数据框/表
您可以在 Jupyter 中自定义数据框的背景、对齐方式和填充。默认设置如图 25 所示(输出居中后)。
图 25。Jupyter 中默认的数据框接口(图片由作者/ Rizky MN )。
你可以使用这个 CSS 来定制它。
.dataframe { /* dataframe atau table */ background: white; box-shadow: 0px 1px 2px #bbb; }.dataframe thead th, .dataframe tbody td { text-align: center; padding: 1em; }
我设置背景颜色为白色,右对齐,并调整框阴影和填充。结果如图 26 所示。
图 26。Jupyter 中定制的数据框接口(图片由作者/ Rizky MN )。
11.定制线路盒
最后,如果你想删除行框,你可以使用这个 CSS
div.prompt, div.tooltiptext pre { display:none }
结果如图 27 所示。
图 27。Jupyter 中定制的 line 单格(图片由作者/ Rizky MN )。
我没有在我的 Jupyter 上应用这个习惯。我让行单格可见。如果你喜欢隐藏它,你可以使用上面的 CSS。
结论
最后,我将在下面的 CSS 中分享我的 Jupyter 的 CSS 定制。
下面是捕获的结果。
如果你喜欢这篇文章,这里有一些你可能喜欢的其他文章:
[ 使用 Matplotlib 实现 Python 数据可视化—第 1 部分
完成了从基础到高级的 Python 绘图的 Matplotlib 教程,包含 100 多个示例
towardsdatascience.com](/visualizations-with-matplotlib-part-1-cb6b8) [ 使用 Matplotlib 实现 Python 数据可视化—第 2 部分
完成了从基础到高级的 Python 绘图的 Matplotlib 教程,包含 100 多个示例
towardsdatascience.com](/python-data-visualization-with-matplotlib-part-2-66f1307d42fb) [ 使用 Matplotlib 可视化数据的 5 个强大技巧
如何使用 LaTeX 字体,创建缩放效果,发件箱图例,连续错误,以及调整框填充边距
towardsdatascience.com](/5-powerful-tricks-to-visualize-your-data-with-matplotlib-16bc33747e05) [ 在 Matplotlib 中自定义多个子情节
使用 subplot、add_subplot 和 GridSpec 在 Matplotlib 中创建复杂 subplot 的指南
towardsdatascience.com](/customizing-multiple-subplots-in-matplotlib-a3e1c2e099bc) [ Vaex 大数据简介—读取 12.5 亿行的简单代码
用 Python 高效读取和可视化 12.5 亿行星系模拟数据
towardsdatascience.com](/introduction-to-big-data-a-simple-code-to-read-1-25-billion-rows-c02f3f166ec9)
仅此而已。感谢您阅读这个故事。喜欢就评论分享。我还建议您关注我的帐户,以便在我发布新故事时收到通知。
对 21 世纪 30 年代软件发展趋势的 10 个预测
原文:https://towardsdatascience.com/10-predictions-about-the-software-development-trends-in-the-2030s-2fab86c5f661?source=collection_archive---------13-----------------------
从量子计算到字节码:2030 年及以后的主要软件发展趋势
来源:iStock
如果说我们把现代人类文明想象成一辆汽车,那么软件业就是那辆汽车的发动机。在 21 世纪,软件开发行业发生了许多创新、进步和颠覆。尤其是在过去十年中发生的创新和变化的数量是前所未有的。
以下是我们在过去十年目睹的重大变化:
- DevOps
- 持续集成/持续交付
- 集装箱化和虚拟化
- NoSQL,新西兰
- 云
- 微服务,无服务器
- 区块链
- 深度学习
- 数据密集型应用
- 基于 JavaScript 的 Web 开发(Angular,React,Vue)
随着数字化和工业 4.0 的快速发展,我们将在未来十年看到软件开发行业更加巨大的变化和创新。如果我今天进入低温睡眠,2030 年醒来,我将如何找到软件开发生态系统?
预测未来是一项艰难的工作。预测未来十年的软件发展趋势几乎是不可能的。在这里,我将列出 21 世纪 30 年代我们可以期待的十大软件发展趋势。
1.量子计算
来自 Pixabay 的皮特·林弗斯的图片
1982 年,诺贝尔奖物理学家理查德·费曼发表论文,《用计算机模拟物理的 , ,量子计算诞生*。*与经典计算机不同,它使用量子力学现象如叠加和量子纠缠进行计算。简单地说,数字计算机的晶体管可以处于一种状态:要么是 0,要么是 1。
但是量子计算机的基本单,量子位可以处于 0 或 1 的状态,也可以是 0 和 1 的线性组合。因此,量子计算机的能力随着每增加一个量子位而呈指数级增长。量子纠缠是指两个量子比特一旦纠缠,即使一个在地球上,另一个在仙女座星系上,也能瞬间交换信息。如果我们把数字计算机想象成一个普通人,那么量子计算机就像超级智能的外星人,可以同时和数百万人下棋,或者可以同时解决数百万个数学问题。
在过去的十年里,量子计算取得了很多进步。2019 年 10 月,谷歌声称他们已经通过其 54 量子位 Sycamore 量子计算机实现了量子霸权,尽管该消息受到了 IBM 的挑战:
谷歌在科学杂志上发表的一篇新文章中正式宣布,它已经实现了量子霸权
www.theverge.com](https://www.theverge.com/2019/10/23//google-quantum-supremacy-sycamore-computer-qubit-milestone)
上个月,霍尼韦尔声称已经制造出最强大的量子计算机,量子体积为64:
在通往量子计算未来的竞赛中,霍尼韦尔刚刚取得了新的领先优势。总部位于北卡罗来纳州的…
www.forbes.com](https://www.forbes.com/sites/davidjeans/2020/06/19/honeywell-says-it-has-built-the-worlds-most-powerful-quantum-computer/)
量子计算有几个挑战:QPU 需要放入几乎绝对零度的温度,量子计算机由于量子退相干会产生巨大的误差。在未来十年,量子计算将成为大公司最热门的研究课题,世界超级大国将争夺量子霸权。
在 21 世纪 30 年代,量子计算将得到显著发展,工程师将在现实世界中使用它,如量子物理模拟、天气预报、药物开发、金融建模、人工智能、交通优化、星际旅行。它还将成为人工智能等其他领域进步的催化剂。有了量子纠缠,我们终于可以看到分布式计算中 CAP 定理的终结因为量子纠缠粒子可以瞬间共享信息。
在 21 世纪 30 年代初,量子计算将开始威胁经典密码学和相关领域,如金融交易、区块链。因此,随着每个人都试图用量子密码术取代经典密码术,这个行业将会发生巨大的变化和骚动。到 21 世纪 30 年代末,量子计算将最终打破经典密码学,这可能会像维基解密一样引起巨大的社会骚动,因为它将解密许多安全和敏感的通信。
2030 年代将是量子计算的十年。
2.人工智能驱动的软件开发
图片来自pix abayGerd Altmann
2018 年 5 月,桑德尔·皮帅(谷歌首席执行官)发布了基于人工智能的智能功能,用于 Gmail 和谷歌文档。最初,我对它的有用性持怀疑态度。仅仅过了两年,我发现智能写作功能帮助我提高了打字速度,这真是太神奇了。对于软件开发人员来说,也有 AI 驱动的代码完成插件/扩展可用于主要的 ide,如codata 或 Kite 。人工智能驱动的测试生成工具或人工智能驱动的端到端测试工具也越来越受欢迎。
虽然这些人工智能驱动的软件开发工具还不强大,但它们将成为未来几天的热门话题。这些工具的任何改进都会在软件开发中带来巨大的生产力增益。随着未来开源项目数量的指数级增长,人工智能驱动的软件开发工具将拥有更多的训练数据,并且只会越来越好。
在 21 世纪 30 年代,软件开发人员将从各种人工智能驱动的软件开发工具中获得大量支持,如代码完成、测试生成、端到端测试、数据库建模、CI/CD 等。开发人员只需要定义方法名称和字段,人工智能将生成源代码,包括单/集成/验收测试。此外,开发人员将用简单的英语编写/讲述项目/类的功能,AI 将生成带有 CI/CD 和集成/验收测试的源代码。在 AI 的帮助下,21 世纪 30 年代的开发者体验和开发者生产率将比今天高得多。
3.低代码/无代码
图片来自 Pixabay 的викториябородинова
软件开发人员是目前最稀缺的资源。如果你是一个企业家,有一个伟大的想法,那么你必须首先雇佣一些开发人员来实现你的第一个产品或 MVP。即使你是软件公司的项目经理/产品经理,你仍然需要一个软件开发团队来开发你的 MVP。同样,你必须等待相当长的时间(几个月到一年)才能看到你的 MVP。
在过去的几年里,一个新的运动 L CNC(低代码无代码)正在获得牵引力,它试图减少产品开发的障碍。有许多优秀的 LCNC 应用程序能够在短时间内开发出第一个产品,而不需要任何软件工程师。Bubble、Huddle、Webflow 提供了快速的 Web 应用程序开发。Kodika 提供无代码的 iOS 应用开发。抛物线是一个无代码数据工作流平台,而 Airtable 是 LCNC 数据库和电子表格的混合体。还有一个人工智能/人工智能的 LCNC 平台。
当前的 LCNC 平台要开发高度灵活的行业级应用程序还有很长的路要走。如果我们认为工业级应用程序是乐高头脑风暴,那么当前的 LCNC 应用程序就像乐高得宝。在未来十年,LCNC 平台将会发生巨大的变化。到 21 世纪 30 年代,将会有大量成熟的 LCNC 平台可以创建行业级应用。企业家或企业高管将使用 LCNC 开发 80–90%的消费者应用 MVP。将会有一些强大的人工智能驱动的 LCNC,甚至软件工程师也将使用它们来开始新的应用程序开发。因此,如果你有新鲜的想法,但没有钱或没有编码经验,21 世纪 30 年代将是你的绝佳时机。
4.新编程语言的兴起
由 Max Duzij 在 Unsplash 上拍摄的照片
在 2000 年代,我们认为我们不需要任何新的编程语言。有用于系统编程的 C/C++,用于商业应用的 Java,用于 Web 开发的 PHP/JavaScript,用于脚本的 Ruby/Python。但在接下来的十年里,我们看到了编程语言领域的许多创新和突破。Rust 的成功证明,有了创新的想法,一种新的语言甚至可以挑战强大的编程语言,如 C/C++。同样,Go 也表明了创造一种简单而强大的成功编程语言是可能的。 Swift、TypeScript、Julia、Kotlin、Dart、Elixir、Crystal、Elm 也是最近十年开发的流行且被广泛采用的编程语言。
在未来十年,我们将会看到编程语言领域更多的创新。起源于过去十年的编程语言将会更加流行,而许多其他新的编程语言将会登场。在 2030 年代,编程语言的市场份额将会更加分散,甚至比今天更分散。Rust 将取代 C/C++成为头号系统编程语言,而 T2 将取代 Python 成为人工智能的事实语言。随着人工智能驱动的软件开发和创新工具的出现,多语言编程将成为 21 世纪 30 年代的常态而非例外。
我预计 21 世纪 30 年代,数十种新的云原生编程语言将成为主流。此外,将会有一些更现代的量子计算编程语言。
到 2030 年, WebAssembly 将成为在支持多线程编程模型的 Web 或智能设备上运行的事实上的字节码格式。它将允许使用任何语言编写消费者应用程序(例如,Web、智能设备),充分利用带下划线的硬件(例如,GPU)的优势。因此,像 Rust 这样强大而接近金属的语言将被用于开发游戏、3d、AR/VAR 应用程序或其他针对 Web、智能设备的 CPU 密集型应用程序。此外,在 21 世纪 30 年代,浏览器将成为操作系统,几乎 100%的消费者桌面应用程序将在浏览器上运行。
5.云计算
图片来自 Pixabay
2006 年,亚马逊在云计算领域迈出了巨大的一步,提供了三种 AWS 云服务:EC2、S3 和 SQS。在接下来的 14 年里,云计算变得无孔不入,无处不在。最初,接受云计算的是初创公司。近年来,政府组织、医疗保健、采矿、银行、保险,甚至五角大楼都在向云迁移。新冠肺炎危机向我们展示了公司不仅需要适应云的纵向扩展/横向扩展,还需要适应云的横向扩展。科纳仕公司报告称,2020 年 Q1 的云支出将增长 34%:
2020 年 Q1 的云支出创历史新高,增长 34%,原因是远程工作需求云基础架构服务支出创历史新高…
www.canalys.com](https://www.canalys.com/newsroom/worldwide-cloud-infrastructure-services-Q1-2020)
未来十年,云计算将在软件开发中无处不在。此外,云计算的当前问题(例如,安全性)将在这十年内得到解决。谷歌通过 Cloud Native Foundation 统一云堆栈的尝试将聚集更多的蒸汽,许多云服务将在 2030 年实现标准化。
在 21 世纪 30 年代,云计算(公共/私有/混合)将是软件开发的“正常”方式。此外,内部数据中心将使用“标准化”云堆栈或特定于供应商的云堆栈。
由于量子计算机的物理要求,2030 年代我们将只在云中使用量子计算和量子人工智能。到 21 世纪 30 年代末,量子加密将会成熟,并将为云计算提供一个牢不可破的强大安全机制。不管我们是否喜欢,21 世纪 30 年代的云计算将是集中式的,只有大型科技公司才会像今天一样主导它。
6.人工智能
图片由 Gerd Altmann 从 Pixabay 拍摄
人工智能是计算机科学中最早的学科之一,但在人工智能的冬天面临着几次挫折。在第二个人工智能冬天(上世纪 90 年代)之后,人工智能的第一个重大突破性事件发生在 2012 年,当时谷歌大脑项目中的吴恩达用从 YouTube 视频中拍摄的 1000 万张未分类图片训练了一个 16000 CPU 节点的神经网络,它可以检测一只猫。另一个开创性的事件发生在 2016 年,当时谷歌的 AlphaGo AI 击败了围棋世界冠军,因为围棋可能的棋盘位置比宇宙中的原子总数还要多。
此外,现代硬件(GPU)和云计算推动了人工智能算法,这导致了过去十年中机器学习/深度学习的许多创新。Alexa/Siri、垃圾邮件检测、欺诈检测、自动驾驶、购物推荐、音乐推荐只是我们每天都在使用的庞大 AI 应用中的一小部分。
同样在未来十年,人工智能将出现重大创新和突破,特别是在强化学习方面。AI 将在 2030 年代开始吃掉世界。与普遍的看法相反,人工智能将帮助人类,而不是取代人类。我们将驾驶自动驾驶汽车。医生将使用人工智能进行更好的治疗。生命科学公司将利用人工智能进行更好的药物开发。即使作为开发者,我们也会使用 AI 驱动的操作系统和 AI 驱动的应用程序。
在 21 世纪 30 年代,人工智能将完全可以解释和诠释,不像今天。到那时,人工智能不仅能找到一只猫,还能解释或理解它为什么是一只猫。21 世纪 30 年代量子计算的突破将大大推动人工智能,因为神经网络模型将在量子计算机的帮助下即时训练并使用训练好的模型。我预计我们将看到人工智能奇点,即它将在没有人类帮助的情况下继续以失控的方式改进。
人工智能和量子计算将在 21 世纪 30 年代把人类文明带到下一个阶段(工业 5.0 )。
7.特定领域的硬件
图片来自 Pixabay
如果说我们从过去十年的软件开发行业中学到了什么,那就是“一刀切”但在硬件开发上,还是“一刀切”。今天的软件应用程序变化如此之大,以至于在许多情况下,专用硬件可以比通用硬件提供显著的优势。在过去几年中,有几个成功的特定领域硬件开发的例子。比特币挖矿有专门的硬件可以更高效地计算 SHA。谷歌开发了一个专门的 GPU (TPU) 为运行 TensorFlow 而优化。另一个非常成功的专业硬件是 Amazon AWS Nitro,这是一个用于容器化/虚拟化的专业硬件,在他们的无服务器 EC2 平台上为 Amazon 提供了很大的帮助。
在下一个十年,我们将会看到越来越多的专用计算硬件。2030 年代将会出现大量的专用硬件:数据库专用硬件、AI 专用硬件、数据处理专用硬件等等。目前,硬件开发类似于 2010 年之前的软件开发,导致发布周期较长。在 21 世纪 30 年代,硬件开发将结合软件开发的许多最佳实践。它将在跨职能团队中使用敏捷方法,硬件工程师将与特定领域的软件工程一起工作。因此,硬件发布周期将会更短,这反过来将会产生更多特定领域的硬件。
8.分布式 SQL
图片由皮克斯拜的 Gerd Altmann 提供
目前,我们面临着两个数据库的问题。根据 CAP 定理,对于分布式系统/分布式数据库,我们只能拥有 CAP 中的任意两个(一致性、可用性、分区容忍)。对于一致性是基本要求的应用程序(例如,银行、保险和大多数其他业务应用程序),我们使用 SQL 数据库(OLTP),它提供 CAP 的 CA。对于高度可扩展的应用程序,可用性是一致性的关键要求(例如,分析工作负载、社交媒体类工作负载),我们使用各种 NoSQL 数据库(OLAP)。将数据从 OLTP 移动到 OLAP 需要大量的工作。此外,SQL 数据库为数据(SQL)提供了单一的抽象层,而 NoSQL 不提供任何单一的抽象层。
在过去的几年里,我们已经看到了分布式 SQL (NewSQL) 数据库的兴起,它结合了 SQL 的一致性和 NoSQL 数据库的可伸缩性。虽然它们中的许多(蟑螂 DB,AWS Aurora)正在获得大量的牵引力,但仍有改进的空间。在下一个十年,我们将在分布式 SQL 领域看到更多的创新。
在 21 世纪 30 年代,我们可以看到真正的分布式 SQL,因为许多其他领域的创新(例如,专用硬件、量子计算)。一个想法可能是“量子纠缠 SQL 数据库,”其中量子纠缠 SQL 数据库的集群将提供 SQL 数据库的一致性,即使一个数据库在地球上,而另一个数据库在火星上。
9.统一的数据密集型应用
来自 Pixabay 的 David Mark 的图片
在过去的十年中,我们看到了数据密集型应用的爆炸式增长。我们有批处理工具(Spark,Hadoop Map Reduce),流处理工具(Flink,Strom),排队(Kafka,Pulsar),全文搜索工具(Solr,Elastic Search),缓存(Redis),列存储(Cassandra),行存储(SQL 数据库)。缺点是现在没有类似 SQL 的数据处理抽象。目前,为特定的数据建模寻找合适的数据密集型工具是一项艰巨的任务。
在未来十年,我们将看到许多数据处理工具的融合,它们将为批处理和流处理提供统一的数据建模。在 21 世纪 30 年代,我们将发现数据密集型应用程序更少分散,更统一。我们还将看到在同一数据处理框架中抽象许多数据建模(例如,流、全文搜索、缓存、列操作、行操作)的工具。此外,我们将看到数据密集型应用程序更加可组合(如 Unix ),这样我们就可以轻松地插入多个应用程序。在 21 世纪 30 年代,开发人员将通过一个类似“管道”的操作符将分布式 SQL 数据库与全文搜索引擎连接起来。
10.区块链
图片由 mmi9 来自 Pixabay
绝望的时代往往会带来颠覆性的创新。2007 年全球金融危机期间,T5, 结合 5/6 现有技术(哈希、hashcash、公私密码、点对点网络),创造了比特币,第一种加密货币。比特币的成功带动了新技术的兴起:区块链或者分布式账本。在过去十年中,区块链技术取得了许多进步,并为在非加密货币用例中使用区块链打开了大门。一个这样的创新是以太坊,其中一个块是一段代码。以太坊的优势在于这段代码是通用的,即智能合约,可以映射到包括加密货币在内的任何东西。
尽管区块链是一项颠覆性技术,但它有许多限制,阻碍了它的大规模采用。在未来十年,我们将看到区块链的许多创新,它的许多限制将得到解决。在 21 世纪 30 年代,区块链将是成熟的技术。会用在很多领域,以合同/交易为基础,集中化:金融交易、房地产合同、油气采购、供应链、版权、分享音乐。在 21 世纪 30 年代,量子计算将开始威胁经典加密。由于传统加密是区块链的关键,它将在 21 世纪 30 年代经历重大变化,并将适应量子加密。
类似文章:
针对求职者和新开发人员的顶级编程语言的深入分析和排名
towardsdatascience.com](/top-10-in-demand-programming-languages-to-learn-in-2020-4462eb7d8d3e) [ 有效的微服务:10 个最佳实践
正确实施微服务架构的 10 个技巧
towardsdatascience.com](/effective-microservices-10-best-practices-c6e4ba0c6ee2) [ 2020 年要学习的十大 JavaScript 框架
现代 JavaScript 开发中最重要的 JavaScript 框架的精选列表
towardsdatascience.com](/top-10-javascript-frameworks-to-learn-in-2020-a0b83ed3211b)
实用统计推理的 10 个原则
原文:https://towardsdatascience.com/10-principles-of-practical-statistical-reasoning-3071d360d255?source=collection_archive---------33-----------------------
安德烈亚斯·布吕克尔在 Unsplash 上的照片
卓有成效地应用统计学(数据科学)有两个核心方面:
- 领域知识。
- 统计方法。
由于这一领域的高度特殊性,任何一本书或文章都很难对两者之间的相互作用进行详细而准确的描述。一般来说,人们可以阅读两种类型的材料:
- 关于统计方法的广泛信息,带有概括但不具体的结论。
- 详细的统计方法,其结论只在特定领域有用。
在我自己的数据科学项目上工作了 3 年,在交易大厅操纵数据 3 年半之后,我学到了另外一类知识。它基本上和上面一样有用,我把它们带到了的每个项目/兼职/咨询工作中…
实用统计推理
我创造了这个术语,因为我真的不知道该如何称呼这个类别。但是,它涵盖了:
- 应用统计学/数据科学的性质和目标。
- 所有应用的通用原则
- 获得更好结论的实用步骤/问题
如果你有应用统计方法的经验,我鼓励你用你的经验来阐明和批评下面的原则。如果您从未尝试过实现统计模型,请尝试一下,然后再回来。不要把下面的内容看成是需要记忆的清单。如果你能联系自己的经历,你会得到信息的最高综合。
以下原则帮助我提高了分析的效率,并使我的结论更加清晰。我希望你也能从中发现价值。
1 —数据质量问题
通过更精细的分析可以纠正差的数据质量的程度是有限的。值得完成的实际检查有:
- 对逻辑上不一致或与每个变量可能产生的范围的先验信息相冲突的值进行视觉/自动检查。例如极值、变量类型。
- 分布频率。
- 两两散点图用于共线性的低水平检验。
- 缺失观察值(0,99,无,NaN 值)。
- 质疑由不一致(如观察者之间的差异)引入的偏倚的收集方法。
2 —批评变异
在几乎所有的问题中,你都将面对不受控制的变化。对于这种变化的态度应该是不同的,这取决于这种可变性是被研究系统的固有部分还是代表实验误差。在这两种情况下,我们考虑变异的分布,但动机不同:
- 内在变异:我们对分布形式的细节感兴趣。
- 误差变化:我们感兴趣的是,如果误差被消除,会观察到什么。
3 —选择合理的分析深度
尝试独立于可用的数据量或可用的技术来考虑深度。仅仅因为收集数据容易/便宜,并不意味着数据是相关的。这同样适用于方法和技术。精心选择的分析深度支持清晰的结论,而清晰的结论支持更好的决策。
4 —理解数据结构
数据量涉及个体数量和每个个体的变量数量。数据结构=数据量+个体分组。大多数数据集具有以下形式:
- 有很多人。
- 在每个个体上,观察到许多变量。
- 个人被认为是相互独立的。
鉴于这种形式,回答下面的问题将缩短有意义的结论解释的路径。
- 什么才算是个体?
- 个人是否以必须纳入分析的方式分组/关联?
- 对每个人测量哪些变量?
- 是否有任何观测数据丢失?可以做些什么来替换/估计这些值?
注意:小数据集允许容易地检查数据结构,而大数据集可能只允许结构的小部分分析。把这个因素考虑到你的分析中,需要多长时间就多长时间。
统计分析的 5 — 4 个阶段
- 初始数据操作。 意图=对数据质量、结构和数量进行检查,并以表格形式汇总数据进行详细分析。
- 初步分析。意图=阐明数据的形式,并建议最终分析的方向(图、表)。
- 权威分析。意图=为结论提供依据。
- 结论陈述。意图=准确、简洁、清晰的结论和领域解释。
…但是这些阶段有一些注意事项:
- 阶段划分是有用的,但并不严格。初步分析可能会得出明确的结论,而最终分析可能会揭示出人意料的差异,需要重新考虑整个分析基础。
- 当给定一个干净的数据集时,跳过 1。
- 在有大量现有分析的字段中跳过第 2 步。
产量是多少?
记住,统计分析只是更大的决策过程中的一个步骤。向决策者展示结论对于任何分析的有效性至关重要:
- 结论风格要看受众。
- 以一种对批判性的非技术读者来说合理的形式解释广泛的分析策略。
- 包括结论和数据之间的直接联系。
- 用简单的方式展示复杂的分析是值得的。然而,要知道简单是主观的,与熟悉程度相关。
7 —合适的分析风格
从技术角度来看,分析风格指的是如何对感兴趣的底层系统进行建模:
- 概率/推理:得出不确定的结论,通常是数字。
- 描述性:试图总结数据,通常是图形。
适当的分析风格有助于保持重点。尽早考虑它,这将减少返回到耗时的数据处理步骤的需要。
8 —计算方面的考虑有时只是一个问题
技术的选择渗透到应用统计分析的各个方面,包括:
- 原始数据的组织和存储。
- 结论的排列。
- 主要分析的实施。
但是这应该在什么时候引起注意呢?
- 大规模调查+大数据 =如果通过现有工具无法实现灵活性和性能,则值得投入资源来定制程序/库。
- 大规模调查+小数据 =计算考虑不重要。
- 小规模调查+大数据 =定制程序不可行,灵活通用程序/库的可用性至关重要。
- 小规模调查+小数据 =计算考虑不重要。
9 —设计调查井
同时一系列的统计方法可以用于一系列的调查类型。结果的解释将根据调查设计而有所不同;
- 实验 =研究中的系统由研究者建立和控制。明显的差异可以理直气壮地归因于变量。
- 观察性研究 =除了监测数据质量之外,研究者无法控制数据收集。真正的解释变量可能会丢失,很难有把握地得出结论。
- 抽样调查 =在研究者的控制下,通过方法(随机)从人群中抽取样本。尽管解释变量如上所述受到影响,但仍可对人口的描述性特征得出有把握的结论。
- 受控前瞻性研究 =研究者选择的样本,测量并随时间推移跟踪的解释变量。实验有一些优点,但在现实中,不可能测量所有的解释变量。
- 受控回顾性研究 =对解释变量进行适当处理的现有数据集。
注:调查设计的一个重要方面是区分响应和解释变量。
10 —调查目的
显然调查的目的很重要。但是你应该如何考虑目的呢?
第一,目标的一般质量区别:
- 说明:增加理解。在合身的模特中任意挑选是危险的。
- 预测:初级实际使用。易于在合身的模型中任意挑选。
调查的具体目的可能表明,分析应该集中在所研究系统的某个特定方面。它还影响到要寻求的结论的种类和结论的表述方式。
目的可能决定结论的失效日期。如果观察到变量之间相互关系的变化,任何完全基于经验的模型都是有风险的。
一锤定音
生活中几乎所有的任务都可以从框架中考虑:
输入->系统->输出
接下来的工作就是定义框架的每个方面。
实用的统计推理针对的是“系统”。系统的某些部分不能脱离上下文来确定。有些部分可以。实用的统计推理实际上就是简单而胜任地定义你的“系统”的能力。那种能力绝对不局限于这些原则。
如果你想看编程/数据科学方面的构建,请查看我的 YouTube 频道 ,我在那里发布了 python 的完整构建。
我们的目标是激励和合作,所以伸出援手吧!
实践几乎所有 SQL 概念的 10 大问题
原文:https://towardsdatascience.com/10-problems-to-practice-almost-all-sql-concepts-37545e7c5219?source=collection_archive---------2-----------------------
涵盖连接、聚合、窗口函数和子查询的所有 SQL 概念
图片由 Unsplash 上的 Alexandru Acea 拍摄
介绍
我最近在 Leetcode 上用 25 天的时间完成了所有 117 个 SQL 问题,leet code 可能是最受欢迎的练习各种编程语言编码技能的网站之一。该网站将所有问题漂亮地分为三类,即简单、中等和困难,其中难度随着每个后续级别的提高而大幅提高。完成所有这些问题后,我决定突出 10 个问题,它们几乎涵盖了从基础到高级 SQL 的所有概念,您可以通过练习来提高 SQL 编程技能。此外,几乎所有大型科技公司都在面试中问过这些问题。
以下是每个问题中测试的 SQL 技能的明细:
- Q1 平均工资: CTE ,聚集在窗口函数中,CASE WHEN,DATE_PART、INNER JOIN 等日期函数
- Q2 在结果中找到安静的学生— 子查询,最小值,最大值,窗口函数,窗口别名,内部连接,所有关键字
- Q3 体育场人流量— 左连接子查询,CTE,行号
- Q4 每次访问的事务数量— 递归 CTE、联合、计数
- Q5 报告连续日期(MySQL)——日期子,行数
- Q6 按周销售— 数据透视表,CASE WHEN
- Q7 部门前 3 名薪资— DENSE_RANK
- Q8 餐厅增长— 移动平均线前置,偏置
- Q9 平面内最短距离— 交叉连接、SQRT、POW
- Q10 连续数字— 滞后,超前
所以,我们言归正传吧!
- 给定下面两张表,写一个查询,显示某部门员工平均工资与公司平均工资的比较结果(高/低/相同)。
方案一:
2。 写一个 SQL 查询,报告学生(student_id,student_name)在所有考试中“安静”的情况。“相当”的学生是指至少参加了一次考试,既没有高分也没有低分的学生。
方案二 :
3。编写一个查询来显示连续 3 行或
多行且人数超过 100(含)的记录。
方案三:
4。编写一个 SQL 查询来查找有多少用户访问了银行但没有进行任何交易,有多少用户访问了银行并进行一次交易等等。
方案四:
5。编写 SQL 查询,为 2019 年 1 月 1 日至 2019 年 12 月 31 日期间的每个连续天数间隔生成 period_state 报告。
方案五:
66。编写一个 SQL 查询来报告一周中每天每个类别中订购了多少台。
方案六:
7。编写一个 SQL 查询来查找每个部门中工资最高的三名员工。对于上面的表,您的 SQL 查询应该返回下面的行(行的顺序无关紧要)。
解决方案 7:
8。编写一个 SQL 查询来计算 7 天内(当天+ 6 天前)客户支付金额的移动平均值。
解决方案 8:
9。编写一个查询,找出这些点之间的最短距离,四舍五入到 2 位小数。
解决方案 9:
10。编写一个 SQL 查询来查找至少连续出现三次的所有数字。
方案 10:
这是一个总结!我希望您喜欢这些问题,并且能够实践一些最重要的 SQL 概念。如果你想练习更多像这样的问题,请随时到我的Github页面,我已经上传了所有 117 个解决方案。
谢谢大家!
如果你喜欢我的作品,请在不久的将来跟随我在媒体上阅读更多的文章。
驯服无数电子表格的 10 个编程概念
原文:https://towardsdatascience.com/10-programming-concepts-to-design-a-spreadsheet-system-around-9ab3f6704d06?source=collection_archive---------42-----------------------
如何将你的一群电子表格从猫变成羊
制造者在 Unsplash 上 NESA 的照片
F 在工作中,我不时会听到同事们谈论找不到电子表格或忘记更新电子表格,因此信息错位,耗费他们的时间和精力来重做一切。
尽管电子表格对于业务用户创建数据驱动的流程(例如,可视化的数据操作、BI 报告和某种程度的自动化)的门槛很低,但它们也很快滋生了孤岛,因为每个人都有自己版本的相同流程。
当然,没有人喜欢“伟大的电子表格”,那么我们如何在他们成为我们最大的敌人之前和他们交朋友呢?
虽然我的上一篇文章给出了一个理想化的案例研究,介绍了一家公司如何更容易地从使用电子表格过渡到使用 SQL 进行快速查询和报告周转,但 SQL 并不是最终答案。业务涉众必须定义一组电子表格解决的确切的业务问题以及它们收集的数据类型。
尽管 Knox 很好地强调了滞后指标和领先指标的区别,但我想补充的是,在探索更多领先指标之前,滞后指标的报告应该是高质量的。如果一份关于月收入、运营成本或客户订阅的报告来自多个电子表格,你将会把时间花在困惑和对数字进行质量评估上,而不是探索可能影响它们的领先指标。
一旦为滞后指标建立了报告渠道,并且有少数领先指标显示出影响滞后指标的有希望的结果,这就是数据产品的开始。
不管将来它是否会被重构为 BI 工具或软件解决方案,已经设计了 一个复杂的电子表格系统正在为一个成熟的数据产品 做原型。
事不宜迟,让我们来看看这 10 个从软件开发中借鉴来的概念,电子表格用户可以将它们添加到他们的技术技能工具箱中,并提高他们在“处理表格”中的生产率。
萨姆·丹·张在 Unsplash 上的照片
1.整理资产
用户如何识别数据集中的唯一记录?还记得当查找值依赖于多个字段时需要执行的串联吗?在 RDBMS 世界中,这些串联字段被视为“候选键,或者在不同的上下文中也被称为“自然键,因为它们是原始数据集的一部分,并且是最好不要由公式创建的独立变量。虽然使用自然键便于人们阅读和直观理解,但是使用它们有两个缺点。首先,如果业务逻辑发生变化,键的数量或一个键的含义也可能发生变化。其次,随着键的数量和/或这些键的潜在值的增加,它降低了电子表格的性能。因此,使用指定的惟一标识符(类似于 CAT-PRODUCT-1)跟踪自然键(每次真正有新记录时递增 1)是一种经得起未来考验的权衡,既保留了不断发展的业务逻辑,又实现了使用单个标识符(然后成为主键)而不使用纯整数代理键的优雅。
2.数据类型
请注意公式如何抛出“#VALUE!”当你试图用文本除一个数时出错,你希望早点知道这个愚蠢的问题?许多公式是特定于类型的,因此理解值的数据类型确实有助于调试错误和清除数据,例如 2 而不是“2”或 07/20/2020 22:35 而不是 。有一些常见的数据类型如字符串、整数、浮点、日期时间和布尔。人们也可以将数据类型视为计算机的记账系统,因为计算机内的资源是有限的。Integer 比 float 占用的内存空间少,boolean 占用的空间最少,只有两个可能的值,0 和 1。转换一个字段的数据类型就相当于告诉计算机你愿意给它分配多少空间,所以当一个对象占用了过多的空间时,性能可以得到调整。
3.属性与价值
或者电子表格行话中的列对行。如果你说这两种语言中的任何一种,你都知道我在说什么,这是有区别的。许多用户根据他们当时正在开发的报告任意地确定这一点。虽然财务报表需要“一月”、“二月”、“三月”都是它们自己的列,但是提供给报表的原始数据可能不需要,所以您需要一个名为“月”的属性以及“一月”、“二月”、“三月”的值。在数据处理的不同阶段区分这两者与您的报告流程的简化程度有关,也是下一个指针中“整洁数据”的基石之一。
4.整洁的数据(英尺。宽或长的桌子)
许多用户花费大量的时间和精力来开发和维护一个丰富多彩的 Excel 报表,它通常看起来非常宽,尤其是财务报表。如果这些报告不是“中间”数据,仍然需要被操作来生成另一个报告,那么它们是非常好的。经理们也喜欢这种视图,因为它们看起来像数据透视表。另一方面,对于分析师来说,创建一个 fork 过程是至关重要的,其中一个过程导致一个“宽表”报告,另一个导致一个“长表”。一个规范化的长表就是 t idy 数据(源自一个名为 tidyr 的 R 包)的样子。这种格式最适合分析和可视化。
5.数据字典或映射
有些价值观的组合根本没有意义,但是你如何在一开始就防止它们发生呢?在 Excel 中,无所不能的间接函数会帮你完成繁重的工作。只要您的公式是正确的,您将只看到根据其他值进行选择的有意义的值。但是即使是间接的也需要一个“地图”来知道哪些对是有效的。开始一个全新的选项卡并键入可能的组合很有诱惑力,但是等等,一个不太冗余的方法是将这些映射都放在一个共享目录中。这样,每个人都引用相同的内容,并避免手动创建可能与原始副本略有不同的冗余选项卡。
托尼·赫斯特在谷歌电子表格中的数据验证
6.数据有效性
数据验证通常不被重视,直到人们意识到“他们应该(或可能)在字段上设置一个简单的约束,这样至少当一个无效值出现时,它会对你怒目而视。为了补充这一点,利用数据字典来建议可能的值,而不是等待无效的值,特别是对于有类别的文本。此外,条件格式也是一个很好的工具,可以用来验证还没有任何“绑定”的数据。尤其是当您还不熟悉收集到的值时,使用条件格式会立即用突出显示的颜色突出重复或异常值。
7.结构化目录
也许这与一个人的组织技能有关,而不是操作电子表格的技术能力,但是即使在软件工程中,文件的位置对模块化应用程序的功能也有重要影响。通常,更频繁使用的对象会更靠近根文件夹(第一层),而更具体使用的对象会有自己专用的子文件夹。如果文件是以这种方式组织的,而不是按照个人偏好或特定部门的逻辑,那么它不仅可以方便任何人的文件导航,还可以激励未来的开发人员基于现有系统设计软件解决方案。
8.公式与脚本
随着职业生涯的进一步发展,许多经验丰富的分析专家会发现自己至少是半个程序员。这是因为他们已经能够流利地编写公式,甚至是支持电子表格软件的脚本语言(Excel 的 VBA 和 Google Sheet 的 Google Apps 脚本)。虽然这是开始自动化手动工作的一个很好的地方,但人们应该将前面的要点纳入整体考虑,因为在 8 个电子表格中编写 8 个 Vlookup 也是手动的,并且不可伸缩。通常情况下,如果电子表格变慢了,或者调试脚本变得困难了,这就是分解或简化它试图执行的任务的信号。
9.用户输入表单
永远不要相信你的用户。这是很多人宣扬的,我再补充一条:也永远不要相信自己。如果您是输入数据或为其他人输入数据创建空间的人,最好不要让数据生成者看到基础表,尤其是当它还包含数据生成者不直接输入的数据时。数据生产者应该只关注需要他们输入的字段,这些字段应该有护栏,如不允许的值和/或必填字段。在这种情况下,表单会派上用场,为了进一步降低出现错误数据的可能性,可以使用下拉菜单(如果只有某些允许的值,请记住利用第 5 点中的数据映射!)和自动完成。
10.机器生成的值
如果我不得不相信其中一个,我会选择机器生成的值而不是用户输入的值。这应该有自己的一个小部分,因为利用机器为您生成/转换/推导值本身就是过程标准化和自动化的一个里程碑。还记得那些极其相似的电子邮件吗?它们的附件都是你应该关心的发票或明细表格。不要一个一个地打开,然后手动将它们转录到电子表格中。接入 API。自动化数据提取。如果有根据用户输入填充的日期时间字段,则在公式检测到用户输入时为他们填写,而不是要求他们填写。只要有替代用户输入的方法,就要考虑自动收集数据。
虽然我同意基于文件的系统所能提供的是有限的,但电子表格仍然被证明是业务人员和技术人员都理解的灵活、低预算的入门工具。我经常发现,从长远来看,应用更多的编程概念有助于分析专家帮助企业更好地控制他们的数据。
想象一下,买一个最新型号的吸尘器,它还可以拖地,如果你没有养成清理和清理吸尘器路径的习惯,它就不会得到很好的利用。聘请顾问或为软件解决方案付费是没有问题的,但如果电子表格用户继续在分散的手动电子表格上运行关键业务流程,这些就没有什么意义了。
决策者在顾问或软件解决方案上花费大量金钱,希望这些能清除他们低效的流程,当归结为一个更好的深思熟虑的(和记录在案的)业务流程和一个更有组织的电子表格系统。
有太多的时候,我看到耸人听闻的文章标题炒作电子表格或 SQL 是否已经“到达其终点”,而事实上,每个人仍然非常依赖它。鉴于大多数企业的资源和知识有限,利用电子表格作为数据产品原型的起点,比眼睁睁地看着一个“遗留”的优秀电子表格不断增长,直到下一个最佳解决方案出现,要实用和高效得多。
特别感谢我的作品萌芽、 安倍列车 ,是他们给了我写作的灵感,并对本文进行了反馈。
用于即席文本分析的 10 个纯 Python 函数
原文:https://towardsdatascience.com/10-pure-python-functions-for-ad-hoc-text-analysis-e23dd4b1508a?source=collection_archive---------36-----------------------
不使用外部库压缩文本数据
克里斯多夫·伯恩斯在 Unsplash 上拍摄的照片
Text*data是最常见的数据格式。大量的文章、推文、文档、书籍等等,每天都在我们周围飞来飞去。您可以提取的见解数量巨大,帮助提取这些见解的工具也在不断改进。*
在 Python 中,可以使用外部库来处理文本数据。这些库的一个问题是它们不是轻量级的,而且对于初学者来说,它们确实有一个陡峭的学习曲线。在许多情况下,如果您的唯一目的是探索和了解数据,用纯 Python 编写的函数可以做得很好。
下面我列出了 10 个我最常用的功能。这些功能主要是启发式功能,在假设条件下正常工作。这些假设在以下考虑它们的功能中陈述。
#1 获取句子
假设:凡是以点、问号、感叹号结尾的,都作为一个句子。
#2 获取每句话的条目列表
假设:取一个冒号,后跟用逗号分隔的项目列表。
#3 获取所有数值
假设:所有数字都被考虑,不管它们是字符串的一部分还是独立的。
#4 获取引号内的文本
假设:介于引号之间的内容将被采用。
#5 获取大写单词
假设:取全大写中的任意一个字。
#6 获取单词的上下文
#7 获取句子中的结果标题词
假设:取句子中的后件标题词。
#8 获取括号内的文本
假设:取圆括号、方括号或大括号之间的内容。
#9 去掉标点符号
#10 描述文本
结论
在处理和分析过程中,文本数据伴随着巨大的洞察机遇和挑战。有很多用于语言处理的外部库,比如 NLTK 、 spaCy 和 polyglot 。如果你想在 NLP 中做一些严肃的事情,这些工具是你应该使用的。
这些库的一个问题是它们相当重。当然,他们必须用不同的结构组织支持不同的语言,这是主要原因。如果您只是想研究和提取文本数据的统计数据,带有内置模块的 Python 可以做得很好。
上面列出的 10 个 Python 函数为此提供了一个良好的开端。使用这些函数来探索和了解数据。这些不是生产就绪的脚本。明智地使用它们,并根据需要扩展它们的功能。编码快乐!
从优秀到卓越
medium.com](https://medium.com/swlh/three-significant-things-to-elevate-your-software-development-career-83be99cedf28) [ 作为一名开发人员,赢得尊重的 4 件事
迈向成功的事业
medium.com](https://medium.com/@dardanx/4-things-that-will-earn-you-respect-as-a-developer-eec54d1ac189)*
今天的文章 TowardsDataScience 博客中文翻译 2020(四)分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/bian-cheng-ji-chu/92104.html