原文:TowardsDataScience Blog
协议:CC BY-NC-SA 4.0
为什么你会辞去数据科学的工作
原文:https://towardsdatascience.com/why-youll-quit-your-data-science-job-6079d407bbeb?source=collection_archive---------0-----------------------
你应该做些什么来防止这种情况发生
来自 Pexels 的 Andrea Piacquadio 的照片
哈佛商业评论称数据科学家为“21 世纪最性感的工作”,但许多工作并不“性感”,人们经常辞职,因为期望与现实。作为一个曾经做过数据科学家和数据分析师的人,我想分享我的建议,告诉你如何避免在开始工作的几个月内就想辞去数据科学家的工作。
期望 1:我可以使用最先进的机器学习算法来解决影响业务的复杂问题。
遗憾的是,大多数数据科学工作并非如此,因为你必须平衡业务需求和时间。当一个简单的算法将产生类似的结果时,很难向高级管理层证明你将花费时间来追求闪亮的新算法在准确性上的边际改进。
作为一名数据科学家,我支持电子邮件营销,并将大部分时间用于构建购买倾向模型。我没有机会尝试其他类型的模型,因为没有业务需求。我的工作影响不大,因为电子邮件营销只占总收入的一小部分。我太想离开了,几乎没有找到另一份工作就辞职了。从我的错误中吸取教训。
如何更接近自己的期望:
- 仔细阅读岗位说明书 。主要职责是建立机器学习模型吗?当心职称,因为数据分析师的工作可能有数据科学家的头衔。
- 在面试中阐明对该职位的期望。如果工作描述包括创建仪表板或 ETL 管道,询问你的时间将分配给这些职责的百分比。如果建模只占你时间的一小部分,那就不适合你。
- 问问你会支持公司里的哪些群体 。并非所有群体都生而平等。如果您的贡献能够影响销售或产品等创收团队的 KPI,他们将获得更多的可见性。询问关于商业模式和公司如何赚钱的问题。哪些团体有助于业务增长?如果你的角色支持这些群体,那么你的模型可能会对收入产生重大影响。这并不意味着如果这个职位支持成本中心,你就应该拒绝这个提议,但是你应该考虑一下。
期望 2:我可以整天做模型。
为了能够整天构建模型,您需要合适的数据基础设施和技术来支持这一点。在我工作过的所有公司中,我不得不处理分散的、肮脏的、未记录的或者三者兼而有之的数据。
如何更接近自己的期望:
- 询问技术栈。如果面试官提到 Excel 电子表格和 Access 数据库,那就避而远之。(不幸的是,当时我是顾问,而这是客户,所以我只能按兵不动。)如果面试官提到最近的你熟悉的软件和工具,这是一个好迹象。
- 询问数据可用性。确认公司有一个包含数据的数据库。一些公司刚刚起步,可能很少有数据可用于建模。有数据工程师帮助您加载新数据吗,或者您需要自己进行 ETL 开发吗?如果数据很少,或者你整天都在加载数据,你就没有时间建立模型,这不是你想要的工作。
- 询问数据团队是如何组织的。检查你是否是第一个数据雇员,因为你可能会从事任何与数据相关的工作,建模将是你最后要做的事情。询问团队中还有多少其他数据科学家。检查是否有独立的数据分析师团队。最好的情况是为拥有独立数据科学和数据分析团队的公司工作。拥有两个团队意味着您更有可能在数据分析师创建仪表板和运行数据分析的同时构建模型。
期望 3:公司了解数据科学的价值,否则他们为什么会雇佣我。
德勤的一份报告称“数据分析的重要性日益增加,并作为高管的决策资源发挥着关键作用。”然而,数据素养是组织中普遍存在的问题。公司希望像其他人一样成为“数据驱动型”,但大多数公司不明白如何利用数据科学来增加业务价值。
如何更接近你的期望:
- 求以往问题的例子,用什么模型解决的。 这个问题将帮助你衡量公司的数据科学成熟度。如果你不能得到一个好的答案,这是一个危险信号。他们可能对数据科学如何做出贡献没有一个很好的想法,而你会因为缺乏数据素养而感到沮丧。小心不要在数据科学还未被证实的公司工作,因为你会遇到更多的阻力。
- 学习如何将 机器学习呈现给非技术人员 。您可能需要向多种类型的观众展示您的模型结果。他们中的许多人不会理解什么是机器学习。学会解释你的模型如何给企业带来好处。拥有这一技能将使你在任何数据科学岗位上受益,并帮助你的利益相关者欣赏你所增加的价值。
希望这些小技巧能帮助你找到一份更接近你期望的数据科学家工作。虽然有时令人沮丧,但付出的努力是值得的。感谢阅读,请不要放弃数据科学!
你可能也会喜欢…
https://medium.datadriveninvestor.com/how-to-become-a-successful-data-storyteller-f90e677e4770 https://medium.com/swlh/how-i-used-a-machine-learning-model-to-generate-actionable-insights-3aa1dfe2ddfd
为什么你会后悔训练 ML 模型
原文:https://towardsdatascience.com/why-youll-regret-training-ml-models-fc95018dc352?source=collection_archive---------24-----------------------
数据科学
在思考这 6 件事之前
背景图片来自 Unsplash ,非常感谢创作者 @awmleer
我知道,你对你的新问题很兴奋,迫不及待地要用机器学习来解决它。但是因为你是一个伟大的数据科学家,你知道有些事情你必须在开始之前考虑。从你的第一次数据分析到生产,有许多事情可能会出错。因此,让我们花几分钟时间集体思考一下,你能做些什么来确保你的下一个项目成功。
首先,与每个项目一样,你需要知道你的目标是什么,它是完全自主的还是人工辅助的 ML 系统?您对问题前景的理解可以为您和您的组织节省大量时间。
此外,您需要了解该领域已经取得的成就以及局限性。如果你不这样做,你最终会得到一个无法使用的系统,或者更糟的是解决一个没有解决价值的问题。接下来的部分将涉及准备过程的所有阶段,并且肯定会给你一些关于如何着手下一个项目的新想法。
“给我六个小时砍树,我会用前四个小时磨利斧头。”
― 亚伯拉罕·林肯
看数据
俗话说,垃圾进垃圾出。如果你试图用于 ML 模型的数据是坏的,你的模型将经不起现实的考验。确保在使用数据之前对其进行检查,是任何数据工作者最重要的职责。不管是机器学习工程师,数据分析师,数据科学家,还是数据工程师。
最坏的情况是,你将在接下来的几个月里致力于一个无法解决的问题。您至少应该查看数据分布,以及收集过程的质量和存储的数据质量。
- 很多数据都是在同一个月收集的吗?
- 数据来源是什么,来自什么时间段?
- 它是通过一项调查收集的吗?在这项调查中,只有特定的人口统计数据做出了回应。
- 它是从某个网站收集来的,可能不代表你的观众?
是一些你应该能够回答的基本问题,或者至少告知你不知道有风险。其他要注意的重要事情是缺失的记录或不完整的记录,这可能是你不知道某些事情的早期迹象。做一些探索性的数据分析,从你能找到的所有角度绘制数据。所有这些往往揭示了如何进行的有用见解。
如果你感到无聊,提醒自己,在这个阶段修复一个注定失败的项目要比几个月后当你的整个模型都训练好了,所有的超参数都调整到完美时容易得多。
最坏的情况是你损失了几天,最好的情况是你节省了几个月。
别看数据
矛盾你可能会尖叫,公平点,但听我说完。你会对你的数据做出假设,这很好。但是你不希望做出不可检验的假设和潜在的过度拟合。这可能会创建一个仅适用于您目前所看到的数据的解决方案。记住概括,是你的最高目标。这是你的模型适当地适应新的、以前看不见的数据的能力。这正是为什么有一个测试集。
就像你的模型在查看测试数据时会过度拟合测试数据一样。通过选择在测试集评估中表现良好的超参数假设和架构,您也会下意识地过度适应人类系统。我有几种方法来消除我在训练过程中的不完美。但是请记住,你永远无法完全移除它们。
我最喜欢的方法是按时间分割数据,用旧数据训练,然后用新数据测试。更好的是,我使用所有的数据,并在开发模型时对收集的数据进行测试。这样,我可以保证我的猴脑不会在测试数据上无意识地过度拟合。不要在每次训练后都看你的测试数据。
你需要更多的数据
我的文章是关于数据的吗?我想这就是为什么我称我的作品为“桑德罗的数据”。但是现在,严肃地说,如果你没有足够的数据,你就不能开始训练任何可以很好概括的东西。
遗憾的是,从一开始就不容易判断你是否有足够的数据。一个指标是你在数据中看到的噪音如果你有很多噪音,你需要更多的数据,如果很明显你可以少用一些。
要解决这个问题,你不能收集或标记更多的数据。增强数据技术或创建合成数据也可以很好地工作。虽然不理想,但如果存在不破坏采样点意义的变换,它是可行的。如果您正在进行图像分类任务,一个很好的例子就是图像的背景。
还有一个细节,如果您处理的数据量有限,请确保为您的模型使用较少的参数,因为大型神经网络几乎肯定只会记住所有的数据点,而不会一概而论。如果你对手头的数据量感到不安,确保运行或以某种方式获得更多。
问问那些了解这个领域的人
也被称为领域专家,这些生物知道他们的领域,并且已经在这个主题上工作了很多年。他们知道简单的指标,并为你的问题获取数据。最重要的是,他们知道什么问题是值得解决的,并且会为他们节省最多的时间。
有时解决一个问题类别,就已经解决了 80%的问题。著名的 80-20 法则,也称为帕累托原则,也适用于数据科学。作为一个局外人,识别潜在的最有效的解决方案可能对你来说很难,但是领域专家已经接触相同的问题很多年了。
这里的另一个话题是可解释性。它们将让您了解需要基于可解释性的方法来理解您的模型所产生的决策的监管约束或利益相关者。
众所周知,理解问题和数据至关重要。因此,一定要询问他们有关数据收集过程的问题,以便将您的数据分析引向正确的方向。最后,他们是你能找到的最好的广告商,可能会帮助你在你的公司或他们的行业中向那些从你的工作中获益最多的人推广你的工作。总而言之,这是一个明显的双赢,去和他们谈谈,之后你仍然可以重新发明轮子。
其他人也用机器学习来解决问题
学术界和工业界都有大量有创造力的程序员和数据科学家,你可能不是第一个用机器学习来解决这个问题的人。
只有傻瓜才会从自己的错误中吸取教训。聪明人从别人的错误中吸取教训。”
― 奥托·冯·俾斯麦
这就是为什么你应该在一个项目开始的时候搜索做了类似事情的人的学术论文或博客帖子。文献研究将帮助您实现最先进的模型和预处理管道。更重要的是,它将帮助你避免最常见的陷阱,避免他们的错误。数据是否明显有偏差?某一类型的模型是否出现在所有论文中?是否经常对另一个数据集进行预训练?或者有没有一个标准软件可以很好地解决这个问题?是应该在你阅读的前几页回答的问题。
另一个信息来源是你的公司,可能有类似的项目试图在没有机器学习的情况下实现自动化,这可以向你展示传统方法的局限性,并指出问题的哪些部分可以在没有机器学习的情况下解决。这样你就可以先关注他们认为无法解决的部分。此外,这也可能让你对公司政治和可能需要解决的恐惧有一个初步的了解。关键外卖,让你的家庭作业开始前。
那生产呢?
就像他们说的那样,从目的开始。正如在开始提到的,你的目标应该是一个在生产中通用的模型。毕竟,你提供的价值不是测试集上的准确性,而是当它启动并运行时你所创造的价值。
当你做预测时,一定要尽早考虑有哪些数据可用。或者至少确保你在训练时不会使用不切实际的事后修正数据。另一个重要的方面是你的答案需要多快准备好。明天的回应是否足够,还是需要在接下来的几毫秒内做出?如果您计划使用稍微贵一点的 API,了解它的允许成本也很重要。如何确保服务始终在运行?如果离线几个小时会有多糟糕?有硬件限制吗?如果你计划在没有互联网连接的情况下在一些覆盆子馅饼上运行模型,你可能无法建立一个巨大的神经网络。您希望您的模型不断学习新数据吗?还是在受控条件下每年手动重新训练一次更安全。
最终,你是在构建软件,拥有一个合适的软件架构是必须的。一定要为生产做好计划,否则你会忙于错误报告,而不是创建新的模型
结论
花时间去真正理解问题,有时可能会觉得是浪费时间,但请记住,在项目开始时解决问题比结束时更容易。
一个机器学习模型毕竟是一个漫长旅程的结果,规划这个旅程需要回答很多问题。但是一旦你把它们都想通了,我相信你的下一个项目会取得巨大的成功。
如果你喜欢这篇文章,我会很高兴在 Twitter 或 LinkedIn 上联系你。
一定要看看我的 YouTube 频道,我每周都会在那里发布新视频。
为什么大多数数据科学组合项目没有得到招聘经理的认可
原文:https://towardsdatascience.com/why-your-data-science-portfolio-project-sucks-208ee830ad1b?source=collection_archive---------29-----------------------
以及如何做一个更好的
卡尔·海尔达尔在 Unsplash 上拍摄的照片
所以你想在你的投资组合中有一些好的项目来炫耀。你去 Kaggle 下载一组数据。有些变量需要预测,有些变量似乎与它相关。您可能会对几个分类变量进行伪编码,绘制一些显示相关性的图,然后花几十行代码来测试一些模型和调整超参数。当你尝试不同的方法时,所有这些可能需要几周或几个月的时间,但最终你会完成的!
这个项目会很烂。我可以说,在不知道模型有多精确,不知道你的超参数调优方法是什么,也不知道你用了什么花哨的机器学习算法的情况下。
原因是,所有这一切表明,你能够遵循一些关于超参数调整的在线教程,而不是你真正理解数据,并使用它来解决实际问题。
我认为上述内容就像使用这几行代码创建一个模型一样令人印象深刻:
老实说,这个模型可能会做得很好——XGBoost 对于大多数问题来说都是现成的。问题是,这是容易的部分。在这种意义上,我可以训练一个蹒跚学步的孩子“做”机器学习。
那么这里缺少了什么呢?主要是因为的背景。使用已经定义的特征将机器学习应用于已经识别的分类问题,这并不是对真正应用的机器学习的真实描述。
在实际的业务环境中,困难的部分是将高级业务问题(“欺诈性交易花费了我们很多钱”)与提议的业务解决方案(“如果我们检测到可能的欺诈案例,我们可以更早地发现它们,减少它们的财务影响”)与技术方法和用例(“构建一个 API,提取交易数据和其他相关信息,并将其分类为欺诈性或非欺诈性,这可以在超过特定阈值时触发警报”)。这是一个故意简单的例子,但即使在这里,如果我们考虑项目中涉及的内容,构建模型是最琐碎的部分。其他部分是:
- 确定哪些特征对分类很重要。这并不意味着“拉所有的数据并检查它们”,这意味着思考通过特征选择过程。时间相关吗?一年中的什么时候?具体到市一级的位置?用户的本国与交易发生地之间的差异?所有这些似乎都有道理,但没有一个可能被明确编码到数据中——它们是需要单独设计和探索的特征
- 需要定义数据管道,从正确的位置提取数据
- 需要定义没有任何偏差的训练样本,例如,如果在欺诈交易发生和可能被发现之间存在时间差,则与交易相关的时间可能存在偏差
- 对于预期的用例,分类模型如何与系统的其余部分一起工作
- 假阳性和假阴性的相对成本是多少。这可能并不简单!也许同一个人的重复假阳性比不同人之间相同数量的假阳性代价更高。处理这个问题让我们走出了简单的分类领域,进入了更模糊的领域。
这些都是数据科学家可能需要处理的看似合理的问题,每一个都比展示您可以构建模型更有趣、更令人信服。但是因为模特的魅力,人们更愿意做模特。
为了更好的项目,找到真正的问题
关于如何制作一个伟大的数据科学作品集项目,我能给出的最好建议是找到一个真正的问题并解决它。即使是解决实际问题的简单项目通常也比使用已经准备好的数据集的人为项目更有趣。也许你想要解决的问题只是回答你对这个世界的一个迫切的问题——一个简单的分析项目可能是好的!也许你想构建一个可以在网络上运行的小应用程序,从一些 API 中提取数据,生成一些大家感兴趣的东西。或者,你可能想与现实世界的组织合作,帮助解决他们的问题。要了解更多想法,请参阅我关于在简历中获得一些数据科学经验的帖子:
无论如何,要记住的重要事情是投资组合项目的最终结果应该是真正重要的东西,而不仅仅是放在 Github 上的笔记本。向我展示你可以解决一个真正的问题,并创造出有价值的东西,我会比你只是展示你可以进行死记硬背的机器学习练习的项目印象更深刻。
你的数据科学项目失败的原因
原文:https://towardsdatascience.com/why-your-data-science-project-is-failing-3?source=collection_archive---------26-----------------------
以及你能做些什么来防止它
Jo Szczepanska 在 Unsplash 上拍摄的照片
公司对人工智能和机器学习的投资比以往任何时候都多,但大多数数据科学项目都失败了。高达 85%的机器学习项目从未被部署到预测中。原因可能各不相同:数据质量差或难以访问,或者可能缺乏合适的架构。
一个常见的原因是业务和科学团队之间的错位。对结果的不同期望足以破坏数据科学项目。
项目甚至在开始之前就失败了。当你没有和你的商业利益相关者确认你承诺要做的工作的细节时,这个项目就已经注定了。
好消息是事情并不一定如此。
你可以采取一些措施来防止这种可怕的情况发生。在这篇文章中,我将讨论几个我长期以来学到的并且发现特别有用的东西。
了解业务问题
当然,要做的第一件事应该是与业务团队会面。了解他们试图解决的业务问题,以及他们认为你可以如何帮助他们。您需要了解细节,以便能够设计出最佳解决方案。商务人士通常不会对机器学习或统计学有很深的理解。他们可能会要求一个通用的模型,但是你有责任接受他们的要求并将其转化为一个明确的统计学习问题。回归,分类,聚类,你决定。
有时,他们甚至根本不需要模型!机器学习现在很花哨;人们似乎默认了这一点,但可能还有另一个他们没有考虑到的解决方案。你的工作是评估所有的解决方案,并提供最合适的,不管是什么。
询问他们将如何使用该解决方案
一旦手头的问题被很好地定义,你可能想要询问业务计划如何使用你将提供的任何东西。业务团队对机器学习如何帮助他们解决问题感兴趣,但不太考虑他们将如何在实践中使用模型的输出,这种情况比你想象的更常见。如果他们没有考虑过,这是可以的;这就是你发挥作用的地方。深入细节,帮助将他们头脑中可能仍是杂乱无章的想法转化为产品。这不是你希望你的数据科学项目死在上面的那座小山;这一点至关重要。
定义可交付成果
准确地知道人们将如何使用你的模型的输出将有希望帮助你定义可交付物。 deliverable 这个词来自软件开发,一般指一个软件或应用程序。但是,它也适用于数据科学项目。项目的结果,无论是模型对象还是仪表板,都应该是有形的和可测量的。因此,需要仔细定义。
始终与业务团队确认可交付成果的细节,不要做任何假设。你要提供的东西是毋庸置疑的。如果可能的话,包括一个模拟的例子,看看交付将如何。示例可以是来自模型的样本输出或仪表板的图示。一般来说,你做得越详细,成功的几率就越高。
确保你需要的东西是可用的
那么现在你们已经就需要交付什么达成了一致。太好了。但是你拥有成功所需的一切吗?在承诺任何事情之前,总是列出需求是一件好事。您可能还想对数据和技术等基本事物进行高层次的检查。以下是你可能想问的几个问题:
你的项目需要什么数据?
- *你已经有数据了吗,还是需要收集?*根据不同的答案,预计时间和要求可能会有很大的不同。如果你需要收集,那么你将不得不考虑到你的建议。它可能像浏览一个网站一样简单,也可能像设计一个完整的实验一样复杂。
- 让我们假设你已经有了数据。*是你能到达的地方吗?它是可用的形式吗?*如果您的数据是原始的,处于数据湖中的某个地方,可能需要几周或几个月的时间才能恢复正常。
- 即使你的输入是一个体面的形式,你有足够的音量吗?你可能需要几个月前才发布的特性的数据。你有多少数据?代表性如何?你应该等多久才够?
你的项目需要什么技术?
- *您当前的堆栈能够处理这些数据吗,或者您还需要其他东西吗?*当然,你不可能在笔记本电脑上处理几十亿行。
- *生产您的型号所需的技术可用吗?*你可能认为这是一个不成熟的问题,但事实并非如此。如果工程师无法将其投入生产,那么建立最先进的深度学习模型还有什么意义?最好是选择一个更简单的解决方案,有机会快速实现和使用。您总是可以稍后迭代和部署更复杂的模型,但是您将同时开始产生价值。
写一份研究提案
或者一个计划。或者简短。你可以随便叫它什么,但是把它写在纸上*。写一份你承诺要做的事情的书面总结,对双方来说都是双赢的。这对业务团队是有益的,因为他们将有一些参考(如果您在 4-6 周内交付,他们记住您今天讨论的细节的可能性有多大?).但最重要的是,这将有利于科学团队。*
通过写提案,你将有机会陈述你将做什么,为什么,如何做,以及何时做。如果有不清楚的地方或存在误解,将在提案审查中提出来。在花几周时间在一个项目上之前,你就能理清那些*。*
同时,它也是一种保险政策。在每个人都订阅它之后,你就有效地把所有的人都绑定到它上面了。在交付日,如果有人问你为什么没有做一些不是所有人都同意的事情,你可以理直气壮地说这不在提案中。
宣布后续步骤
如果您的项目在完成后部署前需要额外的步骤,请考虑提前列出它们。例如,您应该在本节下的建议中声明任何测试。您可能需要在部署模型之前解释为什么这些步骤是必要的,但是,如果您在开始时就这样做,将会节省时间。此外,如果需要任何技术变革,工程/BI 团队将有更多时间来实施这些变革。从一开始就让他们参与进来,而不是在最后一分钟向他们扔炸弹。这都是计划的问题。而且也很有礼貌。
保持联络
定期与业务团队进行沟通是一个好主意。他们不必是正式的,但将有助于确保你的项目朝着正确的方向发展。如果有什么不太对劲的地方,你会想在你应该交货的那一天之前发现。
此外,业务团队可能比你拥有更多的领域知识。他们的输入可以帮助您做出更现实的假设,或者为您在数据中找到的模式提供背景。
最后,如果你让他们参与项目的所有阶段,这将增加参与度并赢得你的信任。
对于一个项目的圆满结局来说,当然还有其他的障碍。但是,至少我们可以采取措施降低风险。上面的列表来自我自己的经验,并不详尽。
为什么你的循环这么慢
原文:https://towardsdatascience.com/why-your-loops-are-so-slow-166ec67db47d?source=collection_archive---------24-----------------------
编写循环算法和“大 O 符号”概述
(src =https://pixabay.com/images/id-/
介绍
在这个令人惊叹、有时甚至令人恐惧的编程世界里,有许多工具可供程序员用来帮助他们解决问题。数据结构上经常使用的一种工具是循环。循环当然可以指 while-looping、for-looping 和勉强;递归循环。循环的问题是它们可能是严重的性能障碍,然而它们是许多编程操作不可或缺的。
不管你在编程什么,肯定会有多种不同的方式来完成。虽然最终目标可能会被保留,但几乎可以肯定的是,为了实现这一目标,将会有一条不同的道路要走。这也意味着不同的方法可能要花费更多的时间和内存才能得到相同的解决方案。这些都是程序员应该意识到的事情,尽管很难使用尽可能少的内存来实现高性能的完美函数,但是有一些方法可以改进它们的循环,从而提高性能。此外,在计算机科学中有一个公式化的属性,我们可以用它来评估一个函数的效率,这就是所谓的
大 O 符号。
大 O 符号
那么到底什么是大 O 符号,我们如何使用它来提高我们的编程技能呢?大 O 符号是一种数学形式,它描述了一个参数在数值上增加时函数的行为。例如,假设我们在 Python 中有一个基本的求和函数:
def summation(n): total = 0 for number in n: total += number return(total)
列表“n”越长,这个函数循环执行加法和断言操作的次数就越多。你可以想象,在这个列表中很可能有一个非常线性的方程来增加新的迭代。随着 n 范围的增长,编译的时间也会增长。我决定把这个带进 Jupyter,以便更好地形象化,所以如果你想看我用的笔记本,你可以在这里:
https://github.com/emmettgb/Emmetts-DS-NoteBooks/blob/master/Python3/big o notation.ipynb
这是我用来测试通过这个函数传递的不同数量的数字的函数:
def test_speed(numbers): results = {} for number in numbers: start = time.time() total = summation(list(range(1, number))) end = time.time() results[number] = end - start return(results)
该函数使用时间模块来获取每次求和所花费的时间。它传递了一个范围在 1 和数字之间的列表,这意味着我们将能够通过向数字列表中添加新的数字来确定循环了多少个值。让我们来试试吧!
measurements = test_speed([1000, 10000, , ]) print(measurements)
作者图片
现在我们将使用 Plot.ly 对此进行可视化。首先,我们需要将我们的数据放入 DataFrame 中。如果我们只是将这种类型投射到我们的数据上,我们的速度值将是一串数字列中的一个单独的观察值,因此在使用 Plot.ly 之前,我们需要做一些基本的字典到数据帧的处理。首先,我将从字典中取出我们的数据:
speeds = measurements.values() ns = measurements.keys()
现在,我将使用该数据创建一个数据框架:
import pandas as pd df = pd.DataFrame({"Speed": speeds, "Count": ns})
最后,我将使用 Plot.ly 绘制它:
import plotly.express as px fig = px.line(df, x="Count", y="Speed", title='Summation Over Time') fig.show()
(图片由作者提供)
我们的功能实际上是线性繁重的,至少在处理时间方面是如此。在大 O 符号中,这被称为 O(n)。O 代表我们的运营成本,在本例中,因为我们的大 O 符号是 O(n ),所以我们可以通过减去我们函数中运行的两个数字来获得给定总和的运营成本,这两个数字相距一个数值步长。
还有一些其他流行的大 O 符号,在计算机编程中非常常见。O(1)是基线,意味着输入的数量无关紧要。这是你创建任何函数的基线,例如,如果没有循环,也许一个操作,很可能是 O(1)是你要处理的。另一个是 O(log n),这里的税收稍微多一点,但是随着迭代次数的增加,循环趋于平稳。这在需要大量初始化的循环方法中很流行,但每个周期不需要那么多操作。
下一个 O 符号是 O(n log n),O(n log n)通常也是线性的,但通常比 O(n)的斜率更陡。O(n)是指数增长,这意味着每次迭代都要花费前 n 次运行成本的平方。然后是 O(2^n),这更糟糕,通常是指数增长,只是斜率更陡,因为指数现在是迭代次数。最后还有 O(n!).这是 n 的阶乘,阶乘的问题在于它们很快就会失控。虽然计算 5 的阶乘可能需要几秒钟,但计算一个非常大的数的阶乘可能需要几年时间。在计算机编程中,阶乘的典型递归实现更是如此。正如你可能想象的那样,这意味着计算时间随着 n 的增加而急剧增加。我在网上找到了一个很棒的可视化,但我无法在不侵权的情况下将其添加到这项工作中,因此我将提供一个链接来查看它这里。可视化很好地展示了每个符号的样子,并真正揭示了它们之间的差异。
结论
大 O 符号是现代计算的主要素,因为它非常常用于分析函数的效率。大 O 提供的信息可以做什么?当涉及到处理更多的值时,随着符号的急剧增加,某些函数有一些明显的缺点。当然,有一些函数的行为方式是这样的,它们取的值比其他函数少得多,所以使用该函数的意图以及该函数的实际用途对大 O 是否是你要可视化的函数的一个真正重要的部分起着很大的作用。
也就是说,大 O 符号当然是一个有价值的工具。它可以用来分析一个函数的状态有多关键,并且通常被用来判断一个函数是否是可伸缩的。可伸缩性对大企业来说很重要,而本质上不可伸缩的功能在扩展到更大规模时可能会出现问题,因此像这样检查性能指标无疑是有价值的,这样可以更好地了解特定功能对给定问题的应用情况。感谢您的阅读!
为什么你的神经网络以不同的方式不确定
原文:https://towardsdatascience.com/why-your-neural-net-is-uncertain-in-different-ways-a125ce1fa4e5?source=collection_archive---------26-----------------------
区分不确定性有助于我们更好地理解神经网络。
作者图片。由 phatplus 和 smashicons 制作的图标。
欧洲网络充满了不确定性。在通过神经网络提供输入以检索输出之后,我们不能确定我们得到的输出是对现实的正确描述。此外,神经网络的不确定性需要分成两种不同的类型:
1。任意的不确定性:不用更多的数据解决。
2。认知的不确定性:随着更多的数据变得更好。
将不确定性分成这两个独立的部分,可以更好地理解 神经网络实际上是如何学习以及学习什么。此外,处理这两种类型的不确定性需要非常不同的技术,我们稍后会看到。
但首先要做的是。让我们慢慢开始,用一个例子让问题更具体。
假设我们正在编写一个医疗软件来预测病人患心脏病的风险。为了进行预测,我们使用一个神经网络,该网络将患者的数据作为输入,包括*年龄、身高和体重。*作为输出,网络产生一个百分比,例如 2 % ,意味着患者在未来 10 年内有 2 % 的几率患心脏病。
不用说,我们认为我们做了所有的事情。我们有一个高质量的数据集来进行训练,将数据分成训练、验证和测试部分,并设计和评估了多个架构。结果,我们最终得到了一个神经网络,我们认为它能尽可能好地预测心脏病发作的风险。
现在,病人彼得走了过来。我们把彼得的数据输入我们的神经网络,它会吐出 40 %的心脏病发作风险!这是一个非常高的风险,彼得想知道我们的预测有多确定,这是可以理解的。
我们预测的不确定性可能有两个原因:
1.与彼得有相同数据(年龄、身高、体重)的人可能有非常不同的心脏病发作风险。我们的网络输出的只是所有这些潜在风险的平均值。比平均值更现实的是可能风险的概率分布。这个分布越分散(方差越大),我们预测的不确定性就越高。这就是所谓的 任意不确定性。
2.不确定性的第二个潜在来源如下:也许 Peter 的数据相当特殊,在培训期间,我们没有遇到任何类似的数据点,或者像他这样的数据点非常少。因此,基本上输入对我们的神经网络来说是陌生的,它没有任何线索。所以它只输出 40 %,因为它必须给出一些输出。这种不确定性与任意不确定性非常不同,被称为 认知不确定性。
知道这两种不确定性和它们之间的区别对我们给 Peter 建议没有帮助。神经网络预测出 40 %的风险,要么接受,要么放弃。我们没有机会弄清楚神经网络是确定无疑还是毫无头绪。
那么,我们如何才能建立一个神经网络来告诉我们它有多确定呢?因为随机的和认知的不确定性是如此不同,我们需要用不同的技术来解决它们。
处理任意的不确定性
记住,随机不确定性是数据固有的不确定性。无论我们收集了多少训练数据,总会有年龄、身高和体重相同但心率风险不同的人。因此,我们改变神经网络来输出概率分布,而不是对每个输入进行单一预测。
我们如何做到这一点?首先我们选择一种分布类型,例如正态分布 N(μ,σ ) 。正态分布有两个参数,均值,方差 σ 。
现在,我们的神经网络不再产生单一的心脏风险百分比,而是将它改为输出平均值*和方差的值*。
然后,以这样的方式调整损失函数,即训练网络的输出和 σ 最大化观察训练数据的可能性。本质上,我们的神经网络只预测了平均值,但现在它额外预测了来自数据的方差——随机不确定性。
趣闻: 最小化 MSE 损失(均方误差损失)和最大化关于分布 N(μ,1)的似然性是一样的,意味着方差σ不是学习的而是固定为 1。
如果你想亲自尝试这些概念,TensorFlow 有一个非常棒的扩展, Tensorflow Probability 。你可以选择你的发行版,图书馆会处理所有其他的事情。
回到我们的不确定性。我们让我们的神经网络告诉我们心脏风险百分比以及它所看到的数据中的不确定性。但是如果没有足够的数据呢?回到我们的例子,如果 Peter 的数据是特殊的,并且训练数据只包含非常少的与 Peter 相似的数据点,那该怎么办?然后我们的网络会给我们一些随机的风险百分比和随机的方差,但是 T2 基本上不知道。这直观地解释了为什么任意不确定性和认知不确定性是独立的,以及为什么我们必须分别处理认知不确定性。
处理认知不确定性
认知不确定性是不确定性,由于信息不完整,由于没有看到所有的数据。在大多数真实世界的场景中,我们手头永远不会有关于我们问题的所有数据。因此,一些认知上的不确定性将永远存在。尽管如此,认知的不确定性随着更多的数据而减少。
让我们暂停一会儿,想想我们如何能够对我们神经网络的当前认知不确定性进行建模。我们实际上不确定什么?如果给我们更多的数据,会有什么变化?
答案就在我们面前。我们网络的权重。随着更多的数据,我们的权重将会改变。我们不确定自己的体重。那么,我们不使用固定的数字作为权重,而是使用适当的概率分布来模拟当前认知的不确定性,如何?
这正是贝叶斯神经网络(BNNs)的本质。bnn 将权重视为概率分布,而非数字。
他们使用贝叶斯推理用更多的数据更新这些权重概率分布(这就是这个名字的由来)。训练它们的成本更高,但除了网络的预测,我们还得到一个数字,告诉我们我们的网络在认知上有多不确定。
如果你想试试贝叶斯神经网络, Tensorflow Probability 支持它们。
结论
神经网络的输出总是带有不确定性。此外,神经网络的不确定性可能是由于数据中的方差(随机不确定性)或由于没有看到所有数据(认知不确定性)。这两种类型的不确定性都可以用它们自己的技术来解决和量化。
医学预测,就像我们例子中的彼得的心率风险,只是了解神经网络实际上有多不确定的一个重要方面。在安全关键的环境中,人类的生命往往处于危险之中,概率深度学习技术可以使神经网络更加安全和可靠。
觉得这个故事有趣?你可以在这里成为一个中等会员来支持我的写作:medium.com/@mmsbrggr/membership。你将获得所有媒体的访问权,你的部分会员费将直接支持我的写作。
欢迎在 LinkedIn 上向我提出私人问题和评论。如果你喜欢这篇文章,让我告诉你我的简讯:【marcelmoos.com/newsletter。
如果你想更深入地了解概率深度学习,请查看以下资源:
- tensor flow Probability 中的概率层回归 — TensorFlow 博客
- 我的深度模特不知道的……—亚林·加尔
为什么你的组织不应该给低效的流程增加更多的资源
原文:https://towardsdatascience.com/why-your-organisation-should-not-add-more-resources-to-inefficient-processes-3695eecaf905?source=collection_archive---------25-----------------------
业务流程自动化(BPA)
不自动化重复流程的真实成本
莱昂·奥阿尔赫在 Unsplash 上的图片
并非每个组织中的每个流程都像一台运转良好的机器。如果说有什么不同的话,那就是超高效流程是个例外,而低效流程则更为普遍。为什么这是一个问题?因为每年,公司都会因为流程效率低下而损失 20–30%的收入。不用说,收入减少意味着利润减少。
因此,如果你的组织的流程效率低下,你很可能会损失收入。这是因为效率低下会对您交付高质量客户体验的能力产生负面影响。它们还会阻碍您的上市时间,抑制您的创新能力。
另一个问题是——它们会让你的员工困惑和沮丧,影响他们的参与度和积极性,增加他们的压力,有时还会导致精疲力竭。因此,员工流动增加,这增加了您的人力资源成本,并再次影响您的收入和利润。所有这些结果都不利于你的组织的成长和成功。
那么,解决效率难题的最佳方式是什么呢?增加更多的人力资源,希望他们能找到让流程更高效的方法?许多组织认为这是正确的答案。但是我们不敢苟同。
同样的动作,差的结果
疯狂就是一遍又一遍地做同样的事情,却期待不同的结果
[人名]阿尔伯特·爱因斯坦(犹太裔理论物理学家)
这些词在组织和低效流程的背景下确实有意义。当然,选择一遍又一遍地做同样的事情可能并不完全称得上“疯狂”。然而,这是一个陷阱——许多组织都曾陷入其中。
其中一个选择是继续使用集成不良的遗留应用程序和系统,即使它们不再能有效地应对不断变化的业务环境中的新挑战。这是一个巨大的问题,因为它会导致次优的功能孤岛和工作流,从而对企业范围的通信和协作产生负面影响。它还迫使组织继续进行单调乏味的手动任务,这降低了生产率,增加了错误和资源负担。最后,不能相互“对话”的系统意味着员工不断在不同的信息源之间转移,导致成本更高、生产率更低和人员流动更大。从更广的层面来看,过时的系统使得保持竞争优势、确保客户满意度或实现持续增长变得几乎不可能。
许多公司采用的另一种常见的传统方法是简单地向低效流程添加更多资源。然而,并不是所有的旧思想都是明智的,这是其中之一。简单地将更多的人添加到一个中断的流程中并不能解决问题的根本原因。此外,人并不总是流程效率低下的原因,或者仅仅是原因。因此,简单地增加劳动力规模类似于用错误的药物治疗疾病。
流程效率低下的真正原因
“有效性就是做正确的事情;效率就是把事情做对。”
彼得·德鲁克
对可用资源的不当规划是流程效率低下的主要原因。未能识别运营相互关系、突发事件和风险也是一个原因,因为缺乏关于责任、问责和预期结果的清晰性和透明度。反馈不一致或不充分,沟通不畅也会降低效率。此外,当流程是操作惯性的结果时(“如果它没坏,为什么要修复它?”),它们通常会导致瓶颈、冗余、错位和返工,所有这些都会降低流程效率和生产率,更不用说盈利能力了。
现在,如果在一个特定的过程中需要更多的人来满足增加的生产量,这是一个过程正在增长的信号。因此,企业很可能从中获得更大的收入。两者都是好结果。然而,在一个成长过程中增加更多的人员,或者更糟糕的是,一个低效的过程可能会影响其盈利能力和投资回报率。无论如何,这些都不是好结果。
由于不了解流程效率低下的真正原因及其实际成本,您在黑暗中工作,不知道自己在哪里,也不知道要去哪里。这只会加剧你的低效率问题,导致高成本、低竞争力和差结果的恶性循环。这些问题不会简单地通过增加员工来解决。
改善流程低效的秘诀
想想像诺基亚、黑莓、柯达和雅虎这样的公司——它们曾经都被认为是各自领域的领导者,并准备好了多年的增长和成功。即使拥有庞大且不断增长的劳动力,这些组织还是设法从雷达上消失了,大部分消失在无结果的深渊中。导致这些结果的两个主要原因是创新失败,以及未能适应不断变化的市场现实。柯达错过了数码摄影革命。诺基亚未能将其注意力重新集中在智能手机和智能手机软件上。黑莓忽略了基于触摸屏的技术。雅虎没有抓住关键的机会,否则今天的世界会是雅虎而不是谷歌。
这些公司和其他许多已经过时的公司可能会通过采用新技术和自动化现有流程而受益。这些选择可以释放他们的人力资源,并允许他们专注于更高价值的任务,这些任务可能会为流程和业务带来更好的结果。
智能流程自动化(IPA)、机器人流程自动化( RPA )、人工智能和机器学习都为提高流程的速度、简单性和效率提供了很好的途径。通过自动化重复、枯燥或费力的任务,你可以在不增加更多资源的情况下获得惊人的结果。无论如何,你可以重新安排部分员工的工作,让他们执行其他重要任务,为你的组织带来更大的战略价值。自动化还可以帮助您加快上市速度,最大限度地减少错误,简化工作流程,并提供更好的客户和员工体验。
结论
爱因斯坦说得对。以同样的方式做事情(增加更多的资源)并期待不同的结果(更有效的过程)是一个巨大的愚蠢,具有严重的长期后果。在当今急剧变化的经济形势下尤其如此。想要改进您的流程吗?不要再纠结于增加劳动力,开始考虑自动化和技术创新。最优解触手可及。一定要抓住它!
使用 Itertools 的超快速 Python
原文:https://towardsdatascience.com/wicked-fast-python-with-itertools-55c77443f84c?source=collection_archive---------2-----------------------
快速浏览一种通过使用 itertools 模块使 Python 更快、更有效地进行机器学习的简单方法。
https://unsplash.com/photos/eH_ftJYhaTY
介绍
最近,我写了一篇文章,详细介绍了一些我认为在 Python 编程语言中非常有用的标准库工具。那篇文章的反响非常好,所以我决定再写一篇文章,列出标准库中我最喜欢的一些模块。如果你有兴趣阅读这两篇文章,你可以在这里查阅:
</10-surprisingly-useful-base-python-functions-822d86972a23> </15-more-surprisingly-useful-python-base-modules-6ff1ee89b018>
然而,每当我写这些文章时,我都会遇到一个小问题。对于标准库中的许多模块,在模块内部有一个相对较小的方法或类型集合是很常见的。然而,偶尔会有一些更有用的 Python 模块,它们更加广泛,具有如此多的函数和类,以至于在那些文章中不可能涉及到它们。考虑到这一点,我决定从一个名为 functools 的模块开始这项任务。我写了一篇关于它有多有用的文章,你可以在这里查看:
这些文章中提到的另一个模块是一个叫做 itertools 的小模块。Itertools 是一个工具箱,用于在比我们通常在 Python 中使用的更高效、更古老的算法上构建定制迭代。不用说,在 Python 这样的语言中,当处理大量数据时,几乎总是需要考虑性能,像这样提供更有效迭代的工具非常有价值。
一般来说,编程速度变慢的最常见原因是过多的循环。迭代循环,特别是在单线程应用程序中,会导致很多严重的速度下降,这肯定会在 Python 这样的编程语言中引起很多问题。幸运的是,标准库模块 itertools 为我们处理迭代问题的典型方法提供了一些替代方法。不用说,这对于减少语言性能的障碍非常有价值。
笔记本
值得注意的迭代器
与原始文章列表中的大多数模块一样,在这个模块中,肯定有一些函数比其他函数有用得多。记住整个模块或包的内容可能会令人不知所措和困难。然而,有一种方法可以使你的学习适应一种更好的方法,在这种方法中,为了更快地学习,更有用的功能被优先考虑。记住这一点,下面是 itertools 使用的一些最重要的函数,以及它们的作用的简要描述。
import itertools as its
计数()
count 函数是一个迭代器,它将返回按特定步骤递增的值。这类似于迭代一个范围生成器,但是,有一些关键的区别。count()方法允许我们将步长数量作为关键字参数。此外,count()方法也将一直持续计数到无穷大。考虑到这一点,包含一个打破这个循环的条款可能是一个好主意,否则,它将永远运行下去。
for i in its.count(start = 0, step = 1): if i < 20: print(i) else: break
与基本迭代的解决方案相比,这种迭代方法也具有明显更好的性能。
周期()
cycle()方法可用于移动到 iterable 参数的下一次迭代。使用该函数的一个值得注意的部分是,它将创建并保存提供给它的每个迭代的副本。与 count 类似,这个迭代器也将无限返回,并在下次返回之前返回给定数组中的所有 dim。
array = [5, 10, 15, 20] for z in its.cycle(array): print(z)
重复()
repeat()迭代器将一次又一次地不断返回一个提供的对象。这在某些情况下很有用,并且会无限返回,这是目前为止所有这些函数的共同点。
for z in its.repeat(array): print(z)
链条()
chain()迭代器从第一个 iterable 开始返回素,直到用完为止,然后继续到下一个 iterable,直到用完所有 iterable。基本上,这将允许我们将多个 iterable 合并成一个长 iterable 来循环。当然,为了利用这个函数,我们还需要提供另一个 iterable:
array2 = [7, 8, 9, 10]
我们将每个 iterable 作为一个单独的参数提供,而不是一个列表:
for z in its.chain(array, array2): print(z)
压缩()
compress()迭代器过滤 dim 中的素,只返回那些在选择器中有对应素的素,该素的值为 True。
for z in its.compress('ABCDEF', [1,0,1,0,1,1]): print(z)
这个迭代器主要用于剔除不为真的参数。在上面的例子中,位数组中有两个零,这意味着映射到被迭代的字符。这两个零在 B 字符和 D 字符上,所以这两个字母在例子中不会被重复。
伊斯利斯()
我想介绍的最后一个迭代器是 islice()迭代器。这个迭代器返回数组位置的切片。例如,如果我们在位置 2 分割迭代,那么在迭代器到达该位置的值后,它将停止迭代。
for i in its.islice(array2, 2): print(i)
FizzBuzz 的一个例子
FizzBuzz 游戏是编码面试和一般编程实践中常用的迭代问题的一个经典例子。通常,每当这被写入 Python 时,都是使用条件来编写的,就像这样:
for i in range(1,101): fizz = 'Fizz' if i%3==0 else '' buzz = 'Buzz' if i%5==0 else '' print(f'{fizz}{buzz}' or i)
虽然这是一个非常好的方法,但是重要的是要记住,使用 itertools 迭代器意味着在其他地方使用迭代器的 Pythonic 实现。也就是说,itertools 的迭代器通常比标准 Python for 循环的常规迭代快得多。这肯定是要记住的,因为当你能够比其他人更快地编写一个函数来解决这样的问题时,它可能会给招聘经理留下深刻印象。
为了促进这种方法,我们需要做的第一件事是使用循环迭代器找出将被我们的两个数整除的 dim:
fizzes = its.cycle([""] * 2 + ["Fizz"]) buzzes = its.cycle([""] * 4 + ["Buzz"])
每当我们决定遍历 count()迭代器时,这将找到所有能被 4 或 2 整除的整数。我们还将为 fizz 和 buzz 一起打印的时候设置一个新的阵列。
fizzes_buzzes = (fizz + buzz for fizz, buzz in zip(fizzes, buzzes))
最后但同样重要的是,我们将使用另一个带有 its.count()迭代器的 zip()循环来获得结果。看一看:
result = (word or n for word, n in zip(fizzes_buzzes, its.count(1)))
最后,我们将对结果进行切片,以便只获得迭代器返回的 100 个值。
for i in its.islice(result, 100): print(i)
现在我们的整个 FizzBuzz 函数看起来像这样:
def fizz_buzz(n): fizzes = its.cycle([""] * 2 + ["Fizz"]) buzzes = its.cycle([""] * 4 + ["Buzz"]) fizzes_buzzes = (fizz + buzz for fizz, buzz in zip(fizzes, buzzes)) result = (word or n for word, n in zip(fizzes_buzzes, its.count(1))) for i in its.islice(result, 100): print(i)
结论
使用 itertools 的 Pythonic 代码通常更快、更简洁。有了这两个观察,很容易想象为什么这么多人相信这个模块。不用说,itertools 肯定是一个充满迭代器的非常有价值的模块。显然,其中一些迭代器可能比其他迭代器更有价值。希望这个对工具的小偷偷摸摸和详细描述能启发你试着捡起它并更熟悉这门语言。不管你在这方面的情绪如何,我认为 itertools 仍然是该语言中最有用的模块之一。感谢您的阅读,以及您的支持!
熊猫融化,堆叠,宽变长,把列变成行
原文:https://towardsdatascience.com/wide-to-long-data-how-and-when-to-use-pandas-melt-stack-and-wide-to-long-7c1e0f462a98?source=collection_archive---------1-----------------------
使用实例了解如何重塑熊猫数据框架
照片由 Pixabay 来自 像素
重塑数据帧通常需要将列转换为行,反之亦然。
重塑数据帧有几个原因:
- 整理混乱的数据集,使每个变量都在其列中,每个观察值都在其行中。
- 为分析或可视化准备数据集的一部分。
每当我需要使用这些功能并复制粘贴解决方案时,我通常会使用谷歌。谢谢 stackoverflow!
在这篇文章中,我谈论熊猫。melt(),。stack()和。wide_to_long()。这些函数用于将列转换为行,也称为将数据帧从宽格式转换为长格式。
作者提供的宽而长的数据
希望读完这篇文章后,现在唯一的谷歌搜索将是官方文档和语法!
对于前两个函数,我们将使用下面的数据集。
作者的广泛数据框架
任务:将所有月份列移动到一个名为‘Month’
的列下。其单格中的值将被放入另一个名为‘Score’.
的列中
作者提供的预期数据框架示例
1.融化()
熊猫[.melt()](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.melt.html)
通常是将宽数据帧转换成长数据帧的首选函数,因为它既灵活又简单。
。作者的熔化演示
df.melt()
将具有公共值的相关列捆绑到一个列中,称为“变量”。最初在这些列中的值存储在另一个名为“value”的列中。
.melt()
句法。
df.melt(*id_vars=None*, *value_vars=None*, *var_name=None*, *value_name='value'*, *col_level=None*, *ignore_index=True*)
所有这些参数都是可选的。让我们看看他们是什么意思。
id_vars
—列名列表,将保持不变,不会被改变形状,也称为标识符变量。如果没有提供,所有的列将堆叠成一列。
value_vars
—要堆叠成一列的列的列表。
var_name
–新列的首选名称,用于保存重新调整后的列名。如果未提供,默认名称为“变量”。
value_name
–列的首选名称,其中包含来自重新调整的列的值。如果未提供,默认名称为“值”。
让我们探索不同参数的.melt()
。
df.melt() — 未提供参数
所有的列都被重新整形
df.melt ( id_vars= …)
这里,我们提供了一个我们不想堆叠的标识符列的列表(你也可以在这里提供一个单独的列)。所有其他列都将被重塑。
注意,这些标识符列将对每个重新整形的列重复。例如,播放器 names, team, and games
每隔month
重复一次。
df.melt ( id_vars = …,value_vars = …)
value_vars
保存要堆叠的列(或列列表)。下面,只重塑了两列;‘February’ and ‘June’
还有一个 id 变量‘Name’
。其余的从结果数据帧中删除。
df.melt ( id_vars = …,value_vars = …,var_name = …,value_name = …)
var_name
和value_name
分别提供堆叠列的名称及其对应的值。默认名称为“变量”和“值”。
我们的预期任务结果:这里不提供要堆叠的value_vars
。因此,而非 id_vars
的所有列将被堆叠。我们还传递堆叠列的名称。
融化后保存指数()
ignore_index = True
是融化功能的默认值。这意味着旧的索引被删除并用从 0 开始的范围索引代替。
如果索引对数据帧有意义(例如,它包含每个玩家的实际 id),首先重置索引。原始索引变成一列,并创建一个新的 RangeIndex。
第 1 步:使用reset_index()
将索引释放到名为“index”的列中。然后将此列重命名为“ID”。
第二步:melt()
数据框。包括“ID”作为标识符变量,以便它不被整形。
2。stack()
熊猫的.stack()
方法也将宽数据帧转换成高数据帧。
最大的不同是.stack()
利用了索引,对所有不是索引的列进行了整形。
作者演示的 df.stack()
让我们来看看我们的原始玩家分数数据集。
原始宽数据集
现在让我们把它叠起来。
每个索引的所有列都已堆叠。结果是一个多级索引 系列对象。
.stack()
方法获取所有的列,并将它们放到最内层的索引中。
现在,如果我们想要再现与上面的熔化函数相同的输出,我们需要经历一系列的步骤;
set_index()
。将索引设置为我们的标识符变量;Name, team,
和数量games
。
2.stack()
。这将产生一个多级索引数据框架。
3.reset_index()
。这将释放多级索引并创建一个新的 RangeIndex。
4.rename
与‘Month’
和‘Score’
匹配的列
另一个的例子df.stack()
任务:将AA, BB and CC
列堆叠在一个名为‘Labels’
的列下。Date
不应被整形,因为它是标识符变量。
df1 = df.set_index('date') df1 = df1.stack() df1 = df1.reset_index() df1 = df1.rename(columns = {'level_1':"Labels", 0: 'Values'}) df1
同样的例子使用 df.melt()
df.melt(id_vars = 'date', var_name = 'Labels', value_name = 'Values')
3.wide_to_long()
melt()和 stack()函数获取几列并将它们堆叠到一个列中。
如果我们希望将几个列捆绑成两个有意义的列呢?例如,我们不再像以前那样按月分组分数,而是按月分组分数和按月分组游戏。
输入熊猫[.wide_to_long()](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.wide_to_long.html)
。
pd.wide_to_long()作者演示
作者演示 pd.wide_to_long 的另一个例子
wide_to_long()
以一种非常特殊的方式工作,它实际上利用了熊猫的.melt()
。它需要四个必要的参数,但最重要的方面是列名的显示方式。
要堆叠的列名必须是特定的格式。
wide_to_long()函数的列格式
例如,对于上面的数据框架,下面是列。
- 要堆叠的 df_1 列;
games_jan, games_feb, scores_jan, scores_feb.
- df_2 列;
sick2017, sick2018, off2017, off2018
群组名称为'games', ‘scores’, ‘sick’, ‘off’.
标签是‘jan’, ‘feb’, ‘2017’, ’2018'
。
分隔符是‘_’ and empty string ''.
如果它们的格式不同,您需要重命名列。
语法
pandas.wide_to_long(*df*, *stubnames*, *i*, *j*, *sep=''*, *suffix='\\d+'*)
前四个参数必须提供。
df
—要整形的数据帧。stubnames
—相关列的组(前缀)。以这些字符串开头的列将被组合在一起。i
—标识符变量,或不堆叠的列。j
—包含列的后缀或标签的列的名称。
可选参数
sep
-分隔组名(前缀)和列名标签(后缀)的字符。默认分隔符是空字符串。
6.suffix
—后缀的格式(正则表达式)。默认情况下,该函数接受数字字符;后缀= ‘\d+’
。如果后缀包含非数字字符,例如上面例子中的“jan”和“feb ”,使用正则表达式’.+’
搜索后缀中的任意数字字符。
让我们来探究熊猫的几个例子
例 1。
考虑下面数据帧;
任务:这两个组(games
和scores
)每个都有自己的列保存值。季节标签(后缀 1 和 2)位于“季节”一栏下。
pd.wide_to_long(data_d, stubnames=['games','scores'], i=['Name','Team'], j='Season')
注意,我们没有提供参数sep
和suffix
,因为缺省值适用于我们的数据帧。
最后一步是重置索引以消除 multiIndex。
wtl.reset_index()
例 2
这里我们有第一季和第二季玩家获得的奖牌。
每个赛季的奖牌数据框架
任务:将medals
列聚合成一个名为‘奖牌’的列。标签堆叠在另一个名为“季节”的栏中。只显示一个* id 变量的‘名称’。*
*pd.wide_to_long(data_g, stubnames=['medals'], i=['Name'], j='Season', sep = '_', suffix='.+')*
只有一个群体;‘medals’
。我们还提供了sep
和suffix
参数,因为它们不同于缺省值。
注意:我们使用了一个标识符列i= ‘Names’
,但是所有其他列仍然显示在结果中。当将df
参数传递给函数时,我们可以删除不需要的列。
*pd.wide_to_long(df = data_g.drop(['Team','Games'],axis=1) , stubnames=['medals'], i=['Name'], j='Season', sep = '_', suffix='.+').reset_index()*
例 3:
我在 stackoverflow 这里发现了这个问题。
*任务:*将顶层列‘PSC’
和‘Intel’
调整到一个名为‘SAT’的列下。日期也应该堆叠在它们自己的称为“日期”的列中。他们的价值归入“NVAL”一栏。 id 变量是‘FID’, ‘Lat’, and ‘Long’.
按作者的多索引列
步骤 1:通过连接名称来合并两个列级别。请参见上面的列级别。我们需要PCS
和Intel
(级别 I)作为列名的后缀(最后一部分),因此在下面的代码中是‘{j}{i}’
。
*#List comprehension. #every column has 2 names #on different levels. #return names joineddf.columns = [f'{j}{i}' for i,j in df.columns] df*
第二步:使用wide_to_long
将标签PSC
和Intel
转换到一列“SAT”下。日期都不同,因此在‘stubnames’
参数下有四组。
*df_wtl = pd.wide_to_long(df, stubnames = ['23-May','18-May','25-May','28-May'], i=['FID','Lat','Lon'], j='SAT', suffix= '.+', sep='')*
我们看到很多“不”,因为Intel
和PSC
都适用于特定的日期。
第三步:使用df.melt
将日期堆叠在一个名为‘Date’
的列下。这些值进入另一个名为‘NVAL’
的栏目。记得在.melt()
前reset_index()
,在dropna()
后。上面创建的SAT
现在是标识符列之一。
*#reset the index #melt #drop Nans df_wtl = df_wtl.reset_index()df_wtl.melt(id_vars =['FID','Lat','Lon','SAT'], var_name = 'Date', value_name = 'NVAL').dropna()*
最后,调用df.reset_index(drop=True)
从 0 开始创建一个新索引,并删除上图中的现有索引。
结论
在本文中,我们研究了三种将列转换为行的方法。
我们注意到df.melt()
和df.stack()
函数通过将几列捆绑成一列来做同样的事情。
df.stack()
获取列并将它们转置为最内层索引,保留原始索引,创建多级索引。不应堆叠的列应设置为索引。
df.melt()
提供了选择要重塑的列以及结果列的名称的灵活性。但是,它会删除现有的索引并用新的索引替换它。
pd.wide_to_long()
将多组列捆绑成两列或更多列。它还要求列名采用特定的格式。
在这里找到包含所有代码的 Jupyter 笔记本。感谢您的阅读!
WiDS Datathon 2021:我的第一个 Kaggle Datathon
原文:https://towardsdatascience.com/wids-datathon-2021-my-first-kaggle-datathon-806a99cbfb19?source=collection_archive---------41-----------------------
我的团队预测糖尿病的方法
Diabetesmagazijn.nl 在 Unsplash 上拍摄的照片
数据科学中的女性(WiDS)是一项支持全球数据科学家的全球性运动。妇女参与发展倡议每年举办一次数据马拉松,鼓励所有参与者通过应对社会影响挑战来提高技能。本次比赛最精彩的部分是本地研讨会和在线资源,以帮助初学者提高他们的数据科学技能。我参加比赛有助于我与几位经验丰富的数据科学家互动,并向他们学习。这篇文章是对我的团队所采取的方法的简要说明。
问题描述
竞赛的目的是创建一个模型,以确定入住 ICU 的患者是否被诊断患有特定类型的糖尿病,即糖尿病。AUC_ROC 是用于评估模型性能的度量。
数据分析
比赛的数据集可以从 kaggle 访问。该数据来自麻省理工学院的 GOSSIS(全球开源疾病严重程度评分)计划。数据集由 180 个要素组成。根据字典,数据中有 7 类特征。由于数据集中有大量要素,因此对数据进行了分类分析。对数据的进一步研究表明,我们的数据是不平衡的。
功能集中有许多缺失值。还观察到一些特征成对丢失。例如,D1 _ 葡萄糖 _ 最大值和 D1 _ 葡萄糖 _ 最小值的缺失值数量相同。我们还注意到在一些 apache 和 vital 列中有许多共同的值。
数据清理
数据科学项目最重要的部分是正确清理数据。有些行的“年龄”等于 0。一个有趣的发现是,年龄=0 的患者具有成人的身高和体重。由于这似乎是一个错误,所有这些行将被删除。“种族”的缺失值用“其他/未知”填充。因为只有几行缺少性别值,所以该列用最常见的值“M”填充。我们试图用相应的身高和体重值来计算“bmi”字段。但是,这种方法不适用于该数据集,因为所有缺少的“bmi”值都缺少与之关联的“身高”或“体重”值。因此,这些特征中缺失的值将使用相应性别的特征平均值进行估算。功能“icu_admit_source”的缺失值使用“hospital_admit_source”列填充。
正如在数据分析一节中所讨论的,d1_max 和 apache 变量有许多共同的值。因此,d1 变量的缺失值使用相应的 apache 值来填充。
有些最小值和最大值列的最小值大于最大值。我们颠覆了这些价值观。我们还删除了所有值完全相同的列。数据字典描述有助于使用其他列填充某些要素的缺失值。
我们删除了数据集中所有高度相关的列。我们还删除了一些缺少很多值的列和一些没有值的列。我们为所有分类变量创建了虚拟变量。
特色工程
由于领域知识有限,我们的团队没有做很多功能工程。由于数据集中有大量的要素,我们从数据中移除了所有高度相关的要素。我的队友莉亚创造了一个非常重要的新功能,做得非常好。新的特征是肾功能的估计值。
分类
我们实现了一些基线模型来检查不同算法的性能。由于数据不平衡,我们试图使用 SMOTE 和 ADASYN 等技术来改进模型。不幸的是,这种方法没有给出任何预期的结果,这导致了对基于树的模型的关注。一般来说,据观察,像 xgboost 和 lightgbm 这样的模型在 Kaggle 比赛中工作得非常好。我们还注意到,这些模型在这个数据集上工作得很好。我们的最终模型是超参数调谐 lightgbm 模型。该模型在最终排行榜上的最终得分为 0.86,这对于初学者来说是一个相当好的模型。
结论
参加这次比赛是一次美妙的经历。有经验的 kagglers 的公共笔记本是学习新概念和新技术的重要资源。我建议所有初学者都参加 datathons,这样可以提高您的数据科学技能。我们也意识到了领域重要性在数据科学领域的重要性。
维基百科是一个有价值的数据科学工具
原文:https://towardsdatascience.com/wikipedia-as-a-valuable-data-science-tool-b43b7?source=collection_archive---------25-----------------------
参考书目
关于维基百科的 TDS 文章集
作者图片
几天前,我在编辑队列中偶然看到了由尼古拉·梅鲁索撰写的这篇文章,并立即被吸引住了——维基百科是世界上最大的公共信息平台,但我很少遇到使用这个平台进行各种分析、教程等的 TDS 文章。我试图找到并编辑 TDS 文章和教程,这些文章和教程将维基百科扩展为数据科学项目的宝贵资源和工具。
用维基百科推进自然语言处理
Melluso 的帖子很好地概述了如何使用维基百科来改进自然语言处理任务,如命名实体识别和主题建模。
“十多年来,维基百科一直被用作知识来源,并在各种应用中反复使用:文本注释、分类、索引、聚类、搜索和自动分类生成。事实上,维基百科的结构有许多有用的功能,使其成为这些应用的良好候选。”
他通过他的文本分类项目以及几个可视化的结果来扩展维基百科的优点。
维基百科中冠状病毒的语言-可视化
回到 2020 年 2 月, Felipe Hoffa 发表了这篇文章在维基百科中追踪新冠肺炎新闻的全球传播和趋势。这篇文章短小精悍,包含了视觉效果来补充他的分析。费利佩发现,普通话中的“冠状病毒”比任何其他语言都早 9 天开始流行,日语和韩语是最先赶上普通话的语言,意大利语、挪威语和波斯语的反弹力度最大。通过维基百科追踪新闻本身就很令人满意,但当考虑到涉及疫情在几天内接管世界的页面变化时,这尤其有趣。
维基百科数据科学:与世界上最大的百科全书合作
2018 年, Will Koehrsen 写了一篇关于与维基百科合作的更一般的文章,因为其庞大和扩张的性质可能会让许多人感到害怕。这篇文章为那些学习如何以编程方式下载所有英语维基百科的人提供了一个教程,以高效的方式解析数据,并行运行操作以充分利用我们的硬件,并设置和运行基准测试以找到高效的解决方案。Will 写道:“拥有大量数据是没有用的,除非我们能够理解它们,因此我们开发了一套方法来有效地处理我们项目所需信息的所有文章。
Python 的维基百科 API
Tanu N Prabhu 在 2020 年撰写了这篇文章简单概述了如何使用维基百科的 API 以及 GitHub 知识库。本文是访问和解析大量可用信息的简明基础教程。
🔥约塞米蒂国家公园的野火建模
原文:https://towardsdatascience.com/wildfire-modeling-in-yosemite-national-park-666f45c9a0a0?source=collection_archive---------21-----------------------
李晟在 Unsplash 上拍照
这篇文章将重点介绍我们在 Jupyter 笔记本中使用谷歌地球引擎 (GEE)、 geemap、 GeoPandas 和 GRASS GIS 对野火事件建模的教程中最重要的部分。通过我们的教程,你可以在 2020 年夏季在美国加州约塞米蒂国家公园的三个区域进行火灾模拟(from 2020-06-20 through 2020-09-22
)。它有三个主要部分:获取数据、导入数据和 Wildfire 模拟。
本教程源于Mario Gulich 高级空间研究所 组织的使用 GRASS GIS 软件进行地理空间数据处理和分析研讨会的最终工作,由 Veronica Andreo 博士授课。
我们教程的完整代码可以在:https://github.com/acoiman/wildfire_modeling找到
1.获取数据
获取模型所需的数据可能是一项艰巨的任务。有时,数据不容易获得,因为它们很少或分散在广泛的来源中。在本节中,我们将向您展示一种为 wildfire 建模目的轻松收集数据的方法。下表显示了本教程中使用的数据。
本教程假设您正在一个 Jupyter 笔记本和一个 Python 环境中工作,其中包含所有必需的包。您还需要安装最新版本的 GRASS GIS 并拥有一个有效的 GEE 帐户。我们的 Python 环境基于 Ubuntu 20.04 上的 Anaconda 安装。您需要安装以下不包含在 Anaconda 中的包:Geopandas、GEE Python API、eeconvert、geemap。
1.2 从 GEE 下载数据
我们将调用 WDPA 要素集合(FC)并提取约塞米蒂国家公园多边形。我们将把提取的 FC 转换为地理数据框架(GDF ),并将其作为 shapefile 保存到我们的工作目录中。
# get World Data Protected Areas (WDPA) FeatureCollection pa = ee.FeatureCollection("WCMC/WDPA/current/polygons")# Yosemite National Park polygon filter = ee.Filter.inList('NAME', ['Yosemite National Park']) yosemite = pa.filter(filter)# transform Yosemite fc into gdf yosGDF = eeconvert.fcToGdf(yosemite)# convert gdf into shp yosGDF.to_file("gisdata/yosemite/shp/yosemite.shp")
作者照片
为了从 GEE 获得 100 小时的燃料湿度、风向和风速数据,我们首先需要调用 GRIDMET ImageCollection 并按日期过滤。其次,我们将创建一个矩形,用于裁剪数据。接下来,我们将选择所需的数据并计算模式。生成的图像将被裁剪为之前创建的多边形。之后,我们将创建 2000 个随机点,用于使用平均值对图像进行采样。最后,生成的 FC 将被转换为地理数据框架,并作为 shapefile 保存到我们的工作目录中。
# load GRIDMET ImageCollection gridmet = ee.ImageCollection('IDAHO_EPSCOR/GRIDMET').filter(ee.Filter.date('2020-06-20', '2020-09-22'));# create a rectangle coords = [-120.639,37.506,-118.081,38.237] bbox = ee.Geometry.Rectangle(coords)# select 100-hour dead fuel moisture (fm100) and calculate the mode fm100 = gridmet.select('fm100').mode() # clip data to rectangle fm100_clip =fm100.clip(bbox)# create 2000 random points fm100_points = ee.FeatureCollection.randomPoints(bbox, 2000); # sample points using the mean samplefm100 = fm100_clip.reduceRegions({ 'collection':fm100_points, 'reducer':ee.Reducer.mean(), 'scale': 4000, });# transform fc into gdf samplefm100GDF = eeconvert.fcToGdf(samplefm100)# convert gdf into shp samplefm100GDF.to_file("gisdata/yosemite/shp/samplefm100.shp")
我们将通过调用 Landsat 8 Collection 1 Tier 1 32 天 EVI 合成图从 GEE 下载 [EVI](https://en.wikipedia.org/wiki/Enhanced_vegetation_index#:~:text=The%20enhanced%20vegetation%20index%20(EVI,a%20reduction%20in%20atmosphere%20influences.) 数据,使用 Yosemite FC 按日期和边界过滤。接下来,我们将计算一个平均图像,并使用之前创建的多边形对其进行裁剪。最后,剪辑后的图像将被导出到我们的 Google Drive 存储器中,然后我们将它下载到我们的工作目录中。
为了运行我们的火灾模拟,我们需要一个由美国农业部林务局定义的燃料模型。在这种情况下,我们将使用 https://landfire.cr.usgs.gov/fbfm13.php 的提供的 13 Anderson Fire Behavior 燃料模型。该模型有 13 类燃料,其负载、分布和颗粒大小各不相同(Petrasova 等人,2018 年)。
2.导入数据
现在,我们将继续导入从 GEE 和其他来源下载的数据。这一部分包括设置我们的 GRASS GIS 环境和导入数据本身。
当在 Jupyter 笔记本中设置 GRASS 时,我们使用 Python 来初始化 GRASS GIS。首先,我们创建一个 GRASS GIS 运行时环境,方法是传递一个变量 GRASS GIS“所在”的目录,并将其绑定到 Python 目录。接下来,我们导入 GRASS GIS 包。之后,我们设置默认字体显示和覆盖行为,以避免每次执行命令时添加`— overwrite '标志。
# create GRASS GIS runtime environment gisbase = subprocess.check_output(["grass", "--config", "path"], text=True).strip() # directory where GRASS GIS lives os.environ['GISBASE'] = gisbase sys.path.append(os.path.join(gisbase, "etc", "python"))# import grass gis package import grass.script as gs import grass.script.setup as gsetup from grass.pygrass.modules import Module from grass import script from grass.pygrass.modules.shortcuts import raster as r, vector as v, general as g, display as d from grass.pygrass.modules import Module as run_command import grass.imaging as imaging# default font displays os.environ['GRASS_FONT'] = 'sans'# overwrite existing maps os.environ['GRASS_OVERWRITE'] = '1' gs.set_raise_on_error(True) gs.set_capture_stderr(True)
我们之前需要使用 GUI 在 GRASS GIS 中创建一个位置来运行以下单。在我们的例子中,我们创建了一个名为 yosemite_3310_2 的位置和一个名为 wf_mod_2 的地图集。
# set GRASS GIS session data cfile = gsetup.init(gisbase, "grassdata", "yosemite_3310_2", "PERMANENT")# create a new maset inside yosemite_3310_2 location g.mapset(flags='c', mapset='wf_mod_2', location='yosemite_3310_2')# set GRASS GIS session data cfile = gsetup.init(gisbase, "grassdata", "yosemite_3310_2", "wf_mod_2");
2.2 加载数据
在这一小节中,我们将上传运行火灾模拟所需的所有数据集。
# import Yosemite National Park vector script.run_command('v.import', input='gisdata/yosemite/shp/yosemite.shp',output='yosemite')# import evi raster script.run_command('r.import', input='gisdata/yosemite/raster/evi.tif', output='evi',resolution='value', resolution_value=30.0)# import fm 100h samples script.run_command('v.import', input='gisdata/yosemite/shp/samplefm100.shp',output='samplefm100')# import vs (wind velocity) samples script.run_command('v.import', input='gisdata/yosemite/shp/samplevs.shp', output='samplevs')# import th (wind direction) samples script.run_command('v.import', input='gisdata/yosemite/shp/sampleth.shp',output='sampleth')# import landsat image script.run_command('r.import', input='gisdata/yosemite/raster/landsat/landsat.tif',output='landsat',resolution='value', resolution_value=30.0);
GRASS GIS 最大的特点之一是有一个不断增长的插件列表,可以很容易地安装在您本地的 GRASS GIS 中,并用于执行特定的分析。在我们的例子中,我们没有从 GEE 下载 DEM,而是使用了 模块。
r.in.nasadem user="my_nasa_user" password="my_nasa_pw" output=dem memory=2000 resolution=30
3.野火模拟
在我们的教程中,我们模拟了约塞米蒂国家公园三个地区的野火蔓延,见下图。我们将从每个区域的导入数据中获取新数据,模拟不同持续时间的火灾事件,并可视化野火传播。这篇文章只向你展示了我们如何在第三个研究区域模拟野火。
作者照片
3.1 研究区域 3
3 号研究区位于约塞米蒂国家公园的中东部。主要的可燃物类型是覆盖面积为 29.70%的封闭木材凋落物和覆盖面积为 21.67%的木材(草地和林下植被)。要了解更多关于燃料种类的信息,请这里。根据:USGS 国家土地覆盖数据库(Yang et al .,2018),该地区主要由常绿林(51%)、灌木/灌丛(34%)和草地/草本(5%)覆盖。
3.2 计算数据
野火事件建模分为两步。首先,我们执行 GRASS r.ros 模块,该模块生成扩展率(ros)栅格地图。其次,我们运行 GRASS r.spread 模块来模拟椭圆各向异性扩散。
由于我们假设有风且地形陡峭,r.ros 模块需要以下输入:
- moisture_1h: 包含 1 小时燃油湿度(%)的光栅图。
- moisture_live: 包含 live 燃料水分(%)的栅格地图。
- 速度:包含风速的栅格地图(英尺/分钟)。 -方向:包含风向(度)的栅格地图。 -坡度:包含坡度(度)的栅格地图。 -坡向:包含坡向度数的光栅地图。
为了完成这项工作,我们将创建并应用一个 Python 函数。
caldata('sa_2R', '_sa_2')
3.3 建模
现在,我们将为我们的研究区域 3 运行 r.ros 模块。
# generates rate of spread raster map r.ros(model='fuel', moisture_1h='moisture_1h_sa_3', moisture_live='lfm_sa_3_scaled', velocity='wind_speed_sa_3', direction='wind_dir_sa_3', slope='slope_sa_3', aspect='aspect_sa_3',elevation='dem', base_ros='out_base_ros',max_ros='out_max_ros',direction_ros='out_dir_ros',spotting_distance='out_spotting');
接下来,我们将创建一个点栅格地图,它将被用作我们的火焰模拟的源。
# create a vector map from an ASCII points script.run_command('v.in.ascii',input='gisdata/yosemite/csv/source_3.txt',output='source_3', separator='comma')# rasterize vector map script.run_command('v.to.rast', input='source_3', output='source_3', type='point', use='cat');
通过 r.spread 模块,我们将模拟 32 小时的野火事件。我们的第一个模拟周期是 480 分钟(8 小时),因为当前模拟的初始时间是 0(默认值),我们的滞后是 480 分钟。请注意,我们使用“s”标志,因为我们正在考虑定位距离。
# elliptically anisotropic spread simulation 8 hours source 3 r.spread(flags="s", base_ros='out_dir_ros', max_ros='out_max_ros',direction_ros='out_dir_ros', start='source_3',spotting_distance='out_spotting', wind_speed='wind_speed_sa_3', fuel_moisture='moisture_1h_sa_3', output='spread_8h_s3', lag=480)# elliptically anisotropic spread simulation 24 hours source 3 script.run_command('r.spread', flags='si', base_ros='out_dir_ros', max_ros='out_max_ros',direction_ros='out_dir_ros', start='spread_16h_s3',spotting_distance='out_spotting', wind_speed='wind_speed_sa_3',fuel_moisture='moisture_1h_sa_3', output='spread_24h_s3', lag=480, init_time=960);
执行 r.ros 和 r.spread 模块后,我们现在可以可视化我们的结果。在这种情况下,我们将使用 GRASS GIS 命令创建四个框架。每一帧将包含每个时间滞后的扩散栅格的速率、指示模拟源的矢量、Landsat 图像的 CIR(彩色红外)合成以及相应的标题、图例、比例和指北针。
# display monitor and save image file d.mon(start='cairo', output='gisdata/yosemite/images/sa_3_frame.png', width=800, height=700)# remove all frames d.frame(flags='e')# frame spread_8h_s3# create upper-left frame d.frame(flags='c', frame='first', at=(50,100,0,50))# add raster map landsat cir d.rast(map='landsat_cir_sa_3')# add raster map spread_8h_s3 d.rast(map='spread_8h_s3')# add vector map source_3 d.vect(map='source_3', size=25, icon='basic/pin_dot', color='green',legend_label='Source 3')# add title d.text(text='Fire Spread 8h', bgcolor=('255:255:204'),color='black', size=6)# add north arrow script.run_command('d.northarrow', flags='t', style='9',at=(85,85), fill_color=('0:0:0'),color='none')# add raster legend script.run_command('d.legend', flags='sb', raster='spread_32h_s3_reclass',at=(5,60, 81, 83), title='Spread (%)', title_fontsize= 7, bgcolor=('255:255:204'), border_color='none')# add vector legend script.run_command('d.legend.vect', flags='b', at=(7,15), symbol_size=10, fontsize=12,border_color='none', bgcolor=('255:255:204'))# add bar scale script.run_command('d.barscale', bgcolor=('255:255:204'), at=(40,10), style='line',length=2, units='kilometers', width_scale=0.5) ...
作者照片
最后,我们将使用 GRASS GIS 图像包创建可视化的动画 gif 图像。
# create the animated gif with GRASS Python imaging package imaging.images2gif.writeGifPillow('gisdata/yosemite/images/Animation_Sa_3_2.gif',images, duration=2, repeat=True)
作者照片
4.结论
本教程演示了我们可以将 GRASS GIS、Google Earth Engine 和 Jupyter Notebook 集成到一个独特的开发环境中。但是,为了将 GEE 和 Geopandas 对象传递到 GRASS GIS 模块中,还需要做更多的工作。
我们可以模拟受过去火灾事件影响的地区的野火,以比较模拟和真实的火灾。
火灾模拟的结果表明,输出栅格不会与非植被区域重叠。在我们的例子中,火灾模拟在大区域表现更好,因为我们的基本空间分辨率是 30 米,这适合于区域尺度的研究。
一如既往,欢迎任何与此相关的反馈!
5.参考
彼得拉索娃、哈蒙、佩特拉什、大不里士和米塔索娃(2018 年)。野火蔓延模拟。开源 GIS 的有形建模(第 155-163 页)。斯普林格,查姆。
杨、l、金、s、丹尼尔森、p、霍默、c、加斯、l、凯斯、a、科斯特洛、c、德维茨、j、弗莱、j、芬克、m、格兰内曼、b、里格、m 和 g .西安。2018,新一代美国国家土地覆盖数据库:需求、研究重点、设计和实施策略,第 108–123 页。
加拿大阿尔伯塔省的野火蔓延模拟:一个使用带有 ConvLSTM 细胞的神经网络的试验,一个纯数据驱动的模拟
原文:https://towardsdatascience.com/wildfire-spreading-modeling-in-alberta-canada-a-trial-using-a-neural-network-with-convlstm-cells-81c1a9f7d410?source=collection_archive---------26-----------------------
变更数据
使用深度学习从卫星数据理解和模拟森林野火传播的个人尝试。
作者图片
日期:最初发布于 2020 年 4 月 23 日,2021 年 6 月 24 日更新于[5]和迈向数据科学
作者:Bessam Mehenni
主题:使用具有 ConvLSTM 细胞的神经网络对森林野火蔓延进行建模。加拿大阿尔伯塔省。
我从关于麦克默里堡火灾序列的 MODIS 数据中创建的时间圈
作者提供的图片
1.介绍
这项研究是我在巴黎一所数据科学学校结束培训时选择的一个课题的一部分。目的是测试具有 ConvLSTM 层的 2D 空间模型预测森林火灾蔓延的能力。
这是一个探索性的研究,实现了从零开始的深度学习。读者需要注意的是,这项研究并不是基于对林火蔓延模拟技术的全面了解。作者也不了解森林火灾的规律。
我们设计的模型使用由卫星[1]收集并由我处理的热异常坐标序列来获得像素图像的外观。此外,有助于火蔓延的特征与每个像素相关联,并且被模型考虑在内。气象特征来自阿尔伯塔省的一个政府网站。
我们正在研究的火灾序列特别发生在加拿大的阿尔伯塔地区。它们是大火。四个火灾序列,包括 2016 年 5 月著名的麦克默里堡火灾和 2011 年 6 月的理查森火灾,将用于训练和测试模型。麦克默里堡大火已导致 8 万人流离失所,并需要动员 3000 名消防员。我们将两个火灾序列命名为“Richardson phase 2”和“Central Alberta ”,这些名称纯属虚构。
图 1a:空间和时间研究窗口|作者列表
数据来自三个不同的来源:
- MODIS 卫星数据是从指定了空间和时间窗口的数据源[1]专门下载的。
- 气象数据是专门从数据源[2]下载的。
- 地形数据是从数据源手动读取的[3]。
2.方法
气象网站建立的网格主轴被用作开发更精细的表格数据网格的基础。我们开始进行一些人工读数,找出天气网格的坐标。
图 1b:气象网站的网格图[2]
然后,我们必须建立一个更精细的二级网格(我们选择 2km x 2km ),其中每个基本网格包含以下信息:根据 MODIS 记录、转置或插值的气象数据、现场的高程数据,是否有火灾。这个项目的主要困难在于数据的预处理。这是一个工匠的工作,很难概括:
- 数据收集不是自动化的,甚至包括人工读数。
- 预处理是为四个选定的火灾研究区域量身定制的。我们花了很多时间开发预处理程序。在执行过程中,预处理程序在夜间运行数小时,以便幸运地到达我们在 GitHub 上提供的最终数据集[5]。
准备工作完成后,我们开始可视化数据。当我们观察到每天几十公里的明显蔓延模式时,我们对森林火灾的偏见,即森林火灾以均匀的速度从近到远蔓延的想法,被颠覆了。气象站那几天的风力强度可以被描述为“正常”,这就对与风有关的主要原因的想法提出了质疑。这里事实上是火爆发的强度创造了大量的上升气流;这些气流携带白炽粒子,它们参与了火势的快速蔓延。
我们通过描述性模型 DBSCAN 研究了火团的演化。这项技术对理解传播非常有用。它包括从接近到接近地分配聚类点。
下一步是试图模拟火灾蔓延,以便预测它。我们尝试了使用 ConvLSTM 层的深度学习模型。A. Xavier 在[6]中说::它是一个递归层,就像 LSTM 一样,但是内部的矩阵乘数是用卷积运算交换的。使用 ConvLSTM 模拟火灾蔓延的尝试没有产生令人满意的结果。
流体力学研究人员已将无量纲变量引入经验关联式,其目的是模拟物理现象。尽管这一尝试失败了,但我们在这个项目中的进展让我们相信,一个纯粹的数据驱动模型在翻译如此复杂的传播现象时会有困难。我们认为,数据驱动模型依赖于一些无量纲的物理变量(比如弗劳德数)是有意义的。
3.数据预处理
该模型实际上允许两个图像和一个与连续两天的数据相对应的火灾影响特征的相关矩阵。输出是火灾位置的图像,是最后一个输入图像后 3 天的预测。
模型的每个输入样本是 5D 阵列(样本 _nb,nb _ 步骤,行,列,nb _ 特征),其中 nb _ 步骤是 2 天时间步长,行和列是行(这里是 45)和列(这里是 65)的数量,nb _ 特征是火灾影响特征的数量,这里是 9。这幅图像有 2925 个像素,每个像素代表一个 2 公里×2 公里的区域。
我们选择的影响特征有几种:
- 气象:降水量(mm)、湿度(%)、地面接收的太阳辐射(MJ/m2)、累计平均风速(km/h)、风向()。
- 地形:每个单的高程。
- 植被:累积降水量(mm)在一定程度上反映了植被的含水量。
- 火特性:亮度。
在本研究的框架中,影响蔓延的人为因素被排除在外,特别是旨在控制火灾的灭火和预防措施(灭火、修剪植被区、浇水等)。).
风向是从考虑中的像素周围的两个或三个气象站的读数产生的量。它是通过反距离加权(IDW)插值法获得的。
不考虑空气温度因素,因为它是空气湿度的固有因素(见莫里尔图)。
起伏的斜率是传播的一个重要因素,没有明确地给模型。仅给出了小区的高度。他们来自源头[3]。
图 2:麦克默里堡遗址的地形图
不管正确与否,我们决定使用亮度,这是一个与卫星传感器测量光线位置相同的量。我们认为,红外辐射可能是火的温度的镜像,因此也是火的强度的镜像,研究表明它会影响白炽粒子的传播[4]。
从阿尔伯塔省的火灾中收集的数据表明了几种火灾蔓延的模式。其中一个现象的特点是巨大的表观射速,并被证明是非常毁灭性的。它负责每天几公里的火灾传播距离。这种现象会留下一大堆小火。
在加拿大、美国、澳大利亚,有时在一些南欧国家如葡萄牙也能观察到这种现象。解释是炽热的植物粒子(飞溅的火花)向前投射。它们参与了火焰锋的快速推进。这种火灾行为明显不同于其他更常规的行为,后者的表观火灾速度为每天几千米。
图 3a:加拿大亚伯达省麦克默里堡 DBS can(2016 年 5 月 4 日)获得的火灾群|图片由作者提供
图 3b:加拿大艾伯塔省麦克默里堡 DBS can(d+1 日:05–05–2016)获得的火灾群|图片由作者提供
图 3c:加拿大艾伯塔省麦克默里堡 DBS can(d+2 日:2016 年 5 月 6 日)获得的火灾群|图片由作者提供
我们通过应用描述性模型(DBSCAN)揭示了加拿大麦克默里堡火灾中的这一现象。2016 年 5 月这种现象发生的几天就导致了特大的火势蔓延。造成这种现象的物理因素很难确定。它们与大气中对流不稳定性的存在有关。火线的热功率也将密切决定白炽粒子覆盖的距离。
数据集按时间顺序分为两部分:38 天的训练样本(大约。56%或 次观察)和 30 天验证样本(大约 44%或 87750 个观察值)。我们还预留了 9 天的测试样本。
4.神经网络的结构和相关参数
所提出的架构包括第一层 64 核 ConvLSTM,其核大小为(3×3),接着是最大池层(2×2 ),其执行子采样操作以降低特征图的维度,接着是维度展平和三个全连接层,每个层具有 128、128 和 2925 个神经层。这些层链接到 ReLu 激活功能。使用 sigmoid 激活函数在最后一层的输出端进行单向分类,该函数计算火灾形态的概率(“1”)。
图 4:con vltm 单的示意图[6]
为了减轻模型过拟合,引入了正则化技术,例如应用于某些层的 L2 正则化。一些层之后是 0.4 的退出率。选择了 Adam 梯度优化算法。该模型使用 Keras 库和 Tensorflow 作为 GPU 加速环境(Google Colab)中的后端。
5.分类结果
下图是测试样本的混淆矩阵和 ROC 曲线。可以看出,该模型正确预测了火灾中的 22 个像素。精度是 2.3%:该模型犯了很多错误,因为它预测了大量着火的像素,而实际上并没有着火。
图 5:测试样本的混淆矩阵(阈值=0.65) |作者图片
图 6:训练和测试样本 ROC 曲线
总体准确率得分为 90.0%。我们必须特别注意召回参数,因为不预测实际正在燃烧的燃烧像素是一个问题。在这里,我们希望看到尽可能高的召回率只有 14%。下图比较了测试样本在 9 天内的预测图像和实际图像。火灾概率阈值设置为 0.65。
图 7:测试样本的预测和实际图像|作者提供的图像
我们可以看到,预测是火灾的分散像素,而实际上火灾区域是聚集在一起的。
积极的一点是,在第 3 天,火灾活动加剧,模型预测遵循这一趋势。在第 6 天的观察是相同的,只是预测转移到了第 7 天。这种延迟可能与提前 3 天预测的不确定性有关。
相反,第 9 天显示火灾活动减少,这也是模型预测的结果。
训练图像中的卷积识别模式。火焰图案每天都在重复,伴随着图像中特定区域的突出显示。这些地区每天都在变化。当然,该模型还没有针对不同的案例进行充分的训练。我们的研究受制于有限的训练数据。在这个意义上,我们可以区分卷积的限制:训练图像在图像的左下角没有火区。这一特征可以在模型预测中找到,这有利于图像的这一部分没有火。
6.结论
我们的模型不能提供未来三天火灾蔓延模式的准确视图。这种限制的原因可能是卷积原理本身和/或用于其训练的有限数据量和/或基于我们给它的特征该模型不能理解的现象的复杂性。火灾数据来自持续时间和范围方面的重大火灾事件。似乎很难想象我们能从阿尔伯塔省大量收集更多的火灾数据。
尽管如此,我们的模型显示了根据天气和非天气条件跟踪火灾活动增加或减少的能力。应该指出的是,我们天真地让我们的模型负责建立对传播现象的理解。但是现象并不简单。它们是复杂多样的。例如,在 Fort McMurray 记录中,我们观察到,在两个不同的天中,在相似的条件下(气象站的风速、湿度等)。),发生了拮抗现象。在一个案例中,一天传播 5 公里。在另一种情况下,超过 50 公里的粒子跳跃传播。
我们可以说,我们选择的直接因素不足以解释这些现象。还涉及到与火和大气中空气的物理学有关的其他参数。
7.然后
研究调查了火灾和风况如何影响落到地面上的白炽植被颗粒的分布行为[4]。引入弗劳德无量纲变量,为火灾跳跃平均距离的计算提供规律。弗劳德数是流体力学模型中用来描述流态的参数。它代表了与流速相关的惯性力相对于浮力的相对重要性。在飞溅火花突然出现的情况下,存在的状态可能对应于由侧风控制的气流,也可能对应于由火焰强度控制的上升气流。计算跳火平均距离的公式已作为流态的函数提出[4]。
如果我们让一个模型更容易理解复杂的现象,它就能渴望表现。我认为预测火灾蔓延的最佳模型可能会处于深度学习(甚至强化学习)和物理建模之间的十字路口。除了已知的影响火势蔓延的直接因素(湿度、风速等)之外,还必须依靠。),物理建模中常用的解释现象的参数。弗劳德数就是其中之一。
8.参考
[1]https://firms.modaps.eosdis.nasa.gov/,2020 年 3 月 27 日
[2]http://www.agriculture.alberta.ca/acis/,2020 年 3 月 27 日
[3]https://earth.google.com/web/,2020 年 3 月 27 日
[4]尼古拉·萨尔多伊。燃料颗粒的运输和燃烧 (2007 年)。物理学。普罗旺斯大学艾克斯马赛第一分校,2007 年。法国人。电话 00v2
[5]https://github . com/bessammehenni/Forest _ wild fire _ spreading _ convLSTM
[6]来自 Neuronio 的 Alexandre Xavier,ConvLSTM 简介(2019 年 3 月 25 日),https://medium . com/neuro nio/An-introduction-to-convl STM-55c a7
感谢阅读!下一个故事下次见。
人工智能会很快取代我们的艺术家吗?
原文:https://towardsdatascience.com/will-ai-replace-our-artists-any-time-soon-81433ebc62a?source=collection_archive---------28-----------------------
超越创造力前沿的人工智能之旅
尼古拉·约翰尼·米尔科维奇在 Unsplash 上的照片
人类的创造力似乎是人工智能(AI)的最后一个前沿。许多人声称人工智能擅长各种事情,它的表现超出了人类的预期,但展示创造力将是一个挑战。创作过程仍然神秘莫测。我们可以使用技术来培养创新思维,但最终,我们并不完全确定它是如何发生的。由于缺乏对我们自身生物过程的了解,科学家很难在机器上复制它们。尽管有这些限制,我们在使用人工智能创造创新杰作方面还没走多远。
照片由杰瑞米·贝克在 Unsplash 拍摄
当涉及到文本内容时,AI 非常擅长处理文字。我们可以列出过去的各种例子,人工智能诗歌与人类创作的诗歌难以区分。很好奇的是,2016 年,一篇名为《电脑写小说的那一天》的文字曾被提交给日本的一个短篇小说比赛。这部小说遵循一个计算机程序,因为它实现了作为作家的能力,同时放弃了预编程的职责。该文本完全是使用人工智能编写的,并成功通过了第一轮比赛。
由瓦茨拉夫·pluhař在 Unsplash 上拍摄的照片
绘画也是由人工智能产生的。2018 年,佳士得拍卖行收到了一幅名为《爱德蒙·德·贝拉米的肖像》的画作。令人难以置信的是,它是由一个人工智能系统使用模仿人类认知的过程创建的。人工智能最初接触了数百幅风格相似的绘画,然后被要求生成数百幅潜在的图片。最终选择了符合这种风格但又与其他作品有很大不同的图片。尽管它的创作者最初认为他们可以从中赚几千美,但实际上,这幅画以近 50 万美的价格售出,今天被认为是第一件由机器创作的艺术品。
Aditya Chinchure 在 Unsplash 上拍摄的照片
使用人工智能创作数字音乐甚至歌曲已经被研究了很长时间。音乐相对简单,因为系统可以从各种可用的曲调中获得灵感。事实上,近年来已经有很多创造 AI 曲调的尝试。英国国王学院(King’s College)一个名为“反馈循环”(Feedback Loops)的令人兴奋的项目使用人工智能来看一名舞蹈演员,并以旋律的形式解释她的动作。但是用歌词创作一首真正的歌完全是另一回事。几个月前,多伦多大学创建了一个人工智能系统,其任务是听 100 个小时的在线圣诞音乐,并创作第一首人工智能圣诞颂歌。结果被描述为有点乏味,不合节日气氛,令人不安。因此,人工智能凭借其首支圣诞单曲将玛丽亚·凯瑞挤出前 10 名还需要一段时间。
照片由 Ahmad Odeh 在 Unsplash 上拍摄
舞蹈和戏剧也是艾的拿手好戏。我们看过各种艾积极参与表演的节目。马耳他大学创造了虚拟化身与人类舞者共舞。在 2020 年的新年前夕,波士顿动力公司——生产世界上最先进的机器人的公司——发布了一套独特的舞蹈设计。它的四个机器人正在表演 Contours 的热门歌曲“你爱我吗?”结果是相当了不起的,超出了大多数人的能力。更令人印象深刻的可能是无人机展示,它使用大约 500 架无人机在空中创建移动的 3D 形状。它们被用来庆祝 2020 年的苏格兰新年前夜和其他重大的世界性事件。
如今,剧院背景也是由人工智能生成的。被操纵的图像已经存在很多年了。Photoshop(用来编辑图片的最有效的程序之一)可以修改现有的场景,甚至通过一些努力创建假的场景。然而,就在去年,Nividia 宣布了 GauGAN,这是一个令人印象深刻的人工智能系统,能够将孩子们喜欢的涂鸦转换成高分辨率的照片。一条简单的带圆圈的线变成了湖边瀑布的逼真图片。从而创建高分辨率,逼真的动态背景。
照片由 Marija Zaric 在 Unsplash 上拍摄
计算机生成图像(或 CGI)已被广泛用于电影中,以创建从灾难性灾难到动画角色的各种重建。最近的时尚似乎是创造虚拟演员。这些演员是为了取代真正的演员,他们可能因为太贵而无法合作,并且不严格按照导演的指示行事。在某些情况下,他们被用来代替死去的或年纪太大的演员。据说,60 多年前去世的神话演员詹姆斯·迪恩将出演一部名为《寻找杰克》的电影。在《星球大战》电影《星球大战外传:侠盗一号》中,由于凯丽·费雪(莱娅公主的原始女演员)已经衰老,年轻公主的数字身体被创造出来,她的面部表情保持不变。然后人工智能被用来简单地填充这些点。
照片由乔恩·泰森在 Unsplash 拍摄
所以在合成中,人工智能既可以是艺术的天才创造者,也可以仅仅是艺术家使用的工具。当然,这引发了很多问题,比如人工智能艺术的功劳归谁?是程序的问题吗?但是它没有法人实体!程序员呢?程序员创造了算法,它可以指导人工智能获取新知识。但是就像师傅带徒弟一样,它并不能决定学习什么!当然,这场辩论没有结论,并将在未来几年继续激烈进行。但我们应该以开放的观点来看待它,拥抱技术,并接受我们可以通过将人工智能与艺术相结合来达到新的不可想象的高度。
如果您喜欢这篇文章,并想联系我,请联系我🐦https://twitter.com/alexieidingli*,🔗*LinkedIn,📷insta gram或者😊 脸书 。
*
阿列克谢·丁力教授 是马耳他大学的 AI 教授。二十多年来,他一直在人工智能领域进行研究和工作,协助不同的公司实施人工智能解决方案。他的工作被国际专家评为世界级,并赢得了几个当地和国际奖项(如欧洲航天局、世界知识产权组织和联合国等)。他已经出版了几本同行评审的出版物,并成为马耳他的一员。由马耳他政府成立的人工智能特别工作组,旨在使马耳他成为世界上人工智能水平最高的国家之一。*
数据会成为云原生的吗?
原文:https://towardsdatascience.com/will-data-go-cloud-native-a79009?source=collection_archive---------49-----------------------
数据专业人员使用的工具和平台越来越多地运行在云原生技术上。
照片由Jonny Gios在 Unsplash 上
数据工具仍然是一个极其活跃的空间,这对于作为一个懒惰用户的我来说是非常令人兴奋的。别信我的话,你可以看看马特图尔克的精彩帖子: 韧性与活力:2020 年数据& AI 景观 。
如果你深入挖掘 Matt 文章中的大量信息图表,你会发现许多列出的技术、工具和公司都是云原生的。这一趋势的惊人之处在于,它发生在现代数据基础架构堆栈的上上下下 —从接收到存储,再到处理和预测。
不过,我想知道的一件事是,云原生数据工具是否会成为主导。
什么是云原生?
出于各种各样的原因,人们开始使用术语“原生云”来表示两种完全不同的东西。
- “原生云”意味着使用“容器、服务网格、微服务、不可变基础设施和声明性 API”,正如 CNCF 所描述的那样。
- “云原生”意味着使用云服务提供商的“原生”工具。在这种用法中,我们谈论的是紧密集成的特定于提供商的工具,例如与 AWS 控制塔、配置或并行集群。
不幸的是,这个词有两种几乎相反的用法,但我对此无能为力。(实际上,我认为在某些情况下,可能在无服务器领域的某个地方,您最终会实现这个术语的两种含义,所以它们并不完全相反。)无论如何,对于本文,我将使用第一种用法。
云原生数据工具
让我们面对现实:数据工具运行在原生云上。
Spark 现在的目标是在 Kubernetes 上部署。这本身就是巨大的。此外,AWS 最近为他们的托管 Spark 集群推出了功能,让你可以在他们的托管 Kubernetes 集群上运行它。(我会注册在 Kubernetes 上运行 production Spark 工作负载吗?我不确定。)
Jupyterhub 、 RStudio 和 Kubeflow 都是使用 Kubernetes 的数据基础设施即软件的例子。这些是值得尊敬的增值工具,使用他们已经熟悉的工具为数据科学家提供一致的用户体验(Kubeflow 添加了一些新东西,但也嵌入了 Jupyter)。这个空间还远未尘埃落定: AWS Sagemaker 、 Azure ML Studio 、 Google AI 平台都是强势的祭品,有时候会和云原生轻度重叠。“开放核心”的后起之秀 Databricks 正在努力推动 IPO。现在 Spark 在 Kubernetes 上运行,Databricks 会开发一个掌舵图吗?
最近发布了 2.0 的流行数据管道工具 Airflow 运行在 Kubernetes 上。Kafka,大型流媒体数据平台,正在简化其架构,而 Strimzi 项目正在简化 Kafka 在 Kubernetes 上的部署。(Strimzi 目前是一个 CNCF 沙盒项目,这意味着你可能要过一段时间才能告别你的专用生产 Kafka 集群。)人们试图将生产数据库放在 Kubernetes 上(我有一些问题)。地理空间数据市场的赢家ESRI将在其旗舰产品 ArcGIS 中添加对 Kubernetes 的支持。特征库,一种用于 MLOps 的多工作流数据库运行在 Kubernetes 上。
这些技术不会在一夜之间全部融入 Kubernetes,cloud native 也没有取得任何胜利,但显然有一些势头。
不要惊慌
尽管很复杂,但我倾向于认为 Kubernetes 扩展到数据基础设施只是 Kubernetes 扩展到一切的一个功能。它正向边缘移动。这是进入 IaaS 。显然,你可以在上面运行区块链。银行都在用。
我一般不知道这将如何结束,但我完全期待它保持令人兴奋和充满活力。这些问题处在极其活跃的社区(数据、ML、云原生、无服务器、开源)、各种形状和大小的供应商以及大量投资的交叉点上。在我看来,这就像是有趣时光的公式。
除非你讨厌钱,否则你绝对不应该跑出去给你团队中的每个数据科学家买一本云原生基础设施书籍和一个 Kubernetes 训练营。如果你是一名数据专业人士,阅读这篇文章并考虑“学习 Kubernetes”,这是一件非常好的事情。多样化可能是件好事。只要意识到你正在让自己陷入什么样的境地。
原载于https://theslipbox.substack.com。
2022 年还会需要数据科学家吗?
原文:https://towardsdatascience.com/will-data-scientists-still-be-in-demand-in-2022-f2852ff0a32a?source=collection_archive---------2-----------------------
在决定职业道路之前,你应该知道以下几点
在 Unsplash 上由 Boitumelo Phetla 拍摄的照片
几年前,数据科学变得非常流行。围绕这个领域有很多炒作,来自不同背景的人都在争先恐后地向数据科学过渡。
数据科学硕士学位开始变得越来越受欢迎,互联网上也不乏在线课程。学生们涌向 Coursera、Datacamp 和 Udemy 等网站,以获得数据科学认证并进入就业市场。
然而,现在人们开始越来越怀疑这个领域。
我读过描述“数据科学之死”的文章有些人认为数据科学只是一种短暂的趋势,在另一个领域取代它之前,这种炒作很快就会消失。
我还阅读了鼓励学习者从事数据工程或 MLOps 职业的文章,因为这些领域是“下一个大事件”,并且将比数据科学职业更长久。
我花了很多时间纠结于是否应该继续学习数据科学,或者花时间学习一种不同的技能。
现在,在数据行业工作了一年多之后,我想分享一下我对这个主题的见解,特别是针对该领域的初学者,他们经常得到相互矛盾的建议,并且对从事数据科学职业犹豫不决。
以下是我将在本文中尝试回答的一些问题:
- 数据工程是下一件大事吗?我应该努力成为一名数据工程师而不是数据科学家吗?
- 随着自动化 ML 工具开始变得越来越先进,它们会取代数据科学家吗?
- 数据科学市场是否已经饱和,是否还有可能获得该领域的入门级工作?
数据工程与数据科学
我在网上读到过许多不同的观点,认为数据工程将取代数据科学成为 21 世纪最热门的工作。
在与数据工程和数据科学团队密切合作后,我得出结论,这两个领域同等重要。
公司需要数据工程师。他们需要能够获取大量数据并使之可用的人。
然后,数据分析师和数据科学家需要使用这些数据来得出商业价值。他们创造出对组织有利的最终产品。
数据工程现在被大肆宣传的原因是因为公司没有足够的数据工程。
过去,这些组织过于看重数据科学家。当他们没有合适的数据管道时,他们雇佣数据科学家来建立盈利模型。
数据科学家擅长模型构建,对于大量实时、非结构化的数据流入,他们无能为力。这意味着他们无法为组织增加多少价值,因为数据没有按照他们要求的方式准备好。
现在公司开始意识到这一点,他们更加重视雇佣数据工程师。
这并不意味着数据科学家是多余的。他们的建模技能对组织来说仍然是有利可图的——这只是以后的事情,一旦数据可以使用。
这两种职业都很受欢迎,并且确实为公司增加了价值。你可以选择你最喜欢做的事情。
自动化会取代数据科学家吗?
像 DataRobot 和 AutoML 这样的工具已经变得越来越流行。越来越多的公司开始投资这些工具来建立预测模型。
这引发了一个新的问题——组织内还有数据科学家的空间吗?还是这些工具会取代他们所做的工作?
我以前用过 DataRobot。该工具旨在帮助业务分析师在没有机器学习或数据科学知识的情况下构建预测模型。
以下是我与 DataRobot 合作后的一些发现:
- 这是一个非常简单的工具。只需几下鼠标,即可轻松导入不同格式的数据并构建 ML 模型。
- 参数调整已经完成。DataRobot 搜索每个超参数的一系列值,并选择最符合您的数据的最佳值。这减少了您需要做的手工工作量。
然而,尽管自动化机器学习有这些伟大的功能,但在很长一段时间内,它们都无法取代数据科学家。
我研究了 DataRobot 的各种用例,但仍然需要自己执行一些任务,比如添加特性权重。此外,在准备好构建模型之前,所有的预处理都需要手动完成。
数据需要根据业务用例进行定制和分解。数据科学家通常会花更多的时间根据需求做数据准备,而花更少的时间建立模型。
这种繁重的工作仍然需要由数据科学家来完成,而数据科学家通常完成的 80%的任务是无法自动化的。
当使用 DataRobot 时,我仍然必须根据我需要的结果手动更改参数(如模型的阈值和特征权重)。
使用这些工具时,仍然需要人的判断力。
只要你拥有你所从事领域的领域知识,以及分析和编程技能,你就不会被自动化工具所取代。
这些工具可能有助于加快您的工作流程并减少您使用的计算资源量,但它们旨在补充您所做的工作,而不是取代它。
数据科学家还有需求吗?
2020 年,每个人在一秒钟内产生 1.7 兆字节的数据。互联网用户每天产生大约2.5 万亿字节的数据。
数据正被用于在许多行业(医疗保健、金融、营销、商业等)创造巨大的变化。
我在市场营销领域工作,每天都要处理数百万个数据点。这些数据点用于观察客户行为,并提出不同的目标策略。
公司需要雇佣能够从这些数据点中获取价值的人。
仅仅一个业务分析师无法做到这一点,因为他们不具备技术知识。
只要你能处理海量的数据,并借助这些数据解决问题,行业里就有你的空间。
然而,你需要超越模型构建。你需要有领域专业知识。你需要知道如何利用你的技能获取外部数据。你需要有很强的沟通和解决问题的能力。
这些技能将使你与一般的数据科学有志之士区分开来。
实践中的数据科学与理论上的数据科学非常不同。
在这个行业工作时,如果你工作一整天来使你的模型比以前精确 1%,这并不重要。这些事情在 Kaggle 竞争中可能很重要,但对利益相关者来说并不重要。
像每个特性与你的模型的相关性,模型的可解释性,以及你的模型对现实世界场景的适用性这些事情要重要得多。
拥有这些技能的数据科学家是不可替代的。
结论
数据科学不会消亡。然而,这个领域正在经历转变,公司开始寻找能够用数据解决问题的人。
这不仅仅包括建模。当面临商业问题时,答案并不总是在于创建机器学习模型。
有时,一个简单的 SQL 查询或可视化可能会告诉您需要知道的一切。采用 ML 技术来解决每一个数据问题既昂贵又耗时,这就是为什么你需要掌握更多的知识。
只要您不断学习和创建数据驱动的解决方案,没有任何自动化工具可以取代数据科学家的技能。
谷歌妈妈会扼杀 SEO 吗?
原文:https://towardsdatascience.com/will-googles-mum-kill-seo-df0fde?source=collection_archive---------5-----------------------
人工智能
妈妈将彻底改革搜索引擎。
照片由米切尔罗在 Unsplash
一周前,谷歌在 T4 举办了一年一度的谷歌 I/O 大会。他们展示了现有技术的更新,如谷歌地图或谷歌照片,以及一些令人惊叹的技术,如 LaMDA ,一个熟练的健谈人工智能,可以彻底改变聊天机器人技术,或 MUM。
今天我来说说 MUM ,代表多任务统一模式。简而言之,这项技术旨在让搜索引擎更加强大,就像几年前 BERT 所做的一样。
我将回顾什么是 MUM,以及它将如何影响未来的 SEO,直到让它过时。尽情享受吧!
妈妈——搜索引擎的大脑
MUM 是谷歌搜索引擎的改进。像其他流行的最先进的语言模型,如 GPT 3 或 LaMDA,MUM 是基于 transformer 架构的。BERT (MUM 的前身)在这方面是类似的,主要区别是 MUM 强大 1000 倍。
正如 Pandu Nayak 在谷歌博客上写的那样,MUM 旨在解决的主要问题是,“必须输入许多查询,执行许多搜索才能得到你需要的答案。”对于没有简单答案的查询,MUM 最大限度地发挥了它的力量,帮助谷歌的搜索引擎处理复杂的任务。
在演示中,Prabhakar Raghavan 用一个查询例子说明了妈妈的力量:“你已经徒步走过了亚当斯山。现在你想明年秋天去富士山远足,你想知道要做哪些不同的准备。”这是一个我们可以想象向徒步旅行专家,而不是向搜索引擎提出的问题。
利用今天的技术,我们必须搜索我们能想到的每一个变量(例如,天气、一年中的时间、地形的高度、齿轮的类型、岩石的类型……),然后比较我们的结果以提取有效的答案。
然而,妈妈可以使用其全能的工具包直接解决这个问题:“富士山与亚当斯山的海拔大致相同,但秋天是富士山的雨季,所以你可能需要一件防水夹克,”妈妈回答道。
妈妈的技能——多语言和多任务
妈妈已经接受了 75 种语言的训练,这使得系统能够打破语言障碍。有了今天的技术,我们必须用日语搜索信息,才能为我们的富士山徒步旅行找到满意的答案。妈妈可以直接查找信息,然后为你翻译。
妈妈已经接受了 多任务的训练,实现了“比以前的模型更全面地理解信息和世界知识”这里的可能性很大。妈妈能理解亚当斯山和富士山是山。它可以理解你需要知道地质学上的差异,但你不会关心动物和植物。它可以理解,准备可能不是指身体上的训练(就像你已经在亚当斯山徒步旅行过的那样),而是指“找到合适的装备”之类的事情。
妈妈不仅能够“理解”语言,还能“生成”语言(在这个意义上,它可以与 GPT-3 相提并论)。然而,我想在这里修饰一下“理解”这个词。我不认为妈妈(也不认为 GPT-3)能理解语言。我要说这些系统是塞尔的中国房间论点的真实例子。为了理解,我们需要意义。为了获得意义,我们需要将语言符号的形式与它们在世界中的外部经验表征联系起来。计算机内部的语言模型——妈妈、GPT-3 或 LaMDA——可以访问符号的形式,但它们无法体验世界,这使得意义遥不可及。
最后,值得一提的是,谷歌将责任作为其人工智能系统的主要优先事项。对于他们创造的每一个人工智能,他们都试图减少偏见,减少碳足迹。妈妈也不例外。
妈妈的边缘——多模态
但到目前为止,MUM 带给我们的最重要突破是它管理多模态信息的能力(这超出了 GPT-3 和 LaMDA 的能力)。MUM 可以结合图像和文本信息(未来谷歌将包括音频和视频)。
最终,你可能会拍下你的登山靴,然后问,“我能穿这双靴子去富士山吗?”“妈妈会理解这个图像,并将其与你的问题联系起来,让你知道你的靴子会很好。”
这在这个级别的人工智能世界中是新的,这是迈向人工智能的关键一步。当将人工智能系统与人脑进行比较时,可以更好地说明这一里程碑的重要性。让我们的大脑在世界导航中表现出色的特征之一是它的多感官特性。
- 世界是多模态的。这意味着我们周围的大多数事件/物体都会产生不同种类的信息(电磁、机械、压力、化学等。).想想任何物体,比如苹果。它有颜色、形状、质地、味道、气味…
- 我们的大脑是多感官的。我们被赋予了一套感官系统,使我们能够感知世界的多模态本质。大脑解释并整合所有这些信息,形成一个单一的现实表象。
保持距离,妈妈可能是第一代能够像我们一样结合多模态信息的人工智能。
妈妈可以让搜索引擎优化过时
谷歌从它的概念开始就一直试图让搜索引擎感觉更自然。当他们在 2019 年推出 BERT 时,纳亚克在他的博客文章中写道搜索引擎没有正确理解查询的事实是“人们经常使用”关键字-ese 的原因之一”。“谷歌搜索是它自己的交流方式,与我们向另一个人提问的方式相去甚远。
BERT 是将搜索引擎从匹配关键词转变为解释句子中单词的上下文的第一块基石。伯特,在妈妈之前,已经改变了搜索引擎优化的游戏。Google 承认除了为用户优化之外,没有其他方法可以为 BERT 优化。BERT 降低了在网页排名中使用关键字的影响。系统现在最关心的是网页是否回答了用户的查询,即使没有准确的关键词。
妈妈可以彻底改变搜索引擎,以至于搜索引擎优化的概念变得过时。人们不会直接寻找网页,他们只会简单地问妈妈一个问题,妈妈会像一个人的私人助理一样完成这项工作。关键词无关紧要。当妈妈能理解自然语言时,我们为什么要强迫自己用“关键字-ese”语言写查询呢?
当然,关键字仍然很重要,因为查询仍然会包含它们,但它们不会再帮助网页定位。为 MUM 优化内容的想法不会存在。不会有一个直接的方法来对付搜索引擎。人们将永远不再为算法写文章,而是为人民写文章。
最后的想法
妈妈的力量依赖于它的多语言、多任务,尤其是它的多模态特性。这将彻底改变搜索引擎,可能会使 BERT 在 2019 年的影响增加数倍。正如 Edwin Toonen 所说,谷歌搜索引擎将不再是一个搜索引擎,而是演变成一个“知识展示机器”
每次谷歌对算法进行更新时,搜索引擎优化专家都必须适应。当伯特出场时,他们没有看到对他们的表现有多大影响。然而,如果有一天我们不需要搜索任何东西,而是我们可以简单地用自然语言编写我们的查询,让一个超级强大的人工智能为我们找到答案,我们只能等着看 SEO 会发生什么。
订阅 获取更多关于人工智能、哲学和认知科学的内容!
我的数据科学项目会成功吗?
原文:https://towardsdatascience.com/will-my-data-science-project-succeed-ec057e?source=collection_archive---------27-----------------------
在 Unsplash 上 NeONBRAND 拍摄的照片
评估商业成功的可能性
简介。
在之前的博客中,我们讨论了评估技术成功概率的方法——P(T)。目的是使用客观标准和数学公式来推导数据科学或人工智能原型成功的概率。得出的数字指导决定是激活还是放弃项目的原型阶段。
在这篇博文中,我们继续可行性评估的话题。我们专注于推导商业成功的概率——P©。我们将 P©定义为
- 我们的原型可以扩展并交付给最终用户
- 最终用户将按照设计使用这些功能。
最终用户可能是购买嵌入了原型技术的产品的客户,或者是在内部运营中使用商业原型的公司用户。在后一种情况下,说“可操作的原型”可能更准确,但我们将继续使用“商业化”作为我们选择的术语。
评估商业成功的概率 P©原则上类似于评估 P(T ),但在一个重要的细节上有所不同。虽然 P(T)函数主要包括评估专业知识的技术值和参数,但 P©在很大程度上取决于用户群和企业文化的心理评估。这是一个挑战。我们的目标是客观,但我们将讨论内在难以量化的措施。我们是否危险地沉溺于主观领域?我必须承认,比我喜欢的还要多,但这个过程仍然保持着严谨。
我将用一个例子来说明。让我们从注入概率函数的参数列表中选择一个度量。我们将在本文中进一步讨论完整的列表,但现在让我们讨论“接受技术变革的意愿”。这似乎是一个模糊的衡量标准,但只要稍加努力,我们就可以将它与可测量的历史事件联系起来。下面是一个可能的过程:
- 创建一个实例列表,列出您的组织在不久前推出替换软件、经历重大版本升级或实施全新技术的实例。几个实例总比一个好。太多的实例可能会使分析变得混乱,所以要坚持突出的几个。
- 对于每一个实例,采访以前的项目负责人,并征求对用户抵制的看法。询问他们对该指标的评分(10 分制)。取平均值。
- 收集关于计划采用时间表和实际采用时间表的信息。
- 计算时间超出计划的百分比
- 将原因百分比分配给用户推回
- 在可用的公司或用户论坛上查看关于该项目的评论。对负面反应的代表性进行简单的统计分析。
- 使用这些附加信息,根据您的发现向上或向下微调项目冠军评估数字。
从访谈中确定一个初始的度量数字,然后根据新的信息进行小的调整,这种方法具有令人惊讶的功效。加德纳和泰特洛克在 2013 年出版的《超级预测:预测的艺术和科学》一书中描述并记录了这种方法的一种变体。我会推荐它作为灵感。
商业成功评价。
现在让我们来评估一下我们的数据科学或人工智能原型商业化需要什么。我们将追求两条不同的轨道:产品和运营改进。产品跟踪代表将技术商业化,将产品交付给市场中的最终用户。亚马逊产品推荐或谷歌地图“下一个目的地建议”都是商业化数据科学或人工智能项目的例子。相反,运营改进路线侧重于为公司内部用户带来好处。产品需求预测或用于生产质量保证的机器视觉就是两个例子。
我们在公式中使用的参数与 P(T)评估中的参数相呼应。然而,每个类别都必须通过生产镜头进行审查。当评估原型的数据时,我们询问数据是否干净和准确。如果数据在源位置生成时不干净,那么我们是否可以适当地清理并准备好供使用。我们也许能够在原型阶段完成这一点,但是在生产阶段会出现一系列新的复杂性。例如,我们可能以极高的音量和极快的速度接收数据;这两种情况都使生产部署经常需要的近实时数据清理和验证变得复杂。有时,这些增加的复杂性会将原型阶段的易处理任务变成生产阶段的不可能任务。因此,对 P(T)和 P©提出的类似问题可能会产生截然相反的答案。在进行 P©分析时,请记住这种观点的转变。
以下列表适用于公司内部推广。产品的商业化需要一个不同的焦点,这一点我可能会在以后介绍。我邀请您将这个列表视为一个可变的起点,您可以调整它以适应特定的垂直市场和场景。一旦你建立了自己的清单,你就用 1-10 分的标准评估每一项,然后把这些值代入顺序风险评估(ORA)评分公式。所得的 ORA 分数是以百分比表示的商业成功的概率。如果是在舒适门槛以上,你做项目;如果它立即徘徊在阈值附近,那么你可以进一步考虑它。
企业支持和业务:
- 在管理层定义项目冠军
- 企业利益相关者的认同
- 原型后范围的利益相关者协调
- 清晰阐述的商业价值
- 为项目分配足够的预算(过去和现在)
数据:
- 我们拥有所有必需的数据特征
- 每个特征的数据都是完整的
- 每个特征的数据都清晰而准确
- 我们可以根据生产速度验证和调整数据
- 我们可以在没有官僚障碍的情况下访问数据
基础设施和团队:
- 我们拥有处理高吞吐量和高容量的工具
- 我们有数据科学模型测试、再培训和部署的流程
- 我们拥有持续集成的经验和工具
- 充分分配发展资源(当前和过去)
- 熟悉数据科学库
- 根据需要扩充团队的章程
部署和推广
- 最终用户参与原型开发
- 培训用户的现有流程
- 向用户展示技术的现有流程
- 在过去的开发过程中遵守时间表
- 在过去的推广过程中遵守时间表
- 用户接受技术变革的意愿
- 发布前的 Beta 测试和验证流程
- 发布后维护工程的流程和预算
现在我们有了 ORA 分数所需的一组值。我们使用与评估技术成功概率相同的公式来计算概率。
在哪里,
是单个参数分数的数组
N 是一组参数,在我们的例子中 N = 20
C 是压缩系数, C = aN ,其中 a = 3(凭经验选择)
是一组参数权重,用于确定每个参数的关键程度。 w = 6 对于单个参数当 s = 1 时会起到将 P(T) 压制在 0.5 以下的作用。
是最安全的,除非很好地理解了特定重量的原因。
定义 P©的目的是决定是否继续商业化阶段,就像原型已经完成一样。在实践中,我们在开始原型工作之前进行可行性评估,并计算技术和商业成功概率。这两者的产物给了你最初的想法在生产中看到用途的成功的总可能性。
P(T)和 P©是独立的,但合在一起描绘了一幅更全面的风险图。
量子计算机会完全取代经典计算机吗?
原文:https://towardsdatascience.com/will-quantum-computers-replace-classical-computers-altogether-a6c9d7f0a107?source=collection_archive---------37-----------------------
你会把冰箱换成冰柜吗?
量子机器学习要不要入门?看看 动手量子机器学习用 Python 。
你会把冰箱换成冰柜吗?大概不会。尽管你的冰箱可以做冰箱能做的一切。只要让门开一点点,让外面的热量补偿冰箱更高的冷却能力。
作者图片
你觉得这样效率低吗?然后,将这种低效率指数化,你最终会明白用量子计算机取代经典计算机意味着什么。
如果你觉得这个比喻不恰当,我补充一个简短的免责声明: 这根本不是一个比喻。
一台经典的电脑只不过是一台冰箱。内部的风扇将 CPU(中央处理器)冷却到不超过 100 摄氏度。从物理角度来看,CPU 的主要输出不是计算。是热。计算只是一个副产品。
在这种观念下,量子计算机只不过是一个冰箱。QPU(量子处理器)周围的设备将它冷却到零下 273 摄氏度,非常冷。它不会这样做,因为 QPU 产生这么多热量。相反,QPU 根本不会产生太多热量。但是量子计算对任何热量都极其敏感——如果当我们在接近绝对最小值的时候谈论热量是恰当的话。
作者图片
所以,只要经典计算机完成工作,用量子计算机取代经典计算机似乎并不高效。
但是,我们必须记住,量子硬件的发展仍处于起步阶段。如果我们回顾经典计算机的早期,没有人预测到有一天我们能达到的能力和小型化。早期的计算机用机电继电器代替晶体管。它们效率低下且容易出错。但是他们达到了目的。他们证明制造计算机是可能的。
底层技术变化非常快。晶体管取代了继电器。1965 年,摩尔假设,在一个给定的空间单位中,我们可以容纳的晶体管数量大约每两年翻一番。这一轨迹在过去 50 年里一直如此。然而,我们目前见证了摩尔定律的大幅放缓。
但是对计算性能的需求持续增长。新技术,比如深度神经网络、区块链,以及我们每天收集的海量数据,都依赖于底层硬件来完善。
当然,量子计算机不会取代经典计算机,只要它们像早期的经典计算机一样低效和容易出错。但是一旦我们找到了高效建造量子计算机的方法,会发生什么呢?如果我们进入一个摩尔定律适用于量子器件的时代,会发生什么?
一般来说,我们可以在 QPU 上运行任何可以经典运行的计算。量子比特(qubit)是经典比特的推广。经典位不是 0 就是 1,量子位是 0 和 1 的复杂线性组合。我们称这种状态为叠加态。但是这种叠加状态包括 0 和 1 的特殊情况。所以,我们可以像使用普通比特一样使用量子比特。当然,这将是对能力的巨大浪费。然而,这是可能的。
作者图片
但是,量子比特很有趣,因为它们可以做经典比特做不到的事情。我们可以纠缠量子位,让它们形成共享的叠加态。然后,我们可以用量子位表示的并发态的数量呈指数增长。这种能力让我们解决经典解决不了的问题(在任何合理的时间内)。
然而,即使我们进入了“量子摩尔”时代,QPUs 也需要相当长的时间才能变得像经典计算机一样大(就量子比特的数量而言)。这是因为我们不需要那么多量子比特来做经典计算机做不到的事情。
每当 qpu 成为负担得起的硬件时,我们很可能会看到它们补充我们的计算机,而不是完全取代底层技术。尽管 QPU 可以完成任何任务,但一直使用它是不合理的。如果一个问题可以经典地解决,我们将继续经典地解决它。我们只会用 QPU 来解决传统上难以解决的问题。
我们已经目睹了类似的发展。不久前,当我们考察计算机的性能时,CPU 是最重要的处理器。首先,我们看看时钟速度。后来,我们看了核心的数量。
但是上面提到的现代技术的要求已经超过了今天最好的 CPU 所能做到的。因此,我们为计算机配备了 GPU(图形处理单),甚至 TPU(张量处理单),来完成经典 CPU 难以完成的工作。然而,我们并没有取代 CPU,因为它仍然是大多数任务的最佳处理器。
GPU、TPU 和未来的 qpu 是解决特定类型问题的专用处理器。它们补充了 CPU,但并没有取代它。
但是,从技术上讲,有 QPU 的计算机不就是量子计算机吗?因此,在这种观念下,即使量子处理器没有取代中央处理器,我们也会看到量子计算机取代经典计算机。
量子机器学习要不要入门?看看 动手量子机器学习用 Python 。
在这里免费获得前三章。
量子计算机会取代经典计算机吗?
原文:https://towardsdatascience.com/will-quantum-computers-replace-their-classical-counterparts-847e20e32fc2?source=collection_archive---------36-----------------------
经典计算不会消失,但量子技术有可能颠覆许多行业。利用两者的优势来释放 quantum 的全部潜力至关重要。
量子计算机已经在许多应用中击败了经典计算机。作者图片
量子计算的承诺是多方面的:它可以帮助以前所未有的速度开发救命药物,为金融建立更好的投资组合,并开创密码学的新时代。这是否意味着量子计算将成为标准,经典计算将被淘汰?
简而言之,答案是否定的。经典计算机拥有量子计算机难以企及的独特品质。例如,存储数据的能力是经典计算机独有的,因为量子计算机的内存最多只能持续几百微秒。
此外,量子计算机需要保持在接近绝对零度的温度下,大约为-270 摄氏度(-450 华氏度)。普通消费者家里没有如此强大的冰箱,考虑到相应的能源消耗及其对环境的影响,他们也不建议这样做。所有这些挑战表明,量子计算机不太可能成为大多数家庭或企业的固定设备。
更有可能的情况是,学术界和工业界的研究人员将通过云服务访问量子计算机。尽管量子技术仍处于早期阶段,但像亚马逊网络服务和微软 Azure 这样的供应商已经提供了云接入。
毫无疑问,量子计算将在未来十年改变许多行业。然而,经典计算机将永远发挥作用。然而,一如既往,细节是魔鬼:哪些问题更适合量子计算机,哪些问题更适合经典计算机?哪些行业将从采用量子和经典混合计算策略中获益最大?
量子计算机不会取代经典计算机
量子计算从 20 世纪 80 年代早期就已经存在。然而,四十年后,我们甚至还没有在世界范围内拥有三十几个量子设备。量子优势的第一手证明,即量子计算机比经典计算机快得多,只是在 2019 年由谷歌展示的。
根据麦肯锡最近的一份报告,到 2030 年,我们甚至可能不会有超过 5000 台量子机器。这不仅仅是因为量子计算机很难长期存储数据,也很难在室温下运行。事实证明,量子计算与经典计算有着本质的不同,开发、部署和获得这项技术的好处需要时间。
这种根本差异的一个例子是,量子计算机不能像经典计算机那样给出直截了当的答案。经典计算非常简单:你提供一个输入,一个算法处理它,最后你得到一个输出。另一方面,量子计算接受一系列不同的输入,并返回一系列可能性。你得到的不是一个直截了当的答案,而是对不同答案的可能性的估计。
这种计算方式在处理复杂问题时非常有用,在这些复杂问题中,您有许多不同的输入变量和复杂的算法。在经典计算机上,这样的过程通常需要很长时间。量子计算机可以缩小可能的输入变量和问题解决方案的范围。之后,人们可以通过测试量子计算机与经典计算机提供的输入范围来获得直接的答案。
因此,在未来的几十年里,经典计算机仍将是有用的。它们的持续相关性不仅仅是量子计算机需要多长时间才能发展到被主流采用的问题。这也是关于量子计算返回的解的模糊本质。作为人类,我们更喜欢直截了当的答案,这些答案只有经典计算机才能获得。
经典计算机将在几十年内仍然有用。作者图片
量子计算的技术限制
然而,我们应该记住,这种工作方式还没有经过广泛的测试。经过四十年的努力,量子技术仍处于起步阶段,有一些非常棘手的限制需要解决。这些限制将确保经典计算机仍然适用。
量子计算机上的信息以称为量子位的单位存储和处理。类似于经典计算机中的位,它们可以有不同的值,比如 0 或 1。然而,量子位也可以是 0 和 1 的混合,比如 30%的 0 和 70%的 1。这种能力使它们变得非常强大:一台具有 N 位的经典计算机一次最多可以执行 N 次计算,而量子计算机最多可以处理次 2^N 次计算。因此,如果一个经典处理器管理 10 次计算,一个量子处理器将管理 2 个⁰,即 1024 次计算。
问题是,建造具有许多量子位的量子计算机极其困难——目前的记录是一台拥有 76 的中国机器。公平地说,羽翼未丰的初创公司和科技巨头都承诺将很快制造出拥有数千量子位的机器。然而,更大的量子机器往往具有更低的连通性,这意味着量子位不能很好地相互通信。这种连接的缺乏降低了系统的整体计算能力。
最后,量子机器非常容易出错。这些计算误差是量子系统固有的,本质上无法避免。这就是为什么大量的资金和人才被投入到量子错误检测中,开发出能够发现自身错误并加以纠正的机器。虽然在这个领域已经取得了巨大的进步,但是量子误差不可能完全消失。即使使用高度精确的量子计算机,用经典计算机验证最终结果仍然是必要的。
等待中断
将量子计算的技术限制添加到存储硬件所需的过冷温度中,你就开始理解为什么截至目前大多数公司都在犹豫投资量子计算。然而,在某些行业,即使量子计算机解决问题的速度比经典计算机“仅”快 1000 倍,它也可能变得经济可行。这包括金融、制药和加密等行业。
因此,随着量子系统带来越来越多的经济效益,公司将一点一点地采用量子系统似乎是合理的。在此期间,经典计算机将保持相关性,甚至至关重要,以维持现状。很少有公司会在早期进行大规模投资,这意味着经典计算仍将在工业中承担大部分工作。
另一方面,无论现在看起来风险有多大,大型投资都有望成为量子计算应用取得真正突破的驱动力。这种破坏在两个领域尤其明显:药物开发和密码学。这两个领域依靠巨大的计算能力蓬勃发展,量子机器可以以前所未有的方式提供这种能力。
量子将在许多领域蓬勃发展,但经典计算机仍将是重要的。作者图片
量子将会蓬勃发展——而经典将会有所帮助
并不是所有的行业都会以同样的方式从量子计算中获利。据麦肯锡称,量子计算可以在四个领域产生巨大的长期收益。尽管如此,经典计算将在这些领域保持相关性,并补充量子技术的优势。
- 药物开发:药物分子的计算机模拟是必不可少的,因为它们可以削减成本和时间,有时甚至是大幅削减。今天,这种类型的模拟只能在相对较小的分子上进行。然而,如果公司对蛋白质感兴趣,因为蛋白质通常有成千上万种成分,他们需要制造它们并在现实生活中测试它们的特性,因为今天的计算资源不足以进行精确的模拟。量子模拟可以大幅降低开发成本,并帮助药物更快上市。然而,由于量子计算总是返回一系列的可能性,药物的最佳分子结构仍然需要用经典计算机来确认。
- 优化问题:工厂里最有效的设备布局是什么?部署车辆以确保高效运输网络的最佳方式是什么?5 年、10 年或 30 年后获得最优回报的最佳投资策略是什么?这些都是复杂的问题,最佳答案并不总是显而易见的。有了量子计算机,人们可以极大地缩小可能性,然后使用经典计算机得到直接的答案。从制造业到运输业再到金融业,这些问题在各个领域都比比皆是。
- 量子人工智能:数十亿美正投资在自动驾驶汽车上。目标是让车辆变得如此智能,以至于它们能适应地球上任何地方的繁忙道路。尽管有很多人才致力于训练 AI 算法来学习如何驾驶,但事故仍然是一个问题。量子人工智能可能比目前的方法更快、更强大,可能有助于解决这个问题。然而,这些好处可能只有在十年后才能收获,因为量子人工智能今天远不如量子模拟或密码学发达。因此,大多数人工智能算法将继续部署在经典计算机上。虽然现在自信地预测还为时过早,但在几十年内大多数人工智能将是量子的并非不可想象。
- 密码术:今天的安全协议依赖于随机数和数字因式分解的高度,经典计算机可以计算生成密码,但很少能够激活成功教程密码。不过,几年后,量子计算机可能会强大到可以用“T2”激活成功教程任何密码。这就是为什么研究人员必须开始投资新的量子安全加密技术。然而,量子技术是一把双刃剑,它不仅能激活成功教程每个密码,还能生成新的、无法激活成功教程的密钥。这个空间正在迅速融入这个新的现实。由于经典计算机将保持相关性,量子安全加密技术也必须为这些计算机而存在。这是可能的,公司已经开始用这种方式保护他们在传统电脑上的数据。
为量子未来做准备
谷歌、IBM 和许多不同的初创公司都希望每年将量子计算能力翻一番。这意味着一些公司需要跟随巴克莱、巴斯夫、宝马、陶氏和埃克森美孚的脚步,这些公司已经在量子技术领域表现活跃。
显然,并非每个行业都可能以同样的方式受益。制药、金融、旅游、物流、全球能源和材料等行业可能会比其他行业更早获利。这也意味着,如果不想被竞争对手甩在后面,这些领域的玩家需要迅速做好准备。
如果有战略意义,这些行业的公司应该效仿巴克莱(Barclays)或埃克森美孚(ExxonMobil)等领先者,在内部建立一支量子人才团队。这样的人才已经很少了,大学也不太可能跟得上不断增长的需求。作为替代,他们可以考虑直接与正在开发量子技术的公司合作,这可能会给他们带来竞争优势。
当然,这并不意味着这些公司将停止使用经典计算机。相反,量子计算将为他们带来特定任务的巨大好处,如药物开发、金融工程等。
与将从量子技术的出现中受益的公司相比,其他公司将不得不投资于保持安全的方法。具体而言,拥有长期数据资产的公司应该开始投资量子安全加密技术,以保护自己免受未来的攻击。这并不意味着他们需要很快使用量子计算机,但他们应该确保他们在未来的量子攻击中是安全的。关注的领域从航空航天工程到药物开发,再到市场研究的社会经济数据。
简而言之,许多不同行业的公司都需要加快步伐。一些人是因为如果他们采用量子技术,他们将从中受益,另一些人是因为他们需要在威胁面前采取行动。无论如何,不接受这种新的量子经典混合动力的公司都有被甩在后面的风险。
量子计算不会接管世界。但是它将在未来的十年或二十年里通过与经典计算机的全面合作产生重大影响。
本文原载于 建于 。
GPU 会开创计算机架构的新黄金时代吗?
原文:https://towardsdatascience.com/will-the-gpu-star-in-a-new-golden-age-of-computer-architecture-3fa3e044e313?source=collection_archive---------22-----------------------
米凯拉在 Unsplash 上拍照
促进人工智能软件进一步发展的架构选择
2018 年 6 月 4 日,作为 2017 年图灵奖的获奖者,约翰·汉尼斯和大卫·帕特森在他们的图灵讲座上讲述了计算机架构的新黄金时代。讲座的三个关键观点是:
- 软件进步可以激发架构创新。
- 提升硬件/软件接口为架构创新创造了机会。
- 市场最终解决了架构争论。
我想用第四个观点来修正这三个关键观点,从而完成这个循环:
获胜的架构促进了随后的软件进步。
自轩尼诗/帕特森讲座以来,市场可以说已经实现了人工智能的洞察#3,并决定将图形处理单(GPU)作为促进人工智能革命的获胜架构。在这篇文章中,我探索了人工智能革命如何激发架构创新和重新发明 GPU。我希望回答我自己的一个重要问题:
GPU 会开创计算机架构的新黄金时代吗?
特定领域架构
Henessy 和 Patterson 提出了特定领域体系结构(DSA ),以创新计算机体系结构,并努力迈向新的黄金时代。顾名思义,GPU 是 3D 图形的 DSA。它旨在渲染 3D 虚拟世界的照片级逼真图像;然而,几乎所有的人工智能研究人员都使用 GPU 来探索 3D 图形以外的想法,在人工智能“软件”,也就是神经网络架构方面取得突破。虽然在 3D 中仍然不可或缺,但 GPU 已经成为人工智能的“CPU”,因为它促进了人工智能的软件创新。除了 3D 用途之外,GPU 架构师一直在为非 3D 用途提供 GPU 的计算资源。我们称这种设计理念为通用 GPU (GPGPU)。
如今,我们看到 AI DSAs 取代 GPGPU 的激增,试图用更好的性能取代 GPU。就连 GPU 本身也在双重人格之间挣扎:AI DSA 和 3D DSA。原因是 AI DSA 需要加速张量运算,这在 AI 中很丰富,在 3D 中却没有。同时,3D 固定功能的硬件听起来对 AI 来说是不必要的。
因此,主要架构的争论似乎在问
- GPU 会保住 AI“CPU”的宝座吗?
- GPU 会不会分叉成两个 DSA,一个用于 AI,一个用于 3D?
我的预测如下:
- GPU 硬件/软件接口将使 GPU 成为人工智能的“CPU”。
- 基于人工智能的渲染将使张量加速成为 GPU 的中流砥柱。
- 虚拟世界和现实世界相互映射的数字孪生将主宰市场,最终解决架构之争。
GPU 硬件/软件接口
我们可以将 GPU 在 3D 领域的主导地位和在 AI 领域的巨大成功归因于其硬件/软件接口,这是 GPU 和 3D 图形软件架构师努力拥抱的。这个接口是解决以下矛盾的关键。虽然 GPU 社区继续使 GPU 更加通用,但行业的其他人已经转向更专业的硬件来解决摩尔定律的消亡。
GPU 管道(图片由作者提供)
双层可编程性
从概念上讲,GPU 是处理阶段的长线性流水线。不同类型的工作项在管道中流动时被处理。在早期,每个处理阶段都是一个固定功能块。程序员对 GPU 的唯一控制是调整每个块的参数。如今,GPU 硬件/软件接口让程序员可以随心所欲地处理每个工作项目,无论是顶点还是像素。不需要在每个顶点或像素循环中处理循环头,因为 GPU 架构师在固定的函数中实现它。这种架构选择让程序员有责任关注循环体或“着色器”,它通常以工作项的类型命名,例如用于处理顶点的“顶点着色器”和用于处理像素的“像素着色器”。
现代游戏如何用这样的线性流水线制作出惊艳的画面?除了在一次通过管道时控制不同类型的着色器之外,程序员还可以多次渐进地通过管道来产生中间图像,最终产生在屏幕上看到的最终图像。程序员有效地创建计算图,描述中间图像之间的关系。图中的每个节点代表一次通过 GPU 管道。
通用计算资源的集中池
通用计算资源的集中池在处理阶段之间共享,并承担繁重的工作。这种方案的最初动机是负载平衡;在不同的使用场景中,处理阶段的工作负载可能会有很大的不同。被称为着色器核心的计算资源已经变得更加通用,以实现灵活性和产品差异化。
GPU 架构师抓住机会将集中式着色器池作为 GPGPU 提供给非 3D 应用程序。这种设计方案使 GPU 能够在运行人工智能任务方面实现突破,即使是作为兼职。
平衡专业化
GPU 架构师通过在不改变硬件/软件接口的情况下添加协处理单来定期“加速”或“指定域”着色器池。纹理单就是这样一个协处理单,纹理贴图中的纹理素通过它被提取并过滤到着色器池。特殊功能单(SFU)是另一个协同处理单,执行超越数学功能,如对数、平方根倒数等。虽然拥有多个功能听起来类似于 CPU 中的超标量设计,但有一个显著的区别:GPU 架构师根据“平均”着色器程序使用它的频率来分配协处理单的吞吐量。例如,我们可以给纹理单着色器池吞吐量的八分之一,假设纹理操作平均八分之一的时间出现在基准测试或游戏中。当一个协处理单繁忙时,GPU 会切换任务以保持自己忙碌。
三维张量加速
在我的介绍中,我指出 GPU 难以在 3D 中采用张量加速。让我们看看,如果我们改变 GPU 渲染典型游戏帧的方式,这种趋势会如何逆转。GPU 首先为每个像素生成并在 G-buffer 中存储着色像素所需的所有信息。从 G 缓冲区,我们计算如何照亮一个像素,然后是几个处理步骤,包括
- 移除锯齿状边缘(抗锯齿(AA))
- 将低分辨率图像放大到更高的分辨率(超分辨率(SR))
- 为整个帧添加特定的视觉效果,如环境遮挡、运动模糊、高光滤镜或景深。
我们称这种渲染方案为延迟着色,因为对一个像素的着色是“延迟”的,直到每个像素都得到它需要的信息。我们将光照后的处理步骤称为后处理。今天,后期处理消耗了大约 90%的渲染时间,这意味着 GPU 的屏幕时间主要花在 2D 而不是 3D 上!
英伟达已经展示了基于人工智能的 DLSS 2.0,据称它可以产生比没有 DLSS 2.0 时更好看的图像。此外,NVIDIA 还为光线跟踪提供了基于人工智能的蒙特卡罗去噪,通过它,我们可以使用少量光线来实现只有使用更多光线才能实现的质量。此外,人工智能激发了许多其他类型的后处理的新解决方案,例如用于环境遮挡的 NNAO 和用于景深的 DeepLens 。
如果基于人工智能的后处理成为主流,张量加速将成为 GPU 个性的 3D 方面的支柱。GPU 分化成 3D DSA 和 AI DSA 的可能性会变小。
3D/AI 融合
为了解决架构的争论,我们想要解决最后一个难题:我们是否应该最终移除 3D 渲染中的固定功能硬件,尤其是对 AI 而言?请注意,通过 GPGPU,GPU 可以作为纯“软件”进行 3D 渲染,而无需使用任何固定功能的硬件。
在严格意义上,给定场景参数,3D 渲染模拟光子如何从光源传输通过空间,以与 3D 虚拟世界中的对象进行交互。由 GPU 进行的传统 3D 渲染是这一过程的非常粗略的近似。因此,微软在公告中称“[传统的基于光栅化的] 3D 图形是一个谎言”,以促进光线跟踪成为“未来的完整 3D 效果”然而,一个 3D 渲染纯粹主义者可能仍然会拒绝光线追踪,在光线追踪中,我们通过追踪光线从像素向后进入 3D 虚拟世界来实现 3D 渲染,这也是不真实的。
这两种方法都近似于基于模拟的 3D 渲染。无论哪种情况,我们都将 3D 虚拟世界的建模或内容创建从渲染中分离出来。在第一种情况下,建模 3D 虚拟世界需要工程师和艺术家进行大量艰苦和创造性的工作来描述每个对象及其与光交互的物理属性。在第二种情况下,关于渲染,完全真实是不可能的,因为我们需要大幅简化 3D 渲染,以满足资源预算内的不同性能目标。
与用最知名的科学知识和数学理论为给定问题找到解决方案相反,人工智能方法是关于从数据中“学习”计算模型或神经网络。我们通过试错法反复调整网络参数。我们通过先前的参数估计向前运行网络,并测量不匹配或“损失”然后,我们根据其梯度调整参数以减少损失,有效地在梯度的相反方向上导航损失景观。这种机制被称为反向传播,它要求沿正向路径的所有计算都是可微分的,以便参与计算梯度。
神经渲染是一个新兴的人工智能研究领域,使用上述方法研究 3D 渲染。下面是我跟踪神经渲染进展的思维导图:
作者图片
这个 3D 虚拟世界的模型被隐含地表示为神经网络参数(参见 NeRF 、格拉夫、长颈鹿),这些参数是我们通过比较真实世界的图像和我们从虚拟世界渲染的图像而推断出来的。然后我们反向传播比较的梯度来调整神经网络参数。可选地,我们可以从数据中学习显式 3D 网格(参见深度行进立方体、 GAN2Shape )。实际上,建模 3D 虚拟世界与学习神经网络参数是一回事。这一过程要求我们在前进路径中包括 3D 渲染管道,并在紧密循环中集成 3D 虚拟世界的建模和渲染。通过反复渲染和测试真实世界的图像,我们获得了所需的模型和场景参数,我们可以用它们来渲染虚拟世界的新视图。
在这个框架内,我们可以选择不调整每个参数的整体,例如,保持一个物体的形状不变,但估计它的位置(见 iNeRF )。通过这种方式,我们可以有效地识别和定位有问题的对象,而不是对其进行建模。建模和识别任务之间不再有区别。相反,这是一个我们想要“学习”或“估计”哪些场景参数的问题
结论
因此,在人工智能问题解决范式下,3D 渲染不仅是关于产生 3D 虚拟世界的照片级逼真图像,而且是为了从真实世界构建虚拟世界。此外,新框架在以下方面重新定义了 3D 和 AI:
- 3D 渲染成为人工智能训练循环中的一个基本操作
- 训练,或“梯度下降”,过去只发生在云中训练神经网络,现在是推理的一部分。
- 照片写实主义和保持真实世界和虚拟世界的一致性一样重要。
数字双胞胎将要求把巨大的和不断变化的真实世界带给它的未开发的双胞胎,并不断保持双胞胎之间的一致性。通过神经渲染获得的虚拟对象需要与经典构建的对象共存。因此,我相信神经渲染和传统渲染将在 GPU 上融合,利用其成熟和高性能的 3D 管道。数字双胞胎的需求将落在未来 GPU 的肩上。为了参与 AI 训练循环的梯度计算,需要在 GPU 端完成工作以变得“可微分”。
假设 GPU 变得天生可微分和张量加速,以响应 3D 中人工智能的进步,我预见 GPU 的双重人格将成为一个。
然后,GPU 保持了其作为首选架构的地位,以促进人工智能中的进一步软件进步,并最终开启了计算机架构的新黄金时代。
你会让自动驾驶汽车做出道德决定吗?
原文:https://towardsdatascience.com/will-you-let-self-driving-cars-make-moral-decisions-43f23139ba5c?source=collection_archive---------31-----------------------
重要的是要思考为什么无人驾驶汽车如此难以实现
来源: pixabay
无论你对自动驾驶汽车(AV)有什么感觉,世界上最大的公司似乎都无法投入足够的资金来实现它们。被认为处于领先地位的 Waymo 公司已经花费了惊人的~ 35 亿美!这是将极大改变我们日常生活方式的事情之一。
随着 AVs 的出现,我们希望看到交通流量效率的提高和更低的碳排放。想想基本上有很多拼车,它们不会在路上暴怒,以非常可预测的方式行动,并能在突发情况下做出瞬间决定。这对鹿来说可能更好🦌宾夕法尼亚州的人口也是如此。
对于像优步这样的公司来说,这意味着更可预测的司机供应,而对于司机来说,这可能意味着大规模的失业和再培训需求。但是,在我们超越自我,开始担心我们的工作,或者为路上少了一些人而庆祝之前,思考一下为什么无人驾驶汽车如此难以实现是至关重要的。
进退两难
几十年前,即使是今天的智能手机也会被认为是“不可能的”。回顾技术的巨大飞跃,我们有时会忘记引领我们走到今天的渐进式变革。因此,唯一合理的假设是汽车也将演变成 AVs,甚至可能是我们甚至不认为是汽车的东西。
问题并不在于制造无人驾驶汽车的技术方面。那就是我们大多数人现在生活的这个世界,并不是用来对付他们的。我们设计这个世界的思想是让人们来做决定,而不是机器。
快速决策意味着什么
让我们假设我们有一辆汽车,一辆自动驾驶的汽车,或者一辆安全的汽车。现在 Sav 基本上能做你作为司机能做的事,但它能做到精准,不累,用心。基本上 Sav 是最好的驱动。它没有任何瑕疵,它做的每一件事,采取的每一个行动都没有随机性。
一天,你在 Sav 里开车,突然,刹车失灵了。 Sav ,虽然是个完美的驾驶员,但也不是神仙,只能反应。但你应该庆幸不是你在开车,因为作为人类,我们往往会很恐慌。有压力的情况不是快速做出决定的最佳场所,尤其是那些涉及我们生活的情况。
啊哦,你看到前面有一条人行横道,上面有一些人。 Sav 也看到了这一点,并且* 哔哔 *之后,它意识到它只有两种可能的结果。要么转向一边,避免撞到行人,但对你造成致命伤害,要么直行,对随机出现的人造成致命伤害,但救了你的命。
谁应该优先选择生命的道德困境?如果它真的做出了选择,我们作为社会将如何应对?
为什么这么重要?
如果你或我在这种情况下,我们会怎么做?很有可能我们甚至无法想到所有可能的结果或确定幸存的概率。我们很可能会等太久才做出决定,然后最终做出一个不合格的决定,很可能伤害到所有相关人员。
那么,如果 Sav 做了更优化的事情,为什么会有问题呢?首先,最优是非常主观的。在这种情况下,每个人的最佳选择至少是他们自己的生存。问题不在于我们做了一个糟糕的决定,而在于我们决定背后的意图和推理。
不可否认的事实是,作为人类,我们不擅长做决定。幸运的是,Sav 没有得到同样的好处。当它做出决定时,我们确切地知道它为什么做出决定。不存在随机性。如果它选择拯救一个生命而不是另一个,我们知道它做了一个计算,在那里它赋予人的生命价值。
你希望这些车出现在你的街道上吗?你坐在车里舒服吗?如果 Sav 的公司要求你签署一份免责声明,免除他们的任何责任,你会这样做吗?或者你想预先选择 Sav 应该如何做出这些决定?
把道德还给人民?
好的,我们知道 Sav 只能根据它的算法来决定生死。我们可以让 Sav 在只有一两个选择的情况下随机行动。但我真的不认为我们作为社会会真的对一些被建造得更加准确和决定性的东西感到高兴,突然选择让生活在一个它完全控制的地方由随机机会决定。
回车,https://www.moralmachine.net/。
你会选择什么? 来源 刻字机
MoralMachine 是麻省理工学院媒体实验室建立的一个平台,用来收集关于我们如何做出艰难决定的观点。这个想法是在我们处于能够正确思考的精神状态时问我们这些问题,就像计算机不会受到周围发生的事情的情绪影响一样。
该平台为每个人提供了一组场景,一个接一个,询问汽车应该采取什么行动。无论是两组行人,还是乘客对行人,每一个动作都会导致某种形式的死亡。
它变得更加有趣(或令人震惊)的地方是我们被测试我们会赋予什么更多价值的地方。我们是否经常选择去拯救那些更年轻的人?我们区分动物和人类的生命吗?有人乱穿马路有关系吗?
由此产生的问题是,政策制定者和汽车制造商是否应该合作使用这些数据,民主地选择 Sav 的行为方式。在一个民主国家,我们投票给我们的政治领袖,以及他们所代表的价值观。即使这些价值观并不适合所有人,也没关系。如果大多数人希望以某种方式实现,他们就赢了。
“但是,当连伦理学家都不能就基本真理——或其近似值——达成一致时,社会怎么能达成一致呢”
“道德机器”的阴暗面和自动驾驶汽车计算伦理决策的谬误
这就是为什么让道德机器用于任何形式的政策制定都不是一个好主意。当然,我们可以让每个人在人口统计学上做出选择,但这总是会让一些人比其他人更不安全。根据该平台目前的结果,年轻人口可能从中受益。人们基本上不再走在马路旁边。因为总会有比你年轻的人出现在 AV 中,对他们来说你的生命就没那么重要了。
我们看重什么?来源: MoralMachine
同样,人们必须首先权衡进入汽车的风险。这样做,他们冒着让一个更年轻的行人来到车前的风险,触发 Sav 的生命价值分配算法,让你知道你的生命价值降低了。
这只是我在这里关注的一个特征,想象一下其他少数民族会是什么样子?我们将开始需要一个早晨提醒,提醒我们开车或走路的风险,这取决于我们周围当前的社会人口统计。这太荒谬了。
自驾只是白日梦吗?
人工智能中的伦理和道德已成为将越来越多的人工智能融入我们生活的最大挑战之一。公司有盈利的倾向,个人有不同的价值观,他们希望保持真实。任何可用的技术都会有一定的偏见,无论是基于工程师还是组织。
对于自动驾驶汽车,我们需要改变设置和评估其行为的框架。
1.重新设计结构
当我们想到自动驾驶时,我们想象的是世界的样子,区别在于自动驾驶汽车。相反,也许解决方案还在于更新世界,或者至少交通部门,需要看起来有点不同。人行横道、道路、交通信号灯、停车标志,所有这些都是基于这样一种假设,即人类需要相互协作来维护安全。无人驾驶汽车不一定需要同样的基础设施。类似于地铁系统如何与道路并行,也许我们也需要重新设计城市,以不同于我们目前的方式融入行人。
2.重塑我们的思维方式
值得注意的是,尽管道德机器让我们相信 AV 必须基于道德做出决定,但试图将道德和伦理纳入机器并没有真正的好处。因为我们作为人类还不能弄清楚什么是道德上正确的,我们没有办法实际上把它结合到机器中去执行。
问题不在于一辆汽车是否应该为了救五个人而杀死一个人,而是这项技术的引入将如何塑造和改变周围所有人的权利、生活和利益。
无轨电车的愚蠢:伦理挑战与自动驾驶汽车
这里的论点是,AI 的行为使用概率来确定要做什么。它将基于事件的不同概率,以及采取这些行动的结果的价值,试图最大化总收益。我们不应该也不能将不同人口统计或人口的生活价值观模型化到它的决策中。
如果你看过任何机器人试图保护人类免受其害的科幻电影,如“瓦力”,给 AI 分配道德任务通常是事情开始出错的地方。
因此,与其关注 Sav 在这些一次性情况下会做什么,我们需要了解 Sav 实际上是如何做出决策的,并从中消除尽可能多的偏见。思考《道德机器》中提出的道德问题会分散注意力。
资源
- 人们想要有功利主义道德观的无人驾驶汽车,除非他们是乘客
- 无人驾驶汽车的困境揭示了道德选择并不普遍
- 无轨电车的愚蠢:伦理挑战和自动驾驶汽车
- “道德机器”的阴暗面和自动驾驶汽车计算伦理决策的谬误
原载于 2021 年 9 月 28 日 https://wordsbywaseh.comhttps://wordsbywaseh.com/will-you-let-self-driving-cars-make-moral-decisions/。
你会从 PyCharm 转向 JetBrains 的最新数据科学 IDE DataSpell 吗?
原文:https://towardsdatascience.com/will-you-switch-from-pycharm-to-dataspell-the-latest-data-science-ide-from-jetbrains-ab2a0ef70504?source=collection_archive---------2-----------------------
回顾 DataSpell IDE 的主要功能
照片由 Unsplash 上的尼克·费因斯拍摄
在常见的 Python IDEs 中,PyCharm 是我的最爱,原因有几个:1)。PyCharm 给了我更连贯的用户体验,因为我以前经常使用 AndroidStudio2).出色的自动完成智能,可提高生产率;3).版本控制工具的原生集成(例如 GitHub);4).虚拟环境易于管理;5)重构和调试是没有痛苦的。
虽然不如其他大型科技企业知名,但 JetBrains 是一家高度创新的公司,它支持广受好评的 Python IDE——py charm,以及其他专业开发的几个行业领先的 IDE,如 WebStorm for web development。
作为一名使用 Python 进行数据处理和分析的科学家,我是 PyCharm 的忠实用户,py charm 支持数据科学家寻找的所有基本特性。我最近得知 JetBrains 发布了一个专门针对数据科学项目的 IDE—DataSpell。当然,我试了一下。下面是 DataSpell 必须提供的关键特性的快速总结。
在你决定继续阅读之前,有一点很重要,DataSpell 不会像其他 JetBrains IDEs 一样是免费产品。然而,我猜想他们可能会提供一个教育或社区版本,可以对一些人免费。现在,JetBrains 正在为 DataSpell 运行一个早期访问程序,如果你愿意,你可以下载进行评估。
整体更好的笔记本电脑体验
虽然 PyCharm 支持 Jupyter 笔记本,但我很少在 PyCharm 中编辑或运行笔记本,因为它肯定不会像其他笔记本编辑器一样提供最佳的笔记本体验,例如 JupyterLab,甚至是在 Python 扩展中正式集成了笔记本支持的 VS Code。PyCharm 的一个特别的缺点是它的接口将代码单从输出中分离出来,提供了一种支离破碎的体验。
DataSpell 通过提供一个类似于 JupyterLab 的接口解决了这个问题。本质上,输出就在电池的正下方——非常简单。此外,常见的快捷键与 JupyterLab 或 VS 代码对单格的操作相同,如 a 在当前单格之前添加一个单格,b 在当前单格之后添加一个单格,shift + enter 运行当前单格并添加一个新单格。
与数据框的良好互动
当您将数据帧显示为输出时,DataSpell 可以显示整个数据帧,而不会在数据帧很大时屏蔽一些数据,这与其他笔记本编辑器不同。当数据帧很大时,DataSpell 会自动添加一个滚动条,允许您滚动查看整个数据集。
同时,您可以通过单击列名轻松地对数据进行排序,这将使用该列按升序或降序对数据帧进行排序(如果您单击它两次)。
如果希望在单个框架中查看更多数据,可以选择在单独的选项卡中打开数据框架。下图向您展示了这些功能。
数据帧交互性
智能编码辅助
正如我前面提到的,我非常欣赏 PyCharm 对编码智能的支持,比如有效的自动完成建议。DataSpell 完全继承了这个特性。当您在单格中编写代码时,您可以获得与在 PyCharm 中编写 Python 脚本文件相同的待遇。
我知道 JupyterLab 通过第三方插件提供了相同的编码支持,但并不总是有效,而且很慢(当它有效时)。从动画图像中可以看到,DataSpell 几乎是立即快速提示可能的候选对象。您的编码生产率可以显著提高。
编码帮助
版本控制集成
有专业软件开发团队工作经验的人应该熟悉版本控制系统。然而,对于一些独立工作的数据科学家来说,这不一定是真的。如果你还没有开始使用版本控制工具,你必须查找它们。其中,最常见的是 GitHub。要开始创建主分支,您只需 GitHub 上的 VCS ->共享项目,系统会提示您输入您的帐户。
GitHub 上的共享项目
虚拟环境管理
当您使用 Python 一段时间后,您应该已经意识到为您的每个项目设置虚拟环境的重要性。如果您选择编写代码来管理这些环境,那就不太容易了。DataSpell 通过提供一个设置页面,让我们可以轻松地为任何数据科学项目配置虚拟环境,如下所示。值得注意的是,它内置了对 Conda 环境的支持,这是许多数据科学家做出的选择,因此大多数人都不会感到陌生。
使用现有环境
数据库连接
没有数据,数据科学家无法开展工作。一个基本的数据源是各种数据库。随着技术的发展,出现了许多不同种类的数据库,如 SQLite、Microsoft SQL 数据库、Oracle 和 PostgreSQL。所有这些主要类型都由 DataSpell 通过和连接步骤来支持。
数据库连接
终端、Python 控制台等等
你并不总是在 Jupyter 笔记本或 Python 脚本上工作。有时,您可能会发现打开终端或 Python 控制台来执行一些其他工作非常方便。例如,当我使用 Streamlit 构建一个网站时,我需要使用终端来启动网站进行测试。DataSpell 通过提供终端的内置支持,让我们变得很容易。
同样重要的是可以方便地访问 Python 控制台。这在您编写 Python 脚本时非常有用,您可以在控制台中请求某些代码行,这样您就可以快速评估性能,而无需运行整个脚本。与此功能相关的是,DataSpell 和 PyCharm 一样支持科学模式,在这种模式下,您可以在脚本中启用“类似细胞”的功能,一次运行一个细胞。
在您找到终端和 Python 控制台的地方,您会注意到还有许多其他方便的工具,包括 Python 包和问题,您可以在其中查看当前项目中的潜在问题。
底部工具
结论
我对 DataSpell 的总体印象是积极的,因为它从 PyCharm 中提取了数据科学项目所需的所有关键功能。换句话说,如果您使用 PyCharm professional 版本,您就拥有了 DataSpell 提供的几乎所有东西——只有一个例外。DataSpell 让笔记本体验好了很多。
虽然这里没有涉及,但同样重要的是 DataSpell 也支持 R,JetBrains 团队正在改进他们对 R 语言的支持,对其他数据科学相关语言的支持,如 Julia,也在计划中。
基于以上种种原因,我一定会在 DataSpell 正式发布时尝试一下。我的数据科学家朋友们,你们呢?
威廉姆斯 F1:车队回到正轨了吗?
原文:https://towardsdatascience.com/williams-f1-is-the-team-getting-back-on-track-4f88eca8d33c?source=collection_archive---------20-----------------------
维基媒体
探索性数据分析
一小群车队对赛车迷的集体想象有着巨大的影响。
当我们想到驱动器、电路,甚至几十年时,某些图像会跃入脑海。90 年代威廉姆斯赛车的霸主地位,加上罗斯曼的车身和雷诺的引擎,就属于这一类。
记忆的直接性不可避免地会消失。如果库存得不到补充,兴奋就会让位于略带褐色的怀旧情绪。
威廉姆斯车队是赢得 1979 年至 2008 年间所有车队冠军和 1984 年至 2008 年所有车手冠军的五支车队之一。它在这项运动遗产中的地位是毋庸置疑的;正如我们所知,车队的辉煌岁月塑造了 f1 的轮廓。
该团队最近的困境与这些令人振奋的成就形成了鲜明的对比。威廉姆斯上一次夺冠是在 2012 年。之前的胜利是在 2004 年。
谷歌在回复关于“威廉姆斯赛车”的查询时给出了这些无情的建议:
这个由弗兰克·威廉姆斯爵士于 1977 年创建的团队现在由多利顿资本管理。最近的收购提供了所需的资金和战略方向的改变,导致许多人问威廉姆斯是否回到正轨。
我看了看他们远近闻名的过去,看看数据是否表明他们早该回到领先的行列。
威廉姆斯赛车:过去
威廉姆斯一共获得了 9 个车队冠军,仅次于法拉利。
图片:克拉克·博伊德;数据:卡格尔
威廉姆斯显然是这里精英俱乐部的一员,与法拉利和迈凯轮一样——但前者保持着健康的领先优势。
自 1950 年 F1 成立以来,法拉利是唯一一支在每届锦标赛中都有赛车参赛的车队,尽管他们因与组织者发生争执而错过了第一场比赛。
自 1977 年以来,威廉姆斯驾驶赛车参加了 754 场比赛,引人注目的是,他们以第一名的成绩结束比赛的次数比其他任何位置都多。威廉姆斯有 114 场比赛的胜利,相当于 15%的比赛胜率。
加上 128 个杆位,车队的血统变得更加清晰。
下面的图表显示了历年来每支车队赢得的累计冠军数,包括车手和车队冠军。
图片:克拉克·博伊德;数据:卡格尔
从这张图表中,我们可以看到 F1 过去的一个简化故事。
法拉利在 20 世纪 50 年代赢得了多个车手冠军,但由于其不存在,在那些年里没有赢得车队冠军。车队冠军是在 1958 年才出现的。这有助于解释它在这里的 22 个标题的扩展计数。
威廉姆斯在 20 世纪 90 年代有一个非常多产的时期,用雷诺提供的引擎在六个赛季的时间里获得了五个车队冠军。
2013 年后,我们可以看到主宰 v6 turbo 时代的梅赛德斯车队令人印象深刻的崛起。自 2010 年以来,红牛和梅赛德斯赢得了所有车队的冠军。
2009 年,布朗赢得了冠军,然后梅赛德斯买下了他们,以启动他们的 F1 入口。
我们也可以注意到所有球队都经历的休整期。法拉利在 1961 年至 1974 年、1979 年至 2000 年和 2007 年至 2020 年期间表现不佳。老实说,他们很快就会把 2021 年加到这个名单上。
毫无疑问,威廉姆斯现在正经历着这样一个时期。下图显示了本世纪车队在车队积分榜上的位置频率。
第三是最常见的位置(4 次),最后一次获得第三名是在 2015 年:
这只是故事的一小部分。两支车队(梅塞德斯和红牛)在这个领域遥遥领先,第三名可能并不意味着第三名的车队就在咫尺之遥。
下面的图表显示了每年领先的车队与威廉姆斯车队之间的差距:
2015 年,威廉姆斯以 257 分获得第三名。奔驰以 703 分夺冠。
威廉姆斯因此获得了梅赛德斯 36.5%的积分,从领先者到威廉姆斯之间产生了 63.5%的差距。
2003 年,威廉姆斯以 142 分获得第二名,紧随法拉利 158 分之后。很重要的一点是,今天一场胜利所获得的分数明显不同(当时一场胜利只有 10 分),但百分比赤字的计算仍然描绘了一幅有代表性的画面。
我们可以看看威廉姆斯每个赛季如何对抗领先的球队,以获得对球队停滞不前的进步的不同看法:
这些图表显示了每个赛季的积分累积情况。梅赛德斯以可靠、快速的速度获得积分,而威廉姆斯则在最近停滞不前。
正如詹姆斯·特洛曼的一些优秀作品中所强调的,这种模式在本季再次上演:
Trotman 也展示了一些来自各个种族的有启发性的图表。例如,我们可以在这里看到领先的车队如何脱离其他车队,并在 2020 年法国大奖赛上扩大其领先优势:
当然,只有戴上金融的帽子,你才能真正理解 F1。
最近几个赛季,威廉姆斯车队的预算是发车区最小的,这与它在方格旗的表现密切相关。
威廉姆斯怎么了?那发生了。
新的 1.45 亿美的年度预算上限激励了较小的团队留在这项运动中,最终应该会导致更激烈的竞争。
不可否认的是,一些项目不受这一上限的限制,包括营销、司机工资和大约 20 个其他项目。
威廉姆斯:进步的迹象
随着 F1 即将发生翻天覆地的变化(更多内容见下文),威廉姆斯将渴望在本赛季展示进步的迹象。
到目前为止,这种进步在排位赛中已经很明显了——特别是乔治·拉塞尔:
事实上,拉塞尔是今年迄今为止唯一一位在排位赛中击败队友(加拿大人尼古拉斯·拉蒂菲)的车手。
然而,当灯光熄灭时,威廉姆斯面临的挑战也随之增加。拉塞尔仅在第一圈就平均失去了 1.44 个位置,这或许表明他正在为一个出色的排位赛圈竭尽全力。
到目前为止,拉塞尔在今年的第一圈比赛中总共失去了 13 个位置。
尽管如此,威廉姆斯车队确实在英国大奖赛上完成了最快的进站,所以他们在那里补上了一点时间。
下面,我画出了四位车手(汉密尔顿、维斯塔彭、拉塞尔、拉蒂菲)本赛季在每个位置上的总圈数:
做这样的比较似乎很残酷,但我被 Verstappen 对今年比赛的指挥所打动。他本赛季领先了总圈数的 70%,如果不是因为第一圈与汉密尔顿的事故,他肯定会在英国大奖赛上增加总圈数。
再往下,我们看到罗素经常胜过他的队友拉蒂菲。据传闻,26 岁的拉蒂菲每年可获得 2000 万至 4000 万美的赞助费。他的父亲是加拿大第三大食品公司 Sofina 的创始人。他不是一个糟糕的司机,但罗素显然是卓越的人才。
如果拉塞尔继续他最近的状态,他只会吸引梅赛德斯车队更多的关注。
威廉姆斯车队与其引擎供应商(梅赛德斯)建立了更紧密的联系,关于拉塞尔将成为汉密尔顿车队二号车手的传言也越来越多。
然而拉塞尔的状态对威廉姆斯来说可能是双赢的。
他们的头号车手可能会离开,但他会在这个过程中展示赛车的能力。威廉姆斯对明年有着雄心勃勃的计划,这将由本赛季剩下的比赛中更好的表现来推动。如果拉塞尔获得了梅塞德斯的驾驶权,那么从逻辑上来说,瓦尔特利·博塔斯(前威廉姆斯车手)将会接受报价。
2022 赛季
2022 赛季将会看到 F1 赛车的大量变化,许多人认为这是这项运动历史上最大的改革。正如我们在上面看到的,有一小群资金极其充足的车队主导着今天的 F1。一旦他们到了前面,超车是有限的。
这限制了这项运动对更广泛观众的吸引力,无论是观众还是赞助商。
预算上限将迫使团队创造性地思考,但 2022 年也带来了新的技术规则,试图改善这一奇观。
正如 f1 首席技术官帕特·西蒙兹最近所说:
“‘尾流’是超车问题的关键。当高速行驶时,F1 赛车会产生湍流空气,并向外扩散,以免干扰尾翼。由此产生的尾流会显著降低后车的下压力(将汽车“粘”在路面上),并导致重要系统过热,从而影响后车。因此,很难靠得足够近来尝试超车,甚至在弯道中跟随另一辆车。”
f1 还聘请了一名首席设计师来帮助提升赛车的美学吸引力。F1 网站上有一篇关于新车的精彩报道。
我们从 F1 赛车的历史开始,这表明规则的重大变革会动摇秩序。当新规则开始生效时,各队尽可能地争取优势。布朗在 2009 年做到了这一点,梅赛德斯从 2014 年开始在新时代掌握了主动权。
如果我们看看 2014 年的锦标赛,我们可以看到每支球队的表现与他们对上一年锦标赛的预测表现的对比。
线以上的人表现超出预期:
这并不是说奔驰这次会重复这一壮举;更确切地说,一家制造商可能会比其他制造商更早地激活成功教程代码。
威廉姆斯可能不再位于发车区的前面,但它可以在 2022 年利用梅赛德斯赛车后面改进的滑流。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://sigusoft.com/dataspell/4588.html