TowardsDataScience-博客中文翻译-2016-2018-三十六-

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

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

成为数据科学家应该知道的十个机器学习算法

原文:https://towardsdatascience.com/ten-machine-learning-algorithms-you-should-know-to-become-a-data-scientist-8dc93d8ca52e?source=collection_archive---------1-----------------------

机器学习从业者性格各异。虽然其中一些是“我是 X 方面的专家,X 可以对任何类型的数据进行训练”,其中 X =某种算法,但其他一些则是“适合合适工作人员的合适工具”。他们中的很多人还订阅了《百事通》。“一个硕士”战略,他们在一个领域有深厚的专业知识,对机器学习的不同领域略有了解。也就是说,没有人可以否认这样一个事实,即作为实践数据科学家,我们必须了解一些常见的机器学习算法的基础知识,这将有助于我们处理我们遇到的新领域问题。这是一个关于常见机器学习算法和快速资源的旋风式旅行,可以帮助你开始使用它们。

1.主成分分析/奇异值分解

PCA 是一种无监督的方法,用于理解由向量组成的数据集的全局属性。这里分析数据点的协方差矩阵,以了解哪些维度(大多数)/数据点(有时)更重要(即它们之间的方差高,但与其他维度的协方差低)。考虑矩阵的顶部 PC 的一种方法是考虑其具有最高特征值的特征向量。SVD 本质上也是一种计算有序分量的方法,但是你不需要得到点的协方差矩阵来得到它。

这种算法通过获得维数减少的数据点来帮助人们对抗维数灾难。

图书馆:

https://docs . scipy . org/doc/scipy/reference/generated/scipy . Lina LG . SVD . html

http://sci kit-learn . org/stable/modules/generated/sk learn . decomposition . PCA . html

入门教程:

【https://arxiv.org/pdf/1404.1100.pdf

2a。最小二乘法和多项式拟合

还记得你大学时的数值分析代码吗,你曾经用直线和曲线来拟合点,得到一个方程。您可以使用它们在机器学习中拟合低维度的非常小的数据集的曲线。(对于大型数据或多维数据集,您可能最终会过度适应,所以不要费心)。OLS 有一个封闭形式的解决方案,所以你不需要使用复杂的优化技术。

显而易见,使用该算法来拟合简单曲线/回归

图书馆:

https://docs . scipy . org/doc/numpy/reference/generated/numpy . linalg . lstsq . htmlhttps://docs . scipy . org/doc/numpy-1 . 10 . 0/reference/generated/numpy . poly fit . html

入门教程:

https://lag unita . Stanford . edu/c4x/humanitisescience/StatLearning/asset/linear _ regression . pdf

2b。约束线性回归

最小二乘法可能会与数据中的异常值、伪场和噪声混淆。因此,我们需要约束来减少我们在数据集上拟合的线的方差。正确的方法是拟合线性回归模型,这将确保权重不会出现错误。模型可以有 L1 范数(LASSO)或 L2 (Ridge Regression)或两者都有(弹性回归)。均方损耗得到优化。

使用这些算法用约束条件拟合回归线,避免过度拟合并从模型中屏蔽噪声维度。

图书馆:

http://scikit-learn.org/stable/modules/linear_model.html

入门教程:

https://www.youtube.com/watch?v=5asL5Eq2x0A

https://www.youtube.com/watch?v=jbwSCwoT51M

3.k 表示聚类

大家最喜欢的无监督聚类算法。给定一组向量形式的数据点,我们可以根据它们之间的距离进行聚类。这是一种期望最大化算法,它迭代地移动聚类的中心,然后用每个聚类中心来增加点数。该算法采用的输入是要生成的聚类的数量以及它将尝试收敛聚类的迭代次数。

顾名思义,您可以使用该算法在数据集中创建 K 个聚类

图书馆:

http://sci kit-learn . org/stable/modules/generated/sk learn . cluster . k means . html

入门教程:

https://www.youtube.com/watch?v=hDmNF9JG3lo

https://www.datascience.com/blog/k-means-clustering

4.逻辑回归

逻辑回归是在应用权重后进行非线性(sigmoid 函数最常用,或者您也可以使用 tanh)应用的约束线性回归,因此将输出限制为接近+/-类(在 sigmoid 的情况下为 1 和 0)。使用梯度下降来优化交叉熵损失函数。新手注意:逻辑回归用于分类,而不是回归。您也可以将逻辑回归视为一个单层神经网络。使用梯度下降或 L-BFGS 等优化方法来训练逻辑回归。NLP 的人会经常把它用在最大熵分类器的名字上。

这是乙状结肠的样子:

使用 LR 训练简单但非常健壮的分类器。

图书馆:

http://sci kit-learn . org/stable/modules/generated/sk learn . linear _ model。LogisticRegression.html

入门教程:

https://www.youtube.com/watch?v=-la3q9d7AKQ

5.SVM(支持向量机)

支持向量机是线性模型,如线性/逻辑回归,区别在于它们具有不同的基于边际的损失函数(支持向量的推导是我见过的与特征值计算一起的最漂亮的数学结果之一)。您可以使用优化方法优化损失函数,如 L-BFGS 甚至 SGD。

支持向量机的另一个创新是在数据上使用内核来支持工程师。如果你有很好的领域洞察力,你可以用更聪明的内核替换旧的 RBF 内核并从中获利。

支持向量机可以做的一件独特的事情是学习一类分类器。

支持向量机可用于训练分类器(甚至回归器)

图书馆:

http://sci kit-learn . org/stable/modules/generated/sk learn . SVM . SVC . html

入门教程:

https://www.youtube.com/watch?v=eHsErlPJWUU

**注:**在 SKLearn 的http://sci kit-learn . org/stable/modules/generated/sk learn . linear _ model 中可以找到基于 SGD 的逻辑回归和支持向量机训练。SGDClassifier.html,我经常使用它,因为它让我用一个通用的界面检查 LR 和 SVM。您还可以使用迷你批处理在> RAM 大小的数据集上训练它。

6.前馈神经网络

这些基本上是多层逻辑回归分类器。由非线性(sigmoid、tanh、relu + softmax 和酷炫的新卢瑟)分隔的多层权重。它们的另一个流行名称是多层感知器。FFNNs 可以作为自动编码器用于分类和无监督的特征学习。

Multi-Layered perceptron

FFNN as an autoencoder

FFNNs 可用于训练分类器或提取特征作为自动编码器

图书馆:

http://sci kit-learn . org/stable/modules/generated/sk learn . neural _ network。MLP classifier . html # sk learn . neural _ network。MLP 分类器

http://sci kit-learn . org/stable/modules/generated/sk learn . neural _ network。MLPRegressor.html

https://github . com/keras-team/keras/blob/master/examples/Reuters _ MLP _ relu _ vs _ selu . py

入门教程:

http://www.deeplearningbook.org/contents/mlp.html

http://www.deeplearningbook.org/contents/autoencoders.html

http://www . deep learning book . org/contents/representation . html

7.卷积神经网络

当今世界上几乎任何基于视觉的机器学习结果都是使用卷积神经网络实现的。它们可以用于图像分类、对象检测甚至图像分割。由 Yann Lecun 在 80 年代末 90 年代初发明的 Convnets 具有卷积层的功能,卷积层充当分层特征提取器。你也可以在文本中使用它们(甚至是图表)。

使用 convnets 进行最先进的图像和文本分类、对象检测、图像分割。

图书馆:

https://developer.nvidia.com/digits

https://github.com/kuangliu/torchcv

https://github.com/chainer/chainercv

https://keras.io/applications/

入门教程:

http://cs231n.github.io/

https://adeshpande 3 . github . io/A-初学者% 27s-理解指南-卷积神经网络/

8.递归神经网络(RNNs):

RNNs 通过在时间 t 对聚合器状态和时间 t 的输入递归地应用相同的权重集来对序列建模(假设序列在时间 0 具有输入..t..t,并且在从 RNN 的 t-1 步输出的每个时间 t 具有隐藏状态)。现在很少使用纯 rnn,但是它的对应物如 LSTMs 和 GRUs 在大多数序列建模任务中是最先进的。

RNN(如果这里是一个密集连接的单元和一个非线性,现在 f 一般是 LSTMs 或 GRUs)。LSTM 单位,在纯 RNN 中用来代替普通致密层。

将 RNNs 用于任何序列建模任务,特别是文本分类、机器翻译、语言建模

图书馆:

https://github.com/tensorflow/models(谷歌的很多很酷的 NLP 研究论文都在这里)

https://github.com/wabyking/TextClassificationBenchmark

http://opennmt.net/

入门教程:

http://cs224d.stanford.edu/

http://www . wild ml . com/category/neural-networks/recurrent-neural-networks/

http://colah.github.io/posts/2015-08-Understanding-LSTMs/

9.条件随机场

CRF 可能是概率图形模型(PGM)家族中最常用的模型。它们像 RNNs 一样用于序列建模,也可以与 RNNs 结合使用。在神经机器翻译系统出现之前,CRF 是最先进的,在许多具有小数据集的序列标记任务中,它们仍然会比 rnn 学习得更好,rnn 需要更大量的数据来概括。它们还可以用于其他结构化预测任务,如图像分割等。CRF 对序列的每个元素(比如一个句子)建模,使得相邻元素影响序列中组件的标签,而不是所有标签都彼此独立。

使用 CRF 标记序列(文本、图像、时间序列、DNA 等)。)

图书馆:

https://sklearn-crfsuite.readthedocs.io/en/latest/

入门教程:

http://blog . echen . me/2012/01/03/有条件随机字段简介/

Hugo Larochelle 在 Youtube 上的 7 部分系列讲座:【https://www.youtube.com/watch?v=GF3iSJkgPbA

10.决策树

比方说,给我一张 Excel 表格,里面有各种水果的数据,我必须说出哪些看起来像苹果。我要做的是问一个问题“哪些水果又红又圆?”把所有回答是和不是的水果分开。现在,所有又红又圆的水果可能不是苹果,也不是所有的苹果都是又红又圆的。所以我会问一个问题“哪些水果上有红色或黄色的颜色提示?”红色和圆形的水果,并会问“哪些水果是绿色和圆形的?”不是红色和圆形的水果。根据这些问题,我可以相当准确地说出哪些是苹果。这一连串的问题就是决策树。但是,这是一个基于我直觉的决策树。直觉无法处理高维复杂的数据。我们必须通过查看标记数据来自动提出一连串的问题。这就是基于机器学习的决策树所做的事情。像 CART trees 这样的早期版本曾经用于简单数据,但是随着数据集越来越大,偏差-方差权衡需要用更好的算法来解决。现在使用的两种常见的决策树算法是随机森林(在属性的随机子集上构建不同的分类器,并将它们组合起来输出)和提升树(在其他树的顶部训练一系列树,纠正下面的树的错误)。

决策树可以用来分类数据点(甚至回归)

图书馆

http://sci kit-learn . org/stable/modules/generated/sk learn . ensemble . randomforestclassifier . html

http://sci kit-learn . org/stable/modules/generated/sk learn . ensemble . gradientboostingclassifier . html

http://xgboost.readthedocs.io/en/latest/

https://catboost.yandex/

入门教程:

http://xgboost.readthedocs.io/en/latest/model.html

https://arxiv.org/abs/1511.05741

【https://arxiv.org/abs/1407.7502

http://education . parrot prediction . teachable . com/p/practical-xgboost-in-python

TD 算法(最好有)

如果你仍然想知道上述任何方法如何解决像 DeepMind 那样击败围棋世界冠军的任务,它们不能。我们之前讨论的所有 10 种算法都是模式识别,而不是策略学习器。为了学习解决多步骤问题的策略,如赢得一盘棋或玩雅达利游戏机,我们需要让世界上没有代理,并从它面临的奖励/惩罚中学习。这种类型的机器学习被称为强化学习。该领域最近的许多(不是全部)成功是将一个康文网络或一个 LSTM 的感知能力与一套称为时间差异学习的算法相结合的结果。其中包括 Q-Learning、SARSA 和其他一些变体。这些算法是对贝尔曼方程的巧妙运用,以获得一个损失函数,该函数可以用代理从环境中获得的回报来训练。

这些算法主要用于自动玩:D 游戏,也用于语言生成和对象检测中的其他应用。

图书馆:

https://github.com/keras-rl/keras-rl

https://github.com/tensorflow/minigo

入门教程:

抢免费的萨顿和巴尔托的书:https://web 2 . Qatar . CMU . edu/~ GDI caro/15381/additional/Sutton barto-RL-5 nov17 . pdf

观看大卫·西尔弗课程:https://www.youtube.com/watch?v=2pWv7GOvuf0

这是 10 种机器学习算法,你可以通过学习成为一名数据科学家。

你也可以在这里阅读关于机器学习库

我们希望你喜欢这篇文章。请注册免费的 ParallelDots 账户,开始你的 AI 之旅。你也可以在这里查看我们的 API的演示。

点击阅读原文

使用主题建模和其他 NLP 方法分析脸书帖子和活动

原文:https://towardsdatascience.com/ten-years-of-my-life-on-facebook-a4750c9ae629?source=collection_archive---------14-----------------------

4 月,我永久删除了我在脸书的存在。我于 2008 年加入,这些年来相当活跃。

在删除我的帐户的过程中,我下载了我所有的数据。我忍不住问自己:这个数字时间胶囊告诉了我关于我十年生活的什么?它对脸书十年的生活给出了什么样的暗示?是时候让我的数据科学技能发挥作用了。

对于阅读这篇文章的 R 程序员,我已经把我的代码发布到了 RPubs *,*上,利用了包括tmtopicmodelsldatuningplotlyggplot2在内的许多包进行可视化。希望您可以用它来做一些类似的事情,只需很少/不需要调整。我希望你能试一试,希望你能学到一些有趣的东西。

1.对我的时间线进行分析

我下载了我的脸书数据的 zip 文件,并将其解压缩到我的计算机上的一个文件夹中。如果您不确定如何操作,下面是如何操作的。我感兴趣的特定文件位于名为 timeline.htm 的 html 子目录中。这个文件包含了我加入以来(几乎)十年时间线上的所有帖子。虽然其他人可以在你的时间线上发表文章,但是绝大多数的评论都是我自己的。

接下来,我使用文本分析从这个文件的沉重的 html 代码中提取所有文本,直到我只剩下一个来自我的时间线的评论列表。这并不简单,但是几行正确的代码就可以让你达到目的。

我还以类似的方式提取了所有的活动日期,这样我就可以分析我发布的时间和日期的模式。

总的来说,在 3632 天的会员时间里,有 5115 个帖子,平均每天 1.4 个帖子,所以我的个人资料在这十年里相当活跃。

2.分析我在脸书的活动

我获取了我活动的日期和时间的数据,并使用 R 的优秀功能将它们分组,这样我就可以了解我的活动在一年、一年中的几个月以及一天中的几个小时是如何变化的。

首先,我看了看我的活动是如何逐年变化的,我制作了这张图表,它显示我在 2010 年几乎没有活动(我记得我故意从脸书休假一年!),在 2013–2015 年最为活跃。

然后我逐月观察我的活动的整体发展,用一个黄土平滑曲线的散点图来显示整体趋势。这证实了我在 2013-2015 年左右达到了一个活动高峰。2015 年后活跃度大幅下降。我不禁要问:这是脸书的总趋势吗?对我来说确实是这样!

最后,我对我的每日发帖趋势感兴趣,所以我查看了一天中每个小时的总发帖量。这看起来像我是奇怪的夜间活动,直到我意识到脸书记录的时区是 GMT,但在这段时间的大部分时间里,我住在澳大利亚,根据一年中的时间,澳大利亚要提前 9-10 个小时。从这个角度来看,这种活动看起来相对正常,在(澳大利亚)早上和晚上有一个高峰,在工作时间和晚上活动水平较低。

3.我帖子中最重要的词

接下来,我整理了课文,以便于我分析。我去掉了标点符号、数字,把所有东西都转换成小写。我还删除了停用词,它们是像‘和’这样的无意义的词,在互联网搜索查询中经常被删除。最后,我替换了一些我知道会出现的名字,特别是我的两个孩子的名字,我把它们转换成了“孩子 1”和“孩子 2”。我这样做是为了保护他们的隐私,因为我希望分享我的分析。

我把我的帖子列表变成了一个文档语料库,每个帖子都是一个单独的文档。我创建了一个文档术语矩阵,计算每个单词在每个文档中出现的次数。然后,我使用一种叫做词频-逆文档频率(TF-IDF) 的方法来确定文档中单词的重要性。

我对所有单词的 TF-IDF 频率进行平均,然后从大到小排列。最后,我用这些数据创建了一个文字云来代表我十年来发表的文章。在这里。

首先,这告诉我,至少在脸书,我的孩子就是我的生命。然而,TF-IDF 相对于简单字数统计的价值在于,与简单字数统计相比,它给予稍微不太频繁的单词额外的分数,并使它们更加突出。这些额外的单词给我的帖子增添了一些色彩。看着它,我看起来很开心,也很忙。我认为这是一个公平的结论。

4.我最常见的发帖主题

接下来,我继续看我是否能阐明一些我定期发布的常见话题。为此,我使用了一种叫做主题建模的技术。使用我的文档术语矩阵,我首先使用一种数学技术来确定将我的帖子分成的最佳主题数量。我登陆了八个主题——比这更多的似乎会产生递减的回报,每增加一个额外的主题,就会显著增加处理时间。

我的主题建模过程按照要求找到了八个主题。每个主题出现的频率在这个条形图中,最常见的主题是主题 8,尽管所有主题都以一定的频率出现。

但是主题到底是什么呢?

我按主题列出了前十个单词,以帮助我找出主题,结果如下:

所以这很好玩!主题建模可能有点断断续续——尤其是当语料库中的文档很短时,如脸书帖子或推文——但看看按主题排列的前十个词,我发现一些有意义的东西:

  • 最常见的话题(话题 8)是关于电视的,最佳、剧集和季节等词可以说明这一点。我的确是一个伟大的电视爱好者——稍后会有更多的介绍。
  • 话题 1 并不奇怪——生日祝福——可能是这些年来别人给我的。
  • 话题 2 也很受欢迎,显然是关于我的家庭生活。我很幸运能够每天早上把我的孩子送到学校,这是我已经做了很多年的事情,看起来我发布了很多关于这个的内容。
  • 话题 3 是关于我对足球的热爱和我最喜欢的球队——埃弗顿。
  • 话题 6 把我带回到电视,以及我一直以来最喜欢的节目——《广告狂人》。我确实记得发布了很多关于这个节目的帖子。很多年来每一集之后。
  • 其他主题似乎有点难以理解,但例如在主题 7 中,提到了“新闻”和“阿博特”(托尼·阿博特,我在澳大利亚生活的大部分时间里是总理和反对党领袖),这表明这可能是一些基于澳大利亚新闻和政治的热门帖子。

所以我在脸书的十年告诉我,我是一个顾家的男人,我热爱足球,对政治评论太多,我花了太多时间分析《T2 广告狂人》的剧集。

这就是了。感谢脸书十年的快乐时光!

最初我是一名纯粹的数学家,后来我成为了一名心理计量学家和数据科学家。我热衷于将所有这些学科的严谨性应用到复杂的人的问题上。我也是一个编码极客和日本 RPG 的超级粉丝。在LinkedInTwitter上找我。

电报机器人、我的早餐、水果和交互式对话上的张量流对象检测

原文:https://towardsdatascience.com/tensor-flow-object-detection-over-telegram-bot-my-breakfast-fruits-and-an-interactive-e54acdd6869a?source=collection_archive---------6-----------------------

在本文中,我们将探索一个案例,其中我们使用张量流(对象检测 API)将图像中的对象检测与通过 bot 架构(电报平台)的交互相结合。

面临的挑战是创造一个能够在对话中使用图像进行交互的机器人,以告知用户早餐中包含的水果。利用这些信息,这款软件可以在未来提供许多不同的分析,目前还只是一个概念证明。

我们将提出一个 TensorPhotoXRay (我们的图像检测解决方案,以前的文章)的集成,以检测图像中的水果,我们将创建一个与电报机器人的集成(项目 appengine-telegram-bot )。

这是已经完成并正在运行的解决方案:

让我们描述一下使用这个架构的基本元素。

电报中机器人的创建:你可以通过这个官方链接探索更多关于这个选项的信息。此步骤的重要元素,获取令牌*以连接电报平台。

创建 bot 电报解决方案:让我们创建一个基于 App Engine 的 bot。(项目 appengine-telegram-bot )。*这是对来自电报的消息进行分析的方法,以及对图像检测方法的调用。

*我们使用超过 50%的置信度来显示标签。在这里您将找到要部署的完整项目。

部署 Telegram Bot 解决方案:在本例中,该解决方案是为 Google App Engine 传统环境设计的。您应该特别注意这些要素:

  • 电报令牌:要获得这些信息并在电报平台上创建机器人,你应该与机器人父亲对话。在这里你有所有的官方指示。
  • 与 TensorPhotoXRay 的 url 集成:一旦部署了解决方案,您将需要 Url 来执行分析。记住你有一个新方法,格式如下:

root URL/photobot/photourl

  • rooturl : app 引擎 url。
  • photourl :要分析的照片的 url。

电报钩子配置:您需要在 App Engine 上部署解决方案。完成此操作后,您将获得以下 URL 格式。

rooturl/ 水果 _ 分析

*rooturl:应用程序引擎 url

部署 TensorPhotoXRay 解决方案:该活动可按照以下说明进行。请记住,该解决方案使用应用引擎灵活环境
我在原项目上做了修改,增加了一个新方法,在图像检测上只返回一个标签数组*。

这是新方法:

最后一步,将电报与我们开发的机器人
连接起来。现在让乐趣开始吧…

  • 对于与我们的应用引擎解决方案的 bot 链接,我们必须设置挂钩。(仅访问此链接并验证 web_hook 配置正常)

rooturl/set_webhook

  • rooturl:应用程序引擎 url

现在,我们可以与一个组件交互,让我们在食物选择方面进行合作,在未来以一种非常灵活的方式建议和学习。

有几个要素需要发展和改进,但这个简单的解决方案展示了一条有趣的道路,在与用户的交互中充满了新的机会。

Tensor2Tensor 和一个模型来学习所有内容

原文:https://towardsdatascience.com/tensor2tensor-and-one-model-to-learn-them-all-7ef3f9b61ba4?source=collection_archive---------9-----------------------

最近谷歌宣布发布 Tensor2Tensor 库。T2T 的主要目的是通过向每个人提供最先进的模型来加速深度学习研究。现在,它主要集中在 NLP 问题和一般的序列到序列。然而,它是建立在 Tensorflow 之上的,Tensor2Tensor 的模块化结构允许开发人员和研究人员以简单的方式添加新模型。

这个 python 库为数据集生成、训练和超参数调整提供了简单的 API。它包含:

  • 流行的序列数据集生成工具
  • 不同输入/输出模式的工作模型:符号、图像、音频、标签
  • 模型及其优化器的预调超参数集
  • 具有简单 CLI 界面的训练器
  • 像 ByteNet、MultiModel( paper )、SliceNet、Transformer( paper )和 Xception 这样的 SOTA 模型

但是这一个值得特别注意:

多模态建筑

这个网络最吸引人的特点是它可以学会同时解决一系列不同的问题。研究人员训练同一个神经网络来进行图像分类、图像字幕、文本解析、语音识别、英语德语和英语法语翻译。它在每一个方面都做得很好!

这在迁移学习中是一个巨大的成功,在不久的将来,我们可能会看到很多论文和对这个架构的改进。

Transformer 也很酷,它使用注意力机制而不是递归层,并在 WMT 英语->德语翻译基准测试中获得 SOTA。与此同时,相对于竞争对手,它只需要 1%到 10%的计算能力。

事实上,我相信多式联运网络有一个非常光明的未来。也许会成为 DL 最大的突破之一。

最初发表于CognitiveChaos.com

TensorBoard:可视化学习

原文:https://towardsdatascience.com/tensorboard-visualizing-learning-ad1b6667585?source=collection_archive---------1-----------------------

一个使实现透明的简洁工具

为什么选择 TensorBoard?

这是 tensorflow 提供的可视化工具。但这很有用的原因是,它有一些特殊的功能,例如将您的机器学习模型视为节点和连接这些节点(数据流)的边的概念性图形表示(计算图)。此外,它还为我们提供了根据期望的指标评估模型性能的能力。

谷歌创建 tensorboard 这样的工具的进一步动机是,当我们使用 tensorflow 创建模型时,我们不知道幕后发生了什么,特别是在神经网络这样的算法中,它的操作是一个完全的黑盒,可能具有非常复杂的结构。在这种情况下,我们如何确保我们的实现流程没有错误?

Tensorboard 能提供什么?

Google 的 Tensorflow 机器学习库通过提供操作和各种信息(即维度、数据类型等)的可视化表示(tensorboard 计算图)来解决这个问题。)流经其中的数据。

使用汇总操作

汇总操作使您能够存储所选操作的汇总值(例如:-与每个时期相关的训练精度)以备后用。首先,您必须首先指定操作的名称。以便将来参考时更容易。在你保存了你的汇总操作之后,你必须使用 tf.summary.mergeall() 将所有这些操作合并成一个操作。现在,您必须使用文件写入器对象将这些元数据写入一个期望的位置,以便将来能够访问。

一个例子如下:

Illustration of setting up summary operations

上面的代码创建了第一层的权重和偏差的汇总直方图。这将在 tensorboard 上显示如下:

这些图像基本上描述了在训练时期权重和偏差分布的变化。每个切片是特定时期的参数分布。

可以在下面的链接中找到关于更多可用概要操作的更多信息。请参考此官方文档以获得更多参考。

[## tf.summary .直方图|张量流

fake _ quant _ with _ min _ max _ vars _ per _ channel _ gradient

www.tensorflow.org](https://www.tensorflow.org/api_docs/python/tf/summary/histogram)

将模型保存到图表中

此外,在 tensorboard 中,我们可以查看由执行操作的张量和通过图形表示数据流的边组成的计算图形。这种设计可用于确定模型的创建是否合适。这种可视化图形让我们确保图形中的数据流是有意义的,并且转换应用于正确数据的正确位置。下面的代码可以用来保存图表。请注意,这应该在会话实例中执行,因为张量属性只能在会话中访问。

保存后的图形示例如下所示:

Example of a computational graph

通过使用如下标量运算,可以获得性能评估度量的进一步图形:

在 tensorboard 上,其可视化效果如下:

这是 tensorboard 入门的简要概述,如果您需要更多资料,可以在下面的 references 标签下找到 tensorflow 官方网站的链接。因此,如果你觉得这篇文章的内容有用,请与他人分享。

参考

[## 深入 TensorBoard:示例教程- neptune.ai

有一个常见的商业说法是,你不能改进你没有衡量的东西。这在机器学习中是正确的,因为…

海王星. ai](https://neptune.ai/blog/tensorboard-tutorial) [## 张量板:可视化学习|张量流

你将使用 TensorFlow 进行的计算——比如训练一个大规模深度神经网络——可能会很复杂和令人困惑…

www.tensorflow.org](https://www.tensorflow.org/get_started/summaries_and_tensorboard)

TensorFlow 1.9 已经到来!

原文:https://towardsdatascience.com/tensorflow-1-9-has-arrived-1e6e9171ce5e?source=collection_archive---------8-----------------------

你需要知道的一切…

在撰写本文时, TensorFlow 1.9 尚未在他们的官方网站上更新,但 TensorFlow 1.9 rc-0 已经在他们的**GitHub上发布。**

主要内容和改进🚀

  1. 将您的 tf.keras 更新到 Keras 2.1 API。
  2. 请继承tf.keras.Model,因为tfe.Network现在已经被弃用**。**
  3. 梯度增强树估计器添加核心特征列和损失的支持。****
  4. Bijectors API 支持通过新的 API 更改来广播 bi objectrs。
  5. 分层变量在以下条件下发生变化

可能会在这里断裂

**替换 **variable_scope** (“,...)由 **variable_scope** ( **tf.get_variable_scope()** **,...)如果你正在打开变量作用域。

错误修复🐛

tf.data

  • DatasetBase::DebugString()方法现在是const
  • 添加了从多个数据集随机采样的tf.contrib.data.sample_from_datasets() API。

tf.keras

  • 将 Keras 代码移出 _impl 文件夹,并移除 API 文件**。**
  • tf.keras.Model.save_weights现在默认保存为 TensorFlow 格式。
  • 将数据集迭代器传递给tf.keras.Model训练/评估方法。

加速线性代数(XLA)

张量流调试器(tfdbg) CLI

tf .贡献

  • 添加tf.contrib.data.choose_from_datasets()
  • tf.contrib.data.make_csv_dataset()现在支持引用字符串中的换行符。从make_csv_dataset中删除了两个参数。
  • tf.contrib.framework.zero_initializer支持资源变量。
  • 将“ constrained_optimization ”添加到 tensorflow/contrib。

进入以下链接查看更多** Bug 修复 。**

感谢您阅读本文,希望您能利用新特性编写出高效的代码。

有关 TensorFlow 版本的更多更新以及更多关于 Medium Twitter的关注。

鼓掌吧!分享一下!跟我来。

你会喜欢的以前的故事:

** [## 50 tensor flow . js API 5 分钟讲解| TensorFlow.js Cheetsheet

TensorFlow API Cheetsheet

towardsdatascience.com](/50-tensorflow-js-api-explained-in-5-minutes-tensorflow-js-cheetsheet-4f8c7f9cc8b2) [## 手机上的 tensor flow:tensor flow Lite

我们得到了什么?

towardsdatascience.com](/tensorflow-on-mobile-tensorflow-lite-a5303eef77eb) [## 手机上的 TensorFlow:教程

在 Android 和 iOS 上

towardsdatascience.com](/tensorflow-on-mobile-tutorial-1-744703297267) [## 激活函数:神经网络

Sigmoid,tanh,Softmax,ReLU,Leaky ReLU 解释!!!

towardsdatascience.com](/activation-functions-neural-networks-1cbd9f8d91d6) [## 纪元与批量大小与迭代次数

了解您的代码…

towardsdatascience.com](/epoch-vs-iterations-vs-batch-size-4dfb9c7ce9c9)**

张量流——实践方法

原文:https://towardsdatascience.com/tensorflow-a-hands-on-approach-8614372f021f?source=collection_archive---------3-----------------------

[Source: www.tensorflow.org]

这是我将要撰写的系列文章的第一篇,介绍 TensorFlow 并深入研究它提供的无数数学和机器学习库。首先,在这篇文章中,我将描述 TensorFlow 框架背后的思想,它的构造方式,它的关键组件等。到本文结束时,您将能够用 TensorFlow 编写简单的数值求解器代码片段。

对于那些不知道的人来说,

TensorFlow 是一个用于构建机器学习模型的计算框架。它是由杰夫·迪恩领导的谷歌大脑的第二代系统。它于 2017 年初推出,通过引入从可扩展性到构建生产就绪模型的众多功能,颠覆了 ML 世界。
【鸣谢:维基百科】

[Source: www.tensorflow.org]

框架

TensorFlow toolkit hierarchy

TensorFlow 提供了各种不同的工具包,允许您在自己喜欢的抽象级别上编写代码。例如,您可以在核心 TensorFlow (C++)中编写代码,并从 Python 代码中调用该方法。你也可以定义你的代码应该运行的架构(CPU,GPU 等等。).在上面的层次结构中,可以编写代码的最低层是 C++或 Python。这两个层次允许你编写数值程序来求解数学运算和方程。虽然这并不强烈推荐用于构建机器学习模型,但它提供了大量的数学库来减轻您的任务。您可以编写代码的下一个层次是使用 TF 特定的抽象方法,这些方法针对模型组件进行了高度优化。例如,使用 tf.layers 方法抽象,您可以处理神经网络的层。您可以使用 tf.metrics 方法构建模型并评估模型性能。使用最广泛的级别是 tf.estimator API,它允许您使用 easy 构建(训练和预测)生产就绪模型。estimator API 非常容易使用,并且经过了很好的优化。尽管它提供的灵活性较低,但它具有训练和测试您的模型所需的所有功能。让我们看看 estimator API 的一个应用程序,它只用三行代码就构建了一个分类器。

Simple Classifier Using TensorFlow Estimator API

在本文中,我将使用核心 TensorFlow (Python)来编写代码。但在此之前,让我先讨论一下 TensorFlow 中可用的数据类型。

数据类型

这个框架中的基本数据类型是一个**张量。**张量是数据的 N 维数组。例如,你可以称一个标量(一个常量值,比如整数 2)为 0 维张量。向量是一维张量,矩阵是二维张量。下图详细描述了张量的每个维度。

Tensor Data Type

观察上图。变量 x 是使用 tf.constant 类声明的张量。

**常数:**常数是一个值根本不能改变的张量。在第一个例子中, x 取常数值 3,因此形状为 None。你可以通过使用 tf.stack 函数在现有张量上叠加张量来声明任何维度的张量,这可以从 nD 张量的例子中看出。

现在我们已经看到了如何在 TensorFlow 中声明常数,让我们看看声明变量。

**变量:**变量是一个张量,它的值被初始化,然后通常随着程序的运行而改变。在 TensorFlow 中,变量由 tf 操纵。变量类。创建变量的最好方法是调用 tf.get_variable 函数。该函数要求您指定变量的名称。其他副本将使用此名称来访问同一变量,并在检查指向和导出模型时命名此变量的值。 tf.get_variable 还允许您重用之前创建的同名变量,从而轻松定义重用层的模型。

my_variable = tf.get_variable("my_variable", [1, 2, 3])

**初始化变量:**由于使用了低级 API 核心张量流,变量需要明确初始化。如果像 tf 这样的高层框架。正在使用估算器Keras ,变量将自动为您初始化。为了初始化变量,需要调用TF . global _ variables _ initializer。您可以使用以下代码行初始化会话中的所有变量。

session.run(tf.global_variables_initializer())

但是什么是 session.run ??什么是会话?

会话和图表

会话封装了 TensorFlow 运行时的状态,并运行 TensorFlow 操作。使用 TensorFlow 编写的每一行代码都由一个底层图形表示。下面我们用一个例子来理解这一点。

TensorFlow sessions

我创建了两个 1D 张量 x 和*y。*我将它们相加并存储在一个名为 z1 的变量中。我将它们相乘并存储在变量 z2 中。我通过从 z2 中减去 z1 创建了另一个变量 z3 。当执行这个特定的代码片段时,TensorFlow 不计算结果,而是创建一个表示上述代码的图形(如下所示)。

TensorFlow Graph

利用图形背后的想法是创建可移植的代码。是的,任何人都可以在任何类型的架构上导出和使用这个图。但是,TensorFlow 为什么不计算结果呢?因为,它遵循了懒惰的评估范式。所有创建的图形都绑定到一个会话,我们必须告诉 TensorFlow 使用 session.run 计算结果。

session.run(z3)

记住这一点,如果一个 tf。图形就像一个*。py* 文件,一个 tf。会话类似于 python 可执行文件。

现在我们已经知道了会话、图形、数据类型以及如何创建变量的基础知识,让我们通过编写一些 TensorFlow 代码来尝试一下。

张量流代码

加法和减法

乘法和除法

重塑

我已经用上面讨论的简单操作编写了一个二次方程解算器,同样的代码可以在我的 GitHub 库中找到。[ 链接

结论

TensorFlow 主要用作后端框架,其模块通过 Keras API 调用。通常,TensorFlow 用于解决图像分类、对象识别、声音识别等复杂问题。在本文中,我们学习了张量流的结构和组成。在下一篇文章中,我们将深入研究机器学习,并使用 TensorFlow 构建我们的第一个线性回归模型。

深入了解 TensorFlow 的一些资源:

  1. TensorFlow 文档。
  2. Coursera 上 TensorFlow MOOC 介绍。

敬请关注我的后续文章。

Github: 链接
Linkedin: 链接

Photo by Alexandru-Bogdan Ghita on Unsplash

张量流文件系统—以不同方式访问张量

原文:https://towardsdatascience.com/tensorflow-filesystem-access-tensors-differently-888bce1d68e7?source=collection_archive---------16-----------------------

Tensorflow 很棒。真的,我是认真的。问题是它在某种程度上是伟大的。有时候你想做非常简单的事情,但是 tensorflow 却在为难你。我写 TFFS (TensorFlow 文件系统)背后的动机可以被任何使用过 TensorFlow 的人分享,包括你。

我只想知道一个特定张量的名字是什么;或者它的输入张量是什么(忽略运算)。

使用 tensorboard 可以轻松回答所有这些问题。
当然,你只需打开图形选项卡,并目视检查图形。真的很方便吧?如果你想对图表有一个总体的了解。但是如果你很专注,并且有一个特定的问题想要回答,使用键盘是一个不错的选择。

那么为什么不在 python shell 中加载图形并检查它呢? 这是可行的,但是每次我想做那个任务的时候都要写这几行代码?必须记住如何加载图形,如何寻找张量,如何获得它的输入…当然,这只是几行代码,但一旦你一次又一次地重复同样的任务,就该写脚本了!

那么为什么不写一个交互式脚本呢?你是指一个脚本,它给出了模型的路径,为你加载它,并提供实用函数来减轻你写张量流代码的痛苦?好吧,我们可以这么做,但那不会比我要给你看的更棒!

声明:如果你想要一个有意义的解决方案,停止阅读这里,只使用交互式脚本方法。只有当你想学习一些不同的东西时,才继续阅读;)

文件系统拯救世界!

张量的名称有斜杠——与 UNIX 文件系统非常相似。想象一个有张量流文件系统的世界,其中目录类似于张量流范围,文件类似于张量。给定这样一个文件系统,我们可以使用传统的 bash 来做我们想做的事情。例如,我们可以通过运行find ~/tf列出所有可用的作用域和张量——假设~/tf是 tensorflow 文件系统的挂载位置。想只列出张量?没问题,用find ~/tf -type f就行了。

嘿,我们有文件,对吧?它们的内容应该是什么?让我们运行cat ~/tf/.../tensor_name。哇!我们得到了张量的值——很好……这只有在张量不依赖占位符的情况下才有效,原因很明显。

如何得到张量的输入呢?嗯,你可以跑~/tf/bin/inputs -d 3 ~/tf/.../tensor_name。这个特殊的脚本将打印递归深度为 3 的输入的树形视图。不错…

好吧,我加入。我们如何实现它?这个问题问得好。我们可以在用户空间(FUSE)中使用文件系统。这是一种允许我们在用户空间实现文件系统的技术。它为我们省去了进入低层次领域的麻烦,如果你以前没有做过,这真的很难做到(并且实现起来很慢)。包括用 C 写代码——恐怖!我们将使用名为 fusepy 的 python 绑定。

在这篇文章中,我将只解释实现中有趣的部分。完整的代码可以在这里找到。包括文档在内,只有 345 行代码。

首先我们需要加载一个张量流模型:

  1. 使用tf.train.import_meta_graph导入图形结构。
  2. 如果模型经过训练,使用saver.restore加载重量。

将张量映射到文件

接下来,我将描述主类。构造函数中有几件有趣的事情。首先,我们称之为_load_model。然后,我们将图中的每个张量映射到文件系统中的一个路径。假设一个张量的名字是a/b/c:0——它将被映射到路径~/tf/a/b/c:0,假设挂载点是~/tf

每个目录和文件都是使用_create_dir_create_tensor_file函数创建的。这些函数返回一个简单的 python 字典,其中包含关于目录或文件的元数据。

我们也叫_populate_bin,后面我会讲到。

使用 fusepy

fusepy 要求你实现一个扩展fuse.Operations的类。这个类实现文件系统支持的操作。在我们的例子中,我们想要支持读取文件,所以我们将实现read函数。当被调用时,这个函数将计算与给定路径相关的张量。

担心printoptions部分?当实现文件系统时,你需要知道文件的大小。为了知道大小,我们可以评估所有的张量,但是这需要时间和内存。相反,我们可以检查每个张量的形状。给定它的形状,并且给定我们使用一个格式化程序在结果中输出每个条目的固定数量的字符(这就是_fixed_val_length出现的地方),我们可以计算大小。

获取输入和输出

虽然张量流观测仪的结构类似于文件系统,但张量输入和输出却不同。因此,我们可以不使用文件系统来获取输入和输出,而是编写一个可以如下执行的脚本:

~/tf/bin/outputs — depth 3 ~/tf/a:0

结果将如下所示:

~/tf/a:0
├── ~/tf/b:0
└── ~/tf/c:0
    └── ~/tf/d:0
    |   └── ~/tf/e:0
    └── ~/tf/f:0

不错!我们有输出树!要实现它,我们要做的就是:

  1. 获取数据,这是从每个张量到其输出的映射。
  2. 实现一个输出树的递归函数。这并不复杂(它花了我 6 行代码),并且是一个很好的练习。

不过有一个挑战……outputs脚本将在一个新进程中执行——这是 UNIX 的工作方式。这意味着它不能访问 tensorflow 图,它是在主进程中加载的。

那么如何访问张量的所有输入/输出呢?我可以在两个进程之间实现进程间通信,这是一个很大的工作量。但是我选择了不同的方法。我创建了一个包含以下行的模板 python 文件:

_TENSOR_TO_DEPENDENCIES = {{TENSOR_TO_TENSORS_PLACEHOLDER}}

这是非法的 python 代码。我们之前看到的_populate_bin函数读取这个 python 文件,并用输出(或输入)的张量字典替换{{TENSOR_TO_TENSORS_PLACEHOLDER}}。然后,结果文件被映射到我们的文件系统中的一个路径— ~/tf/bin/outputs(或~/tf/bin/inputs)。这意味着如果您运行cat ~/tf/bin/outputs,您将能够看到文件内部(潜在的)巨大的映射。

猫。/最终想法

我们做到了!我们将张量流模型映射到文件系统。TFFS 是一个有趣的小项目,我在这个过程中了解了 FUSE,这很棒。

TFFS 是一个可爱的工具,但它不能代替旧的 python shell。使用 python,您可以轻松地导入张量流模型并手动检查张量。我只是希望我能记得如何这样做,即使在做了数百次之后…

面向绝对初学者的 Tensorflow

原文:https://towardsdatascience.com/tensorflow-for-absolute-beginners-28c1544fb0d6?source=collection_archive---------0-----------------------

按照本官方 Tensorflow 指南安装 Tensorflow

如果你在推特上关注我,你会知道我是开源社区的忠实粉丝。我一直很钦佩像安德烈·卡帕西这样的研究人员,他们花宝贵的时间写博客和写教程,这些年来对我帮助很大。所以,当谷歌中国主动向我提供一个写教程的志愿机会,帮助他们在中国的新在线教育项目时,我知道是我回报的时候了。这是教程的第一部分,将建立在使用谷歌张量流库的实际知识上。我假设您对 Python 编程语言有基本的了解,并且数学成熟度达到高中水平。如果你不熟悉 Python,但知道一般如何编码,你应该能够学会语法并跟上。或者,你可以进入 Codecademy 学习 Python。我将从构建和训练执行布尔逻辑的感知器开始,比如 and、OR、XOR,到本系列教程结束时,我们将对猫进行分类!或者狗!甚至 杨颖 !使用一种称为的技术,通过谷歌预先训练的深度神经网络进行转移学习。这篇博文稍后将被翻译成中文,以便中国学生更容易理解。

在学习 Tensorflow 之前,我们先来看看,什么是神经网络?为什么每个人都不停地谈论它?

人脑由数十亿个神经元组成,这些神经元通过突触相互连接。如果对神经元的“足够”突触输入触发,那么神经元也将触发。这个过程叫做*思维。*这里有一个问题, c 我们可以模拟这种现象,使用我们的笔记本电脑和一些数学知识,这样我们就可以制造我们的机器,”认为?绝对是! iso facto人工神经网络。( 天网 有人吗?)这些网络在最近几年开始表现得非常好——部分是因为这些天可用的数据数量惊人,部分是因为摩尔定律。出于建立直觉的目的,我喜欢将神经网络视为通用函数逼近器。如果你懂微积分,这个类比对你来说很容易理解。把它想象成通过把许多线段放在一起来逼近一个弯曲的函数。从 Google Translate 到 FB/微博的所有东西都使用这种技术。它们被用于癌症检测、药物发现甚至 自动驾驶汽车 !很有可能,你在生活中的每一天都会遇到某种形式的神经网络。Google 的 Tensorflow 库为实现 NN 提供了非常高层次的抽象。如果你真的想很好地理解神经网络——你应该知道像 反向传播 和各种 激活函数 这样的算法是如何工作的,最好用纯 Python/numpy 从头开始写一遍,以获得更好的直觉。我们总是可以使用像 Tensorflow 这样的开源库来快速构建原型,从而避免从头开始编写容易出错的算法。让我们开始建立一个非常基本的单层感知器。一种可以模拟逻辑与门的神经网络的基本形式,好吗?

别担心,我会解释下面的每一行代码。我建议你在两个窗口中打开这篇文章,这样你可以同时看到代码和解释。在此之前,让我们先谈谈张量流是如何工作的;为了使我们的代码执行得更快,并避免 Python 等语言的缺点,这些语言本质上以可读性换取速度,TensorFlow 中的一切都基于创建计算图。把计算图想象成一个节点网络,每个节点都是一个操作,运行一些函数,这些函数可以是简单的加法或减法,也可以是复杂的多变量方程。然后在 Tensorflow 会话中使用 fast C++后端执行该图。TensorFlow 中的变量由会话管理。

现在,我们已经知道了足够多的知识,可以一头扎进代码中,这是最快的学习方法。

第 1 行:它简单地导入了 Tensorflow 库,其中包含了所有的精彩内容。

第 2 行:我们简单地将 True 的值赋为 1,False 的值赋为-1,快速脑筋急转弯:我们可以将 False 的值赋为零吗?

第 3 行: Bias 是我们选择的常数(通常为 1 或-1),并让我们的神经网络决定常数项应该乘以的权重,以获得我们想要近似的期望函数。了解更多关于偏见的知识;参考这个T3【stack overflow 线程

第 4 行到第 9 行:这是我们用来训练神经网络的输入数据。真和假的所有四个可能值是 TT、TF、FT、FF,加上偏置项‘b’。

第 10 到 15 行:这分别是我们的训练集 T,F,F & F 的输出数据。我们的神经网络应该能够查看第 4–9 行的训练输入和第 10–15 行的训练输出,从而能够逼近期望的'*和'*函数

第 16 行:输入(x)和输出(y)训练数据将保持不变,因此我们的神经网络将通过逼近“权重”(w)来逼近函数,在这种情况下,3 * 1 由于 3 个输入对应于 1 个输出,NN 将在训练过程中不断调整权重以找到最佳值,因此它是一个变量对象。这些值被初始化为正态分布的随机数,因此我们使用了 tf.random_normal 模块。我希望神经网络常用的等式" y = Wx" 现在对你更有意义了。

第 18–22 行:现在我们可以定义我们的模型了。从阶跃函数开始,阶跃激活函数对于二元分类方案是有用的。换句话说,当我们想要将一个输入模式分类为两个组中的一个时,我们可以使用具有步进激活功能的二元分类器。注意,当使用深度神经网络时,阶跃函数将不会有用,我们将引入非线性激活函数,如 sigmoidtanhrelu 和我最喜欢的 leakyrelu (恰好是我的 twitter 句柄)。这段代码只在函数的参数为> 1 时返回 1,否则返回-1

第 24–26 行:定义了阶跃函数后,我们可以简单地用三行定义输出、误差和均方误差。Error 主要计算我们的模型输出预测与训练集的真实“输出”有多“偏离”。然后我们将继续计算均方误差,为什么?嗯,它背后有一个非常美丽的数学,如果你在大学里上过概率 101 课,你就会知道,但是这里的是一个很好的简短教程来解释它。

第 28–29 行:对权重(w)等特定函数的评估将有助于调整我们预定义的变量的值,因此,在这段代码中,我们根据之前计算的误差计算了所需的调整(delta)。然后把它加到我们的重量里。

第 31–32 行:模型必须由 TensorFlow 会话评估,我们在将所有变量初始化为其指定值之前实例化该会话,还记得吗?我们必须使用 Tensorflow 的快速 C++后端来运行我们的模型。神奇的是后面的环节

第 34–40 行:我们现在可以通过训练时段运行我们的模型,每次通过评估训练来调整权重。由于我们使用的是二进制输出,我们可以期望达到一个完美的结果,均方误差为 0 。我们将很快到达那里。请注意, Session.run 将返回到那时为止评估的结果。在每个时期,我们评估 mse 以便跟踪进度,并且训练实际调整权重。

现在继续运行这段代码,由于这个网络的简单性,你将能够在很短的时间内很快找到解决方案。

我将把它作为一个练习留给读者:通过玩代码来实现一个''和' XOR '门(提示:将 training_output 数据集更改为期望的输出结果)。

恭喜你!你刚刚编码并训练了你的第一个神经网络。下次见,再见。

用于制造质量控制的张量流

原文:https://towardsdatascience.com/tensorflow-for-manufacturing-quality-control-bc1bc6740558?source=collection_archive---------7-----------------------

ByPriya DWI vedi,数据科学家@ SpringML

人工智能正在改变每个行业。在制造业,人工智能和机器学习正在自动化质量控制方面发挥巨大作用。目视检查和问题识别是一项挑战,通常需要大量人力。例如,正确的包装是一个重要的步骤,不仅用于品牌,也用于物流目的。包裹上印有代码,允许制造商跟踪包裹的时间、来源和路线。

SpringML 的标签检测应用程序使用机器学习来识别包装标签中的异常。这款应用可以实时观看视频或包装图片,并提取文本。如果文本不符合标准,它会实时发出警报。

这是一个具有挑战性的问题,原因有几个——视频镜头可能不稳定,因此盒子上序列号的位置会在帧之间发生变化,盒子的运动模糊了序列号,裁剪出的文本分辨率较低,这对于标准 OCR 包来说是一个具有挑战性的输入。

我们通过使用谷歌的 Tensorflow 对象检测框架解决了这个问题。

请看下面的结果。当预测的文本被完美地阅读时,一个绿色框形成。令人印象深刻的权利!!

OCR on moving objects

方法

解决这个问题有两个主要步骤:

  1. 检测盒子上序列号的位置
  2. 读取序列号

让我们详细讨论每一个问题

检测盒子上序列号的位置

如果摄像机位置固定,而传送带以恒定速度移动,那么您可以使用基于空间和时间的逻辑来识别并在传送带穿过框架时裁剪出序列号。然而,由于手持摄像机,这个问题更具挑战性,因此我使用 Tensorflow 对象检测框架来训练识别序列号的模型。要了解更多关于在这个框架上训练定制模型的信息,请查看我的这篇文章。

对象检测框架非常强大,您可以使用迁移学习在一组非常小的图像(本例中为 50-100 张图像)上训练您自己的模型。然后,您可以在剪辑上运行该模型,它会标记出序列号的位置。我们能够裁剪出这些图像,反转它们,增加它们的对比度,并保存它们以供下一步使用。请看下面的一些样本图片:

Sample output after step 1

读取序列号

正如你从上面的图片中看到的,由于模糊和细字体,即使经过一些预处理,裁剪出来的图像质量也非常低。即使是最好的 OCR 软件包之一——Google Vision API 也难以处理这种类型的输入。Vision API 提供了一个非常好的 web 界面,可以在样本图像上快速尝试 API。请看这个链接

请参见下面的 Vision API OCR 对上面示例的输出:

经过一些实验后,最终采用的方法是训练第二个对象检测模型,该模型可以识别序列号中的每个数字和字母,如 1、7、3、N、H、4、2、C 等。第二个对象检测模型将检查图像并标出它可以识别的每个字母或数字,最后我们将得到的字符连接起来形成完整的字符串。

那么,这种方法为什么有效呢?

原因是模型是在这个特定数据上训练的。通过给它看许多“7”的模糊照片,我们可以训练它在这种情况下“7”是什么样子。

参见下面第二个对象检测模型的输出:

Letter/Number detection model

结论

这种自动化技术可以部署在制造工厂,以提高包装的准确性,减少物流和运输错误。TensorFlow 对象检测提供了在制造工厂内部署此类解决方案的灵活性,因此可以进行实时预测。

SpringML 是谷歌云平台的首要合作伙伴,专注于机器学习和大数据分析。我们已经在多家财富 500 强企业中实施了预测和分析解决方案。请联系了解更多:info@springml.comwww.springml.com

轻松安装 Tensorflow GPU:使用 conda 代替 pip [Update-2]

原文:https://towardsdatascience.com/tensorflow-gpu-installation-made-easy-use-conda-instead-of-pip-52e5249374bc?source=collection_archive---------0-----------------------

想在你的 GPU 机器上安装 Tensorflow,运行那些 GPU 吃深度学习算法?你来对地方了。我有一个配置不错的 GPU,以前玩 FIFA 都是用它。换成 AI,本来想用 GPU 做深度学习,而不是玩游戏。但是…..我害怕 Tensorflow 安装不兼容的 CUDA 版本。在这篇文章中,我将解释传统的方法和新的优化方法,以及为什么我们应该放弃 pip 而使用 conda。

如果你是一个 UBUNTU 用户,想要一步一步的使用 LONG 方法,那么我已经在这里发表了一篇完整的文章:

[## Tensorflow GPU 安装变得简单:Ubuntu 版本

在 ubuntu 上安装 Tensorflow GPU 对于正确版本的 cuda 和 cudnn 来说是一个挑战。一年前,我写了一篇…

medium.com](https://medium.com/@harveenchadha/tensorflow-gpu-installation-made-easy-ubuntu-version-4260a52dd7b0)

传统方法

要安装 Tensorflow for GPU,我必须遵循以下步骤(这些步骤适用于 windows):

  1. 先弄清楚 GPU 是否兼容 Tensorflow GPU!(来自这里)
  2. 这里下载并安装 Cuda 工具包。
  3. 在 Nvidia 开发者网站注册下载 cuDNN
  4. 通过将 cuDNN 的内容提取到步骤 2 中安装的工具包路径中来安装 cuDNN。CUDA Toolkit 目录中会有一些你必须替换的文件。
  5. 就这样吗?不,那么你需要检查你的路径变量是否存在 CUDA_HOME。如果没有,请手动添加。
  6. 然后检查路径变量,看工具箱路径是否可用。
  7. 然后最后安装 Anaconda 或 Miniconda
  8. 创建安装了 Python 和 Pip 包的环境。
  9. 然后最后' pip 安装 tensorflow-gpu '。
  10. 测试您的安装。

你会说这很简单,对吗?为什么不试一试呢?请记住,我没有为上述任何步骤提供视觉效果,因为这些只是为了让您了解,并解释我们在此过程中遇到的问题。

这个过程有 1%的概率会对你有利!

为什么?

由于版本编号的原因

Figure 1. Source

Tensorflow 的不同版本支持不同的 cuDNN 和 CUDA 版本(在此表中,CUDA 有一个整数值,但当您下载时,它实际上是一个浮点数,这使得编号和兼容性更加困难)。cuDNN 和 conda 也不是 conda 的一部分。

获奖的新方法

安装 Miniconda 或 Anaconda,然后运行这个命令。

conda create --name tf_gpu tensorflow-gpu 

嗯是这样吗?是的。

该命令将创建一个以“tf_gpu”命名的环境,并将安装 tensorflow-gpu 所需的所有软件包,包括cuda 和 cuDNN 兼容版本。

Figure 2. cuDNN and Cuda are a part of Conda installation now

此外,它也不会干扰您当前已经设置好的环境。

如果你很难想象这个命令,我会把它分成三个命令。

conda create --name tf_gpuactivate tf_gpuconda install tensorflow-gpu

注意:这也适用于 Ubuntu 用户。不再需要很长的脚本来让 DL 在 GPU 上运行。

测试 Tensorflow 安装

要测试 tensorflow 安装,请遵循以下步骤:

  1. 打开终端,使用*‘激活 TF _ GPU’激活环境。*
  2. 使用python进入 python 控制台
import tensorflow as tfsess = tf.Session(config=tf.ConfigProto(log_device_placement=True))

Figure 3. Validating your Tensorflow Installation

阅读我在 Medium 上的其他文章:

  1. 我的第一次数据科学面试
  2. 机器学习:什么、何时、如何?
  3. 卡尔曼滤波面试

关于我:我是一名自动驾驶汽车工程师,专注于使用深度学习为车辆提供智能。如果你遇到任何困难,请通过 LinkedIn 联系我。

此信息最初在此发布。这篇文章也谈到了张量流计算的一些改进,但我现在并不关心这些,因为那不是我的首要任务,:D

更新 1 :一些用户抱怨它不能在 Ubuntu 上工作,我发现你需要在 Ubuntu 上手动安装与卡兼容的驱动程序。此外,如果您已经设置了任何其他环境,那么它是一个烂摊子,这可能不会帮助你。

更新 2 :这篇文章已经被阅读了超过 50k 次,甚至 Aurélien Géron 也推荐使用这个技巧来安装 Tensorflow。

如果你是一个 UBUNTU 用户,想要一个使用 LONG 方法的逐步指南,那么我在这里发表了一篇完整的文章:

[## Tensorflow GPU 安装变得简单:Ubuntu 版本

在 ubuntu 上安装 Tensorflow GPU 对于正确版本的 cuda 和 cudnn 来说是一个挑战。一年前,我写了一篇…

medium.com](https://medium.com/@harveenchadha/tensorflow-gpu-installation-made-easy-ubuntu-version-4260a52dd7b0)

张量流图像:在 GPU 上增强

原文:https://towardsdatascience.com/tensorflow-image-augmentation-on-gpu-bf0eaac4c967?source=collection_archive---------8-----------------------

深度学习可以解决许多对人类来说似乎不可能的有趣问题,但这是有成本的,我们需要大量的数据和计算能力来训练深度神经网络。

为了解决数据问题,我们可以使用数据扩充。增强也可能需要大量的计算,因为我们可能需要增强数百万张图像,为了处理这一点,我们可以使用 tensorflow.image,它提供了一些基本的图像功能,所有的计算都在 GPU 上完成。

我正在使用 tensorflow eager_execution,这样我们就可以在不运行会话的情况下看到增强的结果,如果你想了解更多关于 eager_execution 的信息,请阅读此处

让我们来看看一些增强功能:

1.加载图像

张量流图像函数期望传递的图像是张量。让我们加载一幅图像并将其转换为张量:

img = matplotlib . py plot . im read('/img _ path ')
TF _ img = TF . convert _ to _ tensor(img)

Image soure:https://cdn-images-1.medium.com/max/1000/1*ULBhR9EVavi-HhpdbrjEzQ.jpeg

2.应用增强功能

在这里,我们将看到不同类型的增强,可以适用于图像。

a.翻转图像

一个最基本的增强是将翻转应用于图像,这可以使数据翻倍(基于你如何应用)。

水平翻转:

brright _ img = TF . image . flip _ left _ right(TF _ img)

Horizontally Flipped Image

垂直翻转:

brright _ img = TF . image . flip _ up _ down(TF _ img)

Vertically flipped Image

**随机翻转:**您的图像有 1/2 的几率会水平或垂直翻转。

brright _ img = TF . image . random _ flip _ left _ right(TF _ img)
brright _ img = TF . image . random _ flip _ up _ down(TF _ img)

或者,您也可以使用 tf.reverse 进行同样的操作。tf.reverse 接受一个附加参数,即 axis,它定义了图像应该沿 x 轴或 y 轴翻转的位置。

brright _ img = TF . reverse(TF _ img,axis =[0])#垂直翻转
brright _ img = TF . reverse(TF _ img,axis =[1])#水平翻转

b.图像旋转

Tensorflow 提供*tensor flow . image . rot 90()*函数,将图像逆时针旋转 90 度。

brright _ img = TF . image . rot 90(TF _ img,k = 1)

Rotated Image

图像将逆时针旋转 90 度 k 次。

c.聪明

用下面的代码改变图像的亮度:

brright _ img = TF . image . adjust _ brightness(TF _ img,delta= 0.2)

Brightened Image

其中δ是要加到每个像素上的值的量。δ值越大,图像越亮。如果 delta 为负,那么图像将变暗。如果你想应用随机亮度,你可以使用下面的函数:

brght _ img = TF . image . random _ brightness(TF _ img,max_delta=0.5)

Random brightness

Delta 将介于-max_delta 和 max_delta 之间。

d.其他方法

除了上述方法之外,还有如下类似的方法可用于图像增强:

  • [tf.image.adjust_contrast](https://www.tensorflow.org/api_docs/python/tf/image/adjust_contrast)
  • [tf.image.random_contrast](https://www.tensorflow.org/api_docs/python/tf/image/random_contrast)
  • [tf.image.adjust_hue](https://www.tensorflow.org/api_docs/python/tf/image/adjust_hue)
  • [tf.image.random_hue](https://www.tensorflow.org/api_docs/python/tf/image/random_hue)
  • [tf.image.adjust_gamma](https://www.tensorflow.org/api_docs/python/tf/image/adjust_gamma)
  • [tf.image.adjust_saturation](https://www.tensorflow.org/api_docs/python/tf/image/adjust_saturation)
  • [tf.image.random_saturation](https://www.tensorflow.org/api_docs/python/tf/image/random_saturation)

3.其他图像处理任务

除了图像增强,tf.image 还提供了一些其他有用的图像处理功能。

农作物

Tensorflow 提供了以下用于裁剪图像的功能。

br right _ img = TF . image . central _ crop(TF _ img,0.5)

central_crop 使图像沿每个维度远离中心,并移除外部部分。

brght _ img = TF . image . crop _ to _ bounding _ box(TF _ img,offset_height = 100,offset_width = 100,target_height = 400,target_width = 800)

通过提供偏移和图像尺寸值,crop_to_bounding_box 可以帮助您裁剪图像的特定区域。

如你所见,Tensorflow 提供了一些基本类型的图像函数,可以帮助你增加图像数据。你可以在这里探索更多关于 he tensorflow.image class

TensorFlow 图像识别 Python API 教程

原文:https://towardsdatascience.com/tensorflow-image-recognition-python-api-e35f7d412a70?source=collection_archive---------2-----------------------

在带有 Inception-v3 的 CPU 上(以秒为单位)

这是在你的笔记本电脑或电脑上进行图像识别的最快和最简单的方法,不需要任何 GPU,因为它只是一个 API,而你的 CPU 足以胜任这一工作。

我知道,我对这个特定的 API 有点晚了,因为它是 tensorflow 早期版本附带的。API 使用在 1000 类 *上训练的 CNN 模型。*更多详情请参考本 张量流页面

在我开始向你们展示如何用任何图像实现这个 API 之前,这里有一个例子...

输入是航天火箭/航天飞机的图像,不管你怎么称呼它。

Fig: Rocketlaunch.jpg

命令行的输出是“航天飞机(得分= 89.639%)”。

Fig: Space shuttle (score 89.639%)

如果你有 linux 或者 Mac 也不用担心。我敢肯定,这将在任何 CPU 的每个系统上工作,假设你已经安装了 TensorFlow 1.4。

整个过程将分 4 步完成:

1.从 tensorflow 资源库下载模型。

转到 tensorflow 存储库链接并下载到您的计算机上,并将其解压缩到根文件夹中,因为我使用的是 Windows,所以我会将其解压缩到“C:”驱动器中。

现在将文件夹命名为“模型”。

2。命令行

打开命令提示符(以管理员身份)。

现在,我们需要运行"*models>tutorials>imagenet>classify _ image . py "*中的 classify_image.py 文件。

Fig: Running the classifier file

这将下载一个 200mb 的模型,这将有助于您识别您的图像。

如果一切正常,您将在命令提示符下看到:

giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.88493)
indri, indris, Indri indri, Indri brevicaudatus (score = 0.00878)
lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00317)
custard apple (score = 0.00149)
earthstar (score = 0.00127)

现在,为了确保我们理解如何正确使用它,我们将做两次。一次将图像文件保存在“模型>教程> imagenet > ”目录中,第二次将图像保存在不同的目录或驱动器中😏

3.下载目录中的图像

您可以随意使用互联网或其他任何地方的任何图像,并使用 classify_image.py 将其粘贴到“models>tutorials>imagenet【images.png】T42目录中,然后我们会将其粘贴到“D:\ images.png”或您想要的任何目录中,只是不要忘记在命令提示符中键入正确的地址。我使用的图像如下。

Fig: images.png

4.使用命令提示符执行识别

为此,您只需编辑“—图像文件*”参数,如下所示。*

a)与 classify_image.py 文件在同一目录下的图像。进入 imagenet 目录后,打开命令提示符并键入…

python classify_image.py --image_file images.png

Fig: images.png is the same directory

b)对于不同目录中的图像通过指向放置图像的目录进行键入。

python classify_image.py --image_file D:/images.png

Fig: images.png in different directory

结果

现在,显然两张图片的结果是相同的,如下所示。

Fig Result for images.png

如你所见,分数相当准确,即手机的分数为 98.028%。

注意:您可以随意使用任何您想要的图像,并将其保存在任何目录中。只要记住输入正确的图像路径。

下一步:转到 对您的自定义图像进行新类别的培训。

我已经尽力让文章尽可能准确易懂。有什么意见,建议或者有什么问题,写在评论里吧。

关注我脸书推特LinkedInGoogle+Quora 看类似帖子。

鼓掌吧!分享一下!跟我来。

乐意帮忙。荣誉……..

你会喜欢的以前的故事:

  1. “Tensor flow”中的“Tensor”是什么鬼?

2.历元对批量对迭代

3.感知器是什么鬼?

4.激活功能解释:神经网络

TensorFlow.js 全栈入门套件

原文:https://towardsdatascience.com/tensorflow-js-full-stack-starter-kit-2e6693192bcf?source=collection_archive---------9-----------------------

使用 TensorFlow-Stack-TS 启动您的人工智能项目

Kickstart Your AI Project with TensorFlow-Stack-TS

开始一个新的人工智能项目有许多事情要考虑,用你遇到的一堆工具进行概念验证可能是一条路。但是一旦项目的这一阶段结束,你将需要考虑工程!获得一个可以工作的测试平台,或者更好——一个可以开发应用程序的应用环境。最近,当我试图为一个基于 AI/TensoFlow 的项目建立应用程序堆栈时,我发现我过去使用的基于均值的模板远远落后,没有完全集成最新的技术。所以我决定把最新最棒的为我工作的库放在一起,作为一个新的全栈模板。在看到它对我的项目有多么有用之后,我现在开源了它。

有什么好处?

谷歌的 TensorFlow.js 运行在 NodeJS 环境的后端上——V8 单线程 Javascript 引擎,使用八进制 WebGL 或 CUDA 二进制文件进行硬件加速。在这种环境下,用大型数据集训练复杂模型似乎是行不通的。一个更合理的方向是(1)采用在别处构建的大型模型,转换它,并使用这个后端服务于客户的请求。在 cloud/K8S 上运行这样的应用程序并根据需要进行扩展是很容易的。使用它来(2)探索一个模型,可视化它并调整它的参数是一个很好的选择。不考虑这里的 AI 引擎,这是(3)一个很好的集成库和现代开发环境,可以快速启动任何 web/mobile/native 项目。

盒子里有什么?

集成良好的全栈工作样本:

  • TensorFlow.js 后端引擎预装了一个简单的模型来查看它的运行情况。
  • 集成到响应式 web/移动应用程序中的可视化库:一个用于运行上述模型并可视化其预测的仪表板。
  • 一种跨堆栈的编码语言— TypeScript/Javascript 完全支持 ES6,所有代码都支持 async/await。
  • 基于 GraphQL 模式的最新 API。
  • 现代的开发工具,可以热重载变更、林挺、单元测试和代码覆盖报告。作为 IDE 和调试器很好地集成到 VSCode 中。
  • 保持简单的哲学跨越!我已经通过而不是节省了大量的学习曲线时间,包括一堆我觉得过时或繁琐的库:REST、yarn、Babel、Redux、Apollo server/client、Enzym、Winston/Bunyan、Relay…

TensortFlow-Stack-TS running in development

堆栈中的主要集成库

后端

客户端

主要兴趣点

mono-repo 分为服务器端(后端)项目和客户端(前端)项目。后端运行 TensorFlow 模型和一个调用它的 API。客户端是一个单页面的响应式应用程序,它通过 API 调用模型,并显示结果的图表。

  1. TensorFlow 模型作为“模型提供者”在src/tensorFlowProvider文件夹中实现。它遵循一个简单的初始化> >训练> >编译> >预测的工作流程。如果需要一个不同的引擎,很容易实现一个基于其他 AI 引擎的类似提供者。
  2. 模型的客户端在client/src/components/server-predict-card中实现。在那里你可以找到一个输入输出表单,一个可视化面板和一个驱动它们的小模型。可视化面板规范可在VegaLiteSpec文件中找到。你可以在织女星网站上找到一堆图表规格的例子。
  3. 后端 API 在src/graphqlApi中的 GraphQL 模式上实现,并由模式浏览器提供服务(仅限开发构建)。
  4. API 的客户端在client/src/utils/graphqlQuery中实现为通用的 GraphQL 客户端,在client/src/components/graphql-types中实现为一堆接口。
  5. 性能:如上所述,TensorFlow.js 在后端与“标准的”基于 TF-Python 的环境有很大不同。我找不到好的基准。如果你在下面的评论里提到我,我会很高兴。

这个项目可以从我的 Github 中克隆出来— 这里

很高兴得到评论,加强该项目等援助。如果您的项目需要一些咨询,请联系我。欢迎你来星/拍手/点赞/分享给我看看你有多牛逼,帮助别人找到这个故事;-)

干杯!

eram at weblegions dot com

原载于 Github

TensorFlow + Jupyter 笔记本+ Nvidia DIY 设置

原文:https://towardsdatascience.com/tensorflow-jupyter-notebook-nvidia-diy-setup-473acfe5b0e?source=collection_archive---------2-----------------------

基于我的第一个故事,更详细的使用 Xbuntu / Ubuntu 17.04 的逐步设置。请注意,我们将使用拥有 sudo 权限的用户,而不是直接拥有 root 权限的用户。

Nvidia 驱动程序设置

安装 Nvidia 驱动程序库

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update  
sudo apt-get upgrade  
sudo apt-get install build-essential cmake g++ gfortran git pkg-config python-dev software-properties-common wget

Nvidia 安装 CUDA 8.0,获得基础安装程序和补丁 2。CUDA 也将安装 nvidia 驱动程序,相应地专门针对 CUDA 版本

sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-*amd64.deb
sudo apt-get update
sudo apt-get install cuda

为本地用户设置 CUDA 环境

echo 'export PATH=/usr/local/cuda/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

使用测试它

nvcc -V

最后安装 cuDNN,从 Nvidia 获取,这个是后面给 Tensorflow 的。为当前安装的 CUDA 获取正确的版本

cd ~/Downloads/
tar xvf cudnn*.tgz
cd cuda
sudo cp */*.h /usr/local/cuda/include/
sudo cp */libcudnn* /usr/local/cuda/lib64/
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

Anaconda 设置

使用 Python 3.6 从 Anaconda 获取安装程序,并遵循安装说明

cd ~/Downloads/
bash Anaconda3-4.4.0-Linux-x86_64.sh

通常我会将 Anaconda 安装在/opt 文件夹下。

如果安装在主文件夹下,我们需要在激活环境后找到环境文件夹

source activate tf-gpu
echo $PATH

这对以后设置 Jupyter 笔记本很重要。

TensorFlow 设置

一旦我们安装了 Anaconda,我们将为 Jupyter 设置创建一个环境,并安装 TensorFlow GPU

conda create --name tf-gpu python=3.6
source activate tf-gpu
pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.3.0-cp36-cp36m-linux_x86_64.whl

Jupyter 设置

一旦我们安装了 TensorFlow,我们将安装 Jupyter,我们将使用 conda 来管理 Jupyter 笔记本和 shell 运行时的包

conda install jupyter notebook numpy pandas matplotlib

DDNS 设置

安装任何 ddns 客户端能够更新域,所以我们可以连接回我们的家庭服务器。我们可以为此使用 NoIP ,它有 linux 客户端来更新域。

NGINX 设置

确保我们在使用 letsencrypt 之前停止当前的 nginx,而不是购买 SSL 证书,因为我在节约成本

sudo systemctl stop nginx

一旦 NGINX 停止,我们可以运行初始的 letsencrypt 命令,该命令将使它自己的内部服务器脱离验证过程

使用命令克隆 letsencrypt,然后设置初始证书

sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencryptsudo -H /opt/letsencrypt/letsencrypt-auto certonly --[email=me@chclab.net](mailto:email=me@chclab.net) -d deeplearning.chclab.net -d jupyter-cpu.chclab.net -d jupyter-nvidia.chclab.net -d monitor.chclab.net

设置 cron 作业以运行证书续订过程

0 0 * * *   /opt/letsencrypt/letsencrypt-auto renew --quiet

在~/start-tf-jupyter-gpu.sh 创建一个 shell 脚本来启动 Jupyter Notebook,这将使用我们之前设置的名为 tf-gpu 的 conda 环境。

#!/bin/bash
export PATH=/home/chc/.conda/envs/tf-gpu/bin:$PATH
/home/chc/.conda/envs/tf-gpu/bin/jupyter notebook --no-browser --NotebookApp.allow_origin='*' --notebook-dir='/home/chc/project' --NotebookApp.port=9999

使用以下命令保护 Jupyter 笔记本,更多信息请点击此链接

jupyter notebook --generate-config
jupyter notebook password

sudo VI/etc/systemd/system/jupyter-GPU . service创建一个 Systemctl 服务

[Unit]
Description=Service for jupyter cpu notebook
After=local-fs.target network.target[Service]
Type=simple
User=chc
Group=chc
ExecStart=/home/chc/start-tf-jupyter-gpu.sh
Restart=always
SyslogIdentifier=jupyter cpu notebook[Install]
WantedBy=multi-user.target

启用该服务并尝试运行它

sudo systemctl daemon-reload
sudo systemctl enable jupyter-gpu.service
sudo systemctl start jupyter-gpu.service
sudo systemctl status jupyter-gpu.service

安装 NGINX

sudo apt-get install nginx

设置以下 NGINX,对我来说是sudo VI/etc/NGINX/conf . d/jupyter-NVIDIA . chc lab . net . conf

upstream notebook-tensorflow {
        server localhost:9999;
}
server {
        server_name jupyter-nvidia.chclab.net;
        listen 443 ssl;
        access_log off;ssl_certificate /etc/letsencrypt/live/deeplearning.chclab.net-0001/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/deeplearning.chclab.net-0001/privkey.pem;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
        ssl_ecdh_curve secp384r1;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off;
        ssl_stapling on;
        ssl_stapling_verify on;
        resolver 8.8.8.8 8.8.4.4 valid=300s;
        resolver_timeout 5s;
        # disable HSTS header for now
        #add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
        add_header X-Frame-Options DENY;
        add_header X-Content-Type-Options nosniff;ssl_dhparam /etc/ssl/certs/dhparam.pem;location / {
            proxy_pass            [http://notebook-tensorflow](http://notebook-tensorflow);
            proxy_set_header      Host $host;
        }location ~ /api/kernels/ {
            proxy_pass            [http://notebook-tensorflow](http://notebook-tensorflow);
            proxy_set_header      Host $host;
            # websocket support
            proxy_http_version    1.1;
            proxy_set_header      Upgrade "websocket";
            proxy_set_header      Connection "Upgrade";
            proxy_read_timeout    86400;
        }
        location ~ /terminals/ {
            proxy_pass            [http://notebook-tensorflow](http://notebook-tensorflow);
            proxy_set_header      Host $host;
            # websocket support
            proxy_http_version    1.1;
            proxy_set_header      Upgrade "websocket";
            proxy_set_header      Connection "Upgrade";
            proxy_read_timeout    86400;
        }
}

生成一个强 dhparam 文件

openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

重启 NGINX

sudo systemctl restart nginx

最后是使用 Jupyter 笔记本的样子

张量流:不知道从哪里开始?

原文:https://towardsdatascience.com/tensorflow-no-idea-where-to-begin-b7b981d7321e?source=collection_archive---------1-----------------------

TensorFlow 是一个库,可以应用于所有的机器学习算法,特别是神经网络深度学习。机器学习就是那些被编写来处理大型数据集以从中发现模式并提取信息的程序。它实际上从数据中学习,以做出准确或接近准确的预测,并更好地自我修正。就像我们希望有人做的那样。图像识别及其增强甚至识别是 ML 的一些应用。这只是问题的一个范畴,分类。回归在图形中现有数据之间画一条线,并根据这条线对图形中的新数据进行分类。聚类是根据数据的相似性和差异性来划分数据。规则提取是寻找如果“这个”那么“我会做那个”的模式。ML 算法查看已经被正确标记整批数据或预先存在的数据的语料库,并从该语料库中提取有意义的信息。利用这一点,分类器将找出新样本所属的类别。分类器的准确性主要取决于我们给算法的语料库。分类器是通过向分类算法提供语料库(正确标记的数据集)并训练自己输出分类器而制成的。与早期的基于规则的分类器相比,基于 ML 的分类器总是学习和动态的。特征向量是分类器的输入,标签是分类器的输出。表示基于 ML 的系统指出应该注意什么特征。这些是特征选择算法。

深度学习系统是一种表示系统

深度学习算法学习重要的特征,以便使预测变得重要。

神经网络是一类侧重于特征选择的深度学习算法。神经网络是由称为神经元的核心学习元素构成的。神经元是学习或理解其可用语料库中模式的最简单的元素。(深入:神经元看起来是什么样子,以及它如何与数据交互)。深度学习算法基于层,其中每层识别一个特征。每一层将它们的数据传递给下一层,下一层关注于寻找另一个特征,并继续下去。最后一层把所有东西放在一起,找到物体。我们向其提供输入或输出的那些层被称为可见层,而在它们之间的那些层被称为隐藏层。之所以这样称呼它们,是因为它们的输入和输出对我们来说是隐藏的。

世界上所有的问题都可以用图来建模。这些图形被称为计算图或数据流图,它在数据流经图形时转换数据,并实现非常复杂的数字计算。TensorFlow 可以在一个机器集群上运行。将问题建模为图形也可以进行大规模并行操作。TensorBoard 是浏览器中的一个可视化工具,用于在屏幕上查看图形模型,以了解数据如何流动以及如何被它转换。它还能够预测你建立的模型非常迅速和容易。TF 对于新的最大似然算法的 R&D 非常有用。可以在集群中的不同机器上计算图形的不同部分,从而允许我们处理巨大的数据集。

在 TensorFlow 中,一切都是图形。python 设置在图表中形成节点和边。TensorFlow 中的编程包括为您的解决方案构建一个名为 network 的图形模型。每个节点都是一次计算。数据是连接节点的边。这些边叫做张量。张量在图形中流动,并在途中转换。当输入可用时,计算每个节点。(解释一个张量流问题的模型)。

计算图是张量流表示现实世界中任何模型的方式。在这里,我们将对计算图中的节点、边和依赖关系进行建模,并用 TensorBoard 对其进行可视化。边是那些连接节点的线。这些计算图形中的数据称为张量(端维矩阵)。有向无环图是(无环)这样的图,其中每条边都有一个指向前方的箭头来给出结果。它可以向多个节点发送和接收数据。从其他节点接收数据节点被称为相关性。终端节点被称为间接节点,因为它们要么直接接受输入,要么直接给出输出。有圈的图永远不会完成计算。因此只有 tensorflow 只能计算有向无环图。

最大似然算法有反馈回路,这是一个行动的循环。为了解决这个问题,tensorflow 引入了一种不形成循环的工作方法。Tensorflow 通过在第一个图形的末尾创建一个图形副本,并将数据发送到该副本来实现这一点。原始图形将经历循环。它可以根据需要创建任意多副本。这个算法迭代多次。

现在我们要做一个张量流程序。第一步是建立一个图表。这里我们指定数据和操作。然后我们将执行图形来获得结果。

TensorFlow 库生成数千个节点来执行计算。确保在激活安装在您机器上的 TensorFlow 后,您正在终端中运行以下程序。

续上 TensorFlow 新手上手。

张量流物体探测,脸书出版物综述

原文:https://towardsdatascience.com/tensorflow-object-detection-an-overview-of-facebook-publications-2391698ed82f?source=collection_archive---------8-----------------------

在之前的故事中,我们在图像中检测到一些物体,然后我们做了一个扩展来分析一个视频,以一种非常基本但实用的方式,今天我们有了另一个挑战。我们能从任何可用的社交网络的共享图片中发现社交方法中的某些东西吗?。我们能做这个探索社交流的操作吗?

让我们假设我们不分析这种情况的真实背景,我们只关注共享出版物的图像。同样,这一方案将有助于启动对所提议的社会环境的分析。让我们使用脸书作为我们的示例实现。

操作总图:

要执行的操作:

  1. 社交用户连接。
  2. 阅读/扫描每份出版物。
  3. 图像的提取。
  4. 图像分析(使用 Tensorflow 对象检测 API)
  5. 对检测到的标签进行分组。

让我们看一下提议的实现。分析我自己的个人资料(40 篇文章)。

按照建议的操作注销:

在带有发布时间线的列上建模的信息:

:我把水果、食物、汽车、人、零食这些概念进行了归类。从与每个帖子相关的图片中共享的内容行。

我们将使用日期为 06/19/2016 的出版物通过案例验证我们的信息。在这本书中,我们享受了一顿午后家庭小吃…

社会出版:

视觉图像分析:

检测到的概念及其信任值的数组:[{u'cup': 99}、{u'cup': 99}、{u'person': 86}、{u'person': 77}、{u'wine glass': 76}、{u'dining table': 69}、{u'chair': 56}、{ u ' potential plant ':53 }]

结论:

在这一领域有许多需要改进的地方,包括接收信息的上下文、个人/共享出版物中的过滤器、按更具代表性的元素分组以及更多的变化。但是,解决我们的挑战是一个很好的建议,我们有一个社会分析的概述(在这种情况下,脸书,但我们可以根据所需的社会信息量合并其他网络)

实施:

该例程接收要检查的用户 id、帖子数量和使用图形 API(脸书)的令牌。 这里的 实现了。

使用的技术:

  • Tensorflow 1.2.1(对象检测 api)
  • COCO 模式,更快 _ rcnn _ inception _ resnet _ v2 _ atrous _ COCO _ 11 _ 06 _ 2017
  • 脸书 sdk

最后一个问题仍然悬而未决……了解人们的社会信息,我们能改善个人会议的环境和同理心吗?我们能利用社交图片做到这一点吗?

Tensorflow 对象检测 API —心电图分析

原文:https://towardsdatascience.com/tensorflow-object-detection-api-ecg-analysis-8f456d563dfa?source=collection_archive---------6-----------------------

由于对象检测 API 是由 Tensorflow 团队发布的,因此训练一个具有相当高级架构的神经网络只需遵循几个简单的教程步骤。

但它毕竟是一种设计用来检测矩形框上带有颜色信息的对象的架构。我们究竟如何用它来分析 ECG 信号,这是一项与目标检测问题尽可能不同的任务?一种方法是将架构重新设计成某种序列到序列的观察器,它滑过信号,提取有趣的信息,关注,记住过去,预测未来,并充分探索机器学习彻底改变医疗过程的巨大可能性。

但由于这听起来真的很难,我会用 QRS 节拍将这些信号分割成小片段,并将其绘制到 2D 图像上。为了减少训练过程对网络的压力,我们将用一个漂亮的、平静的、7 像素宽的蓝绿色画笔在一个矩形画布上绘制它们,并使用低水平的红绿蓝噪声。

It’s not really turquoise.

这种方法可以自动生成一整套带有心电图搏动的图片数据集。事实证明,这些搏动有多种类型,如室性早搏或*房性早搏。*这些信号是通过连接到人体不同部位的电极获得的,事实证明,来自胸部的信号看起来与来自腿部的信号非常不同(心脏执行相同的动作)。对于不太著名的麻省理工学院-BIH 心律失常数据集,这种双重区分产生了 21 个类别,超过 700 次出现。你可以 在这里 购买一台免费的笔记本,在你自己的机器上完成所有那些花哨的处理。

因此,随着令人印象深刻的数据重组,我们现在有了一个定义良好的对象检测问题,有大量的标记数据。为了提出一个解决方案,我们将遵循来自官方 Tensorflow 资源库的牛津-IIIT 宠物 教程,该教程展示了如何通过重新训练的模型来识别不同品种的猫和狗。

Definitely a cat.

我们所需要做的就是调整脚本,该脚本将充满图像的目录转换成一对 tensorflow 记录,这是一种特殊的格式,可用于将数据输入预训练的模型。我们将使用 ssd_inception_v2_coco ,因为它拥有迄今为止最好的名字。

再多几个步骤,我们就可以从命令行消息开始监控进度了:

Make sure someone notices you intensively staring into those numbers popping up on your screen. You deserve to be recognized as a bona fide machine learning hacker.

如果你像我一样生活在第二世界国家,那里的计算能力和民主并不丰富,你可能需要在 2014 年的 4 个 CPU 内核的台式机上运行这个程序。几十个小时后,您可以运行评估脚本,并查看 Tensorboard 图像部分。

Normal beat on the V1 lead.

希望现在很明显我不是一个真正的医生(因为没有一个有博士学位的人是),现在仔细检查评估程序似乎太费力了,所以我真的不能从心脏病学的角度判断这些类别预测是否正确。因此,我直言不讳地提出另外两种节拍,它们似乎被归类为具有相当高的可信度。

Left: Normal beat on a V5 lead (allegedly). Right: Bundle branch block beat on a V4 lead (maybe).

所有用于生成这些突破性结果的代码都在这里。一旦训练程序完成加热我的电脑两千个纪元,我将添加一个更合适的分数评估。

TensorFlow 对象检测正在运行

原文:https://towardsdatascience.com/tensorflow-object-detection-in-action-4aca394d51b1?source=collection_archive---------3-----------------------

本周,我和我的开发者伙伴兼全能达人 Sara Robinson 坐在一起,谈论她开发的应用程序,该应用程序与 T2 的 TensorFlow 对象检测 API T3 一起使用。

我们讨论了的博客文章GitHub 项目,她在该项目中编写了一个 iOS 应用程序,可以检测照片中的泰勒·斯威夫特。更值得注意的是,她开源了代码,所以你可以自己制作泰勒斯威夫特探测器!当然,你可以用你想检测的任何东西来训练这个模型。TensorFlow 团队最近更新了模型,不仅绘制了一个边界框,还填充了图像中发生检测的特定区域,绝对神奇!

请查看上面的完整采访视频,我们一步一步、一点一点地分解了 Sara 完成这个项目的过程。一定要坚持到最后的大失误:)

感谢阅读本集云 AI 奇遇。如果你喜欢这个系列,请为这篇文章鼓掌让我知道。如果你想要更多的机器学习动作,一定要关注 Medium 上的me或订阅 YouTube 频道来观看未来的剧集。更多剧集即将推出!

视频中的 TensorFlow 对象检测,避免披萨、甜甜圈和蛋糕

原文:https://towardsdatascience.com/tensorflow-object-detection-in-videos-avoiding-pizza-donuts-and-cakes-7d188fcb1d2b?source=collection_archive---------2-----------------------

在之前的一篇文章中,我分享了一个挑战,我们分析了一个社交场景的图像,一次和朋友的晚餐。现在让我们来应对一个更大的挑战,让我们来分析视频。在这个挑战中,我们将只尝试检测视频中的违禁物品(披萨、甜甜圈、蛋糕)。让我们用一个简单的方法。

  1. 我们将阅读视频,并按帧将它们分开(作为图像处理)
  2. 我们将使用基于 Tensorflow 对象检测 API[版本 1.2.1]的对象检测例程来分析每张图像。
  3. 我们可以重新组合视频来可视化结果。[我们必须知道这是一个耗费资源的过程]
  4. 由于我们不想直观地看到结果,我将提出一些建议。由于我们只需要以高概率识别一个对象,因此我们将设置规则,以便在视频中检测到这些标签时生成警报。

检测和警报程序包括:当我们发现一个被禁止的对象标签的概率很高时,我们将发出警报并关闭分析(在许多情况下使分析更快)。

对于视频的操作,我们将使用 OpenCv ,如果我们想对视频执行其他操作,我们也可以使用 moviepy 。[Python 环境]

让我们只关注寻找概率大于 50% 60% 90%的标签[示例],如果我们发现这种情况,为了简化挑战,我们将关闭检测例程。

让我们看看提出的 3 种情况:

油炸圈饼盒

*让我们详细说明第一种情况

视频摘录与视觉检测相结合:

常规检测和警报动画:

*此建议方案分析视频,它也可以采用流式传输,并逐帧执行分析。

披萨盒

视频摘录与视觉检测相结合:

蛋糕盒

视频摘录与视觉检测相结合:

现在,如果你的伴侣禁止你摄入这些食物,你将不得不更加小心,或者至少避免有它的视频。这里是完整的例程

从零开始使用 Docker 进行 TensorFlow 对象检测

原文:https://towardsdatascience.com/tensorflow-object-detection-with-docker-from-scratch-5e015b639b0b?source=collection_archive---------1-----------------------

在这篇文章中,我想告诉你如何用 TensorFlow 创建 docker 图像,并运行 对象检测示例

为什么是 Docker?

Docker 提供了一种在容器中运行安全隔离的应用程序的方法,该容器打包了所有的依赖项和库。安装很容易。我有一篇关于 Docker 的有趣文章: 使用 Docker 做正确的事情。

什么是张量流?

这是一个机器智能的开源软件库。

关于张量流

TensorFlow 是一个使用数据流图进行数值计算的开源软件库。图中的节点表示数学运算,而图边表示它们之间通信的多维数据数组(张量)。灵活的架构允许您使用单个 API 将计算部署到台式机、服务器或移动设备中的一个或多个 CPU 或 GPU。TensorFlow 最初是由谷歌机器智能研究组织内谷歌大脑团队的研究人员和工程师开发的,目的是进行机器学习和深度神经网络研究,但该系统足够通用,也适用于各种其他领域。

首先,我们需要创建目录和 Dockerfile 来构建我们的映像:

mkdir tensorflow
cd tensorflowtouch Dockerfile

我们将使用 ubuntu 镜像作为基础,因此我们应该从 Ubuntu 官方库扩展我们的新镜像。并在以下时间后更新软件包:

**FROM** "ubuntu:bionic"**RUN** apt-get update && yes | apt-get upgrade

然后我们需要创建工作目录:

**RUN** mkdir -p /tensorflow/models

并用 pip 安装git

**RUN** apt-get install -y git python-pip
**RUN** pip install --upgrade pip

目前就这些。由于我们要运行 对象检测示例 我们需要安装所有的依赖项。所有步骤你可以在 安装页面 上找到。

Tensorflow 对象检测 API 依赖于以下库:

  • Protobuf 2.6
  • 枕头 1.0
  • lxml
  • tf Slim(包含在“tensorflow/models/research/”结帐中)
  • Jupyter 笔记本
  • Matplotlib
  • 张量流

有关安装 Tensorflow 的详细步骤,请遵循 Tensorflow 安装说明。我们将使用命令安装 Tensorflow:

**RUN** pip install tensorflow

其余的库可以通过 apt-get 安装在 Ubuntu 上:

**RUN** apt-get install protobuf-compiler python-pil python-lxml
**RUN** pip install jupyter
**RUN** pip install matplotlib

接下来,我们需要将示例代码复制到我们的映像中:

**RUN** git clone [https://github.com/tensorflow/models.git](https://github.com/tensorflow/models.git) **/tensorflow/models**

让我们制作/tensorflow/models/research 我们的工作目录:

**WORKDIR** /tensorflow/models/research

Tensorflow 对象检测 API 使用 Protobufs 来配置模型和训练参数。在使用框架之前,必须编译 Protobuf 库。这应该通过运行以下命令来完成:

**RUN** protoc object_detection/protos/*.proto --python_out=.

在本地运行时,应该将/tensorflow/models/research/和 slim 目录附加到 PYTHONPATH 中。这可以通过运行以下命令来完成:

**RUN** export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

接下来我们需要配置 jupyter 笔记本:

**RUN** jupyter notebook --generate-config --allow-root
**RUN** echo "c.NotebookApp.password = u'sha1:6a3f528eec40:6e896b6e4828f525a6e20e5411cd1c8075d68619'" >> /root/.jupyter/jupyter_notebook_config.py

最后一行是为 web 界面设置 root 密码。

为了处理来自主机的请求,我们需要公开端口:

**EXPOSE** 8888

并运行主流程:

**CMD** ["jupyter", "notebook", "--allow-root", "--notebook-dir=/tensorflow/models/research/object_detection", "--ip=0.0.0.0", "--port=8888", "--no-browser"]

所以完整的 Dockerfile 文件:

**FROM** "ubuntu:bionic"**RUN** apt-get update && yes | apt-get upgrade**RUN** mkdir -p /tensorflow/models**RUN** apt-get install -y git python-pip
**RUN** pip install --upgrade pip**RUN** pip install tensorflow**RUN** apt-get install -y protobuf-compiler python-pil python-lxml**RUN** pip install jupyter
**RUN** pip install matplotlib**RUN** git clone [https://github.com/tensorflow/models.git](https://github.com/tensorflow/models.git) /tensorflow/models**WORKDIR** /tensorflow/models/research**RUN** protoc object_detection/protos/*.proto --python_out=.**RUN** export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim**RUN** jupyter notebook --generate-config --allow-root
**RUN** echo "c.NotebookApp.password = u'sha1:6a3f528eec40:6e896b6e4828f525a6e20e5411cd1c8075d68619'" >> /root/.jupyter/jupyter_notebook_config.py**EXPOSE** 8888**CMD** ["jupyter", "notebook", "--allow-root", "--notebook-dir=/tensorflow/models/research/object_detection", "--ip=0.0.0.0", "--port=8888", "--no-browser"]

要构建我们的形象营销:

docker build -t tensorflow .

你会看到这个过程:

要从映像运行容器,请使用命令:

docker run --name tensorflow -p 8888:8888 -d tensorflow

并打开 http://localhost:8888/ :

我们的密码是 root :

打开object _ detection _ tutorial . ipynb:

这是 Tensorflow 对象检测示例,我们的目标。

在运行之前,你需要做一个小的更新。将 TensorFlow 的版本从 1.4.0 更改为 1.4.1(目前为最新版本):

点击顶部菜单单元格->-运行全部即可运行:

之后你会发现我们的工作成果:

要停止它运行:

docker rm -f tensorflow

仅此而已。我们刚刚用 Google TensorFlow 创建了 docker 图像,并基于该图像运行了容器。多亏了 jupyter notebook,我们可以在浏览器中测试我们的例子。在下一篇文章中,我将展示如何使用不同的模型。

参考

手机上的 tensor flow:tensor flow Lite

原文:https://towardsdatascience.com/tensorflow-on-mobile-tensorflow-lite-a5303eef77eb?source=collection_archive---------6-----------------------

我们得到了什么?

TensorFlow Lite 是一款轻量级产品,是 TensorFlow Mobile 的下一步。你可以在 TensorFlow mobile 上做几乎所有的事情,但速度要快得多。

就像 TensorFlow Mobile 一样,它主要专注于移动和嵌入式设备开发人员,以便他们可以在 Android、iOS、Raspberry PI 等系统上开发下一级应用程序。

怎么更快?🚀

它支持一组核心操作符,包括量化操作符和浮点操作符,这些操作符已经针对移动平台进行了调整。

核心操作包括预融合激活和偏置,以进一步提高性能和量化精度。

TensorFlow Lite 支持在模型中使用自定义操作

它是如何工作的?

让我们看看这个架构,了解它是如何工作的。

它从我们从训练数据生成的简单训练模型开始,然后执行测试。它将模型转换成 。tflite 模型文件格式,基于 FlatBuffer ,类似于协议缓冲区,但没那么多。Floatbuffer 的 codeprint 要小很多。

然后,根据操作系统,你想使用移动优化的解释器😎这使得应用程序更小更快。

解释器通过使用静态图排序和自定义内存分配器来确保最小负载、初始化和执行延迟

Android 上的特殊:它提供了 Android 神经网络 API 库,用于设备之间更好的接口,以利用硬件加速

我们得到了什么?

  1. 安卓神经网络 API 和 C++ API
  2. 新模型文件格式**。tflite👏**

3.速度:新的神经网络 API 使得计算速度更快。🏃

4.隐私:数据不会离开设备。🔐

5.可用性:离线工作。✈️

6.没有计算成本:所有的计算都在你的设备上进行。因此,不需要服务器。💵

7.**预测试模型:**所有模型开箱即用。📦

《盗梦空间》第三版

  1. 移动网络

b)适用于所有第一和第三方应用程序😎Android Wear 上的智能回复

权衡取舍😐

  1. 系统利用率:评估神经网络涉及大量计算,这可能会增加电池电量的使用。你应该考虑监控电池🔋健康,如果这是你的应用程序所关心的,特别是对于长时间运行的计算。
  2. 应用尺寸:注意你的模型尺寸。模型可能会占用数兆字节的空间。如果在 APK 中捆绑大型模型会过度影响用户,您可能需要考虑在应用程序安装后下载模型、使用较小的模型或在云中运行计算。NNAPI 不提供在云中运行模型的功能。☁️

️I 试图让这篇文章尽可能准确易懂。有任何意见、建议或者有任何问题,请在评论中写下。

有关如何在移动应用程序中使用 TensorFlow 的更多教程请关注我的Medium脸书TwitterLinkedInGoogle+Quora查看类似帖子。

鼓掌吧!分享一下!跟我来。

乐意帮忙。荣誉……..

你会喜欢的以前的故事:

  1. 手机上的 TensorFlow:教程(Android 和 iOS 上)

2.历元对批量对迭代

  1. TensorFlow 图像识别 Python API 教程 CPU 上

4.激活功能解释:神经网络

5.CPU 上带有自定义图像的列车启动

手机上的 TensorFlow:教程

原文:https://towardsdatascience.com/tensorflow-on-mobile-tutorial-1-744703297267?source=collection_archive---------3-----------------------

在安卓和 iOS 上

TensorFlow 通常用于从大量数据中训练巨大的模型,但没有人能忽视智能手机的新兴市场以及让我们的未来“人工智能”的需要。而那些对未来迫不及待、热爱机器学习的人,正在通过制造工具来推动边界,这些工具瞄准了数万亿美元的市场。

Source

你是这个数万亿美元市场的一部分,因为你现在可能正在你的 Android 或 iOS 上阅读这篇文章,或者你的口袋里有一个,无论是哪种情况,你都知道移动设备上面向未来的机器学习是多么重要…

我将写 2 个不同的教程,关于如何在你的 Android 和 iOS 设备上运行你的机器学习模型。

这是第一个教程。

本教程使用了更稳定的 tensorflow 版本,即 TensorFlow Mobile,因此请按照步骤来实现您的模型,并使它们针对移动设备进行优化。

我们将通过重新训练 Inception-v3 模型的最后(瓶颈)层来制作一个图像分类器,然后为您的智能设备优化该模型。

本教程仅包含 5-6 个步骤:

第一步:用 TensorFlow 创建你的模型

我很确定你已经知道这一步,因为你正在学习在智能手机上运行相同的模型。

另外,为了使本教程严格集中在智能手机的*实现模型上,*我推荐这个快速教程🔹利用 CPU 上的自定义图像进行列车启动🔹这样我们就能达成一致了📄你可以用一个新训练的模型在一个新的目录中开始这些东西。

仅供参考: 数据📗模型被训练的地方包含郁金香的种类🌷*、雏菊、向日葵🌻、蒲公英和玫瑰*🌹

在这之后,你应该有这两个文件:

tf_files/retrained_graph.pb 

其中包含所选网络的一个版本,以及根据您的类别重新训练的最终层。

 tf_files/retrained_labels.txt

这是一个文本文件📝包含标签。

步骤 2:创建一个优化的模型😎

运行以下命令提示符(保持路径正确)

python -m tensorflow.python.tools.optimize_for_inference \
  --input=tf_files/retrained_graph.pb \
  --output=tf_files/optimized_graph.pb \
  --input_names="input" \
  --output_names="final_result"

它将创建一个新的优化模型文件tf_files/optimized_graph.pb

**注意:**如果出现错误KeyError: “The following input nodes were not found: {‘input’}\n” ,则将“输入”改为“Mul”。

取舍😇

为了减少应用的预处理,同时减少库的大小,tensorflow 只支持推理过程中常用的操作子集。不支持的操作有tensor flow/contrib/makefile/TF _ op _ files . txt

现在,为了确保我们刚刚创建的任何图形文件都包括支持的操作,如下所示…

验证✔️

确保新的优化图正在运行,并且 optimize_for_inference 文件删除了一组给定输入和输出不需要的所有节点,并且没有改变网络的输出。

使用图形retained _ graph . Pboptimized_graph.pb 上的 label_file 比较同一图像的输出

retained _ graph . Pb

python -m scripts.label_image \
  --graph=tf_files/retrained_graph.pb \
  --image=tf_files/flower_photos/daisy/3475870145_685a19116d.jpg

optimized_graph.pb

python -m scripts/label_image \
    --graph=tf_files/optimized_graph.pb \
    --image=tf_files/flower_photos/daisy/3475870145_685a19116d.jpg

逐一运行这些命令,如果两个输出相同,这意味着 optimized_graph.pb 已完美创建🎉

第三步:量化模型,然后压缩

问题仍然是模型的尺寸仍然很大,肯定不适合手机。因为,图中所占的大部分空间是由权重占据的,权重是大块的浮点数。每个权重的浮点值略有不同,规律性很小。

但是压缩通过利用数据中的规律性来工作,这解释了这里的失败。

通过对网络的权重进行量化,量化有助于通过因子来减小神经网络的大小。这在图形中给出了更多的重复,并且对之后的压缩有很大的帮助。

现在使用 quantize_graph 脚本将更改应用到图形:

python -m scripts.quantize_graph \
  --input=tf_files/optimized_graph.pb \
  --output=tf_files/rounded_graph.pb \
  --output_node_names=final_result \
  --mode=weights_rounded

现在压缩模型:

gzip -c tf_files/rounded_graph.pb > tf_files/rounded_graph.pb.gz

gzip -l tf_files/rounded_graph.pb.gz

这将创建一个 rounded_graph.pb 文件。

您应该会看到压缩方面的一些显著改进。

**注意:**如果您在运行 quantize_graph 时遇到任何错误,请下载该文件并将其粘贴到 tensorflow 库(安装 TensorFlow 的位置)中的tools/quantization/quantize _ graph . py中。

从这里开始,教程分为两个部分 Android 和 iOS。

🍎ios📱

第四步:添加 tensor flow-实验舱

将 TensorFlow-experimental pod 添加到您的 pod 文件中,这将安装一个通用二进制框架。这是在 iOS 上运行 tensorflow 最简单的方法。

步骤 5:创建你的应用程序

🔹创建您自己的应用程序或在 XCode 中载入您已经创建的应用程序。

🔹在项目根目录下添加一个名为 Podfile 的文件,内容如下:

target 'YourProjectName'
pod 'TensorFlow-experimental'

🔹运行pod install下载&安装TensorFlow-experimental pod。

🔹打开YourProjectName.xcworkspace,添加你的代码。

🔹在你的应用的构建设置中,确保将$(inherited)添加到其他链接器标志头搜索路径部分。

步骤 6:运行样品

您需要 Xcode 7.3 或更高版本来运行我们的 iOS 示例。

简单、基准和相机中有三个例子。可以克隆代码

此外,从 tensorflow 的根目录下载 Inception v1 ,并使用以下步骤将标签和图形文件提取到简单示例和相机示例中的数据文件夹中:

mkdir -p ~/graphs
curl -o ~/graphs/inception5h.zip \
 https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip \
 && unzip ~/graphs/inception5h.zip -d ~/graphs/inception5h
cp ~/graphs/inception5h/* tensorflow/examples/ios/benchmark/data/
cp ~/graphs/inception5h/* tensorflow/examples/ios/camera/data/
cp ~/graphs/inception5h/* tensorflow/examples/ios/simple/data/

切换到其中一个示例目录,下载tensor flow-experimentalpod,并打开 Xcode 工作区。请注意,安装 pod 可能需要很长时间,因为它很大(约 450MB)。如果您想运行这个简单的示例,那么:

cd tensorflow/examples/ios/simple
pod install
open tf_simple_example.xcworkspace #note .xcworkspace,not .xcodeproj 

在 XCode 模拟器中运行简单的应用程序。您应该会看到一个带有运行模式按钮的单屏幕应用程序。点击它,你会看到一个格蕾丝·赫柏的图像。一旦你建立并运行它,你应该得到一个实时的摄像机视图,你可以指向物体以获得实时的识别结果。

**注意:**我很确定我犯了一些错误或者在 iOS 部分留下了一些东西。请浏览下面的官方链接,如果你有任何错误,请在下面评论,社区会帮助你。

现在,你可以跳过这篇文章的 Android 部分。

https://github . com/tensor flow/tensor flow/tree/master/tensor flow/examples/IOs # building-the-tensor flow-IOs-libraries-from-source

[## 在 iOS | TensorFlow 上构建 TensorFlow

TensorFlow-experimental pod 目前大约为 450MB。它如此之大的原因是因为我们捆绑了多个…

www.tensorflow.org](https://www.tensorflow.org/mobile/ios_build)

🍭 🍦机器人🍞🐝 🍩

步骤 4:安装 Android Studio 并测试运行

有两种方法可以做到这一点:Android Studio 和 Bazel。我将使用 AS,因为更多的人熟悉它。

如果您还没有安装它,请到这里安装它

[## 下载 Android Studio 和 SDK 工具| Android Studio

下载官方 Android IDE 和开发工具,为 Android 手机、平板电脑、可穿戴设备、电视和…构建应用

developer.android.com](https://developer.android.com/studio/index.html)

试运转🏃

为了检查 Android Studio 中的一切是否正常,让我们进行一次测试。

🔸打开 Android Studio,选择“📁打开一个现有的 Android Studio 项目”。

🔸进入tensor flow-for-poets-2/Android/TF mobile目录。

🔸打开 Build.gradle 文件,同步 Gradle。如果一切正常,点击构建>构建 APK 按钮。

**注意:**如果你和我一样是 Android Studio 的新手,并且有一些问题,请在下面评论。

现在应该有一个文件夹,里面有 app.apk 文件,复制到手机里安装。另外,记住打开手机中的开发者模式

第五步:运行定制的应用程序👏 👏 👏

如果到现在为止一切正常,从现在开始就是小菜一碟。

默认应用程序是一个分类图像应用程序,有来自 Imagenet 的 1000 个类别。

现在,要运行我们定制的应用程序,请执行以下两个步骤:

将模型文件添加到项目中

现在,演示应用程序正在查看出现在Android/TF mobile/assets中的 graph.pb 文件和 label.txt 文件,而不是您的 rounded_graph.pbretained _ labels . txt

现在,用下面的命令替换这些文件,或者也可以手动替换。

cp tf_files/rounded_graph.pb android/tfmobile/assets/graph.pb
cp tf_files/retrained_labels.txt android/tfmobile/assets/labels.txt

更改ClassifierActivity.java file中的output_name"

我们模型的输出节点有一个不同的名字:"final_result"。打开ClassifierActivity.java,更新OUTPUT_NAME变量,如下所示:

private static final String INPUT_NAME = "input";
private static final String OUTPUT_NAME = "final_result";

👏 👏 👏再次运行,事情应该工作了。👏 👏 👏

**注意:**如果你出现任何错误或者打中了下面任何一个墙评论。

️I 试图让这篇文章尽可能准确易懂。有任何意见、建议或疑问,请写在评论里。

有关如何在移动应用程序中使用tensor flow的更多教程,请关注我的 中的脸书TwitterLinkedInGoogle+Quora 以查看类似的帖子。

鼓掌吧!分享一下!跟我来。

乐意帮忙。荣誉……..

你会喜欢的以前的故事:

  1. 手机上的 tensor flow:tensor flow Lite

2.纪元 vs 批量 vs 迭代

  1. TensorFlow 图像识别 Python API 教程 CPU 上

4.激活函数解释:神经网络

[## 如何使用 Python 发送电子邮件

使用 Flask 设计专业邮件!

medium.com](https://medium.com/@sagarsharma4244/how-to-send-emails-using-python-4293dacc57d9)

使用应用程序引擎的 TensorFlow 照片 x 射线对象检测

原文:https://towardsdatascience.com/tensorflow-photo-x-ray-object-detection-with-app-engine-7de9dd8f63f5?source=collection_archive---------5-----------------------

在以前的文章中,我们使用 TensorFlow 对象检测 API 应用不同类型的模型来分析图像中的对象。(第一条第二条)

在这些例子中,解决方案总是为一个控制台应用程序设计的(即一个本地运行的 Python 脚本)。

现在我们的挑战是把它带到一个网络环境检测照片中的物体(比如 x 光),最后我们应该提出一个简单的架构选项。

概观

我们可以考虑使用服务器模式的几种架构选项(来自官方文档 TensorFlow Serving 的示例)。我们甚至可以考虑传统的替代方案(如 Apache、Nginx 等)。)但是我们应该考虑安装 Web 服务器,并使用 TensorFlow 调整所有元素来执行分析。

我喜欢使用像 App Engine 这样的平台 方案的想法,但是实现我们的想法对于像 App Engine 这样的传统环境来说是一个挑战(我们可以考虑使用 PubSub 和 VMs workers 的解决方案,但是会考虑到更多的复杂性),所以…为了解决我们的挑战,我将使用 App Engine 灵活环境

拟议解决方案

提议的架构

App Engine 灵活环境项目

  • app.yaml
  • main.py
  • 模板/索引. html

关于 App Engine 灵活环境的更多详情

照片的评估程序:

  • 主要依赖关系Flask(0 . 12 . 2)tensor flow(1 . 2 . 1)除了这些支持元素,numpy,Image,cStringIO,urllib。

要使用这个示例,您需要 TensorFlow 对象检测 API 的这些基本元素:

  • 模型[文件夹]
  • 原型[文件夹]
  • 实用程序[文件夹]

:如果你需要下载测试功能文件,这里我准备了一个工作版本。

此外,我们需要在我们的解决方案中有模型的冻结 _ 推理 _ 图形。对于我们的例子:

  • SSD _ mobilenet _ v1 _ coco _ 11 _ 06 _ 2017(如果您需要更多条件,可以更改此型号)

注意:如果你需要下载测试功能文件,这里我准备了一个工作版本。

对于我们的例子,我们使用 COCO 作为对象识别方案,因此我们需要识别标签来进行分析。

  • data/mscoco_label_map.pbtxt

注意:如果你需要下载测试功能文件,这里我准备了一个工作版本。

在这里,我将从这个 Github 库中实现解决方案(初始阶段)。

部署项目

  • 本地 : python main.py
  • 生产环境 : gcloud app 部署

*(-v 版本)如果要将其部署到特定版本。

注意:你要有 Google Cloud SDK 。更多关于 App Engine 灵活环境的信息,Python 在此。

TensorFlow &反光胶带🏀(我篮球打得不好吗?)

原文:https://towardsdatascience.com/tensorflow-reflective-tape-why-im-bad-at-basketball-a30a923332de?source=collection_archive---------13-----------------------

最近一个朋友让我迷上了篮球。事实证明,这比看起来难多了。没关系,我可以用机器学习来设计解决方案。如果你对 ML 和投篮感兴趣,那么也有这篇文章在模拟中结合了张量流和篮球。

nothing but net… if there was a net

任务是找到我拍摄的准确角度。然后,我就可以积极主动地利用这些信息,变得更好。

嘶!这一切的代码都在我的 Github

任务 1:收集数据

I didn’t need to follow the seems of the ball, but it looks cool

我没有配备 200 个摄像头的 3D 追踪工作室,但我有 Ebay。网上买反光带贴在球上还是挺容易的。然后(由于我当地的球场缺乏照明),我可以录下一些我晚上练习的镜头,并捕捉球的运动。

我手机内置的手电筒提供了完美的光源来反射球的反光。

因此,捕捉到的镜头显示了一个闪闪发光的物体飞过一个几乎黑暗的场景,非常适合在 python 中进行一些图像处理。

任务 2:将我们的视频导入 python

首先,我用 Python 做所有事情,将视频导入 Python 的一个非常简单的方法是使用一个名为' scikit-video '的库,所以我安装了:

pip install scikit-video

然后用它来加载我的视频作为一个矩阵:

from skvideo.io import vreadvideo_data = vread('VID_20180930_193148_2.mp4')

这个数据的形状(可以通过运行 video_data.shape 找到)是(220,1080,1920,3)。这意味着 3 个颜色通道(红、绿、蓝)的 1080×1920 像素的 220 帧:

raw video data

任务 3:提取镜头(图像处理)

所以我想得到球运动的数据。幸运的是,这是视频中唯一会动的东西之一。所以我可以做我最喜欢的视频处理技巧:增量帧提取!(我就是这么叫的,不过可能还有另外一个名字)。

通过从下一帧中的所有像素值中减去一帧中的所有像素值,您将只在已经改变的像素中得到非零值。

calculating delta frame in order to isolate moving pixels

酷酷酷,现在我对视频中的每一帧都这样做,并将结果合并成一幅图像:

adding together all of the delta frames from the video sequence

接下来是将拍摄数据提取成可用的格式。所以我们将把精简后的像素值转换成一个由***【x】*y 点组成的列表。完成这项工作的代码是一个名为 numpy.where 的 numpy 函数,它将在一个数组中找到所有为真**的值,并返回它们的索引(即它们在矩阵中的位置)。

但在此之前,我们将快速裁剪出球的轨迹并翻转数据,使其从原点(场景的左下方)开始:

由此产生的图像:

注意到它看起来还是上下颠倒了吗?这只是因为图像倾向于从左上角的开始绘制(注意轴编号)。当我们将像素转换为数据点并将它们绘制在普通图上时,它们将从底部的左下角开始绘制。****

现在我们运行我们的 numpy.where 代码来获取像素作为数据点:

pixels_that_are_not_black = cropped_trail.sum(axis=2) > 0y_data, x_data = numpy.where(pixels_that_are_not_black)

awesome! our relatively clean ball trajectory data

任务 4:构建张量流模型

这就是 TensorFlow 大放异彩的地方。你可能习惯于听说使用 TensorFlow 来构建神经网络,但你可以定义几乎任何数学公式,并告诉它优化你想要的任何部分。在我们的例子中,我们将使用从小学就知道的轨迹公式:

extremely mathematical equation of trajectory that I found online

θ (theta)是拍摄的角度(我们真正关心的值)

v 是初速度

g 是重力(9.8m/s)

x 是水平位置(数据我们已经)

y 是垂直位置(数据我们已经)

一个更有趣的方式来看这个方程的作用是用这个轨迹工具来玩。

我们可以使用我击球的球轨迹作为 xy**方程和任务张量流,找到适合我击球的正确角度( θ )和初始速度( v )

我们将开始在张量流中重建我们的轨迹方程:

首先告诉它,当我们运行优化时,我们将输入什么数据:

*x = tf.placeholder(tf.float32, [**None**, 1])
y = tf.placeholder(tf.float32, [**None**, 1])*

接下来,告诉它我们希望它调整哪些变量,以使轨迹曲线符合我们的数据:

*angle_variable = tf.Variable(40.0, name='angle_variable')
force_variable = tf.Variable(100.0, name='force_variable')

gravity_constant = tf.constant(9.8, name='gravity_constant')*

并将所有这些结合在一起(警告:这看起来会很乱,但这只是之前看到的用 TensorFlow 语法编写的数学方程):

*left_hand_side = x * tf.tan(deg2rad(angle_variable))
top = gravity_constant * x ** 2
bottom = (2*(force_variable)**2) * 
            (tf.cos(deg2rad(angle_variable))**2)output = left_hand_side - (top / bottom)*

然后告诉 TensorFlow 如何判断它在将轨迹函数拟合到我们的数据时是否做得很好:

*# the lower this score, the better
error_score = tf.losses.mean_squared_error(y, output)*

创建一个优化器,对变量(angle_variable 和 force_variable)进行实际调整,以降低 error_score:

*optimiser = tf.train.AdamOptimizer(learning_rate=5) 
optimiser_op = optimiser.minimize(error_score)*

任务 5:魔法

我们现在可以运行优化任务来找到适合我的镜头的角度变量力变量值。

*sess = tf.Session()
sess.run(tf.global_variables_initializer())# do 150 steps of optimisation
for i in range(150): sess.run([optimiser_op], 
             feed_dict={x: np.array(x_data).reshape(-1, 1), 
                        y: np.array(y_data).reshape(-1, 1)})found_angle = sess.run(angle_constant.value())print(found_angle)*

TensorFlow finding the angle of my shot

在优化的最后,我们发现最符合我的拍摄数据的轨迹函数的角度约为 61 度…不知道如何处理这些信息…我想我可以看看专业拍摄角度是什么,以便进行比较…待续。

要吸取的教训:你总是可以用完全不必要(但有趣)的机器学习来分散注意力。

我使用的所有代码都可以在我的 Github 上找到:

* [## ZackAkil/优化-篮球

用张量流和图像处理分析我的篮球技术。-ZackAkil/优化-篮球

github.com](https://github.com/ZackAkil/optimising-basketball)*

Tensorflow RMSD:使用 Tensorflow 做非设计用途的事情

原文:https://towardsdatascience.com/tensorflow-rmsd-using-tensorflow-for-things-it-was-not-designed-to-do-ada4c9aa0ea2?source=collection_archive---------3-----------------------

职务由 马修·哈里根 。在GitHub上查看代码并报告问题。

深度学习彻底改变了图像和语音处理,让你可以把边缘变成猫。在我们的实验室里,我们将这些技术应用于小分子药物研发。

深度学习革命的一个副产品是产生了几个高质量的开源机器学习框架,可以计算任意操作的梯度。谷歌的 Tensorflow 可能是最知名的。我的研究专注于理解蛋白质和其他生物分子的大型分子动力学模拟的结果。你可以很容易地把预测小分子结合能想象成一个学习问题;除了艺术蛋白质图像之外,我们能否利用一些深度学习的进展来研究分子动力学?

生物物理学中的一个常见操作是用 RMSD 距离度量计算两种蛋白质姿态(构象)的相似性。这种度量因其平移和旋转不变性而受人喜爱。粗略地说,它覆盖了两个蛋白质结构,并报告了一个原子与其在另一个结构中的伙伴之间的平均距离。

RMSD 和旋转

满足平移对称性很容易:在进行比较之前,你只需将你的蛋白质集中在原点

*# traj = np.array(...) [shape (n_frames, n_atoms, 3)]*
traj -= np.mean(traj, axis=1, keepdims=True)

满足旋转对称更难。你需要找到每对构象之间的最佳旋转(最佳=最小化 RMSD)。早在 1976 年, Kabsch 发现可以对 3x3 (xyz)相关矩阵进行奇异值分解,从而找到最佳旋转矩阵。

*# x1 = np.array(...) [shape (n_atoms, 3)]*
correlation_matrix = np.dot(x1.T, x2)
V, S, W_tr = np.linalg.svd(correlation_matrix)
rotation = np.dot(V, W_tr)
x1_rot = np.dot(x1, rotation)

这并不理想,因为 SVD 可能会给你一个“旋转反转”,也就是 impropper 旋转,也就是旋转后再反转。我们必须明确检查并修复这种情况:

correlation_matrix = np.dot(x1.T, x2)
V, S, W_tr = np.linalg.svd(correlation_matrix)
is_reflection = (np.linalg.det(V) * np.linalg.det(W_tr)) < 0.0
**if** is_reflection:
    V[:, -1] = -V[:, -1]
rotation = np.dot(V, W_tr)
x1_rot = np.dot(x1, rotation)

四元数拯救世界

1987 年, Horn 发现可以从相关矩阵的元素组合中构建一个 4x4 的“关键”矩阵。他从四元数数学中推导出这个矩阵(虽然关键矩阵是正规矩阵)。该矩阵的主特征值可用于“旋转校正”原子坐标之间的朴素平方差。

correlation_matrix = np.dot(x1.T, x2)
F = key_matrix(correlation_matrix)
vals, vecs = np.linalg.eigh(F)
max_val = vals[-1] *# numpy sorts ascending*
sd = np.sum(traj1 ** 2 + traj2 ** 2) - 2 * max_val
msd = sd / n_atoms
rmsd = np.sqrt(msd)

至关重要的是,您不需要显式构建旋转矩阵来查找 RMSD 值。如果你想要旋转,你可以从关键矩阵的主特征向量中重建它。

张量流可以做到这一点

我们把这个问题公式化为向量运算和一个自伴特征值问题。这些操作都是在 Tensorflow 中实现的!

**def** key_matrix(r):
    *# @formatter:off*
    **return** [
        [r[0][0] + r[1][1] + r[2][2], r[1][2] - r[2][1], r[2][0] - r[0][2], r[0][1] - r[1][0]],
        [r[1][2] - r[2][1], r[0][0] - r[1][1] - r[2][2], r[0][1] + r[1][0], r[0][2] + r[2][0]],
        [r[2][0] - r[0][2], r[0][1] + r[1][0], -r[0][0] + r[1][1] - r[2][2], r[1][2] + r[2][1]],
        [r[0][1] - r[1][0], r[0][2] + r[2][0], r[1][2] + r[2][1], -r[0][0] - r[1][1] + r[2][2]],
    ] **def** squared_deviation(frame, target):
    R = tf.matmul(frame, target, transpose_a=True)
    R_parts = [tf.unstack(t) **for** t **in** tf.unstack(R)]
    F_parts = key_matrix(R_parts)
    F = tf.stack(F_parts, name='F')
    vals, vecs = tf.self_adjoint_eig(F, name='eig')
    lmax = tf.unstack(vals)[-1] *# tensorflow sorts ascending*
    sd = tf.reduce_sum(frame ** 2 + target ** 2) - 2 * lmax

好处是现在我们可以免费获得衍生品,所以我们可以做有趣的事情。作为一个玩具的例子,这表明找到一个“共识”结构,最小化平均 RMSD 分子动力学轨迹中的每一帧

这是用于执行优化的常规张量流代码。

target = tf.Variable(tf.truncated_normal((1, n_atoms, 3), stddev=0.3), name='target')
msd, rot = pairwise_msd(traj, target)
loss = tf.reduce_mean(msd, axis=0)optimizer = tf.train.AdamOptimizer(1e-3)
train = optimizer.minimize(loss)sess = tf.Session()
sess.run(tf.global_variables_initializer())
**for** step **in** range(2500):
    sess.run(train)

Tensorflow 实际上不能很好地做到这一点

对每个数据点进行特征分解变得很昂贵,特别是因为我希望能够在大的轨迹和相当数量的目标结构之间进行成对(R)MSD 计算。 MDTraj 能够极快地执行大量的 RMSD 运算。它使用更好的策略从上面寻找 4x4 密钥矩阵的主要特征值。2005 年的西奥博尔德·QCP方法明确写出了密钥矩阵的特征多项式。我们利用相同结构存在一个界限的事实((R)MSD = 0)来选择寻找主特征值的迭代牛顿法的起点。如果我们从这一点开始,我们保证特征多项式的第一个根将是最大的特征值。所以让我们用 Tensorflow 来编码吧!没那么快(字面上):你不能真的在 Tensorflow 中做迭代,如果你能,谁知道会有多高的性能。

自定义成对 MSD 运算

相反,我实现了一个自定义 tensor flow“op”。起初,我害怕构建和跟踪一个定制的 Tensorflow 安装。幸运的是,Tensorflow 将很乐意在运行时加载共享库来注册 op。更好的是,潘德集团的一位校友 Imran Haque 用 C 实现了一个我可以包装的快速(R)MSD 计算实现。

我实现了一个进行成对 MSD 计算的 Op,其中 double for loop 通过 OpenMP 实现了并行化。除了 Horn 方法的本机 tensorflow 实现的 10,000 倍加速之外,我们比 MDTraj 略快,尽管它使用了相同的实现。对于 MDTraj,轨迹上的循环是用 C 中的 OpenMP 来完成的,但是目标上的迭代必须用 Python 来完成,这带来了相关的开销。

我运行了一个基准测试,在 fs 肽轨迹之间执行成对 RMSD 计算。具体来说,介于 2800(步距= 100)帧和 28 个目标(步距= 100 * 100)之间。

实施……时间/毫秒 TF 原生操作………..22,843
MDTraj …………..….33.3
TF 自定义操作……..….0.9
TF 自定义操作(带旋转)..1.6

渐变呢?

我们最初想用 Tensorflow 的原因是用自动微分做有趣的事情。天下没有免费的午餐,Tensorflow 不会自动区分我们的定制 Op。艾尔。指出 MSD 的导数仅仅是叠加的一对结构中的坐标之差。我们可以编码这个。

第一个问题是,我们现在需要明确的旋转矩阵,这样我们就可以用它来计算梯度。请记住,西奥博尔德提出了一个聪明的方法来寻找领先的特征值,但这只能给我们 RMSD 值,而不是实际的旋转(这需要特征向量)。幸运的是,在 2010 年,他扩展了该方法,使用主特征值来快速找到主特征向量。

我修改了pairwise_msd op 以返回一个(n_frames,n_targets)成对 MSD 矩阵(n _ frames,n_targets,3,3)旋转矩阵。用户永远不应该使用旋转矩阵进行进一步的计算,因为我没有实现输出的导数。相反,我将该输出用于 MSDs 的梯度计算。如果有人知道更好的方法,请告诉我。

在基准表中,这个版本的 Op 是“w/rot”变体,速度较慢(因为它必须做更多的工作)。

梯度代码的细节太多了

这段代码的大部分只是把张量做成正确的形状。我们需要将我们的 n_frames * n_targets 旋转矩阵分别应用于每个构象,我们需要在计算图中混合来自上一个 Op 的梯度grad,因此我们将所有东西放大到秩 4 矩阵,并且显式平铺要旋转的构象,因为matmul不做广播。

rots = op.outputs[1]
N1 = int(confs1.get_shape()[0])
N2 = int(confs2.get_shape()[0])*# expand from (n_frames, n_targets) to (n_frame, n_targets, 1, 1)* 
grad = tf.expand_dims(tf.expand_dims(grad, axis=-1), axis=-1)*# expand from (n_frames OR n_targets, n_atoms, 3)* 
*# to (n_frames OR 1, 1 OR n_targets, n_atoms, 3)*
expand_confs1 = tf.expand_dims(confs1, axis=1)
expand_confs2 = tf.expand_dims(confs2, axis=0)*# Explicitly tile conformations for matmul*
big_confs1 = tf.tile(expand_confs1, [1, N2, 1, 1])
big_confs2 = tf.tile(expand_confs2, [N1, 1, 1, 1])*# This is the gradient!*
dxy = expand_confs1 - tf.matmul(big_confs2, rots, transpose_b=True)
dyx = expand_confs2 - tf.matmul(big_confs1, rots, transpose_b=False)

梯度的实际形式有几个我们必须包括的因素:

n_atom = float(int(confs1.get_shape()[1]))
dxy = 2 * dxy / n_atom
dyx = 2 * dyx / n_atom

最后,我们对具有和其他构象的轴求和,以确保我们的梯度张量在形状上与它们的变量匹配。

dr_dc1 = tf.reduce_sum(grad * dxy, axis=1)
dr_dc2 = tf.reduce_sum(grad * dyx, axis=0)

在关注旋转之后,你忘记了平移对称性吗?我本来有!在各种输入上测试你的代码,包括非预先居中的轨迹:)。这部分就用 Tensorflow 的自动微分吧。

具体来说,我们设置了“forward”op 并在其上调用tf.gradients。我们将梯度 w.r.t .旋转作为grad_ys参数传递。耶连锁法则!

centered1 = confs1 - tf.reduce_mean(confs1, axis=1, keep_dims=True)
centered2 = confs2 - tf.reduce_mean(confs2, axis=1, keep_dims=True)
dc_dx1 = tf.gradients(centered1, [confs1], grad_ys=dr_dc1)[0]
dc_dx2 = tf.gradients(centered2, [confs2], grad_ys=dr_dc2)[0]

KMeans 启发的 RMSD 聚类

作为一个例子,我们可以用我们的快速成对 MSD 梯度运算,让我们找到“最佳”聚类中心(质心)。对于构象的轨迹,找到使每个点与其最近的质心之间的距离最小的中心。为了防止它两次找到同一个质心,我们添加了一个惩罚来强制质心分开。小心确保这个惩罚在某个点饱和,否则你的优化将会产生真正不同的质心,而不考虑簇间距离。

*# Out inputs*
n_clusters = 2
target = tf.Variable(tf.truncated_normal((n_clusters, traj.xyz.shape[1], 3), stddev=0.3))*# Set up the compute graph*
msd, rot = rmsd_op.pairwise_msd(traj.xyz, target)
nearest_cluster = msd * tf.nn.softmax(-msd)
cluster_dist = tf.reduce_mean(nearest_cluster, axis=(0, 1))
cluster_diff, _ = rmsd_op.pairwise_msd(target, target)
cluster_diff = cluster_diff[0, 1]
loss = cluster_dist - tf.tanh(cluster_diff*10)*# Train it in the normal way*
optimizer = tf.train.AdamOptimizer(5e-3)
train = optimizer.minimize(loss)sess = tf.Session()
sess.run(tf.global_variables_initializer())
**for** step **in** range(1000):
    sess.run(train)

现在你可以在这个漂亮的地方做 tICA 或者做一个 MSM

代码可用性

所有代码都可以在 Github 上获得。请务必查看自述文件中的安装说明,因为定制 Op 需要一个有效的 c++编译器。一致性示例、聚类示例和分析脚本位于示例文件夹中,需要 fs 肽数据集。

本机 tensorflow 实现位于 rmsd.py 中。自定义 Op 的底层代码位于 rmsd/ 子文件夹中,具体来说就是 rmsd.cpp 。最后, rmsd_op.py 包含一个方便的函数,用于加载注册 op 的共享对象。

TensorFlow 服务客户。让它更瘦更快!

原文:https://towardsdatascience.com/tensorflow-serving-client-make-it-slimmer-and-faster-b3e5f71208fb?source=collection_archive---------7-----------------------

TensorFlow Serving 提供了一种在生产中部署和服务模型的简洁方式。我之前已经描述过部署过程这里。不幸的是,有两个问题我很久以后才注意到,感谢宝贵的评论。首先,单次预测花费太多时间。第二,实际上,没有必要在客户端使用 TensorFlow。

瓶颈是对 TensorFlow 的调用,它创建了一个张量 protobuf(完整的代码可以在这里找到):

tf.contrib.util.make_tensor_proto(data, shape=[1])

所有其他事情都不依赖于 TensorFlow,仅仅需要从 protobufs 生成 Python 文件。

解决方案

我介绍了一个专门针对图像预测的解决方案,而不改变原始的 protobufs。我发现了一篇很棒的博文,作者走得更远,复制并修改了原始的 protobufs。这允许将代码减少到最少,如果我只需要预测的话,我肯定会这么做。

从 protobufs 生成 Python 代码

我们必须创建一个在 TensorFlow protobuf 文件中描述的具有特定类型和形状的 TensorProto 对象。我们可以按原样使用我们的图像数据数组。

更具体地说,这意味着我们必须从 TensorFlow 核心 protobufs 生成 Python 文件,并直接使用它们,而不是任何包装器。我已经生成了它们,并放入我的库这里。如果您愿意,您可以自己动手(假设您克隆了示例项目):

# 1
cd <tensorflow serving source folder># 2
python -m grpc.tools.protoc ./tensorflow/tensorflow/core/framework/*.proto --python_out=<path to the project> --grpc_python_out=<path to the project> --proto_path=.# 3
python -m grpc.tools.protoc ./tensorflow/tensorflow/core/example/*.proto --python_out=<path to the project> --grpc_python_out=<path to the project> --proto_path=.# 4
python -m grpc.tools.protoc ./tensorflow/tensorflow/core/protobuf/*.proto --python_out=<path to the project> --grpc_python_out=<path to the project> --proto_path=.

不幸的是,由于依赖关系,您需要所有这些,或者您必须调整 protobufs 以满足您的需要,并消除不需要的依赖关系。

替换张量流代码

现在我们可以替换一个“标准的”张量原型创造

tf.contrib.util.make_tensor_proto(data, shape=[1])

包含以下内容:

dims = [tensor_shape_pb2.TensorShapeProto.Dim(size=1)]
tensor_shape_proto = tensor_shape_pb2.TensorShapeProto(dim=dims)
tensor_proto = tensor_pb2.TensorProto(
    dtype=types_pb2.DT_STRING,
    tensor_shape=tensor_shape_proto,
    string_val=[data])

这是怎么回事?首先,我们创建一个与我们的数据相匹配的 dimension 对象——我们只有一个图像要预测。接下来,我们使用创建的维度对象初始化适当的张量形状。最后,我们用张量形状和我们的数据创建所需的类型为 string 的张量 protobuf。我们必须将数据放入字符串值中,因为我们有一个字符串的张量。你可以在生成的tensor flow/core/framework/types _ Pb2 . py文件中找到其他可用的类型。

现在,我们可以将张量 protobuf 设置为请求输入:

request.inputs['images'].CopyFrom(tensor_proto)

你可以在这里找到完整的代码

表演

你也可以显著提高表现。如果您喜欢在客户端继续使用 TensorFlow 框架,请进行以下更改:在开始时导入 make_tensor_proto ,稍后调用它。

...
from tensorflow.contrib.util import make_tensor_proto
...request.inputs['images'].CopyFrom(make_tensor_proto(data, shape=[1]))

如果您不再在客户端使用 TensorFlow,性能会自动提高。在我的系统上,现在单个图像预测需要 3 毫秒,而不是 300 毫秒。

摘要

TensorFlow 服务客户端不需要 TensorFlow 框架来发出请求。您唯一需要做的就是正确初始化发送给服务器的 gRPC 请求。您可以使用原始 TensorFlow Core protobufs 和以下 Python 文件并创建适当的 tensor protobuf 对象来实现这一点。如果您希望客户端中的 TensorFlow 尽可能少,您需要调整原始 protobufs 以满足您的特定需求。

TensorFlow 语音识别挑战—解决方案概述

原文:https://towardsdatascience.com/tensorflow-speech-recognition-challenge-solution-outline-9c42dbd219c9?source=collection_archive---------4-----------------------

Telegraph network equipment — we’ve come a long way (source)

不久前,我参加了由 Kaggle 和 Google Brain 组织的关键字检测挑战赛。问题是,我们如何在像 siri 或 alexa 这样的语音界面中提高关键词检测准确率,比如当你说“打电话给 Brad”时。

Tensorflow 团队已经分享了一个完成这项工作的基线系统的完整 receipe ,但目标是看看社区能提出什么。最后,获胜的团队与谷歌的基线差距相当大;竞争测试集上约 80%对约 70%的准确度范围。

我设法独自达到 88%,在与 Russ 和其他人合作后,我们以 90%的分数排在第 6 位。在这里,我主要概述了我的部分解决方案。

我的代码转储可以在这里(警告:非常混乱)

设置

dev 集包含 64k 的音频文件,每个大约 1 秒。我们也给了每个样本的标签,也就是说,在那一秒钟里说了什么。总共有 31 个标签,但在这场比赛中,我们只对 12 个标签感兴趣:“是”、“否”、“上”、“下”、“左”、“右”、“开”、“关”、“停止”、“开始”、“沉默”和“未知”。未知标签基本上是除了其他 11 个以外的任何东西,而沉默标签是一个代理标签,用于指示何时没有语音。评价是从准确性来说的。

你可以在竞赛页面这里找到更多细节。关于标签分发、音频样本的温和介绍,以及关于声音和特征提取的足够理论,请查看此 EDA

数据预处理

似乎有一些关于原始波数据的训练模型的工作,但标准做法是首先从原始音频中提取频谱图或 MFCC (Mel 频率倒谱系数)。你可以很容易地用 Librosa 得到这些。以下是“是”的声谱图:

Spectrogram for “yes”

您可以将自然声波分解为不同频率的组成波(~傅立叶变换)。这基本上是声谱图告诉我们的:在每个时间点,每个频率的强度是多少。

所有音频文件都有 16k 采样率,这意味着它们可以捕捉高达 8k Hz 的声音频率(见 y 轴)。Mel 是放置特定频率范围的容器,使用较高数量的 Mel 会产生更精细的频谱图。我用 128 和 256 为不同的模型在这个比较粗糙。x 轴与时间相关,给定样本的 x 轴长度取决于用于计算频谱图的几个参数,如跳跃长度。

MFCCs 是对频谱图的另一种转换,旨在更好地捕捉人类语音的特征(例如,与音乐相比)。在 MFCC 的基础上,还有德尔塔和德尔塔-德尔塔变换,你可能会认为它们是一阶和二阶导数。这是同一个样本的 MFCC 的样子:

MFCC for “yes”

MFCCs 是 Kaldi 等流行的语音识别框架中的标准特征表示。我确实尝试了它们,但是由于我在准确性上没有太大的差异,并且我认为光谱图保存了更多的数据,所以我最后没有使用 MFCCs。

回到 spectrograms,最后你会得到一个形状类似(32,128)的 numpy 数组——把它想象成(time,frequency)——它告诉你一个给定时间戳的某个频率有多强。从这里开始,你基本上可以把声音文件当作图像来处理,并且可以疯狂地使用任何基于卷积的模型,比如 vgg,resnet 等等。最重要的是,你要利用数据的顺序性,这样递归神经网络就能派上用场。

在语音识别中,数据扩充有助于概括模型,并使它们对速度、音量、音调或背景噪声的变化具有鲁棒性。我自己实现了增强,以便完全理解和控制发生的事情(而不是使用 tensorflow 实现)。Pydub 对这部分来说真的很方便;例如,它允许你通过写wav += 5来增加一个波形文件的音量 5 分贝,其中wav是一个 pydub AudioSegment对象。

为了创建“沉默”标签的样本,我从数据集附带的噪声样本中提取了一秒钟的部分。

一开始,我在训练期间进行了数据增强,但我发现我的 gpu 没有得到充分利用,数据增强本身就是瓶颈。然后,我决定预计算 4x 批扩充,并将它们与原始数据一起保存为一个大的 pickle 文件。我把所有东西都加载到内存中进行训练,这给了我快速尝试不同架构的巨大优势;这也将使结果具有可比性,因为所有模型都将使用相同的数据进行训练。

Tensorflow 团队似乎正在开发一个简单的 api 来简化和优化培训前的 etl,我很想尽快尝试一下。

我使用 tensorflow 实现中默认的 90%-10%分割进行训练验证;你可能会认为 k 倍 cv 在准确性/过度拟合方面会更好,但我更喜欢简单的分割来快速尝试不同的架构并调整它们的超参数。

你可以在 utils.py 和 etl*下找到我的 etl 脚本。ipynb(抱歉代码乱七八糟)。

Theodore meets Samantha

模型

像所有其他比赛一样,这个想法是集合一些不同的模型,这些模型在架构、数据扩充、特征提取等方面有所不同。在这里,我列出了我使用的一些基本模型变体,它们都是深度神经网络。我考虑过使用 Kaldi,但因为我认为优化语言模型和沉默概率可能会很棘手,所以我像其他人一样利用了深度 NN 波。

1D CNN

这是我见过的最高效和轻量级的模型,精确度在 85-87%之间。它可能是最好的单个模型,几乎不需要调整就可以在生产中使用。

在二维数据(光谱图)上使用“一维”滤波器可能听起来有点混乱,但基本上你有很大的二维滤波器,你只能在一维上卷积。例如,输入形状为(t,f)并经过频域,滤波器将具有形状(k,t),其中k是滤波器宽度。在这种情况下,点积将具有形状(1,f)(假设padding=”same")。更多可视化解释在这里

你可以借用流行的图像处理模型的基本概念,只需调整它们来使用 1d 而不是 2d 卷积。例如,带有 keras 的 vgg 灵感模型看起来像:

然后将这些层附着到一个 dense 和 softmax 头上,并使用categorical_crossentropy损耗进行训练。我在中间层尝试了很多调整,比如添加扩展、跳过连接或末尾的 LSTMs,以利用数据的顺序性质。

我发现一个简单的不太深的模型,在开始时具有大的内核大小,在频域上工作得很好(大约 86%的准确度)。将它与时间域上的 1d 转换以及每种转换的一些变化组合在一起,使我达到 87%。

2D CNN

在这里,您可以将声谱图视为单通道图像,并原样应用著名的图像模型架构。不过,我最初尝试 ResNet 时运气不佳。我意识到太深或太宽实际上会损害准确性,我猜这是因为太多的信息在 maxpool 层中丢失了。因为我的队友已经有了这种型号,所以我没有在这里花太多时间来获得更好的结果。对于像 InceptionResNetV2 这样的单一模型,他们报告的准确率为 88%。

我没有双倍下注 2d 模型的另一个原因是我缺乏硬件能力。我当时使用的是 aws p2/g3 实例,即使对所有增强进行了预编码并将其加载到内存中,训练时间也比我尝试不同架构/超级参数的耐心和意愿要长得多。当我听到新的 aws p3 实例发布时,我非常激动。同样值得注意的是 tensorflow 最近的分布式培训支持。TF 在易用性方面做了一些很好的改进,我很高兴能尽快尝试新的 API。

CNN-RNN 组合

其思想是使用 convnet 提取特征,展平非时间维度,然后使用 RNN 来利用数据的顺序性质。我在这里遇到了这个想法,Hray 使用这种技术来正确识别口语。

keras 中的一个实现如下所示:

我们必须非常小心最大池层,以免删除太多信息,特别是在时域上,因为它很短(1 秒)。我还发现了 CuDNNLSTM 实现,它是 Cuda 上的一个优化的 LSTM 实现;这确实有很大的不同,API 几乎与默认的 LSTM 实现相同。强烈推荐!

仅用这个模型就让我达到了 88%的准确率。将它与 1d convs 组合在一起,使我在黄金领域的公共排行榜(lb)上多了几个名次(仍然在 88%的准确率范围内,lb 只显示了 2 个小数点)。

值得注意的是,2d conv 层不是很深,可能通过尝试其他替代方法可以获得更多的多样性。使用 1d 转换器不会产生同样多的增益。堆叠循环层没有帮助。

Terminator impersonates John — machine to machine Turing test passed!

我尝试过的其他事情

以下是我尝试过的其他一些事情:

扬声器嵌入

在 Kaldi 的许多方法中,当训练声学模型时,说话人嵌入(I 向量)与原始特征(例如 MFCCs)一起使用。根据我看到的一些出版物,它有助于提高单词错误率,并且默认包含在内。本次比赛的数据集带有说话人标签,因此我认为这可能有助于训练独立的说话人识别模型,并在训练主要关键词检测模型时使用其瓶颈特征(嵌入)作为附加输入。

三连音缺失的一击训练在这里是个不错的选择。网络(一堆 1d 转换器)取 3 个样本,2 个来自同一说话者,1 个来自其他人。然后,三元组损失函数推动网络,如果样本来自同一说话人,则使距离最小化,否则使距离最大化。这里有一个片段可以让它更清楚:

这些模型似乎很好地收敛了,但是在训练主模型时将嵌入作为附加特征对准确性没有帮助。我还尝试了多任务学习说话者 id 和标签,但仍然没有改变主要任务的准确性。

我还没有找到一个好的解释,但假设我做得正确,这个观察暗示说话者嵌入对转录有帮助,但对关键字检测没那么大帮助。

自动编码器

在比赛的早期,我非常希望自动编码器的瓶颈特性可以包含一些额外的信号。我们可以认为瓶颈值是指同一类别中的指纹和样本最终具有相似的值。此外,因为我们已经在 dev+测试集上训练了 autoencoder,所以关键字检测模型可以在测试时比较这些指纹,可能会产生更多的 robus 预测。

我用一个简单的不太深的 2d cnn 编码器-解码器架构实现了这一点,该架构具有不同的瓶颈形状,例如 128。它给了我早期的 1d conv 合奏 0.01 的提升,我们在最终的 lightgbm stacker 中使用了它。这里肯定会有更多收获,我非常确定我的自动编码器架构可以改进——特别是在阅读了像 wavenet autoencoder 这样的相关工作之后。这部分训练起来也非常慢,我采取了我能想到的最简单的方法;例如,用简单的上采样层替换去卷积层。

伪标签

这个想法是使用你目前为止最好的模型预测测试样本的标签,然后使用测试数据和你预测的标签重新训练/微调你的模型。在“硬”版本中,您获取 softmax 预测的 argmax 并将其用作标签(当您的模型对预测足够有信心时,您可以更有选择性地这样做)。在“软”版本中,您直接使用预测的软最大概率作为标签,因此某个测试样本可能有 50%“开”,30%“关”,20%是其他标签的组合。我认为,软版本通过将标签之间的关系编码到分配给模型学习的概率中,进入了知识提炼的领域。我在以前的作品中看到了这种方法的改进,认为它在这里也会有所帮助。

在我的早期试验中,我在本地验证集上获得了显著的准确性提升,但在公共 LB 上没有。似乎简单地预测测试标签并使用它们进行训练变得太“天真”了,你必须做更多的工程工作来找到硬案例,并强行让你的模型专门学习这些。我的团队在这里做了一些有趣的把戏,比如针对某些标签出现错误,并试图在测试集中隔离那些困难的案例或合成新的样本。例如,我们意识到相当多的无声样本被错误地归类为其他东西,因为在音频的结尾有一个明显但无意义的元音。为了应对这一点,Bob 创建了一组新的训练样本,通过将正常样本偏移 0.9 秒来模拟这些拐角情况。

这里的尝试都没有反映公共/私有 lb 的大变化,但是也很难忽略它们的有效性,因为测试集的子集被用于评估。此外,你可能会觉得自己在最后做了相当多的修补,但顶级团队之间的差异在于正确地多分类几个词,你宁愿尽可能多地从数据中挤出来。

未知的未知物

在竞赛的早期,很明显一个主要的挑战是预测“未知”标签。dev 集合包含来自 21 个不同标签(“猫”、“希拉”、“等等”)的 42k 个样本,这些样本应被视为未知。然而,在实践中,字面上任何东西都可以代替主要关键字,它们都应该被视为未知。因此,重要的是要找到方法使我们的模型对测试集中看不见的未知内容具有鲁棒性,或者对未知内容具有更好的韵律:)

我尝试过通过反转来增加训练数据,所以当有人说“停止”时,它实际上被视为“停止”,但它的反向口语“pots”是一个“未知”样本。没用。我们也做了一些试验,通过剪切和拼贴已知类别的部分音频来合成新的未知样本;这对我们没用,但显然其他球队运气不错——细节决定成败。

我们还尝试了其他一些事情:

  • 有额外的模型头来预测音素/辅音,并与主要任务一起学习
  • 为每一个可能的 31(默认为 10 +任何进入未知类的事物)训练隔离森林,并使用它们的异常值分数来识别测试样本以包括未知的未知物(这也算作伪标记)

这里所有个人的努力得分在 88%左右,但我要说,他们帮助我们最终的合奏增加了多样性。

组装

最后我们得到的是不同模型/集合的简单加权平均值。我特别喜欢 Bob 如何使用层次聚类来挖掘模型相关性:

这个想法基本上是将所有的类预测展平到一维数组中,然后将它们视为模型的单个指纹。然后,您可以使用这些指纹来计算模型相关性。分层聚类视图有助于识别模型之间的差异,并选择正确的模型/权重。此外,如果你的预测中有一些异常情况没有在公共 lb 中捕捉到(就像之前我在《星球大战》中遇到的情况),你可以马上发现它们。

我们还尝试用 lightgbm stacker 集成我们的最佳集成,该集成对所有实验预测都有效(自动编码器、未知-未知模型、伪标记模型的输出),它在公共 lb 上产生轻微的改进,而私有 lb 分数保持不变。

结论

像迄今为止的所有比赛一样,一路上有很多学习点和挑战,所以感谢 kaggle 和 google brain 的组织。有趣的是,人们在图像处理等其他领域学到的许多技术也可以在这里应用。虽然很有帮助,但是你不需要成为一个语言科学家就有机会在这里竞争。

我还要感谢我的优秀团队,感谢他们分享的所有知识和技巧——和合适的团队在一起真的会让学习经历和动力更上一层楼。其他获奖团队也在论坛上分享了他们的解决方案,请务必查看以获取更多灵感。

我发现传统的语音识别(如 Kaldi)在设置、训练和运行方面非常复杂,所以亲眼看到一种“端到端”的完全基于神经网络的方法可以给出下降的结果是非常令人耳目一新的。这让我对这个领域的所有相关工作寄予厚望,比如 Mozilla DeepSpeech。我特别喜欢百度的愿景,一个高度简化的语音识别管道应该使语音识别研究民主化,就像 CNN 彻底改变了计算机视觉一样,而且我们理想中希望语音识别系统可以由一个在语音识别方面几乎没有经验的团队来构建、调试和改进。

话虽如此,我还是很想看看基于 Kaldi 的 receipe 在这个数据集和任务上表现如何。这可能是我接下来要尝试的东西。

我们在促进沟通方面取得了长足的进步;这些进步在我们自身发展的时间线上是指数级的,从智人的黎明开始。首先,我们消除了距离的障碍,现在我们甚至将交谈(和思考)委托给机器。在这样一个世界里,只要机器能相互交流就够了,我们的口语可能会成为交流的瓶颈,而不是促进者。

— Mic Drop —

特斯拉:股价预测

原文:https://towardsdatascience.com/tesla-stock-price-prediction-f16a702f67d7?source=collection_archive---------4-----------------------

快速提示:我不会预测特斯拉的股价。但我会努力的。

我着手解决这个特殊的问题有两个原因。第一,在尝试学习如何使用 ARIMA 模型和处理时间序列数据时,头脑中要有一些目标。第二是变得肮脏,发臭的富有。第一个目标似乎很成功,这也是我们在这篇文章中要关注的。第二…你很幸运,我不会失去继续写作的动力!

我的计划是创建一个 ARIMA 模型,跟踪足够接近 TSLA 每天的收盘价,然后将其输入第二个模型,该模型结合了自然语言处理,特别是对埃隆·马斯克的推文(他在 ole Twitter 上相当多产),以及其他新闻来源。据我所知,由于特斯拉股票的价格完全是投机性的,它应该基于新闻(特斯拉从未有过盈利的一年,只有几个盈利的季度)。数据科学的伟大之处在于,如果你有一个像这样的随机假设,测试它是相当容易的。

"当某件事足够重要时,即使形势对你不利,你也要去做。"

埃隆·马斯克

TSLA stock price since 2010

正如你从上面看到的,Telsa 自 2013 年初以来一直在上升,这恰好是在他们的第一辆汽车发布后不久。2017 年 1 月,我买了几只股票(实际上是 3 只),获得了 50%的回报。不幸的是,我不知道是应该卖掉还是继续持有。我希望有个模型能帮我避免这种忽上忽下的废话。

好吧,什么是时间序列问题?时间序列问题是指任何给定的观察值都依赖于之前的观察值。如果你想象购买食品杂货,这是很容易想到的。如果你走进商店,发现奶酪比你上次买的时候多了 5 美元,你可能不会觉得这很合理。当然,如果价格几个月来一直在逐渐上涨,你可能会发现它的新价格是合理的(如果令人讨厌的话)。外部因素也可能起作用,但对于普通买家来说,他们的购买决定主要来自之前的价格。这不仅仅是最近的几个价格。如果我们谈论购买草莓,我们可以说价格遵循一个基于历史价格的模式。如果草莓当季上市,我们预计价格会下降,然后随着季节的结束而上涨,草莓会变得更加稀少。今天的价格可能比昨天更取决于 365 天前的价格。我的朋友本发了一个极好的帖子在这里打破这些组件

正如你可能已经猜到的,股票价格中有很强的时间序列成分。我心目中的 ARIMA 模型结合了时间序列的两个特征。AR 代表第一部分,考察价格的“自回归”程度,MA 代表第二部分,考虑移动平均价格的影响。(I 代表集成。)自回归分析了今天的价格与各个先前价格的相关性,并描述了这种关系。我们可以画出前一天对当天的影响有多大。

This shows the correlation between the current price and each previous price up to 365 days

上图显示了这种相关性;随着滞后天数的增加,相关性稳步下降。这告诉我们,最重要的相关性是当前价格之前的价格。如果我们看到其他峰值,这将是一个很好的指标,表明存在其他相关性(例如每周、每季度或每年)。我们也可以查看不同滞后的部分自相关,看看是否有额外的相关性需要考虑。

This maps the partial autocorrelation in closing price over the same time period as above

部分自相关查看与上述相同的关系,但删除了以前的关系。换句话说,在滞后 7 时,它查看 7 个观察值之前(7 天前与我们的收盘价数据)的关系,同时消除滞后 1 到 6 的影响。这可以显示季节关系,就像我们在之前的草莓例子中发现的那样。这些图表读起来可能有点棘手,但上面的图表没有直接明显的关系,显示的主要是噪音。

这涵盖了 ARIMA 模型的自回归性质,但移动平均部分呢?要发现隐藏在数据中的东西可能有点困难,但我们可以把它看作是对数据变化的平滑,以消除噪声和随机变化。

Comparing different rolling means to over six months

你可以在上面看到,特斯拉股价的滚动平均值淡化了通常代表噪音和其他波动的急剧变化。这可以帮助您的模型变得更具预测弹性,而不是完全依赖于自回归。你需要你的模型有多大的反应能力可以帮助你决定最有意义的滚动平均值的时间段。您可以看到,随着用于计算滚动平均值的天数的增加,模型响应变化的时间也变长了。

最后一个要考虑的因素是“平稳性”的概念。简而言之,如果均值和方差在一段时间内相同,则数据是稳定的。这通常是适当的统计分析的要求。正如我们之前看到的,特斯拉的股票价格随着时间的推移一直在上涨,特别是自 2013 年以来,因此不是静止的。有各种方法可以转换数据并使其稳定,这将允许我们建模和进行预测。我们主要是找出数据中的趋势和任何季节性,从建模的数据中删除这些方面,进行预测,然后将趋势和季节性添加回预测结果中。

We can see our observed stock prices on top, the overall trend in the price second, any yearly repetition third, and finally our residual which is whatever variation is still left over and needs explaining

这里是一个尝试,看看任何季节趋势超过一年,任何趋势超过股票的生命。下面的三个图代表寿命趋势、年度变化和残差,它们加在一起就形成了上面的观察图!底部的残差是所有剩下要预测的,我们希望它尽可能的稳定。我还研究了所谓的第一个差异(采用当前价格并减去之前的价格),并进行了一项名为 Dickey-Fuller 测试的测试,该测试本身可能值得发表一篇文章,以观察这是否有助于我们达到平稳性,它确实做到了。

结合所有这些因素,我们可以根据我们的数据得出训练 ARIMA 模型所需的参数。我们将希望在我们的数据子集上训练模型,例如直到 2017 年的所有数据,然后在 2017 年测试模型。

Not too shabby, yea?

哒哒!这里有一个非常简单的例子,说明如何用 Python 和这里的数据创建这个模型。

30 行代码,一半是我在唠叨,四分之一只是在读数据?说到站在巨人的肩膀上…

我希望这有助于您理解时间序列建模的基础,何时使用它,如何为您的模型确定参数,以及如何实现模型本身。这只是触及了表面;接下来,我们需要弄清楚如何评估我们的模型,看看它是否能让我们变得富有!

一如既往,感谢阅读。如果你注意到任何错误或者认为我可以澄清任何事情,请让我知道。如果你想知道更多关于我如何开始评估这个模型和内置自然语言组件的信息,请告诉我!你可以在这里找到我剩余的代码。

考验我

原文:https://towardsdatascience.com/test-me-87e2ad9a9262?source=collection_archive---------3-----------------------

大会的数据科学沉浸式课程毕业后,我很自豪地宣布,我开始了一个新的职位,作为洛杉矶市市长预算和创新办公室的数据科学家。我上任几个星期了,我专注于使用数据驱动分析来改善洛杉矶的城市服务。我在洛杉矶长大,我想念 DC,但回家的感觉真好。

我花了一些时间来反思我的求职。面试很难做对,因为它们总是一种平衡的行为。你想看起来:

  • 自信,但不自大
  • 你会适应,但不太舒服
  • 你知道你的东西,但不是无所不知

我倾向于面试过程中的测试部分,因为我认为这是我在这个职位上表现得更客观的部分。我也发现测试部分有点有趣——就像解决一个难题。不过,在我的调查中,许多组织都有非常基本的测试,会问一些编程问题,比如:

  • 编写一个函数,列出一个目录及其子目录中的所有文件,并打印每个文件的倒数第二行。
  • 写一个函数来计算一个字符串中的总字数。
  • 编写一个 bash 脚本 reverse.sh,它接受任意数量的参数并反向打印它们。

有这些测试总比没有测试好,但是有一些方法可以更全面地考察候选人在一个职位上的表现。下面是我为三个不同的组织所做的测试的回顾,我认为这些测试比正常的编程问题列表高了一步。

  1. 市长预算和创新办公室**——**不是过分奉承我的新雇主,但我真的很喜欢市长办公室的测试。我必须为技术考试做两次报告。一份是对面试官给我的数据集的分析,另一份是对我自己选择的数据集的分析。我有一个周末的时间来准备我的报告。虽然工作量很大,但这给了我一个展示自己能力的机会。我决定为其中一个数据集创建一个预测模型,表明我可以成为一名定量分析师。另一方面,我创造了一些可视化的画面。演示本身让我展示了我的沟通技巧,我把我的工作发布在 GitHub 上,以防面试官想要审查我的代码。
  2. NGP-范**——**我已经使用这家政治科技公司的客户关系管理大约六年了,我认为在那里工作会是一个很好的机会。测试的场景是,一个客户给了我一封电子邮件,要求我为她将数据加载到 CRM 中。该测试不仅询问我将采取什么步骤通过 SQL 加载数据,还询问我将如何回复客户的电子邮件。我觉得这不仅考验了我的硬技能,也考验了我管理客户期望的软技能。
  3. nation builder**——**另一家总部位于洛杉矶的政治科技公司。他们的测试还要求我将数据加载到他们的 CRM 中。但是在这次考试中,他们给了我一个虚拟的环境来加载数据。这给了我一个机会,不仅可以展示我有能力做好这项工作,还可以更多地了解公司的软件。

测试不仅仅是看申请人是否知道如何编码,还包括他们是否能实际执行。评估也是双向的。如果一个组织有一个更全面的测试,那么我知道这个组织可能会引进我想与之共事的其他人才。

测试集使用

原文:https://towardsdatascience.com/test-set-usage-f440bf86147?source=collection_archive---------7-----------------------

对一个 7 98 的输入,输出 1 98 的数据进行 K 重交叉验证后,如何选择数据进行训练和测试?

测试集通常用于计算模型的健壮性。理想情况下,直到最后,您都不应该查看测试集的性能。否则,你可能会在现有的数据上过度拟合你的模型。

所以回答你的问题,如果我有数据和 5 个不同的模型要测试,我首先会随机分离出大概 10 %的数据,称之为测试集。不到最后一步,我不会看这些数据。

对于剩余的数据,我现在需要找出哪种模型效果最好。我不会在数据上训练 5 个模型,每次我都会使用 k 折叠交叉验证来获得我的模型在数据上表现如何的样本。接下来,我将找出所有这些模型的平均误差,并在前两个模型之间进行假设检验,对多个假设检验进行校正,看看最佳模型实际上是否是最佳的。

一旦我选择了我的模型,我将在完整的训练数据上训练它,并在测试集上测试它。如果我没有在训练数据上过度拟合,在测试集上的表现就足够好了。这是我使用测试集的唯一原因。为我的模型做最后的调试。

一旦我确信我的模型没有 bug,我就会用所有的数据对它进行训练,并将其部署到生产中。

用 NLTK 试水

原文:https://towardsdatascience.com/testing-the-waters-with-nltk-3600574f891c?source=collection_archive---------13-----------------------

“你好,Word!”

init(自己,博客):

计算机是如何理解人类语言的?

自从我兴高采烈地故意让苹果、亚马逊和完全不知情的脸书通过 Siri、Alexa 和 Facebook 应用程序监听我个人生活的对话片段以来,我一直(相当平静地)想知道计算机实际上是如何处理人类语言的。这种好奇心从来没有强大到足以让我付诸行动。直到我开始在熨斗学校接受数据科学家的培训。数据科学训练营开始几周后,我发现从哪里开始回答这个问题。三个字的答案是,自然语言处理(NLP)。你瞧,那种古老的好奇心重新燃起,我决定以一个新手的身份写我的第一篇博客。

NLP 是计算机科学的一个发展领域,涉及计算机和人类的交互。这个博客是我第一次涉足自然语言处理领域。在开始任何复杂的分析之前,我将探索开始的文本预处理。我将使用一个流行的名为 NLTK 的 NLP 库。自然语言工具包(NLTK)是当今最强大的,也可能是最流行的自然语言处理库之一。它不仅拥有最全面的基于 python 的编程库,而且还支持最多的不同人类语言。

在开始之前,我不可避免地要简要回顾一下 NLP 的历史。

免责声明:在下面的部分,我将通过一个非常“相关”的奇幻小说角色的模因来“创造性地”进行类比,从而讨论 NLP 的发展。非常欢迎您跳过这一部分,继续学习 NLTK 部分。

自然语言处理的发展

自然语言是我们人类用来相互交流的语言。这就引出了一个问题(至少在我看来)那么,有没有一种非自然的语言?答案是一个响亮的是,它是,计算机语言,或者更确切地说,计算机如何与人类互动。外行人对自然语言处理的描述是:这是一个通过计算机破译自然语言的科学领域。根据 Wikipedia,NLP 通常包括三个主要子领域,简要描述如下:

语音识别:口语单词的识别和转换到转换。例子:Siri,Alexa。

自然语言解释:理解自然语言并以此为基础做出决策。示例:将电子邮件分类为垃圾邮件。

自然语言生成:自然语言产生。示例:创建数据库或数据集的摘要。

在基本水平上,计算机知道如何将字母转换成二进制数、1 和 0。例如,下面左边的图像实际上是短语“Hello,World!”的二进制表示。计算机将我们的语言翻译成二进制代码序列,再转化成可操作的指令。这让我想到了我的“非常有创意”的类比,右边的第二张图片。

可以说,一个人(可能只有我)会发现二进制语言与广受欢迎的小说《权力的游戏》中深受喜爱的助手阿多(大多是哑巴)的交流方式非常相似。阿多只会说一个词,他的名字。他通过重复阿多来交流。或者他保持沉默。阿多。沉默。阿多。阿多。一个。零。一个。一个。明白了吗?所以,有人会说,阿多是二进制的完美代表!

既然我已经说清楚了,让我们稍微回顾一下。在这个万物快速发展的时代,与人类第一次在地球上行走的时间相比,我们很少能体会到计算机自发明以来在极短的时间内已经进化了多少。为了理解 NLP 发展的速度和规模,考虑一下这个。早期的程序员(只有 70 年前!)使用穿孔卡(如下图)与计算机对话。几行代码通常需要成堆成堆的穿孔卡片。

Punch Cards

今天,我们可以毫不费力地与机器对话,甚至不需要思考就可以对 Siri 不听我们的口音感到恼火!

那么我们是如何从这个,

对这个?

嗯,我们已经开发并继续开发一种更好的方法,通过更复杂的编程库与计算机对话。这是第二个“创造性”的类比。

像 NLTK 这样的库基本上是现代计算机的品牌(最后一个,我保证。).通过内置的预写代码,这些库可以在后台执行复杂的文本处理,而其用户只需担心知道哪个方法完成了什么。这些库只需要几行代码就可以实现文本理解、解释和情感分析。下面的段落恰当地总结了 NLP 在当今环境中的重要性。

“今天的机器可以比人类分析更多基于语言的数据,不会疲劳,并且以一致、公正的方式进行分析。考虑到每天生成的非结构化数据数量惊人,从医疗记录到社交媒体,自动化对于高效地全面分析文本和语音数据至关重要。”

下一部分是真正的工作开始的地方!

预处理

那么如何开始呢?如果你仔细想想,这是很直观的。想想婴儿是如何学习理解语言的。

逐字逐句。

为了能够理解一个整体,我们首先需要能够在元素层面上破译一些东西。如果不知道每个点代表什么,你就不能把这些点联系起来。自然语言处理的第一步包括将语言分解成单词/句子,也就是记号,然后尝试绘制这些记号之间的动态关系以及它们如何形成意义。

值得注意的是,NLP 中 99%的工作是预处理和组织数据,其中涉及 分词和解析、词条化/词干化、词性标注、语言检测和语义关系识别 。只有完成这些任务后,你才能开始分析数据。NLTK 让这 99%变得容易多了。

在我第一次尝试使用 NLTK 进行 NLP 时,我选择处理现任总统唐纳德·特朗普的演讲。我找到了一个 2016 年至 2017 年特朗普演讲的 GitHub 知识库。其中总共有 73 篇文本文件形式的发言。我随机选择了一个演讲作为开始,并使用了 NLTK 的以下方法来探索这个演讲。

a)标记化,c)去除停用词,b)词性标注,c)索引

符号化

任何 NLP 项目的第一个任务都是标记化。就是把一个巨大的字符串拆分的过程(我的原始数据为。txt 文件)转换成单词或句子的列表。通常,字符串首先被标记为句子列表,然后是每个句子的单词列表。感觉很直观。

An example of Tokenizing: 
[‘Hello World! I am learning to use NLTK.’]Step 1: Sentence tokenizing:[‘Hello World!’, ‘I am learning to use NLTK.’]Step 2:  Word tokenizing:[ [ ‘Hello’, ‘World’, ‘!’ ], [ ‘I’, ‘am’, ‘learning’, ‘to’, ‘use’, ‘NLTK’, ‘.’] ]

因此,为了开始这个过程,我做了以下步骤:

在一个 Jupiter 笔记本中导入了以下库,以启动这个过程并读取我的文本文件。

import nltk
from nltk.tokenize import word_tokenize
from nltk.tokenize import sent_tokenize
from nltk.corpus import stopwords
from nltk.text import Text
import string, re

我把演讲标记成每个句子的字符串列表。我写了一个函数,使用正则表达式库中的 re.sub()方法删除字符串中的标点符号。为了便于展示,我只选择了演讲的前 15 个句子。

删除停用词

停用词是在语言处理过程中可以忽略而不改变句子意思的小词。删除它们可以提高效率(速度、内存使用),而不会影响效率。NLTK 有一个停用词列表,16 种不同的语言各有一个。我导入了一个用于英语的函数,并编写了“remove_stopwords()”函数来查找并删除句子中的停用词。去除停用词后,单词总数从 99 个下降到 63 个,大约减少了 36%。在拥有数千个单词的语料库的环境中考虑这一点。

词性标注:

好了,接下来是更激动人心的工作。NLTK 有一个很棒的方法,叫做词性标注(nltk.pos_tag()),它接受一个标记化的句子,然后根据每个单词的语法功能(如名词、代词、形容词、时态等)将其转换为词性。有关所有标签的列表,请访问此页面。

为了做到这一点,我只是使用列表理解来循环过滤后的语音并标记每个单词。

POS = [nltk.pos_tag(tokenized_sent) for tokenized_sent in filtered ]
print(POS[:3])output: 
[[('What', 'WP'), ('great', 'JJ'), ('place', 'NN')], [('Thank', 'CD'), ('much', 'JJ')], [('We', 'PRP'), ('thousands', 'NNS'), ('people', 'NNS'), ('outside', 'IN'), ('trying', 'VBG'), ('get', 'NN')]]

所有这一切只需要一行代码。

B.神盾局。

一致

为了快速探索,另一个非常有用的工具是索引。Concordance 可以用来查看特定单词在上下文中的所有用法。它返回一个单词的所有出现次数以及使用该单词的句子部分。NLTK 版本(3.3)有一个缺陷,由于这个缺陷,索引在默认情况下返回 25 个匹配项,宽度不超过 80 个字符。出于好奇,我想看看“伟大”这个词的上下文(你知道为什么)。

concordance 方法接受一个标记化单词列表。所以我回过头来对整个演讲进行了标记化,并对其调用了方法。

from nltk.text import Text
speech_words = Text(word_tokenize(speech))
speech_words.concordance('great')

正如你所看到的,这种方法可以很方便地在初始阶段使用,以吸引某些单词的使用。

词云

最后总结一下,这和 NLTK 没有任何关系,我为 70 多个演讲中的每一个创建了单词云。使用单词云生成器。不仅仅是因为它们看起来很酷,事实也的确如此!然而,我发现这是一个快速找到最常用单词的非常方便的方法。这导致了一些非常有趣初步观察。例如,在总统竞选结束时,希拉里这个词开始更多地出现。云在最后按时间顺序显示。代码如下:

from wordcloud import WordCloud
import matplotlib.pyplot as plt
for speech in speeches:   
    print(speech)
    speech = open(speech, 'r').read()
    cleaned_speech = remove_punctuation(speech)
    text = cleaned_speech
    wordcloud = WordCloud().generate(text)
# Display the generated image:
    plt.figure( figsize=(20,10) )
    plt.imshow(wordcloud, interpolation='bilinear')
    plt.axis("off")
    plt.show()

下一步是什么?

我将继续探索 NLTK 的更多方法,并希望在未来能够做出一些有意义的分析。

以下是姜懿翔·川普在总统演讲中的演讲,按时间顺序排列。

尽情享受吧!

使用假设检验来学习

原文:https://towardsdatascience.com/testing-to-learn-part-1-16a7968d2ba3?source=collection_archive---------6-----------------------

我在过去的 6 年里一直忙于测试。无论是电子邮件活动的表现,以推动健康成果,产品的变化,网站的变化,该名单继续下去。其中一些测试是 A/B(可能有多个测试单元),还有一些是全因子 MVT 测试(我的最爱)。

我想分享一些测试的最佳实践,这样你就可以对你如何设计和思考测试充满信心。

作为一名数据科学家,你可能被期望成为如何正确测试的主题专家。或者,您可能刚刚构建了一个产品推荐引擎(或一些其他模型),并且您希望看到与以前使用的模型或业务逻辑相比,您的性能提高了多少,因此您将测试新模型与当前生产中的任何模型。

测试的世界远不止这里所包含的,但我希望在这里涵盖的是:

  • 确定测试和控制群体
  • 启动前的测试范围
  • 一个测试设计,它将允许我们读取我们希望测量的结果
  • 测试分析
  • 关于自动化测试分析的思考

选择测试和控制群体

这是魔法开始的地方。确定因果关系的唯一方法是随机分组(和正确的测试设计)。因此,如果我们想了解任何东西,我们的人口必须被正确地划分出来。一般来说,你的目标人群将会是你所测试的特定人群。如果这是一个电子商务公司的网站测试,你希望访问者在访问网站时被随机测试和控制。如果您正在运行一个电子邮件活动或一些其他类型的测试,那么您将从数据库或 BigData 环境中找出所有符合参与测试标准的相关客户/人员。

如果这是一个很大的列表,你可能需要在一段时间内对客户进行随机抽样。这叫做简单随机抽样。一个简单的随机样本是总体的一个子集,其中每个成员被选入样本的概率是相等的。

这里有一篇关于如何从 Hive 中随机抽取样本的文章:这里

另外,需要明确的是,在 SQL 中编写“select top 1000 * from table”并不是一个随机样本。有几种不同的方法可以在 SQL 中获得随机样本,但是如何做将取决于您所使用的 SQL 的“风格”。

这里有一篇关于在 SQL server 中抽取随机样本的文章:这里

现在你已经有了你的样本,你可以将这些人随机分配到测试组和控制组。

有时候,我们需要变得更老练一点。

假设您想了解推动行业参与度的能力(并且您有行业数据)。一些行业可能会比其他行业包含更少的成员。也就是说,如果你只是将一部分人分成两组,你可能在某些你关心的行业中没有足够高的样本量来确定统计显著性。

与其竭尽全力进行测试,发现你无法了解你所关心的行业,不如使用分层抽样(这将涉及在每个感兴趣的群体中进行简单的随机抽样)。

发布前的范围界定

我在实践中看到,当人们没有看到他们想要的结果时,他们会说“我们将让这个测试再运行两周,看看会发生什么”。特别是对于站点测试,如果你运行的时间足够长,微小的影响也会变得很大。你应该知道你得到了多少流量,在你发布之前测试应该运行多长时间。否则,是什么阻止我们运行测试,直到我们得到我们想要的结果呢?

在测试开始之前,与其他利益相关者坐下来,了解业务含义,他们希望了解什么,他们在测试谁,以及他们如何测试。根据我的经验,当你被视为帮助构建测试的思想伙伴,并且在启动之前就分析的范围达成一致时,每个人都为成功做好了准备。

测试设计

对于测试中的每个单元格,您只能进行一次更改。例如,如果我们有:

  • 单元格 A:15 美元的价位
  • 单元格 B:25 美元的价位
  • 单元格 C: UI 更改和 30 美元的价格点

你只是丢失了信息。添加一个 UI 更改和一个不同的价格选项使得无法解析 UI 更改或 30 美元的价格点会产生什么影响。我们只能知道这些细胞的总体表现。

迭代测试是当你从一个测试中获得获胜者,并把它作为后续测试的控制。这种方法会导致信息丢失。如果测试 1 的输家和测试 2 的赢家的组合实际上是赢家呢?我们永远不会知道!

有时像这样的迭代是有意义的(也许你没有足够的流量来容纳更多的测试单元),但是我们想要提前讨论所有潜在的让步。

另一种类型的测试设计是 MVT(多变量)。在这里,我们将看到一个全因子 MVT。有更多类型的多变量测试,但全因子是最容易分析的。

  • 对于更微妙的优化,MVT 更好(如果您认为测试会有巨大的影响,应该使用 A/B)
  • 经验法则是每月至少有 100,000 个独立访问者。
  • 您需要知道如何使用 ANOVA 进行分析(我将在后续文章中提供关于如何进行这种分析的代码和解释,并在稍后链接到这里)

MVT 测试的一个示例如下。左边(下面)是对照实验,右边是 3 个试验处理。这导致 2 = 8 个处理,因为我们将查看测试和控制的每个可能的组合。

我们可以了解所有的互动!了解相互作用并在改变多个项目时找到最佳处理方法是 MVT 测试的最大优势。下图显示了每个人将如何被分配到 8 种治疗方法中的一种。

在以后的文章中,我会用 R 代码写一篇我以前分析过的 MVT 测试。

测试分析

测试分析最重要的部分之一是在我们如何分析测试的业务中保持一致性。你不想说某事有因果关系,如果另一个人分析了同样的测试,他们可能会得出不同的结论。除了有一致的方法来确定结论,您还希望有一致的方法来与业务的其他部分交流这些结果。“我们会分享 p 值大于 0.05 的结果吗?”也许我们会,也许不会,但要确保整个团队在沟通上保持一致。

**应该总是给定置信区间!**你不想说“哇!这相当于每年 70 万美元”,而实际上它的价值在 10 万美元到 130 万美元之间。这是一个很大的差异,可能会对是否推出变革的决策产生影响。

让我们实现自动化吧!

当我们可以:

  • 自动去除异常值
  • 如果样本还不够大,内置而非计算统计显著性
  • 使用置信区间和引人入胜的图表确定指标的统计显著性
  • 查看发布后不久测试的执行情况,以确保没有任何错误干扰我们的结果或收入大幅下降。
  • 这也减少了分析中出错的机会

只需输入几个数据和按几个按钮!

这需要一段时间来构建,并且不会对所有的测试都适用。即使是部分自动化也可以大大减少分析测试所花费的时间!

我希望这篇文章能给你一些测试时需要注意的事情。如果你还在上学,想成为一名数据科学家,参加一门普通的统计学课程,包括使用哪些统计数据以及如何计算置信区间,这将使你在数据科学的职业生涯中受益匪浅。否则,互联网上肯定有大量的信息给你如何计算这些统计数据的概述。我个人更喜欢 Coursera ,因为可以高枕无忧地观看内容上的视频,知道内容来自知名大学,这种感觉很好。

通过正确执行测试,您可以学到很多东西。快乐学习!

访问我的网站获取更多文章:)

正态性检验

原文:https://towardsdatascience.com/tests-of-normality-6b92b84794a8?source=collection_archive---------4-----------------------

给定一组观测值,如何检验一个随机变量是否服从正态分布?

在数据挖掘和机器学习领域,这是一个非常常见的问题。这个问题通过假设检验来回答。

你可以在这里找到很多关于正态性检验的惊人信息,但是我会试着解释我的答案的基础。

我过去使用过卡方检验、科尔莫戈罗夫-斯米尔诺夫检验和夏皮罗-维尔克检验,所有这些检验都可以在 R 中打包获得,也可能在 NumPy 中实现。

无效假设通常是从正态分布中抽取值。所以通常会进行双尾假设检验,如果零假设被拒绝,你可以很有把握地说这些值不是来自正态分布。通常假设相反的情况,但严格来说,这是不正确的,因为在假设检验(费雪检验)中,你只能拒绝假设。

用于检验假设的统计通常基于正态分布的一些一般性质。卡方检验利用了标准正态分布的平方遵循卡方分布的假设。KS 检验利用累积概率分布的特性来比较任意两个分布,在本例中是您的样本,以及一个正态分布。

文本分析 API,第 1 部分:大玩家

原文:https://towardsdatascience.com/text-analytics-apis-part-1-the-bigger-players-3ce8a93577bd?source=collection_archive---------9-----------------------

如果你在市场上寻找现成的文本分析 API,你有很多选择。你可以选择与软件世界的主要参与者合作,对他们来说,每个与人工智能相关的服务只是他们庞大工具目录中的另一个条目,或者你可以选择一个较小的提供商,专注于文本分析作为他们的核心业务。在这两篇相关文章的第一篇中,我们来看看当今最著名的软件巨头能提供什么。

本文最初作为 2018 年 3 月行业观察专栏出现在自然语言工程杂志上。你可以在这里找到完整的引用细节,在这里了解更多关于语言技术组

文本分析的前景

在最近的一个项目中,我需要回顾来自众多供应商的文本分析 API 产品。这些 API 在过去几年中激增:基于云的资源的易获得性和灵活性意味着开发文本分析驱动的 SaaS 产品的门槛相对较低,现在至少有二十几个 API 可供您使用。因此,如果你想利用第三方的文本分析功能,而不是构建自己的功能,你该如何选择呢?这篇文章,以及随后的一篇文章,旨在帮助你,如果你碰巧面临这种特殊的困境。[据我所知,这里提供的所有信息都是准确的,时间是 2018 年 1 月;但是事情可能会变化很快,所以你最好在根据这篇文章做出决定之前仔细检查所有关键信息。]在这里,我们来看看我们可能认为的软件行业的“巨人”:主要的玩家,对他们来说,文本分析只是一系列产品中的一个功能。例如,如果您希望确信您正在使用的工具是由一家几年后肯定会出现的公司支持的,那么您可能会被这些提供商所吸引。在随后的帖子中,我们将考虑“大卫”:专注于文本分析的小玩家,你可能希望他们更加灵活和创新。

关于范围的说明:我们将文本分析与各种类型和各种方式的文本文档的处理有关,通常使用该领域大多数人认为需要某种形式的自然语言处理的功能。对聊天机器人和虚拟助手的持续高度兴趣意味着每个供应商也有一系列语言相关的服务来支持这种类型的对话应用程序,但这不是我们在这里考虑的;我们将在随后的文章中讨论这个话题。

巨人队

虽然也有其他软件巨头提供文本分析功能——例如,惠普有自己的 Haven OnDemand 服务,SAP 提供文本数据处理服务——但我们在这里重点关注这个领域最引人注目的四家主要公司:按字母顺序排列,亚马逊、谷歌、IBM 和微软。脸书苹果也有用于一些文本分析任务的 API,但在每一种情况下,它们主要是作为在这些公司各自的软件平台上工作的工具。如果你是一个软件开发人员,想要构建一个独立的应用程序,利用第三方文本分析工具集,我们在这里考虑的四个可能是最明显的选择。

亚马逊是这个俱乐部的最新成员:尽管他们已经围绕 Alexa 平台提供了各种语言相关的服务有一段时间了,但打包为Amazon understand的文本分析功能直到 2017 年 11 月才与亚马逊翻译和亚马逊转录一起公开提供。当然,这些只是 AWS 旗下提供的大量服务中的一部分。understand 提供五种不同的文本分析服务:实体识别、情感分析、关键短语提取、语言检测和主题建模。understand 被归类为机器学习服务,以及其他与 Alexa 相关的服务。

谷歌的自然语言 API 是谷歌云平台的一部分。提供的 API 涵盖实体识别、情感分析、句法分析和内容分类。同样,这些只是基于云的工具的广泛套件中的组件。谷歌也将这些功能归入机器学习,以及一系列相关工具,包括更高级的服务,如“工作发现”。谷歌 NLP API 于 2016 年 7 月发布测试版。

正如我们之前在本专栏中提到的,IBM 的自然语言能力——或者至少是我们感兴趣的能力——是通过收购来实现的:IBM 在 2015 年 3 月收购了 AlchemyAPI,这可能是第一个基于云的文本分析 API。AlchemyAPI 本身于 2009 年推出;Alchemy 保留了它作为 IBM Watson 服务的名字,直到 2016 年初,它变成了 IBM 自然语言理解。IBM API 提供了比这里讨论的其他提供者更广泛的功能:实体检测、情感分析、主题检测、关键字检测、五级层次结构中的内容分类、关系和语义角色提取,以及一些有用的元数据工具。IBM framework 还允许您使用针对实体和关系标识的定制领域特定模型来扩展所提供的功能。

微软的 NLP 相关产品分布在 Azure 平台认知服务下的各个子类别中。在语言子类别下,我们有语言分析(提供标记化、词性标注和基于选区的解析)和文本分析(提供语言检测、情感分析和关键短语提取)等。链接 API 的[实体可以在 Knowledge 子类别下找到,并且至少从 2016 年初开始就是 Azure 服务的一部分;在此之前,它是微软牛津项目的一部分。](https://azure.microsoft.com/en-au/services/cognitive-services/entitylinking- intelligence-service/)

由于可用功能的具体范围因提供商而异,您的特定需求可能会从一开始就排除一些候选人。

使用 API

因为它们都是全栈云平台提供商,所以对于上述每一个,你都可以完全在云端开发和部署应用,除了在你的本地机器上使用终端窗口之外,不需要使用任何东西。但是,您也可以将这些文本分析服务用作 API,从您自己的机器或其他地方托管的应用程序中调用。

在每种情况下,注册一个免费或试用帐户,并设置认证以使用服务都相当简单。这四个提供商都提供 SDK 和对各种编程语言的支持;同样,在支持的语言方面有一些变化,所以这是您可能要考虑的另一个因素。

为了便于比较,我们在这里只关注一个特定的核心功能:检测文本文档中的命名实体提及。四个 API 中的每一个为这个任务提供了稍微不同的输入选项;我们将在下面进一步讨论输出。

  • Amazon 的方法是最简单的:您提供一个文本字符串和用于分析的语言。目前,仅支持英语和西班牙语。
  • Google 接受纯文本或 HTML 文档,或者对位于 Google 云存储中的文档的引用,以及文本编码类型,这对于计算偏移量很重要。您还可以指定分析中使用的语言;默认情况下,这是自动检测的,但是包含大量非英文名称的文本似乎会忽略这一点,所以如果可能的话,指定这个参数会更安全。
  • IBM 的 API 还接受纯文本或 HTML 内容,或者要分析的文档的 URL,以及分析中要使用的语言。这个 API 提供了一个简洁的特性,它试图从一个检索到的 HTML 页面中删除广告,并且你可以询问它的情绪(喜悦、愤怒等等)。)和对检测到的实体表达的情感(消极或积极)。
  • 微软的 API 只支持 UTF-8 文本。与其他服务不同的是,微软的服务只希望每次通话都有一段文字。同样独特的是,API 提供了一个选项,您可以通过它来查询文本中的特定单词或短语。这些属性让我想知道开发人员在这里考虑的目标用例是否可能与其他产品不同;例如,每段操作模式可能是有用的,因为当在文字处理程序中键入 ENTER 时会触发这种模式。

也许不足为奇的是,所有这些服务对于什么是命名实体有稍微不同的概念。表 1 列出了每种识别的类型。这里没有列出微软的服务,因为它不返回它检测到的实体的类型信息;更多信息请见下文。

当然,仅仅因为两个提供者对一个类别使用相同的名称并不意味着他们都以相同的方式定义那个类别;这就导致了跨平台对比的困难。

IBM 类别的粒度是惊人的;除此之外:该服务还检测 433 种实体子类型,包括“自行车制造商”和“视频游戏发行商”等;完整列表见[此处](https://console.bluemix.net/docs/services/natural-languageunderstanding/ entity-types.html#entity-types-and-subtypes)。给定的实体可以被分配几个子类型:例如,除了类型“公司”之外,CNN 还具有子类型“广播”、“获奖人”、“无线电网络”和“电视网络”。

比较的 API 输出

四个 API 的输出也有差异,如图 1 所示。

Amazon 返回一个实体提及数组,每个实体提及都有其开始和结束偏移量、从表 1 所示的列表中抽取的类型,以及系统在检测中的置信度得分。重要的是,似乎没有试图确定哪些提及是共同引用的,这是所有其他 API 都要做的事情;对于亚马逊来说,每一次提及都被视为一个独特而独立的实体。

Google 返回一个实体数组,每个实体都有被认为是对每个实体的引用。实体类型如表 1 所示。每个实体在文档中都有一个总体显著性;提及类型表明提及是专有名词还是普通名词。在可能的情况下,每个实体还与一个维基百科 URL 和一个知识图 MID 相关联。还可以请求对文档中的实体表达的总体情感。

IBM 的输出类似于 Google,每个被检测到的实体都与一组提及及其位置相关联。如果可用,将提供该实体的 DBpedia 链接。(奇怪的是,如图 1 中的例子所示,API 无法找到新西兰的 DBpedia 资源。)如前所述,还可以请求对实体的情感和情绪。对于给定的输入文本,最多返回 250 个实体。

微软还在文本中提供了一系列实体及其相关的提及,通过一个代表性的名称联系在一起。如果可以找到的话,会提供一个 Wikipedia ID,但是如上所述,没有提供类型信息。

图 1 显示了在板球比赛报告的上下文中,特定命名实体的每个 API 的结果(这是路透社文件 239046newsML)。这里所指的实体是新西兰板球队。短语新西兰板球在文本中没有出现在任何相邻的地方,但是谷歌和微软都成功地将实体解析为板球队而不是国家。

他们工作得怎么样?

表 2 中显示的结果来自于在公开可用的 CoNLL 2003 共享任务数据上运行每个 API,这些数据来自于路透社语料库。

这里有各种各样的问题:不同的 API 使用不同的标记化算法,这有时会产生与黄金标准不一致的结果(这并不意味着它们是错误的——有时 CoNLL 注释看起来是不正确的);还有其他方法可以将每个 API 的实体类型映射到 CoNLL 实体类型。将这些数字与参与共享任务的参与者生成的数字进行比较可能也不公平,因为后者的系统可能是根据路透社的训练数据定制的,而这里审查的服务不太可能是这样。例如,IBM 在 MISC 类别上的糟糕表现似乎很大程度上是因为它没有识别出任何国籍形容词,如克罗地亚语和德语,这些形容词被 CoNLL 标记为 MISC。尽管如此,我认为在一个相对中立的数据集上观察这三个系统的相互比较还是很有趣的。(同样,微软的结果没有在这里显示,因为它们不包含已识别实体的类型信息。)

定价

在竞争激烈的市场中,SaaS 产品通常很难进行定价比较:不同提供商的定价会因所使用的特定分析服务、文本单元采用的大小以及分层拆分而有所不同。所有四个提供商都有免费等级或免费试用期,因此您可以试用它们。对于生产用途,亚马逊命名实体识别的单位大小为 100 个字符,定价为每单位 0.0001 美元,最多 1000 万个,此后打折;谷歌的单位大小称为文本记录,是 1000 个字符,每个文本单位收费 0.001 美元,最多 100 万个单位,此后打折;IBM 按照 NLU 单位收费,其中一个单位是 10 K 个字符×所请求的特征数(此处显示的实体识别结果计为单个特征),每个 NLU 项目的成本为 0.003 美元,每月最多 250 K 个项目。我无法计算出微软产品的价格;我的最佳猜测是,如果你使用其他服务,它是免费的,但这很难说。这可能是因为该服务目前被归类为预览模式。

根据这些数字,如果你想每月处理 100,000 个 10 KB 大小的文档,亚马逊和谷歌都会向你收取 1,000 美元,但 IBM 只会向你收取 300 美元。但不同的单位规模方法和不同的分层分割意味着最佳交易将取决于您的具体数字。

获胜者是…

嗯,这要看情况。

  • 如果您关心被检测到的实体的类型,那么微软的实体链接 API 就不适合,因为它(至少目前)不提供这种信息。当 API 提供一个维基百科的链接时,你也许能找到它的类型,但是,正如我的一个好朋友喜欢说的,生命太短暂了,穿不了太紧的鞋子。
  • 如果您关心在一个文档中集合对同一个实体的不同引用,那么您不需要 Amazon API,因为它将每个引用都视为独立的。
  • 如果您还想利用解析结果,那么您只能使用 Google(用于依赖解析)和 Microsoft(用于选区解析);如果您只是追求语义角色和关系,而没有访问完整的语法分析,IBM 会做。
  • 在某种程度上,对上述 CoNLL 数据的评估结果具有代表性,您可以根据对您重要的度量和实体类型做出选择。IBM 的实体类型可扩展性可能是这里的一张王牌:尽管它在默认设置下的性能不如其他产品,但扩展实体识别集的能力提供了一种解决方法。
  • 正如我们在上面讨论的新西兰的例子中看到的,Google 和微软都很好地解决了对正确的依赖于上下文的实体的模糊引用,而 IBM 却没有,至少在这种情况下是这样;当然,亚马逊根本不提供实体链接。
  • IBM API 提供了许多其他 API 没有提供的“管理特性”,比如文本清理和元数据提取。
  • 您的里程数可能会有所不同,但是我发现 Amazon 和 IBM 文档更容易找到。Google 的文档在某些地方似乎与实际的 API 不一致,但是请记住,它被归类为测试版,因此它可能比稳定版更频繁地变化。类似地,微软的文档似乎相当有限,但这可能是由于该产品的预览性质。

所以,很明显,这完全取决于你的具体要求。

但到目前为止,我们只讨论了歌利亚。那些小球员呢?对于大玩家来说,拥有一个文本分析产品可能比拥有一个好的文本分析产品更重要;也许有购买决定,西装只是想知道供应商是否勾选了文本分析框。但这对那些只专注于文本分析的公司来说并不合适。那么他们如何比较呢?我们将在下一篇文章中讨论这些——关注文本分析 API,第 2 部分。

如果你想要一种简单的方法来跟上商业 NLP 世界的关键发展,可以考虑在 NLP 中注册本周的 ,这是一份每周周五出版的短小精悍的周报。

文本分析 API,第 2 部分:小玩家

原文:https://towardsdatascience.com/text-analytics-apis-part-2-the-smaller-players-c9e608cf7810?source=collection_archive---------11-----------------------

似乎每隔几周市场上就会出现另一种基于云的文本分析应用编程接口(API)。如果您对使用这些类型的服务构建应用程序感兴趣,如何决定使用哪种 API 呢?在本系列的上一篇文章中,我们看了云软件世界中的巨头的文本分析 API:Amazon、Google、IBM 和 Microsoft。在本帖中,我们调查了市场上规模较小的公司提供的 16 种 API。

本文最初作为 2018 年 9 月行业观察专栏出现在自然语言工程杂志上。你可以在这里找到完整的引用细节,在这里了解更多关于语言技术组。想要更多吗?在这里可以找到关于 25 个以上文本分析 API 的更深入的探讨。

随处可见的文本分析 API

似乎每隔几周就会出现一个新的文本分析 API。在本系列的前一篇文章中,我们研究了软件即服务市场中的巨头提供的文本分析 API:亚马逊、谷歌、IBM 和微软。这些 APIs 考虑到它们背后的资源,毫不奇怪——是健壮的、开发良好的和有据可查的。但正如我们在那篇评论中指出的,出于这样或那样的原因,你可能不想与大玩家同床共枕。此外,规模较小的公司总有可能会有更新的想法,并能够灵活敏捷地实施这些想法,而不像规模较大的公司那样发展缓慢。

因此,考虑到这一点,在这篇文章中,我们来看看 16 个专注于文本分析作为核心业务的公司的 API。在撰写本文时,我知道至少还有另外 10 个文本分析 API,但是我们在本文和上一篇文章中讨论的总共 20 个应该足够让你知道提供了什么以及什么可能最适合你的需求。如果我错过了一个你用过并且喜欢的 API,或者——更糟!—如果我错过了你在过去几个月里不眠不休开发的 API,给我发一封电子邮件,我会很受鼓舞地在随后的帖子中报道它。

文本分析的前景

我们在这里关注的是通过软件即服务订阅模式以商业条款提供的基于云的 API。有更多的公司使用专有的文本分析工具集提供软件开发服务,但这里我们不关心他们。我们特别关注那些提供工具集的公司,你可以用这些工具集来构建自己的文本分析应用。我们还特别关注 API,其主要目的是支持构建处理文本文档的应用程序,如网页、PDF 文件、邮件消息或推文;还有另一类自然语言处理 API,我们在这里没有考虑,它们更基本地与构建交互式聊天机器人有关。就有用的功能而言,这两种类型的应用程序之间有一些交叉,事实上,这里讨论的一些供应商似乎正在将他们的主要注意力转移到聊天机器人领域;但是我们主要关心的是文件的处理。表 1 列出了我们在这里要考察的 16 家供应商。[请注意,自从这篇文章撰写以来,Ambiverse API 已经不再可以在商业基础上使用,现在可以开源使用。]

Table 1: The 16 Text Analytics APIs reviewed here

值得注意的是,每个文本分析供应商都提供一个功能组合,所提供的服务范围可能是您选择工具集的一个关键因素。例如,如果您需要进行命名实体识别和摘要,后一个需求已经大大缩小了您的选择范围。下表 2 总结了所提供的最重要的功能。这不是一个详尽的列表,许多 API 还提供了这里没有列出的额外功能。也不一定任何两个提供特定功能的供应商所用的术语是指同一件事,这里的列表不可避免地要做出一些妥协。特别要注意的是,这里的语言分析类别包含了广泛的功能:一些供应商只提供词性标注,一些供应商提供某种形式的解析,还有一小部分供应商提供开放关系提取。仅仅因为供应商提供了特定的功能并不意味着他们做得很好。

Table 2: Capabilities by product: ER = Entity recognition, SA = Sentiment analysis, LD = Language detection, KE = Keyword extraction, CL = Classification, SU = Summarisation, LA = Linguistic analysis

和前一篇文章一样,在本文的剩余部分,我们将集中讨论一个单一的功能,即实体识别,因为这是所有供应商共有的一个功能;如果您想了解更多关于所有这些 API 的其他功能的信息,以及这里没有包括的一些其他功能,请参见完整报告这里

如何选择命名实体识别器

有许多非技术因素会影响您对提供商的选择,例如支持和文档的质量、正常运行时间保证,当然还有价格。然而,在这里,我们将关注技术因素。

让我们假设您已经决定了您想要什么样的通用文本分析功能,这有助于您筛选可用的候选功能。现在,您需要决定哪个命名实体识别器最适合您的需要。你可能需要考虑几个关键标准。

  1. 您想要识别什么类型的实体?几乎每个 API 都返回与人、地点和组织的基本三元组相对应的类型,但有些 API 还提供许多其他类型。
  2. 需要知道文中提到实体的位置吗?例如,如果您的应用程序需要在上下文中显示已识别的实体,而如果您的任务只是过滤文档,那么知道某个内容被提及就足够了,不管在哪里。
  3. 您是否需要通过链接到一些外部知识源(如维基百科或 DBpedia)来消除已识别的实体提及的歧义?

表 3 显示了每个 API 所标识的类型,表 4 显示了这里调查的 16 个 API 如何符合其他两个标准。

Table 3: Recognized types by product

Table 4: NER features by product

除了这些特性之外,一些 API 还提供了文档中命名实体显著性的数值度量;并且许多还传递一些置信度的数字度量,该置信度可以是所识别的字符串是命名实体、所识别的字符串是指定类型或者所提供的歧义消除链接是正确的置信度。

当然,你想看一些例子。如果要显示所有提到的 API 的输出,那就太难了,所以我选择了一个有代表性的例子。鉴于输入句子杰夫·贝索斯可能会在美国首都花费更多时间,因为华盛顿越来越像是亚马逊第二总部的领跑者,图 1 显示了 ParallelDots 提供了什么;这是典型的简单输出。图 2 给出了由 Ambiverse 提供的更复杂结果的味道;图 3 显示了 TextRazor 提供的结果。

Figure 1: Example output from ParallelDots

Figure 2: Example output from Ambiverse

Figure 3: Example output from TextRazor, with some details elided

他们工作得怎么样?

同样,仅仅因为一个供应商声称检测到某某类型的实体并不意味着他们做得很好。正确的评估超出了本文的范围;对于一个简单的量化评估来说,用例需求中有太多的变量和太多的独特性。但是在决定选择哪个供应商之前,您肯定希望进行彻底的测试。我自己对这里列出的所有 API 进行的轶事测试表明,性能差异很大,因此没有捷径可以围绕构建适合您的需求的测试集并查看 API 如何处理它。

幸运的是,这里的所有供应商要么提供免费使用层,有时提供相当慷慨的调用配额,要么提供免费试用期,因此不难感受到这些 API 的性能有多好。每一个都提供了一个相当标准的注册过程,通过这个过程你可以创建一个账户,并获得授权证书;所有的供应商都提供了 RESTful API,您可以将它与适当的库一起用于几乎任何编程语言,和/或 API 包装器,使某些特定语言的使用变得容易。

底线

因此,正如您所料,最适合您的 API 取决于许多因素:所提供的文档和支持是否足以满足您的需求?该 API 是否提供了您所需要的功能,并且达到了您满意的性能水平?当然,价格需要是可接受的——同样,我们在这里看到的 API 的使用成本有相当大的差异。参见我的文本分析 APIs 2018:消费者指南获取详细分析。如果你面临在这个领域做决定,我希望这篇文章能帮你节省时间。我很想听听你的经历:给我发电子邮件,地址是 rdale@language-technology.com。

如果你想要一种简单的方法来跟上商业 NLP 世界的关键发展,可以考虑在 NLP 中注册本周的 ,这是一份每周周五出版的短小精悍的每周时事通讯。

文本分析不是火箭科学,现在就学习吧!—开始 7 门文本分析课程

原文:https://towardsdatascience.com/text-analytics-is-not-rocket-science-learn-them-now-7-text-analytics-courses-to-start-8860df51a9e1?source=collection_archive---------2-----------------------

背景和动机

文本无处不在,在书籍和印刷材料中,在报纸上,在维基百科和其他百科全书中。人们在网上论坛和讨论组中互相交谈,脸书和推特也大多是文本。

传统的数据分析基于关系模型,数据存储在表中(所谓的结构化数据)。然而,只有大约 20%的企业可用数据是结构化数据,其余 80%是非结构化数据和自由文本。非结构化数据和自由文本实际上是我们遇到的大多数数据,这包括维基百科中的 4000 多万篇文章(其中 500 多万篇是英文的),45 亿个网页,每天大约 5 亿条推文,以及一年内在谷歌上超过 1.5 万亿次查询。

以下是来自预测分析今日的简洁描述:“文本分析是将非结构化文本数据转换为有意义数据进行分析的过程,以衡量客户意见、产品评论、反馈,提供搜索功能、情感分析和实体建模,以支持基于事实的决策。”

我希望我已经能够说服你去探索文本分析。事不宜迟,让我们通过这 7 门在线课程深入研究文本分析。

在线文本分析课程

在 Python 中应用文本挖掘

4.7 颗星(12 个等级)

密歇根大学 viaCoursera

作为 Python 专业化的应用数据科学的一部分,该课程将向个人介绍文本挖掘和文本操作的基础知识。本课程从理解 Python 如何处理文本开始,对机器和人类来说都是文本的结构,以及对处理文本的 nltk 框架的概述。接下来的几周将重点关注常见的操作需求、基本自然语言处理方法在文本中的应用,以及如何完成文本分类的演示。最后一周将探索更高级的方法,如主题建模。

文本挖掘与分析

4.4 颗星(164 个评级)

伊利诺伊大学香槟分校途经Coursera

作为数据挖掘专业的一部分,本课程将涵盖挖掘和分析文本数据的主要技术,以发现有趣的模式,提取有用的知识,并支持决策制定,重点是统计方法,这些方法通常可以应用于任何自然语言中的任意文本数据,只需很少或不需要人力。

动手进行文本挖掘和分析

4.1 首发(22 个评分)

延世大学 viaCoursera

本课程为个人提供了一个独特的机会,在真实世界数据集和用 Java 编写的文本挖掘工具包的帮助下,学习文本挖掘和分析的关键组件。

文本挖掘、抓取和情感分析同 R

3.9 颗星(206 个评分)

R-教程训练通过 Udemy

本课程教授个人如何在 r 中处理社交媒体数据。他们将使用 Twitter 数据作为示例数据集。

文本分析/文本挖掘使用 R

4.2 颗星(57 个评分)

ExcelR 解决方案通过 Udemy

本课程展示了如何理解非结构化数据,并为个人提供了各种工具的知识,这是至关重要的。

文字挖掘

Statistics.com

本课程讨论文本挖掘的标准技术,并将相当大的注意力放在将非结构化文本转换成可挖掘形式所需的数据准备和处理方法上。

Full Text Search with SAP HANA course at openSAP

利用 SAP HANA 平台进行全文搜索

OpenSAP

如果您的组织已经实施或将要实施 SAP HANA 环境,那么,本课程就是您在 SAP HAHA 中进行文本分析的起点。通过本课程,您将了解全文索引,并允许您通过 SQL、模糊搜索、重复检查搜索规则等进行搜索。下一节课 2017 年 9 月开学。这门课程是免费的,对所有人开放。

如果你知道任何我错过的文本分析课程,请在下面的评论中告诉我。

音乐流派歌词的文本分析和主题建模

原文:https://towardsdatascience.com/text-analytics-topic-modelling-on-music-genres-song-lyrics-deb82c86caa2?source=collection_archive---------8-----------------------

这项分析使用了自 1970 年以来发表在 kaggle 上的超过 38 万首歌曲的数据集。主要目标是根据歌词开发音乐类型的集群,步骤如下:

  • 数据准备(清理、转换等。)
  • 探索性分析
  • 主题建模

使用了各种 R 库,但主要是基于 #tidytext#tidyverse 环境。

数据准备是分析的一个非常重要的部分。第一步是排除所有歌词文本字段长度小于 10 个字符的歌曲。
然后,在查看歌词文本字段后,似乎出现了大量非英文歌曲。决定在最终的数据集中只包括英语歌曲。因此,通过使用 cld3 库,歌曲的来源被检测到&被添加到数据集中。语言检测并不完美,因为它错误地分类了一些歌曲。但由于原始数据集很大,我决定使用它,并从数据集中删除所有非英文歌曲。最后,所有音乐类型缺失或未知的歌曲都被删除。所有年份输入无效(小于 1970 年)的歌曲也被删除。

关于这些步骤的更多细节可以在文章末尾的实际代码中找到。

主要分析

下面有一个频率图来表示音乐流派之间的差异。

大多数歌曲属于摇滚类型,几乎是这个数据集中所有歌曲的 50%。前五大音乐流派是摇滚、流行、嘻哈、金属和乡村音乐。

看看这是否会随着时间的推移而保持不变会很有趣。下面有一个图表显示了这些年来的变化。

这里有一些发现。起初,摇滚音乐在歌曲中所占的比例下降了(从 60 %下降到 25 %)。另一方面,hip-hop 逐渐上升(目前接近 20 %)。Pop 在 20 %左右,并且多年来相当稳定。

现在让我们试着找出哪种音乐类型使用了更多的歌词。

Hip-Hop 似乎是一种明显不同的音乐类型,因为它比其他类型的歌曲使用更多的歌词。

WORDCLOUD

看看每种音乐类型中使用最多的单词是很有趣的。下面是排名前五的音乐类型的单词云。词云(也称为文本云或标签云)以一种简单的方式工作:特定的词在文本数据源中出现得越多,它在词云中出现得就越大、越粗。
下面是排名前 5 的音乐流派的词云。

主题建模

例如,考虑这样一种情况,您面对一大堆文档,但不知道它们是关于什么的。您可能想做的第一件事是将这些文档按主题分类。除此之外,这将帮助你找出是否有任何感兴趣的东西,同时也将你引向语料库的相关子集。对于小的集合,人们可以通过简单地浏览每个文档来做到这一点,但是对于包含数千个文档的语料库来说,这显然是不可行的。

主题建模处理将文档集自动分类到主题中的问题。选择的算法是潜在的狄利克雷分配或 LDA,它本质上是一种便于在文档集合中自动发现主题的技术。

LDA 背后的基本假设是,集合中的每个文档都由集合范围内的主题组成。然而,实际上我们只观察文档和单词,而不是主题——后者是文档隐藏(或潜在)结构的一部分。目的是根据给定的单词和文档推断潜在的主题结构。LDA 通过反复调整文档中主题和主题中单词的相对重要性来重建语料库中的文档。

在我们的案例中,开发了具有两个主题的 LDA 模型。在计算了所有歌曲的主题概率之后,我们可以看到这种无监督的学习是否能够区分或揭示音乐流派之间的关联(关于它们的歌词)。下面的方框图显示了每首音乐类型的歌曲属于这三个主题的概率。

Hip-Hop 流派几乎被唯一地确定为一个单独的主题(主题 2)。其余的音乐流派似乎被确定为另一个主题。
所以我们可以说 Hip-Hop 绝对是一种音乐流派,它在歌词中使用了与其他流派明显不同的语言。
开发了更多的 LDA 模型(三个&四个主题),但初始模型(两个主题)的结果更相关、更重要。

结论
最后我们可以得出这样的结论:
-有一种音乐类型,Hip-hop,与其他类型的音乐明显不同,因为它使用了更多&不同的歌词。随着歌曲的减少和新音乐类型的出现,摇滚音乐的受欢迎程度逐渐下降。

硬件环境
有些任务可能要求很高(对于包含文本数据的大型数据集)。例如,LDA 建模任务大约需要 7-8 分钟才能完成。

全 R 码

文本分类:应用和用例

原文:https://towardsdatascience.com/text-classification-applications-and-use-cases-beab4bfe2e62?source=collection_archive---------4-----------------------

文本分析,整体来说是一个新兴的研究领域。市场营销、产品管理、学术和治理等领域已经在利用从文本数据中分析和提取信息的过程。在之前的帖子中,我们讨论了文本分类背后的技术,这是文本分析的重要部分之一。*文本分类是将自然语言文本按照预先定义的类别进行标注的活动。*通俗地说,文本分类就是从非结构化文本中提取通用标签的过程。这些通用标签来自一组预定义的类别。将您的内容和产品分类有助于用户在网站或应用程序中轻松搜索和导航。

使用文本分析生成的知识产品能够部署到任何人的办公桌上。
–row analytics 首席执行官史蒂夫·加德纳

在这篇文章中,我们来谈谈当前和新兴的文本分类应用。很长一段时间以来,我们一直在使用文本分类来简化我们的事情。图书馆中的图书分类和新闻中的文章分割本质上是文本分类的例子。加入时下流行的人工智能技术,这个过程变得自动化和简单,只需要最少的人工操作。使用人工智能对文本进行分类的概念已经存在了相当长的时间*(Gmail 中的自动过滤和标签,有印象吗?)*。

只要有某些标记要映射到大量文本数据,就可以使用它。尤其是在营销方面,因为它已经从搜索引擎转移到社交媒体平台,在那里品牌和用户之间进行真正的交流。随着营销变得越来越有针对性,营销人员正在使用个性化来推动更好的参与。因此,倾听用户对话并对其进行分析成为营销人员的一项必做任务。

可以对任何数据集进行分类。文本分类对标记数据集进行处理的能力*(在 CRM 自动化的情况下)(或没有它的情况下)(在线阅读社会情绪)*只是扩大了这项技术可以实施的空间。

应用和使用案例:

  • 使用类别来标记内容或产品,以此来改善浏览或识别网站上的相关内容。电子商务、新闻机构、内容管理者、博客、目录等平台可以使用自动化技术对内容和产品进行分类和标记。

  • 文本分类也可以用来自动化 CRM 任务。文本分类器是高度可定制的,并且可以相应地被训练。可以基于重要性和相关性直接分配和分析 CRM 任务。它减少了人工工作,因此时间效率高。

  • 使用标签对网站内容进行文本分类有助于 Google 轻松抓取您的网站,最终有助于 SEO。此外,自动化网站和应用程序上的内容标签可以使用户体验更好,并有助于标准化它们。营销人员的另一个用例是研究和分析竞争对手使用的标签和关键词。文本分类可用于自动化和加速这一过程。

  • 通过对社交媒体上的恐慌对话进行分类,可以建立更快的应急响应系统。当局可以对紧急情况进行监控和分类,以便在任何此类情况出现时做出快速响应。这是一个非常选择性分类的例子。你可以看看这个研究来阅读一篇关于这样一个紧急响应系统的详细文章。

  • 随着营销每天变得越来越有针对性,自动将用户分类到群组中可以使营销人员的生活变得简单。营销人员可以根据用户在线谈论产品或品牌的方式对他们进行监控和分类。分类器可以被训练来识别提倡者或反对者。因此,让品牌更好地服务于这个群体。

  • 学术界、法律从业者、社会研究人员、政府和非营利组织也可以利用文本分类技术。由于这些组织处理大量的非结构化文本,如果按照类别/标签对数据进行标准化,处理起来会容易得多。

文本分类为表格带来了自动化和简化。令人惊讶的是,营销人员、产品经理、设计师、学者和工程师都可以利用这项技术。技术的全部理念是让生活变得更简单。对大量文本数据进行分类有助于标准化平台,使搜索更容易、更相关,并通过简化导航来改善用户体验。

值得注意的是,机器智能和深度学习也正在大多数不可想象和正统的领域扎根。我们可能没有像每一个 60 年代的孩子预测的那样在地面上空盘旋的飞行汽车的具体公式,但肯定有一个将它们带到地下的公式。时代在变化,令人激动。谁知道文本分析未来会有什么样的应用。

并行文本分类 API

你可以在这里找到 ParallelDot 的文本分类 API 的快速演示。可以为一组与您的业务相关的类别定制 API。我们正在升级我们的文本分类器。请继续关注关于其背后技术的详细文章。

请在下面的评论中告诉我们你对文本分类这一新兴应用的想法。我们很乐意附上名单。

对使用人工智能感兴趣?你现在可以免费注册账号账号,使用触手可及的人工智能。

Keras 中的文本分类(第一部分)——一个简单的路透社新闻分类器

原文:https://towardsdatascience.com/text-classification-in-keras-part-1-a-simple-reuters-news-classifier-9558d34d01d3?source=collection_archive---------8-----------------------

Keras 中教授 NLP 和文本分类系列的第 1 部分

教程视频

如果你喜欢这个视频或者觉得它有任何帮助,如果你给我一两美元来资助我的机器学习教育和研究,我会永远爱你!每一美元都让我离成功更近一步,我永远心存感激。

代码

import keras
from keras.datasets import reutersUsing TensorFlow backend.(x_train, y_train), (x_test, y_test) = reuters.load_data(num_words=None, test_split=0.2)
word_index = reuters.get_word_index(path="reuters_word_index.json")

print('# of Training Samples: {}'.format(len(x_train)))
print('# of Test Samples: {}'.format(len(x_test)))

num_classes = max(y_train) + 1
print('# of Classes: {}'.format(num_classes))# of Training Samples: 8982
# of Test Samples: 2246
# of Classes: 46index_to_word = {}
for key, value in word_index.items():
    index_to_word[value] = keyprint(' '.join([index_to_word[x] for x in x_train[0]]))
print(y_train[0])the wattie nondiscriminatory mln loss for plc said at only ended said commonwealth could 1 traders now april 0 a after said from 1985 and from foreign 000 april 0 prices its account year a but in this mln home an states earlier and rise and revs vs 000 its 16 vs 000 a but 3 psbr oils several and shareholders and dividend vs 000 its all 4 vs 000 1 mln agreed largely april 0 are 2 states will billion total and against 000 pct dlrs
3from keras.preprocessing.text import Tokenizer

max_words = 10000

tokenizer = Tokenizer(num_words=max_words)
x_train = tokenizer.sequences_to_matrix(x_train, mode='binary')
x_test = tokenizer.sequences_to_matrix(x_test, mode='binary')

y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)print(x_train[0])
print(len(x_train[0]))

print(y_train[0])
print(len(y_train[0]))[0\. 1\. 0\. ... 0\. 0\. 0.]
10000
[0\. 0\. 0\. 1\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0.
 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0\. 0.]
46from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation

model = Sequential()
model.add(Dense(512, input_shape=(max_words,)))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes))
model.add(Activation('softmax'))model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.metrics_names)['loss', 'acc']batch_size = 32
epochs = 3

history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_split=0.1)
score = model.evaluate(x_test, y_test, batch_size=batch_size, verbose=1)
print('Test loss:', score[0])
print('Test accuracy:', score[1])Train on 8083 samples, validate on 899 samples
Epoch 1/3
8083/8083 [==============================] - 13s 2ms/step - loss: 1.3051 - acc: 0.7192 - val_loss: 0.9643 - val_acc: 0.7931
Epoch 2/3
8083/8083 [==============================] - 12s 2ms/step - loss: 0.5136 - acc: 0.8841 - val_loss: 0.8800 - val_acc: 0.8165
Epoch 3/3
8083/8083 [==============================] - 13s 2ms/step - loss: 0.2873 - acc: 0.9344 - val_loss: 0.9045 - val_acc: 0.8065
2246/2246 [==============================] - 0s 175us/step
Test loss: 0.8878143835789586
Test accuracy: 0.7983081033478224

原贴于 hunterheidenreich.com 的

如何使用 Keras 记号赋予器

原文:https://towardsdatascience.com/text-classification-in-keras-part-2-how-to-use-the-keras-tokenizer-word-representations-fd571674df23?source=collection_archive---------7-----------------------

Keras 中教授 NLP 和文本分类系列的第 2 部分

如果你还没看过第一部 的话,别忘了看看

如果你喜欢这个视频或觉得它有任何帮助,如果你给我一两美元来资助我的机器学习教育和研究,我会永远爱你!每一美元都让我离成功更近一步,我永远心存感激。

《恋恋笔记本》

import keras
import numpy as np
from keras.datasets import reuters

(x_train, y_train), (x_test, y_test) = reuters.load_data(num_words=None, test_split=0.2)
word_index = reuters.get_word_index(path="reuters_word_index.json")

print('# of Training Samples: {}'.format(len(x_train)))
print('# of Test Samples: {}'.format(len(x_test)))

num_classes = max(y_train) + 1
print('# of Classes: {}'.format(num_classes))

from keras.preprocessing.text import Tokenizer

max_words = 10000

tokenizer = Tokenizer(num_words=max_words)
x_train = tokenizer.sequences_to_matrix(x_train, mode='binary')
x_test = tokenizer.sequences_to_matrix(x_test, mode='binary')

y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

print(x_train[0])
print(len(x_train[0]))
print(max(x_train[0]))

print(y_train[0])
print(len(y_train[0]))

from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation

model = Sequential()
model.add(Dense(512, input_shape=(max_words,)))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes))
model.add(Activation('softmax'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model.metrics_names)

batch_size = 32
epochs = 2

history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_split=0.1)
score = model.evaluate(x_test, y_test, batch_size=batch_size, verbose=1)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

(x_train, y_train), (x_test, y_test) = reuters.load_data(num_words=None, test_split=0.2)

x_train = tokenizer.sequences_to_matrix(x_train, mode='count')
x_test = tokenizer.sequences_to_matrix(x_test, mode='count')

y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

print(x_train[0])
print(len(x_train[0]))
print(max(x_train[0]))
print(np.argmax(x_train[0]))

model = Sequential()
model.add(Dense(512, input_shape=(max_words,)))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_split=0.1)
score = model.evaluate(x_test, y_test, batch_size=batch_size, verbose=1)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

(x_train, y_train), (x_test, y_test) = reuters.load_data(num_words=None, test_split=0.2)

x_train = tokenizer.sequences_to_matrix(x_train, mode='freq')
x_test = tokenizer.sequences_to_matrix(x_test, mode='freq')

y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

print(x_train[0])
print(len(x_train[0]))
print(max(x_train[0]))

model = Sequential()
model.add(Dense(512, input_shape=(max_words,)))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_split=0.1)
score = model.evaluate(x_test, y_test, batch_size=batch_size, verbose=1)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

(x_train, y_train), (x_test, y_test) = reuters.load_data(num_words=None, test_split=0.2)

tokenizer.fit_on_sequences(x_train)

x_train = tokenizer.sequences_to_matrix(x_train, mode='tfidf')
x_test = tokenizer.sequences_to_matrix(x_test, mode='tfidf')

y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

print(x_train[0])
print(len(x_train[0]))
print(max(x_train[0]))

model = Sequential()
model.add(Dense(512, input_shape=(max_words,)))
model.add(Activation('relu'))
model.add(Dropout(0.5))
model.add(Dense(num_classes))
model.add(Activation('softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

history = model.fit(x_train, y_train, batch_size=batch_size, epochs=epochs, verbose=1, validation_split=0.1)
score = model.evaluate(x_test, y_test, batch_size=batch_size, verbose=1)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

基于 K 近邻的文本分类

原文:https://towardsdatascience.com/text-classification-using-k-nearest-neighbors-46fa8a77acc5?source=collection_archive---------6-----------------------

我们将使用 Python 为文本分类定义 K 近邻算法。通过在训练数据中找到 K 个最接近的匹配,然后使用最接近匹配的标签进行预测,使用 KNN 算法进行分类。传统上,诸如欧几里得距离被用来寻找最接近的匹配。

对于文本分类,我们将使用 nltk 库来生成同义词,并使用文本之间的相似性得分。我们将识别在训练语料库中具有最高相似性得分的 K 个最近邻。

在这个例子中,为了简单起见,我们将使用 K = 1

算法:

步骤 1: 让我们先导入库:

第二步:

我们实现了 KNN_NLC_Classifier()类,使用标准函数‘fit’进行训练,使用‘predict’对测试数据进行预测。KNN 使用懒惰训练,这意味着所有的计算都推迟到预测。在 fit 方法中,我们只是将训练数据分配给类变量— xtrain 和 ytrain。不需要计算。

请注意,类接受两个超级参数 k 和 document_path。参数 k 与传统的 KNN 算法相同。k 表示将使用多少个最近邻居来进行预测。首先,我们用 k=1。另一个参数解释两个文本之间使用的距离类型。

在预测函数中,对于每一行文本数据,我们将文本与每一行训练数据进行比较,以获得相似性得分。因此预测算法是 O(m * n ),其中 m =训练数据中的行数,n 是需要进行预测的测试数据的行数。

当我们遍历每一行训练以获得相似性得分时,我们使用自定义函数 document_similarity,该函数接受两个文本并返回它们之间的相似性得分(0 & 1)。相似性得分越高,表明它们之间的相似性越大。

**第三步:**接下来,我们实现文档相似度函数。为了实现这一点,我们对每个文本/文档使用 synsets。

我们通过函数 doc_to_synsets 将每个文档文本转换成 synset。这个函数返回文本中每个单词的同义词集列表。

步骤 4: 现在,我们实现函数相似性得分,它使用两个文本/文档的同义词集来提供它们之间的得分:

此函数接受超参数 distance_type,其值可以是“path”、“wup”或“jcn”。根据这个参数,从 nltk 库中调用适当的相似性方法。

**可选:**请注意,我们可以按照下面的代码片段实现其他方法来计算 nltk 库中的相似性得分。不同的函数基于不同的语料库,如 brown、genesis 等。并且可以使用不同的算法来计算相似性得分,例如 jcn、wup、res 等。这些函数的文档可以在 nltk.org 找到

步骤 5: 现在,我们可以实现文档相似度,它计算文档 1 &文档 2 之间的相似度,反之亦然,然后对它们进行平均。

**可选:**下面是到目前为止检查代码的测试:

**第六步:**现在我们可以使用分类器来训练和预测文本。为此,首先导入一个数据集。我们将使用 Watson NLC 分类器演示中提供的演示数据集。数据集将文本分为两类——温度和条件。数据集非常小 appx。只有 50 条短信。

**第七步:**对数据进行预处理。我们将做以下预处理—

  1. 删除停用词(常用词,如“the”、“I”、“me”等。).为此,我们将从 nltk 下载停用词列表,并添加额外的停用词。
  2. 将所有文本/文档转换成小写
  3. 忽略数字内容等,只考虑文本数据。

我们将最终的训练数据加载到 X_train 中,并将标签加载到 y_train 中

**import** **re**
nltk.download('stopwords')
s = stopwords.words('english')
*#add additional stop words*
s.extend(['today', 'tomorrow', 'outside', 'out', 'there'])ps = nltk.wordnet.WordNetLemmatizer()
**for** i **in** range(dataset.shape[0]):
    review = re.sub('[^a-zA-Z]', ' ', dataset.loc[i,'text'])
    review = review.lower()
    review = review.split() review = [ps.lemmatize(word) **for** word **in** review **if** **not** word **in** s]
    review = ' '.join(review)
    dataset.loc[i, 'text'] = reviewX_train = dataset['text']
y_train = dataset['output']print("Below is the sample of training text after removing the stop words")
print(dataset['text'][:10])

步骤 8: 现在,我们创建之前创建的 KNN 分类器类的实例,并使用定义的方法“fit”来训练(lazy),然后使用 predict 函数进行预测。我们将使用一些示例文本来进行预测。

我们得到以下依赖于训练数据的预测。

因此,我们定义了使用 nltk 进行文本分类的 KNN 最近算法。如果我们有好的训练数据,这将非常有效。在这个例子中,我们只有 50 个文本的非常小的训练数据,但是它仍然给出了不错的结果。当我们使用 nltk synsets(同义词)时,即使预测中使用的单词/文本不在训练集中,该算法也能很好地执行,因为该算法使用同义词来计算相似性得分。

**未来的改进:**这个算法使用 K = 1。可以对该算法进行进一步的改进,以实现 K 个一般变量。我们也可以在类中实现“proba”函数来提供概率。我们将在这个算法的下一个版本中实现这些特性:-)

参考资料和进一步阅读:

CourseRA——Python 中的应用文本挖掘

使用最先进的 NLP 库 Flair 进行文本分类

原文:https://towardsdatascience.com/text-classification-with-state-of-the-art-nlp-library-flair-b541d7add21f?source=collection_archive---------1-----------------------

Zalando Research 刚刚发布了 Flair - simple Python NLP 库的新版本!

为什么这是 NLP 的大新闻? Flair 在解决自然语言处理问题方面提供了一流的性能,例如命名实体识别(NER)、词性标注(PoS)、词义消歧和文本分类。这是一个建立在 PyTorch 之上的 NLP 框架。

本文解释了如何使用 Flair 来使用现有的和构建定制的文本分类器。

介绍

文本分类是一种受监督的机器学习方法,用于将句子或文本文档分类到一个或多个定义的类别中。这是一项广泛使用的自然语言处理任务,在垃圾邮件过滤、情感分析、新闻文章分类和许多其他商业相关问题中发挥着重要作用。

大多数当前技术水平的方法依赖于一种称为文本嵌入的技术。它将文本转换成高维空间中的数字表示。它允许将文档、句子、单词、字符(取决于我们使用的嵌入方式)表示为高维空间中的向量。

对于 NLP 来说,Flair 是一个令人兴奋的消息,因为 Zalando Research 最近的一篇论文用于序列标记的上下文字符串嵌入 涵盖了一种始终优于以前最先进解决方案的方法。它在 Flair 中得到实现和完全支持,可以用来构建文本分类器。

1.做好准备

要安装 Flair,你需要 Python 3.6 。如果你还没有,这里有一个关于如何做的指南。然后,要安装 Flair,请运行:

pip install flair

这将安装运行 Flair 所需的所有软件包。它还将包括 PyTorch,Flair 位于顶部。

2.使用预先训练的分类模型

新发布的 0.4 带有两个预训练模型。在 IMDB 数据集上训练的情感分析模型和“攻击性语言检测”模型(目前仅支持德语)。

使用、下载和存储模型都被合并到一个方法中,使得使用预训练模型的整个过程出奇地简单。

要使用情绪分析模型,只需运行:

from flair.models import TextClassifier
from flair.data import Sentenceclassifier = TextClassifier.load('en-sentiment')sentence = Sentence('Flair is pretty neat!')
classifier.predict(sentence)# print sentence with predicted labels
print('Sentence above is: ', sentence.labels)

第一次运行时,Flair 将下载情感分析模型,并默认将其存储到主目录的.flair子文件夹中。这可能需要几分钟时间。

上面的代码首先加载所需的库,然后将情感分析模型加载到内存中(如果需要,可以先下载它),然后预测句子*“Flair 非常漂亮!”在 0 到 1 的刻度上。*最后一条命令打印出来:The sentence above is: [Positive (1.0)]

就是这样!例如,现在你可以将代码整合到 REST api 中,并提供类似于 Google 的云自然语言 api 的情感分析的服务,这在大量请求的生产中使用时会被证明是非常昂贵的。

3.训练自定义文本分类器

为了训练一个定制的文本分类器,我们首先需要一个带标签的数据集。Flair 的分类数据集格式基于脸书的快速文本格式。该格式要求在以前缀__label__开始的每一行的开头定义一个或多个标签。格式如下:

__label__<class_1> <text>
__label__<class_2> <text>

在本文中,我们将使用 Kaggle 的垃圾短信检测数据集来构建一个垃圾/非垃圾分类器。该数据集适合于学习,因为它仅包含 5572 行,并且足够小,可以在 CPU 上在几分钟内训练一个模型。

SMS messages from the dataset labelled as either spam or ham (not spam)

3.1 预处理-构建数据集

我们首先从 Kaggle 上的这个链接下载数据集以获得spam.csv。然后,在与我们的数据集相同的目录中,我们运行下面的预处理片段,它将进行一些预处理,并将我们的数据集分成训练集、开发集和测试集。

确保你已经安装了熊猫。如果没有,先运行pip install pandas

import pandas as pd
data = pd.read_csv("./spam.csv", encoding='latin-1').sample(frac=1).drop_duplicates()data = data[['v1', 'v2']].rename(columns={"v1":"label", "v2":"text"})

data['label'] = '__label__' + data['label'].astype(str)data.iloc[0:int(len(data)*0.8)].to_csv('train.csv', sep='\t', index = False, header = False)
data.iloc[int(len(data)*0.8):int(len(data)*0.9)].to_csv('test.csv', sep='\t', index = False, header = False)
data.iloc[int(len(data)*0.9):].to_csv('dev.csv', sep='\t', index = False, header = False);

这将从我们的数据集中删除一些重复的数据,对其进行混洗(随机化行),并使用 80/10/10 拆分将数据分为训练集、开发集和测试集。

如果运行成功,你将得到以 FastText 格式格式化的train.csvtest.csvdev.csv,准备与 Flair 一起使用。

3.2 训练自定义文本分类模型

若要定型模型,请在与生成的数据集相同的目录中运行此代码片段。

from flair.data_fetcher import NLPTaskDataFetcher
from flair.embeddings import WordEmbeddings, FlairEmbeddings, DocumentLSTMEmbeddings
from flair.models import TextClassifier
from flair.trainers import ModelTrainer
from pathlib import Pathcorpus = NLPTaskDataFetcher.load_classification_corpus(Path('./'), test_file='test.csv', dev_file='dev.csv', train_file='train.csv')word_embeddings = [WordEmbeddings('glove'), FlairEmbeddings('news-forward-fast'), FlairEmbeddings('news-backward-fast')]document_embeddings = DocumentLSTMEmbeddings(word_embeddings, hidden_size=512, reproject_words=True, reproject_words_dimension=256)classifier = TextClassifier(document_embeddings, label_dictionary=corpus.make_label_dictionary(), multi_label=False)trainer = ModelTrainer(classifier, corpus)trainer.train('./', max_epochs=10)

第一次运行这段代码时,Flair 将下载所有需要的嵌入模型,这可能需要几分钟的时间。整个训练过程还需要 5 分钟。

这个代码片段首先将所需的库和数据集加载到一个 corpus 对象中。

接下来,我们创建一个嵌入列表(两个 Flair 上下文 sting 嵌入和一个 GloVe 单词嵌入)。然后,这个列表被用作我们的文档嵌入对象的输入。堆叠和文档嵌入是 Flair 最有趣的概念之一。它们提供了将不同的嵌入组合在一起的方法。您可以将传统的单词嵌入(如 GloVe、word2vec、ELMo)与 Flair 上下文 sting 嵌入一起使用。在上面的例子中,我们使用了基于 LSTM 的方法来组合单词和上下文串嵌入,以生成文档嵌入。你可以在这里了解更多关于的信息。

最后,代码片段训练模型,产生代表我们存储的训练模型的final-model.ptbest-model.pt文件。

3.3 使用训练好的模型进行预测

现在,我们可以通过从同一目录运行以下代码片段,使用导出的模型来生成预测:

from flair.models import TextClassifier
from flair.data import Sentenceclassifier = TextClassifier.load_from_file('./best-model.pt')sentence = Sentence('Hi. Yes mum, I will...')classifier.predict(sentence)print(sentence.labels)

该代码片段打印出'[火腿(1.0)]'【T5],这意味着模型 100%确定我们的示例消息不是垃圾邮件。

与其他框架相比,它的表现如何?

与脸书的 FastText 甚至谷歌的 AutoML 自然语言平台不同,用 Flair 进行文本分类仍然是一项相对低级的任务。我们可以通过设置学习速率、批量大小、退火因子、损失函数、优化器选择等参数选项,完全控制文本嵌入和训练的完成方式……为了实现最佳性能,需要调整这些超级参数。Flair 为我们提供了一个众所周知的 hyper parameter tuning library hyperpt(在这里描述)的包装器,我们可以使用它来调整我们的 hyper parameters 以获得最佳性能。

在本文中,为了简单起见,我们使用了默认的 hyper 参数。使用大多数默认参数**,我们的 Flair 模型**在 10 个周期后获得了 0.973 的 f1 分数。

为了进行比较,我们在 AutoML 自然语言平台上用 FastText 训练了一个文本分类模型。我们首先使用默认参数运行了 FastText ,并获得了 0.883 的 f1 分数,这意味着我们的模型远远超过了 FastText。然而,FastText 只需要几秒钟就可以完成训练,而我们定制的 Flair 模型则需要 5 分钟。

然后,我们还将我们的结果与在谷歌的自动自然语言平台上获得的结果进行了比较。该平台首先需要 20 分钟来解析数据集。之后,我们开始了训练过程,花了近 3 个小时完成(花费了近 10 美元的免费积分),但取得了 99.211 - 的 f1 分数,比我们的定制天赋模型略好。

最后的想法

这篇文章应该让你大致了解如何使用 Flair 进行文本分类。

在下一期出版物中,我们将解释如何调整 Flair 的 hyper 参数以实现最佳性能,并在文本分类方面击败谷歌的 AutoML。

使用递归神经网络的文本生成

原文:https://towardsdatascience.com/text-generation-using-rnns-fdb03a010b9f?source=collection_archive---------12-----------------------

从《爱丽丝梦游仙境》生成文本

介绍

文本生成是数据科学和机器学习中的一个热门问题,它适合于递归神经网络。该报告使用 TensorFlow 构建了一个 RNN 文本生成器,并在 Python3 中构建了一个高级 API。该报告的灵感来自于@karpathy ( min-char-rnn )和 Aurélien Géron ( 用 Scikit-Learn 和 TensorFlow 进行动手机器学习)。这是 CST463 中的一个课堂项目——加州州立大学蒙特雷湾分校的高级机器学习,由 Glenn Bruns 博士指导。

模块

DatasetRNNTextGeneratorModelSelector是三个主要模块。有关文档,请在 Github 上查看该项目。

资料组

src/dataset.py 中定义

创建包含独热编码文本数据的文本数据集。它批量生产编码标签序列。我们将文本数据分成批次用于训练 RNN,并且我们随机抽取文本样本(具有给定长度)来评估我们的模型的性能。

RNNTextGenerator

src/text_generator.py 中定义

使用张量流 RNN 单元创建递归神经网络(执行inputs的动态展开)。它有一个输出投影图层,可生成每个字符类的最终概率。它通过基于当前序列的最后一个字符的概率分布对下一个字符进行采样来生成文本。

我们使用Alice in Wonderland作为文本。

我们可以看到精度和损耗并没有收敛。每个fit调用将运行一个时期(我们将epoch=1传递给了构造函数)。

我们希望在 30 秒内继续用更多的纪元来拟合模型,并且我们对模型如何随着时间的推移而改进感兴趣。

test acc: 0.535040020942688, test loss: 1.592130422592163
Yes, but much towe this NOT, aft open') said 'Letger comimpie hone,
'U VERY up in aborious, it with the adge,
-----------------------
test acc: 0.5360000133514404, test loss: 1.5756181478500366
Yes, but the Habembood cacs must, was the lang donant as perpen my his huril about harriered me shreep), whre
-----------------------
test acc: 0.5430399775505066, test loss: 1.5500394105911255
Yes, but to Alice.

So then
hep datee went orling,' said Alice,' said had geined,' she you not!' said the
nil
-----------------------
test acc: 0.5302400588989258, test loss: 1.6037070751190186
Yes, but the could mould cobl over howner? Now that oplo-thing to her orverewn.'

'Why, to
herself!

The Qu-e
-----------------------
test acc: 0.539199948310852, test loss: 1.6024020910263062
Yes, but the Queen home way the at the placsarnd of the sat a it,' the QUED INK Affece herge how eacushing ov
-----------------------
test acc: 0.5388799905776978, test loss: 1.538255214691162
Yes, but did they rossan that may the sing,' sayeing, round queer thatled thing's she went on, I'm she can wa
-----------------------
test acc: 0.5424000024795532, test loss: 1.5805484056472778
Yes, but first's word.' She was byself, if our it was en!' seemes you se
leasions of the doous rige out oldes
-----------------------
test acc: 0.5455999970436096, test loss: 1.5576822757720947
Yes, but the other--
 Whereet heam who her not
one and it didn't knowling e s
-----------------------

我们可以看到,随着时间的推移,生成的文本确实变得更好了。句子中有更多的实词。测试精度和损耗仍在提高。

现在,我们将尝试不同的超参数。

模型选择器

src/model_selector.py 中定义

执行随机搜索并按准确度对模型进行排序。它选择最好的排名模型,并允许长时间的搜索(几个小时/几天)。

我们为模型选择器定义了一个大的搜索空间,并给它 24 小时的搜索时间。我们希望它能为Alice in Wonderland文本发现一个优秀的模式。

选择器看到的最好的模型使用带有320神经元的GRU Cellleaky_relu作为激活函数。它使用一个学习速率为0.006AdamOptimizer。它在45个时期中被训练,每批有91个序列(batch_size)。在 5 个随机采样的测试序列中,它的平均精度为0.6245,损失1.25

Yes, but to talk about this of ketched him in the puppy juging said to the tell messave off, things very unfusts, and that put on hesserriely I’ll make the pu

我们认为epoch是模型的超参数,因为大量的历元会使神经网络过度拟合,在测试序列上表现不佳。因此,选择器中的最佳模型是我们将使用的最终模型。

最好的文本生成器部署为一个简单的 web 应用程序 ( https://www.ddong.me/alice-text-gen)用于教育目的。

命令行上的文本挖掘

原文:https://towardsdatascience.com/text-mining-on-the-command-line-8ee88648476f?source=collection_archive---------4-----------------------

在过去的几天里,我一直在考虑写一些关于使用原始 bash 命令和正则表达式来挖掘文本的经验。当然,网上有更复杂的工具和库来处理文本,而不用写那么多行代码。例如,Python 有内置的 regex 模块“re ”,它有许多处理文本的丰富特性。另一方面,“BeautifulSoup”有很好的内置功能来清理原始网页。我使用这些工具来更快地处理大型文本语料库,并在我觉得懒得写代码时使用。

大多数时候,我更喜欢使用命令行。我在命令行上感觉很自在,尤其是当我处理文本数据的时候。在本教程中,我使用 bash 命令和 regex 来处理原始和杂乱的文本数据。我假设读者对 regex 和 bash 命令有基本的了解。

我展示了如何将 bash 命令如' grep '、' sed '、' tr '、' column '、' sort '、' uniq '、' awk '与 regex 一起使用来处理原始和混乱的文本,然后提取信息。作为一个例子,我使用了与世界图书馆合作的古登堡计划提供的莎士比亚全集。

先看文件

莎士比亚作品的全部作品都可以从这个链接下载。我下载了莎士比亚的全部作品,并将其放入一个文本文件:“Shakespeare.txt”。好了,现在让我们开始查看文件大小:

ls -lah shakes.txt***### Display:***
-rw-r--r--@ 1 sabber  staff   5.6M Jun 15 09:35 shakes.txt

ls '是 bash 命令,它列出了某个目录中的所有文件和文件夹。-l '标志显示文件类型、所有者、组、大小、日期和文件名。-a '标志用于显示所有文件,包括隐藏的文件。标志“h”-我最喜欢的标志之一,因为它显示文件大小,这是人类可读的格式。shakes.txt 的大小是 5.6 兆字节。

探索者正文

好了,现在让我们读一下文件,看看里面有什么。我使用“less”和“tail”命令来浏览文件的各个部分。命令的名称说明了它们的功能。“less”用于一次一屏地查看文本文件的内容。它类似于“more ”,但具有允许在文件中向前和向后导航的扩展功能。“N”标志可用于定义行号。同样,“tail”显示了文件的最后几行。

less -N shakes.txt***### Display:***
      1 <U+FEFF>
      2 Project Gutenberg’s The Complete Works of William Shakespeare, by William
      3 Shakespeare
      4
      5 This eBook is for the use of anyone anywhere in the United States and
      6 most other parts of the world at no cost and with almost no restrictions
      7 whatsoever.  You may copy it, give it away or re-use it under the terms 

看起来前几行不是莎士比亚的作品,而是一些关于古腾堡计划的信息。同样,文件末尾也有一些与莎士比亚作品无关的行。因此,我将使用“sed”删除文件中所有不必要的行,如下所示:

cat shakes.txt | sed -e '149260,149689d' | sed -e '1,141d' > shakes_new.txt

上面的代码片段删除了尾部从 14926 到 149689 的行,然后删除了前 141 行。不想要的行包括一些关于法律权利,古腾堡的项目和工作内容的信息。

基本分析

现在让我们使用‘pipe |’和‘awk’对文件进行一些统计

cat shakes_new.txt | wc | awk '{print "Lines: " $1 "\tWords: " $2 "\tCharacter: " $3 }'**### Display**
Lines: 149118 Words: 956209 Character: 5827807

在上面的代码中,我首先使用“cat”提取文件的整个文本,然后输入“wc”来计算行数、字数和字符数。最后,我用‘awk’来显示信息。计数和显示的方式可以用许多其他方式来完成。请随意探索其他可能的选择。

文本处理

现在是清理文本以便进一步分析的时候了。清理包括,将文本转换为小写,删除所有数字,删除所有标点符号,删除高频词(停用词)。处理不限于这些步骤,这取决于目的。由于我打算展示一些基本的文本处理,所以我只关注上面的步骤。

首先,我把所有的大写字符/单词转换成小写,然后去掉所有的数字和标点符号。为了执行处理,我使用 bash 命令“tr ”,它翻译或删除文本文档中的字符。

cat shakes_new.txt | tr 'A-Z' 'a-z' | tr -d [:punct:] |  tr -d [:digit:] > shakes_new_cleaned.txt

上面的代码片段首先将整个文本转换为小写,然后删除所有标点符号和数字。上述代码的结果:

**### Display before:**
      1 From fairest creatures we desire increase,
      2 That thereby beauty’s rose might never die,
      3 But as the riper should by time decease,
      4 His tender heir might bear his memory:
      5 But thou contracted to thine own bright eyes,
      6 Feed’st thy light’s flame with self-substantial fuel,
      7 Making a famine where abundance lies,
      8 Thy self thy foe, to thy sweet self too cruel:
      9 Thou that art now the world’s fresh ornament,
     10 And only herald to the gaudy spring,
     11 Within thine own bud buriest thy content,
     12 And, tender churl, mak’st waste in niggarding:
     13   Pity the world, or else this glutton be,
     14   To eat the world’s due, by the grave and thee. **### Display after:** 1 from fairest creatures we desire increase
      2 that thereby beautys rose might never die
      3 but as the riper should by time decease
      4 his tender heir might bear his memory
      5 but thou contracted to thine own bright eyes
      6 feedst thy lights flame with selfsubstantial fuel
      7 making a famine where abundance lies
      8 thy self thy foe to thy sweet self too cruel
      9 thou that art now the worlds fresh ornament
     10 and only herald to the gaudy spring
     11 within thine own bud buriest thy content
     12 and tender churl makst waste in niggarding
     13   pity the world or else this glutton be
     14   to eat the worlds due by the grave and thee

标记化是自然语言处理中的基本预处理之一。标记化可以在单词或句子级别上执行。在本教程中,我将展示如何对文件进行标记。在下面的代码中,我首先使用“cat”提取干净的文本,然后使用“tr”及其两个标志:“s”和“c”将每个单词转换成行。

cat shakes_new_cleaned.txt | tr -sc ‘a-z’ ‘\12’ > shakes_tokenized.txt**### Display (First 10 words)** 1 from
      2 fairest
      3 creatures
      4 we
      5 desire
      6 increase
      7 that
      8 thereby
      9 beautys
     10 rose

现在我们已经把所有的单词都标记出来了,我们可以回答这样一个问题,在整个莎士比亚作品中最常用/最不常用的单词是什么?为此,我首先使用' sort '命令对所有单词进行排序,然后使用带有'-c '标志的' uniq '命令找出每个单词的频率。“uniq -c”与 Pandas 或 SQL 中的“groupby”相同。最后,根据单词出现的频率,按升序(最不频繁)或降序(最频繁)对单词进行排序。

*cat shakes_tokenized.txt | sort | uniq -c | sort -nr > shakes_sorted_desc.txt***### Display**29768 the   28276 and  21868 i   20805 to  18650 of  15933 a      14363 you   13191 my   11966 in  11760 that*cat shakes_tokenized.txt | sort | uniq -c | sort -n > shakes_sorted_asc.txt***### Display**1 aarons       1 abandoner    1 abatements     1 abatfowling          1 abbominable  1 abaissiez    1 abashd         1 abates              1 abbeys       1 abbots

上述结果揭示了一些有趣的观察结果。例如,十个最常用的单词不是代词就是介词或连词。如果我们想找出更多关于作品的抽象信息,我们必须去掉所有的停用词(介词、代词、连词、情态动词等。).也要看对象的用途。人们可能只对介词感兴趣。在这种情况下,保留所有的介词是没问题的。另一方面,最不常用的词是“放弃”、“减少”、“羞愧”。

删除停止字

在下一步中,我将展示“awk”的用法,以删除命令行中的所有停用词。在本教程中,我使用了 NLTK 的英语停用词列表。我还增加了几个单词。以下代码的细节可以在这个 StackOverflow 的回答中找到。awk 不同选项的详细信息也可以在 awk 的手册中找到(命令行上的‘man awk ’)

awk ‘FNR==NR{for(i=1;i<=NF;i++)w[$i];next}(!($1 in w))’ stop_words.txt *shakes_tokenized*.txt > shakes_stopwords_removed.txt

好了,去掉停用词后,让我们像上面一样按升序和降序排列单词。

*cat* shakes_stopwords_removed*.txt | sort | uniq -c | sort -nr > shakes_sorted_desc.txt***### Display most frequent**3159 lord   2959 good  2924 king  2900 sir
2634 come   2612 well  2479 would 2266 love
2231 let    2188 enter*cat* shakes_stopwords_removed*.txt | sort | uniq -c | sort -n > shakes_sorted_asc.txt***### Display least frquent**1 aarons       1 abandoner    1 abatements     1 abatfowling          1 abbominable  1 abaissiez    1 abashd         1 abates              1 abbeys       1 abbots

我们看到莎士比亚最常用的词是“主”,后面是“好”。“爱”这个词也是出现频率最高的词。最不常用的词保持不变。语言学或文学专业的学生可能会从这些简单的分析中解读信息或获得更好的洞察力。

我们来讨论一下

由于我们已经完成了一些必要的处理和清理,在下一篇教程中,我将讨论如何执行一些高级分析。在那之前,如果你有任何问题,请随意提问。看到错别字、错误或者有更好的建议请评论。你可以联系我:

Email: sabbers@gmail.com
LinkedIn: [https://www.linkedin.com/in/sabber-ahamed/](https://www.linkedin.com/in/sabber-ahamed/)
Github: [https://github.com/msahamed](https://github.com/msahamed)
Medium: [https://medium.com/@sabber/](https://medium.com/@sabber/)

文本挖掘:Twitter 提取和逐步引导生成词云

原文:https://towardsdatascience.com/text-mining-twitter-extraction-and-stepwise-guide-to-generate-a-word-cloud-a2c9d626008d?source=collection_archive---------5-----------------------

我看过很多帖子,作者谈论使用 tweets 生成单词云,但没有多少人谈论如何将你的设备连接到 Twitter 以生成单词云。这是非常简单但非常重要的一步(显然,我们将使用这些推文生成一个单词云)。在我们开始技术部分之前,重要的是理解我们为什么需要从 twitter 中提取数据,或者让我们只说从任何社交媒体平台,如 Twitter,facebook,LinkedIn 等。假设你在市场上推出了一个产品或方案,你想分析人们对它的看法。这也叫 风险感知情绪分析。 它有助于确定人们对你的产品的看法,通过分析这些平台的数据,你可以很容易地知道对你的产品的评价是正面还是负面。相信我,它也能帮助你改变商业策略。

那么,我们开始吧。

连接 R 和 twitter 的步骤:

1.创建一个 Twitter 帐户。**不要忘记添加您的手机号码。**2
2。一旦您在 twitter 上创建了您的帐户,请访问以下链接创建您的第一个 Twitter 应用程序

http://apps.twitter.com

3.点击创建新应用程序。为您的应用程序选择一个唯一的名称,并提供应用程序的简要描述。在“网站”中,您可以提供您的任何个人资料链接(我已经给出了我的 LinkedIn 个人资料链接)。
4。点击“创建您的 Twitter 应用程序”。您的应用程序已创建,看起来应该如下所示:

Figure 1: Twitter application

5.打开您的应用程序,进入“密钥和访问令牌”查看您的消费者密钥(API 密钥)和消费者秘密(API 秘密)密钥。我把我的藏起来了,但是一旦你站在这个舞台上,你就应该看到你的了。在某个地方记下两把钥匙。

Figure 2.1: Important Keys and Tokens 1

6.如果您是第一次这样做,那么您必须向下滚动到同一个“密钥和访问令牌”页面,并生成您的访问令牌。记录访问令牌和访问令牌密码以及您的消费者密钥。

Figure 2.2: Important Keys and Tokens 2

是时候打开你的 R 工作室了。

1.安装必要的软件包并加载库。安装这些包很重要,因为它们允许 R interface 与 twitter 连接,并对第三方应用程序进行认证。

Figure 3: R packages

2.是时候使用以下命令建立连接了。

Figure 4: Setting up the connection

3.R 与 Twitter 通信的环境和连接已经建立,现在终于可以提取一些 tweets 了。有几个命令可以用来提取用户的推文,或者通过使用特定的 单词 。在这里你应该非常聪明,对你的提取非常挑剔(知道你想要提取和分析什么)。我们都知道脸书和剑桥分析杂志的问题,以及马克·扎克伯格在国会山的听证会 ( 他被拷问并失去了他的眉毛) 。对于本教程,我将提取最近使用“扎克伯格”一词的前 1500 条推文。

Figure 5: Tweets Extraction

一旦你提取了推文,开始玩它。在分析数据之前先了解它。从检查结构、类别开始,查看 5-10 条最近的推文。您还可以使用 *nchar()计算每条 tweet 的字符数。*探索更多。

Figure 6: Ten recent tweets

现在我们已经学会了如何提取推文,是时候学习如何使用这些推文,并从中获取一些重要信息了。在接下来的几个步骤中,我们将学习如何清理文本数据,创建语料库和文档术语矩阵,生成词云并从中获取一些有用的信息。请注意,我们今天要做的文本数据的数据准备可以用来准备任何文本数据。

请按照以下步骤准备您的数据以供进一步分析。这些步骤不言自明。

Figure 7: Data preparation pipeline

词云

词云是基于文档的词频,也就是说词的最大使用次数越大。了解一些真知灼见会非常有用。按照代码创建术语文档矩阵和词云。不一定要保持相同的参数。

Figure 8: Term document matrix

分析单词 cloud

似乎像 数据、百万、用户、隐私、信息、监狱 等词在提取的推文中被使用了几次。这些单词有时可能没有意义,但如果在上下文中阅读,它可以讲述一个价值百万美元的故事。

Figure 9: Word Cloud

附注:马克·扎克伯格不会进监狱。还没有。

用提炼的方法把整段总结成一句话

原文:https://towardsdatascience.com/text-summarization-extractive-approach-567fe4b85c23?source=collection_archive---------5-----------------------

Source: https://unsplash.com/photos/RLw-UC03Gwc?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText

当我们阅读一篇文章或一本书时,为了快速理解一篇长文章,我们总是要做一个摘要。在英语中,每篇文章的第一个(或前两个)句子很有可能代表整篇文章。当然,主题句有时也可以是最后一句。

在自然语言处理中,有两种方法可以进行文本摘要。第一种,抽取法,是一种简单的方法,即从文章中抽取关键词或句子。有一些局限性,证明了性能不是很好。第二种是抽象方法,即根据给定的文章生成新的句子。它需要更先进的技术。

读完这篇文章后:

  1. 了解 PageRank 算法
  2. 了解 TextRank 算法
  3. 如何使用 TextRank 算法进行摘要

Source: https://www.youtube.com/watch?v=P8Kt6Abq_rM

PageRank 算法是 Google 开发的,用于搜索网站的最重要部分,使 Google 搜索结果与查询相关。

在 PageRank 中,它是有向图。开始时,所有节点都有相同的分数(1 /节点总数)。

该算法

Source: https://blogs.cornell.edu/info2040/2015/10/17/will-outbound-links-reduce-the-pagerank/

第一个公式是 PageRank 的简化版本,我们将使用这个公式进行演示。第二个有点复杂,因为它涉及到另一个参数,即阻尼系数“d”。默认情况下,d 为 0.85

让我们看看简化版。在迭代 1 中,以下是 PageRank 计算方法:

  • 答:(1/4)/3。因为只有 C 指向 A,所以我们使用先前的 C 分数(迭代 0)除以 C 所指向的节点数(即 3)
  • B: (1/4)/2 + (1/4)/3。A 和 C 都指向 B,因此之前的 A 得分(迭代 0)除以 A 所指向的节点数(即 2)。对于 C,它与前面的(1/4)/3 相同。

详细情况,你可以查看视频的完整解释。

问题:我们应该什么时候停止迭代?

按照理论,它应该一直计算到分数上没有大的更新。

文本排名

为什么要在 TextRank 之前引入 PageRank?因为 TextRank 的思想来源于 PageRank 并使用类似的算法(图的概念)来计算重要性。

差异:

  1. TextRank 图是无向的。意味着所有的边都是双向的
  2. PageRank 中边的权重为 1 时是不同的。有不同的计算方法,如 BM25,TF-IDF。

有许多不同的文档相似性实现,如 BM25、余弦相似性、IDF-修正余弦。你可以选择最适合你的问题。如果你对这些算法没有想法,请让我们知道,我们将在以后的分享中包括它。

Source: https://radimrehurek.com/gensim/

gensim 提供了一个简单的 API,通过使用 BM25(最佳匹配 25)来计算 TextRank。

步骤 1:环境设置

pip install gensim==3.4.0

步骤 2:导入库

import gensim 
print('gensim Version: %s' % (gensim.__version__))

结果:

gensim Version: 3.4.0

步骤 3:初始测试内容

# Capture from [https://www.cnbc.com/2018/06/01/microsoft--github-acquisition-talks-resume.html](https://www.cnbc.com/2018/06/01/microsoft--github-acquisition-talks-resume.html)content = "Microsoft held talks in the past few weeks " + \
    "to acquire software developer platform GitHub, Business " + \
    "Insider reports. One person familiar with the discussions " + \
    "between the companies told CNBC that they had been " + \
    "considering a joint marketing partnership valued around " + \
    "$35 million, and that those discussions had progressed to " + \
    "a possible investment or outright acquisition. It is " + \
    "unclear whether talks are still ongoing, but this " + \
    "person said that GitHub's price for a full acquisition " + \
    "was more than Microsoft currently wanted to pay. GitHub " + \
    "was last valued at $2 billion in its last funding round " + \
    "2015, but the price tag for an acquisition could be $5 " + \
    "billion or more, based on a price that was floated " + \
    "last year. GitHub's tools have become essential to " + \
    "software developers, who use it to store code, " + \
    "keep track of updates and discuss issues. The privately " + \
    "held company has more than 23 million individual users in " + \
    "more than 1.5 million organizations. It was on track to " + \
    "book more than $200 million in subscription revenue, " + \
    "including more than $110 million from companies using its " + \
    "enterprise product, GitHub told CNBC last fall.Microsoft " + \
    "has reportedly flirted with buying GitHub in the past, " + \
    "including in 2016, although GitHub denied those " + \
    "reports. A partnership would give Microsoft another " + \
    "connection point to the developers it needs to court to " + \
    "build applications on its various platforms, including " + \
    "the Azure cloud. Microsoft could also use data from " + \
    "GitHub to improve its artificial intelligence " + \
    "producs. The talks come amid GitHub's struggle to " + \
    "replace CEO and founder Chris Wanstrath, who stepped " + \
    "down 10 months ago. Business Insider reported that " + \
    "Microsoft exec Nat Friedman -- who previously " + \
    "ran Xamarin, a developer tools start-up that Microsoft " + \
    "acquired in 2016 -- may take that CEO role. Google's " + \
    "senior VP of ads and commerce, Sridhar Ramaswamy, has " + \
    "also been in discussions for the job, says the report. " + \
    "Microsoft declined to comment on the report. " + \
    "GitHub did not immediately return a request for comment."

尝试不同的比例

返回用于决定导入句子数量比率参数。

Original Content:
Microsoft held talks in the past few weeks to acquire software developer platform GitHub, Business Insider reports. One person familiar with the discussions between the companies told CNBC that they had been considering a joint marketing partnership valued around $35 million, and that those discussions had progressed to a possible investment or outright acquisition. It is unclear whether talks are still ongoing, but this person said that GitHub's price for a full acquisition was more than Microsoft currently wanted to pay. GitHub was last valued at $2 billion in its last funding round 2015, but the price tag for an acquisition could be $5 billion or more, based on a price that was floated last year. GitHub's tools have become essential to software developers, who use it to store code, keep track of updates and discuss issues. The privately held company has more than 23 million individual users in more than 1.5 million organizations. It was on track to book more than $200 million in subscription revenue, including more than $110 million from companies using its enterprise product, GitHub told CNBC last fall.Microsoft has reportedly flirted with buying GitHub in the past, including in 2016, although GitHub denied those reports. A partnership would give Microsoft another connection point to the developers it needs to court to build applications on its various platforms, including the Azure cloud. Microsoft could also use data from GitHub to improve its artificial intelligence producs. The talks come amid GitHub's struggle to replace CEO and founder Chris Wanstrath, who stepped down 10 months ago. Business Insider reported that Microsoft exec Nat Friedman -- who previously ran Xamarin, a developer tools start-up that Microsoft acquired in 2016 -- may take that CEO role. Google's senior VP of ads and commerce, Sridhar Ramaswamy, has also been in discussions for the job, says the report. Microsoft declined to comment on the report. GitHub did not immediately return a request for comment.

---> Summarized Content (Ratio is 0.3):
On Friday, Business Insider reported that Microsoft has held talks to buy GitHub — a $2 billion startup that claims 24 million software developers as users.
Just to catch you up: GitHub is an online service that allows developers to host their software projects.

---> Summarized Content (Ratio is 0.5):
On Friday, Business Insider reported that Microsoft has held talks to buy GitHub — a $2 billion startup that claims 24 million software developers as users.
Microsoft declined to comment, but you can read the full Business Insider report here.
While we wait for further word on the future of GitHub, one thing is very clear: It would make perfect sense for Microsoft to buy the startup.
Just to catch you up: GitHub is an online service that allows developers to host their software projects.

---> Summarized Content (Ratio is 0.7):
On Friday, Business Insider reported that Microsoft has held talks to buy GitHub — a $2 billion startup that claims 24 million software developers as users.
Microsoft declined to comment, but you can read the full Business Insider report here.
While we wait for further word on the future of GitHub, one thing is very clear: It would make perfect sense for Microsoft to buy the startup.
Just to catch you up: GitHub is an online service that allows developers to host their software projects.
From there, anyone from all over the world can download those projects and submit their own improvements.
development world.

结果

Original Content:
On Friday, Business Insider reported that Microsoft has held talks to buy GitHub — a $2 billion startup that claims 24 million software developers as users. It's not immediately clear what will come of these talks. Microsoft declined to comment, but you can read the full Business Insider report here. While we wait for further word on the future of GitHub, one thing is very clear: It would make perfect sense for Microsoft to buy the startup. If the stars align, and GitHub is integrated intelligently into Microsoft's products, it could give the company a big edge against Amazon Web Services, the leading player in the fast-growing cloud market. Just to catch you up: GitHub is an online service that allows developers to host their software projects. From there, anyone from all over the world can download those projects and submit their own improvements. That functionality has made GitHub the center of the open source software. development world.

---> Summarized Content (Ratio is 0.3):
On Friday, Business Insider reported that Microsoft has held talks to buy GitHub — a $2 billion startup that claims 24 million software developers as users.
Just to catch you up: GitHub is an online service that allows developers to host their software projects.

---> Summarized Content (Ratio is 0.5):
On Friday, Business Insider reported that Microsoft has held talks to buy GitHub — a $2 billion startup that claims 24 million software developers as users.
Microsoft declined to comment, but you can read the full Business Insider report here.
While we wait for further word on the future of GitHub, one thing is very clear: It would make perfect sense for Microsoft to buy the startup.
Just to catch you up: GitHub is an online service that allows developers to host their software projects.

---> Summarized Content (Ratio is 0.7):
On Friday, Business Insider reported that Microsoft has held talks to buy GitHub — a $2 billion startup that claims 24 million software developers as users.
Microsoft declined to comment, but you can read the full Business Insider report here.
While we wait for further word on the future of GitHub, one thing is very clear: It would make perfect sense for Microsoft to buy the startup.
Just to catch you up: GitHub is an online service that allows developers to host their software projects.
From there, anyone from all over the world can download those projects and submit their own improvements.
development world.

第五步:尝试不同的字数

字数参数是控制结果的另一个变量。如果同时输入了字数和比率。比率将被忽略。

print('Original Content:')
print(content)
for word_count in [10, 30, 50]:
    summarized_content = gensim.summarization.summarize(body, word_count=word_count)
    print()
    print('---> Summarized Content (Word Count is %d):' % word_count)
    print(summarized_content)

结果

riginal Content:
Microsoft held talks in the past few weeks to acquire software developer platform GitHub, Business Insider reports. One person familiar with the discussions between the companies told CNBC that they had been considering a joint marketing partnership valued around $35 million, and that those discussions had progressed to a possible investment or outright acquisition. It is unclear whether talks are still ongoing, but this person said that GitHub's price for a full acquisition was more than Microsoft currently wanted to pay. GitHub was last valued at $2 billion in its last funding round 2015, but the price tag for an acquisition could be $5 billion or more, based on a price that was floated last year. GitHub's tools have become essential to software developers, who use it to store code, keep track of updates and discuss issues. The privately held company has more than 23 million individual users in more than 1.5 million organizations. It was on track to book more than $200 million in subscription revenue, including more than $110 million from companies using its enterprise product, GitHub told CNBC last fall.Microsoft has reportedly flirted with buying GitHub in the past, including in 2016, although GitHub denied those reports. A partnership would give Microsoft another connection point to the developers it needs to court to build applications on its various platforms, including the Azure cloud. Microsoft could also use data from GitHub to improve its artificial intelligence producs. The talks come amid GitHub's struggle to replace CEO and founder Chris Wanstrath, who stepped down 10 months ago. Business Insider reported that Microsoft exec Nat Friedman -- who previously ran Xamarin, a developer tools start-up that Microsoft acquired in 2016 -- may take that CEO role. Google's senior VP of ads and commerce, Sridhar Ramaswamy, has also been in discussions for the job, says the report. Microsoft declined to comment on the report. GitHub did not immediately return a request for comment.

---> Summarized Content (Word Count is 10):

---> Summarized Content (Word Count is 30):
On Friday, Business Insider reported that Microsoft has held talks to buy GitHub — a $2 billion startup that claims 24 million software developers as users.

---> Summarized Content (Word Count is 50):
On Friday, Business Insider reported that Microsoft has held talks to buy GitHub — a $2 billion startup that claims 24 million software developers as users.
Just to catch you up: GitHub is an online service that allows developers to host their software projects.

结论

对于完整的代码,你可以从 github 查看。如果你也想了解抽象方法,请告诉我们。稍后我会安排一篇文章

  • 根据 gensim 源代码,建议输入至少 10 个句子
  • 不需要训练数据或建模。
  • 它不仅适用于英语,也适用于任何其他输入(符号、日语等)。你也可以阅读 TextRank 的研究论文来获得详细的理解。
  • 从我的经验来看,大多数时候结果是不好。这可能是由于多种文字的结果只是输入的一个子集。

关于我

我是湾区的数据科学家。专注于数据科学、人工智能,尤其是 NLP 和平台相关领域的最新发展。

TTP://medium . com/@ makcedward/访问我的博客

https://www.linkedin.com/in/edwardma1026[获得连接](https://www.linkedin.com/in/edwardma1026)

https://github.com/makcedward探索我的代码

检查我的内核从https://www.kaggle.com/makcedward

《哈利·波特》系列的文本摘要

原文:https://towardsdatascience.com/text-summarization-on-the-books-of-harry-potter-5e9f5bf8ca6c?source=collection_archive---------7-----------------------

几种算法的比较

“Harry sat with Hermione and Ron in the library as the sun set outside, tearing feverishly through page after page of spells, hidden from one another by the massive piles of books on the desk in front.”

我是 Greg Rafferty,湾区的数据科学家。你可以在我的 github 上查看这个项目的代码。如有任何问题,请随时联系我!

在这一系列的文章中,我通过《哈利·波特》的镜头来看一些简便的自然语言处理技术。在这个关于基本自然语言处理的系列文章中,之前的文章着眼于使用潜在狄利克雷分配和正则表达式主题建模,我的下一篇文章将着眼于情感分析。

赫敏打断了他们。"你们俩不打算读《霍格沃茨,一段历史》了吗?"

在整个《哈利·波特》系列中,赫敏让哈利和罗恩读了多少遍大部头的《霍格沃茨,一段历史》?提示:很多。他们三个在图书馆度过了多少个夜晚,通读他们能找到的每一本书来弄清尼可·勒梅是谁,或者如何在水下生存,或者为他们的 O.W.L.s .做准备?他们犯的错误是试图自己阅读所有的东西。

还记得当你在学校偶然发现那本书的 CliffsNotes 摘要,你从来没有读过,但应该写一篇文章吗?这就是文本摘要的基本功能:为任何大型文档提供 CliffsNotes 版本。现在,CliffsNotes 是由受过良好教育的人写的,他们熟悉他们正在总结的书。但是现在是二十一世纪,难道计算机不应该让人类失业吗?我研究了一些文本摘要算法,看看我们是否准备好让可怜的老克利夫顿失业。

有两种类型的文本摘要算法:抽取的和抽象的。所有提取摘要算法都试图对文档中的短语或句子进行评分,并且只返回最具信息量的文本块。抽象文本摘要实际上创建了文档中不存在的新文本。抽象概括是你在向你的朋友解释你读过的一本书时可能会做的事情,对计算机来说,这比抽象概括要困难得多。计算机在创造方面并不那么出色。到目前为止,还没有任何抽象的摘要技术能够很好地处理长文档。表现最好的只是根据一个段落造一个句子,或者把句子的长度减半,同时保留尽可能多的信息。通常,语法会受到严重影响。它们通常基于神经网络模型。这篇文章将关注更简单的文本摘要技术。

我将展示的大多数算法都打包在 Python 的sumy包中,但我也使用了Gensim包中的一个摘要器和我自己编写的另一个技术,使用 LDA 主题关键字来丰富sumy EdmundsonSummarizer。所有的例子都输出了对哈利·波特与魔法石第一章的五句总结。完整代码见我的 Jupyter 笔记本。还有一句忠告:不要太苛刻地评判结果。它们不太好……(文本摘要似乎在枯燥的非小说类作品上效果更好)

LexRank 摘要生成器

LexRank 是一种无监督的方法,其灵感来自谷歌 PageRank 算法背后的相同想法。作者说,它是“基于句子图形表示中特征向量中心性的概念”,使用“基于句内余弦相似性的连接矩阵”好的,简而言之,它找出文档中所有单词的相对重要性,并选择包含最多高分单词的句子。

"The Potters, that's right, that's what I heard —" "— yes, their son, Harry —" Mr. Dursley stopped dead.
Twelve times he clicked the Put-Outer, until the only lights left on the whole street were two tiny pinpricks in the distance, which were the eyes of the cat watching him.
Dumbledore slipped the Put-Outer back inside his cloak and set off down the street toward number four, where he sat down on the wall next to the cat.
"But I c-c-can't stand it — Lily an' James dead — an' poor little Harry off ter live with Muggles —" "Yes, yes, it's all very sad, but get a grip on yourself, Hagrid, or we'll be found," Professor McGonagall whispered, patting Hagrid gingerly on the arm as Dumbledore stepped over the low garden wall and walked to the front door.
Dumbledore turned and walked back down the street.

Luhn 摘要生成器

1958 年,在 IBM 研究院工作的汉斯·彼得·鲁恩发表了第一个文本摘要算法。Luhn 的算法是一种基于 TF-IDF 并查看高重要性单词之间非重要单词的“窗口大小”的简单方法。它还为出现在文档开头附近的句子分配较高的权重。

It was now reading the sign that said Privet Drive — no, looking at the sign; cats couldn't read maps or signs.
He didn't see the owls swooping past in broad daylight, though people down in the street did; they pointed and gazed open-mouthed as owl after owl sped overhead.
No one knows why, or how, but they're saying that when he couldn't kill Harry Potter, Voldemort's power somehow broke — and that's why he's gone."
"But I c-c-can't stand it — Lily an' James dead — an' poor little Harry off ter live with Muggles —" "Yes, yes, it's all very sad, but get a grip on yourself, Hagrid, or we'll be found," Professor McGonagall whispered, patting Hagrid gingerly on the arm as Dumbledore stepped over the low garden wall and walked to the front door.
G'night, Professor McGonagall — Professor Dumbledore, sir."

LSA 总结者

潜在语义分析是一种比较新的算法,结合了词频和奇异值分解。

He dashed back across the road, hurried up to his office, snapped at his secretary not to disturb him, seized his telephone, and had almost finished dialing his home number when he changed his mind.
It seemed that Professor McGonagall had reached the point she was most anxious to discuss, the real reason she had been waiting on a cold, hard wall all day, for neither as a cat nor as a woman had she fixed Dumbledore with such a piercing stare as she did now.
He looked simply too big to be allowed, and so wild — long tangles of bushy black hair and beard hid most of his face, he had hands the size of trash can lids, and his feet in their leather boots were like baby dolphins.
For a full minute the three of them stood and looked at the little bundle; Hagrid's shoulders shook, Professor McGonagall blinked furiously, and the twinkling light that usually shone from Dumbledore's eyes seemed to have gone out.
A breeze ruffled the neat hedges of Privet Drive, which lay silent and tidy under the inky sky, the very last place you would expect astonishing things to happen.

TextRank 摘要生成器

TextRank 是另一个基于 PageRank 思想的文本摘要器,也是与 LexRank 同时开发的,尽管是由不同的人群开发的。TextRank 比 LexRank 简单一点;虽然这两种算法非常相似,但 LexRank 应用启发式后处理步骤来删除高度重复的句子。

Mr. and Mrs. Dursley, of number four, Privet Drive, were proud to say that they were perfectly normal, thank you very much.
They were the last people you'd expect to be involved in anything strange or mysterious, because they just didn't hold with such nonsense.
Mr. Dursley was the director of a firm called Grunnings, which made drills.
He was a big, beefy man with hardly any neck, although he did have a very large mustache.
Mrs. Dursley was thin and blonde and had nearly twice the usual amount of neck, which came in very useful as she spent so much of her time craning over garden fences, spying on the neighbors.

埃德蒙森总结机

1969 年,Harold Edmundson 开发了以他名字命名的 summarizer 。埃德蒙森的算法和卢恩的算法是开创性的文本摘要技术之一。使 Edmundson summarizer 与众不同的是,它考虑到了“加分词”,即用户认为非常重要的词;“污名词”,重要性低甚至负面重要性的词;和“停用词”,它们与 NLP 处理中其他地方使用的相同。埃德蒙森建议使用文档标题中的单词作为奖励单词。使用章节标题作为奖励词,这是埃德蒙森输出:

The Dursleys shuddered to think what the neighbors would say if the Potters arrived in the street.
When Dudley had been put to bed, he went into the living room in time to catch the last report on the evening news: "And finally, bird-watchers everywhere have reported that the nation's owls have been behaving very unusually today.
Twelve times he clicked the Put-Outer, until the only lights left on the whole street were two tiny pinpricks in the distance, which were the eyes of the cat watching him.
Dumbledore slipped the Put-Outer back inside his cloak and set off down the street toward number four, where he sat down on the wall next to the cat.
He couldn't know that at this very moment, people meeting in secret all over the country were holding up their glasses and saying in hushed voices: "To Harry Potter — the boy who lived!"

我做的另一个添加是使用 LDA 提取主题关键词,然后将这些主题关键词作为额外的奖励词添加回去。经过这一修改,埃德蒙森的结果如下:

At half past eight, Mr. Dursley picked up his briefcase, pecked Mrs. Dursley on the cheek, and tried to kiss Dudley good-bye but missed, because Dudley was now having a tantrum and throwing his cereal at the walls.
When Dudley had been put to bed, he went into the living room in time to catch the last report on the evening news: "And finally, bird-watchers everywhere have reported that the nation's owls have been behaving very unusually today.
Twelve times he clicked the Put-Outer, until the only lights left on the whole street were two tiny pinpricks in the distance, which were the eyes of the cat watching him.
One small hand closed on the letter beside him and he slept on, not knowing he was special, not knowing he was famous, not knowing he would be woken in a few hours' time by Mrs. Dursley's scream as she opened the front door to put out the milk bottles, nor that he would spend the next few weeks being prodded and pinched by his cousin Dudley.
He couldn't know that at this very moment, people meeting in secret all over the country were holding up their glasses and saying in hushed voices: "To Harry Potter — the boy who lived!"

SumBasic Summarizer

SumBasic 算法于 2005 年开发,仅使用单词概率方法来确定句子的重要性。抱歉,但是它在这份文件上是相当糟糕的。

Mr. Dursley wondered.
"Harry.
The cat was still there.
"It certainly seems so," said Dumbledore.
"Yes," said Professor McGonagall.

哇哦。太可怕了。咳咳,继续…

KL 摘要生成器

KLSum 算法是一种贪婪的方法,只要 KL 散度(熵的一种度量)在减少,它就会向摘要中添加句子。

It was on the corner of the street that he noticed the first sign of something peculiar — a cat reading a map.
It grew steadily louder as they looked up and down the street for some sign of a headlight; it swelled to a roar as they both looked up at the sky — and a huge motorcycle fell out of the air and landed on the road in front of them.
He looked simply too big to be allowed, and so wild — long tangles of bushy black hair and beard hid most of his face, he had hands the size of trash can lids, and his feet in their leather boots were like baby dolphins.
"But I c-c-can't stand it — Lily an' James dead — an' poor little Harry off ter live with Muggles —" "Yes, yes, it's all very sad, but get a grip on yourself, Hagrid, or we'll be found," Professor McGonagall whispered, patting Hagrid gingerly on the arm as Dumbledore stepped over the low garden wall and walked to the front door.
He clicked it once, and twelve balls of light sped back to their street lamps so that Privet Drive glowed suddenly orange and he could make out a tabby cat slinking around the corner at the other end of the street.

缩减汇总器

归约算法是另一种基于图的模型,它根据句子的边相对于文档中其他句子的权重之和来对句子进行估值。该权重的计算方式与在 TexRank 模型中相同。

Mrs. Potter was Mrs. Dursley's sister, but they hadn't met for several years; in fact, Mrs. Dursley pretended she didn't have a sister, because her sister and her good-for-nothing husband were as unDursleyish as it was possible to be.
It seemed that Professor McGonagall had reached the point she was most anxious to discuss, the real reason she had been waiting on a cold, hard wall all day, for neither as a cat nor as a woman had she fixed Dumbledore with such a piercing stare as she did now.
Dumbledore took Harry in his arms and turned toward the Dursleys' house.
"But I c-c-can't stand it — Lily an' James dead — an' poor little Harry off ter live with Muggles —" "Yes, yes, it's all very sad, but get a grip on yourself, Hagrid, or we'll be found," Professor McGonagall whispered, patting Hagrid gingerly on the arm as Dumbledore stepped over the low garden wall and walked to the front door.
G'night, Professor McGonagall — Professor Dumbledore, sir."

Gensim 摘要生成器

Python 的 Gensim 包包含一个概要生成器,它是 TextRank 算法的修改。Gensim 的方法修改了句子相似度函数。

It was now reading the sign that said Privet Drive — no, looking at the sign; cats couldn't read maps or signs.
Dumbledore slipped the Put-Outer back inside his cloak and set off down the street toward number four, where he sat down on the wall next to the cat.
They're a kind of Muggle sweet I'm rather fond of." "No, thank you," said Professor McGonagall coldly, as though she didn't think this was the moment for lemon drops.
All this 'You-Know-Who' nonsense — for eleven years I have been trying to persuade people to call him by his proper name: Voldemort." Professor McGonagall flinched, but Dumbledore, who was unsticking two lemon drops, seemed not to notice.
Professor McGonagall shot a sharp look at Dumbledore and said, "The owls are nothing next to the rumors that are flying around.
It seemed that Professor McGonagall had reached the point she was most anxious to discuss, the real reason she had been waiting on a cold, hard wall all day, for neither as a cat nor as a woman had she fixed Dumbledore with such a piercing stare as she did now.

那么你认为哪种算法提供了最好的总结呢?在做出最终判断之前,有许多参数需要调整。一些可能在较短的摘要上表现更好,一些在较长的摘要上表现更好。写作风格可能会有所不同(我之前提到过,我总结非小说的运气比小说好)。但是如果你是哈利,带着回答某个问题的意图走进霍格沃茨的图书馆,却被“图书馆的庞大”所吓倒;几万本书;千架;数百个窄行”,那么只需点击几下鼠标,就可以得到一些摘要,这不会有什么坏处。要是巫师们使用这种愚蠢的麻瓜作品就好了…

带有亚马逊评论的文本摘要

原文:https://towardsdatascience.com/text-summarization-with-amazon-reviews-41801c2210b?source=collection_archive---------0-----------------------

With many products comes many reviews for training.

在本文中,我们将使用亚马逊的美食评论来构建一个可以总结文本的模型。具体来说,我们将使用评论的描述作为我们的输入数据,使用评论的标题作为我们的目标数据。要下载数据集并了解更多信息,您可以在 Kaggle 上找到它。如果你决定建立一个像我这样的模型,你会发现它能够生成一些非常好的摘要:

描述(1):咖啡味道好极了,价格也这么便宜!我强烈推荐这个给大家!

总结(1):大咖

描述(2):这是我买过的最难吃的奶酪!我再也不会买它了,希望你也不要买!

汇总(二):omg 毛总额

代码是用 Python 写的,TensorFlow 1.1 将是我们的深度学习库。如果您还没有使用 TensorFlow 1.1,您将会看到构建 seq2seq 模型与以前的版本有很大的不同。为了帮助生成一些很棒的摘要,我们将在编码层使用双向 RNN,在解码层使用注意力。我们将建立的模型类似于潘新和刘泳的模型,来自“用于文本摘要的具有注意力的序列到序列模型”( GitHub )。此外,相当多的信用应该给予 Jaemin Cho 教程( GitHub )。这是我使用 TensorFlow 1.1 的第一个项目,他的教程确实帮助我将代码整理得井井有条。

注意:和我的其他文章一样,我将只展示我作品的主要部分,并且我将删除大部分的评论以保持简短。你可以在我的Github上看到整个项目。

准备数据

首先,我将解释我是如何清理文本的:

  • 转换成小写。
  • 用更长的形式代替收缩。
  • 删除任何不需要的字符(这一步需要在替换缩写后完成,因为省略号将被删除。注意连字符前的反斜杠。如果没有这个斜杠,所有在连字符前后的字符之间的字符都将被删除。这可能会产生一些不必要的效果。举个例子,输入“a-d”会去掉 a,b,c,d)。
  • 停用词只会从描述中删除。它们与训练模型不太相关,因此通过移除它们,我们能够更快地训练模型,因为数据更少。它们将保留在摘要中,因为它们相当短,我希望它们听起来更像自然短语。
def clean_text(text, remove_stopwords = True):

    # Convert words to lower case
    text = text.lower()

    # Replace contractions with their longer forms 
    if True:
        text = text.split()
        new_text = []
        for word in text:
            if word in contractions:
                new_text.append(contractions[word])
            else:
                new_text.append(word)
        text = " ".join(new_text)

    # Format words and remove unwanted characters
    text = re.sub(r'https?:\/\/.*[\r\n]*', '', text,  
                  flags=re.MULTILINE)
    text = re.sub(r'\<a href', ' ', text)
    text = re.sub(r'&amp;', '', text) 
    text = re.sub(r'[_"\-;%()|+&=*%.,!?:#$@\[\]/]', ' ', text)
    text = re.sub(r'<br />', ' ', text)
    text = re.sub(r'\'', ' ', text)

    # Optionally, remove stop words
    if remove_stopwords:
        text = text.split()
        stops = set(stopwords.words("english"))
        text = [w for w in text if not w in stops]
        text = " ".join(text)return text

我们将使用预先训练的词向量来帮助提高我们的模型的性能。过去,我曾为此使用过 GloVe,但我发现了另一组单词嵌入,名为concept net number batch(CN)。基于其创造者的工作,它似乎优于 GloVe,这是有道理的,因为 CN 是包括 GloVe 在内的嵌入的集合。

embeddings_index = {}
with open('/Users/Dave/Desktop/Programming/numberbatch-en-17.02.txt', encoding='utf-8') as f:
    for line in f:
        values = line.split(' ')
        word = values[0]
        embedding = np.asarray(values[1:], dtype='float32')
        embeddings_index[word] = embedding

我们将把我们的词汇限制在 CN 中或者在我们的数据集中出现超过 20 次的单词。这将允许我们对每个单词都有非常好的嵌入,因为模型可以更好地理解单词在它们出现更多次时是如何相关的。

在构建您的word_embedding_matrix时,将它的“dtype”NP . zeros 设置为 float32 是非常重要的。默认值是 float64,但这不适用于 TensorFlow,因为它希望值限制为 _32。

embedding_dim = 300
nb_words = len(vocab_to_int)word_embedding_matrix = np.zeros((nb_words, embedding_dim), 
                                 dtype=np.float32)
for word, i in vocab_to_int.items():
    if word in embeddings_index:
        word_embedding_matrix[i] = embeddings_index[word]
    else:
        # If word not in CN, create a random embedding for it
        new_embedding = np.array(np.random.uniform(-1.0, 1.0, embedding_dim))
        embeddings_index[word] = new_embedding
        word_embedding_matrix[i] = new_embedding

为了帮助更快地训练模型,我们将根据描述的长度从最短到最长对评论进行排序。这将有助于每一批具有相似长度的描述,这将导致更少的填充,从而更少的计算。我们可以根据摘要的长度进行二次排序,但是这将导致大量的循环来组织数据。另外,我怀疑它会减少多少额外的填充,因为摘要相当短。

由于描述或摘要中的 UNK 令牌的数量,一些评论将不包括在内。如果描述中有超过 1 个 UNK 或摘要中有任何 UNKs,则不会使用该评论。这样做是为了确保我们用有意义的数据构建模型。只有不到 0.7%的词是 UNKs,所以不会有很多评论被删除。

for length in range(min(lengths_texts.counts), max_text_length): 
   for count, words in enumerate(int_summaries):
      if (len(int_summaries[count]) >= min_length and
          len(int_summaries[count]) <= max_summary_length and
          len(int_texts[count]) >= min_length and
          unk_counter(int_summaries[count]) <= unk_summary_limit and
          unk_counter(int_texts[count]) <= unk_text_limit and
          length == len(int_texts[count])
         ):
          sorted_summaries.append(int_summaries[count])
          sorted_texts.append(int_texts[count])

构建模型

我们需要为这个模型做一些占位符。大多数都是不言自明的,但是有几个需要明确的是,summary_lengthtext_length是一个批处理中每个句子的长度,max_summary_length是一个批处理中摘要的最大长度。

def model_inputs():

    input_data = tf.placeholder(tf.int32,[None, None], name='input')
    targets = tf.placeholder(tf.int32, [None, None], name='targets')
    lr = tf.placeholder(tf.float32, name='learning_rate')
    keep_prob = tf.placeholder(tf.float32, name='keep_prob')
    summary_length = tf.placeholder(tf.int32, (None,), 
                                    name='summary_length')
    max_summary_length = tf.reduce_max(summary_length, 
                                       name='max_dec_len')
    text_length = tf.placeholder(tf.int32, (None,),       
                                 name='text_length')return input_data, targets, lr, keep_prob, summary_length, 
       max_summary_length, text_length

为了构建我们的编码层,我们将使用 LSTMs 的双向 RNN。如果您使用过 TensorFlow 的早期版本,您会注意到这种布局与通常创建两个层的方式不同。通常,只需将两个 LSTMs 包装在 tf.contrib.rnn.MultiRNNCell 中,但这种方法不再可行。这是我发现的一个方法,尽管代码更多,但也同样有效。

一些需要注意的事项:

  • 你需要使用tf.variable_scope,这样你的变量可以在每一层重用。如果你真的不知道我在说什么,那就去看看 TensorFlow 的 word2vec 教程
  • 因为我们使用的是双向 RNN,所以需要将输出连接起来
  • 初始化器与潘和刘模型中的初始化器相同。
def encoding_layer(rnn_size, sequence_length, num_layers, 
                   rnn_inputs, keep_prob):

    for layer in range(num_layers):
        with tf.variable_scope('encoder_{}'.format(layer)):
            cell_fw = tf.contrib.rnn.LSTMCell(rnn_size,                                             
                  initializer=tf.random_uniform_initializer(-0.1, 
                                                            0.1,       
                                                            seed=2))
            cell_fw = tf.contrib.rnn.DropoutWrapper(cell_fw, 
                                      input_keep_prob = keep_prob) cell_bw = tf.contrib.rnn.LSTMCell(rnn_size,    
                  initializer=tf.random_uniform_initializer(-0.1,      
                                                            0.1, 
                                                            seed=2))
            cell_bw = tf.contrib.rnn.DropoutWrapper(cell_bw, 
                                      input_keep_prob = keep_prob) enc_output, enc_state = tf.nn.bidirectional_dynamic_rnn( 
                                       cell_fw, 
                                       cell_bw,                     
                                       rnn_inputs,
                                       sequence_length,
                                       dtype=tf.float32)

    enc_output = tf.concat(enc_output,2)

    return enc_output, enc_state

为了创建我们的训练和推理解码层,TF 1.1 中有一些新的函数..为你分解事情:

  • TrainingHelper从编码层读取整数序列。
  • BasicDecoder用解码单元和输出层处理序列,输出层是全连接层。initial_state来自我们的DynamicAttentionWrapperState,你很快就会看到。
  • dynamic_decode创建将用于培训的输出。
def training_decoding_layer(dec_embed_input, summary_length, 
                            dec_cell, initial_state, output_layer, 
                            vocab_size, max_summary_length):

    training_helper = tf.contrib.seq2seq.TrainingHelper( 
                         inputs=dec_embed_input,
                         sequence_length=summary_length,
                         time_major=False) training_decoder = tf.contrib.seq2seq.BasicDecoder(
                          dec_cell,
                          training_helper,
                          initial_state,
                          output_layer) training_logits, _ = tf.contrib.seq2seq.dynamic_decode(
                            training_decoder,
                            output_time_major=False,
                            impute_finished=True,
                            maximum_iterations=max_summary_length)
    return training_logits

如你所见,这与训练层非常相似。主要区别是GreedyEmbeddingHelper,它使用输出的 argmax(被视为 logits)并通过一个嵌入层传递结果以获得下一个输入。虽然是要求start_tokens,但是我们只有一个,<GO>

def inference_decoding_layer(embeddings, start_token, end_token,        
                             dec_cell, initial_state, output_layer,
                             max_summary_length, batch_size):

    start_tokens = tf.tile(tf.constant([start_token],  
                                       dtype=tf.int32),  
                                       [batch_size], 
                                       name='start_tokens')

    inference_helper = tf.contrib.seq2seq.GreedyEmbeddingHelper(  
                           embeddings,
                           start_tokens,
                           end_token)

    inference_decoder = tf.contrib.seq2seq.BasicDecoder(
                            dec_cell,
                            inference_helper,
                            initial_state,
                            output_layer)

    inference_logits, _ = tf.contrib.seq2seq.dynamic_decode(
                              inference_decoder,
                              output_time_major=False,
                              impute_finished=True,
                              maximum_iterations=max_summary_length)

    return inference_logits

虽然解码层可能看起来有点复杂,但它可以分为三个部分:解码细胞、注意力和获取我们的逻辑。

解码单元格:

  • 只是一个辍学的双层 LSTM。

注意:

  • 我用 Bhadanau 代替 Luong 作为我的注意力风格。使用它有助于模型更快地训练,并可以产生更好的结果(这里有一篇好论文,它比较了这两者以及 seq2seq 模型的许多方面)。
  • DynamicAttentionWrapper将注意力机制应用于我们的解码单元。
  • DynamicAttentionWrapperState创建我们用于训练和推理层的初始状态。由于我们在解码层使用双向 RNN,我们只能使用前向或后向状态。我选择向前,因为这是潘和刘选择的状态。
def decoding_layer(dec_embed_input, embeddings, enc_output,  
                   enc_state, vocab_size, text_length, 
                   summary_length, max_summary_length, rnn_size, 
                   vocab_to_int, keep_prob, batch_size, num_layers):

    for layer in range(num_layers):
        with tf.variable_scope('decoder_{}'.format(layer)):
            lstm = tf.contrib.rnn.LSTMCell(rnn_size,
                  initializer=tf.random_uniform_initializer(-0.1, 
                                                            0.1,     
                                                            seed=2))
            dec_cell = tf.contrib.rnn.DropoutWrapper(
                           lstm, 
                           input_keep_prob = keep_prob)

    output_layer = Dense(vocab_size,
           kernel_initializer = tf.truncated_normal_initializer(  
                                    mean=0.0, 
                                    stddev=0.1))

    attn_mech = tf.contrib.seq2seq.BahdanauAttention(
                      rnn_size,
                      enc_output,
                      text_length,
                      normalize=False,
                      name='BahdanauAttention') dec_cell = tf.contrib.seq2seq.DynamicAttentionWrapper(dec_cell,
                                                          attn_mech,
                                                          rnn_size)

    initial_state = tf.contrib.seq2seq.DynamicAttentionWrapperState(
                        enc_state[0],
                        _zero_state_tensors(rnn_size, 
                                            batch_size, 
                                            tf.float32)) 

    with tf.variable_scope("decode"):
        training_logits = training_decoding_layer(
                              dec_embed_input, 
                              summary_length, 
                              dec_cell, 
                              initial_state,
                              output_layer,
                              vocab_size, 
                              max_summary_length)

    with tf.variable_scope("decode", reuse=True):
        inference_logits = inference_decoding_layer(
                              embeddings,  
                              vocab_to_int['<GO>'], 
                              vocab_to_int['<EOS>'],
                              dec_cell, 
                              initial_state, 
                              output_layer,
                              max_summary_length,
                              batch_size) return training_logits, inference_logits

我们将使用我们之前创建的word_embedding_matrix作为我们的嵌入。编码和解码序列都将使用这些嵌入。

这个函数的其余部分主要是收集前面函数的输出,以便它们可以用于训练模型和生成新的摘要。

def seq2seq_model(input_data, target_data, keep_prob, text_length,  
                  summary_length, max_summary_length, 
                  vocab_size, rnn_size, num_layers, vocab_to_int,  
                  batch_size):

    embeddings = word_embedding_matrix

    enc_embed_input = tf.nn.embedding_lookup(embeddings, input_data)
    enc_output, enc_state = encoding_layer(rnn_size, 
                                           text_length, 
                                           num_layers,  
                                           enc_embed_input,  
                                           keep_prob)

    dec_input = process_encoding_input(target_data, 
                                       vocab_to_int, 
                                       batch_size)
    dec_embed_input = tf.nn.embedding_lookup(embeddings, dec_input)

    training_logits, inference_logits  = decoding_layer(
         dec_embed_input, 
         embeddings,
         enc_output,
         enc_state, 
         vocab_size, 
         text_length, 
         summary_length, 
         max_summary_length,
         rnn_size, 
         vocab_to_int, 
         keep_prob, 
         batch_size,
         num_layers)

    return training_logits, inference_logits

创建批处理是非常典型的。这里我唯一想指出的是创建了pad_summaries_lengthspad_texts_lengths。这些包含一批内的摘要/文本的长度,并将用作输入值:summary_lengthtext_length。我知道寻找这些输入值似乎是一种奇怪的方法,但这是我能找到的最好的/唯一的解决方案。

def get_batches(summaries, texts, batch_size): for batch_i in range(0, len(texts)//batch_size):
        start_i = batch_i * batch_size
        summaries_batch = summaries[start_i:start_i + batch_size]
        texts_batch = texts[start_i:start_i + batch_size]
        pad_summaries_batch = np.array(pad_sentence_batch(  
                                  summaries_batch))
        pad_texts_batch = np.array(pad_sentence_batch(texts_batch))

        pad_summaries_lengths = []
        for summary in pad_summaries_batch:
            pad_summaries_lengths.append(len(summary))

        pad_texts_lengths = []
        for text in pad_texts_batch:
            pad_texts_lengths.append(len(text))

        yield (pad_summaries_batch, 
               pad_texts_batch, 
               pad_summaries_lengths, 
               pad_texts_lengths)

这些是我用来训练这个模型的超参数。我不认为它们有什么太令人兴奋的,它们很标准。《100 个纪元》可能已经引起了你的注意。我使用这个较大的值,以便我的模型得到充分的训练,并且只在早期停止(当损失停止减少时)时停止训练。

epochs = 100
batch_size = 64
rnn_size = 256
num_layers = 2
learning_rate = 0.01
keep_probability = 0.75

我将跳过构建图表和如何训练模型。有一些很好的东西,比如我如何合并学习率衰减和早期停止,但我认为不值得在这里占用空间(如果你感兴趣,请查看我的 GitHub )。

生成您自己的摘要

您可以创建自己的描述,也可以使用数据集中的描述作为输入数据。使用你自己的描述会更有趣一些,因为你可以很有创意地去看看模型创建了什么样的摘要。下面的函数将使用我之前描述的clean_text函数为您的模型准备描述。

def text_to_seq(text): text = clean_text(text)
    return [vocab_to_int.get(word, vocab_to_int['<UNK>']) for word in text.split()]

我们需要加载相当多的张量来生成新的摘要。尽管如此,这并不太难。运行会话时,input_datatext_length需要乘以batch_size以匹配模型的输入参数。您可以将summary_length设置为您喜欢的任何值,但是我决定将其设置为随机的,以保持事情的精彩。要记住的主要事情是将其保持在模型训练的摘要长度范围内,即 2–13。

input_sentence = "*This is the worst cheese that I have ever bought! I will never buy it again and I hope you won’t either!*"
text = text_to_seq(input_sentence)#random = np.random.randint(0,len(clean_texts))
#input_sentence = clean_texts[random]
#text = text_to_seq(clean_texts[random])checkpoint = "./best_model.ckpt"loaded_graph = tf.Graph()
with tf.Session(graph=loaded_graph) as sess:

    loader = tf.train.import_meta_graph(checkpoint + '.meta')
    loader.restore(sess, checkpoint) input_data = loaded_graph.get_tensor_by_name('input:0')
    logits = loaded_graph.get_tensor_by_name('predictions:0')
    text_length = loaded_graph.get_tensor_by_name('text_length:0')
    summary_length =  
         loaded_graph.get_tensor_by_name('summary_length:0')
    keep_prob = loaded_graph.get_tensor_by_name('keep_prob:0')

    answer_logits = sess.run(logits, {
         input_data: [text]*batch_size, 
         summary_length: [np.random.randint(4,8)], 
         text_length: [len(text)]*batch_size,
         keep_prob: 1.0})[0]# Remove the padding from the tweet
pad = vocab_to_int["<PAD>"]print('\nOriginal Text:', input_sentence)print('Text')
print('Word Ids:    {}'.format([i for i in text if i != pad]))
print('Input Words: {}'.format([int_to_vocab[i] for 
                                 i in text if i != pad]))print('\nSummary')
print('Word Ids: {}'.format([i for i in answer_logits if i != pad]))
print('Response Words: {}'.format([int_to_vocab[i] for i in 
                                  answer_logits if i != pad]))

最后要注意的一点是,我只用 50,000 条评论的子集来训练我的模型。由于我使用的是 MacBook Pro,如果我使用所有的数据,我可能需要几天时间来训练这个模型。只要有可能,我就会使用 FloydHub 上的 GPU 来训练我的模型。如果您有时间,您可以将数据和 ConceptNet Numberbatch 上传到 FloydHub,然后用所有评论训练模型。让我知道怎么走!

这个项目到此为止!我希望你觉得它很有趣,并且学到了一些东西。尽管这个模型执行得相当好,并且只有一个数据子集,但是尝试扩展这个体系结构来提高生成的摘要的质量是很好的。这篇论文同时使用了 RNNs 和 CNN 来预测情绪,也许在这里也可以。如果有人尝试这样做,如果你能在下面的评论区贴一个链接就太好了,因为我会很高兴看到它。

感谢您的阅读,如果您有任何问题或意见,请告诉我!干杯!

在 Python 中使用 TFIDF 处理文本

原文:https://towardsdatascience.com/tfidf-for-piece-of-text-in-python-43feccaa74f8?source=collection_archive---------1-----------------------

继之前的 TFIDF post 之后,我们现在将在一段文本上手动实现 TFIDF、

我们将计算一段文本中每个术语的 TFIDF 分数。文本将被符号化成句子,然后每个句子被认为是一个文档。

从导入所需的库开始:

接下来,获取一些随机文本进行测试。

一个非常简单的预处理功能:

现在,创建文档的函数:

以下函数是计算 TF 和 IDF 分数的先决条件:

获取 TF 和 IDF 分数的函数:

最后,

我们终于可以开始处理输入文本了。文本被符号化成句子并清除特殊字符。然后它被制作成一个名为 doc_info 的文档列表。

清理后的句子text _ sents _ clean被传入create _ freq _ dict函数。

doc_infofreq dict _ list*:的输出*

doc _ infofreq dict _ list作为输入计算 TF 和 IDF 得分:****

**********

现在,通过将 TF 和 IDF 分数输入到函数 computeTFIDF 中来获得 TFIDF 分数:

我们可以清楚地看到,出现一次的单词比出现多次的单词具有更高的 TFIDF 得分,不仅仅是在同一个句子中,而是跨所有输入句子。

找出算法实际上是如何工作的总是比直接实现自动化版本更好。

Tflearn:在 Tensorflow 中使用 2x2x1 前馈神经网络求解 XOR

原文:https://towardsdatascience.com/tflearn-soving-xor-with-a-2x2x1-feed-forward-neural-network-6c07d88689ed?source=collection_archive---------2-----------------------

关于如何在 python tflearn 中仅使用 12 行代码训练 2x2x1 前馈神经网络来解决 XOR 问题的简单指南 python tflearn 是基于 Tensorflow 构建的深度学习库。

我们的网络的目标是训练一个网络接收两个布尔输入,并且仅当一个输入为真而另一个为假时才返回真。

包装

**from** **tflearn** **import** DNN
**from** **tflearn.layers.core** **import** input_data, dropout, fully_connected **from** **tflearn.layers.estimator** **import** regression

输入数据

我们将输入数据 X 和预期结果 Y 定义为列表的列表。由于神经网络本质上只处理数值,我们将把布尔表达式转换成数字,这样 True=1False=0

X = [[0,0], [0,1], [1,0], [1,1]]
Y = [[0], [1], [1], [0]]

模型

我们定义输入、隐藏和输出层。
语法再简单不过了——对输入层使用 input_layer() ,对后续层使用full _ connected()

input_layer = input_data(shape=[**None**, 2])
hidden_layer = fully_connected(input_layer , 2, activation='tanh') 
output_layer = fully_connected(hidden_layer, 1, activation='tanh') 

为什么形状的输入是**【无,2】?网络一次馈入多个学习实例。由于我们在每个学习示例中使用了两个特征**,并且有四个示例,所以我们的数据是形状的[4,2]。但是有时我们喜欢定义我们的网络,这样它可以接收任意数量的训练样本。我们可以将 None 用于任意数量的训练示例,并将输入形状定义为【None,number_of_features,…】****

regression = regression(output_layer , optimizer='sgd', loss='binary_crossentropy', learning_rate=5)
model = DNN(regression)

在上面的代码块中,我们定义了将执行反向传播和训练网络的回归变量。我们将使用随机梯度下降作为优化方法,使用二元交叉熵作为损失函数。

最后,我们简单地使用 DNN()在 ftlearn 中定义我们的(几乎)深度神经网络。

接下来,我们需要训练模型。在此过程中,回归器将尝试优化损失函数。训练的最终结果只是连接层节点的权重(和偏差)。

培养

model.fit(X, Y, n_epoch=5000, show_metric=**True**)

运行 model.fit()后,Tensorflow 会馈送输入数据 5000 次,并尝试拟合模型。

如果你的输出看起来像这样(以小损耗和高精度为目标),

>>> Training Step: 5048  | total loss: **0.31394** | time: 0.002s
| SGD | epoch: 5048 | loss: 0.31394 - binary_acc: 0.9994 -- iter: 4/4

你的模型有 0.999%的准确性,这意味着它成功地学会了解决问题。

请注意,您的回归变量不会总是产生相同的结果。它甚至可能无法学会正确解决我们的问题。这是因为网络权重是每次随机初始化的。神经网络也需要大量的训练数据来使反向传播正常工作。因此,我们的代码非常依赖于权重的初始化方式。

预言;预测;预告

为了检查我们的模型是否真的有效,让我们预测所有可能的组合,并使用简单的列表理解将输出转换为布尔值

[i[0] > 0 **for** i **in** model.predict(X)]
>>> [False, True, True, False]

太好了!我们的模型有效。

但是模型使用了什么逻辑来解决异或问题呢?让我们检查引擎盖下面。

重量分析

与 AND 和 OR 不同, XOR 的输出不是线性可分的
因此,我们需要引入另一个隐藏层来解决它。原来,隐藏层中的每个节点都代表一种更简单的线性可分逻辑运算(AND、OR、NAND、…),输出层将充当由前一层的输出提供的另一种逻辑运算。

如果我们仅限于使用简单的逻辑运算,我们可以将 XOR 定义为

XOR(X1,X2) = AND(OR(X1,X2),NAND(X1,X2))

为了理解我们的网络使用什么逻辑来得出结果,我们需要分析它的权重(和偏差)。
我们用 model.get_weights(layer。W) 获取权重向量和 model.get_weights(层。W) 得到偏差向量。

print(model.get_weights(hidden_layer.W), model.get_weights(hidden_layer.b))
print(model.get_weights(output_layer.W), model.get_weights(output_layer.b))>>> [[ 3.86708593 -3.11288071] [ 3.87053323 -3.1126008 ]]
    [-1.82562542  4.58438063]
>>> [[ 5.19325304]
    [-4.87336922]

下图显示了各个权重属于哪个节点(为简单起见,数字四舍五入)

X1 X2 是我们的输入节点。 a1 a2 是我们隐藏层中的节点,而 O 是输出节点。 B1 B2 是偏差。

这告诉我们什么?嗯,还没什么进展。但是通过计算单个输入的节点激活,我们可以看到特定节点的行为。
我们正在使用公式( ×代表矩阵乘法):

激活= tanh(输入×权重+偏差)

注意,我们使用*tanh()表示激活将在[-1,1] 范围内。*

Rounded node activations for individual input combinations for acquired XOR neural network

  • a1 当输入中至少有一个 1 时为真(1)。 a1 节点因此代表逻辑运算
  • a2 始终为真,除非两个输入都为真。 a2 节点因此代表逻辑运算
  • ****输出节点只有在 a1a2 都为真时才为真。

输出节点可以重写为:

O(X1,X2) =(a1(X1,X2),a2(X1,X2))=(OR(X1,X2),NAND(X1,X2))**

因此,经过训练的网络是 OR(X1,X2)和 NAND(X1,X2)的 AND 运算

请注意,由于随机权重初始化,结果会有所不同,这意味着每次训练模型时,您的权重可能会有所不同。

完整的来源可以在这里找到:

2018 年 CVPR 十大最酷论文

原文:https://towardsdatascience.com/the-10-coolest-papers-from-cvpr-2018-11cb48585a49?source=collection_archive---------2-----------------------

想获得灵感?快来加入我的 超级行情快讯 。😎

2018 年计算机视觉和模式识别大会(CVPR)于上周在美国盐湖城举行。这是计算机视觉领域的世界顶级会议。今年,CVPR 收到了 3300 份主要会议论文,接受了 979 份。超过 6500 人参加了会议,好家伙,这是史诗!6500 人挤进了这个房间:

CVPR 2018 Grand Ballroom

每年,CVPR 都会带来伟大的人和他们伟大的研究;总有新的东西可以看和学。当然,总会有一些论文发表新的突破性成果,并为该领域带来一些伟大的新知识。这些论文通常会在计算机视觉的许多子领域中塑造新的艺术状态。

然而最近,真正有趣的是那些开箱即用的和创造性的文件!随着最近计算机视觉深度学习的热潮,我们仍然在发现所有的可能性。许多论文将呈现深度网络在视觉中的全新应用。它们可能不是最基本的突破性作品,但它们看起来很有趣,并为该领域提供了一个创造性和启发性的视角,往往会从它们呈现的新角度引发新的想法。总而言之,他们很酷!

在这里,我将向你展示我认为 2018 年 CVPR 最酷的 10 篇论文。我们将看到最近才通过使用深度网络成为可能的新应用,以及其他提供如何使用它们的新方法的应用。你可能会在这个过程中获得一些新的想法;).不多说了,我们开始吧!

用合成数据训练深度网络:通过领域随机化弥合现实差距

这篇论文来自英伟达,并全力使用合成数据来训练卷积神经网络(CNN)。他们为虚幻引擎 4 创建了一个插件,可以生成合成的训练数据。真正的关键是它们随机化了训练数据可能具有的许多变量,包括:

  • 对象的数量和类型
  • 干扰物的数量、类型、颜色和比例
  • 感兴趣的物体上的纹理和背景照片
  • 虚拟摄像机相对于场景的位置
  • 摄像机相对于场景的角度
  • 点光源的数量和位置

他们展示了一些非常有希望的结果,证明了用合成数据进行预训练的有效性;这是以前从未达到过的结果。如果您缺少这一重要资源,它可能会对如何生成和使用合成数据有所启发。

Figure from the paper: Training Deep Networks with Synthetic Data: Bridging the Reality Gap by Domain Randomization

WESPE:用于数码相机的弱监督照片增强器

这个很聪明!他们训练一个生成对抗网络(GAN)来自动增强照片的美感。酷的地方在于它是弱监督;你不需要输入输出图像对!训练网络所需的只是一组“好”的图像(用于输出地面实况)和一组要增强的“坏”的图像(用于输入图像)。然后,GAN 被训练以生成输入的美学增强版本,通常会大大增强图像的颜色和对比度。

它使用起来既快速又简单,因为你不需要精确的图像对,最后你会得到一个“通用的”图像增强器。我也喜欢这是一种弱监督的方法。无监督学习似乎很遥远。但对于计算机视觉的许多子领域来说,弱监管似乎是一个有前途和有利可图的方向。

Figure from the paper: WESPE: Weakly Supervised Photo Enhancer for Digital Cameras

用多边形高效交互标注分割数据集——RNN++

深度网络工作得如此之好的主要原因之一是大型和完全注释的数据集的可用性。然而,对于许多计算机视觉任务来说,获取这样的数据既耗时又昂贵。特别地,分割数据需要对图像中的每个像素进行**的分类标记。**可以想象…..对于大型数据集来说,这可能需要很长时间!

多边形-RNN++允许你在图像中的每个物体周围设置粗糙的多边形点,然后网络会自动生成分割标注!该论文表明,这种方法实际上推广得相当好,可以用来为分割任务创建快速而简单的注释!

Figure from the paper: Efficient Interactive Annotation of Segmentation Datasets with Polygon-RNN++

根据时尚图片制作胶囊衣柜

今天我该穿什么?如果每天早上有人或事能替你回答这个问题,那不是很好吗?这样你就不用回答了。那就跟胶囊衣柜打个招呼吧!

在本文中,作者设计了一个模型,给定一个候选服装和配饰的库存,可以组装一个最小的项目集,提供最大的混搭服装。它基本上是使用目标函数训练的,这些目标函数旨在捕捉视觉兼容性、多功能性和用户特定偏好的关键要素。有了衣柜胶囊,你就能轻松从衣柜里找到最适合你品味的衣服!

Figure from the paper: Creating Capsule Wardrobes from Fashion Images

Super SloMo:用于视频插值的多个中间帧的高质量估计

有没有想过用超慢动作拍摄超酷的东西?那就看看 Nvdia 的超级 SloMo 吧!他们的 CNN 估计中间视频帧,能够将标准的 30fps 视频转换成 240fps 的令人敬畏的慢动作!该模型估计帧之间的光流,并使用它来干净地插值视频帧,以便慢动作视频看起来清晰锐利。

A bullet going through an egg, super SloMo!

谁把狗放出来了?从视觉数据中模拟狗的行为

可能是有史以来最酷的研究论文名称!这里的想法是试图模拟狗的思想和行为。作者在狗的四肢上安装了许多传感器来收集它的运动数据;他们还在狗的头上安装了一个摄像头,以获得与狗相同的第一人称视角。一组 CNN 特征提取器用于从视频帧中获取图像特征,然后与传感器数据一起传递给一组 LSTMs,以学习和预测狗的动作。非常新的和创造性的应用,以及独特的任务设计和执行方式,使得这篇论文非常值得一读!希望它可以通过我们收集数据和应用深度学习技术的方式来激发未来的研究创造力。

Figure from the paper: Who Let The Dogs Out? Modeling Dog Behavior From Visual Data

学习分割每一个事物

在过去的几年里,来自何的团队(之前在微软研究院,现在在人工智能研究院)有很多伟大的计算机视觉研究。他们论文的伟大之处在于创造性和简单性的结合。ResNets 和 Mask R-CNN 都不是最疯狂或最复杂的研究想法。它们简单易行,但在实践中非常有效。这里的这个也没什么不同。

学习分割每样东西是 Mask R-CNN 的扩展,它赋予网络从训练期间看不到的类中分割对象的能力!这对于快速、廉价地获取数据集的注释非常有用。由于在这样的环境中可能有许多看不见的对象类别,所以它能够获得看不见的对象类别的一些通常很强的基线分段的事实对于能够在野外部署这样的分段网络是至关重要的。总的来说,这无疑是朝着正确的方向迈出的一步,让我们能够思考如何最大限度地利用我们的深度网络模型。

Figure from the paper: Learning to Segment Every Thing

你桌面上的足球

这篇论文应该赢得最佳时机奖,因为它正好在国际足联世界杯开幕时出版!这确实是计算机视觉在 CVPR 的“更酷”的应用之一。简而言之,作者训练了一个模型,给定一个足球比赛的视频,可以输出该比赛的动态 3D 重建。这意味着你可以使用增强现实在任何地方观看它!

真正聪明的部分是结合使用许多不同类型的信息。使用视频游戏数据来训练网络,从视频游戏数据中可以相当容易地提取 3D 网格。在测试时,提取玩家的边界框、姿态和轨迹(跨多个帧),以便分割玩家。这些 3D 片段可以很容易地投影到任何平面上(在这种情况下,您可以创建任何虚拟足球场!)因为在 AR 看足球赛!在我看来,这是一种使用合成数据进行训练的聪明方式。无论如何,这是一个有趣的应用程序!

Figure from the paper: Soccer on Your Tabletop

布局网络:从单个 RGB 图像重建 3D 房间布局

这是一个计算机视觉应用,我们很多人可能都曾经想到过:用相机拍下某样东西的照片,然后用数字 3D 重建它。这正是本文的目的,特别是三维重建房间。他们使用全景图像作为输入,以便获得房间的全景。输出是一个三维重建的房间布局,具有相当好的准确性!该模型足够强大,可以推广到不同形状的房间,并包含许多不同的家具。这是一个有趣的应用程序,你不会看到太多的研究人员在计算机视觉领域工作,所以很高兴看到。

Figure from the paper: LayoutNet: Reconstructing the 3D Room Layout from a Single RGB Image

学习可扩展图像识别的可转移架构

最后但并非最不重要的是许多人认为是深度学习的未来:神经架构搜索(NAS)。NAS 背后的基本思想是,我们可以使用另一个网络来“搜索”最佳模型结构,而不是手动设计网络体系结构。搜索将巧妙地基于一个奖励函数,该函数奖励在数据集上表现良好的模型。作者在论文中表明,这种架构可以实现比手动设计的模型更好的准确性。这在未来将是巨大的,特别是对于设计特定的应用,因为我们必须真正关注的是设计一个好的 NAS 算法,而不是为我们的特定应用手动设计特定的网络。一个设计良好的 NAS 算法足够灵活,可以为任何特定的任务找到一个好的网络。

Figure from the paper: Learning Transferable Architectures for Scalable Image Recognition

喜欢学习?

在 twitter 上关注我,我会在这里发布所有最新最棒的人工智能、技术和科学!也在 LinkedIn 上和我联系吧!

13 x 29 项目——观察印度对同性恋合法化的反应

原文:https://towardsdatascience.com/the-13-x-29-project-visualizing-how-india-reacted-to-decriminalization-of-homosexuality-8d105f828748?source=collection_archive---------8-----------------------

这篇文章是 13x29 项目 的姊妹篇——最好在桌面上观看。完成这个项目的最好方法是首先阅读本文的介绍性部分,然后玩交互式网站。

2018 年 9 月 6 日,印度向未来迈出了大胆的一步。《土地法》宣布第 377 条的部分内容为非法,从而使成年人之间双方同意的身体关系合法化,无论其性别如何。

Celebrations post Section 377 Vedict | Credits: REUTERS/Francis Mascarenhas

人们没有庆祝做爱的自由。人们庆祝不用每天醒着的时候都想着自己是罪犯。这个判决花了 158 年,数以千计勇敢的活动家不屈不挠,五个有远见的法官的智慧才得以实现。

由于这一决定,今天世界上 75%的人生活在同性恋不是犯罪的国家。其他几个国家将会效仿印度改变他们的反同性恋法,印度未来的艾伦·图林斯和蒂姆·库克将不会为了克服耻辱而结束自己的生命。人们可以预料,这样一个历史性的判决将会得到社会各界的强烈反应。

为什么这么安静?

判决后的三天,我一直粘在我的推特上。我的心膨胀阅读推文和转发。

彩虹和骄傲溅满了我的推特。但是后来,我注意到一些奇怪的事情。我看到的所有推特都是娱乐圈的人。我没有看到商界人士、政治领袖或运动员对这一判决发表任何意见。

例如,当美国在全国各地将同性婚姻合法化时,这就是白宫庆祝的方式。

令我失望的是,判决被藏在床底下,没有以应有的方式庆祝。

其次,在关注了一些宝莱坞八卦之后(感谢 Koffee 和 Karan),我知道在宝莱坞圈子里谁是谁的朋友。似乎只有一群亲密的“朋友”在推特上谈论判决,而其他“团体”都很安静。网络科学表明,吸烟、肥胖、投票模式等许多特征会像疾病一样通过网络传播。LGBTQ-思想开放也能通过网络传播吗?在比其他群体更亲 LGBTQ 的群体中是否存在某些子网络?

这让我心中的夏洛克兴奋起来。这有什么规律吗?谁真的对判决发表了评论,这种反应如何因人的职业而异?

确认了 377 名嫌疑人

在不做太多假设的情况下,纯粹基于好奇心,我决定分析 13 个不同的领域,每个领域有 29 名有代表性的影响者,总共 377 人。我最初打算探索的领域是政治、娱乐、商业和体育。然后,我将这些字段细分为 13 组,如下所示:

  1. 政府:首相、内阁部长和工会部长
  2. 反对派 —来自国会、尼共(毛主义)、AAP 的领导人
  3. —29 个州的首席部长
  4. 信仰 —宗教领袖、组织、活动家
  5. 新闻业 —记者、编辑、作家
  6. 法律 —律师
  7. 体育 —板球运动员,奥运会奖牌获得者
  8. 宝莱坞——来自印度电影业的人们
  9. 音乐 —歌手
  10. 创意 —舞蹈指导、时装设计师、作家、音乐总监
  11. YouTube——在印度 YouTube 上很受欢迎
  12. 企业家精神——初创公司创始人、风投
  13. 福布斯 30 位 30 岁以下的人——福布斯 30 位 30 岁以下的人。

你可以在这里看看样本集中包括的人:https://twitter.com/iashris/lists

我的取样基于关注者的数量——一个衡量一个人影响力的指标。对于有相似追随者的人,我随机选择了一些人,我承认这并没有使抽样误差为零,但仍然给出了一个大的图景。

他们说了什么?

我对判决时人们谈论的话题很感兴趣,所以我决定选择 9 月 5 日午夜到 9 月 7 日午夜这段时间作为我的分析窗口——以 6 日判决日为中心。

我使用 Tweepy 库编写了一个 Python 脚本,获取了这三天里这 377 个人发布的所有 tweets。Twitter 没有 API 来访问日期之间的推文,所以我写了一个脚本,递归地将 start_date 推回,直到获取所需的推文。除了推文,我还提取了关注者的数量、他们的个人资料图片、使用的标签和他们的转发。我做了一个关键词分析,将推文分为“目标”和“非目标”——取决于推文是否包含标签或文字,如 377骄傲lgbt最高法院爱就是爱。

A JSON file was obtained for every person with their tweets and hashtags

将群体网络化

我不仅对谁在说什么感兴趣,还对说类似话的人之间是否有某种联系感兴趣。为此,我必须知道每个群体中的人是如何相互联系的。

我在寻找的数据是——谁跟踪谁。Twitter 通过他们的 show friendship API 提供这些信息。我获得了一组人的所有可能组合的配对,并获得了他们的“友谊”数据。

CSV containing who-follows-whom data

可视化网络和热点

一旦我有了这两个部分——下一步就是想象它。有趣的部分开始了!我用这个神奇的力导向算法库触发了一个基于物理的模拟,它把那些互相跟随的人聚集在一起,把那些和其他人没有联系的人隔离开来。

为了指出那些对判决做出反应的人——让我们称他们为“反应者”——我给了他们一个彩虹标签,让他们与众不同。那些没有反应的人——让我们称他们为“非反应者”——我把他们的缩略图变小并进行灰度化。

安恩和……鼓点!

The Opposition Network

每条灰线都意味着 A 和 B 之间有某种联系——A 跟着 B,B 跟着 A,或者两者都跟着对方。您可以通过将鼠标悬停在图像上来准确了解这种关系。

紫色线表示 A 和 B 相互跟随。蓝/粉线是单向的,用指向被跟踪者的箭头指示方向。根据经验,联系最紧密的人占据了原力导向可视化的中心——所以沙希·塔鲁尔,国会议员,桑杰·尼鲁帕姆似乎是这个网络中联系最紧密的人。

嗯..那又怎样?

好问题。看起来很漂亮,但是这对我们有什么帮助呢?我们需要一种方法来比较反应堆和非反应堆的结合程度。

聚类系数

在图论中,聚集系数是对图中节点聚集程度的度量。有一个令人厌烦的技术定义,但我会用简单的术语来分解它。

考虑一下你的朋友圈。假设我有三个朋友——阿努拉格、普雷娜和科莫利卡。

你所有的朋友都是彼此的朋友。只有 Anurag 和 Prerna 是彼此的朋友。你可能不想把 Komolika 介绍给 Anurag 和 Prerna。

Your Friend Circle

现在,你的人际网络中可以存在的友谊总数是多少?让我们看看。anu rag-komo lika,anu rag-Prerna 和 Prerna-komo lika。

所以总共有三种可能的友谊,其中只有一种是真实的→阿努拉格和普雷那。所以给你朋友圈的聚类系数是 1/3 或者 0.33。

因此,聚类系数简单来说就是你的朋友中朋友对的数量与可能的朋友对总数的比率。

CC =你朋友中实际友谊的数量/可能友谊的总数(ⁿC₂)

如果 Komolika 不知何故坚持在难近母 Pujo 和一个新的友谊培养期间会见 Anurag,你的 CC 将更新到 2/3 (0.66)。

Komolika gets to know Anurag

Anurag 和 Komolika 花时间在一起,这使得 Prerna 因为你把 Komolika 介绍给 Anurag 而生气,因此她结束了和你的友谊。这是增加了你的聚类系数还是减少了?

Prerna caught up in the Kasauti of Life

这实际上将你的 CC 提高到 1,因为现在你所有的(剩余的)朋友——anu rag 和 Komolika 都是彼此的朋友。所以可能= 1,总= 1。

网络的 CC 定义为其单个节点的平均值。在 Prerna 结束和你的友谊后的最后一个场景中,你能计算出你朋友圈的平均 CC 吗?

对你来说,CC 是 1。
对于 Komolika,CC 也是 1。
对于 Anurag,CC 是 0.33
对于 Prerna,CC 是 0,因为她甚至没有两个朋友。

因此,您的网络的平均 CC 为 2.33/4 = 0.583 = 58.3%

分析

https://13x29.github.io

所有的东西都缝合在一起,界面看起来很好。在右侧边栏中,有针对整个网络以及反应堆和非反应堆计算的 CC。网络发布的关于判决的推文会自动加载到屏幕底部。

对于反对派网络,平均 CC 为 51.76%,这是相当高的。裁决反应堆的 CC 甚至更高!70%,而非反应器的 CC 为 19%。这直接表明,反应堆比非反应堆结合得更好,实际上是反对派中一个小的紧密联系的子集,实际上支持这一裁决。

现在我们知道了如何解释这些值,让我们看一下最终产品中的一些类别。

一朵花=一个愿望

每个类别都由一个花瓶代表。对于每一个对判决持肯定态度的人来说,花瓶里都有一朵花。

结果

最终结果可以在这里查看— Project 13 x 29 。该项目最好在桌面或平板电脑上观看。

新闻工作

The Journalism Network

新闻界对判决充满了希望,多达 25 人说了一些积极的话——花瓶里的大花束就说明了这一点。

还要注意这个网络的连接有多紧密。平均 CC 为 55.3%,但非反应器的 CC 为 0%,表明非反应器之间没有结合。这表明新闻网络有强烈的自由主义倾向,而不是像政府那样,我发现针掉在地上保持沉默,因此花瓶里没有花。

总结

以下是我从这个项目中得出的推论:

  1. 反应当然取决于职业。虽然法律和新闻等领域有近 85%的人在网络上表达积极的观点,但政府、州和体育等领域只有不到 10%的人对判决做出反应。职业确实会影响你对世界的看法。
  2. 不仅你的职业很重要,你在职业网络中的位置也很重要。总的来说,宝莱坞、反对派、法律和新闻业在群体内部有一个更小、联系更紧密的子网络,比其他群体更亲 LGBTQ。
  3. 像创造力、福布斯 30Under30 等不太集中的领域没有很好的定义,但来自不同领域的人的聚集具有最低的聚类系数,因此没有支持或反对 LGBTQ 的具体网络。
  4. 创业网络实际上有一个紧密编织的网络,它没有对判决作出回应。表现出任何反应的都是这群人中的局外人。
  5. 令人惊讶的是,许多宗教领袖,如古儒吉斯瓦拉吉玛首席执行官萨德古鲁,都对判决持积极态度。Faith 是唯一一个对判决有负面反应的网络。

那都是乡亲们!

我被网络科学迷住了,我正在进行一些实际的项目,看看网络能揭示什么样的隐藏模式。如果你有借助网络探索某个社会问题的想法,请给我写信。我一直在寻找令人敬畏的合作。

我想把这个项目献给我们的律师 Menaka Guruswamy、Arundhati Katju 和 Pritha Srikumar,他们代表了来自印度不同 IIT 的 20 名请愿者,在这个历史性的判决中发挥了很小的作用。成为这 20 个人中的一员是我的荣幸。

我将留给你这个由星金制作的美丽视频——爱有各种颜色。爱就是爱。

源代码?

如果你喜欢我的工作,考虑用 请我喝咖啡 来支持我的工作。该网站托管在Github——这意味着它是完全开源的。请随意查看代码,如果有问题,请告诉我。

2018 年 25 个最佳数据可视化

原文:https://towardsdatascience.com/the-25-best-data-visualizations-of-2018-93643f0aad04?source=collection_archive---------6-----------------------

美化数据的艺术正在席卷全球。数据可视化专家和艺术家每天都在数据设计领域创造惊人的东西。

数据可视化并不是一个新现象。即使在它变得“酷”之前,数据可视化也是许多不同领域中可视化数据的重要工具。

从技术上来说,数据可视化包括所有的东西数据艺术,信息图表和数据仪表板。创造力的范围确实是无穷无尽的,我们很高兴看到它将如何继续发展。

过去几年发生的事情是,数据和数据分析呈现出新的特点。数据和信息现在是创造美丽视觉效果的工具。过去简单的图表和散点图现在变成了复杂而有创意的数据艺术品——有些漂亮到可以挂在墙上。

为了纪念世界各地所有做出惊人数据可视化的艺术家和设计师,这里收集了 2018 年最佳数据可视化。我们包括了一些 2017 年和更早的作品,因为它们太好了,不能错过。

2018 年最佳数据可视化

布鲁斯·斯普林斯汀历史

By Adam McCann

亚当·麦肯的数据可视化技术将布鲁斯·斯普林斯汀录制的每一首歌都可视化了。利用 Spotify 和其他书面来源的数据,他能够描绘出每首歌的每一个方面。专辑和歌曲是按流行程度排列的。每个设计细节都代表了专辑的一个方面。这个主题让人想起有种子、叶子和花的植物。它包括一个如何阅读的弹出窗口,以便于理解。

Hello Sun 应用程序

By Small Multiples

你好太阳应用程序创建的小倍数,是一个生活数据即你的手机。主仪表盘显示了世界上许多城市的太阳和月亮在天空中的运动。这种运动被描绘在圆形的天空地图上,随着太阳的升起和落下而改变颜色。每个城市都有一个主要的地标,只有当太阳产生阴影时才能看到。该应用程序还让用户通过 GPS 坐标了解 sun 在世界任何地方的行为。这样他们就可以规划出一个蔬菜园,或者知道他们想租的公寓下午是否会有阳光。

风和文字

By Impossible Bureau

复杂的电影系列和冗长复杂的电视节目有助于数据可视化。一个这样的例子是由不可能局设计的名为风和单词的交互数据。使用《权力的游戏》中的对话,这种复杂的数据可视化描述了该剧所有播出季中角色之间的互动。有直接互动的部分,使用的词汇,每个角色的情绪,最后一部分是如何使用数据。总而言之,探索数据是一件非常有趣的事情。

发射它

By Shane Mielke

当平面设计师 Shane Mielke 出版他的书《Launch It》时,他还设计了一个惊人的在线数据可视化,描绘了他的书可以在哪里购买。这个交互式数据 viz 是一个可旋转的世界地图,显示了在哪里可以获得发布 It 图书的实时数据。为了使它更有趣,用户可以改变地图的颜色和标记的形状。

阿波罗

By Paul Button

Paul Button 是一名平面设计师,他喜欢分析数据,并让数据变得美得令人难以置信。他一直对阿波罗任务和所有与太空有关的事情感兴趣。利用收集到的每一次阿波罗任务的数据,他创造了这种数据可视化。他把它作为艺术印刷品出售,相当成功。阿波罗数据 viz 海报是一个真正的宝石,不仅对太空探索狂热分子,而且对任何喜欢定期看到美丽数据的人来说。

行星地球

By Federica Fragapane

这本书由数据艺术家 Federica Fragapane 绘制,充满了关于动物和植物的彩色数据可视化页面。《地球星球》是一本儿童读物,因此创建数据可视化的过程与我们在其他地方看到的通常的数据密集型设计有些不同。Federica 从她小时候阅读的儿童书籍中获得灵感,并使用风格指南来帮助她在整本书中保持平衡的风格。

Keuzestress:寻找“正确的”睫毛膏

By Sonja Kuijpers

来自工作室 Terp 的 Sonja Kuijpers 无法在化妆品店挑选她想买的睫毛膏。为了做出决定,她依靠数据和她的创造才能。她对睫毛膏的可视化将来自荷兰一家在线化妆品商店的数据可视化。数据显示每种睫毛膏的颜色及其特殊特征;睫毛分离,赋予体积或长度,以及防水能力。通过数据分析,她能够确定自己需要哪种睫毛膏。在这个过程中创造美丽的数据艺术。

漫威电影宇宙

By Strait Times

如果你看过任何一部漫威的电影,你就会知道这些角色和故事与其他电影交织在一起。自 2008 年以来,所有漫威电影实际上构成了漫威电影宇宙。有了这种交互式数据可视化,现在就有了一种有趣的方式来理解漫威电影宇宙中人物和电影之间的联系。由新加坡《海峡时报》的数据艺术家创建的这个数据很有趣,也很容易浏览。漫威狂热者将真正享受这一个!

生存空间

By Tiziana Alocci

生活空间是一个关于国际空间站的交互式数据可视化。Tiziana Alocci 为 BBC Future 设计了这个项目。互动设计描绘了国际空间站建设的每一步。这个数据是 2015 年的互动信息图,但它仍然是我们的最爱。

木星的众多卫星

By James Round

你知道木星到底有多少颗卫星吗?你知道最大的木卫三比水星还要大吗?设计师 James Round 创建了关于木星许多卫星的数据可视化,包括每个卫星的名称、大小、发现日期和发现者。它很容易阅读,而且相当丰富多彩。它可以很容易地打印成海报挂在墙上。

疯狂富有的亚洲人

Crazy Rich Asians

今年夏天最热门的电影不仅在美国,而且在亚洲引发了一些关于亚洲富人的现实。《南华早报》创建了一系列数据,即图表和交互式可视化,显示亚洲国家与世界其他国家相比的真实财富差距。整个系列非常有趣,更有趣的是关于富人在服装上花费多少的互动图表。当你给图表中的人穿衣服时,这些数据就会累加起来。

数据女性即

By Alli Torban

《今日数据可视化》的 Alli Torban 受到了我们上面提到的关于选择正确睫毛膏的 Keuzestress 可视化的启发。Alli 在睫毛膏中使用了与眼睛相似的风格,但是使用了心形。她的数据集是 Elijah Meeks 进行的关于数据可视化中女性的调查结果。《数据可视化中的女性》是一个练习,让你真正了解自己在做什么。

天空中的人影

By Nadieh Bremer

天文学和星际数据是惊人的数据可视化的一个主要话题,这个也不例外。在想象星座时,构成天空中的图形的大量可视化内容都是关于不同文化如何共享星星的。例如,猎户座腰带上的三颗星被 17 种不同的文化用作许多不同种类星座的一部分。天文学家和数据爱好者 Nadieh Bremer 在收集这些数据方面做得非常出色。

最暴力的城市

By Federica Fragapane

Federica Fragapane 的这一数据可视化技术收集了世界各地城市凶杀案的数量数据。该图形设置为将城市显示为具有不同形状的垂直线,描绘了沿总人口水平轴放置的凶杀案总数。数据 viz 包括一个如何读取数据的图例和一个只有意大利城市数据的小部分。这是为《晚邮报》文化增刊创作的。

旅行签证不平等

By Christian Laesser

有时候数据可视化非常有用。比如这篇关于旅游签证不平等的文章。Christian Laesser 创建了这个数据,即在去泰国旅行后,想知道每个国家的旅游签证优势是如何不同的。这种交互设计让用户点击一个国家,并找出是否需要签证才能访问任何其他国家,反之亦然。

CF 天气图

By Clever and Franke

Clever 和 Franke 是一家数据设计公司,在荷兰和美国从事数据分析和设计工作。CF 天气图是他们最喜欢的特别项目之一。最新版本,第五版,于今年早些时候出版,内容是关于天气如何影响我们的情绪状态。这些数据收集了大量关于天气模式和人们在一年中不同时间做什么的数据。进行了关联,数据集包括大约 60 个可视化。完成的数据艺术以印刷海报的形式出售。

从我们失去的人身上吸取的教训

By James Round

这是设计师 James Round 的另一个伟大的数据可视化。这一次他集中研究了大约一百年前灭绝物种的数据。目的是分析它们是如何灭绝的,什么时候,为什么。也许有了这些数据分析,我们可以了解未来如何拯救濒危动物。

古怪

Oddity Viz

当大多数基于音乐的数据可视化是关于一套专辑和歌曲,或关于整个时代,Oddity Viz 是关于一首歌。Valentina D 'Efilippo 和 Miriam Quick 广泛分析了大卫·鲍依的歌曲 Space Oddity,创建了这组美丽的数据可视化。该系列由十张刻本唱片组成,每张描绘了歌曲的一个方面;和声、旋律、歌词等等。每份记录都附有一张海报和如何阅读数据的说明。

228 年的总统生涯

228 Years of POTUS

尚未更新第 45 任总统的数据,该数据是对所有美国总统数据的完整回忆。另一个詹姆斯回合的美丽,这种数据可视化探索了 228 年的数据,如政党,教育,年龄和任职时间。

是的,确实有很多太空垃圾

By Axios

Axios 的数据团队使用美国军方联合太空作战中心的数据创建了这些数据。根据他们的数据,有超过 13,000 块太空垃圾漂浮在近地轨道上。尽管数据惊人,但他们知道这并不完整,因为由于尺寸和其他因素,许多垃圾没有在卫星上登记。联合太空行动中心希望获得更多关于其他太空碎片的信息,以便参与太空探索的每个人都了解太空垃圾的危险。

卡卡托·樱花颂

By Nadieh Bremer

由专业数据艺术家创建的个人数据项目通常极具创造性。Nadieh Bremer 的这个是关于日本漫画系列 Cardcaptor Sakura 的数据可视化。设计是丰富多彩的,有趣的,娱乐性的,当然也充满了数据。最棒的是,它还具有交互性。

封面的银河

Galaxy of Covers

音乐和对星际思想的热爱是如何融合在一起实现数据可视化的?这是一个关于著名歌曲翻唱的数据分析的可爱的互动例子。每首歌都是一颗行星,它的封面是围绕它运行的卫星。每个歌曲星球都可以点击,以可视化自己的具体数据。这些数据是由 Interactive Things 的团队创建的,非常值得一看。

红牛派对视觉化

这个数据可视化项目不是今年的,实际上是几年前的。但是我们太喜欢它了,所以它必须被包括在内。在阿姆斯特丹的一次聚会上,客人们得到了一个带有传感器的特殊手镯,这个传感器可以收集他们在俱乐部的体验数据。它收集了关于他们在俱乐部的哪个部分以及他们当时的感受的信息。晚上结束时,当客人归还手镯时,他们会得到自己用整晚收集的数据创作的数据艺术作品。

瘀伤,我们看不到的数据

By Giorgia Luppi

在某些情况下,数据确实是个人的,最终产品与其说是图表的集合,不如说是一件艺术品。在这个项目中,分析的数据是人性的。意大利数据设计师 Giorgia Luppi 创建了这些艺术数据,以帮助她的朋友应对她儿子的医疗问题。她使用儿童治疗的医疗记录,并结合艺术和音乐来创建这个美丽的数据可视化。

珊瑚城市

我们在构建中期捕捉到了这个数据可视化。不确定这位数据艺术家是否会创造一个完整的光谱项目,但与此同时,我们喜欢看到他的珊瑚城市出现在 Twitter 上。克雷格·泰勒(Craig Taylor)使用了 10 个最宜居城市指数的数据和城市地图工具,创建了这些看起来像珊瑚的可视化图像。

市场咖啡馆杂志

Market Cafe Mag

这个条目不完全是一个 data viz,而是一个致力于数据可视化的杂志。《市场咖啡馆杂志》已经是第三版了,而且每出版一期都会越来越好。通过采访、特写和关于视觉数据艺术家的故事,这本杂志正成为所有数据可视化爱好者的需要。他们的 2018 版已经卖完了。设计师和创作者 Tiziana Alocci 和 Piero Zagami 在这本杂志上一针见血。

轮到你了

你见过今年创建的任何数据可视化应该包括在这个列表中吗?您是否创建了数据可视化并希望我们看一看它?在评论区给我们留言吧!

本帖 原版 最早出现在 Visme 的 视觉学习中心

哈佛商业评论得到的 2x2 数据科学技能矩阵完全错误!

原文:https://towardsdatascience.com/the-2x2-data-science-skills-matrix-that-harvard-business-review-got-completely-wrong-d85dc41b6fb4?source=collection_archive---------7-----------------------

数据科学是目前市场上的热门词汇。目前,每家公司都在寻求聘请数据科学专业人士来解决一些他们自己目前没有意识到的数据问题。机器学习已经席卷了整个行业,市场上有一群自学成才的数据科学家。

由于数据科学这个词是一个完全不同的世界,所以很难设定学习什么和不学习什么的优先级。所以在这种情况下,《哈佛商业评论》发表了一篇关于你作为一个公司或个人应该重视什么的文章。让我们看一看。

Figure 1. The empty matrix taken from HBR original Article (Source)

这是 HBR 共享的空矩阵,这样你可以优先考虑你的学习路径。现在让我们看看他们在数据科学中填写了什么:

Figure 2. The Data Science Matrix proposed by HBR.

现在让我们看看从这个矩阵中可以得出的推论。

  1. 计划学习机器学习,但忽略预测分析,因为它没有用
  2. 计划学习机器学习,但忽略数学,因为学起来没用而且非常耗时。
  3. 计划学习统计编程,但忽略了统计&数学,因为它非常耗时。
  4. 现在学数据科学但是不太关心数据清理。

我不是专家,但即使对一个新手来说,这 4 句话看起来也像是讽刺。我们举个例子。

假设您正在处理一个包含 800 个要素和 1000 条记录的数据。现在你发现你需要减少特征,因为大多数特征是多余的(除非有人告诉你),但是记住你忽略了所有的数学或统计,所以你不知道数学或统计。由于您只是浏览了数据清理,您甚至不知道如何清理数据。那么在这种情况下,你将如何处理这种情况呢?

好的,所以你在谷歌上搜索“减少数据集中的特征”或其他地方,当你学习机器学习时,你发现有一种叫做 PCA 的东西可以为你做这项工作。

所以下一步是你谷歌“PCA sklearn”。检查文档并应用以下内容:

从 sklearn.decomposition 导入 PCA

X =主成分分析(0.99)。拟合 _ 转换(X)

很好,现在你的特征集减少到 60 个,你的训练结果很好。现在我的问题是:

  1. 你想成为这种只做事情的开发者吗?
  2. 你想成为一名只知道如何做的开发者,而不是只知道幕后的内部运作吗?

如果你对这两个问题的回答都是肯定的,那么你就非常适合那些只想把事情做好而不是掌握它们的公司。那么“软件工程师”对你来说是个不错的职位。

如果你对这两个问题的回答都是否定的,那么你就非常适合目前正在扩大研究部门的公司。那么“研究工程师”对你来说是个不错的职位。

如果你想从研究的角度来解决 PCA 问题,你会使用完全相同的代码,但是在幕后有不同的想法。因为这样你就可以看到特征之间的关系,组合新的特征,计算相关性,计算特征值,特征向量,最后选择那些对方差有 99%贡献的特征。

遵循这个矩阵是你的选择。明智选择!。

如果你有任何意见,请在评论中或在 LinkedIn 上告诉我。

我一生中迄今为止做的 3 个最好的决定?

原文:https://towardsdatascience.com/the-3-best-decisions-that-i-made-so-far-in-my-life-c23c7a7f2561?source=collection_archive---------4-----------------------

今天是我 29 岁的生日,首先我要感谢我的父母,是他们把我带到了这个世界。

另一方面,我想谈谈迄今为止我一生中做得最好的 3 个决定。

  1. 我本科时学过德语

我在大学第一年没有注册德语/德语系,因此,我参加了考试,以便转到德语系。为什么是德语?因为我一直想去欧洲(欧洲大陆,对不起是英国),我知道德语是欧洲最常用的也是最受欢迎的第二语言之一。当然,你学了 3-4 年也学不到最好的德语,因为在台湾德语和德语的资源很少,而且毕业后没有那么多工作机会,嗯…尽管我很叛逆,我还是通过了考试,拿到了德语系的录取通知书。感谢上帝,他们只从考试中选了 5 个学生 50 多?我的英语和语文成绩很好,因此,我成功了!

2。选择来柏林学习我的硕士

三年半后,我完成了我的学士学位,我想让我的梦想成真。你在网上找不到太多申请德国国际项目的资源。在台湾的大多数情况下,你需要雇用顾问来检查每一份申请出国留学的文件。显然,没有顾问能在这方面帮助我。同样,我自己做了所有的事情,我找到了学校,参加了一些英语水平测试和 GRE,准备了申请,并请我的母语是英语的朋友校对了我的文件,并进行了一些学校面试。我真幸运,我又收到了一封贺信!

在那段时间里,我的父母认为我会失败并放弃,但我成功了,用两个行李箱打包了我的行李,然后我就到了欧洲!

问题是,我以前从未去过欧洲,这是一个很大的赌注,也是我父母无尽的担忧。

3。辞去全职工作,开始创业

在移动广告领域工作了几年后,我迫切地想要一些新的东西。经过几年的深思熟虑,我两次辞职,开始了新的旅程。有很多起伏(我不想在这里详述)然而,我学到的东西是极其不可思议的,更令人惊讶的是,我开始发展一些我从来不知道的其他技能。我开了几个新的中文专栏,有薪水;)此外,我也将很快开始另一个新的用英语谈论创业和科技创业的话题!敬请期待!

我们最终以 100 多份申请和 30 个团队赢得了一场创业竞赛,这样我们就可以加入最好的孵化器之一——柏林的 Hubaum。

此外,我刚刚在柏林策划并组织了我的第一次活动,有 100 多人参加,还有脸书和 Twitter 的投资者。500 startup partner 是小组成员,第 26 位,EyeEm 是演讲者,还有慷慨的赞助商 Cheetah Mobile/ TechCode,以及一些来自机器智能领域的初创公司和亲爱的朋友。

最后但同样重要的是,如果你经历过低潮期,你会重新评估你周围的关系。感谢你们所有人仍然支持我,对一个几乎破产的企业家给予相当大的支持。

统治他们的三分统计

原文:https://towardsdatascience.com/the-3-point-statistic-to-rule-them-all-12ac018a955a?source=collection_archive---------2-----------------------

引入 3NG

Image by patgui. CC0 Creative Commons License.

哗哗声

“嘣宝宝!”

90 年代的印第安纳步行者队球迷都知道这个戒指。斯利克·伦纳德叫了一声,这意味着雷吉·米勒刚刚投进了一个三分球。每次发生的时候我都有一种冲动。

20 年后,住在湾区,我一直对斯蒂芬库里(Steph Curry)的崛起心存敬畏。他的三分球是如此鼓舞人心,它彻底改变了比赛。

三分球投篮经常被两个统计数据分析,三分球命中率。大多数球迷认为最好的三分射手在这两方面都很出色。

然而,还没有一个统计数据来对最佳三分射手进行排名。三分球使得像安东尼·沃克这样的射手得到回报,尽管他的命中率只有 36.7%,但他在 2001 年仍然高居联盟榜首。根据三分球命中率,史蒂夫·科尔是历史上最好的,但他的投篮命中率不高。

有没有一种客观的方法可以将三分球命中率和三分球命中率合并成一个重要的数据?它会透露斯蒂芬库里是有史以来最伟大的三分射手吗?历史上最好的三分球球队呢?

3NG: 3 点净收益

每一次在球场上,球队都被期望得到一定数量的分数。自从 1980 年引入三分球以来,NBA 平均每球得分约为 1.06 分。

NBA 球员每投中一个 3 分球,他的球队就获得超出期望值的 1.94 分。球员每投失一个 3 分球,他的球队就失去了 1.06 分的期望值。

3NG 的计算公式如下:

让 3P =三分球命中。

让 3Mi = 3 分不中。

设 EV =期望值,每次控球的期望得分。

那么 3NG = 3P * (3 - EV) - 3Mi * EV。

用 1.06 代替 EV(仅 NBA),我们得到:

3 ng = 3P * 1.94-3 米* 1.06。

换句话说,3NG 是三分球命中率乘以每次投篮的净收益与三分球命中率乘以期望值之间的差值。

实际上,3NG 传达了球员或球队通过投中三分球而获得的超出联盟平均水平的净得分。球员投中三分球会得到奖励,投失会受到惩罚。3NG 可以通过比赛、赛季或整个职业生涯来计算。

让我们检查数据,看看 3NG 如何满足预期。我的例子是基于从 basketballreference.com T2 争论来的数据。

作为开始,让我们从 2018 年开始考虑联盟领袖。

3NG 联赛领跑者 2018

3NG is per-game unless otherwise stated. For all tables EV =1.0644871794871795, the NBA points per possession mean since 1980.

根据 3NG 的数据,2018 年勇士队的场均得分超过联盟平均水平 2.03 分,斯蒂芬·库里投了 3 分。他们还从克莱·汤普森获得了 1.84 分,从凯文·杜兰特获得了 1.16 分。前十名中的每个人都超过了百分之四十。

3NG 的妙处在于可以跨赛季跨代比较玩家。想想有史以来的十大赛季。

3NG 史上最佳赛季

3NG can be weighted by season. I prefer unweighted because it provides an even baseline of comparison.

Steph Curry “Sky High” Wallpaper by IshaanMishra. Creative Commons 3.0 License.

斯蒂芬·库里惊人地占据了前六名中的四席。斯蒂芬一致获得 2016 年 MVP,甚至超过了他之前的最好成绩。凯尔·科沃尔 2015 年的三分球命中率达到了可笑的 49.2%,稳居第二。

1997 年的格伦·莱斯有点另类。谁是 90 年代最好的三分射手?

3 ng 90 年代最佳

所有的球员都是 90 年代后半期的。比较一下雷吉·米勒和史蒂夫·科尔,分别排在第六和第七位。雷吉投中了更多的三分球,但史蒂夫·科尔的命中率更高。谁是更好的三分射手?3NG 提供了一个有统计意义的答案。

我们也可以用 3NG 来对比球队,像 2018 年的火箭和勇士。2018 年的火箭队打破了一个赛季最多三分球的 NBA 纪录。他们带领勇士队,一支传奇的三分球球队,在西部决赛中打了七场比赛。常规赛谁的三分球投得更好?

3NG 勇士队对火箭队 2018,仅限合格球员

Negative 3NG scores mean that the team is scoring less than the league average by the player shooting 3's.

勇士统治着顶端,但火箭拥有中间。最有价值球员詹姆斯·哈登落后于 66 名球员,而安德烈·伊戈达拉和德雷蒙德·格林的贡献为负。

将上表中的 3 分加起来,就可以看出哪支球队在全力投 3 分时净胜分更多。

GSW: 4.32

HOU: 1.95

另一种选择是通过对整个赛季的三分球求和来计算 3NG。这考虑到了交易,伤病和不合格的球员。总结结果如下。

GSW: 3.12

HOU: 0.91

2018 年的勇士队是超级三分球球队,在这两个方面都超过了火箭队一倍。他们在历史上是如何排名的?

空前的 3 支顶级球队

The 2018 Warriors would rank #2 by summing qualified players only. Injuries played a big role in 2018.

勇士队和 7 秒或更少的太阳队以 8 个位置统治着这个名单。1997 年的夏洛特黄蜂队是一个惊喜,直到人们意识到他们有格伦·莱斯和德尔库里。前十名包括两个 NBA 冠军和七个联盟决赛选手。勇士队破纪录的 73 胜赛季是一个令人印象深刻的异数。

为了确定最佳三分射手,我们可以将 3NG 相加,然后除以赛季数。

3NG 职业平均值

I required a minimum of 5 NBA seasons.

除了队友克莱·汤普森和凯尔·科沃尔,斯蒂芬·库里比名单上的其他人都强。这个列表回答了一个我们还没有提出的问题。是什么让勇士如此有统治力?他们有历史上最好的两个三分射手。

同代人中最令人兴奋的三分射手雷吉·米勒在哪里?他打了 18 个赛季,在 NBA 历史上,除了雷·阿伦,他投中的三分球比任何人都多。我们可以找到雷吉,以及其他伟大的历史射手,在 3 个职业生涯总数。

Reggie Miller Pacers Wallpaper by IshaanMishra. Creative Commons 3.0 License.

3NG 职业生涯总计

这是一份漂亮的清单。

游戏结束

3 个点的净收益,或者说 3NG,已经超出了我的预期。它在历史上积累得很好,准确地对当代射手和球队进行了排名。3NG 是一个有意义的、可验证的统计数据,传达了有价值的信息

3NG 可以申请任何联赛,WNBA,大学,高中等。用适当的期望值作为比较的基线。它可以被教练、球探和球员用来做出重要的决定。球迷可以使用 3NG 来确定谁是最好的 3 分射手。

鼓励发行 3NG,前提是注明作者 Corey J Wade。

https://github.com/coreyjwade/New_NBA_3-point_Stats关于熊猫的数据分析和附加的 3 点统计。

深度学习的 3 门热门课程

原文:https://towardsdatascience.com/the-3-popular-courses-for-deeplearning-ai-ac37d4433bd?source=collection_archive---------0-----------------------

在过去的两年里,我一直积极专注于深度学习。我个人对深度学习的兴趣始于 2015 年左右,当时谷歌开源了 Tensorflow。快速尝试了 Tensorflow 文档中的几个例子,感觉深度学习很难,部分原因是该框架是新的,需要更好的硬件和大量的耐心。

快进到 2017 年,我已经花了 100 个小时在深度学习项目上,由于软件(易用性——KerasPyTorch )、硬件(GPU 对像我这样坐在印度的人来说变得商业可行——并不便宜)、数据可用性、好书和 MOOCs 的几项进步,技术变得越来越容易获得。在完成了来自 Fast.aideeplearning.ai/Coursera(尚未完全发布)和 Udacity 的深度学习 3 门最受欢迎的 MOOCS 之后,我相信一篇关于你可以从这 3 门课程中期待什么的帖子会对未来的深度学习爱好者有用。

在这篇文章中,我将谈论每门课程的 5 个方面来帮助你做出决定。

  1. **关于古鲁:**每门课程都由有着非常不同经历的了不起的人来教授。我相信这些经历对教学风格有很大的影响。因此,我们将看看我们的课程大师的背景。
  2. **关于课程:**课程的高层次概述。
  3. **亮点:**要点突出课程让你觉得 wow 的地方。
  4. **限制:**我想对这个词非常挑剔,因为我知道他们所有人都为如何让内容易于访问付出了巨大而真诚的努力。我想把这部分理解为,我们在课程中错过的内容。某些限制可能是因为课程的设计。
  5. **费用:**参加课程产生的费用。

Fast.ai:

KDNudggets 看一篇文章的时候偶然发现了这个课程。第一次听说杰瑞米·霍华德,在维基百科上搜索他,印象深刻。查看了杰里米和雷切尔·托马斯教授的 MOOC 课程。看完了第一课,对他们的教学风格印象深刻。

在几个小时内,你学会了如何在不到几美元的时间内建立一个最先进的图像分类器。

关于古鲁:

杰里米来自一个与通常的教授非常不同的背景,他没有任何顶级大学的博士学位,也没有为任何顶级公司工作,如谷歌,百度,微软,等等。他是一个自学成才的 kaggle master,企业家,目前是 Fast.ai 的 CEO,唯一的目的就是 深度学习再次不酷。他的独特性为这门课程增添了巨大的优势,因为他教授不同背景的人如何在没有大量数据或计算能力的情况下使用深度学习。

关于课程:

课程分为两部分,每部分 7 周。课程的第一部分教授如何在计算机视觉和自然语言处理(NLP)领域使用深度学习。第二部分教授前沿研究工作,如生成网络、GANs、序列序列模型、如何阅读研究论文,以及许多关于如何在高速发展的深度学习领域保持领先的实用技巧。

这门课程以独特的方式教授。该课程的作者相信一种独特的方法。

你不会在阅读了速度、动量、分析等知识后学习打板球(或任何游戏),然后在 18 岁就去球场。相反,我们去球场,拿着球或球棒,然后在飞行中学习其余的。

通过这种独特的方法,您可以开始学习在云上设置工作站,安装软件,并使用深度学习快速构建解决方案。每周杰里米都会挑选一个新问题,然后他会教授一些技巧来提高模型的性能。他教授一些实用的东西,比如使用预卷积特征、伪标注和许多非常有用的技巧。在第一部分结束时,你将能够使用深度学习在你工作的领域中构建有用的应用程序。

课程的第二部分通过帮助你阅读、理解和实现生成模型、图像分割和序列 2 序列模型领域的各种研究论文,介绍前沿研究。您将学习构建有趣的项目,如样式转换、低分辨率图像到高分辨率图像、GAN、图像分割、语言翻译,以及如何对结构化数据应用 DL。第 2 部分最重要的部分是建立自己的工作站。如果你对深度学习充满热情,并希望构建各种 DL 应用程序,这被证明是非常有用的。

亮点:

  1. 能够在视觉和自然语言处理方面建立先进的系统。
  2. 理解并使用支持大量深度学习应用的现代架构。
  3. 当你的数据和计算能力有限时,如何快速应用 DL 的大量实用技巧。
  4. 一个庞大的社区,在您学习和实施解决方案的不同阶段为您提供支持。
  5. 能够熟练使用 3 种流行的 DL 框架,即 Keras、TensorFlow 和 PyTorch。
  6. 在课程结束时,你将能够自如地阅读研究论文、构建新项目、写博客,以及整个社区对你的支持。

局限性:

  1. 由于本课程遵循自上而下的方法,你将严重依赖框架来抽象底层数学。如果你打算找工作或者在这个领域做更多的研究,理解驱动 DL 的数学是有帮助的。
  2. 一些机构可能重视证书作为课程完成的证明,但我猜杰里米认为我们是成熟的孩子,不提供任何形式的证书。代替传统的证书,杰里米和雷切尔鼓励写博客,建立项目,并在会议上发言。我个人认为这非常有用。

成本:

MOOC 没有相关费用。但是为了实践这些项目,你将最终花费在 AWS 上,或者你可能设置你自己的机器,这将是昂贵的。但是家里有一个功能强大的工作站非常有帮助。

Deeplearning.ai:

我最近在吴恩达发微博的时候偶然看到了这个课程。我从 2014 年初开始跟踪他,我从他在 Coursera 上的一门课程中学习机器学习背后的数学。来自工程背景的他发现他的第一门课非常有趣,同时有点难以完成。快进到 2017 年,吴恩达离开了他作为首席科学家工作的百度,并于 8 月 8 日启动了新的深度学习专业化。我想在今年晚些时候做这件事,因为我已经忙于其他一些项目。然后我读了一篇来自 Fast.ai Arvind N 的学生的博客关于他如何在 4 天内完成所有 3 个部分以及他对 Fast.ai 和 deeplearning.ai 的看法

我想挑战自己,如果我能在不到 4 天的时间内完成同样的课程,是的,我在 3 天内完成了 3 门课程。

关于上师:

吴恩达是斯坦福大学的教授,共同创立了 Coursera,创立并领导了谷歌大脑深度学习项目,并且是百度的首席科学家。这门课程反映了他从大规模解决各种问题中学到的很多东西。

该课程帮助您理解深度学习所需的数学,到课程 2 结束时,您将从零开始构建深度学习算法的几个关键组件。

关于课程:

本课程分为 5 个部分。在撰写本报告时,前三个版本已经发布。吴恩达对这门课程采取自下而上的方法。在他之前的课程中,他选择 octave 作为编程作业,但他选择 python 作为这门课程的作业。

  1. 在课程 1 中,他仔细讲述了深度学习中许多概念所需的数学和直觉。他小心翼翼地平衡课程内容,只教授数学,这是理解深度学习的基础。作业课对于以程序化的方式练习数学非常有用。所有的公式都提供了,所以你可以专注于实现它们,即使你没有太多的数学专业知识。
  2. 课程 2 涵盖了许多技术,如正则化、动量、批量归一化和剔除,以提高你的 DL 模型的性能。本课程最精彩的部分是你使用 python 和 NumPy 实现所有的技术。
  3. 在课程 3 中,他解释了许多他从多年经验中学到的技巧和诀窍。在第 3 门课程的最后,他介绍了 DL 框架。课程 3 以如何使用张量流的作业结束。这个作业被设计得非常直观。
  4. 课程 4 将在 CNN 播出。一旦课程发布,将更新此部分。
  5. 课程 5 将是关于 RNN 或序列数据。一旦课程发布,我将更新这一部分。

亮点:

  1. 当你完成 3 门课程时,你的基础将会非常扎实。
  2. 首先,3 门课程采用独立于框架的方法,这将使你准备好轻松使用任何框架。
  3. 关于如何设计评估指标、如何为训练拆分数据集以及避免方差和偏差问题的大量实用技巧。
  4. 课程 3 最精彩的部分是一个案例研究,在这里你有机会验证你对如何成功执行深度学习项目的理解。
  5. 不需要担心基础设施,因为所有的作业都以 jupyter 笔记本的形式在 Coursera 服务器上运行。
  6. 在令人惊叹的 3 门课程后,等待接下来的 2 个部分。
  7. 每周都有一个以“深度学习英雄”命名的演讲。这是了解深度学习背后的历史和灵感的一个很好的来源。

局限性:

  1. 对于完全不熟悉深度学习或机器学习的人来说,从头开始构建每个组件并理解其背后的数学原理可能是一项挑战。
  2. 因为它遵循自下而上的方法,所以即使在第三个课程结束后,你也会发现很难在你的领域中使用 DL 构建解决方案。
  3. 由于提供了基础设施,您将错过如何自己管理工作站的学习。如果你想使用你学到的很多技术,能够在云上或者在家里/办公室设置你的机器是非常重要的。
  4. 提供了许多样板代码来简化任务。但是要真正掌握一项技能,不使用样板代码重新实现整个任务是必不可少的。这可能不是课程的限制,但如果你想充分利用它,这真的很重要。

成本:

所有的课程内容都是免费的。然而,我不确定这些作业是否也是免费的。如果你使用付费版本,那么你每个月大约要花费 3800 卢比或者 55 美元。

Udacity 的 Siraj Raval 深度学习纳米学位基金会:

我是 Udacity 的超级粉丝。他们有非常棒的课程,涉及广泛的主题。因此,当我今年早些时候读到他们关于深度学习课程的公告时,我非常兴奋,并注册了第一批。

关于古鲁的:

课程的一些部分包括来自 Siraj Raval 的视频,其余部分来自 Udacity。我是从他在 youtube 上的一些有趣的视频中知道 Siraj Raval 的。他是一个多技能的人,通过将教育视频与音乐和视频混合在一起,以有趣的格式巧妙地传递教育视频。课程的某些部分也由安德鲁·W·特拉斯克和伊恩·古德费勒教授。

关于课程:

与其他两门课程不同,这门课程没有明确的自下而上或自上而下的方法。该课程分为 5 个部分,并给予 100 美元的亚马逊学分。它涵盖了许多深度学习技术,如 CNN、RNN、GAN 和自动编码器。

亮点:

  1. 在课程的前几周,您将学习如何使用 python 构建神经网络,课程的其余部分将重点介绍 TensorFlow 的使用。
  2. 课程中提交的所有项目都有个性化的项目评论。
  3. 在课程结束时,您会对使用 TensorFlow 感到舒适,就像在所有项目中使用 TensorFlow 一样。
  4. 了不起的社区和论坛导师,他们随时准备帮助你。

局限性:

  1. 没有关注如何优化运行 DL/获得最先进的性能结果的实用技巧。
  2. 有些项目太简单,不适合在现实世界中使用。这个项目使用的数据集非常小。
  3. 样板文件抽象出了构建 DL 应用程序的许多复杂性。但是如果您专注于学习它在现实世界中的应用,建议您自己实现项目,而不要使用样板代码。

成本:

课程费用偏高。没有免费版本。当我参加这个课程时,报价有限,所以花费大约 2500 卢比或 350 美元。

建议:

如果有人今天开始深度学习[自学],我会建议完成 fast.ai,因为它有最低的先决条件,并按顺序或并行继续 Coursera 深度学习专业化。感谢所有为这项技术的普及做出真诚努力的人们。

这个博客还出现在的 KDnuggets 上。

行动呼吁

如果你喜欢这篇文章,只要你认为这篇文章有价值,就按住那个拍手图标。我总是在寻找反馈来改进我的文章。如果你有建议或问题,请随时回复。

关于数据的 3 件事你可能不知道,但需要知道

原文:https://towardsdatascience.com/the-3-things-about-data-you-probably-dont-know-but-need-to-9a316060eb2f?source=collection_archive---------2-----------------------

1977 年,在佛罗里达州博卡拉顿举行的施乐世界大会上,公司的高级管理人员瞥见了未来。展出的是一种新型电脑,Alto T1,它是为一个人设计的,只需要一个键盘和一个叫做“鼠标”的小装置,你可以用一只手操作。

他们没有被打动。机器执行的任务主要是写作和处理文件,换句话说,是秘书工作,这并不能激发他们的兴趣。对于那些以复印多少份来衡量业绩的高管来说,他们看不到这个东西如何赚钱。

当然,时代已经变了,今天很难想象没有电脑的任何行政运作。我们现在正在经历一场类似于 20 世纪 70 年代的变革。今天,每个经理都需要有效地处理数据。问题是,大多数人都像 20 世纪 70 年代的施乐高管一样装备不良。以下是你最需要知道的:

1.数据经常会出现人为错误

出现在电脑屏幕上的数字有一种特殊的权威性。数据通过大规模数据库提取,并通过复杂的分析软件进行分析。最终,它们会进入 Excel 工作簿,在那里它们会被进一步处理成清晰的决策指标。

然而,所有这些数据从何而来?在许多情况下,来自低薪、缺乏培训的一线员工,他们将在剪贴板上记录数据作为日常工作的一部分。如前所述,数据是轶事的复数形式,容易出错。我们可以——也应该——尽可能减少这些错误,但我们可能永远无法完全消除它们。

正如麻省理工学院的泽内普·顿在她的著作 中所解释的,好工作战略 关注零售业,即使是最强大的系统也需要人类的输入和判断。收银员需要用正确的代码记录产品,后台人员需要将物品放在可以找到的地方,货架上需要存放正确的产品。

任何这些地方的错误都可能导致数据错误,并导致有形的问题,如幻影缺货,这可能导致组织高层做出糟糕的决策,如采购和营销。这些看似很小的错误可能会非常普遍。事实上,在的一项研究中发现,65%的零售商库存数据是不准确的。

类似这样的失误也不仅限于低层员工。想想两位哈佛经济学家的案例,他们发表了一篇工作论文,警告美国债务正接近临界水平。他们的工作引起了一场政治风暴,但事实证明,他们犯了一个简单的 Excel 错误,导致他们夸大了债务对 GDP 的影响。

2.你的数字总是错的

我们获取数据的途径总是有限的。我们可能会关注一天、一周甚至一年的销售额,但这只是现实的一小部分。如果我们看一个典型的市场调查,我们看到的几乎总是一个小样本。研究应该受到控制,以使样本具有代表性,但这些方法远非完美。

结果是我们的数字总是错的。有时它们会偏离一点点,有时会偏离很多,但它们永远不会完美地反映当前的现实。这可能是控制被忽略或数据处理不当的结果,或者只是运气不好,但不管是什么原因,我们都不应该只看数据的表面。

近年来,传统统计方法的一个替代方法是贝叶斯分析,它允许我们随着新信息的到来不断更新我们的判断。实际上,贝叶斯方法并不假设我们拥有的数据是正确的,而是允许我们“随着时间的推移减少错误”

实际上,这就是为什么大数据如此重要。今天,数字技术使我们能够连续不断地收集和访问大量信息。新的开放数据标准,如 HadoopSpark ,也允许我们存储数据并将其与其他来源相结合,以便我们可以重新审视早期的结论并纠正错误。

3.你的逻辑有缺陷

让我们暂时回到零售业。典型零售业务的劳动力成本约为销售额的 15%,因此控制工资是保持盈利的关键。让太多员工留在店里,你的成本会飙升,但留下太少,客户服务会受到影响,导致你失去销售。

所以把人员配备和销售联系起来是很自然的。使用过去的数据,您可以建立一个预测模型,该模型将确定在任何给定的一天每个地点的人员配备需求。商店经理然后可以使用软件来安排销售人员的数量,这将最大限度地提高销售额,同时最大限度地降低工资成本。

但是,当一个不可预见的事件,比如一场大风暴或一场交通事故在某一天减少了销售额,会发生什么呢?最有可能的是,这将导致未来几天人手不足,这将进一步抑制销售,并证实你需要减少商店员工的想法。不久,恶性循环就会出现,员工减少导致销售额下降。

这就是为什么数据科学家建议使用互斥且集体穷尽(MECE) 的数据,以避免这种反馈循环,并通过模型之外的来源不断测试你的结论。例如,在上面的例子中,与商店经理的良好沟通有助于发现和解决问题。

这些类型的错误源于心理学家称之为可用性偏差。我们倾向于根据最可用的信息做出判断,如商店销售额和工资成本,而忽略了不太适合数据模型的其他因素,如恶劣天气和糟糕服务导致的销售损失。

为使命而管理,而不是为指标而管理

显然,数据素养就像基本的计算机技能一样,正成为每位高管的必备技能。此外,越来越多的证据表明,有效利用数据的企业和不有效利用数据的企业之间的鸿沟越来越大。很像 20 世纪 70 年代施乐的那些高管,我们不能因为认为数据分析是别人的工作,就简单地转过头去。

我们也不应该忽视这样一个事实,数据是达到目的的手段,而不是目的本身。我们需要为使命而管理,而不是为指标而管理。企业的目的是服务好顾客、员工和其他利益相关者,而不仅仅是为了记分。这就是为什么我们需要将数据视为发现和评估的工具。

正如Alpine Data的首席产品官 Steve Hillion 告诉我的,“我们需要采取一种更具探索性的方法,更多地考虑如何设计系统来影响业务,而不仅仅是评估运营活动。我们不能再将分析和行动分开,我们需要将数据科学团队与直线经理整合起来。”

数据被称为“新石油”,这是有道理的。就像能源、人才、金融或任何其他资源一样,有效地管理它对于在当今市场中竞争变得至关重要。管理者需要像对待其他重要职能一样认真对待数据分析。

这篇文章的早期版本最早出现在Inc.com

4 个卷积神经网络模型可以对你的时尚图片进行分类

原文:https://towardsdatascience.com/the-4-convolutional-neural-network-models-that-can-classify-your-fashion-images-9fe7f3e5399d?source=collection_archive---------0-----------------------

买衣服是一件很累人的事情。我的眼睛被太多的信息轰炸。销售、优惠券、颜色、蹒跚学步的孩子、闪烁的灯光和拥挤的过道只是传递给我的视觉皮层的所有信号的几个例子,不管我是否积极地试图注意。视觉系统吸收大量的信息。我应该选那条 H&M 卡其布裤子吗?那是耐克背心吗?那些阿迪达斯运动鞋是什么颜色?

计算机能自动检测衬衫、裤子、连衣裙和运动鞋的图片吗?事实证明,给定高质量的训练数据,准确地对时尚物品的图像进行分类是非常简单的。在本教程中,我们将通过构建一个机器学习模型来使用时尚-MNIST 数据集识别时尚对象的图像。我们将介绍如何训练模型,设计类别分类的输入和输出,并最终显示每个模型的准确性结果。

图像分类

图像分类的问题是这样的:给定一组图像,所有这些图像都标有一个类别,我们被要求为一组新的测试图像预测这些类别,并测量预测的准确性。存在与该任务相关的各种挑战,包括视点变化、尺度变化、类内变化、图像变形、图像遮挡、照明条件、背景混乱等。

我们该如何着手编写一个算法,将图像分成不同的类别呢?计算机视觉研究人员已经提出了一种数据驱动的方法来解决这个问题。他们不是试图直接在代码中指定每一个感兴趣的图像类别看起来像什么,而是为计算机提供每个图像类别的许多示例,然后开发学习算法,查看这些示例并了解每个类别的视觉外观。换句话说,他们首先积累一个标记图像的训练数据集,然后将其输入计算机,以便它熟悉这些数据。

鉴于这一事实,完整的图像分类管道可以形式化如下:

  • 我们的输入是一个由 N 幅图像组成的训练数据集,每幅图像都标有 K 个不同类别中的一个。
  • 然后,我们使用这个训练集来训练一个分类器,以学习每个类的样子。
  • 最后,我们通过要求分类器预测一组它以前从未见过的新图像的标签来评估分类器的质量。然后,我们将这些图像的真实标签与分类器预测的标签进行比较。

卷积神经网络

**卷积神经网络(CNN)**是用于图像分类问题的最流行的神经网络模型。CNN 背后的大想法是,本地对图像的理解已经足够好了。实际好处是,参数越少,学习时间就越短,训练模型所需的数据量也就越少。CNN 不是一个由每个像素的权重组成的完全连接的网络,它只有足够的权重来查看一小块图像。就像用放大镜看书一样;最终,你读完了整页,但在任何给定的时间里,你只能看到页面的一小部分。

考虑一个 256 x 256 的图像。CNN 可以有效地逐块扫描——比如说,一个 5 × 5 的窗口。5 × 5 窗口沿图像滑动(通常从左到右,从上到下),如下所示。它滑行的“快”称为它的步幅。例如,步长为 2 意味着 5 × 5 滑动窗口一次移动 2 个像素,直到它跨越整个图像。

当窗口滑过整个图像时,卷积是图像像素值的加权和。结果是,整个图像与权重矩阵的卷积过程产生了另一个图像(大小相同,取决于约定)。卷积是应用卷积的过程。

滑动窗口恶作剧发生在神经网络的卷积层。典型的 CNN 有多个卷积层。每个卷积层通常生成许多交替卷积,因此权重矩阵是 5 × 5 × n 的张量,其中 n 是卷积的数量。

举个例子,假设一个图像在 5 × 5 × 64 的权重矩阵上经过一个卷积层。它通过滑动一个 5 × 5 的窗口产生 64 个卷积。因此,该模型有 5 × 5 × 64 (= 1,600)个参数,比全连接网络的 256 × 256 (= 65,536)个参数少得多。

CNN 的妙处在于参数的数量与原始图像的大小无关。你可以在 300 × 300 的图像上运行同样的 CNN,在卷积层中参数的数量不会改变。

数据增强

影像分类研究数据集通常非常大。然而,数据扩充经常被用来提高泛化性能。通常,使用随机裁剪重新缩放的图像以及随机水平裁剪和随机 RGB 颜色和亮度偏移。存在不同的重新缩放和裁剪图像的方案(即单尺度对多尺度训练)。测试期间的多作物评估也经常使用,尽管计算成本更高且性能改善有限。请注意,随机缩放和裁剪的目标是了解每个对象在不同比例和位置下的重要特征。Keras 没有实现所有这些现成的数据扩充技术,但是它们可以通过 ImageDataGenerator 模块的预处理功能轻松实现。

时尚 MNIST 数据集

最近,Zalando research 发布了一个新的数据集,它与众所周知的 MNIST 手写数字数据库非常相似。该数据集是为机器学习分类任务而设计的,总共包含 60 000 个训练图像和 10 000 个测试图像(灰度),每个图像为 28×28 像素。每个训练和测试案例都与十个标签(0–9)中的一个相关联。到目前为止,Zalando 的数据集基本上与原始手写数字数据相同。然而,Zalando 的数据包含了 10 种不同时尚产品的图像,而不是数字 0-9 的图像。因此,该数据集被称为时尚-MNIST 数据集,可以从 GitHub 下载。这些数据也出现在 Kaggle 上。下图显示了几个示例,其中每行包含一个时尚项目。

10 种不同的分类标签是:

  • 0 T 恤/上衣
  • 1 条裤子
  • 2 件套头衫
  • 3 连衣裙
  • 4 件外套
  • 5 凉鞋
  • 6 衬衫
  • 7 运动鞋
  • 8 袋
  • 9 踝靴

根据作者的说法,时尚-MNIST 数据旨在直接取代旧的 MNIST 手写数字数据,因为手写数字存在几个问题。例如,只需看几个像素就可以正确区分几个数字。即使使用线性分类器,也有可能实现高分类精度。时尚 MNIST 的数据有望更加多样化,因此机器学习(ML)算法必须学习更高级的特征,以便能够可靠地区分各个类别。

嵌入时尚 MNIST 可视化

嵌入是映射离散对象(图像、文字等)的一种方式。)到高维向量。这些向量中的各个维度通常没有内在含义。相反,机器学习利用的是向量之间的位置和距离的整体模式。因此,嵌入对于机器学习的输入是重要的;因为更一般地,分类器和神经网络对实数的向量起作用。它们在密集向量上训练得最好,其中所有值都有助于定义一个对象。

TensorBoard 有一个内置的可视化工具,称为 嵌入投影仪 ,用于交互式可视化和分析嵌入之类的高维数据。嵌入投影仪将从我的模型检查点文件中读取嵌入内容。虽然它对嵌入最有用,但它可以加载任何 2D 张量,包括我的训练权重。

在这里,我将尝试使用 TensorBoard 来表示高维时尚 MNIST 数据。在读取数据并创建测试标签之后,我使用这段代码来构建 TensorBoard 的嵌入式投影仪:

嵌入式投影仪有三种降低数据集维数的方法:两种线性方法和一种非线性方法。每种方法都可以用来创建二维或三维视图。

**主成分分析:**一种直接的降维技术是主成分分析(PCA)。嵌入投影仪计算前 10 个主成分。这个菜单让我可以将这些组件投射到两个或三个组件的任意组合上。PCA 是一种线性投影,通常在检查全局几何时很有效。

t-SNE:t-SNE 是一种流行的非线性降维技术。嵌入式投影仪提供二维和三维 t-SNE 视图。布局是在客户端执行的,为算法的每一步制作动画。因为 t-SNE 经常保留一些局部结构,所以它对于探索局部邻域和寻找聚类很有用。

我还可以基于文本搜索构建专门的线性投影,以便在空间中找到有意义的方向。要定义投影轴,请输入两个搜索字符串或正则表达式。该程序计算标签与这些搜索匹配的点集的质心,并使用质心之间的差向量作为投影轴。

你可以在这个笔记本上查看可视化步骤的完整代码:tensor board-visualization . ipynb

在时尚 MNIST 培训 CNN 模特

现在让我们进入有趣的部分:我将创建各种不同的基于 CNN 的分类模型来评估时尚 MNIST 上的表演。我将使用 Keras 框架构建我们的模型。关于这个框架的更多信息,你可以在这里参考文档。以下是我将尝试并比较其结果的模型列表:

  1. 具有 1 个卷积层的 CNN
  2. 具有 3 个卷积层的 CNN
  3. 具有 4 个卷积层的 CNN
  4. VGG-19 预训练模型

对于所有模型(除了预先训练的模型),我的方法如下:

  • 将原始训练数据(6 万张图像)拆分成 80%训练(4.8 万张图像)和 20%验证 (12000 张图像)优化分类器,同时保留测试数据(1 万张图像)最终评估模型在它从未见过的数据上的准确性。这有助于查看我是否过度拟合训练数据,以及如果验证准确度高于训练准确度,我是否应该降低学习率并训练更多的时期,或者如果训练准确度高于验证,我是否应该停止过度训练。
  • 分类 _ 交叉熵损失函数和 Adam 优化器编译,训练 10 个时期的模型,批量为 256。
  • 然后,添加数据扩充,通过对训练样本进行旋转、移位、缩放生成新的训练样本,再用更新后的数据训练模型 50 个历元。

下面是加载和分割数据的代码:

在加载和分割数据之后,我对它们进行预处理,将它们重新整形为网络期望的形状,并对它们进行缩放,以使所有值都在[0,1]区间内。例如,以前,训练数据存储在 uint8 类型的 shape (60000,28,28)数组中,其值在[0,255]区间内。我将它转换成一个形状为(60000,28 * 28)的 float32 数组,其值介于 0 和 1 之间。

1—1——conv 有线电视新闻网

下面是 CNN 的代码,带有一个卷积层:

训练完模型后,下面是测试损耗和测试精度:

应用数据扩充后,以下是测试损失和测试准确性:

出于视觉目的,我绘制了训练和验证准确性和损失:

你可以在这个笔记本上查看这个模型的完整代码: CNN-1Conv.ipynb

2 — 3 日——conv 有线电视新闻网

以下是 CNN 的代码,具有 3 个卷积层:

训练完模型后,下面是测试损耗和测试精度:

应用数据扩充后,以下是测试损失和测试准确性:

出于视觉目的,我绘制了训练和验证准确性和损失:

你可以在这个笔记本上查看这个模型的完整代码: CNN-3Conv.ipynb

3-4-conv CNN

以下是具有 4 个卷积层的 CNN 的代码:

训练完模型后,下面是测试损耗和测试精度:

应用数据扩充后,以下是测试损失和测试准确性:

出于视觉目的,我绘制了训练和验证准确性和损失:

你可以在这个笔记本上查看这个模型的完整代码: CNN-4Conv.ipynb

4 —迁移学习

对小图像数据集进行深度学习的一种常见且高效的方法是使用预训练的网络。预训练网络是之前在大型数据集上训练过的保存的网络,通常是在大规模图像分类任务上。如果这个原始数据集足够大并且足够通用,那么由预训练网络学习的特征的空间层次可以有效地充当视觉世界的通用模型,因此它的特征可以证明对于许多不同的计算机视觉问题是有用的,即使这些新问题可能涉及与原始任务完全不同的类。

我试图实现 VGG19 预训练模型,这是一个广泛用于 ImageNet 的 ConvNets 架构。以下是您可以遵循的代码:

训练完模型后,下面是测试损耗和测试精度:

出于视觉目的,我绘制了训练和验证准确性和损失:

你可以在这个笔记本上查看这个型号的完整代码: VGG19-GPU.ipynb

最后一次外卖

时尚领域是机器学习和计算机视觉应用的一个非常受欢迎的领域。由于所涉及的特征的高度主观性和语义复杂性,该领域中的问题具有挑战性。我希望这篇文章有助于你了解 4 种不同的方法来构建你自己的卷积神经网络来对时尚图像进行分类。你可以在这个链接查看我的 GitHub repo 中的所有源代码。如果您有任何问题或改进建议,请告诉我!

— —

如果你喜欢这首曲子,我希望你能按下鼓掌按钮👏这样别人可能会偶然发现它。你可以在 GitHub 上找到我自己的代码,在【https://jameskle.com/】上找到更多我的写作和项目。也可以在 推特 上关注我直接发邮件给我 或者 在 LinkedIn 上找我。 注册我的简讯 就在你的收件箱里接收我关于数据科学、机器学习和人工智能的最新想法吧!

不被聘为数据科学家的 4 个最快方法

原文:https://towardsdatascience.com/the-4-fastest-ways-not-to-get-hired-as-a-data-scientist-565b42bd011e?source=collection_archive---------0-----------------------

避免这些常见的错误不会让你被录用。但是不回避它们会让你的申请成为一张被拒绝的单程票。

我看过很多在sharpes minds工作的数据科学简历。

因为这个平台是一个巨大的反馈机器,我们不断收到公司的回复——不仅询问他们是否想面试或雇佣候选人,还询问为什么选择面试或雇佣他们已经面试或雇佣的人。

对数百家公司决策过程的了解,让我们对好的简历有了更多的了解,同样重要的是,也让我们知道了它们不像什么。

每个公司都在寻找不同的东西。让你被谷歌聘用的方法在其他公司可能有效,也可能无效(而且甚至可能毫无意义)。因此,构建“完美的”通用数据科学简历几乎是不可能的。

话虽如此,但一些我们已经看到的明显错误,足以保证你的申请不会被考虑:

1.在简历中突出琐碎的项目

很难想出一个比在你突出的个人项目中突出你在琐碎的概念证明数据集上所做的工作更快的方式来将你的简历扔进“肯定没有”的一堆。

当你有疑问时,这里有一些对你伤害大于帮助的项目:

为什么会伤害你

简历上的空间是有限的。应聘者知道,招聘人员也知道。因此,如果像 MNIST 这样的“训练轮数据集”占据了一些宝贵的空间,这可能会让招聘人员产生疑问,你在数据科学之旅中究竟能走多远。

对此该怎么办

如果你的简历中有这类项目——如果你没有其他更具挑战性和实质性的项目来替代它们——这是一个强烈的迹象,表明你需要花一些时间来建立你的投资组合。

当然,如果你有其他更有趣的项目要展示,那么你肯定会想把它们换过来。

例外

使用经过充分研究的数据集,如 MNIST 或泰坦尼克号数据集,完全有可能构建复杂的项目。如果你在玩你发明的一种新的 GAN,或者你正在复制一个有趣的胶囊网络论文,那就去做吧。

但是请记住,大多数招聘人员都是非技术性的,而且他们通常只是通过寻找关键词来工作,所以你必须非常清楚,你的 MNIST 项目不仅仅涉及琐碎的数字分类任务。

2.在你的投资组合中列出 Udacity 或 Coursera 项目

像 Udacity、Coursera 和 deeplearning.ai 这样的大规模在线开放课程(MOOCs)是深入学习和数据科学的绝佳方式。话虽如此,许多公司对应聘者持怀疑态度,如果这就是他们必须展示给自己的全部的话。

一些需要避免的事情:

  • 拥有一个投资组合,其中大部分是你作为纳米学位/项目的一部分已经完成的项目。
  • 把你的 MOOC 放在太突出的位置,或者作为你简历上第一个与数据科学相关的部分。

为什么会伤害你

招聘过程中有相当多的自我意识。公司希望能够说,他们只雇用“非常特殊的人”,或“前 1%的申请人”,等等。因为现在很多人都有 MOOC 证书,很容易被定型为又一个 Udacity 毕业生,这让你的听起来没那么特别。

招聘人员现在对许多 MOOC 非常熟悉,可以立即识别出属于标准纳米学位或 MOOC 的项目(例如,Udacity 的交通标志分类任务,这一任务不简单,甚至有点有趣,在大量简历中出现)。为了让自己听起来与众不同,你需要关注那些没有被深入研究的问题。

    • *这里我要明确一点: Udacity,Coursera,deeplearning.ai 都是很牛逼的程序。它们也与可雇佣性和技术能力合理相关(根据我们自己的数据)。但是,将他们放在你宣传的数据科学经验清单的顶端(几乎没有其他项目/经验),会给那些正在寻找“真正特别的人”的招聘人员发出危险信号。

对此该怎么办

一旦你完成了你的课程或纳米学位,你会想自己闯一闯,参加 Kaggle 竞赛,或者在数据科学文献中复制有趣论文的结果。

这很重要,因为它:1)让你看起来更独特,2)让你在面试中展示和讨论最前沿的工作,3)表明你有能力自我指导(并且不受支持!)学习。

例外

这条规则的一个例外是你可能已经完成的作为 MOOC 一部分的顶点项目,只要它们是独一无二的。所谓独特,我的意思是你可以自由选择你想要的数据集,并且很大程度上可以自己解决问题。因为这实际上和你自己去做兼职项目没什么不同,所以伤害你的可能性更小。

3.缺乏版本控制/开发运维/数据库技能

不包括表明你知道如何制作数据科学香肠的技能可能是致命的。

以下是一些必备的:

  • 版本控制(例如 GitHub/GitLab)
  • Devops(例如自动气象站/Floydhub/数字海洋/烧瓶)
  • 数据库(如 mySQL/mongoDB)

为什么会伤害你

让人们对数据科学感到兴奋的往往是算法。想到可以解决您的问题的神经网络或增强树架构是很有趣的。

因此,这是大多数人投入时间的地方。问题是设计模型和生产级深度学习或者数据科学不是一回事。

作为一名数据科学家,数据科学中不那么有趣的部分(设置服务器、清理数据)几乎肯定会占据你日常工作的大部分时间,而现实是,仅仅擅长 Python/sk learn/tensor flow/Keras/py torch 已经不够了。

不包括这些基本技能也是被寻找关键词的招聘人员忽略的一个好方法,他们更感兴趣的是找到一个说“不”的理由,而不是一个说“也许”的理由。

没有 GitHub?没有蒙哥?不用了,谢谢。

对此该怎么办

如果你有技能,但没有在简历中列出来,那就列出来。如果你没有任何版本控制、devops 和数据库工具的经验,你需要一些。不仅仅是因为它在简历上看起来不错,而是因为它是你作为数据科学家的必备技能之一。

例外

如果你申请更高级的职位,列出这些技能可能不那么重要,因为在这些职位上,你对数据科学工具的经验是必不可少的。

4.没有从你建立的项目中学到任何东西

在你的简历中包括一个项目,如果你面试的话,很有可能会被问到这个问题。

如果面试官问你在某个项目中学到了什么,“没什么,真的”不是正确的答案。

为什么会伤害你

因为你已经花时间做了一个项目,与你从项目中学到的东西相关的问题会告诉面试官很多关于你有多喜欢深入思考你的问题,以及你的沟通技巧。

即使是一个相当简单的数据集也不太可能没有东西可以教你,所以不明智地离开一个项目可能会引发严重的危险信号。

对此该怎么办

如果你的简历上列出了一个项目,并且你获得了一家公司的面试机会,准备好一些见解,这些见解可能会让那些没有使用过你在那个项目中处理过的数据集的人感到惊讶。

例外

没有,真的。如果你在简历中包括一个项目,你真的应该从创建项目中学到东西。

奖金:错别字

好吧,这不是特定于数据科学的,但我们发现错别字与面试表现有如此大的关联,这着实让我们震惊。一直以来,简历中有错别字的人——无论是拼写错误,还是格式潦草——比简历中没有错别字的人表现更差。

错别字是完全非受迫性错误的一个很好的例子,不管你的经验水平如何,你都不应该犯这种错误。而且客观上导致申请->面试转换率较低。

为什么会伤害你

不出所料,对简历细节的关注与对项目细节和技术开发的关注是相关的,而且被认为是相关的。

对此该怎么办

让一个 a)以英语为母语,b)注重细节的朋友审阅你的简历。如果你不得不这样做,向他们承诺,如果你被录用,给他们 50 美元,只是为了激励他们抓住任何不合适的小细节。

例外

他们应该没有例外。

你在学校或网络公开课上学不到的 4 种机器学习技能

原文:https://towardsdatascience.com/the-4-machine-learning-skills-you-wont-learn-in-school-or-moocs-c641cae24f1f?source=collection_archive---------4-----------------------

想获得灵感?快来加入我的 超级行情快讯 。😎

机器学习(ML)在过去几年里变得非常流行。为什么……很简单,因为它有效!最新的研究取得了破纪录的成果,甚至在一些任务上超过了人类的表现。当然,结果是许多人争先恐后地进入这个领域;为什么不呢。它资金充足,技术令人兴奋和有趣,并且有很大的增长空间。

就正规教育而言,学习机器学习有两条主要途径:学校(大学/学院)或 MOOCs(大规模开放在线课程)。正式的学校教育,比如获得硕士或博士学位,可以给你非常深入的技术和理论知识,但这也相当昂贵。MOOCs 是免费的,你肯定可以从中学习如何实际使用许多 ML 算法,尽管你不会获得通常从大学/学院获得的官方证书。然而,这两者都可以有效地用于获得在机器学习领域工作所需的技术知识。

但是…还是少了点什么。归根结底,机器学习算法正被应用于现实世界的商业问题。机器学习简单来说就是作为一个为客户创造价值的工具。这与课堂上不同,在课堂上,作业通常是单独完成的,几乎没有商业目标。重要的不仅是 ML 模型的准确性,还有它的可解释性、速度、内存消耗,以及在一天结束时,该模型如何适应产品以创造真正的价值。

今天,我将与你分享 4 种你在学校或 MOOCs 中学不到的机器学习技巧。这些都是可以通过现实世界的经验来学习的技能,使用 ML 来解决现实世界的问题并创造真正的价值。希望这篇文章能让你深入了解机器学习是如何实际应用的,以及你可以学习哪些技能来成为你所在领域的专家。

让我们开始吧!

将机器学习与商业目标联系起来

当你在任何涉及软件的领域工作时,包括机器学习,实际上有两个主要的理解方面:技术观点和商业观点。这两方面的知识是成为你所在领域专家的关键。

你在课堂上学到了很多技术部分。如何用 Python 编码,机器学习和数据科学算法,技术报告写作等。在课堂上,这些东西与商业是隔绝的。但是当你开始在这个领域实际工作时,你工作的每一个技术方面都与一个商业目标相关联。为什么你的老板像你一样要增加当前系统的准确性?很可能是因为更好的准确性意味着更多的价值,更多的价值意味着更好的产品,而更好的产品意味着更多的客户和金钱!

能够将这些点联系起来是很重要的,这样你就可以找到解决技术问题的最佳方法。你会知道什么是重要的部分,从而知道你应该关注什么。随着你在你的领域中资历的增加,你可能会被期望将业务目标转化为技术目标,以找到完成工作的最佳方式。技术过去是,现在仍然是用来完成更伟大事业的工具。始终考虑你的技术技能如何与商业目标相联系,以创造真正的价值。

型号选择

在课堂上,您将了解不同的 ML 模型。线性回归、支持向量机、决策树、神经网络……感觉有一百万个!所以最大的问题是…你用哪一个?你可能以前使用过所有这些算法,从头开始编写它们或者使用像 TensorFlow 和 Scikit Learn 这样的库。但是为什么要选择一个而不是另一个呢?现在很多人都在使用深度学习,那么我们应该默认它吗?

所有的方法都会有权衡,这就是科学和工程的本质!为了定义模型最重要的属性,将这些权衡与您的业务目标联系起来是很重要的。

一般来说,机器学习有一个被称为“没有免费的午餐”的定理,基本上是说没有一个 ML 算法对所有问题都是最好的。不同 ML 算法的性能很大程度上取决于数据的大小和结构。因此,除非我们通过简单的反复试验直接测试我们的算法,否则正确的算法选择是不清楚的。

但是,每个 ML 算法都有一些优点和缺点,我们可以用它们作为指导。虽然一种算法并不总是比另一种算法更好,但是每种算法都有一些特性,我们可以用它们来指导快速选择最佳算法并调整超参数。我也为写了一篇关于数据科学的文章。例如,神经网络(和深度学习)通常可以达到非常高的精确度,但根本不太容易解释。当你需要确切地知道你的结果来自哪里时,使用它们可能不是一个非常好的主意;但是如果你只关心最终的输出,它们是完美的!另一方面,决策树非常容易理解,因为它们的设计非常直观。它们可能达不到深度网络所能达到的精确度,但是当你想要确切地了解你的结果来自哪里时,它们是非常有用的。

模型部署

机器学习教育倾向于深入到 ML 算法本身,教你它们在技术层面上如何工作。一旦您的模型完全定型,通常的做法是在一个公开的、不可见的测试数据集上测试它,以对模型性能进行基准测试。一旦我们验证了我们的模型能够很好地完成我们的任务,就必须将它部署到您为其创建模型的完整软件产品中。

从高层次来看,部署本质上涉及到将您的算法“插入”到系统的其余部分。你的模型的作用仅仅是接受一个输入,并使用它来做出某种对系统有用的预测。因此,从一个更高的层面,从系统的层面来理解你的软件是很重要的。

到目前为止,我们已经讨论了如何在学校学习非常低级的技术知识,而业务目标是定义产品价值交付的非常高级的目标。将您的软件理解为部署您的模型的连接组件的系统正好位于中间。你必须了解你的系统的架构,连接块的管道。然后,您可以将您的模型视为插入到系统中的另一个组件、块或模块。

让你的钱得到最大的回报

当我们在学校或参加在线课程时,我们有大把的时间去做实验。我们可以永远做研究,尝试使用最新最棒的算法,甚至尝试所有的算法来找到最好的!在现实世界中,这可能不是最有效的做事方式。

企业的时间和资源是有限的。他们不能整天尝试每一种可能的方法,看哪一种是最好的。他们需要找到高效做事的最佳方式(阅读:不浪费时间和金钱)。

你需要从物有所值的角度来看待事情。因此,也许有一种新的最先进的回归算法,但它在技术上很有挑战性,实施起来可能很耗时。与其花费如此多的时间和金钱来尝试使用它,你可能会得到更多的回报,只需为你当前的算法获取更多的数据来进行训练,或者使用最佳实践“技巧”来提高你的准确性几个点。你的算法的某些方面可能会增加大量的价值,而其他方面则不会。也许你的算法比现在更精确并不重要,但是如果它非常快,产品会有更多的价值!

在课堂上,我们很容易忽略这些事情,并且总是以某个方面的最佳表现模式为目标,忘记了我们选择的所有路径都有其权衡。关键是找出哪些权衡是值得的,哪些给你最好的回报。而且,你通常会注意到,最重要的事情与业务目标相关联。

机器学习和所有软件一般来说只是一套工具;在这种情况下,获得最大收益意味着知道如何最好地使用这些工具来完成工作。

喜欢学习?

在 twitter 上关注我,我会在这里发布所有最新最棒的人工智能、技术和科学!也在 LinkedIn 上和我联系吧!

机器学习项目成功的 4 个技巧

原文:https://towardsdatascience.com/the-4-most-important-success-factors-for-any-machine-learning-project-bfcb17d15b60?source=collection_archive---------7-----------------------

如果你是产品经理并且想用机器学习来做点什么,这里有 4 件最重要的事情要记住:

1.将工程置于数据科学之上

机器学习项目首先是一个软件项目。许多数据科学家几乎没有构建架构良好、可靠且易于部署的软件的经验。当你建立一个生产系统时,这将成为一个问题。

根据经验,**工程师获得数据科学技能的速度比数据科学家获得工程经验的速度要快。**如果有疑问,与拥有 5 年以上经验和对人工智能充满热情的 python 工程师合作,而不是与首次尝试构建业务应用程序的数据科学博士合作。

2.变瘦

尽早降低风险很重要。用具体的里程碑构建您的项目:

  1. 完成原型:了解你的想法是否有希望 1 天— 2 周
  2. 离线测试系统:调优模型并在现有数据上严格测试2-4 周
  3. 在线测试系统:完成模型并现场测试2-4 周
  4. **上线:**自动化数据更新、模型培训和代码部署:2–4 周
  5. ****持续改进:(可选)12 个月

总时间表:1-3 个月

一个有经验的团队应该能够为几乎任何项目遵循这些时间表。让团队专注于在 1-3 个月内建立一个实时系统。在它上线后,再决定进一步的改进是否值得。

这些诱惑会不必要地延长你的项目:

  • 等待完美的数据
  • 使用错误的工具(太复杂或太慢)
  • 过度设计可扩展性
  • 无休止地玩弄算法(见下一点)

3.算法不重要

机器学习系统有很多有趣的旋钮可以玩。不要。

值得花时间去做的改进(按重要性排序):

  1. 获取更多(相关)输入数据
  2. 以更好的方式预处理数据
  3. 选择正确的算法并正确调整。

算法是最不重要的因素。简单地选择一个有效的算法。无休止地升级算法很诱人,但很可能不会给你预期的结果。

4.交流,交流,交流

尽可能多地分享业务背景:

一旦工程团队开始构建,他们必须做出许多选择。他们越了解你的优先事项,就越能做出正确的决定。你至少应该告诉他们:

  • 战略重点

这是修复一个关键问题吗?它需要每天处理数百万个请求吗?或者是对未来产品的研究?

  • 当前流程的问题

目前的流程是否耗时过长?是不是太不准确了?还是说有很多数据没有机器学习根本无法考虑进去?

  • 输入和输出

输入:你(作为一个人)会使用什么数据来做出正确的决定?

产出:谁将消费产出?多久一次?需要实时吗?

  • 性能指标

最重要的指标是什么:点击率?销售?ROI?假阳性率?

  • 预期精度

如果你想优化转换率,那就不值得再花 2 周的时间来提高 2%的准确率。

如果你建立医疗诊断系统,那么即使是 1%的假阴性也是不可接受的。

TL;速度三角形定位法(dead reckoning)

  • 将工程置于数据科学之上。
  • 通过精益降低风险。
  • 不要被算法分心。
  • 与您的开发人员共享所有业务需求。

想了解更多? 我们是, 数据收入 ,一个来自德国柏林的机器学习工程师团队。我们为一些最大的网络、电视和生物信息学公司构建定制的机器学习系统。

直接给我写信:m . Schmitt[at]data revenue . de

进一步阅读

4 个推荐引擎可以预测你的电影口味

原文:https://towardsdatascience.com/the-4-recommendation-engines-that-can-predict-your-movie-tastes-109dc4e10c52?source=collection_archive---------1-----------------------

“A person holding a clapper board in a desert” by Jakob Owens on Unsplash

今晚我应该看什么电影?

当你下班回家的时候,你曾经不得不回答这个问题至少一次吗?至于我——是的,而且不止一次。从网飞到 Hulu,鉴于现代消费者对个性化内容的巨大需求,建立强大的电影推荐系统的需求极其重要。

推荐系统的一个例子是这样的:

  • 用户 A 看权力的游戏绝命毒师
  • 用户 B 在上搜索《权力的游戏,然后系统从收集的关于用户 a 的数据中建议绝命毒师

推荐系统不仅用于电影,还用于其他多种产品和服务,如亚马逊(书籍、商品)、Pandora/Spotify(音乐)、谷歌(新闻、搜索)、YouTube(视频)等。

Netflix Recommendations

在这篇文章中,我将向你展示如何实现 4 种不同的电影推荐方法,并对它们进行评估,看看哪一种具有最好的性能。

电影镜头数据集

我正在使用的数据集是 MovieLens ,这是互联网上最常见的数据集之一,可用于构建推荐系统。我正在使用的数据集版本( 1M )包含了 2000 年加入 MovieLens 的 6040 名 MovieLens 用户制作的约 3900 部电影的 1000209 个匿名评级。

在处理数据并进行一些探索性分析后,以下是该数据集最有趣的特性:

这是电影片名的文字云可视化:

MovieLens Titles

很美,不是吗?我可以识别出这个数据集中有很多电影特许经营权,例如 IIIII …除此之外,还有

下面是用户评分的分布:

MovieLens Ratings

看起来用户对他们的评价很慷慨。在 5 分制中,平均得分为 3.58 分。一半的电影有 4 级和 5 级。我个人认为,5 级评级技能不是一个好的指标,因为人们可能有不同的评级风格(即,人 A 对一般电影总是使用 4,而人 B 对他们最喜欢的电影只给出 4)。每个用户至少评价了 20 部电影,所以我怀疑这种分布可能只是由电影质量的偶然差异造成的。

这里还有另外一个词——电影类型的云:

MovieLens Genres

排名前五的类型依次是:戏剧、喜剧、动作片、惊悚片和爱情片。

现在让我们继续探索可以使用的 4 个推荐系统。以下是他们,按照各自的展示顺序:

  1. 基于内容的过滤
  2. 基于记忆的协同过滤
  3. 基于模型的协同过滤
  4. 深度学习/神经网络

1-基于内容

基于内容的推荐器依赖于被推荐项目的相似性。基本思想是,如果你喜欢一个项目,那么你也会喜欢一个“相似”的项目。当很容易确定每个项目的上下文/属性时,它通常工作得很好。

基于内容的推荐器与用户提供的数据一起工作,该数据或者是针对电影镜头数据集的明确的电影评级。基于该数据,生成用户简档,然后使用该简档向用户提出建议。随着用户提供更多的输入或对推荐采取行动,引擎变得越来越准确。

数学

术语频率(TF)逆文档频率(IDF) 的概念用于信息检索系统以及基于内容的过滤机制(例如基于内容的推荐器)。它们用于确定文档/文章/新闻/电影等的相对重要性。

TF 就是一个单词在文档中出现的频率。IDF 是文档在整个语料库中出现频率的倒数。使用 TF-IDF 主要有两个原因:假设我们在谷歌上搜索“最新欧洲足球赛的结果。可以肯定的是""将比"足球比赛"出现得更频繁,但是足球比赛的相对重要性高于搜索查询角度。在这种情况下,TF-IDF 加权在确定项目(文档)的重要性时否定了高频词的影响。

下面是计算 TF-IDF 分数的公式:

TF-IDF Equation

在计算 TF-IDF 分数之后,我们如何确定哪些项目彼此更接近,而不是更接近用户简档?这是使用向量空间模型完成的,该模型根据向量之间的角度计算接近度。在该模型中,每个项目作为其属性的向量(也是向量)存储在一个 n 维空间中,并且向量之间的角度被计算以确定向量之间的相似性。接下来,也基于用户对项目的先前属性的动作来创建用户简档向量,并且也以类似的方式来确定项目和用户之间的相似性。****

Vector Space Model

句子 2 更可能使用术语 2,而不是术语 1。对于句子 1 反之亦然。计算这种相对度量的方法是通过取句子和术语之间角度的余弦来计算的。使用余弦的最终原因是余弦的值将随着角度值的减小而增加,这意味着更相似。向量被长度归一化,之后它们变成长度为 1 的向量,然后余弦计算简单地是向量的和积。

代码

有了这些数学知识,我将构建一个基于内容的推荐引擎,根据电影类型计算电影之间的相似性。它会根据电影的类型推荐与特定电影最相似的电影。

我没有一个量化指标来判断机器的性能,所以这将不得不做定性。为了做到这一点,我将使用来自 scikit-learnTfidfVectorizer 函数,它将文本转换为可用作估计器输入的特征向量。

**from** **sklearn.feature_extraction.text** **import** TfidfVectorizer
tf = TfidfVectorizer(analyzer='word',ngram_range=(1, 2),min_df=0, stop_words='english')
tfidf_matrix = tf.fit_transform(movies['genres'])

我将使用 余弦相似度 来计算表示两部电影相似度的数值。由于我使用了 TF-IDF 矢量器,计算点积将直接给出余弦相似性得分。因此,我将使用 sklearn 的 linear_kernel 而不是余弦 _ 相似度,因为它要快得多。

**from** **sklearn.metrics.pairwise** **import** linear_kernel
cosine_sim = linear_kernel(tfidf_matrix, tfidf_matrix)

我现在有了数据集中所有电影的成对余弦相似矩阵。下一步是编写一个函数,根据余弦相似性得分返回 20 部最相似的电影。

*# Build a 1-dimensional array with movie titles*
titles = movies['title']
indices = pd.Series(movies.index, index=movies['title'])

*# Function that get movie recommendations based on the cosine similarity score of movie genres*
**def** genre_recommendations(title):
    idx = indices[title]
    sim_scores = list(enumerate(cosine_sim[idx]))
    sim_scores = sorted(sim_scores, key=**lambda** x: x[1], reverse=**True**)
    sim_scores = sim_scores[1:21]
    movie_indices = [i[0] **for** i **in** sim_scores]
    **return** titles.iloc[movie_indices]

该建议

让我们尝试获得几部电影的最佳推荐,看看这些推荐有多好。

genre_recommendations('Good Will Hunting (1997)').head(20)

Recommendations Similar to “Good Will Hunting”

genre_recommendations('Toy Story (1995)').head(20)

Recommendations Similar to “Toy Story”

genre_recommendations('Saving Private Ryan (1998)').head(20)

Recommendations Similar to “Saving Private Ryan”

如你所见,我有一份相当不错的推荐名单,分别是《心灵捕手》(T12)、《剧情》(T13)、《玩具总动员》(T14)、《动画、儿童、喜剧》(T15)、《拯救大兵瑞恩》(T16)、《动作、惊悚、战争》(T17)。

总的来说,以下是使用基于内容的推荐的优点:

  • 不需要关于其他用户的数据,因此没有冷启动或稀疏性问题。
  • 可以推荐给口味独特的用户。
  • 可以推荐新的和不受欢迎的项目。
  • 可以通过列出导致项目被推荐的内容特征(在本例中是电影类型)来为推荐的项目提供解释

但是,使用这种方法有一些缺点:

  • 找到合适的特征很难。
  • 不推荐用户内容简档之外的项目。
  • 无法利用其他用户的质量判断。

2 —协同过滤

协同过滤推荐器完全基于过去的行为,而不是基于上下文。更具体地说,它是基于两个用户的偏好、品味和选择的相似性。它分析一个用户与另一个用户的口味有多相似,并在此基础上提出建议。

例如,如果用户 A 喜欢电影 1、2、3,而用户 B 喜欢电影 2、3、4,那么他们有相似的兴趣,A 应该喜欢电影 4,B 应该喜欢电影 1。这使得它成为最常用的算法之一,因为它不依赖于任何附加信息。

一般来说,协同过滤是推荐引擎的主力。该算法有一个非常有趣的特性,即能够自己进行特征学习,这意味着它可以开始自己学习使用什么特征。

数学

有两种主要类型的基于记忆的协同过滤算法:

  1. 用户-用户协同过滤:在这里,我们根据相似性找到相似的用户,并推荐第一个用户的相似者过去选择的电影。这种算法非常有效,但需要大量的时间和资源。它需要计算每个用户对信息,这需要时间。因此,对于大型基础平台,如果没有非常强大的可并行化系统,该算法很难实现。
  2. 逐项协同过滤:与之前的算法非常相似,但我们不是寻找用户的相似物,而是尝试寻找电影的相似物。一旦我们有了电影的相似矩阵,我们就可以很容易地向从数据集中给任何电影评分的用户推荐相似的电影。该算法比用户-用户协同过滤消耗的资源少得多。因此,对于一个新用户,该算法比用户-用户协作花费的时间少得多,因为我们不需要用户之间的所有相似性分数。并且对于固定数量的电影,电影-电影相似矩阵随着时间是固定的。

在这两种情况下,我们都会建立一个相似度矩阵。对于用户-用户协同过滤,用户相似性矩阵将由一些度量任意两对用户之间相似性的距离度量组成。同样,项目相似性矩阵将测量任意两对项目之间的相似性。

在协同过滤中通常使用 3 种距离相似性度量:

  1. Jaccard 相似度:相似度基于对项目 A 和 B 评分的用户数量除以对项目 A 或 B 评分的用户数量。它通常用于我们没有数字评分而只有布尔值的情况,如购买的产品或点击的添加。
  2. 余弦相似度:(和基于内容的系统一样)相似度是 A 和 b 的项目向量的 2 个向量之间的夹角余弦,向量越近,夹角越小,余弦越大。
  3. 皮尔逊相似度:相似度是两个向量之间的皮尔逊系数。出于多样性的目的,我将在这个实现中使用皮尔逊相似度**。**

代码

由于我的笔记本电脑的计算能力有限,我将只使用评级的子集来构建推荐系统。特别是,我将从 100 万个收视率中随机抽取 2 万个收视率样本(2%)。

我使用 scikit-learn 库将数据集分成测试和训练。Cross _ validation . train _ test _ split根据测试实例的百分比将数据混洗并拆分成两个数据集,这里是 0.2。

**from** **sklearn** **import** cross_validation **as** cv
train_data, test_data = cv.train_test_split(small_data, test_size=0.2)

现在我需要创建一个用户条目矩阵。因为我已经将数据分为测试和训练,所以我需要创建两个矩阵。培训矩阵包含 80%的评级,测试矩阵包含 20%的评级。

*# Create two user-item matrices for training and testing data*
train_data_matrix = train_data.as_matrix(columns = ['user_id', 'movie_id', 'rating'])
test_data_matrix = test_data.as_matrix(columns = ['user_id', 'movie_id', 'rating'])

现在我使用 sklearn 的 pairwise_distances 函数来计算皮尔逊相关系数。该方法提供了一种将距离矩阵作为输入的安全方法,同时保持了与许多其他采用向量数组的算法的兼容性。

**from** **sklearn.metrics.pairwise** **import** pairwise_distances

*# User Similarity Matrix*
user_correlation = 1 - pairwise_distances(train_data, metric='correlation')
user_correlation[np.isnan(user_correlation)] = 0*# Item Similarity Matrix*
item_correlation = 1 - pairwise_distances(train_data_matrix.T, metric='correlation')
item_correlation[np.isnan(item_correlation)] = 0

有了相似性矩阵,我现在可以预测数据中没有包括的评分。使用这些预测,我可以将它们与测试数据进行比较,以尝试验证我们的推荐模型的质量。

*# Function to predict ratings*
**def** predict(ratings, similarity, type='user'):
    **if** type == 'user':
        mean_user_rating = ratings.mean(axis=1)
        *# Use np.newaxis so that mean_user_rating has same format as ratings*
        ratings_diff = (ratings - mean_user_rating[:, np.newaxis])
        pred = mean_user_rating[:, np.newaxis] + similarity.dot(ratings_diff) / np.array([np.abs(similarity).sum(axis=1)]).T
    **elif** type == 'item':
        pred = ratings.dot(similarity) / np.array([np.abs(similarity).sum(axis=1)])
    **return** pred

评估

有许多评估指标,但用于评估预测评级准确性的最常用指标之一是均方根误差(RMSE)** 。我将使用 sklearn 的 mean_square_error (MSE) 函数,其中 RMSE 就是 MSE 的平方根。我将使用 scikit-learn 的均方误差函数作为我的验证指标。比较基于用户和基于项目的协同过滤,看起来基于用户的协同过滤给出了更好的结果。**

**from** **sklearn.metrics** **import** mean_squared_error
**from** **math** **import** sqrt

*# Function to calculate RMSE*
**def** rmse(pred, actual):
    *# Ignore nonzero terms.*
    pred = pred[actual.nonzero()].flatten()
    actual = actual[actual.nonzero()].flatten()
    **return** sqrt(mean_squared_error(pred, actual))*# Predict ratings on the training data with both similarity score*
user_prediction = predict(train_data_matrix, user_correlation, type='user')
item_prediction = predict(train_data_matrix, item_correlation, type='item')*# RMSE on the train data*
print('User-based CF RMSE: ' + str(rmse(user_prediction, train_data_matrix)))
print('Item-based CF RMSE: ' + str(rmse(item_prediction, train_data_matrix)))## Output
User-based CF RMSE: 699.9584792778463
Item-based CF RMSE: 114.97271725933925

模型训练的 RMSE 是度量信号和噪声被模型解释了多少的度量。我注意到我的 RMSE 相当大。我想我可能过度拟合了训练数据。

总的来说,基于记忆的协同过滤易于实现并产生合理的预测质量。然而,这种方法有一些缺点:

  • 它没有解决众所周知的冷启动问题,即当新用户或新项目进入系统时。
  • 它不能处理稀疏数据,这意味着很难找到对相同项目进行评级的用户。
  • 当没有任何评级的新用户或项目进入系统时,它会受到影响。
  • 它倾向于推荐热门商品。

****注:基于内容和基于记忆的协同过滤的完整代码可以在这个 Jupyter 笔记本中找到。

Collaborative Filtering vs Content-Based Filtering

3 —矩阵分解

在之前的尝试中,我已经使用了基于记忆的协同过滤来根据用户的评分数据进行电影推荐。我只能在一个非常小的数据样本(20,000 个评级)上尝试它们,结果得到了相当高的均方根误差(糟糕的推荐)。计算项目或用户之间的距离关系的基于记忆的协同过滤方法有这两个主要问题:

  1. 它不太适合大规模数据集,尤其是基于用户行为相似性的实时推荐——这需要大量计算。
  2. 评级矩阵可能过度适合用户口味和偏好的嘈杂表示。当我们在原始数据上使用基于距离的“邻域”方法时,我们匹配稀疏的低级细节,我们假设这些细节代表用户的偏好向量而不是向量本身。

3 Reasons to Reduce Data’s Dimensionality

因此,我需要应用降维技术来从原始数据中提取口味和偏好,也就是所谓的低秩矩阵分解。为什么要降维?

  • 我可以发现原始数据中隐藏的相关性/特征。
  • 我可以删除无用的冗余和嘈杂的功能。
  • 我可以更容易地解释和可视化数据。
  • 我也可以访问更容易的数据存储和处理。

数学

基于模型的协同过滤 是在 矩阵分解(MF) 的基础上得到更大的曝光,主要作为潜变量分解和降维的无监督学习方法。矩阵分解被广泛用于推荐系统,与基于记忆的 CF 相比,它可以更好地处理可伸缩性和稀疏性:

  • MF 的目标是从已知的评分中学习用户的潜在偏好和项目的潜在属性(学习描述评分特征的特征),然后通过用户和项目的潜在特征的点积来预测未知的评分。
  • 当你有一个非常稀疏的矩阵,有很多维度,通过做矩阵分解,你可以把用户项矩阵重新构造成低秩结构,你可以用两个低秩矩阵相乘来表示矩阵,其中的行包含潜在向量。
  • 通过将低秩矩阵相乘,填充原始矩阵中缺少的条目,使该矩阵尽可能接近原始矩阵。

一种众所周知的矩阵分解方法是 【奇异值分解】 。在高层次上,SVD 是一种将矩阵 A 分解为原始矩阵 A 的最佳低秩(即更小/更简单)近似的算法。在数学上,它将 A 分解为两个酉矩阵和一个对角矩阵:

SVD Equation

其中 A 是输入数据矩阵(用户评分) U 是左奇异向量(用户“特征”矩阵) Sum 是奇异值对角矩阵(实质上是每个概念的权重/强度) V^T 是右奇异向量(电影“特征”矩阵)。u 和 VT 是列正交的,代表不同的东西: U 代表用户“喜欢”每个特征的程度和 **VT 代表每个特征与每个电影的相关程度。**

为了得到较低等级的近似,我采用这些矩阵并只保留前 k 个特征,这可以被认为是潜在的品味和偏好向量。

代码

Scipy 和 Numpy 都有进行奇异值分解的函数。我将使用 Scipy 函数 svds ,因为它让我可以选择要使用多少潜在因素来逼近原始评级矩阵(而不是在此之后将其截断)。

**from** **scipy.sparse.linalg** **import** svds 
U, sigma, Vt = svds(Ratings_demeaned, k = 50)

因为我要利用矩阵乘法来获得预测,所以我要将 Sum(现在是值)转换成对角矩阵形式。

sigma = np.diag(sigma)

我现在有了为每个用户预测电影收视率所需的一切。我可以通过数学和矩阵乘法 u,Sum,和 V^T,得到 a 的秩 k = 50 的近似值,一次完成

但是首先,我需要将用户均值加回去,以获得实际的星级预测。

all_user_predicted_ratings = np.dot(np.dot(U, sigma), Vt) + user_ratings_mean.reshape(-1, 1)

有了每个用户的预测矩阵,我可以构建一个函数来为任何用户推荐电影。为了便于比较,我返回用户已经评级的电影列表。

preds = pd.DataFrame(all_user_predicted_ratings, columns = Ratings.columns)

现在,我编写一个函数来返回指定用户尚未评级的预测评级最高的电影。

**def** recommend_movies(predictions, userID, movies, original_ratings, num_recommendations):

    *# Get and sort the user's predictions*
    user_row_number = userID - 1 *# User ID starts at 1, not 0*
    sorted_user_predictions = preds.iloc[user_row_number].sort_values(ascending=False) *# User ID starts at 1*

    *# Get the user's data and merge in the movie information.*
    user_data = original_ratings[original_ratings.user_id == (userID)]
    user_full = (user_data.merge(movies, how = 'left', left_on = 'movie_id', right_on = 'movie_id').
                     sort_values(['rating'], ascending=False)
                 )

    *# Recommend the highest predicted rating movies that the user hasn't seen yet.*
    recommendations = (movies[~movies['movie_id'].isin(user_full['movie_id'])].
         merge(pd.DataFrame(sorted_user_predictions).reset_index(), how = 'left',
               left_on = 'movie_id',
               right_on = 'movie_id').
         rename(columns = {user_row_number: 'Predictions'}).
         sort_values('Predictions', ascending = False).
                       iloc[:num_recommendations, :-1]
                      )

    **return** user_full, recommendations

评估

我将使用库来评估其在 MovieLens 数据集上的 RMSE(均方根误差),而不是像上次那样手动评估。这是 Python Scikit-Learn 的构建和分析推荐系统。

***# Import libraries from Surprise package*
**from** **surprise** **import** Reader, Dataset, SVD, evaluate

*# Load Reader library*
reader = Reader()

*# Load ratings dataset with Dataset library*
data = Dataset.load_from_df(ratings[['user_id', 'movie_id', 'rating']], reader)

*# Split the dataset for 5-fold evaluation*
data.split(n_folds=5)*# Use the SVD algorithm.*
svd = SVD()

*# Compute the RMSE of the SVD algorithm.*
evaluate(svd, data, measures=['RMSE'])**

我得到了一个平均值均方根误差0.8736,相当不错。**

该建议

让我们试着为 ID 为 1310 的用户推荐 20 部电影。

**predictions = recommend_movies(preds, 1310, movies, ratings, 20)predictions**

Recommendations using SVD

这些看起来是很好的建议。很高兴看到,虽然我实际上没有使用电影的类型作为特征,但截断矩阵分解的特征“拾取”了用户的潜在品味和偏好。我推荐了一些喜剧、戏剧和爱情电影——这些都是这个用户评价最高的电影类型。

****注:SVD 矩阵分解的完整代码可以在这本 Jupyter 笔记本中找到。

4 —深度学习

数学

使用深度学习的思路类似于基于模型的矩阵分解。在矩阵分解中,我们将原始稀疏矩阵分解成 2 个低秩正交矩阵的乘积。对于深度学习实现,我们不需要它们是正交的,我们希望我们的模型能够学习嵌入矩阵本身的值。对于特定的电影-用户组合,从嵌入矩阵中查找用户潜在特征和电影潜在特征。这些是进一步线性和非线性图层的输入值。我们可以将此输入传递给多个 relu、线性或 sigmoid 层,并通过任何优化算法(Adam、SGD 等)学习相应的权重。).

代码

Architecture for Neural Network

以下是我的神经网络的主要组成部分:

  • 左侧嵌入层,通过潜在因素矩阵创建用户。
  • 通过潜在因素矩阵创建电影的右嵌入层。
  • 当这些图层的输入是(I)用户 id 和(ii)电影 id 时,它们将分别返回用户和电影的潜在因素向量。
  • 采用这两个潜在向量的点积来返回预测评级的合并层。

这段代码基于阿尔凯斯特的博客文章Keras中概述的方法。

然后,我使用均方误差(MSE)作为损失函数和 AdaMax 学习算法来编译模型。

***# Define model*
model = CFModel(max_userid, max_movieid, K_FACTORS)
*# Compile the model using MSE as the loss function and the AdaMax learning algorithm*
model.compile(loss='mse', optimizer='adamax')**

现在我需要训练模型。这一步将是最耗时的一步。在我的特殊情况下,对于我们的数据集,它有近 100 万个评级,近 6,000 个用户和 4,000 部电影,我在我的 MacBook 笔记本电脑 CPU 内每个时期大约 6 分钟(30 个时期~ 3 小时)训练了模型。我以 90/10 的比例分割了训练和验证数据。

***# Callbacks monitor the validation loss*
*# Save the model weights each time the validation loss has improved*
callbacks = [EarlyStopping('val_loss', patience=2), 
             ModelCheckpoint('weights.h5', save_best_only=True)]

*# Use 30 epochs, 90% training data, 10% validation data* 
history = model.fit([Users, Movies], Ratings, nb_epoch=30, validation_split=.1, verbose=2, callbacks=callbacks)**

下一步是实际预测随机用户对随机电影的评价。下面,我对所有用户和所有电影应用新训练的深度学习模型,对每个用户和电影使用 100 维嵌入。

***# Use the pre-trained model*
trained_model = CFModel(max_userid, max_movieid, K_FACTORS)
*# Load weights*
trained_model.load_weights('weights.h5')**

这里我定义了一个函数来预测用户对未评级项目的评级。

***# Function to predict the ratings given User ID and Movie ID*
**def** predict_rating(user_id, movie_id):
    **return** trained_model.rate(user_id - 1, movie_id - 1)**

评估

在上面的训练过程中,每当验证损失有所改善时,我都会保存模型权重。因此,我可以使用该值来计算最佳验证均方根误差。

***# Show the best validation RMSE*
min_val_loss, idx = min((val, idx) **for** (idx, val) **in** enumerate(history.history['val_loss']))**print** 'Minimum RMSE at epoch', '{:d}'.format(idx+1), '=', '{:.4f}'.format(math.sqrt(min_val_loss))## Output
Minimum RMSE at epoch 17 = 0.8616**

最好的验证损失是在第 17 个时期的 0.7424。取那个数的平方根,得到了 0.8616 的 RMSE 值,比 SVD 模型得到的 RMSE(0.8736)要好。

该建议

这里我给用户 ID 2000 做一个未分级的 20 部电影的推荐列表,按照预测值排序。让我们看看。

**recommendations = ratings[ratings['movie_id'].isin(user_ratings['movie_id']) == False][['movie_id']].drop_duplicates()recommendations['prediction'] = recommendations.apply(**lambda** x: predict_rating(TEST_USER, x['movie_id']), axis=1)recommendations.sort_values(by='prediction', ascending=False).merge(movies, on='movie_id', how='inner',
suffixes=['_u', '_m']).head(20)**

Recommendations using Deep Learning / Neural Networks

这个模型比我以前尝试过的所有方法(基于内容的、用户-项目相似性的协同过滤,SVD)都表现得更好。我当然可以通过增加更多的线性和非线性层来提高这个模型的性能。

****注:深度学习模型的完整代码可以在本 Jupyter 笔记本中找到。

最后一次外卖

推荐引擎是您的伴侣和顾问,通过为您提供量身定制的选项和创建个性化的体验来帮助您做出正确的选择。毫无疑问,推荐引擎在新时代越来越受欢迎和重要。学会使用它们对企业更有竞争力,对消费者更有效率,这将是对你最有利的。

我希望这篇文章有助于你了解 4 种不同的方法来建立你自己的电影推荐系统。你可以通过这个链接查看我的 GitHub repo 中的所有源代码(https://github.com/khanhnamle1994/movielens)。如果您有任何问题或改进建议,请告诉我!

— —

如果你喜欢这首曲子,我希望你能按下鼓掌按钮👏这样别人可能会偶然发现它。你可以在 GitHub 上找到我自己的代码,在【https://jameskle.com/】上找到更多我的写作和项目。也可以在 推特 上关注我直接发邮件给我 或者 在 LinkedIn 上找我。 注册我的简讯 就在你的收件箱里接收我关于数据科学、机器学习和人工智能的最新想法吧!

数据科学家需要了解的 5 个基本统计概念

原文:https://towardsdatascience.com/the-5-basic-statistics-concepts-data-scientists-need-to-know-2c96740377ae?source=collection_archive---------0-----------------------

想获得灵感?快来加入我的 超级行情快讯 。😎

当执行数据科学(DS)的艺术时,统计学可以是一个强有力的工具。从高层次的角度来看,统计是使用数学对数据进行技术分析。一个基本的可视化,如条形图,可能会给你一些高层次的信息,但有了统计数据,我们可以以一种更加信息驱动和有针对性的方式对数据进行操作。相关的数学帮助我们对数据形成具体的结论,而不仅仅是猜测。

使用统计数据,我们可以更深入、更细致地了解我们的数据究竟是如何构建的,以及基于这种结构,我们如何以最佳方式应用其他数据科学技术来获取更多信息。今天,我们将探讨数据科学家需要了解的 5 个基本统计概念,以及如何最有效地应用它们!

统计特征

统计特征可能是数据科学中使用最多的统计概念。这通常是您在探索数据集时应用的第一个统计技术,包括偏差、方差、平均值、中值、百分位数等。理解和用代码实现都相当容易!请看下图的插图。

A basic box plot

中间的线是数据的中值。中值用于平均值,因为它对异常值更稳健。第一个四分位数实质上是第 25 个百分位数;即数据中 25%的点低于该值。第三个四分位数是第 75 个百分位数;即数据中 75%的点低于该值。最小值和最大值代表我们数据范围的上限和下限。**

箱线图完美地展示了我们可以利用基本统计特征做些什么:

  • 当箱线图时,这意味着您的数据点大多相似,因为在一个小范围内有许多值
  • 当箱形图时,这意味着你的许多数据点是非常不同的,因为这些值分布在很宽的范围内
  • 如果中值更接近底部那么我们知道大部分数据具有更低的值。如果中值更接近顶部那么我们知道大多数数据具有更高的值。基本上,如果中线不在方框的中间,则表明数据偏斜。****
  • 胡须很长吗?这意味着您的数据具有较高的标准差方差,即数值分散且变化很大。如果盒子的一边有长胡须,而另一边没有,那么数据可能只在一个方向上变化很大。

所有这些信息都来自几个简单的易于计算的统计特征!当您需要快速查看数据时,请尝试这些方法。

概率分布

我们可以把概率定义为某一事件发生的概率。在数据科学中,这通常在 0 到 1 的范围内进行量化,其中 0 表示我们确信此不会发生,1 表示我们确信此会发生。概率分布是一个函数,它代表实验中所有可能值的概率。请看下图的插图。

Common Probability Distributions. Uniform (left), Normal (middle), Poisson (right)

  • 一个均匀分布是我们这里展示的 3 个中最基本的一个。它只有一个值,这个值只出现在一个特定的范围内,而这个范围之外的值都是 0。这在很大程度上是一种“开或关”的分布。我们也可以认为它是一个具有两个类别的分类变量的指示:0 或值。您的分类变量可能有多个非 0 值,但我们仍然可以将其视为多个均匀分布的分段函数。
  • 一个正态 分布,通常被称为一个高斯****分布,是由其均值和标准差具体定义的。平均值在空间上改变分布,标准偏差控制分布。与其他分布(如泊松分布)的重要区别在于标准差在所有方向上都是相同的。因此,对于高斯分布,我们知道数据集的平均值以及数据的分布,即它是分布在一个很大的范围内,还是高度集中在几个值周围。
  • 一个泊松分布类似于正态分布,但是增加了一个偏斜度的因子。当偏斜度值较低时,泊松分布在所有方向上具有相对均匀的分布,就像正态分布一样。但是,当偏斜度值很大时,我们的数据在不同方向上的分布是不同的;在一个方向,它将非常分散,而在另一个方向,它将高度集中。

你可以深入研究更多的发行版,但是这 3 个已经给了我们很多价值。我们可以很快看到并解释均匀分布的分类变量。如果我们看到高斯分布,我们知道有许多算法默认情况下特别适合高斯分布,因此我们应该选择这些算法。对于 Poisson,我们将看到,我们必须特别小心,选择一种对空间分布变化具有鲁棒性的算法。

降维

术语降维理解起来相当直观。我们有一个数据集,我们想减少它的维数。在数据科学中,这是特征变量的数量。请看下图的插图。

Dimensionality Reduction

立方体代表我们的数据集,它有 3 个维度,总共有 1000 个点。现在用今天的计算,1000 点很容易处理,但是在更大的范围内,我们会遇到问题。然而,仅仅从二维的角度来看我们的数据,比如从立方体的一边,我们可以看到从那个角度划分所有的颜色是非常容易的。通过降维,我们可以将 3D 数据投影到 2D 平面上。这有效地将我们需要计算的点数减少到了 100,大大节省了计算量!

我们可以做维度缩减的另一种方法是通过特征修剪。通过特征修剪,我们基本上想要移除任何我们认为对我们的分析不重要的特征。例如,在浏览数据集后,我们可能会发现 10 个特征中有 7 个与输出高度相关,而另外 3 个相关性非常低。那么这 3 个低相关性特征可能不值得计算,我们可以在不影响输出的情况下从分析中删除它们。

用于降维的最常见的统计技术是 PCA,它本质上创建特征的向量表示,显示它们对输出的重要性,即它们的相关性。PCA 可用于上述两种降维方式。在本教程中了解更多信息。

过采样和欠采样

过采样和欠采样是用于分类问题的技术。有时,我们的分类数据集可能过于偏向一边。例如,我们有 2000 个类 1 的例子,但是只有 200 个类 2 的例子。这将抛弃许多我们试图用来建模数据和进行预测的机器学习技术!我们的过采样和欠采样可以解决这个问题。请看下图的插图。

Under and and Over Sampling

在上图的左侧和右侧,我们的蓝色类比橙色类有更多的样本。在这种情况下,我们有 2 个预处理选项,可以帮助训练我们的机器学习模型。

欠采样意味着我们将只从多数类中选择一些数据,只使用少数类拥有的那么多例子。应该进行这种选择以保持类的概率分布。那很容易!我们只是通过减少样本来平衡数据集!

过采样意味着我们将创建少数类的副本,以便拥有与多数类相同数量的实例。复制时将保持少数民族的分布。我们只是在没有获得更多数据的情况下平衡了数据集!

贝叶斯统计

充分理解我们为什么使用贝叶斯统计需要我们首先理解频率统计失败的地方。频率统计是大多数人听到“概率”这个词时会想到的统计类型。它涉及应用数学来分析某个事件发生的概率,特别是我们计算的唯一数据是之前的数据*。***

让我们看一个例子。假设我给你一个骰子,问你掷出 6 的几率有多大。大多数人会说是六分之一。事实上,如果我们要做一个频率分析,我们会查看一些数据,其中有人掷骰子 10,000 次,并计算每个数字的掷出频率;大概是六分之一!

但是如果有人告诉你,给你特定骰子装载总是落在 6 上呢?由于频率分析只考虑了先验数据,所以给你的关于模具被装载的证据而不是被考虑在内。**

贝叶斯统计是否考虑了这个证据。我们可以通过看看贝耶定理来说明这一点:****

Baye’s Theoram

我们方程中的概率 P(H) 基本是我们的频率分析;给定我们的先验数据,事件发生的概率是多少。我们等式中的 P(E|H) 被称为可能性,本质上是给定我们频率分析的信息,我们的证据是正确的概率。例如,如果你想掷骰子 10,000 次,而前 1000 次你得到了全部 6 次,你就开始非常确信骰子已经装好了! P(E) 是实际证据为真的概率。如果我告诉你骰子已经上膛了,你能相信我说它真的上膛了吗?还是你认为这是个骗局?!

如果我们的频率分析非常好,那么我们的猜测 6 是正确的就有一定的分量了。与此同时,我们考虑到我们的证据加载芯片,如果它是真实的或不基于其本身的先验和频率分析。从等式的布局可以看出,贝叶斯统计把一切都考虑进去了。当您觉得以前的数据不能很好地代表未来的数据和结果时,就使用它。

数据科学家需要知道的 5 种聚类算法

原文:https://towardsdatascience.com/the-5-clustering-algorithms-data-scientists-need-to-know-a36d136ef68?source=collection_archive---------0-----------------------

想获得灵感?快来加入我的 超级行情快讯 。😎

聚类是一种涉及数据点分组的机器学习技术。给定一组数据点,我们可以使用聚类算法将每个数据点分类到特定的组中。理论上,同一组中的数据点应该具有相似的属性和/或特征,而不同组中的数据点应该具有非常不同的属性和/或特征。聚类是一种无监督学习的方法,并且是在许多领域中使用的统计数据分析的常用技术。

在数据科学中,我们可以使用聚类分析从数据中获得一些有价值的见解,方法是在应用聚类算法时查看数据点属于哪些组。今天,我们将看看数据科学家需要了解的 5 种流行的聚类算法及其优缺点!

k 均值聚类

K-Means 可能是最著名的聚类算法。它在许多介绍数据科学和机器学习的课程中讲授。很容易理解,用代码实现!请看下图的插图。

K-Means Clustering

  1. 首先,我们首先选择一些要使用的类/组,并随机初始化它们各自的中心点。为了确定要使用的类的数量,最好快速浏览一下数据,并尝试识别任何不同的分组。中心点是与每个数据点向量长度相同的向量,是上图中的“X”。
  2. 每个数据点通过计算该点和每个组中心之间的距离来分类,然后将该点分类到其中心最接近它的组中。
  3. 基于这些分类的点,我们通过取组中所有向量的平均值来重新计算组中心。
  4. 重复这些步骤一定次数的迭代,或者直到组中心在迭代之间没有太大变化。您也可以选择随机初始化组中心几次,然后选择看起来提供最佳结果的运行。

K-Means 的优点是它非常快,因为我们真正做的是计算点和组中心之间的距离;非常少的计算!因此它具有线性复杂度 O ( n )。

另一方面,K-Means 也有一些缺点。首先,你必须选择有多少组/类。这并不总是微不足道的,在理想情况下,我们希望使用聚类算法来为我们找出这些问题,因为它的目的是从数据中获得一些洞察力。K-means 也是从随机选择聚类中心开始的,因此它可能在不同的算法运行中产生不同的聚类结果。因此,结果可能不可重复且缺乏一致性。其他聚类方法更加一致。

K-Medians 是另一种与 K-Means 相关的聚类算法,只是我们使用组的中值向量,而不是使用平均值来重新计算组中心点。这种方法对异常值不太敏感(因为使用了中值),但对于较大的数据集来说速度要慢得多,因为在计算中值向量时,每次迭代都需要排序。

均值漂移聚类

均值漂移聚类是一种基于滑动窗口的算法,它试图找到数据点的密集区域。这是一种基于质心的算法,意味着目标是定位每个组/类的中心点,它通过将中心点的候选更新为滑动窗口内的点的平均值来工作。然后,在后处理阶段过滤这些候选窗口,以消除近似重复,形成最终的中心点集合及其相应的组。请看下图的插图。

Mean-Shift Clustering for a single sliding window

  1. 为了解释均值漂移,我们将考虑二维空间中的一组点,如上图所示。我们从以点 C(随机选择的)为中心并且以半径 r 为核心的圆形滑动窗口开始。均值漂移是一种爬山算法,它涉及在每一步将该核迭代地转移到更高密度的区域,直到收敛。
  2. 在每次迭代中,通过将中心点移动到窗口内点的平均值,滑动窗口向更高密度的区域移动(因此得名)。滑动窗口内的密度与窗口内的点数成比例。自然地,通过移动到窗口中点的平均值,它将逐渐向更高点密度的区域移动。
  3. 我们继续根据平均值移动滑动窗口,直到没有移动可以容纳内核中更多点的方向。看看上面的图片;我们继续移动圆圈,直到我们不再增加密度(即窗口中的点数)。
  4. 对许多滑动窗口进行步骤 1 到 3 的过程,直到所有点都位于一个窗口内。当多个滑动窗口重叠时,包含最多点的窗口被保留。然后根据数据点所在的滑动窗口对其进行聚类。

下图显示了使用所有滑动窗口的端到端的整个过程。每个黑点代表滑动窗口的质心,每个灰点是数据点。

The entire process of Mean-Shift Clustering

与 K-means 聚类相比,不需要选择聚类的数量,因为 mean-shift 会自动发现这一点。这是一个巨大的优势。聚类中心向最大密度的点汇聚的事实也是非常理想的,因为它非常容易理解,并且在自然数据驱动的意义上非常适合。缺点是窗口大小/半径“r”的选择可能不重要。

基于密度的噪声应用空间聚类(DBSCAN)

DBSCAN 是一种基于密度的聚类算法,类似于 mean-shift,但有几个显著的优点。看看下面的另一幅精美图片,让我们开始吧!

DBSCAN Smiley Face Clustering

  1. DBSCAN 从一个尚未访问的任意起始数据点开始。使用距离ε提取该点的邻域(在ε距离内的所有点都是邻域点)。
  2. 如果在这个邻域内有足够数量的点(根据最小点),则聚类过程开始,并且当前数据点成为新聚类中的第一个点。否则,该点将被标记为噪声(稍后该噪声点可能成为聚类的一部分)。在这两种情况下,该点都被标记为“已访问”。
  3. 对于新聚类中的第一个点,其ε距离邻域内的点也成为同一聚类的一部分。然后,对于刚刚添加到聚类组的所有新点,重复使ε邻域中的所有点属于同一聚类的过程。
  4. 重复步骤 2 和 3 的过程,直到聚类中的所有点都被确定,即聚类的ε邻域内的所有点都被访问和标记。
  5. 一旦我们完成了当前的聚类,就会检索和处理一个新的未访问点,从而发现下一个聚类或噪声。重复此过程,直到所有点都被标记为已访问。由于在此结束时已经访问了所有点,每个点将被标记为属于一个聚类或者是噪声。

DBSCAN 与其他聚类算法相比有很大的优势。首先,它根本不需要 pe-set 数量的集群。它还将异常值识别为噪声,这与均值漂移不同,即使数据点非常不同,均值漂移也只是将它们放入一个聚类中。此外,它可以很好地找到任意大小和任意形状的簇。

DBSCAN 的主要缺点是,当集群的密度不同时,它的性能不如其他方法。这是因为当密度变化时,用于识别邻域点的距离阈值ε和最小点的设置将随着聚类的不同而不同。这一缺点在非常高维的数据中也会出现,因为距离阈值ε再次变得难以估计。

使用高斯混合模型的期望最大化(EM)聚类(GMM)

K-Means 的一个主要缺点是它简单地使用了聚类中心的平均值。通过下面的图片,我们可以明白为什么这不是最好的做事方式。在左手边,对于人眼来说,很明显有两个半径不同的圆形星团,它们以相同的平均值为中心。K-Means 不能处理这个问题,因为聚类的平均值非常接近。K-Means 在聚类不是圆形的情况下也会失败,这也是使用平均值作为聚类中心的结果。

Two failure cases for K-Means

高斯混合模型(GMM)比 K-Means 给了我们更多的灵活性。对于 GMM,我们假设数据点是高斯分布的;这是一个限制性较小的假设,而不是通过使用平均值说它们是圆形的。这样,我们就有两个参数来描述聚类的形状:均值和标准差!以二维为例,这意味着集群可以采取任何类型的椭圆形状(因为我们在 x 和 y 方向上都有标准偏差)。因此,每个高斯分布被分配给单个聚类。

为了找到每个聚类的高斯参数(例如平均值和标准偏差),我们将使用一种称为期望最大化(EM)的优化算法。请看下图,图中显示了高斯分布正被装配到集群中。然后,我们可以继续使用 GMM 进行期望最大化聚类的过程。

EM Clustering using GMMs

  1. 我们首先选择聚类的数量(像 K-Means 一样)并随机初始化每个聚类的高斯分布参数。人们也可以通过快速查看数据来尝试提供对初始参数的良好猜测。尽管注意,从上图中可以看出,这并不是 100%必要的,因为高斯分布一开始很差,但很快就被优化了。
  2. 给定每个聚类的高斯分布,计算每个数据点属于特定聚类的概率。一个点离高斯中心越近,它就越有可能属于该聚类。这应该有直观的意义,因为对于高斯分布,我们假设大部分数据更靠近聚类的中心。
  3. 基于这些概率,我们为高斯分布计算一组新的参数,从而最大化聚类内数据点的概率。我们使用数据点位置的加权和来计算这些新参数,其中权重是数据点属于该特定聚类的概率。为了直观地解释这一点,我们可以看看上面的图表,特别是以黄色星团为例。该分布在第一次迭代时随机开始,但我们可以看到大多数黄色点位于该分布的右侧。当我们计算一个概率加权的和时,尽管有一些点在中心附近,但大多数都在右边。因此,分布的平均值自然会向这些点的集合移动。我们也可以看到,大部分的点都是“右上到左下”。因此,标准偏差会发生变化,以创建更适合这些点的椭圆,从而最大化概率加权和。
  4. 重复第 2 步和第 3 步,直到收敛,每次迭代的分布变化不大。

使用 GMM 有两个主要优势。首先,在聚类协方差方面,GMM 比 K-Means 更加灵活;由于标准偏差参数,聚类可以呈现任何椭圆形状,而不局限于圆形。K-Means 实际上是 GMM 的一个特例,其中每个聚类在所有维度上的协方差都接近 0。第二,由于 GMM 使用概率,所以每个数据点可以有多个聚类。因此,如果一个数据点位于两个重叠聚类的中间,我们可以简单地定义它的类别,即 X %属于类别 1,Y %属于类别 2。即 GMMs 支持混合 会员

凝聚层次聚类

分层聚类算法分为两类:自顶向下或自底向上。自底向上算法在开始时将每个数据点视为单个聚类,然后连续合并(或聚集)成对的聚类,直到所有聚类都已合并为包含所有数据点的单个聚类。自底向上的层次聚类因此被称为层次凝聚聚类HAC 。这种聚类层次结构被表示为一棵树(或树状图)。树根是收集所有样本的唯一聚类,树叶是只有一个样本的聚类。在进入算法步骤之前,请看下图

Agglomerative Hierarchical Clustering

  1. 我们首先将每个数据点视为一个单独的聚类,即如果我们的数据集中有 X 个数据点,那么我们就有 X 个聚类。然后,我们选择一个距离度量来度量两个集群之间的距离。例如,我们将使用平均链接,其将两个聚类之间的距离定义为第一个聚类中的数据点和第二个聚类中的数据点之间的平均距离。
  2. 在每次迭代中,我们将两个集群合并为一个。将被组合的两个聚类被选择为具有最小平均链接的那些聚类。即,根据我们选择的距离度量,这两个聚类彼此之间具有最小的距离,因此是最相似的,并且应该被组合。
  3. 重复步骤 2,直到我们到达树的根,即我们只有一个包含所有数据点的聚类。通过这种方式,我们可以选择最终需要多少个集群,只需选择何时停止组合集群,即何时停止构建树!

分层聚类不需要我们指定聚类的数量,我们甚至可以选择哪个数量的聚类看起来最好,因为我们正在构建一个树。此外,该算法对距离度量的选择不敏感;所有这些算法都可以很好地工作,而对于其他聚类算法,距离度量的选择是至关重要的。层次聚类方法的一个特别好的用例是当基础数据具有层次结构并且您想要恢复该层次结构时;其他聚类算法做不到这一点。层次聚类的这些优势是以较低的效率为代价的,因为它的时间复杂度为 O(n ) ,不像 K-Means 和 GMM 的线性复杂度。

结论

这是数据科学家应该知道的 5 大聚类算法!感谢 Scikit Learn,我们将以这些算法和其他一些算法的出色表现的令人敬畏的可视化来结束本文!非常酷地看到不同的算法如何比较和对比不同的数据!

你应该知道的 4 个深度学习突破

原文:https://towardsdatascience.com/the-5-deep-learning-breakthroughs-you-should-know-about-df27674ccdf2?source=collection_archive---------4-----------------------

非专家深度学习系列的第一篇

为什么要看这个?

无论是作为个体从业者还是作为组织,要开始应用深度学习,你需要两件事情:

  1. “什么”:深度学习的最新发展能够做什么的想法。
  2. “如何做”:培训新模型或使用现有模型并使其投入生产的技术能力。

由于开源社区的强大,第二部分变得越来越容易。关于如何使用 TensorFlow 等库来训练和使用深度学习模型的具体细节,有许多很好的教程,其中许多出版物如《走向数据科学》每周出版一次。

这意味着,一旦你有了如何使用深度学习的想法,实现你的想法虽然不容易,但涉及到标准的“开发”工作:遵循本文中链接的教程,根据你的特定目的和/或数据修改它们,通过阅读 StackOverflow 上的帖子进行故障排除,等等。例如,他们不要求(或雇佣)一个拥有博士学位的独角兽,他可以从零开始编写原始的神经网络架构是一个有经验的软件工程师。

这一系列文章将试图填补第一部分的空白:在高层次上覆盖深度学习的能力,同时为那些想要了解更多和/或深入代码并解决第二部分的人提供资源。更具体地说,我将介绍:

  1. 使用开源架构和数据集的最新成就是什么。
  2. 导致这些成就的关键架构或其他见解是什么
  3. 在自己的项目中开始使用类似技术的最佳资源是什么。

这些突破有什么共同点

这些突破虽然涉及许多新的架构和想法,但都是使用机器学习中常见的“监督学习”过程实现的。具体步骤如下:

  1. 收集大量适当的训练数据
  2. 建立一个神经网络架构——即一个复杂的方程系统,松散地模仿大脑——它通常有数百万个称为“权重”的参数。
  3. 通过神经网络重复输入数据;在每次迭代中,将神经网络的预测结果与正确结果进行比较,并根据神经网络的偏差程度和偏差方向来调整每个神经网络的权重。

This is how neural nets are trained: this process is repeated many, many times. Source.

这个过程已经被应用到许多不同的领域,并且已经产生了看起来已经“学习”的神经网络。在每个领域,我们将涵盖:

  1. 训练这些模型所需的数据
  2. 使用的模型架构
  3. 结果呢

1。图像分类

神经网络可以被训练来计算出图像包含什么对象。

所需数据

为了训练图像分类器,你需要带标签的图像,其中每个图像属于多个有限类中的一个。例如,用于训练图像分类器的标准数据集之一是 CIFAR 10 数据,其正确标记了 10 类图像:

Illustration of images of CIFAR-10 data. Source

深度学习架构

我们将涉及的所有神经网络架构都是由思考实际上必须如何学习解决问题而激发的。对于图像检测,我们如何做到这一点?当人类确定图像中的内容时,我们首先会寻找高级视觉特征,如树枝、鼻子或车轮。然而,为了检测这些,我们下意识地需要确定较低层次的特征,如颜色、线条和其他形状。事实上,从原始像素到人类可以识别的复杂特征,比如眼睛,我们需要检测像素的特征,然后是像素的特征,等等。

在深度学习之前,研究人员会手动尝试提取这些特征,并将其用于预测。就在深度学习出现之前,研究人员开始使用技术(主要是支持向量机)试图找到这些手动提取的特征与图像是猫还是狗之间的复杂非线性关系。

Convolutional Neural Network extracting features at each layer. Source

现在,研究人员开发了神经网络架构,可以学习原始像素本身的这些特征;具体来说,深度卷积神经网络架构。这些网络提取像素的特征,然后提取像素的特征等,然后最终通过常规神经网络层(类似于逻辑回归)进行最终预测。

Samples of the predictions a leading CNN architecture made on images from the ImageNet dataset.

在以后的文章中,我们将深入探讨卷积神经网络是如何用于图像分类的。

突破

其结果是,在这些架构旨在解决的中心任务——图像分类——上,算法现在可以获得比人更好的结果。在著名的 ImageNet 数据集上,这是卷积架构最常用的基准,经过训练的神经网络现在在图像分类上实现了优于人类的性能:

As of 2015, computers can be trained to classify objects in images better than humans. Source

此外,研究人员已经找到了如何获取不立即用于图像分类的图像,分割出最有可能代表特定类别对象的图像矩形,通过 CNN 架构馈送这些矩形中的每一个,并最终得到图像中单个对象的分类以及界定其位置的框(这些被称为“边界框”):

Object detection using “Mask R-CNN”. Source

这整个多步骤过程在技术上被称为“物体检测,尽管它使用“图像分类”来完成最具挑战性的步骤。

资源

理论:要深入了解为什么CNN 会工作的理论,请阅读 Andrej Karpathy 的斯坦福课程中的教程。对于一个稍微更数学的版本,查看克里斯·奥拉关于卷积的帖子这里

代码:要快速开始构建图像分类器,请查看 TensorFlow 文档中的这个介绍性示例

2。文本生成

可以训练神经网络来生成模仿给定类型文本的文本。

所需数据

给定类的简单文本。例如,这可能是莎士比亚的所有作品。

深度学习架构

神经网络可以对元素序列中的下一个元素进行建模。它可以查看过去的字符序列,并针对给定的一组过去的序列,确定下一个最有可能出现的字符。

用于该问题的架构不同于用于图像分类的架构。对于不同的架构,我们要求网络学习不同的东西。之前,我们要求它学习图像的哪些特征是重要的。在这里,我们要求它注意一个字符序列,以预测序列中的下一个字符。要做到这一点,与图像分类不同,网络需要一种跟踪其“状态”的方法。例如,如果之前看到的字符是“c-h-a-r-a-c-t-e”,网络应该“存储”该信息,并预测下一个字符应该是“r”。

递归神经网络架构能够做到这一点:在下一次迭代中,它将每个神经元的状态反馈到网络中,允许它学习序列(还有更多内容,但我们将在稍后讨论)。

Image of a Recurrent Neural Net architecture. Source.

然而,要想真正擅长文本生成,网络还必须决定在序列中回溯多远。有时,就像在单词中间,网络只需查看最后几个字符来确定下一个字符,而其他时候它可能需要查看许多字符来确定,例如,我们是否在一个句子的末尾。

有一种叫做“LSTM”(长短期记忆)的特殊细胞在这方面做得特别好。每个细胞根据细胞内部的权重决定是“记住”还是“忘记”,权重随着网络看到的每个新字符而更新。

The inner workings of an LSTM cell. Source.

突破

简而言之:我们可以生成看起来有点像我们试图生成的文本的特征的文本,减去一些拼写错误的单词和错误,使其不是正确的英语。这个 Andrej Karpathy 的帖子有一些有趣的例子,从生成莎士比亚的戏剧到生成保罗·格拉厄姆的散文。

相同的架构已经被用于通过顺序生成 x 和 y 坐标来生成手写,就像语言是一个字符一个字符地生成一样。点击这里,查看的演示。

Written by a neural net. Can we still call it handwriting? Source

在以后的文章中,我们将深入探讨递归神经网络和 LSTMs 是如何工作的。

资源

理论上: 克里斯·奥拉在 LSTMs 上的这篇文章是经典之作,安德烈·卡帕西在 RNNs 上的这篇文章也是经典之作,它们能完成什么,以及它们是如何工作的。

代码: 这个是关于如何开始构建端到端文本生成模型的一个很好的演练,包括数据的预处理。这个 GitHub repo 使得使用预先训练的 RNN-LSTM 模型生成手写变得容易。

3。语言翻译

机器翻译——翻译语言的能力——一直是人工智能研究人员的梦想。深度学习让这个梦想更加接近现实。

所需数据

不同语言之间的成对句子。例如,对“我是学生”和“我是学生”将是训练神经网络在英语和法语之间进行翻译的数据集中的一对句子。

深度学习架构

与其他深度学习架构一样,研究人员已经“假设”了计算机可能如何理想地学习翻译语言,并建立了一个试图模仿这一点的架构。就语言翻译而言,从根本上来说,一个句子(编码为一系列单词)应该被翻译成其潜在的“意义”。这个意思应该被翻译成新语言中的一系列单词。

句子从单词“转化”成意义的方式,应该是一种擅长处理序列的架构——这原来就是上面所说的“递归神经网络”架构。

Encoder-decoder architecture diagram. Source

这种架构在 2014 年中首次被发现可以很好地用于语言翻译,此后在许多方向上得到了扩展,特别是“注意力”这一概念,我们将在未来的博客文章中探讨。

突破

这篇谷歌博客文章表明这个架构确实完成了它设定的目标,将其他语言翻译技术打得落花流水。当然,谷歌能为这项任务获取如此棒的训练数据也无妨!

Google Sequence-to-Sequence based model performance. Source

资源

**代码&理论:**谷歌,值得称赞的是,在这里发表了一篇关于序列到序列架构的精彩教程。本教程概述了序列到序列模型的目标和理论,并指导您如何在 TensorFlow 中对它们进行编码。它还包括“注意”,这是对基本序列到序列架构的扩展,我将在详细讨论序列到序列时讨论它。

4。生成对抗网络

神经网络可以被训练来生成看起来像给定类别的图像的图像——例如,不是实际人脸的人脸图像。

所需数据

特定类别的图像—例如,一组人脸图像。

深度学习架构

gan 是一个令人惊讶的重要成果——世界上领先的人工智能研究人员之一 Yann LeCun 说,在我看来,它们是“过去 10 年中最有趣的想法。“事实证明,我们可以生成看起来像一组训练图像的图像,但实际上不是来自训练集的图像:例如,看起来像人脸但实际上不是真实人脸的图像。这是通过同时训练两个神经网络来实现的:一个试图生成看起来真实的假图像,另一个试图检测图像是否真实。如果你训练这两个网络,使它们以“相同的速度”学习——这是构建 GANs 的困难部分——试图生成假图像的网络实际上可以生成看起来非常真实的图像。

说得更详细一点:我们想用 GANs 训练的主要网络叫做生成器:它将学习接收随机噪声向量,并将其转换成逼真的图像。这个网络具有来自卷积神经网络的“逆”结构,被恰当地命名为“去卷积”架构。另一个试图区分真实和虚假图像的网络是一个卷积网络,就像那些用于图像分类的网络一样,被称为“鉴别器”。

Deconvolutional architecture of a “generator”. Source

Convolutional architecture of the “discriminator”. Source

在 GANs 的情况下,两个神经网络都是卷积神经网络,因为这些神经网络特别擅长从图像中提取特征。

突破和资源

Images generated by a GAN from a dataset of faces of celebrities. Source

Code : 这个 GitHub repo 既是一个关于使用 TensorFlow 训练 GANs 的很棒的教程,也包含了一些由 GANs 生成的引人注目的图像,比如上图。

理论:Irmak Sirer 的这个演讲是对 GANs 的有趣介绍,也涵盖了许多有监督的学习概念,这也将帮助你理解上面的发现。

最后,优秀的 Arthur Juliani 在这里有另一个有趣的 GANs 的可视化解释,以及在 TensorFlow 中实现它的代码。

摘要

这是对深度学习在过去五年中产生最大突破的领域的高度概述。我们讨论的这些模型都有许多开源实现。这意味着您几乎总是可以下载一个“预训练”模型并将其应用于您的数据,例如,您可以下载预训练的图像分类器,您可以通过这些图像分类器输入数据,以便对新图像进行分类或在图像中的对象周围绘制方框。因为这项工作的大部分已经为你完成了,所以使用这些前沿技术所必需的工作不是“进行深度学习”本身——研究人员已经在很大程度上为你解决了这一部分——而是进行“开发”工作,以获得其他人为解决你的问题而开发的模型。

希望现在你对深度学习模型的能力有了一点更好的理解,并且更接近实际使用它们了!

新泽西州运输系统故障的 5 个阶段

原文:https://towardsdatascience.com/the-5-stages-of-a-system-breakdown-on-nj-transit-8258127e31e9?source=collection_archive---------7-----------------------

这篇文章是我和 迈克尔·张 之间正在进行的合作的一部分,分析我们收集的实时新泽西州过境数据。你可以在这里 找到入门文章 ,在这里 找到上一篇文章

2018 年 3 月 2 日星期五,纽约市是三月份横扫该地区的四个东北方中的第一个的末端。从前一天晚上到下午早些时候,寒冷的天气一直在持续下降,并伴有上午晚些时候的阵风。

当我结束一天的工作,前往纽约宾州车站回家时,我越来越担心,因为朋友和家人发来短信告诉我,新泽西州的交通服务严重受阻。

An ominous screenshot of Departure Vision for New York Penn at 4:39 pm on 3/2/18. Note the “STATUS” column.

我完全没有料到自己会真的到达宾州车站,一大群沮丧的通勤者涌入第七大道。新泽西州的交通系统完全瘫痪,9 趟列车同时取消,随后又有几趟列车因天气原因被取消。

虽然这种大规模、全系统的故障很少见,但它们给成千上万整天或周末都被毁掉的通勤者留下了深刻的印象。让我们来看看这次服务中断的影响:下面的图表显示了 3 月 2 日进出纽约佩恩站的每趟新泽西州运输列车的延误情况。

Each dot is a train colored by delay severity. Note the symmetry in volume about hour 14 or 15. (Left: Inbound trains into New York Penn, Right: Outbound trains from New York Penn)

进入纽约宾州的火车晚点是由它们到达纽约宾州(它们的最后一站)的累积延迟决定的,而离开纽约宾州的火车晚点是由它们到达第一站的延迟决定的。原定于下午 5 点到 7 点从纽约出发的 32 列火车中,有 18 列被取消,其他几列严重延误。

系统怎么会沦落到这种地步?导致这种情况的原因是什么?导致这种故障的系统动态是什么?我们可以检查数据,以可视化系统如何对中断做出反应,并识别导致系统崩溃的不同阶段。

可视化运行中的新泽西州运输系统

对于外行人来说,新泽西州运输系统是一个非循环的铁路网络,服务于新泽西州的 162 个火车站,并将旅客连接到纽约佩恩站。作为参考,这里是放大的系统铁路地图,捕捉了纽约宾州车站周围的车站,包括纽瓦克宾州车站、Secaucus Junction(上层)、纽瓦克布罗德街和霍博肯:

Abbreviated NJ Transit system map. Pink inset: The stations we will focus on. Note the overlap at Secaucus Junction, where the lines crossing above stop at Secaucus Upper Level; the lines crossing below stop at Secaucus Lower Level.

由于许多线路交叉和纽约宾州车站的高容量,新泽西州运输运营的这个区域具有复杂的系统动态,每天影响成千上万的人。

我们将通过关注这一段轨道来调查 3 月 2 日的系统故障,因为催化服务中断(稍后介绍)发生在纽瓦克宾州车站和 Secaucus Junction 之间;此外,大量的列车将展示系统动力学在发挥作用。

第一阶段:暴风雨前(或期间)的平静

让我们从 3 月 2 日早上的系统状态开始分析,因为它处理了前一天晚上开始的持续冻雨。在处理了早上由于列车故障和美国国家铁路客运公司轨道维修造成的一些小的服务中断后,该系统在早高峰后立即找到了一些稳定性。

下面的动画显示了左侧的计划系统行为和右侧的实际观察行为。由我们的刮刀收集的停止级列车数据被转换成有状态的数据结构,然后从该数据结构对列车位置进行插值和动画处理。

System animation at 10 am. Each dot here corresponds to a train. Left: Scheduled trains, Right: Observed trains. Stations: NWP (Newark Penn), SEC (Secaucus Upper Level), NYP (New York Penn), ND (Newark Broad St), HOB (Hoboken)

火车在停靠站之间以大致相同的平均速度行驶。此外,我们看到列车在非常接近其预定发车时间的情况下从纽约宾州始发发车。目前,系统是稳定的。

第二阶段:有东西坏掉了

当天下午早些时候,暴风雨带来的降水开始减少,取而代之的是阵阵狂风。然后,发生了这样的事:

下午早些时候,纽瓦克·佩恩和 Secaucus Junction 之间的一条高架电线断了。为列车沿途供电的架空电力线是固定铁路基础设施中最脆弱的部分之一,因为它们容易受到大风和持续冬季降水的破坏。

在这种情况下,我们看到,在电线断开时,该地区的风速确实增大了。以下是新泽西州纽瓦克 3 月 2 日的风力数据:

Wind speed in Newark on 3/2/18 (courtesy of the Time Machine on darksky.net)

尽管上面的推文时间标记为下午 4 点 47 分,但由于天气恶劣,下午早些时候有几趟列车被取消;出于分析的目的,我们假设电线在下午 1 点到 2 点之间断开。这条下线导致纽瓦克·佩恩和 Secaucus 之间的有限路段只有一条轨道可用(根据我从 NJ Transit 听到的公告)。让我们看一下系统中受影响的部分是如何应对这种服务中断的。

第三阶段:排队

下午早些时候通常是新泽西州运输服务周期中相对较慢的时段,但随着下午晚些时候的临近,进出纽约宾州的列车数量开始快速增长。作为一个简化的假设,我们可以说足够多的火车需要在下午晚些时候到达纽约宾州,以便它们可以被重用来服务纽约宾州的晚上通勤。这些列车的确切配置尚不清楚,但我们看到该时间表旨在保持进出航站楼的列车数量相等。

然而,在 3 月 2 日,由于纽瓦克和 Secaucus 之间的线路故障,这两个车站之间的列车不得不共用一条轨道。开往纽约宾州的火车慢如蜗牛,因为它们排成了一列,而更早的火车使用的是单轨。

System animation at 4 pm. Note the queueing trains heading towards NWP at 4:00 pm.

第四阶段:取消

让我们检查之前的服务中断和排队对到达纽约宾夕法尼亚的火车数量的影响。为了做到这一点,我们将查看在任何给定时间点到达纽约宾州的累计列车数与计划离开纽约宾州的累计列车数之间的差异。实际上,这是在任何给定的时间点,纽约宾州车站可用于服务预定出站需求的列车数量。同样,这可能是对系统工作方式的简化假设,但它捕捉到了系统的一般行为。

The cumulative difference between how many trains have arrived to New York Penn, versus how many have been scheduled to go out. The “actual” line incorporates observed delays and cancellations on 3/2/18.

在上图中,当“计划”(蓝色)线偏离“实际”(橙色)线并在当天晚些时候恢复时,这表明排队导致了延迟。“实际”线向我们显示,在 3 月 2 日下午 6:30,计划从纽约宾夕法尼亚出发的列车数量超过了已经到达纽约宾夕法尼亚的列车数量。此外,下午 2 点左右备用列车数量的急剧下降也反映了当天早些时候的取消。

如果一切都按照时间表进行,9 趟列车将在下午 6:30 到达纽约宾州车站,为通勤的末端提供服务。相反,早些时候的取消和下午 4 点到 6 点之间的排队使得系统严重落后。在下午 6 点 29 分整,我们收集的数据显示,新泽西州运输同时取消,你猜对了,9 列火车离开纽约宾州。该系统似乎依赖于在终点站有足够的“储备”列车来满足出站需求。

第五阶段:决议

下午 6:30 的批量取消正是我发现自己在 3 月 2 日进入宾州车站的时候。虽然我可以理解通勤者对取消航班有多么沮丧,但我现在看到,新泽西州运输公司可能没有足够的火车在佩恩站的院子里服务于整个晚上的时间表。下午 6:30 的批量取消实际上是一种机制,使系统能够跟上传出的需求。

晚上晚些时候,排队仍然存在,在受影响的轨道上有许多剩余的火车交通,但火车再次进出纽约宾夕法尼亚。我们可以在晚上 8:30 左右看到系统缓慢的恢复:

System animation around 8:30 pm.

外卖

这一重大服务中断影响了 3 月 2 日大约 12 点到 9 点的系统性能。大量航班取消后,数千名通勤者被困,不得不寻找替代方式回家。

分析纽瓦克和 Secaucus 之间的线路中断后的系统响应,也许可以揭示为什么纽约宾州车站缺少可用的列车。根据进出的供应和需求,很明显,在官方宣布大规模取消之前至少一个小时左右,没有足够的列车。

在这种情况下,我非常同情新泽西州运输公司。他们承受着巨大的压力,这些压力来自他们无法控制的因素,即天气、美国国家铁路客运公司基础设施和缺乏资金。首先,我认为 NJ Transit 可以做一些事情来减轻通勤者在大规模延误时的挫折感:

  • 恶劣天气调度:虽然 3 月 2 日东北风预计会降低降水强度,但由于预计会有大风,NJ Transit 可能会选择使用他们的恶劣天气 1 级备用调度。
  • 警告通勤者即将发生的故障:当火车被取消或严重延误时,新泽西州运输推特会自动发送推文。在 3 月 2 日这样的情况下,Twitter 页面可以警告客户系统范围内的恶劣条件,并鼓励旅行者制定不同的计划。尚不清楚关于个别列车的推文是否会出现大规模取消。
  • 为通勤者提供一种从整体上查看系统状态的方式(类似于本文中的动画):通勤者会意识到问题的严重性,并对解决问题需要多长时间有一个现实的感觉。

无论如何,很明显,基础设施的改善是非常必要的,特别是在关键的,高容量的轨道路段。如果没有资金和更具弹性的基础设施,我们可以预期这 5 个阶段会一再重复。

如果您喜欢这篇分析,请👏下面这篇文章。还有,跟着我的媒体简介,以及 迈克尔张 ,去获取这些数据(很快!)并在未来几个月阅读更多 NJ Transit 分析!谢谢大家!

机器学习的 7 个步骤

原文:https://towardsdatascience.com/the-7-steps-of-machine-learning-2877d7e5548e?source=collection_archive---------0-----------------------

从检测皮肤癌,到分拣黄瓜,到检测需要维修的自动扶梯,机器学习赋予了计算机系统全新的能力。

但是它在引擎盖下是如何工作的呢?让我们看一个基本的例子,并以此为借口,谈谈使用机器学习从你的数据中获得答案的过程。

L 假设我们被要求创建一个系统来回答一种饮料是葡萄酒还是啤酒的问题。我们构建的这个问答系统被称为“模型”,这个模型是通过一个称为“训练”的过程创建的。训练的目标是创建一个准确的模型,在大多数情况下正确地回答我们的问题。但是为了训练一个模型,我们需要收集数据来进行训练。这是我们开始的地方。

如果你是机器学习的新手,想先快速浏览一下,请先看看这篇文章,然后再继续:

[## 什么是机器学习?

这个世界充满了数据。很多很多数据。从图片、音乐、文字、电子表格、视频到…

medium.com](https://medium.com/towards-data-science/what-is-machine-learning-8c6871016736)

This is just the beginning

葡萄酒还是啤酒?

O 我们将从葡萄酒和啤酒中收集你的数据。我们可以从饮料的很多方面收集数据,从泡沫的数量到杯子的形状。

出于我们的目的,我们将只选择两个简单的:颜色(作为光的波长)和酒精含量(作为百分比)。希望我们可以根据这两个因素来划分我们的两种饮料。从现在开始,我们称这些为我们的特征:颜色和酒精。

我们流程的第一步将是跑到当地的杂货店,买一堆不同的啤酒和葡萄酒,以及一些设备来做我们的测量——测量颜色的分光计和测量酒精含量的比重计。我们的杂货店有一个电子硬件部分:)

收集数据

一旦我们有了设备和酒,就该开始机器学习的第一步了:收集数据。这一步非常重要,因为您收集的数据的质量和数量将直接决定您的预测模型的好坏。在这种情况下,我们收集的数据将是每种饮料的颜色和酒精含量。

这将产生一个颜色、酒精百分比以及是啤酒还是葡萄酒的表格。这将是我们的训练数据。

数据准备

几个小时的测量之后,我们已经收集了我们的训练数据。现在到了机器学习的下一步:数据准备,我们把我们的数据加载到一个合适的地方,准备在我们的机器学习训练中使用。

我们将首先把所有的数据放在一起,然后随机排序。我们不希望数据的顺序影响我们的学习,因为这不是决定一种饮料是啤酒还是葡萄酒的一部分。换句话说,我们决定饮料是什么,与之前或之后的饮料无关。

这也是对数据进行任何相关可视化的好时机,有助于您了解不同变量之间是否有任何相关的关系可以利用,以及向您显示是否有任何数据不平衡。例如,如果我们收集的关于啤酒的数据点比葡萄酒多得多,我们训练的模型就会偏向于猜测它看到的几乎所有东西都是啤酒,因为大多数时候它都是对的。然而,在现实世界中,模型可能会看到等量的啤酒和葡萄酒,这意味着猜测“啤酒”有一半是错误的。

我们还需要将数据分成两部分。第一部分用于训练我们的模型,将是数据集的主要部分。第二部分将用于评估我们的训练模型的性能。我们不想使用模型被训练用于评估的相同数据,因为它可能只是记住“问题”,就像你不会在考试中使用数学作业中的相同问题一样。

有时我们收集的数据需要其他形式的调整和处理。像去杜平、规范化、纠错等等。这些都发生在数据准备阶段。在我们的例子中,我们没有任何进一步的数据准备需求,所以让我们继续。

选择模型

我们工作流程的下一步是选择模型。多年来,研究人员和数据科学家创建了许多模型。有些非常适合图像数据,有些适合序列(如文本或音乐),有些适合数字数据,有些适合基于文本的数据。在我们的例子中,因为我们只有两个特征,颜色和酒精百分比,我们可以使用一个小的线性模型,这是一个相当简单的模型,应该可以完成这项工作。

培养

现在我们进入通常被认为是机器学习的主体部分——训练。在这一步中,我们将使用我们的数据逐步提高模型预测给定饮料是葡萄酒还是啤酒的能力。

在某些方面,这类似于某人第一次学开车。起初,他们不知道踏板、旋钮和开关是如何工作的,也不知道什么时候应该使用它们。然而,经过大量的实践和纠正他们的错误,一个有执照的司机出现了。此外,经过一年的驾驶,他们已经变得相当熟练。驾驶行为和对现实世界数据的反应改变了他们的驾驶能力,磨练了他们的技能。

我们将在更小的范围内用我们的饮料来做这件事。具体来说,直线的公式是 y=m*x+b,其中 x 是输入,m 是直线的斜率,b 是 y 截距,y 是直线在 x 位置的值。我们可以用来调整或“训练”的值是 m 和 b。没有其他方法可以影响直线的位置,因为其他变量只有 x(我们的输入)和 y(我们的输出)。

在机器学习中,有许多 m,因为可能有许多特征。这 m 个值的集合通常形成一个矩阵,我们将 W 表示为“权重”矩阵。同样对于 b,我们把它们放在一起,称之为偏差。

训练过程包括为 W 和 b 初始化一些随机值,并尝试用这些值预测输出。正如你所想象的,它做得很差。但是我们可以将我们的模型的预测与它应该产生的输出进行比较,并调整 W 和 b 中的值,这样我们将有更正确的预测。

然后重复这个过程。更新权重和偏差的每次迭代或循环被称为一个训练“步骤”。

让我们更具体地看看这对于我们的数据集意味着什么。当我们第一次开始训练时,就像我们在数据中画了一条随机的线。然后,随着训练的每一步进行,这条线一步一步地移动,更接近葡萄酒和啤酒的理想分离。

估价

一旦训练完成,就该用评估来看看这个模型是否好了。这就是我们之前搁置的数据集发挥作用的地方。评估允许我们用从未用于训练的数据来测试我们的模型。这一指标使我们能够看到模型对尚未看到的数据的表现。这代表了模型在现实世界中的表现。

我在培训评估中使用的一个很好的经验法则是 80/20 或 70/30。这在很大程度上取决于原始源数据集的大小。如果您有大量数据,也许您不需要评估数据集的大部分。

参数调谐

一旦你做了评估,你可能想看看你是否能以任何方式进一步提高你的训练。我们可以通过调整我们的参数来做到这一点。我们在进行培训时隐含地假设了一些参数,现在是回过头来测试这些假设并尝试其他值的好时机。

一个例子是我们在训练中运行训练数据集的次数。我的意思是,我们可以多次向模型“展示”我们的完整数据集,而不仅仅是一次。这有时会导致更高的精度。

另一个参数是“学习率”。这定义了根据前一个训练步骤的信息,我们在每一步中移动直线的距离。这些值在我们的模型可以变得多精确以及训练需要多长时间方面都起着作用。

对于更复杂的模型,初始条件在确定训练结果时可以发挥重要作用。根据模型开始训练时是否将值初始化为零,而不是值的某种分布,可以看出差异,这导致了使用哪种分布的问题。

The potentially long journey of parameter tuning

正如你所看到的,在训练的这个阶段有很多需要考虑的事情,重要的是你要定义一个“足够好”的模型,否则你可能会发现自己要调整很长时间的参数。

这些参数通常被称为“超参数”。这些超参数的调整仍然是一门艺术,更像是一个实验过程,在很大程度上取决于数据集、模型和训练过程的细节。

一旦您对您的训练和超参数感到满意,在评估步骤的指导下,是时候最终使用您的模型做一些有用的事情了!

预言;预测;预告

机器学习是用数据回答问题。所以预测,或者说推理,是我们回答一些问题的步骤。这是所有这些工作的重点,也是机器学习的价值得以实现的地方。

我们最终可以使用我们的模型来预测给定的饮料是葡萄酒还是啤酒,给定它的颜色和酒精百分比。

整体情况

机器学习的力量在于,我们能够使用我们的模型来确定如何区分葡萄酒和啤酒,而不是使用人类的判断和手动规则。您也可以将今天提出的想法推广到其他问题领域,这些领域也适用相同的原则:

  • 收集数据
  • 准备这些数据
  • 选择模型
  • 培养
  • 估价
  • 超参数调谐
  • 预测。

张量流游乐场

F 或更多训练和参数玩法,查看 TensorFlow 游乐场。这是一个完全基于浏览器的机器学习沙箱,在这里你可以尝试不同的参数,并针对模拟数据集进行训练。

下一步是什么?

虽然我们将来会遇到更多的步骤和细微差别,但这是一个很好的基础框架,可以帮助我们思考问题,让我们有一个共同的语言来谈论每个步骤,并在将来更深入地探讨。

下一次,我们将使用代码构建我们的第一个“真正的”机器学习模型。再也不用画线和复习代数了!

“一个[?]“iPhone Bug 像病毒一样传播

原文:https://towardsdatascience.com/the-a-iphone-bug-spread-like-a-virus-8731f447b959?source=collection_archive---------1-----------------------

tldr:A[?]影响 iPhone 用户的漏洞可能是一种在用户间传播的病毒。我分析了 Twitter 上受感染的用户来研究这个问题,展示了病毒的 3 个特性:指数增长、以位置为中心的传播和以网络边缘为中心的传播(通过朋友传播)。

Analysis of 2.5M tweets from 1M infected users

The A[?] Bug

苹果于 11 月 1 日推出了 iOS 11.1,发布了大量问题和漏洞。但是没有什么能与 A [?] bug 在过去的一周收到了这个。

对于门外汉,A[?] bug 影响试图键入字母“I”的 iOS 用户,他们的键盘会自动将“I”更正为“A [?]".随着人类最古老也是最重要的文字之一被破坏,这个 bug 可以理解地 逼疯了。下面是这个 bug 的截图:

这个错误是如此严重,以至于许多人倒退到石器时代,“我”再次成为自我认同的首选术语。

理论形成了

关于是什么导致了这个 bug,以及为什么它没有影响到所有用户,有很多猜测。最有趣的猜测是,关于这种病毒的报道似乎每天都在增加,好像它正在传播。有一种理论认为,只有当自动更正软件看到 A [?]字符。基本上:如果有人发给你,你就被感染了。

这完全符合病毒的模式(尽管我确信苹果不会使用这个术语)。然而,所有这些都只是猜测,所以我开始通过跟踪这个 bug 在 Twitter 上的传播来定量地回答这个问题。

The bug frustrating users on both Twitter and Snapchat.

Unicode、表情符号和一个[?]

问题中的角色实际上不是一个[?],但实际上是一系列 unicode 表情符号字符“\x49\xEF\xB8\x8F”。一些软件将其渲染为“A [?]”,有些软件把这个渲染成“我”。有趣的是,许多用户并没有意识到这个错误,因为 unicode 字符对他们来说是“I”。正因为如此,他们发送了许多损坏的信息,推文等,没有编辑字符。

推特数据

过去一周,我使用 Twitter API 搜索并下载了约 250 万条包含违规字符的推文,以调查关于该漏洞传播的 3 个关键问题。

1.病毒呈指数增长

当观察这些推文的分布时,一些事情立即变得显而易见:它们的频率正在加快。受感染的推文数量实际上每天都在翻倍,呈指数级病毒式增长。这种关系也适用于被感染用户的数量。

2.病毒通过位置传播

病毒通常以地理方式在人群中传播。在这里,我展示了随着时间的推移,病毒在美国的传播情况。注意在最初的感染点周围是如何形成集群并向外扩散的。

3.病毒在朋友间传播

任何感染过单核细胞增多症的人都知道,病毒通过密切接触传播。我调查了朋友的关系网,以了解 A [?] bug 在网络间传播。这个动画是由 100 个 twitter 好友组成的(互相关注)。每个节点都是用户,每条边都是友情连接。只有当两个朋友都感染了病毒时,优势才会显现。请注意病毒如何在有许多受感染朋友的节点中传播得最快。该动画还显示了病毒的总体增长模式,最初很少有人被感染,并通过网络呈指数级传播。

是 A [?] Bug 一个病毒?

可能吧(见更新)。

这项调查表明 A [?]病毒以病毒般的方式传播。这种影响可能是由于 11.1 更新的逐步采用,但这应该显示线性增长,而不是指数增长。苹果已经在最新的 11.1.1 更新中修补了这个错误,但没有发布关于最初错误原因的声明。重要的是要记住,在苹果发布关于问题的官方报告之前,我们不能确定任何事情。在那之前,我们只能猜测。

更新:

许多人强烈怀疑病毒会在用户之间传播,所以我录制了一段我的 iPhone 通过被感染的短信感染病毒的视频。

在这个视频的开始,我的 iPhone 可以输入正常的 I。首先,我收到一条带有正常“I”的消息。这不影响我的自动更正。接下来,我收到一条带有畸形“I”的消息。看到这种畸形的字符导致错误在我的 iPhone 上出现。这让我更加确信这个漏洞主要是以用户对用户的方式传播的。

Screencast of user acquiring the bug via text.

使用的工具:

python,matplotlib,numpy,d3,twitter api…代码即将发布

喜欢这篇文章吗?

如果你喜欢这篇文章,请用拍手 或分享来帮助你的朋友。黑客新闻链接:【https://news.ycombinator.com/item?id=15681249

机器学习基础知识

原文:https://towardsdatascience.com/the-abc-of-machine-learning-ea85685489ef?source=collection_archive---------4-----------------------

在投入机器学习之前,你需要知道的事情。

在过去的几年里,人们对机器学习重新产生了兴趣。这种复兴似乎是由强大的基本面驱动的——全球各地的传感器发出的大量数据,廉价的存储和有史以来最低的计算成本!

机器学习引起了技术人员对机器学习的浓厚兴趣。然而,在深入 ML 的海洋之前,这里有一些你应该熟悉的基本概念。把这个放在手边,因为在学习 ML 的时候你会经常碰到这些术语。

监督、非监督和半监督学习:

监督学习:

监督式学习顾名思义是指作为老师的监督人的存在。基本上,监督学习是一种学习,在这种学习中,我们使用标记良好的数据来教授或训练机器,这意味着数据已经标记了正确的答案。之后,向机器提供没有目标标签(期望输出)的新的一组示例(数据),并且机器通过应用其从历史训练数据的学习来预测新数据的输出。

在监督学习中,您有输入变量(x)和输出变量(Y ),并使用算法来学习从输入到输出的映射函数。

Y = f(X)

目标是很好地逼近映射函数,以便当您有新的输入数据(x)时,可以预测该数据的输出变量(Y)。

监督学习问题可以进一步分为回归和分类问题。

分类:一个分类问题是当输出变量是一个类别时,比如“红”或“蓝”或“病”和“没病”。

回归:一个回归问题是当输出变量是一个实值时,比如“工资”或者“价格”。

无监督学习:

无监督学习是指只有输入数据(X)而没有相应的输出变量。

无监督学习的目标是对数据中的底层结构或分布进行建模,以便了解更多关于数据的信息。

这些被称为非监督学习,因为不像上面的监督学习,没有正确的答案,也没有老师。算法留给它们自己的设备去发现和呈现数据中有趣的结构。

无监督学习问题可以进一步分为聚类和关联问题。

聚类:聚类问题是你想要发现数据中的内在分组,比如按照购买行为对客户进行分组。

关联:关联规则学习问题是你想要发现描述大部分数据的规则,比如购买 X 的人也倾向于购买 y。

无监督学习算法的一些流行示例是:

聚类问题的 k-均值算法。

关联规则学习问题的 Apriori 算法。

半监督学习:

你有大量输入数据(X)而只有部分数据被标记(Y)的问题,叫做半监督学习问题。

这些问题介于监督学习和非监督学习之间。

一个很好的例子是照片档案,其中只有一些图像被标记(例如狗、猫、人),而大多数图像没有标记。

许多现实世界的机器学习问题都属于这一领域。这是因为标记数据既昂贵又耗时,因为这可能需要咨询领域专家。而无标签数据便宜且易于收集和存储。

您可以使用无监督学习技术来发现和学习输入变量中的结构。

您还可以使用监督学习技术对未标记的数据进行最佳猜测预测,将该数据作为训练数据反馈到监督学习算法中,并使用该模型对新的未知数据进行预测。

机器学习中的分类和连续特征:

功能是用于分析基础表(ABT)中的列的术语。所有的特征都可以分类为绝对的或连续的。分类特征具有几个值中的一个,其中选项是类别(例如小于 50 或大于 50)、欺诈或非欺诈、信用卡违约或非违约等,而连续特征具有许多可能的值选项,例如人的工资、人的年龄、商品的价格、要给予的贷款金额等。

如果分类特征不是数字或字符串,则需要通过手动替换、 标签编码器或一个热编码器 将其编码为数字表示,因为 ML 模型只能处理数字而不能处理字符串值

Scikit-learn:

Scikit-learn 可能是 Python 中最有用的机器学习库。Scikit-learn 通过 Python 中的一致接口提供了一系列监督和非监督学习算法。Scikit-learn 附带了许多特性。把 Scikit-learn 当做机器学习的工具箱。这里有几个例子可以帮助你理解这种差异:

**监督学习算法:**想想你可能听说过的任何监督学习算法,它很有可能是 scikit-learn 的一部分。从广义线性模型(如线性回归)、支持向量机(SVM)、决策树到贝叶斯方法——所有这些都是 scikit-learn 工具箱的一部分。算法的传播是 scikit-learn 使用率高的一大原因。我开始使用 scikit 来解决监督学习问题,并向新接触 scikit /机器学习的人推荐它。

**交叉验证:**有多种方法可以检查监督模型对未知数据的准确性

**无监督学习算法:**又一次出现了大量的算法,从聚类、因子分析、主成分分析到无监督神经网络。

**各种玩具数据集:**这在学习 scikit-learn 时派上了用场(例如 IRIS 数据集、波士顿房价数据集)。在学习一个新的库的时候,把它们放在手边很有帮助。

**特征提取:**用于从图像、文本(如单词包)中提取特征

训练和测试数据集:

训练数据集:

训练数据集是我们用来训练 ML 模型的原始数据集的一部分。该模型通过运行算法来学习这些数据,并映射函数 F(x ),其中自变量(输入)中的“x”对应于“y ”,其中“y”是因变量(输出)。在数据集上训练我们的模型时,我们向我们的模型提供输入和输出变量,以便我们的模型能够学习基于输入数据预测输出。

测试数据:

测试数据基本上是从原始数据集保留下来的验证集,它用于通过将模型的预测结果与测试数据集的实际结果进行比较来检查我们的模型的准确性。虽然我们知道测试数据是从原始数据集本身提取出来的,但是我们在测试时并没有向我们的模型提供输出变量。当模型根据对训练数据的学习给出其预测时,我们将预测结果与原始结果进行比较,以获得我们的模型对未知数据的准确性或性能的度量。

考虑一个例子,其中我们的原始数据集有 1000 行,我们的因变量是欺诈而不是欺诈,我们将在 70%的数据即 700 行上训练我们的模型,然后在 30%的数据即 300 行上测试我们的模型准确性。如上所述,在测试我们的模型时,我们不会为我们的模型提供测试数据的结果,尽管我们知道结果,并让我们的模型给出这 300 行的结果,稍后我们将比较我们的模型的结果与我们的测试数据的原始结果,以获得我们的模型预测的准确性。

为了将我们的数据分割成训练和测试集,我们使用 scikit-learn 库的 train_test_split 方法

混乱矩阵:

混淆矩阵是分类模型做出的预测的正确性的度量。

顾名思义,混淆矩阵是模型做出的正确和不正确预测的矩阵表示。

考虑这样一个场景,我们预测这个人是患有“疾病”(事件)还是“没有疾病”(没有事件)。

混淆矩阵现在将基于 4 个术语

正确预测事件值的正真值

误报为错误预测的事件值。

真阴性”表示正确预测的无事件值。

假阴性”表示预测错误的无事件值。

假设我们有 100 个测试数据,其中 50 个有疾病(D) 和 50 个无疾病(ND) ,我们的模型预测结果为 45 疾病(D)55 无疾病,在这种情况下,我们的混淆矩阵将为

Confusion Matrix

真阳性:45(正确预测的事件值,即左上角的绿色单元格)。

假阳性:0(没有事件值被预测为 0,即左下红细胞)

真阴性:50(正确预测无事件值,即右下角绿色单元格)

假阴性:5(事件值预测为无事件值,即右上红细胞)

绿色对角线代表正确预测,红色对角线代表错误预测,因此正确预测的总数为 45+50 = 95

而不正确的预测是 5+0 = 5

准确度分数:

准确度分数也提供了对分类模型所做预测的准确度或正确性的测量,但是它在 0 到 1 的范围内,然后乘以 100 得到 0 到 100 之间的分数,该值越接近 1,模型越准确。

准确度分数计算如下:

准确度得分=正确预测总数/做出的预测总数 100*

考虑到之前的场景准确度得分将=

95/100 * 100 = 0.95*100 = 95%

用于计算准确度分数的库是sk learn . metrics . accuracy _ score

平均绝对误差和均方根误差:

虽然使用准确度分数和混淆矩阵可以很好地评估分类模型,但使用平均绝对误差和均方根误差评估回归模型,因为我们回归模型的目标是预测尽可能接近实际值的值。

MAE 和 RMSE 越接近 0,模型越准确。

平均绝对误差:

它是作为绝对误差值的平均值来计算的,其中“绝对”意味着“使之为正”,以便将它们相加在一起。

MAE =总和(abs(预测值-实际值)/总预测值

考虑一个例子;

实际值= [2,4,6,8],预测值= [4,6,8,10】

MAE = ABS(4–2+6–4+8–6+10–8)/4 = 2

用于计算平均绝对误差的库是sk learn . metrics . mean _ absolute _ error

均方根误差:

计算一组回归预测中的误差的另一种流行方法是使用均方根误差。

缩写为 RMSE,这种度量有时被称为均方误差或 MSE,从计算和名称中去掉根部分。

RMSE 的计算方法是实际结果和预测之间的平方差的平均值的平方根。

对每个误差求平方会强制这些值为正,而均方误差的平方根会将误差度量返回到原始单位进行比较。

RMSE = sqrt(总和((预测值-实际值))/总预测值)

实际值= [2,4,6,8],预测值= [4,6,8,10】

RMSE = sqrt((8)/4)= sqrt(64/4)= sqrt(16)= 4

一旦你熟悉了上面的术语,并对 python 有了基本的了解,你就可以尝试一些简单的 ML 模型了。

如果这个博客已经帮你给了一些的掌声,那就把它分享给你的朋友吧。

—谢谢

权力的滥用:数据分析中权力计算的普遍谬误

原文:https://towardsdatascience.com/the-abuse-of-power-the-pervasive-fallacy-of-power-calculations-for-data-analysis-2a18c8bc8d75?source=collection_archive---------5-----------------------

在文章《滥用权力:数据分析中权力计算的普遍谬误》中,Hoenig 和 Heisey 指出了使用权力计算来解释假设检验结果的缺陷,该结果给出了统计上不显著的结果。他们提供了适当的理由,并主张在这种情况下应避免通过权力计算得出结论。

作者指出,有时在假设检验过程中,会发生第二类错误,即研究人员未能拒绝错误的零假设。这导致研究人员进退两难,当他们无法拒绝一个在人群中站不住脚的假设时,他们应该做什么。然而,他们发现了许多文献提出的对抗这种情况的令人沮丧的解决方案。许多文献建议使用实验后功效计算来解释给出统计上不显著输出的测试结果。作者回顾了 19 种应用期刊,发现在报告结果时采用了这种做法。他们给出了 Anon (1995,1998)的参考文献,其中有两种期刊作为政策问题提出了这样的计算方法。甚至一些统计教科书也被发现说明这种有缺陷的方法(如罗斯纳 1990;维纳、布朗和米歇尔斯 1991;Zar 1996)。作者(Hoeining 和 Heisey)提醒研究人员注意幂计算作为数据分析方法的缺点,并建议他们寻找更合适的方法。在这里,理解为什么应用科学家鼓励使用功效分析方法变得很重要,其中一个可能的原因是应用科学家提倡后功效方法,因为大多数时候他们受传统的束缚来测试通常的“无影响零假设”。尽管它并不总是与研究中提出的问题相关的零假设。

作者给出了支持其主张的理由,即使用功效计算来解释零假设的无统计学意义的结果是不合适的,如下所示:

第一点是,大多数研究人员主张计算检验统计量的观测值的检验功效。这被称为“观察功效”,意味着观察到的治疗效果和可变性等于真实参数值,并在此基础上计算拒绝零假设的概率。相反,作者提出了他们的观点,即观察到的功效永远不能实现这些目标,因为测试的 p 值也决定了观察到的功效,并且对观察到的功效和 p 值之间的关系存在误解,其中观察到的功效是 p 值的 1:1 函数。因此,如果一个观察到的能量在数量上更高,这并不一定意味着在总体中不被拒绝的零假设成立。作者将这种解释称为“权力接近悖论”(PAP)。

实验后功效计算的第二个,也是最有趣的用法,是找到导致特定功效的假设的真实差异。这里,应用科学家使用了两种方法:“可检测效应大小”及其另一种变体“生物学显著效应大小”,并指出,检测有意义的零偏差的计算能力越高,当零未被拒绝时,自然接近零的证据就越强。作者认为,尽管这两种方法似乎比之前讨论的观察权力方法更有吸引力,但这些方法也存在“权力方法悖论”(PAP)。

此外,第三点是,从教育学的观点来看,将从置信区间的考虑中获得的推断与从功效分析方法中获得的推断进行比较是有趣的,但是一旦我们构建了置信区间,功效计算就不会产生额外的见解。因此,对 CI 之外的假设进行功效计算变得毫无用处,因为数据已经表明这些是不相关的值。

讨论的第四点是通过功效方法进行的等效性测试,Schuirmann (1987)指出,当被视为等效性的正式测试时,功效方法导致一个临界区,该临界区基本上与合理的等效性测试应该具有的区域颠倒。

在他们的结束语中,作者承认在数据分析中使用幂型概念及其重要性不能完全排除,但断言这种方法的应用非常有限。他们指出了一个潜在的应用,可能是检查几个实验是否相似,除了样本大小;这在荟萃分析中可能是一个问题(Hung,O' Neill,Bauer 和 Kohne 1997)。他们解释说,在这种情况下的目标是检查同质性,这不同于事后功率计算的通常动机。

他们(作者)强烈提出,虽然功效计算告诉我们,在给定特定状态和统计研究设计的情况下,我们在未来能够多好地表征自然,但他们不能使用数据中的信息来预测或告诉自然的可能状态。他们认为,这可以通过置信区间、适当选择零假设和等价测试来实现,并建议研究人员更多地强调一般原则,而不是强调力学,以避免对这些问题的混淆。

参考文献

匿名。(1995),《新闻杂志》,《野生动物管理杂志,59,196–199。

Hoenig,J. M .,& Heisey,D. M. (2001 年)。滥用权力:数据分析中权力计算的普遍谬误。美国统计学家55 (1),19–24。

洪,H. J .,奥尼尔,R. T .,鲍尔,p .,,Kohne,K. (1997 年)。当替代假设为真时 p 值的行为。生物特征,11–22。

罗斯纳,B. (1990 年)。方差分析。生物统计学基础。加利福尼亚州贝尔蒙特 PWS-肯特出版公司,474–526。

舒尔曼博士(1987 年)。评价平均生物利用度等效性的两个单侧检验程序和功效方法的比较。药代动力学与生物药剂学杂志15 (6),657–680。

Winer,B. J .,Brown,D. R .,& Michels,M. (1991 年)。单因素实验设计与分析:完全随机设计。实验设计中的统计原则,第三版。马萨诸塞州波士顿:麦格劳-希尔公司,74–219 页。

Zar,J. H. (1996 年)。生物统计分析第三版。新泽西州上马鞍河

人工智能中的访问问题

原文:https://towardsdatascience.com/the-access-problem-in-ai-edcc50b82578?source=collection_archive---------16-----------------------

我们应该担心的不是工作的自动化,而是人工智能技术的可及性

T 何范式

1965 年,英特尔的联合创始人发表了一篇观察到一个奇怪现象的论文。每一年,每个集成电路的元件数量似乎都翻了一番。这意味着电路越来越小,越来越便宜,而计算速度越来越快。在接下来的几十年里,这一趋势将成为技术革命的基石。

四年后的 1969 年,一个由美国国防部资助的小组开始致力于多个网络的互联,以创建一个更大的网络。1990 年,这个项目导致了我们今天所称的互联网的诞生,通信革命由此诞生。

2012 年,ImageNet 挑战赛中的一项重大突破大幅提升了计算机视觉领域的性能。这种性能的飞跃是以技术革命(2012 年是 ImageNet 首次使用 GPU)和通信革命(长达数十年的机器学习研究国际合作)为前提的。计算机视觉社区的这一胜利很快转化为自然语言处理、生成任务、音频处理和其他多种任务的性能改善。

20-point performance jump in 5 years

2018 年,我们仍然在努力挖掘机器学习的巨大潜力。我们正在学习这对编程的未来意味着什么,并且在这个过程中发现了一个新的软件范例。开发 ML 密集型软件需要一个完全不同的工作流程,一系列新颖的技术和实践。特斯拉人工智能总监安德烈·卡帕西(Andrej Karpathy)说得好。

“神经网络不仅仅是另一个分类器,它们代表了我们编写软件方式的根本转变的开始。它们是软件 2.0。”

该领域的巨头、现任谷歌人工智能负责人杰夫·迪恩(Jeff Dean)认为,深度学习正在改变系统工程的格局。在 SysML 2018 主题演讲中,他指出:

深度学习正在改变我们设计计算机的方式。

问题是

在狭义的任务上,机器学习算法比专家表现得更好,劳动力市场自然会关注自动化。当深度学习在读取心电图方面比心脏病专家表现得更好,在检测肺炎方面与人类放射科医生不相上下,在识别对话语言方面几乎与人类一样好时,对教育和人力资源就业的急剧转变的担忧似乎是合理的,“工作的未来”似乎处于混乱状态,没有一份工作看起来不会受到干扰。

Source: Andrej Karpathy

但是这些关于自动化和随之而来的失业的观点是短视的。他们没有考虑到这些技术进步所创造的新工作。新的范式将优化置于编程的中心,这意味着调整超参数,设计有代表性的损失函数,确保干净准确的数据,并检查公平性。所有这些都从根本上背离了传统程序员的工作和思考方式。难怪福布斯认为人工智能领域严重人手不足,人工智能专业知识需求巨大。

T2:问题不在于自动化,而在于享受不到科技进步的好处。

也许我们不必担心自动化带来的失业的最好证据是过去 50 年美国经济的劳动生产率(每小时劳动的商品&服务产出)和生产率增长(长期劳动生产率)的趋势。虽然前者稳步上升,后者却在下降。事实上,生产率增长在全球范围内大幅下降。或许这其中最令人吃惊的暗示是虽然技术让我们的个人生活变得更好,但它并没有对劳动力市场的生产率增长产生大的影响。如果我们想想过去十年里手持设备对生活和个人生产力的影响,这是很有意义的。我们所做的工作,我们的生产力,都得到了提高。但是今天我们有更多的工作,而不是更少。所以失业并不是我们最大的问题。

另一方面,令人担忧的是美国普通家庭的收入。我们在技术上越进步,利益似乎就越集中在这部分人口中最上层的 20%身上。我们看到劳动生产率的提高,但事实是这种提高的好处并没有被广泛分享。一种天真的思考方式是,注意到上层 20%的人拥有现有的资本来实际执行和利用这些新的技术创新来为个人谋利。这导致了一种强大的复合效应,使技术成为富人变得更富、穷人停滞不前的手段。这是 AI 今天面临的接入问题。用几句话来说:

人工智能和自动化有可能扩大美国社会的社会和经济流动性差距,原因很简单,因为下层阶级无法获得成为新劳动力一部分所需的教育和技术。

解决方案

NimbleBox 是一个云平台,旨在将人工智能带给大众。它允许用户以比任何其他平台都更便宜的价格租用 GPU,并具有即使对于初学者来说也能让构建人工智能项目成为直观体验的功能。Nimblebox 采取的以教育为重点的方法来解决这个问题,这对于让新来者能够访问人工智能以及让有经验的用户很快轻松部署是至关重要的。

凭借直观的 UX 和反应灵敏的支持团队,NimbleBox 旨在实现人工智能的民主化。我们在这里帮助每个人更快更好地实现他们的人工智能目标。我们相信人工技术是软件历史上的决定性时刻,确保我们以包容和共享的方式分享这一进步的好处是一项集体责任。

这是我们的使命。我们希望你能加入我们的 NimbleBox.ai

PS:谢谢 Arjun Bahuguna 帮我写这篇文章:)

人工通用智能

原文:https://towardsdatascience.com/the-agi-deep-learning-connection-57442f4d1059?source=collection_archive---------5-----------------------

我最喜欢的讲师之一莱克斯·弗里德曼(Lex Fridman)即将在麻省理工学院开设一门关于 AGI 的精彩课程(或者在这篇文章发表时可能已经开始了),我想就这个我已经阅读了几个月的主题写点东西。

“几乎所有从事人工智能工作的年轻人都会环顾四周,然后说——流行什么?统计学习。所以我会这么做。那正是科学的自杀方式。”

——2011 年,马文·明斯基在麻省理工学院开设名为“心智社会”的课程。

美国著名认知科学家、麻省理工学院人工智能实验室的联合创始人马文·明斯基从来不同意对 AGI 采取过于简单的方法,也不同意复制大脑的功能。但我们仍然不能否认深度学习在该领域带来的进步。大脑很有可能不做梯度下降之类的事情,但在此基础上破坏深度学习是不公平的。

在创造大脑的复制品时,有许多关于大脑的东西是我们不具备的。此外,深度学习肯定会被证明是创造真正智能机器的重要组成部分,但光靠它可能还不够。

可以说,本·高尔策尔作品背后的核心思想是绝大多数好奇的人很久以前就会想到的;通过使用认知协同的概念,有计划地将人的部分设计为 AGI 的组成部分,以创造接近人类的智能,如果不是与人类不相上下的话。但是没有人能够将这个想法变成现实...他做到了。有许多伟大的研究人员值得一提,比如马库斯·哈特(艾西)和汪裴(NARS)。

尽管存在缺陷,也可能没有谷歌、脸书和特斯拉等科技巨头提供的足够资金,但 OpenCog 对创造 AGI 的贡献无论如何都不能被忽视。

你猜怎么着?就连 Ben 的作品都用了深度学习!深度学习不能被抛弃的原因有很多。正如 Geoff Hinton 自己所说,有必要重新思考反向传播,但没有人能否认这是一个巨大的成功。也许有人会为深度学习,特别是反向传播提出一个更明智的替代方案,因为它在过多的应用程序中使用。

没有看过电影《Ex 玛奇纳》的人应该——
I)跳到下一段
ii)尽快看这部电影!

我清楚地记得艾娃奔向她自己的创造者内森去杀他的场景。它确实让观众不寒而栗。

这种事情已经在各种科幻电影中一次又一次地出现,也得到了该领域非常著名的人的支持,他们警告我们注意人工智能。如果我们的创造成为我们死亡的原因呢?这就提出了在机器人中包含共存和“仁慈”的需要,这样它们就不会害怕我们。但话说回来,有人强烈声称,今天的人工智能甚至还没有达到老鼠的智能水平。

我非常相信 Ben Goertzel 关于认知协同需要的观点。那是什么?它是设计为智能的不同组件的组合,以形成一个认知系统,其中它们将相互帮助来执行它们各自的任务,以便该系统能够被称为真正智能的,而不管它以前是否在现实世界中面临过特定的情况。

人们可以以迁移学习为例,其中只有最后几层被改变和训练,而模型的大部分保持不变。

人们也可以想象用它来完成几个需要预测的任务。基于系统的要求,可以训练模型来学习哪种情况需要使用哪种类型的最后层来比人类更有效地成功完成任务(因为如果不需要,那么嗯...有什么意义?)

Yann LeCun’s post about Sophia

我显然不能保证 Sophia 实际上有多真实,这个使用机器人的 Twitter 有多接近智能,它实际上执行了多少功能,而不是来自开发团队的人,但我真的很欣赏这个想法和为实现它付出的努力,不管最终产品和它的可行性。

既然提到了 Yann LeCun 的帖子,我还想提一下他和 Gary Marcus ( @GaryMarcus )那场著名的辩论。他回应加里观点的一句话,我个人认为是最重要的一句话

“AI 需要更多的先天机械吗?答案可能是肯定的,但也有可能,不像加里想的那么多。”

-扬·勒昆,费尔和 NYU

虽然 Gary 提出了一些非常有趣的观点供大家思考,但有些时候它们听起来有些极端。另一方面,脸书的艾导演非常冷静,非常理智地处理了所有的争论。

Ali Rahimi’s view on Gary Marcus’s Paper on drawbacks of Deep Learning

诚然,这两位备受尊敬的个人所同意的事情是当前全球人工智能状态的非常基本的问题,但 Yann LeCun 关于辩论主题的立场仍然是更可接受的,也是合乎逻辑的,而 Gary Marcus 则因他在最近的论文中发表的某些言论而受到批评。

One of the most well received views on Gary’s paper by Thomas Dietterich

我绝对没有资格去评论或抛出非理性的观点,或支持在我出生前几十年就已经诞生的伟大思想进程,但请把这些看作是某个一直密切关注该领域先驱作品的人的想法。

我只是相信这样一个想法,如果 AGI 在未来的某一天能够被创造出来,那么深度学习肯定会在它的正常运行中发挥重要作用。像 OpenAI 这样的公司激励我和许多其他人相信,投入数小时研究和思考人工智能的应用肯定会产生惊人的结果,这将彻底改变我们的生活方式。

它将是结合不同研究领域的东西,如神经科学、哲学、数学、物理、计算机科学等,它们将共同贡献于一部杰作,这部杰作将被证明是人类最伟大的创造。

事实上,人工智能领域分裂成不同的团体,他们相信以不同的方式接近 AGI 问题的解决方案,而且没有一个看起来是错误的。

这些团体(对 AGI 有象征性的或行为性的或任何其他的方法)有着不同的意识形态,并且在他们的方法中有相当多的缺点,需要以某种方式结合起来,每个团体都可以抵消另一个团体的缺点,这又把我们带回了认知协同的概念。你看,没有一个想法可以完全忽略。为成功实现 AGI 而编写的每一种方法、每一次尝试、每一行代码都很重要。

与此同时,即使是为各国使用 AGI 制定治理原则,也应该制定并集成到机器中,以便它们不会被用于错误的目的,这正是伦理人工智能的全部内容。

有几个类似这样的问题笼罩着 AGI 的概念,需要加以解决,以便在该领域实际取得更实质性和突破性的成果。让我们希望,如果 AGI 是可能的,那么我们都在正确的轨道上走向 AGI,如果不是,至少最终找到正确的方式走向人类和机器人共存的想法,让世界成为一个更好的地方,为我们和未来的几代人生活!

我分享了一些链接和视频,有兴趣了解 AGI 的人一定要看看

你可能喜欢的其他文章—【https://medium.com/@raksham_p

请继续关注即将发布的更多关于人工智能的帖子!:)

敏捷营销堆栈

原文:https://towardsdatascience.com/the-agile-marketing-stack-760056bc3750?source=collection_archive---------1-----------------------

如果你在技术圈里呆过一段时间,你一定听说过敏捷这个术语。该术语起源于一种软件开发方法,专注于快速迭代、简化的沟通、灵活的路线图,以及快速轻松地完成产品版本、更新和发布的能力。敏捷主要是一种由过程和工具集支持的思维模式。这些过程和心态现在正被它们起源的开发人员圈子之外的人所采用。他们开始渗透到 B2B 营销部门,并带来了他们自己的一套工具,为敏捷营销栈奠定了基础。

如果没坏,为什么要修?

B2B 营销团队多年来一直使用相同的系统和策略,简单的事实是它们没有被破坏。敏捷的目标不是取代你的系统和策略,而是优化它们。

该流程的重点是减少时间浪费,减少基于数据的决策猜测工作,自动化重复流程,并提供实时性能指标。这些领域中的每一个都可以通过更新您的营销工具得到显著优化。我们称这套工具为你的营销栈。每家公司都会有一个适合其系统和需求的堆栈。在这篇文章中,让我们关注 B2B 营销团队的需求。

[## 什么是敏捷营销?-为什么 B2B 应该倾听- Mindbox 工作室

敏捷营销是传统营销过程的一种计算方法。敏捷营销重视灵活性…

mindboxstudios.com](http://mindboxstudios.com/agile-marketing%E2%80%8A-%E2%80%8Aand-b2b-listen/)

减少时间浪费

时间浪费是 B2B 营销组织中最大的问题之一。这是由长达一小时的会议、缓慢的电子邮件回复、低项目可见性以及严重依赖猜测的决策过程造成的。

在 Mindbox,我们试图取消所有的内部团队会议。我们这样做是因为面对面会议通常安排在 30-60 分钟,但实际上,只需要 5-10 分钟。我们在营销中采用了两种技术来改善我们的沟通。

首先是懈怠。这可能并不令人惊讶,因为大多数组织已经在使用 Slack 来改善内部沟通。我想重点说的是我们如何使用 Slack。这里有三种方法可以让你更灵活地使用 Slack:

1.每周更新——我非常喜欢发送高水平的每周更新,然后是我的项目经理发来的相应的行项目任务列表。它让我的团队从周一早上坐在工作间的那一刻起,就确切地知道如何优先安排他们的时间。我们将这些每周更新保存在公司范围的渠道中,以便我们的开发团队、高管和分包商都知道。我估计这个小小的纪律已经让我们每周的工作效率提高了 10%。

2.特定于项目的渠道——Slack 可能会迅速变成有史以来最混乱、最强大的交流平台。为了减轻这一点,我们创建了项目特定的渠道,防止团队成员被拖入与他们无关的对话。它还允许我们专注于特定的项目,跟踪项目资产,并拥有任何沟通或决策的统一历史记录。

3.直接消息与电子邮件——只要有可能,我都会使用 Slack 的直接消息功能,而不是发送电子邮件。由于 Slack 的即时通讯方式,发送收件箱中可能没有回复的快速消息变得更加容易。如果你使用 5 分钟管理风格,这也是一个很好的工具,它提供了一个不像电子邮件那么专业,但比短信更专业的沟通渠道。

我们用来交流的第二个应用是appear . in—appear . in 是一款基于网络的视频交流 app。你可以在几秒钟内旋转一个会议室,并将链接直接放入你的 Slack 频道。Appear.in 已经成功地创造了一个比 Google Hangouts 更可靠的产品,不需要登录,而且非常轻便。作为一个分布式团队,Appear.in 是我们成功的关键,我们喜欢它。

取消猜测工作

B2B 营销团队面临着大量的猜测。猜测是对时间的巨大浪费,因为当你完成了猜测,你仍然没有一条清晰的成功之路。猜测往往把自己伪装成直觉和感觉。它直接与敏捷方法相矛盾,并且通常以收入最高的人的观点结束。

敏捷营销团队用数据杀死河马牌。他们不花时间讨论想法,而是花时间查看数据,用事实支持他们的假设。当他们完成时,他们会做出一个清晰的决定,这个决定给了他们最大的成功机会。

我们的堆栈严重依赖于通过我们的营销自动化软件和二级应用程序(如 Google Analytics )收集的分析。我们跟踪一切,从链接点击到网站访问者和帖子表现。当我们探索新策略或弥补现有策略的不足时,所有这些数据都会被归档并提取出来。不要在数据收集的设置上吝啬,这一点非常重要。你可能不会全部用上,但是如果你没有它,你就根本用不上。

我们营销堆栈中的一些基本数据源包括:

用于转化跟踪的谷歌分析
用于入站链接跟踪的谷歌 UTM 构建器
用于行为分析的网站 cookies】

全部自动化

下一步是消除营销过程中的任何重复步骤。一遍又一遍的做同样的事情,不是敏捷。这就是营销自动化软件如此迅速被采用的原因。

HubSpotMarketoInfusionsofPardotDripEloqua 这样的营销自动化软件在敏捷营销栈中扮演着基础角色,使 B2B 营销团队能够根据用户交互发送自动化的电子邮件活动。然后可以对用户进行评分和培养,直到他们准备好接受销售代表的联系。

我们喜欢 Marketo、HubSpot 和 Infusionsoft。但是,选择正确的软件不应该掉以轻心。考虑组织的独特需求。我们可以通过 1 小时的免费咨询帮助您决定哪种营销自动化平台适合您。

当它发生的时候知道它发生了

敏捷营销栈的最后一块是访问实时营销分析。B2B 营销依赖于一个组织的能力,使瞬间支点。一个团队对实时数据的访问水平使得这些支点成为可能。我们非常重视为我们的团队和客户的团队构建分析仪表板。

敏捷分析仪表板的关键是数据的结构。我们重视图形和图表,因为当数据以更直观的格式组织时,我们可以更快地发现问题。为了实现这一点,我们已经将 DataDeck 添加到我们的营销堆栈中。

DataDeck 允许我们导入所有我们喜欢的分析和数据源,包括众所周知的困难的电子表格,只要它像 Google Sheets 一样托管在云中。我们也有机会与其他平台合作,如 PeriscopeData ,这是 B2B 组织的一个很好的资源,他们希望在他们的数据库中可视化他们的客户群,以及 Looker ,这是一个挖掘大规模关系数据库的强大工具。

最后

无论你的组织在哪个行业运作,在你的营销堆栈中选择正确的工具是建立一个敏捷组织的关键。一旦你有了一套可靠的工具,是时候审视你的流程和你在营销团队中根深蒂固的心态了。记住:敏捷主要是一种心态。这些工具只是让我们能够创建一个可复制的过程,大规模地实现这些心态。

你最喜欢的 B2B 营销工具有哪些?

这篇文章最初发表在 Mindbox 期刊上。

关于作者: 杰斯·威廉姆斯是一位年轻的企业家、丈夫、父亲、技术专家和 SaaS 营销专家。你可以在Twitter上关注他,在这里 了解更多关于他和他的项目

人工智能感知和响应框架:为高管和企业家寻找人工智能机会的方法

原文:https://towardsdatascience.com/the-ai-sense-and-respond-framework-a-way-to-find-ai-opportunities-for-executives-and-entrepreneurs-a24aa56b4bff?source=collection_archive---------6-----------------------

高管和企业家问我,他们应该对人工智能(AI)做些什么。我就这个主题发表演讲,我认为我已经为高管和企业家如何找到近期人工智能机会提供了一个框架。人工智能感知和响应框架将人工智能目前可以做的事情提炼为高管或企业家可以做的可操作的业务事情。

该框架将人工智能能力分解为三组盒子(为简单起见):

  1. 模式识别
  2. 预测
  3. 自动化

注意:第三项(自动化)不一定涉及人工智能算法本身,但它只是基于前两项(模式识别和预测)的结果可以采取的行动。

感觉:模式识别和预测

模式识别和预测被归入我称之为 Sense 的部分。在 Sense 部分,我们有您的数据输入、经过训练的模型以及可以推动洞察力和决策的输出。输入数据可能来自您当前的数据集、其他公司的数据集、传感器等。您可以获得的数据是基于您自己的业务,每个人都会有所不同。感觉部分(模式识别和预测)的目标是感知一些可以由人工智能模型解释的世界。模式识别(包括分类)和预测是 AI 相关模型现在能做的合理的、应用的事情。模型接受输入,并感知足够好的东西,从而得出见解和决策。

回应:自动化

另一部分叫做自动化。它在一个叫做“回复”的部分。这些是计算机可以基于来自模式识别的发现(洞察力和决策)和从模式识别和预测生成的预测数据自行采取(自动化)的(可选)动作。

使用框架

要使用该框架,您需要在 x 轴上列出 3 个部分,并在 y 轴上列出您的业务类别。我用了一个非常简单的例子,所有企业都有的两个通用类别:创收和运营效率(你可以用营销、销售、会计、运营、销售等。—任何对你有用的东西。)

现在,填写每个模式识别和预测框。只要有正确的信息,应用人工智能现在就可以做这些事情。现在,一旦这些框被填满——你可以在那里结束——你将拥有人工智能的有用用例,以便产生可以导致决策的见解。你会想你会寻找什么样的模式来产生更多的钱(例如),等等。这些是人工智能技术可以用来让你的业务受益的用例。然后,您也可以完成自动化框。通读模式识别和预测用例,并询问“接下来我们可以采取什么行动”。这将帮助你提出基于人工智能驱动的见解可以自动化的东西。

当然,围绕实施还有其他复杂因素。您可能会发现,为了创建您想要的软件,您需要清理旧数据或收集新数据。但是,这个框架将帮助你思考你能做什么以及它能如何帮助你。

建立感知和响应系统

最终,我们将建立一个感知和回应的世界。我可能会在以后的文章中写更多的内容。本质上,无论我们谈论物联网还是任何业务,我们都在谈论建立学习系统。具有模式识别、预测、观察和输出的输入。然后,在一个永无止境的学习循环中,从头再来。通过观察(感觉)理解输出,循环再次开始。同时允许人类输入/洞察,同时提供其自己洞察。我们所有的公司都在学习系统。有些人将来会做得更好。人工智能技术可以帮助所有企业,因为它非常适合系统需要理解模式或做出预测的情况。这两者都是让系统主动学习的关键。

我认为这个框架对大企业很有用,可以产生很多内部人工智能驱动的项目,可以给你的公司带来价值。此外,企业家可以使用这种模型来产生新的人工智能创业公司,通过将你从客户那里观察到的需求与人工智能可以提供的能力进行匹配,来满足客户的需求。所以,祝你好运,构建你自己的人工智能感知和响应用例。

在 Twitter 上关注我: @willmurphy

多产上关注我:@威尔

人工智能的冬天结束了。原因如下。

原文:https://towardsdatascience.com/the-ai-winter-is-over-heres-why-1001e6b7bb0?source=collection_archive---------3-----------------------

除非你生活在岩石下,否则你可能已经注意到人工智能(AI)越来越多地出现在技术对话和商业战略中。我甚至注意到我的朋友们对“认知”他们的应用程序越来越感兴趣。

很容易看出为什么。每个人都知道自动驾驶汽车革命,如果你在圈内,你就会知道这主要是由于人工智能的进步,特别是“机器学习”,这是一种用于在软件应用程序或运行软件的机器人中实现人工智能的策略。稍后将详细介绍。

我们先退一步讨论 AI。机器拥有人工智能意味着什么?

本质上,这是一个简单的想法。人工智能是机器以我们认为“智能”的方式执行任务的更广泛的概念。

而且,

机器学习是人工智能的一个当前应用,它基于这样一种想法,即我们应该让机器访问数据,并让它们自己学习。

有些人听说过“人工智能”这个术语,甚至早在 70 年代就有一些人工智能应用的经验。大多数人对人工智能的熟悉要归功于游戏。当你没有其他人一起玩的时候,在视频游戏中玩 AI 是很常见的。用户熟悉的其他人工智能应用程序包括拼写检查器等工具和其他有用的系统,这些系统似乎部分智能地帮助人类使用定义良好的规则完成任务。然而,许多这些“老人工智能”是在我们称之为“专家系统”中开发和实现的。这意味着,要将智能编码到程序或软件中,我们需要一个专家,比如在谈论拼写检查时需要一个语言专家,或者在谈论帮助医生诊断病人的系统时需要一个医学专家。这种人工智能系统在 80 年代和 90 年代非常流行。

不幸的是,这些类型的人工智能专家系统存在一个问题。任何使用过通过专家系统方法实现的人工智能的人都可以证明,这些系统在处理不常见的场景或甚至连专家都不精通的情况下经常出错。人工智能在这些情况下毫无用处,修复这些系统需要用新的专家信息重新编程。专家系统的另一个缺点是建造成本非常高。它需要为每一个特定的领域找到一个专家,这个专家能够向程序员清楚地说明他们领域的复杂性,以及应该在何时以及为什么做出任何给定的决定。当编写确定性算法时,很难对这些类型的决策进行编码(确定性算法是一种给定特定输入,将总是产生相同输出的算法,底层机器总是经过相同的状态序列)。

出于这些原因,人工智能研究人员需要发明一种更好的方法来赋予机器“智慧”。

这就是机器学习(ML)发挥作用的地方。当谈到 AI 研究时,许多人都惊讶地发现 ML 实际上是一个相对古老的话题。研究人员早在 80 年代就明白,专家系统永远不会创造出能够驾驶我们的汽车或在国际象棋或危险游戏中击败最优秀的人类的人工智能。这是因为诸如此类的问题的参数变化太大,随着时间而变化,并且基于应用的不同状态而具有许多不同的权重。此外,一个问题有许多属性无法直接观察到,因此无法直接编程到应用程序逻辑中。

机器学习通过开发能够基于可访问的数据进行学习和决策的程序来解决这个问题,类似于人类的认知,而不是对机器进行编程以执行确定性的任务。因此,程序不是做出确定性的决定,而是依靠概率和概率阈值来决定它是“知道”还是“不知道”某件事。这就是人类大脑在我们生活的复杂世界中做出决定的方式。

例如,如果你看到一朵看起来像玫瑰的花,你说,“是的,这是一朵玫瑰,”你实际上说的是,“是的,根据我以前的知识(数据),我认为玫瑰看起来像什么,我被告知玫瑰看起来像什么,我 97%确定这是一朵玫瑰。”

另一方面,如果你看到了一朵鸢尾花,而你以前没有见过多少,或者在你的记忆中没有太多关于鸢尾花的描述,你可能会说,“我不确定那是什么花。”你的“置信区间”低于你认为可接受的识别这朵花为鸢尾花的阈值(让我们称之为 30%确定它是鸢尾花。)

基于概率做决定是我们大脑最擅长的。如果我们能以同样的概念方式来模拟一个计算机程序,那么对人工智能的影响将是无限的!

好吧,你现在应该问的问题是,“如果我们在 70 年代和 80 年代就知道这些,那为什么 ML 现在才流行起来?”

我对此的回答类似于科学界刚刚验证了爱因斯坦多年前在理论物理中提出的引力波的存在。我们只是没有机器或工具来验证或否定他的理论,这是超前的,它的实际应用必须等待。

尽管多年来我们已经理解了机器学习的数学模型,但在 20 世纪 70 年代和 80 年代,让机器学习成为现实(而不是理论)所需的基础设施、技术和数据并不存在。然而,现在已经不是这样了,“人工智能冬天”可能很快就要结束了。

创建实用的机器学习应用程序需要三种基本的“原材料”。来说说他们吧。

1.廉价并行计算

思考不是一个同步的过程。从本质上来说,思维就是模式识别。我们不断地看到、感受到、听到、品尝到或闻到激活不同神经元簇的模式。数百万个这种“模式识别神经元”将低级模式传递给下一个神经网络。这个过程一直持续到我们到达最高的概念层和最抽象的模式。

每个神经元可以被认为是一个独立的模式识别单元,基于它从其他神经元获得的输入(识别的模式),我们最终可以做出高水平的决策。我们希望以类似的方式来模拟计算机程序。以类似大脑生物结构的方式模拟计算机程序被称为“人工神经网络”。多合适啊!

这种类型的数据处理的并行化对于构建模拟人类思维的系统显然是至关重要的。这种类型的能力在 80 年代是不可用的,只是最近变得足够便宜,可以在机器学习解决方案中实用。

为什么是现在?

一个词。GPU。

好吧,也许那是三个字?图形处理单元(GPU)变得流行起来,因为它们能够为视频游戏、游戏机甚至手机处理高质量的图形。图形处理本质上是并行的,这些 GPU 是以利用这种计算类型的方式设计的。随着 GPU 变得流行,它们也变得更便宜,因为公司相互竞争以压低 GPU 的价格。没过多久,人们就意识到 GPU 可能会解决困扰研究人员几十年的计算问题。这可以为他们提供构建人工神经网络所需的必要的并行计算。他们是对的,GPU 成本的降低使公司能够购买大量的 GPU,并将其用于构建机器学习平台。这将大大加快我们利用高度并行化的神经网络构建的速度,以及我们能够处理的数据量。说到数据…

2.大数据

这个大数据,那个大数据…

我知道每个人都听说过对大数据的大肆宣传。然而,这到底意味着什么呢?为什么现在在这里?之前在哪里?“大”有多大??

事实是,当我们谈论大数据时,我们实际上是在说我们每年都在捕获、处理和生成更多的数据,而且这些数据正在呈指数级增长。

这很重要的原因是,为了训练人工大脑进行自我学习,你需要大量的数据。婴儿每年接受和处理的视觉数据量比 80 年代数据中心拥有的数据量还要多。然而,这甚至不足以训练机器。那是因为我们不想等一年才学会初级视觉!为了在人工视觉中训练计算机,我们需要的数据比一些人一生所能吸收的还要多。这终于成为可能,因为存储和记录如此多的数据是廉价的,快速的,无处不在的,由一切产生的!

我们智能手机上的数据量比 80 年代大多数巨型计算机系统存储的数据量还要多。数据和内存存储,它已经增长到史诗般的比例,而且没有任何迹象表明会很快放缓。这些数据对于智能机器的实现至关重要,因为它需要一个问题的许多实例来推断概率上正确的解决方案。大数据是这些计算机需要学习的知识库。人工智能可以访问的所有知识都是我们收集和提供给人工智能越来越多的数据,并让机器从数据中的潜在模式中学习的结果。

当计算机开始识别人类从业者从未见过的模式时,人工智能的力量就来了。机器将理解数据并识别数据中的模式,就像我们的神经元开始识别我们以前见过的问题的特定模式一样。这台机器相对于我们的优势是通过电路发送电子信号,这比我们大脑中突触上的生物化学信号快得多。如果没有大数据,我们的机器将没有任何可以学习的东西。数据集越大,人工智能将变得越聪明,机器将学习得越快!

3.更好/更深入的算法

正如我之前提到的,研究人员在 20 世纪 50 年代发明了人工神经网络,但问题是,即使他们有计算能力,他们仍然没有有效的算法来处理这些神经网络。一百万或一亿个神经元之间有太多天文数字般巨大的组合关系。最近,这一切都改变了。这一过程中算法的突破导致了新型人工网络的出现。分层网络。

例如,以识别人脸这一相对简单的任务为例。当发现神经网络中的一组比特触发了一种模式——例如,一只眼睛的图像——结果就是(“这是一只眼睛!”)被移到神经网络中的另一个级别,用于进一步解析。下一级可能会将两只眼睛组合在一起,并将有意义的块传递给另一级层次结构,使其与鼻子的模式相关联。要识别一张人脸,可能需要数百万个这样的节点(每个节点产生一个计算结果,提供给周围的其他节点),这些节点堆叠起来有许多层。2006 年,当时在多伦多大学的 Geoff Hinton 对这种方法做了一个关键的调整,他称之为“深度学习”。他能够从数学上优化每一层的结果,这样随着层的增加,学习积累得更快。几年后,当深度学习算法被移植到 GPU 时,它们的速度大大加快了。单靠深度学习的代码不足以产生复杂的逻辑思维,但它是当前所有人工智能的必要组成部分,包括 IBM 的沃森;谷歌的搜索引擎 DeepMind 和脸书的算法。

这场廉价并行计算、更大数据和更深入算法的完美风暴造就了人工智能 60 年来的一夜成功。这种融合表明,只要这些技术趋势继续下去——没有理由认为它们不会——人工智能就会不断进步。

感谢阅读!我在业余时间写了这些帖子,如果你喜欢的话,对博客最大的补充就是分享它!

此外,您可能有兴趣订阅我在 JasonRoell.com 的博客,我在那里发布了我认为普通程序员甚至技术爱好者都感兴趣的技术主题。

我想亲自感谢凯文·凯利为这个职位的灵感。我强烈推荐阅读他的书《不可避免的》,他在书中更详细地讨论了这些以及更多的过程。

来源:

不可避免的:理解将塑造我们未来的 12 种技术力量。-2016 年凯文·凯利奥运会

如何创造思维——雷·库兹韦尔

http://www . Forbes . com/sites/Bernard marr/2016/12/06/人工智能与机器学习的区别是什么/#7ed065c687cb

算法抛绳器

原文:https://towardsdatascience.com/the-algorithm-slinger-9b9646f104ef?source=collection_archive---------17-----------------------

数据科学和分析团队中有一类人。这些人往往需求量很大,能赚很多钱,而且当他们发表意见时往往不会受到质疑。他们带着一套对某些人来说很有启发性的工具进来。公司会吹嘘他们的团队中有多少人,他们在做多少项目。他们将谈论他们拥有的统计背景,以及他们花了多少钱来购买这些人想要的工具。他们被称为算法投递员,是数据科学领域最危险的人。

一个算法抛砖引玉者是一个拥有制作算法技能的人。他们可以来自统计数据、新的数据科学计划,或者只是对深度学习或机器学习有很好的理解。问题是,就他们能带来什么而言,这就差不多了。然而,他们往往对自己的技能非常有信心,这种信心有助于他们获得牵引力。因为他们非常直言不讳,所以他们往往会引起那些真正不明白是什么让数据科学很好地工作的高级领导的注意。就像在老西部片里一样,这些算法投递员走进办公室,开始用算法扫射这个地方。他们不会杀死任何人,但他们可以轻而易举地毁掉你的生意。他们会上网找到一些开源工具,并声称他们需要它,但你可能会发现该工具在六个月内没有任何贡献。他们会要求最新的工具,不是因为你需要它,而是因为它很酷,他们需要它来填充他们的简历,这样他们就可以在你弄清楚他们造成了什么损害之前离开。他们不遵循流程来完成工作,事实上,他们甚至可能承认,他们只是把东西往墙上扔,看看有什么粘在一起。这就是问题所在,数据科学需要成为一门科学才能很好地工作,当你只是吐出算法时,它就不是一门科学。事实上,如果任其发展,它可以提高一个公司的技能。

在过去的几年里,我目睹了这种情况的发生。公司会雇佣会编码和制作算法的人,并付给他们 20 万美元或更高的年薪。如果你像我一样生活在中型市场,20 万美元对于一个没有什么经验和知识的人来说是一大笔钱。问题是,他们实际上并不做数据科学,尽管这是他们拿工资要做的事情,但他们做的事情在未经培训的局外人看来像数据科学,但实际上不是。他们经常只是把东西往墙上扔,希望有东西粘在墙上,这不是科学,如果你打算继续做生意,这也不是经营你企业的好方法。但是这些人在数据科学社区横行霸道,引发各种问题。

本质上,这是因为在许多公司中,数据科学不是科学,这些算法抛砖引玉者还没有找到如何以实际推动业务的方式解决问题。因此,他们可以随心所欲。你会让金融做任何合法的事情吗?做自己想做的事的自由;自负和缺乏高层领导经常导致项目无法完成,成本严重超支。当这些成本超支需要支付时,其他团队通常会以裁员作为代价。但公司一直要求有更多这样的算法抛绳器,因为他们不知道自己不知道什么。

一个真正的数据科学家实际上做实验,知道如何有一个假设陈述,并在他们做任何工作之前创建一个。其中一个算法抛手曾经跟我说过,他们在搞清楚工作,能说出它的意思之后,会做一个假设陈述。事情不是这样的。数据科学实际上需要是关于科学的。测试想法,验证想法,跟踪结果,尽可能地阐明这些结果的意义。不仅仅是制造算法和自我炫耀,这不是数据科学。

另一个方面是高层领导。数据科学通常位于分析或 IT 领域。大多数 CIO 不懂数据科学,他们懂软件,不一样。是的,数据科学确实涉及编码,但这并不意味着它等同于软件开发。一些分析型领导者知道传统的 BI,同样,不一样。大多数传统的 BI 团队只做报告,而数据科学需要更主动地开展工作。BI 没有错,但是我们不要把两者混为一谈。数据科学的领导地位非常新,很少有人知道。你能做的最好的事情实际上是诚实你不知道并且去学习它。数据战略和数据科学领导力对任何公司都至关重要。一旦你有了好的领导,你就不会雇佣一个算法抛砖引玉的人,你会省去很多头疼的事情。典型的例子:

我曾经做过一个项目。一些算法抛砖引玉者花了数年时间研究一个看不到尽头的模型。他们只是不断增加项目,高管们认为这很棒,因为他们听到了他们不理解的统计短语,并认为这意味着事情正在完成。但唯一被修改的是银行账户。算法投掷者想要新的工具,因为他们 6 个月前需要的工具现在还不够好,当然这不是他们的错。他们需要更多的人,当然就像他们一样。他们没有路线图,没有一个单一的截止日期,事实上,其中一个人吹嘘他从来没有按时完成任何事情。他们一年花掉了 500 万美元,并计划每两年翻一倍,但没有任何产品在收入或利润方面赚钱。让我们将其与拥有使用数据科学方法的实际数据科学家的团队进行比较。同一家公司的另一个团队拥有数据领导权、战略、期限和时间表。他们在不到 6 个月的时间里创造了价值 1.5 亿美元的产品。你想要哪个?如果你想要结果,不要雇佣算法抛绳者。

支付的算法化

原文:https://towardsdatascience.com/the-algorithmization-of-payments-how-algorithms-are-going-to-change-the-payments-industry-5dd3f266d4c3?source=collection_archive---------2-----------------------

算法将如何改变支付行业

Algorithms…

就在不久前,首席执行官和大型银行还相信,银行的位置永远是服务客户所必需的。然而,在过去的十年中,我们已经看到了数字银行的出现,这些银行从来没有也可能永远不会拥有物理位置,但仍然设法扩大了他们的用户群,并增加了包括保险、抵押贷款和贷款在内的附加服务。

在支付行业,我们看到像 Chase 和 First Data 这样的公司统治了四十多年。然而,就像银行业的数字化迫使现任者改变他们的战略一样,支付的数字化使 WorldPay、Vantiv 以及最近甚至 Stripe、PayPal/Braintree 和 Adyen 等公司占据了很大一部分市场份额,不是通过专注于传统业务,而是专注于已经发展到让传统业务黯然失色甚至破产的初创公司。想想百视达对网飞,出租车对优步,或者传统商店对亚马逊。

Market Cap of Amazon versus Traditionals 2006 versus 2018

但随着越来越多的企业认识到数字是新的传统,我经常会问支付行业的下一步是什么?

就像在 20 世纪 70 年代和 80 年代对采用计算机和数据库持开放态度的公司,或者在 20 世纪 90 年代和 21 世纪初互联网泡沫破裂后理解互联网将成为游戏规则改变者的公司一样,我相信那些理解算法化将改变行业并积极投资于它的公司,最有可能在 2010 年和 2020 年成为幸存者。

流程的数字化

为了理解什么是算法化,我们需要两步回到传统的业务流程。数百年来,传统的业务流程是由人们创造产品或提供服务的劳动以及伴随而来的支持业务流程组成的。

例如,提供医疗服务的医生会有办公时间,在那里病人可以走进来或者预约。传统上,登记病人、更新他们的档案或写处方的过程都是用手写在纸上完成的。随着这些过程的数字化,计算机进入了医生的办公室,文件以数字方式存储,预约在数字日历中进行,处方通过电子邮件发送给药剂师。

直到今天,企业仍在通过开发移动应用程序或为客户提供基于云的解决方案来改善流程的数字化,以更好地访问或存储来自实际业务流程的数据。

算法化

当我们谈论算法化时,我们谈论的是使用数字化标签数据的过程,这些数据作为数据集存储在数据库中,并使用自动化过程来创建用户可以从中获取信息的分析。大多数公司都经历过这个过程,但这只是算法化的第一步。每当数据集(N)可以用于创建用户从中获取信息的分析时,下一步就是使用机器学习和人工智能来创建新的过程(N=N+1),这本身就提供了新的数据集,从而完成了算法化循环。

支付服务提供商示例

举例来说,设想一家支付服务提供商每天处理数百万笔交易。商家提交的每笔交易都包含与交易相关的信息,如 PAN(个人账号)、CVC(卡验证码)、截止日期、客户姓名和电子邮件地址。通过浏览器,PSP 能够收集附加数据,如日期和时间、设备指纹、浏览器类型和版本、IP 地址和一些其他数据点(N)。

随着交易被处理,它们被存储在数据库中。大多数 PSP 将使用这些数据为他们的商家提供特定一天的交易的标准报告。有些人甚至会汇总数据以提供数据摘要。如果他们想变得更有创意,他们会开发可以通过 UI 访问的仪表板和图表,以显示事务如何随着时间的推移而进展。

随着计算能力、云计算和分布式存储技术的进步,包括 PSP 在内的许多公司都在尝试改进现有流程的方法。因此,举例来说,前面提到的 PSP 可以决定研究是否大量的历史数据可以帮助他们防止即将到来的交易欺诈。通过使用机器学习和人工智能,数据科学家可以创建一种算法,能够使用交易中的许多变量,并预测新提交的交易存在欺诈的可能性。

基于卡的支付的伟大之处在于,持卡人可以在特定的时间内对交易提出异议。每当欺诈性交易被报告时,发行者向该方案发送消息以拒付交易。每当 PSP 接收到这个信息,他们就能够把它存储在他们的数据库中。这使他们有能力学习他们最初预测的准确性。通过使用人工智能,他们可以调整原始算法,通过增加或减少算法中考虑的变量的权重来提高得分,实际上创建了一个新的过程(N=N+1)。

算法化将如何影响支付?

上面的例子只是算法化如何用于改进现有流程的一个用例,关于上面的例子,有趣的是,这是大多数欺诈解决方案多年来处理该问题的方式,但是欺诈者也变得越来越聪明,这意味着欺诈仍然会发生。

但是支付不仅仅是防止欺诈。成本、转换、连接、计费和支出是新的 PSP 能够使用算法来发挥作用的一些领域。随着越来越多的公司开始习惯于 PSP 的商品化,作为 PSP 保持成功的唯一方法不是专注于减少欺诈或降低每笔交易的成本,而是展示 PSP 能够为你带来更多业务的价值。

销售人员比财务部门更受欢迎的原因是,创造更多的收入等于增长,而降低成本可能会提高利润,但不会增加收入。

智能采集路由

相同的交易数据可用于基于性能、功能或价格优化获取途径。一个很好的方法是实现多臂 bandit 算法,这是一种“更智能”或更复杂的 A/B 测试版本,它使用机器学习算法来动态地将流量分配给表现良好的变体,同时将较少的流量分配给表现不佳的变体。通过连接多个收单机构,PSP 可以通过将交易路由到收单机构来改善他们的商户结果,收单机构为他们提供该商户的最佳结果,最好是性能、价格或功能。

动态 3D 安全

通过额外的两步验证措施,如 Visa 验证或万事达卡的 3DSecure,许多 PSP 仍然会看到高下降率,因为发行商要求两步验证交易。通过使用决策树学习,PSP 可以预测交易是否需要路由到 3DSecure 页面进行额外的两步验证,或者继续传统流程是否会导致成功的交易。

不要被别人的想象力所限制

当然,使用支付中可用的交易数据来提高商户绩效还有许多其他方式。PSP 将能够获取几十年来生成的相同数据,并思考如何通过使用今天可用的工具来改进流程,以创建更适合甚至尚不存在的商家和商业模式的 PSP。

感谢阅读;),如果你喜欢它,请点击下面的掌声按钮,这对我意义重大,也有助于其他人了解这个故事。让我知道你的想法,联系推特或 T2 的 Linkedin。

强化学习的惊人影响

原文:https://towardsdatascience.com/the-amazing-impact-of-reinforcement-learning-7a98ff553ac5?source=collection_archive---------2-----------------------

我认为今天有一些技术将会大规模地重塑我们所知的社会面貌。如果你关注我的帖子,你会知道我认为区块链科技在这方面是一个很好的竞争者。我认为 CRISPR 和基因疗法将会极大地改变医疗保健。但也许我最确定的技术是“人工智能”(这不是一个我真正喜欢的术语,但出于本文的目的,我们将使用它)。

更具体地说,我认为机器学习领域的许多进步正在让学习算法变得越来越复杂,这将彻底改变我们周围的世界。

深度学习已经开始在那里取得进展。我认为我们实际上处于 DL 的初级阶段。但是我最感兴趣的一种方法是强化学习。

这是一个我仍在了解自己的领域,但它一个我们将在我们的金融科技初创公司中积极使用的领域,它已经证明了它的巨大威力(在 Alpha Go 中击败最优秀人类的算法是一个 RL 算法,在 DoTA 中击败最优秀玩家的算法也是如此,如果我必须打赌,我会打赌很多自动驾驶汽车公司都在使用它)。

如果我必须总结 RL 真正擅长的是什么,我会说这是一种在极端不确定性面前做出最佳长期决策的伟大方法论。我知道这有点模糊,但仔细想想,这也是一个非常有力的说法。

它的模糊性说明了它的普遍性。传统上,只有人脑真正擅长的事情现在由算法来处理——这种算法可能能够避免偏见和主观性,并能够接收大量数据。

RL 也让我们离通用人工智能的世界更近了一步。它开始非常非常地模仿我们大脑权衡决策的方式。

这与构成深度学习网络的“布线”架构相结合,开始看起来有点类似于大脑的硬件布线和大脑做出决策的方式。

这是一个令人难以置信的令人兴奋的领域,我期待着很快在一个更好的投资管理产品中实现。

古代游戏与人工智能

原文:https://towardsdatascience.com/the-ancient-game-and-the-ai-d7704bea280d?source=collection_archive---------1-----------------------

对于人工智能和人类来说,游戏都是极好的训练工具。让我们一步一步地了解如何编写游戏,训练人工智能机器人,并确定最有效的玩家。一路上,我们了解我们选择的游戏。

马特·达沃利奥 ( GitHub )和埃里克·兰根博格 ( GitHub )。

曼卡拉

出于我们的目的,我们将利用一个非常古老的游戏。

Mancala (Oware)

曼卡拉的起源可以追溯到 6 世纪。多年来,这项运动有了许多变化。本文将使用西方世界流行的 Oware 版本。

Mancala UI

曼卡拉游戏棋盘由 14 个盘子组成,其中两个是得分盘,另外 12 个在两个玩家之间平分。游戏开始时,在 12 个非得分的盘子中各放四颗石头。一个玩家从他们的六个包含石头的盘子中选择一个来移动。被选中的盘子里的石头都被捡起来,然后每颗石头被一次一颗地放入下一个顺时针运动的盘子里。可以在十二个非得分盘和当前玩家的得分盘中各放一块石头。对方的得分盘会被跳过。游戏在玩家之间交替进行。当一名玩家得分达到 25 分或更多时,游戏结束。

还应用了两个附加的通用规则。当一个玩家的移动导致最后一块石头被放入得分盘时,他们可以进行另一轮。如果满足两个条件,就会出现捕获规则:玩家在移动中掉落的最后一块石头落在当前玩家这边的空盘子中,并且在对手那边的相邻盘子中至少有一块石头。在这种情况下,当前玩家将获得最后一颗掉落的石头以及对手盘子中的所有石头。

游戏状态和动作

曼卡拉的棋盘由 14 个盘子组成,每个盘子可以包含任意数量的石头。这就形成了一个简单的数组< int > 表示的棋盘。该状态的唯一其他部分与当前玩家回合有关。单个布尔跟踪该信息。额外注意:这个状态是马尔可夫:一个无记忆系统,其中所有相关信息都包含在当前状态中。

可行的行动是从 12 个可能收集石头的盘子中选择一个重新分配。在每一回合中,玩家只能在棋盘上自己的一边移动,限制在六个选项之内。此外,只能选择有石头的菜肴。

曼卡拉是一种以完美信息为特色的游戏,比如井字游戏、国际象棋或围棋。因此,代理的状态视图总是完整的,并且他们被交给完整的游戏来做出决定。

代理人

代理只是一个在环境中做出选择的系统。本文将按照复杂性的大致顺序逐步介绍尝试的代理。提供的伪代码涵盖了要点,但是访问主库获得适当的细节。

随机代理

让我们检查一下基本系统:随机代理。

随机代理只是查看可用的选项并随机挑选。虽然不是很大的挑战,但这个相当于身份函数的人工智能可以作为一个很好的基线。在未来,任何代理的第一个问题是:它能打败随机机遇吗?

最大代理

由于曼卡拉缺少随机成分,任何一个动作的结果都可以被精确预测。最大值代理计算每一个可能的移动的分数,并选择具有最高收益的选择。这是一个专家代理,意味着逻辑来自人类书写的规则。

确切代理人

来自 Max 代理的增强利用了 Mancala 中的重复移动规则。通过支持不放弃回合的行动,该代理可以利用在回合中增加领先优势。精确代理搜索的第一个移动是任何移动,其中一个洞中的石头数量与玩家得分洞的距离匹配。这将允许玩家进行另一次移动。如果有一个以上的洞符合条件,将选择最靠近得分孔的洞。这允许球员多次使用这种情况,因为更远的握杆会超过更近的球洞。

如果没有符合条件的可能的移动,代理将退回到最高的可能得分。

最小最大代理

最小最大代理是一种技术,它在一定深度探索可能的行动,并选择具有最大期望结果的路径。

代理遍历代表每个树深度的选择的大树。当模拟给予代理人控制权时,代理人将分数最大化,而当对手控制时,代理人将分数最小化。这个名字来源于这个模式。当显示游戏状态时,代理建立一个代表树,并播放为当前玩家产生最高分数的根节点。由于移动的次数随着深度的增加呈指数级增加,这个代理需要大量的开销。

Alpha-Beta Pruning Example [2]

Alpha-beta 修剪通过减少遍历树时搜索的分支数量来缓解这个问题。如果代理意识到路径不可能比先前观察到的选择执行得更好,则放弃对分支的评估。通过遍历,存储了两个变量:alpha,玩家在分支中保证的最高分,和 beta,对手保证的最低分。在最大化级别的遍历过程中(代理正在运行),如果节点不增加 alpha,则修剪分支,代理继续运行。相反,在最小化级别上,如果 beta 不降低,则节点被放弃。对于我们选择的深度,观察到的性能提高大约是一个数量级。

蒙特卡罗树搜索代理

蒙特卡罗树搜索 (MCTS)最近在双人游戏中成为一种流行的方法,这主要是由于 AlphaGo 机器人的成功,它作为一个组件包含在内。MCTS 是最小最大树搜索和阿尔法贝塔剪枝的进步。

代理构建了一个类似的最小最大树,但是一旦达到深度,代理随机地完成游戏并记录输赢。实际上,MCTS 用随机的输赢结果代替了最小最大值的适应度函数。经过多次迭代后,最终结果对有利路径的评分更高。由于游戏的大状态空间,代理需要大量的迭代来调查足够的可用移动,即使在浅的深度。

Kocsis and Szepesvári’s score for selecting nodes [3]

在这些迭代中,记录每个可能节点的分数,以将所选节点的值制成表格。随着每次迭代的执行,代理通过树反向传播结果以更新节点分数。

q 学习代理

Q 学习是一种强化学习方法,用于估计每个状态的动作值(Q)。实际价值来源于设计者如何构建奖励。除了提取状态的典型任务(通常比这个曼卡拉例子更复杂),设计者还必须选择系统何时奖励代理以及奖励多少。一个简单的策略可能是对感知到的有利位置进行奖励,而不是最终想要的结果。然而,大多数情况下,让代理学习并在达到最终目标时给予奖励是有益的。对曼卡拉来说,目标是赢得比赛。

Q Values — Value of Actions given current state. [1]

简而言之,Q 函数估计代理人在给定状态下期望从一个行为中获得多少回报。

有多种方法可以发现系统的 Q 值,例如 SARSA(状态-行动-奖励-状态-行动)。通过遍历状态、动作和下一个状态,代理不断更新对奖励的估计。对一个国家的一些访问可能会基于代理人或环境(在曼卡拉的例子中,环境是规则和对手代理人的组合)的后续行动而导致不同的回报。因此,在 Q 函数收敛于正确的奖励值之前,需要多次通过。

Example Updating Q Values — [1]

但是许多应用程序都受到这些方法的影响,因为状态/动作空间非常大。对曼卡拉可能的状态的粗略估计是上限为 12⁴⁸ (12 个可玩的盘子,48 个可用的石头)≈10⁵⁰——这太多了,无法探究。有几种方法可以避开这个问题,下面详细介绍一些更成功的版本。

曼卡拉的基本 Q 学习尝试包括通过逼近每个盘子里的石头来压缩状态空间。注意盘子是否是空的将状态空间减少到 12,只有 4096 种可能的状态,很容易探索。结果很糟糕:这种国家表述太不精确了。这种状态表示法忽略了太多的细节。类似的分解状态的方法失败了,并再次将所需的探索路径的数量推到合理的计算之外。

深度 Q 学习代理

深度 Q 学习是一种流行的技术,利用强化 Q 学习和深度神经网络来表示估计的动作值(Q),消除了状态/动作表。流程大体相同,但进行了重组,以最大限度地提高网络效率。 <状态、动作、状态 _ 下一个、奖励> 的体验重放存储器被不断更新和采样,以便训练网络。

常见的技术包括使用卷积神经网络(CNN)来分析作为状态输入的原始帧。一个小的 CNN 被训练成以 6x2 灰度图像的形式抓住板上的图案。

异步优势行动者-批评家代理

A3C 代理是一种策略评估方法,它运行并行代理,而不是经验重放。三个网络协同工作:输入、行动和批评。输入网络将状态转换到嵌入空间,策略网络给出可用移动的概率分布,价值网络描述当前状态的回报。

A3C Networks

多个代理同时使用这个共享模型运行游戏,并根据行动的回报结果更新策略和价值网络。除了随着每个额外的线程更新模型而线性加速之外,不同的游戏不太可能收敛到相似的最小值(正常的演员-评论家方法的常见问题)。

结果

特工们对比了一个简单的流程:玩曼卡拉!

代理人的每一个组合都被测试了 500 场游戏,每一场游戏都以不同的种子开始,以允许随机因素达到平衡。特工们甚至自己打自己。为了简洁起见,省略了一些表现不佳的代理。

Values are % of wins for Player 1 vs Player 2

代理性能大致符合复杂性:随机代理最差,A3C 代理最好。专家代理在对抗不太专业的代理时比 RL A3C 代理表现得更好,而 A3C 代理避开了最好的专家代理。

请注意,代理人相对于他们自己的对角线总是倾向于第一个玩家——曼卡拉拥有非常强大的先发优势。MinMax 作为第一玩家赢了 62%对 A3C 的比赛,但作为第二玩家只赢了 19%。假设他们交易先发优势,A3C 将赢得 71.5%的比赛。最先进的强化学习技术表现良好。

这并没有贬低专家代理:这些竞争,既不需要昂贵的培训,也不需要装载大型模型。精确代理只需要几行代码,是完成计算最快的代理之一。相比之下,当搜索更大的深度时,MinMax 很容易变得不可行,而 A3C 需要加载模型(需要 GPU 和相关的库)。对于大多数人类玩家来说,Exact 是一个可怕的对手,并且不需要太多的依赖。

建于弗吉尼亚大学的数据科学研究所。

参见 GitHub 上的代码。

马特·达沃利奥 ( GitHub )和埃里克·兰根博格 ( GitHub )。

参考

[1]https://en.wikipedia.org/wiki/Q-learning

[2]https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning

[3]https://en.wikipedia.org/wiki/Monte_Carlo_tree_search

基于人群的餐馆评论的反民主化

原文:https://towardsdatascience.com/the-anti-democratization-of-crowd-based-restaurant-reviews-67ab01bad38f?source=collection_archive---------11-----------------------

我完全赞同过去 20 年技术爆炸为发达国家所做的一切。直接——它带来了效率,让我们的生活更轻松,让我们更快地得到东西,甚至帮助我们活得更久。间接的——也许它最丰富的副产品已经在我们看待书呆子、内向者、书呆子和一般社交笨拙者的方式上带来了一场非常激进的改革。至于不发达国家的技术进步,我倾向于说,他们既无法跟上同样的步伐,也没有深远的潜力。我的意思是,上一次我费心去检查的时候,小额金融贷款的增长似乎达到了顶峰,其最初最响亮的倡导者转向了争议较少和更具社会影响的追求。

具体来说,我想重点谈谈技术如何在很大程度上影响我们相互交往方式的范式转变。NYU 经济学家兼作家 Arun Sundararajan 将人类的这种进化称为“共享经济”,他进一步指出:

“这种转变将通过刺激新的消费、提高生产率以及催化个人创新和创业精神,对经济增长和福利产生积极影响。”

越来越多的企业家几乎每天都在单独或集体创办新的企业,这证明了以上几乎所有的观点都是正确的。无论动机是为了解决现存的老问题,还是为了超越一个似乎没有得到正确公式的倒闭的企业,创业社区继续经历着快速加速的增长。

是的,你没看错,我的确把整个创业社区归为两类。

因为这种创业失败的历史记录往往会因幸存者史诗般的“凤凰涅槃”故事而半途而废,对成功的过度索引往往会使外部观察者认为这种成功和高度搜索引擎优化显著(正)相关。在大多数情况下,要在这个合理的逻辑中找出漏洞是非常困难的。我敢说它几乎是气密的。

但不完全是。

请允许我分享一些观点。作为一名企业家,我的大多数企业都失败了,因为我要么没有足够地培养它们,要么没有组建合适的团队来补充我有限的技能。虽然许多失败的企业家可能会很快指出资本不足几乎是他们创业失败的唯一原因,但我认为这只是一个借口。事实上,我被大量的数据所左右,这些数据表明相反的情况更符合经验事实。

至于我们(这次是一个团队,有我姐姐、她的丈夫,还有你的丈夫)最近的投资,是一家印度快餐餐馆(孟买弗兰基公司),我们已经决定依赖于一个大量启动的初始投资方法。这在很大程度上是基于确保软着陆,因为一旦失败,我们没有投资者可以偿还。但正如许多企业家喜欢过分自信地安慰自己,“这次会不同。”我们也是。

这家餐厅开业几周后,我没有意识到有多少技术会渗透到业务的几乎每一个部分。虽然在我职业生涯的大部分时间里,我广泛地从事技术工作,并编写了数百万行代码,但不知何故,我未能预见到交集会变得如此位和字节密集。从建立我们的 Square 销售点到现在与我们合作的 8 个在线交付服务,除了依赖生物计量时钟设备进行工资支付,每一次集成都有一个独特的技术障碍需要克服。但寻找解决方案的每一步都变得越来越令人满意,因为这种努力似乎完全是精英制的——我们投入的工作越多,得到的回报就越多。

  • 系统启动了
  • 顾客越来越多
  • 付款处理速度很快,交易费用低于行业平均水平,付款到我们银行账户的延迟时间也很短
  • 簿记很快就完成了,没有一个陡峭的学习曲线
  • 我们的数字业务开始快速增长。

但随后我们遇到了意想不到的绊脚石。

Yelp

在你去餐馆或任何其他地方之前,别人的评论或评论可能会严重影响你成为最终消费者的决定,我相信你已经查看了那家店的 Yelp 评论。作为一个严重依赖这些评论和“看似”民主的评论分享过程的人,我已经养成了努力缩小消费者和贡献者之间差距的习惯。所以,我写评论已经很多年了。现在,在接收端(作为企业所有者),我们从来没有考虑过以下问题——当我们的评论者给我们留下一贯的五星评论(现在达到 37 星)时,“看似”民主的平台同时将它们一扫而光,这公平吗?

超级强调‘bot’。

Yelp 这么做的理由?这是一种算法。说到蒙骗我们。为了验证我的假设,即模型拟合他们的“算法”实际上有多差,一些实验是必要的:

  1. 由于我们的大多数评论者都来自那些很少或根本没有 Yelp 存在的人,这些评论可以合理地假设被指定删除。但是当更多的(甚至一些资深的)评论家开始投稿时,结果是完全一样的。
  2. 评论似乎倾向于不同程度的情绪变化和夸张。无论是明显的压抑,高度的尖锐,还是仅仅敷衍了事,结果似乎也是完全一样的。
  3. 移除此类审查后,回归确定半衰期。如果在第 1 天留下了 4 条评论,那么到第 3 天,这 4 条评论都将被删除。
  4. 不顾一切地向我们的在线社区展示我们至少有一篇评论,我决定写一篇。令人惊讶的是,这 4 天没有被删除。更奇怪的是,该算法没有自动删除我的评论,因为我正在使用我的企业主资料来留下对 Yelp 知道我拥有的企业的评论。也许扩大同情票是一个嵌入的功能。
  5. 我们甚至决定屈服于这样一种观念,即通过承诺向 Yelp 广告支付 350 美元,“付费游戏”将使我们的评论复活。到目前为止,两周过去了,还是没有任何改善。

结论:与语义算法几乎没有线性关系,但是嵌入在时间去除函数中的模型拟合很好

扎加特调查对比

起初,我们对这种看似欺诈的做法感到愤怒,但现在看到我们的业务并没有完全衰退,我们不得不将我们的想法转移到我们从基于不对称寡头垄断的经济中转移出来的是多么少。快进到 20 世纪 80 年代和 90 年代,当时 Zagat 调查似乎是餐厅评论领域唯一的真理来源,多年后在 2004 年出现的穿着闪亮盔甲的骑士是 Yelp。随着它在市场上的无处不在和声名鹊起,它似乎为这个被垄断的市场带来了一场基本上民主的改革,更不用说降低那些长期以来享受小人物特权的乏味评论家的垄断影响力了。但是随着许多企业走向成熟,无意中脱离了他们充满理想主义的开端,Yelp 失宠成为像 Zagat 调查最终那样令人厌恶(和淡化)只是时间问题。

让颠覆游戏开始吧。

人工智能的建筑师——深度学习

原文:https://towardsdatascience.com/the-architect-of-artificial-intelligence-deep-learning-226ac69ab27a?source=collection_archive---------10-----------------------

人工智能是十年来最显著的进步之一。人们正在从显式软件开发转向构建基于人工智能的模型,企业现在依赖于数据驱动的决策,而不是人工定义规则。一切都在变成人工智能,从人工智能聊天机器人到自动驾驶汽车,从语音识别到语言翻译,从机器人到医学。然而,人工智能对研究人员来说并不是什么新鲜事物。它在 90 年代之前就已经存在了。但是是什么让它如此流行并向世界开放呢??

我已经从事人工智能和数据科学工作近两年了,并且已经围绕许多所谓的最先进的人工智能系统工作,如生成聊天机器人、语音识别、语言翻译、文本分类、对象识别、年龄和表情识别等。因此,在人工智能领域呆了两年之后,我相信在这场人工智能热潮背后只有一项主要技术(或者随便你怎么称呼它),即深度学习

这是我的入门博客,我不会深入研究深度学习和神经网络的技术细节(将在即将到来的博客中谈论我的工作),但与你分享为什么我认为深度学习正在接管其他传统方法。如果你对深度学习和人工智能不感兴趣,让我用简单的非技术性的语言解释给你听。想象一下,你必须建立一种方法来将电子邮件分类,如社交邮件、促销邮件或垃圾邮件,这是谷歌为你的 Gmail 收件箱做的主要人工智能任务之一!你会怎么做来实现这个目标?也许你可以列一个单词列表,在电子邮件中查找,如“广告”、“订阅”、“时事通讯”等,然后编写一个简单的字符串匹配正则表达式,在电子邮件中查找这些单词,如果找到这些单词,就将它们分类为促销或垃圾邮件。但这里的问题是,你能通过这种方式抓住多少关键词,或者你能为此手动编写多少规则?你知道互联网上的内容是交叉折叠的,每天都会有新的关键词出现。因此,这种基于关键词的方法不会给你带来好的结果。

现在,如果你仔细想想,你有一台比你快一百万倍的计算机可以进行关键字匹配。因此,与其使用你强大的计算设备来进行简单的字符串匹配,为什么不让计算机来决定分类规则呢!我的意思是,计算机可以处理成千上万的数据,并在你能想到 5 个这样的规则的时间内,为这项任务提出更精确的规则。

这就是深度学习!而不是你明确地设计你认为可以解决问题的规则和条件(比如简单的 if-else,制作关键字字典等等)。),深度学习致力于赋予计算机产生特定规则的能力,计算机可以使用这些规则来解决问题。这意味着它是一个端到端的架构。您将数据作为输入提供给网络,并告知每个数据点的期望输出。然后,网络仔细检查数据,并相应地更新规则,以找到一组优化的规则。

这种决策能力一般仅限于我们人类,对吧?这就是人工神经网络(或简称神经网络)发挥作用的地方。这些是一组分层排列的节点,通过权重(不过是数字矩阵)连接,就像我们大脑中的神经元连接一样。同样,我不会进入架构的技术细节,它们的学习算法和背后的数学,但这是深度学习模仿大脑学习过程的方式。

让我们再举一个例子,假设你要识别一幅图像中的人脸,它可以位于图像中的任何位置。你会怎么做?一个显而易见的方法是在整个人脸上定义一组关键点,这些关键点一起可以表征人脸。一般来说,这些是 128 或 68 套。这些点相互连接形成一个图像掩模。但是如果脸部的朝向从正面变成侧面呢??帮助这些点识别面部的面部几何形状发生变化,因此,关键点方法将检测不到面部。

68 key points of human face, Image taken from www.pyimagesearch.com

深度学习也让这成为可能!我们使用的关键点是基于人类对面部特征(如鼻子、耳朵、眼睛)的感知。因此,为了检测一张脸,我们试图让计算机在一张图像中找到这些特征。但是你猜怎么着,这些手动选择的特性对计算机来说并不那么明显。深度学习让计算机遍历大量的人脸(包含各种扭曲和方向),并让计算机决定哪些特征图似乎与计算机的人脸检测相关。毕竟电脑要识别的是脸,不是你!这给出了令人惊讶的好结果。你可以通过我的一个项目 这里 我用 ConvNets(一种深度学习架构)来识别面部表情。

拥有大量人脸数据集来识别人脸可能会给你带来问题。但是像暹罗网这样的一次性学习方法也解决了这个问题。这是一种基于称为对比三重损失的特殊损失函数的方法,并在 FaceNet 论文中进行了介绍。这个我就不在这里讨论了。如果你想了解它,你可以在这里 查阅论文

Siamese Network for Gender Detection, Image taken from www.semanticscholar.org

关于深度学习的另一个神话是,深度学习是一个黑盒。架构背后没有工程和数学方面的特征。因此,它只是简单地复制数据,而没有真正为问题提供可靠的长期解决方案。
不,不像!它以类似于传统机器学习方法的方式涉及数学和概率,无论是简单的线性回归还是支持向量机。深度学习使用与线性回归相同的梯度下降方程来寻找优化的参数值。成本函数、假设、从目标值的误差计算(损失)都以与传统算法(基于等式)相似的方式完成。深网中的激活函数不过是数学函数。一旦你理解了深度学习的每个数学方面,你就可以弄清楚如何为特定任务建立模型,以及需要做什么样的改变。只是深度学习中涉及的数学证明并不复杂。但是如果你得到了正确的概念,它就不再是一个黑匣子了!事实上,这适用于世界上所有的算法。

据我所知,我已经完成了它背后的所有数学。从简单的感知器开始,神经元的标准 Wx+b 方程和反向传播到现代架构,如 CNN、LSTM、编码器-解码器、Sequence2Sequence 等。

这个博客的目的是在机器学习和人工智能领域为深度学习创造更多的接受度。这也是我没有讲深度学习架构、代码、张量流的原因。基于人工智能开展业务的公司需要支持深度学习以及传统的机器学习方法。在我即将发布的博客中,我将谈论我做的一些很酷的项目,可能是生成聊天机器人,也可能是神经机器翻译。如果你也对人工智能感兴趣,请在博客上告诉我你的看法!

A/B 测试艺术

原文:https://towardsdatascience.com/the-art-of-a-b-testing-5a10c9bb70a4?source=collection_archive---------2-----------------------

走过统计意义的美丽数学

A/B 测试,又名。分割测试,指的是一种实验技术,根据选定的标准来确定新的设计是否带来改进。

在网络分析中,想法是用一个新的网站(B)挑战一个现有的网站(A ),通过随机分割流量并比较每个分割的指标。

Exchanging on interface layouts

为了举例,让我们看看美容公司丝芙兰东南亚(丝芙兰海,我工作的地方),特别是它的电子商务平台。

使用案例

让我们假设 Sephora SEA 正在考虑为其黄金会员重新安排登陆页面。

Landing pages pane arrangement: version A (current) and version B (alternative to be tested)

对公司至关重要的指标是:

  • 每次会话花费在登录页面上的平均时间
  • 转换率,定义为以交易结束的会话比例

A/B 测试可用于挑战当前的安排。

请注意,如果您担心版本 b 造成的损失,您可以选择流量分割,而不是 50-50,并将更多流量分配给版本 A。

然而,请记住,非常偏斜的分割通常会导致 A/B 测试变得*(统计)* 显著之前需要更长的时间。

A/B 测试作为唯一的最终测试

在网站上开发新功能的问题是,你很难事先知道这些功能会如何发挥作用:它们可能会损害你的业务或让你的利润飙升。

用户体验(UX)设计师的知识对于挑选可能有效的功能建议至关重要。它通常会遵循 UX 的最佳做法或在其他类似情况下被证明是成功的设计范例。

然而,没有任何先验假设可以打败真正的现场测试,即 A/B 测试。

A/B 测试使用真实的客户端实时测量性能。如果执行得很好,在对人口 A 和 B 进行抽样时没有偏见,它会给你最好的估计,如果你部署版本 B 会发生什么。

需要统计形式主义

在做了一些预先的市场研究后,Sephora SEA 决定对 B 版进行现场测试,流量分配如下:

让我们假设在 7 天的 A/B 测试之后,实验的跟踪指标是

仅从这些结果来看,就产生了一些问题:

  • 因为 B 版展现出更高的 CR,是否意味着 B 版带来了提升?同样,我们能得出对平均花费时间的影响吗?
  • 如果是,有多大的把握?
  • B 版更高的 CR/更高的平均花费时间是偶然发生的吗?

在下结论之前,你需要记住的是

我们得到的原始结果只是更大群体的样本。它们的统计特性随着它们所属人群的不同而不同。

因此,有必要对这些输出进行统计建模。在假设检验中引入统计显著性的概念也是如此。

假设检验入门

关于假设检验的深入解释,我推荐威廉·科尔森的这篇伟大的文章

[## 解释统计显著性

用数据证明一件事是什么意思?

towardsdatascience.com](/statistical-significance-hypothesis-testing-the-normal-curve-and-p-values-93274fa32687)

对于那些想快速复习统计学的人来说,你可能想看看这篇来自 Cassie Kozyrkov 的文章。

[## 为赶时间的人统计

曾经希望有人能告诉你统计学的意义是什么,术语用简单的英语表达是什么意思吗?让…

towardsdatascience.com](/statistics-for-people-in-a-hurry-a9613c0ed0b)

在这里,我将介绍假设检验的主要内容:一个工具,用于根据样本比较两个群体的分布。

可以比较的是它们分布的参数(例如花费时间的平均值)或分布本身(例如转化率的二元分布)。

这个过程开始于陈述一个关于人口的无效假设 H₀ 。总的来说就是相等假设 : 例如“两个种群均值相同”。

备择假设 H₁ 否定零假设:例如“第二总体的均值高于第一总体”。

测试可以总结为两个步骤:

  • **1。**模型 H₀ 为单个实值随机变量上的分布(称为检验统计量
  • **2。**评估这些样本,或者更极端的样本,在 H₀.下产生的可能性有多大 这个概率就是著名的 p 值。越低,我们越有信心拒绝 H₀.

在上述帖子中,williamkoersshen测试大学的平均睡眠时间是否低于全国平均水平,从而将估计值与理论值进行比较。他用一个 T2 Z 测试来达到这个目的。

在这里,我建议将该框架扩展到 Sephora SEA 案例中的 A/B 测试。

特别是,我将展示:

  • 如何将 Z 测试应用于测试经历 B 的客户端是否平均花费更多时间
  • 如何使用卡方检验决定 B 版本是否导致更高的转化率
  • 如何调整 Z 检验以测试 B 版本的转换率,以及它是否得出与卡方检验相同的结论

Let’s get testing!

1 | Z-平均花费时间测试

要测试的假设是:

  • H₀ :“两个版本平均花费的时间相同”
  • h₁:“b 版平均花费时间较高”

第一步是塑造 H₀

Z 检验使用中心极限定理(CLT)这样做。

Illustration of the CLT (from Wikipedia)

CLT 确定:
给定期望的随机变量xμ和有限方差 σ {x₁,…,xn}∼x*、*n独立同分布(iid) rv,如下近似值

在我们的上下文中,我们将花费在每个客户端会话 i 上的时间建模为实现:

  • t49】aᵢ的RVaᵢ∨a、如果客户端会话属于版本 a 分裂
  • bᵢ的RV 的 Bᵢ的∨b、 别的

我们用 CLT 提供的近似值推导出

因此,rv 的近似值的差异(维基百科:总和的正态分布 rv ),

H₀、 我们有平等的真正手段和因此的模式

****

Curves about N(0,1): centrered and reduced Gaussian distribution, probability density function (pdf) and associated p-values

第二步是看我们的样品在 H₀下的可能性有多大

AB 的真实期望值和方差未知。我们介绍它们各自的经验估计量:

我们的样本生成了以下测试统计量 Z ,需要针对简化的中心正态分布进行测试:

从概念上讲, Z 代表观察到的均值差远离 0 的标准差的个数。这个数字越高, H₀ 的可能性越小。

还要注意,在这种情况下估计的期望值实际上是不同的,(samples)↗, Z ↗.

Z 的公式中,还可以得到要证明的差越小,需要的样本越多的直觉。

在 Python 中,计算如下

p-value calculation and graphical representation

像我们观察到的这样极端的结果很有可能发生在 H₀.时代 有了 5%的常用标准 α ,我们就可以放心地拒绝p value<α【h₀。**

在样本量不大(<每版 30 个),CLT 近似不成立的情况下,可以看看 学生的 t 检验

2 |转化率的χ检验

要检验的假设有:

  • H₀ :“两个版本的转换率相同”
  • h₁:“b 版转化率更高”

与前一种情况不同,每个客户端会话的结果不是连续的,而是二进制的:“未转换”或“已转换”。

观察到的结果总结如下

χ检验比较了多项结果的分布,但是在这个例子中我们将保持二元的情况。

和以前一样,我们将分两步解决这个问题:

第一步是模拟 H₀

H₀中,版本 a 和版本 b 中的 转换遵循相同的二项分布 B(1,p) 。我们汇总了版本 A 和版本 B 中的观测值,并导出了 CR 的估计量

并得到\hat{p} = 0.0170

由此可见, 下的 H₀, 下的理论结果表是

让我们看看 rv D,定义为

D 表示理论分布和观测分布之间的平方相对距离。

根据皮尔逊定理,在 下 H₀D 遵循 1 自由度(df)的χ概率定律。

Curves about the χ² law (df=1)

第二步是看我们的样品在 H₀下的可能性有多大

它包括计算观察到的 D 并根据χ定律导出其相应的 p 值。

这是如何在 Python 中实现的:

p-value calculation and graphical representation

在 H₀.的情况下,一个结果有可能至少和我们的观察一样远离理论分布 用一个常见的常用词α5%的准则,我们有*p value>α【h₀*不能拒绝。

3 |转换率的 Z 测试

通过将转换率建模为以{0,1}为单位实现的 rv,Z 测试可适用于转换率:

  • 1 表示转换
  • 0 其他

我们保留与之前相同的符号,并将每个客户端会话 i 的模型转换作为实现:

  • ∈{ 0,1 }RVaᵢ【a】,** 如果客户端会话属于版本 a 拆分****
  • bᵢ ∈ {0,1 }RVbᵢ【b】,** 其他****

第一步是模拟 H₀

在 H₀的 下,μ(A) = μ(B) 和我们有

相应的测试统计

这一次,使用二元 rvs,可以证明标准差的估计值是期望值的函数:

第二步是看我们的样品在 H₀下的可能性有多大

为此,我们计算 Z 得分和相应的右尾 p 值:

p-value calculation and graphical representation

使用这种建模,p 值输出略低于χ检验。用同样的 α =0.05 的准则,我们早就拒绝了零假设(!!!).

这种差异可以用 Z-检验的一个轻微弱点来解释,它在这里不承认 rv 的二元性质:【μ(B)】-μ(A)***实际上在 ***[-1,1】中有界,因此观察结果被归因于较低的 p 值。

总是质疑你的测试

永远不要做假设。在决定新特性的相关性时,A/B 测试确实是减少人为偏见的好方法。然而,不要忘记 A/B 测试仍然依赖于一个真实的模型:正如我们已经看到的,有不同的可能模型。

在大样本的情况下,他们倾向于得出相似的结论。特别是,CLT 近似比小样本情况下更好。

在后一种情况下,人们可以探索学生的 t 检验韦尔奇的 t 检验费希尔的精确检验。你也可以探索强化学习的领域,以便在测试时获得最大收益(多臂强盗和开发与探索的两难境地)。

你不仅要严格解释结果,还要意识到 A/B 测试的背景效应:

  • 一年/一月/一周的时间、天气、经济环境都会影响你的听众的性质
  • 即使在两天的 A/B 测试后,你的结果是显著的,也可能不会超过一周

主要带回家的信息

  • 假设检验是对一个零假设 H₀ 进行建模,并评估它的可能性,给定你从 A/B 检验中得到的样本
  • 关键是在 H₀ 模型中我们已经看到,它可以从 CLT (Z 检验)或皮尔逊定理(χ检验)中推导出来

我们的统计之旅到此结束:我希望你能像我写这篇文章一样享受这次旅程!非常感谢您的评论、建议和更正。

演职员表:
照片由
raw pixel路易·里德
**

清理数据的艺术

原文:https://towardsdatascience.com/the-art-of-cleaning-your-data-b713dbd49726?source=collection_archive---------2-----------------------

像奥巴马放弃麦克风一样放弃那些糟糕的数据

想获得灵感?快来加入我的 超级行情快讯 。😎

清理数据应该是数据科学(DS)或机器学习(ML)工作流程的第一步。没有干净的数据,你将很难看到探索中真正重要的部分。一旦你最终开始训练你的 ML 模型,它们将不必要地变得更具挑战性。最主要的一点是,如果你想充分利用你的数据,它应该是干净的。

在数据科学和机器学习的背景下,数据清理意味着过滤和修改数据,以便更容易探索、理解和建模。过滤掉你不想要或不需要的部分,这样你就不需要查看或处理它们。修改确实需要的部件,但这些部件不是您需要的格式,因此您可以正确地使用它们。

在这里,我们将看看一些我们通常想要在我们的数据中清理的东西,以及可以用来做这件事的 pandas 代码!

缺失数据

大型数据集很少完全填满。我所说的完整是指所有的数据点都有其所有特征变量的值。通常会有一些缺失的值,当在 pandas 中加载类似于pd.read_csv()的东西时,这些值会被标记为 NaN 或 None。这类数据丢失有许多实际原因。收集数据的人可能只是忘记了,或者他们直到数据收集过程进行到一半才开始收集该特征变量。

在处理数据集之前,绝对需要处理缺失数据。例如,假设您正处于数据探索过程中,您发现了来自某个特征变量(比如“变量 F”)的数据的一些关键信息。但是后来你发现数据集中“变量 F”的 95%的值都是 NaNs 你不可能从一个仅仅代表数据集 5%的变量中得出任何关于数据集的具体结论!当你开始训练你的 ML 模型时,NaNs 也可能被你的程序当作 0 或无穷大,完全打乱了你的训练!

有几种方法可以处理熊猫丢失的数据:

  • 检查 nan:pd.isnull(object)检测数据中缺失的值;这将检测“NaN”和“None”
  • 删除缺失数据: df.dropna(axis=0, how='any')返回包含 nan 的数据点已被删除的数据框。
  • 替换缺失数据: df.replace(to_replace=None, value=None)用“值”替换“to_replace”中给定的值。如果你知道你希望这个特征变量是什么值,这是很有用的。
  • 删除一个特征: df.drop('feature_variable_name', axis=1)如果您发现某个特征变量在数据集中有> 90%的 NaN 值,那么从您的数据中删除整个东西是有意义的。

Drop those bad features like an Obama mic drop

极端值

数据集中的异常值是一个大杂烩。一方面,它们可能包含关键信息,因为它们与主要群体有很大不同。另一方面,它们让我们看不到主要群体,因为我们必须看得很远才能看到离群值!在最大似然方面,包含离群值的训练可能会让你的模型更好地泛化,但也会把它从你的大部分数据所在的主要组中分离出来。

一般来说,通常建议两面看。探索有无异常值的数据。如果您决定您的 ML 模型需要它们,那么选择一个足够健壮的方法来处理它们。如果您发现这些异常值确实存在,并且对获取大图信息和数据建模没有用处,那么最好就像上一节所示的那样丢弃它们。

此外,如果您想要过滤掉那些异常值,您可以使用以下方法:

# Get the 98th and 2nd percentile as the limits of our outliers
upper_limit = np.percentile(train_df.logerror.values, 98) 
lower_limit = np.percentile(train_df.logerror.values, 2) # Filter the outliers from the dataframe
data[‘target’].loc[train_df[‘target’]>upper_limit] = upper_limit data[‘target’].loc[train_df[‘target’]<lower_limit] = lower_limit

A plot with outliers included (left) and a histogram with outliers removed (right)

错误数据和重复数据

坏数据是指任何不应该存在的数据点或值,或者完全错误的数据点或值。例如,假设您的一个特征变量称为“性别”,其中大部分值为“男性”或“女性”。但是当你浏览数据集时,你会注意到有几个数据点的性别值为 67.3!显然,67.3 在这个变量的上下文中没有任何意义。此外,如果您尝试将“性别”特征变量转换为分类浮点数:男性= 0.0,女性= 1.0,您将得到一个额外的数字:67.3 = 2.0!

重复只是数据集中完全重复的数据点。如果有太多这样的问题,就会影响你的 ML 模型的训练。就像我们之前看到的那样,可以简单地从数据中删除重复项。

可以通过丢弃或使用一些智能替换来处理坏数据。例如,我们可能会查看性别值为 67.3 的数据点,并看到所有这些数据点的正确值都应该是“女性”。因此,我们可以简单地将所有 67.3 的值转换为“女性”。这样做的好处是,我们有效地为 ML 训练获得了这些数据点,而不是把它们扔掉。你可以在熊猫身上做这样的转换:

value_map = {'male': 'male', 'female': 'female', '67.3': 'female'}pd_dataframe['gender'].map(value_map)

Watch out for that duplicate Loki data

无关的特征

并非所有功能都是相同的。有些东西你可能根本不需要!例如,您可能正在查看过去一年从 Amazon 购买的图书数据集,其中一个特征变量称为“font-type ”,表示书中使用的字体类型。这与预测一本书的销量完全无关!您可以像这样安全地删除所有这些特性:

df.drop('feature_variable_name', axis=1)

这样做可以让你的数据探索变得更容易,因为你不需要浏览太多的东西。这也有助于训练你的 ML 模型更容易和更快,因为你不需要处理太多的数据。如果您不确定变量是否重要,那么您可以等到开始研究数据集时再做决定。计算特征变量和目标输出之间的相关矩阵有助于确定变量的重要性。

When your feature variable is useless …

标准化

每个特征变量中的所有数据都应该采用相同的标准化格式。它将使数据探索和建模的技术方面变得更加容易。例如,让我们再次以值为“男性”或“女性”的“性别”变量为例。如果数据是由一个人收集的,您可能会得到许多您没有预料到的不同值:

  • 男,女(这个不错)
  • 男性,女性(输入时大写锁定)
  • 男性,女性(有些人会大写)
  • Make,Femall(错别字!)

如果我们继续将特征变量转换成分类浮点数,我们将得到比我们想要的 0 和 1 更多的值!我们实际上会得到这样的结果:

{
    'male': 0,
    'female': 1,
    'MALE': 2,
    'FEMALE': 3,
    'Male': 4,
    'Female': 5,
    'Make': 6,
    'Femall': 7
}

有几种方法可以处理这种情况。如果事情很简单,比如全部小写或首字母大写,就像这样做:

# Make the whole string lower case
s.lower()# Make the first letter capitalised
s.capitalize()

如果有错别字,您需要使用我们之前看到的映射功能:

value_map = {'Make': 'male', 'Femall': 'female'}pd_dataframe['gender'].map(value_map)

喜欢学习?

twitter 上关注我,我会在那里发布所有最新最棒的人工智能、技术和科学!

数据工程的艺术

原文:https://towardsdatascience.com/the-art-of-data-engineering-1a6e0ba7f303?source=collection_archive---------24-----------------------

在您的数据科学项目开始之前,您需要一个数据集。即使你有了一个初始数据集,你也可能需要更多的数据来改进你的模型。建立这些数据集会带来许多问题。

你如何收集新数据?你应该收集哪些数据?如何改进现有的数据集?如何组织这些数据输入到统计模型中?

“数据工程师”可能不像“数据科学家”那样有魅力,但是,从长远来看,这些数据收集、存储、预处理和组织的基本过程对于一个成功的项目是必不可少的。

收集数据

在互联网上可以找到很多很棒的数据集,比如 kaggle.com、谷歌数据集搜索和 UCI 知识库。然而,当你为自己的个人项目建立机器学习模型时,这些数据可能不会削减它。因此,你将需要学习一些数据收集技巧,如网页抓取。

由于语义网的兴起,网络抓取对于收集数据非常有用。很多时候,您可以根据正在解析的 HTML 元素周围的语义标签来标记数据。

如果您不能依靠收集的性质来标记数据,则另一种数据收集策略是使用您构建的模型来帮助收集数据。首先,你训练一个模型,然后你收集大量的新数据,让模型为你分离出来。不幸的是,这确实需要一些手动工作来可视化模型所犯的错误。这些错误可能对您的新模型来说是最有价值的数据,因为它在对这些实例进行分类时犯了错误。

一旦你收集了数据,你将需要找出在哪里存储它。这可以在数据库中完成,无论是关系数据库(SQL)还是非关系数据库(MongoDB)。知道如何从数据库中查询这些数据并将其格式化用于培训是一项非常重要的技能。另一个数据存储选项是使用云存储,我个人使用过 AWS S3 存储桶,到目前为止没有任何抱怨。然而,如果您使用 google collab 的 GPU 运行时来训练您的模型,您可能会发现将数据存储在 google drive 上会更方便。

改善数据集

我最近写了很多关于数据增强的重要性。数据扩充包括对我们的数据集进行转换,使我们能够添加合成数据,并利用少量的初始数据进行学习。

数据扩充对图像来说非常直观,但对文本来说就不那么直观了。对于图像,我们可以翻转它们、添加噪声、向左、向右、向上、向下平移、旋转等等。对于文本,常用的扩充方法包括使用同义词库来替换单词,或者在可能的情况下打乱某些部分,例如简历中的某些部分。对于这两种应用,使用生成模型,例如生成对抗网络,对于数据增强的应用是非常有前途的。

此外,还有很多方法可以改善数据集。

改善数据集的常见方法包括将属性值归一化到 0 和 1 之间、移除处于临界情况的实例,或者对数据集进行采样以处理类不平衡。

类不平衡的问题不是我在 medium 上经常看到讨论的问题,但是,类分布重采样确实可以提高模型在类分布不平衡的测试集上的性能。

例如,如果您的训练数据集中当前有一个 50:50 的类分布,但您的测试集有一个替代分布,如 75:25 或更严重的偏斜,则使用随机过采样或欠采样对数据集进行重采样以匹配该分布可能会改进您的模型。

格式化数据

Tensorflow 对于接受什么样的数据进行训练可能会很挑剔。开发处理管道是一种被称为管道-过滤器的软件设计模式。这些模型可以帮助您概念化格式化序列和高级架构。

在实现方面,熟悉 NumPy 库,知道如何使用?reshape 方法,知道 floats,uint8s 等数据类型的区别。,并知道如何打电话。检查数据集的形状都是实现管道来格式化统计建模数据的好地方。

结论

发展对数据工程过程的良好理解将为您的数据科学项目节省大量时间。收集更多的数据是提高模型性能的最可靠的方法之一。然而,手动收集数据是非常耗时和恼人的。此外,检查数据集以确保不存在不一致的数据格式、缺失值或其他问题,可以得到更好的模型。格式化数据需要理解模型的基本输入形状,并知道如何使用 NumPy 库将数据处理成这种格式。

CShorten

Connor Shorten 是佛罗里达大西洋大学计算机科学专业的学生。对计算机视觉、深度学习和软件工程感兴趣。

演绎的艺术:以熊猫和蟒蛇为特色

原文:https://towardsdatascience.com/the-art-of-deduction-featuring-pandas-and-python-a61dbb622986?source=collection_archive---------4-----------------------

Photo by Jeremy C on Unsplash

如果你选择 Python 作为你的帮凶,那么几乎每个开始学习机器学习或数据分析或几乎任何其他数据科学相关主题的人都必须学会使用 Pandas。(就我个人而言,我想念 r。还没有失去爱情)

这是对熊猫的一个简短而全面的介绍,也许是你入门所需要的全部。关于熊猫的内容比我们在本文中介绍的要多,但是随着您的数据科学之旅的进行,您一定会了解到它。但是这肯定会让你准备好阅读一些代码,理解“ pd ”符号在某些地方到底在做什么。

我们为什么需要熊猫?

嗯,因为熊猫对中国竹林的生存至关重要(英国广播公司和其他各种来源已经展示了这些濒临灭绝的美丽生物的重要性)。哇!你已经爱上熊猫了!谈到 Python 的 Pandas 库,它已经成为 Python 中数据分析和建模的标准。除非你正在使用 R(还没有失去爱),你将需要依赖熊猫的一切-数据。

Pandas 具有以下优势,这使得它成为 Python 数据分析的事实标准:

  • 数据帧
  • 易于读写多种表格格式(CSV、Excel 甚至 SQL)的数据
  • 处理缺失数据
  • 轻松重塑数据
  • 切片和混叠操作简单
  • 这个库是用 C 语言编写的,这提高了它的性能。。。还有更多!

熊猫怎么装?

关于安装说明,请参考官方 Pandas 文档。我保证这真的很容易设置,可能只需要一行代码就可以执行。

导入 pandas 库的标准符号是:

import pandas as pd

导入数据

有几种类型的数据文件格式可以作为 Pandas DataFrame 载入。加载不同类型的数据有特定的格式,一般格式如下:

my_data = pd.read_csv(‘ __link to data file here with .csv extension__ ‘)

大多数情况下,我们会处理 CSV( 逗号分隔值)类型的文件,所以这种符号应该足够了。CSV 文件比 XLS 更受青睐,因为 Excel 文件有一些格式问题,有时会变得混乱。我们不想处理那种情况,对吗?好像是 2018 年!
Pandas 支持许多其他文件加载服务,这些服务可以在官方文档中找到(链接)。

我们在本文中使用了术语 DataFrame。实际上熊猫给我们提供了两种东西:

数据帧:

一个表格格式(可以可视化为 SQL 表或者 Excel 表)
构造一个数据帧的符号是:

my_frame = pd.DataFrame({‘col_1’:[val_1,val_2,val_3], ‘col_2’:[val_4,val_5,val_6]}, index=[‘index_1’, ‘index_2’, ‘index_3’])

上面的代码将创建一个 3*2 大小的数据帧,称为 my_frame 。你可以把数据帧看作 Python 字典,它的键是列名,值是列中的值列表。
data frame 中的附加参数为我们的数据分配一个特定的索引。然而,现在可以忽略这一点,因为我们对从 1 开始的一般自动索引完全没有问题。

系列:

一个值数组。就像 Python 中的列表一样。

my_list = pd.Series([val_1, val_2, val_3], index=[index_1, index_2, index_3], name=’Column_name’) 

中提琴!这个很简单! 一个系列被可视化为一个数据帧的一列。因此它具有所需的属性。同样,我们可以跳过索引部分,但我们应该记住名称部分。(如果要将此列添加到数据框架中,您需要为新列命名)

您加载的数据帧的形状可以使用以下代码行来描述:

print(my_dataframe.shape)

这将打印出类似于:(1000,10)
的内容,这意味着您的 DataFrame 有 1000 行数据和 10 列。整洁!

您还可以使用" head() "函数打印出数据帧的前 5 行(只是为了大致了解数据类型或者列包含的值类型)。

my_dataframe.head()

另一方面,您也可以将修改后的数据帧存储成各种格式。

my_dataframe.to_csv(“ __name of file with .csv extension__ “)

你的文件会和数据框中的所有数据一起保存到你的工作目录中。

希望到现在为止一切都清楚了。这些是我们在执行分析时要做的基本事情——加载和读取数据,查看我们在处理什么。继续前进。

选择、切片和各种其他数据格式化操作:

DataFrame 上的大多数 select 操作与我们在本地 python 对象(如列表和字典)上执行的操作非常相似。
使用点符号可以通过以下方式访问整个列:

my_data.column_1
#or
my_data[‘column_1’]

此外,如果我们需要所选列中的特定数据行,我们可以以类似的方式使用索引来选择该特定行:

my_data[‘column_1’][5]
#Remember that DataFrames follow the zero indexing format

我们还可以使用 iloc 操作符来完全基于索引对数据集进行切片,也就是说,我们将使用列名的索引来选择该行的列和行的索引。

my_data.iloc[:,0]
#This would select all the rows from the column index 0(1st column). #Just “:” represents “everything”.#Or to select the first 3 rows: 
my_data.iloc[:3,0]

需要注意的是,当我们使用“0:4”格式时,左边的数字代表切片开始的索引,右边的数字代表切片发生的索引,即右边的索引不会被选择。这种符号也适用于 Python 中的切片操作。没什么好担心的!

我们还可以通过一个列表来选择特定的列,而不是以有序的方式进行切片:

 my_data.iloc[[0,5,6,8],0]

最好探索你所有的选择。越来越多地调整函数来测试它的能力和用途。

现在,我们必须记住的最重要的选择特性是条件选择。在许多情况下,条件选择可以节省一天的时间和大量的时间。它的作用很像 SQL 中的“WHERE”子句。
在这些情况下,iloc 的兄弟“ loc ”出现了。就像 iloc 支持基于整数的索引一样, loc 可以基于标签或传递给它的布尔数组来访问数据

my_data.column_1 == some_numeric_value#This would return a Series of boolean data based on wether the condition was evaluated as true or not. We can then pass this Series to the loc function to conditionally pick all the rows who’s index evaluated to be TRUE for the conditionmy_data.loc[my_data.column_1 == some_numeric_value]

请仔细阅读 loc 操作符的官方 Pandas 文档以获得更全面的理解:
(不要担心 iloc,因为您读到的几乎就是它)

你也可以在 Pandas 中浏览与索引和选择数据相关的官方文档。

Pandas 中有一些非常有用的函数可以用来汇总数据:

my_data.head()
#Prints out the first five rows of your DataFramemy_data.column_name.describe()
#Prints out some important statistical values like count, mean, max etc of a specific column. In case the column containts String values, it will print the count, freq and top etcmy_data.column_name.mean()
#You get itmy_data.column_name.unique()
#If the column contains String values, this function will print out all the unique values present in that column

这些是数据帧上一些最常用的汇总函数。还有更多这些不像这些那样经常使用。有关汇总功能的更多信息,请参考文档。

处理缺失数据

通常我们的数据帧中会有缺失的数据。这些是没有描述数据的字段。这可能会给我们的模型评估或分析带来问题。在我们继续其他阶段之前,将所有 NaN 值解析为某个实际值是很重要的。
NaN 代表“非数字”,NaN 的 dtype 设置为 float64
我们有一个优秀的操作符,用于轻松选择这些数据字段,名为“ isnull ”,反之,“ notnull ”。这些函数将自动选择指定列中包含任何 NaN 值的所有行,因此我们可以共同为它们分配一些值。

my_dataframe[my_dataframe.column_name.isnull()]

我们有一个熊猫提供的优秀函数来解决上述问题: fillna 。我们可以在数据帧或选定的数据帧上调用 fillna,为指定列中的所有 NaN 值赋值。

my_data.column_name.fillna(value_to_be_passed)

这些是文档的一些重要部分,您应该仔细阅读以理解一些更深入的关键概念。压缩它没有意义,因为最好通过适当的详细示例来理解这些内容:

除此之外,理解方法链的概念也很重要。我不能强调方法链接在数据分析阶段的重要性。
Joost H. van der Linden 制作了一个优秀的资源库,它基于方法链概念,带有一个 iPython 笔记本,你可以运行、编辑和修改。所以一定要在 Github 上查看。

你可以在 Kaggle 上找到的泰坦尼克号生存问题的数据集是一个很好的练习数据集。您可以找到许多人在各种来源上开发的优秀方法,或者您可以查看其他用户提交的其他内核。几乎所有人最初都会遵循必要的数据汇总和清理步骤。

我尝试用 R 来解决这个问题,所以我现在不能发布我自己的解决方案。但是万一你想试试 R,这将是一个好机会。分析的所有阶段通常都是相同的,但在使用 R 时,您可以期待一个更加干净和专注的环境。如果您需要 R 中的问题的教程,我想推荐 David Langer 的 Youtube 频道 。我真的很喜欢他引导观众通过所有必要的步骤和代码背后的工作的流程。

就这样,我们结束了对可爱熊猫的温柔介绍。
用熊猫,爱熊猫,救熊猫!

多维数据的有效可视化艺术

原文:https://towardsdatascience.com/the-art-of-effective-visualization-of-multi-dimensional-data-6c7202990c57?source=collection_archive---------0-----------------------

有效数据可视化的策略

Image via Pixy

介绍

描述性分析 是与数据科学项目甚至特定研究相关的任何分析生命周期的核心组件之一。数据聚合、汇总和可视化是支持这一数据分析领域的一些主要支柱。从传统的 商业智能 时代到现在的 时代,人工智能数据可视化 一直是一种强大的工具,并因其在提取正确信息、清晰轻松地理解和解释结果方面的有效性而被组织广泛采用。然而,处理通常具有两个以上属性的多维数据集开始产生问题,因为我们的数据分析和通信媒介通常局限于二维。在本文中,我们将探讨一些有效的多维数据可视化策略(从 一维 到*)。*

动机

一张图片胜过千言万语

这是一个非常流行的英语习语,我们都很熟悉,应该为我们理解和利用数据可视化作为我们分析中的有效工具提供足够的灵感和动力。永远记住“有效的数据可视化既是一门艺术,也是一门科学”。在开始之前,我还想提一下下面这段话,这段话非常贴切,强调了数据可视化的必要性。

一张照片最大的价值是当它迫使我们注意到我们从没想到会看到的东西

约翰·图基

可视化的快速复习

我假设普通读者知道用于绘制和可视化数据的基本图形和图表,因此我不会进行详细的解释,但我们将在这里的动手实验中涵盖其中的大部分。正如著名的可视化先驱和统计学家爱德华·塔夫特所提到的,数据可视化应该在数据之上利用“清晰、精确和高效”来交流模式和见解。**

结构化数据通常由行表示的数据观察和列表示的特征或数据属性组成。每个列也可以作为数据集的一个特定维度来调用。最常见的数据类型包括连续的数值数据和离散的分类数据。因此,任何数据可视化基本上都是以易于理解的方式描述一个或多个数据属性,如散点图、直方图、箱线图等。我将涵盖(一维)和 多变量 (多维)数据可视化策略。我们将在这里使用 Python 机器学习生态系统,我们建议您查看用于数据分析和可视化的框架,包括[pandas](https://pandas.pydata.org/)[matplotlib](https://matplotlib.org/)[seaborn](https://seaborn.pydata.org/)[plotly](https://plot.ly/)[bokeh](https://bokeh.pydata.org/en/latest/)。除此之外,如果你对用数据制作美丽而有意义的可视化感兴趣,了解[D3.js](https://d3js.org/)也是必须的。有兴趣的读者推荐阅读爱德华·塔夫特的《量化信息的可视化展示》。

空谈是廉价的,让我看看可视化(和代码)!

让我们开始工作吧,不要让我在理论和概念上喋喋不休。我们将使用可从 UCI 机器学习库获得的 葡萄酒质量数据集 。该数据实际上由两个数据集组成,描述了葡萄牙“Vinho Verde”葡萄酒的红色和白色变种的各种属性。本文中的所有分析都可以在我的 GitHub 资源库 中找到,作为一个 Jupyter 笔记本供那些渴望亲自尝试的人使用!

我们将从加载以下分析所需的依赖项开始。

****import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib as mpl
import numpy as np
import seaborn as sns****%matplotlib inline****

我们将主要使用**matplotlib****seaborn** 作为我们的可视化框架,但是您可以自由地使用您选择的任何其他框架进行测试。我们先来看看经过一些基本的数据预处理步骤后的数据。

我们通过合并红葡萄酒和白葡萄酒样本的数据集来创建一个单一的葡萄酒数据框架。我们还基于葡萄酒样本的**quality**属性创建了一个新的分类变量**quality_label** 。现在让我们来看一下数据。

****wines.head()****

The wine quality dataset

很明显,我们有几个葡萄酒样品的数字和分类属性。每个观察值属于一个红葡萄酒或白葡萄酒样品,属性是从物理化学测试中测量和获得的特定属性或特性。如果你想了解每个属性的详细解释,你可以查看 Jupyter 笔记本。让我们对其中一些感兴趣的属性做一个快速的基本描述性汇总统计。

Basic descriptive statistics by wine type

对不同类型的葡萄酒样本进行对比和比较这些统计数据是非常容易的。请注意一些属性的明显差异。我们将在以后的一些可视化中强调这些。

单变量分析

单变量分析基本上是最简单的数据分析或可视化形式,我们只关心分析一个数据属性或变量,并将其可视化(一维)。

一维可视化数据(1-D)

可视化所有数字数据及其分布的最快和最有效的方法之一是使用pandas来利用 直方图

Visualizing attributes as one-dimensional data

上面的图很好地说明了任何属性的基本数据分布。

让我们深入到 可视化一个连续的数字属性。 本质上是一个 直方图密度图 在理解该属性的数据分布方面非常有效。

Visualizing one-dimensional continuous, numeric data

从上面的图中可以明显看出,葡萄酒sulphates的分布存在明显的右偏。

可视化一个离散的、分类的数据属性 略有不同,而 条形图 也是最有效的方法之一。你也可以使用饼状图,但是一般来说要尽量避免使用它们,尤其是当不同类别的数量超过三个的时候。

Visualizing one-dimensional discrete, categorical data

现在让我们继续看更高维度的数据。

多变量分析

多元分析是乐趣和复杂性的开始。这里我们分析多个数据维度或属性(2 个或更多)。多变量分析不仅包括检查分布,还包括这些属性之间的潜在关系、模式和相关性。如果需要,您还可以根据手头要解决的问题,利用推断统计和假设检验来检查不同属性、组等的统计显著性。

以二维方式可视化数据(2-D)

检查不同数据属性之间的潜在关系或相关性的最佳方式之一是利用 成对相关矩阵 并将其描绘为 热图

Visualizing two-dimensional data with a correlation heatmap

热图中的梯度根据相关性的强度而变化,您可以清楚地看到,很容易发现潜在属性之间具有很强的相关性。另一种方法是在感兴趣的属性之间使用 成对散点图

Visualizing two-dimensional data with pair-wise scatter plots

根据上面的图,您可以看到散点图也是观察数据属性的二维潜在关系或模式的一种不错的方式。

关于成对散点图需要注意的重要一点是,这些图实际上是对称的。任何一对属性***(X, Y)***的散点图看起来与***(Y, X)***中的相同属性不同,只是因为垂直和水平刻度不同。它不包含任何新信息。

将多个属性的多元数据可视化的另一种方式是使用 平行坐标

Parallel coordinates to visualize multi-dimensional data

基本上,在如上所述的可视化中,点被表示为连接的线段。每条垂直线代表一个数据属性。跨越所有属性的一组完整的连接线段代表一个数据点。因此,倾向于聚集的点看起来会靠得更近。通过观察,我们可以清楚地看到,与白葡萄酒相比,**density** 更适合红葡萄酒。同样,白葡萄酒**residual sugar****total sulfur dioxide**红葡萄酒高,而红葡萄酒**fixed acidity****white wines**高。查看我们之前导出的统计表中的统计数据来验证这个假设!

让我们来看一些我们可以 可视化两个连续的数字属性 的方法。特别是 散点图联合图 不仅是检查模式、关系的好方法,也是查看属性的个体分布的好方法。

Visualizing two-dimensional continuous, numeric data using scatter plots and joint plots

上图左侧为 散点图 ,右侧为 联合图 。正如我们提到的,您可以在联合图中检查相关性、关系以及个体分布。

如何看待 可视化两个离散的、分类的属性? 一种方法是利用单独的情节(支线情节)或 来获得一个分类维度。

Visualizing two-dimensional discrete, categorical data using bar plots and subplots (facets)

虽然这是可视化分类数据的好方法,但正如您所见,利用**matplotlib** 已经导致编写了大量代码。另一个好方法是使用 堆叠条多个条 用于单个图中的不同属性。我们可以轻松地利用**seaborn** 实现同样的目的。

Visualizing two-dimensional discrete, categorical data in a single bar chart

这肯定看起来更干净,你也可以有效地比较不同的类别很容易从这个单一的阴谋。

让我们看看 在二维中可视化混合属性 (本质上是数字和分类在一起)。一种方法是使用 刻面\支线剧情 连同通用 直方图密度剧情

Visualizing mixed attributes in two-dimensions leveraging facets and histograms\density plots

虽然这很好,但我们又一次有了很多样板代码,我们可以通过利用**seaborn** 来避免这些代码,甚至可以在一个图表中描绘这些图。

Leveraging multiple histograms for mixed attributes in two-dimensions

你可以看到上面生成的图清晰简洁,我们可以很容易地比较不同的分布。除此之外, 箱形图 是根据分类属性中的不同值有效描绘数字数据组的另一种方式。 箱形图 是了解数据中四分位值以及潜在异常值的好方法。

Box Plots as an effective representation of two-dimensional mixed attributes

另一个类似的可视化是violin plots,这是使用核密度图(描绘不同值的数据的概率密度)可视化分组数字数据的另一种有效方式。

Violin Plots as an effective representation of two-dimensional mixed attributes

你可以清楚地看到上面不同酒类qualitysulphate的密度图。

将数据可视化为二维非常简单,但是随着维度(属性)数量的增加,数据开始变得复杂。原因是因为我们被二维的展示媒介和环境所束缚。

对于三维数据,我们可以通过在图表中取一个 z 轴或者利用支线图和分面来引入一个虚假的深度概念。

然而,对于高于三维的数据,可视化变得更加困难。超越三维的最好方法是使用小平面、颜色、形状、大小、深度等等。您也可以使用时间作为维度,为其他属性制作一个随时间变化的动画图(考虑到时间是数据中的一个维度)。看看汉斯·罗斯林的精彩演讲就知道了!

三维可视化数据(3-D)

考虑到数据中的三个属性或维度,我们可以通过考虑一个 成对散点图 并引入 颜色色调 的概念来分离出分类维度中的值,从而将它们可视化。

Visualizing three-dimensional data with scatter plots and hue (color)

上面的图使你能够检查相关性和模式,也可以围绕葡萄酒组进行比较。就像我们可以清楚地看到白葡萄酒**total sulfur dioxide****residual sugar**红葡萄酒高。**

让我们看看 可视化三个连续的数字属性 的策略。一种方式是将两个维度表示为常规的(x-轴)和 宽度(y-轴),并且还将 深度(z-轴)的概念用于第三维。****

Visualizing three-dimensional numeric data by introducing the notion of depth

我们还可以利用常规的二维轴,并引入尺寸的概念作为第三维(本质上是一个 气泡图 ),其中点的尺寸表示第三维的数量。**

Visualizing three-dimensional numeric data by introducing the notion of size

因此,你可以看到上面的图表并不是一个传统的散点图,而是一个气泡图,根据**residual sugar**的数量有不同的点大小(气泡)。当然,你并不总是能在数据中找到明确的模式,就像在这种情况下,我们在其他两个维度上看到不同的大小。

对于 可视化三个离散的分类属性, 虽然我们可以使用传统的,但是我们可以利用以及 支线剧情 的概念来支持额外的第三维。**seaborn** 框架帮助我们将代码保持在最少,并有效地进行规划。****

Visualizing three-dimensional categorical data by introducing the notion of hue and facets

上面的图表清楚地显示了与每个维度相关的频率,您可以看到这在理解相关见解时是多么容易和有效。

考虑到三个混合属性的可视化,我们可以使用 色调 的概念来将我们的组在一个分类属性中分离,同时使用常规的可视化,如 散点图 来可视化数值属性的二维。**

Visualizing mixed attributes in three-dimensions leveraging scatter plots and the concept of hue

因此,色调充当了类别或组的良好分隔符,尽管如上所述不存在或非常弱的相关性,但我们仍然可以从这些图中了解到,与相比,红葡萄酒**sulphates** 略高。除了散点图,还可以使用 内核密度图 来理解三维数据。**

Visualizing mixed attributes in three-dimensions leveraging kernel density plots and the concept of hue

白葡萄酒相比,红葡萄酒样品具有更高的**sulphate** 水平,这是很明显的,也是意料之中的。您还可以看到基于色调强度的密度浓度。**

如果我们正在处理三维中的 多个分类属性 ,我们可以使用 色相中的一个常规轴 来可视化数据,并使用类似于 盒图小提琴图的可视化

Visualizing mixed attributes in three-dimensions leveraging split violin plots and the concept of hue

在上图中,我们可以看到,在右边的三维可视化图中,我们在 x 轴上表示了葡萄酒**quality** ,在**wine_type** 上表示了色调。我们可以清楚地看到一些有趣的现象,比如与白葡萄酒相比,红葡萄酒的更高。**

您还可以考虑使用 盒图 以类似的方式表示具有多个分类变量的混合属性。

Visualizing mixed attributes in three-dimensions leveraging box plots and the concept of hue

我们可以看到,无论是对于**quality** 还是**quality_label** 属性,葡萄酒的**alcohol** 含量随着质量的提高而增加。此外,基于的质量等级,与白葡萄酒相比,红葡萄酒往往具有略高的中值**alcohol** 含量。然而,如果我们检查的质量等级,我们可以看到,对于等级较低的葡萄酒(3&4)白葡萄酒中值**alcohol** 含量大于红葡萄酒样品。除此之外,与白葡萄酒相比,红葡萄酒的平均含量似乎略高。**********

以四维方式可视化数据(4-D)

根据我们之前的讨论,我们利用图表的各种组件来可视化多个维度。一种在四维空间中可视化数据的方法是使用 深度作为常规绘图中的特定数据维度,如 散点图**

Visualizing data in four-dimensions leveraging scatter plots and the concept of hue and depth

**wine_type** 属性由色调表示,这在上面的图中非常明显。此外,虽然由于情节的复杂性,解释这些可视化变得越来越困难,但你仍然可以收集到一些见解,如**fixed acidity**对于红酒更高,而**residual sugar**对于白酒更高。当然,如果**alcohol****fixed acidity**之间存在某种关联,我们可能会看到一个逐渐增加或减少的数据点平面,显示出某种趋势。

另一种策略是保持二维绘图,但使用和数据点 大小 作为数据维度。通常这将是一个 气泡图 ,类似于我们之前看到的。**

Visualizing data in four-dimensions leveraging bubble charts and the concept of hue and size

我们用来表示**wine_type** ,用数据点 大小 来表示**residual sugar**。我们确实从之前的图表中观察到了类似的模式,白葡萄酒的气泡尺寸更大,通常表明白葡萄酒**residual sugar**值比红葡萄酒值更高。****

如果我们有两个以上的分类属性要表示,我们可以重用我们的概念,利用 【色调】刻面 来描述这些属性,以及像 散点图 这样的规则图来表示数字属性。让我们看几个例子。

Visualizing data in four-dimensions leveraging scatter plots and the concept of hue and facets

我们可以很容易地发现多种模式,这一事实验证了这种可视化的有效性。白葡萄酒**volatile acidity**水平较低,同样高品质葡萄酒的酸度水平也较低。同样根据白葡萄酒样本,高品质葡萄酒**alcohol** 含量较高,低品质葡萄酒**alcohol**含量最低!

让我们举一个类似的例子,用其他一些属性来构建一个四维的可视化。

Visualizing data in four-dimensions leveraging scatter plots and the concept of hue and facets

我们清楚地看到,优质葡萄酒**total sulfur dioxide**含量较低,如果你对葡萄酒成分有必要的了解,这一点是很重要的。我们还看到红酒**total sulfur dioxide**水平低于白酒。然而,在几个数据点上,红酒的**volatile acidity**水平更高。

在五维空间中可视化数据(5-D)

再次遵循与上一节相似的策略,在五维空间中可视化数据,我们利用各种绘图组件。让我们用色相大小 来表示除了 正轴 以外的三个数据维度来表示另外两个维度。既然我们使用了尺寸的概念,我们将基本上绘制一个三维的 气泡图**

Visualizing data in five-dimensions leveraging bubble charts and the concept of hue, depth and size

这个图表描述了我们在上一节中谈到的相同的模式和见解。然而,我们也可以看到,根据由**total sulfur dioxide**表示的点数大小,白葡萄酒红葡萄酒具有更高的**total sulfur dioxide**等级。

除了 深度 ,我们还可以使用 刻面 以及 色调 来表示这五个数据维度中的多个分类属性。代表 大小 的属性之一可以是数值(连续)甚至是分类(但是我们可能需要用数字来表示数据点大小)。虽然由于缺乏分类属性,我们没有在这里进行描述,但是您可以在自己的数据集上尝试一下。**

Visualizing data in five-dimensions leveraging bubble charts and the concept of hue, facets and size

这基本上是另一种方法,可以将我们之前绘制的五维图可视化。虽然在查看我们之前绘制的图时, 深度 的额外尺寸可能会使许多人困惑,但是由于 小平面 的优势,该图仍然有效地保留在二维平面上,因此通常更有效且更易于解释。

我们已经可以看到,处理如此多的数据维度变得越来越复杂!如果你们有些人在想,为什么不增加更多的维度呢?让我们试一试吧!

可视化六维数据(6-D)

既然我们玩得开心(我希望!),让我们在可视化中添加另一个数据维度。我们将利用色相大小形状* 除了我们的 规则的两个轴 来刻画所有的六个数据维度。*******

Visualizing data in six-dimensions leveraging scatter charts and the concept of hue, depth, shape and size

哇,在一个情节中有六个维度!我们有由 形状(平方像素)(X 标记)和(圆圈)品质的葡萄酒。其中**wine_type**表示色相, **fixed acidity**深度 和数据点 大小 表示**total sulfur dioxide**内容。****

解释这一点似乎有点费力,但是在试图理解正在发生的事情时,请一次考虑几个组件。

  1. 考虑到 形状 & y 轴 ,我们有品质的葡萄酒,与品质的葡萄酒相比具有更高的**alcohol** 水平。
  2. 考虑到 色相大小 ,我们对于白葡萄酒**total sulfur dioxide**含量要高于红葡萄酒。******
  3. 考虑到 深度色调 ,我们有白葡萄酒红葡萄酒**fixed acidity**水平低。
  4. 考虑到 色调x 轴 ,我们有红葡萄酒白葡萄酒**residual sugar**水平低。
  5. 考虑到形状* ,白葡萄酒似乎比红葡萄酒拥有更多品质的葡萄酒(可能是因为白葡萄酒的样本量更大)。*******

我们还可以通过移除 深度 组件并使用 来代替分类属性来构建 6-D 可视化。

Visualizing data in six-dimensions leveraging scatter charts and the concept of hue, facets and size

因此,在这个场景中,我们利用 来表示三个分类属性,利用 两个常规轴大小 来表示我们的 6-D 数据可视化的三个数值属性。**

结论

数据可视化是一门艺术,也是一门科学。如果你正在读这篇文章,我真的很赞赏你通读这篇内容广泛的文章的努力。其目的不是为了记忆任何东西,也不是为了给可视化数据提供一套固定的规则。这里的主要目标是理解和学习一些有效的数据可视化策略,尤其是当维度数量开始增加时。我鼓励你在将来利用这些片段来可视化你自己的数据集。请在评论中留下您的反馈,并分享您自己的有效数据可视化策略“尤其是如果您能走得更高的话!”**

本文使用的所有代码和数据集都可以从我的 GitHub 中访问

该代码也可作为 Jupyter 笔记本

学习数据科学的艺术

原文:https://towardsdatascience.com/the-art-of-learning-data-science-65b9f703f932?source=collection_archive---------5-----------------------

初学者如何进入学习的舒适区

这些天来,我确信 90%的 LinkedIn 流量都包含这些术语中的一个:DS、ML 或 DL——数据科学、机器学习或深度学习的缩写。不过要小心这句陈词滥调:“所有统计数据的 80%都是现场制作的”。如果你对这些首字母缩略词视而不见,也许你需要谷歌一下,然后继续阅读这篇文章的其余部分。这篇文章有两个目标。首先,它试图让所有数据科学学习者放松。其次,如果您刚刚开始学习数据科学,这可能会为您提供下一步的指导。

这是我在网上看到的一张图片:

Data Science Subway Map

相当势不可挡,不是吗!!!!

从何说起!如何开始?:

我在 2017 年 10 月初开始了数据科学的旅程。前 15 天,我只是试图以一种让我信服的方式回答一个问题,“什么是数据科学”。在浏览了互联网上的各种资源,Quora,Medium,跳板博客和电子书,Udacity 博客,Forbes,datascience.comKDNuggetsdatasciencecentralanalyticsvidhya 和随机网络抓取之后,用一勺勺盐(盐不够,别怪我没警告你)吸收所有信息,我得出的结论是,数据科学(通俗地说)是是的,就是这么简单。不,不是吗?是的,它是。嗯,有两大类数据科学工作,这里我说的是商业数据科学。另一个的最终产品不是故事,而是数据驱动的产品。让我们不要进入那个,因为那样我们会偏离主题进入机器学习工程。典型的谷歌,脸书等有数据驱动的角色,这属于第二类。许多学术研究也属于第二类。

回到第一种,我来做个稍微高级一点的定义。数据科学是在历史数据的帮助下得出业务问题答案的过程,首先对其进行清理和分析,然后将其拟合到一个(或多个)机器学习模型中,并经常预测和建议措施以防止未来可能出现的问题。啊。那很酷,不是吗?一旦我对第一个问题有了信心,我就思考学习它的最好方法是什么。

“学习它的最好方法”?!:

我又花了几天时间查找这个短语,瞧,我找到了数不清的建议。这一次没有其他选择,只能尝试其中的一些。我拥有电子和通信工程学士和硕士学位,以及十年的 C/C++、Octave/Matlab、Verilog/SystemVerilog、Perl 等语言编程经验。数学是我从小最喜欢的科目,概率是我最喜欢的科目。对我来说,编程和概率方面的经验无疑是一个优势。

我有点害怕“机器学习”这个术语,我是那种喜欢直面恐惧的人,所以最终报名参加了安德鲁教授的 coursera 课程。这是我第一次服用,我很高兴它对我很有效。我真的害怕蟒蛇和这门语言,但幸运的是安德鲁的课程练习在 Octave 中。我试着从 Coursera,Udacity,Edx 和 Datacamp 学习 Python 基础,选择了 Coursera 和 Datacamp。我知道作为数据科学的初学者,R 可能是更好的起点。然而,在那个时间点上,我对只走数据科学这条路不是太有信心。Python 更通用。同时在几个平台上学习了几门课程。尝试在 Udacity 上介绍机器学习、统计学、cs 基础知识、数据科学等。我不能长时间坚持下去,因为当我的神经元正在吸收一个概念时,我不喜欢被打断。

非数据科学,但科学的课程:

同时,我已经很久没有参加任何课程了。我在加州大学圣地亚哥分校找到了一个很好的关于“学习如何学习”的课程。它帮助我确信我运用的学习技巧足够好。此外,它消除了我对自己是否不够年轻来接受新事物的疑虑,因为最近的研究证明,某些活动,如锻炼、冥想或在大自然中散步(反正我是这样做的),会在大脑中产生新的神经元,并形成新的连接。介绍的番茄工作法很有帮助。我还发现,现在是参加印度商学院名为“幸福和充实的生活”的课程的时候了。这门课程的内容让我冷静地追求我对数据科学的热情。它提醒我,学习 It 是为了纯粹的学习乐趣,关注过程,而不是最终产品。虽然这些都是非技术性的,但我发现它们对快速有效的学习非常有帮助。

聚会/项目:

我在 10 月中旬参加了一个聚会,发现它是由一家当地的 DS 咨询公司组织的,该公司也提供培训。他们的模型没有给我留下太深的印象。他们用你自己的钱训练你,如果你做得好,就招你为雇员。meetup 得出的结论是:“MOOCs 不会给你带来工作、真正的项目、Kaggle 竞赛,拥有自己的博客会。知名机构的硕士学位很重要,但同一机构的 MOOC 证书没有任何价值。”

以下是我对此的看法:“你选择哪条道路来学习并不重要。重要的是,你可以做一个真实世界的 DS 项目”。如果你有办法在面试中证明这一点,为什么找不到工作?你也不需要在训练营上花费数千美元,或者获得 MOOC 证书。要成为一名数据科学家,你需要具备一系列的素质/才能/技能:对高中数学-概率-统计的基础有很好的理解,有强烈的好奇心、求知欲、学习新事物的倾向、熟悉编程、记录和展示的能力,最重要的是,你必须知道你拥有这些。【如果你有自我怀疑,你需要先把它们消除掉。]学习剩下的(比如 ML)就跟着来了。公司,尤其是像我这样的小城镇的公司,非常需要一名数据科学家,他们正在寻找雇用一名优秀数据科学家的方法。不过请记住,你必须做几个真正的 DS 项目,并通过报告/演示或 github repo 向未来的雇主展示它们。如果你不确定如何做一个真正的项目,一个方法是向导师寻求帮助——技术方面的行业专家。然后求职过程需要另一篇文章,不在本文讨论范围之内。

所以……

总的来说,填补本质上的空白的最佳途径是什么?没有捷径可走。尝试几个平台,看看什么最适合你。从 MOOCs 开始,然后动手。一定要有条理,记录你的旅程。首先学习一个你不熟悉的话题。例如,如果你已经知道 C++,不要急于学习 Python,而是要知道你最终可以做到。尝试 ML 来看看你是否喜欢它是有意义的,因为这就是数据科学家与数据分析师或数据工程师的区别。如果你不喜欢独自学习其中的任何一门课程,很可能即使参加训练营你也学不会。数据科学是一个需要每天学习的领域:新工具、新概念/算法、新业务/领域,可能是地球上的任何东西,只有步骤,没有终点。

感谢你阅读这篇文章。如果你喜欢,请尽你所能鼓掌鼓励写更多:)

关注我在推特上的更新。

制造智能机器的艺术

原文:https://towardsdatascience.com/the-art-of-making-intelligent-machines-e024e2d170d6?source=collection_archive---------1-----------------------

随着围绕数据和机器学习的所有兴奋,人们很容易忘记在我们所做的事情中发挥了多大作用。对于那些希望进入数据科学等领域的人来说,理解他们的面对于帮助组织创造价值有多重要尤为重要。

这是我们的一个网站,我鼓励你去看看,而不是这里显示的静态截图。动画有助于将一些概念变成现实。不管怎样,这是一个关于我们如何制造智能机器的更有创造性的观点。

点击这里->-T10【制造智能机器的艺术】

Arti Canon:神经文本生成

原文:https://towardsdatascience.com/the-arti-canon-neural-text-generation-2a8f032c2a68?source=collection_archive---------13-----------------------

"我为什么要对条件性存在的幼稚痛苦感到愤怒?"

一台电脑

使用神经网络基于综合数据集生成文本的过程已经实现了许多年。这是机器学习最受欢迎的应用之一,这个过程(神经文本生成)涉及建立一个给定文本的统计模型,并使用该模型输出自己的类似作品。现有的神经文本生成应用已经能够产生有趣的对 Latex 和 C 代码的改编。

诸如此类的例子凸显了这些模型掌握高度结构化、语法密集型领域的能力。这让我们想到了光谱的另一端——结构简单但思想复杂、见解深刻的类型。一个神经网络可以在经典和当代佛教著作上被训练以产生它自己的经典作品吗?

因此,我们的服务器在通往觉醒的道路上开始了它自己的数学进程。

技术概述

这种文本生成方法的核心是时间序列模型;给定 上下文序列 (最后几个步骤),预测序列中下一个令牌的函数。

在我们的例子中,这些记号是单独的字符。因此,该函数是在给定前一个字符序列的情况下,预测下一个字符的概率。

这种预测功能可以用深度学习来近似,使用一种叫做 老师强制 的训练技术,让神经网络学习语言的统计结构。在教师强制中,文本语料库被分解成( x,y )对,其中 x 是一段长度为 t 的字符,而 yt+1 字符。网络输出每个字符的概率,并试图最小化交叉熵损失:

The cross entropy loss measures the similarity between a network’s predictions and the true labels. It comes up often in prediction problems, like NTG and image classification.

有几种方法可以做到这一点(包括一些复杂的 GAN 和基于 RL 的方法),但我们采用了递归的编码器-解码器架构。编码器读取 x 中的每个时间步长作为输入,并在 RNN 单元的隐藏/重现状态下跟踪过去的输入(我们使用 LSTMs【LSTMs 如何工作。在上下文序列中的所有 t 步骤之后,我们最终得到一个向量序列,它意味着将整个句子的内容提取为数字。Arti Canon 实际上向前和向后运行 x ,连接产生的向量,希望包括每个字符前后的信息将帮助它捕捉更多的上下文(一个 双向 层)。

解码器获取上下文序列的矢量表示,并输出下一个字符的预测。在这个模型中,我们使用两个 LSTM 层,然后是一个 softmax 激活的密集层。问题是,解码器需要找出哪些时间步长与其预测实际相关;如果我们想保持拼写和语法,靠近末尾的字符是很重要的,但是开头可能包含了关于句子走向的重要信息。这里有一个很好的(编造的)例子:

An example attention vector. Orange represents more attention. This vector is broadcasted and multiplied by the encoder’s output state, giving the decoder a representation of each step that is proportional to that step’s importance.

解码器显然需要专注于最后一个字母“g”,这让它知道它已经到达单词“拍手”的结尾;它需要一个空格或某种标点符号。但还是有几个选择——它是怎么决定的?关键一直在序列的开始,用“什么”来表示一个问题。这种在不相交的序列片段之间调整焦点的能力被称为 注意力 *。*它在序列建模中被广泛使用,最著名的是在翻译中,它有助于将语言与不同的句子结构和词序惯例对齐。

我们还使用了一些技巧来提高预测的准确性:

  1. 辍学是一种常见的技术,它在训练过程中阻碍网络,希望增加的难度可以帮助提高预测结果。我们在 LSTM 层使用它。
  2. 剥离源文本中的生僻字** 一个文本语料库中可能会有很多晦涩难懂的字符,尤其是从 pdf 中挖掘的时候。网络的工作已经够艰难了——我们没有让它学习晦涩难懂的 pdf 工件之间的区别。同样的原则也适用于大写字母。如果数据集很小,移除大写字母是提高概化的一个好方法。网络没有小写和大写字母之间关系的概念;“g”只是其独热编码输入向量中与“g”不同的索引。将它们留在分割训练示例中,否则将向网络教授相同的概念。
  3. 大量数据。这个项目的大部分开发时间都花在了训练模型的循环中,对结果不满意,然后在再次训练之前添加更多的数据。要了解越来越大的数据集对整体性能的影响,一个有趣的方法是比较项目早期生成的 Arti Canon 版本。我们开始直接模仿佛法,所以第一个模型只训练了大约 400 行经文。很快我们扩展到 7,000 行,这足以给输出一些变化,但语法是断断续续的,难以阅读。最终版本读取超过 20,000 行文本,这些额外的数据让模型学习流畅的句子结构,即使它们并不总是有意义。您可以在资源库的output部分阅读早期模型的完整 pdf 输出。

我们现在真正拥有的是一种基于先前字符预测下一个字符的方法。这有什么用?它形成了文本生成循环的核心,在这里我们可以通过重复调用神经网络将种子增长到无限长。

Generating text using a next-character prediction loop. The input to the prediction function is its last t outputs.

因此,对于一些种子 s ,我们可以使用训练好的模型来计算概率向量中的下一个字符预测。

Example output from the softmax layer, with corresponding encoding indices.

但是,我们如何选择将哪个字符添加到我们将用于下一次计算的种子中呢?天真的方法, 贪婪选择 ,只是取最高值,在本例中是 25%的‘c’。这看起来可能没问题(毕竟,这正是我们训练语言模型所要尝试和做的),但在实践中,这种方法会导致超级保守、无聊的输出,而倾向于训练集中最突出的内容。

接下来你可以尝试从预测分布中随机抽取一个样本;最有可能的角色在大多数情况下会被选中,但不是全部。这可以用 温度 设置来扩展,该设置可以使分布偏向低概率选择,克服一些训练集偏差并增加复杂性和创造性;这是一种平衡——太冒险,而且你在要求拼写错误。

比较好的方案是 波束搜索 。通过考虑前几个选项,我们可以根据最好的句子和短语评分,而不是最佳的单个字符选择。这让我们避免了最高推荐把句子写成废话和重复的死角的错误;通过记住一些备份选项,我们给了备选解决方案卷土重来的机会,并带来了更好的句子。波束宽度参数决定了我们考虑的其他选项的数量(避免了该树的分支因子带来的空间和时间复杂性问题)。

Example beam search. The top 2 options are retained at every prediction layer, giving the generation loop an alternative route when one path ends up stuck on low-probability characters.

关于光束搜索的更全面的描述,见本视频课程。我们的程序增加了一些额外的功能,比如对长度进行标准化和拼写检查的最终分数评估,以及减少重复的技术。使用高波束宽度的逐行波束搜索可以显著改善搜索结果。不幸的是,这也导致运行时间同样大幅增加。

尽管 beam search 尽了最大努力,但像这样的长生成循环仍然存在一些挑战。因为教师强制对每一步都使用地面真实序列和标签,所以模型永远不必从错误中恢复;它预测下一个字符,将其与实际文本进行比较,然后继续下一个示例。但当它不得不开始预测自己的产出时,错误就会越积越多。当他们这样做时,序列偏离了训练分布,我们开始暴露模型对一般语言的贫乏知识;它知道如何预测它被训练的空间,但没有看到拼写和语法错误,或者我们喂给它的经典佛教文本以外的任何内容。您可以通过在生成器中植入一些随机内容(种子以粗体显示)来查看实际情况:

"什么是双向链表的运行时复杂性 a,它对我来说是蒂尔柳,当她你认为,和他谁坐,将生活在苦难的湮灭,当他们回来做他们不需要的,并依赖于错误的命运的善良。

原来 Arti Canon 对做我们的数据结构作业没有兴趣。在回到伪佛教之前,这个随机的话题抛出了几个字符。

还有一个关于诗句和章节重复的问题。Arti Canon 的文本生成循环仅基于当前输入做出决定,而不是之前输入的历史。它有一些常用短语,这很好,但偶尔这些短语会变得足够长,填满整个输入窗口。然后,因为输入状态和它之前写的一样,它会做出和之前一样的预测。虽然温度选择策略引入了足够的随机性,最终将发电机推向一个新的方向,但光束搜索对最佳可能诗句的确定性计算将吐出上次出现常用短语时写的相同内容。因为每一节都是基于前一节播种的,所以输出的其余部分将是重复的。我们通过重新播种每章的第一节来解决这个问题,所以它最长可以重复一页。我们还尝试在 beam search 的角色选择中引入一些随机噪声,但发现这是无效的,因为这些选择只是被假设评分函数丢弃了。处理这个问题的更有效的方法可能是直接向模型的置信度输出向量添加噪声,但是我们决定不这样做,因为生成更短的章节(因此更频繁地重新播种)足够有效,并且不需要额外的超参数。

大部分的代码库处理在一个漂亮的 pdf 中自动组装输出的繁琐过程。

The pipeline from start to finish. A neural network generates a raw text file. Then the rest of the program handles automatic conversion from that text file to a pdf.

艺术佳能

不出所料,发电机大部分时间都在思考生命中的重大问题:

“我有什么特别的?”

“我的身体是一个觉醒的头脑。”

“我的心灵不存在。”

“我不会被任何事情困扰。”

“懂得的人满足。”

它的许多段落都围绕着佛陀的言行:

"佛陀说:我不会觉察到你的圣尊接受事物本来面目的真相."

"当世尊接受了他自己的庇护,佛陀解释了雨季."

“看看空气,为了同情。乔达摩的弟子们总是清醒的,他们的思想日夜都在路上。”

Dhammpada 经常使用隐喻来缩短和简化它的想法。Arti Canon 没有时间进行变化,所以它确定了人类存在的终极隐喻,并一遍又一遍地重复它,只是为了证明这一点:

“我应该像一块木头。”

“国王从病痛中解脱了!那就让我们快乐地生活吧,远离善,因为他们对人的看法就像一块木头。”

"一个高贵的青年应该像一块木头一样."

它也很好地利用了佛教词汇,如“瞿昙”、“婆罗门”、“如来”和“四圣谛”。

“牺牲龙虾。”

我们的网站有最新模型的完整输出,而 github repo 有第二本书以及一些旧版本用于比较。

这一切意味着什么?

当然,事实是 Arti Canon 没有理解它的思想。这是一个数学模型,它学习了我们放在文本文件中的几本书的统计结构。它不可能有洞察力,因为它不知道什么是洞察力;它左右自相矛盾,因为它不知道什么是意见。然而……每隔一段时间,它会写一些有意义的东西——或者至少和它学会阅读的谚语一样有意义。这里有些东西说明了天才和随机之间的细微差别;伟大的想法很容易模仿,但很难想出。

你可能会认为佛教是文本生成的一个组成部分,仅仅是因为许多真实的佛教文本看起来有点荒谬,但事后看来,这并不是最好的选择。像《正法》这样的文本用简短的词语和简单的措辞构建了宗教的本质——它们采用基本的积木,设计出一部杰作。但正如我们已经讨论过的,神经网络没有意义的概念,所以它掌握那些相同的基本构建模块,但诉诸于将它们分散在地板上的书写等价物。你可以通过选择一个更大的单词和更接近我们通常读写方式的句子结构来更好地掩盖这一点。

现实世界中的序列生成

尽管我们喜欢伪智能硅佛教,但神经文本生成有一些实际上很重要的应用。图像字幕使用它为输入图像编写描述。对话模型开始使用它来为每个问题提出真正新的答案。文本生成也只是更广泛的序列生成问题的一个子集——许多潜在的想法被带到了看似不相关的领域:如果你用图像代替字符串和字符,你就有了视频生成。然后把图像换成 MIDI 键盘音符,你就有了音乐生成。

Example of image captioning. These are taken from neuraltalk2 by Andrej Karpathy.

仍然有很多研究正在进行,还有很多问题需要解决。Arti Canon 是一款经过精心挑选的应用,它避开了一些更大的挑战。例如,递归神经网络很难在长时间范围内做出决策;他们无法记录 9 万步前发生的事情。你很少看到“神经故事生成”是有原因的——这种技术在包括长期故事弧和跟踪几页前组成的关键细节方面存在问题。通过复制《正法》的短诗格式,阿蒂佳能只需要记住它现在正在写的段落,它仍然不能做一个非常令人信服的工作。

RNNs can’t really write narratives, but that hasn’t stopped people from trying. “Sunspring” is a 2016 short film written by a similar algorithm.

关于这一点,你可以在:www.articanon.com阅读完整的 Arti 佳能。

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

杰克·格雷斯比和休·琼斯

Arti Canon 是由 Jake Grigsby 和 Zabih Yousuf(GitHub*)*开发的

这个网站是由休·琼斯()ArtiCanon.com*)*开发的

弗吉尼亚大学骑士机器学习

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — —-

注意事项:

  1. github repo 包含一个脚本,它使用实际模型输出非常相似的注意力图。实际上,人们的注意力倾向于完全集中在输入序列的末尾,但是在该窗口向后延伸多远方面存在一些差异。
  2. 使用正则表达式恢复大写。

在数据分析领域取得成功所需的属性

原文:https://towardsdatascience.com/the-attributes-you-need-to-thrive-in-the-data-analysis-world-e02090b4ca4e?source=collection_archive---------8-----------------------

要想成功开始一份数据分析职业,并在其中茁壮成长,你需要具备以下特质:

1 .很多宽容,尤其是在受挫的时候
我发现,很多不愿意谈论成为数据分析师的人的问题是,他们对缓慢的进步没有多少宽容。他们希望今天学到东西,明天就能应用;当他们看到如何应用他们所学的东西时,他们就放弃了。

说到数据分析,尤其是如果你来自非数值化领域,你会有概念化的初始问题。最大的问题是你如何知道这是如何处理数据的?一旦你从指导练习过渡到解决现实世界的问题,这是第一个击中你的现实。

那么你面临的第二个问题是,每个数据分析任务所需的步骤总是不同的。所以你可以读很多书,看很多训练视频,做很多有指导的练习,你不会逃脱第一次无指导任务的束缚,因为你需要做一些你以前从未做过的事情。与其抱怨,不如谷歌一下出路。

还有,你会有情绪问题。有时候,你没有心情进行任何非指导性的数据分析。我们顾问往往比在我们之前已经在该领域工作多年的公司内部员工知道得更多,主要原因是我们没有日复一日地做同样类型的工作。我得到的几乎每一个数据分析项目都需要深刻的新鲜思维,而大多数客户对细节知之甚少(有些人甚至不知道他们应该想要什么,完全依赖你为他们想出来)。

**2。热爱工作你将不得不投入很多时间去学习、练习和思考。如果你不喜欢和数据打交道,你会很快筋疲力尽。你一定不介意在晚上和梦中思考你的数据工作。

**3。起初,乐意免费帮助他人。只有通过实践,在各种情况下,你才能非常擅长数据分析。正是通过帮助他人的数据分析工作,你才能获得宝贵的实践经验。

4。不断学习
进行数据分析的工具、算法、方法没有止境。停止学习新工具和方法的人很快就会发现自己不再相关。即使你看不到任何令人信服的理由来抛弃你的工具去使用新的工具,也要学习它们。当那个新工具突然变得大大改进,成为新的世界标准时,你不希望有太多的知识缺口。我认为这些是任何想在数据分析领域取得成功的人都应该具备的品质。****

最初发表于【www.olafusimichael.com】

我的机器学习交易算法如何超过 SP500 10 年

原文:https://towardsdatascience.com/the-austrian-quant-my-machine-learning-trading-algorithm-outperformed-the-sp500-for-10-years-bf7ee1d6a235?source=collection_archive---------4-----------------------

我使用 python 和 Quantopian 创建了一个机器学习交易算法,以击败股票市场超过 10 年。

Permanent Portfolio Fund on Quantopian : January 1, 2006 until June 2, 2017

Dutch Golden Age. Origins of Tulip Mania, The first investment bubble. 17th Century.
Source: Jan Claesz Rietschoof [Public domain], via Wikimedia Commons

介绍

大致来说,我一般会花大部分时间思考两件事,技术和投资。更具体地说,我经常问自己什么是我可以用软件(或者偶尔用硬件)构建的有用的东西,什么是我应该投资的有用的东西。算法交易是这两个学派的完美结合,我已经花了一些时间来理解这个领域。这是一个有趣的领域,我学到了一些有趣的东西,我决定与大家分享。

你可以阅读 原文 e 上 我的博客

奥地利 Quant

奥地利经济学家是以奥地利经济学院命名的,这个学院启发了我如何构建投资组合。我设计了一个由 3 种不同投资基金组成的交易策略,以更好地理解投资、机器学习和编程,以及它们如何在金融和技术世界中结合在一起。

该策略中使用的 3 种不同的基金包括:永久投资组合基金、投机基金和基础基金。整个投资组合的 70%投资于永久投资组合,投机基金和基本面基金各占 15%的权重。基本面基金仍在建设中,所以我可能会在后面添加一个基金业绩的后续文章。然而,本文的其余部分是基于 85%的永久投资组合基金和 15%的投机基金的投资组合权重。

我也在我的 Github 上分享了这个项目的代码。

永久投资组合基金

永久投资组合是哈里·布朗的一个想法,基于奥地利经济学派,一个坚实的经济框架和一个非常有用的看待生活的方式。永久投资组合不适合寻求跑赢市场的投资者,他们持有大量现金和黄金就是明证;这是给有长期投资眼光的人的,它很好地描述了我的投资风格,因此是我最大的配置。

该基金的灵感来自 quantopian 上的永久投资组合 Quantopian 笔记本和 Rahim Reghezda 等人的奥地利投资者学校的书。艾尔。这是我强烈推荐的另一本书。这个投资组合的部分灵感也来自雷伊·达里奥布里奇沃特的全天候原则,它是一个有用的框架,用来管理我的风险敞口,同时追求高回报。

在该基金中,30%的投资组合投资于股票、债券和黄金,10%投资于现金(或更具体地说,1-3 年期国库券)。奥地利学派投资者手册中的分配建议每个资产类别之间的权重相等,为 25%,但由于我年轻,责任不多,我认为我可以更激进一点,承担更多风险。因此,我降低了现金配置,增加了其他资产配置。

使用 Markowitz 式优化算法重新平衡投资组合,以找到风险(标准差)和回报之间最有效的前沿比率。Markowitz 优化是一个有趣的算法,因为它是基于正态分布的回报,然而股票市场的回报服从幂律和厚尾。因此,人们不得不怀疑诸如马科维兹优化这样的算法实际上有多精确;也许它只是用来作为简化非常复杂的问题的启发。

进行了相当广泛的回溯测试,跟踪了该基金从 2006 年 1 月 1 日到 2017 年 6 月 2 日的表现。

更新:这是 Quantopian 开始 计算风险相关数据 之前的回测。

永久投资组合的目的不是跑赢指数,而是产生长期稳定的回报。考虑到这一点,我对回溯测试的结果非常满意。尽管该基金的表现比 SPY 基准低了约 500 个基点,但它的风险要小得多。更具体地说,它在 2006-2007 年和 2010-2017 年的牛市中实现了增长,同时在 2008/09 年的熊市中避免了亏损。

我在研究算法交易时学到的一个非常有见地的事情是,好的策略往往是非常短暂的。投资者往往非常精明,因此,如果一种资产类别表现良好,随着其他投资者蜂拥而至,这种交易策略很快就会被套利。我不认为永久投资组合会吸引太多的模仿者,因为它即使在牛市中也会采取谨慎的态度;投资者似乎忽视了它提供的重大下行保护。令人惊讶的是,这只基金一直跑赢指数,而且领先优势没有被套利交易抵消。

我现在正在一个真实的交易环境中测试这个,看起来在做出任何结论性的观察之前,必须使用一个更长的测试周期。然而,根据过去的数据,结果似乎很有希望,这是一个让我认真考虑在游戏中使用一些皮肤并用真钱测试的交易策略。

投机基金

如前所述,我有更高的风险承受能力,所以我想我可以把我投资组合的一小部分用于纯粹的投机。赌博严格违反了我的投资原则,然而,我在构建这个投资组合时获得的知识和乐趣是我虚伪的理由。这让我想起了杰克·博格尔(Jack Bogle)在解释为什么投资他儿子的主动投资公司的时候,一边宣扬指数投资的福音;"如果不一致,那么生活也不总是一致的."

投机基金的灵感来自于 Python 编程 quantopian 教程,我强烈推荐给任何学习 Python 的人,哈里森·金利是一位非常好的老师。

投机基金使用相对简单的机器学习支持向量分类算法。该算法使用历史股价数据进行训练,通过查看股票在过去 10 天的价格变化,并学习股票价格在第 11 天是上涨还是下跌。然后,该算法可以根据股价在过去 10 天的上涨情况来预测股价是否会上涨。

使用支持向量机(SVM)分类器而不是 K-最近邻分类器,因为 Quantopian 中所需的计算密集型过程使得速度成为高优先级,并且这可以用支持向量机来最好地实现。下面是代码的摘要,为了节省空间删除了一些行,但是完整的代码可以在这个文件中找到:

for _ in range(context.feature_window):
                        price = price_list[bar - (context.feature_window - xx)] # 10-(10-i) i++, get the trailing 10 day prices
                        pricing_list.append(price)
                        xx += 1 # if tomorrow's price is more than today's price
                    # label the feature set (% change in last 10 days)
                    # a 1 (strong outlook, buy) else -1 (weak outlook, sell)
                    if end_price > begin_price:
                        label = 1
                    else:
                        label = -1 bar += 1
                    X.append(features)
                    y.append(label) clf1 = RandomForestClassifier()
            # ...
            clf4 = LogisticRegression()

            clf1.fit(X, y)
            # ...
            clf4.fit(X, y) p1 = clf1.predict(current_features)[0]
	# ...
            p4 = clf4.predict(current_features)[0] # if all the classifiers agree on the same prediction we will either buy or sell the stock
            # if there is no consensus, we do nothing if Counter([p1, p2, p3, p4]).most_common(1)[0][1] >= 4:
                p = Counter([p1, p2, p3, p4]).most_common(1)[0][0] else:
                p = 0 speculations_allocation = 0.2
            # Based on the voted prediction and the momentum of the moving averages,
            # We will either buy or short the stock (or do nothing). if p == 1 and ma1 > ma2:
                order_target_percent(stock, 0.11 * speculations_allocation)
            elif p == -1 and ma1 < ma2:
                order_target_percent(stock, -0.11 * speculations_allocation)

尽管算法复杂,但结果非常糟糕:

Speculation Fund[/caption]

这让我很失望,因为我使用的所谓的复杂算法甚至不能打败一个简单的动量策略。事实上,当投机基金与动量策略结合时,它减少了超过 5000 个基点(50%)的回报。

势头基金

投机+动量基金

我还预计纯投机基金的波动性和最大提取量会更高,因为我对 Nassim Taleb 的工作非常着迷,我非常担心“黑天鹅”效应会抹去我的投资组合。马克·斯皮兹纳戈尔有一篇关于这个话题的非常好的论文,它帮助我理解了尾部风险事件在金融市场中被低估的影响。

简而言之,通过投机短期价格变化,我获得了约 1-2%的短期收益,但却让自己暴露在可能迅速亏损 50%以上的情况下。查理·芒格称之为在压路机前捡硬币。)然而,做空和对冲我的头寸的能力在 2009 年 3 月被证明非常有用。当市场有最大的损失时,我有最大的收益。尽管我的杠杆率从未超过 4%,但这是另一个需要在真实环境中进行适当测试的策略,因为利率支出和做空溢价可能会对回报产生重大影响。长话短说,我学到了很多,我真的很喜欢在一个实际的交易例子中使用机器学习,但不要在家里尝试。

基础基金[ 在建工程

该基金背后的想法是着眼于公司基本面,看看哪些财务指标最能预测股价的上涨。训练一个机器学习算法来预测什么样的公司基本面特征会提出一个令人信服的购买论点,并投资于这些证券。有趣的是,我在我的命令行上让算法在我的 Python 环境中工作,但我仍然试图让程序在 Quantopian 中工作,以便我可以做一些更严格的回溯测试。

主要的基金

虽然我的初步测试结果很有希望,但我还没有太兴奋,因为在适当的回溯测试环境中缺乏严格的测试,这意味着很难衡量我的投资组合作为真实交易策略的实际表现如何。然而,算法背后的理论和数学似乎是合理的,这是一个好迹象。

把它放在一起

在看到永久投资组合和动量基金与投机基金的糟糕表现相比表现如何之后,将这些基金结合起来似乎有些疯狂。但同样,目的不是最大化回报,而是学习更多关于投资和编程的知识。观察投资组合在其他指标中的表现很有趣。

我决定关注索提诺比率,而不是更传统的夏普比率,因为夏普比率惩罚上涨和下跌波动,而索提诺比率只惩罚下跌波动。然而,这两者之间的实际差别并不清楚,因为夏普比率和索蒂诺比率具有完全相同的平凡性。如果创建了两个列表,一个以降序排列夏普比率,另一个以降序排列索提诺比率(见表);两个列表将具有相同的排序。[/ref]

严格来说,投机和时刻基金有最大的累积回报,所以它似乎是最好的策略。但是,我确定我的目标是长期交易策略,风险相对较小,投机+动量基金违反了这一原则,最大亏损为-48.90%,排序比率为 0.75。

在奥地利量化基金和永久投资组合之间做出选择是一个例子,说明了为什么人们认为投资更像是一门艺术而不是一门科学。虽然永久投资组合比奥地利量化投资组合高出约 13,000 个基点,但奥地利量化投资组合的波动性要小得多,下行保护也更好。由于不对称的收益,我对奥地利量化基金的短期交易并不完全满意;而永久投资组合基金提供了一个简单的,购买,持有和睡眠容易的策略。因此,我倾向于选择永久投资组合基金。虽然我认为我应该等着看这两个基金在真实交易环境中的数据,然后再下结论。

对知识的投资回报最高。

本杰明·富兰克林

结论

在建设这个项目的过程中,我学到了很多东西,也获得了很多乐趣,这是最重要的事情。顺便说一下,我在研究这个项目时学到的另一件有趣的事情是,金融领域有变得过于理论化和方程式驱动的趋势。这在生物或物理等自然科学中没问题,但金融一般是社会科学,对黑天鹅事件和尾部风险的暴露更大。

我提醒每个人都要谨慎,记住不要混淆精确和准确。最后,我以睿智的本杰明·富兰克林来结束我的演讲,他提醒我们,“对知识的投资会带来最大的收益。

你可以阅读 原文 e 上 我的博客

来自《走向数据科学》编辑的提示: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们并不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语

小芭蕾舞演员

原文:https://towardsdatascience.com/the-baby-ballerina-a4760c86312e?source=collection_archive---------13-----------------------

WSO2 推出了一种新的编程语言,叫做“ 芭蕾舞演员 ”。这位芭蕾舞女演员现在正处于 婴儿阶段 。因此,我想在这篇文章中简单介绍一下。这是我在 Medium 的第 9 篇文章。

Ballerina 是一种编译的、类型安全的并发编程语言。是由 WSO2 开发的开源语言。它的并发执行由轻量级并行线程组成,这些线程是非阻塞的,并且具有顺序并发性。它是一种编译的编程语言,编译成平台中性的二进制形式,并由芭蕾舞演员在运行时解释。他们主要使用开源集成中间件。以前这些中间件必须从头开始构建,但是现在我们有这么多可以简单使用的库,而不是从头开始编码。没有融合的语言,这就是芭蕾舞演员诞生的原因。

为了理解集成逻辑如何工作,我们需要序列图,所以他们开发了一种语言,可以将序列图翻译成代码。喜欢的话也可以直接编码。它还为谷歌、脸书、推特等网站预建了连接器。

芭蕾舞演员是云原生编程语言。这意味着它可以与远程端点一起工作,例如无服务器、微服务、Saas 应用、API 和 WebSockets。因为它是为集成而设计的,所以它可以支持断路器、JSON、gRPC、分布式事务、流处理、XML、数据访问。它可以直接与 Docker 和 Kubernetes 一起使用,也可以与 IntelliJ 或 VSCode 集成。

芭蕾舞演员还有一个名为“国际化”的功能,芭蕾舞演员的代码可以用基于语言包的语言程序员编写。芭蕾舞演员增加了集成的可读性,因为它使用了图形的表现方式。在此之前,我们有 XML,这有助于可读性,但随着复杂性,它变得不适合。对于需要多行 XML 的常见集成,几行 Ballerina 就足够了。

它可以在几秒钟内启动,内存占用只有几兆字节,非常适合按需扩展。芭蕾舞演员是一种编程语言,对每个人都有用。它适合做脚本的极客,或者使用图表的架构师,或者完全不懂编程的人,因为它同时具有视觉和文本表示。作曲者是做可视化编程的编辑。它还内置了调试器和测试框架。

Ballerina 有一些表达式,如字段访问、数组访问、匹配表达式和 Elvis 运算符(处理空值的条件运算符)。芭蕾舞演员的交易是原子的,所以你可以对交易安全。芭蕾舞演员有一个称为可观察性的功能,开发人员可以通过检查找到最慢的过程,并提高整体速度。

使用一次芭蕾舞演员,获得美妙的体验。此链接是关于 芭蕾舞演员快速游览 。网址:https://ballerina.io/community-program/

感谢您阅读至此。如果你喜欢这篇文章,请分享、评论并发表👏几次(最多 50 次)。。。也许会对某个人有帮助。

关注我的 推特 和 Medium 如果你将来对这些更深入、更翔实的文章感兴趣的话!

“巴比伦效应”?

原文:https://towardsdatascience.com/the-babylon-effect-3f2347d22474?source=collection_archive---------14-----------------------

“不好意思,我来晚了,下雨了。”

空荡荡的办公室让我想起了加纳人用下雨作为迟到的正当理由。这也让我想到了斯大林主义者收紧劳动纪律的法律,在那里,未经授权的迟到 20 分钟甚至怠工都被视为旷工,这是一种刑事犯罪,可能会受到 6 个月苦役和 25%减薪的惩罚。对迟到和守时两种完全不同的看法,两个完全不同的民族。

在你的工作场所,你是否经历过来自不同文化的人对情况的反应不同?你可能会说,我们都是人,都有普遍的人类行为待遇,或者专业文化在所有文化中都很普遍,因此,“一刀切”的管理风格适合每个人,你可以像对待你的同胞一样对待他们。但在我看来,来自不同文化的人会因为不同的教养而对世界有不同的看法,作为团队领导/经理,不能假装文化差异不存在。

什么是文化和文化多样性?

根据荷兰社会心理学家海尔特·霍夫斯泰德的说法,文化是“将一个群体或一类人群的成员与另一个群体或一类人群区分开来的集体思维模式”我在这里谈论的是国家层面的文化/民族文化,即一套不同的信仰、价值观、符号、规范、传统、习俗、语言、宗教等。把一个国家统称为加纳人、俄罗斯人等。

与你何干?

尽管世界并不像人们描绘的那样是平的,但国际移民的增加是显而易见的。根据国际移民组织在其 2018 年世界移民报告中的数据,2015 年,全球估计有 2.44 亿国际移民(占世界人口的 3.3%),比 2000 年的 1.55 亿人有所增加。由于许多公司在不止一个国家运营,你很有可能是这 2 亿多人中的一员,或者是和从他的祖国移居到你的国家的人一起工作。

研究人员对多样性的影响提出了相反的证据。如果多样性实施得好,它可以提供经验来源、创新思维、提高团队生产力等等。然而,当种族/文化背景的差异太大时,可能会破坏人们之间的交流,从而降低生产率。

“巴比伦效应”或通过语言多样性衡量文化多样性

不同的文化多样性研究侧重于文化的一个组成部分,如民族、种族、宗教、文化等。一个广为流传的假设是,说相同或高度相关语言的群体也应该有相似的文化价值观。James D.Fearon 构建了一个文化细分指数,使用语言之间的结构距离作为一个国家群体之间文化距离的代理,从而对该领域的知识体系做出了原创性贡献。该指数从 1(表示人口讲两种或两种以上不相关的语言)到 0(表示全体人口讲同一种语言)不等(参见 https://eponkratova.github.io/cultural_diversity/T2 的互动文档)。

在洲一级,世界上最多样化的国家在非洲,其次是大洋洲。

喀麦隆、乍得和苏丹在语言多样性指数上排名最高,因为它们拥有众多的部落群体,而乌拉圭、多米尼加民众和阿根廷则被列为世界上最不多元化的国家。我没有在这个名单上的任何一个国家工作过,所以我想知道高度的文化多样性是否真的危及它的积极影响。

技术方面:

由于我来自一个非技术背景的人,我总是有这些问题:我可以在哪里存储我用于分析的底层文件?“我如何分享我的分析结果,并允许非技术用户与数据互动?”该项目的目标有两个:(1)使用 Bokeh 构建一个交互式可视化,(2)试验不同的共享选项,即上传到 Git 页面的独立 HTML 文档,本地运行的 Bokeh 应用程序,以及部署在 Anaconda Cloud 上的 Jupyter 笔记本。

完整代码请参考 GitHub 的回购;对于交互式 HTML 文档,请参考 GitHub 页面

为什么选择散景? Bokeh 是一个 Python 交互式可视化库,面向现代 web 浏览器进行演示。它的目标是以 D3.js 的风格提供新颖图形的优雅、简洁的构造,并通过在非常大的或流数据集上的高性能交互来扩展这种能力。散景可以帮助任何人快速轻松地创建交互式绘图、仪表盘和数据应用程序。通过生成一个 HTML 文档和构建一个散景应用,有两种方法可以生成可视化效果(来源:【https://bokeh.pydata.org/】T2)。*我喜欢散景的什么?*它允许通过简单的命令快速构建复杂的图形。

*为什么选择 GitHub 页面?GitHub Pages 是一个静态站点托管服务,旨在直接从 GitHub 存储库中托管您的个人、组织或项目页面。GitHub Pages 并不旨在或被允许作为一种免费的虚拟主机服务来运行您的在线业务、电子商务网站或任何其他主要旨在促进商业交易或提供商业软件即服务的网站(SaaS)(来源:https://pages.github.com/)。*我喜欢 GitHub 页面的什么?方便、易于部署且免费。

为什么是蟒蛇云? Anaconda Cloud 是 Anaconda 提供的一个包管理服务。云使得寻找、访问、存储和共享公共笔记本、环境以及 conda 和 PyPI 包变得容易(来源:https://docs.anaconda.com/anaconda-cloud/)。我喜欢蟒蛇云的什么?Anaconda cloud 可以显示一个 jupyter 笔记本,其交互式散景代码运行良好。

**注意:**每个国家的语言数据集并不是包罗万象的,而是互联网上最全面的列表之一。“文化索引”列中的“0”实际上被 Earon 在原始数据集中指示为 0。“讲某种语言的人数”列中的“NaN”/“NaN”表示没有讲某种语言的人数信息。最后,这篇文章是作为我的散景项目的一部分准备的,不应该被视为一个适当的研究项目。

平衡:准确性与可解释性

原文:https://towardsdatascience.com/the-balance-accuracy-vs-interpretability-1b3861408062?source=collection_archive---------12-----------------------

有多少次你努力实现一个高性能的算法,其可解释性和回归模型一样高?几乎每次我向商业客户交付项目时,我都会经历这种挣扎。每个人都想知道为什么一个顾客比另一个顾客更受重视,或者为什么一个病人比另一个病人更容易被诊断出疾病?随着越来越多的公司开始使用数据科学技术来推动增长,以及首席管理人员越来越依赖于这些技术的使用,理解准确性和可解释性之间的权衡对于分析的成功变得更加重要。

那么准确性和可解释性之间的权衡是什么呢?许多深度学习技术在预测方面做得最好,但解释起来非常困难和复杂。对于商业用户来说,这些独立变量之间的复杂交互很难理解,并且可能不总是有商业意义。

作为数据科学顾问,如果我们的业务客户不太理解我们的算法方法,我们应该树立信心。此外,拥有可解释的模型将证明数据科学技术的价值主张。业务用户将开始欣赏使用这些技术来解决实际业务用例的价值。

此外,现在所有的热门词汇:人工智能,神经网络,机器学习等。被广泛使用,客户在项目开始时会问一些问题,比如*“我们会实现神经网络算法吗?”*因此,解释准确性和可解释性之间的冲突,以及解释为什么某种模型最适合特定情况变得更加重要。

下面是我通常用来向业务用户解释特定算法的选择,以及算法的选择如何与我们试图解决的用例以及我们想要实现的业务目标相关联。

有很多其他算法可以适用于这个范围,但这些算法与我通常处理的用例最相关。此外,就 y 轴而言,算法可能上下波动,但这是典型的趋势。

话虽如此,我们可以使用许多技术在更复杂的模型中加入可解释性。在我的下一篇博客中,我将解释我们最近用来解释 XG-Boost 模型的技术之一。

这些内容最初发表在我的个人博客网站:http://datascienceninja.com/。点击此处查看并订阅即时接收最新博客更新。

面向列的数据之美

原文:https://towardsdatascience.com/the-beauty-of-column-oriented-data-2945c0c9f560?source=collection_archive---------2-----------------------

当我们考虑数据集时,我们自然会想到基于行的形式,其中行是一个条目,列是条目的某个属性。

好吧,我又变得太抽象了,抱歉。我们举个例子。看看 JSON 中聊天历史的简单表示:

[
  {
    "message": "Hi Bob. How are you?",
    "timestamp": 1508423069,
    "senderId": 238476,
    "seen": true
  },{
    "message": "This is Alex.",
    "timestamp": 1508423226,
    "senderId": 238476,
    "seen": true
  },{
    "message": "Hi Alex. I am fine. How are you?",
    "timestamp": 1508423238,
    "senderId": 9837498,
    "seen": false
  }
]

我们看到两个参与者之间的三条消息。消息对象是一行,消息的属性可以看作是列。这种表现方式对我们来说是很自然的,这是数据产生的方式,也是我们存储数据的方式。

现在让我们尝试一些东西,让我们旋转表示:

{
  "messages": ["Hi Bob. How are you?", "This is Alex.", "Hi Alex. I am fine. How are you?"],
  "timestamps": [1508423069, 1508423226, 1508423238],
  "senderId": [238476, 238476, 9837498],
  "seen": [true, true, false]
}

在这个 JSON 中,我们有一个面向列的表示。我们的 JSON 不再是对象的数组,它变成了数组的对象。这意味着,如果我们需要得到第二条消息,我们做类似于o["messages"][2]而不是o[2]["message"]的事情。

这样,我们就不需要重复属性名,从而使大小减少了大约 30%。可悲的是,当谈到 JSON 时,这是关于它的好处🙃。但是让我们以不同的形式来检查相同的数据。让我们看看 CSV 文件形式的相同聊天记录。

Hi Bob. How are you?,1508423069,238476,true
This is Alex.,1508423226,238476,true
Hi Alex. I am fine. How are you?,1508423238,9837498,false

和...相对

Hi Bob. How are you?,This is Alex.,Hi Alex. I am fine. How are you?
1508423069,1508423226,1508423238
238476,238476,9837498
true,true,false

在 CSV 中,当我们旋转表示时,尺寸没有增加。字符的数量保持不变,但我们获得了另一个有趣的好处。假设我们想要查找包含字符串“Alex”的每封邮件。面向列的 CSV 中的简单消息字符串搜索可能如下所示:

var index = 0
var result: Set<Int> = []for (c1, pos1) in fileContent.enumerated {
  var found = true for (c2, pos2) in searchPattern.enumerated {
    if fileContent[pos1+pos2] != c2 { found = false; break }
  }
  if found {
    result.append(index)
  } else {
    if c1 == "," {
      index += 1
    } else if c1 == "\n" {
      break
    }
  }
}

这个伪 Swift 代码应该可视化,在面向列的 CSV 的情况下,线性搜索被限制在第一个文本行,我们不必考虑其他行,因为我们知道消息文本被一起放在第一行。因此,搜索的最差性能是第一行的长度乘以搜索模式的长度。相反,如果数据是基于行的,最差的性能是整个文件内容的长度乘以搜索模式的长度。我们可以实现不那么简单的算法,但是它会更复杂,并且仍然具有更差的最坏情况性能,因为你不能扫描所有的字符。

现在让我们考虑二进制表示。在二进制中,我们可以从面向列的数据中获益更多。重复相同类型的数据使对齐变得简单。等等你说的对齐是什么意思?

维基百科上有一篇文章“数据结构对齐”你可以读一下,跳过下一段。或者如果你对我的解释更感兴趣,我会这样解释:

CPU 以 8、16、32、64 或 128 位的“块”访问内存,这取决于 CPU 的类型。假设我们有一个以 64 位= 8 字节“块”读取的 CPU。要求 CPU 转到地址 7 并读取 1 个字节是可以的,因为 CPU 实际上会从地址 0 到 8 读取数据,并给你第 7 个字节。然而,如果你要求 CPU 从地址 7 开始读取 2 个字节,你就做错了。最好的情况是您得到一个分段故障,它可以通过从地址 0 到 7,然后从地址 8 到 15 加载数据来处理。最坏的情况,它变成了一个总线错误,或者未处理的分段错误,导致你的应用程序崩溃。这就是数据应该对齐的原因。在我们的例子中,如果我们有一个以 8 字节“块”读取的 CPU,我们需要存储 2 字节,我们可以存储它的地址应该是n % 8 <= 6

如果你认为内存对齐是一个非常深奥的话题,那你就错了。看看下面两个结构:

struct S1 {
 let a: Bool
 let b: Int64
 let c: Bool
 let d: Int64
 let e: Bool
}struct S2 {
 let b: Int64
 let d: Int64
 let a: Bool
 let c: Bool
 let e: Bool
}

struct S1的一个实例将被存储在 40 个字节中,但是S2只需要 24 个字节,即使它们存储相同的信息。结构S1需要在属性ab之间填充 7 个字节,因为我们不能从地址 1 开始读取 8 个字节。这同样适用于属性cd,为了以防万一,我们必须在属性e后放置 7 位填充符——因为我们不知道在S1后将存储什么类型的数据。在S2的情况下,我们只需要在属性e后填充 5 个字节。

我说你有点错了,因为大部分人都不在乎这样的内存浪费。他们与 【内存廉价】 争论。我将让您自己决定,在您的用例中,您可以允许多少内存浪费。然而,当我们谈论数据存储和加载时,我认为我们有责任将不必要的内存浪费降到最低。

让我们再次以聊天历史为例,将其作为二进制结构来研究。

Hi Bob. How are you?\0|1508423069|238476|true

假设我们想将消息保存为 UTF8 字符数组,用0作为字符串终止标志。时间戳将是一个 8 字节的单位。发送者 id 也是一个 8 字节的 uint,seen 标志是一个 1 字节的 bool 值。如果我们保持顺序不变,我们将不得不在消息中添加填充,因为时间戳是 8 个字节。因此应该从地址n % 8 == 0开始。因此,为了减少内存浪费,我们将存储如下条目

1508423069|238476|true|Hi Bob. How are you?\0

这很好,但是当我们存储许多条目时会发生什么呢

1508423069|238476|true|Hi Bob. How are you?\0
1508423226|238476|true|This is Alex.\0
1508423238|9837498|false|Hi Alex. I am fine. How are you?\0

现在我们仍然需要在文本的末尾添加填充,因为下一个条目需要从地址n % 8 == 0开始。因此,在最坏的情况下,我们将有 7 乘以条目数作为内存浪费。

让我们来看看面向列的表示:

1508423069|1508423226|1508423238
238476|238476|9837498
true|true|false
Hi Bob. How are you?\0|This is Alex.\0|Hi Alex. I am fine. How are you?\0

有了这样的表示,我们仍然应该在消息的末尾添加填充符——以防万一。通过这种方式,丢失了多达 7 个字节(不是每个条目,总共),但我们也可以将 3 个 bool 值作为一个位数组存储在仅 1 个字节中,并在每个 bool 条目上获得 2 个字节或实际上是floor(n — (n / 8))个字节。

你可能想知道为什么我们在连接字符串时不需要关心内存对齐。我假设我们存储的是 UTF8 编码的字符串,这意味着一个文本基本上是一个 1 字节字符的数组。当将一个 UTF8 字符串加载到内存(String class/struct)时,我们一个字节一个字节地加载数据,并将其放入一个单独的缓冲区。加载单个字节不会导致任何问题。

我们看到以面向列的方式存储数据可以带来关于*字节打包的好处。*然而事实并非如此。我们在搜索方面获得了与 CSV 部分所述相同的好处。我们可以走得更远。二进制的时间戳被描述为一个 8 字节的单位。如果我们有一个固定大小的数据,我们知道它从哪里开始,我们有多少个条目,这是很容易实现随机存取:start + (size * index)。对于聊天历史,时间戳值按升序排序。如果我们有一个排序的数组,我们可以通过使用二分搜索法找到值甚至范围。这意味着查找在特定时间范围内发送的消息将非常有效。

所以你是说,面向列的数据表示是一个完美的解决方案?

哦,不!🙃

这是通过字节打包或避免重复来减小大小的一个非常好的解决方案。如果你需要迭代所有条目的一个属性,这也是一个很好的解决方案,比如当你搜索的时候。然而,如果您需要处理同一个条目的多个属性——比如您想在 UI 中显示消息,那么这并不是最佳选择。在这种情况下,我们必须从许多不同的列中提取行属性。

在 CSV(和其他基于文本的格式)的情况下,这是非常糟糕的。我说的是纯粹的 CSV 数据,没有将它吸收到一些中间数据结构中。基于文本的格式不支持随机值访问,我们需要进行扫描,以确定该列中的哪个值属于“第三”行。

像 FlexBuffers 和 ByteCabinet(我目前正在开发的一种格式)这样的二进制格式可以支持随机值访问。在这种情况下,从多个列中检索数据是合理的,但是没有打包在一起的数据快。如果您对原因感兴趣,请查看参考位置文章。

所以你是说,我不应该对 UI 使用面向列的数据表示?

哦,不!🙃🙃

你需要考虑你的用例。如果您有一个支持随机访问的面向列的数据表示,并且您有一个向用户显示几十行的列表。这不是问题。您可以遍历 X 列(属性数)并读取 Y 条目(行数)。您将不得不在内存中跳来跳去,并且可能会产生缓存未命中,但是您只会对几十个条目这样做,UX 不会受到影响。然而,如果你需要为用户提供一个搜索,你需要浏览你所有的数据,你有数以千计,甚至数百万计的条目。从 UX 的角度来看,加载不需要的数据和 CPU 缓存缺失是非常明显的。

意识到这一点是令人难过的,但是当涉及到软件开发或任何其他现实世界的问题时,没有什么灵丹妙药。本文不应该赞扬面向列的数据表示,它应该展示它的存在、美丽以及它在某些用例中提供的好处。非常感谢你坚持和我讨论这个无聊的话题。如果你愿意,你可以鼓掌。

梯度下降初学者指南

原文:https://towardsdatascience.com/the-beginners-guide-to-gradient-descent-c23534f808fd?source=collection_archive---------3-----------------------

在每个神经网络中,有许多权重和偏差连接不同层之间的神经元。通过正确的权重和偏差,神经网络可以很好地完成工作。在训练神经网络时,我们试图确定最佳的权重和偏差,以提高神经网络的性能。这个过程叫做“学习”。

最初,我们只是给网络一组随机的权重和偏差。这当然意味着网络不会很准确。例如,当给定一幅猫的图像时,如果一个区分狗和猫的网络对狗返回 0.7 的概率,对猫返回 0.3 的概率,那么它就不是非常准确的。理想情况下,它应该为狗返回 0 概率,为猫返回 1 概率。

为了告诉网络如何改变其权重和偏差,我们必须首先确定网络有多不准确。在狗对猫的例子中,它给出的猫的概率是 0.3,而正确的值是 1。我们可以取这两个值的差,对其求平方,产生一个正数,代表网络无法对猫图像进行分类,就像这样:(0.3–1)2 = 0.49。我们可以用图像是一只狗的概率做同样的事情:(0.7–0)2 = 0.49。然后,我们把两个值加起来:0.49+0.49 = 0.98。这是我们传入的单张照片的神经网络的损失

*注:在只有两个输出(即猫或狗)的神经网络的这种 cast 中,概率差是相同的(在这种情况下,都是 0.49)。但是对于具有多个输出的网络(例如识别字母表的字母的网络,其将具有 26 个输出),每个概率差异将是唯一的。

我们现在可以用多个训练图像重复这个过程,每个图像给出不同的损失。一旦我们运行了所有的训练数据,我们就可以得到所有损失的平均值。这个平均损失代表网络的表现有多差,由权重和偏差的值决定。

因此,损失与权重和偏差的值有关。我们可以定义一个损失函数,它接受所有权重和偏差值的输入,并返回平均损失。为了提高网络的性能,我们必须以某种方式改变权重和偏差,以最小化损失。

尽管损失函数有多个输入,但更容易将其视为一个具有一个输入(权重)和一个输出的函数。在该图中,纵轴 L(w)代表损耗值,取决于权重。水平轴 w 表示权重值(多个权重,但是为了更好地形象化,我们可以想象只有一个权重)。

Image 1: Loss function

对于我们给定的初始随机权重,我们在损失函数的某一点。为了减少损失,我们不得不向局部最小值迈出一步。我们可以通过对函数求导(斜率)来做到这一点,如果它是正的,向左走一步,如果它是负的,向右走一步。在上面的例子中,我们看到该点的导数为正,所以我们向左移动一步(减小权重的值)。在数学术语中,如果原始权重为 xn,则新的权重为 xn+1 = xn+dy/dxnr。这里,r 是学习速率,或我们采取的步长。

Image 2: Taking a step down

在减轻重量并运行另一批图像后,我们现在有了更低的损失。我们再一次求导,并相应地改变权重,向局部最小值又迈进了一步。

Image 3: Taking another step towards the local minimum

让我们再重复一次同样的步骤。

Image 4: Stepping too far

哦不!这一次,我们走得太远了。所以,我们不得不再退一步,向局部最小值靠拢。

学习率(我们采取的步骤)越小,网络在达到局部最小值时就越准确。但是,小的学习率需要很多步骤才能达到最小值,这需要很多时间。另一方面,较大的学习速率更快,但不太准确。我们如何确定神经网络的最佳学习速率?

莱斯利·史密斯(Leslie Smith)在 2015 年发表的论文“训练神经网络的循环学习率(Cyclical Learning Rates)介绍了一种确定每个神经网络的最佳学习率的方法。用这种方法,我们首先从一小步开始:稍微移动重量。然后,我们第二次运行一批图像时,我们将权重移动一个稍大的量(迈出一大步)。每跑一次,我们就增加学习率,迈出更大的步伐,直到我们越过局部最小值,以更大的损失结束。下图对此进行了说明:

Image 5: Determining learning rate through taking larger and larger steps

开始时,步子很小。然后,我们逐渐增加改变权重的程度,直到我们超过局部最小值并跳出局部低谷。如果我们绘制学习率对时间的曲线,它看起来会像这样:

Image 6: Increasing learning rate

因为学习率随着一批图像的每次新运行而增加。

如果我们将损失与学习率进行对比,结果会是这样的:

Image 7: Loss as we increase learning rate every step

最初,损失缓慢减少,但随着学习率的增加,它开始下降得更快,直到它变得太大并螺旋脱离局部最小值,在这种情况下,损失再次开始快速增加。

Smith 建议我们选择损失减少最快的学习速率。换句话说,我们在损失-学习率图中选择损失仍在减少但斜率最大的点。

Image 8: Optimal learning rate

请注意,我们没有选择具有最低损失的学习率,因为这可能是它刚刚跳过我们的局部最小值的点。

当然,在上面的损失函数图中,我只画了一个权重来更好地形象化这个函数。实际上,有许多权重和偏差都会影响神经网络的损失。然而,梯度下降和寻找学习率的方法仍然是相同的。

最好的算法并不总是赢

原文:https://towardsdatascience.com/the-best-algorithm-doesnt-always-win-ea7cf1df7aca?source=collection_archive---------9-----------------------

你把你和你的团队锁在外面。你说 :

“在我们造出世界上最好的分类器之前,我们不会离开”

六个月后,你创造的伟大工具没有一个被使用。

听起来熟悉吗?

如此多的团队构建了有趣的工具——通常没有什么实用价值。我去过黑客马拉松,在那里非常聪明的人构建了复杂的产品,但结果是一样的。

为什么这种情况一次又一次地发生,我该如何阻止它?为什么这么多聪明有才华的人在开发很少有人会使用的产品?

问题是双重的。首先,企业不了解他们的数据科学团队在做什么,因此不信任他们。其次,数据科学团队通常由科学方法驱动,而不是面向工程或业务的方法。

长期缺乏沟通

科学领域长期以来一直缺乏沟通技巧。对于一个拥有非常深厚的专业知识的人来说,和一个缺乏专业知识的人交流是很困难的。交流科学成果可能极其困难——我可以证明,在描述我所做的事情的中途,我得到了许多茫然的目光。并不是我与之交谈的人不聪明,而是我太不善于恰当地解释自己。这是我的错。用别人能理解的方式交流是我的责任。

沟通是一项很难学习的技能。它需要有意识的练习、反馈和密切关注你的语言。为了更有效,数据科学家需要建立一个我们专业领域之外的人容易获得的词汇表,我们需要练习与不理解我们所做的人交谈。

这种困惑让我越来越多地思考科学家和工程师如何与外部世界进行非常不同的互动。

科学 vs 工程驱动的人工智能开发

科学家和工程师的主要区别在于他们的核心动机。科学家们致力于理解自然界中的事物是如何运作的,工程师们试图解决实际问题。两者携手合作。科学家通过探索和实验提出想法,而工程师将这些想法转化为实际产品。

一个喜欢未知,一个受不了。现在我们比以往任何时候都更需要找到相处的方法。

The-Scientist.com

平衡之举?

数据科学团队可以花几个月的时间来优化、精炼和调整机器学习系统。它可能很优雅,也可能很聪明。但是,除非它与业务直接相关,并解决现实世界的问题或机会,否则它在商业上毫无用处。

想要变得更高效的数据科学家需要理解科学和工程世界之间的平衡,并将其应用到他们所在的业务中。我们需要不断思考探索和执行之间的正确平衡,以及如何将两者联系起来。随着该领域的成熟,我们需要做更多的工作。

通过借鉴工程和商业专业人士的更多想法,数据科学家的价值最终将提高许多倍。

最好的数据科学家没有被发现。

原文:https://towardsdatascience.com/the-best-data-scientists-arent-being-discovered-22deff8ec002?source=collection_archive---------7-----------------------

一年前,我从研究生院退学到 ,和哥哥一起创办了一家创业公司 。我们的目标很简单:解决数据科学人才短缺的问题。

自启动以来,我们已经为 60 多名优秀的应届毕业生和开发人员安排了工作。一路走来,我们学到了很多。

我们早期注意到的一件事是,人才短缺不成比例地影响了新的创业公司。它还不成比例地影响了那些一开始就没有多少人工智能专业知识的企业公司。这是为什么呢?

问这个问题的另一种方式是:精通人工智能的公司有什么不同的做法

当我们深入挖掘时,我们发现世界顶级科技公司在寻找数据科学和深度学习人才的方法上往往有一个共同点:非常重视校园招聘。

脸书、谷歌和 Airbnb 雇佣的机器学习工程师中有很大一部分是初级开发人员和应届毕业生。科技巨头们在其他人之前抓住了他们,用实习和工作条款提前挖走了他们。

这种方法优于其他方法是有数学原因的。但是现在,让我们想想 1)为什么其他公司还没有这样做;2)为什么这会导致他们错失大好机会。

为什么有些公司坚持体验

如果你在甚至上查找数据科学或机器学习的工作,你会发现大量的帖子要求“拥有机器学习或相关领域的博士学位,并有 3 年以上的工作经验”。"

让我们假设拥有 3 年以上经验的机器学习博士们确实会花时间在这上面(他们不会)。让我们假设一般的公司有机会在众多的招聘信息中脱颖而出(事实上没有)。

这仍然留下了一个问题:为什么是博士?为什么不是硕士学位?为什么不是两年的经验呢?还是 18 个月?

这里有一个有趣的事实:在现实中,并没有很多情况下,一个 ML 工程师的工作实际上需要他们有一个博士学位。那么要一个的真正意义是什么呢?

真正的要点是,如果你不确定实际技能是什么样的,博士学位是技能的一个不错的替代物。

像脸书、三星和苹果这样精通人工智能的公司不需要博士。他们总是雇佣没有经验的人才,因为他们对自己发现、识别和筛选人才的能力充满信心。他们非常了解自己的技术,他们见过足够多的实习生,可以将他们在编码测试和技术面试中的表现与他们的原始能力和潜力联系起来。

换句话说,精通人工智能的公司在人才发现方面有足够的经验,他们不需要用正规教育或多年经验来代替技能。

对于几乎所有其他人来说,“3 年以上经验的博士学位”只是技术能力和学习潜力的代表。这感觉像是一个安全的赌注,因为其他人——一所大学或以前的雇主——已经为你审查了候选人。

但是羞于雇佣新的开发人员和毕业生有一个痛苦的副作用。

这些公司缺少什么

从表面上看,脸书或谷歌以外的公司需要做些什么来吸引脸书或谷歌级别的人才,这一点似乎很清楚。他们需要像脸书和谷歌那样寻找人才。

对于大多数公司来说,这意味着推动校园招聘。如果硅谷的顶级初创公司正在挑选应届毕业生(甚至本科生),而你正在争取有 3 年工作经验的博士学位,那么你甚至不会有机会得到你真正想要的职位。

早期发现人才是关键。但要及早发现人才,公司需要两样东西。他们需要一种方法来接触那些拥有合适技能的新毕业生;他们需要一种方法来准确地筛选它们。

大多数尚未成为科技巨头的公司缺少其中一项或两项。他们也没有时间来建立和调整他们需要的所有基础设施,以吸引和评估新毕业生的信心。即使是硅谷巨头有时也会错过有前途的人,或者雇佣一个庸才。

但这意味着公司正在错过世界上最优秀的人才。更重要的是,他们在筛选那些已经被市场评估过(通过之前的经验),但同时也在找工作的候选人。

这是一个危险的组合,因为大多数公司都努力留住他们最好的员工。这意味着最优秀的雇员很少去找工作,除非他们是应届毕业生。

我们学到了什么

我们启动了 SharpestMinds,为硅谷巨头和无法负担全面校园招聘和筛选业务的公司之间创造公平的竞争环境。我们想在谷歌之前找到一种接触到谷歌级人才的方法。

同样重要的是,我们希望给优秀的新毕业生和有经验的开发人员一个在数据科学和机器学习领域大联盟的机会。

为了做到这一点,我们一直是背景不可知论者。我们不在乎你有什么学位,只要你能通过我们的编码测试和技术面试。

一个有趣的结果是,我们最终得到了一个兼收并蓄的成员集合。他们中的一些人是机器学习的博士,或者是谷歌、苹果和特斯拉的前实习生。但是物理学家、数学家,甚至经济学家经常让我们感到惊讶,他们完全自学成才,但却和谷歌人在同一个联盟。

在分析了数千份申请和面试了数百名候选人后,你会很好地发现那些被就业市场严重低估的人。事实上,在过去的一年里,我们学到的最重要的事情就是它们有多少。


当然,人们因为各种各样的原因而失业,所以我并不是说失业的人一定是无法就业的。这里的要点是,已经被市场评估过的和失业的人才库将因低质量的人才(统计数据)而变得更加丰富。

最好的话

原文:https://towardsdatascience.com/the-best-words-cf6fc2333c31?source=collection_archive---------8-----------------------

使用递归神经网络模仿唐纳德·特朗普的风格

Photo by History in HD on Unsplash

“我认识字。我有最好的话。”

2015 年 12 月 30 日,在南卡罗来纳州竞选集会的高潮中,这一声明只是我们现任总统唐纳德·j·特朗普越来越多的“特朗普主义”的又一个例子。这些声明既让唐纳德更受其支持者的喜爱,成为他们值得信赖的总统,同时也是似乎所有人嘲笑的原因。

不管人们对这个人的个人看法如何,不可否认唐纳德有一种独特的说话方式,那就是,嗯,如此独特的*他——*他对最高级词语的一知半解,以及明显无视传统句子结构的限制,这只是使他的演讲与他的前任或同行的演讲立刻可辨认的几个方面。

正是这种独特的风格吸引了我,我开始尝试使用机器学习来捕捉它——生成看起来和听起来像唐纳德·特朗普可能会说的话的文本。

数据收集和处理

为了了解特朗普总统的风格,我首先必须收集足够多的例子。我把精力集中在两个主要来源上。

推特

One of many examples of unconventional sentence structure.

显然,唐纳德·特朗普的第一个关键词是他的推特信息。现任总统在利用这个平台作为与美国人民的直接和未经过滤的联系方面是独一无二的。此外,作为一个有趣的人物,他的话自然被收集和整理供后人使用,省去了我使用千变万化和限制性的 Twitter API 的麻烦。总的来说,有不到 31000 条推文可供我使用。

总统讲话和演讲

然而,除了他在网上的角色,我还想一瞥他作为总统的更正式的角色。为此,我求助于白宫简报档案。在一些 Python 工具的帮助下,我很快就收集了一张大约有 420 份总统演讲和其他评论的表格。这些文字记录涵盖了各种活动,如与外国政要的会晤、与国会议员的圆桌会议以及颁奖仪式。

与每一个字都由特朗普本人书写或口述的推文不同,这些文字记录涉及其他政客和好奇的记者。将唐纳德的话与其他人的区分开来似乎是一项艰巨的任务。

Regular expressions are magic. Trust me.

输入正则表达式——一个功能强大且绝对不无聊的工具的无聊名字。

正则表达式允许您指定要搜索的模式;该模式可以包含任意数量的非常具体的约束、通配符或其他限制,以准确返回您想要的结果,仅此而已。

经过反复试验,我能够生成一个复杂的正则表达式,只返回总统所说的的单词,留下并丢弃任何其他单词或注释。

打扫,还是不打扫?

通常,处理文本的第一步是将其规范化。这种标准化的程度和复杂性根据个人的需要而变化,从简单地删除标点符号或大写字母,到将一个单词的所有变体简化为一个基本词根。这个工作流程的例子可以在这里看到。

然而,对我来说,在规范化中会丢失的特定特质和模式正是我需要保留的。因此,为了让我生成的文本更加可信和真实,我选择绕过大多数标准的规范化工作流程。

文本生成

马尔可夫链

在深入研究深度学习模型之前,我好奇的探索了另一种常用的文本生成方法,即马尔可夫链。马尔可夫链长期以来一直是笑话文本生成的首选——快速搜索就会发现星际迷航、 前总统辛普森一家、以及许多其他的马尔可夫链。

马尔可夫链的快速和肮脏之处在于,在确定下一步应该做什么时,它只关心当前的单词。这种算法关注特定单词出现的每一次,以及紧随其后的每个单词。随机选择下一个单词,其概率与其频率成比例。让我用一个简单的例子来说明:

Simplified Markov chain example, in which the only 3 follow-ups to “taxes” are “bigly,” “soon,” and end of sentence.

唐纳德·特朗普说了“税收”这个词。如果在现实生活中,在他说“taxes”之后的 70%的时间里,他接着说“bigly”,马尔可夫链将在 70%的时间里选择下一个单词为“bigly”。但有时,他不说“大”有时他会结束这个句子,或者换一个词。这个链最有可能选择“bigly”,但也有可能会选择任何其他可用的选项,从而在我们生成的文本中引入一些变化。

并且令人作呕地重复,或者直到句子结束。

这对于快速而肮脏的应用程序来说非常好,但是很容易看出哪里出错了。由于马尔可夫链只关心当前的单词,所以它很容易被转移。一句以谈论国内经济开始的话,很容易以谈论《飞黄腾达》结束。

由于我的文本数据集有限,我的马尔可夫链输出大部分都是无意义的。但是,偶尔也有一些辉煌和欢乐的闪光:

Tweet-trained Markov chain given the seed “FBI”

递归神经网络

然而,对于还算真实的文本,我需要更复杂的东西。递归神经网络(RNNs)已经成为许多基于文本或序列的应用的首选架构。RNNs 详细的内部工作超出了这篇文章的范围,但是一个强大的(相对)初学者友好的介绍可以在这里找到。

这些神经单元的显著特征是它们有某种内部“记忆”。单词的选择和语法在很大程度上取决于周围的环境,因此这种“记忆”在通过跟踪时态、主语和宾语等来创建连贯的思想方面非常有用。

这些类型的网络的缺点是它们的计算非常昂贵——在我的笔记本电脑上,通过模型运行一次我的全部文本将需要一个多小时,考虑到我需要这样做大约 200 次,这是不好的。

这就是云计算的用武之地。许多老牌科技公司都提供云服务,最大的是亚马逊谷歌微软。在一个高 GPU 计算实例上,每个周期一个多小时的时间变成了90 秒,时间缩短了 40 多倍!

估价

你能说出下面的陈述是真是假吗?

加州终于值得一个伟大的政府,让美国再次伟大!#特朗普 2016

这是因特朗普支持共和党州长候选人而产生的文本,但它可能会被视为特朗普在 2016 年大选前发的推文。

我实现的更复杂的神经网络,在递归层之前和之后隐藏了完全连接的层,能够生成内部一致的文本,给定 40 个字符或更少的任何种子。

我希望他们都聚在一起,我希望人们可以看看农场。

中国已经同意购买世界上大量的东西——并停止美国的大交易。

不太复杂的网络在一致性方面有些失误,但仍然抓住了特朗普总统演讲的基调:

奥巴马。我们会有很多人这样做——好吗?我会告诉你他们有一点点。

结束语

虽然这种尝试并没有让你我始终如一地产生文本,但它让我见识到了 RNNs 的力量。在短时间内,这些网络学会了拼写、语法的某些方面,在某些情况下,学会了如何使用标签和超链接——想象一下,一个设计更好的网络,有更多的文本可以学习,有更多的时间学习,会产生什么样的结果。

如果你对这些模型背后的代码感兴趣,你可以在这里找到库。此外,如果您有任何问题或反馈,请不要犹豫!

数据大爆炸

原文:https://towardsdatascience.com/the-big-bang-of-data-6dce91ff12cf?source=collection_archive---------9-----------------------

确定对数据、信息和分析的业务需求

Business Intelligence drives business

数据爆炸

随着技术的进步,创建的数据量正在快速增长。在整个 20 世纪 70 年代、80 年代和 90 年代,收集的大多数数据都是结构化的,并放在数据库中,而互联网、手机和智能设备等新兴技术正在产生比以往任何时候都多的数据。2013 年,IBM 写道,每天会产生 2.5 万亿字节的数据,据估计,到 2020 年将会产生 40 万亿字节的数据。但是,随着数据量的快速增长,数据的种类也在增加。从电子邮件、推文、图片、视频到音乐,一切都是数字化的,不仅存储在本地设备上,而且越来越多地存储在云中。寻求存储结构化和非结构化数据的新型方法,以便在世界各地的各种设备上随时可用。但也许最有趣的是我们现在依赖于正在生成的数据的速度。在过去,业务会被限制在数据可用时,这可能需要几个小时甚至几天,而现在,实时数据在不同的行业都是必要的,例如金融、营销和技术。

控制分析

但是,随着数据的数量、种类和速度不断增加,对能够处理这些数据的分析的需求也在增加。尽管大多数公司都认识到在从销售流程到财务流程的每个流程中收集数据的重要性,但许多公司都被大量的数据所淹没,并且通常不知道如何有效地分析数据或将数据转化为足够及时的信息来采取行动。让事情变得更加复杂的是,业务的每个部分都依赖于从这些数据中得出的信息,这对业务有很大的影响。从管理管道的销售,到试图判断网站是否产生预期结果的营销,到最新的财务信息,甚至是跟踪员工满意度的人力资源。

分析的重要性

企业不能低估其分析计划的重要性。虽然企业仍然需要具有直觉的领导者和决策者,但他们依赖数据来验证他们的直觉。从这个意义上说,数据成为了一个战略指南,帮助高管们看到他们可能没有注意到的模式。来自 Bain 的一项研究发现,拥有最先进分析能力的企业远远超过竞争对手,领先企业展示了以下结果:

  • 两倍的可能性在他们的行业中处于财务表现的前四分之一
  • 决策速度比市场同行快五倍
  • 执行决策的可能性是预期的三倍
  • 在做决策时,使用数据的频率是平时的两倍

分析挑战

随着越来越多的公司使用分析,分析的类型也变得越来越复杂。高级分析正在扩展,包括预测分析、数据可视化和数据发现。这现在需要一种新的精通数据的人,他们能够开发复杂的分析模型,而且了解业务领域,并以对业务人员有用的方式呈现结果,也就是所谓的数据科学家。随着越来越多的公司认识到他们需要数据科学家来领导他们的分析工作,开放的职位远远超过了数据科学家的实际可用性,导致工资和员工流失的增加。

分析策略

随着我们认识到数据的爆炸式增长以及将数据转化为信息的需求对当今经济中的企业至关重要,对分析策略的需求变得更加明显。由 Forrester 发布的一份报告描述了商业智能分析如此重要的原因:

  • 许多商业决策仍然基于直觉,而不是事实
  • 分析减少了直觉和事实决策之间的不连续性
  • 竞争优势可以通过更复杂的数据使用来实现
  • 大数据支持新的用例,但需要分析来充分利用其潜力

为了充分利用分析的力量,企业需要基于其业务人员如何与数据交互和使用数据的策略。分析策略可能包括:

  • 设计支持报告、分析、预测建模和自助 BI 的数据架构
  • 构建 BI 产品组合
  • 设计具有数据发现、数据可视化和内存 BI 的解决方案
  • 支持运营和分析 BI
  • 设计和实现分析沙箱和中枢
  • 创建数据和分析治理计划
  • 创建共享 BI 元数据环境

但最重要的是,分析策略需要有一个目标,这个目标来源于业务目标,并且应该用信息支持业务人员实现这些目标。

PowerBI Dashboard

数据和信息的区别

即使数据和信息这两个词经常被用来表示同一件事,但实际上这两者之间有很大的区别。数据是原始的、随机的和无组织的,而信息是经过组织、结构化和处理的数据。举一个更具体的例子,在线支付有很多细节,包括时间戳、卡类型、商家 id 和数十个其他字段,在收单机构和发卡行之间来回发送的原始数据存储在平台内的数据库中。直到采取措施将数据移动到 ETL(提取、转换和加载)系统中,数据才被转换成信息。最后一步是将信息转化为知识。业务人员使用报告中的信息来获取知识,帮助他们做出明智的业务决策。

AWS Analytics Process

商业智能在创建可操作信息中的作用

商业智能(BI)将数据转化为“可操作的”信息,即对业务有用并帮助 it 获取知识的信息。随着业务的快速变化,对能够为业务人员提供能够产生可操作见解的信息的工具的需求比以往任何时候都更加重要。直到十年前,大部分数据主要存储在结构化(SQL)数据库中,而今天,BI 工具需要能够处理各种类型的数据(结构化、非结构化和半结构化),并将其转化为信息。此外,这些年来,向最终用户交付信息的方式也发生了变化。商务人士现在比以往任何时候都更加移动,而不是通过台式机或笔记本电脑访问信息,用户的期望是 BI 工具能够支持智能手机和平板电脑等移动设备。

向业务人员提供数据库访问权限和提供 BI 的区别在于目标的不同。数据本身并不提供任何见解,但通过将数据转化为信息并提供必要的见解来做出决策以实现公司目标的战略,业务人员可以验证他们的观点,并确保业务朝着既定目标前进。

感谢阅读;),如果你喜欢它,请点击下面的掌声按钮,这对我意义重大,也有助于其他人了解这个故事。通过在推特Linkedin 上联系让我知道你的想法。或者关注我,阅读我关于数据科学、支付和产品管理的每周帖子。

您应该了解的大数据测试挑战

原文:https://towardsdatascience.com/the-big-data-testing-challenges-you-should-know-about-56db2d8da9a5?source=collection_archive---------7-----------------------

假设您必须测试 100TB 无缓存的非结构化、无索引数据。你能感受到这个项目中所有可能出错的事情带来的恐慌吗?瓶颈和缓慢的处理是首先想到的吗?加上未清理的数据,未知的错误,传输故障以及确保操作应用于整个卷,你甚至还没有接近大数据测试的含义。

大数据的 V 型

处理大数据揭示出测试与常规软件相比有所不同。这些挑战来自数据本身的属性。这就是所谓的三个 v,即数量、速度和多样性,通常以可变性和价值作为补充。它们中的每一个都提出了具体的挑战,它们也可能通过协同作用产生更多的问题。

大的定义并不局限于一个特定的数字。有些人谈论以 GB 为单位的大数据,而其他项目处理 Pb 或 zettabytes,完全取决于它们的范围。事实上,任何不适合在单台机器上进行分析的数量都被认为是巨大的。为了克服这个问题,Hadoop 将数据分布在更多的计算中心。没有并行处理,就不可能遍历整个集合。想象一下,你必须在几秒钟内过滤整个脸书帖子数据库中的关键词。

速度

这不仅是体积的问题,也是速度的问题。例如,每分钟都有近50 万条推文和同样多的脸书帖子发布。这同样适用于 RFID 和来自物联网设备的数据。设计一个可以实时处理这些更新的测试算法是大数据测试的最大挑战之一。这一棘手问题也可以通过分布式计算和并行化来解决。所使用的方法应该侧重于提高性能。

多样性和可变性

大数据不能放在一个数据框里。它缺乏同质性和标准化,需要设计新的检索、查询和测试方法。文本、图像、声音、XML 等各种格式需要不同的验证方法,以防止错误从一个步骤传播到另一个步骤。

与多样性相关的另一个 V 是数据的可变性。并不是所有的数据都是相等的,或者以固定的时间间隔产生的,因此一组数据可能包含缺失值。这使得传统的分析工具毫无用处,需要不同的方法。

价值

评估数据的潜在应用是规划 it 投资所必需的。由于数据被认为是一种新的货币,每个数据集都应该进行评估。相同的数据可以有不同的用途,并与其他数据组合,以获得新的模式和见解。此外,来自一家公司的经过充分验证的记录可以通过销售给其他组织而成为新的收入来源。

测试类型并确定 Vs 的优先级

每种类型的数据需要不同的测试方法,充分适应其最重要的 V:

  • 数据摄取测试—适用于数据库、文件和接近实时的记录。在基于文件的数据中,需要优先考虑多样性,在处理大量涌入的记录时,需要优先考虑速度。
  • 数据迁移测试—这种测试类型在实时处理中不存在。所以优先考虑的是体积。
  • 数据集成测试——侧重于识别不一致性。亮点在于可变性,因为来自不同来源的数据需要输入到一个存储库中。
  • 数据同质化测试—在这种情况下,绝大多数大数据是非结构化或半结构化的,因此多样性要求创建规则。
  • 数据标准化测试—数量是这里最重要的功能,以确保所有数据都符合要求并符合法规。

技术专长要求

简单的 excel 表格不再适合用于大数据测试。甚至连模拟器都不够用。只有像 Hadoop 这样实现 Map Reduce 和 ETL 过程验证的专用环境才能捕获该过程的所有复杂方面。ETL 过程意味着数据从其原始目的地(数据集市和数据仓库)提取出来,转换成分析所需的文件类型或格式,并加载到新的数据库中。测试的重点是每个步骤的质量,以确保在这个过程中不会丢失任何信息。

自动化

在传统的软件测试中,自动化被认为是一个不错的选择或捷径,但现在却成为了大数据测试的强制性要求。正如 A1QA 对的描述,它缩短了上市时间,提高了产品质量。自动化确保了测试过程涵盖了所有的可能性,而不仅仅是一个样本。

这种变化不会没有额外的麻烦,比如需要雇用专家和管理更多的软件。虽然手工测试人员需要很少的编程背景,并且可以在几周内完成培训,但是自动化测试人员需要有多年的经验。

虚拟化

尽管虚拟化为现实世界的版本提供了合适的替代方案,但它也带来了与虚拟机延迟相关的特定挑战。当创建了太多的虚拟映像时,就会出现性能问题。无法管理虚拟化流程会导致成本增加,甚至带来安全风险。然而,可扩展性、弹性、成本效益和为应用程序创建沙盒环境的能力等优势,推荐将虚拟化作为大数据的另一个基础 V。

当将合规性要求添加到组合中时,这可能意味着测试还应该包括对虚拟机日志的仔细监控。

成本和基础设施

由于大数据测试人员的必要专业知识大大超过了人工测试人员,因此人员成本将推高预算。从好的方面来看,如果做得好,由于测试的自动化,必要的工时数应该会持续下降。事实上,从长远来看,这将降低成本。

此外,如果不通过云解决方案实施,必要的基础架构会对预算产生重大影响。

未来发展

大数据测试不同于常规的软件评估,因为它不太关注功能,而是更关注数据的质量,就像数据流经流程一样。大数据测试对软件开发最重要的贡献可能与开发理解大数据量的新方法有关。另一个将获得更多可见性的领域是优化,因为需要实时准确地处理数据,而当前的体系结构不适合处理未来几年的预测量。测试自动化很可能会从所创造的进步中受益匪浅,因为大数据实践可以复制到常规软件测试中,从而提高速度和准确性。

运筹学的大图景

原文:https://towardsdatascience.com/the-big-picture-of-operations-research-8652d5153aad?source=collection_archive---------3-----------------------

运筹学可能是一个非常混乱的研究领域,进入门槛很高。我认为这个问题的部分原因是使用了令人困惑的术语和古老的术语。

当我开始学习运筹学时,我花了很多时间试图看到全局。我记得这不是一个微不足道的任务(本来应该是)。

在这篇博文中,我将试着描绘出运筹学的大图景,希望你们中的一些人会觉得有用。

运筹学、数学规划和离散最优化

运筹学是研究如何高效决策。数学规划是运筹学中最强大的技术之一,有时这两个术语可以互换使用。**数学编程中的编程与计算机编程无关,在英国用法中是最优化的意思。**离散优化(或者你也可以称之为编程)解决变量只能取离散值(例如,整数值)的问题。

Figure 1: Operations Research, Mathematical Programming, and Discrete Optimization

实践中的运筹学

运筹学从业者每天都在解决现实生活中的问题,为人们节省金钱和时间。这些问题多种多样,而且几乎总是互不相关。然而,他们的本质总是相同的,以最有效的方式做出决策来实现目标。从了解客户的业务问题到找到解决方案的过程可能充满挑战。总的来说,这个旅程可以分为以下四个层次

Figure 2: Four layers of abstractions to solve Operations Research problems

商业问题

当我第一次听到“企业问题”这个术语时,我很自然地被误导,认为它们是企业存在的问题。后来,我对这个词的理解发生了变化,我意识到它的意思略有不同。这一层更好的名字应该是真实世界应用。商业这个术语的意思是指出眼前的问题还不是一个数学问题,而是一个更具体的,不太正式的,现实生活中的挑战。

商业问题最好用自然语言表达(比如英语)。它们源于工业中的问题,因此用外行的术语与从业者交流。因此,形式化这些问题并将其降低到更低的抽象层次是 OR 从业者的责任。实际上,这是一个迭代过程。

商业问题的例子可以在不同的行业中找到。你将听到的大多数商业问题都来自于物流行业。以下是一些例子:

  • 我是医院经理,如何给医院员工分配班次?
  • 我是一家货运公司的经理,我应该按什么顺序安排送货?
  • 我要开一家制造公司,我应该把工厂设在哪里?

一般性问题

当运筹学第一次被发明出来时,数学家们认识到他们遇到的大多数商业问题都可以被映射到一系列较低层次的普通问题上。因此,他们投入了大量的时间和带宽来研究这些问题,给它们起了具体的名字,并提出了解决方案。我认识的大多数 OR 实践者(包括我自己)将大部分时间花在将业务问题转化为这些众所周知的一般性问题的过程上。一旦你到了那个阶段,解决问题或多或少会成为标准程序。

一般运筹学问题足够简洁,可以用数学符号来描述。然而,运筹学从业者通常使用高级建模语言来表达这些问题。

以下是一些例子:

  • 旅行推销员问题(TSP)
  • 最短路径问题(SPP)
  • 集合覆盖问题
  • 图的着色问题

作为高级建模语言的一个例子,调度问题通常使用像活动、资源优先约束这样的术语来描述。

建模范例

我们讨论了如何使用高级语言来表达一般运筹学问题。这些符号通常是特定于问题的。例如,资源和活动可以用来描述调度问题,但不能用来描述 TSP。然而,您可以使用许多建模范例来描述任何这些一般的或问题(或谨慎的优化问题)。

建模范例是一组规则和实践,允许您使用较低级别的数据结构(如矩阵)来表示较高级别的问题。

当使用建模范例时,OR 从业者使用数学符号或代数建模语言(AML)来表达问题,该语言将这些数学符号转换成矩阵,以传递到抽象的最后一级,即算法。

运筹学中最著名的建模范式是线性整数混合整数规划。这些是可以使用线性等式约束来表达问题的建模范例。这是描述最优化问题的一种非常强大和自然的方式。

约束编程是另一个最近很流行的范例,特别是对于调度应用程序。

网络模型也是基于图论的众所周知的建模范例。这种范式对于建立对问题的良好直觉特别有用,并且可以以有效的方式表示各种各样的谨慎优化问题。

算法

算法是一个过程或一系列步骤,如果遵循它就可以解决问题。一些算法普遍存在于计算机科学的所有领域,如搜索和排序,而其他算法则面向更具体的问题。

搜索算法在解决运筹学问题中非常重要。顾名思义,他们正在寻找解决方案。在运筹学中,一系列被称为“分支和 X”的算法被用来解决整数、混合整数和约束规划问题。最基本的例子就是求解整数程序的分支&限界算法。其他包括分支&切割、分支&修剪和分支&价格(又名列生成)。

动态规划算法在运筹学中同样重要。这一系列算法通过利用它们的最优子结构来解决问题。更简单地说,如果一个问题可以用一堆相同的任务来解决,我们就解决其中的一个任务,并将结果存储在一个表中。当我们遇到下一个同样的子问题时,我们只是查找答案,而不是重新计算。这对于解决图形问题非常有帮助。最著名的例子是贝尔曼-福特算法,以动态编程之父理查德·贝尔曼的名字命名。

有时候,问题太难了,无法以最佳方式解决,我们只需要找到一个快速的解决方案。贪婪算法被用来完成这项任务。它们通常不能保证最优(但有时可以),但它们可以非常快。最著名的例子就是 Dijkstra 的求最短路径问题的算法。如果满足一些假设,Dijkstra 就能保证找到最短的路径。

Figure 3: Four layers of abstractions to solve Operations Research problems with concrete examples.

摘要

在这篇博文中,我对运筹学做了一个高层次的非正式描述。我个人认为,在深入研究细节之前,记住任何领域的大局总是有用的。期待您的反馈和意见!

参考

皮尔逊的相关性,线性回归,以及为什么“贝塔”大大低估了投资组合对市场回报的敏感性

原文:https://towardsdatascience.com/the-black-swans-in-your-market-neutral-portfolios-part-i-7521683a7317?source=collection_archive---------11-----------------------

这是本文的第一部分,说明了在评估投资组合风险时,考虑非线性和时间相关性的实际重要性,而广泛采用的(皮尔逊)相关系数未能做到这一点。

在这篇文章中,我们提供了皮尔逊相关性的基本介绍,它与线性回归和投资组合 beta 的关系,以及它在衡量资产之间的相关性方面的局限性。

在第二部分中,我们提供了资产回报的独立同分布高斯假设不适用于美国股票和期货的经验证据,并且我们提出了皮尔逊相关性的替代方案,即 信息调整相关性 ,它测量时间序列(非随机变量)之间的关联,同时充分捕捉非线性,更重要的是,时间结构。然后,我们使用信息调整相关性来构建投资组合的(CAPM 的) beta 的信息论替代方案,我们称之为 信息调整 beta

什么是相关性?

背景

广义地说,相关性(或 co-relation)是两个现象之间关联或依赖的任何度量,每个用一个数字来表征。

在实践中,感兴趣的现象通常过于复杂,无法用精确不变的确定性定律(如物理定律)来描述。相反,我们满足于将我们缺乏的粒度理解表达为随机性,我们转向数学的分支,即概率论来研究我们现象的集合属性。一个这样的系综性质是两个随机现象之间的关联。

在这篇文章的其余部分,我们认为每一个感兴趣的随机现象都是通过一个单一的数字来表现的,我们用相关的随机变量来表示它,我们用两个随机变量之间的相关性来表示相关随机现象之间的相关性。

皮尔逊相关

正如您所料,多年来,人们提出了许多测量两个随机变量之间相关性的方法。

皮尔逊相关系数(Pearson ' s correlation coefficient)是迄今为止最流行的相关性度量,是一个介于-1 和 1 之间的数字,它反映了两个随机现象具有线性关联的倾向。也就是说,皮尔逊相关性衡量的是,如果我们将一个随机变量的观察值与另一个随机变量的观察值绘制成散点图,该图看起来像一条直线的程度。

皮尔逊相关性越接近-1 或 1(分别为。0),越强(resp。较弱)两个随机变量之间线性关联的证据。正的皮尔逊相关表明当一个随机变量取一个大的(相应的。小)值,另一个也是如此。负的皮尔逊相关表明当一个随机变量取大的(相应的。小)值,另一个取小(resp。大)值。

皮尔逊相关性为什么这么受欢迎?

皮尔逊相关性作为两个随机变量之间相关性的度量标准之所以流行,可以归因于其在高斯分布的特殊情况下的一般性质。

事实上,当两个随机变量是联合高斯时,皮尔逊相关性完全捕捉到了它们之间任何关联(线性或非线性)的程度。而且,高斯分布在概率论及其应用中起着举足轻重的作用。

对数学家来说,它们是最容易处理的概率分布族,它们被广泛研究,它们经常在看似不相关的概率问题中意外出现,关于它们的结果在文献中比比皆是。

对于统计学家来说,高斯分布是一种福气,因为他们的分析能力,在估计未知分布的性质时产生的误差通常表现得像高斯分布——即使估计的分布不是高斯分布——这要归功于一族通常被称为中心极限定理的结果,以及他们属于指数分布族的事实——这本身在贝叶斯统计中起着关键作用——等等。

对于机器学习研究人员来说,高斯分布作为概率分布上一些重要优化问题的解决方案自然出现。一个这样的问题是最大熵问题,其目的是在所有与观察到的经验证据一致的概率分布中,找到对其他一切最无知的那个。

皮尔逊相关和线性回归

皮尔逊相关性和线性回归可以被视为一枚硬币的两面。

在两个标量随机变量 xy 已经标准化的情况下,yx之间的皮尔逊相关系数ρ可以解释为 y 之间最佳线性拟合的斜率

事实证明,即使在随机标量和随机向量的 a 线性拟合的情况下,两个都标准化了**

提供最佳线性拟合的向量,即【β】,完全由向量与输入之间的皮尔逊相关系数以及坐标之间的皮尔逊相关系数决定****

当输入向量 X 的坐标去相关(皮尔逊相关为 0)时,通过将的第 i 个坐标设置为 yi 的第个坐标之间的皮尔逊相关来获得根据上述等式的最佳线性拟合**

更一般地,线性拟合完全由皮尔逊相关系数和读数决定

其中每个 是左索引(的坐标)和右索引(的坐标)之间的皮尔逊相关矩阵。

注意,当且仅当 X 的所有输入坐标与 y 解相关时,β的所有坐标为 0,由此可见,线性回归可以被认为是皮尔逊相关性的多元推广。

金融中的线性回归

线性回归在金融界很普遍。从 CAPM ,到 APT ,到 Fama-French 因子模型,再到溢价商业因子模型,几乎所有在金融中使用的基于因子的风险模型都依赖于线性回归以及资产回报与时间同分布的假设。

定量分析师通常使用的预测模型也严重依赖线性回归,无论是在其原始公式中(如 OLS自回归向量自回归等)。),或者规则化(如脊回归套索等)。)来处理相关输入变量和/或执行变量选择。

线性回归也可用于因果关系检测(如格兰杰因果关系)。

皮尔逊相关性和投资组合的(CAPM

**资本资产定价模型(CAPM)的概念来源于 alphabeta市场中性、假设投资组合相对于无风险利率的超额收益可以分解为一个随机市场成分,其大小由系数 beta 驱动,一个确定性的特质平均超额收益项 alpha 和一个均值为零的特质剩余项。

根据定义,当 beta 为 0 时,投资组合被认为是市场中性的。可以证明,在资本资产定价模型下,

这意味着一个投资组合是市场中性的,当且仅当它的回报率与市场回报率不相关。**

皮尔逊相关性在金融学中的局限性

皮尔逊相关性捕捉两个随机变量之间任何类型关联的独立同分布高斯假设在金融应用中存在严重的局限性。

去相关并不意味着独立;所以市场中性的投资组合并不总是市场中性的!

Scatter plots of couples of random variables, labelled with the associated Pearson’s correlations. The last row shows random variables that, despite having 0 Pearson’s correlation, exhibit strong associations. Source: Wikipedia.

正如任何概率 101 课程所教导的那样,去相关并不总是意味着独立!特别是,如果市场中性投资组合的回报与市场回报不一致,那么市场中性投资组合实际上可能依赖于市场!这是一个显而易见的说法,但却经常被从业者忽略。

最糟糕的是,在这种情况下,所谓的市场中性投资组合和市场之间的剩余耦合只能在尾部(分布的高阶矩)中表现出来——市场中性投资组合的回报与市场回报没有一阶关联,但不一定没有高阶/非线性关联。

市场中性的投资组合在正常市场条件下可能得到很好的对冲,但它可能会显著暴露于极端波动,也就是市场范围内的黑天鹅。

一个伟大的基金经理总是假设线性,就像法国厨师保罗·博古塞要求他的食品供应商经营他的餐馆一样!

在金融中使用皮尔逊相关性的一个相关缺陷是,假设线性抓住了两个随机变量之间任何关联的本质。然而现实是所有的回归模型都是线性和非线性的,这取决于什么样的输入现象的观察被用作参考。

让我们考虑一下回归模型

其中 f 为非线性函数。显然,这个模型假定了在 yx 之间的非线性关联。但是,同样的模型也可以看作是在 yf(x) 之间放置一个线性关联。

也就是说,*【x】*f(x) 可以看作是观察同一随机现象的两种不同方式。观察潜在随机现象的过程通常由数据供应商承担,或者由任意约定(例如交换合同规范等)暗示。).总是假设你的数据供应商或交易所提供给你的表示是线性的,就像假设数据供应商或交易所做了你的(大部分)工作。如果他们擅长你的工作,他们会管理你的基金。

我们举一个具体的玩具例子。假设我们对研究澳元对美元的价值和新西兰元对美元的价值之间的关系感兴趣。假设我们决定使用线性回归。我们应该回归利率本身吗?比率的对数?他们的每日收益?还有其他的汇率变化吗?显然,每种情况都会导致完全不同的模型,不问这些问题就像让数据供应商和交易所为我们建立模型一样好。

为了使用线性模型,人们应该额外寻求理解,更好地从数据中学习,什么样的转换会使线性假设有用。

在这一点上,值得强调的是,经济学家所钟爱的 t 检验等具有统计显著性的检验,不能用来证明线性假设的有效性。他们测试(非零)一阶效应的存在,他们不测试(非零)高阶效应的不存在。

总之,我们都应该像已故的法国厨师保罗·博古兹(Paul Bocuse)一样:非常担心我们使用的食材的质量,但更担心如何将它们放在一起做出完美的饭菜(或预测/风险模型)。

总是假设回报率是独立同分布的,就像发誓说市场是完全有效的,你仍然可以创造阿尔法!

追求阿尔法的本质是这样一个前提,不管怎样,过去与未来是相关的,未来是可以预测的,或者用数学术语来说,市场作为一个随机系统,表现出记忆。

因此,既寻求阿尔法,又假设市场动态是无记忆的,这是违背直觉的。如果市场是无记忆的,怎么可能从数据中学习系统的策略(例如,像量化基金一样赚钱)?然而,大量的风险模型都是基于因子模型,假设收益的时间序列是无记忆的。这个假设不仅与经验证据不一致,它还隐藏了很多尾部风险,我们将在第二部分中看到。

要找到皮尔逊相关性的替代方法来衡量你的投资组合的风险,同时考虑非线性和时间相关性,以及 CAPM 的 beta 的类似替代方法,请阅读本文的第二部分,以及我们的黄皮书进行更技术性的讨论。

皮尔逊相关性和投资组合“贝塔”的信息论替代方案

原文:https://towardsdatascience.com/the-black-swans-in-your-market-neutral-portfolios-part-ii-20dc2299374a?source=collection_archive---------12-----------------------

本文是本文的第二部分,阐述了在评估投资组合风险时,考虑非线性和时间相关性的实际重要性,而广泛采用的(皮尔逊)相关系数未能做到这一点。

第一部分中,我们提供了皮尔逊相关性的基本介绍,它与线性回归和投资组合贝塔的关系,以及它在衡量资产间相关性方面的局限性。

在这篇文章中,我们提供了资产回报的独立同分布高斯假设不适用于美国股票和期货的经验证据,并且我们提出了皮尔逊相关性的替代方法,即 信息调整相关性 ,它测量时间序列(而不是随机变量)之间的关联,同时充分捕捉非线性,更重要的是,时间结构。然后,我们使用信息调整相关性来构建相对于市场的投资组合的(CAPM 的) beta 的信息论替代方案,我们称之为 信息调整 beta

用信息论测量时间序列关联

注:本节中的所有对数均以 2 为基数。

熵作为不确定性的度量

被建模为随机变量的复杂系统中包含的信息量通常被定义为与其相关的随机变量中的不确定性的量。

测量随机变量中的不确定性是一个和信息论本身一样古老的问题。这个问题的规范解决方案是信息论之父 Claude Shannon 在他的开创性论文中引入的 信息 的概念,他在论文中专注于离散随机现象(即那些取可数个值的现象)。

The entropy of a probability distribution with density function p with respect to a base measure dμ. The entropy of a random variable is that of its probability distribution.

Shannon 为离散随机变量引入的信息熵概念后来被推广到任何随机变量。

一个重要的相关度量就是所谓的 条件熵。 直观上,随机变量 y 给定 x 的条件熵是关于随机变量yx的剩余信息量/不确定性。**

Conditional entropy of y given x

更具体地说,就是 yx 中存在的不确定性(或熵)的总量与 x 中存在的不确定性的总量之差。

Venn diagram illustrating the link between entropies, joint entropy, and conditional entropy

如上面维恩图所示, yx 包含的信息量总和很少是x 包含的信息量总和,因为在 yx之间可能存在信息冗余

使用熵作为信息度量的一个优点是,给定 x 的条件熵永远不会大于的条件熵,当且仅当 y 和 x 是独立的 时,两者相等(即两者之间没有任何关联

The notion of conditional entropy fully captures independence between two random variables

与皮尔逊相关不同,条件熵捕捉随机变量之间的线性和非线性关联。

关联的一个相关度量是在x 之间的 **互信息,其被定义为y*y给定的 x*

事实证明,如果我们假设 yx 是独立的,即所谓的 Kullback-Leibler 散度,这个量与一个正式且流行的统计测量值相符。

Relation between the mutual information between two random variables, their conditional entropies, and the KL-divergence between their joint distribution and the product of its marginals.

简而言之,即使我们假设资产回报是独立同分布的,我们也可以借用信息论来构建一个关联度,与皮尔逊相关度不同,它可以完全捕捉线性和非线性关联。

熵率作为时间序列中信息的一种度量

时间的概念在经济学和金融市场中扮演着太重要的角色,以至于人们不相信顺序无关紧要,也不相信同样的随机现象会不断重复。简单地说,假设收益是独立同分布的,通常是错误的。模拟金融市场的自然概率抽象是随机过程时间序列的概念,而不是随机变量的概念。

时间序列基本上是带有时间戳的随机变量的集合。

幸运的是,通过时间序列的熵率概念,将条件熵的概念扩展到时间序列

给定一个时间序列的条件熵率

他们的解释非常相似。 熵率 衡量一个时间序列在单位时间内产生的信息量。 条件熵率 衡量的是一个时间序列在单位时间内产生的新信息的数量,这些信息是另一个时间序列中尚未包含的。

与随机变量的情况类似,一个时间序列的熵率与其给定的另一个时间序列的条件熵率之间的差异反映了每单位时间内两个时间序列之间共享的信息量。

The amount of information shared between time series and per unit of time is equal to the rate of KL-divergence between the joint process of {x, y}, and the product of coordinate processes and (i.e. the joint process stripped out of any association between coordinate processes and ). It is also equal to their rate of ‘mutual information’.

至关重要的是,条件熵率的概念远远超出了对应于同一时间的样本的线性关联,并且捕获了两个时间序列*之间的线性或非线性以及跨时间的任何关联。*****

The notion of conditional entropy rate fully captures independence between two time series

成对增量多样化作为资产间依赖的一种度量

在我们的黄皮书中,我们将一项资产加到另一项资产上的多样化量定义为收益时间序列的互信息时标(互信息比率的倒数):

直观地说,这个量可以被解释为看到两种资产之间的 1 比特共享信息(或者等价地,它们的回报时间序列)平均需要的时间量。两种资产的相关性越低,观察它们的收益时间序列之间的 1 比特互信息所需的时间就越长。类似地,两个资产越相关,看到两者之间 1 比特的共同信息所花费的时间就越少。

增量分散始终为正,并在 0(当一个时间序列的回报可以完全从另一个时间序列中确定)和+∞(当两个时间序列的回报是独立的)之间变化。

从增量多样化到信息调整相关性

敏锐的读者肯定已经注意到,我们没有做出任何具体的分布假设,以确保我们的增量多样化概念完全捕捉到两个时间序列的收益之间的任何形式的关联,线性或非线性,同时或跨时间。此外,可以从经验证据中估算增量多样化,而无需进行任何任意分布假设(更多详细信息,请参见黄皮书 our)。

现在,事情是这样的。我们知道,在独立同分布高斯分布的情况下,皮尔逊相关足以描述任何形式的关联,无论是线性的还是其他形式的。这就引出了一个问题:在独立同分布高斯分布的情况下,增量多样化和皮尔逊相关之间的函数关系是什么?事实证明,答案是封闭的:

Relationship between incremental diversification and Pearson’s correlation when time series of returns are assumed jointly Gaussian and memoryless.

我们也可以反过来问。假设我们知道如何准确估计增量多样化,在独立同分布高斯假设下,估计的增量多样化值对应的皮尔逊相关系数是多少?这个问题的答案——通过反演上面的等式获得——就是我们所说的 信息调整相关性

The information-adjusted correlation between two assets with time series of returns and is the Pearson’s correlation coefficient that, under the possibly incorrect i.i.d. Gaussian assumption, would produce an accurate measure of incremental diversification.

然后,我们可以独立地估计皮尔逊相关性,并将其与信息调整相关性进行比较。如果高斯 i.i.d .假设成立,那么这两个值应该很接近!

一种简单实用的黑天鹅检验

这听起来不错,但你可能会问,黑天鹅在哪里?好吧,如果这篇文章有什么实际的收获,那就是:

  • 阅读我们的黄皮书,找出如何从数据中估算 ACorr
  • 案例一:ACorr ≈ Corr: 如果你观察到信息调整相关性(近似)等于皮尔逊相关性,那么 i.i.d .高斯假设成立,你可以相信你最喜欢的线性 i.i.d .因子模型。
  • 案例二:|ACorr| < |Corr|: 对不起,你的代码有一个 bug!这在数学上是不可能的。
  • 案例三:|ACorr| > > |Corr|: 红旗!你的投资组合中有很多风险,无论是皮尔逊相关性还是你最喜欢的线性独立同分布因子模型都没有考虑到,这将在市场大幅波动时给你带来沉重打击。你在这些资产中的任何投资组合,你认为是市场中性的,很可能根本不是市场中性的!

这些都重要吗?你打赌它是!

如前所述,如果我们绘制一些资产对的信息调整相关性与皮尔逊相关性,任何与 y=x 线的显著偏离都强烈表明资产回报的独立同分布高斯假设不成立。

好吧,我们就这么做吧。让我们把 S&P 100 指数成份股和 60 指数最具流动性的美国期货(用后向比率法连续调整的前一个月)视为整个资产。对于宇宙中的每一对资产,我们计算它们每日回报之间的皮尔逊相关性和它们每日回报之间的信息调整相关性,我们在散点图中绘制一个对另一个,我们得到下面的图表。

Relation between Pearson’s correlation and information-adjusted correlation for S&P 100 stocks and 60 of the most liquid U.S. futures. Information-adjusted correlation are estimated using the maximum-entropy approach described in our Yellow Paper.

我们来分析一下图表。

观察 1: 我们看到皮尔逊相关性越接近 1(分别为。-1),信息调整相关性越接近 1(分别为-1).这很直观。皮尔逊相关性捕捉到了对应于相同时间的回报之间的线性关联。这种特定形式关联的有力证据 确实暗示了 潜在时间序列回报之间关联的有力证据,这就是信息调整相关性所捕捉到的。

观察结果 2: 然而,我们看到,信息调整相关性不会像皮尔逊相关性那样变为 0。直觉上,缺乏对应于相同时间的日收益率之间线性关联的证据(即弱皮尔逊相关性) 通常并不意味着日收益率的两个基本时间序列之间缺乏关联的 证据。这在联合高斯白噪声的特殊情况下是正确的,但在一般情况下肯定不是。一般而言,可能存在其他形式的关联(例如,非线性关联、时间依赖性等。)将被信息调整相关性而不是皮尔逊相关性捕获。

上面的散点图明显偏离 y=x 线的事实是充分的经验证据,表明 i.i.d .高斯假设对美国股票和期货的日收益率不成立!

***主要观察:*你看到纵轴上那些皮尔逊相关为 0 的配对了吗?都没有 0 信息调整相关性!流动性交易所交易美国资产之间 0 的皮尔逊相关性可以隐藏高达 0.3 的“真实”相关性,这只能通过非线性(即厚尾)或时间相关性(即蝴蝶效应)产生,这两种情况都可能是黑天鹅事件的来源。

基本上,线性 i.i.d .因素模型不能准确捕捉美国股票和期货的流动性风险!

信息调整投资组合 Beta

正如在第一部分中所讨论的,一个投资组合的(CAPM 的)β可以如下获得

Beta of a portfolio relative to the market

通过用信息调整相关性代替皮尔逊相关性,获得了这种度量的简单概括,以捕捉投资组合的收益和市场的收益之间的非线性和时间相关性。我们称由此产生的度量 为信息调整的投资组合 beta

Information-adjusted beta of a portfolio relative to the market

以上讨论的一个直接后果是, 一个信息调整后 beta 为 0 的投资组合 具有独立于市场的收益率时间序列,因此 是真正独立于市场的真正的市场中性 **

最后的话

在我们的黄皮书中,我们介绍了皮尔逊相关性的一种信息论替代方法,即 信息调整相关性 ,它以一种无模型的方式完全捕捉了时间序列收益率之间的非线性和时间相关性。

我们使用信息调整相关性来构建投资组合的 CAPM 贝塔系数的替代方案,即 信息调整贝塔系数 ,它捕捉投资组合和市场之间的任何关联(线性和非线性,同时,或跨时间)。

我们说明了资产回报的独立同分布高斯假设与美国股票和期货的经验证据不一致,这证明了信息调整替代方案的实际重要性。

至关重要的是,我们说明了皮尔逊相关性、CAPM 的贝塔系数和其他独立同分布线性因子模型可以隐藏大量的金融风险,这些风险将显示为黑天鹅事件。

区块链和人工智能

原文:https://towardsdatascience.com/the-blockchain-and-ai-fbfa691f10e0?source=collection_archive---------0-----------------------

区块链是一项新的技术发展,最近受到了很多媒体的关注。事实上,据报道,虽然 2016 年是区块链的概念验证年,但 2017 年将是我们看到区块链技术在生产中实施的一年。那么,区块链是什么,为什么受到如此多的关注,为什么是现在?

区块链是比特币的底层技术,这是一种大多数人都听说过的数字加密货币。它是在 2008 年由一个叫中本聪的人或一群人发明的——直到今天,没有人真正知道他或他们是谁。但区块链能做的远不止管理比特币。事实上,作为一个分布式数字账本,它可以管理几乎任何类型的交易,这就是它的威力所在。

它的设计目标是加速和简化交易的记录方式。任何类型的资产都可以在完全分散的系统中使用区块链进行交易。在区块链,信任不是由银行、政府和科技公司等强大的中介机构建立的,而是通过大规模协作和聪明的代码建立的。结算和清算时间缩短至几秒钟。分布式账本在世界各地的数千台计算机上复制,并通过强大的加密算法保持安全。这项技术极具颠覆性,最终可能会刺激公司甚至政府工作方式的新变化。

区块链提供了引入新产品和服务、降低现有服务成本和大幅减少交易时间(从几天到几秒)的机会。

有些人甚至说,这可能是启动下一个谷歌或脸书的技术!

风险和挑战包括安全性、环境影响、设备昂贵和互操作性。比特币和以太坊加密货币都遭到了黑客攻击,尽管每次都采取了新的安全措施来消除漏洞。

运行这些大型网络所需的能源会对环境造成影响。运行区块链网络需要昂贵的设备——想想数据中心。可能会有许多区块链,因此互操作性成为一个中心问题,与其他银行和合作伙伴的区块链技术合作的能力至关重要。

区块链应用程序的示例包括但不限于:

法律协议(合同)

金融

  • 加密货币——电子现金的点对点版本
  • 其他资产类别(债券、商品等。)
  • 为了降低成本,瑞士瑞信银行已经和区块链的初创公司进行了 10 次概念验证

自动驾驶汽车

  • 运输基本设施

住宿

  • 酒店、公寓、智能锁

能源网

物联网

  • 万物互联需要万物分类账

供应链管理

尚未想到的事情

区块链即服务

IBM 和微软的区块链即服务(BaaS)产品,以及开源标准组织 Hyperledger、R3 和 EEA 的创建(许多企业成员已经注册),进一步证明了区块链将继续存在。

当我们开始将人工智能和区块链融合成一个强大的原型时,会发生什么?

我们拥有区块链理工大学承诺的近乎无摩擦的价值交换,以及人工智能加速分析海量数据的能力。两者的结合标志着一个全新模式的开始。我们可以通过使用管理链的人工智能代理来最大化安全性,同时保持不变。随着越来越多的公司和机构采用基于区块链的解决方案,以及更复杂、潜在关键的数据存储在分布式总账中,对人工智能技术可以提供的复杂分析方法的需求越来越大。

道富银行正是通过发布基于区块链的指数来做到这一点的。使用区块链存储数据并使其安全,他们使用人工智能分析数据,同时保持数据安全。道富银行报告称,64%接受调查的财富和资产经理预计他们的公司将在未来五年内采用区块链。此外,49%的公司表示,他们预计将采用人工智能。截至 1 月,道富银行有 10 个区块链概念验证项目正在进行中。

IBM 沃森也正在通过沃森物联网集团将区块链与人工智能合并。在这种情况下,人工智能区块链让联合各方就设备的状态达成一致,并根据智能合同中编码的语言做出决定。使用区块链理工大学,人工智能软件解决方案可以自动实现。风险管理和自我诊断是正在探索的其他用例。

总之,人工智能正与区块链技术相结合,以安全地分析数据并做出预测。创业公司和公司目前都在运行 POC。包括 IBM 和微软在内的主要云提供商已经将人工智能区块链作为服务提供。未来,几乎每笔交易都可以在区块链技术上运行。

在我们看到广泛采用区块链技术之前,必须克服一系列经济、法律、监管和技术障碍,但先行者正在取得令人难以置信的进展。在接下来的几年内,你的数字生活的大部分可能会开始在区块链基金会上运行——你可能甚至没有意识到这一点, PC Mag,2017 年 2 月。

常春藤数据科学公司为金融科技领域的人工智能提供沉浸式训练营(8 周,15000 美元)和晚间课程(8 周,5000 美元)。下一次训练营将于 4 月 27 日在纽约华尔街开始。加速你向人工智能领域的职业转型——现在就通过info@ivydatascience.com联系我们,或者访问我们的网站www.ivydatscience.com申请!

参考文献:

区块链和人工智能在金融科技中的地位http://news . crowd valley . com/news/state-of-区块链和人工智能在金融科技中的地位

道富银行押注人工智能可以帮助区块链货币化http://www . coin desk . com/Street-Street-is-Betting-AI-Can-Help-Monetize-区块链科技/

IBM 的新沃森中心将区块链与人工智能融合在一起http://www.coindesk.com/ibms-asia-watson-blockchain-ai/

区块链:改变世界的隐形技术http://www . pcmag . com/article/351486/区块链-隐形技术-改变世界

微软和 IBM 着眼于下一个云前沿:区块链即服务http://www . pcmag . com/article/345899/Microsoft-and-IBM-Set-Sights-on-the-Next-Cloud-Frontier-blo

区块链的影响超越了金融服务——HBRhttps://HBR . org/2016/05/the-Impact-of-the-the-the-the-America-Beyond-Financial-Services

监督学习和非监督学习的模糊界限

原文:https://towardsdatascience.com/the-blurry-lines-of-supervised-and-unsupervised-learning-b8a2aa04c8b0?source=collection_archive---------14-----------------------

自我监督、半监督和弱监督

当你进入机器学习领域时,你会很快听说监督学习和非监督学习。解决两种不同类型问题的两种不同方法。

由于机器学习,尤其是深度学习正在快速发展,事情变得更加复杂。有人监督和无人监督之间的界限似乎变得模糊了,目前有三种新的学习方式越来越受欢迎。在开始新的内容之前,让我们简要地浏览一下通常的两个疑点。

监督学习

监督学习就是寻找一个映射,将一组输入特征转换为一组预定义的输出特征。换句话说,我们明确地告诉模型,我们想要为训练数据预测什么。监督学习带来的问题是,我们需要手动标记我们的数据,以便为每个样本定义输出空间。

无监督学习

在无监督学习中,我们也对找到到输出空间的映射感兴趣,但是我们不知道这个输出看起来像什么。或者至少,我们不会将这些信息输入到算法中。无监督学习最常见的例子是聚类,其中我们根据样本最明显的特征将样本分组。

自我监督学习

自我监督学习指的是一种标签可以自动生成的方法。架构本身和学习过程是完全监督的,但我们不需要手动标记训练数据的步骤。

示例 1:自动编码器

这方面的一个经典例子是输入和输出数据完全相同的自动编码器。其架构的目的是首先将输入压缩为密集格式,然后重构原始信号。通过这样做,自动编码器学习特定于问题的有损数据压缩,这有助于特征提取或数据减少。

示例 2:图像超分辨率

另一个例子是图像超分辨率,其中我们放大图像,同时试图基于语义内容重建新的像素信息。如果你想为这样的问题建立一个数据集,你所需要的就是一个未标记图像的集合。要给它们加标签,你可以缩小原始图像的尺寸,并把它们作为你的输入。输出将是原始大小的图像。在这种情况下,您不需要手动标记任何内容。您从未标记的训练数据中自动生成了已标记的训练数据。

半监督学习

当你的训练数据只有部分标注时,半监督学习就发挥作用了。你会在网上找到很多数据集,除了带注释的样本之外,你还会得到其他没有标注的数据。因为所有数据都是好数据,这可能有助于您改进模型。

示例:伪标签

伪标注是为我们没有标签的数据预测标签,并使用这些预测作为基础事实标签来扩展数据集的过程。虽然这可能会在我们的数据中引入噪声,但实验表明,这有助于提高模型的准确性。如果你对此感到惊讶,你并不孤单。

弱监督学习

弱监督学习指的是一种模型,该模型根据它被训练的标签来预测附加信息。你可以认为这是监督学习之上的无监督学习。

示例:从分类标签中分割

假设您正在训练一个分类器来区分图像中某处包含的不同类型的对象。CNN 将学习为每个类创建热图,在那里它期望该对象在帧中。这样它就可以比较一个物体与其他物体的面积和可能性。虽然我们只根据整个帧的真实信息来训练网络,但我们也可以获得对象在帧中所处位置的信息。

-

你会发现这些术语到处都有不同的定义。有些似乎不准确,因为它们已经过时,有些似乎结合了我明确区分的术语,还有一些陈述了我完全不同意的观点。如果你不同意我的观点,请留下你的评论。

作为神经网络的大脑:这就是我们无法相处的原因

原文:https://towardsdatascience.com/the-brain-as-a-neural-network-this-is-why-we-cant-get-along-bd94bc7e49cc?source=collection_archive---------11-----------------------

几个月前,我和我的同事们进行了一次谈话,并注意到一些奇怪的事情,这些事情改变了我对政治的看法,也改变了我自己的想法。

今天的话题是自省和政治。我们互相问了一些问题,比如,“作为一个自由主义者,你认为你的盲点是什么?”,以及“作为一名女权主义者,你的呢?”我忘记了时间——在这种情况下我经常这样做——在我意识到之前,已经过了凌晨 1 点,感觉我们才刚刚开始揭开世界问题的最初几层。

我们谈话的奇怪之处不在于话题本身。我喜欢激烈的哲学对话,这种对话无处不在,无处不在,我可能拥有的比我应该拥有的更多。不,奇怪的是我们讨论这个话题时使用的语言。

因为我们每个人都有机器学习的背景,所以我们分享了一个共同的词汇——其中包括像“决策面”和“过度拟合”这样的技术术语。随着我们整晚更深入地探索我们的偏见和观点,很明显,这个不寻常的词汇让我们对自己的思维过程获得了非常强大的洞察力。

在某些方面,这实际上很有意义:最成功的机器学习算法是神经网络,它们的结构和功能明显受到大脑的启发。因此,毫不奇怪,机器学习的词汇非常适合于提供关于我们如何思考或不善于思考世界问题的见解。

我想在这里与你分享其中的一个见解。还有很多其他的,但是你可能有其他的事情要做,如果我明天早上要赶火车的话,我真的需要在午夜之前完成这篇文章。

我们的大脑是一个神经网络

让我们把大脑想象成神经网络的集合。我们将想象这些网络中的每一个都负责做出(至少)一种类型的预测。

现在让我们想象一下,有一次城市选举,我们需要选择我们支持哪个候选人竞选市长。根据我们正在使用的模型,将会有一个神经网络负责做出有关政治的决策。

这个神经网络将接受各种输入:我们朋友的意见、我们看过的任何推文、我们看过的竞选广告、我们听过的播客等等。它将把我们的政治观点作为它的输出:我们认为哪个政党是“好”的,我们期望哪个候选人当选后表现最好,我们的税率应该有多高,等等。等。本质上,这个神经网络编码了我们的政治“世界模型”。

为了简单起见,让我们假设它只有两个输出:1)如果我们最喜欢的候选人(我们称她为简·史密斯)当选市长,她是否会做得很好,以及 2)哪个政党是“好”的政党。

这是一个大概的样子:

***先不说:**注意,这个模型的两个输出都建立在同一个底层模型之上。为了确保我们世界观的内在一致性,这是一个很重要的理想化。如果输出 1 和输出 2 是由完全独立的神经网络生成的,那么我们可能会遇到明显的矛盾,在这种情况下,我们在做出一种政治预测和做出另一种预测时会应用不同的规则。

假设我们预测简·史密斯会做得很好,但是后来证明我们的预测是完全错误的。如果我们完全理性,我们的下一步将非常简单:我们将通过我们的模型反向传播,调整其权重,以便下次我们遇到像 Jane 这样的候选人时,我们会更加怀疑。

但是这种反向传播也可能有其他后果。具体来说,它可能也会影响我们对哪一方是正确的预测。

现在,一个完全理性的人可能会说,“那又怎样?如果我不得不重新评估我的党派关系以适应事实,那就这样吧。”

但是人类不是理性的。我们深深地属于部落,我们中的许多人深深地认同我们的政治。在许多情况下,社会压力和条件作用直接影响与输出 2(我们党的从属关系)相关的损失函数,并要求输出 2 呈现某个特定值。

例如,语句“我是共和党人”必然要求输出 2 的值为“共和党是对的”。同样,“我是民主党人”是一个承诺,以确保输出 2 始终是“民主党是正确的”。

值得花点时间思考一下这种约束的后果。正如我们将看到的,通过这样做,我们可以学到很多非理性人类行为背后的数学知识。

过度契合=固执+现实

让我们假设简·史密斯是我们最喜欢的政党的成员。为了保持中立,我们称之为紫色党。让我们也假设我们是一个党派迷,有足够的社会和其他压力迫使我们支持紫色党,我们不愿意在我们的党派归属上让步。

在这种情况下,我们对简·史密斯在任期间表现的回应将是一种受约束的优化。一方面,我们显然有东西要学,因为我们支持简,而事实证明她终究不适合这份工作。另一方面,我们不能以这样一种方式更新我们的权重,以妥协我们的政党偏好。

使用我们之前的图片,这看起来是这样的:

然而,事情是这样的:根据我们的模型在开始时所处的状态,我们可能很难更新我们的权重,以便正确预测简在担任市长时的失败,而不在此过程中破坏我们亲紫色政党的立场。

如果发生这种情况,我们能做什么?我想到了一个选择:也许我们需要做的就是给我们的模型增加一些自由度,来绕过这个约束!

我认为,这正是我们所做的:我们不改变我们的党派关系或我们的世界观,而是简单地增加重量,并允许我们自己通过过度适应来保持产量 2:

过度适应是想要鱼与熊掌兼得的自然结果:如果我们要固执地坚持紫色党总是正确的,但我们也希望能够证明他们的候选人的糟糕表现,我们所能做的就是给自己更多的工作自由度。

过度合身是什么感觉?

到目前为止,我已经从理论上介绍过拟合。但是很难想象过度拟合实际上是如何在我们的思维中表现出来的,所以我们可能应该看一个具体的例子。

让我们回到简和她当市长时糟糕的工作上来。如果我们要过度适应这种情况,我们需要为我们的模型发明一些新的特征(也许是一些新的输入),让我们能够解释她是如何失败的,而不会得出紫色党需要改变政策的结论。

这些特征可能是什么样的?在理想的情况下,它将是我们可以制造的东西,但不能被反驳或挑战。勾选所有这些框的一个很好的选择是读心术:我们可以想象简·史密斯的精神状态,并调整它,直到它让我们得到我们想要的两个结论:1)简·史密斯是一个糟糕的市长,2)紫色党仍然很棒。一个简单的方法是这样说,“当然,她是一个紫色的党员,但是简·史密斯从来没有真正的相信他们的平台。所以你不能根据她的行为来判断紫党。”

哲学迷可能会认为这只是“没有真正的苏格兰人”谬论的一个例子。据我所知,“没有真正的苏格兰人”的谬论正是过度适应。这是一个简单的“是的,但是”的回答,旨在保留我们现有的偏见,而不损害我们根据需要发明新功能来解释现实的能力。(“是的,但简不是真正的紫色党候选人,因为【发明了允许过度拟合的功能】。”)

通过假设我们能够了解简·史密斯的精神状态,我们就能够随意拉动读心术杠杆,以确保我们从我们的世界模型中获得我们想要的结果,而不会牺牲我们解释我们观察到的她的候选人资格的能力。这个策略很棒,因为除了简·史密斯,没有人能够反驳我们,即使她反驳了,我们也可以告诉自己,“如果她不诚实,她就会这么说。”

一点内省可能会揭示出我们实际上有一个过拟合探测器硬连线到我们身上。这是因为过度拟合通常与一种感觉有关:那种 找借口的感觉。毕竟,如果不是我们引入到我们的世界模型中的一个新特征,允许我们在保留我们的教条的同时解释我们的观察,那么“借口”是什么?

如何对抗过度拟合

如果你想成为一个更理性的人,你可能会得出结论,你需要直面过度适应。您可能会认为,您可以在自己的头脑中解决过度拟合问题,就像您在数据科学项目的环境中一样:建立一个验证集,并根据它检查您的预测。

在实践中,这可能意味着对某些事件的发展方式做出预测,并让你的世界模型对这些预测的准确性负责。

但是这并不总是有效的,因为出于完全合理的原因,不得不为你的世界模型添加特性并不罕见。事实上,在很大程度上,当我们了解一个新问题,或一个新领域时,就会发生这种情况:我们在越来越高的维度上思考它,同时增加了我们模型的复杂性。

所以在一天结束的时候,你最好的选择可能就是密切关注你的思维过程,当你进入找借口的模式时,试着抓住你自己。因为这是过度拟合的迹象,这是你的世界模型可能需要多一点调整的第一个迹象。

如果你想聊天,在推特上用@jeremie charris联系我!

对数据科学就绪级别的要求

原文:https://towardsdatascience.com/the-call-for-a-data-science-readiness-level-3355d6d8a1bb?source=collection_archive---------11-----------------------

NASA Technology Readiness Levels

20 世纪 70 年代,美国宇航局开发了技术成熟度等级(TRL) 量表来衡量尖端技术的研发。其目的是在收购过程中评估技术的成熟度,从 1 到 9 分不等,9 分是最成熟的。TRL 支持对不同类型技术的技术成熟度进行一致、统一的讨论。

这一概念为寻求许多政府机构资助的研究人员所熟知,但似乎在其他工程应用中失去了青睐。随着人工智能、机器学习和数据科学领域不断增长的前沿发现,本博客将探索如何使用这一尺度来衡量进展,并通过将数据科学项目与 TRL 尺度上的价值联系起来,指导数据科学项目的成功。

这种尺度在站点可靠性工程和数据科学中的应用,最初是由 Emily Gorcenski 在关于与数据科学全面融合:使用技术准备度的精彩演讲中提出的。如果你有 30 分钟,她的谈话绝对值得你花时间!

她很好地消除了“全栈”或“独角兽”数据科学家的神话,以及您实际上如何需要一个“全栈”团队和专门角色映射到数据消费周期和 TRL 的每个阶段。她借鉴了站点可靠性工程的原则,并整合了 TRL,以构建一个可靠的计划来界定和执行数据科学工作。

值得思考的一些要点:

Data Science Readiness Levels mapped

发现与交付

在宏观层面上,数据科学项目实际上只有两种类型。发现/研究与交付。

在一个发现项目中,你在 1 到 4 的 TRL 范围内工作,并关注诸如“我们能解决陈述的问题吗?”。整个项目都在探索新的算法、数据集、技术等。看看陈述的问题是否可解。这些类型的项目通常被数据驱动的团队孤立,并且可能没有一个负责的项目发起人来交付项目的成果以从中提取真实的价值。

在分娩项目中,您的工作地点在 TRL 5 至 9 英里范围内。这些项目必须有一个专门的项目发起人,该发起人有权将项目成果转化为现有/新的工作流程/流程,以“将数据转化为金钱”。一旦我们有权力实现一个结果,数据科学团队就可以无缝地利用这个结果,并捕获反馈环来构建一个持续学习的模型。

如果您曾经涉足过数据科学项目,您会发现这两类项目之间的鲜明对比。然而,大多数分析工作流都是这样对待它们的!使用项目附带的 TRL 量表有助于为参与项目的每个人设定适当的期望。

结果比“将数据转化为金钱”更精细

虽然最终目标总是回到美元,但这些应该只关注处于“交付”阶段的项目(即 TRL 5-9)。当开始一个“发现”项目(即 TRL 1-4)时,您应该对结果如何被一个确定的赞助方消耗有一个愿景,但它不是该阶段项目的主要焦点。在某些情况下,您甚至可能还没有一个投入的赞助者购买这个项目!要求数据科学家团队量化这些早期 TRL 中项目的投资回报率是不合适的,也是徒劳的。

即使项目进入“交付”阶段,数据科学团队也可以帮助项目发起人量化结果的价值,以及如何将其转化为业务价值和/或货币化。但是,这方面的主要驱动力仍然必须来自项目发起人。“将数据转化为金钱”的最佳例子来自嵌入式数据科学团队,因为他们都是主题专家,并且能够提供结果。

对于每个工作周期,要知道你的准备程度从哪里开始,并为它的结束设定现实的目标

在我有幸参与的大多数数据科学团队中,他们喜欢支持敏捷方法并使用短期 Sprints 进行项目执行。然而,sprint 计划中缺少的是关于我们在哪里,以及在 sprint 结束时我们将在哪里的清晰沟通。

我见过 DMAICCRISP-DMCAP 以及许多其他尝试过的方法,但没有一个像 TRL 量表那样简洁地抓住了短跑的本质。而不是详细说明你的项目当前所处的阶段的循环性质,以及它如何在任何时候恢复到先前的阶段;向赞助商传达我们目前在 TRL 1,并希望在这个冲刺阶段结束时在 TRL 3,这要容易得多。

拥有 TRL 等级也清楚地设定了对项目结果感兴趣的所有各方的期望。以及他们如何在堆栈中向上移动项目的清晰路径。

尽管任何数据科学团队都可以在 TRL 协议 4 之前执行发现和探索性分析,但这需要赞助商做出更多投资和硬性承诺。光靠数据科学只能解决一半的数据货币化工作。TRL 等级的可视化在传达任何数据科学项目的协作本质方面做得非常好。

在 TRL 5–7 计划中,我们开始将数据科学项目的成果集成到一个确定的工作流中,以增强决策者的流程。这可以是完全自动化的,或者你可以得到帮助人类工人的结果。工作流和流程是需要由发起人确定的项目,以及来自那些消费结果的人的承诺,他们接受过培训并且能够正确地解释结果。

没有赞助商和消费者的承诺,就不可能超越 TRL 协议 4,也不可能从数据中实现货币价值。通过将这些期望与 TRL 量表联系起来,它成为了与你的赞助商合作的一个强有力的工具。

不同的准备程度需要不同的技能

Machine Learning Engineer

每个 TRL 都需要不同的技能来完成手头的任务。确保你有正确的团队来解决这个问题。在工作周期开始时,让你的目标 TRL 需要的赞助商和利益相关者参与进来。

这就是数据科学团队的团队方面真正发挥作用的地方。伟大的领导者会在适当的水平上利用个人的优势,并使用 TRL 量表作为个人/职业发展的路线图,帮助你找到自己的弱项。虽然没有“全栈”数据科学家这样的东西,但你仍然可以通过培训成为一名数据科学家。你从其他 TRL 那里了解的越多,你就能为这个项目增加越多的价值!

这个过程不是单调的

与其他项目方法类似,随着项目的进展,我们可以上下移动 TRL 尺度。仅仅因为我们在一次冲刺中达到了 TRL 5,并不意味着我们不能在下一次冲刺中回落到 TRL 3。因为大多数机器学习算法和云技术都在不断发展,有时我们需要重新评估之前的预期,并做出相应的调整。

失败是正常的!一些工作有一个最高准备水平

失败是正常的。事实上,我会把这个想法进一步阐述为“失败是意料之中的”在我的职业生涯中,我变得愤世嫉俗,以至于我通常带着这样的心态对待每个项目,即它根本不适合数据科学。有时项目只是一个想法,没有任何可用的支持数据。更糟糕的是,这可能仅仅是一种在仪表板上添加“机器学习”的尝试。除了教育赞助商什么是可能的,我们还可以教育他们如何获得部署的解决方案,以利用 TRL 规模实现其数据的价值。

有了 TRL 规模,现在就变成了说明项目在规模上所处位置的问题。这个晴雨表清楚地传达了项目在当前数据集、技术、工作流、流程等条件下能走多远。如果项目停滞在某个水平上,并且如果发起人在项目上投入足够多,他们会发现消除障碍的方法来得到团队需要的东西。否则,团队可以干净利落地脱离,继续下一个项目。不是每个项目都会达到完全成熟和部署。

后续步骤

使用 TRL 量表解决了在数据科学项目领域工作的许多挑战。如果你正在读这篇文章,我鼓励你在下一个项目中使用这个量表,看看它会引发什么类型的讨论!

机器学习的多变模型

原文:https://towardsdatascience.com/the-capricious-models-of-machine-learning-23cd2f36dbbe?source=collection_archive---------5-----------------------

Photo by Marten Newhall on Unsplash

这个标题充分说明了机器学习中模型拟合的问题。伙计,统计学对建模有着非常不同的看法,这与我们的认知并不完全一致。

T 何发出:

机器学习中的这些模型有一个很好地拟合数据的问题。这两个问题是:

O 拟合:模型很好地吸收了数据,并完美地拟合了数据,有效地使平均误差比例非常小,几乎完美。听起来像是天赐之福,但事实并非如此。我们不希望我们的模型过于完美。数据集就像腐败的政客一样,隐藏着一些肮脏的东西。它们通常既不是线性的,也不是弯曲的。它们有某种粗糙的形状,但几乎从来没有完全符合几何形状。数据中一定有一些值与其他值相差太大。例如,考虑机器学习社区中使用的最喜欢的数据集:房价数据集。现在假设数据集的形状大致随大小线性增加。但是有一个特定的房子,它以前的房客自杀了,因此被当地人归类为“闹鬼”。对于这样的房子来说,价格太低了。再想想另一栋房子,它曾是某个死于车祸的非常受欢迎的电影明星的家。这样的房子会有很好的市场价值。这两种数据是我们的数据集的异常,记录在某个特定的区域(或 x 轴)值。我们不希望我们的模型从这些数据中做出推论,因为当我们预测不同社区的房价时,没有必要预测相同区域的类似房屋会闹鬼或以前由名人拥有。我们希望尽量减少模型对这些异常的拟合。为了做到这一点,我们需要找到完美数量的叶节点(如果使用决策树)或神经元(如果使用深度学习)。

nderfitting:顾名思义,模型无法从数据中吸取任何东西。因此没有学到我们想要的那么多。(哑巴模特!).为了形象化这个场景,你可以想象一下,房价曲线在某一点之前是线性增长的,但是从这一点开始急剧上升,导致该地区的房价开始变得更加昂贵。一个很好的拟合是,我们的回归线几乎是直线,然后向上弯曲。一个哑拟合将是回归线始终是线性的,完全忽略上升曲线,直接在它下面。或者甚至是一条直线,从起点一直走,穿过曲线。

下图直观地展示了这一场景。每种情况下的橙色线代表数据的最佳拟合(这是我们希望达到的)。左侧第一幅图像中的蓝线描述了模型的欠拟合情况。最右边图像中的蓝线描述了模型如何过度拟合。中间的图像描述了一个最佳匹配。我们可以观察到拟合没有完全覆盖橙色线,但这没关系。(在数据建模中,这种程度的误差总是意料之中的)

Source: Scikit-Learn

为了解决这两个主要问题,使用绘图可视化数据是很重要的。(哦,很美的情节!)

同样重要的是,我们要找到节点的最佳值,以便模型与数据达到最佳匹配。

有了神经网络,这个问题变得非常复杂。但值得庆幸的是,我们有许多高级库( Keras Caffe )来抽象所有远离我们的工作(对于大多数通用时间)。

Source: https://www.neuraldesigner.com

下面是一段代码,它包含了一个函数,我们用它来寻找决策树中最适合模型的节点数。当我们运行这个脚本时,我们可以观察到它不断地遍历节点数并打印出值。然后,我们可以使用视觉检查来决定我们应该在决策树中使用的最佳拟合的正确节点数,因为我们可以观察到平均误差在开始时很高**(节点数较少,拟合不足),最终继续减少到点(最佳点),然后返回增加(节点数过多,拟合过度)。**

一些基本的解释已经作为注释提供。

#First, import all the libraries. Ok, this is too formal
import pandas as pd
from sklearn.tree import DecisionTreeRegressor
from sklearn.metrics import mean_absolute_error
from sklearn.model_selection import train_test_split#We import the dataset that we will be using. You can import any dataset you want that probably have 5-6 columns with numerical data(preferably something to do with housing prices)#The data will be imported in the form of a pandas dataframe. Pandas provide an excellent dataframe for all statistical application by formatting all the data in a spreadsheet like tablemy_data = pd.read_csv('*The file destination here without asterisk*')# print the column names of the dataset as we'll be calling names in a while
print(my_data.columns)#Now select the columns that we'll be using for making our decision tree and form a new dataframe with those values
interest_data = my_data['col1','col2',...,'coln']
interest_data.describe()
X = interest_data#Load the column that we need to predict into a new variable called y(maths!)
y = my_data.col_name#Define the data model that we'll be using, in this case, decision tree regressor
data_model = DecisionTreeRegressor()#Fit the data on the model
data_model.fit(X,y)#It's not good to use the same values for testing the dataset so we use the train_test_split function by Scikit-Learn to randomly split the dataset into a training set and validation set
train_X, val_X, train_y, val_y = train_test_split(X, y,random_state = 0)#Fitting the data model using the training values
data_model.fit(train_X,train_y)#We use the validation set we splitted earlier to check the accuracy of our model by printing the MAE of the predictions
predictions = my_model.predict(val_X)
print(mean_absolute_error(val_y, predictions))#Now, to fit the entire model optimally, we'll have to change the number of leaf nodes to find the optimal requirement for which the MAE would be the lowest. For this, we develop one function to calculate the MAEdef get_mae(max_leaf_nodes, predictors_train, predictors_val, targ_train, targ_val):
    model = DecisionTreeRegressor(max_leaf_nodes=max_leaf_nodes, random_state=0)
    model.fit(predictors_train, targ_train)
    preds_val = model.predict(predictors_val)
    mae = mean_absolute_error(targ_val, preds_val)
    return(mae)#Now take some random values in an array that denote the number of leaf nodes. We will be using these values to test the fit so try out a good amount of them 
n = [10,50,100,200,400,500,800,1000]#We define another function to iterate over all the leaf node values we described above and find the optimal nodes for which MAE would be the least.def optimal_nodes(n, train_X, val_X, train_y, val_y):
    on = 1000000 #Just a really high random value
    leaf = 0 #The variable which will save the minimum nodes we need
    for max_leaf_nodes in n:
        my_mae = get_mae(max_leaf_nodes, train_X, val_X, train_y, val_y)
        if my_mae < on:
            on = my_mae
            leaf = max_leaf_nodes
        print("Max leaf nodes: %d  \t\t Mean Absolute Error:  %d" %(max_leaf_nodes, my_mae))
    return(leaf)#By running the above function, we derive the optimal leaf nodes we need in our decision tree to have the least MAE. For that number of nodes, we can say that the model fits optimally.print("The optimal number of nodes for our model would be: "+str(optimal_nodes(n, train_X, val_X, train_y, val_y)))

如果你需要更好地理解拟合的概念,请参考伊恩·古德菲勒写的这本关于深度学习的优秀书籍:深度学习书籍,可在线免费获得。

电影的世纪

原文:https://towardsdatascience.com/the-century-of-movies-12a4b5a4c004?source=collection_archive---------3-----------------------

最初,这只是一个使用 d3 的数据可视化任务。令人惊讶的是,我实际上从我们从头制作的图表中发现了许多故事。

原始数据是一个文件,包含 5000 多部电影和许多功能,如 IMDB 评分、标题年份、预算、脸书喜欢等。所有的功能都在下面得到了安慰。

我选择了 IMDB 评分,冠军年,预算,FB 喜欢和流派,这是最后的作品。

我们可以从中讲述很多故事。

先说电影质量,几乎可以从每个圈的垂直位置表现出来。1977 年以前的电影似乎有相对较高的声誉。有些人可能会认为“电影业对待电影不那么认真了”,这是可能的,我们也需要考虑一下,是不是因为最近人们对电影的期望更高了,因为投入了更多的预算,高科技的应用,所以他们给了老电影相对较高的分数?此外,电影业的繁荣增加了一吨的电影,这些电影在后来的几十年里相对糟糕,拉低了这几十年的平均值。或者也许人们认为老电影更好,因为它们老了。

然后我们可以谈谈预算。前 60 年差别不大。那时候,电影预算都很低。我们可以看到在 1977 年至 1986 年的十年间有了急剧的增长。根据我们的调查,那是年轻群体开始被电影吸引的时候。像《星球大战》这样的电影获得了巨大的声誉和知名度。当更多的人去电影院时,制片人肯定会投入更多。还有,我们可以从体裁上看到,“冒险”和“科幻”开始跳出来。这些电影应该比“戏剧”和“爱情片”等类型的电影花费更多。另一件有趣的事情是,我们都认为平均预算肯定会越来越大。然而,最近几十年的预算比十年前少得多。我们假设的原因之一是,在这十年里有大量的电影,其中很多是低成本电影,这将降低平均预算。有可能在十年前,这个行业推崇高科技和花哨的显示器。十年后,人们更愿意倒着走,呈现更在乎故事和情感的东西。

下一个角色是脸书喜欢,我们可以看到“网络”时代是如何影响脸书喜欢的,因为相当数量的喜欢确实来自于电影实际制作时,粉丝只是喜欢页面来看预告片,更新等。我们还可以看到 facebook 喜欢和 IMDB 评分之间的关系。比如说。1937-1946 年和 1957-1966 年这十年的 IMDB 得分最高,与 2007-2016 年以外的其他十年相比,它们的颜色也更深。

最后一集是关于流派的。回溯到 1916 年至 1925 年,战争类型相当流行。随着时间的推移,现在我们几乎看不到它了。“浪漫”在 1927-1966 年间扮演了重要角色。当时也制作了许多浪漫电影,如《罗马假日》和《滑铁卢桥》。还有,一个有趣的事情是,二战期间“家庭”电影相对更受欢迎。我们也可以看到科幻小说从 60 年代诞生到 80 年代,然后变得相对模糊。

实际上,我们从这张图表中发现的比我们预期的要多,我相信还有很多可以探索的地方。

冷启动问题:如何打入机器学习

原文:https://towardsdatascience.com/the-cold-start-problem-how-to-break-into-machine-learning-732ee9fedf1d?source=collection_archive---------2-----------------------

我是一名物理学家,在 YC 的一家初创公司工作。我们的工作是帮助新毕业生进入他们的第一个机器学习角色。

很难被雇佣到你的第一个机器学习角色。这意味着我会被问很多类似这样的问题:现在,我做 x,我想成为一名机器学习工程师。我该怎么做?

根据 X 是什么,范围从非常难做的事情(物理、软件工程)到非常难做的事情(UI 设计、市场营销)。

因此,为了同时帮助每个人,我整理了一个进度,你可以从任何起点开始,真正成为一名机器学习工程师。我遇到的每一个 ML 工程师(没有在 T2 赛尔号或类似的地方读研究生)都经历过这种形式。

在你开始学习 ML 之前,你首先需要一些基础知识。

1.学习微积分

你首先需要的是多变量微积分(直到大学二年级)。

哪里学的: 可汗学院的微分学课程还不错。一定要做练习题。否则你只会跟着课程点头,什么也学不到。

2.学习线性代数

你需要的第二件事是线性代数(直到大学一年级)。

去哪里学: 瑞秋·托马斯(Rachel Thomas)的计算线性代数迷你课程针对的是想学 ML 的人。

**注:**我听过令人信服的论点,你可以跳过微积分和线性代数。我认识的一些人已经直接进入了 ML,并通过反复试验和直觉学到了他们所需要的大部分东西,结果证明他们还不错。您的里程会有所不同,但无论您做什么,都不要跳过下一步:

3.学习编码

你最不需要的是 Python 编程经验。你可以用其他语言做 ML,但是现在 Python 是黄金标准。

**去哪里学:**按照这个 Reddit 跟帖的置顶答案里的建议。你还应该密切注意包裹。这些经常出现。

关于良好的编程实践,我还有很多要说的,这里就不多说了。一句话:用好的测试和错误处理让你的代码清晰可见模块化

专业提示:如果你正在从头开始学习编码,不要费心去记住每一个命令。只需学会如何快速在线查找问题。而且没错,这就是专业人士做的

还有:学习 git 的基础知识。回报很快。

学习机器学习

现在你可以学习机器学习本身。2018 年,最好的地方之一是杰瑞米·霍华德的 fast.ai 课程,该课程以最先进的方式教授人工智能,课程平易近人。至少完成课程 1 ,最好是课程 2 ,完成所有练习,你将在建模方面领先于大多数行业从业者(真的)。

在过去的 6 年里,机器学习的大部分进展都是在深度学习方面,但这个领域还有更多。还有决策树、支持向量机、线性回归和一堆其他技术。随着你的进步,你会遇到这些问题,但是当它们出现的时候,你可能会学到它们。Python 的 scikit-learn 包是学习和使用它们的一个很好的集中地方。

构建个人项目

每个申请第一个 ML 职位的人都做过机器学习和数据科学方面的个人项目,所以你也应该这样做。但是把它做好是很重要的,我会在以后的文章中详细介绍。现在,我唯一要说的是:当人们展示个人项目时,我看到的最常见的错误是他们将众所周知的算法应用于 众所周知的数据集

这是一个错误,因为(1)机器学习招聘经理已经知道所有众所周知的数据集,以及(2)他们也知道,如果你展示一个项目,其中你将一个众所周知的算法应用于一个众所周知的数据集,你可能不知道如何做其他任何事情。

有些东西是很难自学的

事实是,很多让你鹤立鸡群的东西,是你自己很难学会的。在机器学习中,三个最大的是(1)数据准备,(2) ML devops,和(3)专业网络。

数据准备是您在处理真实数据时使用的技巧。这意味着处理异常值和缺失值。但这也意味着当你想要解决的问题还没有数据集时,你要自己收集数据。在现实生活中,您将花费 80%的时间清理和收集数据。在现实世界中,建模是事后的想法,工程经理知道这一点。

ML devops 就是你在云上运行你的模型所做的事情。租用计算时间是要花钱的,所以人们有时不会在他们的个人项目中这样做。但是如果你能负担得起,熟悉一下基础知识是值得的。从 PaperspaceFloyd 开始介绍在云上运行 ML。

诚实的工程师经常忽视人际关系网,因为他们认为他们应该仅凭自己的技能被录用。现实世界不是这样的,尽管它应该是这样的。所以要和人们交谈。我会在以后的文章中写更多关于这部分的内容。

请求帮助

有些步骤你自己很难做到。学校不擅长教授数据准备、ML devops 或网络。大多数人在工作中学习这些东西,或者如果幸运的话,从导师那里学习。很多人根本就没学过。

但是,在一般情况下,如何弥合这一差距呢?当你需要一份工作来获得经验的时候,没有经验的你如何获得一份工作?

这里有一个提议:如果你已经完成了 fast.ai 或同等课程,并且有几个你已经建立的个人项目,请随时与我联系,我会尽我所能给你提供你所缺少的建议。你可以在发邮件到找我。com,或者在 Twitter 上 DM 我( @_edouardharris )。

冷启动问题:如何建立你的机器学习组合

原文:https://towardsdatascience.com/the-cold-start-problem-how-to-build-your-machine-learning-portfolio-6718b4ae83e9?source=collection_archive---------0-----------------------

我是一名物理学家,在 YC 的一家初创公司工作。我们的工作是帮助新毕业生获得他们的第一份机器学习工作。

不久前,我写了关于的文章,你应该做些什么来获得你的第一份机器学习工作。我在那篇文章中说,你应该做的一件事是建立你个人机器学习项目的投资组合。但是我遗漏了如何实际做到这一点的部分,所以在这篇文章中,我将告诉你如何做到。[1]

因为我们的创业公司所做的事情,我已经看到了数百个个人项目的例子,从非常好到非常差。让我告诉你两个非常好的例子。

全押

接下来的是一个真实的故事,除了为了隐私我改了名字。

X 公司使用人工智能来提醒杂货店该订购新库存了。我们有一个学生,罗恩,他真的想在 X 公司工作。罗恩非常想在 X 公司工作,事实上,他建立了一个个人项目,100%致力于让他在那里面试。

我们通常不建议像这样全押一家公司。如果你刚开始,这样做是有风险的。但是——就像我说的——Ron真的想在 x 公司工作。

那么罗恩建造了什么?

The red bounding boxes indicate missing items.

  1. 罗恩开始用胶带把他的手机粘在一辆购物车上。然后,他开着手推车在一家杂货店的过道里来来回回,同时用相机记录下过道的情况。他在不同的杂货店这样做了 10-12 次。
  2. 一回到家,罗恩就开始构建一个机器学习模型。他的模型识别了杂货店货架上的空白点——货架上玉米片(或其他任何东西)不见的地方。
  3. 最棒的部分来了:Ron 在 GitHub 上,在完全公开的情况下,实时构建了他的模型。每天,他都会改进自己的回购协议,并在回购协议的自述文件中记录这些变化。
  4. 当 X 公司意识到罗恩在这么做时,X 公司被激起了兴趣。不仅仅是好奇。事实上,X 公司有点紧张。他们为什么会紧张?因为罗恩在不知情的情况下,在几天内,复制了他们专有技术的一部分。[2]

X 公司非常有能力,他们的技术在同行业中名列前茅。尽管如此,在 4 天之内,Ron 的项目引起了 X 公司 CEO 的直接关注。

试点项目

这是另一个真实的故事。

Alex 是历史专业,辅修俄罗斯研究(真的)。对于一个历史专业的学生来说,不同寻常的是,他对机器学习产生了兴趣。更不寻常的是,尽管他从未写过一行 Python 代码,但他决定学习它。

亚历克斯选择通过构建来学习。他决定建造一个分类器来检测战斗机飞行员是否在飞机上失去意识。亚历克斯想通过观看飞行员的视频来发现这一点。他知道当飞行员失去知觉时,人很容易通过观察来判断,所以亚历克斯认为机器也应该可以判断。

以下是亚历克斯在几个月的时间里所做的事情:

A demo of Alex’s G-force induced loss-of-consciousness detector.

  1. 亚历克斯在 YouTube 上下载了飞行员驾驶飞机的所有视频剪辑,都是从驾驶舱拍摄的。(如果你想知道,这里有几十个这样的片段。)
  2. 接下来,他开始标记他的数据。Alex 建立了一个 UI,让他滚动浏览数千个视频帧,按下一个按钮表示“有意识”和另一个按钮表示“无意识”,并自动将该帧保存在正确标记的文件夹中。这个标签非常非常无聊,花了他很多很多天。
  3. 亚历克斯为图像建立了一个数据管道,将飞行员从驾驶舱背景中裁剪出来,使他的分类器更容易专注于飞行员。最后,他建立了意识丧失分类器。
  4. 在做这些事情的同时,Alex 在社交活动中向招聘经理展示了他的项目快照。每次他拿出他的项目展示(在他的手机上),他们都问他是怎么做的,他建的管道,他是怎么收集数据的。但是他们从来没有抽出时间来询问他的模型的准确性,低于 50%。

当然,亚历克斯计划提高他的准确性,但他在得到机会之前就被录用了。事实证明,对公司来说,他的项目的视觉冲击力,以及他在数据收集方面的不懈努力,比他的模型实际上有多好更重要。

我说过亚历克斯主修历史,辅修俄罗斯研究吗?

他们的共同点是

是什么让罗恩和亚历克斯如此成功?以下是他们做对的四件大事:

  1. **罗恩和亚历克斯在造型上没花多少功夫。**我知道这听起来很奇怪,但是对于现在的许多用例来说,建模是一个已经解决的问题。在真正的工作中,除非你在做最先进的人工智能研究,否则你会花 80-90%的时间清理你的数据。为什么你的个人项目会不同?
  2. **罗恩和亚历克斯收集了他们自己的数据。**正因为如此,他们最终得到的数据比你在 Kaggle 或 UCI 数据库中找到的数据更乱。但是处理混乱的数据教会了他们如何处理混乱的数据。这也迫使他们比从学术服务器上下载数据更好地理解数据。
  3. 罗恩和亚历克斯制作了视觉上的东西。面试不是让一位无所不知的评委客观地评估你的技能。面试是向另一个人推销自己。人类是视觉动物。所以,如果你拿出手机,向面试官展示你做的东西,确保你做的东西看起来有趣是值得的。
  4. **罗恩和亚历克斯的所作所为看起来很疯狂。**这太疯狂了。正常人不会用胶带把手机粘在购物车上。正常人不会花时间从 YouTube 视频中剪辑飞行员。你知道谁会这么做吗?愿意不惜一切代价完成工作的人。还有公司真的真的想雇佣那些人。

罗恩和亚历克斯所做的可能看起来像是太多的工作,但实际上,这并不比你在真正的工作中所期望做的多。这就是全部要点:当你没有做 X 的工作经验时,招聘经理会寻找你做过的模拟做 X 的工作经验的事情。

幸运的是,你只需要在这个层次上做一两次项目——Ron 和 Alex 的项目在他们所有的采访中被反复使用。

因此,如果我必须用一句话来总结一个伟大的 ML 项目的秘密,那就是:用一个有趣的数据集构建一个项目,这个数据集需要花费明显的努力来收集,并使它尽可能具有视觉冲击力

如果你有一个项目想法,但你不确定它是否好——在 Twitter 上问我!我的句柄是 @_edouardharris ,我的 DMs 是打开的:)


[1]如果你想知道为什么这很重要,那是因为招聘经理试图通过查看你的履历来评估你。如果你没有记录,个人项目是最接近的替代品。

[2]当然,罗恩的尝试远非完美:X 公司在这个问题上投入的资源比他多几个数量级。但这是足够相似的,他们很快要求罗恩把他的回购私有化。

人工智能的冷启动问题

原文:https://towardsdatascience.com/the-cold-start-problem-with-artificial-intelligence-49938ed3f612?source=collection_archive---------4-----------------------

为什么公司在实施人工智能方面举步维艰,以及如何克服它。

Humans are still necessary…right?

如果你在过去的三四年里成为了一名数据科学家,并且你没有经历过 20 世纪 90 年代或 21 世纪初,甚至 20 世纪 10 年代的大部分时间,有时很难想象事情发生了多大的变化。如今,我们使用 GPU 驱动的数据库来查询数十亿行,而我们过去如果能够生成每日汇总报告就已经很幸运了。

但是,随着我们已经习惯于拥有数据和商业智能/分析,一个新的问题正在阻止热切的数据科学家将他们正在使用的算法应用于玩具问题,并将它们应用于实际的现实生活中的商业问题。其他智慧被称为人工智能的冷启动问题。在这篇文章中,我讨论了为什么公司在实施人工智能上挣扎,以及他们如何克服它。

从数据开始

任何想要利用人工智能的公司,无论是初创公司还是企业,都需要确保他们有实际有用的数据来开始。一些公司可能满足于其应用程序或网站生成的简单日志数据,而希望能够使用人工智能来增强其业务/产品/服务的公司,应该确保他们正在收集的数据是正确的数据类型。根据您所在的行业和业务,正确的数据类型可以是日志数据、事务数据、数字数据或类别数据,这取决于处理数据的人员来决定需要什么样的数据。

除了收集正确的数据,另一个重要的步骤是确保你使用的数据是正确的。这意味着这些数据真实地代表了所发生的事情。如果我想要所有支付交易的计数,我需要知道交易的定义是什么,它是发起的交易还是处理的交易?一旦我回答了这个问题,并确保组织同意,我可以使用它来工作。

随着 SCRUM 的广泛采用和频繁发布,公司不得不投入资源来确保数据的正确性。公司可能会添加新的数据源、对记录的数据产生影响的代码更改,甚至是 GDPR 或 PSD2 等外部影响,这可能会导致数据被更改,因为数据需要更加安全或以不同的方式存储。通过确保在每个过程中确保数据的正确性,只有这样,您才能进入下一个分析阶段。

SQL Query Result a.k.a. Raw Data

将数据转化为分析

尽管人工智能目前是每个人都在谈论的话题,但在我们到达那里之前,我们仍然必须采取一个中间步骤,这就是分析。我所说的分析,是指对数据或统计数据进行系统的计算分析。在大多数公司中,实现数据可视化的过程可能鲜为人知,但它对每个部门的影响是巨大的。

分析是数据或统计的系统计算分析。

公司需要确定哪些关键绩效指标(KPI)真正推动了业务的发展。在支付行业工作,我的 KPI 包括已处理收入、交易成本、利润、授权率、退款率、欺诈和许多其他为我提供管理业务绩效信息的指标。对于打车应用,KPI 可能包括收入、利润、平均接车时间、平均乘车时间、活跃用户和活跃司机。

从这些 KPI 中,公司可以决定业务用户需要什么类型的报告或仪表板来做出明智的决策,并自动对数据或统计数据进行系统的计算分析。

但是,随着数据量从 KB 增加到 TB,并且业务用户越来越多地查看数据的汇总报告和可视化,检测较小问题的机会大大减少。只有到那时,实施人工智能才能成为一项值得投资的时间和资源。

Executive Summary Dashboard — Looker

从分析到人工智能

确定了有助于引导业务的 KPI 后,人工智能可以用来改进这些 KPI。在这种情况下,人工智能是理性的代理,它使用算法来实现特定场景的最佳结果。

例如,支付行业的授权率对于大型商家来说非常重要,因为他们每天处理数百万笔交易,拥有最高授权率的 PSP 可以决定一笔交易的成败,或者在大型商家获得流量与否的情况下。

通过每天跟踪授权率,我们能够计算出我们的性能随时间的变化情况。因为我们的分析已经确定,通过不同的收单银行进行交易会导致两种不同的 KPI。我们可以使用人工智能来学习在哪个场景中一家收单银行的表现优于另一家,并自动将交易路由到表现最佳的收单银行。

由于我们实施的人工智能模型和逻辑对授权率有积极影响,因此相关的 KPI 也会受到影响。因为较高的授权率导致较高的处理收入,从而导致较高的利润。

公司与人工智能斗争的原因

那么公司为什么要纠结 AI 呢?我认为,技术的快速发展已经导致许多公司有点不知道他们应该专注于什么。从数据中心到云,从网络到移动网络到原生应用,从大数据到人工智能,这种转变对企业公司来说并不容易。尤其是首席财务官和首席技术官之间的讨论,他们一方希望降低成本,另一方希望拥有尽可能好的技术供自己使用,这可能会导致优柔寡断,从而无法做出决策。

我认为公司与人工智能斗争的另一个原因是,缺乏人工智能可以产生影响的证据,导致很多人认为这只是一场炒作,最终会消失。包括金融服务、运输和保险在内的许多行业已经使用数据和计算机化的决策对其业务产生影响,但许多其他没有相同数据水平的行业更难相信人工智能能够对其业务产生影响。

如何克服人工智能的冷启动问题

正如业务的数字化需要不同的思维方式一样,算法化也需要不同的思维方式。随着每个人都可以使用技术,竞争加剧,许多行业已经商品化。作为一家公司,采用人工智能的思维模式,并采取相应的行动,是克服人工智能冷启动问题的第一步,但也是最关键的一步。

新技术创业公司更容易,因为没有历史,公司里没有人需要被说服这是必要的。因此,从初创公司设计和编写应用程序的那一刻起,采用人工智能思维将对将要做出的决策以及如何使用数据来建立更好的业务/产品/服务产生巨大影响。

现任者面临着更大的挑战。因为即使高层管理人员可能会相信,走谷歌、亚马逊和微软的路线,成为人工智能优先,是一条路要走,大多数员工不会轻易被说服。和任何项目一样,确保每个人都参与进来是成功的关键因素。

所以真正的问题变成了,我们该怎么办?

从过去的商业变革中,我们知道真正的变革来自内部。通过采用人工智能思维模式,管理可以对组织的其他部分产生重大影响。但是,实际的人工智能项目专注于使用人工智能来改变一个过程,在那里你将能够改变人们的看法。当然,启动一个不会影响你做生意的方式的一次性人工智能项目是不会成功的。最好是启动多个人工智能项目,处理业务的不同部分,对冲你的赌注,但也鼓励在整个组织内分享最佳实践。

人工智能和数据科学家的未来

随着数据科学和数据科学家的职业开始进入商业领域,我看到了很多机会。随着谷歌、亚马逊和微软等公司对云计算的访问越来越便宜,这一基础设施上的能力和工具不断增加,训练、部署和开发人工智能模型变得非常容易,数据科学家的真正角色将是真正理解你试图解决的问题,然后找出解决问题所需的工具和模型。这将产生数据科学家,他们必须成为领域专家,而不是只关注他们提出的解决方案的“数据科学”部分。

这并不意味着数据科学家不知道什么算法最适合某个特定的问题,这只是意味着他们需要完全理解这个问题,它与客户、业务目标和数据集的独特组成的关系,然后将数据科学和他们的领域专业知识结合起来,以改进 KPI 和底层业务。

感谢阅读;),如果你喜欢它,请点击下面的掌声按钮,这对我意义重大,也有助于其他人了解这个故事。让我知道你的想法,联系推特或 T2 的 Linkedin。或者关注我,阅读我关于数据科学、支付和产品管理的每周帖子。

即将到来的医疗革命

原文:https://towardsdatascience.com/the-coming-healthcare-revolution-e48ea06a12df?source=collection_archive---------6-----------------------

We won’t be needing these soon to be obsolete, 20th century tools!

我们正处于健康革命的边缘。

几个世纪以来,医学一直是精英专业人士的领域,他们经过多年的学习,掌握了使人恢复健康的知识。日复一日,他们看着患有各种疾病的病人:受伤后再次恶化的膝盖,胃部剧痛或嗡嗡作响的头痛。

随着抗生素在 21 世纪掀起医学革命,人们开始将我们当前的医疗体系视为解决他们身体面临的任何问题的一种方式:如果你生病了,你就去看医生。如果你没有生病,不要担心——生活太忙了,没有理由特意去看医生,尤其是对年轻健康的人来说。

虽然这些专业人员是**拯救生命和无私的英雄,**他们所见患者的性质使他们的工作变得更加困难。病人的反应性很强,他们只有在已经患病的情况下才会寻求治疗,这使得医生扮演了一个不值得羡慕的角色,成为反应性疾病战士,寻找对抗隐性感染的工具。

照片显示带着剧烈的胃痛去了医院。你不仅可能要等几个小时才能看到医生;但是你冒着你的医生在诊断你的疾病时成为人为错误的牺牲品的风险,导致处方在最好的情况下不会解决你的问题,在最坏的情况下会加剧它们。

这种人为错误只会随着医生负担过重而增加。在中国,每 1000 人中只有 1.5 名医生(大约是北美的一半),病人们来到城市,在医院外扎营等待看病。难怪中国医生偶尔会犯判断失误的错误,他们几乎不能在停车场找到自己的车而不被未治疗的人包围!

问题的一部分在于,患者一般*不会质疑医生的诊断。*他们为什么要这么做?患者没有对自己健康的知识或洞察力来质疑训练有素的专业人员的判断。由于没有反映他们身体整体健康状况的实时数据,病人必须将所有的权力交给医生。

相比之下,医疗保健记录令人沮丧地孤立且低效,你的医生可能会错过你过去医疗中的关键信息,这可能导致对潜在致命疾病的误诊。事实上,仅去年一年,美国就有 250,000 例死亡可直接归因于协调不当的护理。虽然医疗记录目前正在向电子形式过渡,但这种过渡可能会慢得令人沮丧。目前,大量的患者数据都是纸质的,由于医生的笔迹难以辨认,要将我们所有的数据都放在一个容易访问的地方还需要一段时间。

这就是说,病人对自己的健康缺乏控制和了解。与此同时,令人沮丧的是,医生经常重复工作。我们非常接近解决这两个问题。两个主要趋势正在结合在一起,将永远改变我们对待健康和医学的方式:个人数据将被推回给患者,允许更积极的行为来改善健康和避免疾病,而人工智能将使医生更加准确和高效。

在未来,这两种趋势将允许实时健康数据转化为基于您个人健康状况的有意义的见解,并将为您提供日常建议,使您更加健康,避免潜在的疾病。让我们检查这两者,并从将数据返回给消费者开始。

把数据放回你的手中

在人类历史的大部分时间里,人类不得不依靠自己的直觉来理解我们何时需要医疗。如果你感到不舒服,你会寻求治疗。

互联网目前允许你在任何你喜欢的地方寻求在线咨询。智能手机等技术使人们能够使用前所未有的实时数据来监控自己的健康。然而,目前缺少的是在任何给定时间对医疗记录的即时和无限制的访问,以及与信任的个人快速共享这些记录的能力。

这种对信息的永久访问将通过更好地了解您的个人健康状况以及它在您一生中的变化来减少您个人治疗中的低效。与此同时,通过可信的中介数据库与他人共享电子医疗档案,将能够利用数百万个数据点训练医疗算法,释放基于年龄、性别和基因构成的丰富洞察力,所有这些都基于像你一样的其他人的数据。

A better doctor than Dr. Phil

虽然这种将数据推回给消费者的进步似乎不是革命性的,但它确实减少了物理医生诊断个人和监控复杂疾病的需要。像表带这样的简单可穿戴技术现在可以包含医疗级心脏监护仪,从而可以检测和诊断心律失常。同样,糖尿病应用程序可以监控食物摄入量和血糖水平,减少坏疽等长期伤害的可能性。

由于可以方便地访问医疗记录、历史和做好事情的强烈动机,患者能够发现医生建议中的错误,作为对医生目前掌握的健康信息权力平衡的检查。为了更好地实现这一点,苹果公司最近制定了计划,要求各组织使用智能手机下载自己的医疗记录。

最后,跟踪我们日常行为的应用程序让我们更好地了解我们的行为如何影响我们的整体健康。MyFitnessPal 和类似的应用程序可以轻松跟踪营养和卡路里,让我们看到我们的活动水平和食物消耗对我们健康的影响,并在我们偏离轨道时发出温和的警告。最后,当我们在晚餐后伸手拿第二块蛋糕时,有东西让我们负责任!

越来越多的信息被传回给患者,这使得诊断、主动性和疾病管理变得更好。我们只是刚刚开始这项在病人指尖随时获取实时健康数据的实验。然而,随着复杂性和数据流呈指数级增长,我们很快就会被大量可用的数据淹没。谁有时间分析所有这些信息,以便提出改善个人健康的见解?这就是人工智能的用武之地。

算法现在会看到你

让患者负责自己的健康史的另一个好处来自于数据的生成和汇总。共享来自可穿戴设备和智能手机的数据可以在越来越多的数据上训练人工智能,从而更容易看到其他具有类似疾病和健康状况的人,以及他们对不同治疗的反应。这些信息是非常强大的,因为它允许你为你的个人需求寻求治疗,同时减少对医生诊断的需求。

算法不仅有助于将信息反馈给病人。目前,医生最好能表现得更像电脑。即使是最好的医生也容易健忘或分心。这就是为什么像清单这样简单的东西,最低级的自动化形式,可以大大减少错误。事实上,数据显示,基本清单的实施(包括手术患者身份和身体部位的验证、手术环境和设备无菌性的确认以及所有医疗工具的术后清点)显著减少了医疗过程中的错误*。*

此外,每年都有这么多新的医学证据出现,让医生跟上信息的洪流是不现实的。即使是最好的医生,专注于医学研究结果的一小部分,也很难阅读和整合所有的结果。仅在 2014 年,就有 75 万篇医学研究发表。在这些研究中, 150,000 基于癌症治疗。对于研究癌症的医生来说,期望他们能够消化所有的信息并将其整合到他们的实践中是荒谬的。另一方面,计算机擅长分析大量复杂数据以获得洞察力,这些洞察力可以转化为新的最佳实践,并通过简短的声音片段和温和的提醒直接提供给医生。

今天这已经开始发生了。北京协和医院的眼科医生于说,她过去常常要花两天时间来分析患者的眼睛,仔细检查模糊的图像,然后与同事讨论她的发现并撰写报告。医院目前正在测试的人工智能软件可以帮助她更快地完成所有这些工作。

随着卫生系统因人口增长和老龄化的压力而不堪重负,世界各地的医院已经开始认真讨论人工智能是否可以减轻机械、重复工作的负担。这种医学方法——算法充当医生的工具,减少人为错误,缩短诊断常规疾病的时间——是我们的医疗保健系统在短期内将如何转型。例如,谷歌的母公司 Alphabet 已经在接受识别癌组织和视网膜损伤的训练,并且正在迅速变得比最有知识的人类专家更准确。目前,标记癌症图像可能需要几个小时,并且通常由医生在传统工作时间之后完成,这带来了不必要的压力。通过快速准确地标记癌症,人工智能已经显示出其巨大的潜力,可以消除医生工作中最常规和最细致的部分。

**然而,**医疗保健领域的权力从人类转移到算法的一个潜在后果是无菌性增加。安慰剂效应是真实存在的,病人经常向医生寻求希望。研究表明,如果人们与医生有密切的私人关系,他们更有可能遵循处方治疗。此外,人们对机器诊断持怀疑态度:2010 年发表在《健康事务》上的一项研究发现,消费者不相信医生可以提供不合标准的医疗服务。相比之下,他们认为严格基于证据和指南的护理——作为一个自动化医疗护理系统,显然是这样的——是为最低共同标准量身定制的,只符合最低护理标准。因此,未来医生的角色将越来越多地从人工智能程序的大量手工护理选项中进行选择,并以个人化、移情的方式提供护理。

完全整体化:......的药的未来

当前医学的问题是,从根本上说,它是被动的,而不是主动的。我们现在的制度是为了对抗疾病,而不是养活一个人;它将具体数据(如胆固醇水平和心率)视为健康的决定性指标,并等待疾病发作后再采取行动“解决问题”。由此可见,传统医学在 21 世纪初已经是只见树木不见森林。

Oh, what a pretty tree! doesn’t notice burning forest fire

应该说,在治疗急性疾病时,这种被动采取行动解决问题的做法是有意义的。然而,当涉及到糖尿病、肥胖症或多动症等慢性健康问题时,你必须积极主动地解决疾病的根本问题。

根据主要科学家的说法,环境毒素和完全缺乏营养的食物已经导致了一系列的健康问题。这些因素,加上当今社会的疯狂状态——快,看看这条突发新闻!不,看看这封你老板发来的紧急邮件!等等,亚马逊在打折,你真的需要买这双鞋!造成了一系列无法用传统方法治疗的健康问题。换句话说,我们的医疗系统必须借鉴古代医疗从业者的智慧,他们承认身体、思想、精神和社区之间有着深刻的相互联系,以应对我们当前的健康挑战。幸运的是,新兴技术将为我们提供解决当前问题的工具;另一方面,为了有效地使用这些工具,需要思维方式的重大转变。我们需要让我们目前的医疗系统继续发挥其优势,同时利用新技术开辟积极治疗的新途径,以减少对急性护理的需求。

让我们来看看这个新系统会是什么样子。以生活在 2045 年的 62 岁妇女佩内洛普为例。

This is Penelope with her grandchildren. Aren’t they cute?

佩内洛普在早上 7 点 23 分准时被一声轻柔的闹钟吵醒,当她的身体传感器发现她已经离开最后一轮快速眼动睡眠时,闹钟就会被触发。根据佩内洛普需要的最佳睡眠时间,根据数百万与她年龄和健康状况相似的女性的数据,这种闹钟被训练成响起。

在淋浴和使用洗手间后,佩内洛普家中的智能传感器发现她的粪便中缺乏纤维和维生素 C。虽然目前没有危险,但如果不加以解决,这些缺陷可能会导致长期慢性消化问题,甚至坏血病。她的个人人工智能助理给了她一个微妙的建议,在她的正常早餐中加入一杯橙汁,午餐加入豌豆汤,这两种食物都将她的缺陷提高到健康水平。

早餐是热燕麦片和新鲜浆果,还有一杯橙汁,佩内洛普的助手提醒她每天的体育活动——瑜伽课。这个课程是在她的人工智能注意到佩内洛普在照看她的孙子孙女后挣扎着捡起地上的玩具后推荐的,并且是为了增加灵活性和避免关节炎而推荐的。

瑜伽之后,佩内洛普坐下来喝了一碗美味的豌豆汤。当她吃东西时,她注意到手机上有一个警报——她的人工智能已经识别出一颗痣,在过去的两个月里,这颗痣已经微妙地长了 0.3 毫米!根据对类似痣的追踪数据,佩内洛普的助手称,佩内洛普有 1.3%的癌症肿瘤风险;不太重要,但仍然值得研究。佩内洛普从她的口腔中取样,并将唾液样本直接送到当地医生的办公室,在那里一个小时内癌症检测结果呈阳性。

虽然最初很担心,但 Penelope 冷静下来,因为她意识到这是早期发现的,并不是一个主要问题。当她进入一辆自动驾驶汽车带她去当地医院时,她的人工智能助理建议进行正念练习,并辅以平静的自然声音,以减轻压力。出于显而易见的原因,这些诊断往往是令人紧张的事情!

到达医院后,Penelope 被直接允许进入一个房间,由人工智能医生通过血液扫描确认最初的诊断。从那里,一名人类医生进入房间,并引导她完成即将到来的程序——一个小手术,将在癌症肿瘤开始扩散之前将其移除。他用抚慰、同情的声音向她保证,这是完全正常的,因为发现得这么早,不会有任何风险。

一个小时内,手术完成(完全由机器人手术设备完成),痣已经被移除。当佩内洛普回家时,她的人工智能提醒她给一个已经有一段时间没联系的朋友打电话。知道维持重要的关系对心理健康至关重要,人工智能的建议在这个时候是恰当的。佩内洛普从这令人烦恼的一天开始就有短暂抑郁的风险,和老朋友的一次快速视频通话让她振作起来。

在助手的再次推荐下,佩内洛普吃了一顿健康的晚餐,包括清淡的沙拉、烤鸡和糙米,她在手持设备上查看自己的个人医疗记录。她的医疗记录很全面,包括她的家庭、儿童疾病和个人健康风险的记录。她的主动手术已经被记录下来,她的助手根据她所在年龄段的 153,658 名在过去 5 年内做过完全相同手术的人的数据,推荐了最佳恢复做法。当佩内洛普准备睡觉时,她再次提醒自己生活在 2045 年是多么幸运。

这个现实可能很快就会降临到我们头上。专注于将疾病扼杀在萌芽状态,人类将能够过上更幸福、更长寿和更有成效的生活。在考虑了医疗保健的未来之后,问自己以下问题。

1.为了训练算法为每个人提供更好的医疗服务,你愿意把私人医疗信息交给企业吗?

2.如果我们通过主动治疗来“解决”衰老问题,将人类寿命延长 50-100 年或更长时间,会发生什么?

3.2068 年的医院里有人类医生的位置吗?

基于 LDA 的 Python 主题抽取综述

原文:https://towardsdatascience.com/the-complete-guide-for-topics-extraction-in-python-a6aaa6cedbbc?source=collection_archive---------3-----------------------

使用 LDA(潜在狄利克雷分配)从文档语料库中抽取主题

自然语言处理中一个反复出现的主题是通过主题抽取来理解大型文本语料库。无论是分析用户的在线评论、产品描述还是搜索栏中输入的文本,理解关键主题总是会派上用场的。

Popular picture used in literature to explain LDA

在进入 LDA 方法之前,让我提醒你不要重新发明轮子,寻求快速解决方案通常是最好的开始。有几个提供商有很好的主题提取 API(并且在一定数量的调用下是免费的):谷歌微软含义云 …这三个我都试过了,都工作得很好。

但是,如果您的数据非常具体,并且没有通用的主题可以表示它,那么您将不得不采用更加个性化的方法。本文主要关注其中一种方法: LDA

了解 LDA

直觉

LDA ( 潜在狄利克雷分配的缩写)是一个无监督的机器学习模型,它将文档作为输入,并将主题作为输出。该模型还显示了每个文档谈论每个主题的百分比。

主题被表示为单词的加权列表。主题示例如下所示:

花* 0.2 |玫瑰* 0.15 |植物* 0.09 |…

Illustration of LDA input/output workflow

该模型有 3 个主要参数:

  • 主题的数量
  • 每个主题的字数
  • 每个文档的主题数

实际上,最后两个参数在算法中并不完全是这样设计的,但我更喜欢坚持使用这些更容易理解的简化版本。

履行

【最后分享专用 Jupyter 笔记本】

在这个例子中,我使用了来自 BBC 网站的文章数据集。

为了用 Python 实现 LDA,我使用了包 gensim

A simple implementation of LDA, where we ask the model to create 20 topics

之前显示的参数是:

  1. 主题的数量等于 num_topics
  2. 每个主题的字数由 eta 处理
  3. 每个文档主题的数量由 alpha 处理**

要打印找到的主题,请使用以下内容:

**0: 0.024*"base" + 0.018*"data" + 0.015*"security" + 0.015*"show" + 0.015*"plan" + 0.011*"part" + 0.010*"activity" + 0.010*"road" + 0.008*"afghanistan" + 0.008*"track" + 0.007*"former" + 0.007*"add" + 0.007*"around_world" + 0.007*"university" + 0.007*"building" + 0.006*"mobile_phone" + 0.006*"point" + 0.006*"new" + 0.006*"exercise" + 0.006*"open"1: 0.014*"woman" + 0.010*"child" + 0.010*"tunnel" + 0.007*"law" + 0.007*"customer" + 0.007*"continue" + 0.006*"india" + 0.006*"hospital" + 0.006*"live" + 0.006*"public" + 0.006*"video" + 0.005*"couple" + 0.005*"place" + 0.005*"people" + 0.005*"another" + 0.005*"case" + 0.005*"government" + 0.005*"health" + 0.005*"part" + 0.005*"underground"2: 0.011*"government" + 0.008*"become" + 0.008*"call" + 0.007*"report" + 0.007*"northern_mali" + 0.007*"group" + 0.007*"ansar_dine" + 0.007*"tuareg" + 0.007*"could" + 0.007*"us" + 0.006*"journalist" + 0.006*"really" + 0.006*"story" + 0.006*"post" + 0.006*"islamist" + 0.005*"data" + 0.005*"news" + 0.005*"new" + 0.005*"local" + 0.005*"part"**

【前 3 个话题显示其前 20 个最相关的词】 话题 0 好像是关于军事和战争的。
话题 1 关于印度的健康,涉及妇女和儿童。
话题 2 关于马里北部的伊斯兰教徒。

要打印文档主题的百分比,请执行以下操作:

**[(14, 0.9983065953654187)]**

第一个文档 99.8%是关于话题 14 的。

预测未知文档的主题也是可行的,如下所示:

**[(1, 0.5173717951813482), (3, 0.43977106196150995)]**

这份新文件 52%谈到了主题 1,44%谈到了主题 3。请注意,4%不能被标记为现有主题。

探测

有一个很好的方法来可视化您使用包 pyLDAvis 构建的 LDA 模型:

Output of the pyLDAvis

这种可视化允许您在两个缩减的维度上比较主题,并观察主题中单词的分布。

另一个很好的可视化方式是根据主题以对角线格式显示所有文档。

Visualization of the proportion of topics in the documents (Documents are rows, topic are columns)

Topic 18 is the most represented topic among documents: 25 documents are mainly about it.

如何成功实施 LDA

LDA 是一种复杂的算法,通常被认为难以微调和解释。事实上,使用 LDA 获得相关结果需要对它的工作原理有深入的了解。

数据清理

你在使用 LDA 时会遇到的一个常见问题是,单词会出现在多个主题中。解决这个问题的一个方法是将这些单词添加到你的停用词表中。

另一件事是复数和单数形式。我会推荐词干化——或者词干化,如果你不能词干化,但是你的主题中有词干不容易理解。

删除包含数字的单词也将清理主题中的单词。保持年份(2006,1981)可能是相关的,如果你认为它们在你的主题中是有意义的。

过滤出现在至少 3 个(或更多)文档中的单词是删除与主题无关的罕见单词的好方法。

数据准备

包括二元和三元语法,以掌握更多相关信息。

另一个经典的准备步骤是使用词性标注(词性:词性)只使用名词和动词。

微调

  • 话题数量:尝试几个话题数量,以了解哪个数量有意义。你实际上需要看到主题,才能知道你的模型是否有意义。至于 K-Means,LDA 收敛并且该模型在数学水平上有意义,但是它不意味着在人类水平上有意义。
  • 清理你的数据:在你的主题中添加过于频繁的停用词,并重新运行你的模型是一个常见的步骤。只保留名词和动词,从文本中删除模板,反复测试不同的清理方法,会提高你的主题。准备在这里呆上一段时间。
  • 阿尔法预计到达时间。如果你对技术不感兴趣,忘掉这些吧。否则,你可以调整阿尔法和埃塔来调整你的主题。从“auto”开始,如果主题不相关,尝试其他值。我建议使用较低的 Alpha 和 Eta 值,以便每个文档中有少量的主题,每个主题中有少量的相关单词。
  • 增加道次数量,拥有更好的模型。3 或 4 是一个很好的数字,但你可以更高。

评估结果

  • 你的主题是可解释的吗?
  • 你的主题独特吗?(两个不同的题目用词不同)
  • 你的话题详尽吗?(你所有的文档都很好的表现了这些主题吗?)

如果你的模型遵循这三个标准,它看起来就是一个好模型:)

LDA 的主要优势

它很快

使用 Jupyter 中的 %time 命令进行验证。该模型通常运行速度很快。当然,这取决于你的数据。有几个因素会降低模型的速度:

  • 长文档
  • 大量文件
  • 大词汇量(尤其是当你使用 n 元语法时)

这很直观

将主题建模为单词的加权列表是一种简单的近似,但如果你需要解释它,这是一种非常直观的方法。没有嵌入也没有隐藏的维度,只有一袋袋有重量的文字。

它可以预测新的看不见的文档的主题

一旦模型运行,它就可以为任何文档分配主题了。当然,如果你的训练数据集是英文的,而你想预测中文文档的主题,这是行不通的。但是,如果新文档具有相同的结构,并且应该有或多或少相同的主题,它就可以工作。

LDA 的主要缺点

大量微调

如果 LDA 运行速度很快,要用它获得好的结果会给你带来一些麻烦。这就是为什么提前知道如何微调真的会对你有帮助。

它需要人类的解释

话题是由机器发现的。为了向非专业人士展示结果,人们需要对它们进行标记。

你不能影响话题

知道你的一些文档讲的是你知道的一个话题,而在 LDA 找到的话题里找不到,肯定会很沮丧。并且没有办法对模型说一些单词应该属于一起。你必须坐下来等着 LDA 给你你想要的。

结论

LDA 仍然是我最喜欢的主题提取模型之一,我已经在很多项目中使用了它。但是,需要一定的练习才能掌握。这就是我写这篇文章的原因,这样你就可以跳过使用 LDA 的门槛,毫无痛苦地使用它。

代码:https://github . com/Felix shop/medium articles/blob/master/LDA-BBC . ipynb

学习深度学习完全指南

原文:https://towardsdatascience.com/the-complete-guide-on-learning-deep-learning-72cabb30d721?source=collection_archive---------4-----------------------

人工智能的兴起根植于深度学习的成功。神经网络是一个广泛的算法家族,形成了深度学习的基础。神经网络的早期工作实际上始于 20 世纪 50 年代和 60 年代。就在最近,随着深度学习取得了令人印象深刻的最新成果,人们对它的兴趣又有所抬头。从图像中的物体分类到快速准确的机器翻译,再到游戏性。

在总部位于多伦多的deep pixel公司,我们致力于各种行业(目前是汽车、零售和金融)的这些新业务案例。

然而,深度学习有以下利弊。

优点:

-强大:深度学习在许多困难的学习任务上取得了比其他机器学习方法更大的进步,在许多不同的领域都取得了最先进的性能。

-深度学习进行有效的自动特征提取,减少了对这个关键问题的猜测和启发。

-当前的软件提供了灵活的架构,可以轻松适应新的领域。

缺点:

-深度学习可能需要大量的训练数据。

-深度学习可能需要巨大的计算能力。

-架构可能很复杂,通常必须针对特定应用进行高度定制。

-生成的模型可能不容易解释。

去年,大卫·文丘里发表了深入学习 15 门免费在线课程,自从吴恩达周二通过 Coursera 宣布了他新的深度学习专业,我觉得有必要将他的课程添加到这个广泛的列表中,再加上我最近遇到的几门课程。

Andrew Ng’s Course Page — Introduction Week

深度学习专精

骏马

等待结束了, deeplearning.ai 是五个致力于传播人工智能知识的深度学习课程的所在地,并在 Coursera 举办。周二开始了三个课程,未来几周还将增加两个课程。由深度学习顶尖头脑之一的吴恩达教授,专业包括最先进的深度学习模型,如卷积网络、RNNs、LSTM、Adam、Dropout、BatchNorm 和 Xaxier/He 初始化等等。涵盖医疗保健、自动驾驶、手语阅读、音乐生成和自然语言处理等行业。学生将在 Python 和 Tensorflow 中练习上述所有内容。

Udacity deep learning course page

深度学习基础纳米度

该计划与 Siraj 一起,为具有一些数学和编程背景的人提供了深度学习领域的广泛概述。利用每周视频、独家项目以及专家反馈和评论,向学生教授这种塑造未来技术的基础。当前注册已结束,但您可以加入他们的等待列表,以便在下次注册开始时得到通知。

deep learning course at fast.ai

程序员实用深度学习—第一部分

面向编码人员的前沿深度学习—第二部分

fast . ai

由杰瑞米·霍华德和雷切尔·托马斯教授,这个 7 周的课程是为任何至少有一年编程经验的人设计的。本课程采用“代码优先”的方法,不假设任何超出高中数学的内容,但在需要时会介绍关键的数学工具。在完成第一部分的所有 7 门课程后,学生应该能够知道如何识别人工智能机会,并开始将解决方案付诸实践。他们最近推出了 Part-2,学生将学习深度学习的最新部署,如何阅读和实现新的学术论文,以及如何解决自然语言翻译等具有挑战性的端到端问题。整个课程是免费的,但准备花几百美元在 AWS 实例上,并花大量时间调试 AWS。

Creative Applications of Deep Learning with TensorFlow at Kadenze

深度学习与 TensorFlow 的创造性应用

本课程涵盖深度学习的基本组件,它意味着什么,它如何工作,并开发构建各种算法所需的代码,如深度卷积网络,变分自动编码器,生成对抗网络和递归神经网络。本课程的重点不仅在于理解如何构建这些算法的必要组成部分,还在于如何应用它们来探索创造性的应用。

Andrew Ng is interviewing Professor Hinton

用于机器学习的神经网络

4.5 颗星(1516 个评分)

多伦多大学经Coursera

2012 年由杰弗里·辛顿教授在 Coursera 上授课。该课程向学生讲授人工神经网络以及它们如何用于机器学习,如应用于语音和对象识别、图像分割、建模语言和人类运动。然而,由于过去几年深度学习的快速发展,它已经过时了。

谷歌深度学习

Google via uda city

这是一门中高级课程。在学习本课程之前,学生应具备以下经验和技能:

  • 至少 2 年编程经验(最好是 Python 语言)
  • Git 和 GitHub 经验(分配代码在 GitHub repo 中)
  • 基本的机器学习知识(尤其是监督学习)
  • 基本统计学知识(均值、方差、标准差等。)
  • 线性代数(向量、矩阵等。)
  • 微积分(微分、积分、偏导数等。)

CS224n:深度学习的自然语言处理

斯坦福大学

该课程全面介绍了应用于 NLP 的深度学习前沿研究。它将涵盖单词向量表示、基于窗口的神经网络、递归神经网络、长短期记忆模型、递归神经网络、卷积神经网络以及一些涉及记忆成分的最新模型。

CS294:深度强化学习,2017 年秋季

加州大学伯克利分校

加州大学伯克利分校在深度学习方面做了很多出色的工作,包括著名的Caffe——深度学习框架。该课程是伯克利目前提供的深度学习课程。幻灯片和讲座都发布在网上,课程由三位出色的讲师授课。

6。S191:深度学习介绍

麻省理工

截至 2017 年 1 月,麻省理工学院开始提供各种深度学习课程。为期一周的深度学习方法介绍,应用于机器翻译,图像识别,游戏,图像生成等。这是一门协作课程,包含 TensorFlow 中的实验室、同行集思广益以及讲座。

CS 20SI:深度学习研究 tensor flow

斯坦福大学

由学生发起,虽然标题有点暗示,但课程的大部分内容是引导你完成编写 Tensorflow 程序的基础。课程笔记幻灯片突出。

CS231n:视觉识别卷积神经网络

斯坦福大学

同样由学生发起,该课程深入探究深度学习架构的细节,重点是学习这些任务的端到端模型,尤其是图像分类。在为期 10 周的课程中,学生将学习实现、训练和调试自己的神经网络,并详细了解计算机视觉的前沿研究。期末作业将涉及训练一个数百万参数的卷积神经网络,并将其应用于最大的图像分类数据集(ImageNet)。

牛津深度学习 2015

牛津大学

该课程专注于令人兴奋的深度学习领域。通过从神经科学和统计学中汲取灵感,它介绍了神经网络,反向传播,玻尔兹曼机器,自动编码器,卷积神经网络和递归神经网络的基本背景。它说明了深度学习如何影响我们对智能的理解,并有助于智能机器的实际设计。

COS495:深度学习入门

普林斯顿大学

本课程是对称为深度学习(也称为深度神经网络)的机器学习技术的初步介绍,以及它在各种领域的应用,包括图像分类、语音识别和自然语言处理。在这一过程中,本课程还直观地介绍了一些基本概念,如监督与非监督学习、线性和逻辑回归、连续优化(尤其是梯度下降的变体)、泛化理论和过拟合、正则化和概率建模。

多伦多大学

这门课是计算机视觉的研究生研讨课程。这门课将涵盖计算机视觉和各种神经网络架构的不同主题。这将是一个互动的课程,我们将根据需要讨论有趣的话题和最新的研究热点。本课程的目标是学习不同的视觉领域,理解、识别和分析主要的挑战,什么可行,什么不可行,以及识别未来研究的有趣的新方向。

Professor Ali Ghodsi’s lecture in deep learning at University of Waterloo

深度学习

滑铁卢大学

Ali Ghodsi 教授关于深度学习的讲座和幻灯片现在在滑铁卢大学在线

UVA 深度学习课程

阿姆斯特丹大学

该课程特别关注计算机视觉和语言建模,这可能是深度学习理论中最知名和最令人印象深刻的两个应用。

神经网络

这是一门研究生水平的课程,涵盖基本的神经网络以及更高级的主题,包括:

深度学习。

条件随机场。

受限玻尔兹曼机器。

自动编码器。

稀疏编码。

卷积网络。

向量单词表示法。

还有更多…

【深度学习】用于自然语言处理(无需魔法)

NAACL HLT 2013上的教程

本教程旨在涵盖自然语言处理深度学习中的基本动机、思想、模型和学习算法。教程的第一部分介绍了神经网络的基础知识、神经单词向量、几种基于局部窗口的简单模型以及通过反向传播进行训练的数学和算法。教程的最后一部分给出了深度学习在 NLP 中的不同应用的概述,包括单词袋模型。

Deep Learning course at lynda.com

用 Keras 2.0 构建深度学习应用

Lynda.com

该课程于 2017 年 8 月 1 日发布,教授如何安装 Keras,并使用它建立一个简单的深度学习模型。探索 Keras 中包含的许多强大的预训练深度学习模型以及如何使用它们。了解如何部署 Keras 模型,以及如何在 Keras 和 TensorFlow 之间传输数据。

用 Tensorflow 构建和部署应用

该课程于 2017 年 8 月 2 日发布,教授如何安装 TensorFlow 并使用它来建立一个简单的深度学习模型。在演示了如何启动和运行 TensorFlow 之后,讲师 Adam Geitgey 演示了如何创建和训练机器学习模型,以及如何利用可视化工具来分析和改进您的模型。最后,他解释了如何在本地或云中部署模型。

NVIDIA Deep Learning Institute

深度学习 AI

英伟达深度学习研究院(DLI)

通过自定进度的在线实验室和讲师指导的研讨会,DLI 提供了设计、培训和部署跨各种应用领域的神经网络的最新技术的培训。学生将探索广泛使用的开源框架以及英伟达最新的 GPU 加速深度学习平台。

TensorFlow 与无博士深度学习—第一部分和第二部分

谷歌云

在这两个视频教程中,Martin Gorner 演示了如何构建和训练识别手写数字的神经网络。在此过程中,描述了神经网络设计中使用的一些“诀窍”,最终使他的模型的识别准确率达到 99%以上。Martin Gorner 还通过在 TensorFlow 中构建语言模型来探索递归神经网络的可能性。

对非专家有效的张量流

谷歌开发者

在这次演讲中,您将从 Martin Wicke 那里学习如何有效地使用 TensorFlow。TensorFlow 提供了像 Keras 和 Estimators 这样的高级接口,即使不是专家也可以使用。本次演讲将展示如何实现复杂的机器学习模型,并将其部署在任何支持 TensorFlow 的平台上。他还在他的 Github 上开了一个教程。

deep learning courses at Udemy

最后,在 Udemy 上快速搜索,你可以找到十几个深度学习课程的提供商以及相关的评级和参与者数量。它们现在都在打折,每个 10 美元。

我希望你喜欢读这篇文章,就像我喜欢写它一样。来自的杰森·布朗利——《机器学习大师》的作者的最后一个建议是:“按主题浏览和浏览讲座,不要试图上完整个课程。学习一件事,而不是尝试和学习一切。”

多余假期完全指南

原文:https://towardsdatascience.com/the-complete-guide-to-superfluous-holidays-7be26f0a86db?source=collection_archive---------6-----------------------

全国鸡翅日全国打扮你的宠物日全国清理你的虚拟桌面 ,我不禁想知道到底有多少——其中一半听起来像是由你十几岁的表弟建立的,但同时它们听起来都是隐约必要的,甚至可能对一群特殊的人很重要。因此,今天我踏上了探索这些场合的旅程——公共假日的失败者。

数据收集

为了获得这些数据,我使用 rvest 礼貌地删除了一个名为 National Today 的网站,该网站主要收集美国和一些全球的日期。这种场合被分为从活动到流行文化到职业生涯的广泛话题。

可视化覆盖范围

有了数据,我想看看一年有多少。

Color indicate number of occasions on a day

365 天中有 300 天被标记。这涵盖了一年的 82%!一月/十一月/十二月是平静期,三月/六月/九月每天都有事情发生。十二天中的每一天有多达三个场合,例如 3 月 6 日是国家牙医日、着装日和冷冻食品日。

食物上的天数&饮料上的天数

活动天数

下一步

一个可能的下一步是提取这些场合的社交媒体聊天,以了解人们这些天是如何观察的。

另一个方向是研究这些日子里某些物品的消费增加或相关的财务收益。中国 11 月 11 日的光棍节是近年来最热门的购物活动之一,去年的交易额达到 178 亿美元。值得研究一下某些场合是如何变得比其他场合更受欢迎的。

如果你想知道今天是什么日子,可以总结一下:今天是 day☕国际咖啡日,世界素食日🍅以及全国自制饼干日🍪。

这是我关于数据科学和视觉故事的# 100 日项目的第 63 天。数据集在 Kaggle 上可用,代码部分在我的 github 上。感谢阅读。如果喜欢,请分享。欢迎新主题的建议和反馈。

凹形船体

原文:https://towardsdatascience.com/the-concave-hull-c649795c0f0f?source=collection_archive---------5-----------------------

使用一种 K 最近邻方法创建聚类边界

“white boat on green grass field under gray sky” by Daniel Ian on Unsplash

一个几个月前,我在 Medium 上写了一篇文章描绘了英国的交通事故热点。我最关心的是演示地理数据上的 DBSCAN 聚类算法的使用。在文章中,我使用了英国政府公布的交通事故地理信息。我的目的是运行一个基于密度的聚类过程来找到交通事故报告最频繁的区域。最终结果是创建了一组代表这些事故热点的地理围栏。

通过收集给定聚类中的所有点,您可以了解该聚类在地图上的样子,但是您将缺少一条重要的信息:聚类的外部形状。在这种情况下,我们讨论的是一个可以在地图上表示为地理围栏的闭合多边形。地理围栏内的任何点都可以被假设为属于该聚类,这使得该形状成为一条有趣的信息:您可以将它用作鉴别器函数。所有落在多边形内的新采样点都可以被认为属于相应的聚类。正如我在文章中暗示的那样,您可以使用这样的多边形来断言您的驾驶风险,通过使用它们来对您自己的采样 GPS 位置进行分类。

从云到多边形

现在的问题是,如何从构成特定集群的点云中创建一个有意义的多边形。我在第一篇文章中的方法有些天真,反映了我已经在生产代码中使用的解决方案。这个解决方案需要放置一个以每个聚类点为中心的圆,然后将所有的圆合并在一起,形成一个云状的多边形。结果不是很好,也不现实。此外,通过使用圆形作为构建最终多边形的基础形状,这些多边形将比更流线型的形状具有更多的点,从而增加了存储成本并使得包含检测算法运行更慢。

Cloud-shaped polygons

另一方面,这种方法具有计算简单的优点(至少从开发人员的角度来看),因为它使用 Shapelycascaded_union函数将所有的圆合并在一起。另一个优点是多边形的形状是使用集群中的所有点隐式定义的。

对于更复杂的方法,我们需要以某种方式识别集群的边界点,这些点似乎定义了点云的形状。有趣的是,对于一些 DBSCAN 实现[1],您实际上可以恢复边界点,作为聚类过程的副产品。不幸的是,这个信息(显然)在 SciKit Learn 的[2] 实现上是不可用的,所以我们不得不凑合。

首先想到的方法是计算点集的凸包。这是一个很好理解的算法,但是存在不能处理凹形的问题,就像这个:

The convex hull of a concave set of points

这种形状没有正确地抓住潜在点的本质。如果将其用作鉴别器,一些点会被错误地分类为在聚类内,而实际上它们并不在聚类内。我们需要另一种方法。

凹面外壳备选方案

幸运的是,除了这种情况还有其他选择:我们可以计算出一个凹壳。以下是凹面外壳应用于与上一幅图像中相同的一组点时的外观:

Concave Hull

或者这个:

A less concave hull

正如你所看到的,与凸包相反,点集的凹包并没有单一的定义。使用我在这里介绍的算法,你希望你的船体有多凹的选择是通过一个参数来完成的:k——在船体计算过程中考虑的最近邻居的数量。让我们看看这是如何工作的。

该算法

我在这里展示的算法是十多年前由葡萄牙米尼奥大学的阿德里亚诺·莫雷拉和玛丽贝尔·亚斯米娜·桑托斯描述的。从摘要来看:

本文描述了一种计算平面上一组点的包络的算法,该算法在非凸包上生成凸包,表示给定点所占据的区域。所提出的算法基于 k-最近邻方法,其中唯一的算法参数 k 的值用于控制最终解的“平滑度”。[…]

因为我将把这个算法应用于地理信息,所以必须做一些改变,即在计算角度和距离时[4]。但是这些并没有以任何方式改变算法的要点,该要点可以通过以下步骤来概括描述:

  1. 找到具有最低 y (纬度)坐标的点,并使其成为当前点。
  2. 找到距离当前点最近的第 k 个点。
  3. k 最近的点中,选择与前一角度最大右转相对应的点。这里我们将使用方位的概念,从 270 度的角度(正西)开始。
  4. 通过将新的点添加到增长线字符串,检查它是否不与自身相交。如果是这样,从 k 中选择另一个最近的点,或者用更大的 k 值重新开始。
  5. 使新点成为当前点,并将其从列表中删除。
  6. k 次迭代之后,将第一个点添加回列表。
  7. 循环到 2 号。

这个算法看起来很简单,但是有一些细节必须注意,特别是因为我们处理的是地理坐标。距离和角度的测量方法不同。

代码

这里我发布的是前一篇文章代码的改编版本。您仍然会发现相同的聚类代码和相同的云形聚类生成器。更新后的版本现在包含一个名为geomath.hulls的包,在这里可以找到ConcaveHull类。要创建凹面外壳,请执行以下操作:

在上面的代码中,points是一个维数为(N,2)的数组,其中行包含观察点,列包含地理坐标(经度纬度)。生成的数组具有完全相同的结构,但只包含属于簇的多边形形状的点。某种过滤器。

因为我们将处理数组,所以将 NumPy 加入争论是很自然的。只要有可能,所有的计算都进行了适当的矢量化,并且在从数组中添加和删除项目时努力提高性能(剧透:它们根本没有移动)。缺失的改进之一是代码并行化。但那可以等。

虽然在翻译过程中做了一些优化,但我还是按照论文中公开的算法组织了代码。该算法是围绕许多子程序构建的,这些子程序已在论文中明确指出,所以我们现在就把它们放在一边。为了方便阅读,我将使用与论文中相同的名称。

clean list[list of points]—清理点列表在类构造函数中执行:

如您所见,出于性能原因,点列表被实现为 NumPy 数组。列表的清理在第 10 行执行,这里只保留唯一的点。数据集阵列由行中的观察值和两列中的地理坐标组成。请注意,我还在第 13 行创建了一个布尔数组,它将用于主数据集数组的索引,减轻了删除项目和偶尔添加项目的负担。我在 NumPy 文档中看到过这种叫做“mask”的技术,它非常强大。至于质数,我以后再讨论。

FindMinYPoint【list of points】—这需要一个小函数:

调用此函数时将数据集数组作为参数,并返回纬度最低的点的索引。注意,行是用第一列中的经度和第二列中的纬度编码的。

RemovePoint[vector,e]
AddPoint[vector,e]
—由于使用了indices数组,这些都是无需动脑的。这个数组用于存储主数据集数组中的活动索引,因此从数据集中删除项目非常容易。

尽管论文中描述的算法要求在构成外壳的数组中添加一个点,但这实际上是通过以下方式实现的:

稍后,当线串被认为不相交时,test_hull变量将被赋回hull。但是我已经领先了。从数据集数组中移除一个点非常简单:

self.indices[current_point] = **False**

把它加回去只是把相同索引处的数组值变回 true。但是,所有这些便利都伴随着必须密切关注索引的代价。稍后将详细介绍。

NearestPoints[listOfPoints,point,k] —这里的事情开始变得有趣,因为我们不是在处理平面坐标,所以不用毕达哥拉斯,而用哈弗辛:

注意,第二个和第三个参数是数据集格式的数组:第一列是经度,第二列是纬度。如您所见,该函数返回第二个参数中的点和第三个参数中的点之间的距离(以米为单位)数组。一旦我们有了这些,我们就可以用最简单的方法得到最近的邻居。但是有一个专门的功能,值得解释一下:

该函数首先创建一个包含基本索引的数组。这些是尚未从数据集数组中移除的点的索引。例如,如果在一个十点集群上,我们从移除第一个点开始,基本索引数组将是[1,2,3,4,5,6,7,8,9]。接下来,我们计算距离并对结果数组索引进行排序。第一个 k 个被提取,然后被用作检索基本索引的掩码。这有点扭曲,但很管用。如您所见,该函数返回的不是坐标数组,而是数据集数组的索引数组。

SortByAngle[listOfPoints,point,angle]——这里有更多的麻烦,因为我们不是在计算简单的角度,我们是在计算方位。这些被测量为正北零度,角度顺时针增加。以下是计算方位的核心代码:

该函数返回一个方位角数组,该数组从索引位于第一个参数中的点开始测量,直到索引位于第三个参数中的点为止。排序很简单:

此时,候选数组包含按方位降序排序的第 k 个最近点的索引。

IntersectQ[lineSegment1,lineSegment2] —我没有使用自己的线相交函数,而是求助于 Shapely 。事实上,在构建多边形时,我们实际上是在处理一个线串,即追加与前面的线不相交的线段。对此的测试很简单:我们选择正在构建的外壳数组,将其转换为形状良好的线串对象,并测试它是否简单(非自相交)。

简而言之,如果一个形状良好的行字符串自交叉,它就会变得复杂,因此is_simple谓词会变为 false。简单。

PointInPolygon[point,listOfPoints] —这是最难实现的一个。请允许我通过查看执行最终外壳多边形验证的代码来解释(检查是否所有的聚类点都包含在多边形中):

Shapely 用于测试相交和包含的函数应该足以检查最终的外壳多边形是否与所有聚类的点重叠,但事实并非如此。为什么?Shapely 是坐标不可知的,因此它将以与笛卡尔平面上的坐标完全相同的方式处理以纬度和经度表示的地理坐标。但是当你生活在一个球体上时,世界会有不同的表现,而且沿测地线的角度(或方位)不是恒定的。参考文献[4]中连接巴格达和大阪的测地线的例子很好地说明了这一点。碰巧的是,在某些情况下,该算法可以基于方位角标准包括一个点,但是后来,使用 Shapely 的平面算法,该点被认为稍微超出了多边形。这就是小距离修正的作用。

我花了一段时间才想明白。我的调试帮助是 QGIS ,一个伟大的自由软件。在可疑计算的每一步,我都会将 WKT 格式的数据输出到一个 CSV 文件中,作为一个层读入。真正的救命恩人!

最后,如果多边形未能覆盖所有聚类的点,唯一的选择是增加 k 并重试。这里我补充了一点自己的直觉。

质数 k

该文章建议将 k 的值增加 1,并从头开始再次执行该算法。我对这个选项的早期测试不是很令人满意:在有问题的集群上运行时间会很慢。这是由于 k 的缓慢增长,所以我决定使用另一个增长计划:质数表。该算法已经从 k = 3 开始,所以很容易扩展到一系列素数。这是您在递归调用中看到的情况:

我对质数情有独钟,你知道…

爆炸

由该算法生成的凹壳多边形仍然需要一些进一步的处理,因为它们将仅辨别壳内部的点,而不是接近壳的点。解决方案是给这些瘦的簇添加一些填充。这里我使用了和以前完全一样的技术,看起来是这样的:

Buffered concave hull

在这里,我使用了 Shapely 的buffer函数来完成这个技巧。

该函数接受一个形状良好的多边形,并返回其自身的放大版本。第二个参数是添加的填充半径,单位为米。

运行代码

首先将代码从 GitHub 库中提取到您的本地机器中。你要执行的文件在主目录下的ShowHotSpots.py。首次执行时,该代码将读入 2013 年至 2016 年英国交通事故数据,并对其进行聚类。然后将结果缓存为 CSV 文件,供后续运行使用。

然后,您将看到两个地图:第一个是使用云状聚类生成的,而第二个使用这里讨论的凹形聚类算法。当多边形生成代码执行时,您可能会看到一些失败的报告。为了帮助理解为什么算法不能创建凹面外壳,代码将集群写到 CSV 文件的data/out/failed/目录中。通常,您可以使用 QGIS 将这些文件作为图层导入。

本质上,当该算法没有找到足够的点来“环绕”该形状而不自交时,该算法会失败。这意味着您必须准备好丢弃这些簇,或者对它们应用不同的处理(凸包或合并的气泡)。

凹度

它是一个包裹。在本文中,我提出了一种后处理 DBSCAN 生成的地理聚类成凹形的方法。与其他方法相比,该方法可以为聚类提供更好的外部多边形拟合。

感谢您的阅读,并享受修改代码的乐趣!

参考

[1] Kryszkiewicz M .,Lasek P. (2010) TI-DBSCAN:通过三角形不等式使用 DBSCAN 进行聚类。载于:Szczuka M .、Kryszkiewicz M .、Ramanna S .、Jensen R .、Hu Q .(编辑)粗集和计算的当前趋势。RSCTC 2010。计算机科学讲义,第 6086 卷。施普林格,柏林,海德堡[ 施普林格链接

[2]sci kit-learn:Python 中的机器学习,Pedregosa 等人,JMLR 12,第 2825–2830 页,2011 年

[3] Moreira,A .和 Santos,M.Y .,2007 年,《凹壳:计算一组点所占据区域的最近邻法》K

【4】计算经纬度点之间的距离、方位等

[5] GitHub 资源库

概念的概念算法

原文:https://towardsdatascience.com/the-conceptual-arithmetics-of-concepts-9f3e16d18f90?source=collection_archive---------17-----------------------

我最近读的最喜欢的一本书是道格拉斯·霍夫斯塔德的《表面和本质:类比是思维的燃料和火焰》。在这本书里,作者的中心论点是范畴化是思维的核心,而类比是认知的核心。霍夫施塔特的主要论点是,概念不是僵化的,而不是流动和模糊的,也不能严格地分等级。他认为,认知的发生得益于持续不断的分类,这与分类(旨在将所有事物放入固定和僵化的精神盒子中)形成对比。

What is the essence of the concept of letter “A”? What makes the letter “A”؟

概念不像嵌套的盒子,任何给定的概念都被严格定义为一组精确的先前获得的概念,并且概念总是以固定的顺序获得。(…) 依赖关系是模糊和阴影的,而不是精确的,在层级结构中没有严格意义上的“更高”或“更低”,因为依赖关系可以是相互的。新概念改变了在它们之前就存在的概念,并使它们得以产生;以这种方式,新的概念被结合到它们的“父母”中,反之亦然。(引自表面和本质:类比是思维的燃料和火焰)

霍夫施塔特还批评说,许多人使用“类比”这个词作为某个非常狭窄的句子类别的名称,看似精确到数学程度,属于以下类别:***“8 对 4 等于 10 对 5”***或 “西对东,如同左对右。”如果用一种准形式的符号来写,这看起来更像是一个数学陈述:

西:东::左:右

智力测验经常使用用这种符号表示的谜题。例如,他们可能会提出这样的问题:“番茄:红色花椰菜:X”,或者可能是“球体:圆形立方体:X”,或者“脚:袜子手:X”,或者“土星:光环木星:X”,或者“法国:巴黎::美国:X”——等等。这种形式的陈述被认为构成了比例类比,这个术语本身是基于单词和数字之间的类比——也就是说,表达一对数字与另一对数字具有相同比率的等式 (A/B = C/D) 可以直接用于单词和概念的世界。因此,人们可以用自己的话来总结这个类比:类比对于概念就像比例对于数量一样

比例:数量::类比:概念

尽管我们距离智能的一般定义和以流体非刚性方式操纵概念的能力还非常远,但我们仍然可以用一种对解决比例类比有用的方式对概念进行编码吗?

自动编码器是由两部分组成的算法家族:编码器和解码器。编码器将高维数据转换为通常更容易处理的低维表示。解码器将较低的表示转换回原始的高维度。理想情况下,我们会让解码器完全重建原始数据,而不会丢失信息。

理想情况下,我们希望有:解码器(编码器(x)) =x

Auto-encoder schema. Ideally we would have: Output = Decoder(Encoder(Input)) = Input

我们很容易在自动编码器和调制解调器技术(调制解调器的缩写)之间进行类比。调制器接收数字数据,并在传输前产生具有特定物理属性的信号。另一方面,解调器对接收到的信号进行解码,以再现原始数字数据。

我们可以清楚地看到,解调器的工作与调制器完全相反。那么,为什么要费心去创造它们呢?

答案依赖于在中间发送特定信号而不是直接发送原始信号的优点(例如,如果中间的调制信号具有更好的抗噪声能力)。

噪声(调制器)+噪声(远距离调制信号)+噪声(解调器)< < <噪声(远距离原始信号)

这个类比也适用于电力领域,在电力领域,电压在被长距离输送之前首先被转换,然后在消耗之前被降低。

这种明显无意义且浪费的双重转换(先升压后降压)背后的理由是,由于高压下的电力转换和传输所产生的总损耗远低于直接发送低压所产生的损耗。

损耗(升压)+损耗(高电压)+损耗(降压)< < <损耗(低电压)

Electricity is transformed up before being sent over long distances then transformed down for consumption

回到我们的自动编码器,它们遵循相同的逻辑。处理高维数据通常成本很高。这就是为什么我们可以通过训练编码器将数据转换为更容易处理的低维表示来获得好处。当我们完成处理后,我们可以用一种总体处理成本更低的方式恢复到原始表示:

编码(高维数据)+处理(表示)+解码(表示)< < <处理(高维数据)

Word2Vec 是一种有趣的技术,可以将自然语言单词转换为密集的矢量表示,同时试图以某种抽象的方式保留单词的“含义”。Word2Vec 通过在多维空间中搜索与每个单词相关联的权重来实现这一点,其方式是保持出现在彼此相同上下文中的单词之间的距离。

Word2Vec 是一个自动编码器,因为我们可以将一种语言中数百万个单词中的每一个编码和解码成几百维的向量。例如,谷歌设法将 300 万个单词训练成每个单词只有 300 个特征的编码!这意味着维数减少了 10 000 倍,处理 300 维的向量比处理 300 万维的向量要有利得多!!!

How every word is encoded by a vector that represents higher meaning

这种矢量表示非常适合回答比例类比问题,其形式为 a 之于 b 如同 c 之于*?。比如之于就像之于?* ( 姑姑)。我们可以通过使用基于余弦距离的简单矢量偏移方法来实现这一点。Word2Vec 能够以一种令人惊讶的表达方式捕捉单词之间的关系。

例如,如果我们将单词 i 的向量表示为 vec(i) ,并关注单/复数关系,我们观察到: vec(苹果)-vec(苹果)≈ vec(汽车)-vec(汽车)≈ vec(汽车)≈ vec(家庭)-vec(家庭)≈vec(汽车)-vec(汽车)等等。

它允许我们对概念执行一些算术运算!我们需要做的就是将单词编码成向量,在向量空间中执行运算(加法、减法),然后将结果解码回最接近的原始单词等。例如,以下是说明性别关系的三个单词对的向量偏移量:

Vectorial relationship between concepts

这篇博文更详细地展示了 word2vec 的强大,并提供了 word2vec 如何解决许多比例类比问题的进一步解释和示例。

Example of arithmetics on concepts thanks to word2vec

也许在图像处理领域中,自然语言的 word2vec 的类似算法是生成对抗网络。这些网络根据(去)卷积矩阵捕获图像中编码的概念。这些神经网络能够捕捉和学习诸如“夏天”或“冬天”等概念的本质,然后可以用于将夏天的图像转换成冬天的图像,反之亦然。

GANs 也是图像处理领域中一种特殊类型的自动编码器。它们由发生器和鉴别器网络组成。生成器的目标是学习如何通过生成我们试图编码的概念的看似令人信服的图片来欺骗鉴别者。鉴别器的目标是学习如何检测真实图像和生成的图像。在训练过程结束时,生成器在其解卷积矩阵中保存成功表示某一视觉概念(根据概率分布)所需的知识。

Generative adversarial network- a different form of auto-encoder

以下是甘力量的一些神奇展示:

GAN 实现冬夏图像转换

另一个很酷的视频展示了甘把一匹马变成了斑马

GANs 能够创建软件,可以从绘画中生成照片,将马变成斑马,进行风格转换,等等。(检查:【https://hardikbansal.github.io/CycleGANBlog/】T2)

A different level of image processing: conceptual processing. Image courtesy of https://github.com/junyanz/CycleGAN

机器学习领域是一个令人惊叹且发展非常迅速的领域。然而,由于其成本和复杂性,在目前的状态下仍然很难使用它。随着时间的推移,我们将拥有越来越多易于使用和预先训练的模型和库,这些模型和库将我们从每次处理大型数据集的负担、复杂性和成本中抽象出来,只是为了捕捉完全相同的概念。

我们可以很容易地想象未来数据和概念之间,以及概念和应用之间的抽象分离。就像石油一样(这将是本文最后一个概念类比),没有必要让每个行业都建立自己的炼油厂,他们可以购买预精炼油,然后专注于将其直接转化为更高价值的材料。随着时间的推移,机器学习应该从原始数据处理转向更抽象和更高级的概念处理,这种处理依赖于预先训练的数据到概念模型。也许模型动物园是朝着这个方向迈出的第一步。

原载于 2018 年 11 月 21 日【medium.com】

哥白尼原理以及如何使用统计学来计算任何事物持续的时间

原文:https://towardsdatascience.com/the-copernican-principle-and-how-to-use-statistics-to-figure-out-how-long-anything-will-last-9cceb7aba20a?source=collection_archive---------2-----------------------

(Source)

统计学、生命周期方程以及数据科学何时终结

对天文学的追求是一个逐渐发现人类渺小的过程。我们从宇宙的中心出发,宇宙确实围绕着我们旋转。然后我们被粗暴地归为围绕太阳运行的 8 颗行星中的颗,后来发现太阳只是我们银河系中数十亿颗恒星中的颗(而不是甚至不是一颗大恒星)。

这个星系,雄伟的银河系,看起来令人印象深刻,直到哈勃发现天空中所有那些模糊的物体都是数十亿个其他星系,每个星系都有数十亿颗恒星(潜在地拥有它们自己的智慧生命)。随着数学家和物理学家得出结论宇宙是统称为多元宇宙无限宇宙 中的一个,这种降级在 21 世纪还在继续。

Go here to be blown away

除了被降级到宇宙中越来越小的部分之外,现在一些思想家声称我们生活在一个模拟世界,并且很快将创造我们自己的模拟世界。所有这些都很难说我们 并不特别。地球,乃至人类,在宇宙中并不占据优势地位的观点被称为哥白尼原理

虽然哥白尼原理首次用于我们的物理位置——x、y 和 z 坐标——1993 年,J·理查德·戈特应用了我们不是宇宙第四维*、时间的特殊观察者的概念。在“哥白尼原理对我们未来前景的影响”(200 美元这里或免费通过有争议的法律科学中心这里)中,戈特解释说,如果我们假设我们没有占据历史上一个独特的时刻*,我们可以使用一个基本方程来预测任何现象的寿命。

哥白尼寿命方程

这个等式简单明了(推导见文章末尾),就是:

其中 t_current 是某物已经存在的时间量, t_future 是它从现在开始将持续的预期时间量,置信区间表示我们在估计中有多确定。这个等式是基于一个简单的想法:我们不存在于一个独特的时刻,因此,当我们观察一个事件时,我们最有可能看的是中间,而不是开始或结束。

You are most likely not at the beginning or end of an event but in the middle (Source).

和任何方程一样,弄清楚它是如何工作的最好方法是输入一些数字。让我们把这个应用到一些简单的事情上,比如说人类的一生。我们将使用 95%的置信区间,并假设现代人类已经存在了 20 万年。输入数字,我们得到:

关于人类将存在多久的经典晚宴问题(好吧,只有我参加的晚宴)的答案是 5130 到 780 万年,有 95%的把握。这与的实际证据非常吻合,该证据显示哺乳动物物种的平均寿命约为 200 万年,尼安德特人的平均寿命为 30 万年,直立人的平均寿命为 160 万年

这个等式的巧妙之处在于,它可以应用于任何事情,而仅仅依靠统计数据,而不是试图解开复杂的潜在原因网。一个电视节目持续多长时间,一项技术的生命周期,或者一家公司存在的时间长度,都受到许多因素的影响,这些因素是不可能区分开来的。我们可以利用时间(时间的别称)哥白尼原理,对任何现象的寿命做出合理的估计,而不是挖掘所有的原因。

为了将这个等式应用于离家更近的东西,数据科学,我们首先需要找到该领域当前的生命周期,根据《哈佛商业评论》发布的文章“数据科学家:21 世纪最性感的工作”,我们将它定为 6 年。然后,我们使用这个等式找到我们可以预期的,有 95%的信心,数据科学至少还会存在 8 周,最多 234 年。

如果我们想要一个更窄的估计,我们减少我们的置信区间:在 50%,我们得到 2 到 18 年。

这说明了统计学中的一个重要观点:如果我们想提高精度,就必须牺牲准确性。较小的置信区间不太可能是正确的,但它为我们的答案提供了一个较窄的范围。

如果你想玩数字游戏,这里有一个 Jupyter 笔记本

正确、原子弹和外卖

你可能会反对这个等式的答案过于宽泛,这一点我承认。然而,我们的目标并不是得到一个单一的数字——几乎没有任何情况下,即使使用最好的算法,我们也能找到一个确定的数字——而是找到一个合理的范围。

我喜欢把哥白尼寿命方程想象成费米估算,一种以物理学家恩利克·费密命名的信封式计算的背面。1945 年,费米仅仅用一些纸片估算了三位一体原子弹试验的当量,误差在 2 以内!同样,我们可以用这个等式来得到一个现象寿命的合理估计值。

使用哥白尼原理来发现某物存在的时间有两个重要的教训,一个是技术上的,一个是哲学上的:

  1. 我们可以利用统计学快速获得不受人为因素影响的客观估计。(还有,统计也能过瘾!)
  2. 一个很好的事物持续时间的第一近似值是它已经持续了多长时间

关于第一点,如果你想知道一场百老汇秀会持续多长时间,你从哪里开始收集数据呢?你可以看看评论,演员的名声,甚至剧本中的对话来决定吸引力,并计算出这部剧还会持续多久。或者,你可以像 Gott 那样,应用他的简单等式,正确预测百老汇 44 场秀中 42 场的运行时间。

当我们考虑单个数据点时,很容易迷失在细节中,并误解人类行为的某些方面。有时候,我们需要退一步,抽象出所有的细节,应用基本的统计学,而不是试图弄清楚人类的心理。

关于后一点,正如纳西姆·塔勒布在他的书《抗脆弱》中指出的,要想知道一个不易腐烂的东西——比如一个想法或者一件艺术品——会存在多久,最简单的方法就是看看它目前的寿命。换句话说,一项技术的未来寿命与其过去寿命成正比。

这被称为“林迪效应”,稍加思考就会明白:一个已经存在了很长时间的概念——书籍作为交换信息的媒介——一定有其存在如此之久的原因,而且我们可以预计它将持续到很久以后。另一方面,一个新想法——谷歌眼镜——在统计上不太可能存活,因为每天都有大量的新概念出现。

此外,已经有 100 年历史的公司——卡特彼勒(T0)公司(T1)——肯定在做正确的事情,我们可以预计它们比初创公司(T2)公司(Theranos)公司(T3)存在的时间更长,后者没有证明它们满足了需求。

再举一个更能说明哥白尼生命方程的例子,想想你一小时前发的精彩推特。统计数据告诉我们,这将在 90 秒到不到 2 天之间。另一方面,最古老的英语故事,贝奥武夫 ,至少从现在起 26 年后,直到未来 39000 年后,仍然会被无聊的学生阅读。更重要的是,这个故事不会在虚拟现实中体验到——消费者虚拟现实还有 73 天到 311 年——而是在最持久的媒体形式上,书籍,它还有 29.5 到 45000 年的统治期。

有些人可能认为哥白尼原理——时间和空间——是一场悲剧,但我觉得它令人兴奋。就像我们只有在抛弃了地心说模型之后才意识到宇宙的惊人壮观一样,一旦我们放弃了我们的时代是特殊的、我们处于人类顶峰的神话,可能性是巨大的。是的,我们现在在宇宙尺度上可能是微不足道的,但是 5000 年后,我们的祖先——或者可能是我们——将会扩展到整个银河系,甚至从根本上改变银河系。

正如大卫·多伊奇在他的书《现实的结构》中指出的那样,只要有足够的时间,任何不被物理定律所禁止的事情都会被人类实现。与其担心你现在应该做的工作毫无意义,不如把它看作是对人类已经开始的伟大努力的贡献。我们目前受制于哥白尼原理,但也许人类真的不同:毕竟,我们是进化出思考我们在宇宙中的位置的能力的恒星。

来源:

  1. 哥白尼原理对我们未来前景的影响
  2. 如何预测一切
  3. 我们很清楚人类何时会灭绝
  4. 哥白尼原理:如何预测任何事情

衍生物

哥白尼寿命方程的推导如下。任何事物的总寿命是当前寿命加上未来寿命:

如果我们不相信我们的时间位置是有特权的,那么我们对一个现象的观察既不发生在开始也不发生在结束:

对 z 进行如下替换:

插入总寿命的定义,得到:

然后求解未来有生之年的任何现象:

在置信区间为 95%的情况下,我们得到乘法因子 1/39 和 39;置信区间为 50%时,因子为 1/3 和 3;对于 99%的置信度,我们的因子变成 1/199 和 199。

你可以在这个 Jupyter 笔记本里摆弄方程式。另外,看看 Gott 的原始论文了解更多细节。

一如既往,我欢迎建设性的批评和反馈。可以在 Twitter @koehrsen_will 上找到我。

汽车融资成本(汽车贷款)

原文:https://towardsdatascience.com/the-cost-of-financing-a-new-car-car-loans-c00997f1aee?source=collection_archive---------7-----------------------

了解如何计算每月汽车付款(相当于每月分期付款)。了解利率/年利率如何影响每月还款额,以及贷款期限如何影响支付的总利息。

This tutorial gets into more than how the length of a loan affects monthly payments.

本教程将包括:

  • 如何计算每月付款(相当于每月分期付款)。
  • 利率/年利率如何影响月供。
  • 贷款期限如何影响支付的总利息

和往常一样,本教程中使用的代码位于我的 GitHub 上。就这样,让我们开始吧!

如何计算每月付款(相当于每月分期付款)

Investopedia 将您的月还款额(也称为您的等值月分期付款(EMI ))定义为借款人在每个日历月的特定日期向贷款人支付的固定金额。等额月供用于每月还清利息本金,这样在一定年限内,贷款全部还清。

每月付款可以使用类似于下面的 EMI 公式计算。

示例:计算每月付款(简化)

I want to upgrade my car from a 2002 Toyota Sienna to a 2019 Toyota Sienna.

说我买想买一辆 2019 款丰田 Sienna 31115 美元。我很好奇,如果我决定贷款购买这辆新车,每个月要花多少钱。一家汽车经销商向我提供 60 个月的固定利率 7.02%。假设销售税率为 7.5%,每月汽车付款将是多少?

Note that I rounded up to the nearest cent.

虽然这是一个简化且相对准确的计算(除了销售税是一个假设),但在下一个示例中有一个更准确的计算。

示例:计算每月付款(包括一些费用)

比方说我买我想从洛杉矶一家总销售税率为 9.75%的汽车经销商那里花 31115 美元买一辆 2019 款丰田 Sienna(来源)。在经销商通过 1500 美元的折扣降低价格之前,价格最初是 32,615 美元。我很好奇,如果我决定贷款购买这辆新车,每个月要花多少钱。一家汽车经销商向我提供 60 个月的固定利率 7.02%。每月汽车付款是多少?

除了计算贷款的本金实际上更复杂之外,这可以通过与上一个示例相同的方式来解决。换句话说,税费需要加在购买价格上。大多数州对购车征税**,然后将折扣或奖励**应用于汽车价格来源。虽然费用可能因地而异,但此示例计算的费用如下

排放测试费:50 美元

注册费:200 美元

盘子转让费:65 美元

加州文件费:80 美元(记住有些州收取的文件费要高得多

这个月付款比前一个例子中显示的要高 24.59 美元(687.23 — 662.64)

利率/年利率如何影响月供

在进入这一部分之前,了解一下术语年化利率(APR)是很重要的。对于汽车贷款,年利率是你支付的利息费用加上所有其他费用,你必须支付你的贷款,而利率只占利息费用。虽然你可以在这里了解年利率,但年利率比你的利率高(希望只是稍微高一点)。请注意,尽管 APR 比利率高(假设费用少,通常不会高很多),但从数学上来说,它们是相同的,因为它们都给你相同的付款。出于本教程的目的,让我们在数学上更简单些,假设年利率和利率相同

通过查看下表,很明显你的 FICO 分数会影响你的 APR,从而影响你的月供。

Source: The Simple Dollar

如果你想知道简单的美元是如何计算出支付的总利息的,请阅读下一部分。它详细说明了你每月支付多少利息。

如何计算支付的总利息

贷款的一个重要部分是知道在贷款过程中你将支付多少利息。这有点复杂,因为用于偿还贷款本金的月供(EMI)的百分比会随着时间的推移而增加。使用来自**计算月供(包括一些费用)**部分的相同本金(34689.96 美元)和利率(7.02%),下图显示,对于每个后续月供,支付的本金持续上升,而支付的利息持续下降。

Dollars that go towards interest and principal each month from a monthly payment (EMI) of 687.23 with an interest rate of 7.02%

现在,让我们通过生成一个类似于下面的表来计算支付的总利息,然后对支付的利息列求和。

Notice how much interest and principal are paid each month.

虽然我会用 Python 来做,但也可以用电子表格或任何你觉得舒服的东西来做。

1-)第一件事是计算每月付款中有多少钱将在一个月内支付给利息。

2-)每个月,月供的一部分用于支付本金,一部分用于支付利息。随着本金的降低,为了计算出你接下来几个月要支付的利息,你需要先计算出你的新本金。你可以在下面看到如何计算这个。

3.重复步骤 1 和 2,直到主体达到 0。您可以在下面的 Python 代码中看到这样的例子。

Python Code to Create Payment Table

Notice how much interest and principal are paid each month.

4.得到每个月支付的利息后,对支付的利息列求和。

np.round(payment_table['Interest Paid'].sum(),2)

向较低利率再融资

这个例子看的是一个人在低利率贷款过程中可以少付多少利息(支付的总利息)。特别是,在 60 个月的期限内,3.59%的利率与 7.02%的利率之间的差异。

Code to generate tables of total interest paid for different interest rates

通过使用与上一节相同的计算方法,较低的利率将节省 3285.63 美元的总利息。此外,由于利率较低,月供将减少 54.76 美元(687.23 — 632.47)

如果你可以选择以较低的利率再融资,重要的是要注意,你目前的贷款可能会有提前还款罚款,或者你的新贷款可能会有发起费。换句话说,如果你决定重新贷款,尽你所能去了解你签约的是什么。我应该注意到,Credit Karma 有一个关于为你的汽车贷款再融资的指南,NerdWallet 有几个方法来避免为你的汽车贷款多付

贷款期限如何影响支付的总利息

**一般来说,在利率相同的情况下,你贷款的时间越长,总利息越多。**比较下面两笔贷款。两者的利率都是 7.02%,但一个期限是 60 个月,另一个期限是 72 个月。虽然 72 个月的贷款月供(EMI)低于 60 个月的贷款(591.76 比 687.23),但贷款的总利息支付成本会更高。

上图显示,72 个月的贷款总利息成本为 7916.58 美元,而 60 个月的贷款成本为 6543.51 美元(72 个月的贷款成本为 1373.07 美元)。如果你想了解更多关于汽车贷款期限的决定,埃德蒙兹有一篇很好的文章

结论

我希望你喜欢这个教程,并获得了汽车贷款如何工作更好的理解。如果你对本教程有任何问题或想法,欢迎在下面的评论中或通过 Twitter 联系我们。如果你想学习如何使用 Pandas、Matplotlib 或 Seaborn 库,请考虑参加我的数据可视化 LinkedIn 学习课程

解决分析过载的方法

原文:https://towardsdatascience.com/the-cure-for-analytics-overload-fefeb7529ea3?source=collection_archive---------10-----------------------

你知道你花了多少时间试图在你的指标中找到意义吗?如果有更好的方法呢?

早上你坐在办公桌前,手里拿着咖啡,准备开始工作。你用仪表板开始你的一天,检查事情进展如何。实际上,您可以查看一些仪表板,因为一个仪表板无法涵盖您的全部业务。和一些电子表格。你看着它们——然后你做了很多思考。你问自己,这个指标看起来对吗?你将它与你认为它应该是什么样子的,以及你认为它去年是什么样子的进行比较。你上周不是开展了一场新的营销活动吗?这肯定会改变数字。你强调正在发生什么事情,以及该向谁询问。

听起来熟悉吗?如果是这样,你并不孤单。事实上,你的经历和今天的大多数商业领袖是一样的。

您使用几十种不同的软件工具,每一种都会产生无数的度量标准,其中任何一种都可能在任何时候指出问题或机会。这些仪表板有些是电子表格,有些是图表,但所有这些都需要研究才能提取价值。试图从数字中获得洞察力所浪费的时间是惊人的。如果您每天浏览 4 到 5 个仪表盘,然后花几个小时参加仪表盘驱动状态/规划会议,那么您每周大约要花 6 个小时来检查指标。这占了你一周时间的 15%,只是想弄清楚到底发生了什么!在一年的时间里,加起来超过 300 个小时,几乎是你两个月的时间。

有更好的方法。机器学习正在开启一种新形式的商业智能,称为商业分析自动化。您无需从仪表板、电子表格和数字中开始一天的工作,只需一次更新,您就可以将所有重要的业务见解发送到收件箱中。在花五分钟阅读你的更新后,你会知道当天你需要改善业务的一切。

想象一下这将如何加速您的业务。不要试图找出哪些营销活动有效或无效,你会立即知道你应该在哪些方面加大投入或减少投入。如果您的客户行为发生变化,您不必试图找出原因,您将实时了解原因和影响。不要等着你的收入下降并试图找出原因,只要出现收入问题,你就会知道,并在它变成危机之前采取行动阻止它。

你可能认为这项技术还需要几年的时间,但这个世界已经到来,公司今天已经在利用自动化分析。像 Outlier 这样的软件应用程序将公司从试图从数据中提取洞察力的负担中解放出来,从而节省了时间和金钱。相反,他们利用这些见解在很短的时间内推动更好的业务决策。

您准备好看到自动化分析每周为您节省 6 个小时了吗?让我们知道

人工智能的当前趋势

原文:https://towardsdatascience.com/the-current-trends-in-artificial-intelligence-198a80e820c5?source=collection_archive---------5-----------------------

除非你生活在岩石下,否则你会看到过多的文章,让你相信人工智能革命已经到来,而且会持续下去。当我们试图理解这些说法背后的一些理论时,会有更多的文章试图通过阴谋末日理论在非专业观众中制造恐慌。当对人工智能不能做什么缺乏理解时,就会对人工智能能做什么产生恐惧。我认为了解人工智能领域的技术现状很重要。

最近,我有机会参加在澳大利亚悉尼举行的 2017 年机器学习国际会议(ICML)。作为一个著名的人工智能会议,有几个令人惊讶的演讲者介绍了人工智能各个子领域的最新进展。在本文的其余部分,我将讨论一些研究论文,这些论文突出了这些子领域中的一个主题。鉴于我参加会谈的时间有限,这些主题是基于我的观察。然而,为了这篇文章的简洁,在回顾这些趋势之前,我没有提到任何子领域的基础知识。因此,需要熟悉这些子领域的概念才能理解。

1)强化学习及其现实应用

http://www.mdpi.com/robotics/robotics-02-00122/article_deploy/html/images/robotics-02-00122-g009.png

当一个代理被部署在现实世界中时,它可能热衷于探索它的环境,但是它需要遵循某些约束,以便服从该环境的限制。来自 Berkeley AI Research (BAIR)的一个团队展示了他们名为的受限策略优化(CPO) 的工作,该工作为策略搜索引入了由安全驱动的约束。它有许多应用,在探索时可以确保安全。此外,BAIR 发表了一篇文章解释他们在 CPO 上的工作

如果代理/机器人被非技术所有者购买,她应该能够通过提供反馈来培训代理。麦格拉申等人。al 提出了人类的收敛行动者批评(蔻驰),这是一种从依赖于政策的反馈中学习的算法,用于利用非技术用户提供的反馈来训练代理/机器人。他们证明,蔻驰也可以在有噪声图像的物理机器人上学习多种行为。

以便进行任何人类活动,如烹饪、家务等。RL 代理需要执行长指令序列,并对新的看不见的子任务进行归纳。有时,会有其他意想不到的指示,如电池电量不足等。,它需要一个偏差来完成剩下的子任务。为了实现这些目标。al 已经提出了一种通用的方法,它采用自然语言的任务序列,并且主要是顺序地执行子任务。他们分两步解决了这个问题:1)学习执行子任务的技能和基于类比的概括框架。2)确定子任务执行顺序的元控制器。与现有的工作不同,他们的架构通用性很好,还能处理意想不到的子任务。

为了完成多组任务,我们需要一个策略,既能理解子任务,又能在完成任务的同时优化整体回报。通常,代理不会因为完成子任务而立即获得奖励。安德里亚斯等人。al 提出了一个在多任务环境中学习深度子策略的框架。该算法仅由高层行为的抽象草图指导。

2)深度学习优化

为了正则化深度神经网络,使用了几种方法,如批量归一化、白化神经网络(WNN)。为了应用白化,构建协方差矩阵和求解 SVD 的计算开销成为瓶颈。平罗提出的工作试图通过一种称为广义白化神经网络(GWNN)的新方法来克服 WNN 的局限性,这种方法通过紧凑的表示来减少计算开销。

Budden 等人研究了硬件实现 ConvNets 的高维张量核的局限性。al 。他们提出了一种 Winograd 风格的更快的计算,用于为 CPU 优化的更高维度。他们将自己的算法与支持 AVX 和英特尔 MKL 优化库的流行框架(如 Caffe、Tensorflow)进行了基准测试,并得出了一个有趣的结论,即当前的 CPU 限制主要是由于软件而不是硬件。

扩展快速计算类,如 FFT、Winograd、 Cho 和 Brand 提出了一种内存高效计算(MEC ),它降低了内存需求并改进了卷积过程。MEC 采用滚动的列子集,并将其扩展为行,以形成一个更小的矩阵。这个过程与核矩阵乘法一起重复,以产生有效的计算。

随着特征映射数量的增加,冗余增加,导致低效的存储器使用。王等人。al 提出了一种称为 RedCNN 的方法,该方法试图通过保留固有信息并降低特征图之间的相关性来降低特征图的维度。他们使用循环矩阵进行投影,从而提高了训练速度和映射速度。

梯度之间的相关性随着网络中的深度缓慢衰减,导致梯度表现为白噪声。这些粉碎梯度主要在前馈网络中观察到,然而跳跃连接网络是有抵抗力的。作者提出了 Looks 线性(LL)初始化,它解决了前馈网络中的粉碎梯度,而不增加任何跳跃连接。

3)深度学习应用

识别睡眠模式将有助于诊断睡眠障碍,从而提供更好的医疗保健。然而,现有的识别睡眠模式的方法涉及使用大量附着在患者身体上的传感器,并且通常在医院或实验室中进行。实验设置本身会使患者经历睡眠困难,从而导致测量不可靠。麻省理工学院的一个团队进行了一项研究,在病人身上没有任何传感器的情况下,使用无线射频(RF)信号来识别睡眠模式。他们使用 CNN-RNN 组合来识别睡眠阶段预测的模式。然而,RF 信号会受到环境中任何附近源反射的噪声的影响。因此,他们增加了一种对抗性训练,这种训练会丢弃任何个体特有的无关信息,但保留预测睡眠阶段所需的有用信息。他们已经取得了明显好于使用手工制作的信号特征的现有最先进水平(大约 64%)的结果(大约 80%)。

来自百度的团队展示了他们在深度语音方面的工作,这是一种端到端的神经语音合成。他们详细介绍了五个主要的构建模块,包括使用 Wavenet 的变体将音素转换为音频合成。由于他们的整个架构是由神经网络驱动的,因此他们的系统比现有的文本到语音转换系统更加灵活。他们还描述了优化的 Wavenet 推断,与现有实现相比,可以实现高达 400 倍的加速。

4)元学习

模型不可知元学习(MAML)由芬恩等人提出。al 创建了一个元学习模型,其参数是从任务分布的随机抽样中学习到的。这种模型可以使用少量的训练样本和迭代快速适应新的任务,这通常被称为少镜头学习。作者还演示了 MAML 在分类、回归和强化学习任务中的应用。

Cortes 等人提出了一篇关于学习网络结构和权重的有趣论文。al 。这种被称为 AdaNet 的方法通过增加网络的深度来学习网络结构。新网络的 kth 层连接到现有网络的 kth 和 k-1^th 层。通过比较它们在经验损耗函数和正则化参数上的性能来选择网络架构。

威奇罗夫斯卡等人。al 介绍了一种学习型梯度下降优化器,它可以在减少内存和计算需求的情况下推广到新任务。他们在定义优化器时使用了分层的 RNN 架构,它在 MNIST 数据集上的表现优于 RMSprop/Adam。

5)顺序建模

音段结构是许多序列中的一种自然模式,如人类语言中的短语或字母组,用于识别音位规则。王等人。al 提出了一种通过分段的序列建模方法。他们已经使用 LSTM 学习了片段结构,并且通过限制搜索空间和进一步探索片段的结构来搜索可能片段的空间。

脸书人工智能研究所(FAIR)使用卷积进行序列到序列学习的流行实现在 ICML 2017 上吸引了很多关注。他们使用多层卷积创建了分层结构,从而复制了在传统的基于 LSTM 的架构中捕获的长程相关性。他们还在每个解码层使用门控线性单元、剩余连接和注意力。

Bamler 等人研究了单词嵌入的时间演化。al 在他们题为“动态单词嵌入”的论文中。在他们的方法中,他们将跳跃图扩展到概率动态跳跃图,以模拟具有潜在时间序列的连续文本数据。他们的方法的主要贡献是使用卡尔曼滤波器作为潜在嵌入的先验。这允许他们在任何时候都可以共享信息,同时允许嵌入内容自由移动。

6)机器学习优化

来自微软印度研究院的一个团队已经提出了强大的基于树的模型,可以帮助在像物联网这样的资源受限设备中运行机器学习,只有 2 KB RAM

对于分类问题,通常梯度增强决策树(GBDT)表现相对较好。然而,当多标记分类的输出空间变得高维和稀疏时,GBDT 算法会遇到内存问题和长运行时间。以便具有更好的预测时间和减小的模型尺寸。al 提出了 GBDT 稀疏算法来处理高维稀疏数据。

7)创成式模型应用

来自 Google Brain 的团队提交了一篇关于使用 Wavenet 自动编码器进行音频合成的论文。他们的主要贡献是 Wavenet 自动编码器架构,该架构包括建立在扩展卷积上的时间编码器,该编码器利用时间和信道的独立维度对隐藏码序列进行编码。此外,他们还引入了 NSynth 数据集,该数据集包含来自约 1k 种乐器的约 300k 个带注释的音符。

对像用户浏览历史这样的顺序数据建模具有很大的动作空间,其中许多动作具有相似的意图或主题。像 LSTM 这样的递归神经网络需要许多参数来模拟这样的数据,使得模型非常难以解释。然而,像 LDA 这样的模型可以模拟这种顺序数据,并且是可解释的,但是性能并不比 LSTMs 好。为了克服这些限制,Zaheer 等人。a l 提出了一种结合层次贝叶斯模型和 LSTMs 的用户建模潜在 LSTM 分配(LLA)。

Rippel 和 Bourdev 提出的图像压缩算法使用 GANs 代替自动编码器。提出的解决方案包括金字塔分解编码器,提取不同尺度的图像特征。使用量化、位平面分解、算术编码和码长正则化将提取的特征分解成相等大小的仓。接下来是通过对抗训练进行现实重建。

8)自然语言生成架构

为了克服判别模型在自然语言文本生成中的局限性,Wen 等。al 提出了一个潜在意图对话模型,用于使用潜在变量学习意图,然后组成适当的机器响应。本文背后的关键思想是将潜在意图分布表示为反映人类决策的内在策略,并使用基于策略梯度的强化学习来学习。

胡等人提出了一种使用潜在语义结构的自然语言生成方法。他们使用 VAEs 生成基于潜在属性代码的文本样本。使用每个代码的单独鉴别器来学习属性代码,该鉴别器使用 softmax 近似来测量生成的样本和期望属性之间的匹配。

9)高效的在线学习

对于在线多类 bandit 算法,Banditron 以前的工作虽然计算效率高,但只实现了 O(T2/3 预期的遗憾。这是次优的,因为 Exp4 算法对于 0-1 的损失实现了 O(T1/2 遗憾。贝格尔齐默等人。al 曾用 O(T^1/2 提出了一个高效的在线强盗多类学习)遗憾。

多武装匪徒的环境评估是一个棘手的问题,因为在线评估的成本太高,无法评估不同的政策,而非政策评估方法在估计中存在差异。虽然存在诸如逆倾向分数(IPS)的方法,其给出了对 MSE 的良好估计,但是它们在选择行动时没有考虑背景信息。作者王等人。al 提出了一个算法开关,它有效地使用了奖励模型和 IPS,与之前的工作相比,方差减少了。

10)基于图形的算法

许多现有的从数据生成知识图的方法认为该图是静态快照。在由特里维迪等人发表的作品中。al 他们已经证明了知识图是随时间演化的,并且他们已经开发了一个多维点流程来为演化的知识图建模。

仅从节点访问计数识别转移概率可以帮助理解用户的导航行为。梅斯特雷等人。al 提出了 ChoiceRank,这是一种迭代算法,可以通过只观察节点级流量来学习边缘转移概率。

在 ICML 2017 年会上还有很多有趣的论文和海报,我不可能用一篇文章来概括。我与一些来自工业界和学术界的顶尖人物会面,度过了一段美好的时光。

如果有任何需要修改的地方,请务必通知我。另外,我很乐意谈论这些研究论文中的任何一篇。如果你想进一步讨论,请给我发邮件到 gsk.krishna@gmail.com。

数据科学中“直觉”的诅咒

原文:https://towardsdatascience.com/the-curse-of-intuition-in-data-science-552bc28c55e5?source=collection_archive---------5-----------------------

我们习惯很快就下结论,而不分析所有方面。因此,当试图理解世界时,直觉经常失败。在这里,我提出了一个不同的系统来做数据科学,而不是“相信你的直觉”。

免责声明:我不是以常识或直觉专家的身份在这里说话。我只是说,它并不总是适用于数据科学。

我们的常识

我们有常识:一种基于对我们人类“有益”的事物来看待和理解事物的方式。这可能是一个定义,我们可以扩展到一些更技术性的东西:

关于日常事务的合理的实际判断,或者几乎所有人都具有的感知、理解和判断的基本能力。

按照这个定义,如果要遵循常识,就需要基于与“大多数人”共有的东西来理解和判断。

好吧,别误会,这在生活的某些方面很重要。我的意思是,如果一只危险的动物正在接近你,逃跑或者只是做一些让自己活下来的事情是常识。不吃这种杀死了半个村子的植物也是常识。那太好了。

但是正如我在之前所说的,可悲的是,主导我们文化的常识是亚里士多德式的中世纪式的。这意味着直觉在试图理解世界时失败了很多次(想象一下科学家仍然认为石头掉到地上是因为那是他们的自然位置!).“常识”有时伴随着糟糕的判断,使我们看待事物的方式产生偏见。

我们习惯于只看到眼前的东西,并且“相信我们的直觉”。

我们的直觉

我的意思是,我试图在这里写点什么,但我只是让三个定义和三张图片来说话。

在没有证明、证据或有意识的推理的情况下获得知识的能力**,或者在不了解知识是如何获得的情况下获得知识的能力**。****

哇。

凭直觉而非有意识的推理知道或认为可能的事情。

哦,我的……

不需要有意识的推理就能立即理解某事的能力。

好的……

斯科特·亚当斯的《伟大的图像》:

http://dilbert.com/strip/2014-07-22

http://dilbert.com/strip/2011-08-17

http://dilbert.com/strip/2013-04-24

无可奉告。

数据世界中的常识和直觉

显然,正如所料,我们将我们的常识和“做事”方式融入到了我们的公司和工作生活中。虽然前阵子常识和直觉都造就了百万富翁,但现在世界变了。现在,相信自己无知直觉的人不太可能打败那些通过对世界和我们拥有的数据的深入研究和分析做出决策的人。

此时此刻,值得思考的一件有趣的事情是,知识不在我们体内,而是在我们之间的空间里。它就在那里,等着我们去解释它要说的话。

好吧,我知道这听起来有点奇怪,但是在判断之前(或者相信你的直觉,谁在尖叫,“胡说!”),先详细了解一下:

[## 伊曼努尔·列维纳斯(斯坦福大学哲学百科全书)

话语和博爱的主体间性起源只有通过现象学描述才能达到。否则…

plato.stanford.edu](https://plato.stanford.edu/entries/levinas/) [## 雅克·拉康(斯坦福大学哲学百科全书)

雅克·拉康(1901 年 4 月 13 日至 1981 年 9 月 9 日)是巴黎知识界的重要人物

plato.stanford.edu](https://plato.stanford.edu/entries/lacan/)

那么数据科学和这些有什么关系呢?超越常识和直觉是解决复杂商业问题的唯一途径。在一个充满直觉模型的世界里,颠覆和进步来自于更进一步,用数据去理解肉眼或“专家的眼光”看不到的东西。

正如 Russell Jurney 在 T2 的“敏捷数据科学宣言”中所说

软件应用开发中,有三个视角需要考虑:客户的视角,开发者的视角,以及商业的视角。在分析应用开发中,这里有另一个视角:数据视角。如果不了解数据对任何特性的“说明”,产品负责人就无法做好工作。产品讨论中必须始终包含数据的观点,这意味着它们必须通过内部应用程序中的探索性数据分析以可视化为基础,这成为我们工作的重点。

再次强调:数据的观点必须始终包含在产品讨论中。

在脑子里重复一遍。这很重要。

我们需要听听数据是怎么说的。不要再相信我们总是比数据知道得更多。如果我们在该领域的“专家”可以解决所有问题,那么还需要什么数据科学家呢?模型要么来自数据(不是轶事“经验”或直觉),要么根本不是模型。

我认为,打造数据驱动型组织的第一步是向团队、董事、经理和董事会证明,“倾听”、使用和理解数据远胜于使用我们的感觉。换句话说,他们需要知道这是可行的,并且只有在整个分析和数据科学周期结束后才能做出明智的决策。

我很想听听你对此有什么看法,并分享你对这个问题的想法。

感谢你阅读这篇文章。希望你在这里发现了一些有趣的东西:)

如果你有问题,就在推特上加我

[## 法维奥·巴斯克斯(@法维奥·巴斯克斯)|推特

Favio Vázquez 的最新推文(@FavioVaz)。数据科学家。物理学家和计算工程师。我有一个…

twitter.com](https://twitter.com/faviovaz)

还有 LinkedIn。

[## Favio Vázquez —首席数据科学家— OXXO | LinkedIn

查看 Favio Vázquez 在世界上最大的职业社区 LinkedIn 上的个人资料。Favio 有 15 个工作职位列在…

linkedin.com](http://linkedin.com/in/faviovazquez/)

那里见:)

助长网络攻击的“网络安全营销骗局”

原文:https://towardsdatascience.com/the-cybersecurity-marketing-scam-that-is-contributing-to-cyber-attacks-4cfc8c580812?source=collection_archive---------2-----------------------

The “Cybersecurity Marketing Scam” that is contributing to Cyber-attacks and destroying the industry

澳大利亚墨尔本,2017 年 7 月 5 日——eve stigator 的西蒙·史密斯警告世界注意最新的威胁,即“江湖骗子”。

“自称即时‘网络专家’是新的‘网络骗子’。他们绕过了 20 年的多个专家领域”,网络安全专家西蒙·史密斯警告全世界。流行语:“新兴创新”、“人工智能”、“物联网”、“神经网络”、“认知计算”、“认知安全”、“增强网络现实”、“云”、“网络神经元”都不是新的、创新的、新兴的相关、现实或相关技术。

一个人所需要做的就是上网、读报或听新闻,听到关于所谓“网络安全解决方案”的离奇故事。拥有 21 年经验的网络安全大师史密斯先生解释道。

"他们应该是在与一个充满欺骗的行业作斗争,然而他们的欺骗是最大的网络风险",史密斯先生说。

“事实上,正是写这些文章的人立即让真正的专家知道他们是网络安全的风险。几乎所有的上述词汇要么是几十年前的,而且一直存在”,史密斯先生说。“‘云’就是互联网,自从 26 年前我对编程感兴趣以来,远程执行就一直存在。简单地通过瘦客户机应用程序托管、Citrix、VMWare 和远程存储,这些是我开始工作时作为 avid 软件工程师开发的应用程序的一部分”,他说。

“我 11 岁,18 岁就从事商业,现在已经有 21 年的行业经验,看到这个行业因为一些甚至连软件公司都不采用的词语而分崩离析,我感到不安。“物联网”是另一个被滥用的词,因为互联网总是连接到我创造的硬件设备,从来没有“网络安全问题”。这是江湖骗子编造的神话和销售虚张声势,他们只是想利用他们“希望成为新兴的创新市场”来赚钱。事实是,他们造成了问题,而不是缓解了问题。

一些公司的研讨会提出了“最佳实践”、“想法”和“产品”,但绝对没有在网络犯罪、网络安全或任何相关领域有经验的演讲者。“他们正在摧毁这个行业。这些业余爱好者试图跳上 20 年的楼梯,寻找捷径,但这是许多专业的学科,他们的无知建议是最大的网络安全风险”,史密斯先生说。

Smith 先生是一位经验丰富的软件工程大师、网络安全培训师、一线网络危机维护者、导师、专家证人、一线缓解专家和网络取证调查员。他还是一名计算机数字取证专家,在整个安全和软件工程领域拥有丰富的行业经验,拥有超过 21 年的行业实践经验,ISO 首席信息系统审核员资格,完成了 8 门美国国土安全部认可的课程,在澳大利亚拥有 10 多项研究生证书/文凭,以及 100 多项高级及以下文凭,涉及 CISO、CCFE、CCP、ITSM、PMP、GCertITSM、GCertITS、ms、MC、Dip 等多个学科。SD,NW,SA,MCSD,PMP,等等。完整的名单可以在他的 LinkedIn 个人资料上找到。www.linkedin/in/simonsmithinvestigator

“在最近的一个论坛上,我看到有人写了技能短缺的解决方案。那就是“简单地雇佣外行人”。我回应说,你愿意让护士给你做心脏直视手术吗?似乎上市热潮已经变得比传统的 SDLC 和测试更加重要。公司宁愿把一个产品送上货架,让没有方法论的青少年业余黑客也许在 SDLC 下找到一些东西,而不是经过验证的方法论。难怪它们是可以被黑客攻击的”,史密斯先生说。

“思想家们跳上维基百科,寻找最新的‘流行语’,开始营销。我见过他们引用半定义,比如维基百科中的'认知计算技术。史密斯先生说,如果他们正确地复制和粘贴,你会在第一行读到“目前,无论是学术界还是工业界,对于认知计算都没有一个广泛认同的定义”。

“所有这些荒谬的词语所指的以及它们试图描述的软件仅仅是复制‘自动化机器学习’,我和许多其他人已经编写了 21 年以上的程序,是的,如果做得正确,会有所不同。没有一件计算机能做的事是人类没有指示它去做的。它可以做得更快,它可以用我们告诉它如何做的方法来学习,但有一个风险,如果我们做错了,我们就会犯一个大的“快”错误。唯一的例外是算法。人类仍然有可能进行数学运算,所有这些所谓的“新兴恶意软件检测”认知人类替代品(即使它们存在并确实工作)所能做的就是发现一种趋势,这种趋势可以帮助人类发现现实。然而,这仍然是‘自动机器学习’,”史密斯先生说,他作为专家证人在法庭上对‘IT 专家’进行审计。

他说,“然而,如果这还不够‘时髦的话’,史密斯先生超越了人工智能的发现声明,并说“对于人工智能,我们求助于逻辑、科学和定义。首先,你认为它的意思是不可能的,并记录为 AI(完成)。这意味着逻辑上也不可能依赖和管理诸如推理之类的任务,即预测我们人类与生俱来的'先验意识'的行动。在其他任何意义上,它都是'机器学习'。众所周知,人工智能不同于机器学习,因为它需要'常识',类似于'先验意识'。根据定义,常识性知识“一般来说是不可能的,除非机器熟悉一个普通人熟悉的所有相同概念”。

他接着说,“现在,模式识别在它的上下文中被定义为一种形式的机器学习,因为它必须让人类知道什么构成了一个模式。史密斯先生说,模式识别的定义是“给一个给定的输入值分配一个标签”。

史密斯先生将这种欺骗性比作他遇到网络犯罪时遇到的欺骗,那些人因为我们对现实和无知的转移而嘲笑我们所有人。史密斯先生上周抓获了一名重要的网络骗子,他是一个价值 3000 万至 4000 万美元的犯罪集团的成员,他说:“当我发现现实生活中的网络骗子、网络跟踪者和网络罪犯时,我看到了真实的自杀、真实的邪教绑架、真实的黑客攻击、真实的企业被摧毁、真实的人面临牢狱之灾、真实的儿童剥削和真实的枪口下的恐怖故事。这不是游戏,对受害者来说一点也不好笑,所以我的建议是,网络营销骗子们在人们受到伤害之前赶紧离开。

最后,史密斯先生谈到了新一代“网络营销骗子”正在使用的新“流行语”。正是这个话题让史密斯先生警告该行业,如果它不采取立场,它就注定要失败。他们倾向于使用单词“认知能力”和现在的“神经网络”。

史密斯先生说,“公众现在应该知道,只有‘自动化机器学习’,但在这种情况下,是由一种数学算法辅助的。有些数学趋势是可以预测的,有些是不可能的。我们再次转向维基百科,它说,“像其他机器学习方法一样,神经网络已被用于解决各种各样的任务,如计算机视觉和语音识别,这些任务使用普通的基于规则的编程很难解决”。还值得一提的是,所有这些引用都可以追溯到 20 世纪 80-90 年代。当我说我在谈论“物联网”、“云”和所有所谓的 新兴创新

什么变化导致了网络犯罪的增加?

“除了懒惰、市场开发、大量涌入市场和违反 SDLC/消除适当的测试方法和维护之外,什么都没有。这些文章的作者和这些研讨会的主持人引起了关注。程序员和产品开发人员需要开始变得更聪明,正确地完成他们的工作和测试。然后,营销人员需要等待适当的 SDLC 开始。成为网络安全专家没有捷径可走。史密斯先生说:“花 20 年时间学习各种职业,然后你就会自然而然地了解各种学科。

免责声明

如果真相伤人,就去面对它。这必须是来自某个在第一线有专业经验的人对世界的警告。不是每个人都有意这样做,但这是真的,它正在发生,史密斯先生提供这种情报没有金钱上的好处。决策者(包括政府)应对发布这些声明、产品或事件的人进行尽职调查。其次,史密斯指出,网络缓解和阻止内部威胁和人类思维黑客(社会工程)是答案。

他提供有限的社会工程师内部测试和合同。他作为专家证人参与,表演 R&D 和/或寻找下一个网络罪犯。需要他的服务和时间。

他提醒读者,基于软件的网络攻击只占 10%,一般公司在攻击发生 300 天后才知道。他说 90%是社会工程。你必须从内部看”,史密斯先生总结道。

座右铭——你不能取代人类的优秀——你可以帮助它

请记住,人类是任何网络攻击中最薄弱的环节,技术次之!

Simon Smith,eVestigator Cyber Forensic IT & Expert Witness Services,网络安全负责人(APAC),21 岁以上的首席高级程序员、导师、国际顾问、法医调查员、社会工程师、专家证人、MBA 导师、媒体倡导者、国际警察特种部队网络犯罪顾问。

连线领英上的见解和媒体请求:
https://www.linkedin.com/in/simonsmithinvestigator
http://www.cybersecurity.com.au
http://www.evestigator.com.auhttp://www.cyberblog.com.au
http://www.evestigatortestimonials.com.au

点击这里通过我的 YouTube 频道订阅所有媒体采访:https://www.youtube.com/c/evestigatorAu/?sub_confirmation=1

透过单一视角看问题的危险

原文:https://towardsdatascience.com/the-danger-of-looking-at-problems-through-a-single-lens-98d494796d73?source=collection_archive---------6-----------------------

30 天写作挑战

这是我 30 天写作挑战 的第四天,我遇到了阻碍。在本月晚些时候开始新工作之前,我一直在学习机器学习的新技术。到目前为止,我已经介绍了 tf-idf(用于查找文档中的重要单词)贝叶斯分类(用于根据重要单词对文档进行分类)

我想到有很多不同的词应该被同等对待。比如“摩托车”和“摩托车”是直接等价的。我们不想训练我们模型以不同的方式处理这些单词。如果我们能够简化输入的数量,随着我们收集的文档不断增加,我们的计算将更容易管理。

今天我想探索将相似的单词分组的方法,这样我们可以为一个组选择一个规范的单词。

在谷歌上搜索“分组相似词算法”,会有很多结果。栈溢出有一堆答案,暗示了像 Levenshtein 距离Jaccard 索引这样的东西。这太棒了,我们发现了很多相当简单的算法,它们可以给单词一个相似度分数。

不过,这些技术并不是我们想要的。它们基本上是测量你需要增加、减少或转置多少个字符来把一个单词变成另一个单词。它们是你对作品进行拼写检查时使用的算法。你输入“mororbike ”,你的电脑知道这个词不在字典里,但你可能指的是“摩托车”。只有一个字符不同。

这不是我们想要的相似性度量。事实上,这将给我们带来次优的结果。“摩托车”和“摩托车”这两个词比“摩托车”和“摩托车”更相似。我们最终会将想要分别对待的单词分组,而不会将想要同等对待的单词分组。

我花了过去 24 小时的大部分时间试图找到答案。

终于,我想通了,就在我最没想到的时候。我正在开车,没有真正注意任何事情,突然意识到这不是机器学习的问题!

称之为灵感的闪现。称之为恢复理智。管它叫什么。我离问题太近了。我 4 天前开始写道“我将研究不同的[机器学习]算法和技术”,所以我处理这个问题,就好像它需要用机器学习来解决一样。

这里不需要机器学习。自从 1805 年第一本同义词词典问世以来,我们就可以查找类似的单词。事后看来,这是一个如此微不足道的问题。一旦我们在文档中挑选出了重要的单词,我们只需在词典中查找一个规范的单词。

我很恼火,我花了这么长时间试图解决这个问题,但我学到了宝贵的一课。以开放的心态处理问题。在确定问题的性质之前,不要运用你的偏见。我没有任何正式的软件工程,但我特别成功,因为我总是用新鲜的眼光处理问题。

这是一个及时的提醒。通过说“我是 xyz 方面的专家”来确立你的地位,这将使你带着 xyz 的想法来处理问题。把你的先入之见留在门口。从头开始。每次都是。

这是我 30 天写作挑战 中的一个帖子。我是一名软件工程师,试图理解机器学习。我没有博士学位,所以我将用简单的语言和大量的例子来解释事情。

关注我的Twitter查看我的最新帖子。如果你喜欢这篇文章,请点击下面的心形按钮来分享——这将有助于其他人看到它。

人工智能在医疗保健中的危险:风险内稳态和自动化偏差

原文:https://towardsdatascience.com/the-dangers-of-ai-in-health-care-risk-homeostasis-and-automation-bias-148477a9080f?source=collection_archive---------2-----------------------

伦敦肯辛顿和切尔西区的展览路是一些世界上最伟大的博物馆的所在地。但这也是最近城市设计实验的一部分,叫做共享空间。沿着街道的长度,道路和人行道之间的界限已经消失:汽车和行人共享同一空间,道路标记,交通灯和人行横道已经消失。通过增加不确定性和感知风险,这种想法是司机将降低他们的速度,从而为行人和车辆创造一个更安全的环境。

Exhibition Road. Image Credit: La Citta Vita, via Creative Commons

这种方法基于由荷兰心理学家 Gerald Wilde 在 20 世纪 80 年代首次提出的风险内稳态理论。该理论基于这样的观察:当一项活动变得更安全时,事故率通常保持不变。强制性安全带降低了事故中受伤的可能性,但是并没有降低人均死亡率。带防抱死刹车的司机更靠近前面的车。当 1967 年瑞典转向右侧驾驶时,死亡率明显下降,一年半后又回到了原来的水平。人类的冒险行为似乎与感知到的危险程度紧密相关。降低活动的风险感,人们会更大胆。

"处方数量越多,人们的个人责任感就越弱。"(汉斯·蒙德曼)

风险稳态从一开始就有争议,但是在过去的几十年里,行为适应感知风险的想法已经被科学界所接受。

在某些情况下,将其付诸实践似乎是可行的。在高街肯辛顿的展览路拐角处实施了共享空间方案。对改革前两年和改革后两年的公开数据的分析显示,交通相关伤害减少了 43%。

人-人风险稳态

临床实践中的风险经常被科学的复杂性所混淆。但是临床医生之间风险平衡的证据已经被发现,例如,在最近对英国重症监护室护士的研究中。在药物分配期间实施的安全措施包括在将药物给予患者之前由不同的同事进行多次交叉检查。虽然护士们接受过双重检查的训练,但是安全措施降低了感知的风险水平,并且在这项研究中,护士们认为不太可能犯错误。

“我认为在检查药物时,工作人员非常信任彼此,而不是像他们应该做的那样仔细查看处方。嗯,因为他们认为你不会犯错误是理所当然的。(桑赫拉等人。阿尔,2007)

在他的书《数字医生》中,鲍勃·沃希特讲述了帕布罗·加西亚(Pablo Garcia)的故事,一个年轻的病人服用了过量的 38 倍的抗癫痫药。他描述了尽管在配药前经过了 50 个不同的步骤和多次检查,工作人员还是没能发现处方错误。

Image credit: Liu Tao, via Creative Commons

处方错误会带来一种动力。错误通过的检查越多,在后续检查中被怀疑的可能性就越小。同样,诊断错误可以表现为 诊断动量 *。*一旦诊断结果在护理团队中传播开来,它就不太可能被质疑,一旦被发现是错误的,就更难被推翻。

人机交互:自动化偏差

人类在与执行自动化任务的机器互动时表现出类似的行为,称为自动化偏见:

自动化偏差:“倾向于忽视或不去寻找矛盾的信息,因为计算机生成的解决方案被认为是正确的”(Parasuraman & Riley,1997)

医学中自动化偏差的研究有着丰富的历史,但随着新的机器学习方法进入临床决策支持,这一研究变得尤为重要。在这些模型如何做出决定方面缺乏透明度,这将对赢得临床医生的信任和避免自动化偏差提出挑战。

自动化系统存在于一个范围内,从那些需要人类参与的系统,到人类被排除在任何决策之外的全自动化系统。

完全自动化适用于不需要决策灵活性、失败概率低且风险低的任务。但是对于决策涉及许多变化的变量的动态环境,例如医疗保健,完全自动化很难实现。

当应用于混乱的真实世界临床实践时,系统的性能无疑将具有小于 100%的准确性,因此人类操作员必须知道何时信任,何时不信任系统。我们如何设计人和机器之间的交互变得至关重要,以防止引入新的偏差和错误。

风险内稳态表明,临床实践的过度自动化可能会导致自满以及错误和事故的增加。来自其他领域的研究表明,当人类的任务被机器接管时,人类确实会遭受自动化偏见和个人责任的减少。

错误行动与不行动

对不完善的自动化系统的过度信任会导致两种特定类型的错误:委托错误和遗漏错误。当一个人错误地行动时,就发生了犯错误,当这个人在应该行动的时候没有行动时,就发生了不作为的错误。**

最近的一项研究使用决策支持系统调查了任务中的这两个错误。当系统提供正确的决策支持建议时,参与者的决策更快、更准确,并且需要更低的认知负荷。但是当系统给出一个错误的建议(“自动化错误”)时,参与者的决策表现下降到接近零。参与者假设系统是正确的,并且犯了委员会的错误——他们错误地执行了* 当系统根本没有给出任何建议(“自动化消失”)时,参与者更有可能犯遗漏的错误——他们没有在应该采取*行动的时候采取行动。**

有趣的是,与“自动化消失”条件相比,参与者在“自动化错误”条件下的准确性下降幅度更大。与决策支持系统出现故障并任由我们自生自灭(这里的错误是由于“自动化自满”)相比,我们在使用错误的决策支持系统时会犯更多的错误(自动化偏差)。作者建议,为了避免自动化偏差,决策支持系统应该向用户揭示他们不确定时的低置信度。

这种透明度对于设计智能临床决策支持工具至关重要。尽管对机器学习方法傲慢自大,但这些技术仍然会受到误差和偏差(例如数据集移位)的影响,这种必须传达给临床医生,以避免自动化偏差。

自动化医疗保健的一个特殊挑战是错误经常不被报告,并且它们的影响很难测量。随着基于价值的医疗保健的出现,护理事件的健康结果也才刚刚开始被跟踪。这意味着,一旦纳入临床实践,智能决策支持系统的正面和潜在负面影响都可能难以识别。这使得我们提前得到正确的设计变得更加重要。

基于索赔的索赔的危险性

原文:https://towardsdatascience.com/the-dangers-of-claims-based-on-claims-142fd2c9f7cd?source=collection_archive---------10-----------------------

医疗保健因缺乏采用的数据格式而臭名昭著。一个例外是付款人和供应商之间交换的账单信息。这些文件通常被称为“索赔”由于无处不在,今天的许多分析方法——从流行病学到公共卫生、精算科学、商业智能和风险评分——都严重依赖(有时完全依赖)索赔文件。

索赔文件对于理解所提供服务的数量和金额来说是足够可靠的。然而,人们应该警惕依赖声称来理解某事为什么发生,它是否起作用,或者应该发生什么——事实上,声称不适合回答改进的基本问题。

首先,关于索赔文件的高级入门知识:

  • 程序代码代表医疗专业人员采取的特定健康干预措施。对所提供服务的单位或类型的补偿主要来自这些编码。
  • 诊断代码(通常称为疾病代码)记录了困扰每个人的疾病、失调或症状。这些代码会影响所执行程序的报销率。
  • 药品代码显示开给患者的药品。这些必须是准确的帐单,但它们不能跟踪病人是否实际服用了处方药物。

索赔文件旨在支持帐单和随后的报销。他们捕捉什么、如何捕捉,以及这些信息的价值完全是基于这些预期用途而精心设计的。为了获得补偿,索赔文件必须包含证据,证明做了什么以及对谁做的。服务的单元和复杂性也被捕获。不完整地获取这些信息会导致支付困难。虚假陈述会导致审计和法律风险。因此,从事务的角度来看,我们应该对依靠索赔数据来告诉我们发生了什么感到非常放心。

理解事情发生的原因或它是否起作用是另一回事。

没有一个临床医生会求助于索赔文件来理解这些问题。他们知道声明中包含的信息既不可靠也不完整,不足以开始解决这些问题。除了大量关于声明缺陷的研究,每个流行病学家或健康服务研究者都有“声明有问题”的轶事。我第一次感受到主张和现实之间的差距是在我刚获得博士学位时,当时我正与 6 个学术医疗中心合作进行一个结肠直肠癌质量改善项目。像许多改进努力一样,我们的第一步是找到患有目标疾病的人——在这个例子中,是结肠直肠癌。该项目从查询索赔数据中的疾病代码开始。然后,为了验证他们的结果,我们进行了一项图表审查,将病历中的内容与每个患者的 ICD 代码进行比较。

我们发现 80%的代码指示结肠直肠癌的患者并没有癌症。他们都做过结肠镜检查。

接下来的几年证实,这种令人恐惧的不准确疾病编码模式更像是常规而非例外。就在最近,我们发现约 50%的心脏病代码是错误的。这并不是改善我们对医疗保健理解的坚实基础。

也有理由相信事情在好转之前会变得更糟。随着人们(和软件)采用国际疾病分类编码第 9 版标准(ICD-9),疾病编码不正确的问题已经流行了多年,该标准有大约 12,000 个不同的编码。2015 年,CMS 将 ICD-10 作为强制性标准,将可能的代码扩展到 65,000 多个。不用说,我们并不期望因此而提高准确性或一致性。

那么如何利用索赔来进行改进呢?

大多数分析方法只是为其他客户重用现有模型。为了使模型可以转移,他们依赖于只索赔的方法,因为这是医疗保健中唯一一致的数据。幸运的是,从技术角度来看,我们已经超越了这一点。或者至少,我们应该是。在大约 20 年的研究中,有几千项研究表明,机器学习+自然语言处理等高级分析方法能够提供更好的能力,最终从所有可用的数据源中获得洞察力。

现在的挑战是,没有人知道如何将这些技术应用到医疗保健的复杂现实中,并从中获得真正的价值。这就是我们开始 Cyft 的原因——帮助医疗保健组织最终开始从大量尚未开发的数据中学习,并在正确的时间将这些见解应用于正确的人。这是一项棘手的工作,我觉得经过 10 多年的研究和现在的工业应用,我们才刚刚开始触及可能的表面。但我们确实学到了很多,并将通过更多这样的帖子分享真实世界的经验。

我们接下来的几个主题是风险分层,如何评估不同的预测方法,以及如何在复杂的护理管理世界中进行预测。如果你有你认为我们应该涉及的话题或问题,请给我发邮件至 ldavolio@cyft.io 或 @ldavolio

谢谢,莱恩

媒体和娱乐的数据驱动未来

原文:https://towardsdatascience.com/the-data-driven-future-of-media-and-entertainment-c30ce60d7aa4?source=collection_archive---------9-----------------------

未来将是数据驱动的。但是,对于创意产业来说,数据将走向什么样的未来?

技术应该增强创造力,而不是压制它。幸运的是,通过创意产业的技术整合,越来越多的信息变成了有用的信息。智能数据分析是一种前沿工具,不仅有利于媒体企业的底线,还能帮助企业优化这些信息的使用,从而超越竞争对手。数据驱动的道路引领媒体和娱乐公司走向一个崭新而激动人心的未来。

出版和数字媒体

近年来,出版业经历了多次大规模的颠覆,包括在线出版和电子书的兴起。阅读体验的数字化威胁着传统的出版模式。然而,重要的是,它开辟了一个新的领域,出版商正越来越多地开始利用这一优势。

随着数字出版市场在过去几年的增长,出版商可用的数据量也在增长。收集和智能合成正确的数据有助于出版商了解现有和潜在的消费者行为模式,让作者和出版商保持相关性,更好地预测图书销售,并更好地营销他们的图书。

下一步是什么?写“按需”。

利用预测分析(包括分析与消费者对各种主题的兴趣相关的信号)的概念首先在互联网内容的出版和推广方面流行起来。随着数据分析的改进,出版商现在也开始尝试评估关键绩效指标(KPI),以帮助从提交的手稿和提案中决定出版哪些书籍,甚至根据对消费者兴趣、需求和购买特定流派和书籍的倾向的日益成熟的理解,指导作者写哪些书籍。

这场革命仍处于早期,但结果似乎是不可避免的。图书出版商,像他们的数字媒体同行一样,正在以前所未有的方式利用数据来弄清楚读者真正想要的是什么。简而言之,大数据和机器学习不仅被用来加强与忠实粉丝和订户的联系,还被用来确定当前和潜在的未来读者明天想要阅读的内容。最终,数据可以成为增加出版收入和以复杂、智能的方式为读者提供超级服务的驱动力。

音乐

经过十年的奋斗,音乐生态系统似乎已经摆脱了技术破坏的冲击,现在正在积极拥抱技术进步。随着移动、流媒体、社交媒体和互联设备的兴起,音乐家从未如此接近他们的观众。消费者信息的流动也从未如此广泛。数据分析使所有流入的用户信息都具有可操作性。过去基于个人经验和关于如何更好地营销和销售音乐的假设的商业决策现在正通过人工智能和大数据的使用实现自动化。

例如,Gracenote 帮助音乐爱好者根据他们的音乐品味、喜爱的艺术家和收听偏好建立电台和播放列表。Pandora、Spotify、Apple Music 最近都收购了音乐分析公司,如 Next Big SoundThe Echo Nest 、Semetric。每周都有新的人工智能初创公司推出。这是一个充满活力的空间,将继续以有趣的方式转变。

下一步是什么?预测音乐发现

Spotify Discover Weekly 成为音乐领域最具影响力的创新之一是有原因的。截至 2016 年 5 月,超过 4000 万人使用了它,在不到一年的时间里播放了不到 50 亿首歌曲。这些都是大数字;它们反映了用户对个性化音乐发现的积极参与,随着人工智能个性化变得更加有效,这种参与可能会增加。

相关的、个性化的参与对音乐行业来说比以往任何时候都更加重要。预测分析将是合乎逻辑的下一个前沿领域——智能数据算法可以洞察消费者的偏好,并帮助音乐生态系统中的玩家发现新的潜在热门歌曲。例如,英国华纳音乐(Warner Music UK)的“流媒体优先”(streaming-first)子标签“观看唱片的艺术家”(Artists To Watch Records)已经在使用复杂的算法来早期检测和发现开始升温的歌曲。

机器学习和人工智能,以及其他创新技术(如 Shazam 用于将声音转化为数据的音频指纹识别)将为发现艺术家的唱片公司和发现新音乐的粉丝提供越来越精确的推荐服务。

电影和电视

与此同时,电视正在从线性的消费性观看演变为类似网络的互动体验。对于许多传统行业参与者来说,这种变化并不容易。

来自 TDG风头网络的最新报告表明,越来越多的消费者正在切断线缆,转向 OTT &视频流媒体服务。在订购宽带的 1 亿家庭中,大约有 22%没有付费电视服务。拥有至少一个 OTT 流媒体视频的消费者数量增长了 15%。一些消费者甚至愿意为不止一个流媒体视频服务付费。这表明,购买流媒体电视的消费者可能会购买符合他们口味偏好的额外 OTT 服务,因为这些服务已经可用。

这可能会导致激烈的竞争。“内容”,正所谓“为王”。拥有合适的内容是赢得当今高度分散、一心多用的受众分散注意力的关键。在这场持续的战斗中,关于消费者偏好、观看习惯和个人兴趣的信息的确是力量。从流媒体服务到好莱坞工作室,各种视频创作者都在使用智能数据科学,从项目绿色照明到开发(包括预算),到视频娱乐营销,再到分发,智能数据科学改变了沿途每个阶段的业务。

下一步是什么?预测分析和个性化编程

提供数百个频道的昂贵电视捆绑的日子屈指可数了。数据表明,未来的观众将抛弃这种捆绑,转而选择订阅算法驱动的以用户为中心的服务,提供精心策划的个性化观看体验。

网飞和亚马逊等娱乐巨头将数据作为其公司战略和旗舰产品的重要组成部分,他们正在通过高度复杂的预测技术解决方案引领潮流,使他们能够提供原创的优质内容。例如,网飞已经将其内容切割成超过 70,000 个微流派。类似的分类可能很快会通过视频基因组项目提供给网飞的竞争对手,该项目由一家名为结构化数据智能的公司创建,最近被 Hulu 收购。

与此同时,内容所有者正在意识到他们自己的内容的价值,以及他们可以通过个人平台赚钱的所有方式。内容交易正在获得动力。

然而,对于数据驱动的编程有一些保留意见。虽然它肯定会影响关于播出哪些故事、增加哪些人物的播出时间,甚至向不同的订户显示不同结局的决定,但目前尚不清楚这种变化是否会带来更好的内容,也不清楚这种变化的更广泛影响可能是什么——无论是艺术/创意、商业,甚至是社会。我们必须等等看。

小数据?

随着大数据成为一个家喻户晓的短语并渗透到创意产业的商业领域,另一个概念开始产生影响— 小数据。这里的想法相当简单:虽然大数据提供顶级趋势,但小数据有助于公司在更亲密的层面上与消费者联系,包括在更本地化和个性化的层面上向他们营销。

从更专业的角度来看,大数据本质上是海量的结构化和非结构化信息,无论是来自商业交易、社交网络还是机器对机器的交互。相比之下,小数据是一组非常具体的属性,可以通过分析较小的适当大小的数据块来创建。它信息量更大、更及时,并以一种容易理解的方式带来有意义的见解,帮助公司找到特定问题的解决方案,并取得可操作的结果。

在媒体和娱乐领域,小型数据收集方法可能包括智能结构化的采访问题、帮助论坛交互的详细分析以及其他不太依赖于海量数据集的数据分析。这种方法可以帮助公司避免处理大数据的费用。因此,小数据可以帮助在公司内部建立可操作的、现实的目标;例如,创建定制的“产品”或 UX,让最终用户感觉周到和有吸引力。

行业准备好了吗?

去年 MarkLogic 和 Marketforce 委托对媒体娱乐领域的 100 多名高管进行了一项调查,以了解该行业对数字时代的适应程度,以及它是否准备好面对下一波颠覆。

他们的发现既令人鼓舞又令人担忧。

一方面,令人鼓舞的是,该调查证明,该行业已经应对了数字化的最初冲击,能够快速适应新业务模式的组织能够找到新的更好的方法来利用显而易见和意想不到的机会。另一方面,令人担忧的是,调查显示,媒体和娱乐领域的许多公司还没有准备好(或感觉没有准备好)提供敏捷、数据驱动的服务,这些服务对于接触新的分散消费者至关重要。

无论是在出版、音乐还是广播领域,交付个性化创意的能力已经从理论走向实践,同样也正在从不可想象走向数字受众的期望。为了在未来取得成功并保持相关性,创作者和提供者都需要回顾今天他们如何存储、管理、合成和利用数据。做好这些事情可以让公司利用新技术,让他们的业务适应未来(包括准备好适应不可避免的下一轮不可预见和破坏性的变化),并最终提供让受众满意的服务。

谢尔盖·布多夫 媒体与娱乐实践高级副总裁 数据艺术

原载于www.hypebot.com

Twitter 表情符号分析:Airbnb 的故事

原文:https://towardsdatascience.com/the-data-files-twitter-emoji-analysis-987093f9c1ee?source=collection_archive---------4-----------------------

表情符号和数据是我最喜欢的东西,我一直渴望将它们结合在一个有趣的项目中。几周前,当我滚动浏览我的 twitter 信息时,突然有了灵感:

Describe your dream trip in three emojis.

此处见项目

该过程

1.收集数据:

起初我认为抓取会很简单,因为我需要做的只是查询 twitter API。当然,有一个端点会给我一条特定推文的回复。但是,唉,事实并非如此。经过几个小时的谷歌搜索和堆栈溢出,我找到了一些可能的解决方案。但是我最后使用了下面的 rscript(在@PRISMOJI 的@HamdanAzhar 的帮助下)

解决方法基本上是获得原始帐户的所有提及。然后用原始的 tweet id 过滤这些提及。最好尽快这样做,因为对于流行的账户,你可能需要收集成千上万的回复才能得到完整的回复。另一个警告是免费的 API 账户目前只允许 7 天前的查询。因此,请务必在一周内收集回复。

2.将表情符号翻译成英语:

一旦有了数据,我必须将 unicode 转换成英语,这样我才能更好地过滤和分析数据。虽然有一些 unicode <>英语词典,但我碰巧是在 R 语言和 windows 机器上工作的(所以我要使用一些相当晦涩的编码)。经过几个小时的挫折,我终于找到了一个可行的解决方案。我首先从评论中提取表情符号,因为其中一些也有无关的文字。从那里,我做了一些字符串操作来获得我需要的格式,并使用这本字典来翻译我的表情符号。

2.分析和清理数据:

在我翻译完表情符号后,我终于准备好进行分析了。我主要使用 tidytext 库来处理数据集。

我还想对不同的表情符号进行分类。在考虑过写一个分类器(hi scipy)或者使用普林斯顿的 Wordnet(T6)之后,我最终坚决反对这两种方式。这两个解决方案都没有提供我想要的东西,因为我的数据集只有大约 150 个独特的表情符号(按数据集标准来看很小),我决定咬紧牙关,打开我最喜欢的 Spotify 播放列表,并手工编码我想要的类别。

3.将数据可视化

从一开始,我们的主要目标之一就是构建一个自定义的 d3 和弦来可视化表情符号的不同组合。因为这是我第一次建立这种 d3 图表,我有一点需要学习。特别是定位的径向比例,如何将自定义图像(表情符号)附加到 svg,以及如何创建完美的弧线。

在弄清楚所有这些之后,我得出了这个结论(tada!):点击此处为互动版。

Airbnb Twitter Emoji Chord. See interactive version here: https://christinequan.github.io/airtweets/

感谢阅读!如果你对我是如何制作的有任何反馈或问题,请告诉我。请关注我,阅读更多关于数据可视化、迷你教程和我正在从事的各种数据项目的信息。:)

数据游戏:在国际教育中建立分析能力

原文:https://towardsdatascience.com/the-data-game-building-analytics-capability-in-international-education-b940f24b13a4?source=collection_archive---------7-----------------------

[ 原载于IEAA Vista 杂志(2016/17 年夏季)——如果你对澳大利亚国际教育感兴趣,我强烈推荐你在线关注他们,阅读他们的出版物!]

Darragh Murray 写道:接受分析思维模式并利用大数据时代的技术是实现澳大利亚战略性国际教育目标的关键。

预言和少女怀孕的故事

2012 年,记者查尔斯·杜希格偶然发现了一个关于预测的力量和少女怀孕的有趣故事。杜希格在为《纽约时报》撰写的文章中讲述了一名愤怒的男子如何与美国一家百货商店的经理对峙,要求知道为什么这家零售商一直给他十几岁的女儿送婴儿服装和乳液的优惠券。

“你是想鼓励我女儿怀孕吗?!"愤怒的父亲抱怨道,并向这位不幸的经理赠送了一捆捆与婴儿相关的用品。经理不知道这是怎么发生的,并承诺会跟进此事。然而,当父亲几天后打电话道歉时,调查中断了。他十几岁的女儿确实怀孕了,不知何故塔吉特比她的家人更早知道。

塔吉特怎么可能知道这些?答案是通过精确使用数据和分析。Target 一直在大力投资分析能力,这是一项将数据置于知识发现和交流中心的专业。通过使用预测模型,商店可以根据历史购物模式准确识别潜在的怀孕顾客。

虽然这个轶事既有趣又令人毛骨悚然,但它提醒我们现代行业如何利用大量数据来追求战略商业目标。无论是瞄准期待中的客户,还是使用数据评估国际学生市场的潜力,熟练使用数据正迅速成为企业和组织竞争的资源。

数据革命

利用数据解决问题并不是最近才出现的。自 20 世纪 70 年代以来,我们现在所说的数据科学已被广泛用于科学和工程领域,通常用于风险管理和工作场所健康与安全。在 20 世纪 90 年代,当银行和金融越来越多地使用数据监控来打击欺诈和信用卡盗窃时,该领域变得更加活跃。

巨大的计算能力、廉价的数据存储以及现代数据挖掘和机器学习技术的发展最近的融合导致了数据作为一种有价值的日常商业资源的主流化。这一切都以“大数据”的出现为高潮,成为这个国家最新的时髦词汇。

这场数据和分析革命现在被视为现代全球经济持续发展的关键。在他们的优秀作品Competing on Analytics*,*中,研究人员达文波特和哈里斯认为,数据现在是组织必须用来发现保持竞争力的独特能力的关键资源(参见达文波特 2006 年撰写的这篇 HBR 文章,了解这本巨著的摘要)。

如图 1(第 18 页)所示,Davenport 和 Harris 提出了组织分析能力的概念,范围从基本的标准报告到高级预测模型,允许数据驱动的预测和风险管理优化。如果您的组织仍然使用简单的标准报告来监控关键指标,您可能已经落后了。

那么,分析革命是如何与澳大利亚国际教育部门交叉的呢?考虑到越来越多的国际流动学生,以及拥有先进教育系统的现代经济体对教授这些学生越来越感兴趣,在分析和数据上竞争的想法非常重要。如果澳大利亚想继续吸引最优质的国际学生,那么在竞争对手之前了解更多潜在的国际学生是有意义的。

在数据和分析方面最具竞争力的教育提供商将在未来获益。澳大利亚的国际教育部门幸运地拥有一个比较优势:我们有大量高质量的学生数据,而其他市场似乎没有。

澳大利亚的比较数据优势

澳大利亚拥有世界级的国际学生数据。移民和边境保护部(T1)(DIBP)等政府机构定期发布关于 T2 学生签证申请和批准率(T3)的详细而及时的统计数据,以便对未来的需求进行分析。同样,教育和培训部 (DET)提供了关于国际学生注册和毕业典礼的有价值的信息,这些信息可以通过国际教育所有部门的众多指标进行细分。

在线数据门户,如 uCube 允许进行详细的本地竞争对手分析和基准测试。澳大利亚市场信息包 (MIP)是国际学生数据可视化领域的全球领导者,它提供了一个集成的商业智能平台(见图 2),使机构和企业能够在不进行大规模 IT 基础设施投资的情况下分析澳大利亚国际学生市场。

这些例子甚至没有考虑到澳大利亚国际学生群体的无数其他私人组织信息来源,这些信息可以整合到这些强大的公共来源中。

这种最新的综合数据来源在其他国际学生竞争市场中并不明显。例如,美国依赖于国际教育研究所发布的“开放门户”,而英国的高等教育统计机构(HESA)提供了一些关于全体学生的广泛细节。

虽然这些服务无疑是方便的,但它们似乎没有澳大利亚行业所享有的专业、集成或灵活的数据分析平台。他们还可能缺乏及时的更新或难以提取和分析的数据。

声称澳大利亚是国际学生数据的市场领导者不是没有道理的。问题是,我们如何利用这些数据集来推进澳大利亚的国际教育部门?

构建分析能力:数据驱动的思维模式

可靠的数据和全面的分析支持良好的商业决策。正如达文波特和哈里斯所断言的,在竞争对手连枷的特定市场中取得成功的组织,几乎肯定是通过使用分析和数据来推动其战略商业决策而取得胜利的。

鉴于澳大利亚令人羡慕的国际学生数据资源,改变心态和一些创造力可能是开始取得巨大竞争优势所需的一切。让我们看几个例子。假设你正试图决定是否进入国际学生市场。“直觉”反应可能是根据你在媒体上读到的内容、你信任的同事的推荐或你的组织以前的经验来证明你的决定是正确的。

分析、数据驱动的思维模式要求更多。一个好的起点是测试相关数据集中的关键影响变量。你能仅凭数据找出其他成熟市场中历史上影响增长的因素吗?在这种情况下,国内生产总值或奖学金等变量有影响吗?在可用的数据中找到这些问题的答案有助于增强对某项建议的信心,也有助于制定更好的战略计划。

此外,数据熟悉对于构建分析能力至关重要。IBM SPSS、Tableau 或 TIBCO Spotfire 等数据挖掘和可视化工具有助于理解支撑数据集的自然关系。聚类是一种根据自然属性将数据组织成不同组的技术,在揭示洞察力方面非常有用。

这种高级别的分析能力意味着进入预测模型领域。这包括检查数据集中的历史模式,以帮助对未来做出明智的预测。预测建模利用机器学习技术,如分类、神经网络和逻辑回归。

使用这些技术可以让国际教育机构有能力计算国际申请结果概率,甚至是当前学生第一年是否会通过或失败。在澳大利亚的国际教育领域,预测模型具有难以置信的价值和无数的用途。

这里要传达的信息是,紧迫的业务问题应该通过从直觉转向分析来解决。拥抱分析思维,利用大数据时代的技术,可能是推进澳大利亚战略性国际教育目标的关键。

信号和噪音

澳大利亚在其“2025国家国际教育战略”中制定了一个大胆的三大支柱议程。该战略中设定的许多目标,尤其是支柱三“全球竞争”中设定的目标,可以通过提高我们的集体分析能力和接受数据驱动的决策思维模式来进一步实现。具有竞争力的现代组织投资于先进的分析能力,使用数据挖掘、聚类和预测模型等技术和方法来更好地理解和解决关键的战略问题。

澳大利亚国际教育部门也不能幸免于这些发展,总有一天,我们将需要依靠我们的比较数据优势来保持领先于竞争的国际教育中心。我们有原材料,这只是一个建立在这些基础上的案例,以提高行业的集体分析能力,并在竞争中保持领先地位。

给它你最好的数据集

增强组织分析和构建数据知识并不仅仅是获取数据集并希望得到最好的结果。以下是关于分析职位上的人如何帮助他们的组织利用数据做更多事情的三点建议。

关注过程和最终目标

正确地做数据需要时间、精度和目的。同事可能没有意识到组织和操作数据可能有多复杂,并且在请求他们做出决策所需的数据时,不会主动满足他们的所有业务需求。在任何基于分析的项目之前,你越严格地收集需求,对你和你的组织就越有利。如果你被要求做数据分析而没有一个可靠的战略理由,你只是在浪费时间。

一些核心技能可以走很长的路

基本的统计技巧对理解数据的形态很有帮助。学习如何编制五个数字的统计摘要,了解不同的平均值测量方法,如中位数和平均数,并掌握离群值的概念。这些都是理解数据的关键技能。将数据转化为有意义的见解需要时间,并且需要良好的数据处理技能。能够使用关系数据库甚至良好的电子表格技能来组织信息,可以让你在数据游戏中走得更远。

沟通是关键

即使你是人类已知的最伟大的统计学家或数据科学家,如果你不能正确地传达洞察力,它也毫无价值。能够简洁而有目的地书写数据——以及熟练地使用有意义的数据可视化——将为增加高管支持和提高组织分析能力做出更多贡献。通常,在交流数据时,越少越好。

数据来源

【www.education.gov.au/higher-education-statistics 号

【www.education.gov.au/ucube-higher-education-data-cube

www . austrade . gov . au/Australia n/Education/Services/Market-Information-Package

www . border . gov . au/about/reports-publications/research-statistics/statistics/留学澳大利亚

其他链接

数据-产品-科学家-管理者

原文:https://towardsdatascience.com/the-data-product-scientist-manager-469cc1d21f9?source=collection_archive---------8-----------------------

机器学习、人工智能、深度学习、数据科学有什么区别?近年来,围绕这些概念的巨大讨论使得它们似乎可以互换使用。

几个月前,我在 meetup 上做了一次演讲,从游戏学习算法的角度回顾了机器学习算法的历史。因为这个演讲不需要预先的知识,所以我先简单介绍了一下人工智能(AI)和机器学习(ML)

  • 人工智能是制造机器的科学,模仿我们人类感知的智能行为
  • ML 是人工智能的一个分支,涉及从数据中学习“智能”的算法(而不是显式编码)
  • 深度学习是 ML 中非常特殊的方法,它使用人工神经网络和海量数据

在准备演讲的时候,我也在努力参考数据科学(DS ),以帮助我的听众理解当前所有的宣传术语。但是 DS 是 AI 内部的学科吗?ML 内?这难道不仅仅是统计学的一个花哨名称吗?…我最后把它漏掉了。

几天前,我偶然发现了一集精彩的 ML 播客会说话的机器,尼尔·劳伦斯做了一个观察,让我明白了一切。劳伦斯认为,数据挖掘产生于我们在这个时代收集的新数据流,这些数据流是由传感器和交互产生的海量数据,其使命是从中提取价值。换句话说——“在这里,我们有所有这些数据,我们能用它们做什么?”

寻找假说

这可能看起来像一个小的技术细节,但它使所有的差异。在经典的实验中,科学家会提出一个假设,收集数据来验证或否定它,然后进行必要的统计分析。对于 DS,没有这样的先验假设。所以 DS 的核心变成了提出这些假设,然后在我们已经有的数据中验证它们。但是提出假设是谁的工作呢?

有几个相关的角色需要考虑:

  • 数据(和业务)分析师非常了解如何争论数据和查询数据,并将根据明确的业务目标运行分析(按需或自行)。但他们的角色和心态并不是去寻找新的目标,或者找到破坏性的新方法来实现这些目标
  • 数据和 ML 工程师构建了收集和处理数据的技术和库。他们喜欢看到自己的系统被用来产生强大的洞察力和能力,但把自己视为产生和验证这些假设的基础设施,而不是用户
  • 数据科学家将他们强大的统计学和 ML 技能应用于上述数据基础设施,以构建模型,从经过验证的假设中实现新的功能和用户价值。但是模型不是在真空中建立的;他们需要一个明确的使命,源自一个经过验证的假设(甚至是一个有待验证的假设)
  • 产品经理是典型的假设创造者类型。他们分析市场,会见客户,深入分析和业务数据,然后他们创建产品假设,收集到路线图中。但是他们很少使用上述“大”数据基础设施来产生假设,主要是由于技术知识的差距

一个新的角色出现了

为了让数据得到充分利用,我们需要的是一个新角色,后两者的混合体。数据科学产品经理是具有产品经理的直觉和以用户为中心的思维的数据科学家,或者是具有数据科学家的数据探索直觉的产品经理。这需要哪些技能?

  • 强烈的数据直觉,探索数据的能力和愿望,包括在有帮助和无帮助的情况下,运用直觉识别特定模式和趋势
  • 以用户为中心的思维,看到数据背后的用户和真实生活场景,就像黑客帝国中的 Neo
  • 技术敏锐,虽然不一定是编码。今天的 DS 和 ML 工具变得越来越商品化,从头开始编写的需求越来越少
  • 非常强的优先排序能力;从数据中创建假设可能很容易,几乎太容易了。因此,需要进一步探索最有前途的,把它们变成一个潜在的路线图。
  • 能够与数据团队密切合作,并“说他们的语言”来快速验证、理解产品化成本,并估计大量此类假设的 ROI

虽然这一角色仍然可以由两个协同工作的个人(项目经理和数据科学家)之间的强大合作伙伴关系来完成,但很明显,拥有所有这些技能的单个个人将更高效地取得成果。事实上,在 LinkedIn 上快速搜索一下就会发现,这种综合角色正在涌现,需求也在激增。

(原帖发布于:https://alteregozi . com/2017/10/05/the-data-product-scientist-manager/)

数据问题

原文:https://towardsdatascience.com/the-data-question-b6a8b60dc934?source=collection_archive---------19-----------------------

我们需要多少数据来构建这个计算机视觉分类器?这是数据问题。根据我的经验,数据问题几乎出现在我们接手的每个计算机视觉项目中,答案通常是“视情况而定”和其他人一起,State Farm 数据科学界一直在研究数据量对深度神经网络的影响,今年我们取得了一些重大进展。

Photo by Chris Ried on Unsplash

数据问题

第一次有人问我,“我们需要多少数据?“早在 2014 年,我就在研究一种通过照片评估车辆损坏的图像分类器。这是一项艰巨的任务,因为相关的标记数据短缺,因此,分类器的整体性能很好,但不如业务领域所希望的那样好。在讨论这个令人乏味的结果时,我发现我不知道建立这种深度神经网络需要多少数据。

在接下来的几年里,我们开发了一些试探法,试图回答这个持续的数据量难题。然而,数据问题从未消失。在为计算机视觉构建深度神经网络时,大多数数据科学家和机器学习工程师都同意,标记良好的高质量数据往往供不应求。我们希望更全面地了解数据量和深度神经网络错误之间的关系,尤其是在使用迁移学习时。

数据量案例研究

谷歌研究院和卡耐基梅隆大学的孙辰、阿比纳夫·什里瓦斯塔瓦、绍拉布·辛格和阿比纳夫·古普塔最近进行了一项联合案例研究,他们在测量网络误差的同时,用越来越多的数据增量训练了一个深度神经网络。他们发现,网络的性能随着训练数据量的对数而线性提高。换句话说,数据越多,网络性能越好。

这项研究的结果表明,更多的数据总是有助于减少深度神经网络的错误。我们提出了自己的疑问:如果更多的数据有助于深度学习,迁移学习会发生什么?从这一点出发,我们借此机会调查了数据量对迁移学习的影响。

迁移学习

在计算机视觉的实际商业应用中,我们很少从零开始训练一个深度神经网络;相反,我们使用一种叫做迁移学习的技术。通过迁移学习,我们可以将在一般图像识别任务上训练的深度神经网络应用于新的问题领域。深度神经网络只需要学习新的分类任务,而不是图像识别的基础知识。我们这样做是因为它在目标域中需要的数据要少得多。虽然源域数据集可能需要数百万幅图像,但目标域数据集只需要数千幅相关图像。例如,我们可能会从另一名研究人员在 ImageNet 上训练的深度神经网络开始,ImageNet 是一个使用一百万张图像的 1000 类分类器,然后将该网络应用于识别猫和狗之间差异的任务。在这样做的时候,我们可能只需要目标域中的几百张图片就足够了,而从头开始我们可能需要几百万张。

数据量和迁移学习

我们的机器学习研究人员受到了孙等人的工作和发现的启发。这引发了我们的好奇心。如果我们把他们研究中的实验扩展到学习应用中会怎么样?我们想知道目标域中的数据量如何影响深度神经网络的性能。具体来说,我们想知道网络是否会随着数据量的增加而不断改进。迁移学习的应用产生了第二个重要问题。源域和目标域之间的相似性会影响您需要的数据量吗?例如,如果你从一个接受过架构培训的网络开始,并试图转移到一个完全不同的领域,如人脸,这是否需要比源和目标领域更相似的更多的数据?

这些问题引导我们进行自己的实验,并在 2017 年 12 月撰写我们的第一篇论文。结果,我们的工作发表在斯普林格的《智能系统和计算进展》上。我们被要求在 2018 年 10 月温哥华的未来技术大会上分享我们的发现。

关于迁移学习,我们学到了什么

我们的结果与 Sun 等人的结果一致。在目标领域中,在多个问题中,网络性能随着数据量的日志而增加,直到我们用完数据。更多相关的训练数据似乎总是有帮助的,而且据我们所知,永远没有“足够的数据”。正如我们提到的,这种关系是对数级的,因此每单位网络性能似乎需要指数级的更多数据。

我们还发现在源/目标分布相似性和数据量之间存在关系。随着源/目标相似性的偏离,数据量似乎变得更加重要。这种关系不太清楚,需要做更多的工作。

那么,我们回答了“数据问题”了吗?

也许吧。如果今天有人问我“数据问题”,我会回答说,更多相关的训练数据似乎总是有助于减少深度神经网络错误;但是我不能告诉你需要多少数据来实现一个特定的目标指标。

从我前面提到的那些启发中,我们可以猜测,对于一个简单的二进制分类问题,我们可以使用跨类似源和目标域的迁移学习,从每类 1000 个图像中获得足够的性能。即使我们从这些数据中获得的性能并不足够,我们也可以肯定地说,更多的数据将改善深度神经网络。我们可能永远也不会明确回答“数据问题”我们相信这里还有更多工作要做,我们当然希望我们的工作能激励其他研究人员继续阐明这种关系。

要了解更多关于迁移学习的信息,请查看我们来自 AnacondaCon 的名为“只有少量数据的深度学习”的演示文稿

数据革命公式

原文:https://towardsdatascience.com/the-data-revolution-formula-c59453b946f6?source=collection_archive---------8-----------------------

数据不代表钱。数据意味着赚钱的机会。钱不代表数据。金钱意味着购买数据的机会。

今天,有许多用户和应用程序产生大量数据。让我们称他们为“数据生产者”。另一方面,一些公司使用数据来改善业务,而其他许多公司则渴望获得这些资产。让我们称他们为“数据消费者”。在中间,一大群人正在从原始和无意义的数据中提取价值。我们称他们为“数据科学家”。

关于当今数据生态系统的一些统计数据:

  • 25 亿活跃智能手机用户
  • 500 万可用的移动应用
  • 690 万机器学习开发人员和数据科学家
  • 每年在数据上花费 2500 亿美元

它看起来很有前途,感觉这是一个坚实的行业,但…

  • 用户无法控制他们的数据,包括他们的私人信息
  • 应用程序不使用数据来赚钱(除了“幸运的”1%以外的其他人)
  • 数据科学家无法访问开放和多样化的数据集
  • 只有一群巨大的公司(有着巨大的钱包)才能获得这种宝贵的资源

数据科学家和数据消费者需要能够在他们收集的数据和这些数据的用途方面具有创造性。今天,由大公司决定收集什么和不收集什么。

我们正处于数据革命的早期,我们有很好的机会做正确的事情——连接参与者并释放资产以创造一个更美好的世界……而不是将这个庞大的业务留在少数几家公司手中,这些公司控制着从用户隐私到开发者信仰的一切。

应用程序使用情况

大多数应用程序用户在一个月内访问 20 个不同的应用程序,每天使用它们的时间超过 2 小时。

comScore Mobile Matrix Report

这意味着在数字媒体上投入了数十亿小时,因此这些应用程序产生了数万亿字节。但这仅仅是开始。智能物体(又名“物联网”)大规模集成到我们的日常生活中,将大大增加应用程序的使用,从而产生字节数。

Ericsson Report

正如您所看到的,数据量正在以惊人的速度增长,但我们还需要讨论正在收集哪些数据点,以及倾斜数据集可能会产生什么后果。

数据偏差问题

最近有几个公开案例,其中人工智能系统犯了愚蠢的错误,对公众舆论产生了巨大影响,促使媒体关注诸如人工智能的偏见问题等问题。

但问题不在于这些复杂软件的智能,而在于用来供给它们的数据。这些原始数据是实现学习和得出兴趣、行为和趋势结论的机制。

众所周知,可用于训练机器学习模型的数据越多越好。有了更多的数据,就可以实现更高的准确性,并且可以将异常与所描述的“现实”分开。但是准确不代表客观。微软的 Tay bot 非常迅速、精确、准确地了解到“里奇·格威斯从无神论的发明者阿道夫·希特勒那里学到了极权主义”。

问题不在于 Tay 和她的人工智能实现,而在于提供给她的数据。在处理数据时,尤其是在深度学习模型中,您可能会有一个存在本质缺陷的大型数据集,因为数据不完整,不包含关于特定群体的数据,无意或有意地强化了刻板印象,或者包含导致模型获得“错误”知识的其他问题。

数据经纪业务

数据经纪人是收集、分析和出售用户信息的公司。这可能包括个人信息以及人口统计数据、预期行为、兴趣和购买意向。这些公司是中介机构,他们从跟踪公司、调查营销人员和零售商那里购买你的数据,应用一些剖析智能;然后将结果卖给广告商、保险公司、银行或其他有兴趣更多了解你的实体——甚至试图操纵你。

如果你,作为一个普通公民,想获得他们关于你的数据,你可以试试这些被描述得很漂亮的方法(祝你好运!).但是如果你想知道到底是谁在购买你的数据,那么即使是好运也帮不了你。

如果你,作为一名自由职业者、应用程序开发人员、出版商或小公司,想要获取用户数据,比如说,了解你的应用程序的访问者并改善用户体验,你只能选择从诸如 PiplDataFinderTowerDataClearBit 等网站购买人口统计数据和静态数据。因为如果你想接触 Acxiom、Lotame、Nielsen、Oracle Cloud Data 或 Equifax…祝你好运!他们忙着一年赚 2500 亿美元,没时间接你的电话。

个人数据资产

您的个人数据具有价值。句号。公司付钱给你——或者你的“同类”——来做特定的广告。其他人付费是为了更多地了解你的购买记录,以评估向你提供信用卡等产品的风险。

如果你想对你的数据价值有一个粗略的概念,试试《金融时报》发明的这个计算器。

早在 2011 年,世界经济论坛就宣布个人数据是一种新资产类别,称其为“21 世纪的宝贵资源,将触及社会的方方面面。”他们制作了这张伟大的表格来展示经济价值链:

每个盒子里都有许多公司,它们通过生产你的个人数据并从中获利,创造了一个富裕的生态系统。让我们同意经济学家的观点,把你的数据称为‘新石油’。所以我们应该说,有一个完整的行业提炼、分离、转化和处理你的原油,然后作为燃料出售。但是,当然,在这种情况下,作为原油供应,你什么也得不到。

公式

所以我们希望人们能够控制他们产生的数据。我们希望应用程序所有者在不损害用户体验或隐私的情况下从他们的应用程序中赚钱。我们需要数据科学家来处理从应用程序中提取的数据资产;我们需要数据消费者透明、公平地访问这些原始或处理过的资产。

但我们也要看到这个流程:(用户->应用->DS->DC)反过来(DC->DS->应用->用户)。如果数据消费者或数据科学家可以提交请求,从应用程序/用户那里收集或生成特定类型的数据,会怎么样?

如果我们停止这种集中的数据经纪业务,允许任何人公开购买和请求数据,会发生什么?如果这种请求出现在数百万应用程序所有者和发布者的视野中,并且他们与他们的用户一起共同制作所请求的数据,会发生什么?

通过在应用程序开发人员和数据消费者(以及他们的科学家)之间建立直接联系,可以释放数据收集方面的创造力——既来自应用程序开发人员(“等一下,我也可以跟踪这个东西!”)和数据消费者(“如果我能找到这个用户子集就好了……”)。

我们谈论的是全球数百万数据消费者,他们与数百万数据科学家合作,连接到数百万应用程序,访问数十亿用户。这是我们改变这个行业的公式。

大团圆结局

我是一个应用程序,我从与我的用户(伟大的普通公民)共同制作的数据中获得报酬。

我是一名数据科学家,可以访问全球数百万数据集,这些数据来自多个用户,他们知道我在使用他们的数据作为无偏见的来源,来支持我的机器学习模型。如果我还需要什么,我可以要求它(甜!).

我是数据消费者,无论是小型、中型还是大型(谁在乎?)并且我可以访问多个数据集、见解、原始数据或任何其他形式的可用数据。

我是一名普通公民,我拥有并控制我生成的数据。

富有数据的人越来越富有——人工智能的现状(第一部分)

原文:https://towardsdatascience.com/the-data-rich-are-getting-richer-the-current-state-of-artificial-intelligence-part-1-c7a26400f1a5?source=collection_archive---------1-----------------------

你可能还没错过最近关于人工智能(AI)和机器学习的讨论。在一个两部分的博客中,我们看看什么是人工智能,以及它的影响,然后探索人工智能在北欧的状态。

人工智能将在未来几年对经济、公司和个人产生重大影响,并在“富人”(数据、软件、资本、资源、人才)和“穷人”之间形成新的、日益扩大的数字鸿沟。简而言之,数据丰富的人越来越富有,在这篇博客文章中,我们旨在解释其中的原因。

每个人都使用人工智能和大数据这样的时髦词汇,但它到底是什么?从基础开始,我们邀请了总部位于伦敦和斯德哥尔摩的人工智能公司 Augify 的 Jay Solomon,坐下来谈谈人工智能和机器学习。

人工智能是关于创造具有智能行为能力的计算机和软件。我们用这个术语来描述模仿人类认知功能的机器,比如学习、听觉和视觉。近年来,深度学习已经帮助我们极大地提高了计算机视觉、语言和语音理解能力。深度学习是一套算法,其灵感来自大脑的工作方式和我们的学习方式。它真正的含义是什么?自学成才的机器新世界。我们不是像我们习惯的那样给计算机编程来执行特定的任务,而是给计算机编程来知道如何学习。这就是我们所说的机器学习

深度学习的核心是神经网络,这基本上是一种计算方法,也反映了大脑。由于近年来的两项进步,人工智能和神经网络变得非常强大。1)更好地理解如何在网络学习时对其进行微调,这在一定程度上要归功于速度更快的计算机,以及 2)大规模数据库(大数据)的可用性来训练网络。人工智能以数据为食,系统能够消化的数据越多,它们学习和改进的就越多。

简单来说,数据和计算能力的原始结合,让 AI 一天比一天强。这激发了流行的末日未来场景,当由“天网”运行的类似终结者的机器接管地球时,我们已经失去了对我们创造的控制。

如果你没有进一步阅读,让我们用五个基本概念来总结一下上面的概述,这至少会让你在任何晚餐谈话中看起来更聪明。

  • 人工智能(当机器模仿人类智能行为时)
  • 机器学习(编程机器学习如何学习)
  • 深度学习(受大脑功能启发的网络和算法)
  • 神经网络(互联网络,也基于人脑)
  • 算法(定义计算操作的一组规则)

这五个概念都是相关的,因为人工智能是机器智能的高级通用术语,机器学习是关于获取这种智能,即自学、自主机器、深度学习和神经网络是由人脑启发的用于机器学习的算法和架构,而算法本身,在最细粒度的操作计算级别上,是代码、软件。

从另一个角度来看,人工智能就是软件。这种“人工智能软件”现在被用来增强其他现有软件的智能。一个典型的例子是,像脸书这样拥有海量数据的社交平台,部署数字助理来为平台上的消费者更多地利用这些数据。例如,参见我们之前的博客机器人的含义。人工智能只是数据和软件,尽管非常强大和改变模式,这激发了短语“软件正在吞噬世界”,由马克·安德里森使之流行。

正如我们所知,我们的世界已经运行在人工智能之上。Siri 管理我们的日历,脸书为我们的朋友提供建议,电脑管理我们的养老基金,汽车现在可以自动泊车,空中交通管制几乎完全自动化。人工智能正变得无处不在。人工智能被用于许多不同的领域,如语音理解、机器翻译、计算机视觉、手写识别、人脸识别、自然语言理解、自动文案、自动生成的广告活动,以及我们已经看到的智能(和不那么智能的)机器人。

人们也开始意识到算法的负面副作用,这些算法根据我们在社交网络和搜索引擎上的自动配置文件向我们提供信息,甚至无法区分真实和 T2 假新闻。这反过来引发了一场关于这些算法实际上有多好的讨论,引发了一些观点,例如,脸书在机器学习方面真的很烂。但是毫无疑问,全球数字巨头在人工智能竞赛中积极投资以获得优势

由于人工智能现在无处不在,引发了另一个想法——人工智能是“新的电力”。这个概念正由阿里巴巴的创始人马云推动,凯文·凯利在他关于塑造我们未来的科技力量的书《不可避免的未来》中也探讨了这个概念。其中一个大趋势是“认知”,或者说是向软件添加认知的、类似人类的技能的进化。

正如凯文·凯利所说,“即将出现的人工智能看起来更像亚马逊网络服务——廉价、可靠、工业级的数字智能运行在一切事物的背后,除了闪烁之外几乎看不见。这个普通的工具将为你提供你想要的智商,但不会超过你的需要。像所有的公用事业一样,人工智能将会非常无聊,即使它改变了互联网、全球经济和文明。它将使无生气的物体活跃起来,就像一个多世纪前电所做的那样。我们以前电气化的一切我们现在将认知。这种新的功利主义人工智能也将增强我们作为人的个体(加深我们的记忆,加快我们的识别)和作为物种的集体。我们能想到的几乎没有什么东西不能通过注入一些额外的智商而变得新颖、不同或有趣。其实接下来一万家创业公司的商业计划书很好预测:取 X 加 AI 。这是一件大事,现在它来了。”

拿个牙刷加个电机=电动牙刷。拿个房子加 AI =智能家居。拿企业软件来说,像 HR 工具,加上 AI =机器人招聘人员。例如, Mya 是一个人工智能工具,旨在自动化大部分招聘过程

果然,谷歌云已经宣布了面向企业使用的新机器学习功能,提供“随时可用的人工智能”,让你可以租用自己的机器学习计算机,包括用于翻译、工作匹配和分析等任务的 API。谷歌首席执行官桑德尔·皮帅最近因声明他们正在从一个“移动优先”的公司转变为人工智能优先公司而备受关注,为他们所有的核心产品添加更多的智能功能。

然而,世界领先的人工智能专家之一、斯坦福大学教授、硅谷百度研究院首席科学家吴恩达建议人工智能现在能为公司做些什么。“尽管人工智能的影响范围很广”,吴恩达说,“它被部署的类型仍然非常有限。AI 最近的进展几乎都是通过一种类型,在这种类型中,一些输入数据(A)被用来快速生成一些简单的响应(B)”。比如:输入 A(图片),响应 B(“有人脸吗?”),应用(照片标注),或者输入 A(车载摄像头),响应 B(“其他车的位置?”)、应用(自动驾驶汽车)。

人工智能领域已经有 60 年的历史了,但直到现在,它才真正在更广泛的范围内发生,并进入我们的生活。我们可以问为什么吗?在硅谷投资者安德森·霍洛维茨(Andre essen Horowitz)(当人类遇到人工智能)最近的播客中,斯坦福大学副教授费-李非(谷歌聘请的另一位人工智能专家)解释说,我们现在正处于“人工智能的一个历史时刻”。三种力量结合在一起触发了开关。首先,人工智能技术(上面提到的深度学习和神经网络)已经成熟,第二,支持该技术的大数据现在已经可用,第三,计算硬件(处理器和深度学习芯片)近年来发展迅速。人工智能的下一个大领域之一将是芯片。

那么,AI 行业到底是怎么回事?要回答这个问题,我们必须先看看美国发生了什么。最近,Sam DeBrule(每周 Machinelearnings 时事通讯的策展人)发布了一份关于美国人工智能状况的“人类非技术指南”。这个关于机器智能领域(如上图)的总结包括了大约 320 家人工智能&人工智能公司,活跃在企业智能(视觉、传感器)、企业功能(销售、招聘)、自主系统(导航、机器人)、代理(个人、专业)、行业(教育、投资)、医疗保健(病人、图像)和技术栈(自然语言、数据科学)等领域。该名单还包括大约 80 名有影响力的人,其中最著名的可能是发起 OpenAI 倡议的埃隆·马斯克和大约 30 个人工智能新闻来源。此外,美国政府发布了一份雄心勃勃的报告和一份战略计划来支持人工智能。

但最激烈的人工智能竞赛正在全球最大的软件公司中进行。当今全球市值最大的三家公司是苹果、谷歌(Alphabet)和微软。脸书和亚马逊都在前 10 名之列(有时是前 5 名),它们的总价值目前接近 2.5 万亿美元。他们有大量的现金可以花。这些公司通过全球数十亿人每天使用的产品和服务,在全球数字网络上建立了自己的价值。他们现在正在迅速吸收人工智能和人工智能领域的初创公司、资源和专家,以保持领先地位。人工智能的许多研究和实际应用现在都发生在这些公司内部,进一步确立了它们已经占据的主导地位。他们有能力使用人工智能作为他们海量数据的一个极其强大的杠杆,随着数据量的增长,系统会变得更加强大。人工智能是一种不断升级的优势的催化剂,这种优势将其他公司和国家甩在了后面。

总之,我们认为上述人工智能和人工智能的发展将对社会、行业和消费者产生深远的影响。至少有四点,长期影响非常明显。

  • 随着人工智能利用数据,已经拥有海量数据的公司将变得更加强大(谷歌、苹果、脸书等)
  • 我们将看到更多的人工智能初创公司,通过获得更强的计算能力、第三方数据、廉价的云存储和开源人工智能软件来实现
  • 随着人工智能添加到现有软件中,面向消费者的人工智能商业化将提供新的智能服务和产品的爆炸式供应
  • 有人工智能政治议程(研究、投资、基础设施、立法、教育等)的国家将获得优势

然而,我们不确定行动缓慢的老牌公司将如何收获人工智能的好处,或者它们将如何在竞争中保持领先。此外,已经落后的国家将会看到与最先进的人工智能国家的差距越来越大。

人工智能与大数据相结合的性质,为已经拥有先进人工智能技术、研究、数据和资本的公司和国家(如美国和中国)带来了越来越大的优势。人工智能和大数据的动态将我们推向一个新的全球数字世界秩序,进一步将力量平衡转移到硅谷和上海等已经占据主导地位的科技地区。

因此,在一个潜在的新的或强化的数字世界秩序中,已经拥有丰富数据的人会变得更富有,欧洲会怎样?北欧人会跟上人工智能的新机遇并取得成功吗?我们现在转向我们自己的地区,想知道加速的人工智能发展对这里的公司和投资意味着什么。在我们的下一篇博客中,“人工智能的现状,第二部分——北欧有智能吗?”我们探索发生了什么,也许没有发生。

《纽约时报》方言测验背后的数据科学,第 1 部分

原文:https://towardsdatascience.com/the-data-science-behind-the-new-york-times-dialect-quiz-part-1-4935ff06069a?source=collection_archive---------8-----------------------

2013 年,《纽约时报》发表了约什·卡茨的《你们,你们和你们这些家伙是怎么说话的》你可能记得服用过,或者至少听说过。它会问你一些问题,比如“在十字路口与你隔着两条街的东西叫什么?”你可以选择的答案包括“猫眼”和“猫眼”(后者显然是正确的选择)。我认识的每个人都对它的准确性印象深刻。

在回答了 25 个旨在梳理你的语言特质的问题后,你被归类为在美国的某个特定地区长大(从技术上来说,这个测试向你展示了哪个地区的人最有可能像你一样说话*,所以它可能表面上向你展示了你的父母是在哪里长大的,而不是你是在哪里长大的,正如瑞安·格拉夫指出的。令我惊讶的是,每次我参加测验,它都把我归类为来自某个城镇,离我实际长大的地方不超过 15 英里。我的经历并不是独一无二的——尽管它的出版日期是 12 月 21 日,但它却是《纽约时报》当年最受欢迎的文章。它是如此的成功,以至于三年后 Katz 出版了一本关于它的书。*

Yes, I’m from the Yonkers area.

除了是 2013 年的全国现象,为什么现在还要关心卡茨的方言竞猜?我非常关心它,因为我是一个语言和信息科学的书呆子。但是应该关心它,因为它是将数据科学带入数百万美国家庭的成功尝试,而不考虑技术技能或智力。

重要的事情先来:测验的简史。

(以下大部分信息基于 Katz 在纽约数据科学院的演讲。)

  • 卡茨测验中的问题是基于一个更大的研究项目,名为“哈佛方言调查”,由哈佛大学语言学系的伯特·沃克斯和斯科特·戈德于 2003 年发表(你可以在这里找到沃克斯关于 NPR 的精彩访谈)。
  • 沃克斯和戈德在网上分发了他们的 122 个问题的测验,它集中在三个方面:发音、词汇和句法。
  • 最初的测验产生了大约 50k 个观察结果,所有这些观察结果都是由邮政编码编码的。
  • 2013 年,Katz 在北卡罗来纳州立大学(North Carolina State University)学习统计学期间,以研究生实习生的身份撰写了时报版的这个测试。(在他们发现了他对沃克斯和高达原始数据的可视化后,他被邀请去纽约时报实习。)
  • 时报测验中涉及的技术包括 R 和 D3,后者是一个 JavaScript 库,用于将数据绑定到页面的 DOM 进行操作和分析,类似于 jQuery。

数据科学

那么这个测验实际上是如何进行的呢?它的基础是监督机器学习算法K-最近邻 (K-NN),正如我的研究生院助教告诉我们的,这是一种机器学习算法,用于“根据参数空间中新数据点周围点的值来预测新数据点的类别。”我们将在后面的帖子中深入研究机器学习的思想以及特定 K-NN 算法的来龙去脉。现在,让我们来解决我的助教定义中的一些术语。

什么是“参数空间”?

根据维基百科,参数空间是“特定数学模型中包含的所有不同参数的所有可能值组合的集合。”虽然听起来令人印象深刻,但这个定义对于外行人来说并不是特别有帮助。因为我是视觉学习者,也许涂鸦会更有启发性:

Personal doodle.

本质上,如果您有可以绘制的参数(即自变量或变量),那么绘制它们的空间就是参数空间。对于 K-NN,参数空间将是两个轴之间的一切,我们试图分类的点是星。(暂时忽略 k 值。)

http://bdewilde.github.io/blog/blogger/2012/10/26/classification-of-hand-written-digits-3/

在上图中,有两种类型的圆圈:黄色圆圈和紫色圆圈。在这样的数据集上执行 K-NN 的目的是根据它与周围圆圈的接近程度来预测我们的新输入恒星是属于黄色圆圈类别还是紫色圆圈类别。

所以参数空间。检查。

在深入 K-NN 背后的思想和数学之前,我们还需要解决一件事。这个术语在我的助教上面的定义中没有,但是理解它将帮助我们理解当我们运行 K-NN 分析时到底发生了什么。,而那个术语就是算法懒惰* *

https://www.theodysseyonline.com/im-secretly-lazy

K-NN 是一种“懒惰”算法。

但是一个算法怎么可能偷懒呢?算法会不会累?他们会有糟糕的日子吗?遗憾的是,没有。在这里,懒惰意味着算法不使用训练数据点进行任何推广,正如阿迪·布朗什坦写的

我们还没有解决训练一个算法的想法,但是我们仍然可以理解 Bronshtein 的意思。本质上,所有受监督的机器学习算法都需要一些数据作为其预测的基础。在 K-NN 的情况下,它需要像上面图表中黄色和紫色圆圈这样的数据,以便知道如何对恒星进行分类。与急切的算法(例如决策树)相反,懒惰的算法存储他们将需要的所有训练数据,以便对某样东西进行分类,并且直到他们被给予某样东西进行分类的确切时刻才使用它。

懒惰算法的另一个术语是“基于实例的学习”,它可能传达更多的功能顾名思义,这种类型的算法(通常)接受一个数据实例,并将其与内存中的所有实例进行比较。

Cathy O'Neil,又名“mathbabe”,给出了一个基于实例的学习的好例子,使用了一个杂货店场景:

当然,你真正想要的是在新用户购买任何东西之前,根据他们到达时你对他们的了解,即他们的属性,预测他们的类别。所以问题是,给定一个用户的属性,你对该用户的类别的最佳猜测是什么?

让我们使用 k-最近邻。设 k 为 5,说有一个新顾客叫莫妮卡。然后,该算法搜索与 Monica 最接近的 5 个客户,即在属性方面与 Monica 最相似的客户,并查看这 5 个客户属于哪个类别。如果他们中的 4 个是“中等支出者”,1 个是“小支出者”,那么你对莫妮卡的最佳猜测是“中等支出者”。

我靠,这太简单了!

当然,事情没有那么简单,但是我们将把 K-NN 的复杂性留到以后的文章中讨论。目前,K-NN =一种惰性算法=存储它需要进行分类的数据,直到它被要求进行分类。

就是这样!现在我们有了继续讨论的基础,比如训练,K-NN 实际上是如何工作的,最重要的是,Katz 如何在他的方言测验中使用它。请继续关注第 2 部分中的所有内容!

与此同时,我鼓励你们所有人,如果你们还没有参加方言测验的话,参加一次(即使你们已经参加了,也要再参加一次)。稍后你会需要你的答案!

纽约时报方言测验背后的数据科学,第 2 部分

原文:https://towardsdatascience.com/the-data-science-behind-the-new-york-times-dialect-quiz-part-2-5c60216b7503?source=collection_archive---------19-----------------------

本系列的第一个部分探讨了 Josh Katz 的 NYT 方言测验,并触及了一些数据科学主题,如参数空间和“懒惰”算法。在这一部分,我们将首先定义一些常见的机器学习(ML)术语,然后探讨 Katz 如何在测验中使用 ML。

**一个警告:**我是数据科学的新手。如果你在下面的帖子中看到任何不准确的地方,评论并告诉我。我喜欢加深对这个领域的理解。此外,这篇文章只是对我喜欢数据科学项目进行逆向工程的一次高级尝试。(我试图联系 Josh Katz 并找到他的项目代码,但没有成功。)

一些额外的方言测验背景

通过听 Katz 在纽约数据科学院的演讲和阅读他对 Ryan Graff 的采访,我得到了以下信息:

  • Katz 创建了一个有 142 个问题的试点方言测验,其中有 Vaux 和 Golder 在他们的调查中使用的最初的 122 个问题,加上 Katz 通过来自 RStudio 社区的输入提出的另外 20 个问题(他在同一个社区发布了他最初的方言地图可视化,这使他受到了《纽约时报》的注意)。
  • 除了回答这 142 个问题,用户还可以为每个问题选择“其他”答案,并填写自定义答案。
  • 在试点研究中,除了语言和位置问题,Katz 还调查了人们的年龄和性别。
  • 总共有 35 万人参加了试点测试。
  • 卡茨用来自试点的数据为 NYT 版本建立了最终模型。
  • Katz 根据他发现的最具启发性的问题,将最终方言测验的问题从 142 个减少到 35 个(其中只有 25 个在一次会议中提供给用户,使得每次测试都略有不同)。

监督与非监督 ML

正如在本系列的第一部分中提到的,Katz 在他的方言测验中使用的算法 K-Nearest Neighbors (K-NN)是一种监督的 ML 算法。这意味着 K-NN 通过输入既有问题又有答案的数据来学习如何工作。与 un 有监督的 ML、K-NN 以及类似的算法相反,给它们一组问题以及它们的解决方案,以便它们可以很容易地看到未来期望它们产生什么类型的输出。

Claudio Masolo 在他的博客文章“有监督的、无监督的和深度学习”中很好地描述了这两种类型的人工智能之间的区别:

使用监督学习,在训练阶段将一组示例(训练集)作为输入提交给系统。每个输入都标有一个期望的输出值,这样系统就知道[输出应该如何,取决于输入]。。。另一方面,在无人监督的学习中,系统提供的训练样本并不被标上所属的类别。因此,系统开发和组织数据,寻找它们之间的共同特征,并根据内部知识进行改变

Supervised learning schema from Masolo’s post “Supervised, Unsupervised, and Deep Learning

Unsupervised learning schema from Masolo’s post “Supervised, Unsupervised, and Deep Learning

总而言之:

  • 监督 ML(例如 K-NN) =向你的模型输入包含问题和答案的数据,以便它能够做出准确的预测。
  • 无监督 ML =输入包含问题的模型数据,并要求它从这些问题中梳理出模式,然后它可以使用这些模式做出准确的预测。

更多行话!

因此,我们知道 K-NN 是一种监督的 ML 算法,现在我们知道这意味着什么。在我们继续之前,我们还需要解决一些术语。

https://instapage.com/blog/avoiding-bad-agency-proposals

在 ML 的世界中,数据科学家通过向它们提供训练数据(通常是我们数据集的 80%)来训练我们的算法。这些训练数据由称为特征向量和标签的东西组成。除了几个术语之外,让我们回顾一下这两个概念,以便快速理解。

特征

要素本质上是数据集的列标题。它们是你的自变量,其中任何一个变量的变化都可能会导致你的因变量(或“目标”)的变化。(如果你听说过一个数据科学家做“特征工程”这些是他们为了优化他们的模型而添加/删除的东西。)

在方言测验的情况下,一些特征可能是测验中不同的问题、年龄和性别。

特征向量

特征向量本质上是数据集的行。每个特征向量都是数据集中观察值的数字表示(耶,线性代数!).

假设您正在创建一个房价数据集。每行代表一所房子的价格信息。虽然您的特征可能是“要价”、“卧室数量”和“售价”,但特征向量可能是“1,200,000,3.0,950,000”这个特征向量将代表一栋特定房屋的要价(120 万美元)、卧室数量(3 间)和售价(95 万美元)。在 K-NN 中,特征向量通常是数据点的位置(经度,纬度)和它们彼此之间的欧几里得距离

在方言测验中,特征向量可能是一个人对测验中每个问题的答案、年龄和性别(除了位置数据之外)的数字表示。

标签

标签是你的因变量。它们是你试图预测的目标或类别。对于方言测验,这些可能是地理位置。

(从技术上讲,标注是数据集要素的一部分。然而,在特征工程阶段和所谓的训练-测试-分割阶段,你可以把它/它们拿出来,以隔离你的因变量和自变量之间的关系。)

最后,让我们开始吧

好了,现在我们都在一些关键的 ML 术语上达成一致,我们可以开始探索 Katz 实际上是如何使用 K-NN 来产生他的方言测验的。从他的数据科学院演讲中,我找到了下面这张幻灯片。

现在,这张幻灯片中有很多内容,其中大部分必须保持抽象,不能探究他的代码。

从顶部开始,我将在这篇文章的剩余部分(简要地)探索两个信息块:

  • 选择 K 值
  • 内核平滑

所以,开始疯狂吧!

选择 K 值

在上面的幻灯片中,Katz 似乎在说,他想使用他选择的 k 值和一个点的 k 最近邻( t) 之间的差值(比例)来估计一个人来自某个位置的概率。那么,一个人如何选择这个难以捉摸的 k 值,k 是什么*?*

k 是一个“超参数,这只是一个花哨的词,用来描述你的模型的一些属性,你可以独立于你的数据进行调整。例如,如果你是一个专业的快速吃热狗者,你可能关心的一个超参数是你一次放进嘴里的热狗的数量。也许你想试着一次吃 3 个,也许一次吃 1 个。无论你吃的是希伯来民族热狗还是格雷的木瓜热狗,你都可以改变你策略的这一总体属性。

在 K-NN 中,您的超参数 k 基本上是您希望您的模型关心的最近邻居的数量。实际上,不同的 k 值导致不同的“决策边界”由您选择最适合您的数据的。下面是 Kevin Zakka 在 K-NN 上发表的伟大博客中的插图,展示了不同的 K 值可能是什么样子。

正如 Zakka 指出的,更小的 k 值(例如 1)将导致更灵活的拟合(具有低偏差,但高方差,在本文中我们没有时间讨论其平衡)。较大的 k 值(例如 20)会产生更平滑的边界,因为它更能抵抗异常值(具有高偏差和低方差)。

Katz 可能使用的一个策略是交叉验证。交叉验证是估计泛化误差的一种方式。通过交叉验证和 K-NN ,您可以将样本数据分成随机段,并将 K-NN 模型应用于每个段,其中 KK的值各不相同。然后分析每个片段的SSR或其“回归平方和”用回归的话来说,SSR 代表你从数据的实际平均值到预测值的移动。在对分段数据使用不同的 KK值运行 K-NN 后,对每个 SSR 进行平均,然后选择产生最小误差的 K 值。

Flatiron School slide from Linear Regression deck created by Sean-Abu Wilson.

无论你为 k 选择什么值,都会改变你的模型的输出。

虽然我们不知道 Katz 为他的模型选择了哪一个,但我们至少可以理解它的重要性。

内核平滑

卡茨似乎也在他的模型中使用了一种叫做内核平滑器的东西。维基百科告诉我们,内核平滑器是一个

将实值函数估计为相邻观测数据的加权平均值的统计技术。权重由内核定义,这样更近的点被赋予更高的权重。

因此,核帮助我们在 K-NN 模型中对 K 值进行加权。

在他们的论文《关于核差分加权 K-最近邻分类的 T2》中,左等人写道,加权度量(【在我们的情况下是】k )被定义为“未分类样本 x 和训练样本 x 之间的距离……”(248)。这似乎与卡茨在我们之前查看的幻灯片中描述的非常相似,他的策略是使用未知值 t 与其最近邻居之间的差异比例,因此我们似乎走上了正确的轨道。

在他们的论文中,左等人提到了另一篇可能对我们有所帮助的论文:“学习加权度量来最小化最近邻分类错误”。在本文中,Roberto Paredes 和 Enrique Vidal 讨论了通过最小化“遗漏一项”( LOOCV )分类错误交叉验证技术来优化其 K-NN 模型的策略。

在我从他在纽约数据科学学院的演讲中发现的另一张幻灯片上,卡茨特别指出,他利用 LOOCV 来选择他的模型参数,其中之一是 k 。虽然我们不会在这篇文章中讨论西格玛和阿尔法参数,但让我们简要地谈谈 LOOCV,了解一下这里发生了什么。

Slide from Katz’s NYC Data Science Academy talk

在 LOOCV,您选择 1 个数据点进行测试。这是“被忽略”的一点。然后,您构建没有这 1 个数据点的 K-NN 模型(T19),并评估您的模型与这一遗漏数据点之间的误差值。对所有训练数据点重复此操作,并对结果取平均值。众所周知,LOOCV 非常“计算昂贵”,因为你必须创建和运行这么多模型。正因为如此,正如您在上面的幻灯片中所看到的,卡茨选择将其可能的 k 值限制为 20 人一组。**

因此,通过使用交叉验证策略,如加权核和 LOOCV,卡茨得到了他的完美 k 值。

这是大量的信息。正如我之前所说的,请在这篇文章的评论中提出任何更正、澄清或我应该探索的其他资源,以加深我对 K-NN 和 ML 的理解。

在我们结束之前,关于方言测验,还有几件事要知道:

  • 在你进行方言测验时,出现在每个问题旁边的迷你热图只是用 r 语言预先渲染的静态图像。
  • 与小地图不同,用户在测验结束时得到的大地图是在 D3.js 中动态生成的,因为每个问题的答案组合超出了 Katz 事先可以生成的数量。
  • 模型计算是在服务器端完成的——每次计算完成后,服务器都会生成一个代表每个答案的向量。在此基础上,完成向量矩阵乘法,然后服务器返回每个答案的值,然后呈现在用户的屏幕上。
  • 卡茨在一个名为“闪亮 T5”的 R 包中建立了这个测验。

我们做到了!我们现在知道了著名的 NYT 方言测验的大部分内容。

数据科学泡沫

原文:https://towardsdatascience.com/the-data-science-bubble-99fff9821abb?source=collection_archive---------5-----------------------

为什么数据科学需要企业家精神

Pixabay

恐怕我有一些坏消息要告诉我的数据科学家同事;数据科学是当今公司最糟糕的投资之一。

虽然单个项目可以获得 1000 倍的投资回报,但你的公司的下一个项目做到这一点的可能性几乎为零,事实上,它完全失败的可能性相当高。去年,Gartner 估计多达 85%的数据计划失败。

The Real Data Science Workflow

对于远离公司董事会的幸运儿来说,可能很难想象说服一家财富 500 强公司的高管为某个只有 15%成功机会的项目投资 1000-1000 万美元,但这种情况经常发生。

有些人会说,是时候结束了,挂起我们的神经网络,让我们的 GPU 退休,回到我们来自的物理实验室或数学大楼。

我,我不确定。问题不在于数据科学是假的,而是数据科学本身就有风险。当处理真正尖端的问题时,在项目开始时很难说它是否会成功。

好消息是有人已经找到了解决这个问题的方法,进入创业公司。

“初创公司是一个人类机构,旨在极端不确定的条件下创造一种新产品或服务。”— Eric Reis 精益创业

如果这不是你的普通数据科学项目,我不知道什么是。从创业的角度研究数据科学的意义是直接而深远的。为了让这篇文章不超过五分钟,我将简要强调三大要点。

1.构建最小可行模型

“如果你不为你产品的第一个版本感到尴尬,那你推出的太晚了”——雷德·霍夫曼联合创始人 LinkedIn

霍夫曼的评论完全适用于模特。

第一个模型应该很糟糕,把它看作是最低可行的模型。

不幸的是,现实往往是相反的。数据科学项目通常是资金涌入的黑洞,有一天一个原始的模型出现了,有不错的分数和漂亮的基础数据。团队总是震惊地发现模型没有解决客户的真正问题。

这正是问题所在,尽管数据科学一直在谈论实验和科学,但它可能是软件中最不敏捷的分支。

与其将数据科学项目视为博士论文,不如将它们视为创业软件项目。构建一个 MVM,让它出现在用户面前,并不断迭代。

2.通过融资降低风险

创业融资模式的天才之处很简单。

通过重复项目评估降低风险。

众所周知,数据科学项目很难评估,部分原因是它们经常承诺一些非常创新的东西,以至于以前从来没有做过。资助这样的项目与资助一家声称拥有改变行业的技术的初创公司没有什么不同。

值得注意的是,最具破坏性的失败不是一个提议的项目没有得到资助,而是一个完全资助的项目花费了全部预算,交付了一个非运营模型,并且在这个过程中没有学到任何有意义的东西。这意味着在企业家的思维模式中,风险不是通过接近完成来降低的,而是通过降低围绕提议解决方案有效性的不确定性来降低的。有人可能会半开玩笑地把企业家精神描述为寻找使系统熵减少某个因子所需的局部最小工作。

一个项目通过证明或反证有效性来反复展示它是如何降低风险的,并根据该证明如何为项目展示更大的预期价值来获得资金。如果项目开始不稳定,考虑旋转,也许这个项目不能解决它要解决的问题,但是对其他事情来说是一个理想的解决方案。

3.通过竞争实现增长

大多数数据科学组织声称是扁平化的,但却极其层级化。资金和项目想法是自上而下的,而不是由头脑设计出来的。

数据科学发展太快,自上而下的组织跟不上。

创造一个开放的环境,让项目可以在任何级别上发起,这是一个组织能够跟上这个领域令人眼花缭乱的步伐的唯一方法。组织间的竞争不应被视为一种威胁,而应被视为一种必要的适应功能,它能让最佳创意脱颖而出。

“和平时期你流汗越多,战争时期你流血就越少。”乔治。巴顿将军

虽然 Patton 将军不是传统的创业领袖,但他关于竞争的观点在数据科学的竞争领域听起来确实如此。现实是,不管一个组织是扼杀竞争还是接受竞争,从它的产品离开它的前提开始,竞争就是一件非常真实的事情。

摘要

数据科学在过去十年中产生了一些最伟大的技术创新,但正如许多组织所实践的那样,它也是完全不可持续的。生产更相关的模型、降低风险并跟上该领域的步伐将要求组织重新思考他们如何进行数据科学。将数据科学构建为企业家精神使其再次成为一项伟大的投资。

数据科学生态系统:工业版

原文:https://towardsdatascience.com/the-data-science-ecosystem-industrial-edition-938582427466?source=collection_archive---------1-----------------------

之前的一篇文章中,我研究了数据科学生态系统及其在科学界的参与者、激励和挑战。在这里,我尝试将这种分析移植到工业数据科学生态系统中。这两种生态系统及其参与者的动机在几个方面有所不同,因此高管们在构建和管理它们时面临着非常不同的挑战。然而,场景的结构、演员和角色都非常相似。

The schematic data science ecosystem in a company

业务和 IT 是几乎所有公司的既定职能部门,当然也包括那些考虑使用数据的公司。在这里我将分析剩下的三个新角色,他们做什么,他们的动机是什么。正如在之前的文章中,角色是角色,而不是人:任何给定的人都可以担任多个角色,并且可以在任职期间多次转换角色。

数据科学家“T”:技术大师

这些技术专家出现在流行的数据挑战网站上,他们中的许多人在那里对各种工业和科学数据集进行最直观的拍摄,就像在多人视频游戏中一样。最好的是最先进的数据科学工具包的大师,他们可以深度学习和远视,他们可以提升、交叉验证和融合。然而,他们不是魔术师:他们不会从原始数据中发明商业解决方案(这是他们的老板希望他们做的)。他们的输入是定义良好的业务问题和相对干净的数据源。他们构建和调整原型工作流,但很少关注原型之外的管道。最重要的是,他们 80-90%的时间真正做的是数据清理、连接、格式化、扩充,然后再清理。所以他们最好擅长这个。在一些高端 IT 公司,他们做研究(例如,见 FAIR —脸书人工智能研究),但是,与科学生态系统不同,这种情况很少见。

数据科学家“B”:形式化者

如果这个图中有人是魔术师,那么形式化者就是。有时他们来自业务部门,学习数据科学,有时他们是前技术大师,学习业务专业知识。无论是哪种情况,都掌握了数据科学方面的可能和业务方面的需要什么。至少他们可以流利地与领域专家交流。没有他们就没有创新。他们的技术贡献是将业务目标转化为损失指标。他们形式化数据科学原型工作流(但他们不一定构建它们)。他们可以定义和确定数据收集工作的规模,并估计其成本。他们还可以估计构建和调整工作流并将其投入生产所需的工作量。简而言之,他们拥有做出关于构建以数据为中心的产品的明智决策的所有要素。下图说明了他们的心态(从),混合了数据科学概念(可预测性)和业务概念(每错误的成本)。

The mindset of a formalizer. Mixing business and data science concepts.

高端 IT 公司通常建立他们的形式化团队:例如,参见脸书的核心数据科学,这至少同样重要,当然对于短期和中期业务目标而言,也同样重要。

数据工程师

数据工程师的角色是将原型工作流转化为产品。他们了解最新的数据工程系统和架构,并且对现有的 IT 基础设施有深入的了解。他们可以确定生产工作流程的规模并估计其成本。如果形式化者没有这些元素的信息,数据工程师应该从一开始就参与项目定义。他们还知道构建数据科学工作流的基础知识,并且能够通过提取并可能清理和管理足够的数据来为原型制作过程提供支持

如果你在一家围绕以数据为中心的产品而建立的 IT 公司,我的分析可能看起来相当琐碎、简单。尽管如此,它对非 It 公司还是很有用的,这些公司通常有很好的理由,但也受到大数据宣传的压力,正试图转变他们的组织,以适应数据科学工作流的构建。他们的核心业务不是以数据为中心的,但他们希望使用数据来预测机器的故障,留住他们的客户,或减少内部采购欺诈。他们构建产品和生态系统的最佳策略是什么?

IT 驱动的数据科学生态系统的构建

大多数大中型非 IT 公司的 IT 基础设施中都有数据仓库。他们通常将存储数据作为满足法律或业务需求的副作用。聪明的 IT 工程师的自下而上的计划通常会遇到自上而下的指令,这是由大数据热引发的,他们会做出决定:

“让我们安装 Hadoop,购买基础架构,构建一个数据湖”。

为了利用新打造的基础设施,公司然后雇佣数据科学家。这是一段艰难的时期:数据科学家,尤其是形式化者,稀缺而昂贵,他们更喜欢在以数据为中心的公司中为更令人兴奋的项目工作。但是主要问题是到业务单元(核心或非核心)的连接来得太晚。这个问题

利用现有的数据科学团队和我们购买的基础架构,我们可以解决哪些业务问题?

应该早点问的。有可能基础设施不足、规模过大或过小,并且数据科学家不是合适的类型,与业务案例脱节。

数据科学家驱动的数据科学生态系统的构建

一个稍微不常见的情况是,数据科学项目是由技术数据科学家发起的。这些技术大师大多都有自己喜欢的技术。他们可能专注于 15 年前在课堂上学到的工具,或者他们可能刚刚走出学校,在深度学习的浪潮中冲浪。说,第二种类型的大师到来,并说服它:

我是深度学习的忠实粉丝,我们买个 GPU 集群吧。

然后他去见业务部门:

嘿,我能建造和训练这些整洁的网,我能为你做什么?

可能性是:什么都没有。业务案例可以通过十行代码和一个调优的随机森林来解决,并且可以在现有的 CPU 园区上运行。或者更糟:项目因为缺乏数据而受阻。你应该投资一个注释界面或者更多的传感器。

业务驱动的数据科学生态系统构建

到目前为止,您应该已经猜到了构建数据科学生态系统的正确方法。第一步是确定公司应该改进的 KPI 以及为建立管道需要收集或注释的数据。主动性应该来自业务单位,可能在一个好的形式化者的帮助下。然后可以雇佣数据科学家(或者更安全的说法:顾问)来建立一个原型,并且应该开始与它讨论数据提取和原型生产化的准备工作。迭代是这里的关键:在开始原型制作之前,成本和收益都不容易估计。迭代越快,成本越低,你冒的风险就越小。这个过程一点也不新,只是稍加修改,IBM 的CRISP-DM(1996 年的!)完全正确。

主要的困难当然是找到形式化者。找到技术大师相对容易(即使他们很贵),但他们大多数都是
不是那种能帮你定义你的数据科学项目的人。其次, 很少有 **甚至没有为业务主管提供的非技术课程,**向他们解释数据科学过程(管道的迭代构建和管道本身),数据科学家做什么,以及他们在迭代构建以数据为中心的产品时需要做出什么类型的决策。

如果你喜欢你所阅读的内容,请在媒体LinkedIn 、&、 Twitter 上关注我。

数据科学差距

原文:https://towardsdatascience.com/the-data-science-gap-5cc4e0d19ee3?source=collection_archive---------1-----------------------

似乎每隔一天就有一篇关于数据科学如何成为就业前景最佳领域的新文章。

无论是需求还是高薪,它看起来都是寻找工作保障的学生和寻求更高工资的工人的理想选择。获得数据科学技能的建议并没有被忽视——在世界各地,成千上万的学生现在在大学和网络上注册了分析课程。

尽管如此,人们还是注意到了市场上的工作数量和可供选择的候选人之间的差距。毕业生是否应该担心这种数据科学的差距,他们可以做些什么来提高他们找到工作的机会?

是的,对数据科学家的需求仍然很高…

有一些关于数据科学已经达到全盛时期的错误信息流传开来。自 2012 年以来,该领域的角色数量增长了超过 650%。此外, LinkedIn 的 2017 年新兴工作报告关于美国增长最快的工作(基于他们的用户数据)强调,“技术为王”,该平台指出,机器学习工程师、数据科学家和大数据工程师等头衔的工作在一系列行业中都非常受欢迎。

这份报告分析了五年来 LinkedIn 上发布的职位数据,指出今天发布的数据科学家职位是 2012 年的 6.5 倍。更好的是,在他们列出的 10 项“新兴工作中最常见的技能”中,有 3 项与数据科学直接相关(Python、软件开发、分析)。

…但是没有足够多的人有合适的经验

三年前,SAS 的执行副总裁吉姆·戴维斯和 CMO 说:“如果你想快速找到工作,就想办法成为一名数据科学家”(来源)。或者去正确的地方提升自己的技能——比如 DataScienceGO2018。

问题是这个领域发展得太快了:现在有太多缺乏经验的数据科学家进入了一个几乎没有专家的就业市场,给我们留下了一个“底部沉重”的候选人池。这意味着,尽管数据科学领域仍有机会,但希望充分利用这一差距的个人需要聪明地开辟职业道路并取得成功。

…对最好工作的竞争更加激烈

时代变了。当这个术语还是相对较新的时候,公司接受只有基本数据知识的候选人,并让他们在工作中学习。现在,公司通常不会雇佣数据科学家,除非他们有更深层次的知识,比如编码和统计。需求仍然很高,但现在门槛更高了。Umbel 公司的高级工程总监凯文·萨福德说:

“每年,统计学、计量经济学、硬科学和计算机科学的博士毕业生——许多人专门研究机器学习——发现他们对学术界毫无兴趣,并进入了劳动力市场。”(来源)

这意味着候选人现在不得不面对一个竞争异常激烈的市场。一个五年前看起来很有吸引力的应用程序今天可能会被拒绝。

但是……这真的是全部情况吗?

《赫芬顿邮报》声称,目前世界上大约有150 万到 300 万数据科学家——真的没有具备合适经验的候选人吗?

如果我告诉你,造成这种“差距”的人并不是真正的数据科学家;而是不同公司的主管、人力资源部门甚至招聘人员。

为什么?

事实是,数据科学已经成为一个时髦词,一种炒作。五年来,这份工作一直被《哈佛商业评论》评为【市场上最性感的工作】,现在许多公司都争相将数据专家纳入他们的行列。但真正的问题是,他们不知道什么是真正的数据科学家,他们做什么,一个团队是如何配置的,是什么让一个伟大的数据科学家真正“伟大”——对这个职业本身的知识存在巨大的差距。

有很多数据科学家,有成千上万有才华的专业人士可以轻松地颠覆一个前数据业务,但他们很少有机会证明自己。大多数公司急于“雇佣数据专家”,认为他们需要一个有 5-8 年经验的人来解决他们的所有问题(尽管讽刺的是,这个领域已经不存在很多年了),并且他们得出结论,没有这种经验的每个数据科学家都不是好东西。

幸运的是,这意味着机会

推诿责任并说一切都是因为对专业的无知是不公平的——我们数据科学家也有责任。人力资源部门可能一直在以传统方式工作,这并不奇怪,因此他们为这些新的工作岗位而挣扎是完全正常的。他们在我们的数据科学职业生涯中寻找尚不存在的学位,他们想要没有领域可以获得的经验,他们想要他们还不清楚的技能。

这取决于我们展示我们的优势、能力和我们真正能带来的东西。数据是商业的未来,这是不可避免的,我们知道这一点,所以让我们向其他人展示我们是由什么组成的。

但是我们如何做到这一点呢?

我们应该努力缩小数据科学的差距。

填补数据科学空白的 6 种方法

那么我们应该如何定位自己,才能保证得到自己想要的工作呢?我们应该变得擅长视觉吗?我们应该获得分析软件的全面知识吗?现在放下水晶球,考虑一下你的雇主:所有公司都希望从他们的数据科学家那里获得解决实际问题的能力,更好的是:能够交流他们的发现。如果我们可以用数据来回答真正的商业问题,那么我们将有更好的机会获得我们想要的工作。

但为此我们需要经验和专业知识;成为受欢迎的数据科学家没有捷径可走。这里有六种方法可以提高我们的机会:

1.了解该领域

从制药到体育,各个领域都需要数据科学家。一家销售公司可能想知道如何针对正确的客户群定制营销活动。一家金融集团可能希望利用他们的历史数据来帮助他们降低风险。一家视频游戏出版社可能想知道他们可以采取哪些措施来增加忠实玩家的数量。一个政府机构可能想看看他们如何开始在他们的城市实施智能技术。

你越了解一个领域,你就越有可能成功地管理它的数据。如果你不了解金融行业是如何运作的,那么在银行担任数据科学职位是没有意义的。你必须仔细了解它的实践和方法,以便回答那些至关重要的实际商业问题。

2.学一门课程

在一个像数据科学一样快速发展的领域中,你需要能够变得敏捷。明天,你会发现今天重要的一些话题不再重要;因此,在这个领域保持相关性的最佳方式是保持对知识的渴望,并提升自己的技能。Morning Future 建议,最好的准备方式是参加有针对性的课程,因为“十家公司中有四家会去那里寻找未来的数据分析师。”

无论是在网上还是在校园里,拥有良好声誉的数据科学课程都是至少初步了解数据工作的最佳方式。许多在线课程都附有学习证书,以证明你已经关注并完成了课程——目前它们可能不是最受欢迎的(相信我,我知道),但将来会是。

3.找一个导师

导师是寻求建议和明确工作前景和职业的好方法。许多数据科学家乐于开发有前途的新候选人,以我的经验来看,他们欢迎给别人提建议的想法。我们是一个分享信息和最佳实践的团体。这毕竟是最好的提高方法!

4.阅读新闻

如果你没有听说过数据=速度,那么你就落后了一步。

数据移动得很快,成百上千的人在从事成千上万的项目,谁知道呢?也许你一直在努力解决的那个问题的缺失部分,今天早上可能已经被其他人解决了!

作为一个建立在成员间协作前提上的领域,数据科学不断受益于他人的工作,让每个人都能构建更宏大、更有影响力的东西。

跟上新闻,订阅正确的博客,听完美的播客或接收正确的时事通讯可能是你可能忽略的解决方案。

5.申请合适的公司

数据科学吸引了很多媒体的关注,因为它可以解决公司及其收集的越来越多的信息,但这是一把双刃剑——大多数公司最终仍然不知道他们在候选人身上寻找什么。

如果你想保护自己不为那些不了解他们想要什么的公司工作, Robert Chang 建议避开曲折的工作规范。明智的建议:列出一长串你需要了解的方法和软件的潜在工作,只能显示出一家公司对其数据战略、数据需求的了解有多么少,更不用说“他们会雇佣任何人,因为他们认为雇佣任何数据人员都会解决他们所有的数据问题。”

6.网络

不喜欢认识新朋友?如果你真的想成为一名数据科学家,请重新考虑。记住上面的第三点:数据科学最终是一个社会领域。人脉不一定要面对面;可以从自己客厅的舒适度开始。在 Twitter 上与其他数据科学家交谈,在 LinkedIn 上与他们联系,或者在 Reddit 上加入讨论。

如果你想提高你的游戏水平,有一个超级友好、信息丰富和轻松的活动可以让你开始建立你的社交技能:data science ego,一个以职业为重点的数据科学会议。

新数据科学家比以往任何时候都更需要学习如何创建实现职业目标的可靠途径。这正是我们在设计 DSGO 的个体元素时所想的:以职业为中心的数据科学方法。DSGO 将参与者与适合其技能水平、经验和兴趣的客户、导师和合作伙伴联系起来。该活动将举办技术讨论、知名行业演讲人、实践活动和激励会议,让参与者开始了解数据科学,并给予他们在该领域前进的灵感。

关于数据科学大会 2018 的最新确认发言人名单,请访问我们的会议网站。订阅我们的时事通讯,了解最新的演讲者和预定活动。快点,我们的早鸟票很快就卖光了!

Get your Ticket here!

现在不要退出!

最终,作为优秀的数据科学家,我们必须看到证据,而不是专注于猜测。

事实是,数据为公司提供了他们在竞争中领先所需的信息,因此他们解决了商业中最重要的一个需求:赚钱。我们使用的技术并不比五年前少。智能设备、积分卡、社交网络平台、互联网搜索,所有这些东西每年都会产生更多的数据。人们总是需要管理不断增长的信息量。证据表明,数据科学领域的工作仍将增长,而且该领域相对安全,不会受到自动化的影响。

是的,这个领域的竞争变得更加激烈,但是不要让竞争在你试图有所作为之前就击败了你。有很多工作在进行,只要付出一点努力,努力工作,态度端正,即使没有工作经验,你也很有可能成功。

K-Pop 的数据科学:通过数据和人工智能理解 BTS。

原文:https://towardsdatascience.com/the-data-science-of-k-pop-understanding-bts-through-data-and-a-i-part-1-50783b198ac2?source=collection_archive---------0-----------------------

通过数据科学理解 BTS 热潮。

介绍

BTS (Bangtan Boys)是一个毫无疑问是国际轰动的 K-Pop 组合。一周前,成员们的脸被登上了《时代》杂志的封面,其他著名的媒体机构如艾伦和英国广播公司也一起受到了关注。

随着这一群体的突然崛起,自然产生了理解这一切的愿望,尤其是在西方。是什么让这个团体如此值得关注?鉴于韩国有数百名歌手(更不用说西方歌手),是什么让他们与竞争对手相比如此独特呢?

同样的媒体也试图回答这些令人困惑的问题。提供的答案包括:

  1. 成员“完全理解团队的价值观”——时间
  2. “高品质的音乐”——Kpopmap
  3. 努力工作的儒家价值观— 心理学家手表
  4. “情感共鸣,真心诚意,粉丝大军。”— Vox

问题是

这些解释的问题在于,它们中的大多数并不真正令人信服。他们可以很容易地应用于另一个著名的韩国男孩乐队 say BigBang,该乐队也被认为是“音乐多样性[和]不符合规定”,同时“仍然保持独特的身份”(Mithunonthe,2012 年)。此外,这些说法没有任何科学调查的支持,仍然只是没有任何真正的批判性验证的话。

这是本文旨在解决的问题,通过使用机器学习和人工智能中最新的数据科学技术,科学地回答群体的真实身份问题。

这是关于 K-Pop 和数据科学的两部分系列的第一部分。在第二篇文章中,我将研究 K-pop 的歌词,探索数据科学技术如何对 BTS 歌词进行定量分析。

重要说明:本文面向更广泛的读者。因此,我不会花时间解释我使用的工具的技术细节,而是直接进入可解释的结果。整个作品可以在我的 Github 上找到。

方法论

数据分析:获取和分析数据

在第一部分,我探索了 BTS 的一个明显的方面:他们的音乐。我进入 Spotify 的 API,它给了我每首 BTS 原声带的 11 种音质。这些品质从数学上衡量了每首歌的音质、舞蹈性、乐器性等的数值水平。这些计算不是我自己的,而是 Spotify 的内部算法。

numeric breakdown of every single BTS song.

基于这张20 大艺人排行榜,我收集了 BigBang 和 Twice 等其他 K-Pop 组合的数据。总的来说,我总共有 2673 首 K-Pop 原声。用几行代码,我提取了一些关于 BTS 音乐的有趣的数学特性。

这些数字代表了我们数据集中每首 K-pop 歌曲的每个音乐特征的平均值。我们在这里看到,平均来说,BTS 的歌曲的speechiness水平最高,几乎是其他艺人的三倍。Speechiness是检测音轨中的口语单词,与instrumentalness相反:衡量音轨是否包含人声。难怪 BTS 的歌在后一项指标上相对较低。事实上,看看下面的图表:

-

我们在这里看到,自 2013 年(该集团首次亮相)以来,liveness danceabilityspeechinessacousticness的测量值都逐渐下降,直到 2016 年,这些数字开始回升。匡威,energy在他们的跟踪中增加,直到 2016 年的同一年,数量开始下降。

-

单看speechiness,BTS 的更不用说了,有 0.90 的最高等级之一!如果你看看下面的音乐视频,你会发现这首歌是流行、嘻哈和说唱的混合,导致歌曲中的人声比例很高。

艺术家之间的视觉比较对于我们解决群体身份和独特性的问题也是有用的。

上面的分布图展示了一条有趣的信息。BigBang 和 iKon 的音乐通常围绕特定的节奏(分别为 125 和~90),而 BTS 的音乐则更多地分布在节拍中。这表明 BTS 的音乐在节奏和速度上是多样化的,包括节奏极快和极慢的歌曲。

我想听听自己的感受,速度有多大的不同。节奏最慢的 BTS 曲目是 Butterfly ,这是一首民谣-EDM 混合曲目。包含最快节奏的曲目之一是 MAMA,它倾向于直上嘻哈。

Not the original for ‘MAMA’. Couldn’t find it on Soundcloud.

-

iKon 与 BTS 的比较尤其相关,因为他们也是一个流行/嘻哈混合组合(BigBang 也是)。但是他们的歌曲平均来说要慢得多,像欢迎回来就徘徊在 90 度的节奏线上。我的数据显示,他们最快的音乐要么是混音,要么是原版的现场演唱会版本。

数据建模:计算数据(通过人工智能)

有了这些数据中不可预测性较低的确定性数字(不像用户行为数据),机器学习算法就可以相对容易地了解哪些音乐属性对于区分一个 K-Pop 团体和另一个团体是重要的。因此,我建立了一个简单的分类器,机器学习模型将学习这 11 个音乐特征,并尝试预测这些歌曲是否来自 BTS。

-

对于更具技术性的观众,我使用了 LightGBM、梯度增强和随机森林的集合模型,采用一个 v-all 方法,其中当特征对应于 BTS 歌曲时,目标标签为 1,否则为 0。在没有任何模型优化或特征工程的情况下,三款都在 AUC 的 0.9 附近。过采样被用来对抗阶级不平衡。

-

这些机器的输出与我们了解 BTS 区别于其他 K-pop 艺人的重要特征非常相关。因此,下面的图表是我们最初问题的答案!

如何阅读 SHAP 值图表:SHAP 值是一个数学计算,根据 11 个特征,计算每个特征对我们的机器预测一个音轨是否是 BTS 的贡献。

这些特征在左侧 y 轴上的等级越高,它们对模型预测的影响就越大。对模型输出的正面和负面影响的大小通过点从中心的分散程度来显示。正面影响是指对 BTS 预测的影响,负面影响是指对其他方面的影响。

图表中的蓝色和红色表示特性的值。例如,红点代表speechiness 的较高等级,蓝色代表该特性的较低值。

综合这些信息,上图显示speechiness是模型预测最重要的特征。speechiness水平越高,宋对我们机器预测 BTS 的影响就越大。

美国艺术家呢?BTS 对布鲁诺·马斯

我决定通过比较 BTS 和欧美流行音乐人来进一步分析。在收集了凯莉·克莱森、单向乐队和布鲁诺·马斯等艺术家的音乐数据后,我让我的模特们试着从 BTS 的音乐中辨别出他们的音乐。我收到了以下结果:

再次在特性重要性上排名第一,尽管影响的大小似乎比以前的结果更加平衡。有趣的是,energy并不像活性一样是一个重要的预测因素。然而下面的图表显示 BTS 的歌曲在他们的能量水平上排名更高。同样值得注意的是,与其他西方艺术家相比,BTS 歌曲在acousticness排名倒数第二。

结论

通过数据科学中的技术,我们发现了 BTS 特有的音乐品质,以及它们如何影响我们的机器学习算法提供的结果。

我们发现了一些东西:

  1. 与其他男性流行歌手相比,BTS 的歌曲非常多样化,节奏分布也很均匀,尤其是那些融合了流行和嘻哈的歌手。
  2. 平均而言,BTS 歌曲的音轨中人声比例较高,乐器比例较低。
  3. 平均而言,BTS 的歌曲比西方流行歌手更有活力。他们的音乐在声学测量方面也相当低。

如果你喜欢《韩国流行音乐与数据科学》的第一部分,请继续关注第二部分,在第二部分,我将研究韩国流行音乐的歌词,看看我们是否能得出与 BTS 相关的同样有趣的见解。

与此同时,请随意查看我关于流行音乐和人工智能的另一篇文章。在那里,我展示了我如何制作一台可以自己创作流行音乐的机器!

[## 制作音乐:当简单概率胜过深度学习

概述:我如何发现一个使用深度学习制作音乐的问题,并通过创作自己的原创来解决它…

towardsdatascience.com](/making-music-when-simple-probabilities-outperform-deep-learning-75f4ee1b8e69)

数据科学过程

原文:https://towardsdatascience.com/the-data-science-process-a09c5bc0cc4?source=collection_archive---------11-----------------------

对于我最近在大会数据科学沉浸式课程中的项目,我遇到了相当多的障碍。虽然我在过去的四周里已经讨论了大量的材料,并为我的敏锐度增加了不少技能,但爱荷华州的白酒销售项目向我揭示了我对数据科学以及进行彻底分析的相关最佳实践有太多的不了解。我很乐观,但有很多事情我希望我能以不同的方式去做。

我发现这个领域最具挑战性的事情是阅读和解释文档。从熊猫,到 Numpy,到 scikit-learn,到 Seaborn,尽管导师提供了看似简单的例子,但事情并不容易。这门课程是为我们设计的,让我们超越讲座中所涵盖的内容,这也是我意识到自己最大的困难所在。这需要时间。人们很容易迷失在几个小时的 YouTube 教学视频和由经验丰富的程序员为经验丰富的程序员编写的神秘格式中。面对如此丰富的资源,寻找解决方案可能会很困难,每一个小小的成功都会遇到至少两个障碍。

这篇文章不是发泄,而是要具体展示什么有效。希望我能够利用一些辛苦学到的洞察力来简化未来的事情。

EDA 和清洗

导入 csv 时,将列名改为小写,并在出现空格的地方插入下划线。

dataframe_cols = ['col_1 ',' col_n']

我们需要使用 dataframe 函数对日期进行转换,使其成为 python 易于阅读的格式。

data frame[" date "]= PD . to _ datetime(data frame[" date "])

哪里出了问题

缺失值和数据类型至关重要。我天真地认为我不应该担心那些不影响我的变量的列。

此外,许多数据确实需要修改。字符串需要转换成浮点数。货币值需要去掉美元符号和逗号。不早点这么做最终会浪费时间,让我感到沮丧。

data frame . sales = data frame . state . sales . str . replace(' $ ',' ')

data frame . sales = data frame . sales . str . replace(',',' ')

剩下的 EDA 步骤进展顺利,但是我仍然对最佳实践有疑问。例如,在不同的列中有相当多的重复项,而我没有按县划分销售额这一事实将需要相当多的额外步骤,例如创建虚拟变量和考虑人为错误。

我遇到的另一个问题是自我诱导的。出于某种原因,我认为这项任务要求我们包含多个独立变量,所以我查看了各种因素,如瓶容量、州瓶成本、州瓶零售等与销售相关的因素。这不仅是错误的,整个要点是使用 2015 年 Q1 销售额和 2015 年剩余 9 个月之间的线性回归进行交叉验证,以创建一个可以帮助我们预测 2016 年最后 9 个月的模型。尽管有这些缺点,我还是学会了如何利用一个特定的函数来查看独立变量之间的相关系数(皮尔逊系数)。虽然它不适用于这个特定的作业,但我知道它在将来会有用,我们在课堂上也讨论过它的一般概念。

dataframe.corr(method='pearson ',min_periods=1)

总的来说,这项作业似乎是为了让学生熟悉 groupby 函数而设计的。因为我想按商店查看销售额,所以我使用了下面的代码并创建了一个新的数据框。

stores _ sales = dict(data frame . group by([' store _ number ']). sales . agg(sum))

因为有两种不同用途的数据,所以我在 pandas 中使用布尔方法来创建新的数据帧。

year 2015 = data frame[data frame . date< ‘2016–01–01’]
year 2016 = data frame[data frame . date>= ' 2016–01–01 ']

然后,我使用 more dataframe 函数按季度对酒类销售进行排序,这将创建一个单独的列。

dataframe['季度']=dataframe['日期'].dt.quarter

q1 =数据帧。quarter == 1

sales _ per _ store _ Q1 _ 15 = year 2015[Q1]。group by([' store _ number ']). sales . agg(sum)

sales _ per _ store _ r _ 15 = year 2015[reminder 15]。group by([' store _ number ']). sales . agg(sum)

虽然事情似乎进展顺利,但我的关键错误(以及其他一些错误)是没有考虑到开店数量的变化。通过使用 sales_per_store_q1_15.shape 和 sales_per_store_r_15.shape,我了解到我无法创建模型。意识到这一点后,我非常心烦意乱,尤其是当时间是至关重要的时候。

这个项目不仅是时间管理上的一堂艰难的课,它还留下了几个没有答案的问题。出于这个原因,这将不会是最后一次与爱荷华州的酒数据集会合。敬请关注稍后发布的更新。

数据科学金字塔

原文:https://towardsdatascience.com/the-data-science-pyramid-8a018013c490?source=collection_archive---------15-----------------------

pexels.com

这次先不要从数据科学说起。先说心理学。我在这方面没有任何能力,但我记得在高中时,有人向我介绍了马斯洛的需求层次理论。我能描述得最好的是人类寻找幸福所必须经历的不同阶段。为了更好地了解它,你可以看看这里的。

这里是著名的金字塔。

https://www.simplypsychology.org/maslow.html

摆脱这种情况的关键是你需要经历所有的步骤,你可以跳过任何一步,永远不要。

在个人能够关注更高层次的需求之前,必须先满足较低层次的需求。

https://www.simplypsychology.org/maslow.html

好的,等一下,这是一个关于技术的博客吗?是的,你是对的,开始吧。

新工作

你可能知道,我最近改变职业。我去了 Shopify 做数据科学家。像任何其他职业变化一样,通过在一个新的环境中工作,与新的人、新的老板、新的一切,你会发现新的做事方式、看待世界的新方式。

就像一位导师有一天告诉我的,“你会发现,通过换工作,在原来的工作中看起来很困难的事情在新的地方一点也不会变得困难。在新的地方,你从来不知道会成为一个问题的东西将会是一个严峻的挑战。”像很多次一样,他是对的。

在之前的一个角色中,我发现自己作为一个机器学习“专家”或者随便你怎么称呼它都有点与世隔绝。我会做一些很酷的事情,但是有时候很难看到全貌。

当我加入 Shopify 时,我被介绍到了 需求数据科学层级。这里可以看完整篇,我觉得真的很值得。但是 TLDR 如果你没有合适的基础,雇佣顶尖的数据科学家是没有用的。

为了更具体,这是著名的金字塔。

https://hackernoon.com/the-ai-hierarchy-of-needs-18f111fcc007

我花了一段时间才真正理解它,但就像做疯狂的多级-卷积-神经网络-深度-随机-森林-其他-酷-流行语-也许-甚至-微服务一样酷,在底层阶段完成之前,你不能跳到这个阶段。

不仅仅是在个人技能方面,我的意思是,作为一个公司,甚至作为一个项目。当你在做一个项目时,这个项目需要跨越这些阶段。最有可能的是(就像马斯洛的金字塔一样),你永远也不会到达大多数项目的最后一步。

就像马斯洛金字塔中解释的那样。你绝对不可能走得太远。如果你跳得太快到了后期,那就不是一个坚固的金字塔,失败的几率很高。此外,为了正确地完成每一步,您必须使用前一步的输出。在金字塔的底部,输出是数据、流程和数据库,在流程的后面,更多的是洞察力、答案等。

前一步的每一个组成部分对下一步的成功都至关重要。

利益

我在 Shopify 的新角色与过去略有不同。我参与了项目的几乎所有阶段。我可以告诉你一些疯狂的事情,大部分价值($)来自对业务问题、产品和数据的良好理解。不是因为使用时髦的算法,不是因为使用超级先进的工具。

不要误解我,这些花哨的算法是有用的,超级昂贵的工具是有用的(看情况,但这是另一个话题)但它不应该是首先要做的事情。它从来都不是唾手可得的果实,也很少是高价发电机。

除非你完成了剩下的部分,否则你不应该在这上面浪费时间。

整个金字塔

我发现的另一件事是个人拥有一个项目(或项目的一部分)的所有金字塔的力量。

因为我为这些数据编写了 ETL,因为当我们决定产生什么数据以及如何包装它时,我与开发人员坐在一起,因为当我们决定项目的关键指标以及我们将 A/B 测试什么时,我与项目经理在一起。我前所未有地了解数据,我真正了解数据来自哪里,如何转换以及如何使用。

当我有时间获得任何洞察力时,这让我的生活变得容易多了。我不依赖任何人花时间来解释我。如果我发现奇怪的行为。我要么解释它们,要么纠正它们。我可以处理数据。

结论

当你太快跳到更高的阶段时,你在撒谎。欺骗自己,欺骗你的团队,欺骗数据科学这门伟大的学科。我知道这听起来不酷,但要谦虚,把精力投入到该投入的地方。但是数据值得拥有。

原载于 2018 年 9 月 27 日coffeeanddata . ca

数据科学复兴

原文:https://towardsdatascience.com/the-data-science-renaissance-166cddde898f?source=collection_archive---------3-----------------------

“如果人们知道我是多么努力才掌握这门技能,那就一点也不美妙了。”——米开朗基罗

复兴意味着重生。多种因素同时出现,可以引发重生。在分析领域,我们正面临着一系列因素的叠加:经济混乱、大规模再培训,以及前所未有的数据访问。这些因素的结合正在引发数据科学的重生,专家主导的模式已经成为过去。历史是一位伟大的老师,它证明了文艺复兴与最初的文艺复兴并没有太大的不同。

文艺复兴是 15 世纪初发生在意大利的一个发展。文艺复兴时期的艺术家们打破了常规(简单的风格),开创了表现主义的新时代。归根结底,文艺复兴是一种新的思维方式,这引发了一段时间的艺术创新。

17 世纪晚期,佛罗伦萨成为一个富裕的城市,富人用他们的财富雇佣当地的工匠。正如通常发生的那样,这场运动导致了竞争,而竞争反过来又激发了创造力。这种情况一直持续到 14 世纪美第奇家族在佛罗伦萨掌权,并利用他们的金钱和影响力继续这场运动。在 15 世纪,文艺复兴从它的发源地佛罗伦萨迅速传播到意大利的其他地方,然后传播到欧洲的其他地方。

虽然这一时期创作了许多艺术杰作,但与文艺复兴联系最紧密的可能是《维特鲁威人的素描》。结合了一个圆形和一个正方形,中间是人,这件作品象征着两个事物的结合:天上的和地上的。这个想法是由作家维特鲁威首次提出的,并以此命名。但是,达芬奇被认为是第一个以解剖学上正确的方式阐述了这个观点。这提醒我们,那些有独到见解的人,并不总是那些在历史上留下印记的人。

数据科学的现代复兴也是一种新的思维方式,与多年前意大利的文艺复兴有许多相似之处:

1)它是经济驱动的,因为计算、存储和数据的成本使得新工匠启蒙运动的资金成为可能。

2)新的工匠可以是任何人,而不仅仅是少数富人或受过某种训练的人。数据科学的专家模式正在终结。

3)数据和科学的应用和融合正在结合成现代的未来愿景:通过机器学习和深度学习的应用实现持续智能。

如果没有一系列预先存在的条件,意大利的文艺复兴和数据科学的文艺复兴都不会存在。在这两种情况下,市场条件激发了创造力,并成为未来创新的起点。就佛罗伦萨的工匠而言,当他们开始理解科学及其应用时,新技术可能会超出他们的想象(想想列奥纳多早期的直升机图纸)。同样,今天的数据科学复兴正在决定每个行业的赢家和输家,在新技术应用的推动下,那些适应的人将生存下来。

今天,旨在利用数据科学的组织本能地知道他们需要做什么,只是有一个指示性的路线图,这将导致成功和领导地位。大多数公司会跳到模型构建和算法选择。对一些公司来说,这是正确的起点。但对另一些人来说,这可能有点过了。

查理·芒格讲述了一个故事,一架飞机正飞越地中海,朝着一个充满异国情调的地方飞去。飞行员的声音通过对讲机传来,说道:“刚刚发生了一件可怕的事情,我们将不得不进行水上迫降。飞机将在水上停留足够长的时间,以便打开舱门,让所有人都出去。我们必须有序地做这件事。所有会游泳的人都去右翼站着,所有不会游泳的人都去左翼站着。”

飞行员继续说道,“右翼的人,你们会发现两英里外有一个小岛。飞机沉下去了,游到岛上就没事了。对于左翼人士,我们要感谢你们今天与我们一起飞行。”

大多数组织感觉他们被飞机的左翼抛弃了。没有指导,没有帮助。只是一系列明显的挑战。机器学习问题是数据问题。数据科学将从根本上改变、自动化和优化所有行业。但是,它从基础开始:数据和分析的基本元素。

数据策略是数据科学的推动者,因为在将数据输入模型之前,所有数据都是脏的。数据和分析的 5 个基本要素为数据科学的复兴创造了适当的先决条件。

这 5 个基本要素是:

开源是全面分析战略的关键促成因素。开放确保创新和速度,同时链接到位于开放平台之上的创新。开源是一个永恒的创新社区。

统一治理对于洞察力和合规性是必要的。统一治理对数据的作用就像图书馆对书籍的作用一样。组织、编目、屏蔽、保护、归档任何资产,并使其能够立即被找到。数据库提供了洞察力,但也提供了对关键法规的遵从性(如 GDPR)。

混合数据管理让组织做好应对多云世界的准备。它使内部和私有云数据投资与公共云部署保持一致。无论关注的是非结构化数据还是结构化数据,数据管理的未来都是私有/公共的,两者之间无缝集成。

可视化是关于数据发现的。理解数据资产,以用户期望的形式呈现它们,并使数据能够被操作和浏览。这是动态的、实时的,不是静态的。

机器学习和数据科学是所有分析要素的组成部分。这是“哈哈”时刻的来源,因为一个组织增强并自动化了决策制定和运营。构建、部署和训练模型。不断学习新的数据。机器学习和数据科学必须驻留在数据驻留的位置,以实现最大影响。

每个人、每个部门、每个组织的起点都不一样。但是,这五个要素是一致的。它们是成功复兴的先决条件。虽然许多组织已经在这些领域中的每一个领域做了一些事情,但是大多数都是在前一个时代完成的。

我们正在进入一个简约的新时代。分析和数据科学方法必须简单:在 15 分钟或更短时间内安装并运行。在以前漫长而昂贵的项目时代,IT 部门是替罪羊。在这个新时代,它不再是业务转型的受害者。相反,就像 1400 年意大利的美第奇家族一样,它领导并促成了这场文艺复兴。

数据科学正在形成,机器学习用例引领了方向。公司开始通过机器学习取得胜利,并且有可重复的模式来推动结果。以一家制药公司为例,该公司习惯于新药需要 12-14 年才能上市的市场,平均成本为 26 亿美元。在这个案例中,应用了数据科学和机器学习,将成本降低了 70%。该算法在两个不同的数据集上进行训练,一个是各种化学品的毒性,另一个是已批准药物的已知副作用。根据这两个数据集,该算法能够以合理的准确度预测药物的毒性。

出现了许多用例。以下是我今天看到的前 10 名:

这里唯一不变的就是变化。我预计前 10 名将每 6-12 个月出现一次。

如前所述,虽然达芬奇是第一个正确画出维特鲁威人的人,但历史表明他并不是自己想出这个主意的。秘诀是让几何图形偏离中心,这归功于贾科莫·安德里亚·达·费拉拉。贾科莫·安德里亚的版本充满了反复,最终取得了成功。他和达芬奇是同事,一起吃饭,还被看到在一起。然而,历史只记得达芬奇的版本。

不同之处在于对行动的偏好。达芬奇付诸行动,其他人只是迭代,停留在实验模式。复兴是对行动的呼唤,而不是对反思的呼唤。现在是数据科学的时代了。

订阅阅读更多关于数据科学和领导力的信息点击这里

点击这里开始学习数据科学

数据科学思维过程

原文:https://towardsdatascience.com/the-data-science-thought-process-df386ee7930a?source=collection_archive---------7-----------------------

在我上一篇关于准备您的数据科学简历和项目组合的帖子中,我讨论了展示一个人的思维过程,因为除了数学&统计背景之外,这对我评估一个人是否适合接受进一步培训或接受数据科学家角色非常重要。

从某种角度来说,数据科学家最有价值的技能是利用数据提供商业价值。它可以提供相关的见解来解决业务挑战或实现业务目标,或者使用机器学习模型来进行更好的业务决策等。总而言之,data scientist 是一个使用组织数据作为原材料的解决方案提供商。在我看来,作为一个有效的解决方案提供商,寻找和引入不同资源的思考过程非常重要(当然还有执行部分,但这可能是另一个讨论)。

因此,我想我会提供一些关于加强这种思维过程的技巧,以便有抱负的和当前的数据科学家可以为他们的雇主提供更多价值,并带来更好的回报(希望如此)。

博览群书

我是一个狂热的读者(或者至少我认为我是)。技术论文,尤其是 arxiv 中的那些,肯定是阅读食谱的一部分,但我也阅读各种主题的书籍,如社会学、心理学、经济学、领导力、传记等。我发现,广泛阅读和绘制不同知识和领域之间的关系,有助于加强思维过程。

通过广泛阅读,获得的一些知识可以用在项目中,比如理解 EDA 期间在数据中发现的某些细微差别。这也有助于创建某些假设(需要进一步测试),这有助于构建一个可行的业务战略。

广泛阅读,有助于激发新的想法(创新!)解决业务挑战,将不同书籍中的想法整合在一起,创造新的协同效应!

主要思想是通过阅读获得和联系知识,并将它们带入思维过程。

了解领域

我喜欢阅读彭博商业周刊、经济学人或类似的期刊。这些都是了解不同行业(如制药、电信、技术、银行)正在发生什么的好地方,对于国家来说,也是了解政治和经济气候的好地方。它可以是一个关于主要趋势如何影响制药行业变化的故事,例如专利期限的变化或 FRS 39/Basel III 如何影响银行业。

所有这些都有助于数据科学家,尤其是在相关行业工作的数据科学家,考虑到影响行业的主要趋势,为他们应该如何处理数据和机器学习模型做好准备。

联网

网络如何帮助强化思考过程?嗯,这是从许多人那里收集的,他们是如何解决他们雇主的业务挑战的。了解在处理项目时有哪些特定于技术、数据和组织的挑战,如果可能的话,还要了解如何应对这些挑战。

也要试着理解他们如何进行探索性的数据分析,并把他们的最佳实践融入到你自己的数据分析中。

很少有人能在一个项目中不出任何差错。所以最好“借鉴”别人的经验,做好准备甚至未雨绸缪。

同样,这里的主要思想是学习和更广泛地了解其他人如何应对他们的挑战,因为你永远不知道什么时候你可能会遇到类似的事情,并且你可以将解决方案应用到你自己的项目中。

结论

广泛的想法是向尽可能多的人学习,博客(当然是媒体!)、期刊、书籍和网站,了解如何应对不同的挑战。从事数据科学项目涉及许多领域、组件和团队,因此挑战可能来自任何地方,最重要的是做好准备,以便我们能够在挑战到来时解决它们,并能够通过组织的数据持续提供价值。

祝所有读者在数据科学之旅中一切顺利!继续学习!

请访问我的其他博客文章LinkedIn 个人资料

数据科学工作流程

原文:https://towardsdatascience.com/the-data-science-workflow-43859db0415?source=collection_archive---------4-----------------------

假设您正在开始一个新的数据科学项目(可能是一个数据集的简短分析,也可能是一个复杂的多年合作)。你应该如何组织你的工作流程?你把数据和代码放在哪里?你用什么工具,为什么?一般来说,在一头扎进你的数据之前,你应该考虑什么?在软件工程行业中,这样的问题有一些众所周知的答案。尽管每个软件公司都有其独特的特点和怪癖,但大多数公司的核心流程都是基于相同的既定原则、实践和工具。这些原则在教科书和大学里都有描述。

数据科学是一个不太成熟的行业,事情不一样。虽然你可以找到各种各样的模板项目文章blogposts讨论,或者专门的平台(开源 12345 、) 商业[ 11121314151617 和内部[ 181920 ]帮助您组织工作流程的各个部分 每个数据科学家最终都会形成自己的个人偏好,这些偏好大多是从经验和错误中获得的。我也不例外。随着时间的推移,我逐渐理解了什么是典型的“数据科学项目”,它应该如何构建,应该使用什么工具,以及应该考虑什么。我想在这篇文章中分享我的观点。

工作流程

尽管数据科学项目在目标、规模和使用的技术方面可能有很大差异,但在一定的抽象级别上,大多数项目都可以按照以下工作流来实现:

彩色方框表示关键过程,而图标分别表示输入和输出。根据项目的不同,关注点可能在某个过程上。其中一些可能相当复杂,而另一些则微不足道或缺失。例如,科学数据分析项目通常缺少“部署”和“监控”组件。现在让我们逐一考虑每一步。

源数据访问

无论你是在研究人类基因组还是在玩[iris.csv](https://en.wikipedia.org/wiki/Iris_flower_data_set),你通常都有一些“原始源数据”的概念来开始你的项目。它可能是一个包含*.csv文件的目录,一个 SQL 服务器或 HDFS 集群中的一个表。数据可以是固定的、不断变化的、自动生成的或流式的。它可以存储在本地或云中。无论如何,您的第一步是定义对源数据的访问。以下是这种情况的一些例子:

  • 您的源数据以一组*.csv文件的形式提供。您遵循cookiecutter-data-science方法,在项目的根文件夹中创建一个data/raw子目录,并将所有文件放在那里。您创建了docs/data.rst文件,在这里您描述了源数据的含义。(注:Cookiecutter-DataScience 模板实际上推荐references/作为数据字典的位置,而我个人更喜欢docs。不是说关系很大)。
  • 您的源数据以一组*.csv文件的形式提供。您设置了一个 SQL server,创建了一个名为raw的模式,并将所有 CSV 文件作为单独的表导入。您创建了docs/data.rst文件,其中描述了源数据的含义以及 SQL server 的位置和访问过程。
  • 您的源数据是基因组序列文件、患者记录、Excel 文件和 Word 文档的杂乱集合,这些数据可能会以不可预测的方式增长。此外,您知道您将需要查询几个外部网站来接收额外的信息。您在云中创建一个 SQL 数据库服务器,并从那里的 Excel 文件中导入大多数表。您在项目中创建了data/raw目录,将所有巨大的基因组序列文件放入 dna 子目录中。有些 Excel 文件太脏,无法导入到数据库表中,所以您将它们与 Word 文件一起存储在data/raw/unprocessed目录中。你创建一个亚马逊 S3 桶,并使用 DVC 将你的整个data/raw目录推到那里。您创建了一个用于查询外部网站的 Python 包。您创建了docs/data.rst文件,其中指定了 SQL server、S3 桶、外部网站的位置,描述了如何使用 DVC 从 S3 下载数据,以及如何使用 Python 包来查询网站。您还应尽可能描述所有 Excel 和 Word 文件的含义和内容,以及添加新数据时应采取的步骤。
  • 您的源数据由不断更新的网站日志组成。您设置了 ELK stack 并配置了网站以在那里传输所有新日志。您创建了docs/data.rst,在这里您描述了日志记录的内容以及访问和配置 ELK 堆栈所需的信息。
  • 您的源数据由 100,000 幅大小为 128x128 的彩色图像组成。你将所有的图像放入一个大小为 100,000 x 128 x 128 x 3 的张量中,并保存在一个 HDF5 文件images.h5中。您创建一个 Quilt 数据包,并将其推送到您的私有 Quilt 存储库中。您创建了docs/data.rst文件,在这里您描述了为了使用数据,必须首先通过quilt install mypkg/images将数据拉入工作区,然后通过from quilt.data.mypkg import images导入代码。
  • 您的源数据是模拟数据集。您将数据集生成实现为一个 Python 类,并在一个README.txt文件中记录它的使用。

通常,在设置源数据时,请记住以下经验法则:

  • 每当你能够以方便查询/索引的形式(SQL 数据库、ELK 堆栈、HDF5 文件或栅格数据库)有意义地存储你的源数据时,你应该去做。即使您的源数据是一个单独的csv并且您不愿意建立一个服务器,也可以帮自己一个忙,将它导入到一个 SQLite 文件中。如果您的数据很好而且干净,它可以简单到:

  • 如果你在团队中工作,确保数据易于共享。使用 NFS 分区、S3 桶、Git-LFS 库、被子包等等。

  • 确保您的源数据始终是只读的,并且您有一个备份副本。

  • 花点时间记录您所有数据的含义及其位置和访问程序。

  • 总的来说,要非常认真地对待这一步。您在这里犯的任何错误,不管是无效的源文件、被误解的特性名称还是配置错误的服务器,都可能会浪费您大量的时间和精力。

数据处理

数据处理步骤的目的是将源数据转换成“干净”的形式,适用于随后的建模阶段。在大多数情况下,这种“干净”的形式是一个特征表,因此“数据处理”的要点通常可以归结为特征工程的各种形式。这里的核心需求是确保特征工程逻辑是可维护的,目标数据集是可再现的,有时,整个管道是可追踪的,否则你将无法部署模型。如果在明确描述的计算图中组织处理,则可以满足所有这些要求。然而,实现该图有不同的可能性。以下是一些例子:

  • 您遵循cookiecutter-data-science路线,而使用 Makefiles 来描述计算图。每个步骤都在一个脚本中实现,该脚本将一些数据文件作为输入,并生成一个新的数据文件作为输出,该文件存储在项目的data/interimdata/processed子目录中。您可以通过make -j <njobs>享受简单的并行计算。
  • 你依靠 DVC 而不是 Makefiles 来描述和执行计算图。整个过程在很大程度上类似于上面的解决方案,但是您获得了一些额外的便利特性,比如结果文件的轻松共享。
  • 你用路易吉气流任何其他专用工作流管理系统代替 Makefiles 来描述和执行计算图。除了其他方面,这通常会让您在一个基于 web 的仪表板上观察您的计算进度,与计算集群的作业队列集成,或者提供一些其他特定于工具的好处。
  • 所有的源数据都作为一组表存储在 SQL 数据库中。您根据 SQL 视图实现所有的特征提取逻辑。此外,您使用 SQL 视图来描述对象的样本。然后,您可以使用这些特征视图和样本视图,通过自动生成的查询来创建最终的建模数据集,例如

这种特殊的方法非常通用,所以让我稍微扩展一下。首先,它让您可以轻松地跟踪所有当前定义的特性,而不必将它们存储在庞大的数据表中——特性定义只作为代码保存,直到您实际查询它们。其次,将模型部署到生产环境变得相当简单——假设动态数据库使用相同的模式,您只需要复制各自的视图。此外,您甚至可以使用一系列 CTE 语句将所有特征定义与最终模型预测计算一起编译到单个查询中:

这项技术已经在我设计的一个内部数据科学工作台工具中实现了(不幸的是,目前还没有公开提供),并提供了一个非常简化的工作流。

Example of an SQL-based feature engineering pipeline

无论您选择哪种方式,请记住以下几点:

  1. 始终以计算图的形式组织加工,并牢记再现性
  2. 这是您必须考虑您可能需要的计算基础架构的地方。你打算进行长时间的计算吗?您需要并行化还是租用集群?使用带有管理 UI 的作业队列来跟踪任务执行,您会从中受益吗?
  3. 如果您计划稍后将模型部署到生产中,请确保您的系统将支持这个开箱即用的用例。例如,如果你正在开发一个包含在 Java Android 应用程序中的模型,但你更喜欢用 Python 来做你的数据科学,一个避免未来许多麻烦的可能性是用一个特别设计的 DSL 而不是免费的 Python 来表达你所有的数据处理。然后,这个 DSL 可以被翻译成 Java 或者像 PMML 这样的中间格式。
  4. 考虑存储一些关于你设计的特性或临时计算的元数据*。*这并不复杂——例如,您可以将每个特征列保存到一个单独的文件中,或者使用 Python 函数注释,用输出列表来注释每个特征生成函数。如果你的项目很长,并且涉及到几个人设计特性,拥有这样一个注册表可能会非常有用。

建模

一旦你完成了清理数据、选择合适的样本和设计有用的特征,你就进入了建模的领域。在一些项目中,所有的建模都归结为一个简单的m.fit(X,y)命令或者一个按钮的点击。在其他情况下,可能需要数周的重复和实验。通常,您会在“特性工程”阶段就开始建模,当您决定一个模型的输出有助于伟大的特性本身时,所以这一步和前一步之间的实际界限是模糊的。这两个步骤都应该是可重复的,并且必须成为你的计算图的一部分。两者都围绕计算,有时涉及作业队列或集群。尽管如此,单独考虑建模步骤仍然是有意义的,因为它有一个特殊的需求:实验管理。像以前一样,让我用例子来解释我的意思。

  • 您正在训练用于在iris.csv数据集中对虹膜进行分类的模型。你需要尝试十个左右的标准sklearn模型,对每个模型应用一些不同的参数值,并测试你手工制作的特征的不同子集。你没有一个合适的计算图或计算基础设施——你只是在一个 Jupyter 笔记本上工作。但是,您要确保所有训练运行的结果都保存在单独的 pickle 文件中,您可以在以后分析这些文件以选择最佳模型。
  • 您正在设计一个基于神经网络的图像分类模型。你用 ModelDB (或者替代的实验管理工具,比如 TensorBoard神圣FGLabHyperdashFloydHubComet。MLDatMoMLFlow ,…)记录所有实验的学习曲线和结果,以便以后选择最好的一个。
  • 您使用 Makefiles(或 DVC,或工作流引擎)来实现整个管道。模型训练只是计算图中的一个步骤,它输出一个model-<id>.pkl文件,将模型最终 AUC 分数附加到一个 CSV 文件,并创建一个model-<id>.html报告,其中包含一系列有用的模型性能图表,供以后评估。
  • 这是实验管理/模型版本化在上面提到的定制工作台的 UI 中的样子:

要点是:决定如何计划用不同的超参数拟合多个模型,然后选择最佳结果。您不必依赖复杂的工具——如果使用一致,有时甚至手动更新的 Excel 表格也能很好地工作。然而,如果你计划进行冗长的神经网络训练,请考虑使用基于网络的仪表板。所有酷小孩都这么做。

模型部署

除非您的项目纯粹是探索性的,否则您可能需要将您的最终模型部署到生产中。根据具体情况,这可能会是一个相当痛苦的步骤,但是仔细的计划会减轻痛苦。以下是一些例子:

  • 您的建模管道用训练好的模型吐出一个 pickle 文件。所有的数据访问和特征工程代码都是作为一组 Python 函数实现的。您需要将您的模型部署到 Python 应用程序中。您创建一个 Python 包,其中包含必要的函数和模型 pickle 文件,作为里面的文件资源。你记得测试你的代码。部署过程是一个简单的包安装,然后运行集成测试。
  • 您的管道用训练好的模型吐出一个 pickle 文件。为了部署这个模型,您使用 Flask 创建一个 REST 服务,将其打包成 docker 容器,并通过您公司的 Kubernetes 云提供服务。或者,你将保存的模型上传到一个 S3 桶,然后通过亚马逊λ提供服务。您要确保您的部署已经过测试。
  • 你的训练管道产生一个张量流模型。您使用 Tensorflow Serving (或任何一个备选方案)作为 REST 服务。您不要忘记创建测试,并在每次更新模型时运行它们。
  • 你的管道产生 一个 PMML 文件。您的 Java 应用程序可以使用 JPMML 库来读取它。您确保您的 PMML 出口商在 PMML 文件中包含模型验证测试。
  • 您的管道以定制的 JSON 格式保存模型和预处理步骤的描述。为了将它部署到您的 C#应用程序中,您开发了一个知道如何加载和执行这些 JSON 编码的模型的专用组件。确保对 Python 中的模型导出代码、C#中的模型导入代码以及您部署的每个新模型的预测进行 100%的测试。
  • 您的管道使用 SKompiler 将模型编译成 SQL 查询。将这个查询硬编码到应用程序中。你记得关于测试的事。
  • 你通过付费服务训练你的模型,这也提供了一种将它们发布为 REST 的方式(例如 Azure ML StudioYHat ScienceOps )。你付了很多钱,但你仍然测试部署。

总结一下:

  1. 有许多方法可以部署一个模型。确保你了解你的情况并提前计划。您是否需要将模型部署到用不同于您用来训练它的语言编写的代码库中?如果您决定通过 REST 为其提供服务,那么该服务期望什么样的负载,它应该能够批量预测吗?如果你打算购买一项服务,估计一下它会花你多少钱。如果您决定使用 PMML,请确保它能够支持您预期的预处理逻辑和您计划使用的奇特的随机森林实现。如果您在培训期间使用了第三方数据源,请考虑您是否需要在生产中与它们集成,以及您将如何在从您的管道导出的模型中编码这些访问信息。
  2. 一旦您将您的模型部署到生产中,它就从数据科学的人工制品变成了实际的代码,因此应该符合应用程序代码的所有要求。这意味着测试。理想情况下,您的部署管道应该生成用于部署的模型包以及测试该模型所需的一切(例如,样本数据)。模型从它的诞生地转移到生产环境后,停止正确工作的情况并不少见。可能是导出代码的 bug,可能是pickle版本不匹配,可能是 REST 调用中输入转换错误。除非您显式地测试已部署模型的预测的正确性,否则您将冒着在不知道的情况下运行无效模型的风险。一切看起来都很好,因为它会继续预测一些值,只是一些错误的值。

模型监控

当您将模型部署到生产中时,您的数据科学项目并没有结束。热度还在。也许在你的训练集中输入的分布与真实生活不同。也许这种分布漂移缓慢,模型需要重新训练或重新校准。也许这个系统没有像你预期的那样工作。也许你对 A-B 测试感兴趣。在任何情况下,您都应该设置基础设施来持续收集关于模型性能的数据并对其进行监控。这通常意味着设置可视化仪表板,因此主要示例如下:

  • 对于你的模型的每个请求,你将输入和模型的输出保存到 logstash 或者一个数据库表(确保你以某种方式保持 GDPR 兼容)。您设置元数据库(或表格MyDBRGrafana)并创建可视化您的模型的性能和校准指标的报告。

勘探和报告

在数据科学项目的整个生命周期中,为了探索数据、尝试各种假设、制作图表或报告,您必须不断地避开主要的建模管道。这些任务在两个重要方面不同于主要管道。

首先,它们中的大多数没有具有可再现性。也就是说,您不一定需要像处理数据预处理和模型拟合逻辑那样将它们包含在计算图中。当然,您应该总是尝试坚持可再现性——当您拥有从原始数据重新生成给定报告的所有代码时,这是非常好的,但是在许多情况下,这种争论是不必要的。有时在 Jupyter 中手工制作一些图表,然后粘贴到 Powerpoint 演示文稿中就可以了,不需要过度设计。

第二,实际上这些“探索”任务有问题的特殊性在于,它们往往有些杂乱无章和不可预测。有一天,您可能需要分析性能监控日志中一个奇怪的异常值。第二天你想测试一个新的算法,等等。如果您没有决定一个合适的文件夹结构,很快您的项目目录将充满了奇怪名称的笔记本,团队中没有人会明白什么是什么。这些年来,对于这个问题,我差不多只找到了一个可行的解决方案:按日期给子项目排序。即:

  • 您在项目文件夹中创建一个projects目录。您同意每个“探索性”项目必须创建一个名为projects/YYYY-MM-DD - Subproject title的文件夹,其中YYYY-MM-DD是子项目开始的日期。经过一年的工作,你的projects文件夹看起来如下:
./2017-01-19 - Training prototype/
                (README, unsorted files)
./2017-01-25 - Planning slides/
                (README, slides, images, notebook)
./2017-02-03 - LTV estimates/
                 README
                 tasks/
                   (another set of 
                    date-ordered subfolders)
./2017-02-10 - Cleanup script/
                 README
                 script.py
./... 50 folders more ...

请注意,您可以根据需要自由组织每个子项目的内部结构。特别是,它本身甚至可能是一个“数据科学项目”,有自己的raw/processed数据子文件夹,自己的基于 Makefile 的计算图,以及自己的子项目(在这种情况下,我倾向于将其命名为tasks)。在任何情况下,总是记录每个子项目(至少有一个README文件)。有时有一个根文件projects/README.txt会有所帮助,它简要地列出了每个子项目目录的含义。

最终您可能会发现项目列表变得太长,并决定重新组织projects目录。你压缩了其中的一些文件,并移动到一个archive文件夹中。您重组了一些相关的项目,并将它们移动到某个父项目的tasks子目录中。

探索任务有两种风格。有些任务是真正的一次性分析,可以使用 Jupyter 笔记本解决,永远不会再次执行。其他的目标是产生可重用的代码(不要与可重复的输出混淆)。我发现为如何保存可重用代码建立一些约定是很重要的。例如,惯例可能是在子项目的根中有一个名为script.py的文件,它在执行时输出一个基于argparse的帮助消息。或者您可能决定要求提供一个run函数,配置为一个芹菜任务,这样它可以很容易地提交到作业队列。也可能是别的——什么都可以,只要一致。

服务清单

对于数据科学工作流,还有另外一个正交的视角,我觉得很有用。也就是说,我们可以讨论数据科学项目通常依赖的关键服务而不是按照流程的管道来谈论它。通过这种方式,您可以具体说明以下 9 项关键服务的具体提供方式,从而描述您的特定(或所需)设置:

  1. 文件存储。你的项目必须有一个家。通常这个家必须由团队共享。它是网络驱动器上的文件夹吗?它是 Git 存储库的工作文件夹吗?你如何组织它的内容?
  2. 数据服务。你如何存储和访问你的数据?这里的“数据”包括您的源数据、中间结果、对第三方数据集的访问、元数据、模型和报告——实质上是由计算机读取或写入的一切。是的,保存一堆 HDF5 文件也是“数据服务”的一个例子。
  3. 版本化。代码、数据、模型、报告和文档——一切都应该在某种形式的版本控制下保存。Git 换代码?被子换数据?模特的 DVC?报表的 Dropbox?文档维基?一旦我们做到了,不要忘记为每件事建立常规备份。
  4. 元数据和文档。你如何记录你的项目或子项目?您是否维护关于您的要素、脚本、数据集或模型的任何机器可读元数据?
  5. 交互计算。交互式计算是数据科学中大多数艰苦工作的完成方式。你用 JupyterLab,RStudio,ROOT,Octave 还是 Matlab?您是否为交互式并行计算设置了集群(例如 ipyparallel 或 dask)?
  6. 作业队列&调度器。你如何运行你的代码?您使用作业处理队列吗?您有能力(或需要)安排定期维护任务吗?
  7. 计算图。你如何描述计算图并建立再现性?Makefiles?DVC?气流?
  8. 实验经理。你如何收集、查看和分析模型训练进度和结果?ModelDB?超破折号?FloydHub?
  9. 监控仪表板。你如何收集和跟踪模型在生产中的表现?元数据库?画面?PowerBI?格拉夫纳?

工具

这里有一个小的电子表格,列出了这篇文章中提到的工具(以及一些我添加或稍后将添加的额外工具),根据它们旨在支持数据科学工作流的哪个阶段(按照这篇文章中定义的术语)对它们进行分类。免责声明——我确实尝试了大部分,但不是全部。特别是,我对列表中的非免费解决方案的能力的理解,到目前为止只是基于他们的在线演示或网站上的描述。

原载于 2018 年 11 月 29 日four years . eu

没有数据的数据科学家!

原文:https://towardsdatascience.com/the-data-scientist-with-no-data-2750896fb559?source=collection_archive---------9-----------------------

source: unsplash.com

摘要

  • 统计学家/护士的历史。
  • 一个当今数据科学家工作生活的故事。
  • 对未来数据科学家的猜测。

首先,一个历史故事:

1854 年 11 月,佛罗伦萨·南丁格尔在克里米亚战争期间来到斯库塔里当护士。她从小就有数学天赋。在战地医院,她面临着苦难、痛苦和混乱。

“受伤的士兵往往带着伤寒、霍乱和痢疾等疾病抵达。死于这些疾病的人比死于受伤的人多。”( 1

白天她是一名护士,晚上她有另一项任务——她被称为“拿灯的女士”。她正在收集数据,分析士兵死亡的原因。当她回到伦敦时,她将数据可视化,并开始了提高意识的活动。她根据数据表明,士兵受伤并不是死亡的主要原因。她于 1859 年在查塔姆建立了陆军医学院,并继续为她的事业做出贡献。她个人的痛苦和苦难是可以想象的,但她通过利用数据为人类服务。

source: researchgate.net

第二,今天的一个故事:

今天的数据科学家的故事有点像夜莺的工作——特别是在迫切需要了解士兵情况的同时缺乏数据。今天,并不是所有的数据科学家都拯救生命,但实际上很多人都这样做了!

今天的许多数据科学家很可能会欢迎更多的数据、数据流、数据源、数据基础设施和数据工程支持。然而,他们被要求提供更好的见解、模型、推论、可视化,并提供决策咨询。

数据科学家常常感到沮丧,不是因为模型在生产中不起作用,而是因为数据源不可用——尤其是在现在的 GDPR 时代,这种情况会变得更糟。

这种情况有一个共同点,即缺乏对数据科学的理解。决策者不理解数据科学不仅仅是软件编程(还没有!)和模型不仅仅是生产中的源代码管道。

许多公司希望变得数据驱动、现代化和敏捷。因此,他们雇佣了一名数据科学家,或许还有一名数据工程师。这是在收集数据、准备数据基础设施、启用数据工程以及了解未来的数据驱动型业务问题和策略之前完成的。压力的螺旋上升最终落在了数据科学家身上,他的手被束缚住了,而期望值却在继续增长。一个简单的谷歌搜索“为什么数据科学家”会建议你用“离开”这个词来完成句子。有希望看到有一天这个建议变成积极的东西。

source: timoelliott.com

对于有抱负的数据驱动型公司,成功实现数据驱动型转型的建议步骤如下:

  1. 成熟,还是拥抱,DevOps 转型( DevOps:做还是不做?先关注文化! ) —这是文化、管道、数据管理使然!
  2. 推出符合 GDPR 标准的数据湖—用于存储和实验!
  3. 集成数据工程能力—雇佣数据工程师或数据运营!
  4. 收集数据时要考虑合规性和 GDPR —这是显而易见的,但也是全新的!
  5. 雇一个数据科学家!

第三,对未来的猜测:

随着计算能力和服务通过云提供商成为商品,有理由认为数据科学也将商品化。这个百万美元的问题是:在什么样的法律平衡数据约束下,数据科学将成为 DSaaS(数据科学即服务)?

这种平衡需要考虑以下因素:

  • 数据收集 GDPR 影响(目前在美国更容易处理,在欧盟更难)。
  • 数据匿名化最佳点(最终,数据科学并不致力于完全匿名化的数据,尽管它适用于一些用例,例如基于家庭人口统计的洞察,同时匿名化人们的 UID、姓名和姓氏)。
  • 机器学习模型(甚至统计模型)的合法更新,以跟进用户 GDPR 的同意。这是指 GDPR 后来同意退出(在最初同意之后)。并非每个退出案例都会影响您的模型,但是,有一个点,过多的退出会影响模型,需要以反映法律要求的频率进行更新。
  • 数据所有权和信任(您在云和应用数据科学上的原始数据会发生什么?服务提供商会为了自己的利益从你的数据中推断和学习吗?您的数据会成为提供商方面更广泛的数据科学活动的一部分吗?等等。)

虽然目前许多组织内部都有数据科学家,但将来可能就不是这样了。有可能,名字会改成机器学习工程师(或者类似!)知道如何使用 DSaaS,并对算法有足够的理解,能够知道输入什么和如何解释输出。核心数据科学家将在 DSaaS 公司工作,那里有大量数据科学进展。

好消息是,数据科学家将处于大量数据可用的情况,云基础设施将会成熟。他们的主要工作将是扩展算法,挑战技术上可能的边界。

source: constantcontact.com

总会有疯狂的数据科学家在地下服务器机房工作,也许使用怪异的数据集。

数据科学家的工具

原文:https://towardsdatascience.com/the-data-scientists-tools-74f120599d4a?source=collection_archive---------5-----------------------

构建数据处理系统、数据库、可视化工具和数据辩论工具

在与数据处理系统的**构造相关的工程中,**有三种基本工具可以着手分析海量信息: **Python、R 和 Hadoop。**虽然这些编程语言相对来说比较新,也不太普及,但对于已经精通 Java 或 c 等编程语言的专业人士来说,它们更容易掌握。

R: 被认为**是统计编程语言中的标准,**有人称其为数据科学的“金童”。r 是一个致力于统计计算和图形的自由软件环境,兼容 UNIX、Windows 和 MacOS 平台。这是数据科学中的一项必备技能,鉴于商业应用数量的增加及其有利的多功能性,精通这一技能实际上保证了一份工作。

  • R 是免费的:任何人都可以安装、使用、升级、克隆、修改、再分发,甚至转售 R,不仅在技术项目上省钱,而且还提供不断的更新,这对于任何统计编程语言总是有用的。

  • R 是一种**高性能语言,可帮助用户处理大型数据包,**使其成为管理大数据的绝佳工具。它也是高强度和资源密集型模拟的理想选择。

鉴于它的所有优点,它越来越受欢迎。它拥有大约 200 万用户,这些用户组成了一个活跃的支持性社区。有超过 2,000 个免费图书馆提供金融、聚类分析等方面的统计资源。

Python: 又一种灵活直白的开源编程语言。由于 Python 对初学者“友好”的特性,例如代码可读性、简化的语法和易于实现,使用 Python 的程序员最终会编写更少的代码。

-与 R 一样,Python 中的编程适用于大量行业和应用程序。Python 支持谷歌的搜索引擎,以及 YouTube、Dropbox 或 Reddit。NASA、IBM 和 Mozilla 等机构也非常依赖 Python。

——Python 也是免费的,这对创业公司和小企业都有好处。因为这种语言倾向于简化,所以可以由小团队来处理。对这种面向目标的语言的基础有了很好的了解,您就可以通过学习新语言的语法来迁移到另一种类似的语言。

-作为一种高性能语言,Python 是构建快速访问应用程序的常用选择。此外,其庞大的资源库提供了必要的帮助,确保只需点击几下鼠标即可提高工作效率。

Hadoop: 对于任何想冒险进入大数据分析领域的人来说,这是另一个必备工具。作为一个开源框架,Hadoop 有助于存储和处理大量数据。它被认为是任何灵活和前瞻性数据平台的基石。

  • Hadoop 是数据行业中最具增长潜力的技术之一。戴尔、亚马逊网络服务、IBM、雅虎、微软、谷歌、易贝和甲骨文等公司都坚定地致力于 Hadoop 的实施。

-它的主要好处之一是**帮助公司满足其营销需求:**识别网站上的客户行为模式,提供推荐和定制目标等。

  • Hadoop **在各种各样的岗位上开启了巨大的职业机会。**鉴于其在许多行业中的相关性,Hadoop 专家可以作为架构师、开发人员、管理员或数据科学家找到工作。

其他工具

数据科学家工作中的另一个频繁交互是与**数据库的交互。**在这里,使用 **NoSQL 数据库、Apache Storm 和 Spark、**等处理工具以及 Storm 等虚拟机是很常见的。

可视化工具对于创造价值不如**说服重要。在这个意义上,它们与结果沟通阶段和重新发现数据价值的实际工作相关联:**浏览数字和呈现数字是不一样的。QlikView、Tableau 和 Spotfire 等程序用于此目的。

最后,数据科学家的工作中有一个相当乏味的部分,这是一个被称为**数据争论的过程。**原始数据往往以混乱或不完善的方式呈现,因此数据首先需要人工收集和清理,然后才能转换为结构化格式进行探索和分析。使用像 OpenRefineFusion Tables 这样的工具,这项任务会占用数据科学家超过 50%的工作时间。

开源还是专有软件?

正如在任何需要特定软件的领域一样,数据科学专业人员可以在私营公司销售的程序和开源软件之间进行选择。

在开始一个数据科学项目之前,准确了解相应调整资源和预算所需的技术需求非常重要。这就是为什么越来越多的公司选择开源替代方案的灵活性的原因之一。开源环境带来的各种选择也有助于扩大新技术和知识的使用。直到不久前,收费的商业工具还主宰着市场,但随着免费替代品的出现,它们的地位越来越低。

一些专家警告说,制造商试图将他们的商业解决方案强加给企业,最终会大量投资于总是有开源替代方案的专有应用程序。这种束缚性可以被开源项目所取代,开源项目是可扩展的,可以提供与专有软件相当的性能。


本文是研究“数据的一部分科学家:他们是谁?他们是做什么的?它们是如何工作的?”很快从反抗者的思维中传出。

数据故事讲述者

原文:https://towardsdatascience.com/the-data-story-teller-da630dcdd02d?source=collection_archive---------5-----------------------

数据科学家现在正式成为最酷的工作。我记得几季前在的《纸牌屋》中,当天才数据科学家赤裸着上身站在隔音房间里,大声播放音乐,尖叫着提出深刻见解,帮助安德伍德夫妇利用数据赢得选举时,我笑了。

现实更加平淡无奇。调查显示,大多数数据科学家花大部分时间清理和准备数据。他们不是数据科学家。他们是数据管理员。当然,很多科学都是这样的(与任何在实验室工作过的人交谈。)

无论如何,我已经和做大数据的人在一起十多年了。我不写代码,也不会很多数学。那我是什么?

德勤有一篇关于光线定量分析师的精彩文章。这个人对数据科学有足够的了解,并且是一个熟练的沟通者,能够在数据科学时代和高管决策者之间进行转换。

但是我在这个过程中扮演了比交流结果更广泛的角色(并不是说这不重要!)我帮助构思项目。人们试图解决的问题是什么?这一点有时并不明显。人们不知道他们不知道的事情。在讨论表面问题时,可能会出现更大的问题。

我对数据的格式和性质想了很多。在许多情况下,真正有趣的信息是非结构化的或定性的。它的真正含义是什么,我们如何最好地融入它?在一些项目中,我在收集数据方面发挥了关键作用,但在恐怖主义研究中,许多信息都是叙述性的——我们如何用数字有意义地描述这些信息。

当然,当我们确实有结果时,我们必须描述它们,并根据已知或相信的东西来平衡它们。

我们通过故事了解世界。在处理抽象问题时,我经常发现自己在寻找例子。我所描述的这个过程的核心是故事。有一个客户的故事。他们对自己的工作流程和挑战有什么看法?

在这么多有趣的问题上,挑战在于将一个有着迷人细节的故事转化为一个数字或一组数字。在 UMIACS 的十年里,我参与了模拟恐怖组织的项目。有些事情,比如恐怖袭击,相对容易转化成数字数据(死亡人数,目标代码等)。)其他事情,比如恐怖组织的公开声明或其内部动态的信息,则更难以量化。值得注意的是,计算机科学家(和数据科学家)往往对类型感兴趣。分析师和中小企业往往对实例感兴趣。实例是一个故事,如何在不丢失太多关键信息的情况下将实例分类是一个困难的挑战。关于如何做到这一点的决策将决定结果——这也是故事的一部分。

当有结果时,必须根据已知的情况来考虑它们。关于这个问题,我们给自己讲了哪些故事?该分析如何为这些故事提供信息?它是颠覆它们,修改它们,还是确认它们。我们对新发现有多大信心?这些发现对客户有什么更广泛的组织影响?

制定政策要结合事实和价值观。价值观是通过故事来表达的。仅仅依靠冷酷的事实不会产生可接受的政策,价值观必须是等式的一部分。

回答所有这些问题都需要听故事和讲故事。

我想我是一个讲数据的人。

原载于 2017 年 6 月 11 日【terrorwonk.blogspot.com

深度学习(。人工智能)词典

原文:https://towardsdatascience.com/the-deep-learning-ai-dictionary-ade421df39e4?source=collection_archive---------1-----------------------

有没有努力回忆起亚当、雷鲁或 YOLO 的意思?别再看了,看看你掌握深度学习所需的每一个术语。

在 Coursera 深度学习的世界中生存意味着理解并在技术术语的丛林中导航。你不是💯%确定 AdaGrad、Dropout 或 Xavier 初始化意味着什么?当你偶然发现一个你安全地停在脑海深处一个积满灰尘的角落里的术语时,用这个指南作为参考来刷新你的记忆。

这本字典旨在简要解释来自吴恩达 deeplearning.ai 的 Coursera 深度学习专业化最重要的术语。它包含对术语的简短解释,并附有后续帖子、图片和原始论文的链接。该帖子旨在对深度学习初学者和从业者同样有用。

让我们打开深度学习的百科全书。📚

激活功能 —用于创建输入的非线性变换。输入乘以权重并添加到偏差项。常见的激活函数包括 ReLU、tanh 或 sigmoid。

Source: https://bit.ly/2GBeocg

Adam Optimization—可以用来代替随机梯度下降优化方法,迭代调整网络权重。根据发明者的说法,Adam 的计算效率很高,可以很好地处理大型数据集,并且几乎不需要超参数调整。Adam 使用自适应学习速率 α ,而不是预定义的固定学习速率。Adam 是目前深度学习模型中默认的优化算法。

自适应梯度算法 AdaGrad 是一种梯度下降优化算法,其特点是每个参数的学习率都是可调的。与更新频率较低的参数相比,AdaGrad 以较小的步长调整频繁更新的参数。因此,它在非常稀疏的数据集上表现良好,例如在自然语言处理任务中适应单词嵌入。在这里看论文

平均池 —对卷积运算的结果进行平均。它通常用于缩小输入的大小。平均池主要用于旧的卷积神经网络架构,而最近的架构支持最大池。

Alex net——八层的流行 CNN 架构。这是一个比 LeNet 更广泛的网络架构,需要更长的时间来训练。AlexNet 赢得了 2012 年 ImageNet 图像分类挑战赛。在这里看论文

Source: https://goo.gl/BVXbhL

反向传播—用于调整网络权重以最小化神经网络损失函数的通用框架。该算法通过网络反向传播,并通过每个激活函数的梯度下降的形式来调整权重。

Backpropagation travels back through the network and adjusts the weights.

批量梯度下降 —规则梯度下降优化算法。对整个训练集执行参数更新。该算法需要在完成一个参数更新步骤之前计算整个训练集的梯度。因此,对于大型训练集,批量梯度可能非常慢。

批量标准化 —将神经网络层中的值标准化为 0 到 1 之间的值。这有助于更快地训练神经网络。

偏差—当模型在训练集上没有达到高精度时发生。这也被称为欠拟合。当模型具有高偏差时,它通常不会在测试集上产生高精度。

Source: https://goo.gl/htKsQS

分类 —当目标变量属于一个截然不同的类,而不是一个连续变量时。图像分类、欺诈检测或自然语言处理是深度学习分类任务的例子。

卷积 —将输入与滤波器相乘的数学运算。卷积是卷积神经网络的基础,卷积神经网络擅长识别图像中的边缘和对象。

成本函数——定义计算出的输出和应该输出之间的差异。成本函数是深度神经网络中学习的关键成分之一,因为它们形成了参数更新的基础。网络将其前向传播的结果与地面实况进行比较,并相应地调整网络权重以最小化成本函数。均方根误差是成本函数的一个简单例子。

深度神经网络 —有很多隐含层的神经网络,通常超过五层。没有定义深度神经网络必须至少有多少层。深度神经网络是一种强大的机器学习算法,用于确定信贷风险、驾驶自动驾驶汽车和探测宇宙中的新行星。

Derivative of a function. Source: https://goo.gl/HqKdeg

导数 —导数是函数在特定点的斜率。计算导数以让梯度下降算法向局部最小值调整权重参数。

Dropout —一种正则化技术,随机消除深度神经网络中的节点及其连接。Dropout 减少了过度拟合,并能够更快地训练深度神经网络。每个参数更新周期,不同的节点在训练期间被丢弃。这迫使相邻节点避免过度依赖彼此,并自己找出正确的表示。它还提高了某些分类任务的性能。在这里看论文

Source: https://goo.gl/obY4L5

端到端学习 —一个算法能够自己解决整个任务。不需要额外的人工干预,如模型切换或新数据标记。例如,端到端驾驶意味着神经网络仅通过评估图像就能计算出如何调整转向命令。

历元—包含对每个示例的训练集的一次向前和向后传递。单个历元触及迭代中的每个训练示例。

前向传播 —深度神经网络中的前向传递。输入通过隐藏层的激活功能,直到最后产生一个结果。前向传播也用于在正确训练权重后预测输入示例的结果。

全连接层 —全连接层用其权重变换输入,并将结果传递给下一层。这一层可以访问前一层的所有输入或激活。

门控递归单元—门控递归单元(GRU)对给定的输入进行多重变换。它主要用于自然语言处理任务。gru 防止了 rnn 中的消失梯度问题,类似于 LSTMs。与 LSTMs 相比,gru 不使用存储单元,因此在实现类似性能的同时计算效率更高。在这里看论文

No forget gate, in contrast to LSTM. Source: https://goo.gl/dUPtdV

人类水平的表现——一群人类专家可能的最佳表现。算法可以超越人类水平的表现。用于比较和改进神经网络的有价值的度量。

超参数 —决定你的神经网络的性能。超参数的例子是,例如,学习速率、梯度下降的迭代、隐藏层数或激活函数。不要与 DNN 自动学习的参数或重量混淆。

ImageNet —数以千计的图像及其注释类的集合。非常有用的资源图像分类任务。

迭代 —一个神经网络向前和向后的总次数。每批计为一次通过。如果您的训练集有 5 个批次,训练 2 个时期,那么它将运行 10 次迭代。

梯度下降 —帮助神经网络决定如何调整参数以最小化成本函数。反复调整参数,直到找到全局最小值。这篇文章包含了对不同梯度下降优化方法的全面概述。

Source: https://bit.ly/2JnOeLR

—一组转换输入的激活函数。神经网络使用多个隐藏层来创建输出。通常可以区分输入层、隐藏层和输出层。

学习率衰减 —训练时调整学习率的一个概念。允许灵活的学习率调整。在深度学习中,网络训练的时间越长,学习速度通常会下降。

Max pooling.

最大汇集 —仅选择特定输入区域的最大值。它通常用于卷积神经网络,以减少输入的大小。

——RNN 的一种特殊形式,能够学习输入的上下文。当相应的输入彼此远离时,常规的 rnn 遭受消失梯度,而 LSTMs 可以学习这些长期的依赖性。在这里看论文

Input and Output of an LSTM unit. Source: https://bit.ly/2GlKyMF

小批量梯度下降 —一种优化算法,在训练数据的较小子集上运行梯度下降。该方法允许并行化,因为不同的工人分别迭代不同的小批量。对于每个小批量,计算成本并更新小批量的重量。这是批量和随机梯度下降的有效结合。

Source: https://bit.ly/2Iz7uob

动量 —平滑随机梯度下降法振荡的梯度下降优化算法。动量计算先前采取的步骤的方向的平均方向,并在该方向上调整参数更新。想象一个球滚下山坡,并利用这个动量调整向左或向右滚动。球滚下山类似于梯度下降寻找局部最小值。

神经网络 —转换输入的机器学习模型。一个普通的神经网络有一个输入、隐藏和输出层。神经网络已经成为在数据中寻找复杂模式的首选工具。

非最大值抑制 —算法用作 YOLO 的一部分。它通过消除具有较低识别对象置信度的重叠边界框来帮助检测对象的正确边界框。在这里看论文

Source:https://bit.ly/2H303sF

递归神经网络 — RNNs 允许神经网络理解语音、文本或音乐中的上下文。RNN 允许信息在网络中循环,从而在前后层之间保持输入的重要特征。

Source: https://goo.gl/nr7Hf8

ReLU —整流线性单元,是一种简单的线性变换单元,如果输入小于零,则输出为零,否则输出等于输入。ReLU 是选择的激活函数,因为它允许神经网络更快地训练,并防止信息丢失。

回归—统计学习的一种形式,其中输出变量是一个连续而不是一个分类值。分类为输入变量指定一个类别,而回归则指定一个具有无限个可能值的值,通常是一个数字。例如房价或客户年龄的预测。**

均方根传播 — RMSProp 是随机梯度下降优化方法的扩展。该算法以每个参数的学习率为特征,但不是整个训练集的学习率。RMSProp 根据先前迭代中参数变化的速度来调整学习速率。看这里的报纸。

参数——在应用激活功能之前转换输入的 DNN 的权重。每一层都有自己的一组参数。通过反向传播调整参数以最小化损失函数。

Weights of a neural network

soft max-逻辑回归函数的扩展,用于计算输入属于每个现有类的概率。Softmax 通常用于 DNN 的最后一层。概率最高的类别被选为预测类别。它非常适合具有两个以上输出类的分类任务。

Source: https://bit.ly/2HdWZHL

随机梯度下降 —一种优化算法,对每个单个训练样本进行参数更新。该算法的收敛速度通常比批量梯度下降快得多,批量梯度下降在为整个*训练集计算梯度后执行参数更新。***

监督学习——深度学习的一种形式,对每个输入的例子都有一个输出标签。标注用于将 DNN 的输出与地面真实值进行比较,并最小化成本函数。深度学习任务的其他形式是半监督训练和非监督训练。

迁移学习 —一种将一个神经网络的参数用于不同任务而无需重新训练整个网络的技术。使用先前训练的网络的权重,并移除输出层。用你自己的 softmax 或 logistic 层替换最后一层,再次训练网络。之所以有效,是因为较低层经常检测类似的东西,如边缘,这对其他图像分类任务很有用。

无监督学习 —一种输出类未知的机器学习形式。GANs 或变分自动编码器用于无监督的深度学习任务。

验证集 —验证集用于寻找深度神经网络的最优超参数。通常,DNN 是用超参数的不同组合来训练的,并在验证集上进行测试。然后,应用性能最佳的超参数集对测试集进行最终预测。注意平衡验证集。如果有大量数据可用,那么将 99%用于训练,0.5%用于验证,0.5%用于测试集。

消失梯度 —训练非常深度的神经网络时出现问题。在反向传播中,权重基于其梯度或导数进行调整。在深度神经网络中,早期层的梯度可能变得非常小,以至于根本不更新权重。ReLU 激活函数适合解决这个问题,因为它不像其他函数那样压缩输入。在这里看报纸。

方差—当 DNN 过度拟合训练数据时发生。DNN 无法区分噪声和模式,并对训练数据中的每个变化进行建模。具有高方差的模型通常无法准确地推广到新数据。

向量 —作为输入传递到 DNN 激活层的值的组合。

VGG-16—CNN 的流行网络架构。它简化了 AlexNet 的架构,共有 16 层。有许多预训练的 VGG 模型可以通过迁移学习应用于新的用例。在这里看论文

Xavier 初始化 — Xavier 初始化在第一个隐藏层分配起始权重,使输入信号深入神经网络。它根据神经元和输出的数量来调整权重。这样可以防止信号在网络中变得太小或太大。

YOLO——你只看一次,是一种识别图像中物体的算法。卷积用于确定对象在图像的一部分中的概率。然后使用非最大抑制和锚定框来正确定位对象。在这里看论文

我希望这本字典帮助你更清楚地了解深度学习世界中使用的术语。在参加 Coursera 深度学习专业化认证时,请将本指南放在手边,以便快速查找术语和概念。

如果你认为这篇文章是有帮助的,不要忘记展示你的💛穿过👏 👏 👏在 MediumLinkedIn 上关注我,了解更多关于深度学习、在线课程、自动驾驶汽车和生活的信息。还有,查一下 这些 关于深度学习专业化的帖子出来。请评论分享你的看法。干杯!🙇

Gartner 炒作周期巅峰的深度学习炒作

原文:https://towardsdatascience.com/the-deep-learning-hype-at-the-peak-of-gartners-hype-cycle-35fbccb7aa16?source=collection_archive---------9-----------------------

目前围绕深度学习有一个巨大的炒作。你也可以在 Gartner 的炒作周期中看到这一点。

什么是炒作周期,它是如何运作的?继续阅读以了解更多信息。

一段时间以来,Gartner 一直在为许多领域创造炒作周期,如机器学习、大数据等。我个人用它们来发现一项技术已经走了多远。

例如,像深度学习这样的技术已经走了多远。从想法、开发、第一次实现,进入生产力状态。

在这个国家,人们实际上从中受益,公司从中赚钱。Gartner 的炒作周期是一个非常好的工具。

炒作周期是怎样的

炒作周期是一条曲线,首先上升到一个顶点,然后下降到一个低点,然后回到一个平稳期。

创新ˌ革新

第一阶段当新技术出现时,创意被创造出来。这是创新阶段。

炒作周期是如何工作的,让我们看看深度学习(DL)的例子。它从左边开始,一路向弯道的山上驶去。

人们已经意识到 DL 是一个有趣的话题,人们正在为之努力。他们正在构思和尝试想法。

这是创新阶段。

越来越多的人这样做,DL 正在上升。

过高期望的顶峰

直到到达第二阶段:顶部。Gartner 将此称为膨胀预期的顶峰。

才是炒作真正大的时候。每个人都在谈论深度学习,每个人都在努力。人们认为数字图书馆是一项无处不在的技术,它影响着我们生活中的一切。

基本上,这是一个很多人认为你可以在任何地方实现某个东西并从中赚很多钱的时代。

这也是 2017 年当前炒作周期中 deep larning 的位置。

幻灭的低谷

接下来发生的是,随着越来越多的公司致力于此,他们意识到这比他们想象的要难。

DL 更难实现,更难开发,更难作为产品销售。这是很多人感到沮丧的时候,也是很多人放弃和公司倒闭的时候。

在这一点上,DL 的情况是它在走下坡路。它正在从膨胀的期望的顶峰走向低谷。

在这一点上,人们醒悟了,从炒作中醒来。

生产力的稳定期

从那一点开始,DL 将在下一座山上再往上走一点,到达一个平台。Gartner 称之为生产率的稳定期。

当一项技术经历了幻灭的低谷,达到生产力的平台期,那么它就被公众接受了。在 DL 的情况下,这将是我们每天与深度学习算法进行交互的时候。往往连自己都不知道。

这是生产力的高原,人们已经意识到你实际上可以用它做什么。

技术或工具是主流应用。

达到稳定状态的时间预测

同样非常有趣的是,Gartner 试图预见一个时间框架。炒作周期中的一个项目需要多长时间才能达到生产率的平台期。

因此,在人类扩增的情况下,我最喜欢的话题之一,Gartner 预测超过 10 年。这已经很多年没变了,:D

当你看其他技术时,你会发现这需要 5 年,2 到 5 年的时间。所以,你实际上可以预测一下,在整个炒作周期中,这需要多长时间。

我完全推荐的是不要只看今年的炒作周期。再看看过去几年的炒作周期。这样你就能感受到事情发生得有多快。

那些关于它需要多长时间才能达到右侧生产率稳定水平的预测发生了变化。年复一年,有时甚至技术完全从循环中消失。

前一年说是五年,第二年就完全消失了。这是因为它已经经历了炒作周期,已经达到了生产率的稳定期。

因为这不是精确的科学,这是 Gartner 的估计。

一个你必须使用的令人敬畏的工具

炒作周期是一个非常有趣的工具,它可以帮助你感受到事物出现的速度有多快。它试图预测某样东西成为主流需要多长时间。

所以,如果你想跟踪趋势,我强烈推荐 Gartner 炒作周期。

不仅新兴技术有许多炒作周期。谷歌一下,你会发现很多。

他们也会做一个分析,但是这个分析要花很多钱。但是炒作周期通常你可以谷歌一下就能找到。

你目前密切关注的趋势是什么?

你用炒作周期吗?还是在用别的?

请留下评论,这将是超级真棒☺

.

上打招呼:insta gram|LinkedIn|脸书|Twitter|YouTube|Snapchat

不要错过我在 SoundCloud 上的每日数据科学和大数据播客

订阅我的简讯:这里

统计图形的设计

原文:https://towardsdatascience.com/the-design-of-statistical-graphics-5265485e9bb5?source=collection_archive---------10-----------------------

一瞥信息丰富的图形世界

今天我们将学习人类大脑——枕叶是哺乳动物大脑中大脑皮层的四个主要叶之一。

没有吗?为什么我们在一篇应该是关于“统计图表”的文章中学习生物学?

嗯,视觉处理中心或大脑皮层处理和帮助我们解释视觉信息的部分,是我们在讨论复杂想法、不可思议的波动、上升和下降趋势、波动结构等描述时间接谈论的内容;如此清晰,精确和有序的连贯性。
这些正是我们所说的图形结构或统计图应该有的形容词。

数据的图形化展示给我们一个清晰的画面,在一个小空间里呈现如此多的想法和数字,帮助我们避免数据试图呈现的想法的扭曲,并最终服务于描述、探索、制表和装饰的合理清晰的目的。

统计图表,就像计算一样,只有输入进去的东西才是好的。一个定义糟糕的图表,一个不合适的模型,甚至一个营养不良的数据集,都不能被一个图表所拯救,不管它有多花哨或多吸引人。

"我们需要理解、学习和采纳卓越图形化的实践."

我们需要理解、学习和采用图形化的优秀实践。换句话说,在正确的时间在正确的地方使用正确的图表,导致各种定量思想的完美沟通;这才是动机所在。

因此,要传达这一理念,理解实现图形卓越的艺术,进而欣赏这些图形能够表现数据的美;我们将学习并尝试理解以下基本的图形设计,想象并看看图形设计有多好,多迷人:

1。资料图
2。时间序列
3。时空叙事设计
4。关系图形

资料图

数据地图基本上是制图表达和统计技能的结合,在当今的可视化中被广泛使用。

为了更好地理解数据映射,我们将以两个数据映射为例,对其进行一些分析。这些地图中的每一幅都描绘了大量的数据,这些数据只有在图片的帮助下才能可视化。在一个简洁的空间中承载大量的数据是这些数据地图的目标,并且成功地做到了这一点。此外,正如我们将看到的,这些地图使得可视化分析比使用如此庞大的数据集要容易得多。

对于第一个例子;这张地图显示了美国从 2000 年到 2006 年 35 岁以上的成年人中风死亡率。
颜色方案代表按每 100,000 人中的平均年死亡率调整的年龄。

Source: www.cdc.gov

现在,我们可以清楚地看出,在美国东南部和南部,中风的死亡率非常高。阿拉巴马州、密西西比州、路易斯安那州、阿肯色州、田纳西州、得克萨斯州、南卡罗来纳州和北卡罗来纳州以及受灾最严重的地区。西部的怀俄明州、南部的亚利桑那州和新墨西哥州以及远东的纽约州、佛蒙特州、新罕布什尔州、罗德岛州和康涅狄格州受影响最小。

现在让我们看另一个例子,我们将根据 32 支 NFL 球队来看美国的分区。

Source: hermanhissjewelers.com

通过对下面的地图进行简单的视觉分析,我们可以确定并分辨出哪个州主要跟随哪个队。就地理范围而言,牛仔队确实是美国队。他们的粉丝帝国从加利福尼亚延伸到佛罗里达中部、弗吉尼亚南部到蒙大拿州北部。钢人队还有另一个庞大的球迷帝国,声称几乎整个宾夕法尼亚州,并横跨阿巴拉契亚和两个卡罗莱纳州。
现在,德克萨斯人的影响力很小,他们的粉丝群只覆盖休斯顿市区。德克萨斯的其余部分属于牛仔,路易斯安那西部属于圣徒。就黑豹队而言,他们的球迷基础覆盖了夏洛特周围的北卡罗莱纳州西部核心地区,但四周都是钢人队的球迷。

这个快速分析的目的是让你意识到并注意到,我们可以多快、多准确地预测数据集中比其他数据更重要的事物、点或模式,并将我们的注意力引向它们。

除了数据地图可能带来的所有缺陷之外,没有其他方法能够如此强大地显示统计信息。

时间序列

时间序列方法用一些内部结构来说明随着时间推移所获得的数据点;例如一些相关性或季节变化或趋势,其中一个维度沿着秒、分、小时、天、周、月、季度或年的节奏移动。这个图形模型所聚集的力量和效率来自时间尺度的自然秩序;它被用来做预测或者只是描绘一个及时的趋势。

例如,让我们看一个时间序列图,它显示了纽约市 1980 年的天气概况。该图有 1,888 个数据点,我们可以看到每日最高和最低温度与长期平均值的关系。正常温度的路径也提供了一年中预期变化的预测。例如,在 2 月中旬,纽约人可以期待以每周 1.5 度的速度变暖,一直到 7 月,这是一年一度的峰值。这张杰出的图表成功地组织了大量的数字,对不同部分的数据进行了比较,并讲述了一个故事。

Source: The Visual Display of Quantitative Information

此外,时间的流逝并不是最好的解释变量,当数据为我们提供了驱动 Y 变量的清晰机制时,偶尔会有例外。在这种情况下,我们需要采用另一种方法,那就是在图形设计中加入额外的变量,并给出一个随意的解释。

时空叙事设计

让我介绍一下,这是对时间序列显示的一个有效和增强的改进。将空间维度包括到时间序列图形的设计中,并使数据能够在多维空间中进行,而观察者甚至不会意识到图形是多维的,这就是时空设计所实现的。

我们将借助一个例子来试图理解这一点;法国工程师查尔斯·约瑟夫·密纳德(1781-1870)的经典作品,他以残酷而雄辩的设计展示了拿破仑军队在俄罗斯的可怕命运。

Source: Google Images

我们在这里看到的是数据地图和时间序列的惊人组合,描绘了拿破仑在 1812 年俄罗斯战役中遭受的一系列损失。绘制了六个变量:军队的规模、在 2D 表面上的位置、军队移动的方向(棕色和黑色区域)以及从莫斯科撤退期间不同日期的温度。

在左侧,我们可以看到粗流线,代表入侵俄罗斯的大军规模(422,000 人)。这条线的宽度表示地图上每个地方和实例的军队规模。我们可以看到,当军队在 9 月到达莫斯科时,人数少得可怜,只有近 10 万人。

拿破仑撤退的路线通过黑线显示,黑线与图表底部的温标和日期相联系。在向俄罗斯进军的过程中,许多士兵冻死了,因此可以观察到黑线明显变细。

在黑线的尽头,我们可以看到一条分界线。这一部分描绘了贝雷兹纳河的交叉点。这是一场彻底的灾难,我们可以看到黑线是如何突然变细的。军队最终艰难地退回波兰,只剩下 10,000 人。

米纳德的图表通过其多元数据告诉我们一个丰富而连贯的故事,比一组数字或线条聊天显示军队规模随时间的趋势更具启发性。

关系图形

数据图形概念的诞生需要用更抽象的方法来代替地图的经纬度坐标。对于各种图表的出现和存在,它需要努力和时间,因为过渡是一个大动作。对物理世界的类比导致了早期时间序列的发展。在 Lambert 和 Playfair 的伟大作品的帮助下,物理类比在相当长的一段时间内推动了图形设计的想法。这意味着可以在任何变量与另一个变量之间建立关系,只要它们具有相同的测量单位。由于这一最新的认识和对这一思想的接受,数据图形,因为它们是有关系的,不依赖于地理或时间坐标,变得与所有的定量研究相关。

今天,许多发表的图形都是关系型的,从饼状图、线图、条形图、散点图(所有设计中最伟大的)等等。

例如,美国怀俄明州黄石国家公园老忠实间歇泉的喷发间隔时间和喷发持续时间。这张图表表明,通常有两种类型的爆发:短时间的爆发和长时间的爆发。

Source: Wikipedia

在另一个例子中,我们有温度和铜的热导率之间的关系。该图表显示了从 4 K 到大约 300 K 的热导率和温度之间的关系。不同的曲线代表了不同等级的纯铜,通过剩余电阻率比率进行评级,其中 RRR =2000 为最高纯度。

我们观察到铜的热导率随着温度的降低而增加;我们还可以看到,从 300 K 到 200 K,热导率变化相对平缓,略有增加。

所以总结一下,什么是图形化的优秀?在最短的时间和最小的空间内给观众带来最多、最大数量的想法。而且,还要求对数据说实话。

“至于用空间的一部分来表示金钱和时间的适当性和公正性,虽然大多数人都很容易同意,但似乎有少数人担心其中可能有一些他们没有意识到的欺骗……”
—威廉·普莱费尔,《商业与政治地图集》(1786)

区块链和分布式账本技术的区别

原文:https://towardsdatascience.com/the-difference-between-blockchains-distributed-ledger-technology-42715a0fa92?source=collection_archive---------3-----------------------

人们有时会互换使用“区块链”和“分布式账本”这两个术语。这篇文章旨在分析每一个的特点。

分布式账本技术

分布式分类帐是分布在几个节点或计算设备上的数据库。每个节点复制并保存一份相同的分类帐副本。网络的每个参与节点独立地更新自己。

分布式分类帐技术的突破性特征是分类帐不由任何中央机构维护。对分类帐的更新由每个节点独立构建和记录。然后,节点对这些更新进行投票,以确保大多数人同意得出的结论。这种对账本副本的投票和同意被称为共识,由共识算法自动进行。一旦达成共识,分布式分类帐将自我更新,并且最新的、达成一致的分类帐版本将分别保存在每个节点上。

分布式账本技术大大降低了信任成本。分布式总账的架构和结构可以帮助我们减轻对银行、政府、律师、公证人和监管合规官的依赖。R3 的 Corda 就是一个分布式分类账的例子。

分布式分类账为如何收集和交流信息提供了一种新的模式,并有望彻底改变个人、企业和政府的交易方式。

区块链技术

区块链是分布式账本技术的一种形式。并非所有的分布式分类帐都采用块链来提供安全有效的分布式共识。

区块链分布在对等网络中并由对等网络管理。因为它是分布式分类帐,所以它可以在没有中央机构或服务器管理的情况下存在,并且它的数据质量可以通过数据库复制和计算信任来维护。

然而,区块链的结构使其有别于其他类型的分布式分类账。区块链上的数据被分组在一起并组织成块。然后将这些块相互连接起来,并使用加密技术进行保护。

区块链本质上是一个不断增长的记录列表。它的仅追加结构只允许将数据添加到数据库中:不可能修改或删除先前块中先前输入的数据。因此,区块链技术非常适合记录事件、管理记录、处理交易、追踪资产和投票。

比特币等加密货币开创了区块链技术。比特币在 2017 年底的大反弹,以及随后的媒体狂热,将加密货币带入了主流公众的想象中。政府、企业、经济学家和热心人士现在正在考虑将区块链技术应用于其他用途的方法。

结论

每个区块链都是分布式账本,但不是每个分布式账本都是区块链。这些概念中的每一个都需要节点间的分散和一致。然而,区块链以块为单位组织数据,并使用仅附加结构更新条目。广义上的分布式分类账,特别是区块链,是管理信息方面的概念突破,预计将在每个经济部门得到应用。

接下来:了解区块链将如何革新数字身份

沙安雷

关注媒体上的 Lansaar Research ,了解最新的新兴技术和新的商业模式。

[## 沙恩·雷

来自 Shaan Ray 的最新推文(@ShaanRay)。创造新价值和探索新兴技术| ENTJ | #科学…

twitter.com](https://twitter.com/shaanray)

人工神经网络和生物神经网络的区别

原文:https://towardsdatascience.com/the-differences-between-artificial-and-biological-neural-networks-a8b46db828b7?source=collection_archive---------0-----------------------

虽然人工神经元和感知机是受科学家们在 50 年代能够观察到的大脑生物过程的启发,但它们在几个方面确实不同于生物学上的同类。鸟类启发了飞行,马启发了机车和汽车,然而今天的交通工具没有一个像活的、呼吸的、自我复制的动物的金属骨架。尽管如此,我们有限的机器在它们自己的领域里甚至比它们的动物“祖先”更强大(因此,对我们人类更有用)。通过拟人化深度神经网络,很容易从人工智能研究的可能性中得出错误的结论,但人工和生物神经元确实在更多方面有所不同,而不仅仅是它们容器的材料。

Airplanes are more useful to us than actual mechanical bird models.

历史背景

感知器(人工神经元的前身)背后的想法是,有可能使用简化的数学模型来模拟神经元的某些部分,如树突、细胞体和轴突,这些简化的数学模型限制了我们对其内部工作的了解:信号可以从树突接收,一旦接收到足够的信号,就发送到轴突。这个传出的信号可以作为其他神经元的另一个输入,重复这个过程。一些信号比其他信号更重要,可以更容易地触发一些神经元。连接可能变得更强或更弱,新的连接可能出现,而其他连接可能不复存在。我们可以通过提出一个函数来模拟这一过程,该函数接收一系列加权输入信号,如果这些加权输入的总和达到某个偏差,则输出某种信号。**请注意,这个简化的模型既不模仿神经元之间连接(树突或轴突)的创建,也不模仿连接的破坏,而且忽略了信号时序。**然而,这个受限模型本身就足以处理简单的分类任务。

A biological and an artificial neuron (via https://www.quora.com/What-is-the-differences-between-artificial-neural-network-computer-science-and-biological-neural-network)

感知机由弗兰克·罗森布拉特发明,最初是为了成为一个定制的机械硬件而不是软件功能。Mark 1 感知器是美国海军为图像识别任务制造的机器。

Researching “Artificial Brains”

想象一下可能性吧!一台可以用蒸汽朋克神经元一样的大脑模仿经验学习的机器?一台从它“看到”的例子中学习的机器,而不是戴眼镜的科学家必须给它一套硬编码的指令才能工作?炒作是真实的,人们是乐观的。由于它与生物神经元的相似性,以及感知器网络最初是多么有前途,纽约时报在 1958 年报道说“海军今天展示了电子计算机的胚胎,它预计将能够行走,说话,看,写,自我复制并意识到它的存在。”

然而,它的缺点很快被认识到,因为单独的一层感知器无法解决非线性分类问题(例如学习简单的 XOR 函数)。这个问题只能通过使用多层(隐藏层)来克服(数据中更复杂的关系只能建模)。然而,除了随机调整所有权重之外,没有一种简单、廉价的方法来训练多层感知机,因为没有办法判断哪一小组变化最终会在很大程度上影响其他神经元的输出。这一缺陷导致人工神经网络研究停滞多年。然后,一种新的人工神经元通过稍微改变其模型的某些方面来解决这个问题,这允许多个层的连接,而不会失去训练它们的能力。人工神经元不是作为只能接收和输出二进制信号的开关工作(这意味着感知机将根据信号的存在或不存在而获得 0 或 1,并且当达到组合的加权信号输入的某个阈值时,还将输出 0 或 1),而是利用具有连续激活函数的连续(浮点)值(稍后将详细介绍这些函数)。

Activation functions for perceptrons (step function, that would either output 0 or 1 if the sum of weights was larger than the threshold) and for the first artificial neurons (sigmoid function, that always outputs values between 0 and 1).

这可能看起来没有太大的区别,但由于他们模型中的这一微小变化,人工神经元层可以在数学公式中作为独立的连续函数使用,其中可以计算一组可选的权重(通过逐个计算它们的偏导数来估计如何最小化它们的误差)。这个微小的变化使得使用反向传播算法来教授多层人工神经元成为可能。因此,与生物神经元不同,人工神经元不只是“发射”:它们发送连续值,而不是二进制信号。根据它们的激活功能,它们可能会一直发出信号,但这些信号的强度会有所不同。请注意,术语“多层感知器”实际上是不准确的,因为这些网络使用人工神经元层,而不是感知器层。然而,教授这些网络在计算上是如此昂贵,以至于人们很少使用它们来完成机器学习任务,直到最近(那时大量的示例数据更容易获得,计算机的速度快了许多倍)。由于人工神经网络很难教,而且不是我们头脑中真实想法的忠实模型大多数科学家仍然认为它们是机器学习的死胡同。当 2012 年一个深度神经网络架构 AlexNet 成功解决了 ImageNet 挑战(一个拥有超过 1400 万张手绘图像的大型视觉数据集)时,炒作又回来了,而不依赖于手工制作的、精细提取的特征,这是迄今为止计算机视觉的标准。AlexNet 击败了竞争对手,为神经网络再次发挥作用铺平了道路。

AlexNet correctly classifies images at the top, based on likelihood.

你可以阅读更多关于深度学习的历史,这里的。该领域发展如此之快,以至于研究人员不断提出新的解决方案来解决人工神经网络的某些限制和缺点。

主要区别

  1. 尺寸:我们的大脑包含大约 860 亿个神经元(T2)和超过 100 万亿个(或者根据一些估计是 1000 万亿个)突触(连接)。人工网络中的“神经元”数量比少得多(通常在 10-1000 左右),但以这种方式比较它们的数量会产生误导。感知器只是在其“树突”上接受输入,并在其“轴突分支”上产生输出。单层感知器网络由几个互不相连的感知器组成:它们只是同时执行完全相同的任务。深度神经网络通常由输入神经元(与数据中的特征数量一样多)、输出神经元(如果构建它们是为了解决分类问题,则与类的数量一样多)和隐藏层中的神经元组成。所有层通常(但不一定是)完全连接到下一层,这意味着人工神经元通常具有与前一层和后一层中的人工神经元总和一样多的连接。卷积神经网络还使用不同的技术从数据中提取特征,这些技术比几个相互连接的神经元单独能够做到的更复杂。手动特征提取(以可以馈入机器学习算法的方式改变数据)需要人脑的力量,这在对深度学习任务所需的“神经元”数量求和时也没有考虑在内。大小的限制不仅仅是计算上的:简单地增加层数和人工神经元的数量并不总是能在机器学习任务中产生更好的结果。
  2. ***拓扑:**所有人工层都是一个一个计算的,而不是一个节点异步计算的网络的一部分。前馈网络计算一层人工神经元的状态及其权重,然后使用结果以同样的方式计算下一层。在反向传播期间,该算法以相反的方式计算权重的一些变化,以减小输出层中前馈计算结果与输出层期望值的差异。**层不与非相邻层相连,*但是用循环和 LSTM 网络来模拟环路是可能的。在生物网络中,神经元可以并行异步放电,具有小世界性质,具有一小部分高度连接的神经元(中枢)和大量较低连接的神经元(程度分布至少部分遵循幂律)。由于人工神经元层通常是完全连接的,因此生物神经元的这种小世界性质只能通过引入 0 的权重来模拟两个神经元之间缺乏连接的情况。
  3. ***速度:**某些生物神经元平均每秒可以放电 200 次左右。根据神经冲动的类型,信号以不同的速度传播,从 0.61 米/秒到 119 米/秒。**信号传播速度也因人而异,取决于他们的性别、年龄、身高、温度、医疗状况、睡眠不足等。**动作电位频率携带生物神经元网络信息:生物系统中输出神经元的放电频率或放电模式(紧张或突发放电)以及输入神经元传入信号的幅度携带信息。**人工神经元中的信息转而由突触权重的连续浮点数值携带。*前馈或反向传播算法的计算速度除了加快模型的执行和训练速度之外,没有其他信息。人工神经网络没有不应期(由于钠通道被锁定,不可能发送另一个动作电位的时期),人工神经元不会经历“疲劳”:它们是可以在计算机架构允许的情况下尽可能快地计算多次的函数。由于人工神经网络模型可以被理解为只是一堆矩阵运算和寻找导数,因此运行这样的计算可以针对矢量处理器进行高度优化(反复对大量数据点进行完全相同的计算),并使用 GPU 或专用硬件(如最近智能手机中的 AI 芯片)进行大幅加速。
  4. ***容错:*生物神经元网络由于其拓扑结构也是容错的。信息以冗余方式存储,因此小故障不会导致内存丢失。他们没有一个“中心”部分。大脑也能在一定程度上恢复和愈合。人工神经网络不是为容错或自我再生而建模的(与疲劳类似,这些想法不适用于矩阵运算),尽管通过保存模型的当前状态(权重值)并从该保存状态继续训练可以恢复。辍学可以在训练期间打开和关闭一层中的随机神经元,模仿信号的不可用路径,并强制一些冗余(辍学实际上是用来减少过度拟合的机会)。经过训练的模型可以导出并在支持该框架的不同设备上使用,这意味着相同的人工神经网络模型将在其运行的每个设备上为相同的输入数据产生相同的输出。长时间训练人工神经网络不会影响人工神经元的效率。然而,如果经常使用,用于训练的硬件会很快磨损,需要更换。另一个区别是,所有的过程(状态和值)都可以在人工神经网络中被密切监控。
  5. 功耗:大脑消耗大约 20%的人体能量——尽管它很大,但一个成年人的大脑在大约 20 瓦(仅够微弱地点亮一个灯泡)的功率下工作,效率极高。考虑到人类如何还能运转一段时间,当只给了一些富含 c-维生素的柠檬汁和牛油时,这就相当了不起了。基准测试:一个单独的 Nvidia GeForce Titan X GPU 运行在 250 瓦上,需要一个电源而不是牛油。我们的机器远不如生物系统有效。计算机在使用时也会产生大量热量,消费类 GPU 在 50–80 摄氏度之间安全运行,而不是 36.5–37.5 摄氏度。
  6. 信号:动作电位要么被触发,要么不被触发——生物突触要么携带信号,要么不携带。感知器的工作方式有些类似,它接受二进制输入,对其应用权重,并根据这些加权输入的总和是否达到某个阈值(也称为阶跃函数)来生成二进制输出。人工神经元接受连续值作为输入,并对其加权输入之和应用简单的非线性、易微分函数(激活函数),以限制输出值的范围。激活函数是非线性的,所以理论上多层可以近似任何函数以前,sigmoid 和双曲线正切函数被用作激活函数,但是这些网络受到消失梯度问题的困扰,这意味着网络中的层数越多,第一层的变化对输出的影响就越小,因为这些函数将其输入压缩到非常小的输出范围内。这些问题通过引入不同的激活功能得以解决,例如 ReLU 。这些网络的最终输出通常也压缩在 0-1(代表分类任务的概率)之间,而不是输出二进制信号。如前所述,信号的频率/速度和发射率都不携带人工神经网络的任何信息(该信息由输入权重携带)。信号的时序是同步的,同一层的人工神经元接收它们的输入信号,然后一次性发送它们的输出信号。循环和时间增量只能用循环(RNN)层(其深受上述消失梯度问题的困扰)或长短期记忆(LSTM)层来部分模拟,其作用更像状态机或锁存电路而不是神经元。这些都是生物神经元和人工神经元之间相当大的差异。
  7. *学习:我们仍然不明白大脑是如何学习的,或者冗余连接是如何存储和回忆信息的。大脑纤维生长并伸出与其他神经元连接,神经可塑性允许创建新的连接或区域移动并改变功能,突触可能根据其重要性加强或削弱。一起放电的神经元,连接在一起(尽管这是一个非常简化的理论,不应该过于拘泥于字面意思)。通过学习,我们建立在已经储存在大脑中的信息之上。我们的知识通过重复和睡眠加深,一旦掌握,曾经需要集中注意力的任务可以自动执行。**另一方面,人工神经网络有一个预定义的模型,不能添加或删除更多的神经元或连接。*在训练期间,只有连接的权重(以及代表阈值的偏差)可以改变。网络以随机的权重值开始,并且将慢慢地尝试达到一个点,在该点,权重的进一步改变将不再提高性能。就像现实生活中同样的问题有许多解决方案一样,不能保证网络的权重将是某个问题的最佳权重安排,它们将只代表无限个解决方案的无限个近似中的一个。学习可以被理解为寻找最优权重以最小化网络预期输出和生成输出之间的差异的过程:以一种方式改变权重会增加这种误差,以另一种方式改变它们会使其恶化。想象一个雾蒙蒙的山顶,在那里我们所能告诉的就是朝着某个方向迈步会把我们带到下坡。通过重复这一过程,我们最终会到达一个山谷,在那里再往前走一步只会让我们更高。一旦找到这个山谷,我们就可以说我们已经到达了一个局部极小值。请注意,可能有其他更好的山谷,甚至比山顶更低(全局最小值),我们已经错过了,因为我们看不到它们。在通常超过 3 维的空间中这样做被称为梯度下降。为了加速这个“学习过程”,从数据集中抽取随机样本(批次)并用于训练迭代,而不是每次都遍历每个示例。这只给出了如何调整权重以达到局部最小值的近似值(找到下坡的方向,而不用一直仔细查看所有方向),但这仍然是一个相当好的近似值。我们也可以在登顶时迈大一点的步子,在到达山谷时迈小一点的步子,在那里,即使很小的推搡也会带我们走错路。像这样走下坡路,走得比精心规划的每一步都要快,这叫随机梯度下降。因此,人工神经网络的学习速度会随着时间而变化(它会降低以确保更好的性能),但没有任何类似于人类睡眠阶段的时期,网络会学习得更好。也没有神经疲劳,尽管训练期间 GPU 过热会降低性能。一旦经过训练,人工神经网络的权重可以导出,并用于解决与训练集中发现的问题类似的问题。训练(使用类似随机梯度下降的优化方法的反向传播,在许多层和例子上)极其昂贵,但是使用经过训练的网络(简单地进行前馈计算)便宜得离谱。与大脑不同,人工神经网络不会通过回忆信息来学习 —它们只会在训练期间学习,但事后会一直“回忆”相同的、学习过的答案,不会出错。最棒的一点是,“回忆”可以在更弱的硬件上进行,次数不限。还可以使用之前预训练的模型(因为不必从完全随机的一组权重开始,所以可以节省时间和资源),并通过使用具有相同输入特征的其他示例进行训练来改进它们。这有点类似于大脑如何更容易地学习某些东西(如面孔),因为大脑有专门的区域来处理某些类型的信息。

因此,人工神经元和生物神经元确实在更多方面不同于它们环境的材料——生物神经元只为它们的人工对应物提供了灵感,但它们绝不是具有相似潜力的直接副本。如果有人说另一个人聪明或聪明,我们会自然而然地认为他们也有能力处理各种各样的问题,而且很可能礼貌、善良、勤奋。称一个软件智能仅仅意味着它能够找到一组问题的最佳解决方案。

AI 做不到的

人工智能现在几乎可以在每个领域击败人类:

  1. 足够多的训练数据和示例都可以通过数字方式获得,工程师可以清楚地将数据中的信息转化为数值(特征),而不会产生太多歧义。
  2. 这些例子的解决方案要么是清楚的(有大量的标签数据可用),要么是有可能清楚地定义优选的状态,应该实现的长期目标(例如,有可能将进化算法的目标定义为能够走尽可能远的距离,因为其进化的目标可以很容易地在距离上测量)。

这听起来很可怕,但我们仍然完全不知道一般智力是如何工作的,这意味着我们不知道人脑如何能够通过将知识从一个区域转移到另一个区域而在各种不同的区域如此高效。AlphaGo 现在可以在围棋比赛中击败任何人,但你最有可能在井字游戏中击败它,因为它对自己领域之外的游戏没有概念。一只狩猎采集的猴子如何想出利用它的大脑不仅仅是寻找和培育食物,而是建立一个社会来支持那些不是把生命献给农业,而是一生都在玩桌面围棋的人,尽管他们的大脑中没有专门的围棋神经网络区域,这本身就是一个奇迹。类似于重型机械如何在许多领域取代了人类的力量,仅仅因为起重机能比任何人手更好地举起重物,他们中没有人能精确地放置较小的物体或同时弹钢琴。人类很像自我复制、节能的瑞士军刀,即使在恶劣的条件下也能生存和工作。

机器学习可以比人类更有效地将输入特征映射到输出(特别是在数据仅以我们无法理解的形式可用的领域:我们不会将图像视为一串代表颜色值和边缘的数字,然而机器学习模型从这样的表示中学习没有问题)。然而,他们无法自动发现和理解额外的特征(可能很重要的属性),并基于它们快速更新他们的世界模型(公平地说,我们也无法理解我们无法感知的特征:例如,无论我们阅读多少关于它们的知识,我们都无法看到紫外线)。如果直到今天,你在生活中只见过狗,但有人向你指出,你现在看到的狼不是狗,而是它们未经驯化的野生祖先,你会很快意识到有类似狗的生物,你可能已经看到狗可能是狼而没有意识到,其他宠物也可能有类似的未经驯化的祖先。从现在开始,你很有可能能够区分这两个物种,而不必再看一眼你迄今为止在生活中见过的所有狗,也不需要几百张狼的照片,最好是它们在不同光照条件下从每个角度每个位置拍摄的照片。你也可以毫不犹豫地相信,一幅模糊的狼的卡通图画在某种程度上仍然是一只狼的代表,它具有现实生活中动物的一些特性,同时也具有真正的狼所没有的拟人化的特征。如果有人把你介绍给一个叫沃尔夫的人,你也不会感到困惑。人工智能无法做到这一点(尽管人工神经网络不必那么依赖手工制作的特征,不像大多数其他类型的机器学习算法)。机器学习模型,包括深度学习模型,学习数据表示中的关系。这也意味着如果表示模糊不清并且依赖于上下文,即使最准确的模型也会失败,因为它们会输出只在不同情况下有效的结果(例如,如果某些推文同时被标记为悲伤和有趣,情感分析将很难区分它们,更不用说理解讽刺了)。人类是进化来面对未知挑战的生物,以改善他们对世界的看法,并建立在以前的经验基础上——而不仅仅是解决分类或回归问题的大脑。但是我们如何做到这一切仍然是我们无法理解的。然而,如果我们要造一台像人类一样智能的机器,它会自动比我们更好,这是因为硅树脂在速度上的绝对优势。

The reason adversarial attacks can trick neural networks is because they do not “see” the same way we do. They do learn relationships in image data and can come to similar conclusions as we do when classifying, but their internal models are different from ours.

尽管人工智能受到我们自身的启发,但该领域的进步反过来帮助生物学家和心理学家更好地理解智能和进化。例如,在对智能体建模时,某些学习策略的局限性变得很明显(比如进化一定比随机突变更复杂)。科学家们过去认为,大脑具有超专业的视觉神经元,这些神经元变得越来越复杂,能够检测更复杂的形状和物体。然而,现在很清楚,通过让其他类似的神经元学习不太复杂的形式和属性,以及通过检测这些较低水平的表示是否在发出信号,相同类型的人工神经元能够学习复杂的形状。

*即使机器学习可以在某些领域解决问题并击败人类,也不意味着这些算法表现得像人类一样,在其他领域也一样能干。鉴于足够多的神经元和层可以堆叠在一起,说人工神经元将成为始终有效的积木是一个神话:更大的网络不一定工作得更好,模型能够学习的任何东西都取决于其输入和输出数据。不同的激活函数、神经元类型、模型、退出率和优化技术更适合不同的任务——找出哪些解决方案最有效仍然是数据科学家的工作,类似于收集、清理和重新编码数据为有用的特征。**让任何机器智能化都需要大量的人类智能,尽管媒体头条很少报道这一事实。*无论如何,如果有人向你提供他们新成立的公司的股份,这家公司专门将人类的意识上传到云端,希望获得永生,最好还是友好地拒绝他们的提议,至少现在是这样。

数据生态系统中的不同角色

原文:https://towardsdatascience.com/the-different-roles-in-the-data-ecosystem-fc575b8db467?source=collection_archive---------4-----------------------

我经常被问到一些问题,并在网上看到关于不同数据相关职位之间差异的困惑。因此,我决定写一份简短的指南,介绍不同职位所需的角色和技能。

位置

数据工程师(类似于大数据软件工程师)

典型教育:文学士/理学士

常用工具:Spark,Flink,Hadoop,NoSQL

语言:Java,Scala,Python

受雇地点:超大型公司、中型科技公司和初创公司。

必备技能:分布式系统(重要)、数据结构/算法(非常重要)、数据库(重要)、编程(非常重要)

数据工程师或大数据软件工程师通常负责设置、开发和监控组织的数据基础架构。他们还整合或生产由数据科学家设计的模型。更具体地说,数据工程师设置管道,允许数据科学家轻松地试验数据,并为服务创建生产管道。例如,数据工程师可能会建立一个数据湖和一个 Spark 集群,数据科学家可以从中提取数据并提交数据作业。然后,如果数据科学团队创建了一个新模型,数据工程团队将对其进行优化,并与工程团队一起将其部署到生产中。

数据科学家

典型教育硕士或博士

常用工具:Scikit-learn、Pandas、Numpy、XGBoost

语言:SQL、R、Python

他们受雇于哪里:大中型组织和科技创业公司

技能:统计学(重要)、数据库(有点重要)、编程(重要)、线性代数(有点重要)、商业知识(有点重要)、分布式系统(有点重要)、特征提取、数据可视化

数据科学家的定义在不同的组织中会有很大的不同。在某些地方,数据科学家更接近于数据工程师,而在其他地方,他们更接近于研究科学家。一般来说,数据科学家试图回答业务问题,并提供可能的解决方案。数据科学家通常从一个模糊的问题开始,如“我们如何增加用户保留率”,找出他们需要什么数据/如何收集数据,分析数据,然后提出解决方案。数据科学家经常在他们的解决方案中使用机器学习技术。例如,为了留住用户数据,科学家可能会建立一个模型来预测哪些用户最有可能离开网站。然后,使用这些预测来锁定可能会离开的用户,并吸引他们留下来。

与研究科学家不同,他们通常不专注于预测建模的任何一个领域,而是会使用任何最适合这项工作的工具,无论是树、深度学习还是简单的回归。

数据分析师

常用工具:Excel、Access、Tableau

语言:SQL,VBA

必备技能:基本 SQL/数据库知识,基本编程,微软产品。

他们受雇于哪里:各行各业各种规模的组织

数据分析师的工作目标类似于数据科学家,但是他们的工作范围和工具通常更有限。数据分析师通常为特定问题生成基本报告/可视化,并呈现这些数据。他们通常不做太多的预测建模或详细的统计。

研究科学家

典型教育:博士

常用工具:Caffe,Torch,Tensorflow,numpy

语言:MATLAB,Python

技能/知识:线性代数/微积分(非常重要),统计学(重要),编程(有点重要)。

他们受雇的地方:大型科技公司和数据/ml 创业公司

研究科学家通常专注于特定领域,如 NLP 或 CV。顾名思义,他们最关心的是研究和出版。他们主要致力于在他们的领域内发现新的新颖方法并发表结果。虽然他们有时会解决商业问题,但他们的首要任务是在他们的专业领域进行研究。

研究工程师

典型教育:理学学士/理学硕士

语言:C,C++,Python,CUDA

eSkills/知识:编程(非常重要),

他们被雇佣的地方:非常大的科技公司,专业的数据创业公司

研究工程师之于研究科学家,正如数据工程师之于数据科学家。研究工程师倾向于通过实现和测试研究科学家开发的算法来支持研究科学家的实现。他们通常用 C 或 C++编写代码,以创建优化的计算平台和 M.L .算法的实现。它们通常只出现在像谷歌和脸书这样的大公司。

远程机器学习工作的困难

原文:https://towardsdatascience.com/the-difficulties-of-remote-machine-learning-work-cff2155ff5b6?source=collection_archive---------14-----------------------

远程 我们庆祝远程工作及其所有优势。事实证明,远程工作可以提高你的幸福感和工作效率,但这并不全是好事。以上是远程机器学习工作的一些难点。

这个故事最早出现在RemoteML.com上。

公司文化与孤独

上班族都知道:来办公室不仅仅是为了工作。在健康的环境中,好的团队形成公司文化。内部笑话,关于你的周末和友谊的聊天大多发生在休息室。

当你远程工作时,你没有休息室可去,也没有可以聊天的座位伙伴。显然有 Slack 这样的团队聊天,但在那里发起一个随意的对话要困难得多。

那么你能做些什么呢?雇主可以通过引入视频聊天的虚拟休息室来解决这个问题,远程自由职业者可以尝试成为社区的一部分。提示:机器学习聊天就是其中之一。

工作过度

在谈到远程工作时,人们经常开玩笑地问我:‘哦,那你工作多少钱?’?你工作吗?“大概两个小时吧,”。大多数情况下,远程工作的问题不是工作太少,而是工作太多。

在办公室,你有一个结束一天工作的物理原因:你必须在某个时候出门,吃晚饭,没有义务——在某些情况下甚至没有办法——在家工作。当你的办公室在你自己的公寓里,你没有理由不工作。你在家,你没有什么事可做,所以不妨工作对吗?试着通过身体上限制自己工作来解决这个问题,例如把你的工作和个人笔记本分开,或者有一个专门的房间作为办公室。

生产力

这个难度属于同一个空间,只是有点不同。有时候,如果你工作了一整天,那可能是因为这一天你没有什么可以炫耀的。谁知道呢:也许是一台电脑出了一些问题,也许是你没有及时得到数据,也许是你今天只想看一些论文。

在实体办公室里,你会看到人们在办公桌前投入时间。即使你没有任何东西可以展示,你也在场。如果你很遥远,这种感觉很快就消失了。你的老板可能会这么想,但是很有可能这些天你会觉得很没效率。最后,如果你什么都没展示出来,就没有证据证明你真的工作了,对吗?

这个问题的解决方案就是走出“在场=生产力”的思维定势,因为这根本不是真的。如果你投入了工作,你应该自我感觉良好,即使你自己并不这么认为。

拉丁语和雷鬼音乐的传播

原文:https://towardsdatascience.com/the-diffusion-of-latin-and-reggaeton-69113f9929dd?source=collection_archive---------11-----------------------

Ozuna — 18 million monthly listeners on Spotify

公平地说,我们很多人都在跟着当今最流行的拉丁和雷鬼音乐一起唱歌,却不一定理解我们在说什么或听到什么。直到今天早上我咨询了天才,我才熟悉了《美国佬老爹》的一些歌词的含义,同时我已经喃喃自语了几个星期了。像尼基·杰姆的《X》和《T4》美国佬老爹的《杜拉》 这样的热门歌曲在国外积累了数百万的流量。更不用说他们在整个欧洲都达到了很高的排行榜位置。

在这个流媒体时代,拉丁流行音乐和雷鬼音乐似乎比以前更容易到达我们这里。有了像 Viva Latino白腊瑞格顿这样的大规模国际播放列表(分别有 800 多万和 700 多万追随者)和以拉丁曲目为特色的主流流行播放列表,潜在的全球听众变得巨大——导致消费者经常接触到拉丁音乐。

知道拉丁音乐能够接触到数量惊人的 Spotify 听众,我想知道我们是否能弄清楚拉丁音乐是如何在欧洲接触到我们的,以及这是否因国家或艺术家而异。

数据集

  • 该数据集包含从 2017 年 1 月到 2018 年 5 月 20 日的所有 Spotify 每日图表,通过 spotifycharts.com 收集。相当于 502 天。
  • 通过查看 Spotify 上最大的两个拉丁播放列表(Viva Latino 和白腊瑞格顿)及其特色音乐,我能够检索到拉丁音乐的最大供应商拉丁音乐国家,这些音乐符合 Spotify 的播放列表(通过 Chartmetric 完成)。最大的供应商是波多黎各、哥伦比亚、多米尼加共和国、墨西哥、巴西和委内瑞拉。我决定将这些国家作为拉美地区与欧洲进行比较的基准。不幸的是,波多黎各和委内瑞拉没有自己的 Spotify 每日排行榜。

每个拉美国家排名前三的艺术家

在我们开始与欧洲进行比较之前,我想先从更好地了解拉丁音乐的“家”开始。根据进入 Spotify 前 50 名排行榜的不同曲目的数量,下面的可视化显示了每个国家的前三名艺术家。 奥祖纳 设法让最多的曲目进入前 50。他唯一没有排名第一的国家是巴西,在那里我们看到了与其他拉美国家截然不同的前三名。在大多数国家,J·巴尔文和马鲁玛的排名也很高

Top 3 artists based on amount of distinct tracks

与欧洲的相似之处

考虑到 LatAm 基准,我想知道与欧洲国家有什么相似之处。我们可以通过查看 Spotify 在拉美地区和欧洲的前 200 名中出现的歌曲来做到这一点。从那里我们可以计算出 LatAm 基准中所有独特曲目的相似度。我还想知道每月是否会有差异,因为拉丁音乐经常与夏天联系在一起。

下面的可视化显示了从 2017 年 1 月到 2018 年 4 月每月与 LatAm(欧盟国家的平均值)的相似性。所有被考虑的月份的平均相似度百分比为 23% ,这意味着 Spotify 在墨西哥、哥伦比亚、巴西和多米尼加共和国的前 200 首歌曲中有 23%也进入了欧洲排行榜。值得一提的是,2017 年 3 月的峰值主要是由艾德·希兰的专辑发行引起的。

Average resemblance with LatAm benchmark per month

就像我之前的一篇文章中的图表与美国的比较一样,很可能有些国家比其他国家更像 LatAm。大概不会太显著;西班牙(平均 30%) 和葡萄牙(平均。29%) 在相似度方面得分最高。法国(平均。17%) 和丹麦(平均。19%) 相似度得分最低。

% of LatAm resemblance per month and country

拉丁图表条目

知道了这一点,我想知道有多少拉丁歌曲进入了欧洲排行榜。为了将拉丁流派从其余的图表条目中分离出来,我根据 Spotify 播放列表中包含的最大拉丁艺术家的数据集放置了一个过滤器。

毫不奇怪,西班牙得分最高,有 264 首不同的拉丁歌曲进入 Spotify 前 200 名,其次是葡萄牙,有 90 首拉丁歌曲进入排行榜。荷兰在(更明智的)前三名之后率先赶上。

Amount of Latin tracks in European charts

当看拉丁曲目时,西班牙自然是一个倾向于提前参加派对的国家。我想知道哪些国家也很快接受了拉丁曲目,所以我选择了一些最热门的拉丁曲目,并计算了该曲目达到欧洲国家与拉丁基准所需的时间。

爸爸美国佬的《T1》杜拉是目前最热门的歌曲之一,仅在 Spotify 上就有超过 2 . 5 亿的播放量。下图显示了杜拉袭击一个特定的欧洲国家所需要的时间。正如你所看到的,西班牙和葡萄牙立即采用了这条赛道,随后是意大利(7 天后)和荷兰(18 天后)。

Daddy Yankee — Dura

那么另一部夏季热门电影呢,尼基·杰姆的《X》(T11)?我做了同样的计算,结果是欧洲采用 X 比采用“Dura”更快。

Nicky Jam — X

J . Balvin 的巨大成功《米根特》也显示在下面,平均花了三天时间才到达排行榜。当我们看到 Maluma 的(我个人最喜欢的)“felicies Los 4”时,我们看到的采用率略有下降,在欧洲,平均需要 14 天才能到达我们这里。

Maluma — Felices Los 4 & J Balvin — Mi Gente

平均一下所有穿越海洋的音乐,我们可以得出这样的结论:拉丁音乐到达欧洲需要 3 天。然而,当我们排除两个欧洲领先者(西班牙和葡萄牙)时,平均时间立即减少到 9 天。

最后,对于所有那些跟着洋基老爹的“杜拉”唱歌的人,你们实际上是在唱歌;

你很性感,告诉我,告诉我,你是怎么做到的?

你很性感,我给你满分 20 分

你很热,很热,很热

放弃

  • 由于过滤器被放置在具有已经被包括在大型拉丁主题播放列表中的拉丁艺术家的数据集上,所以一些较小的拉丁艺术家可能被排除。然而,鉴于这些播放列表包含了最大和最有潜力的艺术家,我很有信心他们中的大多数应该被包括在内。
  • 这一比较是基于 Spotify 200 强排行榜进行的。查看前 100 名或前 50 名时,结果可能会有所不同。
  • 这只是涵盖了 Spotify 平台的图表部分,不应被视为 Spotify 图表范围之外的收听行为的整体表现

感谢阅读!如果你喜欢读这篇文章👏🏻很感激。

在这里找到更多我写的关于音乐的故事。

图表制作的注意事项

原文:https://towardsdatascience.com/the-dos-and-don-ts-of-chart-making-13c629456027?source=collection_archive---------4-----------------------

当涉及到向你的观众传达信息时,图表是一种简单而有效的方式。也就是说,如果图表制作正确的话。

制作完美的视觉内容需要投入大量的精力,很容易遗漏一些元素。匆忙拼凑的图表往往弊大于利。

为了帮助您避免这种情况,我们整理了一个有用的注意事项列表,以便您在创建自己的数据表示时牢记在心,无论是简单的条形图和图形形式,还是更复杂的交互式可视化形式。

相关:你永远不想犯的 11 个常见信息图表错误

图表类型

准备图形时,选择最适合数据的图表很重要。

对你的数据使用合适的图表。了解你的基本图表以及它们最擅长什么,这样你就可以为你的观众创造最有效的图形。三种最流行的图表是条形图、饼图和折线图。同时有定性和定量两类数据,每一类数据又可以分为两个子类型

Combine text and icons just like this using Visme

第一种信息是定性数据,由序数数据和名义数据组成。第一个是指专门为其数据组制作的标尺。这种数据经常出现在问卷中,当人们被要求按照从差到好的等级(通常表示为一到五)对不同方面进行评级时。同时,名义数据没有被排序或测量,而是被分类。名义数据的一个例子是一个人的性别或眼睛颜色的记录。

第二种信息,定量数据,包括离散或连续的数据。离散数据是用整数来度量的,整数代表一个整体,例如一个家庭中的人数。连续数据不是表示单个数据点,而是表示值可能不同但仍属于同一标签的测量值,如人的体重或身高记录。

每种类型的数据都可以用各种流行的图表来表示,尽管某些类型的图表更适合不同类型的数据。

条形图在用于名义数据和离散数据时效果最佳,并有助于比较。同样,饼图可用于离散和有序数据,以显示整体的一部分。折线图最适合连续数据,因为它连接了许多属于同一类别的变量。

当使用 x(水平)和 y(垂直)轴图表时,尤其是条形图,使用全轴。从零开始绘制图表可以避免图表中的数据产生误导,从而被受众误解。例如,从零开始的条形图有夸大比较数据之间差异的风险。

图片:http://blog . visme . co/WP-content/uploads/2016/08/intervals . png

从零开始你的 Y 轴,以避免误导和扭曲的数据可视化。

在某些线图的情况下,发现一个例外总是从零开始轴。当数据在一个远远大于零的量上变化很小时,就很难读取。在这种情况下,从更接近数据的数量开始基线可以揭示变化。只是要小心,不要让的数据碰到底部轴。在最低数据点和轴之间留出一个清晰的空白。

此外,在进行比较时,不要 改变图形的样式。例如,条形图和饼图都是可以显示离散数据的样式。然而,当这些风格放在一起时,很难对两者进行比较。这可能会让你的听众感到不舒服,让他们很难理解你的信息。相反,保持你的风格一致。当比较多个图表中的相同数据时,选择一种样式或类型并保持不变。

可读性

一旦你选择了最适合你的信息的图表类型,注意让你的图表易于理解。图表,以及任何视觉辅助,应该让你快速、简单、轻松地理解你的数据。

保持你的图表简单。统计学家爱德华·塔夫特说,“图形的优雅通常存在于设计的简单和数据的复杂中。”一种在不减少数据的情况下简化图表的方法是通过 Tufte 的数据墨水比率。删除边框、网格线甚至图例中的多余墨迹,以简化图表的整体外观。例如,不用图例和 y 轴,直接用类别和数量来标记数据。

通过消除不必要的网格线、轴值和图例来提高图形的可读性。

为了增加具有长名称的多个类别的条形图的可读性, do 使用水平条形图并按降序从最大到最小排列数据。这可以防止你的读者伸长脖子去阅读长标签,也可以清楚地定义你所有数据之间的关系。

当处理具有长名称的多个类别时,使用水平图形来提高可读性。

注意不要让图表上的信息过多。二十行,虽然显示了广泛的数据,但很难阅读,需要时间让你的观众理解,当他们真正应该看一眼就明白的时候。

此外,为了最大程度的方便和可读性,不要使用饼状图。在统计学家中,饼状图通常包含有问题的数据,很难解释。如果饼状图是你的最佳选择,不要使用超过七个楔形 T21,否则你将很难辨别数据中的差异。

颜色

将您的信息添加到您选择的图表中后,是时候确保强调您希望受众注意到的数据了。有了一些特定的颜色选择,很容易让你的信息脱颖而出,或者让它迷失在人群中。

确保你使用强烈的颜色对比。最简单的色彩对比就是黑白。在白色背景上添加高度饱和的颜色,如蓝色,将真正使您的数据流行。然而,并不是所有的颜色都能很好地搭配,所以要小心。例如,白色上的黄色和黑色上的海军蓝分别很难看到。

通过颜色强调你最重要的数据。例如,在线图中,将有价值的线涂成彩色,而不太重要的信息涂成灰色。在条形图中,使最大数量成为最亮的颜色,随后每个类别的饱和度越来越低。像这样的选择真的可以把注意力吸引到你想要的地方。

坚持使用几种颜色,用对比突出重要信息。

不要一起使用超过六种颜色。太多的颜色意味着相似的色调会出现,像蓝色和绿色,这可能很难区分。此外,颜色越浅,越难看到。太多的颜色就像有太多的数据。令人困惑和分心。

另外,不要用红色和绿色或者橙色和绿色在同一个图表上做比较。大约 10%的男性是色盲,红色/绿色是最常见的色盲。橙色接近红色,使这些颜色完全无法分辨。为了使您的图表更容易被读者理解,请不惜一切代价避免使用这些颜色组合。

特殊效果

选择好图表、数据可读并选择好颜色后,是时候润色图表了。添加一些收尾工作的简单方法是在图表中添加特殊效果。无论是动画还是文字效果,都可以真正增加你的视觉内容。然而,如果做得不好,结果可能达不到预期。

在处理特效时,使用简单动画。一点点的移动会抓住你的观众的注意力,把他们吸引到你的图表上。在图表介绍给观众后,快速简单的动画(如擦拭动作)也是揭示相关数据的好方法。

保持动画图表简单。使用 motion 将注意力吸引到数据中的特定值和趋势。

尽管特效会对你的图表产生负面影响,所以不要过度。图表上的每一条新信息都有大的动画会分散你对信息的注意力,反而会把注意力吸引到跳动的文本和旋转的条形图上。经常在饼图上使用的分离效果也进一步降低了它们的可读性。

****也不要使用 3D 效果,尤其是在条形图中。通过使条形看起来像立方体,顶部变得模糊不清,很难辨别数据顶部真正的终点。是立方体的正面还是背面?通过完全远离 3D 效果来避免观众的困惑。

收尾

当你完成你的图表时,再看一遍以检查你可能遗漏的错误是很重要的。这个反思点是一个很好的机会来确保你只做了该做的而避免了所有不该做的**。纵观全局,你就能发现哪些小部分不太合适。你的所有元素一起工作吗?你的数据可读吗?有没有什么东西把你的注意力从你想要的地方引开了?**

****做斜视测试确保你的图表整体有效。看着你的图表,眯眼直到所有的文字和数字都模糊了。你还明白你的图表的目的吗?例如,你能根据颜色和数量判断出一个条形图正在比较不同的单位吗?或者你能看到你的折线图的起伏变化吗?如果没有,确定什么正在丢失,并回头强调它。

进行斜视测试,看看你的图表是否能被毫不费力地解读。

一旦你觉得一切都是理所应当的,就去问别人的意见。同事和朋友可以从你可能错过的新角度提供见解。确保你的图表在第一次看到它的观众面前有效的最好方法是把它展示给一个从未看过它的人。

无论你做什么样的修改,确保你在做最后的编辑时不要牺牲重要的数据。只要它有助于你的图表的总体目标,保持它。如果它不是你最有价值的信息,而且你觉得它把你的注意力从你想要的地方引开了,考虑把它的颜色弄暗一点,甚至是灰色。这将把它推到后台,让你的真实数据闪闪发光。****

简而言之,制作图表时要记住的注意事项有:

待办事项:

  • 使用适当的图表,包括水平条形图
  • 使用全轴
  • 保持简单,尤其是动画,并确保有斜视测试
  • 使用颜色来对比和突出显示数据
  • 征求别人的意见

不要:

  • 在比较过程中更改图表样式
  • 用不重要的数据、超过六种颜色或太多动画使图表超载
  • 使用饼图,尤其是有七个以上扇区的饼图
  • 使用相似颜色的组合(红色/橙色和绿色,蓝色和绿色)
  • 牺牲重要数据

本帖 原版 最早出现在 Visme 的视觉学习中心

数据是业务转型的驱动力

原文:https://towardsdatascience.com/the-drivers-of-ai-business-transformation-941c5c4bc685?source=collection_archive---------2-----------------------

Photo by Headway on Unsplash

在数字化转型的时代,人工智能将改变所有类型的组织,从驾驶汽车(计算机视觉技术)开始,然后是制造业(吴恩达刚刚宣布他的新公司利用人工智能改变制造业)。随着数据科学作为现代组织的核心战略的使用,这种变化将使新的创新业务模式和新的项目管理方法成为可能。

我想在这篇文章中展示这种新的数字化转型的一些主要驱动力,以及对商业模式、社会和就业的潜在影响。在数据驱动的管理决策为组织提供动力的背景下,面对新的敏捷方法,旧的方法(高度官僚化、严格的范围和时间表)变得过时,组织应该尽快适应这种工资,而不失去他们的身份。

1。以客户为中心的生产计划。

数字化转型的主轴是将核心业务战略的重要性转移到客户,而不再是产品、能力或市场。商业应该以客户为中心,这是亚马逊在如此不同的领域取得成功的主要理念。

以客户为中心意味着产品是按需的、可定制的、可连接的和可共享的。为了实现这一点,客户应该被视为价值创造者。公司正在认识到,每个客户都是大客户网络的一部分,而不是一个孤立的实体。新组织的目标是更接近客户的期望并预测他们,这可以通过在社交网络或应用程序中保持实时互动来实现,实体可以在社交网络或应用程序中研究客户的行为。

该客户网络需要持续访问产品,这意味着全渠道体验(即从桌面、餐桌、移动设备、物联网无缝迁移),这意味着数据在云中,可从每个设备访问,并且服务可以按需提供。客户应该参与公司,例如公司使用产品演示或讲故事让客户觉得他总是在做正确的选择。

顾客也应该能够定制他想要的产品。推荐引擎对于给顾客提供他想要什么的建议是非常有用的。个性化的界面、信息和内容将使经典品牌和新兴品牌有所不同。因此,接触、参与和定制是使客户与公司建立联系的必要条件。有几个策略可以创造与客户的融洽关系:社交倾听、社交客户服务、向网络寻求想法和内容,甚至是主持一个社区(例如,IOS 或 Androids 开发者)

让客户成为公司成功之旅的一部分的最后一步,是让他协作开发他想要的产品。从被动贡献转向主动贡献,例如通过开放合作平台、众筹或竞争。

例如,大多数金融机构开始了推动内部生产力的数字化之旅,主要关注提高效率和降低成本。然而,这没有考虑到日益复杂的客户对丰富、直观或超个性化客户体验的期望。该机构需要改造其前端和后端系统,为客户提供丰富的选择和巨大的价值,并在近乎实时的环境中安全交付。

2。平台:赢家通吃。

Source: Going Digital, the banking transformation roadmap

平台商业模式的兴起是因为它是一种通过直接互动创造价值的方式。由于广泛的迭代,它接触到不同类型的客户:网络中有给予者和接受者(例如卖家和买家)。在这些平台上,网络效应会产生更大的反响,而且很容易升级。他们也有附带的好处,如按需流程以及速度和信任的产生(见区块链)。

一个地方有所有的服务,不需要中介。一个主要的配送中心可以在竞争中领先,甚至在不同的竞争者之间合作(竞合)。此外,随着传统市场边界的扭曲,不对称的竞争对手出现了,例如在线书商(亚马逊)成为 IBM 等传统 IT 公司的竞争对手,或者谷歌等搜索引擎在网络服务领域的竞争对手。

但这种新业务的主要后果可以在“赢者通吃”中重现。由于轻资产、易于升级、经济高效和梅特卡夫定律。赢家平台可能是市场的帕累托头:通过降低边际成本,数字化增加了积极的规模经济,有利于集中生产。集中生产意味着市场落入少数人手中,导致少数人主导的寡头垄断甚至垄断结构。

source: Klockner presentation of digital transformation This is an example of a company that reinvents itself from a linear supply chain steel manufacturing to a digital platform of metal distribution

这导致了所谓的“超级明星”经济。这些经济体的特点是就业减少,资本资产减少,不平等加剧,大企业和小企业之间的差距越来越大,国家内部和国家之间的收入不平等越来越大。数字商品和服务的最低分销成本进一步提高了集中化程度。一旦新的东西被创造出来,只需要生产(组成、书写或计算)该商品的一个数字副本,通过互联网以接近零的边际成本复制和交付,然后复制、3D 打印等,来满足全球需求。

Stan shish smiling curve

新公司将需要移动到斯坦希什微笑曲线的最末端,才能继续创造价值,否则他们将截然不同。

3。数据是关键资产

捕捉新技术全部潜力的能力始于一个能够了解、预测并快速响应客户需求的组织,这也是数据成为公司重要资产的原因之一*“一个机构或行业越依赖信息作为其核心产品,变革就越大、越彻底”* ( 克莱·舍基)。由于知识工作和认知过程的性质,专家预计数字化和大数据分析对基于知识的商业模式和认知工作者的冲击与非知识商业模式和体力工作者一样大,甚至可能更快。数字化和大数据分析与通常由公司和知识工人执行的自主信息处理任务相关联——他们的高利润和工资提供了经济激励,甚至加速了替代。

数据是知识的原材料。有经济学家说:数据是新石油。今天,我们生活在一个非结构化数据爆炸的时代,明天会更大。用户参与其中,他们也参与其中,交换数据,创造数据;此外,他们的目标是创建数据,因此围绕数据创建的交换协议将呈指数级增长(例如区块链智能合同)。

Source: Going Digital, the banking transformation roadmap

数据是新的商业价值,它可以揭示洞察力,帮助最佳定位,在正确的上下文中个性化内容。简而言之,是燃料,使以客户为中心的战略暴露如下。因此,公司需要基于以下方面的数据策略:收集不同类型的数据,保证数据质量,在决策中使用数据(数据驱动的管理决策取代了过去成为标准的层级决策或“最高薪酬人员的意见”)。企业可以在正确的时间向正确的人提出正确的提议,将不同仓库的数据结合起来,这是可能的,因为云提供了灵活的存储和价格。

4。创新&新价值产生

一个“商业模式描述了一个组织如何创造、传递和获取价值的基本原理”它抓住了任何公司的核心商业逻辑。在实践中,数字化和大数据分析挑战了许多传统行业的商业模式。数字化转型是一种文化转变。新数字化的客户需要新的技能。比如做快速实验或者模拟。

这种转变意味着不断改变在几个部门工作的人的习惯、信念、激励和经验。例如,将 IT 和营销团队结合起来,可以产生具体的用途,以尽快交付新的服务。创新生态系统的概念和出现是数字时代交付价值的关键。为此,公司需要组织灵活性,通过在云中集成灵活的平台来缩短上市时间。

Source: Going Digital, the banking transformation roadmap

这篇文章的灵感特别来自大卫·罗杰斯的《数字化转型手册》。这份报告麻省理工学院传统业务的数字化转型,这份卡格米尼的十亿机构路线图,这份克罗克纳&公司的数字化转型

感谢阅读,这是一个长期研究的测试版。我将感谢反馈。

创建虚拟变量的虚拟指南

原文:https://towardsdatascience.com/the-dummys-guide-to-creating-dummy-variables-f21faddb1d40?source=collection_archive---------1-----------------------

作为一个数学人,我试图量化日常生活中的一切,所以当我看到一个有很多定性变量的数据集时,我的大脑自然会试图量化它们。幸运的是,有一个漂亮、简洁的函数可以帮助我们做到这一点!

作为数据科学领域的新手,熊猫的发现改变了我的生活。在熊猫和 scikit learn 之间,我认为每个人都可以征服世界(或者至少是数据科学世界)。熊猫有一个功能,可以把一个分类变量变成一系列的 0 和 1,这使得它们更容易量化和比较。

我开始加载我从“http://data.princeton.edu/wws509/datasets/#salary”网站上获得的数据。这是一个非常小的数据集,由一所小型大学的 52 名教授的工资数据组成,按性别、教授级别、最高学位和服务年限与工资进行分类。我在这个例子中使用了这个数据集,因为它很短,并且有一些分类变量。

sx= sex, rk = rank, yr = year in current rank, dg= degree, yd = years since earning highest degree, sl = salary

因为我在使用 pandas 中加载了数据,所以我使用 pandas 函数 pd.get_dummies 作为我的第一个分类变量 sex。因为这个变量只有两个答案选择:男性和女性(不是最进步的数据集,但它来自 1985 年)。pd.get_dummies 创建一个由 0 和 1 组成的新数据帧。在这种情况下,根据教授的性别,数据帧将有一个 1。

由于我们已经创建了一个全新的数据帧,为了将其与原始数据帧进行比较,我们需要合并或连接它们,以便正确地使用它们。在创建虚拟变量的过程中,我们实际上为原始数据集创建了新的列。新旧数据集没有任何共同的列,所以将它们连接起来是最有意义的(尽管我将两种方式都经历一遍)。

我选择将我的虚拟变量放在我的数据帧的右边,所以当我使用 pd.concat(连接函数)时,先放我的数据帧,然后放我声明的虚拟变量。因为它们是列,所以我在 axis=1 上连接它们。

合并这些数据帧稍微困难一些,因为没有重叠的列。但是,可以做到!

要合并一个索引(我们最左边的列),我们所要做的就是设置我们的 left_index=True 和 right_index=True!

只需两行代码,我们就可以将性别变量与其他数值列进行比较了!

邓宁-克鲁格效应:当数据科学成为数据“叹息”

原文:https://towardsdatascience.com/the-dunning-kruger-effect-when-data-science-becomes-data-sigh-ence-fb82ef20e6eb?source=collection_archive---------21-----------------------

Source: Pixabay

你刚刚读了哈佛大学关于数据科学是 21 世纪最性感的工作的文章,你对这个领域非常感兴趣。读了几篇文章后,你会发现这应该很容易。毕竟在大学里,你的数学得了 A,统计学得了 B,而且你小时候就已经学会了编程的基础。

你花了几周时间努力,甚至在 10 天内完成了 10 周课程的 80%。当你接近课程结束时,你意识到比你想象的还要多,在 10 分制中,你给自己打了 1.5 分。几周后,你会听说获得第一份数据科学工作有多难。当你突然意识到数据科学是一个广阔且不断发展的领域时,沮丧开始出现,所有最初的兴奋都消失了。现在数据科学已经变成数据“叹息”了。

source: giphy.com

欢迎来到现实世界,在这里没有什么值得做的事情是容易的

以上称为 邓宁-克鲁格效应

简单来说,邓宁-克鲁格效应:

如果你对某一领域知之甚少,你可能会高估自己的技能

许多有抱负的数据科学家在某些时候都会遇到这种情况,这真的很扫兴。事实是没有人说这将是容易的,所以振作起来,振作起来。

发生这种情况时,请记住以下几点…

调整自己的节奏并设定目标 —学习数据科学是一场马拉松,而不是 100 米短跑。所以放松点,给自己留点空间。这意味着你需要避免不知所措,调整你的学习节奏。为不同的学习点设定目标,并坚持学习。数据科学是一个广阔的、不断发展的领域,试图同时学习许多东西是非常容易的。不要陷入这个陷阱,因为你不太可能通过这种方式获得良好的基础。

当你开始的时候,避免盲目跟风,保持专注,打好坚实的基础。因为每个人都在谈论深度学习并不意味着你已经准备好了。先把重点放在打好基础,理解基本概念上。

庆祝你的里程碑:在每一个里程碑上给自己一些信任;记住你已经走了很长的路。庆祝这些小小的进步。你的第一门课程,比赛甚至文章,你都需要庆祝它们。犒劳一下自己,拍拍自己的背。这听起来可能微不足道,但它会给人一种进步的感觉,并在困难的时候让你坚持下去。欢迎在在线平台上分享你的进步。你会惊讶于你会得到多少鼓励和建议。

加入一个团体:俗话说“独自一人,我们能做的很少;在数据科学领域,我们可以一起做很多事情。人是你学习旅程的重要组成部分。导师和伙伴会帮助你走得更远。加入社区,参加聚会,关注数据科学专家,与人交流。随着您在数据科学方面的进步,您会发现这非常有帮助。停止尝试重新发明轮子,寻求帮助。有时候,自己解决问题和犯错误是件好事,但在其他时候,寻求帮助才是明智的。

这个社区不仅会在帮助你学习方面发挥巨大的作用,而且会在你觉得没有任何意义的时候给你动力和鼓励。

分享你学到的东西:分享有助于加深你的理解。这是你学习旅程的关键部分。费曼技巧是一个值得采用的好技巧。理查德·费曼是一位理论物理学家,他具有用简单的术语解释非常复杂的科学课题的非凡技能。内容如下:

第一步:确定一个你觉得难以理解的领域/主题。了解更多关于这方面的信息。

第二步:用非常简单的术语向朋友、同事或团体解释这个话题。在解释的时候,确保你使用相关的例子来展示它是如何工作的。

第三步:在第二步之后,找出你的知识差距和灰色地带。然后重复这些步骤。

这种技巧有助于促进你的学习和理解。它还能让你轻松地用非技术人员也能理解的简单方式解释概念。对于数据科学家来说,这是一项关键技能,因为您需要定期与决策者交流见解。

此外,这项技术还能帮助你发现自己的弱点,这在这个过程中非常重要。没有认识到自己的弱点,你可能永远无法克服它们。

疯狂练习:

数据科学是一个应用领域。这意味着一件事:你需要疯狂地练习。通过花一些时间练习你所学的概念,你会对自己有很大的好处。摆弄数据或从事个人项目;你可能会从自己的错误中学到很多。除非你练习,否则你的学习是不完整的。通过做,你会学到很多东西。

结论

总之,记住学习任何新事物都需要很多牺牲。这可能意味着错过有趣的周末和工作到很晚。最后,一定会物有所值。成为任何事情的专家都需要时间。一夜成功是极不可能的,所以放松。

你已经开始是一件好事。然而,你需要保持承诺。每个人都有高点和低点,但重要的是你继续前进的能力。

我将引用老子的一句话来结束我的发言:

“千里之行始于足下”

继续前进…

祝您好运

参考文献

https://www . ava research . com/files/unskilledandunawareofit . pdf

[## 想成为数据科学家?试试费曼技术。

成为伟大的解释者成为伟大的数据科学家

towardsdatascience.com](/want-to-become-a-data-scientist-try-feynman-technique-2ea010da1c54) [## 邓宁-克鲁格效应

人们高估了他们不擅长的技能。有技能的人低估了自己的能力。

博客. bretthard.in](https://blog.bretthard.in/the-dunning-kruger-effect-2a092cb33359) [## 我作为数据科学家的弱点

不认识到我们的弱点,我们将永远无法克服它们

towardsdatascience.com](/my-weaknesses-as-a-data-scientist-1310dab9f566) [## 你如何知道自己是否真的有能力,或者是否受到了邓宁-克鲁格效应的影响?

回答(第 1 题,共 9 题):上图是对邓宁-克鲁格效应各阶段的概括描述。这只是一个…

www.quora.com](https://www.quora.com/How-would-you-know-if-you-are-actually-competent-or-suffering-from-the-Dunning%E2%80%93Kruger-effect) [## 我作为数据科学家的弱点

不认识到我们的弱点,我们将永远无法克服它们

towardsdatascience.com](/my-weaknesses-as-a-data-scientist-1310dab9f566)

数据角色和团队的动态

原文:https://towardsdatascience.com/the-dynamics-of-data-roles-teams-6c450b27e59e?source=collection_archive---------2-----------------------

数据职业”中出现的新角色的职责和头衔不断让我感到惊讶。不可否认,这是一个相当模糊的概念,我怀疑从业者对这个空间的组成有不同的看法。然而,在这个领域有一些趋势是从业者也同意的。数据比以往任何时候都更加受到组织的重视,在专门的“数据人”、投资和技术方面也出现了相应的增长。

出于方便和可读性的考虑,我将按照技术革命——那些影响了重大变化的技术革命——来简单介绍一下数据角色,尤其是那些在未来会不断发展的数据角色。此外,我最近写了一篇关于 数据分析的演变 的文章,这有助于为本文收集更好的上下文。

作为一个业余博客写手,这显然是一个视角,对他们昏昏欲睡的眼睛来说可能是一个长期阅读。只有一个建议:喝杯咖啡。

商业智能角色

的确如此,“BI”没有资格在 2018 年与科技生态系统中的时髦流行语竞争,也不会让我们这一代懂数据的人感到愉悦。ETL 工具&策略不再使用了吗?BI 的范围是否被大数据&数据科学方法的大量应用所掩盖??不要!!

How traditional BI roles were structured in-accordance with the
business model of the organisation. Source: Microsoft Wiki

在过去的一两年里,商业智能有了相当大的下降。然而,我不会说 BI 死了,因为它的应用对大企业来说非常关键。像 BI 分析师、数据架构师、ETL 开发人员、DW 工程师、BIDW 管理员这样的角色只会变得更加重要,强调对市场领先工具&技术的额外关注,而不是当前领域中的多面手角色。

Scope of Business Intelligence techniques employed in 2018.
Source: Check out infographics & vector designs on DepositPhotos

根据最近的一项大众智慧商业智能市场研究,商务智能将继续提供有竞争力的工作薪酬,并在市场的某些领域占据主导地位。以下是 2018 年 it 的一些关键数字:

  • 执行管理、运营和销售:推动 BI 采用的 3 个领域。
  • 仪表板、报告、终端用户自助服务、高级可视化和数据仓库:对 BI 具有战略意义的 5 项技术和计划。
  • 员工不超过 100 人的小企业拥有最高的 BI 普及率。
  • 50%的供应商提供永久内部许可和云订阅。
  • 不到 15%的受访组织有首席数据官。

如果你仍然有不同意见,我推荐你阅读全文:商业智能状况,2018

大数据和数据科学角色

在我们深入探讨当前角色之前,让我们先回顾一下这一切是如何开始的,从哪里开始的。我的想法是在传统的明文定义上用一个讲故事的叙述来展示这些角色——后者在互联网上很容易获得。此外,行业中的每一个新浪潮都会产生令人困惑的流行语,虚假的演绎&超现实主义的规定(至少可以说是满嘴的)。

变化

创造“大数据”是为了区别于小数据,因为它不是纯粹由公司的交易系统产生的。它还表示,预测分析提供了更好的数据趋势,而不是基于事实的理解,以超越决策时的直觉。如果 dimensions & analytics 还不够合理的话,这个阶段欢迎使用社区驱动的“开源”工具,而不是高价的许可证。

我通常避免在我的帖子中引用工具的名称,但是如果不提到 Apache Hadoop 就很难描述这场革命。技术栈&可扩展项目、函数式编程范例(可扩展、并发&分布式系统)、noSQL 的兴起、作业调度&集群资源管理、拖放 ETL 的不断变化的方面以及更好的数据建模技术——所有这些都是由 Hadoop 带来的,但它最终强调了最后一点——代码 是软件的最佳抽象。此外,它还引入了一个概念——通常是广义的——让定制架构为未来与数据科学&机器学习的集成做好准备。

从开发者的角度来看,这意味着你不一定要为技术巨头工作来开发新的颠覆性项目。你有社区的支持,有像 Github 这样的新兴合作平台来展示你的作品。

Hierarchy of roles in Big Data & Analytics-driven companies.

从组织的角度来看,软件工程师(java 开发人员)、数据仓库工程师(BI/ETL 开发人员、数据架构师)、基础设施管理员(DBA、Linux SAs)探索了更好的头衔,因为大数据工程师、Hadoop 开发人员、Hadoop 架构师、大数据支持工程师开始在就业市场上蓬勃发展。双重角色的地位下降了,业务线用户和数据人员使用相同工具的时代已经结束了。

BI roles gradually moving out of the circle of Big Data teams.
Source: DataFlair

在行业层面,它的影响最大——因为不仅仅是科技公司和网络公司可以从大数据分析中创造产品和服务——它几乎是行业中的每家公司

融合

由于使用大数据和数据科学策略的需求不断上升,科技行业突然出现了分化。因此,现场角色被分为三类:软件工程(前端后端工程师、 Web 开发人员、基础设施管理员、中间件专家、iOS/Android 开发人员)、数据工程(强大的数据背景,如 ETL 开发人员、DWH 架构师、BI 分析师、Hadoop 工程师、DBA)并欢迎第三组被视为下一代的个人

Venn Diagram showing tools & techniques under SE vs DE vs DS domains.
Source: Ryan Swanstrom, Data Science 101

据我所知,这种分类产生于一个重大的转变,其积极因素被小规模公司(< 50 employees) like emerging startups, research-facilities as well as large-scale enterprises (> 1000 名员工)如电信、电子商务、社交媒体等充分利用。初创公司可以自由地将多种角色合并为一个角色,并鼓励多学科的增长机会,而主流巨头在不同部门雇用不同的角色方面没有问题,从而增加了产生更多业务的领域。

现在拥有一家中型(或 SMB)公司的企业家,他们努力获得商业利润——在各自的市场上与大公司竞争——可以说受影响最大。最初的成功——通过一系列融资或风险投资的支持——使他们的数量得以扩大(50-300 多名员工)。他们匆忙进入无限期雇佣,多余的角色,糟糕的决策策略。最终,在季度时间表下留在市场的持续压力迫使前所未有的裁员,股票分配损失,甚至导致早期清算。一些精通技术的投资者(我想称他们为守护天使)提供并购援助,但是这个行业第一次看到了吸收角色的负面影响。

重叠部分

与此同时,不仅仅是公司在演变数据角色方面遇到了困难。这个时代见证了越来越多的数据科学爱好者(学术&经验丰富)走出舒适的洞穴&扩展他们的技能组合。为什么不呢,这些申请者(数学家、工程师、博士、分析师、毕业生)都有权利申请 21 世纪收入最高的工作之一。出现了受人尊敬的大学教授和慈善家,带着他们版本的理想候选人,这只会引起偏见,却无法阻止暴民。

带有数据前缀的头衔有助于早期区分任务相似的角色。其目的是确定技能范围和利用合适的潜力。数据分析师避开业务,将他们的目光投向统计&工程,而数据架构师保持他们的深度——专注于发布模型(不要与 ML 混淆)、数据库设计、治理以及他们标志性的政治中立态度。

Radar chart explaining overlap of skills between Data-driven roles.
Ignore Mad Skillz as it implies Natural Abilities. Source:edX

企业开始通过围绕其前提利用机器学习培养规定性分析的能力来收集更多的理解。他们开始不仅在传统意义上竞争分析——通过改善内部业务决策——而且通过创造更有价值的产品和服务。实现具体目标的纯粹需求(或贪婪)——比上一季度的结果有所改善——成比例地带来了角色和职责的开销。因此,像**数据科学家、**这样一个充满希望但又充满挑战的职位也需要一个跨团队的核心人物——任何与数据相关的事情的日常联系人。对于许多背负如此沉重负担的人的压力和疲劳,人们谈得不多。如果一个有这种能力的人把大部分时间花在分析上,他们也会设法找到时间为自己追求更好的机会。这里有一个在 KDnuggets 上的讽刺来支持我的观点。

权衡取舍

两大问题浮出水面:数据科学是下一个泡沫吗?我的回答是:没有,但“*数据科学家”*的头衔可能会成为一个头衔。一个教科书式的需求和供给问题——每个有抱负的人都想得到公平份额的商品,但只有少数人被证明值得拥有。嗯,有点困惑!—你如何应对一名应届毕业生申请这个职位,或者当你的数据科学家可能会离开,留给你的是一群“自称”的人来敲你的门时,你该怎么办?

第二,直接从网站、API、社交媒体或互联网等来源获取数据;对软件编程语言的需求&快速高效地实现这一需求的能力——不能妥协。“不是所有的数据科学家都有很好的软件基础”或者“为什么在数据科学的热潮中,软件工程的概念被忽视了?”。公司很快意识到,只有角色的重新分配才能使这种倾向正常化,因为他们指望更广泛的 工程师**——**来大力支持他们的数据科学家,并在不同的实体角色之间找到平衡。

软件工程师,似乎有数据科学&机器学习的诀窍,站出来帮助解决这一困境,并加强了数据工程师俱乐部。当那些实践核心 web 编程&栈驱动野心的人转向更大的挑战:全栈工程师

Full-Stack by past roles (L) & by tech-stack areas (R).

双赢的局面:数据科学家得到了一个可靠的助手,他松了一口气(对他们“王冠”的夸大宣传降低了),并且一个同样胜任的角色即将挑战他们。这种勾结不仅让那些渴望的狂热分子转了起来,还打开了另一扇门,使数据工程成为当今最复杂的学科之一。这位现代的数据工程师补充了其他所有的角色,是每个公司必备的勤杂工,实际上是如今初创公司的第一批雇员

An Infographic-take on Data Engineers and Data Scientists.
Source: Read Full Post on DE vs DS, by Karlijn Willems

通过平衡相互不同的角色进行的赌博(点击的变通办法)获得了完美的回报,但技术行业知道他们不能承受另一次挫折,必须准备好迎接日益被接受的人工智能。

该决议

不可避免地,公司发现了他们组织结构中的缺陷:职位、优先权和能力——并接受了数据驱动团队 。主要的焦点是角色区分、分工、避免任务冲突、适当的合作规则。基于角色的领导者在这样的团队中领导各自的单位的扩展示例是:首席数据科学家& 工程领导。

An early look of a well-structured Data Science team under the same roof. Source: DataCamp Blog Community

今天,一个完美的数据科学团队是一个神话,或者是一个引起激烈争论的话题。公司对他们团队的期望是像一群超级英雄(《复仇者联盟》)*——*他们在许多场合悲惨失败的是任命一个为这些团队提供背景的人(尼克·弗瑞)。这就是首席数据官强大存在的地方。随着数据成为不可或缺的商业战略,CDO 在组织中扮演着越来越重要的角色。《福布斯》的一项调查显示,2018 年,超过 50%的 CDO 可能会直接向 CEO 汇报。他们一定会在塑造企业计划方面扮演更积极的角色。

通常,当我看到包含“高级英语技能”或“仅限本土候选人”的职位描述时,我会感到失望。因此,我每次都会主动质疑(或搜索)这样的招聘海报(我很享受它们明显的停顿)。语言不应被视为障碍,而应被用作团结团队的强大源泉。2018 年最能说明我立场的例子,确实是语言本身: Python 。创始人(CEO&CDO)必须在他们的团队内部进行这些小交流,最重要的是——他们的第一个焦点——人才需求团队团队**。**

How Python brings a team of diversified role-types together.
Source: ActiveWizards

如今,人力资源协调员、招聘人员、外包猎头都可以访问大量的数据资源(Medium、Datacamp)和数据友好型平台(LinkedIn Recruiter、Glassdoor ),以完善他们对改善招聘的搜索;因此使得他们的角色甚至是数据驱动的。

机器学习和人工智能驱动的角色

也许机器学习最引人注目的方面是它看似无限的适用性。已经有那么多领域被 ML 和现在的 AI 冲击了,包括教育金融等等。机器学习技术已经被应用到医疗保健领域的关键领域,影响了从减少医疗变化的努力医疗扫描分析的方方面面

对于许多公司来说,他们的数据(或数据分析平台)就是他们的产品。在这种情况下,正在进行的数据分析或机器学习可能会非常激烈。对于有正式的数学、统计学或物理学背景并希望继续走学术道路的人来说,这可能是理想的情况。

“机器学习工程师通常更专注于生产伟大的数据驱动产品,而不是回答公司的运营问题。”

New addition to the DataScience team working on ML. Source:Udacity

公司变得更加令人鼓舞,并一直在寻找机器学习工程师:各年龄段(学术实习生到研究科学家)的开明候选人。从 LinkedIn、Medium 和 Github 可以看出,社交媒体一代也比以前更受欢迎。

Bird’s-Eye view of multiple ML-roles in AI firms. Source:Udacity

人工智能驱动的公司成功实现了智能机器(如聊天机器人),已经比其他公司领先一步。由软件、应用&核心赋予的角色是一个明确的标志——他们对他们的产品开发&服务提供是认真的。因为在这个问题上没有任何关于名字或资历的概括,他们有充分的自由在未来即兴创作 AI 头衔

包含角色

有许多角色可以在日常工作中补充数据驱动团队。无论他们属于哪个团队,他们都是组织中不可或缺的一员。你可能会奇怪为什么我没有早点提到它们。老实说,我对此表示怀疑,原因如下:

  • 我对这些概况及其范围的专业知识有限。
  • 他们主要不属于数据驱动角色的范畴。
  • 他们的领域多样性允许他们跨不同的团队运作。

持刀暴徒到来之前,让我试着解释一下。

  • **平面设计师:**各种意义上的创意总监。艺术、科学、编程、想法和想象力的完整组合,具有无限的能力。他们以敢于直言的无畏态度增加价值。我个人的最爱。
  • **决策者:**一个经常被误解和忽视的角色。尤其是在特定领域的初创公司,在雇佣经过博士培训的数据科学家之前,要确保你有一个了解决策艺术科学的决策者。
  • 站点可靠性工程师:大致分为两类:“业务能力团队”和“敏捷运营团队”。数据架构师&工程师可以协调、学习和实施基于云(IaaS、PaaS、SaaS)的配置、容器、微服务部署&虚拟化等任务。然而, DataOps 是一个新的平台,允许企业内部持续的数据流。
  • 云架构师:通常担任咨询角色的技术专家(像他们的云服务一样按小时收费)。同样,如果您的数据工程师熟悉云概念或认证助理/专家,您可以选择不聘用他们。
  • 项目&交付经理— 一些数据科学&分析公司仍然不得不屈服于敏捷& Scrum 方法论的旧规范。在开始咨询客户以协调产品销售和服务之前,他们需要经验丰富的经理来确保 PoC(概念验证)时间表&资源得到合理分配。
  • 网络&网络安全工程师:通常被视为内部团队,但在所有上述提到的团队中,他们很快将成为数据驱动团队不可或缺的一部分。随着数据安全在 2018 年已经显示出威胁性的担忧,这些角色已经被认识到“至关重要”,因为大多数公司每天都在网上运营。

离别的思绪

当然,在工具方面,技术变得比以往任何时候都更容易使用和直观。例如,在大多数清理、建模、报告和可视化工具中有一系列适配器,这意味着加载数据本身不再是一个非常重要的需求。然而,这也鼓励了某种程度上无处不在的数据视图——它应该只需最少的努力就能工作。一个不祥的风险是,越来越少的时间将被用于纠正基本面。

2018-2019 年值得关注的技术和行业:

  • 渐进式网络应用(PWAs)——移动和网络应用的混合体。
  • 区块链和金融科技-元模型构建,可靠的交易和信用评分。
  • 医疗保健—通过医学成像(计算机视觉和 ML)进行诊断。
  • AR/VR-体育分析、名片(图像跟踪)、现实游戏(Hado)。
  • 人工智能语音助手,更智能的聊天机器人集成。
  • 智能供应链——数字双胞胎(物联网传感器)。
  • 5G——大数据、移动云计算、可扩展物联网和网络功能虚拟化(NFV)。
  • 3D 打印——预制效率、缺陷检测、预测性 ML 维护。
  • 黑暗数据——尚未以数字格式提供的信息。
  • 量子计算——将数据处理时间缩短至几分之一。

最后,在工作方面,很明显,这些角色将无法跟上技术的发展。抓住下一个机会会很困难。根据许多就业顾问的说法,有两种方法可以保持工作的稳定性:成为一个领域的专家,在一个稳定的公司中坚持自己的立场,或者通过识别与技术趋势一致的新领域来寻求具有挑战性的角色。作为一名数据工程师,我遵循一种混合方法——在职业生涯和个人抱负之间保持学习纪律——这实际上允许我在任何技术驱动的行业工作。如果有任何安慰的话,我肯定知道我要对我未来的成功和失败负责。

“永远不要让别人告诉你,你不能做一些事情。如果你有梦想,就要捍卫它。人们自己做不到一些事情,他们想告诉你你也做不到。你想要什么,就去得到它。句号。”

对海蓓娜斯的追求

见原帖发表在:苹果!=橘子

要想被聘为数据科学家,不要人云亦云

原文:https://towardsdatascience.com/the-economics-of-getting-hired-as-a-data-scientist-e3882933b43c?source=collection_archive---------0-----------------------

向下滚动查看这篇文章的音频版本

我还记得我哥哥决定卖掉他的比特币的那一刻。那是 2017 年,我们在星巴克。一位中年妇女向我们走来,她正在向任何愿意接受的人分发小册子。顶部用粗体字写着“比特币:提前退休之路”。

我很好奇,所以我问她对加密货币市场的看法,但事实证明,除了比特币,她不知道其他加密货币。以太坊?“没听说过。”莱特币?“那是廉价版的比特币吧?”

现在,作为一个经验法则,当甚至当地星巴克的无知的中年女士向你推销最新的科技趋势时,你可能接近炒作的顶峰。或者,如果你喜欢,一个“泡沫”。

当然,这不是一个新的观察。每个人都同意,当谈到投资时,如果你在做其他人都在做的事情,你不太可能看到任何回报。然而奇怪的是,当谈到投资于自己时,人们没有运用同样的推理。

假设你想被聘为数据科学家。如果你正在做所有标准的“我想成为一名数据科学家”的事情,那么这意味着你不应该指望得到你梦想的工作。市场目前充满了初级人才,因此,有抱负的数据科学家不太可能受到太多关注。所以如果你想避免中间结果,为什么要做中间的事情呢?

问题是,大多数人在开始他们的数据科学之旅时并不这样想。通过我在sharpes minds的工作,我与数百名有抱负的数据科学家交谈过,其中大约 80%的人都有大致相同的经历:

  1. 首先,他们学会了诀窍(Python + sklearn + Pandas +也许一些 SQL 什么的)
  2. 然后,他们选择了某种千篇一律的 MOOC
  3. 他们读了一些职位描述,担心自己不具备所需的条件
  4. 也许参加另一个 MOOC,也许开始通过就业委员会申请工作
  5. 听不到任何反馈(或者最多炸几个采访)
  6. 感到沮丧,考虑读硕士,申请更多的工作
  7. 到了一个决定点:我是否重复#2 到#7 直到不同的事情发生?

如果这种情况发生在你身上,很可能你也处在自我提升的泡沫中:你在做其他人都在做的事情,但期待不同的结果。你需要做的第一件事就是停止

如果你想要高于平均水平的结果,你不能做平均水平的事情。但是为了避免做一般的事情,你需要知道一般的事情是什么。

这里有一些例子:如果你需要做 MOOC 来学习诀窍,那很好。但不要陷入 MOOC 螺旋:MOOC 几乎是为普通人设计的,所以你不会因为做得太多而成为一名优秀的候选人。同样,如果你的 GitHub 上有 4 或 5 台 Jupyter 笔记本,它们都有相同的 sklearn/Pandas/seaborn/Keras 堆栈,不要再做一个

总的来说,规则是:如果某件事因为其他人都在做而看起来是显而易见的下一步,那么最好不要做。反过来,你需要找到别人没有做的事情,并尽快去做。

那些是什么东西?根据我所看到的,我想到了 5 个:

  1. 复印纸。如果你是深度学习爱好者,这一点尤其正确。人们不这样做,因为这比获取数据集并使用简单的 ANN 或 XGBoost 进行千篇一律的分类更难。在 arXiv 上找到与你的领域相关的最有趣的论文(最好是最近的),并阅读它。了解一下。然后,可能在新的数据集上复制它。写一篇关于它的博文。
  2. 不要在自己的舒适区里安逸。如果你开始一个新项目,最好是学习一些新的框架/库/工具。如果你正在构建你的第六个 Jupyter 笔记本,以df = pd.read_csv(filename)开始,以f1 = f1_score(y_true, y_pred)结束,是时候改变你的策略了。
  3. 学习枯燥的东西。其他人没有这样做,因为没有人喜欢无聊的事情。但是,学习一个合适的 Git 流程,如何使用 Docker,如何使用 Flask 构建一个应用程序,以及如何在 AWS 或谷歌云上部署模型,这些都是公司迫切希望申请人拥有的技能,但大多数申请人都不太欣赏这些技能。
  4. 做讨厌的事。 1)提议在当地的数据科学会议上发表一篇论文。或者,至少,参加当地的数据科学会议。2)给 LinkedIn 上的人发冷冰冰的信息。尝试提前提供价值(“我刚刚注意到你网站上的一个打印错误”)。不要马上向他们要工作。让你的问题尽可能具体(“我很想在我的博客上得到你的反馈”)。你试图建立一种关系,扩大你的网络,这需要耐心。3)参加会议和网络。4)成立学习小组。
  5. 做一些看起来疯狂的事情。每个人都去 UCI 知识库,或者使用一些股票数据集(哈欠)来构建他们的项目。不要那样做。了解如何使用 web 抓取库或一些不太受欢迎的 API 来构建您自己的自定义数据集。数据很难获得,公司通常需要依靠他们的工程师来获取数据。你的目标应该是给人一种痴迷于数据科学的疯子的印象,如果这是完成工作所需要的,他会建立自己的数据集。

这些策略中的每一个都是另一种摆脱招聘者每天面对的噪音的方法。它们都不是灵丹妙药,但它们是在数据科学就业市场上获得更多吸引力并成为更有能力的数据科学家的可靠方法。

在一天结束的时候,记住当你在培养自己的技能时,你是在投资自己。这意味着适用于投资的所有经济原则在这里都适用:如果你想要一个出色的结果,你必须做出色的事情。

动漫推荐引擎的 EDA

原文:https://towardsdatascience.com/the-eda-of-an-anime-recommender-engine-45f65f76ae35?source=collection_archive---------3-----------------------

正如你从上面的图表中可以看出的,推荐一部动画可能是相当密集的,我希望建立一个基于几百万收视率的引擎来做这件事。回顾一下我上周的博客,我正在使用两个数据集构建一个动漫推荐引擎。第一个数据集包含超过 14,000 个动漫名称,正如我上周所写的,第二个数据集包含超过 100 万个评分,评分范围为 1-10,但是我发现我的 Jupyter 笔记本没有加载整个数据集,在我纠正后,我发现第二个数据集有超过 700 万个评分!

为我的项目范围清理数据

因为我主要是为流媒体服务构建引擎,所以我浏览了这些标题,以便去掉那些不会出现在流媒体服务上的标题。首先,我注意到在流派部分有几个成人标题,但是为了删除流派字段中所有带有 Hentai 的行,我必须创建虚拟变量。

Before Dummy Variables: Only 7 columns with Genre column containing multiple genres as a string

添加虚拟变量后,我的数据集从 7 列增加到了 50 列。是的,这意味着我有 43 种不同类型的动画。然后,我可以轻松地删除 Hentai 列中包含 1 的所有行,然后删除 Hentai 列本身。我还浏览了类型栏中的独特类别,删除了 OVA 和 ONA 的类别,因为授权这些类型的动漫可能相当昂贵,因此流媒体服务不会这样做。说了这么多,做了这么多,我有了一个数据集,里面只有 7000 多部动漫。把它切成两半还不错,留给我以下几列:

然后,我必须从另一个数据集中删除所有相同的标题。值得庆幸的是,它们都共享 anime_id 列,我能够像在第一个集合中一样执行内部连接来快速删除第二个集合中的所有标题,这给了我第三个所有内容都“合并”在一起的数据集。之后,我重新制作了新的评级数据集,将合并后的数据集中的列拆分出来,同时保持原样。这使得我的评级数据集缩减到 600 多万行。

我还有很长的路要走,但是我想确保我正确地完成了最初的 EDA,因为我相信在你能够探索数据本身之前,拥有一个干净的数据集是最重要的基础。对于那些有点不耐烦的人,请随意使用上面的流程图,直到我完成构建我的引擎并开始享受。

你下次面试需要的优势

原文:https://towardsdatascience.com/the-edge-you-need-at-your-next-interview-c8cb0ab53da?source=collection_archive---------8-----------------------

让数据科学家留下印象的简单 3 步系统

Source: Unsplash

在任何面试过程中脱颖而出都不容易。你可能已经听说,对数据科学家的需求正在迅速增长。然而,申请这些竞争性职位的可用人才也是如此。现实是,在一群合格的申请者中,你需要你能得到的所有优势。

这篇文章旨在通过设计一个多步骤的系统来帮助你获得这种优势,这个系统是我一次又一次成功使用的产品知识和构思。

1.了解产品

这似乎是显而易见的,但是很少有人能做得很好。作为数据科学家,在面试准备期间专注于巩固技术技能是常见的做法。这是合理的,因为如果没有技术基础,您可能无法前进。

话虽如此,但我认为,在给面试官留下印象时,对产品的充分了解也同样重要。

通过对产品的内外了解,你将能看到其他求职者看不到的东西。这一点在整个面试中常见的产品思考或问题解决评估中尤其重要。

“在数据科学中,如果你想帮助个人,要感同身受,提出问题;这样,你也可以开始理解他们的旅程”——达米安·明格尔

另一个看不见的好处是探索你对产品或公司的兴趣程度。在一天结束的时候,你可能不想每周花 40 多个小时在你不感兴趣或者至少有点着迷的事情上。

我的建议是在面试前花时间真正了解产品,最好是从用户的角度出发。如果可能的话,每天在面试前留出一些时间来使用产品。

这可能意味着那天少了一次编码练习,但从长远来看,这无疑是值得的,因为你发展了必要的领域知识,可以有见地地谈论有关公司及其产品的项目和想法。这让我想到了第二步。

2.产生想法

一旦你已经很好地使用了这个产品,花时间集思广益,让它变得更好。这可以是任何数量的事情,包括想法、功能或您可能感兴趣的数据驱动项目。

思考未来是什么样子,以及特定团队的下一步是什么。想想你想做什么,你能带来什么,以使公司的产品在某些方面、形状或形式上更优秀。

“创造力是拥有有价值的原创想法的过程。它是一个过程;这不是随机的”——肯·罗宾逊

为了更加清晰,我想我会分享一下我在 LinkedIn 的实际面试中注重构思的笔记的样子。请注意,我逐字逐句地从我的笔记本上记下了这些要点,所以它们可能有点难以解释。

  • 工作常用 app,填一份申请发一份
  • 帖子提示中的想法建议,以鼓励 feed 中的更多互动
  • 改进的工作推荐模型—似乎有些多余
  • 用于优化视图和参与度的个人资料的职业建议提示功能
  • 针对用户的概况或简历 A/B 测试功能——公司 x 查看具有这些技能/背景的员工
  • 工作比较工具—目前已有,但没有并排视图
  • 参与内容分享的更好方式——也许 1%的用户发布了 90%的内容?
  • 更好地跟踪你在平台中申请的职位的方法是——淘汰电子表格

你可能已经注意到了,这些东西到处都是。并非所有这些想法都是好主意。他们中的大多数都不是特别有创意,甚至有更大一部分都不是很实用。

尽管如此,像这样的想法仍然是无价的。很多时候,老员工会努力去想那些在新候选人眼中很容易出现的事情。至少,它为公司提供了关于用户如何看待产品以及如何改进的见解。现在我有想法了,下一步是什么?

3.推销你的想法

好吧,不是真的“推销”,而是提出你在头脑风暴中想到的有趣的想法和项目。

这个也不需要强求。当面试官问你“你想从事哪方面的工作?”时,机会通常会自己出现。或者面试结束该聊天问几个问题的时候。

至少,雇主会对你的研究和你对公司使命和产品的热情印象深刻。在最好的情况下,他们会发现你的想法很有趣,并在评估时记住这一点。第三种情况是公司已经在以某种方式追求你的想法。这甚至可能更有影响力,因为这表明你与他们的愿景是一致的。

快速回顾

让我们回顾一下。我们检查了一个关于产品使用和构思的面试准备系统。对我来说,这需要安排时间专心使用产品,同时对有趣的事情做笔记。然后,我会花一些时间将这些笔记具体化为我认为很酷或有益的商业想法、功能或项目,然后在面试中提出来

请注意,这个过程对您来说可能看起来不同,这完全没问题。这个练习的目的是发展在面试中脱颖而出所需的领域知识。朝着这个方向的每一步都是朝着留下持久印象和掌握数据科学面试的又一步。

感谢阅读!如果你喜欢这篇文章,请继续向鼓掌按钮展示你的爱。对更多的帖子感兴趣吗?请务必关注我并订阅下面的我的简讯以接收任何新内容。更多关于我和我在做什么,请查看我的网站

人工智能的出现

原文:https://towardsdatascience.com/the-emergence-of-artificial-intelligence-3cde7378768e?source=collection_archive---------13-----------------------

几周前,谷歌首席执行官桑德尔·皮帅在 Recode 赞助的活动中告诉观众,对人类来说,人工智能的影响可能“比电或火更深远”。在这篇文章中,我将探索人工智能如何从数据和算法中产生,以及计算的未来进步将如何帮助它的发展。

数据和分析

术语“大数据”描述了组织收集的数据的数量、速度和种类不断增加。它是一个包罗万象的术语,用来描述组织收集的大型数据集。这些数据集中的信息(包括关于组织的产品和服务、内部流程、市场条件和竞争对手、供应链、消费者偏好趋势、个人消费者偏好以及消费者与产品、服务和在线门户之间的特定交互的信息)可用于回顾性或前瞻性分析。为分析此类数据而开发的分析技术统称为数据分析,通常涉及基于计算机的定量模型的使用。回顾性方法有时被描述为描述性的(分析数据并对重要趋势进行总结和可视化描述)或诊断性的(查看过去的数据以确定哪里出了问题)。前瞻性方法可以是预测性的(使用过去的趋势来预测未来的趋势),或者充其量是规定性的(预测未来的趋势,并根据某些度量建议组织策略来最大化绩效)。

算法

数据分析使用算法来处理数据集,以便提取有意义的信息。算法是对完成任务所执行的步骤的描述。例如,您可以使用一系列步骤在停车场找到您的汽车。首先,你可以查看它是否在你的视野范围内。第二,你可能会检查你是否有一个纸条或收据,表明你的车在哪里。第三,你可以有条不紊地走过停车场,直到找到你的车。如果你把这三个步骤编程到你的手机里,它们就会变成一个算法。

选择解决特定问题的最佳算法可以给组织带来显著的竞争优势。如果一个算法能够快速准确地完成某项任务,那么它就是适合该任务的。谷歌凭借一种名为 PageRank 的算法(由拉里·佩奇和谢尔盖·布林于 1996 年开发)在网络搜索行业占据主导地位,该算法根据其他网站到这些网站的超链接的数量(和质量)对网站进行排名。商业模式需要大量使用一些算法的组织的最近例子包括优步和 Stitch Fix。

机器学习算法

虽然组织可以通过使用适当的算法来分析特定类型的数据而受益匪浅,但在遇到数据时自我改进的算法可能会更加有用。

受监督的机器学习算法在其字段已经被“标记”的数据上被“训练”。然后,他们根据自己的训练对新的输入数据进行分类。例如,可以训练算法将越南语翻译成英语,以确定哪些收件箱电子邮件是垃圾邮件,或者在给定汽车属性的标记集时确定汽车制造商。今天使用的绝大多数机器学习算法都使用监督学习方法。

其他种类的算法包括无监督学习、半监督学习和强化学习。无监督的机器学习算法直接处理“未标记”的数据,在其中找到模式,并提取他们认为有意义的信息。例如,无监督的机器学习算法可能会查看世界上所有不同种类的植物和动物,然后根据算法认为必不可少的任何属性来组织它们。算法可能会选择根据对人类有意义的属性(如大小、颜色或移动性)或根据其他一些对我们来说不直观的属性来组织它们。数据科学家还开发了半监督机器学习算法,该算法结合了监督和非监督机器学习算法的元素。强化学习通过反复试验来达到目的。尽管无监督、半监督和强化学习方法在很大程度上仍处于研究阶段,但它们将很快应用于现实世界的案例。

机器学习方法也可以以其他方式分类。例如,人工智能学者 Pedro Domingos 将机器学习算法分为五大学派(象征主义者、连接主义者、进化论者、贝叶斯主义者和类比主义者)。

深度学习是最有前途的机器学习方法之一(如果目前可能被过度宣传的话)(这属于多明戈斯所说的‘连接主义’学派)。深度学习使用神经网络(由几层组成,通过这些层可以前馈信息)。神经网络是通过一个叫做反向传播的过程来训练的。虽然神经网络中节点的动作是模拟人脑中神经元的动作,但是在神经网络的工作和人脑的工作之间几乎没有相似之处。

人工智能

人工智能描述了我们认为需要人类智能的机器能力。由于这个定义是主观的,某种机器能力是否被认为是人工智能可能会随着我们对计算机的期望的演变而变化。由于几个世纪以来,机器已经能够比人类更好地执行某些特定的任务(例如,加减数字),我们不认为这样的任务需要人类的智慧。我们以前认为需要人类智能的一些任务(例如将文本翻译成不同的语言)现在可以很容易地由计算机完成,所以今天我们可能会也可能不会将语言翻译算法视为人工智能。我们仍然预计精确的视觉感知和语音识别需要人类智能,因此有效完成这些任务的机器学习算法将很可能被认为是人工智能(暂时)。

然而,人类智能与机器学习算法的真正区别在于,前者能够处理各种各样的复杂任务。即使是今天最令人印象深刻的机器学习应用程序,如 DeepMind 的 AlphaGo 计算机程序(在复杂的棋盘游戏围棋中,它比任何人类棋手都强),也被认为是“弱”人工智能:它们中的每一个都只专注于一项或一组狭窄的任务。即使是正在进行的大型人工智能项目,如丰田通过在美国投资 10 亿美元进行研究来改善制造流程的努力,或苹果秘密的自动驾驶汽车项目,也可能导致“弱”但令人印象深刻的人工智能。

我们还没有实现一个‘强’的人工智能(也称人工通用智能),它能完成一个人类能完成的所有智力任务。然而,过去几年人工智能的重大进展表明,在可预见的未来,强大的人工智能可能是可以实现的。

芯片和超级计算机

人工智能需要合适的机器学习算法、数据和计算能力。当今许多最有前途的人工智能技术都使用神经网络。神经网络可以小而简单,也可以大而强大。神经网络越大,功能越强大。达到神经网络的极限,从而达到今天人工智能性能的极限,需要使用强大的计算机芯片。尽管英特尔长期以来一直是超级计算机芯片的市场领导者,但英伟达、谷歌和其他公司正在竞相开发专门用于深度学习和其他人工智能用途的芯片。

当它今年晚些时候上线时,世界上最快的计算机将很快成为位于美国能源部橡树岭国家实验室的名为 Summit 的 200 petaflop 计算机。然而,世界上一些最快的计算机根本不依赖美国制造的芯片。其中一台这样的计算机是中国的 125.4 petaflop 超级计算机神威太湖之光,这是目前世界上最快的超级计算机。另一台将于 2018 年上线的尖端超级计算机是日本政府的 130 petaflop AI 桥接云基础设施(ABCI)。日本政府将向日本公司和研究人员出租 ABCI 的使用权,期望他们将其用于深度学习和人工智能应用。

这些和其他趋势表明,人工智能的进步既由符合摩尔定律(英特尔联合创始人戈登·摩尔在 1975 年观察到计算机芯片上的晶体管数量可以预期每两年翻一番)的硬件发展推动,也有助于硬件发展。

量子计算的前景

虽然摩尔定律准确地描述了 21 世纪计算能力的指数增长,但行业领导者英特尔最近开发新芯片的时间比过去更长。这导致一些分析师质疑芯片发展是否会继续按照摩尔定律进行。英特尔反驳说,虽然它的芯片需要更长的时间来开发,但新芯片一旦发布,其性能就符合摩尔定律的预测。然而,专家们担心,在传统计算中,摩尔定律正在触及其上限,进一步的芯片小型化可能很困难,也许在经济上不可行。

一些专家正期待量子计算机在计算能力方面取得新的进展。量子计算机已经处于研究阶段几十年了。加拿大公司 D-Wave 已经在销售它所谓的量子计算机,但专家们不认为这是真正的量子计算机,而且在大多数应用中,这种计算机可能不比传统计算机快。尽管如此,D-Wave 计算机在一些应用中还是有用的:大众汽车使用 D-Wave 的量子计算开发了一种算法来优化北京的交通流量。使用 D-Wave 的计算机,该算法可以在几秒钟内运行,而传统计算机需要大约 30 分钟才能完成同样的任务。

谷歌、微软、IBM 和其他公司已经表示,他们将在几年内拥有可工作的量子计算机。量子计算崛起的一个重要里程碑将是“量子优势”的实现:量子计算机可以比任何经典计算机更好地执行某些明确定义的高性能任务。尽管大型科技公司纷纷宣布,但尚不清楚量子计算何时会变得普遍:可能在未来几年或几十年内。

一项变革性的技术

数据的创建出现了爆炸式增长,数据是算法的食粮。计算能力的进步使得越来越复杂和强大的机器学习算法能够运行。随着这些算法的改进,它们将在许多方面赶上或超过人类的智能。它们将在各个行业得到应用,从生物技术(它们将与基因组学交叉)到制造业。虽然还不清楚强人工智能需要多长时间才能出现,但可以预计大量弱人工智能将改变人类社会。人工智能对人类的影响确实将是变革性的,就像之前的火或电一样。

接下来:深度人工智能

沙恩雷

请关注媒体上的 Lansaar Research ,了解最新的新兴技术和新的商业模式。

[## 沙恩·雷

来自 Shaan Ray 的最新推文(@ShaanRay)。创造新价值和探索新兴技术| ENTJ | #科学…

twitter.com](https://twitter.com/shaanray)

机会的帝国:概率如何改变科学和日常生活

原文:https://towardsdatascience.com/the-empire-of-chance-how-probability-changed-science-everyday-life-a590e4274bb7?source=collection_archive---------11-----------------------

个人读书会第 1 卷-可节省笔记

Fortuna & her wheel

***这里有很多话,不需要全部看完。这篇简短的序言解释了接下来的内容

前言

我一直在阅读优秀的、开创性的概率史,[](http://.F & comments)概率帝国。我想我会做一些公共笔记&评论作为我的习惯

根据作者自己的讲述,这本书大致可分为 4 个部分:

  1. 我们从 两个历史章节开始,分别描述了从十七世纪中期到十九世纪末概率统计的起源和发展 。在这里,我们介绍了概率演算不断变化的解释、对决定论不断变化的态度、不断变化的平均值和误差概念——所有这些都是在不断变化的应用背景下进行的。
  2. 在接下来的四章的每一章中,我们都专注于一个广泛应用的领域 :实验方法论、生物学、物理学和心理学。
  3. 同第七章, 我们把科学留给评估概率和统计对日常生活的影响 ,从天气预报到乳房 x 光检查。
  4. 最后, 我们调查 ,从类似胜利将军的山头, 我们所覆盖的领土

这第一期 Solo 书友的分期重点是第一节的前半段(简介+第一章),多为历史&概念叙述。后续部分将讨论以下章节。

我整理了摘录并添加了一些有限的评论。为了简洁和可消化性,我重新修改了文本,所以如果其中任何一个引起了你的兴趣,我强烈推荐购买并阅读原文

完整的斜体段落&“引用”是摘录,我的评论是无格式的。

很多,所以我尽量在长段落中加粗要点,方便略读。

我推荐阅读我的(短)简介,然后略读第一章小节标题 (1.1,1.2 等) &我对它们的一行摘要,然后让你的兴趣(或缺乏兴趣)引导你。

介绍

福尔图娜,历史中的机遇与科学

Fortuna (left) and Sapientia (right) are depicted here in traditional opposition. The slow breakdown of this opposition is the topic of this book. Source: Petrarch, Remède de l’un et l’autre fortune prospère et adverse (Paris, 1524); courtesy of the Bibliotheque Nationale, Paris. [caption reproduced from the book]

这本书以一个典型的历史哲学典故开始:辛酸,微妙和博学。

福尔图娜,这位善变的命运女神,从来都不是哲学和科学的宠儿。在那本中世纪学术的试金石——波爱修斯的《哲学的慰藉》——中,清醒的贵妇人哲学警告说,只有当福尔图娜“表现出自己的不稳定和多变时,她才是真实的”,并且鼓吹 反对偶然性的存在,偶然性被认为是“由随机运动产生的、没有任何原因序列的事件”

科学研究的是原因,而不是机遇。

历史的复杂性已经混淆了我目前对机会和因果关系的概念。在我看来,概率分析和理解是科学实践的核心,然而在这里它们是对立的。科学被等同于一个“原因序列”,&这个序列被认为是确定的。然而福尔图娜也被嘲笑为“不稳定且多变”,表面上是对偶然性和非决定论的攻击。但是,攻击福尔图娜是“可改变的”只有在福尔图娜被传统地认为是“注定的”预定论的情况下才有意义,这似乎是偶然性的对立面,而当时的【科学】表面上推崇偶然性。**

困惑。

但是这些历史逻辑的结将在接下来的章节中被解开,并最终在接下来的几章中被揭示。

然而,就在伯纳德试图从生理学中驱逐偶然性和非决定论的时候,福尔图娜已经统治了一个庞大且不断增长的科学帝国。这个领域的法律是概率论和统计学。用伊恩·哈金令人回味的话来说,通过“驯服机遇”,概率和统计让科学女神和她的劲敌福尔图娜和解了。

从 17 世纪中期开始,概率论在 18 世纪的传播来自:

  • 赌博问题
  • 为了法理学,
  • 数据分析,
  • 归纳推理,
  • 和保险,
  • 并从那里转向社会学,
  • 十九中物理,生物,心理学,
  • 接着是农学,
  • 轮询,
  • 医学检测,
  • 棒球,
  • 二十世纪还有无数其他实际(和不那么实际)的事情。

这简明扼要地概述了概率理论的发展和领域背后的叙事弧线,将在以后的章节中深入探讨。但是“概率论”这个术语本身是有问题的,正如这本书的一个主要论点反复强调的:

在其历史的大部分时间里,概率论是它的应用。

这意味着概率论被它所征服的学科和它所侵入的学科一样多。

  • 例如,当概率成为评估出生、死亡、犯罪、气压波动、死信和其他类型统计数据汇编的工具时,概率的真正含义发生了变化,从头脑中确定的程度变成了世界上统计事件的比率(见 2.2)。 【我注:从贝叶斯或' 逆概率’到** 频率主义**】****
  • 当英国学者弗朗西斯·高尔顿发明了一种方法来测量后代豌豆偏离其父母代的程度时,他启动了相关性分析(见 2.5;4.4).
  • 因素分析的根源在于教育心理学,优生学和农学中的方差分析等等。事实上,概率思想和技术的规则是起源于非常具体的背景,并依靠生动的类比而发展。
  • 正态或钟形曲线首先代表天文学中观察误差的概率,然后代表社会学中 l'homme moyen 的自然“误差”,然后代表表现出有序集体属性的无政府单个气体分子(参见 2.5;5.6).
  • 最终,正态曲线开始代表几乎所有事物的分布,从智商到农业产量,并摆脱了早期应用中的特殊解释(见 8.1)。但近一个世纪以来,这种具体的类比是它和其他概率概念从一门学科传递到另一门学科的桥梁。

这本书是关于概率和统计在科学和生活中的应用,其中“应用”被理解为一种特殊的含义:数学工具塑造了它的对象,但也被它塑造了。概率和统计的数学发展在艾萨克·托德亨特、L. A .麦斯特洛夫、O. B .谢宁、斯蒂芬·斯蒂格勒和伊沃·施耐德等学者的工作中得到了令人钦佩的处理。然而,我们主要关心的不是他们。我们分析概率和统计如何改变我们对自然、思维和社会的观念。

这充分地为即将到来的历史叙述搭建了舞台:系谱而非形而上学,概念而非技术。

第一章:古典概率,1660-1840

God . . . has afforded us only the twilight of probability; suitable, I presume, to that state of mediocrity and probationership he has been pleased to place us in here. . .
— John Locke (1690) [quoted in original]

1.1 简介

第一章以现代概率理论的典型起源故事开始:

1654 年 7 月,布莱士·帕斯卡就一个赌博问题给 Pierre Fermat 写信,这个问题后来被称为分数问题:两名玩家在一场碰运气的游戏中被打断,此时分数不均衡。股权应该怎么分?这两位法国数学家之间随后的通信被认为是数学概率的创始文件,尽管这并不是第一次试图用数学方法处理机会游戏。

这一事件已经成为概率的零号病人,以至于不得不发表一项对 Pasca l 之前的证据&概率的明确研究,以填补先前的空白。

**《机缘的帝国作者强调了这一点,&帕斯卡后来的著名的赌注一个 数学 另一个 哲学 ,揭示了 概率的数学理论 😗*

它出现在十七世纪两次重要的知识分子运动的关键时刻:一种新的实用主义理性,抛弃了传统的确定性理想;以及将数学应用于新的经验领域的持续且卓有成效的尝试。没有另一个,任何一个都是不够的。关于大部分时间里会发生什么,以及与这种不可靠的体验相关的不同程度的确定性的哲学概念可以追溯到古代,就像概率游戏一样。但是在大约 1650 年之前,没有人试图量化这些可能性。光有数学企业的精神是不够的,因为量化需要一个主题,一种充实数学形式主义的解释。对于概率计算的来说尤其如此,直到本世纪它还没有独立于应用的数学存在。****

本章出现了两个主题:

  • 欧洲启蒙运动特定环境下哲学与数学的交汇
  • 概率演算在其存在的最初几个世纪中与它的实际应用密不可分

1.2 开端

Photo by Sushobhan Badhai on Unsplash

在这一小节中:概率论前身的简史。

数学概率的史前史吸引了相当多的学术关注,也许是因为它似乎姗姗来迟。机会是我们永恒的伴侣,最早的概率论公式的数学是初级的。概率思维的暗示性片段在古典和中世纪的学术文集里几乎随处可见:

  • 大约在公元前 85 年,西塞罗在他的修辞学著作中将通常发生的事情与通常认为的事情联系起来,称之为两者都是可能的。
  • 在一份 10 世纪的手稿中,一位僧侣列举了掷骰子的全部 36 种可能性
  • 塔木德信徒对继承和亲子关系进行概率推理。

然而,这些都没有发展成概率数学。

有一些对各种假设的详细探索(&简要拒绝)来解释这种延迟的发展,但没有一个最终得到证实。

发现的是,为了保持应用优先于理论,早期的概率学家更多地根据期望值期望值 而不是潜在概率本身来提出问题:

如果我们回到帕斯卡的两个沉思,我们会发现,尽管它们被公认为是后来被称为概率演算的一部分,但它们并不是按照概率来铸造的。相反,基本概念是期望,后来被定义为事件 e 的概率与其结果值 V 的乘积:

P(e)V = E

因此,举例来说,一个人持有一千张彩票中的一张,奖金为 10,000 美元,他的期望值是 10 美元。正如定义所暗示的,我们现在从概率中得到期望,但是对于早期的概率学家来说期望是先验的和不可约的概念**。**

期望反过来被理解为公平交换或合同。

……这些直觉利用了在十六和十七世纪商法中变得越来越重要的一类法律协议,即运气合同**。法学家将此类协议定义为用现在和确定的价值交换未来不确定的价值——赌一把、购买年金、购买保险、竞拍下一年的小麦收成,或者购买下一次的渔网。**

“运气契约”标志着赌博和司法推理的交集,这是概率哲学基础中的两大支柱。在本书的这一部分,他们还提供了一个最引人注目的历史旁白:

运气合同获得了突出地位和一定的恶名,作为免除商人贷款利息从高利贷的指控的首选方式。佳能律师认为,风险因素在道德上等同于劳动,因此为商人赢得了他的利益,就像他额头上的汗水一样诚实。

这让我想起了一位当代自称概率研究者(&不证自明的精神病患者)的新作,我还没看过。

接着,作者描述了概率论是如何在信仰的确定性和极端怀疑主义的无底怀疑之间解决历史冲突的:

  • 《帕斯卡的赌注》是一个例子,说明到了 17 世纪中叶,通过预期进行推理几乎已经成为一种新的理性的同义词。
  • 在 16 世纪,一方面是新教徒和天主教徒之间的宗教改革争论,另一方面是 Sextus Empiricus 和他的学校的怀疑主义哲学的复兴, 结合在一起破坏了自亚里士多德 以来指导智力探究的某些知识的理想。
  • 在它的位置上逐渐出现了一种更温和的学说,它接受少于确定知识的必然性,但仍然认为它仍然足以指导理性的人在言传身教和实践中
  • 亚里士多德在《尼各马科伦理学》中的格言被大量引用:“一个受过教育的人的标志是在每一类事物中寻找精确,只要该学科的性质允许:显然,接受数学家的可能推理和要求修辞学家的论证是同样愚蠢的。”【我注:lol】
  • 宗教改革和反宗教改革在信仰及其辩护的基本原则上的冲突,以及米歇尔·德·蒙田和其他 16 世纪思想家的激进怀疑主义的最终结果极大地侵蚀了论证的领域,扩大了可能推理的领域。他们的直接影响是更具毁灭性的,挑战任何知识的所有主张。

因此所有确定性的传统来源**、宗教和哲学同时受到攻击。面对信仰教条主义和最具腐蚀性的怀疑主义之间的选择,越来越多的 17 世纪作家试图开辟一个中间立场,放弃除数学和形而上学之外的所有确定性的希望,但仍然坚持认为人们可以获得可能的知识。或者说,他们坚持认为可能的知识确实是知识。**

机会的帝国正在增长,其基础在日常生活的实际应用只会加深:

为了证明那些仅仅是可能的人值得尊敬,这些“温和的怀疑论者”从稀有的哲学话语转向了日常生活的行为。理性信念的新标准不再是无懈可击的论证,而是足以促使一个谨慎的人采取行动的确信程度。

强调行动是信仰的基础,而不是相反,是抵御怀疑主义的关键,因为正如这些作家惯于尖刻地观察的那样,即使是最坚定的怀疑主义者也吃饭,就好像外部世界存在一样。

1.3 经典解释

Photo by Dan Freeman on Unsplash

这一小节叙述了概率的所谓“经典”解释在它正式出现时的演变。

因此,机会的演算首先是期望的演算,从而试图量化在十七世纪学术话语中几乎随处可见的新的、更温和的理性主义。

从惠更斯 1657 年的小论文到雅各布·伯努利 1713 年的权威 Ars 猜想,最早出版的关于这个主题的作品涵盖了一系列只有在这个背景下才一致的主题。像赌博(惠更斯,皮埃尔·德·蒙特,雅各布·伯努利)和年金(约翰·德·威特,哈雷,尼古拉斯·伯努利)这样的偶然性契约,以及后来的证据问题,如历史或法庭证词的评估(约翰·克雷格,乔治·胡珀,尼古拉斯和雅各布·伯努利)构成了 新理论的应用领域。

到这个时期结束时,概率已经成为一个独特而原始的概念,尽管在此后的一段时间里,大多数应用仍然围绕着期望问题。

这些概率是如何衡量的,从一开始就不明确,直到今天仍然是一个有争议的问题。 【暗指巴伊亚人 vs 常客等】

最初,“概率”一词的意思是权威人士认可的观点;因此,耶稣会的概率论学说,诡辩家挥舞着赦免几乎每一个越轨行为的理由是,一个或另一个神学家采取了温和的观点。然而,17 世纪早期缓和的怀疑主义甚至改变了这种概率的定性意义。

合理性的支持者说的不是确定性,而是确定性,从通过证明获得的最高等级的“数学”确定性,通过感官证据的“物理”确定性,到基于证词和推测的“道德”确定性。不同作者对这些层次的精确描述略有不同,但这种有序等级的概念,以及对大多数事情只承认道德确定性的强调,仍然是从雨果·格劳秀斯的《基督教宗教真理》(1624)到约翰·洛克的《关于人类理解的论文》(1690)及其后的文学作品的主要内容。当 Joseph Butler 主教在 1736 年声称“概率是生活的向导”时,他是在重复一句陈词滥调。

在这些讨论的背景下,“概率”一词的真正含义已经从中世纪的任何权威意见转变为与手头的证据成比例的同意程度,包括事物和证词。

作者描述了概率从定性到定量的渐进过程:

正如大量的法庭案例和类比所表明的那样,这些概率是定性构思的,在很大程度上归功于法律证据的语言和实践。

然而,像戈特弗里德·威廉·莱布尼茨和雅各布·伯努利这样的数学家抓住了新的“危险分析”作为量化这些确定度的手段,并在这样做的时候,将三个有序点转换成一个完整的连续体,从完全不相信或怀疑到最大确定性

事实上,莱布尼茨将羽翼未丰的概率演算描述为法律推理的数学翻译,这种法律推理使法官对提交的各种证据的把握程度达到精确的比例。事实上,这些法律概率有时用分数来表示,以创造一种“证据的算术”(例如,被告的一个亲戚的证词可能只把⅓算作一个无可指责的证人),这可能使它们看起来在数学上容易处理。

着手尝试以某种非任意的方式测量这些概率的数学家们提出了至少三种方法 :

  • 基于物理对称性的同等可能性
  • 观察到的事件频率
  • 和主观确定度或信任度。****

第一款非常适合硬币或骰子等赌博工具,但不适合其他工具;
-
第二个依赖于收集的统计数据和长期稳定的假设;
第三呼应了对证据确定度进行比例分配的法律实践。

有趣的是,作者们(大概是最初的概率学家)承认,对掷硬币、掷骰子和从瓮中拉出的概率的概括非常有限,但这些仍然是主要的教学手段&用于传达概率的类比。(前面提到的某个精神病患者称之为“卢迪谬误”)

各种意义从不同的上下文中出现,并暗示了数学理论的不同应用。

  • 源自赌博并应用于赌博的基于物理对称性的等概率结果集——很少有其他情况以明显的方式满足这些条件。
  • 统计频率最初来自 16 世纪以来教区和城市收集的死亡率和出生率数据。1662 年,英国商人 John Graunt 使用伦敦死亡率清单来估算死亡率表,他假设大约相同比例的人口在六岁以后每十年死亡一次。
  • 18 世纪的作者收集了更详细的人口统计数据,并利用概率论来计算年金和后来的人寿保险的价格,并论证人类事务中的神圣天意。
  • 与证据成比例的认知信念感源于法律理论,即需要多少和什么样的证据才能在法官心中产生什么程度的信念,并激发了对法庭和历史证据以及判决的证词概率的应用。

作者继续描述了古典概率学家中客观和主观模式之间的流动转换,以及频率主义的增长蔓延[暗示不祥的配乐]:

现代概率学家认为这三个问题的答案是,“概率衡量什么?”作为截然不同的,和许多墨水已经泼争论他们的相对优点和兼容性(纳格尔,1955)。特别是,在概率的前两个“客观”意义和第三个“主观”意义之间画了一条粗线,前者对应于世界的状态,后者对应于精神状态

然而,古典概率学家使用“概率”来表示所有三种意义,漫不经心地从一种意义转移到另一种意义,这让他们更善良的继任者感到困惑。为什么经典概率学家能够如此容易地将这些不同的概率概念融合在一起,而且常常非常富有成效?在某种程度上,因为客观和主观感觉当时没有被当前哲学中它们之间张开的鸿沟分开。

在游行频繁主义:

16 和 17 世纪的法律理论家发现,假设法官心中形成的信念与提交的证据的分量成比例似乎是合理的,洛克在更一般的背景下重复了这一假设,援引证据的定性概率:理性思维同意一项主张“与一方或另一方更大概率理由的优势成比例”。

约翰·洛克、大卫·哈特莱和大卫·休谟创造并完善了一种观念关联的理论,这种理论使大脑成为一种计数机器,自动记录过去事件的频率,并相应地衡量对其重现的信任程度。

哈特利甚至为这种心理记录提供了一种生理机制:每一次重复的感觉都会产生一种大脑振动,在大脑中蚀刻出一条越来越深的凹槽,对应着一种越来越强烈的信念,即事情会像以前一样。【看似合法】

由于头脑不可抗拒地赋予信念与想法的生动性成正比,过去经历中的事件发生得越频繁,就越坚信它们会再次发生。洛克和哈特利认为信仰与频率的匹配是合理的。

然而,所有人都同意,正常的头脑,当未被教养或偏见所污染时,会不可抗拒地将主观的信仰概率与客观的频率概率联系起来。他们还显示出一种日益增长的趋势,那就是将所有形式的证据减少到一定的频率,这与最初的法律学说形成了对比,法律学说认为证据与信仰程度成比例。

对法官来说,目击证人的证词,即有人看见被告拿着出鞘的带血的剑逃离谋杀现场,其证明力来自证据的质量,而不是数量。过去类似的证据导致成功定罪的次数并不重要。洛克在他对创造可能性的证据种类的讨论中仍然非常接近这一法律传统:证人的数量,他们的技能和正直,矛盾的证词,内在的一致性,等等。他讲述了暹罗国王的警示性故事,暹罗国王认为荷兰大使是个骗子,因为他在冰冻的运河上滑冰的故事与几代暹罗人积累的水总是流动的经验背道而驰。国王错误地相信他的经验的数量,而没有评估它的广度和多样性。然而,洛克也为“经验的频率和恒常性”和数量,以及证词的可信度留有一席之地。

我们最终来到这个荒谬的极端,新生的频率主义范式的逻辑结论:

后来关于概率的哲学著作将证据的意义进一步缩小到可数的范围。休谟代表了这种进化的终点,在这种进化中,证据变成了重复、相同事件的总和。根据休谟的说法,头脑不仅会计算;它对总数中的微小差异非常敏感:“当一方的机会或实验达到一万次,而另一方达到一万零一次时,由于这种优势,判断会优先考虑后者”。** 【啊!!!]**

最后,事件的“客观”频率和信仰的“主观”程度之间日益增长的紧张在概率论及其实践者中分裂了一个持久的分歧:

一些作者认为,主观信念与客观频率以及物理对称性成比例,这种保证使得经典概率学家在没有明确理由的情况下,从一种概率感滑向另一种概率感。只有当联想主义心理学将其重点转移到幻觉和扭曲上时,偏见和激情才会引入这种对概率的心理计算,主观和客观概率之间的差距才会变得足够明显,从而要求在两者之间做出选择。与其说是彻底的频率主义版本的概率论的发展和胜利标志着经典解释的终结,不如说是人们认识到必须在(至少)两种不同的概率意义之间做出选择。经典概率学家应用其理论的问题范围表明,他们对概率的理解包括客观和主观因素:统计精算概率与雅各布·伯努利或拉普拉斯工作中的认知证据概率愉快地共存。

1.4 决定论

这一小节描述了认识论决定论的张力,这种张力支撑着经典概率的主观“相信程度”学派。
它也“解开”了我们在书的介绍中遇到的“机会”悖论。

这两位数学概率史上的巨人的著作[ 拉普拉斯&伯努利 ]也包含了这样的宣言,不管是对是错,导致了经典解释不可救药的主观的标准观点

两人都认为概率衡量的是人类的无知,而不是真正的机会。上帝(或拉普拉斯世俗化的超智能)不需要概率;必然的原因,无论多么隐蔽,支配着所有的事件。因此,概率必须是精神状态,而不是世界状态,智力的临时工具太弱,不能立即穿透事物的真实本质。

他们的是一种认识论决定论,认为所有事件原则上都是可预测的,因此概率与我们的知识相关。伯努利评论说,落后的民族仍然在赌欧洲天文学家现在可以预测的日食;有一天,当机械科学完善时,硬币和骰子的赌博会显得同样原始。

那些在自然科学和道德科学中为偶然性开辟了一席之地的数学家们坚持认为,用亚伯拉罕·棣·美弗的话说,偶然性“既不能被定义,也不能被理解”。他们确实承认,某些统计数据每年不同,各地不同,但他们对死亡率等现象的潜在规律性有足够的信心,从而相应地简化和调整这些难以控制的数据。他们认为,经过充分调查,可变性将被证明与偶然性一样虚幻。

为了解开古典概率学家的热情决定论的明显矛盾,我们必须超越概率论,看到它出现的那个时期的泛数学精神。在将数学应用到全新的经验领域——从彩虹到振动的琴弦——取得惊人成功的时期,古典概率兴起并繁荣起来。像伽利略这样的自然哲学家认为,如果自然说数学语言,这是因为自然是完全确定的,至少从上帝的角度来看是这样的:在数学论证中,连接因果的胶水必须和连接前提和结论的胶水一样强。

决定论因此成为对自然进行数学描述的先决条件。

这仍然让我困惑,尽管我理解了培养这种心态的历史条件。想象我们的知识是不完美的世界上存在真正的随机性,这似乎不是一个不可思议的逻辑飞跃。**

无论如何……继续这些愚蠢的老天才:

经典概率论在运气被放逐的时候到来;它需要一种彻底的决定论氛围,甚至包括可变事件,作为稳定潜在概率的表达,至少从长期来看是如此。

决定论通过将可变事件锚定在恒定概率上,创造了一种可以想象的“机会几何学”,因此,即使是偶然事件也符合当时将数学应用于经验的标准

那些标准与旧的真实的偶然性概念不相容,或者与我们可以称之为世界上真正的随机性不相容。

“机会”和“财富”自亚里士多德以来就一直是哲学词汇的一部分,意思是各种各样的巧合(在去市场的路上遇到欠你钱的人),缺乏目的(通常被认为是必然的,如伊壁鸠鲁原子的“盲目的必然”),或健康、财富、美丽和子女等“外部”物品的充足禀赋(索拉布吉,1980)。

所有这些含义都保留在日常用法中,但只有一个在经典概率论中发挥了重要作用。这是机会和目的的对立,特别是神圣的目的,自然神学家和他们的或然性盟友如德·莫维尔对此大加赞赏。

对于古典概率学家来说,因果顺序之外的“机会”和“运气”是迷信。如果我们能看到世界的本来面目,穿透到事物的“隐藏的源泉和原理”,我们就只会发现必然的原因。概率只是暂时的,是人类无知的虚构,因此是主观的。

数学概率的经典解释因此具有决定论的特征,因此具有主观倾向,并且在实践中具有流动性的概率感,在联想心理学的帮助下将主观信念和客观频率融合在一起

正如拉普拉斯在一段著名的文章中所说的,数学概率在本质上是“仅有的理性化为微积分”。它的地位与其说是一种应用的数学理论,不如说是某种现象的数学模型,就像描述月球运动的天体力学部分。因此,它经受住了实证检验。如果天文理论未能预测月球扰动,那对理论来说就更糟了。当经典概率论的结果与理性人的直觉不符时,数学家们又回到了起点。

1.5 合理性

Photo by Chris Tweten on Unsplash

这一小节详细介绍了古典概率,非常实用,是如何与“理性”和直觉相比较并最终服从于后者的。

关于圣彼得堡问题的旷日持久的争论正是理性和概率论的规定之间的冲突,并说明了数学家们是如何认真对待他们的“良好判断力”建模任务的

尼古拉斯·伯努利(Nicholas Bernoulli)在给皮埃尔·德·蒙莫特(Pierre de Montmort)的一封信中首次提出了这个问题,并发表在后者的《哈萨尔的青年分析》(Essai d ' analyse sur les jeux de hasard,1713 年)第二版中。皮埃尔和保罗用一枚硬币玩抛硬币游戏。如果在第一次投掷中硬币正面朝上,皮埃尔同意付给保罗 1 美元;如果第二次掷硬币时正面没有出现,保罗得到 2 美元;如果没有,直到第三次投掷,4 美元,等等。根据标准方法计算,保罗的期望(以及玩这个游戏的公平价格)是:

E = (1/2 x $1) + (1/4 x $2) + ... [(1/2)^n x $2^(n-1)] + ...

因为即使是公平的硬币也有很小但有限的机会产生连续的尾部,而且回报随着这种事件发生的概率的降低而增加,所以期望值是无限的。然而,正如 Nicholas Bernoulli 和所有后来的评论员很快观察到的,没有一个理性的人会支付哪怕是很小的一笔钱来玩游戏。尽管数学家们称之为悖论,但从同等有效性的假设中得出的结果并不矛盾

期望值的计算很简单,在期望值的数学定义中没有任何东西排除了一个无限的答案。相反,令他们感到矛盾的是,数学理论的结果可能与良好判断力的明显要求如此不一致。现代意义上的应用数学家可能会简单地质疑数学理论对这类问题的适用性,但这条道路对十八世纪的混合数学家并不开放。在他们看来,数学结果和良好判断力之间的冲突威胁到了数学概率的有效性。

这就是为什么圣彼得堡问题本身微不足道,却成为经典概率学家关注的焦点。

作者回顾了关于“悖论”的微妙争论,特别是通过伯努利兄弟的视角,他们将概率应用的发展领域拟人化:

伯努利兄弟之间争论的不是概率期望是否应该模拟合理性,而是这种合理性包含在哪里。尼古拉斯站在源自运气契约的古老公平观一边;丹尼尔与越来越重要的经济审慎意识,源自商业。

典型的理性人不再是公正的法官,而是精明的商人,概率的数学理论反映了这种转变。

因此,概率演算试图编纂当时的“合理”直觉,但也反映了那个时代的精英主义和方法论热情:

如果他们的演算得出的结果与启蒙运动者一直以来所知道的相呼应——正如《数学序言》一篇接一篇地强调的那样——那么所有精心设计的方程和计算机制似乎都是对显而易见的东西的重复。概率学家回答说,用伏尔泰的话来说,常识没有那么普遍

只有一小部分精英人物能够通过独立的直觉进行足够准确的推理;概率演算试图将这些直觉(概率学家认为这些直觉实际上是潜意识的计算)编纂成文,以供并非天生如此的普通人使用。

推理演算的理想,一套独立于内容的形式规则,对许多十七和十八世纪的思想家产生了某种致命的吸引力。概率学家希望将“猜想的艺术”变成这样一种演算,这与 17 世纪对极端方法的迷恋相呼应。

机械论方法中的这种极端乐观主义恰如其分地反映在“拉普拉斯的恶魔”&一个“发条宇宙的想法”中。它也随着最极端的乐观主义的终结而终结…

因此,经典概率论立刻成为合理性的描述和处方。

两个含糊不清的地方,都没有被清楚地认识到,混淆并最终破坏了经典的程序,使合理性数学化。

  • **第一个 在圣彼得堡问题引发的关于期望的争论中很早就浮出水面: 有几种截然不同的合理性品牌,它们有时会导致同一问题的截然不同的解决方案 。公平的法官和精明的商人没有就预期的正确定义达成一致,但他们都属于霍姆斯·克莱尔的精选公司。然而,概率学家坚持认为合理性是统一的,尽管对如何定义它有无休止的争论。法国大革命的巨大动荡粉碎了他们对少数开明人士自然共识的信仰。
  • 第二个 歧义关注的只是 描述与处方 之间的界限在哪里。

在其漫长的职业生涯中,由于对理性理想的幻灭以及客观和主观概率之间日益扩大的差距,经典概率论的重点慢慢从描述性转向规定性。****

作者以对当时概率理论的清晰描述来结束这一小节:

**:这些都是数学概率经典解释的标志

  • 一种卓有成效的 主观与客观的融合 感官的概率;
  • 一种 彻底决定论 坚决否认真实偶然性的存在,并在纲领性陈述中突出概率的主观意义;
  • 一个致力于 混合数学目标的建模现象**
  • 首先是理论与实践理性形式的认同,这种形式后来被称为合理性

对于那些在 20 世纪受过区分教育的人来说,数学理论独立于其无数可能的解释和应用,但是对于经典概率学家来说,它们都是一个整体。

1.6 赌博和保险的风险

接下来的两小节包含了概率领域发展的大量叙述细节,这些是要点:

赌博是典型的随机契约,数学家们解决的第一批问题就是这种类型的。

尽管进步很快,大多数概率学家还是对他们的股票交易赌博问题和他们声名狼藉的关联感到不自在。

显然,大多数赌徒对这种教化没有什么兴趣。

经典概率学家感到他们对赌博数学的兴趣立刻被忽视和鄙视,急切地将他们的注意力转向其他更值得尊敬的运气契约类型:

  • 葡萄酒期货
  • 年金
  • 海上保险
  • 遗产的期望
  • 嫁妆基金
  • 收益权

这一时期的统计数据以出生、婚姻和死亡的人口统计数据的形式出现,因为这是自 16 世纪上半叶以来政府一直要求教区登记的信息,原因与概率论无关。

数学家毫不犹豫地将这些统计频率解读为概率,并从中发现了从赌博向更有声誉的运气合约发展的途径。

但是唉,再一次…

总的来说,18 世纪年金和人寿保险的买家和卖家并不比赌徒们对概率论更感兴趣。

因此,在十八世纪的大部分时间里,风险的数学理论对风险实践的影响实际上是零。

从业者对概率学家的数学方法的抵制是根深蒂固的,在今天的反经验主义中仍然可以看出:

风险从业者抵制风险的数学理论还有其他更深层的原因。早在数学概率和统计学出现之前,像赌博、年金和海上保险这样的偶然性合同的当事人已经在直觉的基础上同意了未来偶然性的价格,这与概率学家的直觉完全相反。****

风险中的交易商表现得好像世界是一个个案例的马赛克,每一个案例都由业内老手根据具体情况进行评估,而数学家则提出了一个简单、稳定的规则世界,任何拥有正确数据和公式的人都可以利用****

对于风险从业者来说,接受风险的数学理论需要信念的深刻变化,对于人寿保险来说,还需要价值观的深刻变化。他们不得不用集体适用的规则取代个别案例,用估算取代经验丰富的判断。

数学家们认为从长远来看会相互抵消的局部扰动,从业者们却认为这正是他们的本行

只有良好的判断和对这些细枝末节的透彻理解才能对正在讨论的风险进行定价

风险的实践不仅仅是统计的;这是一种积极的反统计方法,因为它只关注个案,而忽略了大量数据和长期数据。

修行者把时间等同于不确定性,因为时间会给这些关键的条件带来不可预见的变化;概率学家将时间等同于确定性,大量的数字揭示了表观通量背后的规律。

领域专家和经验主义定量分析师(通常不计其数)之间的紧张关系,以前者对个别案例的微观关注和后者对更广泛的统计模式的总体宏观关注为代表,如今依然存在。在接下来的章节中,我们还会听到更多关于这些主题的内容。

1.7 证据和原因

运气契约并不是古典概率学家从法学家那里接手的唯一应用领域。他们也很早就将注意力转向证据问题,尤其是证人证词的问题。

从雅各布·伯努利到泊松,几乎每一个概率学家都尝试过证词的概率,蒙莫特在询问这些事情是否真的是数学理论的合法应用方面是个例外。

这个问题的棘手刺激了频率主义的下一个大飞跃,这也许是一个太远的飞跃:

****从雅各布·伯努利著名的定理开始,概率学家解决了多少成功产生何种程度的确定性的问题。这意味着从概率论的角度重新塑造因果观念,也就是说,将它们与无处不在的瓮模型联系起来,后者成为经典解释的标志。

想象一个瓮,里面装满了一些固定比例的彩球,从这些彩球中可以重复绘制替换图案。伯努利定理指出,在极限情况下,随着抽奖次数 N 趋近于无穷大,观察到的彩球比例 m/N 对应于 urn 内实际比例 P 的概率 P 趋近于确定性:

伯努利定理相当于一种保证,即从长远来看,观察到的频率将稳定在“真实”的潜在值附近,规律性最终将战胜可变性,原因战胜机会

这个结果是平庸和创新的奇妙混合。

老生常谈,因为正如伯努利自己在给莱布尼茨的信中承认的那样,“即使是最愚蠢的人也能通过自然本身的某种本能,而不是通过先前的指示知道”证实的观察数量越多,推测就越可靠革命性的,因为它将确定度的概率与频率的概率联系起来,还因为它创造了一个本质上没有原因的因果关系模型。****

此外,新的模型放弃了对机制的所有探索,而是寻找运行世界时钟的隐藏的弹簧和原理。

伯努利瓮模型中,数字生成数字;他们这样做的物理过程完全不可思议。

这个定理是原因概率的基石,然而它并没有真正提供一种从已知结果到未知原因的推理方法,即使是在频率和概率的有限意义上。因为在任何有限数量的试验中简单地从观察到的频率中读出潜在的概率是不合理的:如果没有一些额外的简化假设,频率永远不会明确地收敛到一个值。

给定概率,伯努利定理揭示了观察到的频率以任何期望的精度逼近该概率的可能性。

^正是频繁主义的定义。

我们需要的是逆运算:给定观察到的频率,有多大可能逼近未知的概率?

^输入“逆”/“贝叶斯”概率。

或者,正如人们更经常提出的问题,鉴于一个事件以前已经发生过多次,那么它在下一次试验中再次发生的概率是多少?简而言之,未来像过去一样的概率有多大?这些所谓的逆概率成为了原因概率的核心。托马斯·贝叶斯皮埃尔·西蒙·拉普拉斯独立证明了伯努利定理(Bayes,1763;拉普拉斯,1774),其应用至今仍有争议(见 3.4)。****

伯努利定理是因果关系的数学模型,特别适用于检测“弱”原因的存在,如动物磁性,而逆定理是科学方法本身的数学模型,用于根据新数据评估假设的状态,如男女比例优势。****

因此,我们到达了概率论历史的一个紧要关头(至少事后看来是这样),但在以后的章节中会有更多的介绍。

1.8 道德科学

这一小段描述了古典概率学家对启蒙社会科学和伦理学的参与,他们试图在“钟表社会”的假设下,将一种原始的定量社会学带入其中。

正是在启蒙运动的道德科学中,古典概率论中的理性人最为明显。由于这个原因,概率学家长期以来努力使他们的演算成为道德科学,用孔多塞的话说就是“社会数学”。

这个项目公正地呈现古雅在短时间内:

他们 19 世纪的继任者嘲笑这个程序是不切实际和专横的混合体,是对数学好名声的诋毁。

但是对古典概率学家来说,没有什么比他们的演算应该应用于法理学、政治经济学和道德科学的其他部分更明显的了。为了理解他们的信心,我们必须首先理解启蒙运动道德科学的假设和目标,以及它们如何与经典概率论的假设和目标相协调。

个人主义和结构主义倾向之间的紧张再次出现,这次是在启蒙运动和现代主义阵营之间:

与 19 世纪的社会科学不同,道德科学的学生把个人而不是社会作为他们的分析单位。就他们与整个社会打交道而言,他们认为社会是这些个人的集合体。此外,道德科学试图揭示的规律性是这些个体做出理性决定的结果,而不是文化和社会总体结构的结果。

在这个意义上,理性的个人是社会规律性的原因;社会秩序来自有序的个体

像经典概率论一样,道德科学既是描述性的又是规定性的。一方面,他们声称揭示了人类思想和行动的不可改变的秩序;另一方面,他们敦促改变现有的社会安排,以更好地接近这一秩序。

许多细节和历史参考点如下,但它的关键是:

概率学家通过法理学进入道德科学,原因与微积分本身的历史和当时的政治气候有关。

在 1789 年大革命爆发和 1830 年七月君主制之间的法国政权更替中,这成为一个紧迫的政治现实。

在为道德科学服务的过程中,数学本身带上了道德色彩。

1.9 结论

最后,作为下一章的预演,总结这丰富而精粹的一章。

1837 年,当泊松声称已经用所有数学的严谨性证明了他的结论时,概率的经典解释在几个方面受到了攻击。

这些批评家也对证词和原因的可能性表示轻蔑;一个是试图量化不可估量的因素,如真实性,另一个是用纸上谈兵来代替诚实的实证研究。

到了 1840 年,这个被吹捧为明智的理论被简化为微积分,许多数学家和哲学家认为这是“智力失常”

数学家们第一次开始将概率论与其可疑的应用区分开来。

在 19 世纪初的几十年里,使经典诠释及其特有应用成为可能的知识和社会背景消失了。法国大革命和随之而来的社会紧张局势动摇了概率学家对单一、共享的合理性标准存在的信心,而几十年来关于预期正确定义的争论却没有动摇这一点。

理性的人分裂了,然后连同他们应该代表的知识分子和政治精英的共识一起消失了。在浪漫主义的第一次浪潮中,理性本身不再是一个隐含的计算问题,而是与不可分析的直觉和情感相一致。

经典的解释已经失去了它的题材。它也失去了融合客观和主观可能性的理由。

主观信念和客观频率开始时是等同的,结束时是截然相反的。

一旦客观可能性和主观可能性之间,以及概率计算和良好感觉之间的心理纽带消失,经典解释就变得既危险又主观,而且明显不合理。

贝叶斯被流放:

在常客们的口中,“主观的”变成了一个绰号,他们毫不留情地批评那些将“同样未决定的”等同于“同样可能的”的应用,就像贝叶斯定理的许多经典应用一样。

少数杰出的数学家,最著名的是英国的奥古斯都·德·摩根和 W. S .杰文斯,在 19 世纪中期支持一种或另一种概率的经典解释,但他们是四面楚歌的少数。

概率学家从少数人的理性转向了多数人的非理性。

第一章到此为止。

敬请期待下一期&如果你喜欢这本书,[请购买这本书](http://The Empire of Chance)!

另外关注我&查看我的其他帖子:)

——
在推特上关注:@ dnlmc
LinkedIn:linkedin.com/in/dnlmc
Github:https://github.com/dnlmc

公开人工智能竞赛的终结

原文:https://towardsdatascience.com/the-end-of-open-ai-competitions-ff33c9c69846?source=collection_archive---------12-----------------------

UC Berkeley’s Overmind winning the first StarCraft AI Competition

出自星际争霸 AI 大赛创始人。

更新: Dota 2 确实提供了一个脚本接口,使得机器人可以用 Lua 编写。然而,这种有限的接口并不能使机器人与远程进程进行通信,并保存有关所玩游戏的数据。

OpenAI Five 对人工智能来说是一个巨大的进步,但对人工智能研究人员来说也确实令人生畏。以前从未有过这么多用于构建人工智能系统的开放工具,但也感觉近年来学术界的准入门槛实际上有所增加。早在 2009 年,我就发布了一个公开的呼吁让任何感兴趣的人来建造最好的星际争霸 AI,并且它对任何对 AI 感兴趣的人开放。现在,似乎你需要获得封闭的 API、大规模计算能力和历史训练数据,才能在人工智能方面取得进展。

我提出这个论点是在唱反调,希望能证明我是错的。我希望看到更多的公开比赛,以及没有大量计算资源的研究人员可以继续在人工智能方面取得进展的领域。以下是我在最近的进展中看到的一些主要问题。

封闭 API

据我所知,OpenAI 正在使用一种 API 来构建和训练机器人,而学术研究人员却无法使用这种 API。如果你是一名研究生,想要为 Dota2 制作一个机器人,那么你需要等到当前的比赛结束,开源版本最终推出。对于像围棋这样的游戏来说,深度和强化学习已经取得了很大的进步,这个问题不是问题。但是,如果你是一名研究生,想从事拥有大量活跃玩家的视频游戏,你的选择是极其有限的。星际争霸 2 的 DeepMind API 看起来是一个很好的选择,但是你仍然会面临其他的挑战。

**解决方法:**找到带有您可以使用的 API 的游戏。我在研究生院的时候用育雏战争 API 为原版星际争霸写了一个机器人。这是一个巨大的黑客攻击,我设法让它与 Java 一起工作,但我非常幸运,这个项目没有被暴雪关闭。很高兴看到开源社区继续发展 BWAPI 和 Java 版本

Bot debugging from an early BWAPI-Java prototype.

电脑很贵

OpenAI 正在花费大量的计算能力来训练机器人,DeepMind 训练围棋机器人的努力也是巨大的。这是 OpenAI 在博客文章中提到的一个问题,但这也让学术界感到沮丧。学生不太可能有大量的云计算资源来训练表现专业水平的机器人。

**变通:**找到你能解决的子问题。这实际上是 OpenAI 以前做的事情,通过专注于 1on1 匹配,然后通过放松越来越多的约束,慢慢进展到 5v5。我在最初的星际争霸 AI 比赛中加入了一场受技术限制的比赛,但它没有完整的游戏选项那么受欢迎,部分原因是没有了解这个版本游戏的人类对手可供参与者训练。

One of the sub-problems in the original StarCraft AI Competition.

培训用数据

我的论文研究的目标之一是建造一个从职业玩家那里学习的星际机器人,但现在一段时间过去了,我意识到一种不同的方法可能会更有效。我可以为机器人如何行动指定一个奖励函数,然后让它自我训练,而不是向我的机器人展示如何表演。但是,我没有一个好的模拟环境,只能依靠当时从网上搜集的稀疏的训练数据。当你在处理子问题时,这尤其是个问题,比如 Dota2 中的 1on1,专业回放根本不存在。

**变通办法:**从网络上挖掘数据集,比如 TeamLiquid 等网站的专业回放。这对于 sub 问题不起作用,但是你可以用你自己的游戏来启动 replay 集合。我使用第三方工具来解析回放,然后用 BWAPI 构建了一个导出工具。

Exhibition match at the first StarCraft AI Competition.

后续步骤

我为游戏 AI 的学者和爱好者提供了一个悲观的观点。看起来你需要连接和强大的计算能力来推进游戏人工智能。这很有帮助,但这并不意味着没有伟大的方向你就会取得进步。下面是我的一些建议,让人工智能竞赛变得更加开放:

  • 开放 API 让机器人与人类对手对战
  • 提供重放数据的语料库
  • 与开源和云工具集成

由于 Keras 等工具和像 Colaboratory 这样的环境,使得与其他研究人员在模型上合作变得更加容易,现在很容易建立和运行深度学习环境。

在某种程度上,我最初呼吁研究开放的人工智能问题失败了。这是一个公开的问题,但我并没有完全鼓励参与者公开他们解决问题的方法。现在,伟大的协作工具已经存在,这是公开解决人工智能问题的好时机。

本·韦伯是 Zynga 的首席数据科学家。我们正在招聘!这篇文章是基于我在学术界的经验的观点,不代表 Zynga。

改变工程师的思维模式:从如何到为什么

原文:https://towardsdatascience.com/the-engineering-mindset-6b9d9368207e?source=collection_archive---------8-----------------------

在一个数据泛滥、信息泛滥的世界里,我们可以在家里舒适地从看不见的云上发现外面的天气;是时候后退一步,问一些重要的问题了。

作为这篇文章的前言,我想提一下,我是技术的倡导者。认为一个没有技术有效解决我们问题的理想世界存在是愚蠢的。也就是说,指数级增长会带来难以预料的结果。这就是为什么在当今社会意识是关键。技术幕后的神秘绿人到底是谁?

介绍:工程师思维

当一名工程师在工作中遇到问题需要解决时,他首先想到的问题通常是如何?我将如何创建此解决方案?我将使用什么样的技术?应该有多高的性能?这个可以优化吗?效率似乎是感兴趣的话题。然而,这里的问题是,没有人问为什么是。我为什么要造这个火箭?为什么我的公司资助战争?为什么我不能和家人分享我的工作?

计算机伦理领域的先驱 James H. Moor 简洁地解释了这个问题:

“多年来,计算机一直被用来计票。现在,选举过程正变得高度计算机化……在上次美国总统选举期间,电视网络不仅在加州投票结束之前,而且在纽约投票结束之前就预测了结果。事实上,当宣布获胜者时,半数以上的州仍在进行投票。问题不再是“在一场公平的选举中,计算机计票的效率有多高?而是“什么是公平的选举?“有些人在投票前就知道结果,这合适吗?问题在于,计算机不仅将每位候选人的选票制成表格,还可能影响这些选票的数量和分布。不管是好是坏,我们的选举过程正在改变。”

是时候改变工程思维了,不要只问怎么做。相反,我们必须停下来问 为什么

我们什么时候应该问为什么?

我想说,我们应该一直问为什么,尽管为了提供具体的指导,我将讨论我们应该保持警惕的三个技术领域。

  1. 机器学习偏差
  2. 数据收集和隐私
  3. 人工智能

从机器学习偏差开始

在过去的一年里,我致力于公平模型的数据科学研究。为了更全面地了解这个主题,我强烈推荐 Hanna Wallach 关于大数据、机器学习和社会科学的文章。

对我来说,一开始是对数据偏差的介绍,但很快演变成了一个关于机器学习危险的大开眼界的项目。我专注于修正在信用评分和贷款审批领域种族偏见的 ML 预测因子。但我意识到,还有一个更大的系统性问题不容忽视。

这个问题从 ProPublica 的风险评估案例研究中可以看得最清楚。在这起事件中,机器学习被用来预测罪犯成为惯犯的可能性。这种可能性被汇总成一个叫做风险评估的分数。这些评估在整个监禁过程中都要用到,有时甚至在法官做出最终决定之前交给他们。

这种情况的问题是,这些预测器的训练数据充满了冗余编码的偏差和歧视。事实证明,与白人罪犯相比,更多的非裔美国罪犯被给予了不公平的高评价。这个机器学习预测器无意中延续了种族主义的犯罪不公。

想象一下,如果创造这些预测器的数据科学家花时间注意到这个问题。尽管高性能的预测器仍然可以延续几代人的歧视,但重点是高度面向 ML 模型的优化和准确性。

它只是将问题从*“我如何优化这个模型的性能?”* To,“我为什么要创建这个模型?”如果更多的思考放在工作的目的上,预测者的社会分支可能不会那么容易被忽略。

数据收集和隐私

随着 GDPR 的全面展开,数据隐私已经成为科技行业内一个敏感的话题。很明显,在缺乏隐私的情况下,处理某人的数据可能会导致意想不到的后果。从不准确的数据中解读出的相关性和趋势会间接地将人们归类到一个他们无法抹去的角色中。[参见:被遗忘的权利

数据隐私官员开始质疑数据处理和删除的道德含义,但还没有围绕收集敏感数据的讨论摆在首位。在资本主义社会,公司利益相关者对收入的兴趣显然高于隐私。在美国,GDPR 变成了合规游戏,因为科技巨头害怕被罚款。历史上,美国公民的数据透明度一直是一种公关噱头,伴随着 GDPR 对欧洲公民的要求。

首席信息官们开始担心加州隐私法案,因为他们不能再依靠美国客户数据来弥补欧洲基于隐私开发的收入损失。缺少的对话包括在服从和原则之间的动机转换。

不要问,“*我们如何在遵守 GDPR 法案的情况下停止收入损失?”*我们必须问,“为什么我们的收入首先依赖于敏感数据的收集?”

忽略前者而问后者会让高管们暂停下来。或许为基于广告的收入模式收集敏感数据并不是唯一的解决方案。也许这将激发人们考虑一种根本不需要收集数据的基于订阅的替代方案。

人工智能

人工智能很容易成为伦理辩论的目标,原因很简单,因为机器人让人类感到恐惧,因为它们只不过是想象中的虚构物。随着神经网络研究的飞速发展,恐怖谷正成为一个旅游目的地。抛开对终结者的恐惧不谈,我们感兴趣的话题在于,劳动力自动化不再是过去的担忧。机器人正在取代我们的工作,创造了一个新的失业世界。

当我听我的同事们讨论最新的机器人厨师或自动驾驶汽车时,我看到他们的眼睛充满了可能性。创造这些突破性生物的工程师们对一项技术创新如此兴奋,他们没有意识到他们可能正在编码自己的未来。现在, Miso Robotics 已经创造了一个汉堡翻转助手,但是在几年内,这些汉堡可以很容易地成为建筑设计或代码行。

人类认为,机器人永远无法取代护士的温柔触摸,或音乐家的创造性灵魂。可惜,他们已经有了。思维模拟理论的研究目前正在进行中,这是对机器人同理心的推动。帮助机器人更好地理解人类的开创性尝试。这是一个误用工程思维的完美例子。

我问过为什么,我喜欢这个答案…这样够了吗?

我们再来仔细看看模拟心智理论。这一理论如果正确地付诸实践,将使机器人能够预测周围人的预期需求和行动。配备 SToM 的人工智能理论上能够更好地理解人类,在预测帮助他们的最佳方式之前模拟他们可能的行动。这篇论文解释了机器人如何能够解释他们决策背后的推理。随着神经网络变得越来越复杂,这个概念变得越来越困难。

这项研究似乎在伦理上是积极的。赋予机器人与人类共情的能力,并为它们的决策提供透明度,这听起来好得令人难以置信!这个理论让机器人理解我们,更重要的是,让我们理解它们

现在想想移情决策对成功至关重要的工作。自动化从来不是这些领域的担忧,因为机器人无法站在人类的角度思考问题。随着心理模拟理论的出现,移情就业不再是人类的保证。

很明显,这项研究试图解决人工智能的伦理问题。但是工程思维占了上风,深深埋藏的负面影响在不久的将来很容易浮出水面。Moor 甚至认为,劳动自动化可能会重新定义我们对工作的整个概念。

“传统工作可能不再被定义为通常发生在特定时间或特定地点的事情。对我们来说,工作与其说是做一件工作,不如说是指导计算机去做一件工作。随着工作观念开始改变,与旧观念相关的价值观将不得不被重新审视。”

结论

21 世纪的技术扩张时代已经被定义为如何。人类已经突破了自动化、预测和机器人的界限。我们已经创造了一个世界,在这个世界里,创业公司只有在追求收益而非道德的情况下才能生存。工程师们甚至在意识到他们自己工作的含义之前,就被分配了工作并创造了最佳解决方案。

早就应该进行系统性变革了。袖手旁观只会使我们已经陷入的问题永久化。作为工程师,是时候停止询问我们如何创造了。说,*“我不做,别人会”*是借口。相反,花点时间停下来想一想。真的觉得。然后问问你的老板、同事,最重要的是,问问你自己:

为什么?

基本数据科学文氏图

原文:https://towardsdatascience.com/the-essential-data-science-venn-diagram-35800c3bef40?source=collection_archive---------17-----------------------

Cross-posted on KDnuggets

几年前,德鲁·康威提出并分享了他现在无处不在的数据科学维恩图。这很有帮助,我们都受到了启发。谢谢你康威医生。

许多变种随之而来,我在这里提出我自己的改进。希望它们也能有所启发。我提议增加两项内容:统计应用的区分(多元)。非多元)以及学科精华 ( ,各技能集的主要贡献或作用)。

首先,让我说,我的维恩图,像所有的维恩图一样,有内在的缺陷。为什么?因为它是一个二维图,说明了什么是固有的多维动态。这部分体现在下角的免责声明中,没有显示沟通(听觉+视觉)和软技能的维度。创意坚韧自省诚实等属性也从图形中缺失。

需要

统计学广泛处理方差结构的量化,其令人高兴的结果是能够建立描述性、解释性、预测性和规范性模型(数据科学的输出)。因此,在数据科学维恩图上记录统计方法中最大的方差来源并不可耻:多变量统计方法*(评估≥ 3 个变量)之间的差异。【单变量&双变量】统计方法。*

是的,我在这里暗示这比被监督的之间的差别更大。无监督统计建模、参数非参数建模、。我这一主张所基于的方差度量是人类对高级统计方法的认知的显著差异。需求是人们应该更加意识到多元分析在第四次工业革命中发挥的核心作用。

这种划分的一个含义是,“传统研究”在很大程度上没有充分利用多元统计。根据你的学科,这个暗示可能不成立。不幸的是,对于许多学科来说,它确实成立。可以说,这一事实是如此多的行业容易受到干扰的部分原因。

这方面的一个例子是持续过度依赖决定系数(R 平方),这种情况在许多循环中持续存在。R-squared 对异常值没有抵抗力,仅与目标变量相关,可能会随着串行相关数据膨胀,并且在许多其他方面可能不可靠。尽管如此,它还是被大量使用——部分是因为 Excel 和几乎所有其他绘图工具使它变得容易获得。虽然 R 平方可以是一个有用的工具,但它仍然是一个必须正确使用的工具(例如,用于评估 bi 变量线性关联)。

多变量问题需要多变量工具,而大多数业务挑战本质上都是多变量的。在学习如何正确应用计算多元统计(⊆ " 机器学习")方面,许多分析师和技术专业人士还有很长的路要走。因此,他们仍然容易受到竞争对手的干扰,这些竞争对手利用多变量算法从数据中获得更好的洞察力……或者他们自己采用无效策略造成的干扰(例如创新者的困境,其典型特征是忽视低端市场、低利润的机会,而这些机会可能会催生未来的竞争)。

The Essences of Contributed Expertise

本质含义

这三个专业领域也可以用他们所提供的更简单的术语来表述(,他们的 本质 ): 直觉有效性 ,以及 自动化 )。自动化也可以称为升级*。他们的融合为我们提供了改进的 洞察力 。正如所描绘的,洞察力也可以简单地来自拥有有效直觉的重叠(自动化不是先决条件)。历史上的大部分时间都是如此。当前对高级分析的大肆宣传主要是通过自动化数据收集、处理和分析来加速洞察。*

“偏见”的危险存在于“传统研究”区域,是数据科学维恩图此次更新的主要灵感。统计上的“偏差”是排除或忽略重要的变量,就像口语中的意思一样。由于大多数人不熟悉处理多变量分析,当多变量问题作为双变量或单变量问题处理时,偏差的危险最容易出现。如上所述,偏见的存在使组织容易受到新来者的破坏,新来者的多元方法使他们成为更有洞察力的竞争对手。

还要注意,对应于“机器学习”的重叠区域缺乏直觉(,是“daft”——一种明显的偏差形式)。一些人无疑会对此提出抗议。但是想想看,在我们与物理世界和社会的几十年互动中,人们获得了一种没有任何人工智能模型能够接近获得的直觉水平(举例,知道任何人工智能应用程序知道并欣赏盐的味道吗?).ML 模型只知道我们告诉他们的(我们提供的数据),模型输出最终会反映出来。ML 模型可以变得非常擅长我们训练它们做的事情,但它们仍然需要由人类来训练。(注意:即使是年轻的人类也需要年长的、更智慧的人类来训练。)从广泛经验中获得的背景建立直觉*。背景很重要。*

标记为“传统软件”的领域很难描述。这又回到了试图用二维图形概括多变量系统的局限性。这种重叠也可以被用来描述机械自动化(这无疑构成了全球经济的重要组成部分)。为了讨论的目的,在大多数白领智力活动的背景下,可以说在执行风险评估时,这个领域可能缺乏严密性。

操作顺序

在大多数情况下,在如何整合每个专业领域的顺序中,有一个固有的操作顺序或“最佳实践”。参与的顺序通常是直觉首先然后验证*,然后自动化。我们通常会在直觉首先引导我们产生一个想法后,测试这个想法是否有效。同样,我们不应该升级(自动化)实现,除非它们首先被认为是有效的。*

上述提议的顺序有例外吗?当然可以!机器学习输出引起领域专家注意的关联并不罕见,而他们以前忽略了或没有意识到这一点。也有很多案例,领域专家的启发式方法已经在自动化系统中实现,并且在数据收集变得可能时得到验证。让我们也不要忘记自动化在帮助我们首先收集数据方面的作用,这些数据可以在以后用领域专业知识和统计严谨性进行评估。

σ

总而言之,这个新的文氏图告诉我们一些我们已经知道,但可能还没有正式表达出来的事情。这是一个简单的模式,因此可以帮助人们更好地确定工作流的优先级。例如,它鼓励数据科学家通过首先与领域专家交谈来开始他们的工作——这已经被吹捧为最佳实践。如果你是那种不满足于列出做什么做什么还想了解为什么做的人,了解事情如何发生的本质会有所帮助。**

大约 70 年前,塞缪尔·威尔克斯写道:“有一天,统计思维将像读写能力一样成为高效公民的必要条件。”在不久的将来,多元统计思维可能会成为远远更多职业的必备条件。如果我对数据科学维恩图的重复使用对任何人有所帮助,我会认为这是值得的。

世界是我们造就的,它需要变得更聪明 。如果你喜欢这篇文章,考虑与朋友分享。

(注:这些文氏图图形可能与属性一起使用。上图的初始迭代于 2017 年初首次发布在 www.adret-llc.com和 LinkedIn 上。)

附录

(2020 年 11 月)

自动化的效果在本文最初的草稿中没有给予足够的重视。某些形式的自动化对于维持我们这个星球上 70 多亿人的生活是必要的。与此同时,某些其他形式的自动化对社会构成了巨大威胁——也就是说,那些被不人道和不可持续地部署的自动化。为了理解自动化的风险,我推荐两个资源:书籍 【数学毁灭的武器】 和电影 《社会困境》

错误信息正以算法的速度向我们袭来。某些坏演员已经发现,他们可以通过用虚假的淹没民众来掩盖他们自私的行为。在更阴险的情况下,他们通过算法利用我们与家人和朋友的关系向我们提供错误信息。虽然每分钟就有一个白痴诞生,但如果他们在脸书或 YouTube 上花太多时间,每就会产生一个白痴。人类现在正与训练有素的机器学习黑匣子进行竞争,这些黑匣子旨在优化利润或灌输宣传。人类经常会输。

(image source unknown)

就连朗朗上口的短语“假新闻”(不幸的是,部分来源于事实)也被用来引导人们从半审查的新闻来源转向充斥着疯狂阴谋论的社交网络平台。考虑到社交网络因此获得的额外流量,如果这些社交网络最终推广了主流媒体(MSM)新闻都是假的这一错误观念,那就不足为奇了。

来自物理自动化的威胁对社会来说也是可怕的。美国中产阶级已经受到无数制造业工作外包的冲击,现在又面临着由能干而灵活的机器人承担大量额外工作的威胁。从开卡车到煎汉堡,从查阅法律文件到诊断癌症,从绘画到作曲,越来越多的职业被证明容易受到自动化的影响。(事实上,就在几年后,这份声明可能需要另一份增编。)

由于自动化趋势进一步加剧了社会不平等和/或文明,它们会破坏社会本身的稳定。考虑到社会不稳定的危险(想想法国大革命期间断头台的猖獗使用),所有监督自动化工作的决策者都应该整体考虑。优化不应该仅仅是金钱上的努力,还应该存在于社会可持续发展的框架中。它可能会帮助每个人保持冷静的头脑…并正确地安装在他们应该在的地方。

熟悉受害者三角(又名 戏剧三角 ,一种 交易分析 的工具)的心理动力学的人都知道,逃离其中苦难漩涡的唯一方法是 负责 解决问题。在数据分析的情况下,这意味着 责任 来平衡直觉、有效性评估、和实现自动化 …对我们的组织和我们的社区都是如此。

数字网络生物的伦理

原文:https://towardsdatascience.com/the-ethics-of-digitally-networked-beings-82de76fec3b3?source=collection_archive---------17-----------------------

“算法无法领悟真理。他们只是重复过去。”—凯西·奥尼尔

自从我读了凯茜·奥尼尔的*数学毁灭的武器,*以来,基于算法的决策中的伦理问题一直在我的脑海中挥之不去,它提出了一个令人信服的论点,即我们的算法通过将人类偏见编码到我们的技术中,正在延续、巩固甚至放大不公正的模式。我目前正在阅读的弗吉尼亚·尤班克斯的《T2:不平等的自动化》(T3)只会加深这些担忧。

我们正在做什么来防止技术造成伤害?我想知道。我开始研究当前的努力,发现了许多从事伦理和人工智能领域工作的组织——人工智能研究所深度思维伦理学会、 人工智能合作伙伴,仅举几例。凯茜·奥尼尔创办了一家审计算法的公司,而像 AI4ALL 这样的非营利组织正在从另一个角度解决这个问题,通过为未被充分代表的人才建立管道来增加人工智能的多样性和包容性。

在这个过程中,我偶然发现了 伦理上一致的设计:用自主和智能系统优先考虑人类福祉的愿景 ,这是电气和电子工程师协会(IEEE)的一个项目。IEEE 是一个由工程师、科学家和相关专业人员组成的大型专业组织,参与编写该文件的 250 名专业人员被描述为来自“六大洲的参与者,他们是来自学术界、工业界、公民社会、政策和政府的思想领袖。”该指南目前是一个提案,被命名为“第二版——公众讨论”提交意见的截止日期已经过了,但是反馈(超过 72 个人/组织的超过 316 页的反馈)已经公布在网上,所以我也通读了一遍。该文件的最终版本将于 2019 年发布。

执行摘要的开头是:

随着自主智能系统(A/IS)的使用和影响变得无处不在,我们需要建立社会和政策指南,以便这些系统保持以人为本,服务于人类的价值观和伦理原则。

我带着兴趣、欣赏和紧迫感读了下去,无论是在合作和所涉及的专业知识方面,还是在文件本身的范围方面,我都对这一努力的规模印象深刻,这一范围从经典伦理到性爱机器人,从福祉指标到自主和智能系统的法律地位。

我不想在这里总结 263 页的提案草案和对它的广泛评论。相反,我选择了一些我认为特别发人深省的段落。

例如,起初,我对文件语言中的预设印象最深,这些预设让我感到惊讶,例如:“如果自治系统是我们信任的、有创造力的伙伴”,或者“人类将面临更大的压力,以有效地与这些系统‘合作’。”我一直认为技术是一种工具,但这些描述意味着一种不同的关系,一种更加合作和平等的关系。这份文件承诺为技术与人类价值观的结合提供指导,但有时我发现它令人担忧。关于混合现实的一个候选推荐(“其中真实世界和虚拟世界对象一起呈现在单个显示器内”)如下:

就混合现实的性质将如何影响我们的社会互动开展广泛的教育,以避免广泛的负面社会后果。

在这句话的结构中嵌入的不仅仅是潜在的伤害,还有这样一种想法,即在没有广泛教育干预的情况下使用混合现实可能会产生巨大而有害的影响。当我读到这一行,也是关于混合现实的时候,我感到了类似的不适:

通过这种方式,个人可以“满足”自己的社会需求,而无需回报他人的需求。这种通过完全沉浸式技术人为“满足”基本社会需求的方式,可能会对社会结构产生意想不到的影响

社会的基本结构?光是这个索赔的范围就让我很不舒服。该案文尽管仍是草稿,但却是由一个专家小组提出的,并得到了一个大型和非常有声望的组织的赞助。换句话说,我非常认真地对待在此表达的关切和建议。在某一点上,指南建议,好像我们已经忘记了,“广泛的关于积极的人际关系/接触的益处的教育课程。”甚至在提议的标签系统中对图像的选择也让我犹豫了:

政府批准的标签系统,如在含有有毒化合物的家用清洁用品上发现的骷髅和交叉骨,可以用于这一目的,以提高用户在与 A/IS 互动时意识到的机会。

在第 102 页,“真实”这个词的特点让我觉得如此愤世嫉俗,以至于我怀疑自己是否误读了这句话。

对于个人来说,要在算法时代实现并保持个人信息的平等,有必要包括一个主动的算法工具,作为他们在数字和“真实”世界中的代理人或监护人。(“真实”是指物理或公共空间,用户不会意识到自己处于面部识别、生物识别或其他工具的监视之下,这些工具可以跟踪、存储和利用他们的数据,而无需事先征得同意或许可)。

我们是否创造了一个需要监护人的世界,或者一个相信我们的在线或离线行为都是隐私的错觉世界?我想我们可能有。但这是我们想要的世界吗?这一愿景与我们的福祉一致吗?即使我们想避免,我们能避免吗?

虽然我对那些从小说中熟悉的想法感到正式到来——以及需要讨论——感到震惊(一个候选建议涉及围绕死亡的新“社会规范”,例如,包括“向家人和朋友发送卡片,让他们知道某人的意识已经从碳基转移到硅上”,但我也觉得这些指导方针正在竞相赶上我们已经达到的水平。我阅读并同意对透明度的呼吁以及个人理解和控制其数字信息的需要,但我们目前也在使用多年来未能满足这些标准承诺的技术。

“根据皮尤最近的研究,91%的美国成年人认为消费者已经失去了对公司如何收集和使用个人信息的控制,”迈克·奥克特在为麻省理工科技评论撰写的一篇文章中写道。正如 IEEE 指南正确指出的那样,“通过 A/IS 轻松或随意共享的数据可用于做出个人可能不希望共享的推断。”斯坦福大学的研究就是一个例子,其中公开发布到约会网站的照片被用来训练神经网络来检测性取向。

“弱势群体需要保护,”IEEE 指南指出。老年人和智力受损的成年人被确定,但这些人口统计数据只构成了我所认为的我们最脆弱人口的一部分。“根据美国教育部和国家扫盲研究所的数据,美国约有 3200 万成年人不识字,”瓦莱丽·斯特劳斯在 2016 年为《华盛顿邮报》撰写的一篇文章中写道。“经济合作与发展组织发现,50%的美国成年人不能阅读八年级水平的书籍”,“19%的成年人不能阅读报纸,更不用说填写求职申请了。”我想我可以在“报纸”这个词旁边加上“服务协议条款”,没有人会反对,尽管大多数人,包括我自己,很少阅读它们。

“‘我已经阅读并同意条款’是网络上最大的谎言。我们的目标是解决这个问题,”服务条款上这样写道;没看,一个“用户权利倡议对网站条款&隐私政策进行评级和标注,从很好的A 级到很差的E 级”我发现了这个组织,因为它与 IEEE 指南有联系,我去了那个网站了解更多。谷歌收一个 B 类;脸书和推特——许多人经常使用的社交媒体网站——还“没有上课”,因为即使是这些关心的志愿者也没有“充分审查条款”

“六年前,34%的青少年每天使用社交媒体超过一次;《常识》杂志最近的一份报告称:“如今,70%的人使用手机,其中 16%的人“几乎经常”使用,另外 22%的人一小时使用几次。”。与其争论青少年是否是一个弱势群体(我会说是的,但这是基于我对年轻时自己的回忆,而不是一项正式的研究),我想指出这些青少年已经创造的数字记录,一个可能永远留在他们身后的“数字足迹”(我也有一个,但我的数字足迹在晚年才开始加剧)。准则认识到这一点:

PII 被定义为基于个人独特的物理、数字或虚拟身份可以合理地与个人联系起来的任何数据。因此,通过每一次数字交易(显式的或观察到的),人类都在生成自己身体的独特数字影子。

你只需要去剑桥大学的 Apply Magic Sauce ,一个“从人类行为的数字足迹中准确预测心理特征的个性化引擎”,看看陌生人可能会从我们的社交媒体使用中推断出我们的什么。该技术承诺:“通过分析你在线行为的各个方面,我们的预测 API 引擎可以让你看到其他人如何看待你,预测一系列变量,包括个性、幸福度、智力、创业潜力等。”“我们的工具旨在帮助人们了解数字自我对其他人来说可能是什么样子,以及这可能会告诉你你到底是谁。”

我到底是谁?这一说法让我想起了 IEEE 指南中的另一句话——这句话来自经典伦理学的一个章节——它也让我停下来思考,因为它指出人类正开始“将我们的存在转变为数字网络存在”换句话说,不仅仅是技术,人类本身也在进化;我们与技术的关系已经改变了我们的本质。

“亚里士多德阐明的幸福是一种实践,它将人类福祉定义为一个社会的最高美德。IEEE 指南解释说:“大致翻译为“繁荣”,幸福生活的好处始于有意识的沉思,伦理方面的考虑帮助我们确定我们希望如何生活。”该准则的任务声明如下:

确保参与自主和智能系统设计和开发的每一个利益相关者都受到教育、培训,并有能力优先考虑伦理因素,从而使这些技术为人类造福。

该指南倡导“整体经济繁荣”,而不是“生产率提高或 GDP 增长等单向目标”这种智慧在约翰·兰彻斯特的《纽约客》 的文章中有所体现,他在文章中讨论了一种治疗失明的方法:“这个项目取得了巨大的成功,因为它防止了成千上万的人失明,但有一个问题:参与其中的经济学家无法证明这项冒险是值得的。一项成本效益分析是“不确定的”:接受帮助的人太穷了,以至于保护他们视力的好处没有产生太多的金钱影响。"

本着造福人类而不仅仅是底线的理念,该指南建议我们使用反映福祉的指标,如社会幸福,以更广泛地了解技术的影响。包容性和多样性反复出现,无论是在我们必须考虑的哲学体系方面,还是在技术评审委员会中应该找到的背景和经验范围方面,还是在创建文档本身的过程中。一次又一次,我在这篇文章中听到的信息是技术必须为我们服务;技术应该与我们的福祉相一致。技术应该帮助人类繁荣。

我发现自己在思考自动驾驶汽车。如果将社会福祉考虑在内,我不认为自动驾驶汽车会成为如此多当前伦理和人工智能辩论的试金石。相反,我们应该投资于安全、快捷、廉价的公共交通,并找出最佳的新路线。但是我们有了自动驾驶汽车,现在我们正在努力解决围绕它们的问题,在我们部署它们之前,它们应该有多安全,我们如何判断,它们将如何影响人类和我们的环境,以及汽车本身应该如何做出选择。我们可能正在成为数字化网络生物,但我们也在要求我们的数字技术做出传统上只属于我们自己的决定。IEEE 指南内容如下:

自动驾驶汽车在决策中对一个因素的优先顺序需要反映其目标用户群体的价值优先顺序,即使这一顺序与个别设计师、制造商或客户的顺序相冲突

2017 年对纽约市居民的一项调查发现,80%的受访者选择“转向以避免撞到行人。”只有 5%的人优先考虑车内乘客(15%的人说“不知道”);一篇 2016 年的汽车和司机报道称,“梅赛德斯-奔驰只是想给它的自动驾驶汽车编程,以拯救车内的人。每次都是。”梅赛德斯-奔驰自动驾驶汽车会被禁止在纽约街道上行驶吗?一辆汽车能根据它的位置自动切换进入或退出杀死行人模式吗?当我点击了一个名为“玩这个杀手级自动驾驶汽车伦理游戏”的 TechCrunch 故事的链接,发现自己在麻省理工学院的道德机器上时,我想到了这些。事实上,当我坐在电脑前选择谁能活下来——怀孕的行人或没怀孕的行人,三名乘客或过马路的单身女人——以及谁会死的时候,我觉得自己好像在玩游戏。我既不是司机也不是行人,我是被排除在外的决策者,在两条车道中选择一条,哪怕只是因为我没有选择直接右转撞墙。

IEEE 指南包括一个词汇表,其中包含术语以及作者确定的在四个专业领域使用的“通用定义”:计算学科;工程;政府、政策和社会科学;伦理和哲学;以及“普通语言”。如果没有确定共同的定义,术语表欢迎提出建议。例如,对于“透明”这个词,普通的语言定义是“容易被看穿、识别、理解或察觉(OED)”;足够的照明来赋予理解;”在工程和计算学科领域,还没有提供透明性的通用定义。当我看到占位符文本时,“我们欢迎推荐!”我再次想到了自动驾驶汽车。该准则指出:

A/IS 的设计应以透明度和问责制为主要目标。如果可能的话,嵌入在系统中的逻辑和规则必须对系统的监督者可用。然而,如果系统的逻辑或算法不能用于检查,那么必须有替代方法来维护透明度的价值。此类系统应接受风险评估和严格测试。

在最近为《卫报》 撰写的一篇文章中,安德鲁·史密斯指出,“目前正在测试的自动驾驶汽车可能包含 1 亿行代码,鉴于没有程序员能够预测现实世界道路上所有可能的情况,他们必须学习并接受不断的更新。”他指出,在汽车无缘无故加速后,对丰田凯美瑞的软件进行故障排除需要 20 个月的时间和两名专家,“揭示了程序员所说的“意大利面条代码”的扭曲质量,充满了算法的碰撞和争斗,产生了异常的、不可预测的输出。”

我想起了迪恩·波默罗(Dean Pomerleau)1991 年的自动驾驶汽车研究,这项研究似乎进展顺利,直到有一天他的车驶近一座桥,突然转向。“只有在广泛测试了他的软件对各种视觉刺激的反应后,Pomerleau 才发现了问题,” Davide Castelvecchi 为 Nature 写道,“网络一直使用绿草如茵的路边作为道路方向的指南,所以桥的出现让它感到困惑。”

我读过一些论点,认为自动驾驶汽车——通过消除分心、疲惫等导致的人为错误——将使我们的街道更加安全。车道可以被花园和带操场的停车场取代。我不认为这是一个糟糕的愿景,但我仍然担心我们如何到达那里,以及当我们到达那里时,谁将能够点击智能手机应用程序,从操场上抢一辆车回家,而谁(从更远的公园或低收入地区打电话,也许)不会。

明确的说,我想到自动驾驶汽车是因为它们的存在。他们在这里,尽管仍处于测试模式。我阅读 IEEE 的伦理上一致的设计不仅仅是为了指导我们的未来,也是为了支撑我们现在的世界,因为我们会问,我们到底在哪里?

凯茜·奥尼尔在今年早些时候接受《连线》杂志采访时提出了一个令人信服的观点:“我们仍然关注错误的事情。我们并没有衡量对民主造成的实际损害,因为民主很难衡量。相反,我们将关注无人驾驶汽车造成的行人死亡等问题。”

我承认。我一直在思考很多关于汽车的问题,但话说回来,即使是自动驾驶汽车也可以在反乌托邦的监控状态中发挥作用。经济学家报道说:“首先,AVs 将记录他们身边发生的一切。”。"犯罪发生时,警察会询问附近的汽车是否看到了什么。"麻省理工科技评论最近刊登了一篇报道,引起了人们对目前由无人驾驶自行车收集并与城市共享的数据的隐私问题的担忧。

与隐私相关的问题和建议在 IEEE 指南中非常普遍,从数字监护人到表达有意义的同意,再到识别数据滥用的隐私评估,以及承认政府可以访问并可能滥用我们的数据。指导方针如下:

自从技术公司和信号情报机构(如美国国家安全局和英国政府通信总部)之间的合作指控被披露以来,政府大规模监控一直是一个主要问题。

电子前沿基金会 (EFF),在其对草案的反馈中,以令人钦佩的清晰明了阐述了我们的情况:

只有像东德这样的社会,愿意为每 6.5 个公民招募一名线人,才有可能观察和关注所有公民的行动。但是,已经部署的监控技术和用于分析数据的机器学习的结合将意味着彻底的监控成为可能,而不需要投入如此巨大的金钱和劳动力。机器学习实现如此有效的大规模监控的潜力降低了威权主义的价格标签,并对自由开放的社会构成了新的威胁。

《大西洋月刊》最近用了整整一期来讨论这个问题,*民主正在消亡吗?*在他的作品中,杰弗里·戈德堡写道:

我们发现自己正处于一个巨大的、不受监管的、未经充分检验的实验中,以确定自由民主是否能够在社交媒体、生物技术和人工智能中生存。

皮尤 2017 年关于网络言论自由未来的报告也很值得一读,这份报告向我介绍了“武器化叙事”这个术语。有一句话特别引人注目,因为它引起了我最近阅读的许多其他东西的共鸣,这就是布鲁克林学院新闻和媒体研究主任约翰·安德松的观察:

卡斯·桑斯坦(Cass Sunstein)曾称之为“大众利益中介”的报纸、网络电视等的持续萎缩。这意味着我们的社会已经到了一个地步,人们可以选择和定制各种不同版本的“现实”,以适应他们现有的意识形态和其他偏见。在这种环境下,合作对话和共识的希望渺茫。

安妮·阿普尔鲍姆在一篇关于波兰向专制主义转变的文章中,也提到了技术在人类操控中的作用。她写道,今天两极分化的政治运动不需要 20 世纪的“列队行进、火炬点燃的游行、恐怖警察”。相反,人们只是被鼓励去面对另一个现实。“有时,替代现实已经有机地发展起来了;更多情况下,它是在现代营销技术、受众细分和社交媒体宣传的帮助下精心设计的。”

IEEE 指南包括情感计算领域(与情绪和类情绪控制相关的问题)以及虚拟和混合现实的建议,但在我阅读时,我意识到这些建议不仅针对孤立的游戏环境或个人助理,它们“推动”我们做出“健康的选择”,还针对我们的“真实”世界,在这个世界中,我们可能没有意识到自己被监视和操纵。 在这个世界里,像脸书和 Twitter 这样的公司通过算法塑造我们看到的内容,机器人传播错误信息,试图说服我们或把我们推向我们可能不会去的方向,90%的人点击由像谷歌这样的搜索算法返回的前两个结果之一。 如果我们正在进化成数字网络生物,世界也在进化以适应我们笨拙的新形式。

《自然》杂志一篇题为“人工智能研究中有一个盲点”的文章中,Crawford 和 Calo 写道,“从医院到法庭,自动自治系统已经部署在我们最重要的社会机构中。然而,还没有商定的方法来评估这种应用对人类的持续影响。”

在关于福祉和旨在复制人类任务、行为或情感的人工智能技术的一节中,IEEE 指南指出:

拥有复杂操作技术(所谓的“大推动”)的人工智能将能够指导个人完成整个行动过程,无论是复杂的工作流程、免费内容的消费还是政治说服。

本节中给我印象最深的候选建议是,需要“确定人工智能/信息系统对人类福祉的影响问题的学术研究状况”,并将研究汇总到“人工智能/信息系统社区的集中存储库中”,这似乎只是因为它是我们思考过程中的一个早期步骤。"

由于其他原因,我也一直在考虑集中式存储库。在最近为大西洋撰写的一篇文章中,哈拉里指出民主和独裁是不同的数据处理系统。“民主将处理信息和决策的权力分配给许多人和机构,而独裁将信息和权力集中在一个地方,”他写道。这种想法让我很不舒服,因为我意识到我们产生了多少数字数据,而我们对如何使用这些数据的控制又是如此之少。我想到了中国的公民分数。以下是达琳·斯托姆在电脑世界中的故事概述:

新的“社会信用系统与 13 亿中国公民的国民身份证相连,根据他们的行为对“你社交图谱中朋友的活动——你在社交媒体上确定为朋友的人”进行评分。公民的信用分数,或者说“公民分数”,会受到他们自己和他们朋友的政治观点的影响。该系统利用“信息时代的所有工具——电子购买数据、社交网络、算法分类——来构建社会控制的终极工具,”美国公民自由联盟言论、隐私技术项目的高级政策分析师 Jay Stanley 说。

*《科学美国人》 *的一篇文章写道:“根据最近的报道,每个中国公民都将获得一个所谓的‘公民分数’,这将决定他们在什么条件下可以获得贷款、工作或去其他国家的旅游签证。”。在这篇文章中,作者还指出,“特斯拉汽车公司的埃隆·马斯克、微软公司的比尔·盖茨和苹果公司的联合创始人史蒂夫·沃兹尼亚克都警告说,超级智能对人类来说是一个严重的危险,甚至可能比核武器更危险。”

IEEE 指南中让我印象深刻的一行不是候选人推荐,而是一行背景信息,在一个专门讨论幸福和意外后果的章节中分享。该生产线将智能轮椅视为智能轮椅,在链接文件中描述为使用“机器视觉和学习技术……来帮助防止与障碍物碰撞,并通过自适应提示提供提醒和导航帮助”:

例如,一个寻求提高使用轮椅的人的福祉的团队发现,当提供使用智能轮椅的机会时,一些用户对更多移动的机会感到高兴,而其他人则认为这会减少他们的社会接触机会,导致他们的福祉整体下降。

与推椅子的人的接触比智能轮椅所承诺的机动性更受重视。我想知道这项研究的受试者有多少人际交往。在福祉部分,指导方针还指出:

只需花费很少的资源,一个陪伴机器人就能提供重要的心理帮助。一方面,这让社会更有爱心,但另一方面,对人工陪伴的依赖表明了这方面社会资源的缺乏。

在这里,“缺乏社会资源”这个词让我觉得它代表了对我们当前制度的更详细、更直白的描述。我们的社交网络中有一个洞,我们通过这个洞扔进了科技,并带来了闪闪发光但往往未经证实的美好承诺。机器人伴侣的想法也出现在情感计算部分,指导方针写道:

人与人之间的关系目前被认为更有回报,但也比使用未来的机器人性工作者更难维持。

该指南包含一整节专门介绍性爱机器人的内容,承认“这些系统会干扰人类伴侣之间的关系动态,引起嫉妒或厌恶感。”我读了反对性爱机器人运动的立场文件,并被提醒权力和性的动态是多么复杂,即使只限于人类。本节中的候选人建议之一是:

商业营销的 AI 不应该被认为是法律意义上的人,也不应该作为人进行营销。

自主智能系统的法律地位是一个我没有花太多时间思考的问题,直到我阅读了 IEEE 指南,其中有一节讨论了 A/IS 技术应该如何由法律来描述的问题。例如,在给予法人地位方面,准则规定:

这种地位起初似乎很显著,直到考虑到给予公司、政府实体等的长期法人地位——它们都不是人,尽管它们由人管理。

注意到的其他选择是将 A/IS 视为“其人类开发者和用户的纯粹产品和工具”或“完全没有先例的东西,这就提出了一个问题,即一种或多种类型的 A/IS 是否可以被赋予一种中间的——也许是新的——类型的法律地位。”

我想到了 HitchBot,一个在费城被斩首的搭便车机器人人形迎宾机器人,一个愤怒的顾客在日本软银商店购物时踢了他一脚。“根据警方的报告,该男子说他对一名店员的态度感到愤怒。‘胡椒机器人’现在移动速度更慢了,它的内部计算机系统可能已经受损。”当一个孩子看到一个成年人攻击一个看起来像人类的机器人时,她会学到什么?击打人形机器人如何改变或反映我们对彼此的看法?指导方针指出:

我们的结论是……A/IS 还不值得任何形式的“人格”——然而,A/IS 是否能够或应该被授予这种地位的事实表明了技术以及相关的法律和伦理问题的增长速度

然而,给我印象最深的一句话是这样的:“作者希望这篇文章能为立法过程提供信息,并激励更多的法律界人士参与进来现在*。”*

斜体的现在在我看来像是在呼救。

我欣赏 IEEE 指南提案的一个地方是“进一步阅读”部分,它包含了一个文章和论文的列表,我阅读了其中的许多文章,有时还会在本文中引用。对于任何希望更好地了解我们在这些问题上的想法的人——我相信我们每个人都是这场讨论的利益相关者——该文件提供了一个文献速成班。

我发现不祥的事情之一是包括自主武器。指导方针如下:

职业道德准则的制定是为了恰当地解决自主系统的发展和自主系统造成伤害的意图。

对人类造成伤害与人类的繁荣是不一致的。将这一讨论纳入准则破坏了文件的整个前提,并使之有问题。我知道这项工作正在进行。我也读过一些无意伤害人类的自主武器。迈克·韦纳写道:

现在,来自伍斯特理工学院的研究人员已经开发出一种能够独自猎杀狮子鱼的自主机器人。但是这个机器人不仅仅是识别和杀死入侵的鱼——用锋利的长矛钩住鱼并把它放倒——它还允许渔民把死鱼取出来,收获并出售。

我们在哪里划线?一个自治系统能拿什么命?

在他们的文章《中,大数据研究中的人类主体在哪里?雅各布·梅特卡夫和凯特·克劳福德指出,“道德准则往往在危机事件后出现。”当我让我们的世界遵守这些被提议的指导方针,思考我们的现状和未来时,我经常想起这句话。

我非常感谢那些为 IEEE 指南投入如此多时间和精力的人们。这是一次重要的谈话,我们都应该收听,我相信你的声音会让我们受益匪浅。

— — — —

IEEE 自主智能系统伦理全球倡议。符合伦理的设计:用自主和智能系统优先考虑人类福祉的愿景,第 2 版。IEEE,2017。https://standards . IEEE . org/industry-connections/EC/autonomous-systems . html

数据分析的演变

原文:https://towardsdatascience.com/the-evolution-of-analytics-with-data-8b9908deadd7?source=collection_archive---------8-----------------------

近来,我们在信息技术领域取得了巨大的进步。在技术生态系统中取得的一些革命性成就确实值得称赞。数据分析是最近一二十年最常用的词。因此,了解它们为什么相互关联、市场中的哪些角色目前正在演变以及它们如何重塑业务非常重要。

对于那些已经意识到其潜力的人来说,技术通常被视为一种恩惠,但对于那些跟不上技术快速发展的观众来说,它也可能是一种诅咒。每个时代都有其突破的时刻和同等份额的受害者(或者我更愿意称之为附带损害)。时至今日,每一个受货币驱动的行业都完全依赖数据和分析来生存。

这篇博客试图审视这些不同的阶段:简化各种流行词汇,叙述从未解释过的场景,并关注前方的道路。所以,事不宜迟,拿起你的“作弊日”大餐&让我们沿着记忆之路走一走。

Analytics 1.0对商业智能的需求:这是数据仓库的兴起,客户(业务)和生产流程(交易)被集中到一个巨大的存储库中,如 eCDW(企业整合数据仓库)。在获得对重要业务现象的客观、深刻理解方面取得了真正的进步,从而使管理者在做出决策时能够基于事实超越直觉。

使用 ETL 和 BI 工具捕获、转换和查询 eCDW 周围的数据。在此阶段开发的分析类型主要分为描述性(发生了什么)和诊断性(为什么会发生什么)。

然而,在这个时代观察到的主要限制是,数据的潜在能力仅在组织内使用,即商业智能活动仅处理过去发生的事情,而不提供对未来趋势的预测。

分析 2.0 →大数据 : 随着公司走出舒适区,开始追求更广泛(如果不是更好的话)的方法来实现复杂的分析形式,上一个时代的某些缺点变得日益突出。令人惊讶的是,客户对这一新战略反应良好,并要求从外部来源(点击流、社交媒体、互联网、公共倡议等)获取信息。对强大的新工具的需求以及通过提供这些工具获利的机会很快变得显而易见。不可避免地,“大数据”一词被创造出来,以区别于纯粹由公司内部交易系统产生的小数据。

公司对员工的期望是帮助工程师平台用快速处理引擎处理大量数据。他们没有预料到的是来自一个新兴的个人团体的巨大反响,或者今天更为人所知的*“开源社区”*。这是分析 2.0 的标志。

在社区前所未有的支持下,像大数据工程师& Hadoop 管理员这样的角色在工作领域不断增加,现在对每个 IT 组织都至关重要。科技公司匆忙建立新的框架,不仅能够吸收、转换和处理 eCDW/数据湖周围的大数据,还能在其上集成预测(可能发生的事情)分析。它使用描述性和诊断性分析的结果来检测趋势、聚类和异常,并预测未来趋势,这使它成为一个有价值的预测工具。

在当今的技术生态系统中,我个人认为术语大数据已经在许多场合被使用、误用和滥用。所以从技术上来说,*‘大数据’*现在真正的意思是’所有数据’——或者仅仅是 数据

**分析 3.0 →数据丰富的产品:**先驱大数据公司开始投资分析,以支持面向客户的产品、服务和功能。他们通过更好的搜索算法、推荐、购买产品的建议和高度有针对性的广告吸引观众到他们的网站,所有这些都是由植根于大量数据的分析驱动的。大数据现象的爆发像病毒一样传播。因此,现在不仅仅是科技公司和网络公司可以通过分析数据来创造产品和服务,几乎每个行业的每个公司都可以做到这一点。

另一方面,大数据技术的广泛接受带来了喜忧参半的影响。虽然精通技术的巨头通过赚更多的钱稳步前进,但大多数其他企业&非技术公司以不了解数据为代价遭受了悲惨的损失。因此,引入了一个研究领域数据科学,它使用科学方法、探索过程、算法和系统从各种形式的数据中提取知识和见解。

事实上,一个跨学科领域被定义为“统一统计学、数据分析、机器学习及其相关方法的概念”,以便用数据“理解和分析实际现象”。换句话说,精确的数据结合良好的训练模型会产生更好的预测结果。下一代定量分析师被称为数据科学家,,他们同时拥有计算和分析技能。

科技行业因实施数据科学技术而受益匪浅,并充分利用了预测 & 说明(采取什么行动)分析的全部力量,即消除未来的问题或充分利用有希望的趋势。公司开始不仅在传统意义上竞争分析——通过改善内部业务决策——而且通过创造更有价值的产品和服务。这就是分析 3.0 的精髓。

如今,分析的使用方式发生了范式转变。公司正以超乎想象的速度扩张,识别颠覆性服务,鼓励更多的 R&D 部门——其中许多是战略性的。这需要新的组织结构:职位、优先级和能力。在同一屋檐下,一个由数据驱动角色(数据科学家、数据工程师、解决方案架构师、首席分析师)组成的紧密团队是取得成功的保证。

分析 4.0自动化功能:

一直以来有四种类型的分析:描述性,报告过去;诊断,利用过去的数据研究现在;预测型,利用基于过去数据的洞察来预测未来;以及规定性的,它使用模型来指定最佳的行为和行动。虽然,从广义上讲,分析 3.0 包括了上述所有类型,但它强调的是最后一种类型。它还引入了——通常是小规模地——自动化分析的概念。

Analytics 3.0 提供了一个将决策流程扩展到行业优势的机会。通过机器学习创建更多的模型,可以让一个组织的预测变得更加精细和精确。话虽如此,部署这种定制模型的成本和时间并不完全负担得起,因此需要更便宜或更快的方法。通过智能系统实现自动化的需求终于到来,而这种隐约出现在地平线上的想法(曾经被认为是遥不可及的)就是 Analytics 4.0 产生的原因。

毫无疑问,人工智能、机器学习和深度学习的使用将深刻地改变知识工作。我们已经看到了他们在神经机器翻译、智能回复、聊天机器人、会议助手等方面的创新能力,这将在未来几年得到广泛应用。这里涉及的数据来源于由本地类型组成的大量异构源,这需要复杂的训练方法,尤其是那些可以自我维持(提出建议、改进决策、采取适当行动)的数据。采用数据挖掘技术和机器学习算法以及现有的描述性-预测性-规范性分析在这个时代取得了丰硕成果。这就是为什么自动化分析被视为分析成熟度的下一个阶段的原因之一。

分析 5.0分析的未来和下一步是什么???:

分析 4.0 充满了乌托邦社会的承诺,由机器运行,由热爱和平的经理和技术人员管理。我们可以将自动化的威胁重新定义为增强 : 结合智能人类和智能机器以实现整体更好结果的机会。

现在,不要去琢磨“人类目前所从事的哪些工作将很快被机器取代?”我更乐观地质疑“如果有思维更好的机器来辅助,公司能取得什么样的新成就?或者,我们如何通过改进的人工智能疏散程序来防止灾难易发区的死亡人数?或者为什么人工智能驱动的电子学校不能在贫困地区实施?”

大多数正在探索*“认知”*技术的组织——自动化决策过程的智能机器——只是在试水。一些人正在做试点,探索这项技术。而其他人则致力于建立一个消费者人工智能控制的平台。这些平台使用个人人工智能代理的想法,这些代理与其他人工智能服务或所谓的机器人进行通信,以完成工作。不再需要人工干预,只需要一个人工智能系统来指导你的日常活动。

看到这些技术中的任何一项在未来取得巨大飞跃,我都不会感到惊讶。当然,这其中有一些不确定因素,但与许多人不同,我对未来相当乐观。路的尽头总有东西在等着;如果你不愿意看到它是什么,你可能一开始就不应该出现在那里。

“一切都应该尽可能简单,但不能更简单”

T5【爱因斯坦】T6

数据新闻的演变

原文:https://towardsdatascience.com/the-evolution-of-data-journalism-1e4c2802bc3d?source=collection_archive---------12-----------------------

我正在写一篇关于 Trinity Mirror 数据单元在过去五年中的发展的文章,因此从去年一月开始,我已经收集了一些头版新闻。

这些故事来源广泛。有些来自数据部门,深入到定期发布的地方级别数据集,这是我们工作的基础。有些是来自 FOI 的请求;有些是擦伤造成的;有些是很好的老式的基于想法的调查:“我想知道是否…”

他们的共同点是,他们都是由数据单元编写的故事(或与同事共同编写的关于个人三位一体镜像标题的故事),如果没有我们,他们不会讲述这些故事。

当我们是一个数字优先的单位时,把这样的摊子放在头版看起来很奇怪,但有指向它。数据新闻不再是外来的新奇事物,也不应该期望被当作一种事物来对待。数据新闻需要不断爆出伟大的故事,没有它就不会被讲述的故事。它需要像新闻业的其他部分一样遵循同样的节奏。它需要接受同样的压力:编辑压力、商业压力、参与压力。

数据记者需要像其他记者一样判断自己。我打破了多少故事?他们有多好?有多少人在阅读它们并参与其中?数据新闻让我能够以更好的方式讲述故事和分享信息吗?更重要的是,我有支持这种说法的受众指标吗?

创新让数据新闻登上了头版。交付日复一日地出现在头版*。创新是建立一个时髦的互动,让读者探索和理解一个重要的问题。交付就是这样做,并让大量的人实际使用它;然后第二天造另一个,第三天又造一个。*

变化的速度如此之快,以至于新闻业的岁月就像狗的岁月:对我们来说,一年就像其他行业的五年、十年、十五年。

数据新闻不再觉得年轻了。数据新闻仅仅存在不再是创新。我们需要讨论交付——以及行业和我们的读者真正想要的交付类型。

NBA 三分线的演变

原文:https://towardsdatascience.com/the-evolution-of-the-nba-3-point-line-da6700714ad2?source=collection_archive---------3-----------------------

在过去的几年里,我们已经看到各种统计数据向 NBA 观众展示了所有新的三分线记录,以及三分线现在的使用有多么不同。相比之下,87-88 赛季的领袖是丹尼·安吉,他投中了 148 个三分球。相比之下,17-18 赛季大约有 45 场比赛,克莱·汤普森以 154 个三分球领先 NBA。这篇文章介绍了球员如何提高三分线的优势。

自从 1980-81 赛季引入三分线以来,三分球的尝试和三分球的百分比稳步上升,而场均 2 分的投篮次数相对保持不变。

当我们看看 NBA 中最多产的投手时,我们可以看到大多数的条目,尤其是好的条目,都来自最近 15 年。脚注中描述了纪元组。

即便如此,有两个名字还是很突出

即使是在 NBA 中最多产的 3 分投手中,水花兄弟在制造和效率方面也远远超过其他人。右上角没有标签的点对应于雷·阿伦。

他们到底有多特别?他们在同一个队的时候,在高命中率的时候,保持了很高的 3 分命中率。唯一的遗憾是这个小矮子凯文·杜兰特加入了球队。

注意事项:

  • 马克·杰克逊担任主教练的第一年是 2011-12 赛季。在那之后,斯蒂芬和克莱立即得到了拍摄的许可。
  • 电子逆向拍卖分为以下几类:
  • 80 年代:1980 年至 1989 年
  • 区域联防之前:1990-2002
  • 区域联防简介:2003-2010
  • 现代:2011–2017
  • 在 1994-95 和 1995-96 赛季,三分线被缩短,在这两年,史蒂夫·科尔和蒂姆·莱格勒的三分球命中率达到了 50%以上。
  • 在第二个散点图中,限制是每个赛季至少打 1000 分钟和至少投中 120 个三分球。

进化中的人工智能助手:抬头

原文:https://towardsdatascience.com/the-evolving-ai-assistants-heads-up-cf538098316f?source=collection_archive---------5-----------------------

Image Attribution

尼古拉斯·费克斯 2017 年 5 月 10 日

AI 助手只是噱头吗?它们只是给喜欢发号施令的懒惰少年用的吗(嘿 Siri…)?它们到底是什么,我们应该更加关注吗?

最近,并不以偏爱技术著称的沃伦巴菲特被问及人工智能的影响。他评论说,潜在的人工智能可能会导致他的保险公司 Geico 减少 10,000 个工作岗位,这是我们从未见过的。他还表示,人工智能可能“具有巨大的破坏性,但有利于提高经济效率”。

不可避免的是,人工智能助手最终将实现他所指的变化。

但是什么是人工智能助手呢?

这一切都是从伊莱扎开始的,伊莱扎是一个早期的自然语言处理计算机程序,它是在 1964 年用 LISP 计算机编程语言创建的。)在麻省理工学院人工智能实验室。ELIZA 的创建是为了通过使用模式匹配和单词替换来模拟对话,从而演示人机交流是多么肤浅,它给用户一种理解的错觉,但实际上它没有内置的上下文响应框架。

这就是和今天(以及明天)的 AI 助手的巨大区别。

鉴于以下情况:

自然语言处理模块,

知识库/本体,

推理引擎,

语音识别/文本到语音转换服务,

图像识别服务,以及

以及基于机器学习的个性化模块

所有这些都在强大的基于云的基础设施上实现,你就有了一个强大的人工智能助手“数字员工”。然后你可以教它提供客户支持、销售保险单、教学、股票交易建议、告诉你该买哪辆车等等。AI 助手用的越多,就会越好。不再有海外服务台外包。“机器人技术”的未来其实在于软件,而不在于硬件。

人工智能助手将重新定义搜索和广告

人工智能助手将彻底改变搜索和广告。谷歌将不得不把自己重塑为一个个性化的人工智能助手。谷歌助手已经开始了这一过程,但这是一个“备份”项目,将分散资源,而不是专注于应该是主要目标的危险。这同样适用于所有主要的搜索引擎。

AI 助手的意义

所以,AI 助手不仅仅是一个语音到文本的界面来搜索。它们是人工智能技术最重要的方面,并且正在快速发展。谷歌、微软、亚马逊、脸书、苹果和三星都在这方面投资,这绝非巧合。

(顺便提一下,我认为全球的电力公司都应该重新审视他们的电力供应备用计划!)

天空中的眼睛:作为大数据的卫星图像。

原文:https://towardsdatascience.com/the-eyes-in-the-sky-on-satellite-imagery-as-big-data-210830722f3d?source=collection_archive---------9-----------------------

我们迫切需要卫星图像可能提供的更广阔的图景。

艺术和科学长期以来推动人类探索大小和规模的极限。这两个领域的进步都以这样或那样的方式受到人类对极大和极小事物的兴趣的影响。想想微积分、微生物学、硅藻、望远镜、纳米技术和许多其他科学领域的例子。圣彼得大教堂的壁画,莫扎特作品的非凡长度,甚至列奥纳多·达·芬奇的插图和绘画的规模都是艺术中突出的例子。大小和比例通常让人类着迷,因为它们的极端与我们的自然感知格格不入。在他的文章介绍中(我推荐你阅读)。散文作家凯文·西姆勒陈述如下:

没有显微镜、望远镜或计算机,不久前的人类几乎没有办法在与日常生活大不相同的尺度上体验现实。仰望天空,远眺海洋,或者穿越峡谷,让我们对一些额外的数量级有了更多的欣赏。更进一步需要想象力。

今天,由于技术和科学,我们有工具在改变思维的尺度上理解现实。我们现在可以在几代人之前无法想象的维度上思考时间和空间。

科学上一个奇特的飞跃是使用卫星图像作为现成的数据来源。除其他原因外,这种特殊性源于卫星图像的使用在大光谱和小光谱的两端:

漂浮在巨人的肩膀上,看得更远,看得更详细。

艾萨克·牛顿(Isaac Newton)的格言一直激励着我,即依靠以前的工作来推动我们的进步:

为了看得更远,我不得不站在巨人的肩膀上

很酷的故事艾萨克。但是,你看,遥感和卫星图像提供了一个不同的进步视角,其重要性不受学科边界的限制。

另一种观点

卫星图像作为大数据的本质可以从我们看待世界的范式转变中看出。想想我们是如何看待衡量经济进步的指标的。大多数人信任经济模型,即使这些模型的方法在不合适的地方也会被使用。但是有了遥感技术(包括使用卫星和无人机等),我们可以从我们的夜灯图像中获得关于我们经济状况的相当有见地的信息。

现在你可能想说“好吧,这太荒谬了,伙计,我们电气化房屋的照片告诉了我们什么关于我们的经济,难道我们不需要复杂的图表和方程来理解这些吗”?我个人不这么认为:

然而,对此更合理的回应可以在的《每个人都在说谎》一书中找到,塞斯·斯蒂芬斯-达维多维茨在书中写道:**

为什么夜灯可以很好地衡量 GDP?在世界上非常贫穷的地方,人们努力支付电费。因此,当经济状况不佳时,家庭和村庄会大幅减少夜间的采光量。

遥感卫星图像记录的夜间光线变化与全球许多发展中地区的经济波动相关,这种相关性显然暗示着因果关系。

卫星图像的使用也与环境建模和监测相关。像 NDVI、NDBI 和 NDWI 这样的归一化差异光谱指数提供了数据,分别为我们提供了直接植被、人工和开放水域环境状态的众多视角。

  • 归一化植被指数差异与森林监测、确定作物水分胁迫、湿地健康、河流流域管理甚至干旱监测相关
  • 另一方面,标准化的差异建造指数可以为城市化速度、城市规划提供信息,甚至允许我们将媒介传播疾病的扩散与居住模式的变化联系起来。
  • 标准化的差异水指数能够提取或描绘开放水域的特征,并能告诉你你家后院的湖有多浑浊,只要它在地球轨道上可见。此外,当嵌入机器学习系统和其他统计方法时,可以预测与洪水相关的主要灾害。这样美国人就可以在飓风出生前给它们命名:

为什么是卫星图像?

想想大多数撒哈拉以南非洲居民依赖的行业:农业。除了监测和预测干旱,卫星图像还可以提供对农田缺水可能性的见解,基本上在灌溉对作物生产造成威胁之前就通知灌溉需求。这强调了遥感和卫星图像的特殊意义,以及在我们追求可持续发展的未来时,这些技术为我们带来的希望。

卫星图像作为多用途数据源脱颖而出的另一个原因是其领域独立性。卫星图像的使用跨越了工业界和学术界,为各种决策和研究方法提供了信息。此外,insights 卫星图像能够以多种方式提供超过许多已为相同目的发明的技术。

透视反转

传统数据源并没有过时或无用。它们得到了新数据源的很好补充,新数据源能够给予我们以前从未想象过的洞察力。我们从遥感和卫星图像中获得的环境的光谱和空间细节包含了大量的数据,等待从中获得最佳的洞察力。然而,大小并不是最重要的。正是与遥感和卫星图像有关的领域知识的多样性使其成为一个独特的数据来源。

坍缩成致密物质!

加入星云研究时事通讯,获取更多关于一次一项技术让世界变得更美好的文章。点击这里报名

RNN / LSTM 的陷落

原文:https://towardsdatascience.com/the-fall-of-rnn-lstm-2d1594c74ce0?source=collection_archive---------0-----------------------

我们爱上了循环神经网络(RNN)、长短期记忆(LSTM)及其所有变体。现在是放下它们的时候了!

2014 年,LSTM 和 RNN 起死回生。我们都读过科拉的博客卡帕西的《RNN 颂》。但是我们都很年轻,没有经验。几年来,这是解决序列学习、序列翻译(seq2seq)的方法,这也导致了语音到文本理解的惊人结果,以及 SiriCortana谷歌语音助手Alexa 的提升。我们也不要忘记机器翻译,它产生了将文档翻译成不同语言的能力或神经机器翻译,而且还将图像翻译成文本,将文本翻译成图像,以及字幕视频,而且……好了,你明白了。

然后接下来的几年(2015–16)就来了 ResNet关注。人们可以更好地理解 LSTM 是一种聪明的旁路技术。还注意到 MLP 网络可以被受上下文向量影响的平均网络所取代。稍后将详细介绍。

只花了两年多的时间,但今天我们可以肯定地说:

"放下你的 RNN 和 LSTM,他们不好!"

但不要相信我们的话,也可以看到证据表明,基于注意力的网络越来越多地被谷歌脸书Salesforce 等公司使用。所有这些公司已经取代了 RNN 和基于注意力模型的变体,这仅仅是个开始。RNN 在所有应用程序中都计算天数,因为它们比基于注意力的模型需要更多的资源来训练和运行。见这篇文章了解更多信息。

但是为什么呢?

记住,RNN 和 LSTM 以及衍生工具主要使用时间顺序处理。请参见下图中的水平箭头:

Sequential processing in RNN, from: http://colah.github.io/posts/2015-08-Understanding-LSTMs/

这个箭头表示长期信息在到达当前正在处理的单元之前必须依次通过所有单元。这意味着它很容易被乘以小数字< 0. This is the cause of 消失梯度而被破坏。

为了挽救局面,出现了 LSTM 模块,它今天可以被视为多个开关门,有点像 ResNet 它可以绕过单元,从而记住更长的时间步长。因此,LSTM 有办法消除一些渐变消失的问题。

Sequential processing in LSTM, from: http://colah.github.io/posts/2015-08-Understanding-LSTMs/

但不是全部,从上图可以看出。我们仍然有一个从旧的过去细胞到当前细胞的顺序路径。事实上,路径现在变得更加复杂,因为它有附加和遗忘分支。毫无疑问,LSTM、GRU 和衍生品能够学到很多长期信息!此处见结果;但是他们能记住 100 的序列,而不是 1000 或 10000 或更多。

RNN 的一个问题是它们对硬件不友好。让我解释一下:我们不需要很多资源来快速训练这些网络。此外,在云中运行这些模型需要大量资源,鉴于语音到文本的需求正在快速增长,云是不可扩展的。我们将需要在边缘处理,直接进入亚马逊回声!更多详细信息,请参见下面的注释。

你是做什么的?

此时(2018 年 9 月)我会认真考虑这个方法这里。这是一个基于 2D 卷积的神经网络,具有因果卷积,可以胜过 RNN/LSTM 和注意力模型,如转换器

从 2017 年到上面的论文,变形金刚绝对是一个很好的建议。它在训练和参数数量上有很大的优势,正如我们在这里讨论的。

**或者:**如果要避免顺序处理,那么我们可以找到“向前看”或更好的“向后看”的单元,因为大多数时候我们处理实时因果数据,我们知道过去并希望影响未来的决策。举例来说,在翻译句子或分析录制的视频时就不是这样了,我们有所有的数据,可以花更多的时间进行推理。这种回顾/前瞻单元是神经注意力模块,我们之前在这里解释过

为了解决这个问题,结合多个神经注意力模块,出现了“分级神经注意力编码器”,如下图所示:

Hierarchical neural attention encoder

查看过去的更好方法是使用注意力模块将所有过去的编码向量总结成上下文向量 Ct。

注意这里有一个注意力模块的层级,非常类似于神经网络的层级。这也类似于下面注 3 中报告的时间卷积网络(TCN)

分层神经注意力编码器中,多层注意力可以查看最近过去的一小部分,比如说 100 个向量,而上面的层可以查看这些注意力模块中的 100 个,有效地整合了 100 x 100 个向量的信息。这将分级神经注意力编码器的能力扩展到 10,000 个过去向量。

这是回顾过去并影响未来的方法。

但更重要的是,看看将表示向量传播到网络输出所需的路径长度:在分层网络中,它与 log(N) 成比例,其中 N 是分层的层数。这与 RNN 需要做的 T 个步骤形成对比,其中 T 是要记忆的序列的最大长度,T > > N

如果你跳 3-4 次,比跳 100 次更容易记住序列!

这种架构类似于神经图灵机,但让神经网络决定通过注意力从内存中读出什么。这意味着实际的神经网络将决定哪些来自过去的向量对未来的决策是重要的。

但是存储到内存呢?上面的架构在内存中存储所有以前的表示,不像神经转动机器。这可能是相当低效的:想想存储视频中每一帧的表示——大多数情况下,表示向量不会逐帧改变,所以我们确实存储了太多相同的内容!我们能做的是添加另一个单元来防止相关数据被存储。例如通过不存储与先前存储的向量太相似的向量。但这真的是一个黑客,最好的办法是让应用程序来指导什么向量应该保存或不保存。这是当前研究的重点。请继续关注更多信息。

所以总之忘掉 RNN 和变种吧。利用注意力。你真正需要的是关注!

**告诉你的朋友!**我们非常惊讶地看到,如此多的公司仍在使用 RNN/LSTM 进行语音到文本的转换,许多公司都没有意识到这些网络是如此低效和不可扩展。请告诉他们这个帖子。

附加信息

关于训练 RNN/LSTM: RNN 和 LSTM 很难训练,因为它们需要内存带宽限制的计算,这是硬件设计者最糟糕的噩梦,并最终限制了神经网络解决方案的适用性。简而言之,LSTM 要求每个单元 4 个线性层(MLP 层)在每个序列时间步长运行。线性层需要大量的内存带宽来计算,事实上,它们不能经常使用许多计算单元,因为系统没有足够的内存带宽来提供计算单元。增加更多的计算单元很容易,但增加更多的内存带宽却很难(注意芯片上足够多的线,从处理器到内存的长电线,等等)。因此,RNN/LSTM 和变体不是硬件加速的良好匹配,我们在此处和此处之前讨论过这个问题。一个解决方案将是在内存设备中进行计算,就像我们在 FWDNXT 上所做的那样。

笔记

注 1: 分层神经注意类似于 WaveNet 中的思路。但是我们使用分级注意模块,而不是卷积神经网络。另外:分级神经注意力也可以是双向的。

注 2: RNN 和 LSTM 是内存带宽受限问题(详见此)。处理单元需要的内存带宽与它们能够提供的操作数一样多,因此不可能充分利用它们!外部带宽永远不够,稍微改善这个问题的方法是使用高带宽的内部快速缓存。最好的方法是使用不需要从内存中来回移动大量参数的技术,或者可以重复用于每个传输字节的多次计算的技术(高算术强度)。

注 3 :这里有一篇比较 CNN 和 RNN 的论文。时间卷积网络(TCN)“在各种任务和数据集上优于 LSTMs 等典型递归网络,同时表现出更长的有效记忆”。

注 4 :与这个话题相关的是,我们对人类大脑如何学习和记忆序列知之甚少。“我们通常以较小的片段来学习和记忆较长的序列,例如一个电话号码 858 534 22 30 被记忆为四个片段。行为实验表明,人类和一些动物在各种各样的任务中采用了这种将认知或行为序列分解成组块的策略”——这些组块让我想起了较小序列上的小卷积或注意力网络,然后这些小卷积或注意力网络按层次串在一起,就像在分层神经注意力编码器和时间卷积网络(TCN)中一样。更多的研究让我觉得工作记忆类似于使用递归真实神经元网络的 RNN 网络,它们的容量很低。另一方面,大脑皮层和海马体都让我们能够记住很长的步骤序列(比如:5 天前我在机场把车停在哪里),这表明回忆长序列可能涉及更多的平行路径,其中注意力机制控制重要的块,并迫使序列中与最终目标或任务无关的部分跳跃。

注 5: 以上证据表明我们没有按顺序阅读,事实上我们是把字、词、句作为一个整体来解读的。一个基于注意力的或卷积的模块感知序列,并在我们的头脑中投射一个表征。如果我们按顺序处理这些信息,我们就不会误读了!我们会停下来注意不一致的地方!

注 6: 一篇最近的论文用 attention/transformer 进行无监督训练,在迁移学习中表现惊人。NLP 的 VGG?这项工作也是杰瑞米和塞巴斯蒂安的开创性工作的延伸,其中一个具有特别训练程序的 LSTM 能够在无人监督的情况下学习预测一系列文本中的下一个单词,然后也能够将这些知识转移到新的任务中。此处给出了 LSTM 和 Transformer(基于注意力)的有效性比较,并显示注意力通常是注意力获胜,并且“仅 LSTM
在一个数据集上优于 Transformer——MRPC。”

注 7 : 在这里你可以找到关于变压器架构和数据流的精彩解释!

关于作者

我在硬件和软件方面都有将近 20 年的神经网络经验(一个罕见的组合)。在这里看关于我:媒介网页学者LinkedIn 等等…

复杂世界中预测的谬误

原文:https://towardsdatascience.com/the-fallacy-of-forecasting-in-a-complex-world-c83b765107bd?source=collection_archive---------3-----------------------

“统计预测只在无菌的实验室条件下有效,这突然变得不像以前那样有用了。”——Gary King

我注意到基于“预测分析”、“预测”、“统计分析”和最新术语“近似预测”的火灾和 EMS 部署模型有上升趋势。最近,一份基于奥兰治县消防局(OCFA)的“覆盖标准”报告提出了一种部署模型,该模型基于夜间低水平的火灾减少了午夜时段的灭火单位。当我读到这些报告时,我想站起来大声说“事情不是这样的;这一切都不是这样的。”
首先,发生的频率不等于风险水平。换句话说,一个事件从未发生过,并不意味着它发生的概率很低。考虑被蛇咬伤的情况。我从未被响尾蛇咬过;因此,我的出现频率为零。但是被蛇咬的频率为零并不能说明被蛇咬的风险。如果我把手伸到有响尾蛇的岩石下,我被咬的风险非常高,不管发生的频率如何。但这正是《OCRA 覆盖标准》的作者在提出基于发生频率的部署模型时所使用的逻辑。

在试图解释所发生的事情时,研究历史统计数据会非常有用。但是仅仅识别统计数据中的趋势并不能自动转化为对未来的预测。统计是解释工具,不是预测工具。如果你试图将统计数据整合到预测模型中,你可能会发现自己溺死在平均只有 4 英尺深的湖里,或者在平均温度为 75 度的建筑物中被烧死。

在平均温度 75 度的建筑里被烧伤

想象一下,你带着两辆车来到一栋四层公寓楼的火警现场;布莱斯和皮埃尔都是世界著名的统计学家。当布莱斯和皮埃尔认出这个地址是他们研究了多年的一栋建筑时,他们的脸上露出了兴奋的表情,这栋建筑的每个房间都安装了远程传感器。他们立即在手机上打开一个应用程序,访问该建筑的统计数据。

火警面板显示四楼有火警。你的船员拿起装备,向楼梯走去。皮埃尔突然抗议道。根据这些数据,Pierre 声称你应该离开设备,乘电梯而不是爬楼梯。“我们有所有的数据”皮埃尔喊道。“大楼里的平均温度只有 75 度。我们已经监视这座建筑很多年了,根据统计趋势,我们有 99%的把握没有发生火灾。这栋建筑的火灾是一个 sigma 事件。”

你的船员无视皮埃尔,爬上楼梯。坚持不懈,皮埃尔跟着,继续用诸如相关性、中心极限定理、干扰和回归分析等术语来攻击你。

在四楼,当你打开通往烟雾弥漫的走廊的楼梯井的门时,皮埃尔发出了最后一次抗议;"发生火灾几乎是不可能的,我担心你对拉普拉斯定律缺乏了解。"就在掩饰之前,你大声回应;是的,先生,但是我担心你对墨菲定律缺乏了解

墨菲定律——“任何可能发生的事情都会发生”——奥古斯都·德·摩根,1866 年

墨菲定律的起源是不确定的,但它通过我们的文化的超越是对其真理的认可。虽然不是普遍适用的(你的车不会变成火鸡),墨菲定律的哲学与应急管理领域相关;在我们的理想世界中,我们期待最好的,但在现实世界中,我们做最坏的打算,准备大吃一惊。

理想主义者 vs 现实主义者

在理想世界中,事件以一种孤立的、可预测的模式发生;所有可能的变量都可以绘制出来,并与备选方案进行权衡,从而产生精确的预测。

然而,在现实世界中,事件并不是孤立的,模式是不稳定的,无数的变量相互作用,创造出难以想象的事件,就像生命本身一样。唯心主义和现实主义对立的世界观从一开始就困扰着概率领域。

概率的起源——赌博公元 1653 年

先验的,事前知道的

1653 年,年轻的法国学者布莱士·帕斯卡发表了《算术三角形论》,现在被称为帕斯卡三角形。帕斯卡发明了一种方法来预测游戏的结果,通过绘制出每一种可能的结果,并将其与备选结果进行比较。

例如,如果我问在六面骰子上掷出“3”的几率,帕斯卡的理论是我们如何计算几率为 1/6,因为“3”是六个同等可能性选项中的一个。如果我问在八面骰子上掷出“1”或“2”的几率,几率是八分之二。随着变量的增加,程序变得指数级复杂,但是过程仍然是相同的。

Pascal’s Triangle based on the roll of two ten sides dice

尽管很聪明, Pascal 方法是为在无菌和受控的环境中玩游戏而设计的。帕斯卡从未打算将他的工作应用于现实世界,正如我们将在他的个人生活中看到的那样,帕斯卡使用了一种完全不同的方法,我称之为“风险管理”。

弥合差距——从理想到现实

后验——基于过去的事件

帕斯卡之后大约一百年,皮埃尔·西蒙·拉普拉斯想在现实世界中做出预测,特别是天体的运动。由于缺乏帕斯卡在他的机会游戏中所享受的每个变量的确切知识,拉普拉斯用历史数据代替了游戏中的已知变量。换句话说,帕斯卡知道每个骰子的边数,而拉普拉斯方法通过观察多次滚动来猜测骰子的边数,或者更确切地说是出现的频率。但是拉普拉斯并没有预测在六面骰子上掷出“1”的几率;他在预测明天太阳升起的几率。拉普拉斯的工作演变成一个复杂的领域,需要根据数据的质量和大小来衡量对结果准确性的信心,而帕斯卡的预测非常准确,因为他在游戏开始前就知道所有的变量。拉普拉斯是学者中真正的巨人,推动了数学、统计学、物理学和天文学的发展。然而,他的方法可能会被错误应用和过度利用;站在巨人的背上伴随着悲惨坠落的风险。

墨菲定律 Vs 拉普拉斯

顺便说一下,拉普拉斯根据历史数据计算出明天太阳升起的几率为 99.999999…..%,这是基于历史数据可以做出的最有把握的预测。然而,太阳的衰老保证了太阳没有升起的一天。按照墨菲定律,拉普拉斯的预测充其量是 99%准确,但总有一天会 100%错误。

比喻利用历史数据进行预测

想象一下,你正在驾驶一辆挡风玻璃被遮住的汽车,后视镜是你唯一的导航工具。后视镜提供了周围环境的线索,如道路的宽度、路肩的深度、地形的坡度和道路的模式。通过大量的努力和一点点直觉,你会适应你身后的画面,让你根据你注意到的趋势选择一个舒适的速度。一条简单的直路和宽阔的路肩可以让你加速,而一条复杂的弯道会让你减速。但是如果路况改变,你的速度永远不会超过你的恢复能力。

在你的旅途中,你会遇到一个被轻微烧伤的法国统计学家,皮埃尔。你的新乘客对保持汽车行驶所需的努力感到惊讶,并主动提供帮助。他确定了一个与道路方向“高度相关”的“描述性数据样本”,或者用外行人的话来说,他说只要看看道路上画的黄线就行了。

接受 Pierre 的建议,你把注意力集中在黄线上,这比测量整个环境要容易得多。你放松并享受旅程,感谢你的新朋友。

在匆忙去当地诊所检查烧伤的时候,Pierre 建议你开快点,因为他 99%的信心是当前的趋势会继续下去,误差很小。如果道路急转弯,仅仅基于预测的新速度超出了你的恢复能力。当汽车加速时,一种本能的恐惧爬上你的心头,皮埃尔令人眼花缭乱的数学超越了你的判断。

金融业从预测中学到了什么

一个预测模型,“风险价值”(VaR)被广泛认为是 2006 年金融危机的原因。简而言之,VaR 将金融公司的累积风险总结为一个基于概率的指标;创建一个优雅、精确的风险衡量标准,但这个标准存在严重缺陷。用对冲基金经理大卫·艾因霍恩(David Einhorn)的话来说,风险值“当它的使用在高管中造成一种虚假的安全感时,可能是灾难性的。”

A VaR chart showing a 95% probability the portfolio will stay above 42 mil.

风险值误导预测的可能性遭到了猛烈抨击,风险经理和学者纳西姆·塔勒布(Nassim Taleb)在国会作证,要求禁止金融机构使用风险值。事实上,出于直觉,塔勒布在 1997 年公开预测了过度杠杆化预测模型所造成的损害,声称 VaR“忽视了 2500 年的经验,而倾向于非交易者建立的未经测试的模型”,这些模型“给出了错误的信心”,因为“不可能估计罕见事件的风险。”

尽管有这些缺点, VaR 型预测模型已经投入使用。从 1972 年 RAND 报告“纽约市消防项目部署研究”开始,一个令人印象深刻的预测分析显示建议关闭消防站。“确信他们的统计训练胜过了经验丰富的消防官员的经验,”兰德花了几年时间建立计算机模型来预测火灾,并根据分析结果实施车站关闭。其结果是许多不受控制的火灾和超过 60 万人从烧毁的家园流离失所。FDNY 让令人眼花缭乱的数学超越了他们的判断。

A scientific study showing the result of cutting the NY fire department, including the spread of tuberculosis and HIV

预测就像电锯,很容易用,很难用好,而且总是很危险。

随着亚特兰大和辛辛那提等城市投入预测分析,纽约正在用 FireCast 进行另一次尝试,“一种将来自五个城市机构的数据组织成大约 60 个风险因素的算法,然后用于创建最容易发生火灾的建筑物列表。”根据脆弱性对建筑物进行排名似乎是合理的,但是一旦你开始预测一个复杂系统中的事件,挑战就出现了。

想想预测 2016 年世界职业棒球大赛第七场冠军的难度。相对而言,这是一个简单的问题;你只有 50 个参与者在有限的时间内玩一个规定的游戏。你的参与者都有大量来自相对无菌环境的描述性和预测性数据。然而这场比赛的结果直到比赛结束都不为人知。

将简单的棒球问题与预测一个拥有一百万居民的城市在无限时间框架内的复杂行为进行对比。我们用一个简单的系统将一个模型扩展到极限,并试图将它扩展到超乎想象的程度,以适应一个复杂的系统。

复杂系统对简单系统

概率有效,预测有效——在正确的领域,简单的系统。Cynefin 框架将简单系统定义为“已知的已知”。像棒球比赛一样,简单的系统是稳定的,具有可识别的、可重复的和可预测的因果关系,例如预测未来五年消防车的行驶里程。在简单的系统中,你研究历史,预测未来,并制定计划。

与复杂系统相反,复杂系统中的因果关系只能在事后才能察觉。由于大量的变量和影响,这些系统继承了不可预测性。这就是墨菲定律的由来。简单的系统容易剖析和理解,但复杂的系统“不受简化论者的影响,因为你的行动以不可预测的方式改变了情况。”在复杂的系统中,概率是有限的,预测造成了一种虚假的自信感,墨菲定律是正确的。

城市是复杂的系统。人类行为是一个复杂的系统。由人类行为引发的城市火灾极其复杂。对于那些声称用数学模型预测复杂系统未来,却不能自信地预测下一届超级碗冠军的人,要持非常怀疑的态度。

“所有的模型都是错误的;有些是有用的。”乔治·博克斯

概率是一种辉煌的方法论,最初是为毫无结果的机会游戏设计的,后来演变成一个令人眼花缭乱的数学领域。概率在适当的情况下起作用,但如果过度利用,可能会产生致命的结果。用作者查尔斯·惠兰的话说,“概率不会出错;使用概率的人会犯错。”金融业和消防服务已经被过度杠杆化的预测模型所吞噬。数学是惊人的,结果是优雅的,但如果应用于错误的领域,后果是灾难性的。不要让数学超越你的智慧。

尾声——帕斯卡的赌注

概率之父帕斯卡明白他的方法在现实生活中的局限性。当被要求就上帝的存在打赌时,帕斯卡没有考虑上帝存在的概率、赔率或证据。帕斯卡考虑了错误的后果,并选择了后果最小的选项。帕斯卡得出结论,接受上帝的存在和错误没有比选择更大的后果。但是否认上帝的存在和犯错会带来巨大的后果,包括在地狱里永世不得超生。

Pascals wager

概率之父帕斯卡声称,当一个理性的人在处理未知时,他们应该考虑后果,而不是几率。证据表明,帕斯卡理解墨菲定律,是一个真正风险管理者。

埃里克·塞洛斯为精英指挥培训讲授这方面的课程

并且可以在推特上关注 @saylorssays

[## 量化负面:消防服务的真正价值

我们在公共安全领域面临的最大挑战之一是以可量化的方式阐明我们的价值。这个挑战是…

medium.com](https://medium.com/elitecommandtraining/quantifying-the-negative-the-true-value-of-the-fire-service-f1093e4bcfc2)

最后一幕——就像一个天真的贝叶斯专家!

原文:https://towardsdatascience.com/the-final-act-just-like-a-na%C3%AFve-bayes-pro-5c440b511b8d?source=collection_archive---------8-----------------------

对于 ML 初学者

从零开始展开朴素贝叶斯!Take-3🎬

你几乎是在掩盖朴素贝叶斯文本分类算法的所有方面。

以防你错过了之前的博文,你可以参考下面的链接

从零开始展开朴素贝叶斯 Take-1🎬 !一个简单明了的朴素贝叶斯解释,以便在开始编码之前清楚地了解这个算法是如何工作的

从零开始展开朴素贝叶斯!take-2🎬 :在转向 python 的 ML 工具包之前,在基本 python 中从头实现朴素贝叶斯只是为了巩固核心理解

目标受众是谁?🗣 🗣 🗣

就像我在以前的博客文章中提到的一样,这篇文章也是为 ML 初学者准备的——关注基本概念。

本教程的成果—NB 的实践 Scikit-learn 实施

使用 Python 的机器学习框架 Scikit-learn 实现 NB 的完整演练

定义路线图…..🚵

里程碑# 1: 预处理训练数据集

里程碑# 2: 在预处理的训练数据集上训练 NB 模型

里程碑# 3: 使用训练好的 NB 模型 进行测试

里程碑# 4: 培训&使用 Scikit 测试-学习管道功能

让我们从 Scikit-learn 实现开始吧!

预处理训练数据集

一些进口货…

预处理函数与从头开始展开朴素贝叶斯中定义的相同!Take-2🎬

正在加载 20 个新闻组数据集

这与之前在从头开始展开朴素贝叶斯中使用的数据集相同!Take-2🎬

这是原始形式的训练数据集的样子…..

让我们从训练数据集的预处理开始,包括

  1. 文本清理
  2. 创建我们的训练数据集的 BoW 表示(测试数据集也需要同样的表示)

文字清理

处理后的训练数据集如下所示

创建我们的训练数据集的 BoW 表示

count vectorizer 上的几行

计数矢量器的作用是什么?
接收文本语料库,建立其术语文档矩阵(即 BoW ),并将其返回

每个单词被分配一个固定的唯一整数 id,该矩阵的每个单元的值代表单词计数——BoW

例如,X_train_counts[ i,j ] ( i 指的是一个文档,在我们的例子中,每个文档指定一个训练示例,j 指的是单词 w 在其各自的文档 I 中的索引)将返回单词 j 的计数

下面是 X_train_counts 矩阵的样子:
X_train_counts[0,12048]将检索整数 id = 12048、文档/示例 id 为 0 的 word 的字数

里程碑# 1 已实现👍

在预处理的训练数据集上训练 NB 模型

简单地在实例化一个 NB 对象后,我们调用拟合函数来训练一个 NB 模型。我们将简单地传递训练示例作为第一个参数&训练集标签作为第二个参数。

注意,X_train_counts(术语文档矩阵)作为训练示例而不是文本数据被传递

我们只用 3 行代码就完成了培训!

里程碑# 2 已实现👍 👍

使用经过训练的 NB 模型进行测试

在我们开始测试之前,我们将首先需要以与训练数据集相同的方式对其进行预处理

测试设置文本清理

创建测试数据集的 BoW 表示 为训练数据集实例化的相同 count_vect 对象将用于测试数据集。但是请记住,我们不是在测试集上调用 fit_transform,因为我们只想将测试数据转换为术语-文档矩阵,而 fit_transform 首先学习词汇词典,然后返回术语-文档矩阵。我们应该只学习训练数据集中的词汇

fit_transform : learns the vocabulary dictionary and returns term-document matrixtransform : transforms documents to document-term matrix

现在我们可以在测试数据集的转换版本上进行测试

我们将简单地调用为 NB 模型拟合/训练的 clf 对象上的预测函数

里程碑# 3 实现 👍 👍 👍

培训&使用 Scikit 测试-学习管道功能

管道创造奇迹!通过使用 sklearn 的管道功能,上述代码可以进一步减少到 3 行代码

我们只需通过指定管道动作来构建一个管道对象,一旦该管道对象用于训练,它将按照指定的顺序自动执行管道步骤。

在我们的例子中,因为我们首先需要为 BoW 构建一个 CountVectorizer,然后拟合/训练一个 NB 模型,所以以完全相同的方式,我们将在管道中指定这些操作。

请注意,现在当调用 fir 方法时,我们将传递原始文本数据,因为现在管道中的 count_vect 将自己将其转换为数字形式。因此,在这里传递文本数据很重要,否则会出现令人讨厌的错误。测试数据也是如此。不需要单独对其进行计数矢量化,但我们需要从清理的角度对测试数据进行预处理

最后一部分——测试

所有的培训和测试只需 3 行代码!

你做到了!

里程碑# 4 实现 👍 👍 👍 👍

你可以在 Jupyter 笔记本 这里 找到所有源代码

如果您有任何想法、意见或问题,欢迎在下面评论或联系📞与我一起上 LinkedIn

实验的第一个幽灵:要么有意义,要么是噪音

原文:https://towardsdatascience.com/the-first-ghost-of-experimentation-its-either-significant-or-noise-b897e3058655?source=collection_archive---------6-----------------------

汤姆·奥利弗,科林·麦克法兰和利兹·埃德里

The first Ghost of Experimentation: It’s either significant or noise

👻这篇文章是探索导致追逐统计幽灵的实验从业者普遍误解的系列文章的一部分。

在进行了一项实验后,我们想了解观察到的任何差异是随机噪声,还是真实的。不幸的是,确认偏差表明我们倾向于以确认我们已经想到的方式来消化数据。

实验者很容易思考,如果实验没有达到预先设定的宣布信号而不是噪声的阈值,那么这些实验是否是“几乎显著的”或类似的短语。p 值是反直觉的,经常被曲解,所以让我们来探讨如何更彻底地对 p 值做出反应。

一个 p 值试图回答这个简单的问题:这个数据有多令人惊讶?或者更正式地说:给定零假设,找到观察到的(或更极端的)数据的概率是多少。p 值提供了一个条件概率,因为它假设零假设为真。

“从某种意义上来说,它(p 值)提供了防止被随机性愚弄的第一道防线,将信号与噪声分开”——Benjamini,2016 年

标准的显著性水平是 0.05。在这种情况下,如果 p 值小于 0.05,这意味着您观察到的数据只是偶然发生的条件概率(假设为空)小于 5%。因此,如果我们结束实验,观察到 p 值为 0.05,根据数据,我们可以有把握地说零假设是不正确的,并接受观察到的因果关系。

“但我的结果几乎意义重大”…

这可能会有问题;一个实验数据样本并不具有显著性——结果要么显著,要么不显著,否则无法定性。这是对 p 值如何工作的最大误解,或者更确切地说,是对它们如何分布的误解。

我们可以通过模拟抛硬币实验来证明这一点。如果我们模拟 100,000 次实验,其中我们将两个无偏的硬币翻转 100,000 次以创建我们的 A 组和 B 组,那么我们预计在大约 5%的时间(使用标准水平)中会看到两组之间的显著差异。下面的散点图显示了每个实验的一个点,如果 A 和 B 之间的差异显著,则每个点都是红色的,如果不显著,则是蓝色的:

因此,我们确实看到了显著性的预期模式,5.0%的实验显示了显著差异。更有趣的是,当我们观察 p 值在所有实验中的分布时。

请记住,硬币是无偏的,所以测试实验就像 A/A 实验一样,处理之间没有真正的区别:

我们看到的是,当数据中不存在真效应时(或者当零假设为真时),每个 p 值的概率是相等的。实验并不致力于显著性,在阈值之外比较 p 值的相对显著性是一个错误,会导致大量的假阳性。

p 值不应被视为显著,除非它在显著性水平内-当测试假设(拒绝空值)时,我们只能这样做,或者不这样做,所以找到显著性或声明不显著。如果我们没有达到预定的阿尔法水平,我们只能保持不确定

丹尼尔·拉肯斯提供了一个简单的纠正你可以遵循,以避免长期以来经常出错。其中α是我们的显著性水平:

p ⇐ alpha: Act as if the data is not noise.
p > alpha:保持不确定性或表现得好像数据是噪音一样。

👻更:追统计鬼

与我们合作

我们在 Skyscanner 以不同的方式做事,我们正在全球办事处寻找更多的工程团队成员。看看我们的 Skyscanner 职位寻找更多空缺。

Team in action.

我做的第一个机器学习程序。

原文:https://towardsdatascience.com/the-first-machine-learning-program-i-have-made-5ad09814184e?source=collection_archive---------7-----------------------

我做的第一个机器学习程序是 2011 年我上高中时提交的 NASA 陨石坑识别竞赛

下面是链接:Ideone.com

编写这段代码花了我几周时间和大量的研究。很有趣!我已经设法通过一个非常聪明的优化来调整算法性能。

它没有包含很多机器学习,主要是计算机视觉。然而,我已经成功地使用简单的逻辑回归调整了它的参数!:)我一直非常兴奋,我的提交获得了高分,这激励我将我的职业生涯奉献给这一领域。

它首先使用高斯滤波器对数据进行预处理,以消除可能误导进一步视觉算法的噪声。

下一步,我使用了一个 Sobel 算子。它将图像转换为黑白轮廓图像,其中黑色代表图片的相似部分,白色代表边缘——图像的两个一致部分相互接触的地方。

预处理后,核心组件基于霍夫变换——一种识别圆形等形状并将它们转换到概率空间的算法。

这个想法是扫描图像,寻找不同大小和形状的椭圆,这是环形山的特征。

最后,将启发式和线性模型相结合来产生结果。它已经使用单独的可执行文件进行了微调,以使用线性回归找到最佳参数。

转贴自 Quorahttps://www . Quora . com/What-is-the-first-the-machine-learning-program-you-made

足球德比——一个数据科学故事

原文:https://towardsdatascience.com/the-football-derby-a-data-science-story-f903d2c9e2ff?source=collection_archive---------15-----------------------

因此,这是我今年夏天发表的一系列中型文章中的下一篇文章,在这篇文章中,我一直致力于培养我在数据科学方面的技能,以朝着数据科学家的职业生涯迈进。

处理足球数据是我长期以来一直想做的事情,这一次,我抓住机会,利用足球运动员位置的数据集,对不同的比赛顺序和比赛进行了分析,以得出一些关于比赛顺序或比赛本身的有趣见解。

Photo by Willian Justen de Vasconcellos on Unsplash

我从 STATS,从他们的网站https://www.stats.com/data-science/获得了这个数据集。您可以从他们的网站上填写足球数据的申请表,以便发送数据请求,之后他们会在向您提供数据集之前向您发送一份协议供您签署。

这个分析的 Jupyter 笔记本是这里的。

出发

所以总结一下我在这次分析中想要做的事情

  • 想象足球比赛的顺序,
  • 显示关于单个游戏序列序列统计数据,
  • 想象比赛中球员在球场上的位置,
  • 对数据集应用 KMeans 聚类,以获得关于数据的有趣见解

数据集结构

数据集包含来自实际足球比赛的多列比赛序列(“序列 _1”到“序列 _18”),其中记录了每个球员和球的位置

让我们根据上面的可用信息定义数据中的列:前 22 列是防守球员的 X,Y 位置,后 22 列是进攻球员的 X,Y 位置,最后 2 列是比赛中球的 X,Y 位置

TLDR;关于数据集的这些信息是随数据集一起提供的,如果您想了解关于数据集的详细信息,请阅读此信息

数据集中包括 7500 个序列的训练集和两个单独的测试序列集。Python 用户可以将训练数据(以 pickle 格式)加载到字典中,每个序列的键将是“ sequence_n ”,其中 n 是从 1 到 7500 的任意值。

每个序列包含一段对应于最近职业足球联赛的实际比赛的跟踪数据。每个序列的格式如下:

-每个序列是具有 46 列的矩阵(numpy 2D 阵列)。每一行包含 23 对(x,y)坐标,来自两个队的 22 名球员和频率为 10Hz 的球。

——前 22 列是 11 对(x,y)联防队员。接下来的 22 列是进攻球队的坐标(定义为连续控球的球队)。最后两列是球的坐标。

-攻击队和防守队的每组 22 列包括守门员的(x,y)对,随后是其他 10 名队友的 10 个连续的(x,y)对。身份和团队因序列而异。然而,在每个序列中,身份是一致的。因此,具体来说,在每个序列的 46 列中,我们知道前 2 列代表防守队守门员的坐标。列 2 到 22 包含 10 对连续的(x,y)其他防守队员。列 23 和 24 携带攻击队守门员的 x 和 y 坐标。列 25 到 44 包含 10 对连续的(x,y)其他进攻队员。列 45 和 46 携带球的 x 和 y 坐标。

-坐标通常属于沿 x 轴的[-52.5 米,+52.5 米]范围和沿 y 轴的[-34 米,+34 米]范围,间距的正中心为[0,0]。因此,例如,要将数据标准化到范围[-1,+1],可以简单地将 x 列除以 52.5,y 列除以 34(这将有效地重新缩放球场,大致相当于 105×70 米大小的足球场,从矩形框到正方形框)

-坐标也进行了调整,以便攻击队从左向右移动,这意味着防守队在右手边防守球门。

-总的来说,该数据集相当于大约 45 场比赛的比赛时间,其中删除了冗余和“死亡”情况。

采集和处理数据

为了开始这个分析,我将数据集导入 Jupyter 笔记本。数据在数据库里。pkl '格式,这对我来说是新的,但是快速的谷歌搜索显示了熊猫的 pd.read_pickle 功能。

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib import patches
import numpy as np
%matplotlib inlinedata = pd.read_pickle('football/test_data_1.pkl')

让我们根据上面的可用信息定义数据中的列:前 22 列是防守球员的 X,Y 位置,后 22 列是进攻球员的 X,Y 位置,最后 2 列是比赛中球的 X,Y 位置

columns = ['GKDef_X', 'GKDef_Y', 'Def1_X', 'Def1_Y','Def2_X', 'Def2_Y','Def3_X', 'Def3_Y','Def4_X', 'Def4_Y','Def5_X', 'Def5_Y', 'Def6_X', 'Def6_Y', 'Def7_X', 'Def7_Y','Def8_X', 'Def8_Y','Def9_X', 'Def9_Y','Def10_X', 'Def10_Y', 'GKAtt_X','GKAtt_Y','Att1_X','Att1_Y','Att2_X','Att2_Y','Att3_X','Att3_Y','Att4_X','Att4_Y','Att5_X','Att5_Y','Att6_X','Att6_Y','Att7_X','Att7_Y','Att8_X','Att8_Y','Att9_X','Att9_Y','Att10_X','Att10_Y','Ball_X','Ball_Y']

从这里开始,现在是时候创建一个熊猫数据框架来保存这些值了

test_sequence = 'sequence_1'
df = pd.DataFrame(data[test_sequence], columns = columns)
df.head(5)

Result from the code above, we can see now the data split into the respective columns in a DataFrame

想象足球场和球的运动

在分析的这一部分,我们将把上面的内容转换成球的位置的可视化。让我们使用上面设计的列将数据转换成数据帧,并显示测试序列的球的轨迹。这是序列中单个时间点的球位置代码。

# Obtaining the positions occupied by the ball
ball_pos = df[['Ball_X','Ball_Y']].values.tolist()
ball_pos[0]# Output = [-19.961977005004883, 3.843478202819824]

这里是构建球场的代码,这里我使用 matplotlib 来构建它,并使用了这篇文章中的代码。

# Plotting the ball along with the position of the ball
# Run with createPitch([]) to just display the pitch
def createPitch(ball_pos, defense_pos, attack_pos, size=0.2):
    #Create figure
    fig=plt.figure()
    ax=fig.add_subplot(1,1,1)#Pitch Outline & Centre Line
    plt.plot([-52.5,-52.5],[-35,35], color="black")
    plt.plot([-52.5,52.5],[35,35], color="black")
    plt.plot([52.5,52.5],[35,-35], color="black")
    plt.plot([52.5,-52.5],[-35,-35], color="black")
    plt.plot([0,0],[-35,35], color="black")

    #Left Penalty Area
    plt.plot([-39.5,-39.5],[16,-16],color="black")
    plt.plot([-52.5,-39.5],[16,16],color="black")
    plt.plot([-39.5,-52.5],[-16,-16],color="black")

    #Right Penalty Area
    plt.plot([39.5,39.5],[16,-16],color="black")
    plt.plot([52.5,39.5],[16,16],color="black")
    plt.plot([39.5,52.5],[-16,-16],color="black")

    #Left 6-yard Box
    plt.plot([-52.5,-47.5],[-10,-10],color="black")
    plt.plot([-47.5,-47.5],[-10,10],color="black")
    plt.plot([-52.5,-47.5],[10,10],color="black")

    #Right 6-yard Box
    plt.plot([52.5,47.5],[-10,-10],color="black")
    plt.plot([47.5,47.5],[-10,10],color="black")
    plt.plot([52.5,47.5],[10,10],color="black")

    #Create Arc and add it to our plot
    leftArc = patches.Arc((-45.5,0),height=18.3,width=18.3,angle=0,theta1=310,theta2=50,color="black")
    rightArc = patches.Arc((45.5,0),height=18.3,width=18.3,angle=0,theta1=130,theta2=230,color="black")#Assign circles to variables - do not fill the centre circle!
    centreCircle = plt.Circle((0,0),10,color="black",fill=False)
    centreSpot = plt.Circle((0,0),0.8,color="black")
    leftPenSpot = plt.Circle((-43.5,0),0.4, color="black")
    rightPenSpot = plt.Circle((43.5,0),0.4, color="black")

    #Draw Arcs
    ax.add_patch(leftArc)
    ax.add_patch(rightArc)#Draw the circles to our plot
    ax.add_patch(centreCircle)
    ax.add_patch(centreSpot)
    ax.add_patch(leftPenSpot)
    ax.add_patch(rightPenSpot)

    # Plotting the ball
    for pos in attack_pos:
        locBall = plt.Circle((pos[0],pos[1]),size,color="red")
        ax.add_patch(locBall)
    for pos in defense_pos:
        locBall = plt.Circle((pos[0],pos[1]),size,color="blue")
        ax.add_patch(locBall)
    for pos in ball_pos:
        locBall = plt.Circle((pos[0],pos[1]),size,color="green")
        ax.add_patch(locBall)

createPitch(ball_pos, [], [])

Result from the code above, position of the ball

想象整个游戏过程

在我们连接数据之前,我们必须做一些数据处理来转换每个序列中球员的位置。这一部分将会非常代码密集,但是最终结果是非常值得努力的。

positions = []
new_cols = columns + ['seq']
for seq in data:
    for d_seq in data[seq]:
        seq_list = d_seq.tolist()
        seq_list.append(seq)
        positions.append(seq_list)
df_data = pd.DataFrame(positions, columns = new_cols)df_data.seq = df_data.seq.apply(lambda x: int(x.strip('sequence_')))
sequences = list(set(df_data.seq))
grp = df_data.groupby('seq')
sequenced_data = []
for sequence in sequences:
    sequenced_data.append(grp.get_group(sequence))
sequenced_data[0].head(5)

We just made a ‘seq’ column to store the entire dataset within this dataFrame and grouped by sequence

现在更多的争论是如何将每个球员的 X 和 Y 组合起来,并根据上面数据框中的值提供一个在球场上的位置。

def parse_data(data, seq):
    df = data[seq]
    defense = []
    attack = []
    ball = []
    defense.append(df[['GKDef_X','GKDef_Y']].values.tolist())
    defense.append(df[['Def1_X','Def1_Y']].values.tolist())
    defense.append(df[['Def2_X','Def2_Y']].values.tolist())
    defense.append(df[['Def3_X','Def3_Y']].values.tolist())
    defense.append(df[['Def4_X','Def4_Y']].values.tolist())
    defense.append(df[['Def5_X','Def5_Y']].values.tolist())
    defense.append(df[['Def6_X','Def6_Y']].values.tolist())
    defense.append(df[['Def7_X','Def7_Y']].values.tolist())
    defense.append(df[['Def8_X','Def8_Y']].values.tolist())
    defense.append(df[['Def9_X','Def9_Y']].values.tolist())
    defense.append(df[['Def10_X','Def10_Y']].values.tolist())
    attack.append(df[['GKAtt_X','GKAtt_Y']].values.tolist())
    attack.append(df[['Att1_X','Att1_Y']].values.tolist())
    attack.append(df[['Att2_X','Att2_Y']].values.tolist())
    attack.append(df[['Att3_X','Att3_Y']].values.tolist())
    attack.append(df[['Att4_X','Att4_Y']].values.tolist())
    attack.append(df[['Att5_X','Att5_Y']].values.tolist())
    attack.append(df[['Att6_X','Att6_Y']].values.tolist())
    attack.append(df[['Att7_X','Att7_Y']].values.tolist())
    attack.append(df[['Att8_X','Att8_Y']].values.tolist())
    attack.append(df[['Att9_X','Att9_Y']].values.tolist())
    attack.append(df[['Att10_X','Att10_Y']].values.tolist())
    ball = df[['Ball_X','Ball_Y']].values.tolist()
    def_list = []
    att_list = []
    for i in range (0,11):
        def_list = def_list + defense[i]
        att_list = att_list + attack[i]

    return def_list, att_list, ball

现在到了关键时刻,想象防守球员和进攻球员的整个比赛过程。这里进攻队用红色表示,防守队用蓝色表示

list_defense, list_attack, list_ball = parse_data(sequenced_data,0)
createPitch(list_ball, list_defense, list_attack)

Visualizing a sequence of play, attacking team in red, defending team in blue

不错!以我从小看足球训练有素的眼光来看,这里我们想象一名后卫将球回传给守门员,长时间踢向前锋/中场,绿色虚线是传球。

单个游戏序列的统计

我在这里选择了另一个序列,因为在进攻和防守队伍的位置之间有更多的重叠。这看起来像一个通向目标的复杂的传球序列

The sequence we will be working with for the analysis

球员和球的关系

我构建了一个函数来找出球员与球之间的距离,并返回一个距离列表来绘制球员与球之间的关系。你可以在我的笔记本这里找到这部分分析的代码

A complex sequence of play leading to a shot visualized with the player’s distances from the ball plotted over the time of the sequence

我们可以看到进攻和防守队伍中的一些球员如何在同一时间出现上升/下降,因为他们经常对传球做出反应。

进攻统计—控球

从这部分分析来看,每支球队的控球统计是一个简单的步骤。每当球的位置非常接近球员的位置时,就说球在球员手中。该序列应该对进攻方而不是防守方有更多的机会,因为数据集是作为进攻序列构建的。

让我们来看看这部分的代码

player_ppa = []
player_ppd = []
for i in range(0,11):
    player_df = pd.DataFrame(player_game_plot[i], columns = ['player', 'seq_num','def_ball','att_ball'])
    # Adding values to each team ppa = attacking ppd = defending
    player_ppa.append((player_df[player_df['att_ball'] < 2].seq_num.count()/len(player_game_plot[i]))*100)
    player_ppd.append((player_df[player_df['def_ball'] < 2].seq_num.count()/len(player_game_plot[i]))*100)# create plot
fig, ax = plt.subplots()
index = np.arange(0,11)
bar_width = 0.4
opacity = 0.8

rects1 = plt.bar(index, player_ppa, bar_width,
                 alpha=opacity,
                 color='b',
                 label='Attacking')

rects2 = plt.bar(index + bar_width, player_ppd, bar_width,
                 alpha=opacity,
                 color='g',
                 label='Defending')plt.xlabel("Player on team")
plt.ylabel("Percentage with Posession")
plt.legend()
plt.show()

Possession stats for each player in sequence of play

这是一个普遍的趋势,看到攻击队保持球从防守队。我们在这里可以看到,6 名球员比攻击队中的其他人拥有更多的控球权,这表明这次攻击是 6 名球员参与的结果。6 名进攻球员强烈参与了这场比赛,另外 2 名进攻球员轻微参与了这场比赛。

进攻位置——距离球门的距离

现在让我们仔细看看在这个游戏序列中每个玩家离目标的距离。我将距离函数定义为(x0-y0) + (x1-y1)的平方根。

def dist(x, y):
    return math.sqrt(math.pow((x[0] - y[0]),2) + math.pow((x[1] - y[1]),2))

在这里,我将计算进攻球员的位置,并找出他们距离球门的平均距离

def attackingPosition(attack):
    att_players = np.array_split(attack, 11)
    distance = []
    # For each sequence time j
    for j in range(len(att_players[0])):
        # for each player on the attacking team k = 1 to 11
        for k in range(11):
            # Add the distances of the players on the attacking team to the goal
            player_dist = min(dist([52.5,-4], att_players[k][j]),dist([52.5,4], att_players[k][j]))
            distance.append((j,k,player_dist))

    return distanceatt_positions = attackingPosition(list_att)
att_values = pd.DataFrame(att_positions, columns = ['time', 'player', 'dist'])
players = att_values.groupby(['player']).mean()

然后我试着想象球员离球门的距离,并在做的时候用颜色来取乐。

def plotDistanceFromGoal(player_distances):
    ig, ax = plt.subplots()
    index = np.arange(0,11)
    bar_width = 0.6
    opacity = 0.8dist = plt.bar(index, player_distances, bar_width,
                     alpha=opacity,
                     label='Attacking team')
    # Some fun with colors
    colors = ["#FF5733", "#FFFF33", "#33FF39", "#33FFE0", "#333FFF", "#DA33FF", "#FF3333", "#000000", "#0087FF", "#B2FF00", "#00FFC1"]
    i = 0
    for color in colors:
        dist[i].set_color(color)
        i+=1
    plt.xlabel("Player on attacking team")
    plt.ylabel("Distance from Goal")
    plt.show()
plotDistanceFromGoal(players['dist'])

Distance from goal for each player on the attacking team

攻击性统计——是目标吗?

现在我们可以看的更重要的一件事是这个序列是否会导致一个目标。这非常简单,因为我可以使用 sequence 的最后一个值,看看它是否在门柱内。这是代码。

def isGoal(sequence):
    seq = sequence[-1]
    #print(seq)
    if (((-39.5 < seq[0] < -52.5) or (39.5 < seq[0] < 52.5)) and ((-4 < seq[1] < 4))):
        return True
    else:
        return False
isGoal(list_ball)# Output: False

**哦,原来这个序列并没有导致一个目标!**我在数据集中搜索了一个序列,找到了这个。

Visualizing a classic counterattack leading to a goal

哇,一个经典的反击导致进球。所以我们的功能似乎是在寻找目标。

防御分析—标记

现在让我们更仔细地看看比赛的防守方,这里我为防守队的每个球员定义了一个新的指标作为最近的进攻球员,以分析这些球员与进攻队的球员的距离有多近。这是一种特征提取的尝试。

现在让我们来看看防守球员盯防对手的能力有多强,这里我假设盯防的唯一标准是与进攻方最近球员的距离。有人指出,这种假设可能是不正确的,因为球员可能会试图阻止传球。但是在这个分析的范围内,我只考虑最近的进攻球员的距离。

分析的这一部分是为了看到同一防守队的不同球员在对攻击的反应上的相似之处。

在下面的函数中,我找到了序列中每个时间步进攻球员与防守球员之间的距离。

def closestPlayerDist(defense, attack):
    def_players = np.array_split(defense, 11)
    att_players = np.array_split(attack, 11)
    distance = []
    # For each sequence time j
    for j in range(len(def_players[0])):
        # for each player on the defensive team k
        for k in range(11):
            # Add the distances of the players on the attacking team to the list
            player_dist = [dist(def_players[k][j], att_players[i][j]) for i in range(11)]
            distance.append((j,k,player_dist))

    return distancedistances = closestPlayerDist(list_def, list_att)

最近的进攻球员距离测量将显示:

  • 拉开距离,防守队中的每个球员在多大程度上缩小了他们盯防的进攻者的空间
  • 序列中每个时间步长的平均值将表明团队离拿到球有多近
  • 并且序列中每个时间步长的中值将指示运动员的某些部分离球有多近
  • 数据序列中每个时间步的变化显示了团队的“静态性”,即他们移动了多少来适应团队的进攻
def plotdist(distances):
    distances_2 = [(distances[i][0], distances[i][1], distances[i][2][np.argmin(distances[i][2])]) for i in range(len(distances))]
    x = [distances_2[i][0] for i in range(len(distances_2))]
    y = [distances_2[i][2] for i in range(len(distances_2))]
    plt.plot(x,y,'bo', alpha=0.2)
    plt.ylabel('distance of closest attacking player')
    plt.xlabel('time')

plotdist(distances)

Distance of closest attacking player for each player on the defending team

def plotmeans(distances):
    distances_2 = [(distances[i][0], distances[i][1], distances[i][2][np.argmin(distances[i][2])]) for i in range(len(distances))]
    values = pd.DataFrame(distances_2, columns = ['time', 'player', 'dist'])
    means = values.groupby(['time']).mean()
    medians = values.groupby(['time']).median()
    fig, ax = plt.subplots()
    x = [i for i in range(len(means))]
    ax.plot(x,means.dist,'bo', alpha=0.5)
    ax.plot(x,medians.dist,'ro', alpha=0.5)
    ax.legend(['mean','median'])
    plt.ylabel('mean and median distance of closest attacking player')
    plt.xlabel('time')

    plt.show()plotmeans(distances)

Mean and median of closest attacking player distance for the sequence of play

def plotvariance(distances):
    distances_2 = [(distances[i][0], distances[i][1], distances[i][2][np.argmin(distances[i][2])]) for i in range(len(distances))]
    values = pd.DataFrame(distances_2, columns = ['time', 'player', 'dist'])
    variance = values.groupby(['time']).var()
    fig, ax = plt.subplots()
    x = [i for i in range(len(variance))]
    ax.plot(x,variance.dist,'go', alpha=0.2)
    ax.legend(['variance'])
    plt.ylabel('variance of distance to closest attacking player')
    plt.xlabel('time')

    plt.show()plotvariance(distances)

The variance of closest attacking player distance for sequence of play

player column indicates defense, att_player indicates attack, time indicates percentage of time in sequence spent marking specific attacking player

现在让我们来看看防守方球员盯防对方球员的时间百分比。

这部分的代码

distances_3 = [(distances[i][0], distances[i][1], np.argmin(distances[i][2])) for i in range(len(distances))]marking = pd.DataFrame(distances_3, columns = ['time', 'player', 'att_player'])
marking = marking.groupby(['player','att_player']).count().sort_values(by='time', ascending=False)
marking.time = (marking.time/(len(distances)/11))*100
marking

以我训练有素的眼光来看,我们可以看到防守球员 2、5、10、6 和 1(守门员)靠近他们的进攻球员,但之后有一个急剧下降,这表明防守球员要么被进攻球员超过,要么作为一个团队进行区域防守。

我不认为统计上这是一个伟大的功能,否则。

在整个比赛中可视化球员在球场上的位置,

既然我们现在已经查看了一个单一的游戏序列并对其进行了分析,那么让我们将数据集作为一个整体来看。

球员位置热图

在这里,我们将构建一个玩家位置的热图,并显示每个玩家占据的位置

我首先构建了一个助手函数来解析数据并构建玩家位置的热图。接下来,我必须将这些值解析为整数,因为我使用的是 plt.pcolor,它必须在数据中包含整数值。52 和 35 是硬常数,以确保我的数据中没有任何负值。

def parse_sequence(values, data):
    round_data = [(round(x[0]),round(x[1])) for x in data]
    for r in round_data:
        a = r[0] + 52
        b = r[1] + 35
        values[b,a] += 1

在这里,我获得了原始数据,并从数据中提取了球员位置的值,用球员的位置填充网格

values = np.zeros((71,107))
ball = np.zeros((71,107))
for i in range(len(sequenced_data)):
    list_defense, list_attack, list_ball = parse_data(sequenced_data,i)
    parse_sequence(values, list_defense)
    parse_sequence(values, list_attack)
    parse_sequence(ball, list_ball)

最后,在这个分析的第二个关键时刻,玩家位置的热图

def createGrid(values, title_str):
    v = np.asarray(values)
    plt.pcolor(v)
    plt.title(title_str)
    plt.legend()
    plt.show()
createGrid(values, "Heatmap for player's position on pitch")

Look at this thing of beauty, heat map for positions of players for all the sequences of play

现在继续,我想看看比赛中的传球,以及整场比赛中球的位置热图。

createGrid(ball, "Heatmap for ball position on pitch")

Heat map for position of the ball throughout the entire game

k 均值聚类分析

显然,有了一组我可以聚集的点,我发布了 KMeans 是聚集这些数据的最简单的方法,以显示对数据的一些有趣的见解

我选择 KMeans 的原因

  • KMeans 聚类用于对非结构化数据进行分类——非结构化数据具有两个特征,每个球员位置的 X 和 Y 坐标非常适合分析
  • KMeans 通过查找数据的特征映射的质心来工作——我使用它来查找球员位置的 X,Y 坐标的质心,这为进攻和防守团队提供了对团队相对结构的洞察
  • 在防守球员和进攻球员的位置上使用 KMeans 将揭示比赛中球场的自然位置

让我们来看一下代码,这是为了获得所有的数据,以馈入我们的 KMeans 分类器

from sklearn.cluster import KMeanslist_def = []
list_att = []
list_bll = []
for i in range(len(sequenced_data)):
    list_defense, list_attack, list_ball = parse_data(sequenced_data,i)
    list_def = list_def + list_defense
    list_att = list_att + list_attack
    list_bll = list_bll + list_ball

现在转到 KMeans 分类器和可视化代码。笔记本也可以在这里买到。

def plotKMeans(train, data, title_str, k=11):
    # Number of clusters
    kmeans = KMeans(n_clusters=k)
    # Fitting the input data
    kmeans = kmeans.fit(train)
    # Getting the cluster labels
    labels = kmeans.predict(data)
    # Centroid values
    centroids = kmeans.cluster_centers_
    def xy(lst):
        x = [l[0] for l in lst]
        y = [l[1] for l in lst]
        return x, y
    x, y = xy(data)
    fig, ax = plt.subplots()
    if (title_str[0] == 'D'):
        ax.scatter(x, y, marker='o', color='#ffff00', alpha=0.03)
    else:
        ax.scatter(x, y, marker='o', color='#00ffff', alpha=0.03)ax.scatter(centroids[:,0], y=centroids[:,1], marker='*', c='#050505', s=100)
    plt.title(title_str)
    plt.legend()
    plt.show()
    return centroids

k 表示防守和进攻队的质心

现在画出克曼质心和防御队的位置

def_average_pos = plotKMeans(list_def, list_def, "Defensive team average positions")
att_average_pos = plotKMeans(list_att, list_att, "Attacking team average positions")

These do indeed look like formations, but we’ll come to that in a second.

与球的关系

所以这一次,我试着看看球的位置会如何影响进攻和防守球队的 KMeans 集群,但似乎没有太大的影响

Not much of a difference eh?

最活跃的球场区域

现在让我们来看看球场的哪个部分是最受欢迎的,这是对比赛本质的一种洞察。在这里,我将整个数据集的聚类数设为 10,希望看到双方球员在球场上占据的 10 个质心。这是它的代码

plotKMeans(list_def+list_att, list_def+list_att, "Areas of the pitch with most activity", 10)

This resulted in this heat map showing 10 positions (KMeans centroids) on the pitch that players of both teams occupy

形成

现在,我们终于明白了,我们可以看到,使用 KMeans 对 11 个集群进行聚类,我们可以找到防守和进攻团队中每个球员的位置,从而形成一个阵型。现在我从防守队和进攻队的位置提取质心,并绘制它们,它们看起来就像一个编队。把这个放在足球场上,从这个分析的前面部分,把它放到真正的背景中。

My first try to plot the centroids of the attacking and defending team

不错!以我训练有素的眼光来看,我可以看到防守排成 3-3-3-1 阵型,而进攻排成 4-2-3-1 阵型,边后卫被推得更高,让我在球场上展示一下

The attack is red and defense is blue.

结束了

我们从球员在球场上的位置开始,分析了不同度量的比赛序列,球员如何相对于球移动,相对于对方球队移动,尝试构建一个特征,分析球场上占据的位置,尝试使用 KMeans 聚类对数据进行分类,并最终使用 KMeans 质心对阵型进行可视化

这是一个具有挑战性的数据集,但我们最终得出了一些有趣的结果。期待大家对这个笔记本的评价,多提建议。

堆栈溢出标签的频率

原文:https://towardsdatascience.com/the-frequency-of-tags-on-stack-overflow-2fb47600e2b2?source=collection_archive---------5-----------------------

在本帖中,我们将了解一些关于标签的数据,这些标签在 Stack Overflow 上用来标记问题,它们的频率以及我们可以测量它们周围的内容。

Image from https://pixabay.com

对于那些堆栈溢出严重的用户来说,这可能是绝大多数做技术的人,让帖子有适当的标签对于浏览网站的巨大存档是至关重要的。在写这篇文章的时候(2018 年 1 月),Stack Overflow 包含了超过 1500 万个问题,有大约 54000 个独特的标签。这里的帮助页面旨在就如何最好地使用该功能提供一些指导,因为以最佳方式标记您的问题以便相关人员能够找到并回答它是非常重要的。标签是技术的名称,如编程语言、框架、软件或技术元素和组件,如编码技术或计算机科学一般主题。

历史的片断

根据维基百科页面的说法,堆栈溢出已经在 2008 年 9 月推出,现在已经相当成熟地成为编程的一站式资源。一年后,在 2009 年 9 月(仍然是根据维基百科),它的成功模式已经扩展到了一个普通的 Q &站点,这个站点被分成了许多主题的子站点(其中许多是科技之外的),栈交换。总而言之,这个网络已经存在了 8/9 年,所以我们都在准备庆祝它的 10 周年纪念日。从历史的角度来看,阅读这篇名为的文章非常有趣,这篇文章讲述了在 2009 年网络刚刚诞生时,StackExchange 的所有问题的答案。

Stack Overflow Wikipedia 页面还断言,截至 2014 年 12 月,根据分配给问题的标签类型,网站上讨论最多的前八个主题是:Java、JavaScript、C#、PHP、Android、jQuery、Python 和 HTML 。我们将看到这种情况是否以及如何改变!

获取一些数据

为了查询堆栈溢出 API,我们将使用 Python 包 StackAPI 。注意,API 允许每 24 小时 10000 个请求。

我们将获取 5000 个最频繁的标签(那些具有最高使用计数的标签),因为由于所述 API 限制,我们不能获取所有的标签:如果我们确实将请求拆分为在多天内获取,因为标签的使用计数随时间变化,我们将不会有一致的画面。不管怎样,5000 美元看起来足够看一些有趣的东西了。

所有遵循的方法和结果都记录在本报告中,还有一本 Jupyter 笔记本供感兴趣的人使用。对于图,请注意我们将使用 Matplotlib 的 XKCD 主题,并且我们试图再现堆栈溢出的颜色!

首先(这是 2018 年 1 月 11 日的数据),最常见的标签是什么?频率作为使用计数给出,即带有该标签的问题的数量。下图显示了按频率排列的前 20 个标签: Javascript 为王,出现次数超过 150 万次,然后我们看到许多其他熟悉的语言和操作系统。不是特别惊讶!

自 2014 年底以来,最常见的 8 个标签是 Java、JavaScript、C#、PHP、Android、jQuery、Python 和 HTML,有什么变化吗?嗯,谁是最频繁的 8 个没有改变,但假设句子是按照频率递减的顺序报告它们,似乎发生了一个转变:Java 当时比 Javascript 更受欢迎。这是时代的标志吗?

有趣的是, AngularJS 是唯一一个进入前 20 名的 Javascript 框架(它诞生于 2010 年,所以可能已经足够老了),而数组作为一种数据结构被讨论了很多。

总之,请注意,即使只有这么小的一组数据,频率也跨越了很大的区间,最后一个显示的 AngularJS 大约有 20 万个计数,与上面的 150 万个 Javascript 相比。让我们探索一下我们检索到的所有标签的频率是如何随着标签的等级(在按频率排序的列表中的位置)而下降的。下图准确地显示了这一点,并清楚地表明标签频率确实跨越了几个数量级。

事实上,频率的分布是幂律的,如果你符合频率与等级的趋势(Zipf 定律),你最终会得到,分布的内部体积,趋势为。这是否暗示了富人越来越富的现象?

Zipf 定律决定了一种语言中单词的趋势频率/排名;斜率为-1 的幂律趋势意味着第二个出现频率最高的单词是第一个的一半;第三种是三分之一的频率,以此类推。我们在标签的频率方面也看到了同样的情况。

在文本生成的优先附件(也称为“rich gets richer”)模型中,当您选择要使用的单词时,您会选择一个与其频率成比例的现有单词,以便更频繁的单词有更高的概率被重用,这将生成频率的幂律趋势。以我们的标签为例,我们推断我们所看到的东西可能有类似的机制,这可能取决于一系列的原因。

首先,Stack Overflow 中的 UI 根据你写的内容的主题,为你的文章推荐标签。最常见的标签将变得更丰富,因为努力的方向是填充现有的标签,如果它们合适的话,而不是创建一个几乎没有填充标签的分散网络。此外,一些语言和工具确实比其他语言和工具更受欢迎,所以这再次加强了它们标签的频率。这就是为什么 Javascript 在网站上如此受欢迎的原因。

越老越有钱?

我们还可以询问数据,无论如何,旧的也变得更富有,也就是说,时间上更老的标签是否吸引了更多的帖子。这似乎是一件合理的事情,随着时间的推移,现有标签上会有越来越多的帖子。就这么简单,但有多真实呢?

关于这一点,我们需要注意,API 的tags/端点并不提供标签的创建日期,尽管标签的信息页面会提供。所以我们所做的是附加一个标签,该标签带有从该标签出现的第一个问题中提取的创建日期(查询search/端点);请注意,由于问题总是可以编辑,包括重新标记,这可能意味着当新标签首次出现时,旧问题会看到其标签被修改。这就是为什么有些标签的创建日期比它们所代表的技术还要早(例如,AngularJS 出生于 2010 年,但他的标签是 2009 年的)。

下面的图显示了使用计数与其年龄的散点图(以天为单位,此数据是在 2018 年 1 月 11 日检索的,因此是到那时的天数)。它还显示使用计数的平均宁滨,仓位为 200 天。

值得注意的是,对于最老的标签,在最后一个容器中有相当大的跳跃。除了有点神经质的行为之外,正如预期的那样,旧标签变得越来越富有。但是最老的一个比其他的更富有,这意味着有一个峰值:你从倒数第二个箱子的大约 3000 到最后一个箱子的 15000!这表明,在网站生命的头 200 天里,涵盖绝大多数热门话题的标签已经被创建出来,并一直保持着巨大的吸引力。自诞生以来的大约一年时间里,Stack Overflow 已经见证了大多数当今仍然非常流行和有趣的主题。

标签可以有同义词。当一个问题被标记了某个现有事物的变体时,它会自动映射到母标签,因此使用计数会与我们检索到的母标签相对照。请注意,当您在 API 中查询与母标签同义的标签时,您将获得母标签的使用计数。

获得一定声誉的用户将标签折叠为现有标签的同义词,参见帮助页面。这个过程控制标签的增加,使它们保持有序。例如, javascript 的一些同义词是类似 javascript-domjavascript-module 的东西;一些 pythonpython-shellpython-interpreter

每个标签的同义词数量分布如图所示,这也是一个非常不均衡的情况,只有少数标签有大量的同义词。

作为参考,拥有最多同义词(25 个)的标签是 css (比如 font-weightdynamic-cssinline-block )。

现在,你认为有同义词的标签会得到更高的频率计数吗?这很直观地归因于这样一个事实,即带有同义词的标签是一种可以用多种风格表达的标签,可能是一种复合和广泛的技术,这意味着人们可能对它的不同部分感兴趣。我们运行了一个快速 t-test 来确定有同义词和没有同义词的标签的使用计数分布的均值是否显著不同,结果是它们实际上是不同的,所述均值分别位于 21500 和 3200:一般来说,有同义词的标签的受欢迎程度大约是没有同义词的标签的 7 倍。

关于时间趋势的一个注记

2017 年,Stack Overflow 推出了一个很棒的工具,向每个人展示他们生成的关于技术受欢迎程度的数据,它被称为 Stack Overflow Trends ,你可以阅读这篇由 D Robinson 撰写的关于它的博客文章。简而言之,这是一个用户界面,你可以及时查询你选择的一些标签的使用计数数据,因为栈溢出诞生了。我们为上面提到的 8 个最受欢迎的标签中的一些标签做了这个这个就是结果: c# 在 2009-2010 年达到了它的最好年龄,现在正在稳步下降; JavascriptPython 正在崛起,第一个出现并且一直是王者, Java 在最近几年缓慢衰落。

一句小小的警告

从表面上看,这些时间趋势结果背后的假设是,堆栈溢出是周围技术专家的代表性社区,问题被正确标记,数据没有偏差。举个极端的例子,标签的流行可能是因为缺乏相关工具的良好文档,而不一定是因为它在用户中有多流行和有趣:网站上的许多用户会突然出现在那里,以获得一些帮助来解决他们在其他地方找不到好参考的问题。

总而言之,这是一个很好的工具,可以看到技术世界是如何发展的!

原载于 2018 年 1 月 14 日martinapugliese . github . io

深度学习的成果:卷积神经网络如何支持机器人收割和产量绘图

原文:https://towardsdatascience.com/the-fruits-of-deep-learning-how-convolutional-neural-networks-support-robotic-harvesting-and-yield-35e2d383e2d8?source=collection_archive---------10-----------------------

Delicious deep learning

准确高效的水果检测对于机器人收获和产量制图至关重要。

不管机器人的抓取系统有多复杂,它们只能抓取视觉系统能探测到的水果。此外,水果检测有助于生成产量图,跟踪作物生产的空间可变产量,并作为精准农业的决策工具。

许多因素使水果检测成为一项具有挑战性的任务:水果出现在不同照明的场景中,可能被其他物体遮挡,有时很难从背景中分辨出来。

理想的水果检测系统是准确的,可以在容易获得的数据集上进行训练,实时生成预测,适应不同类型的水果,并使用不同的模式(如彩色图像和红外图像)日夜工作。

在过去的几年里,深度学习方法在解决这些需求方面取得了长足的进步。这篇文章强调了水果检测中的一些挑战和最近的里程碑。

计算机视觉任务的第一个挑战是获取相机图像或视频帧形式的原始数据。在农业领域,经常通过使用无人机和机器人来收集数据。

水果检测可以表述为一个图像分割问题。为了使计算机视觉系统从可用的原始数据中学习,需要将作为水果一部分的像素与代表背景的像素区分开。

单独注释水果像素是劳动密集型的。幸运的是,深度学习系统不需要像素信息,而是可以从边界框注释中学习。

Sa 等人[5]报告称,标记一幅图像中的水果像素需要将近 100 秒,执行边界框注释需要大约 10 秒。换句话说,给定相同的资源,使用边界框将产生十倍大的注释数据集。

合成生成的数据集提供了人类注释的潜在替代方案。Rahnemoonfar 和 Sheppard [3]实验了一个相对简单的过程,包括用绿色和棕色的圆圈填充空白图像,模糊图像,并在随机位置绘制随机大小的圆圈。Barth 等人[2]使用一个复杂的过程,为 42 个不同的植物模型综合创建了 10,500 幅图像,这些模型具有随机的植物参数。

在许多情况下,深度视觉系统受益于迁移学习。现有的卷积神经网络(CNN)已经在数百万张图像上进行训练,并由领先的研究人员多年来进行优化,可以针对特定领域的任务进行微调,而不是从零开始每个项目。

特别是,许多针对水果检测问题的深度学习解决方案都是基于一个非常成功的对象检测网络,名为 Faster R-CNN[4]。这个神经网络分两步训练:第一步,使用由 120 万个例子组成的数据集 ImageNet 训练更快的 R-CNN 作为图像分类器。然后,使用另一个名为 PASCAL VOC 的数据集对网络进行微调,以进行对象检测。

快速 R-CNN 中的区域提议模块生成一组可能包含感兴趣对象的候选边界框。用作者的话说,这个模块告诉网络“往哪里看”。对于每个建议的盒子,区域分类步骤然后计算该盒子可能属于的类的概率分布。

存在的更快的 R-CNN 的变体在用于为网络的区域提议部分提取图像特征的卷积层的集合上不同。具有 13 个卷积层的 VGG-16 变体更深且计算更密集,而 ZF 变体更浅但更快。

在深度神经网络出现之前,计算机视觉模型中的特征是针对特定任务和收集数据的特定条件人工设计的。深度学习模型会自动学习这些特征,从而节省大量的开发时间。

Sa 等人关于 DeepFruits 系统的论文的发表[5]标志着水果检测的深度学习方法的发展中的一个重要里程碑。DeepFruits 建立在更快的 R-CNN 上,可以检测温室中拍摄的图像中的甜椒和岩瓜。该系统可以在几个小时内完成训练,在商用硬件上运行,每幅图像的检测时间约为 400 毫秒。

作者使用了更快的 R-CNN 的 VGG-16 变体,并表明第一层中的过滤器专门处理低级特征,例如与红色和绿色糖果纸相对应的红色和绿色。具有强激活的较高级别层中的区域通常对应于属于水果的图像区域。

当交集超过联合分数大于 0.4 时,包含水果的区域被认为被检测到。使用这个阈值,作者报告了甜椒检测任务的 F1 分数在 0.8 和 0.84 之间。性能最好的方法是使用一种称为“后期融合”的评分方法,将来自 RGB 和近红外图像的单独训练模型的建议结合起来

有趣的是,当更快的 R-CNN 组件在仅仅 20 张训练图像上进行微调时,DeepFruit 达到了令人尊敬的 0.8 的 F1 分数。应该注意的是,实验中使用的数据集非常小。每个分类器在大约 100 幅图像上进行训练,并在几十幅图像上进行测试。

自发表以来,许多新论文都建立在 DeepFruits 的基础上,以解决类似的更具挑战性的问题。

一个显著的例子是 Bargoti & Underwood 发表的关于果园水果检测的论文[1]。研究人员在白天使用机器人车辆捕捉三种水果类型的高分辨率整树图像:苹果、杏仁和芒果。该数据集总共包含 2000 多幅训练图像和近 500 幅测试图像。

作者强调,由于每个水果的高像素计数和每个图像的低水果计数,增加了难度。例如,杏树可以结 1,000-10,000 颗杏仁,而且个头比其他水果品种小。

DeepFruits 和 Bargoti & Underwood 论文中描述的系统都使用更快的 R-CNN,并将水果检测视为一组二元问题:为每种水果类型训练一个检测器。另一个共性是非最大抑制(NMS)的应用,这是一种用于处理重叠区域的程序。NMS 消除了与高置信度候选项强烈重叠的低置信度区域,如通过联合分数的交集所测量的。

Bargoti & Underwood 试验了不同的数据增强技术,发现通过翻转和缩放可用图像可以实现性能的最大提升。

VGG-16 需要 2.5 GB 的 GPU 内存来存储 25 万像素的图像。为了克服这个瓶颈,作者采用了一种他们称为“平铺式更快 R-CNN”的方法:使用在图像上滑动的适当大小的窗口进行检测。为了确保水果不会在图块之间分开,两个图块之间的重叠大于最大水果尺寸。然后,将 NMS 应用于所有图块的组合输出。

使用这种设置,更快的 R-CNN 的 VGG 变体优于更浅的 ZF 变体,并且苹果和芒果的 F1 得分超过 0.9。对于较小尺寸和经常出现的杏仁,水果检测结果据报道接近 0.78。有趣的是,对于只有五幅图像的苹果,检测性能达到 0.6,而对于训练图像的最后一倍,检测性能仅提高了 0.01。

最后,作者指出,更快的 R-CNN 的正确选择取决于手头的任务。例如,计算效率对于机器人收割来说比产量绘图更重要,产量绘图可以离线进行。

DeepFruits 和相关系统取得的有希望的结果标志着农业技术的令人兴奋的发展。让我们希望深度视觉系统将为普遍获得负担得起的、有营养的和美味的食物的目标做出重要贡献。

水果计数是一个更高级的任务,它建立在水果检测的基础上,并需要跟踪在以前的帧中已经看到的水果,这是一个可能在将来的文章中讨论的主题。

感谢您的阅读!如果你喜欢这篇文章,请点击“鼓掌”按钮,关注我并查看aisummary.com以获得更多关于令人兴奋的机器学习应用的信息。

参考

[1]s .巴尔戈蒂和 j .安德伍德,2017 年 5 月。果园深度水果检测。在机器人与自动化(ICRA),2017 IEEE 国际会议上(第 3626–3633 页)。IEEE。

[2]r . Barth,IJsselmuiden,j . Hemming,j .和 e . j . Van Henten,2018 年。农业语义分割的数据合成方法:辣椒数据集。农业中的计算机和电子144 ,第 284–296 页。

[3] Rahnemoonfar,m .和 Sheppard,c .,2017 年。深度计数:基于深度模拟学习的水果计数。传感器17 (4),第 905 页。

[4]任,s .,何,k .,吉希克,r .和孙,j .,2015 年。更快的 r-cnn:用区域建议网络实现实时目标检测。在神经信息处理系统的进展(第 91–99 页)。

[5] Sa,I .,Ge,z .,Dayoub,f .,Upcroft,b .,Perez,t .和麦克库尔,c .,2016 年。Deepfruits:一个使用深度神经网络的水果检测系统。传感器16 (8),第 1222 页。

概率的基本原理

原文:https://towardsdatascience.com/the-fundamental-principle-of-probability-resolving-the-replication-crisis-with-skin-in-the-game-1a06a45e9231?source=collection_archive---------6-----------------------

如果你给一个结果的发生分配一个概率,那么你必须愿意接受另一方以正确的隐含赔率提供的赌注(这个结果不会发生)。

如果你不会有意投资于一家对冲基金,而该基金的经理因产生巨额回报而获得的报酬与破产时相同,或者与一家输钱不还的博彩公司打赌,或者相信一名不审查其消息来源的记者,那么当科学家的假设是错误的、分析是有缺陷的或发现是虚假的时,你为什么会相信那些几乎没有或根本没有损失的科学家的说法呢?

投资、博彩和新闻报道业务绝非完美,但至少它们有内在的机制来协调生产者(基金经理、博彩公司、记者)和消费者(投资者、赌徒、读者)的利益。基金经理、博彩公司和记者不得不拿自己的财富、声誉和信誉冒险,这样他们才有资金来管理,有账簿来保管,有读者来写作。医生、屠夫、厨师和(非工会)水管工也是如此。但是为什么不是科学家呢?

职业科学家不是根据客观建立的标准(例如,上述例子中的利润、荣誉和真相)进行评估,而是通过行为准则、同行评审和编辑委员会来约束自己,为自己提供大量的好处——工作保障、舒适的薪水、数百万美元的纳税人资助的拨款,甚至如果他们的一项发现成为主流,还有可能获得名誉和财富——而潜在的坏处大多限于特殊情况,如欺诈或不当行为。这种不对称加上学术界的“发表或灭亡”文化导致了一种反常的激励结构,在这种结构中,快速和肮脏的行为比仔细和正确的行为更受奖励,这反过来又导致了所谓的科学“T1”复制危机。

十多年前,约安尼迪斯在一篇名为为什么大多数发表的研究结果都是假的的文章中呼吁人们关注这一系统的负面影响。十多年后,有许多改革科学调查、评估和报告方式的提议摆在桌面上,并以此提高已发表研究的可靠性。但是,即使人们对改革有着广泛的兴趣,复制危机也没有什么消退的迹象,因为最近的一项努力只成功复制了发表在心理学文献中的 37%的结果。

这些问题将持续存在,直到科学,如投资、著作和新闻报道,实现一种内在机制,将科学家的职业成功与其结果的可靠性联系起来。我在这里认为,这比看起来容易实现得多,因为它只需要很少或不需要改变目前进行科学调查的方式,只需要对科学结论的报告方式进行微小的修改。关键的想法是使科学文献中报告的结论更科学,在某种意义上是可测试和可证伪的,而不仅仅是透明或合理的,如根据最佳实践的标题或最先进方法的清单进行评估。因此,我主张更加强调结果,而不是回避被认为是“以结果为导向”的科学报告方法的可察觉的缺陷,我特别指的是实际的结果,例如,验证或伪造发表的声明的明确标准,而不是报告的结果,例如,统计意义。

注册报告 (RRs)等(善意的)提议所寻求的那样,仅仅监管方法是不够的。哪些方法是“合理的”将由目前决定结果是否“重要”的同一批编辑和裁判来确定,他们不改变最终目标(发表)或机制(同行评审),而是改变实现该目标的手段(即,通过应用“合理的方法”而不是报告“重要的结果”)。因此,虽然这样的实现可以改变特定的行为,例如,通过消除 P-hacking 和其他形式的面向结果的不当行为,但是它们将在没有任何保证消除由这些行为引起的复制问题的情况下这样做。

正确的科学结果对合理的科学方法的重要性凸显了科学更大的社会作用,这一作用被注册报告和类似的将重点从结果转移到方法的建议所淡化。哲学、历史和数学等纯学术学科的直接影响不会远远超出象牙塔,与之不同的是,发表在科学文献中的结果会对经济、社会、医学、商业、工业和公共政策产生直接影响。因此,虽然专注于方法可能是确保总体科学一致性的谨慎方法,但个体研究的正确性对消费者来说很重要,因为他们根据科学文献中的具体结论做出政策和商业决策。事实上,癌症研究、教育政策或经济学中的错误结论是使用“最先进”的方法获得的,并且得到了“专家”同行评审员的批准,这对于受基于这些有缺陷的报告的错误政策影响的癌症患者、特殊需要儿童或贫困公民来说,并不是一种安慰。因为不管一个科学家是故意造假,还是不知不觉地误用了统计方法,或者不幸地由于随机误差得出了错误的结论,最终结果都是一样的:同行评议的科学文献中报告的结论不太可靠,结果是任何依赖科学研究可靠性的人(也就是几乎所有人)的处境都更糟。这并不是说科学家在报告结论之前必须 100%确定结论,因为反复试验对科学进步至关重要,但是这些结论的消费者,包括科学家同事和普通大众,应该确信他们所阅读的内容很可能是正确的,这不仅仅是因为科学界保证这些方法的合理性或结论的合理性,而是因为主张这些主张的科学家有动力保持正确,并面临错误的后果。同样的基本原则让基金经理、博彩公司、记者、医生、屠夫、厨师和水管工(除了那些受工会保护的人)保持警觉,对科学家也是如此。

只要科学家(即发表论文)的主要目标与科学(即获得新知识和新见解)的目标不一致,科学文献的可靠性将更多地受到社会学因素而非科学因素的影响。为了协调消费者和科学生产者的利益,仅仅消除对某些不当行为的激励或奖励特定的最佳做法是不够的。持续生产不可靠的科学(有意或无意)必须成为科学事业不可持续的战略,反过来,持续生产可靠的科学必须成为成功的科学事业的最清晰的路径。换句话说,科学家居住的学术世界需要与他们的结论具有影响力的现实世界进行接触。

学术与现实

提高已发表科学的可靠性与调整学术科学和 T2 真正科学的目标是齐头并进的。真正的科学结论可以用现实来检验,而学术科学只能由其他学术来评价。因此,可测试性标志着学术科学和真实科学之间的界限,并绘制出提高科学文献可靠性的逻辑路径。因为指导科学期刊发表的同行评议决定主要是基于学术标准,所以一些学术科学在与现实对比时表现不佳就不足为奇了;参见,例如,心理学中的大规模复制研究

区分学术和现实的关键一步在于更清楚地了解科学结论通常是如何通过统计方法及其伴随的概率进行评估的,以及这些概率如何提供一个有机的机制来评估科学主张,所有这些都不需要同行评审期刊、专家裁判或官僚监督。事实上,复制危机的一个主要因素是科学文献没有区分学术概率和真实概率,而这种区分对于理解概率在科学话语中的作用至关重要。

关键的一点是真实概率可以用一种理论概率无法测试的方式来测试。

学术概率是仅与现实世界有假设联系的理论计算。

学术概率是纸上谈兵的分析结果,例如当贝叶斯哲学家根据对赌博的假设倾向来解释概率时,或者当科学家假设糖尿病和某些假定的风险因素(例如,年龄、体重、饮食等)之间的关系时。)遵循多变量逻辑回归,或者当统计学家假设从临床试验计算的检验统计量遵循具有一定自由度的 t 分布时。最初,从这些分析中出现的概率是学术性的(如“没有实际意义,只有理论意义”),因为它们是通过指令(任意的程度或声明)而不是通过与现实世界的具体联系来实现其意义的。因为这些概率是理论上的,所以这些概率所支持的结论也是理论上的。

从学术分析中得出的结论,只有当它们所基于的假设性假设与现实联系起来时,才会变得真实。

真实概率由真实的东西支持,并且是关于真实的东西。

对于“由真实事物支持”的概率,它必须有一个有形的担保人,也就是说,一些东西必须作为抵押品,以确保概率的提供者(“概率者”)是善意的。对于一个“关于真实事物”的概率,关于概率的陈述必须是可判定的,因为必须有明确的标准来确定概率陈述的对象是否发生,是或不是真实的。

在这种理解下,股票期权定价中使用的概率是理论上的*,直到期权在这些概率的基础上被买卖*。一旦交易完成,这种可能性就可以通过交易的已实现利润或亏损来检验。同理,概率和概率的导数如 P 值、置信区间等。科学文献中报道的都是学术性的*,除非这些概率的准确性可以被检验*。(注意:尽管在任何给定的交易中实现亏损并不表明相关的概率计算是错误的(同样,在任何给定的交易中实现盈利也不表明相关的概率计算是正确的),但在一长串交易中的持续亏损(盈利)提供了一种客观的方法来评估这些计算中的系统误差(或稳健性)。)

概率的基本原理

理论概率和真实概率之间的区别产生了我所谓的概率基本原理 (FPP),它通过将理论概率与真实结果联系起来,建立了理论概率和真实概率之间的联系。FPP 是一个常识性的概念,几乎每个股票交易者、庄家和普通人都能直观地理解:

如果你给一个结果发生的概率赋值,那么你必须愿意接受另一方以正确的隐含赔率提供的赌注(这个结果不会发生)。

通过 FPP,当你声称' A '的概率是 p 时,那么你就是在含蓄地为' not- A '提供了 p/(1-p) 的赔率。如果我选择接受你的提议,那么如果发生 A 的话,你就赢了我赌的所有钱,如果发生 A 的话,我每赌一个 1-p 美元,我就赢了你的 p 美元。

根据 FPP,真实概率由三部分组成:

(I)概率陈述适用的可判定陈述 A

(II)风险限额,即根据 A 的概率评估,一个人愿意承担风险的最大金额。

(III)断言 A 变为真的概率 p

学术概率往往不能满足(I),几乎总是不能满足(II)。在当前的学术科学中,( II)中的接触限值被隐含地设置为 0,根据 FPP,这表示对概率评估没有信心,因此对其相关结论没有可信度。为了让科学结论更加可信,科学家们需要提高他们声明的可信度。科学家很可能被自己的分析所说服,并提供了有利于自己的令人信服的论据。但是,除非得到 FPP 的支持,否则这些话所支持的概率毫无意义。

从技术上讲,(III)中的概率 pA 的“较低概率”,在某种意义上,它决定了赌注对**A的几率 p/(1-p) (注意,并没有假设 p 是“公平赌注”的价格,因为提供公平赌注将使概率者面临潜在的毁灭性财富波动,而没有任何潜在的长期收益。FPP 的目的是让概率变得有意义,而不是迫使科学家去赌博或让自己面临毁灭。)如果 pA 概率的合法下界,那么与 A 打赌的隐含赔率 p/(1-p) 从长远来看将对概率者有利。然而,如果 p 过于乐观,隐含的赔率将为损失付出过高代价,导致概率者长期遭受经济损失,并提供反对初始概率评估的证据。

学术概率和复制危机

从本质上来说,复制危机是一种统计和概率危机,是由误用的统计方法、误解的概率和未经检查的不当行为共同造成的。通过将学术概率和它们声称支持的结论混淆为真实的东西,这场危机得以持续。FPP 提供了一种内置机制,迫使统计和概率方法的用户报告更有意义的概率(或者根本不报告概率),而不需要编辑、同行评审员或其他所谓的专家的验证。

要理解实施 FPP 将如何影响科学结论的报告和评估,首先考虑它在博彩业中扮演的角色。众所周知,除了职业优势玩家,赌场游戏对赌徒不利。(脚注:‘优势玩家’是赌胜算对自己有利的赌徒。也许优势游戏最著名的例子是 21 点中的算牌。最近,菲尔·艾维和张·孙茵在玩百家乐时利用一种名为边缘排序的技术赢得了超过 2000 万美元。在 Bob Dancer 和 Richard Munchkin 的“T4 优势赌博”播客中讨论了体育博彩、电动扑克、轮盘赌、掷骰子游戏和其他“无与伦比”的赌场游戏中的优势游戏的其他例子。)重要的是,这些知识来自常识,而不是来自对赌场游戏的正式统计分析(这种分析一般人不具备进行的条件)。显而易见,任何主要赌场提供的赔率都必须有利于赌场,原因很简单:(1)赌场愿意接受其规定赔率的任何赌注,以及(2)赌场是有利可图的业务。

关于特定赌场提供的特定赔率,有人可能会问,我怎么知道在澳大利亚皇冠墨尔本赌场的双骰赌桌上,7 的掷出频率低于 20%。我声称知道这一点,即使我从未参观过墨尔本皇冠,更不用说检查它的骰子,桌子或经销商来确认游戏(或多或少)是公平的。正如上文所强调的,我的知识不是基于理论上的 STAT 101 计算——在两个“公平骰子”的标准模型下,掷出 7 的概率是 16.7%——因为我没有办法评估该计算背后的假设。事实上,在墨尔本皇冠上掷出 7 的准确概率(即频率)可能是 16.7%,或者 18%,或者 14%。我不知道,也不在乎。不管实际频率是多少,我很确定它一定少于 20%。我知道这一点是因为墨尔本皇冠在 7 的一次下注中提供 4 比 1 的赔率(隐含概率为 1/(4+1)=0.20),而墨尔本皇冠仍在营业。不管真实频率是 16.7%,18%,还是 14%,只要低于 20%,赌场长期就赢了,赌徒就输了。

由于 FPP 内置的生存机制——陈述坏概率的赌场要么修改赔率,要么破产——以及对墨尔本皇冠赌场仍在生存(事实上,欣欣向荣)的观察,我可以合理地肯定,其赔率所隐含的概率界限是合法的,而无需了解墨尔本皇冠是如何确定其赔率的,甚至不知道掷骰子的规则。我知道这些都是因为赌场的概率是真实的:如果隐含的赔率太高,赌场就会破产;如果它们太低,那么赌场的顾客就会太少。

如果我们不需要内部信息来确定赌场的赔率给出了游戏结果的有效概率界限,为什么我们需要编辑、副主编和裁判来评估科学家用来计算 P 值、置信区间、贝叶斯因子和其他证据概率度量的方法的可靠性?就像赌场不会提供过于慷慨的赔率来吸引更多的客户(因为他们会很快破产),如果科学家甚至不试图公布被黑掉的或过于乐观的 P 值或其他概率,那不是很好吗,因为这样做会让他们退出科学行业。由于概率的基本原理,这是一个简单的想法和简单的实现。

复制和概率的基本原理

用科学术语来说,骰子的每一次滚动、轮盘的每一次旋转以及 21 点的每一手牌都是对赌场规定赔率的测试,因此也是对这些赔率所隐含的概率的测试。对赌场的每一次下注都是试图伪造赌场的隐含概率声明。赌场持续从这些游戏中获利,而赌徒持续输钱,这一事实可以(也应该)被解释为赔率设置正确的令人信服的证据。(脚注:这里的“正确”是指那些赔率所隐含的概率给出了真实发生概率(即频率)的有效下限。)

就像赌场赔率一样,如果科学结论也得到了真实概率的支持,那么对科学方法的官僚评估将变得没有必要。对给定发现的可靠性(即可复制性)过于乐观的概率会刺激复制尝试;过于保守的概率会低估给定结论的重要性和可靠性。因此,概率的基本原理提出了一种直接而客观的方法来报告结论,并通过在报告结论时列出以下条件来在科学文献中进行复制尝试。

复制协议 1 。描述复制尝试应遵循的协议。

复制标准 1 。说明方案结果被视为成功复制的标准。

复制概率 1 。说明该程序成功复制的可能性。

复制曝光 1 。根据上述 FPP 的第(II)项,陈述这些主张背后的科学家愿意为测试其结论而公开的金额,并将该金额交由第三方保管。

继续其他复制协议、标准和概率 2、3、4 等。如你所愿。

陈述的协议、标准和概率提供了根据 FPP 测试结果的具体基础。这反过来又通过迫使作者、他们的机构(如果有的话)、出版该作品的期刊(如果有的话)以及参与出版决定的任何编辑、副主编和审稿人用真实的东西来支持他们的主张,从而限制了所述的复制概率。(根据领域的不同,每项索赔的担保金可能是 500 美元、5,000 美元、50,000 美元或 500,000 美元。“游戏中的利益”的适当数量应该与开展研究的成本以及相关方从出版物中获得的收益大致成比例。关键是,这种担保应该足够大,以至于作者不愿意为了出版而损失金钱。因此,如果进行这项研究花费了 100 万美元(其中大部分或全部通常是纳税人的钱),那么再贴出 50 万美元来支持这项研究是合理的。如果研究成本只有 1K 美元,那么 500 美元应该足够了。实际上,由商定的第三方执行的复制尝试的至少部分成本应该由该抵押品支付。)

发表后,担保品在固定的审查期(比如 2 年)内被锁定,在此期间,其他科学家可以选择以所述复制概率暗示的赔率赌不复制。重要的是,复制尝试必须发生在怀疑者已经决定赌不复制并且已经把他/她的钱放在第三方托管之后。这种复制尝试应由可信、中立的第三方科学家团队进行,进行复制的费用全部或部分由最初的科学团队和发表声明的期刊资助。希望测试声称的复制概率的科学团队(怀疑论者)将在进行复制尝试时,将他们愿意承担风险的金额放在托管中。在这样做的时候,怀疑者同意原始作者的复制协议和标准中所述的条款,这将启动由商定的中立第三方进行的复制尝试。复制尝试的结果决定了提出主张的科学家(概率学家)和验证主张的科学家(怀疑论者)之间打赌的结果。(脚注:选择此类第三方的确切协议和确保结论的真实性是一个实际问题,与确保当前的同行审查过程得到适当管理的味道非常相似。我不在这里进一步讨论这个问题。)

这一过程会持续到预先指定的审查期限,或者直到托管资金用完。如果托管资金用完,那么作者要么提交更多的担保品,要么将结果存档,并清楚地记录复制尝试的结果以及作者的净资金损益。那些仍然袖手旁观他们的主张的作者可以贴出更多的托管资金来鼓励对他们的结果进行额外的测试,希望能够验证他们最初的发现。审查期结束后,无论结果如何,复制尝试的结果都将与以指定复制概率得出的最终收益/损失记录一起发布。需要注意的是,虽然整个复制过程中的财务收益/损失并不一定表明最初的主张是正确的/错误的,但它们可以被合理地解释为支持/反对最初主张的证据,并且这些证据应该记录在已发表的科学记录中。

在审查期间的任何时候,作者都可以自由地修改他们的概率(向上或向下),并且提供重复研究的几率也将相应地修改。例如,如果最初陈述的 80%的复制概率过于保守(例如,真实的复制概率应该是 90%),则可能很少尝试复制最初的声明,因为复制的几率是不利的。对此,作者可能希望将他们的复制概率增加到 85%,从原作者的角度来看,这有两个好处。首先,它加强了最初的主张——因为作者陈述的概率是真实的,在 FPP 支持的意义上,更高的复制概率使最初的主张更有力。第二,更高的复制概率为任何希望挑战结果的人提供了更好的价格(5.6 比 1,而不是 4 比 1),因此可以吸引更多试图复制/伪造原始结果的活动。反过来,成功的复制使得文章中的说法更加可信。如果作者对 90%真实概率的评估是正确的,从长远来看,这些复制尝试应该会产生额外的研究资金。此外,成功的复制尝试将使作者的发现更加可信。

或者,如果作者确定他们的初始概率过于乐观,他们可以向下调整他们的复制概率,比如从 80%到 70%。无论哪种方式,如果陈述的结论是可靠的,并且概率是校准好的,那么科学家、他们的大学以及好的和精确的科学背后的期刊将因为得出合理的结论而在经济上和学术上得到奖励。如果结论不可靠,那么这些科学家、支持他们的大学以及发表糟糕科学的期刊都将受到惩罚。

这会有什么结果呢?

上述过程利用统计方法的内置校正机制(通过 FPP)来提高基于统计和概率方法的科学主张的可靠性:作者不应陈述过于保守的概率,否则人们对他们的结论兴趣不大,也很少有人试图复制他们的发现;但他们也不应该陈述过于乐观的可能性,否则他们为复制尝试提供了太好的价格,从长远来看,这可能会花费他们的钱。这种经济损失的直接影响是剥夺了发表过于乐观的复制概率的研究人员的研究经费。此外,由于这些结果被记录在结果的最终出版版本中,失败的复制尝试也可能导致失败的索赔中涉及的研究人员的可信度的损失。相反,从复制过程中获得的资金将对最初主张背后的科学家的声誉和财务状况产生相反(积极)的影响。最重要的是,科学文献应该因此变得更准确、更完整。

规定的复制概率应该更加保守

假设它的骰子是公平的,赌场知道滚动 7 的真实赔率是 5 比 1(隐含概率为 16.7%),但它只提供 4 比 1(隐含概率为 20%)。根据上面的复制概率,赌场声称而不是掷出 7 的概率是 80%,尽管理论概率是 83.3%。一家赌场高估了概率,比如说 85%(隐含赔率为 5.6 比 1),结果会遭受财务损失。

以此类推,使用统计方法计算复制概率为 90%的科学家受到激励,在出版物中引用更保守的概率,比如 80%或 85%。这些低估的概率说明了由于模型假设、近似值和科学家无法控制的其他因素而产生的不确定性。科学家公布更高的数字来表达对结果的信心——学术上相当于虚张声势——当他们的虚张声势被叫停时,他们可能会失去作为抵押品的钱。这反过来会对他们所陈述的结论产生负面印象,并剥夺这些科学家未来研究的资源。然而,如果概率过于保守(比如说,25%而不是 80%),那么这一主张就太弱了,不足以引起对复制的足够兴趣,这反过来又削弱了所报道的发现的重要性。

文献中报道的概率会更有意义

即使忽略学术界和现实之间的分歧,目前出现在科学著作中的特定概率也经常被定性地解释。没有机会测试概率或模型假设(根据 FPP),90%或 95%的概率之间几乎没有概念上的差异。这两种可能性都很高,通常会被解释为支持某一主张的证据。但是当受 FPP 约束时,90% (9 比 1 的几率)和 95% (19 比 1 的几率)之间有很大的差异。如果真实概率介于两者之间,比如说 92.5%,那么 90%而不是 95%就是托管资金的正回报和负回报之间的差异,从而使报告的数字概率具有更精确的含义。

复制尝试增加

奖励科学家正确识别过于乐观的已发表的主张,为带头复制尝试提供了激励。除了更清楚地了解已发表的文献,呼吁复制有缺陷的主张的研究人员将获得额外的研究资金。与此形成对比的是,在当前的情况下,许多人哀叹复制尝试太少,因为没有复制其他科学家的成果的激励措施(财政或其他)。

对“正常科学”没有保护

由于目前由负责同行评审期刊的把关人评估科学成果的方式,有一种趋势,即与现状相反的发现会被压制。从学术概率到真实概率,进而从学术概率到真实科学的转变,将消除压制任何提交给科学文献发表的东西的需要。通过以隐含的赔率打赌反对复制,科学机构可以很容易地驳斥基于客观理由的蛮横和虚假的主张。如果当权派是正确的,那么不准确主张背后的科学家将遭受经济损失,而当权派则获得经济收益;反之,如果建立不正确。这样,违背科学范式的有争议的结果不需要像目前的规范那样从文献中过滤掉,而是可以以透明和客观的方式接受审查,当这些新结果被反驳时进一步加强主导范式,当有争议的结果经得起审查时加快进展。

投资更好的科学

一些批评家会叫嚣,科学不是赌博游戏,上述提议的经济激励会腐蚀科学。但是,虽然我在这里使用了打赌的语言进行说明,但该提议更好地被认为是一种投资于好的科学/科学家并从坏的科学/科学家那里撤资的机制,旨在提高已发表科学的整体质量和可靠性。这样的结果将明显改善,而不是破坏科学的现状。它现在的工作方式是,科学家报告固定的概率,并隐含地陈述概率,对传递坏概率、假概率、伪造概率或欺诈概率几乎没有影响。结果就是复制危机。

对于优秀的科学家、优秀的期刊、优秀的编辑和优秀的审稿人来说,这里的提案是对优秀科学的投资。更好的科学家将会得到更多的资源来做更多更好的科学研究。糟糕的科学家将受到损失资源的惩罚,因此他们必须做更少的科学研究,或者将他们的努力重新集中在质量而不是数量上。同样,雇佣优秀科学家的大学和持续发表可靠科学的期刊将获得奖励。那些支持坏科学家的坏科学的人将会受到惩罚。资助机构不应该让大学将数百万美元的纳税人资金作为“间接成本”从拨款中抽走,而应该强制要求这些间接成本的一部分或全部首先投资于在该拨款下进行的科学,作为托管的一部分。审查结束后,托管资金的任何份额都将作为间接成本归大学所有。如果托管资金丢失,那么大学就没有管理费用。间接成本反而流向了科学家所在的机构,他们正确地投资于试图证伪错误结论的努力。因此,资助研究的纳税人将获得更好的投资回报,因为他们的税款将根据结果自动分配给更谨慎、诚实的研究人员,而不是根据拨款小组、编辑委员会或匿名裁判的主观决定。

就激励而言:声望、任期、晋升和金钱的激励不是已经成为科学家行为的一个因素了吗?授予这些奖项的任意方式难道不是科学文献中猖獗的 P-hacking、欺诈和其他可疑研究行为的部分原因吗?事实上,这些社会学因素经常被认为是“以结果为导向”的态度的催化剂,这种态度滋生了复制危机,这里的建议试图纠正这种情况。即使有了 FPP,同样的激励也会存在,但 FPP 通过断言虚假的、粗心的或伪造的概率,使实现这些激励变得更加困难,从而提供了改进。

用真正的概率改革科学

Courtesy of http://lowres.jantoo.com/business-stat-statistician-lie-liar-statistic-01436756_low.jpg

当迪斯雷利提到“谎言、该死的谎言和统计数据”时,他指的是没有 FPP 的统计数据,或者是游戏中没有“T2”皮肤的概率。此处将科学文献中报告的概率与 FPP 合并的建议是一项提案,旨在通过赋予报告的概率真正的意义,从而赋予基于它们的结论真正的意义,来提高科学文献的可靠性,而不会对研究进行的方式施加任何额外的要求、管理工作或其他限制。科学家们将不再受到额外的限制,而是可以自由地进行他们认为合适的研究,而不需要为了取悦裁判或在某个期刊上发表而采用特定的方法。随着这种自由而来的是对报告结果的责任,因为当根据科学家规定的复制协议进行测试时,最终声明的复制概率将不得不依靠其自身的价值。这个系统的设计使得好科学家成功,坏科学家失败,文献中报道的结论总体上更可靠。

当以这种方式实现时,FPP 可以被认为是希波克拉底概率誓言,一个不将自己暴露在同样的下行风险中而不将他人暴露在统计方法的潜在危害中的誓言。那些不愿意承担与他们的方法相关的风险的人不应该用概率来评估他们的结果,就像那些不能忍受看到血的人不适合当医生,下巴虚弱的运动员不适合当拳击手一样。

技术说明:

  1. 的早期版本中,我以“第一概率规则”的名义讨论了 FPP。
  2. 将概率解释为赌注的价格是德·费内蒂、萨维奇等人的“激进主观贝叶斯”(RSB)哲学的基础。作为一种哲学立场的 RSB 和作为一种实践原则的 FPP 之间的区别,就像学术和现实之间的区别一样。RSB 概率仅仅是假设的信任度,仅与博彩有学术联系,而真实概率是实际的博彩商数,通过陈述这些概率的真实结果(潜在的财务损失或收益)来实现。
  3. FPP 通过迫使概率的提供者充当任何希望测试概率评估的人的“房子”,赋予了概率陈述真正的意义。概率学家也可能希望陈述 A 的逆命题的概率(即 A 没有发生),写成- A
    在这种情况下,对-A 的较低概率 p* 提供了对 A 下注的隐含赔率 p/(1-p*)* 。概率 pp* 一起给出了 A-A 的实际概率范围:

p ≤ P(A) ≤ 1-p*
p* ≤ P(-A) ≤ 1-p

如果这些不是适当的间隔,意味着 p+p > 1* ,那么概率者将自己暴露于确定的损失,因为我可以打赌 1-pA 的赔率为 p/(1-p)1-p* 对- Ap/(1-p*)* 。如果 A 发生,那么我赌 A 赢*(1-p)x(p/(1-p))= p*,赌- A1-p* ,总收益为 p-(1-p)=p+p-1 > 0 。如果- A 发生,那么我对- A 的下注赢了*(1-p *)x(p /(1-p ))= p **,对 A 的下注输了 1-p ,总收益为 p-(1-p)=p+p-1 > 0

没有人谈论数据经济的根本问题

原文:https://towardsdatascience.com/the-fundamental-problem-of-the-data-economy-nobody-is-talking-about-d4168ebe9983?source=collection_archive---------12-----------------------

这是数据深度挖掘系列的第 1 部分,重点关注作为资产的数据数据市场以及区块链技术如何让数据经济成为现实。

数据是新的石油

世界上最有价值的资源不再是石油,而是数据。在信息时代,数据推动增长和变革,提高生活质量,为更公平、更高效的社会铺平道路。

例如,在医疗保健领域,数据被用于预测流行病、预防疾病和改善治疗[ 福布斯来源 ]。政府使用数据在最需要的地方实施项目,例如,通过了解应该在哪里建造新学校或开辟新的公交线路。事实上,从气候到人工智能,现代社会的几乎所有领域都将受到更好的数据访问的积极影响[ 世界经济论坛来源 ]。

这也创造了围绕数据的重大经济机会。据估计,2016 年仅欧盟的数据经济价值就接近 3000 亿€,预计到 2020 年将翻一番以上,达到€的 7390 亿[ 欧盟委员会来源。在全球范围内,据估计,更好地访问数据可以帮助释放至少 3-5 万亿美元的全球经济价值[ 麦肯锡 ],这相当于世界生产总值的 2-5%的增长!

数据很难交易

如果数据的价值显而易见,潜力如此巨大,为什么数据革命还没有发生?为什么我们仍然在等待承诺的数据驱动的创新和改变游戏规则的社会变革?

原因很简单。

  • 大多数数据以未提炼(或非结构化)的形式存在,将其转换为结构化数据(软件中使用的格式)并不容易。
  • 数据所有者使用不兼容的数据模型来构建他们的数据,这些数据保存在孤立的孤岛中,尽管经常受到其他人的追捧。
  • 还没有人想出如何有效地定价和交换数据。

简而言之,没有标准或平台可以让数据交换像股票市场那样顺利进行——这很疯狂——因为数据将成为本世纪最有价值的资产。

因此,交易数据是乏味的。它通常如此昂贵、低效且法律上繁琐,以至于组织宁愿完全避免交易数据[Gartner经济学家来源

这是没有人谈论的数据经济的基本问题:

除非我们为数据所有者和收集者创造必要的基础设施和激励机制,使他们的数据可供他人使用,否则我们无法释放数据经济的全部潜力。

创建一个开放的数据市场

从历史上看,连接供给和需求的最佳方式是开放市场。它们提供了基础设施,并通过允许各方自由买卖彼此的资源,为交易创造了激励。

数据的问题在于,为它创建一个开放的市场带来了一系列独特的挑战,因为它是一种无形的非竞争资产,不像今天几乎所有的商业交易。

也就是说,一旦数据被获取,它就可以与另一方免费共享,这在传统的基于稀缺性的资源定价方法中产生了矛盾——以及许多其他问题。

下一篇数据深度探讨文章将探讨新兴的开放数据市场、它们的实际应用,以及为什么区块链是实现开放数据交换所缺少的关键技术。 继续阅读

未来不再是过去的样子…

原文:https://towardsdatascience.com/the-future-aint-what-it-used-to-be-fb38f4dc0419?source=collection_archive---------5-----------------------

这句不朽的话来自约吉·贝拉,一位为纽约扬基队效力的美国棒球运动员。

显然他的意思是,“时代不同了。不一定更好或更坏。就是不一样。”

未来不确定。人类对不确定性有着强烈的厌恶。随着机器学习在各个领域的应用以及流程驱动任务自动化的增加,人们已经有了很多关于其对行业性质的影响的猜测。

“机器的三月让手闲下来”——纽约时报,1928 年

《经济学家》的一篇文章表明,美国 47%的工人从事着潜在自动化的高风险工作。在英国是 35%,日本是 49%。风险最大的行业包括运输和物流、办公支持、销售和服务——几乎所有行业都是如此!

作为一个乐观主义者,我真的等不及被裁员。我生活中自动化程度越高越好。你花在过程驱动的任务上的时间越少,效率就越高。它将释放资源来生产目前不存在的产品、服务和发明。

思考未来可能会发生什么令人不安,但如果最近的事态发展可以借鉴的话,这可能是相当具有革命性的。几周前,我看了杰夫·贝索斯的年度信,信中谈到了第一天和第二天的公司。有趣的是,看看第一天公司的创始人把他们的个人财富投资在哪里…

聚变能

聚变能 101:

  • 你把氢的两种同位素融合在一起,就会产生氦
  • 氢在海洋中大量存在,副产品氦是一种安全的气体
  • 因为两个氢原子带正电,它们自然会互相排斥,所以你必须以很高的速度把它们扔向对方,这样核力会让它们结合,产生氦气
  • 然后,气体必须被加热到 1.5 亿摄氏度,产生等离子体,并保持在磁场中
  • 扔进几个微波和另外几个反应,你最终会得到类似太阳产生的能量
  • 这一切都在这个 15 分钟的对话中解释

目前有两种方法。

国际热核实验反应堆(ITER)

  • 目前正在进行的最大的科学项目
  • 投资 200 亿美元在这个项目上,主要目的是在地球上创造一个人造太阳
  • 如果成功,将与人类登月和 DNA 测序齐名

一般融合

  • 贝佐斯的探险为公司注入了一部分资本
  • 该公司正在使用聚变技术以低成本创造大量的清洁能源
  • 我发明了一种类似于巨型柴油发动机的机器,它使用大活塞来产生压缩和热量,除非它们从中获得聚变能
  • 预计聚变能源将于 2040-2050 年可用

行星资源

投资者:拉里·佩奇(谷歌联合创始人)、理查德·布兰森、罗斯·佩罗

短游戏

目前正在开发的开采小行星的技术可以降低在太空通信、观察和操纵的成本,从而提高地球上的资源效率

漫长的游戏

开发技术,勘探和开采近地小行星的材料

新贸易路线:小行星将开启太阳系经济

  • 自从登上月球,人类就被困在地球重力井的底部
  • 这个想法是从太空获取燃料到达火星
  • 火箭依靠小行星上丰富的氢和氧运行效率最高

下一次淘金热:开采小行星

  • 我们已经在加拿大开采了丰富的矿体,其起源可以追溯到小行星撞击
  • 从小行星上收获的铂族金属在小行星上的浓度要高得多
  • 一颗 500 米宽的富含铂的小行星含有的铂是世界年产量的 174 倍,是已知铂族金属储量的 1.5 倍

我们以前见过类似的基础设施扩张。在工业革命期间,随着制造业从家庭转移到工厂,我们创建了主要的城市中心。原材料和资源来自遥远的地方来创造成品。运输系统随着铁路工业的出现而发展。适应处理这些新项目规模的通信、银行和金融机制。随着我们的基础设施扩展到太空,我们将看到类似的演变。我们将建造轨道城市和重型制造设备,由来自小行星的原材料供应。数百万人最终将在太空生活和工作。–James or sulak,行星资源公司

读心术

投资者:脸书和埃隆·马斯克

脸书正在研究一种非侵入性系统,它可以让你用脑电波一分钟打 100 个字。马克·扎克伯格相信这项技术“会让你只用大脑交流”。

Bob McDonald 与 Jack Gallant 博士就怪癖夸克进行了一次有趣的采访,讨论了我们目前在读心术方面的情况以及前所未有的进入大脑所产生的问题。

机器离读懂我们的思想有多近?

  • 如果我们知道有人在想一只狗,那么我们就可以测量与想狗相关的活动模式
  • 随着时间的推移,你可以建立一个字典,在可以测量的大脑活动模式和其他类型的想法之间进行转换

词典目前有多丰富?

  • 如果一个人在看电影,你可以通过大脑活动大致了解他们在看什么
  • 它会告诉你屏幕有多亮,颜色和阴影
  • 但无法破译大部分细节

你能接触到我们不知道的想法吗?

  • 可以获取的第一类信息是大脑中正在发生的想法
  • 你可能破译的第二类是潜意识思想
  • 第三类是潜在的长期记忆,它们被锁在大脑突触深处,此时无法进入

随着技术发展成为商业接口,最大的担忧是什么?

  • 众所周知,人类不善于保护自己的隐私
  • 最终,这项技术将能够解码任何活跃的大脑工作空间
  • 它将打开先前私有的无意识和有意识的大脑空间
  • 它将使你能够去到一个外国,让你的思想被解码,然后用当地的语言说出来
  • 这将引发这样的问题:谁控制着这个设备,一旦它离开你的大脑,这些信息会发生什么

但是我们仍然没有那个悬浮滑板…

很快我们将拥有制造人造太阳、开采小行星和读心术的技术,但我们不能发明马蒂·小飞侠在《回到未来》中的悬浮滑板?未来听起来没有我最初想的那么令人兴奋…

人工智能的未来:重新定义我们如何想象

原文:https://towardsdatascience.com/the-future-of-ai-redefining-how-we-imagine-596d5747da2e?source=collection_archive---------7-----------------------

原文贴在 FICO 博客

展望未来 20 年,我认为我们将远远超越人工智能迄今带来的生产力提升。随着人工智能的出现,我们将看到我们个人生活以及整个社会的复兴。

卫生保健

今天,我们的设备能够监测我们走的步数、心跳速率以及汗水含量。所有这些丰富的信息使得一个由医生、工程师和分析师组成的团队能够监测我们的健康状况,并保持我们的最佳表现。同样,随着基因组测序和神经图谱方面的创新通过 FDA 试验,我们将很快看到个性化医疗领域的巨大飞跃。人工智能将帮助我们了解个体的生理需求,以便提出定制的处方,提高我们的整体健康标准。

认知能力

人们热衷于提高认知。谁不想更好地记住名字和面孔,更快地理解困难的抽象概念,更好地“发现联系”呢?谁会严重反对能够在更深层次上欣赏音乐呢?

最佳认知功能的价值是如此明显,以至于没有必要详细阐述这一点。今天,我们通过艺术、电影、音乐、博客和各种社交媒体应用来表达自己。在图像识别领域,AI 已经可以通过观察远远超过 RGB 的东西,比我们“看”得更好。虚拟现实让我们感觉自己仿佛被传送到了另一个世界。为了让我们更好地体验我们周围的世界,数据可视化和降维算法的新习惯用法一直在不断产生。

我们一直在努力增强我们的五感,以超越人类的极限。10 年后,这些创新加上物联网设备将成为我们的延伸,帮助我们更深刻地体验我们的周围环境。

情商

正如我们增强了我们的五种认知感官一样,我们也增强了表达自己和理解周围人的能力。

很多时候,我们甚至不知道自己想要什么。我们努力以一种特定的方式与周围的人联系,或者消费一种特定的产品,只是为了能感受到一种无法描述的独特情感。我们感受到的不仅仅是快乐、悲伤、愤怒、焦虑或恐惧。我们的情绪是上述所有因素的复杂组合。

随着神经绘图的创新,我们将更好地了解我们作为人类是谁,并更好地了解我们可以达到的无数种情绪状态。随着我们对脑电波进行无监督学习,并帮助找到提高情商的创新方法,我们复杂的情绪模式将得到更好的理解。这包括理解我们自己的情绪和对我们周围的人更加敏感。

或许我们可以解开从未体验过的新情绪。在合适的人手里,人工智能可以作为我们的延伸,帮助我们与生活中我们重视的人建立有意义的联系。

经验和想象力

人工智能对我们的经验和想象力的影响将来自更好的认知能力和情商的聚合。人工智能的最新创新可能会帮助我们解锁新的认知体验和情绪状态。

让我们想象一下,我们今天的体验模式是在空间 x 中呈现的。10 年后,让我们说,体验模式是在空间 Y 中呈现的。空间 Y 将比空间 x 大得多。这个 Y 的未来空间可能会接触到除了我们传统的快乐、悲伤和疯狂之外的新类型的情感。这个新的 Y 空间甚至可以让我们更准确地理解反映我们想要表达的抽象思想。

这个新的 Y 空间实际上可以打开一个新的可能性世界,它超出了我们目前的想象。未来的人们将以比我们今天更丰富的程度来思考、感受和体验这个世界。

沟通

10 年前,我们的大部分交流仅限于电话和电子邮件。今天,我们可以参加视频会议,虚拟现实和社交媒体上的各种应用程序。随着我们认知能力和情商的提高,我们可以通过分辨率更高、抽象程度更低的习语来表达自己。

我们已经有佛罗里达大学的学生实现了只用意念控制无人机。我们甚至可以使用振动游戏机,利用我们的触觉使马里奥赛车游戏更加逼真。10 年后,我们相互交流的方式将比今天更深入,更具表现力。如果我们有足够的希望,我们甚至可能瞥见*《星球大战》的全息图和《x 战警》*的心灵感应通信。

今天的虚拟现实只会限制我们的视觉和听觉。在未来,虚拟现实可能真的允许我们去闻、尝和触摸我们的虚拟环境。除了访问我们的 5 种感官,我们对某些情况的情绪反应可能会通过人工智能的力量进行微调和优化。这可能意味着分享我们的主要角色对超自然活动的恐惧,感受 T2 艾玛的心碎,或者对口袋妖怪的冒险感到兴奋。当我们探索智能虚拟现实控制台的戏剧艺术时,所有这些都是可能的。

信息安全

人工智能允许我们以更高速度挖掘更多的非结构化数据,以产生有价值的洞察力。然而,这些非常敏感的数据落入坏人之手的风险也会增加。

今天,网络安全是每个人心中的一个主要问题。事实上,2017 年是指纹被黑的一年。在人工智能的帮助下,信息技术将变得更加复杂,以保护我们生活中珍惜的东西。

这是人类的天性,想要超越我们的极限,变得更加强大。每个人都希望健康长寿,体验更生动,感受更深刻。技术只是实现这一目标的手段。

数据科学的未来

原文:https://towardsdatascience.com/the-future-of-data-science-14653afb52f5?source=collection_archive---------11-----------------------

Copyright: Warakorn — Fotolia

影响数据科学未来的三个关键趋势,以及如何利用即将到来的机遇

那是晚上 8 点左右,我买了一些杂货,正开车回家。当我开车进入一个灯光昏暗的横截面时,我几乎没有注意到闪光,然后我感觉到了一个猛烈的冲击,当时另一名司机失去了对他的汽车的控制,撞上了我。幸运的是,损坏只发生在车辆上。接下来发生的事情,纯粹是未来的事情。

我没有提交车祸保险索赔的常规文件,而是拿出我的保险应用程序,选择了车祸菜单。然后,我被问了几个问题,并按照指示,其中包括采取了一些照片。当我完成时,应用程序通知我道路救援正在路上,事故已经被报告。

第二天,我接到保险公司的电话。他们告诉我,在审查了我的索赔数据、我车内摄像头的视频片段以及无数其他传感器的数据后,他们处理索赔的机器学习算法很快验证了我对事件的叙述。

他们正在向对方的保险公司索赔。此外,在接下来的几天内,我将能够在他们合作伙伴的汽车店里取车。

虽然这只是一个故事,但让这一切发生的技术,以及更多的东西,就在眼前。分析的应用和使用机器学习工具来释放数据价值(也称为数据科学)正在增长,我们才刚刚开始触及表面。

不断增长的数据量、改进的机器学习算法和更好的计算资源这三个相互交织的趋势正在以令人兴奋的方式塑造数据科学领域。本文将关注这些趋势的当前发展和未来,它们的影响以及如何准备。

数据爆炸

自我们的数字时代开始以来,我们目睹的数据指数增长预计不会很快放缓。事实上,我们可能只是看到了冰山一角。未来几年将会产生越来越多的数据洪流。新数据将作为我们数据科学模型的火箭燃料,产生更好的模型以及新的和创新的用例。

物联网的发展——IoT

一个明显的来源是物联网。目前,全球约有 70 亿台联网物联网设备,预计 7 年后这一数字将增至 215 亿台。不仅有更多的设备上线,而且随着硬件的改进,它们提供的数据类型将更加丰富和多样化。物联网数据的最大生成者预计是航空业、采矿业和汽车业。

社会化媒体

社交媒体是另一个巨大的数据来源。2012 年 5 月,我们每分钟向 YouTube 上传大约 72 小时的视频。五年后,这个数字飙升至每分钟 400 小时,相当于每天 65 年的视频。脸书是另一个巨大的数据生成器,截至 2017 年,每月用户超过 20 亿,每分钟产生超过 400 万个赞。

除了上述数据源,我们还有博客、娱乐、支付交易、监控数据、电信数据和金融数据。该列表绝非详尽无遗,随着数字化进程的推进,以及公司发现需要收集更多客户信息,数据来源将继续增长。

这种数据增长趋势的影响是不可低估的。我们可以访问的数据越多,不仅会提高我们机器学习模型的精确度和准确性,还会增加它们可以应用的可能领域,从而推动对数据科学的需求。

所有这些数据只是一种喂给机器的方式——真的!如果不是有越来越多的可用训练数据,我们的许多机器学习模型都不可能取得如此大的进步。这让我们看到了下一个关键趋势。机器学习算法效率的指数增长。

机器的崛起

机器学习算法,尤其是深度学习的子领域,在过去几年中发展迅速。此外,机器学习软件的开发也在紧张进行。这提高了算法的质量,使工具更容易使用,降低了有抱负的数据科学家的准入门槛。由于对机器学习工具的强烈依赖,该领域的进展直接影响数据科学的有用性和能力。

什么是机器学习?

我们可以将机器学习算法视为能够基于我们输入的数据产生某种输出的软件,最重要的是,这种软件使计算机能够在没有显式编程的情况下进行学习。

通常,这是通过向算法提供大量示例来实现的,它会从中学习。这与专家系统形成对比,在专家系统中,所有的逻辑都由程序员编码到算法中。在过去的 5-10 年里,机器学习中最令人兴奋的子领域之一是深度学习。

深度学习算法基本上只是许多接受数据的输入节点,然后这些数据被馈入其他节点,最后到达一个输出层。由于它们与大脑的工作方式相似,深度学习算法被称为神经网络。我们不会深入研究这些网络的细节,因为这超出了本文的范围,但可以说它们的发展是机器学习中一些重大突破的背后。

AlphaGo

深度学习成功的一个显著例子是 AlphaGo,这是一种有两个玩家的战略游戏,被认为比计算机更难学习,甚至比国际象棋更难。

2014 年,DeepMind 公司启动了研究项目 alpha Go——其使命是击败人类围棋选手。一年后,AlphaGo 击败了欧洲围棋冠军范辉,2016 年 3 月 AlphaGo 与世界上最好的棋手之一 Lee Sedol 对弈。AlphaGo 赢了 5 场比赛中的 4 场。该程序的更新版本被创造出来,AlphaGo Zero 在与它的前身 AlphaGo 的 100 场比赛中赢了 100 场——完全统治了任何人类对手。

机器视觉领域令人印象深刻的进步也是由深度学习推动的。在机器视觉领域,我们现在能够创造出比人类更好地对一些图片进行分类的算法。

我们也能够给出照片内容的摘要。用不了多久,这些算法就可以“观看”视频并学习其内容,这有可能颠覆几个行业。

我们可以使用常规搜索来搜索数百万小时的视频。可以通过直接查询闭路电视录像来进行监控。

在自然语言处理方面,我们也取得了巨大的进步。手写识别与人类水平的技能相当,情感分析在过去几年中有了很大的改进,我们总结书面文本的能力也有所提高。

这些例子中的许多都强调了机器学习算法与人类不相上下或者比人类更好的情况。在接下来的几年里,我们将继续开发超人机器。

算法和我们的主要区别在于它们的指数级改进率。没有迹象表明这种趋势会停止。相反,预计将呈指数级增长。

更好、更易于使用的算法将通过改善我们当前的模型来积极影响数据科学,并将使机器学习模型能够用于以前为人类保留的任务。能够在业务流程中使用和应用这些算法的公司,很可能会比竞争对手拥有强大的比较优势。

心不在焉

我们的计算能力随着我们的机器学习算法和不断增加的数据量而发展。我们正在创造越来越强大的计算机,能够存储越来越多的数据,并以前所未有的速度处理这些数据。

对于神经网络,我们已经从 CPU 转向 TPU,云服务提供商也在不断改进他们的服务——所有主要的参与者都提供机器学习即服务,MLaaS。

计算能力的提高和资源访问的简化是数据科学领域的强大推动力。

从 CPU 到 TPU

多年来,我们一直使用 CPU 来训练我们的神经网络。这花费了大量时间,并限制了我们可以建立的潜在模型。2007 年有了突破,GPU 最大的厂商 Nvidia 发布了 CUDA 编程平台。

这使得应用程序开发人员能够利用 GPU 的通用并行处理能力,几年后,GPU 开始彻底改变我们的神经网络。快进到 2017 年,谷歌发布了 TPU,或张量处理单元。这种设备在训练许多神经网络方面甚至比 GPU 更快,随着 GPU 在过去几年中不断改进,TPU 也可能会继续改进。

所有主要的云提供商现在都提供构建和部署机器学习模型的环境。他们的产品范围从基于 TensorFlow 项目的谷歌云机器学习引擎到微软 Azure 机器学习工作室及其 Cortana 智能画廊。随着这些产品的改进,使用机器学习工具所需的技能可能会减少,从而有助于降低使用数据科学的门槛。

数据科学码头工人

在开发方面,我们开始看到越来越多的项目使用 Docker 进行数据科学开发。Docker 是一款用于虚拟化计算环境的工具。将它用于数据科学使得扩展和部署机器算法变得更加容易。

首先,它很容易设置,因为您可以从 Docker 文件构建 Docker 映像,这些映像可以专门定制以满足您的机器学习项目的需求。此外,Docker 实例可以很容易地部署到云中,并按需运行。这使得数据科学可能比以前更加敏捷。

最后,终端设备也变得越来越智能和小巧。端点设备是指位于网络边缘的设备。例如电话或其他类型的物联网设备。2007 年发布的第一代 Iphone 拥有 412 MHz 的 CPU 和 128 MB 的内存。最新的 Iphone XS Max 现在拥有令人印象深刻的 6 核处理器,两个 2.5 GHz 的 Vortex 处理器和四个 1.59 GHz 的 Tempest 处理器,以及 4 GB 的 ram。

当然,芯片制造商正在取得的许多进步将会扩展到其他设备上,提高它们的性能,降低它们的成本。这一切都增加了我们可以从物联网设备中预期的数据量和数据类型,这些数据可能再次被用于推动数以千计的机器学习算法在云上运行。

那么这有什么关系呢?

在这一点上,你可能会问自己,为什么这是相关的?嗯,即使计算领域的趋势有一半以目前的速度继续发展,也仍然会对数据科学产生巨大的影响。制作模型、将它们部署到生产环境中以及将它们集成到业务流程中变得更加容易。

鉴于许多最近的发展和持续的趋势,我们可能刚刚开始触及数据科学为我们提供的皮毛。但是,我们应该如何为这些关键趋势做准备,我们可以做些什么来增加从中创造成功商业模式的机会呢?这就把我们带到了下一个话题。

如何为数据科学的未来做准备

公司可以也应该以多种方式为数据科学的未来做准备。其中包括创建一种使用机器学习模型及其输出的文化,标准化和数字化流程,尝试云基础架构解决方案,对数据科学项目采用敏捷方法,以及创建专门的数据科学部门。能够执行这些要点将增加在高度数字化的世界中取得成功的可能性。

数据科学部门

在之前的工作中,我是一家保险公司的数据科学家。他们做出的明智之举之一是创建一个跨公司垂直行业的分析部门。

这使得我们更容易在各种数据集上重用我们的技能和模型。这也是对公司其他人的一个信号,表明我们关注数据科学,这是一个优先考虑的问题。如果一家公司有一定的规模,创建一个专门的数据科学部门绝对是正确的举措。

标准化

流程的标准化也很重要。这将使这些流程更容易数字化,甚至在未来实现自动化。自动化是增长的关键驱动力,使其更容易扩展。一个额外的好处是,从自动化流程中收集的数据通常比从手动流程中收集的数据少得多,也不容易出错。由于数据科学模型的一个重要使能因素是获得良好的数据,这将有助于使模型变得更好。

采用数据科学

公司还应该有一种采用机器学习算法的文化,并将它们的输出用于商业决策。当然,这往往说起来容易做起来难,因为许多员工可能担心算法会让他们过时。

因此,重点关注员工如何利用他们现有的技能和算法来做出更高层次和战术性的商业决策至关重要,因为这种人机结合很可能是许多职业的未来。可能还需要几年时间,机器学习算法才能在开放的世界环境中独自导航并做出超人的决策,这意味着由于机器的崛起而导致的大规模失业在不久的将来不太可能发生。

总是实验

随着新数据从物联网来源生成,探索新数据集并了解如何使用它们来增强现有模型非常重要。有源源不断的新数据等待被发现。

也许将一个模糊数据集中的两个新变量包含到您的模型中会将潜在客户生成模型的精度提高 5%,但也可能不会。关键是要不断尝试,不要害怕失败。像所有其他的科学调查一样,失败的尝试比比皆是,胜利者是那些坚持尝试的人。

创造一个促进实验的环境,并尝试对现有的业务流程进行增量改进。这将使数据科学家更容易引入新模型,并将重点放在较小的改进上,这比更大的宏伟愿景风险小得多。请记住,数据科学仍然很像软件开发,项目越复杂,失败的可能性就越大。

尝试构建一个应用程序,您的客户或供应商可以使用它来与您的服务进行交互。这将使收集相关数据变得更加容易。建立激励机制,促进应用程序的使用,从而增加生成的数据量。同样重要的是,应用程序的 UX 要有吸引力,并促进使用。

我们可能需要走出舒适区,迎接数字黄金带来的机遇和挑战。随着数据量的持续增长,机器学习算法变得更智能,我们的计算能力提高,我们将需要适应。希望通过创建一个使用数据科学的强大环境,您的公司将为未来做好更充分的准备。

如果您喜欢这篇文章,并希望看到我的更多内容,或者希望使用我的服务,请随时通过 LinkedIn 联系我,地址是https://www.linkedin.com/in/hans-christian-ekne-1760a259/,或者访问我在https://ekneconsulting.com/的网页,查看我提供的一些服务。如有任何其他问题或意见,请发邮件至 hce@ekneconsulting.comT4。

感谢阅读!

数据可视化的未来

原文:https://towardsdatascience.com/the-future-of-data-visualization-2f976b90b93d?source=collection_archive---------10-----------------------

数据改变了我们对世界得出结论的方式,数据可视化帮助我们更好地理解数据。

数据可视化——正如我所观察到的——由于三大领域的发展而发生了变化。用流代替静态数据,改变上下文和更好的数据处理和设计工具。这将深刻改变数据可视化对我们未来生活的影响。

新上下文

潘多拉是希腊神话中众神创造的第一个人。作为一个概念,这很重要,因为潘多拉是我们渴望成为的人的隐喻。她是我们自己的代表,她是我们想要成为的样子。非常像在场的社交媒体中的数字化身。在脸书,我们不分享我们最糟糕的时刻或弱点,我们炫耀我们的成就,只上传我们最好的照片。我们创造更好的自我版本,比如数字潘多拉。

Data visualization of related topics and users on Twitter

我去谷歌和其他社交媒体平台下载了所有我能找到的关于我自己的个人数据。1.2GB 的下载数据之后,我可以自信地说,这是惊人的准确,但也有些不完整。虽然,这比我预期的要多。

将来这种情况会改变。目前,我们正以指数级的速度每年创建 28 万亿字节的数据,因此很容易预测,将会有更多关于我的数据,事实上是关于我们所有人的数据,从而创建一个关于我们是谁的更完整的图像。不仅如此,还包括我们在过去任何特定时间的身份和位置。有一天,我的数字化身可能没有潘多拉漂亮,但比我们任何人希望的都要准确。

不仅人的数据将更容易获得,而且任何东西的数据都可以获得,比如我们的汽车,当然还有我们的家。通过数据流互连的所有设备将帮助我们提高安全性,提高运营效率,并更好地了解消费者需求。

不断增长的数据雪崩

由于我们收集的数据量惊人,以及我们用来收集数据的传感器,基于流的 API 变得越来越普遍。

Data visualization for a conceptual car dashboard of the future

我们收集的数据中只有很小一部分应该放在数据库中。其中大部分是由发出事件的系统收集的,比如电动汽车的电池电量。这些数据以数据流的形式出现,并被高效地交付给那些可能想要使用它们的人。在传感器和消费者之间放置一个数据库将成为不必要的奢侈品。没有明确目的地囤积数据代价高昂。

使用数据流改变了我们对世界得出结论的方式。这意味着每一个新的数据点都会立即影响我们对世界的理解。

图表插入到实时数据流中。消息更快地传遍市场。阅读每篇文章所用的时间更少,而生成数据甚至新闻的自动化程度更高。

Data visualization of TensorFlow experiment called T-SNE by Google

你所需要交流的只是一种情绪,让一个算法来拾取你的故事并对其进行分类。例如,当马斯克在 Twitter 上宣布他正在考虑将特斯拉私有化时,市场的反应非常迅速。

然而,对于算法来说,从图表和动画视频等非结构化数据中获取情感几乎是不可能的。图表和动画总是为人类消费而创造的。

不再是了。彭博创造了一个名为散射行动的系统。它可以沿着一个轴读取每个像素,以揭示产生每个点的信息。

Data visualization reversed: From chart to data with Scatteract by Bloomberg

该系统使用光学字符识别(OCR)和深度学习技术从图表的图像中提取数字数据点,然后将结果转换为表格。这是有史以来第一次数据可视化被逆转。现在我们可以从视觉再回到数据,而不是从数据到视觉。

尽管 Scatteract 还很粗糙,但这些工具的改进只是时间问题,在未来,数据可视化对于算法来说将是完全清晰的。

塑造未来的工具

在谷歌、苹果和宝马的许多产品公告中,越来越多的数据将通过增强现实或投影覆盖在我们的物理环境中。这意味着不仅数据将更加可视化,而且我们周围的视觉现实也将转化为数据。

Data visualization of a new AR wind shield by Apple

到 2020 年,70%的新车将搭载某种形式的 AR 技术,就像这个苹果挡风玻璃

智能城市交通管理,如“滴滴出行智能交通大脑”,将允许交通参与者和寻路软件做出更明智的决策。今年,中国城市安装了滴滴智能交通灯,节省了多达四分之一的等待时间。滴滴所有 4.5 亿移动用户的数据都是共享的。包括来自联网汽车和交通管理系统的数据,以创建最佳的交通流量图。

Data visualization of traffic by Didi Smart Transportation Brain

城市交通问题不仅仅是呈现一幅画面。智能交通系统可以预测未来几小时内哪里会发生交通堵塞。它可以预测出租车和公共交通的短缺,并可以重定向其他交通参与者,以最有效地处理即将到来的拥堵。

一个城市变得越聪明,它的数据就越需要被分析和“读取”。数据可视化可以轻松检测数据中的异常、模式和峰值。随着数据可用性的增加,用户对其有用性的期望也在增加。

如果像滴滴这样的新解决方案告诉我们关于新工具的任何事情,那就是人们将对数据的可用性、准确性、有用性以及未来如何可视化有更高的期望。很明显,新工具的趋势是向用户提供更多数据,而不是更少。它们将更容易使用,因此覆盖范围更广,正如我们看到的对 Tableau 和 Power BI 的兴趣越来越大。

Power BI compared to Tableau in Google Trends

在未来,专业人士将比以往任何时候都更需要像记者一样,根据数据做出决策。在“假新闻”时代,新闻故事越来越受到数据的破坏。一个很好的例子是“美国零售业的末日”。

Data visualization of America’s Retail apocalypse by Bloomberg

它描绘了一幅关于美国各地商店倒闭的清晰画面。不仅如此,光是数据就不会那么可怕了。红色和黑色的油漆,它的情感诉求被大量强调。商店的关闭给人以威胁的感觉。

为了对更广泛的受众产生更大的吸引力而呈现的数据,允许通过更多样化的解释进行更广泛的数据审查。

数据可视化不同于纯粹的理性分析,因为它旨在讲述一个故事,以产生情感反应。你可以有理性的证据就在你面前,但是如果你不能想象以前从未存在过的东西,就不可能刺激深远的行动。

算法可以预测,人类可以想象。数据可视化最能激发想象力。

未来的工具将允许更多的方式来分割数据。这一点很重要,因为工具非常有限,很容易陷入重视可衡量的东西的陷阱,而不是衡量有价值的东西。这将允许更准确地描绘我们周围的世界,避免潘多拉风格的虚假未来的烟雾和镜子。

以下是来自莫斯科 BigData 的演讲全文:

智能讲故事的未来

原文:https://towardsdatascience.com/the-future-of-smart-storytelling-be199ac313d0?source=collection_archive---------3-----------------------

我们是讲故事的人。从古代到现代文明,我们在漫长的历史中一直在讲述故事。今天,我们仍然明白,对于任何人来说,故事是最好的交流方式。当我们讲述我们的故事时,我们将我们的想象力、创造力、批判性思维、意识、同理心和理解他人的能力结合起来,以影响、娱乐、激发和团结他人。

多年来,技术改变了我们讲述故事的方式。现代媒体和计算机技术的使用把我们的故事增强成一种几乎超现实的环境,就好像我们就在那里;我们今天的故事充满了动作、冒险、戏剧、悬疑和英雄。

随着我们继续拥抱适应性和认知学习等更新的技术,这种人工智能将如何塑造我们的故事?我们如何应用机器学习不仅增强我们的叙述,还提高我们与正确的人联系的能力?

在当今的现代世界,不是讲故事的问题,而是花时间讲故事的问题。作为一名生活在韩国的外国人,我遇到了一个常用词,不仅在商业中,而且在韩国生活中也是如此——빨리빨리(Pali Pali ),意思是快。我相信这个词同样适用于我们今天的生活。尽可能快地完成它,然后继续做下一件事,尽可能快地做这件事,一遍又一遍,这样似乎永远不会结束。

同样的方法也适用于商业。我们一直在寻找提高生产率的方法。我们的故事讲述现在已经转变为商业世界中的内容创作和信息传递,因为我们接触到我们的受众,说服他们使用我们的产品或解决方案。

那么 AI 如何帮助我们进行内容创作呢?我相信人工智能可以用来帮助增加所有业务线的内容创作叙事。随着组织共享更多信息,无论是关于行业、公司、人员、产品、解决方案还是趋势的信息,内容创作达到了前所未有的高度。公司创建这些内容是为了建立透明度和信任。但是,随着内容创作而来的是同样的挑战,即创作内容。各种营销报告表明,超过 60%的组织在尝试创建内容时不断面临挑战。这就是人工智能发挥作用的地方。如果您可以插入关键内容主题和信息,在几个小时内而不是几天甚至几周内生成叙述、构建故事并交付引人注目的内容,会怎么样?人工智能可以搜索关于该主题的互联网,监控社交媒体以了解趋势和看法,了解行业中广泛和具体的客户挑战,并强调通过关键产品优势或功能解决问题的可用解决方案。随着认知技术提高理解和学习的能力,它们也可以提高我们的生产力,以生成高质量的内容实施,使我们能够专注于业务的战略组成部分。

内容创作问题的另一面是,当我们创作所有这些内容时,许多人认为它们被浪费了,因为它们没有到达正确的受众,或者只是没有与我们的受众联系起来。直到最近,我们还没有合适的工具来了解谁真正对我们的内容感兴趣。我们进行了测试、调查和研究,但即使我们有这些信息,大部分时间也是过时的,太旧了,不能用于当前的使用。

大数据挖掘有助于改变这种心态。我们现在看到实时的大数据分析,为我们提供了更可靠的数据,但有时这仍然不足以了解谁从我们的内容创作中受益。这就是预测分析发挥作用的地方,它不仅使用实时数据来确定品牌认知、用户反馈和当前的关键见解,以正确定位我们面向正确受众的产品;而且使用认知学习来确定最有效的信息传递、媒介和内容信息传递的类型,以吸引他们的功能、情感和理性期望。在这种情况下,认知学习可以根据他们的行为、心理特征、个性、购买习惯和趋势,通过创建像故事一样触动他们的个性化信息,来确定接触他们的最佳方式。这些类型的故事讲述结果将与观众联系起来,并很容易影响他们对产品或解决方案的心态。

随着人工智能增强我们成为更好的故事讲述者的能力,这只是人工智能融入多种科学和商业应用的一个例子。我们与人工智能合作的能力将建立一个更美好的未来,以理解和解决从改善我们的日常生活到探索复杂情况的挑战,从而增强全人类的创新。

汽车工业技术的未来

原文:https://towardsdatascience.com/the-future-of-technology-in-the-automotive-industry-11081c8a1999?source=collection_archive---------1-----------------------

就像手机现在能做的不仅仅是打电话,汽车能做的不仅仅是开车和停车。近年来,汽车行业与主要技术公司携手合作,以提供最先进、最安全和最舒适的汽车。汽车正在成为大型智能设备,具有先进的紧急制动能力、自动驾驶的地图技术、更好的燃油效率以及作为一种运输形式的汽车服务。

在安全方面,汽车正在改善司机和周围其他车辆的生活,减少从 A 点到 B 点的麻烦,并在整个过程中娱乐我们,这样的方式并不缺乏。在未来几年,汽车行业有望取得更大的进步,让我们离更加互联和数字化的环境更近一步。应用程序 Blinker 就是这样一项技术进步,它将控制权还给消费者,让他们可以在智能手机上购买、出售和融资汽车。

这里有四项最具突破性的技术,你可以期待在不久的将来出现在汽车行业。

1)更省油的游乐设施

特斯拉处于节能运动的前沿,发布了一系列电动和混合动力汽车,一次充电可以行驶数百英里。2016 年,全球售出了超过 200 万辆电动汽车,随着更多汽车制造商将电动汽车技术应用到他们的产品中,这一数字预计将在不久的将来上升。大众和通用汽车等公司最近向他们的车队推出了电动汽车,而沃尔沃表示,到 2019 年,他们生产的所有发动机都将配备电动马达。

电动汽车也变得越来越实惠,现代、起亚和丰田等公司推出了 3 万美元以下的混合动力汽车,这表明投资燃油效率可能很快会在全球范围内被广泛采用。预计到 2030 年,美国 20%至 25%的汽车销售将是电动汽车,而这一数字在中国预计将达到 35%。

2)预测车辆技术

随着预测能力在汽车中变得越来越普遍,个性化的驾驶体验,人工智能(AI)和机器学习(ML) 在汽车行业的未来具有重要作用。越来越多的制造商正在应用使用数据来自动设置车辆过程的算法,包括汽车的信息娱乐系统及其应用程序偏好。车辆正在成为物联网设备,可以连接到智能手机并接受语音命令,改变用户界面。

预测车辆技术也可以以汽车内传感器的形式使用,通知车主车辆是否需要机械师维修。根据您汽车的里程和状况,该技术将能够评估其性能,实时安排预约,并通知用户与因公司召回而发生故障的汽车相关的任何安全隐患。

3)自动驾驶技术

自动驾驶技术已经取得了很大进展,尽管一些公司已经在开放道路上测试他们的自动驾驶功能,但我们距离广泛采用这些汽车还有很长的路要走。许多汽车已经具备了驾驶辅助技术形式的半自动驾驶能力。其中包括自动制动传感器、高速公路车道传感器、监控盲点的地图技术、汽车前后的摄像头、自适应巡航控制和自动泊车功能。

谷歌最近发布了自动驾驶 pod Waymo,而 Local Motors 也发布了一款全自动驾驶汽车。福特希望到 2021 年能有自动驾驶汽车上路。

4)汽车即服务(CaaS)

汽车即服务(CaaS)是指即将推出的汽车租赁服务,它允许城市司机参与拼车服务。智能设备所有者可以通过一个应用程序叫一辆无人驾驶技术的汽车,该应用程序会根据他们的运输或送货需求来接他们。这项技术的伟大之处在于,不需要驾照就可以进入其中一辆车,充当无人驾驶优步。

IHS Automotive 预测,无人驾驶 CaaS 即将出现,预计将在 2025 年前推出。这种技术有助于降低移动服务成本,同时也为人类司机提供了更安全的替代方案。

底线…

科技行业的一些最伟大的头脑已经与汽车公司联手,以改善我们的车辆运行方式。随着越来越多的公司设计电动汽车,电动汽车技术的兴起有助于在不破产的情况下减少碳排放。

大数据和人工智能在车辆定制方面也发挥着重要作用,通知车主他们的车辆何时需要维护。此外,自动驾驶汽车的兴起和 CaaS 作为移动服务的潜力将极大地节省消费者,同时也增加了他们的安全性。

商业智能可视化的未来

原文:https://towardsdatascience.com/the-future-of-visualization-for-business-intelligence-98a19b6e2b32?source=collection_archive---------9-----------------------

BI 应用程序可视化的未来可能根本不是可视化。

大多数公司已经创建了复杂的商业智能系统,包括基于主题和角色的仪表板。理论上,这种可视化可以为公司的高管提供公司过去、现在和未来的快照。但高管们很少打开这些仪表盘。即使他们这样做,他们也很少能超越对更早时期的事后分析。

高管面临的挑战是知道要寻找什么。现代 BI 系统允许以不同的维度和粒度对数据进行切片和切块。所以,一个勤奋的主管应该着眼于所有可能的组合,以了解组织的真实情况。这项任务即使不是不可能完成,也是很困难的。

未来

未来将会不同。未来的主管不会看仪表板,而是希望将摘要推给她。第二,她不会通过切割来发现洞见,而是会向系统询问更多信息。这个未来的第一部分就快到了。 Tableau 和 PowerBI 已经在仪表盘上设置了人工智能驱动的警报。这些智能警报将被推送给高管。

分析是事情会发生巨大变化的地方。主管不会使用 BI 系统中可用的切片和切块选项。他们将使用自然语言与系统进行交流,并更深入地挖掘数据以确定根本原因。

这种趋势的一个很好的例子是麻省理工学院概率计算项目。

假设首席营销官(CMO)想要确定具有类似业绩的地区。这个问题可以用两种不同的方法来解决。第一个想法是使用 BI 工具和领域专家来定义“相似性”,然后创建一个派生的 KPI,称为相似性。然后,每个区域的相似性得分(相对于其他区域的 w.r.t)可以显示为热图,CMO 可以解释相似区域。

第二个想法是使用机器学习技术。在这种情况下,该问题将引发使用统计方法的区域分析。数据科学家可能会使用异常值检测、归一化和聚类等技术来得出表现类似的区域组。

在数据分析的概率编程世界中,许多这样的任务将自动完成。CMO 字面上问相似性问题,并使用一个 SQL 等价调用 BQL。并且背景中的概率程序对数据建模并使用模拟技术来识别相似的区域。麻省理工团队关于这个主题的一篇优秀论文可以在这里找到。

麻省理工学院的一个团队正在解决使用概率编程进行更智能搜索的问题。SalesForce 的爱因斯坦团队正在使用一种更直接的方法。在一年前的一篇论文中,描述了 SQL 序列——一种用于将自然语言问题翻译成相应 SQL 查询的深度神经网络。

A scheme to implement Seq2SQL (photo from — https://arxiv.org/pdf/1709.00103.pdf)

这些方法是未来事物的范例。想象一下这样一个世界,Alexa 告诉 CMO“公司的整体表现非常好。但一些地区比其他地区做得更好。”CMO 问 Alexa“哪些地区有类似的表现?”。Alexa 将这个句子转换成 BQL 或 SQL (MIT 或 Salesforce)。一旦查询被执行,Alexa 就会用自然语言回放结果。此时(之前不止一次),CMO 可能会要求将相关图表通过电子邮件发送给她的团队。

也许在未来,仪表板不是高管们获取信息的首选。

工作的未来是现在:人工智能帮助求职者找到、获得和保持梦想中的工作

原文:https://towardsdatascience.com/the-future-of-work-is-now-ai-helps-job-hunters-find-land-keep-dream-jobs-b58a3a247c34?source=collection_archive---------3-----------------------

刚从商学院毕业,劳拉就开始建立关系网,并在适当的时候附上一份简历。反过来,她接到了一家商务旅行社的电话,这家旅行社对她的才华非常感兴趣。劳拉接受了面试,她穿着一套新西装,手里拿着一份精心制作的相关简历,提前 30 分钟到场,准备给人留下最好的印象。

等了一个小时后,一名助理把她带进了首席执行官的办公室,在那里,她被反复训练她来自哪里,她的父母是否大学毕业,他们是否患有任何精神疾病,他们以什么为生(“只是为了确保她是专业人士”),她是否已婚或有孩子,以及她将如何吸引劳拉知道对商务旅行丝毫不感兴趣的潜在客户。在采访结束时,这位首席执行官尴尬地透露,他不关心自己即将退休后公司会发生什么。礼貌地感谢首席执行官后,劳拉离开了,希望公司里没有人会再打电话给她。遗憾的是,四个月后,她确实收到了回电。

是的,这是一个真实的故事。而且,不幸的是,这样的面试恐怖故事并不少见。

破碎的招聘流程意味着更多的求职时间
《财富》500 强人力资源高级副总裁兼《福布斯》人力资源撰稿人利兹·瑞恩证实,“招聘流程已经破碎了 20 年,但其下放的步伐最近一直在加快。”

而且,即使找到了工作,糟糕的招聘过程也会转化成不太好的就业经历: 65% 的人在被聘用后的 3 个月内就开始寻找下一份工作。

好消息是,求职者现在有了一个准备为他们的利益而战的后起之秀:人工智能。

人工智能为求职者提供更好的长期成功
Ken Lazarus、Marlina Kinnersley、WorkFusion、Scout Exchange、Fortay.ai 和无数人工智能公司正在研究、构建和完善人工智能平台,求职者可以依靠这些平台来改善体验。他们的专业知识和解决方案揭示了人工智能在幕后工作的四种方式,以提供更顺畅、更成功的求职旅程。

  • 人工智能帮助求职者找到适合他们技能的合适职位

在搜索空缺职位、研究公司、为职位准备简历、写求职信、建立关系网以及参加每个职位空缺的几次面试的过程中,求职往往是一项全职工作。尤其是当求职者没有过滤掉那些不太可能符合他们技能的职位的面试时。人工智能使寻找相关就业机会更加有效,因此也更加成功。

肯·拉扎勒斯,Scout Exchange 的首席执行官,一个为创业品牌和财富 10 强公司服务的人才匹配平台,解释了求职者如何依靠人工智能。他表示,优秀的招聘人员非常了解他们所在的行业,包括完成各自工作所需的技能,以及在主要雇主面前赢得观众所需的人脉。

“如果我在弗吉尼亚州,我想找一份为政府做国防研究和分析的工作,有专门从事这方面工作的招聘人员,获得这份工作的最佳方式是了解他们,”他说。

但是,并不是所有的招聘人员都同样擅长他们的工作。因此,他强调求职者与合适的招聘人员建立关系的重要性。他们可以使用人工智能驱动的侦察交换来衡量参与的招募者。为此,他鼓励求职者向招聘人员询问他们的平台评级。

Scout Exchange 生成一个由人工智能驱动的评级,反映每个招聘人员将候选人与工作匹配的成功程度。糟糕的评级提醒求职者,招聘人员不太可能向他们推荐值得他们付出努力和时间的工作。

  • 人工智能帮助求职者找到完美的工作文化。

组织文化有无穷无尽的变化和怪癖。一个组织可能有随意的沟通规范,但等级森严,而另一个组织有正式的社会规范,但强调团队合作和扁平的组织结构。

同样,求职者对工作环境的偏好也各不相同。他们可能更喜欢创业文化、扁平化组织、强大的社交环境、团队环境,或者独立工作。

为了确保候选人保持参与和致力于他们所提供的工作,人才公司正在依靠人工智能来匹配求职者的组织文化偏好和与之一致的公司。虽然许多人才匹配平台是供雇主使用的,但 Fortay 为求职者提供了一个测试,他们可以通过这个测试来确定他们最有可能在什么样的公司文化中茁壮成长。

一旦完成一项测验,Fortay 的人工智能算法就会开始汇编相关公司的列表。求职者随后会在收件箱中收到一份公司列表,并配有一个按钮,一旦按下,就会引导他们申请这些公司的空缺职位。

  • 人工智能确保招聘偏见不会制造障碍。

研究表明,即使我们无意,人类也会无意识地产生偏见。因此,招聘偏见会给求职者制造障碍。“如果我们假设人们有偏见…那么我们知道无论我们有什么数据集都会有偏见,因为数据集是基于过去发生的人类决策,”Ken Lazarus 解释说。

因此,他说,有经验的数据科学家编程算法,以消除招聘偏见,从而防止算法污染。好消息是,给定一个良好规模的数据集,当数据科学家依靠人工智能时,他们可以减少偏见的影响,以获得更好的未来工作。

例如,Ken 知道男性或女性招聘人员推荐与他们性别相匹配的求职者的几率要高 25%。因此,当一名男性招聘人员推荐四名男性候选人时,Scout Exchange 的数据科学家删除了其中一人,以消除结果中的偏见。然后,他们将这个公式编程到他们的人才匹配算法中,以防止偏见被纳入他们未来的预测中。

一旦被编程到人工智能驱动的算法中,这个公式就可以影响数百万次人才匹配活动。反过来,由于雇主收到的求职者名单不那么有偏见,求职者在他们的行业和主要雇主面前享有公平的代表权。

  • 人工智能有助于将内部员工与发展机会相匹配。

到目前为止,我们已经了解了人工智能如何在幕后帮助求职者求职。但是,即使在候选人被雇用后,AI 仍继续工作,以确保他们保留来之不易的工作,并从中获得成功的职业生涯。

例如,人工智能驱动的智能人群解决方案允许品牌监控员工的表现,以确定员工可以发展新技能的领域。然后,它设计了专门的培训项目,这样员工就能在当前的岗位上取得成功,并有更多的晋升机会。

此外,它还会监控员工,找出他们的优势,然后将工作分配给那些绩效评分最高的人。这意味着人工智能在幕后工作,挑选出最符合可用内部职位的员工,然后将他们推荐给这些职位的经理,以做出晋升决定。

最终,诚实让人工智能能够在求职者旅程的各个阶段与他们同行。 劳拉痛苦地认识到接受每一次面试都可能是一个错误。不相关的技能组合、不一致的文化偏好、招聘偏见和不良的在职成功倾向会导致可怕的面试和更糟糕的工作经历。

但是,人工智能显然让求职者的旅程变得更容易。此外,还有更多好消息:从现在开始,情况只会越来越好。不断增长的数据集和持续的人工智能学习意味着像 WorkFusion,Fortay 和 Scout Exchange 这样的人工智能平台只会变得更加智能和高效。

肯·拉扎勒斯说,求职者利用人工智能现在和未来所能提供的一切的诀窍是诚实。确保简历准确符合工作表现和技能。这样做,你就输入了人工智能数据集,为所有求职者在就业旅程的所有阶段提供了更光明的未来。

posted @ 2024-10-13 15:16  绝不原创的飞龙  阅读(8)  评论(0编辑  收藏  举报