TowardsDataScience 博客中文翻译 2019(八十三)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

黑盒及其入侵

原文:https://towardsdatascience.com/black-boxes-and-their-intrusion-620aa3c4c56b?source=collection_archive---------22-----------------------

到目前为止,人工智能领域已经成功地扩展到各个领域,并提供了前所未有的惊人支持和成果。但是,在每个英雄的故事中,都有一个对手。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Black Box visual

黑匣子:在科学、计算和工程中, 黑匣子 是一种设备、系统或对象,可以根据其输入和输出来查看,而无需了解其内部工作情况。它的实现是“不透明的”(黑色)。几乎任何东西都可能被称为黑匣子:一个 晶体管 ,一个 算法 ,或者是 人脑

你可能听说过在软件开发过程中发生的黑盒测试,测试人员不知道被测试项目的内部结构/设计/实现,但是模型的工作被验证。

基本算法,如两个数字的 LCM,看起来比较简单,即使有时花费时间被认为是容易的,因为理解和解释这些算法的工作是容易掌握的。但是,当涉及到人工神经网络、卷积神经网络、递归神经网络等深度学习时,算法变得太复杂,人脑无法计算。它们包含许多隐藏层,不容易被与计算机通信的人追踪到。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Perceptron design

此外,当设计和实现深度学习模型时,它们被制作成便于使用,用户只需在几秒钟内给出输入并获取输出,而无需任何关于事物内部如何工作的先验知识。

无论深度学习模型能够提供多么准确的结果,任何应用都没有必要总是遵循某些预定义的规则。例如,在识别疾病的组织学数字的医学研究中,研究人员必须知道模型如何给出任何结果,以及它是在什么基础上得出结论的。“它真的知道自己在做什么吗?还是瞎猜的?”。在任何测试中绝对不允许出现任何不寻常或异常的模式。

任何代码如果易于调试,都被认为是干净或令人愉快的。如果对于任何给定的模型,假设一个输入给出一个假阳性输出,人们应该能够找出机器在哪里采取了错误的步骤,并使它学习一个更好的方法。但是由于所有的内部过程都是隐藏的和复杂的,它被认为是在一个“黑匣子”里。你只知道输入和输出。

医疗领域对深度学习的接受需要来自其他领域的证据,医学专家希望看到它在现实生活的其他关键领域取得成功,如自动驾驶汽车、机器人等。尽管基于深度学习的方法取得了巨大的成功,但仍然缺乏一种像样的深度学习算法理论。这是机器学习社区公认的。黑盒可能是另一个主要挑战,黑盒功能的法律影响可能是一个障碍,因为医疗专家不会依赖它。如果结果出错,谁能负责?

解开黑盒是一个重大的研究问题,为了解决这个问题,深度学习科学家正在努力解开这个众所周知的黑盒。一个解决方案建议开发一个工具包,显示每个单个神经元激活的视觉效果。因此,每个神经元的贡献是可见的,并且任何错误都可以很快被识别。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Example of a deep visualization toolbox implemented for face recognition.

最近在 5 月,来自麻省理工学院和其他地方的研究人员开发了一种交互式工具,首次让用户看到和控制自动机器学习系统如何工作。目的是建立对这些系统的信心,并找到改进它们的方法。

黑洞机器学习

原文:https://towardsdatascience.com/black-hole-machine-learning-d7387a4bd30e?source=collection_archive---------14-----------------------

奇点研究

通过理论物理的神经网络

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

主持人: Sketchviz

# http://www.graphviz.org/content/cluster
graph G {
    node [style=filled,color=pink];
    q0 -- H0 -- U -- V0 -- W0 -- A;
    q1 -- H1 -- U -- V1 -- W0 -- B;
    q2 -- H2 -- U -- V2 -- W1 -- C;
    q3 -- H3 -- U -- V3 -- W1 -- D;
    q4 -- H4 -- U -- V4 -- W2 -- E;
}

在本文中,我们提供了一些链接,链接到使用张量网络的重要而有趣的代码和软件,张量网络是一种用于引力物理学和黑洞研究的数学工具。我们感兴趣的代码将涉及机器学习和人工智能的应用。我们将回顾张量网络的简史,并稍微解释一下它们是什么,我们将解释它们如何将理论物理与机器学习联系起来,并深入了解为什么谷歌这样的巨头会聘请李奥纳特·苏士侃这样的物理学家来咨询他们的人工智能和机器学习算法。我们还将展示量子计算如何发挥作用,以及如何使用量子计算机创建量子增强的人工智能和量子机器学习算法,迫使我们重新思考我们理解信息处理的方式。

用于 TensorFlow 的 Google tensor network 库

今年早些时候(2019 年 6 月),谷歌的人工智能博客发布了一篇关于为其臭名昭著的 TensorFlow 机器学习平台建造的名为“ TensorNetwork 的图书馆的帖子。它是为张量网络的操作而建立的(我们将进入张量网络的简史,并在下面解释它们是什么)。谷歌开发这个库的工作是与 X 、谷歌的 moonshot factory 创新技术以及Perimeter Institute for theory Physics共同完成的。今年早些时候,周界研究所参与了一个黑洞的成像。除了在 Github 上发布代码,他们还撰写了三篇关于 TensorNetwork 库的应用和性能基准的研究论文:

TensorNetwork:物理和机器学习库

TensorFlow 上的 TensorNetwork:使用树张量网络的自旋链应用

用于机器学习的 TensorNetwork】

如果你有兴趣阅读 TensorNetwork 的文档并深入研究代码,你可以查看阅读文档页面。那么,为什么这么大惊小怪?张量网络有什么特别的,黑洞和机器学习有什么关系?什么是……张量网络?

张量网络简史

张量网络是物理学家使用的张量的图形符号,至少可以追溯到 20 世纪 70 年代,由罗杰·彭罗斯在他的图形符号中提出。他还在他的书现实之路中多次提到张量网络是如何应用于物理学的。另一个有点晦涩但非常透彻的文本是 Predrag Cvitanovic 所著的《群论:鸟迹、李氏和例外群》一书。这本书实际上在几年前我还是大学生的时候就引起了我的注意,就在它第一次发行后不久,特别是因为我想了解量子引力,以及人们如何使用如此迷人的视觉工具来做一些非常深奥的数学。

这些张量的图形表示不仅仅是漂亮,它们实际上构成了当今理论物理中一些最深刻和最基本的概念的基础。物理学家和数学家使用它们来描述量子信息理论、AdS/CFT 通信、弦理论和全息原理,如、罗杰·彭罗斯、胡安·马尔德塞纳和约翰·普雷斯基尔。

其他张量网络机器学习实现

量子激励张量网络的监督学习

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在本文中,E. Miles Stoudenmire 和 David J. Schwab 使用张量网络模型对手写数据 MNIST 进行机器学习分类,使用“矩阵乘积状态”。他们能够获得 1%的误差。他们还“讨论了张量网络形式如何给学习模型赋予额外的结构,并提出了一种可能的生成解释”。他们的代码可以在 Github 库中找到。

Quimb

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Quimb 是一个 python 库,用于量子信息和多体计算,包括张量网络。它速度快,并针对效率进行了优化。它主要用于物理问题的应用,但也可以适用于其他应用。它可以在 GPU 上运行,并且可以以几何自由的方式计算张量运算和表示。它可以用tensorflowpytorch优化任何张量网络

它对于量子计算机的模拟是有用的,因为它已经在 IBM Qiskit 中为计算进行了设置。对于许多问题,模拟是有效的,但是对于感兴趣的解空间不受某种对称性限制的高维计算,当然需要量子计算机来代替 Quimb 提供的经典模拟。

量子机器学习和一种新的信息论

在他的文章NISQ 时代的量子计算和超越中,John Preskill 描述了在“嘈杂的中间规模量子(NISQ) ”硬件上量子计算的当前状态。在他的讲座中,他讨论了一种量子信息理论,类似于谷歌与数学物理学家约翰·c·贝兹和计算机科学家迈克·斯泰共同撰写的论文物理、拓扑、逻辑和计算:一块罗塞塔石碑。论文的一个主题是我们应该重新思考信息论。

特别是,谷歌的论文解释了如何通过张量网络从量子物理学的角度思考信息论。毫不奇怪,量子计算中的标准符号量子电路图本身就是一个张量网络。

加速!

在 Google TensorNetwork 库的一个简短教程中,我展示了如何使用边的同时收缩来提供计算的实质性加速。该代码计算边顺序收缩的运行时间,然后计算边同时收缩的运行时间。

def one_edge_at_a_time(a, b):
  node1 = tn.Node(a)
  node2 = tn.Node(b)
  edge1 = node1[0] ^ node2[0]
  edge2 = node1[1] ^ node2[1]
  edge3 = node1[2] ^ node2[2]
  tn.contract(edge1)
  tn.contract(edge2)
  result = tn.contract(edge3)
  return result.tensordef use_contract_between(a, b):
  node1 = tn.Node(a)
  node2 = tn.Node(b)
  node1[0] ^ node2[0]
  node1[1] ^ node2[1]
  node1[2] ^ node2[2]
  # This is the same as
  # tn.contract_between(node1, node2)
  result = node1 @ node2
  return result.tensora = np.ones((1000, 1000, 10))
b = np.ones((1000, 1000, 10))%%time
one_edge_at_a_time(a, b)CPU times: user 15.7 s, sys: 1.88 s, total: 17.6 s
Wall time: 14.3 s

[29]:

array(10000000.)

这将依次收缩三条边,首先是红色,然后是绿色,然后是蓝色,如使用 Graphviz 生成的图像所示:

# http://www.graphviz.org/content/cluster
graph G0 {
    node [style=filled,color=pink];
    edge [color = red];
    a -- b;
    edge [color = green];
    a -- b;
    edge [color = blue];
    a -- b
}

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

主持于 Sketchviz

%%time
use_contract_between(a, b)CPU times: user 495 ms, sys: 145 ms, total: 639 ms
Wall time: 1.75 s

[33]:

array(10000000.)

数学上,这转化为三阶张量的内积:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

contracting 3 edges between two nodes “a” and “b”

如本文文章中所述,拥有这样的算法可以在高维张量上执行更高效的计算,从而提供显著的加速(高达 100 倍)。加入新的“ 张量处理单元【TPUs】”后,谷歌设计了更高效的张量计算,用于机器学习目的,你就拥有了一个极其强大的机器学习框架,从硬件到云计算软件再到最终用户应用。

这能用来做什么?

到目前为止,张量网络方法已经在图像识别、多类分类问题、计算机视觉、物理学、材料科学、生物技术、量子化学和生物物理学中得到应用。由于 TensorNetwork 提供了一种将张量网络集成到标准神经网络层的简单方法,因此它们可以用于任何涉及神经网络的机器学习任务。

虽然这些方法对大多数机器学习社区来说可能是新的,但它们在物理和数学中有很长的应用历史,因此理论和概念理解在数学和理论物理社区中已经很好地建立。这提供了一种理解机器学习的新方法,并在受“黑盒”方法论困扰的领域提供了新的直觉。努力理解人工智能为什么做出某些决定并得出特定结论是一个问题,这导致人们担心人工智能在某些商业解决方案的应用中会有多大的偏见,例如人工智能辅助的招聘。随着执法部门现在在许多城市应用人工智能,确保人工智能是公平的,而不是做出不人道的决定,也成为许多人关注的问题。除此之外,张量网络方法可以在机器学习任务和计算效率方面提供改进,在更大规模上投资研究和实施这些方法似乎是明智的。

如果你有想法要分享,有问题,或者你需要量子机器学习的咨询服务,请通过 LinkedIn 联系作者,访问奇点网站,或者查看 Github 教程

责怪游戏,而不是玩家

原文:https://towardsdatascience.com/blame-the-game-not-the-player-467e33d8044b?source=collection_archive---------13-----------------------

博弈论如何帮助我们理解为什么有时每个人都会输

一名网球运动员决定在下一场比赛前服用兴奋剂,以便胜过对手。一个零售商决定在周日继续营业,因为他的竞争对手也开始这样做了。可口可乐降低饮料价格以获得市场份额优势,迫使百事可乐也这样做。

所有这些假设场景有什么共同点?它们都是博弈论专家所谓的囚徒困境的例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

In Germany, retailers are by law required to close on Sundays. (Photo credit: Unsplash)

囚徒困境:当所有人都输了

在它的原始形式中,囚徒困境可以表述如下。两个罪犯(假设他们抢劫了一家银行)被逮捕并送进了监狱,彼此之间无法交谈。缺乏证据的检察官让他们每个人做一笔交易:他们每个人都可以选择指责另一名嫌疑人(“叛逃”),或者保持沉默(“相互合作”)。如果两人都保持沉默,两人都将只服刑 1 年。如果一方指责另一方,而另一方保持沉默,说话的一方将退出,而另一方将服刑 5 年。如果双方互相指责,他们都将服刑 3 年。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Outcomes of the Prisoner’s Dilemma (source)

如果囚犯们按照自己的最大利益行事,他们会怎么做?第一个犯人想:“不管对方做什么,我叛逃总是好的。如果他保持沉默,我就自由了。如果他叛逃,我只会服刑 3 年(而不是我合作的话会服刑 5 年)。”第二个囚犯也是这么想的,所以,如果两个人都是为了各自的最大利益而行动,那么两个人都会叛变,两个人都会服刑三年。

然而,这里有一个难题:如果双方合作,双方都会更好(只服刑 1 年)。

更一般地说,当任何一方通过不合作获得优势时,我们随时都会面临囚徒困境,但如果双方都合作会更好。回到上面的例子:如果两个网球运动员都不服用兴奋剂,他们的情况会更好,但每个人都可以通过服用兴奋剂获得优势,如果两个人都服用兴奋剂,优势就会被抵消。如果两家零售商都可以在周日休息一天,情况会更好,但如果另一家不开门,两家都可以通过开门获得市场份额优势(如果两家都这样做,就会抵消)。可口可乐可以通过降低价格来获得市场份额的优势,如果百事可乐也这样做,这种优势就会被抵消。

囚徒困境的结果,双方玩家都倒戈,也被称为博弈的纳什均衡,以数学家约翰·纳西命名。纳什证明了每个双人游戏都有这样一个均衡,双方都不想改变主意。然而,在囚徒困境中,这种均衡对双方都是有代价的:这不是最优结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Shanghai covered in Smog. (Photo credit: Unsplash)

公地的悲剧

当涉及两个以上的当事人时,囚徒困境变得更加有趣,这种情况也被称为 公地悲剧 问题。

考虑一下过度捕捞的问题。如果每个人都捕捞足够的鱼来保持鱼的数量稳定,那么每个渔场都会变得更好。然而,每一个渔场都可以通过比可持续捕捞量稍多的捕捞量来获得相对于竞争对手的微小优势。但是如果所有的渔场都这样做,很快鱼类种群将会完全崩溃。过度捕捞是这个游戏的纳什均衡不好的直接后果。

空气污染又是一个例子。如果所有国家都限制碳排放,每个国家都会变得更好。然而,每个国家都可以通过比其他国家稍微多污染一点来获得优势。但如果每个国家都遵循这一战略,我们的情况都会变得更糟。

在商界,假期是公地悲剧的另一种形式。如果每个人都有相同的假期,那么所有的员工都会受益。然而,每个员工都可以通过比他们的同事少休一点假期来获得一点优势,证明他们的忠诚,并使他们更有可能获得加薪或晋升。因此,每个人都会少休息几天。这种情况下的纳什均衡是每个人都将零休假。从博弈论的角度来看,应该对科技公司提供的“无限假期”持怀疑态度。

在我自己的工作领域,头衔膨胀是公地问题悲剧的又一个例子。如果职位名称能真实地反映基础工作,招聘经理和求职者都会受益。然而,每个招聘经理都可以通过将他们的数据/业务分析师职位宣传为数据科学家职位,从而在求职者市场中获得些许优势。然而,如果每个人都开始这样做,这种影响就会减弱,很快每个人都会成为数据科学家。(与此同时,我的大多数数据科学家朋友都去了其他职位,如机器学习工程师。)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The Redwood trees in California are another example for a Prisoner’s Dilemma. Each individual tree can gain an edge in received sunlight by growing slightly larger than the others, which is diminished if every tree does so.

改变游戏

纳什证明了每个博弈都有一个均衡,我们在上面看到了很多“坏”均衡的例子,如果每个人都理性地按照自己的最大利益行事,那么每个参与者的情况都会更糟。

博弈论的一个关键观点是,游戏可以被有意设计成具有“好”均衡。机制设计(或逆博弈论)领域,位于经济学和博弈论的交叉点,处理这个问题。

例如,在德国,法律不允许零售商在星期天开门营业,除了全年中几个特定的星期天。立法者做出这一决定并不是出于宗教原因,而是为了保证每个人至少有一天休假(鉴于纳什均衡另有所指)。

为了解决员工不休假的问题,一些公司开始支付他们休假的费用。然而,从博弈论的角度来看,这一政策是错误的,因为它无助于解决问题的根源,即糟糕的纳什均衡。为了解决这个问题,雇主应该改为强制规定最低休假时间,这将有效地改变纳什均衡。据美国有线电视新闻网报道,一些公司正在试验这一政策。

过度捕捞的问题呢?在的《裸体经济中,查理斯·惠兰讲述了澳大利亚南部海岸林肯港龙虾社区的引人入胜的故事。社区对可以设置的龙虾陷阱的总数设定了限制,然后出售这些陷阱的许可证。新来者进入这个市场的唯一途径是从另一个捕虾人那里购买一个这样的许可证。Wheelan 指出,这种许可制度使得龙虾数量激增,同时也提高了龙虾养殖者的工作效率。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Fishing boats in Egypt (Photo credit: Unsplash)

结论:知道自己在玩什么游戏

“寻找以诚实为主导策略的游戏。那就做好自己吧。”(布莱恩·克里斯蒂安和汤姆·格里菲斯,《赖以生存的算法》

一些游戏的糟糕结果仅仅是因为游戏的架构,而不是因为玩家。博弈论帮助我们识别问题中的“坏”纳什均衡,如过度捕捞、空气污染、休假政策、体育运动中的兴奋剂、商店营业时间等等。另一方面,机制设计(或逆博弈理论)帮助我们重新设计这些问题,使得纳什均衡对每个参与者来说都是一个更好的结果。龙虾陷阱许可,最低强制休假日政策,以及规定的商店营业时间都是改变纳什均衡的机制设计的例子。

也许博弈论最重要的一课是知道你在哪个游戏中。如果你处于囚徒困境或公地悲剧类型的游戏中,要知道每个人都有损失,但没有人有错。

Blender 2.8 油脂铅笔脚本和生成艺术

原文:https://towardsdatascience.com/blender-2-8-grease-pencil-scripting-and-generative-art-cbbfd3967590?source=collection_archive---------8-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Quick, Draw! — Flock — Conway’s Game of Life

什么:学习 Blender Grease-Pencil 工具的基本脚本,重点是作为具体游乐场的生成艺术。话少,代码多(评论)例子多。

为什么?主要是因为我们可以。还因为 Blender 是一个非常丰富的生态系统,而 2.8 版本的Grease-Pencil是一个强大而通用的工具。生成艺术是展示工具潜力的迷人方式:如果你喜欢 Python,但不喜欢学习处理,或者仍然不确定是否要尝试 p5.js 或 Three.js,这里你会找到完美的游乐场。

: Python ≥ 3.6 和 Blender 2.8 。我从其他关于生成艺术的资源中获得了灵感,特别是马特·皮尔森的《生成艺术》一书和 Kadenze 在线课程。

地点/时间:此时此地。也可以在这里找到完整的代码(以及 Blender utils 在这里)。

设置

在 Blender 中,您可以使用 Python 控制台编辑器中的代码(一定要充分利用自动完成功能)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Python Console Editor

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Text Editor

或者你可以更容易地运行。文本编辑器中的脚本。始终切换系统控制台,以便检查 Python 输出。有用的快捷键是用于运行脚本的alt+P和用于重新加载文件内容的alt+R。除非你只是玩玩或者做做实验,否则我建议用专用的 IDE 编写代码,然后回到 Blender 来验证结果。

这些都是开始的必要条件。这里是准备好油脂铅笔(GP)实例的代码。

层次结构是这样工作的:每个 GP 对象可以有多个,这是一个组织你的工作的抽象。在一个层中,你可以创建笔划,这是一系列与材质相关的点。同一层的不同笔画可以有不同的材质。笔划位于中,这是 GP 对象的时间维度。我们将在后面的动画部分看到更多关于帧的内容,对于静态内容,我们只需要一个目标帧来绘制我们的笔划。

gp_layer = init_grease_pencil()
gp_frame = gp_layer.frames.new(0)

有了这个可重复使用的框架,我们就可以开始绘图了。

一个 GP 笔划仅仅是具有属性的点的集合。这里举例说明画线的方法。

对于给定的 GP 帧,创建一个新的笔划,定义长度(点数)并设置每个点的 3D 坐标。然后,您可以在屏幕上显示您的笔划(由于有了display_mode标志,在 3D 空间中是可编辑的)并在第 0 帧通过

gp_layer = init_grease_pencil()
gp_frame = gp_layer.frames.new(0)

draw_line(gp_frame, (0, 0, 0), (1, 1, 0))

我们可以通过重用之前的draw_line方法来绘制一个正方形,或者我们可以通过计算坐标和添加更多的点来更好地从头开始构建我们的正方形。类似的,移动到三维形状,以建立一个立方体。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

From 0 to 3 Spatial Dimensions

下面的代码改为画一个圆。注意draw_cyclic 标志关闭循环(先连接最后一个笔画点)。

GP 现在是一等公民,因此可以依赖通用 Blender 对象的任何更高级别的实用程序/方法。对于笔画来说是不一样的,但这给了我们机会去学习/理解更多关于计算机图形学的基本机制,以及随之而来的数学。
例如,我们可以使用旋转矩阵旋转我们的圆(只是一堆点)。

有了这两种方法,人们可以通过

def draw_sphere(gp_frame, radius: int, circles: int):
    angle = math.pi / circles
    for i in range(circles):
        circle = draw_circle(gp_frame, (0, 0, 0), radius, 32)
        rotate_stroke(circle, angle*i, 'x')

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从这些基本组件和步骤中,您可以组合出几乎无限多种结果。下面是一些基本的例子,我用这些代码和一些数学模型来生成数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

材料

材料是探索新维度的一种方式,试图逃离单调现实的沉闷。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Grease Pencil Materials

通过将其material_index属性设置为相应的材质索引,可以将每个笔划与特定的材质相关联。笔画粗细可以在创建时通过line_width属性设置。

gp_stroke = gp_frame.strokes.new()
gp_stroke.display_mode = '3DSPACE'  # allows for editing# The new lines needed to customize stroke thickness and material
gp_stroke.line_width = 100
gp_stroke.material_index = 1

请注意,一些属性位于层级别,而另一些属性位于材质级别。然后,您可以手动调整材质,并从用户界面获得实时反馈,但对于厚度,您可以只在层级别进行调整,除非您开始使用效果或修改器。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Basic Shapes with Different Materials

材料也可以通过编程来创建,但这是一篇专门文章的内容。现在享受一些我摆弄基本材料选项的结果。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

动画

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Dope Sheet Editor for Grease Pencil Mode

帧是你最好的动画朋友。它们是你讲述故事的媒介;你可以在 Blender 中激活时间轴上的画布。从代码的角度来看,就是创建新的帧并访问它们来管理笔画。

在这个脚本中,我们设置目标帧数和相对距离,相应地更新场景变量,然后遍历这些帧,在时间轴中的每个目标位置创建一个。gp_layer.frames.new方法需要时间线上新帧的索引作为参数,如果已经存在,它将抛出一个错误。您也可以通过gp_layer.frames[index]访问帧,但是请注意帧列表中的索引不一定与时间轴帧号相匹配(因为帧的间距可能不同)。为此,你可以检查框架对象的frame_number属性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Kinetic Rotating Square

在前面的例子中,我们使用了gp_layer.frames.new,它返回一个新的空白帧,没有过去的记忆。如果你要画全新的东西,可以用这个。相反,如果你对重用先前帧中绘制的内容感兴趣,你应该使用gp_layer.frames.copy(gp_frame),其中gp_frame是一个实际的帧实例。这将给定帧的内容复制到下一个可用的时间轴位置。

下面的动画完全使用这种方法,每帧只绘制一个新线段,复制之前已经绘制的所有线段,并在每个线段绘制之间添加“立方体扩展效果”。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Dragon and Koch Curves

这真的是编写基本动画的全部知识。这里是我根据这篇文章的内容创作的一些例子。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3D L-Systems — Kinetic Rotating Square —Hexagon CA

作为奖励,我在这里接上了一张草图——RNN 模型和相关的快,画吧!数据集,用于绘制代理的漂亮网格。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

结论

在这篇文章中,我们介绍了油脂铅笔脚本的基础,重点是示例和方向的生成艺术。

关于 Grease-Pencil 没有太多要说的,如果不是要变得有创造性,拿出你自己有用的/有创造性的用例,当然利用 Blender 巨大的潜力。以混合为目标,例如混合 3D 和 2D,或者“艺术数据可视化”。

相反,我想以围绕生成艺术的建议结束,从一些基本的食谱和有效的创作惯例开始:

  • 探索并结合多种数学函数和模型
  • 从其他领域获得灵感(如生物学、建筑学、心理学、物理学)
  • 分解现实和其他人的作品并试图复制
  • 设计和试验可重用原子方法和对象的可组合层次
  • 重新解释:以不同的方式可视化属性、对象和动作
  • “不要做相机能做的,做它不能做的”

必须开始探索的话题(有些高度相关):

最后,我强烈建议潜入机器学习和相关的生成模型。这些技术的结果不言自明。

“我听而忘,我看而记,我做而理解”——孔子

可以在我的insta gramTwitter【CS stuff】上找到更多。

比较句子得分

原文:https://towardsdatascience.com/bleu-bert-y-comparing-sentence-scores-307e0975994d?source=collection_archive---------16-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Blueberries — Photo by Joanna Kosinska on Unsplash

本故事的目标是理解 BLEU,因为它是 MT 模型的一种广泛使用的测量方法,并研究它与 BERT 的关系。

这是我的项目的第一个故事,我尝试在神经机器翻译(NMT)问题中使用 BERT 情境化嵌入向量。我对机器翻译比较陌生,因此,欢迎任何建议。

句子相似度

当涉及到机器翻译或其他自然语言处理(NLP)问题时,过程的输出是文本,测量结果的正确性并不简单。

评估机器翻译算法我们要问的问题是“这个翻译有多好?”或者“目标语言中的句子和源语言中的句子有多接近?”

为了理解这个问题,在这里我们将看看它的一个更简单的版本:“在同一种语言中的两个句子有多相似?”

在这个故事中,让我们使用以下袖珍句子:
s0: James Cook was a very good man and a loving husband. s1: James Cook was a very nice man and a loving husband. s2: James Cook was a bad man and a terrible husband. s3: James Cook was a nice person and a good husband. s4: The sky is blue today and learning history is important.

我想建议大家花一分钟思考一下句子之间的相似性,它们与第一个句子有多接近!

蓝色

BLEU:双语评价替角提供评分比较句子[1]。最初,它是为翻译开发的,使用参考翻译来评估预测的翻译,然而,它也可以用于句子相似性。这里很好的介绍了 BLEU(或者阅读原文)。

BLEU 背后的想法是统计句子中匹配的 n-grams 。一元词是一个单词(token),二元词是一对两个单词,以此类推。在这种情况下,单词的顺序无关紧要。

为了消除错误的分数(例如,“the the the the”给“猫吃鸟”一个相对较好的分数),引入了这个计数的修改版本。这个修改的单字精度惩罚了在参考文本中多次使用同一个单词。

BLEU 不能处理单词同义词,但是,它是一种快速、廉价的算法,与语言无关,并且与人类评估相关。

伯特

BERT:来自变压器的双向编码器表示是一个上下文化的单词嵌入(以及更多)[2]。这里是对 BERT 的一个很棒的总结(或者阅读原文)。

单词嵌入是映射到单词的向量,以帮助计算机理解单词。虽然“猫”或“狗”对计算机来说很难处理,但它们的矢量表示更适合。对嵌入映射的一个期望是相似的单词必须彼此靠近。

根据上下文,上下文化单词嵌入向量对于相同的单词具有不同的嵌入。BERT 嵌入的一个技巧是,它是用分隔符CLSSEP训练的,这些分隔符也有上下文相关的嵌入向量。原论文中建议这些嵌入可以作为句子级嵌入。这里,我们将使用每个句子的CLS分隔符的嵌入向量作为句子的嵌入。[CLS] This is a sentence with separators . [SEP]

向量距离

这里,我们将使用相应的CLS句子级嵌入的欧几里德距离和余弦相似度来计算句子之间的相似度。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Euclidean distance

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Cosine similarity

欧几里德距离的范围是[0,∞),因此,为了匹配其他分数,让我们使用函数 f(x)=(1/1.2)^x 来获得(0,1)分数。该函数产生相对接近于 BLEU 的分数。余弦相似度具有正确的范围,但是,它与 BLEU 分数没有可比性。为了评估结果,我们必须调查句子之间的相对分数,而不是其他分数。

相似性得分

这是一个使用 BLEU 的分数表。正如我们所看到的,BLEU 认为第二个句子与第一个句子很接近(只有一个单词发生了变化),但是它不能处理第四个句子的同义词。还有一个完全不同的句子得分比较高。

具有平滑功能的 BLEU 解决了后一个问题。

具有欧几里德距离的 BERT 获得了与 BLEU 相对相似的分数,但是它也处理同义词。BERT 向量的余弦相似性具有与空间相似性得分相似的得分。

Spacy 是一个工业级的自然语言处理工具。Spacy 使用嵌入向量的单词,句子的向量是其标记向量的平均值。更多关于空间相似性这里

BLEU and BERT scores of the pocket sentences, similarity to the first sentence

贝特斯科尔

(2019 年 11 月 6 日更新)

这是一个更新,因为我最近发现了一篇文章,其想法是使用 BERT 来评估机器翻译系统[4]。作者表明,与之前的分数(如 BLUE)相比,BERTScore 与人类判断的相关性更好。

BERTScore 与这里介绍的相似,但是,BERTScore 使用标记级 BERT 嵌入向量的相似性,而我们使用句子级嵌入。

摘要

这个故事介绍了评估句子相似性的 BLEU 分数,并将其与 BERT 向量距离进行了比较。这些例子试图说明定义一个相似的句子意味着什么是多么困难,这两种方法显示了定量测量某种相似性的可能答案。附在这个故事上的代码提供了 BLEU 和 BERT 以及 Spacy 的基本用法。对于详细的介绍,提供了额外的链接。

相应的代码在 Google Colab 中有。

参考

[1]帕皮尼,k .,鲁科斯,s .,沃德,t .,,朱,W. J. (2002 年 7 月). BLEU:一种自动评估机器翻译的方法。计算语言学协会第 40 届年会论文集(第 311-318 页)。计算语言学协会。

[2] Devlin,j .,Chang,M. W .,Lee,k .,& Toutanova,K. (2018 年)。 Bert:用于语言理解的深度双向转换器的预训练。 arXiv 预印本 arXiv:1810.04805

[3]林春燕,吴凤珍(2004 年 7 月).使用最长公共子序列和 skip-bigram 统计自动评估机器翻译质量。第 42 届计算语言学协会年会论文集(第 605 页)。计算语言学协会。

[4]张,t .,基肖尔,v .,吴,f .,温伯格,K. Q .,&阿奇,Y. (2019)。 BERTScore:用 BERT 评估文本生成。 arXiv 预印本 arXiv:1904.09675

用伯特的故事学习 NMT

  1. BLEU-BERT-y:比较句子得分
  2. 嵌入关系的可视化(word2vec,BERT)
  3. 机器翻译:简要概述
  4. 使用 BERT 识别单词的正确含义
  5. 机器翻译:与 SOTA 相比
  6. 使用 TensorFlow 2.0 的简单 BERT】

蒙住自己的眼睛,获得更好的商业智慧

原文:https://towardsdatascience.com/blindfold-yourself-for-better-business-intelligence-a87ee02e71b0?source=collection_archive---------25-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Streaming Business Intelligence can notify you before you take the wrong step. © Sergey Khakimullin

实时 BI 和查询未来 BI 的区别

流业务智能允许业务分析师使用交互式 BI 工具来可视化动态信息。但是这种能力掩盖了工具的真正价值,即查询未来。通过应用不断评估的算法,现在可以查询过去、现在和未来。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

串流 BI 持续实时查询串流数据。例如,这个 BI 仪表板根据传感器读数和汽车发出的 GPS 位置数据,实时显示一级方程式赛车的路线。当接收到输入时,BI 工具在屏幕上闪烁数据更新。

但这种实时的视觉盛宴隐藏了流式商务智能的强大功能。神奇之处在于当你看着屏幕时,它能评估连续的答案;流式 BI 会记住查询,并随着数据的每次变化不断重新评估它们。

流式商务智能使自助商务智能像自动回拨客户支持一样工作。你可以要求系统给你回电,挂断电话,然后继续你的业务,而不是等待代理。当客服代表准备好了,他们会打电话给你

流式 BI 类似于自动回拨 BI:当您的问题得到回答时,它会给您打电话。该呼叫可以通过电子邮件、文本消息或您可以用 API 编程的任何基于推送的响应来传递。或者,当事件没有发生时,您可以被调用。举个例子:如果一个超过我前面 F1 赛车的机会 3 圈都没有发生,发短信给我

以下是一些质疑未来的商业智能问题的真实例子:

  • 告诉我,当一位高价值客户将一件产品添加到他的购物车中,但 5 分钟后才结账
  • 当两次可疑登录在 5 分钟内相继发生时,请告诉我
  • 告诉我什么时候一艘船离港口有一个小时的路程,但是没有地方停靠
  • 告诉我飞机航线上什么时候预报有风暴
  • 当我的供应链中任何 100,000 个零件的订单超过一个小时没有得到确认时,请告诉我
  • 告诉我什么时候任何生产线开始降低产量。
  • 根据我的交易算法,告诉我什么时候是交易谷歌股票的好时机
  • 当我的司机走错方向时告诉我

自助式流媒体商务智能有助于打破只看过去的思维,并且像十年前颠覆性的自助式商务智能一样,有望改变每个企业使用数字数据的方式。

流式 BI 也适用于数据科学

自适应学习是数据科学,相当于人类通过不断观察环境来学习。自适应学习不是只在数据湖上训练模型,而是在变化的数据流上训练模型。

查询未来问题可以包括机器学习和 AI 模型。因此,您也可以在不观察的情况下,针对不断变化的实时条件应用预测分析。

流式商业智能允许分析师提出一类新的关于未来的商业问题,而不仅仅是已经发生的事情。这项技术使商业用户能够在一个新的计算方向上进行搜索:向前,而不是向后。

通过在你不在的时候不断回答问题,流式商务智能技术有助于实现预测未来情况并据此采取行动的业务流程。

了解更多信息

更多关于串流 BI,阅读 如何查询未来 和本 3 分钟 如何查询未来中序列。 如需了解更多关于在串流商务智能中应用数据科学模型的信息,请阅读 为什么您应该了解串流数据科学

关于作者

马克·帕尔默是 TIBCO 软件公司分析部的 SVP。作为 StreamBase 的 CEO,他被《时代》杂志评为将改变你生活的 科技先锋之一 。更重要的是,他是两个酷孩子的骄傲父亲。

交易中的布林线统计

原文:https://towardsdatascience.com/bollinger-bands-statistics-in-trading-dcc8783a8f88?source=collection_archive---------15-----------------------

有很多交易者使用布林线。我也喜欢布林线。它使用统计数据,并将统计数据带入交易世界。但是有多准确呢?在时间序列中使用标准差是正确的方法吗?一起来了解一下吧!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Bollinger Bands

没有领先指标

作为交易者,我们大多数人使用 OHLC 蜡烛图/条形图(开盘-盘高-盘低-收盘)。这张图表向我们展示了过去发生的事情。我们可以清楚地看到一家酒吧在哪里开业、搬迁和关闭。我们使用许多指标。它们都告诉我们过去发生了什么。对我来说;**没有领先指标。**过去的就过去了!然而,这是有可能的。如果我们有足够的过去的数据,我们将有足够的基础资产的统计数据。

数据数据数据…

我们需要数据!数据是关键。数据就是一切。我们需要从可靠的来源获取数据。在本文中,我将向您展示如何使用 Python 免费下载数据。我要用 AlphaVantage。

首先;请在 AlphaVantage 网站注册一把免费钥匙。请注意,我不隶属于他们。

现在让我们使用 Python 下载数据。

def load_data(sym="EUR", to_sym="USD", interval="5min", dtype=2, intraday=False, outputsize="full"):
    key = "ENTER_YOUR_KEY"
    if dtype == 1: # Download stock
        if intraday:
            url = "[https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&interval={}&symbol={}&apikey={}&datatype=csv&outputsize={](https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY&interval={}&symbol={}&apikey={}&datatype=csv&outputsize={)}".format(interval, sym, key, outputsize)
        else:
            url = "[https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol={}&apikey={}&datatype=csv&outputsize={](https://www.alphavantage.co/query?function=TIME_SERIES_DAILY&symbol={}&apikey={}&datatype=csv&outputsize={)}".format(sym, key, outputsize)
    elif dtype == 2: # Download forex
        print("FX")
        if intraday:
            url = "[https://www.alphavantage.co/query?function=FX_INTRADAY&interval={}&from_symbol={}&to_symbol={}&apikey={}&datatype=csv&outputsize={](https://www.alphavantage.co/query?function=FX_INTRADAY&interval={}&from_symbol={}&to_symbol={}&apikey={}&datatype=csv&outputsize={)}".format(interval, sym, to_sym, key, outputsize)
        else:
            url = "[https://www.alphavantage.co/query?function=FX_DAILY&from_symbol={}&to_symbol={}&apikey={}&datatype=csv&outputsize={](https://www.alphavantage.co/query?function=FX_DAILY&from_symbol={}&to_symbol={}&apikey={}&datatype=csv&outputsize={)}".format(sym, to_sym, key, outputsize)
    elif dtype == 3: # Download Crypto
        url = "[https://www.alphavantage.co/query?function=DIGITAL_CURRENCY_DAILY&symbol={}&market={}&apikey={}&datatype=csv&outputsize={](https://www.alphavantage.co/query?function=DIGITAL_CURRENCY_DAILY&symbol={}&market={}&apikey={}&datatype=csv&outputsize={)}".format(sym, to_sym, key, outputsize)
    print("Downloading", url)
    print("---")
    df = pd.read_csv(url)# rename columns
    if dtype == 3:
        df.rename(columns={'timestamp': 'Date', 'open (USD)': 'Open', 'high (USD)': 'High', 'low (USD)': 'Low', 'close (USD)': 'Close', 'volume': 'Volume'}, inplace=True)
    else:
        df.rename(columns={'timestamp': 'Date', 'open': 'Open', 'high': 'High', 'low': 'Low', 'close': 'Close', 'volume': 'Volume'}, inplace=True)
    df.sort_values(by="Date", ascending=True, inplace=True)
    print("Data loaded:", len(df), "rows")
    return df# Options
sym = "EUR"
to_sym = "USD" # only for fx and cryptocurrency
intraday = False # False: Daily
interval = "5min" # 1min 5min 15min 30min 60min - only if intraday is set to True
dtype = 2 # 1: stock 2: fx 3: crypto# load data
df = load_data(sym, to_sym, interval, dtype, intraday)

我们已经下载了我们的数据,下面是它的样子。

df['Close'].plot(figsize=(15, 10))

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

EURUSD Daily Closing Prices

这是欧元兑美元的日线图。现在我们需要做的是在图表上添加布林线并计算统计数据。

def add_bb(df, dev=2, lb=20, col="Close", lines=100):
    df['MA'] = df[col].rolling(lb).mean()
    df['STD'] = df[col].rolling(lb).std()
    df['OVB'] = df['MA'] + df['STD'] * dev
    df['OVS'] = df['MA'] - df['STD'] * dev
    plot_candles(df, lines=lines)
    get_stats(df, dev=dev)

请注意,我添加了两个新函数。第一个绘制蜡烛线,第二个计算并打印出布林线过去的统计数据。让我们快速定义这些函数。

def plot_candles(df, lines=100):
    df['Bar'] = df['High'] - df['Low']
    df['Body'] = abs(df['Close'] - df['Open'])
    df['Up'] = df['Close'] > df['Open']
    df['Color'] = np.where(df['Up'], "g", "r")
    if lines > 0:
        db = df[-lines:].reset_index(drop=True).reset_index()
    else:
        db = df.reset_index(drop=True).reset_index()
    plt.figure(figsize=(15, 10))
    plt.bar(db['index'], bottom=db['Low'], height=db['Bar'], color="#000000", width=0.2)
    plt.bar(db['index'], bottom=np.where(db['Up'], db['Open'], db['Close']), height=db['Body'], color=db['Color'], width=0.9)
    plt.plot(db['OVB'], color="b")
    plt.plot(db['OVS'], color="b")
    plt.show()def get_stats(df, high_col="Close", low_col="Close", high_dev="OVB", low_dev="OVS", dev=2):
    total = len(df)
    inside = len(df[(df[high_col]<=df[high_dev]) & (df[low_col]>=df[low_dev])])
    upside = len(df[df[high_col]>=df[high_dev]])
    downside = len(df[df[low_col]<=df[low_dev]])
    i = np.round(inside / total * 100, 2)
    u = np.round(upside / total * 100, 2)
    d = np.round(downside / total * 100, 2)
    # Print the stats
    print("Total bars:", total)
    print("Deviation", dev)
    print("Inside: ", i, "%", sep="")
    print("Up side: ", u, "%", sep="")
    print("Down side: ", d, "%", sep="")

现在让我们继续运行 add_bb()函数,看看结果

dev = 2 # standard deviation
lb = 20 # simple moving average (SMA) of last 20 bars including the final bar
lines = 500 # plot last 500 bars only
add_bb(df, dev=dev, lb=lb, lines=lines)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

EURUSD Candlestick chart with Bollinger Bands

非常好的烛台图表在一个棘手的方式!这是布林线在两个标准差内的统计数据:

Total bars: 5000
Deviation 2
Inside: 89.96%
Up side: 5.3%
Down side: 4.36%

内意味着,总棒线收在 2 个标准差之间;上边意味着,总棒线收在上边带之上,下边意味着,总棒线收在下边带之下。

现在我们看到的是标准布林线的“过去”统计数据。请随意更改设置。例如,您可以用 200 SMA 设置一个标准差。

布林线准确吗?

如果你有统计学背景,你应该知道,标准差在正态分布数据中更有效。然而,收盘价不是正态分布的。您可以很容易地看到,运行下面的代码:

df['Close'].hist(bins=500, figsize=(15, 10))

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

EURUSD closing prices histogram

你可能认为这看起来像正态分布,但我可以很容易地说,它不是。它应该是这样的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Normal distribution

这就是我所说的完美钟形曲线。如果你有这样的直方图,你可以有更好的统计,告诉你更多。波段之间的距离不会像布林线一样宽。

标准差告诉我们什么?

标准差表示:68.26%的数据落在平均值的一个标准差内,95.44%的数据落在平均值的两个标准差内,99.74%的数据落在平均值的三个标准差内。然而,如果我们使用一个标准偏差进行测试,结果如下:

Total bars: 5000
Deviation 1
Inside: 44.96%
Up side: 28.96%
Down side: 25.7%

可以尝试股票、外汇、加密货币;它们都给你相似的结果。在我看来,这一点也不准确!

结论

从统计学上来说,布林线可能无法满足你的需求。然而,你可以使用你最喜欢的交易策略,仍然可以获利!

**免责声明 **

我不是专业的财务顾问。这篇文章和代码,分享仅用于教育目的,而不是财务建议。你要对自己的输赢负责。

本文的全部代码可以在这个资源库中找到:

[## atillayurtseven/TheCurve

此时您不能执行该操作。您已使用另一个标签页或窗口登录。您已在另一个选项卡中注销,或者…

github.com](https://github.com/atillayurtseven/TheCurve/blob/master/Bollinger%20Bands%20Statistics.ipynb)

啊也;记得在以下社交渠道关注我:

中等
推特
交易视图

直到下次;保持安全,交易安全!!!

阿蒂拉·尤尔特塞文

来自《走向数据科学》编辑的注释: 虽然我们允许独立作者根据我们的 规则和指导方针 发表文章,但我们不认可每个作者的贡献。你不应该在没有寻求专业建议的情况下依赖一个作者的作品。详见我们的 读者术语

图书推荐引擎

原文:https://towardsdatascience.com/book-recommender-engines-4c9d5b33db62?source=collection_archive---------23-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我决定建立几个推荐引擎,这样我就可以更好地探索它们如何运作的幕后。我构建了两个引擎,每个都推荐书籍。一个是基于合作者,另一个是基于内容。

第一部分:合作者引擎

使用 collaborator 引擎,推荐是基于用户与产品的交互方式。这包括购买或评价一个项目,以及观看或收听媒体。我选择了图书穿越公司的数据集作为这个引擎,因为它包含了用户评分。

探索性数据分析

一旦我清理了数据,我想看一下评级,看看评分范围是什么样子的。评分范围为 1-10 分,在 12.3 万本被评分的书中,这些用户似乎喜欢他们所读的大部分内容。8 是最受欢迎的评级,很少有低于 5 的评级:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

接下来,我想看看这些用户最喜欢的书是什么:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可爱的骨头 远超其他。这个数据集是在 2004 年创建的,而《可爱的骨头》是在 2002 年发布的,所以这个时间确实符合这本书在当时的受欢迎程度。

推荐者

接下来,我根据每个用户对多少本书的评价抽取了一个数据样本,并通过推荐器运行。我从一组用户样本开始,他们每个人都评价了 100 多本书。然后我测试了把各种书名输入系统,看看有什么书会被推荐。这里有一个例子:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这种情况下,我要求根据 《采访吸血鬼》 推荐书籍。右边是建议。我在列表的顶部展示了三个封面,以提醒这三个标题也是安妮·赖斯的,所以在这里推荐它们是合适的。两部其实和采访吸血鬼是一个系列的。

这里有些书是我意想不到的,比如《宋飞正传》或《老实人 T21》。然而,我的用户群实际上很小,所以它推荐的书籍是基于非常精选的读者群。

我试着把我的样本集中那些评价超过 100 本书的用户数量改为 50 本书,我的分数变得更差了。所以我试着把复习的书增加到 200 多本,我的分数变得更好了。这是出乎意料的,因为我们真的需要更多的用户样本来获得更平衡的推荐。有了这个用户群,很可能与那些评价更多书的人走得更少会给我们一个更志同道合的子集。

第二部分:内容引擎

使用基于内容的引擎,推荐是基于产品的特性进行的。考虑到这一点,我选择了来自 Kaggle 的 Goodreads 数据集,因为它包含了每个标题的特征信息,比如流派和平均评级。

探索性数据分析

清理完数据后,我想看看流派划分是什么:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

浪漫和幻想似乎让大多数其他类型相形见绌,这是我在转向模型时记住的事情。

推荐者

我根据出版年份提取了一个样本。在这种情况下,我调出了 1900 年及以后出版的所有书籍。与上一个引擎一样,我测试了将各种书名放入系统中,看看有什么书会被推荐。不过,我也想看看我之前测试过的一些相同的书,比如采访吸血鬼:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这一次,你可以看到它没有推荐任何其他安妮·赖斯的书籍。事实上,有一本图画书列出来了,如果你给一只老鼠一个饼干。这不太符合年龄。我不会向阅读《吸血鬼访谈》的人推荐一本绘本。

看到这一点,我备份并调整了我要放入模型的数据列。我测试了各种字段,从评级数量到页数,再到是否包含作者或流派。虽然我注意到结果中有一些有趣的变化,例如当我删除页面作为一个功能时,出现了更多的儿童图画书,但我最好的结果仍然是包括所有书籍特定的数据列。

然而,根据推荐的书目来看,这个方向似乎是有缺陷的。分数看起来很大,但仔细看,结果并不那么好。问题是,对于基于内容的引擎,我们需要比我在这个数据集中所拥有的更多的数据。拥有书籍描述将是一个良好的开端。更完整的内容更好地描述了这本书的真实内容。

结论

在这两个引擎中,collaborator 引擎给我的基于书籍主题的推荐比 content 引擎稍好。后者给出了更好的分数,但仔细看,我可以看到主题也不匹配。但这并不意味着我会排除使用基于内容的引擎。对于这种引擎,我建议引入更多的描述性内容,并使用自然语言处理来评估单词之间的关系,并在此基础上提出建议。

接下来的步骤

我确实看到了这些引擎的巨大潜力。如果我在这个项目上有更多的时间,我会采取并建议考虑以下步骤:

  1. 收集更大的主数据集来测试模型。我的 collaborator 引擎需要更多的用户评分才能更加平衡,而我的内容引擎需要更多的描述性内容。因此需要更大更完整的数据集。一个可以通过网络搜集或 API 收集,包括产品描述和用户评论。
  2. 我也没有时间去做的一件事是研究如何导入外语包。如何在数据中处理外文图书将是下一步需要考虑的事情。要么导入一个可以处理外来字符的包,要么从数据集中删除它们。
  3. Goodreads 集合中有一些与作者相关的数据,我没有机会测试,比如作者类型和平均评分。我想看看这是否有助于获得更好的推荐。
  4. 最后,我将探索在引擎上添加一个基于网络的前端的选项,该引擎具有消费者友好的界面。

该项目的完整代码可在 GitHub 上获得。干杯!

书评:用 Scikit-Learn 和 TensorFlow 实践机器学习:构建智能系统的概念、工具和技术

原文:https://towardsdatascience.com/book-review-hands-on-machine-learning-with-scikit-learn-and-tensorflow-concepts-tools-and-643e93a51016?source=collection_archive---------21-----------------------

如果您对 Python 编程很熟悉,并且希望从一位经验丰富的从业者那里快速了解 Python 中的经典和深度学习技术,那么 Aurélien Géron 所著的《使用 Scikit-Learn 和 TensorFlow 进行机器学习:构建智能系统的概念、工具和技术》可能是一本适合您的书!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

哪个奥雷连恩?

Aurélien Géron 最出名的可能是他在 2013 年至 2016 年期间领导 YouTube 视频分类团队的角色。在创办了人工智能培训和咨询公司 Kiwisoft 之后,他现在住在新加坡。

跳进来了!

在“用 Scikit-Learn 和 TensorFlow 进行机器学习实践”中,Géron 肯定会加入进来。在前 30 页中,他概述了机器学习(ML)系统,ML 系统中的主要挑战,以及对模型测试和验证的思考。

在接下来的 40 页中,他将带您体验一个实际操作的端到端 ML 项目。Géron 向您展示了应该如何思考构建问题、选择性能指标、获取数据、执行一些探索性数据分析和可视化以了解数据集、为您的模型准备数据、选择和训练模型、微调模型,以及最后启动、监控和维护系统。如果听起来很多,那就是很多!但是,所有这些都是有益的,非常值得一试。

经典 ML

Géron 随后概述了分类器(ML 解决方案的一个常见类别),然后介绍了使用线性和逻辑回归、支持向量机(SVM)、决策树、集成方法的实际操作,然后花一些时间了解如何使用主成分分析(PCA)处理维度缩减。

这是对经典 ML 的快速而激烈的介绍,但它提供了许多实用的提示和技巧,将帮助您作为数据科学家建立良好的直觉。

“用 Scikit-Learn 和 TensorFlow 进行动手机器学习”更适合高级新手。您已经需要熟悉 Python 编码,如果没有统计学背景,一旦您开始做自己的建模项目,您很可能会做出糟糕的选择。但是如果你是一个“向我展示代码”类型的学习者,这是一个非常好的接触实用 ML 的方式,你可以在以后“填补空白”!

深度学习

在 230 页致力于经典 ML 之后,Géron 直接进入神经网络和深度学习——ML 中最迷人和发展最快的领域之一。

为了保持本书注重实践和代码的性质,Géron 直接进入代码,让您开始使用 tensor flow——构建和训练神经网络最流行的库之一(另一个是 Pytorch)。一旦他让你了解了让代码运行的基本知识,他就会后退一步,提供神经网络的概念介绍。盖伦从生物系统开始,然后转向感知器、多层感知器和反向传播。

从那里,它回到代码。Géron 教授如何训练多级感知器(MLP)和深度神经网络(DNN)。有一整节是关于训练深度神经网络的,包括优化技术,如重用训练层,加速优化的方法,以及通过正则化减少训练数据集过度拟合的技术。

Géron 随后介绍了在多台服务器上分发 TensorFlow 的实用性——这是训练任何实际模型的必要组成部分。他接下来深入研究了卷积神经网络(CNN)和递归神经网络(RNN 的)——两种最常见的深度学习配置。

然后,他引入了自动编码器的概念——可以有效降低数据维度的神经网络。他在这本书的结尾简要介绍了强化学习的广阔领域。

新版本即将推出

这本书的新版本将于 2019 年 10 月发布。它还不可用,但看内容,似乎在经典的 ML 部分进行了一点修剪,并对深度学习进行了实质性的升级。新版在转向 Tensorflow 之前,增加了一个关于神经网络库 Keras 的部分,并增加了关于自然语言处理、生成对抗网络和大规模部署 Tensorflow 模型的内容。

总结

绝对值得等待新版。虽然经典 ML 的基础没有太大变化,但看起来“用 Scikit-Learn 和 TensorFlow 进行机器学习”得到了很好的升级,似乎有一堆更新的内容——在这个领域,两年(上一版于 2017 年出版)是一生的时间!

如果你在寻找能让你成为数据科学家的“那一本书”,这本书可能不是。但是,如果您对编码很熟悉,并且希望了解数据科学家是如何思考和工作的,“使用 Scikit-Learn 和 TensorFlow 进行机器学习实践”是对该领域的一个很好的介绍!

最初发表于【https://flatironschool.com】

书名越来越长了吗?

原文:https://towardsdatascience.com/book-titles-are-getting-longer-1c341fbd4829?source=collection_archive---------17-----------------------

印刷世界趋势的数据分析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

photo from Pixabay

几周前,我注意到受欢迎的文学代理人宋东元表达了我一度怀疑的东西,的书名越来越长。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这一趋势似乎很有趣,因为其他媒体似乎正朝着相反的方向发展。例如,我们知道的歌名 s 随着我们注意力的持续时间而缩短。为什么文学小说的世界会有所不同?

为了调查这一说法,我使用《纽约时报》的书籍 AP 收集了自 2011 年以来所有畅销书的数据。下面我将展示更长的标题只是图书世界的众多趋势之一。

小说标题真的越来越长了

为了证实书名确实越来越长,我从《纽约时报》的纸质和电子书小说列表中抓取了所有可用的畅销书。然后我统计了一下这些小说标题的字数。下面是 2011 年 2 月以来每个月小说标题平均字数的剧情。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

很明显,自 2016 年以来,有明显的上升趋势。小说标题从平均 2.5 个单词增加到现在的近 3 个。

为了再次确认这一点,我还计算了小说标题中的字母数量。这里,回归线再次显示出明显的上升趋势。现在的小说标题很可能是 14 个字母,而不是 12 个。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

为什么标题越来越长?

仔细观察最长的书名,我注意到它们中的许多都来自著名的系列——最引人注目的是“有龙纹身的女孩”系列。以下是标题中包含 7 个或 7 个以上单词的畅销书列表。其中许多是其他成功作品的续集或前传。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作为一个既定系列的一部分,这些标题需要参考过去的工作,使它们不那么简洁。此外,不是出自著名三部曲的小说通常仍然是由知名作家创作的(如尼尔·盖曼、弗雷德里克·巴克曼)。卖给现有的读者群意味着这些作者能够摆弄他们的书名,变得更有创造性。

我怀疑向电子阅读器和网上购买的转变也影响了小说的命名。在网上,远离拥挤的书架,读者不必一次阅读多本书。他们不需要等待一些有力的标题来吸引眼球。此外,从我公认的轶事经验来看,书店和机场售货亭这些天似乎主要出售非小说类书籍。另一方面,小说可以自由的小众和怪异,就像卖小说的互联网一样。

小说标题还告诉了我们什么?

正如我几年前注意到的,最受欢迎的小说似乎都围绕着一个迷人的词——“女孩”。根据 2019 年的更新数据,似乎“女孩”仍然是销量最高的一个词。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Word Cloud of the most popular terms in fiction book titles

然而,这并不意味着小说标题不会随着时间的推移而改变。在 2018 年,“黑暗”和“死亡”等词的流行程度赶上了“女孩”。像孩子的名字一样,最流行的名字往往会演变并反映当前的情绪。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

“深色”是 2016 年后的趋势

2016 年后,小说标题的基调似乎发生了微妙但明显的转变。我们可以通过绘制特定单词每年的流行度来看出这一点。例如,“爱”最近已经失宠,而“夜”却成了时尚。同样,在书名中,“光”为“暗”让路。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此外,出于我无法理解的原因,含有“死亡”一词的小说似乎在偶数年很受欢迎。似乎像巨人的一样,死神不喜欢奇数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

非小说类书籍的长度是一样的

我应用于小说畅销书的分析可以很容易地应用于非小说畅销书。下面我画出了每年的字数/非小说标题。右边是每年的信件/标题数量。正如我们所见,没有明显的延长趋势。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

left — number of words in nonfiction titles per year : right — number of letters in nonfiction titles per month

鉴于非小说类作品很少成为一个系列的一部分,而且它们仍然在大商店里卖得很好,这并不令人惊讶。事实上,非小说类书籍与小说类书籍还有其他显著的不同。例如,下面是小说和非小说标题的字数直方图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

left — histogram of Fiction Titles : right — histogram of non-fiction titles

很明显,非小说类畅销书每个标题的字数分布更广。事实上,许多书的封面上只有一个词(例如,“Bossypants”,“Sapiens”,“Moneyball”,“Hunger”,“Freakonomics”)。

非小说类书籍的其他趋势

检查非小说标题中最受欢迎的词,我们看到重点较少是神秘事件,而更多是政治家的传记。这解释了“美国”和“总统”等词的常见用法(如“特朗普”和“肯尼迪”)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Word Cloud of the most popular words in Nonfiction Book Titles

或许正是因为这种政治品质,非小说类的标题在后特朗普时代变得更加负面。随着时间的推移,绘制这些头衔的平均情绪(或积极性),我们看到 2016 年后急剧下降。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

average sentiment of non-fiction titles per year (<0 has negative sentiment)

事实上,一些最负面的书名围绕特朗普时代的主题,并在过去 2 年出版。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Some example of political books with negative titles in the past 2 years.

其他发现——女性阅读更多的小说

美国国家艺术基金会的调查数据表明,女性阅读更多的小说作品,而男性则更关注非小说类书籍。在研究了小说类和非小说类畅销书的区别之后,我很清楚这个观察是正确的。

这一点最好通过比较 NYT 对他们畅销书的描述来看。我们先看看小说书。

小说词汇云

下面我列出了小说描述中最常见的词语。左边的云仅从图中删除了“The”和“a”。在右边,所有常见的英语单词都被删除,只留下独特的单词。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Word Clouds for the Descriptions of Fiction Bestsellers

很明显,畅销小说往往是’ 系列丛书之一’ ‘,极有可能是’ 三部曲 ‘。通常涉及一个’ 女人’——要么是一个’ 律师 ,要么是一个’ 代理人 。或者更好一点,一个’ 神探 ‘。在’ 她的 ‘旅途中,我们的主角将有可能’ 调查 ‘一个’ 杀手 ‘。也许是一个’ 的案子 ‘一个’ 的被害人的朋友 ‘或’ 的旧爱 ‘。在这个过程中,她将’ ‘回归到’ ‘到’‘,挖掘’ 秘密 ‘,’ 发现凶手 ‘甚至可能找到’【T75]她甚至可能会在这个过程中找到一个新的家庭。

非虚构

非小说类畅销书的相同词云如下图。在左边,所有主要的英语停用词都被删除。在右边,它们被包括在内,但是“the”和“a”被删除。

*外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传**外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Word Clouds for the Descriptions of Non-Fiction Bestsellers*

在非小说中,主角似乎更有可能是男性。 他的 ‘故事很可能是一个’ 回忆录 ‘,一个’ 传记 ‘或者干脆是他一生的’ '记述 ‘可能他是一个’ 美国总统 ‘。又或许他是一个’ 记者 ‘或’ 喜剧演员 ‘谁只想’ 告诉 '他的’生活故事* '对于第一个*‘时间。他的书很可能会是’ '幽默的 ‘和’ 政治的 ‘。它可能是’ 讨论死亡 ‘,’ 关系 ‘,’ 家庭 ‘或’ 战争 ‘。不管是哪种方式,他都一定会挥洒大量笔墨看着’ '背影 ‘,看着他的’‘,讲述他的’ '个人故事 ‘,也许,还会抱怨他的’ 母亲 '。**

最后的想法

传统观点认为,媒体主要是由消费者塑造的。尽管如此,阅读小说的人口比例仍在下降,而且越来越以女性为主。此外,互联网颠覆了旧的发行模式,为文学界的所有参与者创造了新的激励。这导致了一些有趣的趋势。小说标题越来越长,而非小说标题却没有。非小说类书籍变得越来越负面,而小说类书籍的趋势更加微妙(黑暗书籍的扩散)。最后,男性和女性在阅读习惯上似乎有所不同。随着我们在文化和政治上的分裂,我们的印刷媒体也应该效仿。

线性代数到深度学习 5 本书

原文:https://towardsdatascience.com/books-on-machine-learning-c99e77140270?source=collection_archive---------16-----------------------

我最喜欢的学习机器学习的书

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Mads Schmidt Rasmussen on Unsplash

一些关于机器学习的最好的书籍在网上免费发布。我甚至认为,只要有一台笔记本电脑和互联网,你就可以学习任何关于它的知识——从最基本的线性代数到最先进的深度学习,甚至是强化学习。

在过去的几个月和几年里,通过利用网上所有的资源,我学到了很多东西。事实上,我所知道的关于机器学习的几乎一切都要归功于令人敬畏的计算机科学社区,当谈到分享知识时,他们是如此开放。现在我想回报一些东西。

如果你想研究机器学习或深度学习,如果你已经熟悉了基础知识,这篇博客中的书是你可以得到的最好的一些书。此外,这并不意味着是一个完整的列表,而是各种主题的精选资源的集合。有一本关于线性代数的书。一本是关于统计和概率的书。一个关于统计机器学习。最后两个关于深度学习。我尽可能地提供了链接。他们来了。

谢尔登·埃克斯勒正确地完成了线性代数

读这之前你需要的只是高中数学。在此基础上,这本书向你介绍了机器学习所需的向量和矩阵思维,甚至更多的深度学习。即使你不能马上明白为什么你会需要这些东西,线性代数确实是不可或缺的。我认为这本书让我很容易坚持下去。我在网上找到的版本有点旧,但这在这里真的无关紧要。

约翰·赖斯的数理统计和数据分析

概率和统计属于同一范畴。所以这本书教你们两个,前几章讲的是概率相关的内容,比如随机变量和分布,后几章讲的是估计和假设检验,我认为这是统计学的内容。由于机器学习本质上应用于概率和统计,了解它们很重要。

Trevor Hastie 等人的《统计学习的要素》

这绝对是关于经典机器学习及其所有常用算法的最全面、最有用的书籍之一。同一本书有一个稍微简化的版本,叫做统计学习导论,这是关于机器学习的第一本很棒的书。如果 ESL 的书太复杂或者 ISL 的书太简单的话,你可以把它们并排使用。

神经网络和深度学习,作者迈克尔·尼尔森

这本书带你从头开始学习神经网络,它做得非常好。它对反向传播的解释是我见过的最好的解释。这本书还涵盖了卷积神经网络(CNN),虽然没有那么广泛。这本书最大的好处是让你为下一本书做好准备,这本书要复杂得多。

Ian good fellow 等人的深度学习

如果上一本书相当于在深度学习的世界里学习如何骑自行车,这本书会教你如何驾驶卡车。它非常数学化,包含的内容比上一个多得多,包括 rnn 和许多我还远远不理解的更高级的东西。所以我也只看了一部分。无论如何,它可以说是神经网络方面最重要的书。第二部分特别有趣,因为它介绍了深度学习中使用的许多强大的架构。虽然很高级,但只要有一点数学天赋和毅力,这是可行的。

希望这些书可以帮助你更好地理解机器是如何学习的,无论你的水平或背景如何。但是如果你从零开始,你应该从线性代数和概率/统计开始,然后继续做机器学习,最后是深度学习。另一条建议是,一旦你已经掌握了基本知识,你就不需要从头到尾地阅读书籍,可以随意挑选那些你认为相关或感兴趣的章节。而如果某个东西还是太超前,就倒回去几章,以后再来讲。不要让它使你气馁。即使机器学习不是微不足道的,但留下来的想法和概念,就像许多神经网络一样,真的没有那么难。只需要一点数学和基本的编程技能就可以开始了。从这里开始,真的没有什么可以阻止你进行前沿的机器学习。

使用 Python 提高效率和处理 Excel 文件

原文:https://towardsdatascience.com/boost-your-efficiency-and-process-excel-files-with-python-cae650c85d6c?source=collection_archive---------8-----------------------

使用 Python 加载、转换、修改和保存 Excel 文件,以改进您的报告流程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

做数据工作,就会接触 excel。即使你自己不使用它,你的客户或同事也会使用它。Excel 的伟大之处就在于它本身:适用于较小数据集的表格计算。但是我一直很讨厌那种有一百万行几百列的 excel 表格。这种工作簿速度慢,往往在一些计算后崩溃。所以我开始使用 python 来处理大型 excel 文件,这提供了另一个很大的优势:你可以创建可重复的代码并提供文档。让我们跳进来吧!

用 Python 读取 Excel 文件

我们要处理的文件包含近一百万行和 16 列:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Python 提供了read_excel()来读取 Excel 文件作为数据帧:

import pandas as pd
import numpy as np
df = pd.read_excel(...\\Excel-Tutorial.xlsx')

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如你所见,到目前为止数据看起来很干净,但我们的列标题似乎是错误的。许多 excel 地图包含标题或其他信息来引导读者。我们可以跳过这部分,定义一个标题行:

df = pd.read_excel('…\\Excel-Tutorial.xlsx', header=[1]).reset_index()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

参数header=[1]指定我们希望使用 excel 表格中的第二行作为标题。跳过所有以前的行。

用熊猫做一些计算

营销部门的一个典型问题可能是,我们每年在不同国家的销售额是多少:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们在 86 毫秒内完成了这个计算。用 Python 处理 Excel 文件的一个很大的优点是,任何类型的计算都比在 Excel 中快得多。操作越复杂,速度优势越大。

另一个需求可能是销售部门需要按年份和类别分组的每个国家的数据。因为他们要向全国市场提供数据,我们必须将计算结果保存在不同的工作表中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

将结果保存为 Excel

下一步,我们想再次将文件保存为 Excel 格式,以便提供给销售和市场部。我们将创建一个pd.ExcelWriter对象并创建不同的工作表:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

很容易,不是吗?让我们看看新创建的工作簿:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如你所见,我们的数据帧被正确保存到指定的工作表中。在我们把好的结果发给两个部门后,第二天我们就收到了一封邮件:他们要求一些格式化和可视化。因为我们每个月都必须转换这种数据,所以我们决定也用 Python 来执行这些任务。

格式化和可视化

要添加格式和可视化,我们必须再次创建一个 writer 对象:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如您所见,代码的第一部分与第一个示例中的相同。我们创建一个 writer 对象。xlsxwriter让我们访问 Excel 的功能,如图表和格式。为了访问这个特性,我们需要获得工作簿对象workbook = writer.book和工作表对象worksheet = writer.sheet['Sales_Sums']。在本例中,我们将在第一张纸上进行修改。我们添加一个图表,指定数据的范围(=Sales_Sums!$B$2:$B$7')并将其添加到工作表的单元格A9中。

同样,我们为销售数据添加格式。我们在范围B2:B7上添加了一个 3 色标,以在视觉上突出显示低值或高值。我们还调整了第一列和第二列的宽度worksheet.set_column(0,1,30)。我们还格式化了销售数据的列标题,并将其重命名为2019 Sales Data。最后一步,我们保存文件:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个结果比 Excel 好得多,提供了一个很大的优势。下个月我们只需点击一下就能复制出完全相同的文件。

结论

Python 非常适合处理 Excel 文件。您可以更轻松地处理大文件,创建可重复的代码,并为您的同事提供文档。我们还看到了我们可以轻松访问 Python 的高级功能。您可以自动化整个报告流程。

延伸阅读:

创建图表:

[## 使用 Pandas 和 XlsxWriter 创建 Excel 图表

使用 Pandas 和 XlsxWriter 创建带有图表的 Excel 文件的介绍。

pandas-xlsxwriter-charts . readthedocs . io](https://pandas-xlsxwriter-charts.readthedocs.io/)

带有熊猫透视的 Excel 报表:

[## 从熊猫数据透视表生成 Excel 报表

上一篇数据透视表文章描述了如何使用 pandas pivot_table 函数在一个

pbpython.com](https://pbpython.com/pandas-pivot-report.html)

用 Python 格式化 Excel 文件:

[## 教程 2:向 XLSX 文件添加格式

在上一节中,我们使用 Python 和 XlsxWriter 模块创建了一个简单的电子表格。这转换了…

xlsxwriter.readthedocs.io](https://xlsxwriter.readthedocs.io/tutorial02.html)

如果您喜欢中级数据科学,并且尚未注册,请随时使用我的推荐链接加入该社区。

提升您的图像分类模型

原文:https://towardsdatascience.com/boost-your-image-classifier-e1cc7a56b59c?source=collection_archive---------12-----------------------

提高分类器准确性的技巧

图像分类被认为是一个即将解决的问题。有趣的部分是当你不得不使用你所有的狡猾来获得额外的 1%的准确性。我在参加 Analytics Vidhya 主办的 英特尔场景分类挑战赛时遇到过这样的情况。我非常喜欢这场比赛,因为我试图从我的深度学习模型中提取所有的汁液。下面的技术通常可以应用于手头的任何图像分类问题。

问题

问题是将给定的图像分为 6 类

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Data Classes

我们收到了来自世界各地的各种自然场景的 ~25K 图片

渐进调整大小

它是一种技术,在训练 CNN 从较小到较大的图像尺寸的同时,顺序地调整所有图像的尺寸。渐进调整在他精彩的 fastai 课程“程序员实用深度学习*”中有简要描述。使用这种技术的一个很好的方法是使用较小的图像大小(比如 64x64)训练一个模型,然后使用该模型的权重在 128x128 等大小的图像上训练另一个模型。每个较大比例的模型在其架构中结合了先前较小比例的模型层和权重。*

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Progressive Resizing

法斯泰

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

fastai 库是一个强大的深度学习库。如果 FastAI 团队发现一篇特别有趣的论文,他们会在不同的数据集上进行测试&研究如何对其进行调整。一旦成功,它将被纳入他们的图书馆,并随时可供其用户使用。该库包含许多内置的艺术(SOTA)技术。fastai 建立在 pytorch 类型的基础上,对于大多数任务(如果不是所有任务的话)都有很好的默认参数。一些技术是

  1. 循环学习率
  2. 单周期学习
  3. 结构化数据的深度学习

合理权重初始化

在检查可用的标准数据集时,我偶然发现了 Places365 数据集。Places365 数据集包含来自 365 个场景类别的 180 万幅图像。挑战中提供的数据集与该数据集非常相似,因此在该数据集上训练的模型已经学习了与我们自己的分类问题相关的特征。因为我们问题中的类别是 Places365 数据集的子集,所以我使用了用 places365 权重初始化的 ResNet50 模型。

型号砝码以 pytorch 砝码的形式提供。下面的实用函数帮助我们将数据正确地加载到 fastai 的 CNN 学习器中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

混合增强

混合增强是一种增强类型,其中我们通过两个现有图像的加权线性插值来形成新图像。我们取两幅图像,根据它们的张量对它们进行线性组合。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mixup Augmentation

λ是从贝塔分布中随机抽样的。尽管论文的作者建议使用λ=0.4,但是 fastai 库中的默认值被设置为 0.1

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Mixup Augmentation in fastai

学习速率调谐

学习率是训练神经网络最重要的超参数之一。 fastai 有办法找出一个合适的初始学习率。这种技术被称为*循环学习率,*我们以较低的学习率进行试验&以指数方式增加学习率,记录下学习过程中的损失。然后我们绘制损失与学习率的关系图&选择损失最大的学习率。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

LR finder in fastai

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Loss is steepest at 1e-06

该库还为我们自动处理带重启(SGDR)的随机梯度下降。在 SGDR,学习率在每个时期开始时被重置为最初选择的值,该值随着时期减少,如在余弦退火中。这样做的主要好处是,由于学习率在每个时期开始时被重置,学习者能够跳出局部最小值或可能陷入的鞍点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

SGDR in fastai

一般敌对网络

gan 是 Ian Goodfellow 在 2014 年推出的。gan 是由两个网络组成的深度神经网络架构,两个网络相互对立。GANs 可以模拟任何数据分布。他们可以学习生成与任何领域的原始数据相似的数据——图像、语音、文本等。我们使用 fast.ai 的 Wasserstein GAN 实现来生成更多的训练图像。

GANs 涉及训练两个神经网络,一个称为生成器,它生成新的数据实例,而另一个称为鉴别器评估它们的真实性,它决定每个数据实例是否属于实际的训练数据集。你可以在这里查阅更多关于它的

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

GAN generated sample images

去除混淆图像

训练神经网络的第一步是根本不接触任何神经网络代码,而是从彻底检查你的数据开始。这一步至关重要。我喜欢花大量的时间(以小时为单位)浏览数以千计的例子,理解它们的分布并寻找模式。

-安德烈·卡帕西

正如安德烈·卡帕西所说,“数据调查”是重要的一步。根据数据调查,我发现有一些图像包含 2 个或更多的类。

方法 1

使用以前训练的模型,我对整个训练数据进行预测。然后丢弃那些预测不正确但概率得分大于 0.9 的图像。这些是模型明显分类错误的图像。深入调查后,我发现这些图片被贴标签的人贴错了标签。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Confusing Images

我还从训练集中删除了那些预测概率在 0.5 到 0.6 范围内的图像,理论上图像中可能存在不止一个类别,因此模型为每个类别分配了大致相等的概率。通过观察这些图像,这个理论最终被证明是正确的

方法 2

fast.ai 提供了一个方便的小部件“图像清理器小部件”,允许您为模型清理和准备数据。ImageCleaner 用于清理不属于数据集的图像。它连续渲染图像,并让您有机会从文件系统中删除该文件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

测试时间增加

测试时间增强包括获取原始图像的一系列不同版本,并通过模型传递它们。然后从不同版本计算平均输出,并作为图像的最终输出。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Test Time Augmentation in fastai

以前也使用过一种类似的技术,叫做 10 作物测试。我第一次在 ResNet 报纸上读到关于 10 作物技术的报道。10 裁剪技术包括沿着四个角裁剪原始图像,沿着中心裁剪一次,得到 5 个图像。对它的倒数重复同样的操作,得到另外 5 幅图像,总共 10 幅图像。然而,测试时间增加比 10 作物技术更快

组装

机器学习中的集成是一种使用多种学习算法来获得比单一算法更好的预测性能的技术。组装效果最好

  1. 组成模型具有不同的性质。例如,将 ResNet50 和 InceptionNet 组合起来会比将 ResNet50 和 ResNet34 组合起来有用得多,因为它们在本质上是不同的
  2. 成分模型具有较低的相关性
  3. 改变每个模型的训练集;所以会有更多的变化

在这种情况下,我通过选择最大发生类来整合所有模型的预测。如果有一个以上的类出现次数最多,我会随机选择其中一个类。

结果

公共排行榜—排名 29 (0.962)

私人排行榜—排名 22 (0.9499)

结论

  1. 渐进调整大小是一个很好的开始。
  2. 必须花时间理解你的数据并将其可视化。
  3. 一个伟大的深度学习库,如 fastai,带有合理的初始化参数,肯定会有所帮助。
  4. 尽可能随时随地使用迁移学习,因为它通常会带来好的结果。最近,深度学习&迁移学习甚至被应用于结构化数据,所以迁移学习绝对应该是首先尝试的。
  5. 像混音增强,TTA,循环 LR 等最先进的技术肯定会帮助你提高 1%或 2%的准确率。
  6. 始终搜索与您的问题相关的数据集&如果可能的话,将它们包含在您的训练数据中。如果存在在这些数据集上训练的深度学习模型,则使用它们的权重作为模型的初始权重。

增压算法解释

原文:https://towardsdatascience.com/boosting-algorithms-explained-d38f56ef3f30?source=collection_archive---------2-----------------------

理论、实现和可视化

与许多关注单个模型完成的高质量预测的 ML 模型不同,boosting 算法试图通过训练一系列弱模型来提高预测能力,每个弱模型补偿其前任的弱点。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

One is weak, together is strong, learning from past is the best

要理解 Boosting,关键是要认识到 boosting 是一个通用算法,而不是一个特定的模型。Boosting 需要您指定一个弱模型(例如回归、浅层决策树等),然后对其进行改进。

解决了这个问题,是时候探索弱点的不同定义和相应的算法了。我将介绍两种主要算法:自适应增强(AdaBoost)和梯度增强。

1.adaboost 算法

1.1 弱点的定义

AdaBoost 是一种专门为分类问题开发的提升算法(也称为离散 AdaBoost)。弱点由弱估计量的误差率来识别:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在每次迭代中,AdaBoost 识别错误分类的数据点,增加它们的权重(在某种意义上,减少正确点的权重),以便下一个分类器将额外注意使它们正确。下图说明了权重如何影响简单决策树桩(深度为 1 的树)的性能

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

How sample weights affect the decision boundary

现在确定了弱点,下一步是找出如何组合模型序列,使整体随着时间的推移变得更强。

1.2 伪代码

研究人员提出了几种不同的算法。这里我将介绍最流行的方法 SAMME,这是一种处理多分类问题的特定方法。(【朱,】邹,S. Rosset,T. Hastie,“多级 AdaBoost”,2009 )。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AdaBoost 使用增强的样本权重训练一系列模型,根据误差为各个分类器生成“置信度”系数α。低误差导致大α,这意味着在投票中更高的重要性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

the size of dots indicates their weights

1.3 Python 中的实现

Scikit-Learn 通过 SAMME (多分类的特定算法)提供了 AdaBoost 的一个很好的实现。

参数: base_estimator :对象,可选(默认=无)

构建增强系综的基本估计量。如果None,则基本估计量为DecisionTreeClassifier(max_depth=1)

n_estimators :整数,可选(默认值=50)

增强终止时估计器的最大数量。在完美匹配的情况下,学习过程会提前停止。

learning_rate : float,可选(默认=1。)

学习率将每个分类器的贡献缩小learning_rate

算法 : {‘SAMME ‘,’ SAMME。R’},可选(default='SAMME。r’)

如果是萨姆。那就用 SAMME。r 实升压算法。base_estimator必须支持类别概率的计算。如果是“SAMME ”,则使用 SAMME 离散增强算法。

random_state : int,RandomState instance 或 None,可选(默认为 None)

2.梯度推进

2.1 弱点的定义

梯度推进解决问题的方式有所不同。梯度增强不是调整数据点的权重,而是关注预测和实际情况之间的差异。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

weakness is defined by gradients

2.2 伪代码

梯度增强需要微分损失函数,并且适用于回归和分类。我将使用一个简单的最小二乘法作为损失函数(用于回归)。分类的算法也有同样的想法,但是数学稍微复杂一些。( J. Friedman,贪婪函数逼近:梯度推进机)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Gradient Boosting with Least Square

以下是弱估计量 H 如何随时间推移而建立的可视化。每次我们将新的估计量(在这种情况下,max_depth =3 的回归树)拟合到损失梯度(在这种情况下,LS)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

gradient is scaled down for visualization purpose

2.3 Python 中的实现

同样,你可以在 Scikit-Learn 的中找到渐变提升函数。

回归:

损失 : {'ls ‘,’ lad ‘,’ huber ',‘分位数’ },可选(默认='ls ')

分类:

损失 : { ‘偏差’,‘指数’ },可选(默认= ‘偏差’)

其余的都一样

learning_rate : float,可选(默认值=0.1)

n_estimators : int(默认值=100)

梯度增强对过拟合相当稳健,因此较大的数量通常会产生更好的性能。

子样本:浮点型,可选(默认值=1.0)

用于拟合单个基础学习者的样本分数。如果小于 1.0,这将导致随机梯度增强。subsample与参数n_estimators交互。选择subsample < 1.0会导致方差减少,偏差增加。

标准:字符串,可选(default="friedman_mse ")

衡量分割质量的函数。

优势和劣势

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 易于解释:boosting 本质上是一个集合模型,因此很容易解释它的预测
  2. 预测能力强:通常 boosting > bagging (random forrest)>决策树
  3. 适应过度拟合:见本文
  4. 对异常值敏感:由于每个弱分类器都致力于修复其前任的缺点,因此该模型可能会过于关注异常值
  5. 难以扩展:因为每个评估器都是建立在它的前辈之上的,所以这个过程很难并行化。

总结

助推算法代表了一种不同的机器学习视角:将一个弱模型变成一个更强的模型,以修复其弱点。现在您已经了解了 boosting 的工作原理,是时候在实际项目中尝试一下了!

升压和 AdaBoost 解释清楚

原文:https://towardsdatascience.com/boosting-and-adaboost-clearly-explained-856e21152d3e?source=collection_archive---------2-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Time to visualize the full iceberg !

直观的解释

助推技术最近在 Kaggle 竞赛和其他预测分析任务中有所上升。我会尽量解释清楚 Boosting 和 AdaBoost 的概念。最初的文章发表在我的个人博客上:https://maelfabien.github.io/machinelearning/adaboost/

在本文中,我们将讨论:

  • 快速回顾一下装袋
  • 装袋的极限
  • 增压的详细概念
  • 计算中的升压效率
  • 代码示例

我最近为我正在关注和/或构建的一些教程创建了一个专门的 GitHub 库。我还添加了 ML recaps:

https://github.com/maelfabien/Machine_Learning_Tutorials

一、装袋的局限性

接下来,考虑一个二元分类问题。我们要么将观察分类为 0,要么分类为 1。这不是文章的目的,但为了清楚起见,让我们回忆一下装袋的概念。

Bagging 是一种代表“引导聚合”的技术。本质是选择 T 个 bootstrap 样本,在这些样本中的每一个上安装一个分类器,并并行训练模型。通常,在随机森林中,决策树是并行训练的。所有分类器的结果然后被平均到一个装袋分类器中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Formula for a Bagging Classifier

这个过程可以用下面的方式来说明。让我们考虑 3 个分类器,它们产生一个分类结果,可能是对的,也可能是错的。如果我们绘制 3 个分类器的结果,那么在某些区域分类器会出错。这些区域用红色表示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Example case in which Bagging works well

这个例子非常完美,因为当一个分类器错误时,另外两个是正确的。通过投票分类器,你获得了很大的准确性!但是正如你可能猜到的,当所有的分类器在相同的区域出错时,也有 Bagging 不能正常工作的情况。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

出于这个原因,发现助推背后的直觉如下:

  • 我们需要依次训练模型,而不是训练并行模型
  • 并且每个模型应该关注先前分类器表现差的地方

二。升压简介

a.概念

上述直觉可以这样描述:

  • 在整套设备上训练 h1 型
  • 使用 h1 表现不佳的区域的夸大数据来训练模型 h2
  • 用 h1 ≠ h2 的区域的夸大数据训练模型 h3

我们可以按顺序训练模特**,而不是按平行训练模特。这就是助推的本质!**

Boosting 通过随时间调整误差度量来训练一系列低性能算法,称为弱学习器。弱学习者是错误率略低于 50%的算法,如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A weak classifier, achieving just under 50% error rate

b.加权误差

我们如何实现这样的分类器?通过在整个迭代中加权误差!这将给予先前分类器表现不佳的区域更多的权重。

让我们考虑 2D 图上的数据点。他们中的一些会被很好地分类,其他的不会。通常,当计算错误率时,归因于每个错误的权重是 1/n,其中 n 是要分类的数据点的数量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unweighted Errors

现在,如果我们对误差施加一些权重:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Weighted Errors

您现在可能会注意到,我们对没有很好分类的数据点给予了更多的权重。下面是加权过程的一个示例:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Example of weighting process

最后,我们希望构建一个强大的分类器,可能如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Strong Classifier

c.树桩

你可能会问,一个人应该实现多少个分类器才能让它正常工作?每一步是如何选择每个分类器的?

答案就在所谓树桩的定义里!树桩定义了一个一级决策树。主要思想是,在每一步,我们想找到最佳的树桩,即最佳的数据分割,使总误差最小化。你可以把一个树桩看做一个测试,其中的假设是,位于一侧的所有东西都属于 1 类,位于另一侧的所有东西都属于 0 类。

树桩可能有多种组合。让我们看看在这个简单的例子中有多少种组合?让我们花一分钟来数一数。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3 data points to split

嗯,答案是……12!这可能看起来令人惊讶,但却很容易理解。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

12 Stumps

我们可以进行 12 种可能“测试”。每条分隔线边上的“2”简单地表示这样一个事实,即在一边上的所有点可能属于类 0 或类 1。因此,有两个测试嵌入其中。

在每次迭代 t 时,我们将选择 ht,即通过最大程度地降低总体错误率来最好地分割数据的弱分类器。回想一下,差错率是一个修改后的差错率版本,它考虑了之前介绍的内容。

d.寻找最佳分割

如上所述,通过在每次迭代 t 识别最佳弱分类器 ht,通常是具有 1 个节点和 2 个叶子(树桩)的决策树,找到最佳分裂。假设我们试图预测一个想借钱的人是否会是一个好的还款人:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Identifying the best split

在这种情况下,在时间 t 的最佳分割是保留支付历史,因为这种分割产生的加权误差最小。

请注意,像这样的决策树分类器实际上可能比简单的树桩更深。这将是一个超参数。

e.组合分类器

下一个逻辑步骤是将分类器组合成一个符号分类器,根据一个点将位于边界的哪一侧,它将被分类为 0 或 1。这可以通过以下方式实现:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Combining classifiers

你认为有可能改进分类器的方法吗?

通过在每个分类器上增加权重,避免对不同的分类器给予相同的重要性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

AdaBoost

f.包装它

让我们用一小段伪代码来总结一下到目前为止我们所介绍的内容。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pseudo-Code

需要记住的关键要素是:

  • z 是一个常量,它的作用是将权重归一化,使它们加起来等于 1!
  • αt 是我们应用于每个分类器的权重

我们完事了。这个算法叫做 AdaBoost 。为了完全理解所有的升压方法,这是需要理解的最重要的算法。

三。计算

Boosting 算法训练起来相当快,这很好。但是既然我们考虑了每一个可能的残肢并且递归地计算指数,为什么它们训练起来很快呢?

好吧,这就是奇迹发生的地方。如果我们适当地选择αt 和 Z,那么在每一步应该改变的权重简化为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Weights after choice of α and Z

这是一个非常强的结果,并且它与权重应该随着迭代而变化的说法不矛盾,因为被错误分类的训练样本的数量下降了,并且它们的总权重仍然是 0.5!

  • 没有要计算的 Z
  • 没有α
  • 无指数

还有另一个技巧:任何试图分割两个分类良好的数据点的分类器都不会是最佳的。甚至不需要计算。

四。我们来编码吧!

现在,我们将通过一个手写数字识别的简单例子来快速了解如何在 Python 中使用 AdaBoost。

现在让我们加载数据:

x 包含长度为 64 的数组,这些数组是简单的扁平 8×8 图像。这个数据集的目的是识别手写数字。让我们来看看一个给定的手写数字:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

8x8 image of a handwritten “4”

如果我们坚持深度为 1(树桩)的决策树分类器,下面是如何实现 AdaBoost 分类器:

它应该会取得 26%左右的成绩,这一成绩还有很大的提高空间。关键参数之一是顺序决策树分类器的深度。准确性如何随着决策树的深度而提高?

在这个简单的例子中,深度为 10 时达到最高得分,准确率为 95.8%。

四。结论

已经讨论过 AdaBoost 是否过拟合。最近,它被证明在某些点上过度拟合,人们应该意识到这一点。AdaBoost 也可以用作回归算法。

AdaBoost 广泛用于人脸检测,以评估视频中是否有人脸。关于这个话题我很快会再做一篇文章!在下一篇文章中,我们还将介绍渐变提升:)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我希望这篇文章清楚地介绍了 AdaBoost 的概念,并且现在对你来说已经很清楚了。如果您有任何问题或评论,请不要犹豫,发表评论。

参考资料:

[1]https://www . coursera . org/lecture/ml-classification/learning-boosted-decision-stumps-with-AdaBoost-bx5YA

[2]https://ru . coursera . org/lecture/ml-class ification/learning-boosted-decision-stumps-with-AdaBoost-bx5YA

[3]https://www.youtube.com/watch?v=UHBmv7qCey4

使用人工智能提升我们的教育系统和劳动力

原文:https://towardsdatascience.com/boosting-our-educational-system-and-our-workforce-using-ai-a676afacb9cd?source=collection_archive---------24-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Ian Schneider on Unsplash

在任何国家,最重要的资源是人力资本。熟练的劳动力和运转良好的教育体系是高附加值服务的基础。随着人工智能的扩散,我们预计现有的工作实践将被打破,从而不仅创造新的机会,也带来新的挑战。

在过去的一年里,我们看到了很多预测。一些专家预测,在未来几年,大约 40%的工作岗位将会消失。其他人说人工智能革命将创造数百万个新岗位,其中一些甚至还没有被发明出来。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Image: World Economic Forum

这没有什么新鲜的。如果我们看一看银行推出自动柜员机时的情况,我们可以看到类似的模式。随着自动取款机的使用,许多人预测银行出纳员的时代将会结束。然而,统计数据显示并非如此。1985 年,美国有 6 万台自动取款机和 48.5 万名银行出纳员。2002 年,自动取款机的数量增加到 352,000 台,银行出纳员的数量增加到 527,000 名。

我们对此的解释是,许多人发现使用新机器很方便;因此,银行交易的数量开始激增。另一方面,银行开始关注更好的客户服务;从而为他们的分支机构增加更多的员工来处理更复杂的任务。我们也可以在今天的网上银行中看到这种模式。尽管一些银行关闭了几家分支机构,90%的交易都在网上进行,但美国银行员工的数量实际上是一样的。这证明了这不仅仅是自动化接管人类工作的问题。

将会发生什么的真相很可能介于两者之间。让我们明确一点,在大多数情况下,AI 不会接管工作,但它会自动执行该工作内的特定任务。实质上,就业市场将发生如下变化:

  • 有些工作将会过时,比如开车。无人驾驶汽车将能够在不需要人类司机的情况下运送人员和货物。
  • 有些工作受 AI 影响不会太大,比如护理。在护理行业中,人的因素仍然是至关重要的。
  • 一些新的工作将会被创造出来,比如器官创造者,他们的角色将会是从有机材料中开发器官和身体部分。
  • 许多现有的工作将永远改变。这些工作从低收入的工作如店员到高收入的工作如律师。人工智能将增加他们的任务,以使他们更安全,更快,更精确。

为了准备这场革命,我们需要帮助今天和明天的工人适应和获得新技能。我们可以通过实施以下措施来实现这一目标:

总人口

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by mauro mora on Unsplash

任何人工智能战略的第一步都是告知公众人工智能如何显著改善他们的生活质量。马耳他进行的一项调查。人工智能特别工作组发现,尽管 60%的受访者听说过人工智能,但他们并不了解它到底是什么。最初,只有 42%的受访者认为他们与人工智能系统互动过,但当他们面对具体的例子时,这一数字飙升至 80%。人们没有意识到他们正在使用人工智能,因为计算机系统没有明确提到它。因此,帮助人们理解如何识别人工智能系统是至关重要的。这样做,他们可以利用它的潜力,同时摆脱他们可能有的潜在恐惧。

为了解决这个问题, 政府将发起一场全国性的人工智能意识运动 ,旨在让人们放心,并帮助他们建立对人工智能的信任。

劳动力

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Josue Isai Ramos Figueroa on Unsplash

考虑到对就业市场的影响可能相当复杂, 将成立一个智囊团 来解决这些问题。它的作用将是开展研究,提出具体行动,在不同利益攸关方之间开展对话,制定培训路径和起草潜在的激励措施。这样做,我们希望确定未来的技能差距,并帮助受影响行业的工作人员提高技能。

弱势工人也将受益于国家再培训计划,该计划旨在通过短期课程和在职培训帮助他们发展新的数字技能。 还将支持雇主 利用外部培训计划。为此,我们将利用由欧洲社会基金(ESF)资助的€500 万英镑“投资于技能”方案。

教师

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Polargold on Unsplash

教育工作者是积极创造未来劳动力的人。正因为如此,他们必须 配备最好的人工智能工具 旨在协助他们(但不产生任何额外负担)。 人工智能组件将被引入课程 导致教学学位,从而确保新教师得到良好的装备。另一方面,知名教育工作者将被告知与他们有关的新发展,从而使他们意识到存在的不同机会。 各级培训也将提供 。希望从国外获得认证的教育工作者也可以通过 财务报销计划 获得认证。

每年,教育部计划组织一次关于人工智能教育的年度会议*,旨在实现这些目标,同时也庆祝良好的实践。通过国际专家的参与,先进的教学方法将立即传播给马耳他的教育工作者。*

学生

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Nicole Honeywill on Unsplash

还将推出针对学生及其家庭的不同举措。这些包括但不限于:

  • 人工智能家庭挑战赛 是一个家庭、学校和社区在导师的指导下共同努力使用人工智能解决挑战的计划。
  • AI 主题周末 和各年龄段孩子的动手工作坊。
  • 人工智能奥林匹克竞赛 旨在挑战学生使用人工智能解决现实世界的问题。获胜的队伍将参加全球人工智能大会

学校也将受益于个性化人工智能学习系统的部署。 教育 AI 系统 将管理义务教育阶段儿童的升学情况;定制他们的道路,为他们提供渐进的个性化学习曲线。

从管理的角度来看,人工智能将被引入所有级别,从而有助于数据的收集和汇总。然后, 人工智能管理系统 将预测分析趋势,帮助决策者做出明智的决定。这种系统的结果可能是多种多样的;例如推出新的儿童政策或干预措施,而这些政策或措施并没有在教育系统中取得应有的进展。当然,这项措施是一个长期目标,只有在教育工作者、工会、家长、学生和其他利益相关者的积极参与下才能实现。

所有这些项目都将由一个专门的工作组负责,该工作组的任务是在全国范围内将人工智能引入教育。

毕业生和研究生

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Logan Isbell on Unsplash

马耳他大学在 AI 方面已经走在前列。人工智能系起源于 90 年代初,在过去的几年里,其课程的学生人数大幅增加。然而,不管他们的研究领域是什么,毕业生理解人工智能的好处是至关重要的。正因为如此,马耳他大学将在不同院系开设的所有课程 中开设 AI 选修课。

此外,该大学将推出一个 人工智能平台 ,这是一个大学内部的跨学科实体,旨在促进不同院系和机构在未来几年的合作。这样一来,该大学将能够增加学生、学者、研究领域和专业的数量。它还将促进与公共和私人组织的合作,从而加速人工智能的意识。

马尔他艺术、科学和技术委员会(MCAST) ,也将在其所有课程中引入必要的人工智能组件。它还将在未来五年推出专门针对人工智能的研究生课程。**

教育部还将支持民办高等教育机构,帮助其 开发 AI 相关模块

为了保持这一势头,政府还将每年提供 50 个奖学金 来帮助更多的学生从事研究生水平的人工智能研究。此外,高等教育奖学金计划(TESS)仍将用于 支持海外留学学生 。此外,任何获得硕士或博士学位的人将有资格获得分别为期一年或两年的(收入的第一个€6 万英镑)。**

前方的路

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Xan White on Unsplash

还有很长的路要走。这将有助于我们缩小教育差距,确保每个人都充分发挥自己的潜力,支持处于危险中的儿童,重新培训我们的劳动力,塑造未来的专业人士。这并不容易,前方的路将带领我们探索未知的领域。可以肯定的是,我们正朝着把马耳他变成人工智能发射台的正确方向前进。我们不仅在努力用人工智能来塑造我们的岛屿,而且在未来的几年里也在努力塑造我们邻近的大陆。

AI 战略的完整文档可以在这里下载https://Malta . AI

AI 策略的总结可以在这里找到!

阿列克谢·丁力教授 是马耳他大学的 AI 教授。二十多年来,他一直在人工智能领域进行研究和工作,协助不同的公司实施人工智能解决方案。他的工作被国际专家评为世界级,并赢得了几个当地和国际奖项(如欧洲航天局、世界知识产权组织和联合国等)。他出版了几本同行评审的出版物,并且是马耳他的一部分。由马耳他政府成立的人工智能工作组,旨在使马耳他成为世界上人工智能水平最高的国家之一。

使用谷歌云数据目录推进数据治理之旅

原文:https://towardsdatascience.com/boosting-the-data-governance-journey-with-google-cloud-data-catalog-d67acc3e3ffb?source=collection_archive---------24-----------------------

关于 Google Cloud 中数据发现和元数据管理的思考

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Jesse Bowser on Unsplash

我们生活在信息时代,我相信没有人不同意公司现在可以访问前所未有的大量数据。因此,从可靠性角度管理数据资产自然变得越来越复杂。

我所说的管理数据资产是指:

  • 寻找负担得起的储物解决方案;
  • 使用最合适和最新的信息进行业务绩效和营销分析;
  • 授予消费者适当的访问权限;
  • 遵守隐私法规,如 GDPR、HIPAA 和 CCPA

—仅列出一些挑战。

我敢打赌,与数据管理相关的讨论是目前企业对话中的五大问题之一,我经常将它们视为更大问题的一部分,名为数据治理。不幸的是,尽管对数据治理的兴趣在过去几年中显著增长,但是没有一个通用的解决方案可以解决所有方面的问题。

在这条漫长的道路上,有指导公司的原则和最佳实践。然而,尽管人们可能会找到任何高层次的指导,但我已经认识到(自从我开始从事数据治理工作以来),对于大多数公司来说,确定合适的工具来解决每个元素仍然是一个挑战。话虽如此,让我们来看看常见的数据治理构建块:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

50 most common words compiled from a bunch Data Governance related documents I’ve read in 2019 (thanks jasondavies.com/wordcloud for the amazing word cloud generator!)

现在,请看看谷歌云数据目录的文档。可能你已经注意到了上图中突出显示的大多数单词在那里都用得很多。这是因为数据目录无疑由治理基础工具组成,这意味着选择合适的目录解决方案增加了数据治理之旅的成功机会。

让我们深入了解该产品如何适应数据治理环境!

数据发现

数据分布在多个数据源和格式上,从数据仓库到流媒体渠道……数据目录目前处于测试版,并原生集成到 3 个最常用的谷歌云数据处理和存储工具中: BigQueryPub/SubStorage

此处的“本地”是指,一旦您在组织的某个 GCP 项目中启用了数据目录,并向用户和/或服务帐户授予了正确的 IAM 角色,由这些服务管理的资产就可以被编入索引并通过目录被发现。BigQuery 数据集、表和视图以及发布/订阅主题会被自动索引,而存储桶需要用户定义的配置

随后,列出所有 BigQuery 资产就是执行搜索的问题,这可以通过使用 Data Catalog 的 UI 或 API 来完成。就像选择一个复选框一样简单,如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

BigQuery assets search in the Data Catalog UI

相同的用例适用于发布/订阅和存储资产。此外,数据分析师可以利用类似 Gmail 的搜索机制,使用广泛而灵活的搜索语法来细化他们的查询,该搜索语法可以处理简单的关键字和限定谓词。

分类和元数据

数据发现为治理增加了巨大的价值,但是当处理太多数据时,即使是最有经验的分析师也会迷失方向。那么,个人或第三方系统如何检查数据源是否可信呢?它的数据是最新的吗?它的数据从哪里来?有什么机密信息吗?发现机制本身通常不会回答这些问题,或者只是部分地回答。这里,数据分类登场了。

可以根据多个方面对数据进行分类:存储类型、质量、可信度、法规遵从性、弃用状态等等。数据目录提供了基于模板和标签的可定制分类机制,允许用户以各种形式对其数据进行分类。

它从集成系统中读取的信息集,加上用户提供的用来丰富其分类模式的信息,被称为元数据对于 Data Catalog 的用户来说,这是一个重要的概念,因为系统不会存储任何属于索引资产的数据。数据目录仅存储和管理元数据。

下图显示了从 BigQuery 收集的关于给定表的信息数据目录的示例。它代表了所谓的技术元数据。这种元数据通常由源系统管理,不直接由用户更改。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Technical Metadata example

另一方面,下图显示了一种与[虚构的]公司业务严格相关的元数据——毫不奇怪,所谓的业务元数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Business Metadata example

请注意突出显示的字符串:它们指的是根据审计清单和法规遵从性对 BigQuery 资产进行分类的模板。这种模板可以用来对尽可能多的资产进行分类,以便在所有资产之间保持业务元数据的组织和标准化。

快速提示:通过使用 Data Catalog 的 API,可以构建简单的代码来自动化创建和更新标签的过程,正如我在这个资源库中展示的:【https://github.com/ricardolsmendes/datacatalog-tag-manager】

数据管理

虽然 Data Catalog 实际上并不访问数据,但它确实是一个数据管理工具。举个普通的例子,它的标记机制可能被数据公民用来跟踪数据。它存放在哪里?用哪个系统来管理?可能会存档甚至删除吗?

精心设计的*“模板+标签数据管理模式”*当然可以利用 Data Catalog 的搜索功能(已经在数据发现部分提到过),因为资产可以通过它们的标签轻松找到,从而建立一个数据管理框架。我的意思是:可以通过用来创建附加到资产上的标签的模板和标签的值来找到资产。看看tag搜索限定符文档,看看它是如何工作的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

The tag search qualifier (https://cloud.google.com/data-catalog/docs/how-to/search-reference)

想想看,创建一个带有archive_atdelete_at字段的模板是可能的。这种模板可用于将标签附加到数据资产。适当的查询允许数据管理器(为什么不允许自动化过程?)使用数据目录来查找哪些资产包含要在给定日期存档或删除的数据,以便可以对这些资产采取行动。然后,我会说*“数据目录支持基于元数据的数据管理”*。有道理?

目录

所有上述特征和元数据构建了一个目录。尽管我们正在讨论服务的名称,*“cat a log”*可以定义如下:名词——系统地排列的带有描述性细节的项目的完整枚举。所以,是的,我们可以检查数据治理的目录组件!

不仅如此,在这种情况下,目录还包含对当今企业至关重要的技术方面:

  1. 它是基于云的;
  2. 它可以按需扩展:无论你公司的数据仓库和数据流有多大,元数据都会得到适当的管理;
  3. 用户按量付费:谁用的多,付费就多;谁用的少,付的就少。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Pricing overview — effective January 22, 2020 (https://cloud.google.com/data-catalog/pricing)

最后,从为所有公司元数据构建集中存储库的意义上来说,它提高了透明度。拥有正确证书的人将拥有所有公司资产元数据的真实来源,让参与数据治理计划的各方清楚底层数据发生了什么。

多用户参与选项

在结束之前,说几句关于用户参与度的话。数据公民拥有独特的技能组合。无论您擅长编程还是在使用 GUI 组件时表现更好,您都能够利用数据目录获得更好的治理体验。

我相信这一点,因为该产品既可以从本机 UI 使用,也可以从 API 使用。对于那些不想编码的人来说,用户界面可以在 https://console.cloud.google.com/datacatalog 的找到。对于开发人员来说,可以通过简单的 REST 调用或使用惯用的客户端库来访问 API,这促进了代码的整洁并降低了错误率(基于我的个人经验)。目前,客户端库可用于 Python、Java 和 NodeJShttps://cloud . Google . com/data-catalog/docs/reference/libraries

顺便说一下,我个人的偏好是利用客户端库尽可能地自动化与目录相关的任务。

最终考虑

嗯,我在第一段提到了可靠性。当然,可靠性是主观的,但是我试图将例子和想法与数据治理概念和数据目录特性联系起来。这种混合中的特性与概念相匹配的方式使我依赖 Google Data Catalog 作为一流的元数据管理工具。我不打算在这里下定论,但是我希望这篇文章能够帮助公司决定何时在一个或另一个解决方案之间设计他们的数据治理策略。

正如我在本文中强调的,数据目录并不适合所有的数据治理需求。然而,作为谷歌云平台的一部分,它可以与其他 GCP 本地产品一起使用,以满足更多需求,如存档加密访问控制

如果你决定采用这种方法,请成为我的客人来交流知识和经验。

就这些了,伙计们!

参考

使用 vim+tmux 提升您的数据科学工作流程

原文:https://towardsdatascience.com/boosting-your-data-science-workflow-with-vim-tmux-14505c5e016e?source=collection_archive---------7-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by SpaceX on Unsplash

和大多数同行一样,我在 Jupyter 生态系统中开始了我的数据科学职业生涯。Jupyter 是一个很好的环境,易于设置,提供了有用的内置功能。

在某些时候,我仍然觉得我需要超越。笔记本固有的一些限制开始扼杀我的生产力。仅举几个例子:

  • 笔记本的版本控制是有问题的。我一直害怕将包含客户数据的笔记本输出发送到网上。此外,在代码实际上没有改变的情况下,让 git 跟踪输出修改是非常不方便的。
  • 尽管最近取得了一些进展,但是在 Jupyter 环境中,像高级搜索和替换这样的编辑功能仍然非常有限。
  • 当项目变大时,同时打开几个笔记本是很常见的。从一台笔记本浏览到另一台笔记本是一件痛苦的事情,尤其是当它们隐藏在互联网标签的海洋中时。浏览器是用来搜索的,不是为了代码而开发的!

因此,我积极寻找替代方案,幸运的是,我遇到了一群很酷的家伙,他们教会了我老式的代码开发方式。它依赖于 vim + tmux 组合,该组合结合了一个强大的终端嵌入式编辑器和一个多路复用器。它们一起提供了高级编辑功能以及数据浏览所需的交互性。此外,该工作流程可以完全通过键盘操作,从而节省了大量时间,因为您不再需要不断地在键盘和鼠标之间切换。

你可能想知道为什么我没有考虑使用像 Pycharm 这样的 IDE。嗯,有两个主要原因。首先,ide 不是真正可移植的,作为一名顾问,我倾向于在许多不同的环境中工作。其次,也是更重要的一点,在黑屏上工作看起来更酷,你可以执行代码,以(几乎)思考的速度从一个窗格移动到另一个窗格。

这篇文章首先旨在指导您建立一个基于 vim + tmux 的基本但实用的数据科学环境。我还将展示这样的设置如何提高您的项目生产率。

免责声明:要阅读这篇文章,你需要对 vim 有基本的了解。如果你是个彻头彻尾的新手,也许可以先看看这篇 文章 再回来。

Tmux

Tmux 是一个命令行工具,可以在一个终端窗口中启用多个窗口和窗格。技术上,它被称为多路复用器。安装就像sudo apt-get install tmux一样简单。然后,您可以使用以下内容创建第一个会话:

tmux new -s mycoolproject

在一个会话中,您可以使用前缀命令ctrl+b和一些特定的键来控制窗口和窗格。例如,ctrl+b “产生窗口的水平分割。然后,您可以使用ctrl+b arrows在窗格之间导航。

tmux 的一大优势是它允许我们并行运行多个会话。这对于在不同项目之间快速切换非常方便,不会有弄乱脚本的风险。您可以使用ctrl+b d脱离当前会话,使用tmux ls列出现有会话,并使用tmux a -t <session name>连接到不同的会话。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Quick overview of tmux capabilities.

定制 tmux 相当容易,您只需要编辑位于您的主目录中的配置文件.tmux.conf。例如,许多人喜欢将前缀命令重新绑定到ctrl+a

我的目的只是在这里提供一个 tmux 的简要概述,但是如果你想了解更多,还有很多很棒的教程。这个小抄也值得看一看。

❤️维姆❤️

我喜欢维姆。真的。Vim 是那些像黑咖啡、周日早晨慢跑或戈达尔电影一样的东西之一,起初可能会觉得有点刺耳,但随着时间的推移和练习,它会变得越来越令人愉快。

有人说学习曲线很陡。是真的。但是,当你开始掌握新的快捷方式或宏来大大提高你的生产力时,这也是非常有益的。

Vim 是一个高度可定制的文本编辑器,直接嵌入在终端中。默认情况下,Vim 存在于所有类似 Unix 的系统中。无需安装。基本配置的功能有限,但您可以快速添加功能(如语法突出显示、自动完成等…)通过调整或添加插件到.vimrc,配置文件位于您的主目录中,在启动编辑器时加载。

我在这个回购中做了一个简单的.vimrc。它将帮助您重复下面描述的步骤。然而,我强烈建议建立自己的配置文件,以便更好地感受 vim 的精神。

在本教程中,我们将使用三个插件:

  • vimux ,使 vim 能够与 tmux 交互
  • vim-pyShell ,一个专门为简化 ipython 的使用而设计的 vimux 包装器
  • vim-cellmode ,ipython 的类 matlab 代码块执行

安装插件最简单的方法是通过插件管理器。我个人使用 vim-plug ,但是还有很多其他好的选择。

Vim-plug 易于安装。它只需要一个 bash 命令:

curl -fLo ~/.vim/autoload/plug.vim  [https://raw.github.com/junegunn/vim-plug/master/plug.vim](https://raw.github.com/junegunn/vim-plug/master/plug.vim)

然后你只需要在call plug#begin()call plug#end()之间的.vimrc中指定想要的插件,如下图所示。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

First lines of .vimrc

要安装插件,打开.vimrc执行命令:PlugInstall。然后重启 vim 来获取配置文件。

代码执行

一旦我们的插件启动并运行,我们就可以开始从 vim 向终端发送指令。

在 tmux 会话中,用 vim 打开一个 python 脚本。在正常模式下,您可以使用命令:call StartPyShell()从新安装的插件中调用专用函数来启动 ipython 终端。默认情况下,这将在屏幕底部创建一个窗格,并启动一个 ipython 会话。

代码可以通过以下方式执行:

  • 逐行发送指令。为此,将光标移动到所需的行并运行命令:call RunPyShellSendLine()
  • 发送用##{/##}分隔的代码块。在这种情况下,转到程序块并调用RunTmuxPythonCell(0)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Sending commands directly from vim to the shell with vimux

这已经很酷了,但它实际上需要相当多的输入。我们能做得更好吗?

通过相关映射提高您的生产力

自动化重复性任务。这是缩短开发时间从而提高生产力的秘密。好消息是 vim 真的很擅长这个。

主要思想在于为最常见的任务创建映射。让我们仔细看看如何实际实现映射。同样,这是在.vimrc中完成的。在下面的代码片段中,第 2 行和第 3 行分别将快捷键,ss,sk映射到 ipython 启动和停止命令,而第二个块定义了代码执行的映射。

众所周知,数据科学中的大部分时间都用于数据准备。这一步严重依赖于数据帧操作。因此,定义与基本操作相关的映射,如:

  • 打印数据帧的第一个元素:,sdh
  • 打印数据帧信息:,sdi
  • 绘制数据帧的内容:,spp
  • 显示直方图:,sph
  • 显示变量的内容:,so
  • 获取一个 iterable 的长度:,sl

会为你节省很多时间吗?此外,由于检查是通过将光标下的变量/对象传递给后端函数来执行的,因此不会因为大量的打印和输出而污染您的脚本。不需要额外的输入。

让我们看看这些映射是如何工作的!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Few mappings were sufficient to really boost my productivity!

总结想法

将 vim 的高级编辑功能与一些设计良好的映射结合起来,确实提高了我的生产率。这个工作流程帮助我满足了工作中固有的紧迫的最后期限。的确,它需要大量的初始投资,但我相信,从节省时间和工作舒适度来看,回报要高得多。

让我对 vim 惊叹不已的是无穷无尽的定制可能性。所以要有创意,开始破解.vimrc并实现你自己的映射!

感谢阅读!如果你喜欢这类内容,你可能也会对这个帖子感兴趣。请随意关注我的 Medium ,不要错过我的下一篇关于如何在数据科学中使用 vim 的文章。你也可以通过使用我的附属链接加入 Medium 来支持我的写作。

自助抽样

原文:https://towardsdatascience.com/bootstrap-sampling-31bc54e7193a?source=collection_archive---------24-----------------------

无论何时处理数据,您应该做的第一件事就是调查相关的统计属性。特别是,您可能有兴趣知道您的数据是否遵循已知的分布。

为什么这很重要?想想你的数据分析的目标:一旦你有了一个观察样本,你想计算一些统计数据(即均值、标准差……),以及建立置信区间和进行假设检验。为此,您需要假设您的数据遵循已知的分布,如正态分布、X 平方分布或 T-student 分布。

不幸的是,大多数时候你的数据是在没有已知分布的情况下呈现给你的,因此你不知道它们的密度函数的形状。在这里,Bootstrap 抽样提供了帮助:这种技术的目的是在不知道潜在分布形状的情况下评估其统计数据和属性。

它是如何工作的?想象一下,给你提供了一组数据(你的人口),你得到了一个大小为 n(T1)的样本。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,如果你对你的初始样本进行 B 次重采样(你可以把 B 设置成你想要的大小。一般来说,它被设置为等于或大于 10000),您将生成 B 个进一步的样本,每个样本的长度为 n (有可能出现一个或多个重复的值)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,对于每个样本,您可以计算感兴趣的参数的估计值。这将是每个样本 T( x^ 1*)的通用函数,我们称之为θ̂1*.

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,这个想法是,如果我们收集所有我们计算的统计数据,我们可以生成一个初始人口的概率函数的近似值。近似分布的一个标准选择是观测数据的经验分布函数

在统计学中,经验分布函数是与样本的经验测量相关的分布函数。它是一个累积分布,在每个 n 数据点上跳跃 1/ n 。在公式中:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中 1 为指示函数,其二进制值为 1(如果 xi 小于 t )或 0(如果 xi 大于 t )。直觉上,它是一个“经验”CDF:事实上,我们不知道 x 小于 t 的概率,然而每当 x 实际上小于 t 时,该函数就将其值增加 1/ n 。这个函数的形状是这样的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

所以,你能做的是使用这个经验函数,而不是概率分布,来计算相关的统计数据和置信区间。此外,如果 n (每个样本的大小)足够大,您可以用正态分布来近似您的估计的概率分布,得到:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Bootstrap 抽样是一种强大的技术:同样,从一个未知的分布,您可以近似一个概率分布,以便您可以计算相关的统计数据。

启动 ML 项目——使用声音对风扇故障进行分类

原文:https://towardsdatascience.com/bootstrapping-an-ml-project-using-sound-to-categorise-fan-failures-9ce04694ee85?source=collection_archive---------30-----------------------

有时候,与其瞄准宏伟的计划,不如先做些简单有趣的事情来证明它是可行的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Start a project to only cover the core essentials first. Photo by LUM3N on Unsplash

我什么意思?

任何开始数据科学项目的人通常都会对其潜力感到兴奋,并会伸手摘星星,在你知道之前,你已经有了一个极其雄心勃勃和复杂的项目,但你不知道从哪里开始。结果是你永远不会开始,因为你永远不会得到足够的“钩子”。

**注意:**如果你想直接进入机器学习项目,那么可以随意跳过。

钩子?

就像你需要一条鱼咬住鱼钩,这样你才能成为一名成功的渔夫,在你认为你能成功之前,这些事情你都需要先咬上一口。因此,例如,如果您要制作一个仅在有人走过时(而不是车辆、宠物、树叶或野生动物)才打开的安全摄像头,那么过一会儿您就会看到以下列表:

  • 夜视摄像头(因为安全灯关闭时它看不见)
  • 一盏红外线灯照亮该区域,以便摄像机可以看到它
  • 安全灯
  • 能够以足够快的速度处理帧的便携式设备或计算机
  • 一个特殊的额定电源电压开关,可以使用便携设备的 GPIO 引脚打开和关闭
  • 外部配件,包括防水盒和处理设备的电源接口
  • 相机上记录的大量数据可以用来训练你的模型
  • 标记所有的数据,这样它就知道一个人是用来训练你的模型的

唷!这是一个很长的列表,这只是我从几分钟内得到的,我们甚至没有讨论我们将使用什么机器学习解决方案或输出或控制系统来设置它。

你现在可以看到为什么有人可能永远不会开始这样做,通常这种类似的想法是阻止公司投资数据科学的原因。给他们一个巨大的工作量估计来实现他们的宏伟愿景,他们可能会看起来病得像条狗并要求你离开。

让这种想法持续太久,你可能会陷入工具箱谬误(见下文),并且永远不会完成任何属于你自己的数据科学项目(可能会复制或跟随某人已经完成的项目)。造成这种情况的原因是:

你一下子目标定得太大了。太多的事情依赖于其他事情准备好了,这从来没有发生过。

将您的项目分解成您想要测试的关键概念,并从那里开始。其他的都是次要的。

工具箱谬误

这有点跑题,但在这里非常相关(而且通常是从不开始任何事情的原因)。这是我最近遇到的事情,我必须说这确实是我放弃许多爱好或从未完成我想做的事情的原因。

从本质上说,要做某事,你需要其他事情已经发生。例如,你需要 X 才能做 y。有一个非常好的视频(贴在这里)很好地解释了这一点。

因此,如果你想成为一名数据科学家,你需要研究数据科学并坚持下去,否则很快你就会成为一名数据科学家。

信不信由你,多年来我一直把装订书籍作为一种爱好,但我已经很多年没有这样做了。我还能认为自己是一个吗?也许不是。

回到核心,保持简单

回到我们关于安全灯的例子,把它分解成核心概念“我能通过我在摄像机上看到的东西来控制什么吗?”为了解释这一核心概念,您只需要来自开放数据集中的一些视频数据(或静态图片),应用基于视觉的系统对物体进行分类,并根据它们在屏幕上的位置来决定是否打开 LED。你甚至可以让它变得简单,只需要把你的算法标记在一个。csv”文件,对于图像 X 或者在视频上的时间 X,它将打开某些东西。

这只需要:

  • 一组免费的数据
  • 一台计算机(你主要的数据科学一台就行)
  • 核心算法(你可以在别人的作品上构建,或者研究并构建你自己的)
  • 也许是一个发光二极管打开或关闭

这更可行,也更容易计划和分解到工作中。尝试从这一点,很快…

V oila!你做过一些数据科学!

当然,它不会在晚上工作或经受住外面的天气,但你已经做了核心部分,其他部分是你以后可以添加的。没有这一核心功能,其他部分就毫无意义。

祝贺您完成了您的第一个【概念验证】 (PoC)。

现在,让我们来谈谈我的迷你项目,看看球迷窃窃私语(因为善于倾听球迷,以确定他们的烦恼)。这是一个不错的小项目,涵盖了“可能吗?”,使事情变得简单,而且我能够以很少的成本做到这一点。我对扩展和填充它来覆盖我知道它薄弱的领域不感兴趣。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Yes, I am playing on the whole “horse whispering” thing. Photo by richard savickas on Unsplash

范窃窃私语?

有没有抱怨过你的家用电器坏了,客户服务部门让你拿着设备对着电话,这样他们就可以听了?或者你有没有遇到过这样的情况:你的车出了问题,机械师不用打开发动机罩就能诊断出问题所在?在这两种情况下,他们都在寻找与特定故障相关的特征噪音或声音。

电机和风扇故障的最大来源是轴承问题(例如缺乏润滑)。这通常会导致电机/风扇的声音轮廓发生变化(通常是典型的呜呜声或研磨声)。这实际上是一个很多地方都有兴趣通过听来探测的领域(这里和这里)。

但是为什么倾听有用呢?在第一个例子中,制造商可以快速诊断某些故障,而无需设备进入或维修工程师外出。这一切都节省了成本,因为呼叫在时间和金钱上可能是昂贵的。另一个优势是,如果您知道家用电器上的电机已经或即将出现故障,您可以确保服务工程师携带正确的部件(这对拥有大量不同产品组合的制造商来说非常重要),从而再次节省成本。

核心项目问题

对于一个人来说,可能需要很多年才能识别出机器发出的噪音是什么意思,但你训练机器学习做到这一点有多容易呢?

这是我希望通过 PoC 解决的指导性问题,因此我将重点放在诊断电风扇的故障上,因为它更容易安全地获取和诱发故障。

我在网上购买了一台风扇,然后让它出现了几个(可逆的,我不是钱做的)故障,它们是:

  • 正常:风扇在正常状态下运行,没有故障(当我提到故障或类别时,我确实包括在那里)
  • 塑料薄膜阻塞:一块塑料被引入旋转翅片的路径
  • (想想你小时候放在自行车辐条上的卡片)
  • 重量不佳:一个重物被连接到一个鳍上,使其失去平衡
  • 捕捉侧:一个小的延伸部分被添加到一个翅片上,因此它开始摩擦风扇外壳的内部

现在,所有这些故障听起来微不足道,但通常在严重故障之前,在恶化到故障点之前,首先会出现一个小麻烦,这应该说明,如果可以检测到一个小的不便,那么通过早期干预就可以完全避免一个更具破坏性的问题。

然后,我开始在三种可用的风扇速度(低速、中速和高速)下记录这些故障的十秒钟片段,以增加噪声水平和特征的可变性。我用我的手机来模拟录音设备的质量,类似于我的第一个例子(客户将设备放在手机上,以便客户服务可以听到它)。每个组合重复五次,产生 60 个样本。对于故障模式的每一次重复,我会移除故障并重新应用它,因此记录中会引入一点可变性。

我选择了五个重复,这样我可以在其中的三个上训练,剩下的两个将用于测试集(36 个训练和 24 个测试文件)。

当时的情况是:

  • 执行快速傅立叶变换以将声音转换成模型可以被训练的频谱
  • 通过使用大约 0.1 kHz 宽的滚动平均值平滑得到的频谱以减少噪声
  • 然后,我只以 0.01 kHz 的步长从 1 到 18 kHz 取数据点
  • 这样做是为了标准化和减少数据集的大小
  • 然后我可以训练一个随机森林分类器,看看它是否能区分这四个类别
  • 记得我也改变了风扇速度,所以希望分类器不会受到影响
  • 然后,我在模型上使用了测试集,这样我就可以得到一些结果来比较它在看不见的数据上的表现
  • 预测值和实际值显示在混淆矩阵
  • 这些将实际值(真实值)与预测值进行对比
  • 如果模型是完美的,那么所有的值都在一条对角线上
  • 任何偏差都会告诉你它错误地标注了哪些类,以及它们应该属于哪个组
  • 在分类问题中,这通常是一个非常强大的调试工具

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Josh Kahen on Unsplash

哒哒!

看看下面的结果,他们还不算太差!考虑到模型的基础,我们没有对噪声做任何复杂的处理(比如背景噪声的去除)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

A confusion matrix (or contingency table depending who you talk to) of results. Perfect classification is to have all items on the diagonal.

但是等等,还有更多!

关于随机森林的一个有趣的事情是能够查询它使用什么特性来做决定。对我们来说,这些是模型用来分配类别的频率,更有趣的是,你可以确定哪些频率对于识别某些类别比其他类别更重要。(注意:这个特性重要性做得有点粗糙,但传达了主要观点)。

为了显示这些重要性,我绘制了一个图表,其中包含每个类别的示例,并为每个被归类为重要的频率画了一条垂直虚线。这给出了:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Feature importances for classifying fan classes

现在你可以明白为什么这个模型可以很容易的区分出不同的类,因为它们的形状和能力都很不同。您还可以查看每个类别的重要频率(如上图所示):

  • “抓边”(红色):低频
  • “正常”(蓝色):中频
  • “加权差”(绿色):中频和高频
  • “塑料薄膜障碍”(黄色):频率跨越整个可用范围

拿走

使用简单的技术,可以训练机器学习算法来几乎完美地区分每个故障类别(95.8%的准确率),而且还可以确定哪些频率对于分类每个故障是重要的。

这个例子的缺点是只使用了一个风扇,背景噪声被最小化并保持一致,并且分析/数据准备是基本的。一个更严格的模型将涵盖这些领域,并可以发展成为一个有趣的小演示(也许当我有更多的空闲时间)。

我希望您喜欢使用机器学习来解决实际问题的短暂尝试!

雪花中的规模自举

原文:https://towardsdatascience.com/bootstrapping-at-scale-in-snowflake-3e04a225ff5e?source=collection_archive---------30-----------------------

有时候,当统计学家在抽样数据时,他们喜欢在获取下一个数据之前先把每一个数据放回去。这被称为带有替换的随机抽样**,相对于没有替换的随机抽样,这是更常见的事情。**

一个在野外这样做的例子是在一个随机森林的训练中,这是我写这篇文章的原因。

所有的雪花内置采样功能都是围绕采样而进行的,没有替换。这意味着您只需对每一行做一次决定——根据情况决定是进还是出。

自举的困难在于,这有点像把骑自行车作为一种爱好;正确地做它是相当昂贵的。

一种简单但完全准确的引导 10,000 行的方法是:

这使得源表中的所有 150,000 个客户每次都有均等的机会被选中,不管他们已经被选中了多少次。

一定有更好的办法!答案当然是我们需要一个“足够好”的替代方案。毕竟我们是在采样,所以如果这意味着性能的提高,精度水平通常是灵活的。

所以让我们看看我们是否能想出一个不同的方法。

目标是引导“雪花 _ 样本 _ 数据”中 150,000 条记录的 60%。“TPCH_SF1”。“客户”表。

我们希望在表上进行一次迭代(从算法的意义上来说),因此如果可能的话,在每一行上只做一次决策。我们需要想出一种方法来多次选择它,但要保持在样本的参数范围内。

一个简单的修改,如果我们任意地决定十次扫描表就足够了,那么我们可以每次只选择 6%,就像这样:

这一点都不好。首先,我们对每一行都处理了十次,我们根本没有真正量化不准确性,我们只是编造了一个数字。

所以让我们看看每次迭代时每一行发生了什么,我们将考虑两个极端:总是被选中,从不被选中。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

经过一定次数的迭代后,不可避免地会有一个点(就像我们在澳大利亚说的那样),每个记录都有一个“公平的结果”。所以我们需要一种划定界限的方法。出于本练习的目的,让我们允许用户指定两件事:

  1. 样本的所需大小,以原始表的百分比表示
  2. 一个百分比值,当永远不会被选中的概率低于它时,我们停止迭代。想象这是一条水平线,你可以放在上面图表的某个地方。

方程式时间!

提醒一下,目标是 60%的样本。

暂时忘记“替换”部分,每次选择一行的概率:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

或者没有被选中,只是翻转一下:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1–0.6 = 0.4

右边的值是我们希望用户指定的。正如你所看到的,它总是减少,我们将不断增加迭代,直到我们达到它。

因此,我们可以概括地表达这一点,然后求解它,以计算出我们应该进行多少次迭代:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

太好了,现在我们有公式可以用了。

现在,让我们回到雪花。请记住,我们实际上并不想进行多次迭代。但是棘手的是,没有任何方法可以让一行在一个结果集中出现不止一次… 还是有?!?!?!

输入 UDTFs

我真的很喜欢udtf,他们有办法实现优雅的解决方案,而不是糟糕的样板文件。

看看这个:

我们可以用这个来一举两得。首先,它将应用该公式,根据我们发明的阈值计算出一个很好的迭代次数(即被选择的机会数)。

然后,礼貌地将样本分数除以该数,并写出该行数。

为了进行演示,UDTF 的输出本身如下所示:

select * from table(SAMPLE_PROBABILITY(0.6::double,0.00001::double))

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

公式说我们应该做 13 次迭代,0.6/13 = 0.0465384615

换句话说,我们将给予每行 13 次机会,每次尝试的概率为 0.04615384615。

我们需要做的就是像这样加入这个 UDTF:

的原始结果:

SELECT customer.*
FROM "SNOWFLAKE_SAMPLE_DATA"."TPCH_SF1"."CUSTOMER" customer,table(SAMPLE_PROBABILITY(0.6::double,0.00001::double))

实际上是 150,000 * 13 = 1,950,000 行,但是我们添加了 WHERE 子句:

where uniform(0::float, 1::float, random()) < SAMPLE_PROBABILITY

这会生成一个介于 0.0 和 1.0 之间的随机数,并删除低于阈值的行。

一个 100%正确的实现应该给我们 90,000 行(150,000 * 0.6)。这个(使用我选择的输入)似乎每次都能产生 89,000 到 91,000 之间的结果。

当然,正如我们所希望的那样,有可能出现重复。你甚至可以在搜索结果的第一页看到:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在我们的 150,000 表上,返回大约 90,000 条记录,在一个 x-small 仓库上是一秒多一点。

推断统计的自举

原文:https://towardsdatascience.com/bootstrapping-for-inferential-statistics-9b613a7653b2?source=collection_archive---------21-----------------------

数据科学家的工具包—引导、采样、置信区间、假设检验

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Photo by Nathan Dumlao on Unsplash

Bootstrap 是一种强大的基于计算机的统计推断方法,它不依赖于太多的假设。仅仅从一个样本数据中形成一个抽样分布是很神奇的。我的统计推断不需要公式。不仅如此,事实上,它还广泛应用于其他统计推断如置信区间、回归模型,甚至机器学习领域。

在这篇文章中,我们将主要讨论两件事

  1. 建立置信区间
  2. 假设检验

链接到 github 获取代码和数据集。

一.置信区间

在现实世界中——我们并不真正了解我们的真实人口。因为这可能是地球上的全部人口,也可能是一家公司过去、现在和未来的交易。 我们只是不知道参数的真实值。 所以我们依靠抽样分布来推断这些大群体的一些参数。

假设检验和我们建立置信区间的方式有许多不同的名称:

  • t 检验
  • 双样本 t 检验
  • z 检验
  • 卡方检验

可以使用自举方法来代替这些。我们将通过一个示例来了解如何使用抽样分布为我们感兴趣的参数建立置信区间。

目标:假设我们想知道喝咖啡的人的平均身高是多少

方法 1:使用自举方法

我们有所有喝咖啡者的数据集。` coffee_full.csv

coffee_full = pd.read_csv(‘coffee_dataset.csv’)

由此,我将创建一个包含 200 个数据点的样本数据集。让我们称它为红色咖啡。这是因为在现实中我们从来没有得到完整的人口

coffee_red = coffee_full.sample(n=200)

在我们的数据集中喝咖啡的人的比例

[coffee_red[‘drinks_coffee’]==True].mean()---Output---
0.595

在我们的数据集中,喝咖啡的人的平均身高

coffee_red[coffee_red[‘drinks_coffee’]==True]['height'].mean()---Output---
68.119 inches

让我们从样本中引导出一个置信区间

# Let's first create an empty list for storing means of bootstrapped samples
boot_means = []# Let's write a loop for creating 1000 bootstrapped samples
for i in range(1000):
    bootsample = coffee_red.sample(200, replace=True)
    bootsample_mean = bootsample.[bootsample[‘drinks_coffee’]==True]['height'].mean()
    boot_means.append(bootsample_mean)boot_means = np.array(boot_means)

对于 95%的置信区间,我们从每一侧截取 2.5%,然后从抽样分布中截取这些值,这将给出我们认为参数“具有 95%置信度”的范围

# we build 95% in the middle portionnp.percentile(boot_means, 2.5), np.percentile(boot_means, 97.5)---Output---
(66.00, 67.59)

我们可以将这些值解释为我们认为人群中所有喝咖啡者的平均身高有 95%置信度的界限

为了形象化这一点,让我们看下图

plt.hist(boot_means, alpha=0.7);
plt.axvline(np.percentile(boot_means, 2.5), color='red', linewidth=2) ;
plt.axvline(np.percentile(boot_means, 97.5), color='red', linewidth=2) ;

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Confidence Interval from our boot-sample mean

置信区间解释

我们有 95%的把握认为所有喝咖啡的人的平均身高在 66.0 到 67.59 英寸之间

让我们回过头来看看人口的实际意义是什么

coffee_full[coffee_full[‘drinks_coffee’]==True][‘height’].mean()---Output---
66.44 inch

我们可以看到我们最初的平均身高在 95%的置信区间内

方法 2:传统的内置方法(T 检验)

python 中已经内置了许多构建置信区间的传统方法。 这里有一个不错的 stackoverflow 链接

import statsmodels.stats.api as smX1 = coffee_red[coffee_red['drinks_coffee']==True]['height'] 
X2 = coffee_red[coffee_red['drinks_coffee']==False]['height']cm = sm.CompareMeans(sm.DescrStatsW(X1), sm.DescrStatsW(X2))print (cm.tconfint_diff(usevar='unequal'))

请注意,自举方法和使用传统方法内置的时间间隔几乎相同

二。假设检验

作为一名数据科学家,你必须首先将问题转化为所谓的假设。然后你需要用数据来证明哪个假设可能是真的。

假设我们想问一个问题,所有喝咖啡的人的平均身高是否大于 70 英寸。

这里我们将不得不定义什么叫做零假设和交替假设。零假设是在我们收集数据之前就被默认为真的东西。替代假设是我们试图用数据来证明的东西

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Null and Alternate hypothesis for our use case

方法 1:检查是否可能为空(引导)

我们可以引导一组样本数据,反复计算样本均值,建立样本分布和置信区间,以确定在一定置信水平下总体均值的合理值

means = []for i in range(10000):
   bootsample = sample_df.sample(n=150, replace = True)
   bootsample_mean = bootsample[bootsample['drinks_coffee']==True]
   means.append(bootsample_mean['height'].mean())means = np.array(means)np.percentile(means, 2.5), np.percentile(means, 97.5)---Output---
(66.00, 67.59)

我们可以看到我们 95%的置信区间是(66.0,67.59)。值 70 超出了 95%的置信区间,因此可以肯定地说替代假设不成立。我们未能拒绝我们的无效假设

方法 2:模拟零假设

我们从假设零假设为真开始。如果我们要模拟最接近零假设的值,我们就会知道抽样分布是什么样的

在这种情况下,我们将从正态分布进行模拟

null_vals = np.random.normal(loc = 70, scale = np.std(means), size =10000)

70 是我们假设的平均值

这里的每个模拟图都代表了零假设的一个可能的平均值。我们现在可以问这样一个问题,样本均值落在这个分布的什么位置

plt.hist(null_vals, alpha=0.7);
plt.axvline(sample_mean, color = 'red', linewidth=2);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们可以看到,它远远低于这个分布,我们不认为它可能来自这个零假设值。因此我们可以说我们的零假设是正确的

p_value = (null_vals > sample_mean).mean()
p_value--Output--
1.0

大 p 值表明我们不能拒绝我们的零假设。这意味着我们的人口平均数确实小于或等于 70

  • 我们将 p 值计算为大于样本均值的模拟抽奖的比例
  • 在此,p 值以图形方式表示大于突出显示红线的所有值的曲线下面积。基本上是所有的数据

结束语:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值