数据科学家如何提高他们的编码技能
科技职业
可以帮助你轻松编程的 6 个技巧
介绍
正如在之前的博客文章中提到的,我将在科技领域开始我的职业生涯,成为一名数据科学家/统计学家。获得技能和建立关系网需要多年的努力和奉献。从第一天开始,这是一个漫长的过程,但不再是一个孤独的旅程。
我开始了一个新的博客系列,名为“ 科技职业 ”,来分享我的学习和成长。我对该系列的愿景是关注数据科学的软方面。我所说的“软方面”是指软技能,如良好的沟通、主动学习、指导、职业发展、协作、团队建设、冲突解决,以及在数据世界中取得职业成功所需的其他非技术因素。这些软技能广泛适用于在该行业工作的其他人或任何想进入科技行业的人。
我的目标是分享好的经验,共同成长。
在第一篇文章中,我列出了帮助我成长为数据科学家的四个技巧(链接于此)。下面是一个快速回顾:
- 把读书当成呼吸:大量阅读,广泛阅读;
- 邻近学习:开发与你的主要职责相关的新技能;
- 熟能生巧:动手方法;
- 成为社区的一员:帮助他人,也帮助自己。
在今天的帖子中,让我们转换话题,深入探讨如何学习迭代有效编程的问题。如前所述,整个数据科学领域正在迅速向软件工程转变,并越来越关注编码技能。因此,如果没有很强的编码背景,想要得到一份 DS 的工作是极其困难的。
来自一个非传统的背景,我非常害怕任何面试中的编码部分。在这篇文章的剩余部分,我将分享我的顶级编程技巧,可能对其他人有所帮助。
一般学习策略
在讨论具体的技巧之前,指出主动学习的两个必要因素是有帮助的:自我反思和教学。
- 自我反省
学习本质上是渐进的,建立在我们已经知道的基础上。学习不应该远离我们现有的知识图谱,这使得自我反思变得越来越重要。学完新东西后,我们应该反思以下几点:
- 这篇论文/文章要回答的主要问题是什么?
- 提出了什么新方法,为什么?
- 在实施方面有什么实际的限制吗?
- 权衡
- 有哪些贡献?
思考这些问题可以帮助我们将这些点连接起来,并理解增量价值。
一如既往,有效的学习需要循序渐进,不应该留下很大的认知差距,自我反思有助于我们更好更快地处理信息。
- 教学
反思我们所学的内容后,下一步是在没有接触过这些内容的情况下教别人。如果我们真正理解它,我们可以将概念分解为多个可消化的模块,使其更容易理解。
教学以不同的形式进行。它可以是一个教程,一个技术博客,一个 LinkedIn 帖子,一个 YouTube 视频等等。一段时间以来,我一直在 Medium 上写长篇技术博客,在 LinkedIn 上写短篇数据科学入门。此外,我正在尝试 YouTube 视频(YouTube 上的我的数据科学频道),这为学习提供了一个很好的补充渠道。
如果没有这两个因素,我的数据科学之旅将会更加坎坷和具有挑战性。老实说,我所有的啊哈时刻都来自广泛的反思和教学,这是我活跃在多个平台上的最大动力。
Kelly Sikkema 在 Unsplash 上拍摄的照片
发展有效编码技能的六个技巧
提示 1:找到你的工具并坚持使用它
这不是一个技巧本身,但肯定是有用的。前阵子数据科学家之间有一场关于 R VS Python 的争论。作为一个经常使用 R 的用户,我一开始是不愿意转用 Python 的。然而,在看到 Python 可以做什么之后,我很快改变了主意。它是一种如此通用的语言,使我们能够顺利地与其他工程同事合作。
经过一段短暂的过渡期后,我对用两种语言进行编码变得相当适应了。我将它们用于不同的目的:R 用于因果推理相关的问题,Python 用于工程繁重的任务。
我的建议是选择你的工具并坚持下去。这里没有对错的答案,真正的问题是为你的研究问题找到最合适的工具。
技巧 2:从简单的问题开始
由于自我膨胀的性格,我喜欢走出舒适区,用远大的目标挑战自己。然而,努力追求一些我目前力所不及的东西,带来的弊大于利。
在这一点上相信我,因为我有过惨痛的教训。
我曾经被 LeetCode 上最具挑战性的编程问题弄得焦头烂额,这让我精神萎靡,也打击了我的信心。它们太难了,没用。这与我如何努力无关,因为它们超出了我的能力范围(请参考下图)。
回到过去,我从一个简单的 for 循环中学到了最多的编程知识。所以,放松自己,从简单的问题开始。
技巧 3:提升自己,用更具挑战性的问题挑战自己
我自己的画
我创建了上面的图表来区分三个区域:舒适区、学习区和危险区。舒适区指的是我们熟悉的领域,我们从舒适区拉知识不费吹灰之力。学习区指的是我们现在还不懂,但已经为快速学习打下基础的领域。最后,至于危险区,它是我们目前无法触及的地区。
这里有一个玩具的例子。对于之前接触过统计学和机器学习的有志数据科学家来说,概率论和其他基本概念,如</crack-data-science-interviews-essential-statistics-concepts-d4491d85219e?sk=af5291865f239ad505e8a8a1a80cceb8>**、Bootstrap和 大数定律 应该在他们的舒适区。在生产中部署机器学习模型应该在研究区域中。高效计算和性能优化应该处于危险区域。
解决最优化问题太过雄心勃勃。相比之下,如果有抱负的数据科学家专注于研究区域,即学习如何在生产中部署模型,他们将受益匪浅。
回到编程问题。在将新的编程技巧引入舒适区之后,我们应该尽快升级并进入学习区。
通过做我们最熟悉的事情来停留在舒适区不会让我们成长。相反,我们应该站出来,用新事物挑战自己。
一个警告:不要在伸出手的时候跨过危险区域,这与前面关于持续学习没有大的知识差距的观点密切相关。
再说一遍,大多数学习都发生在中间地带:学习区。
开始新的事物已经足够具有挑战性;我们不想同时尝试新的和大的东西。一如既往,学习发生在小剂量。
之所以首选学习区,主要是因为只需要花一点力气就能学到东西;如果我们处于危险地带,无论我们如何努力,事情都不会有结果。
尼克·莫里森在 Unsplash 上的照片
技巧 4:学习数据结构和算法
我发现这条建议很有见地,但经常被忽视。一个常见的误解是,DSA 属于软工程师的工具包,而不是数据科学家,这是不正确的。数据科学不是一个纯粹的分析领域。相反,它涉及工程义务,包括模型部署、ETL、高效计算和优化,以及数据基础设施知识。所有这些义务都要求强大的编码技能。
作为一名推理数据科学家,我的一大块工作是理解数据管道,高效地提取数据。对 DSA 的扎实理解大有裨益,对数据科学的其他领域(分析和算法)也是如此。
如果你是新来的,这里有一个 DSA 的简单例子。
*
学习 DSA 的另一个好处是我们可以在采访中谈论时间和空间的复杂性,这很好地服务于我们的目的。
下面是我最喜欢的两本关于 DSA 的书:算法靠摸索和破解编码面试。*
技巧 5:使用不同的方法
到目前为止,您应该已经很好了,并且能够解决常见的编程问题。为了进入下一个层次,我们可以尝试使用不同的方法解决相同的问题,同时讨论折衷方案(例如,时间复杂性、基础架构要求、利弊等)。).
- 为什么算法 A 比其他算法表现得更好?
- 为什么 Dictionary 是键值对的推荐数据类型?
- …
这里有一个简单的例子。
* *
秘诀 6:成长心态
低起点是可以的,即使你在面试中不能解决任何编码问题也是可以的。正如发生在我身上的那样,一开始我无法回答任何与 Python 相关的问题。但是经过坚持不懈的学习,我现在已经是(自称)编程高手了。
记住,每个人都有一个学习曲线。
如果你在面试循环中,试着从每次失败中学到新的东西。你从哪里开始或者你目前的编码水平都不重要。真正重要的是认识到差距并成为一个增量学习者的能力:从低开始,保持动力,每天练习。
Medium 最近推出了作家伙伴计划,支持像我这样的普通作家。如果你还不是订户,通过下面的链接注册,我会收到一部分会员费。
*https://leihua-ye.medium.com/membership *
外卖食品
退一步说,作为一名之前在该行业工作经验有限的应届毕业生,迈出第一步总是困难的。刚开始的时候,我没有 Python 和 SQL 的背景,不懂数据的应用端,对 DSA 更是零了解。这是一个相当低的起点。
然而,通过不断的学习,我能够填补空白,成为一名高效的程序员。主动学习的秘诀是持续、渐进和迭代。没有一朝一夕的成功;反而需要付出很大的努力。
让我们回顾一下可能对你也有帮助的 6 个技巧。
提示 1:找到你的工具并坚持使用它
提示 2:从简单的问题开始
提示 3:及时转向更具挑战性的问题
技巧 4:学习数据结构和算法
提示 5:使用不同的方法
提示 6:成长心态,你能做到
喜欢读这本书吗?
还有,看看我其他关于人工智能和机器学习的帖子。
数据科学家如何减少二氧化碳
通过在时间和空间上转移负载来优化操作
(图片来源:谷歌)
数据科学家可以为气候变化解决方案做出很多贡献。即使你的全职工作不是研究气候,研究公司运营的数据科学家也可以在他们目前的岗位上产生很大的影响。通过发现以前未开发的运营灵活性资源,数据科学家可以帮助将负载转移到电网中无碳能源份额更高的时间和地点,如风能和太阳能。这种负荷转移允许电网更快地过渡到更高份额的无碳能源,并且还可以降低运营成本。
数据科学对气候解决方案的贡献
在讨论优化运营或基础设施的具体机会之前,我想先介绍一下数据科学家在气候研究方面的广阔舞台。当前关于将数据科学应用于气候的大部分兴奋都围绕着 ML 和大数据的应用,这是正确的。一个很好的起点是 climatechange.ai ,这是一个志愿者组织,已经建立了一个广泛的社区,这些人在气候变化和人工智能的交叉领域工作。他们的网站包括 2019 年论文用机器学习【1】中描述的几十个“气候变化解决方案领域”中每个领域的摘要。虽然解决方案领域旨在作为高效 ML 气候应用的指南,但许多领域也适用于来自统计和运筹学的更“经典”的数据科学方法。可能性的列表是巨大的,并且可能很难知道从哪里以及如何开始。对于希望更多地参与气候问题的数据科学家来说,无论是 20%的项目还是改变职业轨迹,Terra.do 训练营和 workonclimate.org Slack 社区都是结识他人和寻找资源的好地方。
转型中的电网创造机遇:碳强度的变化
随着电网在未来几十年向无碳能源发展,我们正处于一个独特的转型期,我们生活在清洁能源和肮脏能源的混合中。即使在同一个地区,一天中风刮得更大或阳光更强的特定时间比一天中其他时间的碳密集度低得多,这是可以预见的。一天中不同地区和不同时间的碳强度的这种可预测的变化创造了减少碳排放的机会。
如果你的管理层已经关心优化运营成本,那么你的章程中已经包含了寻找可以减少碳足迹的优化方案。正如我将在下面描述的那样,减少碳排放可以来自于发现运营中未开发的灵活性资源,将负载转移到更清洁的地点或一天中更清洁的时间。建立利用这种灵活性的能力也可能使运营降低成本。因此,你不需要等待一个新的“绿色”指令或计划开始。只需以一种小而具体的方式开始,探索并展示更多的时间和投资可能带来的好处。
让我们来看看碳强度实际上是如何变化的。图 1 显示了谷歌在全球拥有数据中心站点的每个地区在一个样本日内每小时的地区平均碳强度。从阅读这些图表的角度来看,基于生命周期总排放量,发电的碳排放强度中值约为 1000 kg CO2/MWh(煤)、900kg CO2/MWh(石油)、500kg CO2/MWh(天然气)、50kg CO2/MWh(风能、太阳能、水能和核能)。在图 1 中,我们看到*不同地点的碳强度相差 2.5 倍。*我们还发现,在一些地点,一天中会有很大的变化。一天中最脏的一个小时的碳强度比一天中最干净的一个小时高 46%,这是一年中所有时间和所有数据中心站点的平均值。当研究碳强度的时间和空间变化时,其他研究显示了类似的结果。美国国家科学院(National Academy of Sciences)2019 年 12 月发布的一份关于跟踪美国电力系统排放的报告【2】报告了 2016 年美国 20 个不同平衡机构的碳强度分布,并显示了美国最清洁的 25%和最脏的 25%地区之间的碳强度差异*~ 4 倍,每个地区内的时间差异也很大,正如我们在谷歌网站上看到的那样。(平衡机构通过控制其区域内和相邻平衡机构之间的发电和输电,确保其区域内的电力系统供需平衡。)*
图一。谷歌每个数据中心站点一个采样日的平均碳强度。数据来源:明日起 electricityMap API 。
**在预测每小时的碳强度时,这些变化是相当可预测的,碳强度数据和预测可从第三方提供商获得,如明天和瓦特时间。在我们测试的预测中,我们发现预测的每小时平均碳强度的平均绝对百分比误差(MAPE)在未来 16 小时的 3–8%范围内,在未来 32 小时的 10–15%范围内。虽然这些预测仍有很大的改进空间,但这种准确性已经足以根据碳强度预测提前一天优化运营。
我们电网中碳密度的区域差异将会伴随我们一段时间。大多数电网接近零碳强度需要时间,可能需要几十年。2020 年全球新电厂支出的 22% 仍流向煤电厂和天然气电厂[3]。即使没有新的化石燃料发电厂建设,一项研究估计,美国 73%的现有化石燃料发电厂容量将在 2035 年达到其典型的寿命终点[4]。我们的观察是,日内变化是混合了化石燃料和无碳能源的电网的一个特征。图 2 显示了碳强度的日内变化如何随电网中的无碳能源量而变化,垂直线表示 2018 年亚洲、美国和欧洲的无碳能源量。在图表的左侧,我们可以看到消耗能源的地区主要来自化石燃料发电厂,一天之内变化很小。在图的右侧,我们看到消耗大部分无碳能源的区域,那里的平均碳强度非常低,因此碳强度的日内变化也很低。在图表的中间,在 10-80%的大范围无碳能源组合中有很高的日内波动,波动稳定在 30-50%左右。这里的直观解释是,随着电网增加风能和太阳能(间歇性能源)而不存储,无碳能源的份额增加,但影响集中在一天中风能和太阳能容量更可用的特定时段。来自前面提到的国家科学院的同一份报告[2]:“随着电网吸收更多的可再生能源,获取异质性的需求变得更加迫切,而可再生能源的可用性通常在时间和空间上有所不同。在这样的电网中,需求将需要变得更加灵敏。”
图二。不同地区作为无碳能源组合函数的碳强度日内变化,大陆平均碳强度用垂直线表示。误差线表示每个地区全年的差异范围。数据来源:明日起 electricityMap API 。
负荷转移对电网的影响:边际和平均二氧化碳
根据典型的碳会计规则,将负荷转移到平均碳强度较低的时间和地区可以降低公司的碳足迹。但是这实际上如何影响电网排放的碳呢?这不是一个零和游戏,消费者为了无碳能源的固定供应而竞争。通过减少高排放发电机(如煤电厂)的能源生产或帮助电网过渡到提供更多无碳能源,负荷转移可以带来真正的变化。
在考虑负荷转移的影响时,理解平均碳强度和边际碳强度之间的区别很重要。给定时间点的平均碳强度是总排放量与为满足当时需求而调度的能源总功率之比。边际碳强度是基于边际发电厂提供的容量来满足下一个单位的需求。地区平衡机构按照成本递增的顺序调度工厂,市场清算价格基于边际工厂的成本。因为风能和太阳能没有燃料成本,所以它们的投标价格通常很低,而且这些能源会被优先调度。因此,边际排放量通常介于燃气发电厂和燃煤发电厂之间[5]。
如果实时转移负载是可能的,例如通过物联网设备,那么跟随低边际碳强度可以是一种当天需求响应策略,可以通过将负载从具有高排放边际工厂(通常是燃煤发电机)的时间和地点转移到具有低排放边际工厂(如燃气发电机)的时间和地点来减少碳排放。然而,在大多数大规模操作中,很可能至少需要一些提前一天的计划来大规模转移负载。优化前一天的负荷以遵循低平均碳强度有助于电网向更高份额的无碳能源过渡。它将需求转移到无碳资源预计最具生产力的时间和地点(阳光普照或刮风的时间和地点)。当负荷遵循低平均碳强度时,额外的需求可以在无碳能源份额较高的时段和地区推动较高的市场清算价格。这反过来允许投资者从现有的无碳资产中获得更好的回报,并鼓励更多新的无碳能源投资和更高的无碳能源在电网中的渗透率,否则将是不经济的。
数据科学家在运营碳管理中的角色
虽然碳强度的可预测变化创造了减少碳排放的机会,但这并不意味着利用它总是经济的,甚至是可行的。采取行动需要组织经历几个步骤,而数据科学家在每个步骤中都处于推动组织变革的有利位置:
- 制作业务案例:确定行动并估计成本和收益
- 在可行的水平上测量碳足迹
- 优化运营中的碳
制作商业案例
在对碳排放影响最大的时间和地点上,找到你的经营灵活性的来源。一个好的第一步是粗略清点你公司的碳足迹,以了解最大的排放源在哪里。温室气体协议建立了碳会计和报告的国际标准,在他们的公司会计标准中使用了三类排放:
- 范围 1:公司拥有或控制的来源的直接排放,例如,拥有或控制的工艺设备燃烧产生的排放;
- 范围 2:公司消耗的购买电力产生的排放;
- 范围 3:间接排放是公司活动的结果,但来源不是公司拥有或控制的;例如,外购材料的提取和生产,外购燃料的运输,出售产品和服务的使用。
如果用电产生的排放(范围 2 排放)在您或您的供应商的碳足迹中占很大一部分,那么在您的工厂或一天中的几个小时的运营中是否有短期的、提前一天的灵活性,您还没有充分利用?从长远来看,对于新的厂址,是否有其他可能实现盈亏平衡但碳足迹截然不同的替代厂址?
碳应该与其他成本和商业目标一起优化。针对碳排放进行优化是否也会降低其他成本,或者在权衡碳排放与增加其他成本或客户服务目标时,您是否会面临阻力?在试图应对逆风之前,先寻找顺风的机会。灵活性在运营中创造价值,在追求减少碳排放的过程中,您可能会发现您正在发展运营灵活性,这也可以降低其他成本。您能否从运营高峰转移负载,将负载从高峰时间转移到非高峰时间,或者在不同时经历高峰负载的站点之间转移负载?如果你能及时或跨站点转移一些运营负载,你就能降低成本和碳排放。例如,在谷歌,开发提前一天在时间或空间上转移我们的计算负载的能力减少了我们的碳足迹,但也使我们能够平滑每个地点一天中的峰值计算和电力使用。这反过来使我们能够构建更少的数据中心和服务器容量,从而降低我们的成本。此外,公用事业公司可以提供需求响应激励,以支付其客户将负荷从高峰使用时间转移,这通常需要最大份额的化石燃料(并且由于气体或煤炭燃料的投入成本,供应的边际成本更高)。
测量可行水平的碳含量
一旦有了业务案例,并考虑到运营灵活性的具体来源,数据科学家就可以在构建所需数据集方面发挥作用,这些数据集是以最佳方式运用这种灵活性所必需的。首先,电网碳强度的外部数据需要达到必要的粒度,以支持优化,这可能意味着每个运行区域的每小时碳强度。第三方提供商如明天和瓦特时间估计世界各地的实时碳强度,并提供 API 以提供至少提前 24 小时的预测,至少每小时更新一次。
有了每个运营区域的碳强度数据,数据科学家可以构建模型来估计碳足迹作为特定公司运营的一个函数如何扩展。例如,在我们的数据中心应用中,我们需要构建模型来估算功耗,作为计算和存储资源消耗的一个函数,我们需要在一个相当精细的级别上这样做,以便我们可以将碳足迹与特定的产品使用联系起来。这些模型还可用于估算运营产品的碳足迹,以帮助公司客户优化碳足迹。
优化运营中的碳排放
*有了确定的机会和手头的必要数据,数据科学家可以构建决策支持系统来优化碳和其他成本。*建立在时间和空间上转移运营的能力不仅可以降低碳排放,而且如果它能够使运营以更少的容量或更低的能源成本运行,还可能产生传统财务意义上的高投资回报率。一个决策支持系统需要在一个精细的、逐小时的水平上考虑权衡。在 Google,我们在未来一天的负载转移模型中使用碳价格,以便我们可以通过考虑所有成本类型的单一统一目标函数来优化我们的运营灵活性:能源、碳、容量以及与实现时间或空间灵活性相关的任何其他成本(如数据中心工作负载的空间灵活性情况下的网络成本)。对于碳成本,我们使用美元/吨的碳价格,该价格与经济学家估计的避免 1.5–2 摄氏度以上变暖所需的价格一致。( 2015 年巴黎协定第二条提出了“将全球平均气温增幅控制在比工业化前水平高出 2 摄氏度以下,并努力将气温增幅限制在比工业化前水平高出 1.5 摄氏度以内”的目标)根据 2018 年的论文1.5 摄氏度气候变化的经济学【6】,避免 1.5 摄氏度和 2 摄氏度变暖所需的 2020 年碳价格的中值估计分别为每公吨 105 美元和 35 美元。工业界不需要等待政府颁布碳税来采取行动。我们可以在优化运营的模型中嵌入碳价格,这样做的同时,我们还可以在负载转移能力上提供高 ROI,从而降低碳成本和其他运营成本。这不是一个零和游戏:我们已经能够通过在目标函数中包括碳和其他成本来实现这两种利益。大多数情况下,碳排放和商业成本目标并不冲突,但我们的框架允许在目标竞争的几个小时或几天内进行经济权衡。
举例:我们如何将碳智能计算技术融入谷歌的数据中心
以谷歌为例,其碳足迹的很大一部分来自其数据中心消耗的电力。谷歌的 24x7 无碳能源战略是在一年中的每一天、每一小时在每个数据中心消耗无碳电力。仅靠转移负荷是无法做到这一点的,但这是重要的一步。安娜·拉多万诺维奇是我们碳智能计算项目的创始人,也是我们运营数据科学团队的能源技术负责人,她在博客碳智能计算中写了谷歌在计算负载转移方面的工作。简而言之:我们的一些计算负载,如 ML 培训或 Youtube 视频处理作业,是延迟容忍的,这意味着我们可以将它们延迟几个小时,而不会对我们产品的最终用户产生任何影响。此外,一些负载具有空间灵活性,这意味着我们可以灵活地在校园内的任何计算机集群中运行它们,在某些情况下甚至可以在世界各地的不同校园中运行它们。一些集群比其他集群拥有更新、更节能的计算机,正如我们在图 2 中看到的,一些站点的碳强度比其他站点低得多。这种在时间和空间上的负载转移是根据我们运营数据中心的每个区域的电网每小时碳强度预测提前一天计划的,是我们发现的利用碳强度可预测变化的灵活性选项。虽然我们最初的动机是减少碳排放,但我们发现负载转移功能有很大的潜力,可以通过消除负载峰值来降低计算和数据中心容量的成本。
Ana 和她的合作者计划在未来发布更多的技术细节和对碳智能计算的影响结果。我想在这里分享的更多的是这项工作是如何开始和向前发展的,希望能激励其他数据科学家采取行动。
全日空没有等待新的绿色指令或新项目提案的管理指示。这开始是一个 20%的项目,是谷歌 20%项目的真正精神。安娜和一位合作伙伴研究工程师兼能源专家罗斯·康宁斯坦有了一个想法,也有了改变现状的共同热情,他们开始花时间研究这个想法。然后,他们确定执行发起人,并征求他们的意见和支持。这种早期支持和投入对于验证管理层是否愿意考虑根本不同的方法来安排我们的工作负载,以及支持试点工作来证明这些方法是可行的,而不会带来额外的运营风险至关重要。Ana 和 Ross 招募了其他 20%时间的志愿者,他们带来了关键的工程和主题专业知识来开发和试验生产规模系统。负载转移的想法对谷歌来说并不新鲜,但新奇的是,它从未在减少碳足迹的背景下出现过。这一愿景迅速建立了广泛的盟友基础,并帮助一个由高度积极的志愿者组成的小团队克服了阻碍早期负载转移工作的挑战。它们实用而有条理,对作业调度的现有工程基础设施做了最小的改动。他们尽可能建立在现有系统和计划的基础上,而不是与之竞争。
我们的执行赞助商批准推出时移功能,现在它已在全球部署。随着计划和商业价值的确立,团队不断壮大,现在正在解决大规模空间负载转移、更高的运营效率以及更全面的碳核算系统的开发问题。从概念到开发再到实施,这是一个由一小群人的分析领导和远见推动想法前进的项目。
不要等着被要求,也不要等着被允许。快走吧。没有时间可以浪费了。
致谢
感谢安娜·拉多万诺维奇、罗斯·康宁斯坦和谷歌的碳智能计算团队帮助我们展示了什么是可能的。还要特别感谢团队成员 Ian Schneider 对碳强度数据分析的帮助,以及在谷歌开发我们的碳核算数据管道。
参考文献
[1] D. Rolnick 等人,用机器学习应对气候变化 (2019),arXiv:1906.05433
[2]j·德·查伦达尔、j·塔加特和 s·本森,追踪美国电力系统的排放 (2019),美国国家科学院院刊
[3]《2020 年世界能源投资》 (2020 年),国际能源署,巴黎
[4] E. Grubert,化石电力退休的最后期限为一个公正的过渡 (2020),科学
[5] D. Callaway、M. Fowlie 和 G. McCormick,《位置、位置、位置:可再生能源的可变价值和需求方效率》 (2018),环境与资源经济学家协会杂志
[6] S. Dietz、A. Bowen、B. Doda、A. Gambhir 和 R. Warren,1.5 摄氏度气候变化的经济学 (2018),《环境与资源年度评论》
数据科学家如何着手解决人类的实际问题
不要只预测数字
让那个从未使用 MNIST 数据集预测数字的人来投第一块石头吧。
—世界上每一位数据科学家
大家都知道,我们都用 MNIST 预测数字。有时,当论文坚持在 MNIST 数据集上测试新想法时,我们仍然会这样做。
学习使用 MNIST 数据集是 而不是 这里的实际问题。
事情是这样的,最终,经过大量的研究,我们最终得到了一份真正的工作,从事现实世界的数据科学,希望能够解决更有趣的问题。
但是,当第一个真正的大问题最终到来时,我们会预测点击量、销售额,或者测试黄色的是否比蓝色的更适合那个左下角的按钮。**
当然,我有点夸张了。有许多公司正在解决更重要的问题。
但我在这里的观点是,我们经常忽视许多对人类来说最重要的问题。
只有极少数数据科学团队正在解决预防疾病、向有需要的人分发食物或研究人类思维以避免精神崩溃等问题。
上面的例子是我们人类面临的真正问题。这些问题如果得到解决,可以极大地改善我们的生活,真正让世界变得更加美好。
不幸的是,预测数字或者将猫和狗的图像分开没有有同样的影响。
不同的视角
想象一下,如果我们没有一个大的 MNIST 数据集,而是有一个包含来自世界各地的新冠肺炎患者症状的大数据集,还有:
- ****人口统计信息(如年龄、性别、种族);
- ****地理数据(例如,城市、州、国家);
- ****血液检测结果;
- ****肺部扫描图像;
- 每日温度结果;
- 每日氧气水平。
我相信你能看到这样一个数据集中的巨大价值。
我在这里用新冠肺炎只是作为一个一般的例子。还有许多其他健康问题,有更长的数据线索,甚至有更大的潜力拯救数百万人的生命——如癌症、抑郁症和糖尿病。
你可能同意我的观点,许多数据科学家都愿意在这些问题上工作。
那么,是什么阻止了我们这样做呢?
问题是:我们没有这种数据集。
当我们考虑健康数据时,许多医院肯定至少有大量非常有用的数据。
但是你可能知道,他们不会公开分享这些信息。所以主要问题应该是:
是什么阻止了医院、研究机构和公司共享个人数据?
毫不奇怪,答案很简单:这里的潜在原因是隐私**。**
许多机构有法律义务**,阻止他们公开分享敏感数据。**
他们中的一些人可能还想保持竞争优势,因为他们可能是唯一拥有大量特定类型数据的人。
另一方面,很容易看出,锁定数据阻碍了重要的研究。
因此,我们无法进行探索性分析,而且我们没有也没有合适的数据来为人类最紧迫的问题训练机器学习模型。
尽管如此,我知道现在你们大多数人可能在想:
“我们不能简单地公布我们所有的个人数据。大家也很在意隐私。人们不希望自己的敏感信息被披露。”
是的,你是对的,但并不是一切都没了。
那么我们能做什么呢?
过去的失败告诉我们,匿名化在实践中往往不太奏效。
网飞和美国在线是两家分享所谓的**“匿名化”数据的公司,后来遭遇用户重新识别。**
幸运的是,2006 年【DP】被创造出来。DP 是一个框架,已经成为隐私保护的黄金标准,并被学术界和工业界广泛采用。
如果分析师使用 DP 算法处理数据集,那么这意味着能够访问输出结果的对手或攻击者不能对数据集中出现的任何特定个人的贡献做出高度可信的陈述。
换句话说,如果使用的数据集中有任何一个人是或者不是**,那么 DP 输出应该与大致相同。**
这就像个人贡献被隐藏**,同时仍然给出整个数据集的总体有用结果。**
DP 的一个巨大优势是为个人提供的隐私保护是完全可量化的,并且独立于对手先前可能拥有的关于数据集的知识。
差异隐私到底有什么帮助?
我将带你看两个例子。
1。中央模型
假设我们想收集来自个人的新冠肺炎数据,并发布关于该病毒对不同个人概况的影响的一般见解。
对于这个例子,我们还考虑到医院可能会选择一个“可信的”中心医院。在这种模式下,敏感数据首先集中在一个中心位置。然后,可信管理人使用差分私有算法进行分析,并发布结果。
在“中央模型”上使用差分隐私。它需要一个值得信任的馆长。图片由作者提供。
差分隐私(DP)为我们提供了正式的保证,通过使用 DP 计算的结果,对手无法非常确定地告诉我们任何个人是否在用于生成该结果的数据集中。
因此,差分隐私基本上为数据集中的用户提供了"似是而非的可否认性,即用户可以否认他们在用于生成结果的数据集中,因为他们的存在无法从输出中得到保证。
2.本地模型
然而,在某些情况下,可能很难选择一个可信方来收集所有数据。
考虑到这一点,使用LocalDifferential Privacy(LDP),每个医院可以在共享任何数据之前,在本地添加隐私保证。
这是如何工作的:
- 每个医院将在本地计算一些结果**,仅使用他们自己的数据,使用 LDP 方法。**
- 例如,他们可以通过添加一些精心设计的随机噪声来做到这一点。
- 之后,医院可以安全地公开分享吵闹的结果。
- 有了来自所有医院的嘈杂的结果,任何人都可以汇总这些输出来得到一个更精确的最终结果。
在“本地模型”上使用差分隐私。数据在共享前被随机化。图片由作者提供。
这也适用于机器学习**。例如,在应用 LDP 技术后,每个医院可以在本地训练一个模型并且共享模型更新。这与联邦学习的概念密切相关。**
我们可以想出每个人都可以单独提供帮助的方法。例如,我们每个人都可以在使用 LDP 算法后共享一些数据。通过这种方式,如果人们也能单独分享(不仅仅是通过医院),新冠肺炎的数据集也能被聚合起来。
这什么时候才能成为现实?
公司和政府已经开始使用差别隐私了!例子包括:
希望不久之后,更多的数据科学家能够从关键和重要的数据集中收集见解。尤其是那些真正有助于解决人类最紧迫问题的项目。
如果你喜欢阅读这样的故事,并想支持我成为一名作家,可以考虑注册成为一名媒体会员。每月 5 美元,你可以无限制地阅读媒体上的故事。如果你用我的链接注册,我会赚一点佣金。
数据科学家如何应对未知
2022 年即将到来,但我们大多数人在过去几年中不得不应对的不确定性仍然存在(看起来可能会持续更长时间)。虽然我们对你可能面临的许多未知问题无能为力,但其中有一些是我们力所能及的。
本周,我们将注意力转向(模型)漂移和(职业)转换——这两个话题是数据科学家永远不会厌倦讨论的,而且在这个变革时期感觉特别及时。
- 分析模型漂移的最佳指标有哪些? 当模型在生产中运行时,数据会发生变化,输入/输出动态会发生变化,性能通常会恶化。Piotr (Peter) Mardziel 在他最近的文章中深入探讨了这个问题,并展示了解决方案如何根据环境和模型的特征而有很大的不同——这就是为什么拥有一个广泛的度量标准来查看您的模型是如此重要。
- 你发现你的数据在漂移。现在怎么办?一旦你确定了模型中数据漂移的症状,你就需要一个计划。幸运的是, Elena Samuylova 的路线图在这里扭转了局面:它详细、实用、易懂,并且从足够远的距离来处理这个问题,适用于许多现实世界的场景。
漂移模型是一回事。你漂流?很明显,这是一个更大的问题。如果你正在考虑换一份职业,感觉停滞不前,或者只是从最近在职业生涯中取得进展的人那里寻找灵感,这里有三个你不应该错过的帖子。
- 一位全新的数据科学家分享了迄今为止从 旅程中获得的关键收获。如果你正在考虑转向数据科学, Amanda West 最近已经完成了六个月的里程碑,并慷慨地分享了一些关于作为一名新晋数据科学家的生活的见解(技术和非技术),从硬件的重要性到解决坏习惯的需要。
- 了解跳槽的挑战和奖励 。对于拥有通信专业学术背景的 Danny Kim 来说,向数据科学的飞跃令人生畏;这让他怀疑在这个领域里是否还有像他这样的人的位置。他的有益帖子关注了受过社会科学培训的人面临的障碍,以及以不同的技能和知识基础进入数据科学的好处。
- 从内部数据科学家跳到分析顾问值得吗? 在 Slalom 做了一年的助理顾问后, Shravankumar Hiregoudar 对顾问这个角色的优点(当然,也有缺点)有了很好的认识,他耐心地详细描述了这一点。如果这是你一直在考虑的一个转变,你会想看看他的概述。
想在你的清单上再增加一些阅读吗?我们希望如此,因为我们最近的文章几乎接近年底,非常精彩,涵盖了很多领域。以下是一些亮点:
- 瓦莱丽·凯里探讨了诚信这个永远重要的话题,以及数据科学家应该如何处理自己的错误。
- 你应该在多大程度上坚持自己的信念?这是一个超越我们日常琐事的重大而关键的问题,而维谢什·克马尼博士带着好奇心和冷静的头脑很好地解决了这个问题。
- 如果你喜欢好看的情节,请举手!或者更好的是:点击阅读阿鲁纳·皮沙罗蒂的便捷指南,用 LaTeX 创作清晰、易于出版的情节。
- 渴望一些前沿研究?查看 Leonardo Tanzi 基于他的主要博士研究的引人入胜的文章,该研究侧重于使用视觉变压器对股骨骨折进行分类。
无论你在哪里,我们都希望你安全、放松,并准备好在几周内与 2021 年说再见。我们非常感谢您与我们共度的时光,以及您对我们作者工作的支持。
直到下一个变量,
TDS 编辑器
数据团队如何更好地满足截止日期
我们现在正处于回归的季节——无论是新学年,新工作,还是从夏季的缓慢节奏中回归(至少对我们这些生活在北半球的人来说)。这可能是一段紧张忙碌的时间,但也是培养新技能和思考新想法的时期。我们希望你是后者;我们在这里帮助一些优秀的阅读,从高度理论性的到明确的实践。现在是九月!我们走吧。
- 在一份新的技术工作中,遵循一个屡试不爽的成功蓝图。无论你是一名数据科学家、机器学习工程师,还是日常工作中与代码打交道的人,你都不想错过 Archy de Berker 为你在新角色中的第一个月打下基础的文章。它涵盖了广泛的领域——从设置到部署,再到代码审查——所以在入职培训完成后,您很可能会将它作为一种资源重新使用。
- 学习如何从务实、实用的角度对待公平的理念 。最近几个月,我们看到了许多关于机器学习和人工智能背景下公平意义的生动对话,但这个概念往往保持抽象和无定形。Divya Gopinath 的帖子是一个新的邀请,邀请大家加入这些讨论,着眼于可测量的、真实世界的用例。
Alexander Schimmeck 在 Unsplash 上拍摄的照片
- **发现令人兴奋的项目数据科学家们在非营利领域打头阵 **。我们经常听说科学家在学术界和工业界创造的前沿工作数据。正如 Madeline Lisaius 最近与 Elliot Gunn 的谈话所表明的那样,在非营利组织工作——如洛克菲勒基金会,Madeline 是该基金会的首席数据科学家——提供了许多关注关键社会影响和可持续发展问题的机会。
- 跟上最新深度学习研究 。新的一个月只能意味着一件事:罗伯特·兰格精心挑选的学术论文推荐的新版本。九月的阵容涵盖了热门话题,包括 AutoML,视觉变压器(ViT),以及费希尔信息矩阵和推广之间的关系。
- 探索一种有前途的替代人工标注训练数据的方法 。我们非常高兴地欢迎雨果·鲍恩-安德森的回归,尤其是当他的最新帖子是一个令人信服的、亲自动手的深度探讨,展示了“关于人类如何与机器合作来标记训练数据和建立机器学习模型的原则证明”
- 按时交付项目,改善团队的业绩记录。作为一名七年的数据工程师, Christophe Blefari 亲眼目睹了迫使数据团队错过项目期限的诸多因素。他在这篇文章中致力于诊断问题——并提供潜在的补救措施,从更有效的优先化到雇佣具有不同技能的团队。
随着我们进入新的赛季,我们希望你能顺利过渡到接下来的比赛。一如既往地感谢对我们作者工作的支持。
直到下一个变量,
TDS 编辑器
我们策划主题的最新内容:
入门
实践教程
- 带火焰+光线调优的快速 AutoML作者迈克尔·加拉尼克(和合著者)
- 解释我是如何在以数据为中心的新竞赛中名列前茅的作者 Pierre-Louis Bescond
- 平行坐标由Dario Weitz用 plottly绘制
深潜
思想和理论
数据主义是如何彻底改变个人观念的
大数据的关键力量
来自 Pexels 的 ThisIsEngineering 摄影
在地球上,数十亿年来,我们一直在努力使用工具。我们必须考虑如何使用它们,然后如何与它们交流。我们的工作没有达到我们希望和可能达到的效率。现在我们正在尝试设计可以取代工具的智能机器,成为我们的一部分,与我们一起工作,甚至帮助我们不假思索地做出选择。人类历史的一部分即将彻底改变。欢迎来到数据主义的时代。
我出生于 1999 年,是第一批成为智能手机和社交媒体试验品的年轻人之一。当我们在学校时,我们很快开始对过去的模拟世界失去欣赏力。屏幕和连接接管了。我们生病了。我在成长过程中被教导的所有东西——避免虚荣、追求谦逊、善良和有同理心等等。—与社交媒体鼓励我们做的事情不一致。
那是我的第一面“黄旗”。如果当时我更聪明、更明智,我可能会停下来,但我被技术迷住了。
那时候我们相对来说是无辜的。毕竟,我们还没有容易获得的人工智能。我们只是努力在社交媒体上过最好的生活,给我们的朋友留下深刻印象,并向世界宣传我们的故事和成就。
但是后来,有几个服务赢得了大家的关注,开始应用 AI。机器给型号为的吊钩注射了类固醇。他们比我们自己更了解我们,并成功地侵入我们的大脑,使我们沉迷于滚动/点击/滑动,以便我们可以观看和点击广告。
这只是开始。
改变决策的大数据革命
技术收集和编辑信息的能力比以往任何时候都要先进。因此,技术正在创造一种不那么个人化的新文化。
如果我们公开所有数据,从监控我们生物特征的可穿戴设备到监控我们位置、社交媒体活动甚至互联网搜索历史的智能手机,会发生什么?这种对我们生活的洞察会给公司和政客提供更大的权力来侵犯我们的隐私,并通过利用我们的心理特征来操纵我们吗?一种被称为数据主义的新兴哲学并不这么认为。事实上,这种趋势意识形态认为解放数据流是宇宙的最高价值,也是开启人类历史上最伟大的科学革命的关键。
什么是数据主义?大卫·布鲁克斯在 2013 年《纽约时报》的文章《数据的哲学》中首次提到,数据主义是一种伦理体系,著名历史学家尤瓦尔·诺亚·哈拉里(Yuval Noah Harari)对此进行了大量的探索和推广。在他 2016 年的著作《德乌斯人》中,哈拉里将数据主义描述为一种新形式的宗教,庆祝大数据日益增长的重要性。其核心信念围绕着这样一个理念,即宇宙给予对数据处理贡献最大、效率最高的系统、个人和社会更大的价值和支持
数据主义意味着所有数据都是公开的,甚至是个人数据,以使系统作为一个整体工作,这是一个今天已经显示出阻力的因素。从浏览历史到购物模式,从追踪 GPS 定位服务到研究你的基因信息到预测你的生理未来和寿命。还有很多很多。
本质上,数据主义将通过感知和收集难以想象的个人、私人和公共信息来影响你的世界观,为你带来一种高度定制的现实感。由机器对机器通信(得益于物联网的兴起)驱动的强大软件网络将越来越多地收集关于我们、我们的环境、我们的世界的复杂、精密的数据点,甚至达到我们自己无法想象、当然也无法理解的程度。
当所有这些不可逾越的数据被输入机器学习软件和人工智能时,将帮助我们获得对我们个人和集体生活几乎每个方面的深刻见解。这种情绪是数据主义的核心,它将为我们提供一个全新的观点,一个更具逻辑性和分析性的关于未来如何(或者应该如何)做出决策的哲学论证。根据其早期的支持者——他们是硅谷的高管和技术先知——数据主义认为宇宙只不过是从一种形式到另一种形式的数据流(很像能量守恒定律),有机体只不过是以血肉形式表现的生化算法
任何一个有着好奇热情的人都将拥有全世界的数据,让我们每一个人都能成为启发我们的任何学科的专家。然后,我们可以将专业知识分享到数据流中——这是一个积极的反馈循环,引领着整个人类知识的进步。这样的指数增长代表了一个数据主义乌托邦。不幸的是,我们当前的激励和经济也向我们展示了这种模式的悲剧性失败。正如哈拉里指出的,数据主义的兴起意味着“人文主义正面临生存挑战,自由意志的理念正受到威胁。”数据是地球上最有价值的资源,甚至比石油更有价值。也许这是因为数据是“无价的”:它代表理解,而理解代表控制
数据主义世界观对政治家、商人和普通消费者非常有吸引力,因为它提供了突破性的技术和巨大的新力量。
尽管担心失去我们的隐私和自由选择,但当消费者必须在保护隐私和获得更好的医疗保健之间做出选择时,大多数人会选择健康。
对于学者和知识分子来说,数据主义有望提供一个我们几个世纪以来都没有得到的科学圣杯:一个统一了从音乐学到经济学,一直到生物学的所有科学学科的单一支配性理论。
根据数据主义,贝多芬的第五交响曲、股票交易泡沫和流感病毒只是三种模式的数据流,可以使用相同的基本概念和工具进行分析。这个想法极具吸引力。它为所有科学家提供了一种共同的语言,在学术分歧上架起了桥梁,并轻松地跨越学科边界输出见解。当然,像以前的包罗万象的教条一样,数据主义也可能是建立在对生活的误解上。特别是数据主义对于臭名昭著的“意识难题”没有答案。
目前,我们离用数据处理来解释意识还很远。为什么当大脑中数十亿个神经元向彼此发出特定信号时,会出现爱、恐惧或愤怒的主观感觉?我们毫无头绪。但是即使数据主义关于生活是错误的,它仍然可能征服世界。
事实上,我们所有的言语和行为都是包裹着这个世界的伟大数据流的一部分,只有当个体经历与这个数据流相连时,数据算法才会发现它们的意义并指导我们。数据无处不在,没有数据就无法掌握原力。有了它,我们变得强大,不可战胜;没有它,我们将不堪一击,必将衰落。通过机器学习的奇迹和人工智能的突破,未来数据将支配我们的生活,这不同于我们已知的任何其他神圣的教义或人造的宗教。我们将不再研究占星术、占星符号、咨询圣书和圣人,如果数据主义有它自己的方式——它会的。我们将在一种不同的准则下生活,一种不那么宽容、没有感情、没有个人偏见的准则。一种更具分析性的生活,决策完全基于冰冷的硬数据。
最后,我想留给我的读者一个问题。如果人类确实是一个单一的数据处理系统,它的输出是什么?数据主义者会说,它的成果将是创造一个新的甚至更有效的数据处理系统,称为万物互联。一旦这个任务完成,智人将会消失。数据主义既不是自由主义,也不是人文主义。然而,应该强调的是,数据主义并不是反人道主义的。它与人类的经验没有任何冲突。它只是不认为它们有内在价值。像资本主义一样,数据主义也是作为一种中立的科学理论开始的,但现在正变异成一种声称决定对错的宗教。
数据主义,人类经验不是神圣的,智人不是创造的顶点,也不是未来德乌斯人的先驱。人类仅仅是创造万物互联的工具,最终可能从地球蔓延到整个银河系,甚至整个宇宙。也许在你有生之年,你的狗可能会有一个自己的脸书或推特账户——也许有比你更多的喜欢和追随者。
感谢阅读!
如果你喜欢这篇文章,请随意查看https://seekingwithin.substack.com/****——每周一期的时事通讯,涵盖了广泛的话题,探讨了这样一个信念:我们寻求的大多数答案就在我们自己身上。
想和我交流吗?通过电子邮件、 LinkedIn 或 Twitter 给我发消息!
你的爱有多深?或者,如何选择你的第一个深度学习项目
在你最近学习的新领域开始一个副业可能会相当令人生畏。从哪里开始?如何在自己感兴趣的题目中找到已经做过的内容?如何为你的项目寻找和选择一个合理的目标?当我们开始致力于我们的深度学习项目时,我们对这些问题都没有答案。我们就是这样找到他们的。
从哪里开始?
由于我们都参加了深度学习课程,并熟悉神经网络的基本概念,我们知道我们最感兴趣的技术挑战是建立 GAN(生成对抗网络)。很快我们也意识到我们都对艺术相关的项目感到兴奋。我们决定选择一个结合两者的文件,理解它的架构,然后从头开始实现它。话虽如此,有公开代码的论文更好。
我们知道我们在寻找类似于神经风格转移的东西,在这种情况下,你拍摄两张图像,A 和 B,然后以 B 的艺术风格创建第三张内容为 A“绘画”的图像。当我们在网上搜索它时,我们遇到了艺术风格的神经算法和 Raymond Yuan 的这篇伟大的博文:神经风格转移:使用 tf.keras 和热切的执行来创建深度学习的艺术。
这对我们来说是一个很好的起点,因为它展示了我们所寻找的艺术功能,然而,这不是 GAN 架构,而是在 2015 年发布的。
一张照片的内容(A)结合几幅知名艺术品的风格(b-f)来自一种艺术风格的神经算法,arXiv:1508.06576
外面还有什么?
随着我们对这个主题的进一步探索,我们发现风格转换只是图像到图像翻译的一种类型。如“图像到图像转换:方法和应用”中所定义的,“图像到图像转换的目标是将输入图像从源域 A 转换到目标域 B,同时保留固有的源内容并转换外部的目标风格。”为了实现这个目标,我们需要训练一个映射 G,它将从 A 中获取一个输入源图像,并在目标域 B 中生成一个图像,从而使得结果图像与其他目标域图像无法区分。
在图像到图像转换:方法和应用,arXiv:2101.08629 中提出的图像到图像转换的数学建模
在使用 GANs 执行图像到图像的翻译领域,一个值得注意的工作是使用条件对抗网络的图像到图像的翻译(又名 pix2pix)。这篇文章演示了许多类型的图像到图像的转换,包括从标签图合成照片,从边缘图重建对象,以及给图像着色(从黑白到全色)。
使用条件对抗网络从图像到图像翻译的结果图像 (pix2pix),arXiv:1611.07004
第二个值得注意的作品是使用循环一致对抗网络的不成对图像到图像翻译(又名 CycleGAN),它将照片的图像到图像翻译成著名艺术家如莫奈、梵高、塞尚等人的艺术作品。此外,CycleGAN 出色地介绍了图像中特定对象的翻译,例如将马转换为斑马或将苹果转换为橙子。
使用循环一致的对抗网络 (CycleGAN),从不成对的图像到图像翻译得到的结果图像,arXiv: 1703.10593
怎么搜?怎么挑?
接下来,我们搜索了引用 pix2pix 和 CycleGAN 的文章。然而,这种方法产生了太多的结果。我们在寻找一种快速回顾最新作品的方法,我们发现 Károly Zsolnai-Fehér 的 youtube 频道 Two Minute Papers 在这个过程中非常有效。
我们浏览了几十篇似乎与艺术领域相关的论文,并把它们缩小到大约 20 篇。在我们为该项目考虑的作品中,有 Nvidia 的 paint 、基于 AI 的运动传输,以及这个神经网络恢复旧视频。然而,我们都被 GANILLA 所吸引,它在应用艺术风格的同时保留了原始图像内容,表现出了令人印象深刻的效果。最后,甘尼拉被选中了。
结论
我们从这个搜索过程中学到了很多。我们最终找到了我们正在寻找的东西,即使在这个过程的开始,我们没有术语来定义它到底是什么。我们还了解了以前和现在将 GAN 用于各种目的的工作。现在我们手中有了一份获奖论文,实际工作开始了。在这篇博客文章中,我们回顾了 GANILLA 的架构,并让你感受一下我们实现它的结果。
深度学习如何解决高能物理中的问题
利用高能碰撞的数据来探测新粒子
尤利娅·布查茨卡娅在 Unsplash 上的照片
今天仍在研究和发展的物理学的一个有趣分支是对亚原子粒子的研究。世界各地粒子物理实验室的科学家将使用粒子加速器高速撞击粒子,以寻找新的粒子。寻找新粒子包括从背景过程中识别感兴趣的事件(信号过程)。
在 UCI 机器学习库中公开的 HEPMASS 数据集,包含了来自 1050 万次粒子碰撞的蒙特卡罗模拟的数据。该数据集包含带有 27 个归一化特征的标记样本和每个粒子碰撞的质量特征。你可以在论文高能物理的参数化机器学习中读到更多关于这个数据集的内容。
在这篇文章中,我将演示如何使用 HEPMASS 数据集来训练一个深度学习模型,该模型可以区分产生粒子的碰撞和背景过程。
粒子物理学简介
粒子物理学是对构成物质和辐射的微小粒子的研究。这个领域通常被称为高能物理学,因为寻找新粒子涉及使用粒子加速器以高能级碰撞粒子,并分析这些碰撞的副产品。世界上有几个粒子加速器和粒子物理实验室。由欧洲核研究组织(CERN)建造的大型强子对撞机(LHC)是世界上最大的粒子加速器。LHC 位于法国和瑞士边境附近的一个地下隧道中,有一个 27 公里长的超导磁体环。
想象一下,在像 LHC 这样的粒子加速器中进行数百万次粒子碰撞,然后试图从这些实验中理解数据。这就是深度学习可以帮助我们的地方。
导入库
在下面的代码中,我简单地导入了一些用于数据操作、分析和可视化的基本 Python 库。请参考这个 GitHub 库来找到本文中使用的完整代码。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline
读取数据
HEPMASS 数据集带有单独的训练和测试集。为了使模型评估过程不偏不倚,我决定先读取训练集,在训练和验证我的模型之前不动测试集。
train = pd.read_csv('all_train.csv.gz')
在这个数据帧上调用 Pandas info 函数会为每一列生成以下摘要。
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7000000 entries, 0 to 6999999
Data columns (total 29 columns):
# Column Dtype
--- ------ -----
0 # label float64
1 f0 float64
2 f1 float64
3 f2 float64
4 f3 float64
5 f4 float64
6 f5 float64
7 f6 float64
8 f7 float64
9 f8 float64
10 f9 float64
11 f10 float64
12 f11 float64
13 f12 float64
14 f13 float64
15 f14 float64
16 f15 float64
17 f16 float64
18 f17 float64
19 f18 float64
20 f19 float64
21 f20 float64
22 f21 float64
23 f22 float64
24 f23 float64
25 f24 float64
26 f25 float64
27 f26 float64
28 mass float64
dtypes: float64(29)
memory usage: 1.5 GB
数据集中的第一列对应于指示碰撞是否产生粒子的类标签。预测这个标签基本上是一个二元分类任务。
探索性数据分析
现在我们有了数据,我们可以使用 seaborn 来创建一些可视化并更好地理解它。
可视化类别分布
我们可以使用 Seaborn 的 countplot 函数来看看类的分布,如下所示。
sns.countplot(train['# label'])
分类标签的分发。
根据上面的图,我们可以看到这些类是均匀分布的,350 万个样本对应于背景过程,另外 350 万个样本对应于产生粒子的信号过程。注意,标号 1 对应于信号处理,而标号 0 对应于背景处理。
可视化不同特征的分布
我们还可以可视化从每个模拟碰撞中提取的特征的分布,如下面的代码所示。
cols = 4
fig, axes = plt.subplots(ncols=cols, nrows=3, sharey=False, figsize=(15,15))for i in range(12):
feature = 'f{}'.format(i)
col = i % cols
row = i // cols
sns.distplot(train[feature], ax=axes[row][col])
前 12 个特征的分布。
上面的几个特征倾向于遵循相似的概率分布。许多特征似乎遵循近似正态分布,稍微向左或向右倾斜,而其他特征(如 f2、f4 和 f5)大致遵循均匀分布。
数据预处理
缩放质量
与缩放特征不同,质量特征没有被归一化或缩放,因此我们应该缩放它,以便使深度学习模型更容易使用它。
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
train['mass'] = scaler.fit_transform(train['mass'].values.reshape(-1, 1))
培训和验证分离
在下面的代码中,我使用了 Scikit-learn 的经典 train_test_split 函数将数据分成训练集和验证集。根据代码,70%的数据用于训练,剩下的 30%用于验证。
from sklearn.model_selection import train_test_splitX = train.drop(['# label'], axis=1)
y = train['# label']X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.3, random_state=42)
训练深度学习模型
现在我们终于准备好训练深度学习模型来识别产生粒子的碰撞。在这一部分,我遵循了创建最佳深度学习模型的三个步骤:
- 定义了网络的基本架构和超参数。
- 调整了网络的超参数。
- 用表现最好的超参数重新训练模型。
我使用验证数据来测量具有不同超参数配置的模型的性能。
定义神经网络架构和超参数
在下面的代码中,我使用了一个名为 Keras Tuner 的 Keras 扩展来优化具有三个隐藏层的简单神经网络的超参数。您可以使用 Keras Tuner 文档页面了解有关该工具以及如何安装它的更多信息。
from keras.regularizers import l2 # L2 regularization
from keras.callbacks import *
from keras.optimizers import *
from keras.models import Sequential
from keras.layers import Dense
from kerastuner import Hyperbandn_features = X.values.shape[1]def build_model(hp):
hp_n_layers = hp.Int('units', min_value = 28, max_value = 112, step = 28)
model = Sequential()
model.add(Dense(hp_n_layers, input_dim=n_features, activation='relu'))
model.add(Dense(hp_n_layers, activation='relu'))
model.add(Dense(hp_n_layers, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
hp_learning_rate = hp.Choice('learning_rate', values = [1e-2, 1e-3, 1e-4])
# Compile model
model.compile(loss='binary_crossentropy',
optimizer=Adam(learning_rate=hp_learning_rate),
metrics=['accuracy'])
return modeltuner = Hyperband(build_model,
objective = 'val_accuracy',
max_epochs = 10,
factor = 3,
directory = 'hyperparameters',
project_name = 'hepmass_deep_learning')
在上面的代码中,我使用 Keras Tuner 为网络的每个隐藏层中的单元数和训练网络时使用的学习率定义了超参数选项。我为每个超参数测试了以下选项:
- 隐藏层数:28,56,84,112。
- 学习率:0.01,0.001,0.0001。
这绝不是一个详尽的列表,如果你想真正找到这个问题的最佳超参数,你可以尝试更多的超参数组合。
超参数调谐
现在已经定义了神经网络架构和超参数选项,我们可以使用 Keras Tuner 来找到最佳的超参数组合。
下面的代码段是一个可选的回调,我添加它是为了在超参数搜索中的每个模型的训练运行结束时清除训练输出。这个回调使得 Jupyter 笔记本或 Jupyter 实验室环境中的输出更加清晰。
import IPythonclass ClearTrainingOutput(Callback):
def on_train_end(*args, **kwargs):
IPython.display.clear_output(wait = True)
在下面的代码中,我对超参数进行了简单的搜索,以找到最佳模型。这个搜索过程包括训练和验证不同的超参数组合,并对它们进行比较,以找到性能最佳的模型。
tuner.search(X_train, y_train, epochs=4,
validation_data = (X_valid, y_valid),
callbacks = [ClearTrainingOutput()])# Get the optimal hyperparameters
best_hps = tuner.get_best_hyperparameters(num_trials = 1)[0]print(f"""
Optimal hidden layer size: {best_hps.get('units')} \n
optimal learning rate: {best_hps.get('learning_rate')}.""")
运行搜索产生以下最佳超参数。
Optimal hidden layer size: 112
optimal learning rate: 0.001.
培训最佳模特
既然超参数搜索已经完成,我们可以用最佳超参数重新训练模型。
model = tuner.hypermodel.build(best_hps)
history = model.fit(X_train, y_train, epochs=4, validation_data = (X_valid, y_valid))
上面的训练过程为每个时期产生以下输出。
Epoch 1/4
153125/153125 [==============================] - 150s 973us/step - loss: 0.2859 - accuracy: 0.8691 - val_loss: 0.2684 - val_accuracy: 0.8788
Epoch 2/4
153125/153125 [==============================] - 151s 984us/step - loss: 0.2688 - accuracy: 0.8788 - val_loss: 0.2660 - val_accuracy: 0.8799
Epoch 3/4
153125/153125 [==============================] - 181s 1ms/step - loss: 0.2660 - accuracy: 0.8801 - val_loss: 0.2645 - val_accuracy: 0.8809
Epoch 4/4
153125/153125 [==============================] - 148s 969us/step - loss: 0.2655 - accuracy: 0.8806 - val_loss: 0.2655 - val_accuracy: 0.8816
根据上面的训练输出,我们可以看到最佳模型的验证准确率刚刚超过 88%。
测试最佳模型
现在,我们终于可以使用单独的测试数据来评估模型了。我像往常一样缩放 mass 列,并使用 Keras evaluate 函数来评估上一节中的模型。
test = pd.read_csv('./all_test.csv.gz')
test['mass'] = scaler.fit_transform(test['mass'].values.reshape(-1, 1))X = test.drop(['# label'], axis=1)
y = test['# label']
model.evaluate(X, y)
上面的代码产生了下面的输出。
109375/109375 [==============================] - 60s 544us/step - loss: 0.2666 - accuracy: 0.8808[0.26661229133605957, 0.8807885646820068]
基于这个输出,我们可以看到该模型实现了大约 0.2667 的损失,并且在测试数据上的准确率刚刚超过 88%。根据训练和验证结果,这种性能水平是我们所期望的,我们可以看到模型没有过度拟合。
摘要
在本文中,我演示了如何使用 HEPMASS 数据集训练神经网络来识别产生粒子的碰撞。这是深度学习在粒子物理领域的一个有趣应用,随着这两个领域的进步,它可能会在研究中变得更受欢迎。和往常一样,你可以在 GitHub 上找到这篇文章的完整代码。
来源
- 欧洲粒子物理研究所,关于 LHC 的事实和数字,(2021),欧洲粒子物理研究所网站。
- 维基百科,蒙特卡洛法,(2021),维基百科免费百科。
- 页(page 的缩写)巴尔迪,k .克拉默等。阿尔,高能物理的参数化机器学习,(2016),arXiv.org。
deep learning is 如何改变设计:NLP 和 CV 的应用
了解自然语言处理和计算机视觉在当今设计领域的应用
如果你曾经尝试过创建一个用户界面,你可能会很快意识到设计是困难的。选择正确的颜色,使用匹配的字体,使你的布局平衡…所有这些都要考虑到用户的需求!我们能否以某种方式降低所有这些复杂性,让每个人都能设计,即使他们不知道间距规则或颜色对比理论?如果软件能帮你搞定这些不是很好吗?
这个问题并不新鲜。这是一个长期存在的问题,人机交互(HCI)社区多年来一直在努力解决这个问题。深度学习最近才开始被应用(例如,查看这篇或这篇论文),正如它在其他领域发生的那样,它已经迅速成为使这些技术在实际产品中工作的核心使能因素。事实证明,收集其中一些问题的数据比提出一个完整的数学公式来解释某个设计为什么有效更可行。然而并非没有挑战。作为一个复杂、高维、多解的问题,通常很难定义您的模型输入、输出,甚至是优化什么!
虽然当前的深度学习方法还没有准备好承担设计师的同等责任,但它已经开始消除摩擦,并部分自动化设计过程的步骤。这使得非设计师能够在没有设计师直接参与的情况下设计出他们自己的想法。
无论你是否是设计师,这些都是深度学习在该领域的一些令人兴奋的应用:
计算机视觉
计算机视觉作为一个视觉领域,在设计领域有大量的应用。
草图到设计的转换
来源:uizard . io——试试看
对于非设计师来说,使用复杂的设计软件可能是一个令人生畏的挑战,但是一支笔和一张纸?非常低的准入门槛意味着每个人都可以很快上手。
然而,这并非易事。在计算机视觉层面上解决这个问题不仅需要理解形状,还需要理解意图。识别线条是一个简单的问题,但是知道那条线意味着什么可能是真正的挑战。
而且即使你设法从视觉的角度理解一切,你仍然需要经历定义不良的布局建模任务“让一切看起来都好”。
基于草图的设计资源查询
来源:谷歌自动绘图
如果您已经有了一组想要使用的视觉资产,该怎么办?仅仅通过传统的基于语言的搜索来探索这些资源是具有挑战性的。你心中有一个你想要的图像,但是这个特定的图标/图画是如何命名的呢?赶紧素描一下就好!
这是一个复杂的视觉问题,特别是当我们假设资产集不固定时,因为草图表示可能与实际资产有很大差异。
基于视觉的主题创作
来源:uizard . io——试试看
当然,你也许能得到一些基本的组件和形状,但是颜色、排版、复杂的组件设计等呢??这些都是非常耗时的任务,设计师们要为每个新项目花费数周的时间来开发。这里的想法是,你只需选择一个现有项目的图像,你的网站的网址,甚至是互联网上的任何随机图像,在几秒钟内你就可以节省设计师数周的工作!一个完整的“设计系统”是由你的视觉灵感创造出来的。
听起来很有用,但是如何建模呢?第一步是对图像中的像素达成一个复杂的理解,从那里我们可以提取一组颜色、字体、组件等。但是当然,也可能不是所有的组件都在,所以你也需要设计你看不到的组件。阅读更多。
自然语言处理
虽然一开始将自然语言处理应用于视觉领域听起来可能有些违反直觉,但设计是一个多模态领域,它提供了许多应用 NLP 技术的机会。当你想到这一点时,设计中的组件可以被建模为单词,屏幕可以被建模为句子,而你的整个应用程序可以被建模为一个长文本。这意味着我们可以利用过去几年在 NLP 领域所做的大量工作,并利用它来学习布局。这种方法已经在 LayoutLM 以及无数其他应用于设计的论文中被证明是有效的,比如这个或者这个。
设计的组成部分,不管是文本的还是其他的,都是你的“句子”的“词”。然后,这可以被输入到一个变压器,以解决众多的任务。来源
设计生成描述
但是,当我们可以描述我们想要的东西时,为什么还要费心去解决组成设计问题的单个问题呢?好吧,虽然已经有这样做的原型,但不要期待一个完美的解决方案。人类仍然需要迭代一个设计问题的无限解,按照自己的喜好调整事物,等等。
不过,这确实是个有趣的多模态问题。混合形式总是一个挑战,这里我们将从常规英语转向 2D 布局,你不仅需要预测标记,还需要预测它们的位置、内容、风格等。
设计自动完成
给定一个部分设计布局(每个盒子是一个组件),一个模型的任务是完成它来源
自动补全通过让在微型手机屏幕上书写文本的体验更加高效,为世界节省了数百万小时。是时候在设计时也利用这一点了。
我的意思是,如果设计可以像文本一样建模,为什么我们在设计的时候不能有自动完成功能?实际上,类似的建模方法可以应用于这两个问题,我们不是预测下一个单词,而是预测下一个设计组件。
最后的话
凭借丰富的数据和较低的错误成本,设计领域是深度学习研发的完美游乐场。这里我们只提到了少数几个项目,但是还有许多其他具有挑战性的任务,其中NLP 和 CV 建模技术都是成功的关键。从代码生成%EC%9D%98)到屏幕链接预测或者设计检索,不一而足。
如果你对通过深度学习构建设计的未来感兴趣,记得在 Twitter 上关注我。只要我们在 Uizard 有空缺职位,我会随时通知你。
我是如何根据目的对 50 种图表类型进行分类的?
数据可视化
可视化的目的是洞察力,而不是图片
艾萨克·史密斯在 Unsplash 上拍摄的照片
大家好😘!
今天,我很高兴地向大家介绍 50 多个通常被商业人士使用的图表。我希望你会喜欢它。它们分为以下五类。
- 趋势 :折线图、棒棒糖图、迷你图、条形图(和柱形图)、面积图、凹凸图、瀑布图、斜率图和股价图。
- 关系 :散点图、平滑散点图、气泡图、相关图、斜率图、热图、弦图、雷达图、平行坐标图、镶嵌图、脊线图、气泡图。
- 比较 :簇状条形图、堆积条形图、面积图、堆积面积图、克利夫兰点状图、折线图、棒棒糖图、迷你图、凹凸图、子弹图、漏斗图、镶嵌图、脊线图、分类图、choropleth 图、hexbin 图、以及 cartogram。
- 分布 :直方图、密度图、威尔金森点状图、茎叶图、盒状&须状图、带状图、小提琴图、等高线图、三维面积图、点状图、径向流图、网络流图、等值线图。
- 整体的一部分 :饼图、圆环图、簇状条形图(和柱形图)、堆积条形图(和柱形图)、百分比堆积条形图(和柱形图)、面积图、100%面积图、瀑布图、树形图、旭日图。
趋势
当你展示随着时间的推移发生了什么时,有趣的事情会变得更加有趣。绘制时标值可以显示季节性、增长、减少和趋势,以帮助预测未来。
折线图
折线图通常用于显示时间数据,或数值随时间的变化。x 轴代表时间间隔(年、季度、月、一天中的小时)。等等),y 轴代表观察值。
凹凸图
它是折线图的变体,用于探索等级随时间的变化。它有助于比较多个观察值的位置、性能和排名,而不是实际值本身。
柱状图
柱形图是最常用的图表类型之一。柱形图只有 12 个或更少的数据点,是可行的,也是有用的。
当超过 12 个数据点时,最好切换到没有单个数据点的折线图。折线图可以轻松显示数百个周期的趋势。
条形图
条形图是翻转过来的柱形图。所有相同的原则和最佳实践都适用于柱形图和条形图。
棒棒糖图表
棒棒糖图是条形图的一种便捷变体,其中条形图由线条和末端的点代替。
迷你图
迷你图是工作表单元格中的一个小图表,提供数据的可视化表示。
您可以使用迷你图来显示一系列数值的趋势,如季节性增减、经济周期,或者突出显示最大值和最小值。将迷你图放在其数据附近以获得最佳效果。
对比图
面积图结合了折线图和条形图,以显示一个或多个组的数值如何随着第二个变量(通常是时间)的变化而变化。
瀑布图
当您想要显示主要的变化或说明总额的构成,同时显示总额以便比较时,瀑布图是一个不错的选择。
斜率图
当您有两个时间段或比较点,并且想要快速显示两个数据点之间不同类别的相对增减或差异时,斜率图会很有用。
股票图表
(又叫烛台图)
股价图有一条垂直线,表示证券价格从低到高的范围。粗柱表示开盘价和收盘价。
在上面的第一组烛台中,蓝色表示价格上涨,红色表示价格下跌。
关系
许多数据集包含两个或多个变量,我们可能对这些变量之间的关系感兴趣。
散点图
这是一种非常重要的图表类型,特别是,为了绘制两个定量变量之间的关系,我们通常会使用散点图。下图显示了一个散点图示例。
使用回归分析,您可以使用散点图直观地检查数据,以查看 X 和 Y 是否线性相关。
泡泡图
气泡图通过数据标记的多重编码扩展了散点图的潜力。这些标记代表不同大小的圆(数据点不一定是圆),然后根据它们的分类关系进行着色。
气泡图很有用,因为它能画出三个数据元素的交叉点。
相关图
在数据分析中,相关图是相关统计的图表。
热图
(称为矩阵图)
热图使我们能够执行快速模式匹配,以检测分类组合矩阵中不同定量值的顺序和层次。
使用饱和度降低或亮度增加的配色方案有助于创建数据量级排序的感觉。
弦图
弦图是一种显示矩阵中数据之间相互关系的图形方法。它比较一个数据集内或不同数据组之间的相似性。
例如,它绘制了从 A 公司到 B 公司的员工数量,每有一名员工向另一个方向流动。
雷达图
(称为极坐标图)
雷达图是显示多个数据点以及它们之间变化的一种方式。它们通常用于比较两个或更多不同数据集的点。
平行坐标图
平行坐标图显示了多个垂直轴上两个或多个变量之间的相关性。
马赛克图
(也称为马里梅科图)
镶嵌图是一种将两个或多个定性变量的数据可视化的图形方法。
脊柱图
(亦称旋图)
脊线图是仅用于两个变量的镶嵌图的特定类型。它类似于复合条形图,但现在条形的宽度是由每个水平类别的比例来设置的。
气泡图
这张地图用来帮助我们描述一个主题。中间的圆圈代表主题,而外面的圆圈代表主题的质量。
比较
簇状条形图和柱形图
簇状条形图用于使用水平方向比较某一指标上的分类变量的类别。条形的高度代表 x 轴上显示的测量值。我们使用条形图来显示大的文本标签。
簇状柱形图与簇状条形图类似,用于比较某个指标上的分类变量的类别。它是簇状条形图的垂直版本。
堆积条形图和柱形图
堆积条形图
堆积条形图将标准条形图从查看一个分类变量的数值扩展到两个分类变量。
堆积柱形图
堆积柱形图是一种基本的图表类型,允许随时间或跨类别进行部分与整体的比较。
对比图
堆积面积图
堆积面积图是基本面积图的延伸。它在同一个图形上显示了几个组的值的演变。
最有用的类型是堆积面积图,它最适合结合前面提到的两个概念:显示整体的一部分(像饼图)和一段时间内的连续数据(像折线图)。
克利夫兰点阵图
克利夫兰点图是条形图的替代方案,可以减少视觉混乱,并且更易于阅读。
折线图
多系列折线图用于比较不同组之间的表现。
棒棒糖图表
像条形图一样,棒棒糖图用于比较不同的项目或类别。
迷你图
我们可以使用迷你图来比较数据趋势。
凹凸图
项目符号图
漏斗图
马赛克图
镶嵌图用于显示关系,并提供组的直观比较。
脊柱图
脊柱图是一种流行的可视化方式,它可以一目了然地显示一个区域与一系列指标中的其他区域相比的情况
分类地图
等值区域图
图表
图表是一种地图,其中区域的几何形状被扭曲,以传达替代变量的信息。
Hexbin 图
分配
柱状图
直方图是以连续(接触)条的形式显示频率或相对频率的条形图。
直方图可用于查看分布的形状,并确定数据是否对称分布。
密度图
密度图是数值变量分布的表示。它使用核密度估计来显示变量的概率密度函数。
威尔金森点阵图
威尔金森点图显示连续数据点的分布,就像直方图一样,但显示的是单个数据点,而不是条块。
茎叶图
茎和叶图是一个特殊的表格,其中每个数据值被分成“茎”(第一个数字)和“叶”(通常是最后一个数字)。
盒须图
箱线图,也称为盒须图,是一种显示数据集的分布和中心的方法。
带状图
带状图是提供单个变量观察值分布信息的众多图表类型之一。
它通过简单地将每个观察值显示为沿代表数据值范围的刻度线绘制的点,来提供数据集内包含的整体结构的有用视图。
小提琴情节
小提琴图是一种绘制数字数据的方法。它类似于一个箱形图,在每一侧增加了一个旋转的核密度图。
等值线图
等高线图用于将一组三维数据表示为高程等高线。它有三个强制系列组件,位置、深度和值。
- 位置和深度分量中的数据必须在 xz 平面上形成 2D 矩形网格。
- 每条等高线包括在值分量中具有相同高程值的点。
三维面积(表面)图
点阵图
点地图是一种专题地图,它使用点符号来显示大量相关现象的地理分布。
径向流动图
径向流动图显示了从一个源头到多个目的地的流动,反之亦然。
网络流程图
网络流程图显示了通常基于运输或通信互连的已建立网络的移动。
等值线
等值线是在地图上画的一条线,它穿过具有相同值的所有可测量的量。
作文
(或整体的一部分)
在此类别中,图表类型描述了组成部分如何构成整体、整体各部分之间的关系以及各部分对整体的累积影响。
圆形分格统计图表
典型的局部图是饼图。通常用于显示总数的简单分类,如人口统计数据。
饼图对于突出显示比例很有用。
圆环图
圆环图通常被用作饼图的替代品,以显示部分与整体的关系。
它们也经常被用作关键绩效指标(KPI)
簇状条形图和柱形图
簇状柱形图
簇状条形图
堆积条形图和柱形图
堆积条形图是呈现部分到整体关系的另一种方式。
百分比堆积条形图和柱形图
百分比堆积条形图
百分比堆积柱形图
对比图
面积图通常用于显示如何将一个整体分割成组成部分。
百分比面积图
百分比堆积面积图显示整体的组成部分如何随时间变化。
多堆栈瀑布图
树形图
树形图是可视化树形图层次结构的另一种方式,同时也通过面积大小显示每个类别的数量。
旭日图
旭日图非常适合显示分层数据。层次结构的每个级别都由一个环或圆表示,最里面的圆作为层次结构的顶部。
没有任何分层数据(一个类别级别)的旭日图看起来类似于圆环图。
结论
最后,我按用途分类了 50 多种图表类型。数据可视化的目标不仅仅是制作关于数字的图片,而是精心制作一个真实的故事,让读者相信你的解释如何以及为什么重要。
让我们展示您的数据故事…!
我是如何用 Python 中的 Keras 和 TensorFlow 编写自己的 OCR 程序的
数据科学家
如今,OCR 在数字劳动力的眼中
作者图片
光学字符识别(或光学字符阅读器,又名 OCR)是过去二十年来用于识别和数字化图像中出现的字母和数字字符的技术。在行业中,这项技术可以帮助我们避免人工输入数据。
在这篇文章中,我想带你了解深度学习技术如何应用于 OCR 技术来分类手写的步骤。
- 准备用于训练 OCR 模型的 0–9 和 A-Z 字母数据集。
- 从磁盘上加载字母的数据集。
- 在数据集上成功训练了 Keras 和 TensorFlow 模型。
- 绘制训练的结果,并可视化验证数据的输出。
- 预测某些图像中出现的文本。
准备数据集
我们使用以下两个数据集来训练我们的 Keras 和 TensorFlow 模型。
- 0–9:MNIST
- A-Z: Kaggle
标准的 MNIST 0–9 数据集
这个数据集是从 NIST 的特殊数据库 3 和特殊数据库 1 构建的,它们包含手写数字的二进制图像。
Itis built into popular deep learning frameworks, including Keras, TensorFlow, PyTorch, etc. The MNIST dataset will allow us to recognize the digits 0–9*.*Each of these digits is contained in a 28 x 28 grayscale image.
MNIST 0 比 9
ka ggle A–Z 数据集
Kaggle 用户 Sachin Patel 发布了一个简单的逗号分隔值(CSV)文件。
This dataset takes the capital letters *A–Z* from NIST Special Database 19.Kaggle also rescales them from 28 x 28 grayscale pixels to the same format as our MNIST data.
卡格尔公司
从磁盘加载数据集
由于我们有两个独立的数据集,首先我们必须加载两个数据集,并将它们合并成一个数据集。
-
加载 Kaggle A-Z 字母。
-
加载 MNIST 0-9 位数。
-
将它们合二为一。
在数据集上训练模型
我使用 Keras、TensorFlow 和 ResNet architecture 来训练我的模型。
使用以下命令训练该模型需要大约 30-45 分钟。
python train_model.py --az dataset/a_z_handwritten_data.csv --model trained_ocr.model[INFO] loading datasets...
[INFO] compiling model...
[INFO] training network...
Epoch 1/50
34/437 [=>……………………….] — ETA: 7:40 — loss: 2.5050 — accuracy: 0.2989
...
标绘结果
我们将绘制一个可视化图,以便我们可以确保它正常工作。
作出预测
一旦模型被训练。我们可以用它来做预测。
python prediction.py — model trained_ocr.model — image images/hello_world.png[INFO] H - 92.48%
[INFO] W - 54.50%
[INFO] E - 94.93%
[INFO] L - 97.58%
[INFO] 2 - 65.73%
[INFO] L - 96.56%
[INFO] R - 97.31%
[INFO] 0 - 37.92%
[INFO] L - 97.13%
[INFO] D - 97.83%
完整的源代码可以在这里看到:https://github . com/house cricket/how-to-train-OCR-with-Keras-and-tensor flow
├── __init__.py
├── dataset
│ └── a_z_handwritten_data.csv
├── images
│ ├── hello_world.png
│ └── vietnamxinchao.png
├── models
│ ├── __init__.py
│ └── resnet.py
├── prediction.py
├── requirements.txt
├── train_model.py
├── trained_ocr.model
└── utils.py
结论
最后,总结本文,我们可以说使用 Keras、TensorFlow 和 Python 来训练 OCR 模型是很容易的。此外,我们可以通过使用更好的数据集来提高该 OCR 模型的准确性。
你有什么想法吗…?很简单,对吧?
参考
[1]http://yann.lecun.com/exdb/mnist
[2]https://www . ka ggle . com/sachin Patel 21/az-handled-alphabets-in-CSV-format/metadata
机器学习如何解释问题并为电子商务公司节省成本
行业笔记
让我给你分享一个我公司应用机器学习的成功案例
在我们深入研究解决方案之前,这里有一个问题
该公司面临着很高的交货率失败的可能性——买家(那些在 Shopee、Lazada、亚马逊、易贝等电子商务平台上购买商品的人。)会在最后一刻拒绝他们的包裹。这浪费了大量资金,管理委员会希望降低这一比率。
两年前,那是我第一次担任新的角色,开始领导数据团队。有一天,有一个重要的会议,我是一屋子高管中唯一的数据员。人们在其中一个后续会议中,讨论总的****【FD】失败交付案例、其增量、每个案例的潜在根本原因、主要原因、其趋势以及更多,而只有我一个人对此一无所知。这是我第一次触及那个棘手的问题。
会议室里发生了什么?
提出了许多问题,有些得到了回答,有些没有。最终,我意识到有两类人:
- 提问**小组:首席执行官、首席财务官、营销团队,他们问了很多问题。大多数问题以【什么】和【为什么】开头,其他一些是【如何】和【如果】。
- 回答组:、CCO、BI 团队,他们回答了约 30%的提问,其中大部分回答了【为什么】组,而【如何】**【如果】组则作废。
(当然,还有第三组人保持沉默,那就是我)
那是一个两小时的会议,我从一开始就完全迷失了。1 个半小时过去了,我开始质疑自己“这是怎么回事?这不是讨论,这是调查”。人们试图了解发生了什么,为什么会发生,但他们无法阻止它在未来发生。他们还根据数据小组的结果提出了一些假设。不幸的是,这些假设似乎不是那么一致,它们几乎不能证明什么。
那一刻,我知道我可以使用一些机器学习算法来解决问题,但遗憾的是机器学习这个术语对业务来说相当陌生,我没有机会展示我的方法。然而,机器学习不是火箭科学。我将向您展示我是如何应用并获得业务价值的。
传统方法的缺陷
承认吧,你也看到你们公司的问题了吗?在讨论中,业务团队或财务团队是否一直在问这个问题发生的原因。然后他们还把你放在一些具体的情况下比如“如果我们做 这个 呢?”或者“我觉得这是因为 那个*。而你,作为一个数据员,你会查看你的数据,做一些你称之为的分析并且输出大部分是是/否或真/假。***
该程序称为假设检验,即:
你得到了一些假设(某人认为如果你做他的假设中陈述的事情,结果会改变);然后你必须检查你的数据,看看这是真假设还是假假设。如果这是真的,你的公司会应用这个假设来达到预期的结果。如果是假的,他们会尝试给你另一个假设。你不得不一次又一次地重复这个过程,直到他们找到一个合理的假设。
这是一个好方法吗?绝对不是。这是一个无限循环,因为公司永远不会满足于他们所得到的,所以他们会试图给你越来越多的假设,以销售更多的产品,节省更多的成本。你永远也走不出那个虚空的迷宫。
这种方法的问题是:
- 每个人都可以提出这个假设(认为自己发现了很酷的东西),
- 假设列表无法排序(因为它们在某种程度上都是合理的),
- 你需要时间来验证每一个假设(这个列表会一天比一天长)。
那怎么走出那个迷宫呢?
不要相信任何随机的假设
说起来挺讽刺的,因为我是数据团队的一员,我唯一信任的就是我的数据。假设可以来自任何参与问题的人,它看起来像一个原始数据集。在投入时间之前,我必须对其进行验证、清理和分类(就像我对数据所做的那样),以确保获得最佳结果。那么问题就是“我怎么知道哪个假设有用,哪个没用?”。啊,是的,“你必须用你的数据来测试它”你一定在想这个问题,对吗?但是等等,你不应该只是测试列表上的所有假设,你在清理它,对吗?宾果,发现死锁。
让我重述一下整个过程:
那一刻我意识到,真正的问题来自人类,而不是假说,或者数据,因为假说的来源可以来自任何人。如果他们没有足够的知识去理解和分析问题怎么办?他们没有能力提供假设!即使他们可以提供一些假设,这也不会是最好的解决方案,因为所有人都是人,都有我们的局限性。最好的解决方案应该在计算机的帮助下产生,同意吗?那这个问题怎么利用机器的计算能力呢?
相反,向计算机寻求假设!
我的脑海中突然冒出一个想法“为什么我不把所有的东西都放入某种无人监管的学习算法中,看看结果是什么,然后把这些东西带给业务团队,让他们验证?”**
是的,当其他人在思考新的假设并和我的团队核对时,我也是这么想的!
就在那里,我决定提取 10%的数据,放入决策树算法中。代码已经可以使用了(当然,我做了一个代码模板可以重用,只需更改数据集),包含 12,000 条记录的数据集被清理了。我花了将近 2 分钟才得到结果。
**订单(预订)分类使用决策树(源代码托管在 Google Colab 上;数据集和导出模型和导出可视化由 芽庄 **托管在 Google Drive 上。免责声明:数据集是一个 10k 样本,有 315 个特征被标记,而原始数据集由大约 20k 个样本组成,有 3k 个特征。在这篇文章中,我不去详细的源代码和数据集,这只是一个例子)
准确率不是唯一的目标
好吧,如果你是一个有经验的数据科学家,你会有一个问题“为什么你不在使用你的预测之前应用预处理和特征工程?”。这个问题问得好!我的回答是“是准时的问题”。事实上,我并不想获得高准确率的预测,我只是需要看到“我的数据看起来怎么样,以及每个特征的重要性”*。在现实生活中,您通常需要牺牲质量(在这种情况下是准确率)来换取响应时间(在这种情况下,您需要多长时间才能理解您的数据)。当然,企业不会等太久才得到数据团队的决定,他们只需要一些听起来足够合理的东西来做出决定。当数据科学家倾向于投入大量时间来获得最佳预测模型时,这是他们的另一个陷阱。这里有一个你需要理解的小权衡图:*
让我们谈一谈决策树
承认吧,我打赌你经常坚持向他们解释一些可以解决问题的技术,但这对他们来说太难理解了,因为大多数机器学习算法是无法解释的。那怎么处理呢?好吧,让我们先谈谈决策树。
决策树是分类组中的算法,是监督学习的子集。该算法的输出可以是二进制值,例如真/假**,或者是/否,或者好/坏,或者公/母,或者仅仅是 0/1 。输出有时可以是一组标签,如红/绿/蓝,或低/中/高,或XS/S/M/L/XL(t 恤尺寸)。**
树是通过将构成树的根节点的源集分割成子集来构建的,这些子集构成了后继的子节点。分类领域的每个元素称为一个类。以下是一些与决策树相关的流行术语:
- ****根节点:它代表整个总体或样本,并进一步分成两个或更多同类集合。
- ****拆分:是将一个节点分成两个或两个以上子节点的过程。
- ****决策节点:当一个子节点分裂成更多的子节点时,则称之为决策节点。
- ****叶/端节点:不分裂的节点称为叶或端节点。
- ****剪枝:当我们删除一个决策节点的子节点时,这个过程叫做剪枝。你可以说分裂的相反过程。
- ****分支/子树:整个树的一个子部分称为分支或子树。
- ****父节点和子节点:被分成子节点的节点被称为子节点的父节点,而子节点是父节点的子节点。
试着解释你的模型
你一定想知道为什么我选择决策树而不是随机森林或逻辑回归。原因是:我在寻找一个假设,而不是预测。
我们有许多机器学习算法,它们可以分为有监督的、无监督的、回归的、分类的等等。每个算法都会给你一个不同的结果,例如,当你想预测结果是 A 还是 B(真或假,或者你需要的任何一种分类),你可以使用分类组中的任何算法。但是对你来说,只使用一种算法而不使用其他算法,或者随机使用它们,并不是最好的做法。在目前的情况下,有什么问题呢?它是:
“如何降低交付失败案例率?”
不是“如果我给你一个新的订单信息会怎么样?到底会不会送成功?”*。例如,如果你选择逻辑回归,你可以预测结果,但你不知道如何防止它。这是数据团队的另一个大陷阱,特别是对于 ML 工程师来说,他们一直专注于他们的算法,失去了与业务团队的沟通。事实上,我自己和我的团队过去也犯过同样的错误,所以如果你有同样的问题也不用担心。好消息是现在我们得到了教训和经验。*
因此,在这些算法中,决策树是解释你的数据的最简单的方法(KNN 和 SVM 也不错,但在这篇博客中,我选择了决策树,因为它是最简单的方法)。
我们从决策树中得到的教训
让我们深入了解决策树的输出,我们有前 3 个分支:
- succ_mord_cnt_std: 此功能表示买方成功订购的订单/预订总数(已订购和已收到)。
- payment_type: 此功能代表买家为订单/预订付款的方式。我们有许多不同的方式,如:通过信用卡支付,交货成本,银行转账,凭证代码,50%的成本存款… 我做了一个快速的标签编码器,然后才运行这个例子。
- ****total _ payed _ AMT:该功能表示已支付订单/预订的总费用
前 3 名分支样本(按 韩川 )
**好的,在检查了前 3 个分支后,我试着将它们解释为的一句话“如果这个包裹的买家 【做了某事】 ,那么这个包裹将有可能被成功交付”就像:
- ****第一个分支:如果该包裹的买方 在过去 中已经订购了超过 12 个订单/预订,则该包裹将有可能被成功交付。
- *第二分支:*如果这个包裹的买家 使用的方法≤ 0.5 (编码的是“信用卡支付”),那么这个包裹就有可能被成功送达。
- ****第三分支:如果此包裹的买方 购买的总金额少于 30,750 越南盾(又名此包裹花费少于 30,750 越南盾) ,则此包裹可能会被成功交付。
之后,我试图用非技术技能(或我的常识)来理解我的假设,我向业务团队解释如下:
- 第一个分支:对于所有过去订购少于 12 个订单/预订的买家来说,他们是新用户,他们可能是垃圾邮件发送者(制造假订单),因此他们是潜在没有收到包裹的高风险用户,或者只是因为他们对平台非常陌生,所以他们偶然下了订单,他们可能想取消订单,但不知道如何做。另一方面,订购超过 12 个订单/预订的买家是某种忠诚用户(经常在我们的平台上买东西),我们可以信任他们。因此如果这个包裹的买家在过去已经订购了超过 12 个订单/预订,那么这个包裹将有可能被成功交付。**
- 第二个分支:对于所有使用信用卡支付的买家来说,他们都是有工作的人(银行只给信用评分高的人发放信用卡,有稳定收入的人是合格的),所以他们有足够的钱购买东西(即使他们改变主意,他们也会接受这些东西,因为对他们来说这不是什么大事)。或者,我们可以说,没有预付任何款项的人后来会改变主意,或者他们会花光所有的钱,无法在送货时付款,或者,无论如何,我们无法从他们那里得到保证,所以如果这个包裹的买家使用的方法≤ 0.5 (这是被编码的“用信用卡支付”),那么这个包裹就有可能被成功送达。****
- 第三个分支:对于所有价格昂贵(超过 30,750 越南盾)且未提前付款的包裹,退货的风险很高(比如说,如果我在未提前付款的情况下从你的商店订购了一台 70 英寸的电视,你认为我会收到它并在你将它送到我家后付款吗?这是 50%的可能性,甚至更低。因此如果此包裹的买家购买的总金额低于 30,750 越南盾(也就是此包裹的价格低于 30,750 越南盾,相当于 1.2 美元),则此包裹可能会成功交付。**
以下是我从决策树解读到非技术语言的假设总结:
解读我的决策树模型(sourcebyNhan TranT19)
现在,从商业角度来看,这个问题似乎更容易理解。这是我之前提到的现代方法的第一步:
现代问题需要现代解决方案
好了,经过一个漫长的过程,现在我们有 3 个由机器学习算法生成的假设,让我们看看企业如何解决它并关闭案例?不要!是时候稍微换个话题了。让我们检查一下我们的 3 个假设,即:
- 过去的订单数量
- 付款方式
- 预订费用
…你从他们身上学到了什么?是人之常情!
理解人类的行为有助于解决他们的问题(图片来自https://www.pexels.com/@fotografierende?utm_content=attributionCopyText&utm_medium=referral&utm_source=pexels像素 )****
根据我在尼尔森公司工作期间对客户洞察团队的个人研究,我发现我们的行为驱动我们的行动,这间接意味着:你可以通过改变人们的行为来改变他们的行动。那如何适用于我们的问题呢?
- 对于“过去的订单数量”问题,我们可以与客户服务团队合作,为新用户提供更多支持,持续跟踪他们的订单,并采取适当的行动,如当他们下任何高额订单时,拿起电话并确认他们的订单。或者我们可以给他们更多的指导,告诉他们如何下单,当他们需要帮助时如何联系我们,以及当他们失去兴趣时如何取消任何订单。
- 对于【支付方式】问题,我们有一个活动,我们预留了 30000 越南盾(相当于 1.2 美元),分成 3 张代金券(每张 10000 越南盾)。当他们下订单并选择“货到付款”方式时,如果他们同意改用另一种预付方式,我们会向他们提供一张优惠券(10,000 越南盾)以减少运费。当然,我们主动提出“记住我的支付方式”以便他们以后使用(实际上这是我们驱使他们将来再次使用这种方式的方式),并持续这样做 3 次。在大多数情况下,我们成功地让他们在第三次订购后继续使用预付费方式,并且他们会一直使用这种方式。之后,在第二次活动中,我们应用了前 3 个免费运费,以获得更大的效果。
- 对于“预订成本”问题,我们使用了与“过去订单数量”问题相同的方法,让呼叫中心与有高价值采购的买家保持互动。
免费礼物是现代世界的一个神奇词汇(图片来自 Unsplash )
BLUF
好了,该写完我的长文了。在这篇博客中,我没有过多地谈论机器学习或分享任何代码,因为这是为在现代数据行业工作的人准备的,他们需要使用他们的技术技能为非技术人员服务。这就是数据团队的价值。
然而,猜猜我在几次竞选后得到了什么?交付不良率比上年同期降低了 7%!这是我的团队在 2 年多的时间里为组织做出的最大贡献,他们面临着高 FD 率,6 个以上的项目旨在降低 FD 率(所有项目都失败了,因为他们是由业务团队领导的,他们坚持传统的方法)。
现在让我们来看看我们讨论了什么!
3 个常见陷阱:
- 从随机人群中获取假设;
- 花太多时间改进你的模型;
- 选择了无法解释的错误算法。
重要提示:
- 我们的行为驱动我们的行动;
- 数据团队的价值是帮助企业获得其价值(实际上不是我们很酷的预测模型);
- 现代问题需要现代解决方案;
- 如果长期效果不好,就停止做(但可以反过来做)
天天快乐学习!
我的机器学习模型怎么变得不公平了?
公平与偏见,值得信赖的 AI
你建立模型的初衷是好的。那么,为什么它表现出不公平呢?
在本公平系列的前一篇博文中,我们讨论了创建全面公平工作流以确保机器学习模型结果公平的三个关键点。它们是:
- 识别偏倚(两个或更多组的不同结果)
- 执行根本原因分析以确定差异是否合理,以及
- 采用有针对性的缓解策略。
但是 ML 从业者大概是怀着最好的意图来建立他们的模型的。那么一个模型怎么可能一开始就变得不公平或有偏见呢?
其核心是,ML 模型可能存在两大类不公平,这是我们从 Barocas & Selbst 2016 改编而来的:
- 由于观察到的模型性能差异,模型可能会出现偏差。这是由于模型的训练程序或训练数据集中的不足(例如,缺乏数据),模型在特定人群中表现出更多错误的时候。
- 由于未观察到的模型性能差异,模型可能存在偏差。在这种情况下,该模型在一个比较的组上并没有明显“更差”,并且可能正确地匹配测试数据集中的基本事实标签,但仍然被认为是不公平的,因为它复制或放大了数据集中现有的偏差。
让我们更深入地研究一下每一个问题。
由于观察到的模型性能差异造成的不公平
在 AI/ML 环境中听到的一个常见格言是“垃圾进,垃圾出;也就是说,如果输入训练数据在任何方面有偏差或不正确,模型将反映这些偏差和不准确。然而有时,即使地面真实数据是可靠的,该模型在一组人群中可能比在另一组人群中更容易出错。
XKCD 的漫画。
例如,当研究人员分析商业面部识别系统的准确性时,他们发现与肤色较浅的男性相比,模型在女性和肤色较深的个体身上表现较差,这是因为模型的训练数据中缺乏肤色较深的女性。在这种情况下,训练数据本身并不是“不正确的”,而是表现出了样本或代表性偏差:它并没有反映出模型要操作的人群。该模型不恰当地将从肤色较浅的男性身上收集的数据推广到其他人身上,因此在人群的子群体上准确性较低。
这种认为足够多的“大数据”必然会创建公平可信的模型的假设已经被一次又一次地证明是不正确的。正如凯特·克劳福德所言,社交媒体是大规模数据分析的一个流行来源,但只有 16%的在线成年人甚至使用推特(Twitter)——因此,仅从推特数据中得出的结论,如声称人们在周四晚上最悲伤(T11)不一定是正确的。我们假设在一个群体中看到的趋势会延续到另一个群体。
图片作者。
为什么一个模型在一组人群中表现更差,从而被认为是不公平的另一个原因是数据可用性或样本大小差异问题。对于少数群体,输入要素的信息量可能较少,或者收集的信息不可靠。例如,波士顿市试图从经过坑洞的司机那里收集智能手机数据以更快地解决道路问题——但通过依赖需要拥有智能手机的数据,该市意识到,老年人或不太富裕的居民区也不会被捕获。这些“黑暗地带”或“阴影”可能不足以代表甚至忽略关键人群。预测模型通常倾向于在训练数据中更好地表示的组,因为与这些预测关联的不确定性较少。
由于未观察到的模型性能差异造成的不公平
一个不公平的模型在一个子群体中的表现并不总是更差(例如,准确性更低)。事实上,如果数据集本身包含有偏见或不正确的标签,该模型可能被认为是完全准确的,但仍然是不公平的。
让我们举一个具体的例子来进一步说明这一点。自然语言模型通常在人类书写的文本的大型语料库上训练,例如新闻文章。然而,在大量谷歌新闻数据上训练的单词嵌入被发现是有偏见的,因为它们延续了记者如何写男性和女性的性别刻板印象。这项研究背后的研究人员表明,嵌入与性别和特定职业密切相关——根据嵌入,“家庭主妇”和“护士”是非常女性化的职业,而“大师”和“老板”则更男性化。这种历史偏差,也被称为 负面遗产 ,当一个模型被训练在由于不公平的系统或结构而本身存在偏差的数据上时就会发生。
不仅仅是模型简单地复制了这些历史偏见。在特殊情况下,它们会加剧它们——这被称为**放大偏差。**现实世界中的一个例子是用于大学招生的分数算法。该模型根据之前的录取数据进行训练,以确定哪些申请构成“良好匹配”然而,一旦模型投入生产,它只是过度适应先前的录取决定,而不是实际评估候选人的质量。如果这些决定被用于实践,它只会放大招生官员的现有偏见。
不仅仅是数据集的地面真实标签会有偏差;在模型开发生命周期的早期,错误的数据收集过程会破坏数据或使数据有偏差。这个问题被称为测量偏差。如果机器学习模型根据复杂管道生成的数据进行训练,就会出现这种情况。作为一个例子,我们可以使用 Yelp 的餐厅评论系统:Yelp 允许餐厅付费,以在 Yelp 平台上推广他们的餐厅,但这自然会影响有多少人看到给定餐厅的广告,从而影响谁选择在那里吃饭。通过这种方式,Yelp 的评论可能会不公平地偏向高收入社区的大型餐厅,因为 Yelp 的餐厅评论和推荐管道合并了。
在听到一个模型可能有各种各样的偏见时,一个自然的建议是限制它的访问:为什么不在不包含性别或种族等敏感属性的数据上训练模型?例如,早期的预测性警务算法在进行预测时无法获得种族数据,但这些模型严重依赖于与种族相关的地理数据(如邮政编码)。通过这种方式,对性别和种族等人口统计数据“视而不见”的模型仍然可以通过与受保护属性统计相关的其他特征来编码这些信息——这种现象被称为代理偏差。可能很难理清代理偏差,因为模型的输入特征通常是相互关联的,但仔细考虑数据来源并寻找偏差较小的替代数据来训练模型的从业者可以减轻其影响。
我如何修正一个不公平的模型?
一个善意的数据科学家有很多方法可以无意中训练出一个不公平的模型。但是有了正确的工具,就有可能理解并减轻这些偏见,这样你就可以在部署模型之前信任它。
在我们的下一篇文章中,我们将详细介绍一个公平的工作流程,数据科学家和验证者可以用它来理解、测量和调试他们模型中的偏差。
Russell Holz 对本文有贡献。
去年房地产价格如何变化?
用非面板数据分析商品价格演变的三种方法
照片由 Jason Dent 在 Unsplash 上拍摄
1.介绍
价格演变问题的不同方面
对于任何与分析相关的工作来说,分析任何商品的价格都是一项很常见的任务。回答“去年 x 的价格变化了多少”这个问题的难度很大程度上取决于我们所研究的商品的一致性和现有数据的特征。
如果我们想分析股票、黄金或石油等统一的商品,这项任务可能是微不足道的。如果我们能够访问样本组成在整个研究期间保持不变的面板数据,这是非常简单的,这种数据在研究受控群体或分析忠诚客户群的行为时很常见。
然而,许多现实生活中的分析并不适合使用上述任何数据类型,因为商品和数据样本都会随着时间而变化。
房地产价格——商品价格和特征的演变
房地产市场是这种挑战的一个很好的例子——如果我们每月收集数据,每个样本将只包含给定月份的有效报价。由于房地产是一种变化很大的商品,我们的分析需要回答价格演变问题的两个方面:
a)由于房地产定价的实际变化,价格变化了多少?
b)我们的数据样本的特征改变了多少?这种变化是如何影响价格演变的?
问题 A 是我们真正需要答案的地方,问题 B 是我们需要解决的依赖性,以便对定价问题的答案有信心。
我这篇文章的主要目标是展示解决这个问题的 3 种方法,以及它们的优缺点。
已用数据介绍
本文描述的所有分析都基于自 2020 年 4 月以来每月收集的近 20 万份华沙房地产报价数据集。个人报价数据与地理特征(如 Google Drive 和 Google Maps 数据)相结合,创建了 100 多个特征,详细描述了物业和位置特征,可用于精确的价格基准。
由于房地产价格通常变动非常缓慢(10%的年变化被认为是高的),并且它们具有很大的惯性,尽管有更多的粒度数据,我还是决定使用一个季度作为分析的间隔。对于每个季度,如果报价存在超过一个月,则只选择每个单独资产的最新条目。
本文使用的所有代码以及交互式图表都可以在 Github 获得。
2.回答房地产价格演变问题的三种方法
完成这项任务的最佳方式取决于可用时间、可用数据和分析目标。我准备了 3 种方法,在这些参数之间达到不同的平衡:
- 商业智能分析 —利用行业知识对数据进行细分,以部分缓解样本不一致的问题。用于获得关于价格演变和关键细分市场行为的可解释的见解
- 统计测试—建立一个简单的模型,例如线性回归,并用它来测试时间变量的显著性。通过在模型变量中包含关键特征来减轻样品的不均匀性。这允许在其他条件不变 的假设下分析价格演变,这意味着“所有其他因素不变或不变”。
- 高级分析 —构建一个高级模型,如神经网络,以构建基于基线期数据的精确定价基准。由于该基准已经考虑到了房地产特征之间的复杂关系,我们可以使用它来分析基准期内最新数据的价格。比较基准期基准模型的实际价格和预测价格之间的差异,可以让我们获得价格演变的精确估计。
由于其复杂性,第三种方法将在本文的中描述。
在这个排名中没有赢家,我根据问题使用以上所有的方法。它们是按复杂程度排序的,这意味着更复杂的模型将更耗时,(通常)更精确但更难解释,并且更需要数据。我将在专门的章节中详细描述每种方法的优缺点。
3。商业智能分析
这种类型的分析可以单独使用,也可以作为更强大流程的 EDA 部分。其主要目标是快速找到价格演变的趋势,并根据关键特征比较其不同行为。
底层和顶层五分位数
我通常从一个简单的图表开始分析平均值、顶部和底部五分位数的演变,看看价格在整个范围内是否表现相似。我们可以看到,总体平均价格上涨了 379 波兰兹罗提/平方米。
由于我们对趋势比对绝对价格本身更感兴趣,可视化基线期的变化可能更有用。
将随后的每个时间段除以基线值可以让我们清楚地看到每个部分的相对变化。在上图的例子中,我们可以看到 20%的最低价格(最低的五分之一)比平均价格和最高的五分之一价格增长得更快。平均价格上涨了 3.4%
按关键特征细分:位置
为了限制我们趋势分析中的一个关键价格驱动因素:房地产位置的影响,我们可以使用它来细分我们的数据。这降低了总体平均价格受地点样本构成重大变化影响的风险。
例如,如果我们的样本规模较小,50%的 Q2 房产位于价格最低的郊区,但由于市中心的大型建筑完工,这一比例在第四季度将降至 20%,则整体平均水平将会高得多。
这并不能说明整体价格正在大幅上涨,因为价格上涨主要是由我们的样本特征在分析期间的变化引起的。
我们可以看到,选择细分功能是正确的,因为不同的细分市场有不同的价格趋势。在过去的两个季度中,距离市中心 5 公里以上(中等距离和郊区)的价格上涨了 3%以上,而严格的市中心和近中心部分仍然停滞不前。
这种趋势可能与疫情和封锁对我们日常生活的影响有关。随着远程工作变得越来越受欢迎,人们可能更愿意住在离市中心更远的地方,这使得这些地区的价格上涨。
按关键特征细分:资产规模
根据房产大小对我们的数据进行细分,也显示了这些细分市场的价格趋势的变化,尽管不如位置示例中的变化显著。中小型公寓的价格增长速度几乎是大型公寓的两倍。
方法概述
这种方法的最大优势在于其清晰性——快速呈现不同细分市场的平均价格变动易于解释,并且不需要复杂的假设。
如果数据样本在评估期之间变化很大或规模不足,这种简单性也会产生误导结果的风险。业务知识的应用和有效的细分可以部分减轻这种风险,但是如果我们在多个特征之间有复杂的关系,这就变得困难了。
4.统计检验
我们可以利用统计数据使我们的分析更加稳健,并避免在不同时期改变样本构成的缺陷。使用 statsmodels 库中的简单回归模型,我们可以详细分析结果。
由于这种方法在其他条件不变的原则下运作,我们的模型估计了每个特征对预测变量
y 的独立影响——在我们的情况下是每平方米的价格。只要可用特征和 y 之间的关系足够简单,可以用线性回归来预测,这就减轻了样本构成对分析周期之间价格变化的影响。
基础模型
在第一次尝试中,我选择了使用 SelectKBest 函数选择的 30 个热门功能,并为第三季度和第四季度的数据添加了一个热门功能,以将每平方米价格建模为 y。
首先,我们需要检查我们的模型是否能够根据提供的特征预测 y。值得检查我们的 R 平方。如果 R2 值非常低(<0.1) the relations between variables and y are too complex or too weak to make linear regression work. If the R2 value is close to 1 there is a risk that you omitted the constant which also makes gaining any insights in the following steps impossible. Once we are happy that the model is working at least moderately well we can proceed to examine its features.
The ability to analyze feature significance is a substantial advantage of the statistics-based approach. Examining if the p-value is below our chosen alpha allows us to determine if the given feature has any significant effect on our model or is actually only adding noise.
As I have chosen the standard 0.05 for alpha, all the p-values are significantly below, which means I can analyze their coefficients with some confidence that they are close to their actual effect on the price.
With this approach, we can see that the coefficient for “offer_date_q_2020Q4” is 269, which can be interpreted as the increase of price per m2 for Q4 compared to Q2 under the assumption of ‘all other things being unchanged or constant’. We can already see the change is 30% lower than the 379 PLN/m2 change in the overall average, which suggests that part of the price increase is caused by other factors in sample composition such increase in apartments quality.
Log model
We can expand further on this approach by modeling log(y) instead of y itself. The logic behind this approach shifts from trying to predict the absolute effect of each feature on y to trying to predict by how much % y will change in relation to each feature. This approach quite often provides better results, especially while working with skewed data such as prices. It also makes interpretation of coefficients translate into % changes in y instead of the absolute values.
It is important to remember that changing the explained variable from y to log(y), makes both models uncomparable in terms of model statistics such as AIC or Log-Likelihood or R-squared.
At this stage, it is hard to compare, which model works better. The main reason for the application of this type of model was the ability to interpret coefficients as relative changes to the price.
We can interpret the “offer_date_q_2020Q4” coefficient of 0.0248 as a standalone increase of price between Q2 and Q4 by around 2.5%.
Analyzing different coefficients can also provide interesting insights — as an example east_bank coefficient of -0.079 means that buildings on the East Bank of Vistula River have prices nearly 8% lower than exactly the same properties on the West Bank. Under the 其他条件不变原则,“完全相同”意味着除 east_bank 之外的所有特征都不变,这也包括根据其他地理特征的位置,例如到中心的距离。
5.摘要
如果你花了将近 10 分钟阅读这篇文章,你应该得到一些关于标题问题的可靠答案。我希望我能够证明,分析一种非统一商品的价格趋势,可能比乍看起来要复杂得多。另一方面,通过这篇文章我们设法收集了足够的证据,所以答案如下:
我们有足够的统计证据来支持我们的假设,即在所分析的三个季度中,价格会上涨。此外,与时间变量本身相关的价格上涨估计为 270 波兰兹罗提/平方米或 2.5%。
由于华沙房地产市场已经经历了十多年的快速价格上涨,一些人预计由于疫情的原因趋势会发生变化,价格的持续上涨可能会令人惊讶。另一方面,如果我们考虑到波兰在 2020 年的通胀率是欧盟最高的,接近 4%(根据欧盟统计局的数据),那么 5%的年化房价增长就是相对的价格停滞。
将统计测试的结果与普通平均价格的变化进行比较,我们可以看到,大约 30%的价格上涨与市场上可获得的物业的特征变化有关——第四季度市场上物业的整体质量略好于 Q2。更好的质量可能与位置、市场类型、楼龄或任何其他价格驱动因素有关。
我将在下一篇文章中使用高级分析来跟进这一分析,在文章中,我们可以调查增加的复杂性是否会提供不同的答案,并试验高级模型的更好灵活性是否能让我们获得对定价趋势的更多见解。
Django 如何快速开发可维护的 Web 应用程序
了解 Django Web 框架
凯文·Ku 在 T2 拍摄的照片
本帖原载于 内置博客 。原片可以在这里找到https://builtin.com/software-engineering-perspectives/django-overview-introduction。
Django 是 Python 中的一个高级 web 框架,它允许用户用最少的代码轻松快速地构建 web 应用程序。Django 框架遵循模型-视图-控制器(MVC)设计模式。这种设置简化了复杂的数据库驱动的 web 应用程序的开发。通过这些设计模式,Django 强调了组件的可重用性。它还遵循不重复自己(DRY)原则,通过抽象和数据标准化来避免冗余代码,从而减少软件中的重复。
Django 可用于各种 web 应用程序,包括客户关系管理系统(CRMs)、社交媒体应用程序、在线市场、按需交付应用程序等等。许多熟悉的网络应用程序目前都使用 Django,包括 Instagram、Dropbox、Spotify 和 Mozilla 等。根据 MVC 设计模式的广泛使用,您可能会怀疑它能够在 web 应用程序中实现快速开发、可伸缩性和安全性。
模型-视图-控制器
MVC 是设计 web 应用程序的一种流行的软件设计模式。它使用三个相互连接的组件将信息的内部表示与信息向用户显示的方式分开。
型号
第一个元素,模型,是 MVC 设计模式的主要组成部分。它充当 web 应用程序的动态数据结构,并且独立于用户界面。该模型还负责管理数据以及 web 应用程序的逻辑。在实践中,这种结构对应于 web 应用程序如何处理原始数据以及应用程序的基本组件。例如,如果您要创建一个跟踪您跑步的应用程序,模型类将定义一个“Run”类,该类具有相应的类属性,如英里、速度、时间、卡路里、海拔、心率和日期。
在 Django 的上下文中,模型是一个 Python 类,其中每个属性代表一个数据库字段。在我们的示例中,英里、速度、时间、卡路里、海拔、心率和日期属性都是数据库中的字段,模型类将定义这些字段并与之交互。Django 中运行类的结构如下所示:
“运行”类是运行细节的抽象。这很有用,因为它将运行的细节提取到一个与用户最相关的列表中。跑步的详尽描述可能包括与用户无关的信息。例如,除了以英里为单位报告跑步距离之外,距离还可以以英尺、公里和码为单位报告。这些附加信息对用户来说并不重要。该类允许您仅根据基本属性来简化跑步,如英里数、配速、时间、卡路里、海拔、心率和日期属性。
模型元素还允许您规范化数据,这有助于防止冗余和异常。冗余是指数据库在不同的位置保存相同的信息。由于模型元素被很好地定义,它们防止数据被复制并保存在多个地方。例如,如果地址字段出现在多个位置,则需要在每个位置对地址进行任何更新。这使得数据库容易出错,并可能导致不可靠/无意义的信息。数据规范化还有助于防止几种类型的异常。例如,它可以防止插入异常,即由于缺少其他数据而无法插入数据。它还可以防止删除异常,即由于删除其他数据而导致的数据意外丢失。
此外,Django 中的模型元素专注于使 web 组件简单和松散耦合。应用程序中的松散耦合意味着它的各个部分并不强烈地相互依赖。web 组件的松散耦合简化了开发人员的生活,因为他们可以轻松地添加新功能、更新现有功能和修复错误,而不必重写大量代码。这导致更快的软件更新和更好的用户体验。
视图
视图代码由所有与用户直接接触的功能组成。这些功能负责让事物看起来更好(UI),并决定用户与应用程序交互的方式(UX)。视图允许您指定您希望每个页面的外观。在我们的 run 应用程序中,您可以指定一致或特定的元素,如背景颜色、文本字体、导航栏和每个页面的页脚。
控制器
控制器代码将模型连接到视图。在实践中,这归结为在视图级别获取用户输入,并在模型中决定如何处理它。在 run app 示例中,控制器将从视图级别的用户输入中获取原始数据,并使用“run”模型类来构建运行的内容。鉴于此,控制器处理视图中的显示顺序,并使用新数据更新模型数据库。
可扩展性
在当前的技术环境下,构建 web 应用程序时,您必须考虑可伸缩性。虽然一个新应用的用户数量可能开始很少,但开发者应该为增长做好适当的准备。随着用户群的增长,活跃访问者和服务器请求的数量也在增长。 Django 使扩展变得容易,因为它允许你逐步增加你的用户群。它具有松散耦合的组件,这使得调试瓶颈变得容易。例如,使用 SQLite3 数据库,而不是 MySQL 或 Postgres 数据库,这是一个非常常见的问题。幸运的是,Django 允许您轻松地将数据从 SQLite3 数据库迁移到更强大的数据库,比如 MySQL 或 Postgres,只需修改两到三行代码。要证明它在扩展方面的效用,只要看看使用它的公司名单就知道了,包括 Spotify、Instagram 和 YouTube。
Django 特别支持水平扩展,这包括产生多台机器来服务请求总数中的一小部分。例如,如果您有 5,000 个请求,您可以在 10 台不同的机器上分别处理 500 个请求,而不是在一台机器上处理它们。Django 在这里很有用,因为它的特性允许您完全无状态地运行应用程序,这意味着服务器不会存储来自一个会话的信息供将来在另一个会话中使用。
无状态允许您扩展应用程序,降低 REST APIs 的复杂性,并轻松缓存请求的结果。在 Django 中,可以通过修改来启用无状态,将数据存储在远程数据库上,而不是存储在默认数据库上。这里的关键是 Django 使得在许多远程机器上运行应用程序变得简单明了,允许应用程序无状态运行。这是因为每个新会话独立于来自过去会话的客户端数据,这消除了可能出现的任何状态相关问题。由于这些特性,用 Django 构建的应用程序可以无缝地从 500 个用户扩展到 500,000 个用户。
安全
Django 的另一个吸引人的地方是它有许多免费的内置安全特性。
Django 提供的一种保护是防止跨站点脚本(XSS),从而保护用户的浏览器。Django 还可以防止跨站请求伪造(CSRF),这可以防止攻击者在另一个用户不知情或未同意的情况下使用该用户的凭证执行操作。最后,Django 可以防范 SQL 注入,防止未经授权的数据删除或数据泄露。与其他流行的框架相比,Django 有更多的内置保护。例如,Flask 是另一个流行的 web 框架,它依赖第三方软件来提供相同的保护。这给软件开发团队带来了更大的压力,他们需要通过确保第三方软件是最新的来监控安全性。由于 Django 提供了大部分免费的内置保护,因此在应用程序的生命周期内,更容易预先保护您的应用程序并监控安全性。如果你有兴趣进一步阅读,可以阅读 Django 关于安全性的文档,Django 中的 Security。
现在我们已经看到了 Django 的一些好处,让我们看看它在实践中应用的一个具体实例。Instagram 的用户体验和服务质量很大程度上是因为它的许多核心功能都是用 Django 编写的。例如,Instagram 使用 Django 应用程序 Sentry 进行错误报告。这使得 Instagram 开发者可以诊断 bug,修改代码,优化应用组件的性能。Instagram 也是建立在 Django 工具 Dynostats 之上的,该工具也允许您监控应用程序组件的效率。使用 Dynostats,开发人员可以监控用户请求、应用程序响应、应用程序延迟等。这使得开发人员可以轻松地确定应用程序变慢的原因,从而更快地找到解决方案。
结论
通过遵循 MVP 设计原则,Django 框架实现了 web 应用程序的快速开发、可伸缩性和安全性。Django 中模型的模块化架构使得更新/维护 web 应用程序的特定组件变得很容易,同时安全地保持其他组件不变。Django 不仅允许公司为他们的应用程序快速开发 web 组件,还允许公司对不断增加的复杂代码进行小的修改。此外,Django 防止了大多数常见的安全漏洞,从而节省了额外的开发时间。总而言之,Django 是一个非常棒的 web 框架,它通过 MVP 设计实现了快速开发,确保了安全性,并支持可伸缩性,从而消除了构建 web 应用程序的许多麻烦。
列类型如何影响数据仓库中的连接速度?
数据工程
受控实验
当我第一次在 Georgian 开始构建数据仓库时,我无法决定使用什么列数据类型作为我的表的主键。
我听说整数连接大大优于字符串连接,我担心随着数据的增长,连接性能会下降。
在操作世界的 SQL 数据库中,这个决定基本上是由开箱即用的自动递增的整数主键为您做出的。
然而,在数据仓库世界中,无论您是构建 Kimball、Data Vault 还是其他什么,您都需要明确地做出这个选择。
你可以生成一个整数,一个 UUID 字符串,或者散列你的键到一个单独的列中,这带来了很多好处。如果这还不够复杂的话,您的散列键可以存储为由字节组成的字符串,并且每个算法的输出长度可能不同。
这就带来了一个问题:
键的列类型如何影响数据仓库中连接的速度?
经过一番挖掘,我找到了一些事务数据库的基准,但这不是我想要的。从逻辑上讲,整数 一定要比字符串和字节串快,因为一般要扫描的字节比较少。但是……差了多少!?
知道答案似乎非常重要,因为在数据仓库中,一个错误的选择可能会增加十亿倍。
我终于在好奇心的压力下屈服了,决定在 BigQuery 上运行一个基准来为自己回答这个问题。
试验设计
我决定生成 500 万行随机数,并在以下类型的键上测试连接它们(没有缓存):
下面是我用来生成我想要连接的表的代码:
/* GENERATE_ARRAY has a limit of 1M rows
so I had to union a bunch of them together */
WITH
keys_1 AS (SELECT * FROM UNNEST(GENERATE_ARRAY(1,1000000)) AS key),
keys_2 AS (SELECT * FROM UNNEST(GENERATE_ARRAY(1000001,2000000)) AS key),
keys_3 AS (SELECT * FROM UNNEST(GENERATE_ARRAY(2000001,3000000)) AS key),
keys_4 AS (SELECT * FROM UNNEST(GENERATE_ARRAY(3000001,4000000)) AS key),
keys_5 AS (SELECT * FROM UNNEST(GENERATE_ARRAY(4000001,5000000)) AS key),
keys_union AS (
SELECT key FROM keys_1 UNION ALL
SELECT key FROM keys_2 UNION ALL
SELECT key FROM keys_3 UNION ALL
SELECT key FROM keys_4 UNION ALL
SELECT key FROM keys_5
),
keys_hashed AS (
SELECT
key,
MD5(CAST(key AS STRING)) as key_md5_bytes,
TO_HEX(MD5(CAST(key AS STRING))) as key_md5_str,
FARM_FINGERPRINT(CAST(key AS STRING)) AS key_farm,
SHA1(CAST(key AS STRING)) AS key_sha_bytes,
TO_HEX(SHA1(CAST(key AS STRING))) AS key_sha_str
FROM keys_union
)
SELECT *, rand() AS val FROM keys_hashed
下面是我用来测试 make join 的代码:
SELECT
t1.val, t2.val
FROM bq_benchmark.t1
JOIN bq_benchmark.t2
USING(<key column here>);
我对每种键类型运行了 30 次交互式连接查询,这样我就可以使用 Z 测试来测试平均查询次数之间的差异,并获得可靠的置信区间。
实验结果
在解释结果时,您可能会发现一些有用的定义:
**下限 90%置信区间:**真实的平均查询时间有 5%的概率低于这个数字。
**上限 90%置信区间:**真实的平均查询时间有 5%的概率比这个数字高。
**标准偏差:**衡量我们在样本中观察到的平均查询时间的偏差程度。
**均值估计的标准误差:**真实的平均查询时间与样本的估计平均查询时间的偏差。
每种列类型的查询次数统计
您可能也对上述数据的对比视图感兴趣。为了简单起见,我将只比较平均查询时间的差异,并忽略差异的置信区间(我在下面的 excel 下载中提供了该置信区间)。
平均查询时间的相对比较
结论
这是我从这个实验中得到的一切。
- 整数比字节快大约 1.2 倍的 T4,比字符串快大约 1.4 倍的 T6。
- 如果您可以访问 FARM_FINGERPRINT,并且您只使用 BigQuery,那么继续使用它(您可以在以后切换它)
- 否则,简单地使用 MD5 作为你的散列函数存储为字节。
- 如果你选择使用字符串,不要像我一样使用十六进制编码。Base64 编码将产生更小的字符串,因此查询时间比这更快(但不如原始字节快)
我已经把我的整个实验做成了 Excel 表格供你下载。我已经让它简单易用了。您可以随意向其中添加自己的数据,并在您选择的数据仓库上进行实验!
点击此处下载 Excel 表格
这篇文章最初发表在 Show Me The Data 博客上,并被重新格式化为 Medium 格式。
数据科学家如何使用 Twitter?让我们数一数
阅读清单
从 TDS 档案中发现一些最好的 Twitter 数据分析。
图片作者在拍摄时暂时不在 Twitter 上。
有趣的是,你似乎可以在 Twitter 上,或者你可以尝试在生活中找到快乐、健康和平衡,但不能两者兼得。在我的时间线中,作家、记者和小众食物评论者组成了一个相当多样化的阵容。把我们团结在一起的是一种强烈的矛盾心理——是的,我在这里装腔作势——关于空间本身:我们不能离开的“地狱”。
过去几周对 TDS 档案的挖掘产生了意想不到的效果,暗示了一种不同的可能性——甚至是另一种现实。这里有几十个数据科学家和人工智能专家在 Twitter 上花费大量的时间……用它做富有成效的事情?!不会陷入越来越疯狂的绝望漩涡?!画出关于世界的深刻见解?!?!
这怎么可能呢?
现在我很清楚,我把这个平台作为新闻的主要来源,极大地改变了我对它的看法。如果你大部分时间都在推特上关注[ 随意地、不加选择地向世界挥手],那么有理由认为,你对新闻的情感最终会与你对该应用的情感融合在一起。另一方面,退一步分析其他人和社区如何使用这个平台—Twitter 由于其强大的 API 而使之成为可能——让自己变得幸福超脱(或者至少是一种表象),这是我希望有一天也能实现的。
为了证明我的观点,这里有一些我最喜欢的 TDS Twitter/数据科学交叉帖子——阅读它们!所有的,其中一些,一对夫妇;你不会后悔的。这个档案运行 极其深入,所以我在经过一些主要过滤后收集了这个集合,分为三个类别:新的和值得注意的,实际操作的资源,和空前的伟人。让我们开始吧。
新的和值得注意的
我说过我使用 Twitter 主要是为了看新闻吗?原因是这个平台不可否认的捕捉政治和文化瞬间的能力——有时它就是那个瞬间。从黑人的命也是命(以及公司偶尔以令人担忧的方式将自己与社会运动联系在一起),到 Twitter 用户在假期对网飞热门单曲 Bridgerton 的欢欣鼓舞的接受,这些最近的帖子应用数据科学的工具深入研究了这样的时刻,并且做得非常好。
实践资源
我们的许多读者来到 TDS,因为我们的社区是他们在工作、学习或激情项目中面临的实际挑战的答案。Twitter 数据分析也不例外,这里收集的帖子清晰地、一步一步地说明了如何收集、清理、处理和从推文中提取见解。
</12-twitter-sentiment-analysis-algorithms-compared-23e2d2c63d90>
空前的伟大
是的,我们关于这个话题的档案是巨大的,但是一些帖子——不像大多数推文!——真正经受住了时间的考验,今天仍然和作者第一次出版它们时一样尖锐和引人入胜。它们涵盖了广泛的话题,从 Twitter 自己的招聘过程到检测推文中语言标记的抑郁迹象。但是首先:可爱的 DOGS 。
</4-tips-you-need-to-know-on-nlp-from-a-twitter-data-scientist-635206c817e9>
请告诉我们以上是否有你特别感兴趣的。还有:你是否读过一篇很棒的帖子——在这里或者在另一个网站上——介绍了一个与 Twitter 相关的数据项目?你自己写过吗?请在评论中与我们分享。还有:在未来的阅读清单中,你还想看到我们涉及的其他主题吗?也告诉我们。
决策树和随机森林是如何工作的?1b
回归树
杰里米·毕晓普在 Unsplash 上的照片
在本系列的第 1 部分中,我谈到了决策树是如何工作的。(如果你还没看过那篇文章,我建议你回去读一读再继续。去吧。我会等的。)那篇文章主要集中在分类上,例如是/否、活/死等。好吧,决策树也可以用于回归——例如,预测一个连续变量。决策树的许多方面都是相同的,但是预测答案的方式略有不同。
对于这篇文章,我将使用来自 Dockship.io 挑战赛的数据集:发电厂能源预测人工智能挑战赛。这项挑战使用四个输入变量来预测发电厂的能量输出(PE)。以下是数据集中的前六条记录:
作者截图
在哪里,
- AT =环境温度
- AP =环境压力
- V =排气速度
- RH =相对湿度
回归树所做的是对某一组条件取平均值,并将其用作预测。整个数据集的 PE 平均值是 454.31,所以这是对根节点的预测。
如果您还记得第 1 部分,在分类树中,熵用于决定如何将数据分成不同的分支。熵本质上是无序或不确定性的度量。对于连续变量,我们可以使用标准差(SD)来达到同样的目的。然后我们想尽可能地降低整体标准差。我们数据集的标准偏差是 17.06。计算总体标准差的方式与我们之前计算总体熵的方式非常相似——它只是一个加权平均值。将分数百分比和每个分数的标准偏差的乘积相加。
所以,让我们从温度开始,从平均温度 19.68 开始。如果我们观察功率输出的平均值和标准差,我们得到:
作者截图
在这里,我们看到标准偏差通过这种简单的分割大大降低了(从 17.06 到 9.12)。如果 AT 小于 19.68,这个极其简单的模型将预测 469.42 的功率输出,如果 AT 为 19.68 或更大,将预测 440.71 的功率输出。
如果我们用其他三个输入变量的平均值做同样的事情,我们得到:
作者截图
由此,我们看到平均温度为我们提供了最佳的 SD 降低。当然,正如我们在第 1 部分中看到的,我们不必(也不应该)满足于此。例如,如果我们以中位数(20.32)而不是平均值分割温度,我们得到的总标准差为 9.22,减少了 7.84。所以平均温度是一个比中位数更好的分割值。该算法将为每个变量尝试不同的分割值,以获得可能的最佳 SD 减少。
一旦我们有了第一次拆分,我们可以尝试进一步拆分前两个组。然后这些可以被分割,等等。这是从 R 的 rpart()函数得到的树,带有标准参数。(注意:只有整个数据集的 70%被用作创建此决策树的训练集。)
作者截图
如您所见,在这个决策树中,只有两个变量是有用的。如果我用这个作为预测模型,你会发现它非常粗糙。毕竟只有五个叶节点,你的预测只能得到五种可能的答案。
作者截图
这是回归树模型的一个局限性。它处理平均值。一个相关的限制是 它不能外推训练数据之外的 。毕竟你不可能得到一个小于最低值或者大于最大值的平均值。
虽然我们对后者的限制无能为力,但我们可以避开前者。如果我们可以创建许多略有不同的决策树,我们可以得到许多不同的可能叶节点,以及许多不同的可能答案。如果我们可以将所有不同树的结果平均,我们可以得到更好的预测能力。这就是随机森林的用武之地,这将是本系列下一部分的主题。
进一步阅读
[## 决策树和随机森林是如何工作的?
towardsdatascience.com](/how-do-decision-trees-and-random-forests-work-66a1094e6c5d)
决策树和随机森林是如何工作的?1a
决策树
在 Unsplash 上veeterzy(Vanja ter zic)拍摄的照片
决策树和随机森林是预测建模中两种常用的算法。在这篇文章中,我将讨论决策树背后的过程。我计划在第二部分继续讨论随机森林,然后比较两者。
首先:决策树。决策树是根据出来的图形的形状来命名的。下图显示了一个决策树,用于确定哪些因素影响了泰坦尼克号灾难中的幸存者。
作者吉尔金——自己的作品,CC BY-SA 4.0,https://commons.wikimedia.org/w/index.php?curid=90405437
在我们继续之前,我应该介绍一些术语。树中的每个分支点称为一个节点,代表一个包含起始数据集的部分或全部记录的数据集。按照“树”的主题,顶部(或起始)节点也称为根节点。这包含数据集的所有记录(行、个人,无论您想如何称呼它们)(或者至少是您想要包含的所有记录)。树从这个根开始生长,给我们更多的节点,直到它生成终端节点(即,那些没有被分割的节点)。这些终端节点被称为叶子。上面的树有四片叶子。每个都标有该节点的最终预测。
有两种类型的决策树:分类和回归。分类树预测因变量的类别——是/否、苹果/橘子、死亡/幸存等。回归树预测数值变量的值,类似于线性回归。回归树需要注意的一点是,它们不能像线性回归那样在训练数据集范围之外进行外推。然而,与线性回归不同,回归树可以直接使用分类输入变量。
虽然 Titanic 决策树显示了二叉分裂(每个非叶节点产生两个子节点),但这不是一般的要求。根据决策树的不同,节点可能有三个甚至更多的子节点。在本文的其余部分,我将集中讨论分类决策树,但是回归树和分类树的基本思想是一样的。
最后,我将提到这个讨论假设在 r 中使用 rpart()函数。我听说 Python 不能直接处理类别变量,但是我对 Python 不太熟悉,尤其是对于数据分析。我相信基本理论是一样的,只是实现方式不同。
决策树是以迭代的方式创建的。首先,扫描变量以确定哪一个给出了最好的分割(稍后将详细介绍),然后基于该确定将数据集分割成更小的子集。然后再次分析每个子集,创建新的子集,直到算法决定停止。这个决定部分由您为算法设置的参数控制。
这种划分是基于对所讨论的数据集(或子集)的预测有多好。上面的巨大决策树最初基于性别创建了两个子集,这两个子集具有更好的预测价值。如果我们看看泰坦尼克号的例子,icyousee.org 报告说总存活率是 32%。看上面的决策树,我们看到 73%的雌性存活了下来。总结整个树,我们可以生成以下规则:
- 如果乘客是女性,她很可能幸存(73%的几率)
- 如果乘客是男性,那么存活率取决于年龄和机上兄弟姐妹的数量。
- 没有兄弟姐妹的年轻男孩很有可能存活下来(89%的几率)
- 大多数雄性都不走运
从现在开始,我将使用我创建的人工数据集,记录 10 名成年男性和 10 名成年女性的身高和体重。(身高是根据 CDC 研究的实际平均值和百分位数随机生成的——见下文。基于身高值加上身高和体重标准偏差生成体重。见最后的 R 代码。)
作者创建的表格和数据
让我们看看我们是否可以使用这个数据集来预测一个个体是男性还是女性。如果我们随机选择一个人,我们有 50%的机会得到一个男性或女性。有了一个像样的预测模型,我们应该可以做得更好。男性往往更高,更重,所以也许我们可以使用其中一个或两个变量。
决策树使用一种叫做熵的东西来告诉我们我们的预测有多确定。在物理术语中,熵指的是系统中无序的数量。这里也是一样。如果熵为零,就没有无序。只有当我们完全确定从数据集中挑选某人时,我们知道会得到什么,这种情况才会发生。不要期望这在现实生活中发生——永远不要。然而,我们确实希望熵尽可能的低。存在两个类的数据集的熵计算如下:
作者创建的所有方程式图像
其中:
- S =数据集的熵
- p₁ =个人属于 1 类的概率
- p₂ =个人属于类别 2 的概率
对于原始数据集,S = 1,这是该方程可实现的最大无序度。你自己试试吧。确保您使用的是以 2 为基数的对数。使用基数 2 并不重要,但这是获得最大值 1 的唯一方法。(注意:如果特定数据集只包含一个类,则不存在第二个术语。如果一个因变量有两个以上的可能值,就会增加额外的项。)
在决策树中拆分数据集时,总熵是用子集熵的加权平均值计算的,如下所示:
其中:
- Sₜ =分裂后的总熵
- Sₓ =子集 x 的熵(即,S₁ =子集 1 的熵)
- fₓ =进入子集 x 的个体比例
任何点的总熵都是从所有当前叶节点计算的(即使它们以后可能会分裂)。例如,在早期的泰坦尼克树中,总熵在第一次(性别)分裂后有两个( f S )项,在第二次(年龄)分裂后有三个项,在第三次(兄弟姐妹)分裂后有四个项。
决策树算法将查看不同变量的不同值,以根据原始值的熵减少来确定哪个给出最佳分割。
让我们用身高/体重数据集来分析一下。先以体重为分界点。女性的平均体重是 177 磅,而男性的平均体重是 201 磅。让我们在两者的中点分开(189 磅)。这将给我们两个子集:
- 子集 1 (< 189 磅,预测女性)有 6 名女性和 3 名男性(总共 9 名)
- 子集 2 (≥ 189 磅,预测男性)有 4 名女性和 7 名男性(共 11 名)
根据这些信息,我们可以计算两个子集的熵:
和
亲爱的读者,我将把证实第二熵的任务留给你。为了计算分裂的总熵,我们使用等式 2。
所以通过分解 189 磅的重量,我们得到了熵的轻微减少。决策树算法会检查许多值,看它们是否会给出更好的结果。结果是,如果我们把分裂值降到 186 磅,总熵会降到 0.88。
当然,我们也可以尝试基于身高的拆分。让我们从均值的中点开始。这将给我们一个 66.2 英寸的分割值。通过这种分割,我们得到以下两个子集:
- 子集 1 (< 66.2 英寸,预测为雌性)有 9 只雌性和 2 只雄性(总共 11 只)
- 子集 2 (≥ 66.2 英寸,预测男性)有 1 名女性和 8 名男性(共 9 名)
有了这些信息,我们可以计算这种分裂的熵:
这比使用权重进行分割要好得多。但是如果我们将分裂点提高到 68.2 英寸,我们可以做得更好,总熵为 0.51。现在我们的决策树有了第一次分裂。接下来,该算法将检查这些子集中的每一个,以查看它们是否可以再次被分割,这次是基于权重。这样做可能会让我们得到更好的熵,但我们分裂得越多,我们就越有可能过度拟合数据。请记住,我在这里只采样了 20 个人,其中一些看起来像异常值(例如,最高的女性体重最轻)。对于包含许多变量的大型数据集,您可能会得到一个真正混乱的决策树。有几个参数可以用来限制这一点,但这超出了我想在这里讨论的范围。
在以前的帖子中,我谈到了使用 rattle 来帮助学习 r。事实证明,Rattle 包对决策树有很好的绘图功能。这是我通过 Rattle 的决策树算法运行数据集时得到的图像,使用标准参数(注意,它只在一次分割后就停止了):
作者图片
这个情节有很多特点,我现在就来介绍一下。
- 颜色对应预测的性别(绿色=女性,蓝色=男性)。
- 节点 1(也称为“根节点”)具有 50/50 的性别比例,并且占观察值的 100%。它的绿色意味着如果它必须从这组动物中预测性别,它会选择雌性。
- 在这个节点下面,我们看到第一次拆分。如果高度< 68 inches, then we predict female. Otherwise, we predict male.
- Node 2 accounts for 65% of the dataset and has a 77/23 split of females to males. Its green color means that everybody in this subset is predicted to be female
- Node 3 accounts for 35% of the dataset and is 100% male, which is why it’s blue.
The biggest benefit of decision trees is the ease of understanding. They’re easy to read and it’s easy to see how the model made its prediction.
In part 2, we will investigate random forests, and see how they compare to decision trees.
Further Reading
https://www.cdc.gov/nchs/fastats/body-measurements.htm http://www.icyousee.org/titanic.html https://www.amazon.com/gp/product/1441998896/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1441998896&linkCode=as2&tag=medium0074-20&linkId=42b704775edff7eb2f7eef0d5185e66f
(Note that the Amazon link above is an affiliate link.)
R Code
创建数据集
# Data from [https://www.cdc.gov/nchs/data/series/sr_03/sr03-046-508.pdf](https://www.cdc.gov/nchs/data/series/sr_03/sr03-046-508.pdf)
# means are directly retrieved from report
# SDs are estimated from 15th and 85th percentiles
library(dplyr)
set.seed(1)# Weight of Females over 20 - Table 4 - excludes pregnant females
FWnum <- 5386 # number of females in sample
FWmean <- 170.8 # mean weight of females, in pounds
#15% = 126.9
#85% = 216.4
#diff / 2 = 44.75
FWSD <- 44 # estimated std dev, in pounds# Weight of Males over 20 - Table 6
MWnum <- 5085 # number of males in sample
MWmean <- 199.8 # mean weight of males, in pounds
#15% = 154.2
#85% = 243.8
#diff / 2 = 44.8
MWSD <- 44 # estimated std dev, in pounds# Height of Females over 20 - Table 10
FHnum <- 5510 # number of females in sample
FHmean <- 63.5 # mean height of females over 20, in inches
#15% = 60.6
#85% = 66.3
#diff / 2 = 2.85
FHSD <- 2.8 # estimated std dev, in pounds# Height of Males over 20 - Table 12
MHnum <- 5092 # number of females in sample
MHmean <- 69.0 # mean height of females over 20, in inches
#15% = 66.0
#85% = 72.0
#diff / 2 = 3.0
MHSD <- 3 # estimated std dev, in pounds# create 10 normally distributed female heights
FemaleHeight <- round(rnorm(10, mean = FHmean, sd = FHSD), 1)# Calculate weight based on comparison of height to mean height
FemWCorrel <- FemaleHeight/FHmean * FWmean
# throw in some random deviation based on weight SD
FemWAdj <- rnorm(10, sd = FWSD/2)
FemaleWeight <- round(FemWCorrel + FemWAdj, 0)
F <- data.frame(Height = FemaleHeight,
Weight = FemaleWeight,
Gender = "F")# create 10 normally distributed male heights
MaleHeight <- round(rnorm(10, mean = MHmean, sd = MHSD), 1)
# Calculate weight based on comparison of height to mean height
MaleWCorrel <- MaleHeight/MHmean * MWmean
# throw in some random deviation based on weight SD
MaleWAdj <- rnorm(10, sd = MWSD/2)
MaleWeight <- round((MaleWCorrel + MaleWAdj), 0)
M <- data.frame(Height = MaleHeight,
Weight = MaleWeight,
Gender = "M")df <- rbind(F, M)
我如何成为一名数据科学家?学习数据科学的四个基本策略
图片来自 geralt
有抱负的数据科学家会经常向我询问学习数据科学的最佳方法。他们应该尝试训练营或参加在线数据科学课程,或者其他无数的选择吗?
在过去的几年中,我们看到了许多不同类型的教授数据科学的教育计划的发展,从免费的在线教程到训练营到大学的高级学位,疫情似乎已经促进了更多计划的建立,以满足日益增长的远程学习需求。虽然总体来说可能是一件好事,但有更多的选择增加了决定选择哪一个的复杂性,也增加了推销其服务的程序的潜在噪音。
本文是对四种基本类型的数据科学教育计划的高级调查,旨在帮助您思考哪种计划最适合您。在不了解数据科学的情况下,很难评估一个项目在教授数据科学方面有多有效。希望这篇文章将有助于打破这个先有鸡还是先有蛋的难题。
这是学习数据科学的四种基本方法:
- 自己动手学习
- 在线课程
- 训练营
- 数据科学(或相关领域)硕士学位或其他大学学位
我将按从最便宜到最贵的顺序讨论它们。我还包括了两种混合策略,这两种策略结合了一些值得考虑的策略。下表提供了每一项的简要概要:
图片来自 Anastase Maragos
选择 1:在网上自己动手
有大量免费的在线数据科学资源,可以从头开始教授数据科学,也可以解释您可能想知道的任何数据科学内容。这些内容包括为那些像 W3Schools 一样通过做来学习的人提供的教程,YouTube 和其他网站上为音频学习者提供的视频,如吴恩达的 YouTube 系列,为喜欢阅读的视觉学习者提供的文章,如走向数据科学。你可以上网自学。它的优点是自由和完全灵活,可以根据你的时间表量身定制。
但作为一名前教师,我发现自主学习并不适合每个人。你必须完全自我激励和自我组织才能这样自学。所以,了解你自己:你是那种能像这样完全独立地学好的人吗?
教育项目往往会提供这些资源,如果你单干,可能会缺乏这些资源:
1)课程监督:任何教育项目中的数据科学专家通常会为您建立某种数据科学课程,其中包括该领域的必要主题。许多数据科学新手还不知道哪些数据科学概念和技能是最需要学习的。这对自学者来说是一个先有鸡还是先有蛋的问题,自学者必须至少了解一点这个领域,才能知道首先要学习的最重要的内容。数据科学课程通过给你一个初始课程来帮助你避开这个问题。
2)领域规范的指导:除了教授材料,教育计划隐含地向学生介绍数据科学规范和思维方式。尽管有时会偏离既定的习惯,但当第一次与数据科学家同事一起在团队中工作时,这是很重要的。有时,自学者学习文字材料,但没有收集隐含的观点,使他们能够融入数据科学社区。
3)外部社会责任:教育项目提供了一种社会责任形式,潜移默化地鼓励你完成工作。自学者必须几乎完全依靠自己的自我激励和自我负责,以我的经验来看,这对一些人有效,但对另一些人无效。
4)社会资源:教育项目(尤其是面对面或虚拟会面的项目)提供了各种各样的人——老师、学生,在某些情况下还有学员/下属——可以与他们一起讨论问题,帮助你发现自己的弱点和缺点,并确定解决它们的方法。初学者很容易忽略的微小编程细节,但专家可能很容易发现,这可能会导致整个程序失败。要独立学习,你必须自己解决所有这些问题,或者找到愿意帮助你的数据科学朋友或家人。
5)技能认证:教育项目授予学位、等级和其他认证,作为你事实上拥有数据科学角色所需技能的外部证明。靠自己学习,你必须靠自己向雇主证明你有这些技能。开发一个发人深省的项目组合,你所做的就是证明这一点的最佳方式。
6)形成项目的指导:一个令人印象深刻的项目可以创造奇迹,展示你的数据科学技能。根据我的经验,数据科学的初学者通常还不具备创建、完成和营销一个发人深省但可行的项目的技能,而数据科学教育工作者最重要的角色之一就是帮助学生思考如何开发一个项目。一个人学习的时候一定要自己做到这一点。
人们可以克服这些缺陷。我发现,对于独立学习的人来说,它的成本和灵活性优势很容易超过这些缺点。因此,关键问题是,这种形式的独立学习对你有用吗?以我的经验来看,它对相对较少的人有效,但是对那些有效的人来说,它是一个很好的选择。
如果你决定自学,我建议你考虑以下几点:
1)在制作材料时,对你的学习风格要认真负责。例如,如果你是一个视觉学习者,那么阅读在线材料资源将是最好的,但如果你是一个听觉学习者,那么我会建议你在 YouTube 上观看视频教程/讲座。
2)如果您有愿意帮助您的数据科学朋友,他们可能是一笔巨大的财富,特别是在确定要学习哪些数据科学资料、解决您可能遇到的任何编码问题和/或开发一个好项目方面。
3)一般来说,人们通过学习数据科学来学习数据科学。避免只阅读数据科学的常见陷阱,而不亲自动手做实验(最好是不干净、令人讨厌、真实世界的数据,没有经过修整的“教科书般完美”的数据)。首先使用原始数据来学习概念是好的,但是要确保你能够用真实生活中的脏数据来练习。
图片来自穆罕默德 _ 哈桑
选项 2:在线课程
网上课程有各种各样的 T2 形式。大部分都比较便宜(通常一个月 20-50 美元左右,或者每个课程 100-200 美元)。例如,在撰写本文时,Udemy 有一门数据科学入门课程,统一收费 94.99 美元,Coursera 有一门课程每月收费 19.99 美元(两者的价格都因折扣和其他特殊交易而异)。在线课程通常是你能报名参加的课程中最便宜的,而且由于 most 的长度,你可能需要参加几个级别的课程(入门到高级)来学习这个领域。
另一个优点是他们很灵活:你可以根据你的时间表的需要,按照你自己的速度学习。这对那些一边工作一边学习的人来说真的很有价值,因为他们有家庭责任和/或其他义务使他们的时间表变得复杂。请记住,虽然,因为你经常每月支付,你需要几个月往往决定了最终的成本。说到底,多花 100 美元左右,再花几个月完成课程,仍然比其他课程选择便宜得多。
然而,另一方面,就像自己做一样,他们往往缺乏课堂学习的社会效益:教师提问并提供外部社会责任,同学们一起工作。以我的经验来看,这对一些学习者来说是一个很大的挑战,但是其他人相对来说不会受到它的影响。
此外,许多在线课程更多地提供了数据科学的粗略总结,缺乏学习数据科学和向他人推销自己所必需的复杂项目。即使有例外,在线课程通常擅长介绍数据科学概念,而不是深入探索。许多人专注于已经清理好的现成数据中的罐装问题,而不是让您在大多数数据科学家实际工作中必须使用的杂乱、复杂、通常只是简单而愚蠢的数据上练习。他们还经常缺乏一对一辅导的人员,通过复杂数据的投资组合建设项目来指导每个学生。
因此,在线课程往往会提供良好、经济高效的数据科学介绍,有助于了解您是否喜欢该领域(参见下面的混合#1),但通常不会提供成为数据科学家所需的精细培训。现在,一些项目正在发展他们的课程。特别是随着疫情对远程学习需求的增加,在线学习平台正在开发更强大的在线数据科学课程。如果你选择通过参加在线课程来学习,我建议用你自己的项目来补充,以获得实践数据科学工作的经验,并在求职面试中展示。
图片来自 Jukan Tateisi
混合#1:使用在线课程介绍数据科学(或编程)
如果你对数据科学完全陌生,在线课程可以提供一个低成本的结构化空间,让你了解这个领域需要什么,并确定它是否适合你。我看到许多人参加了几千美元的训练营或大学学位课程,却发现他们不喜欢从事数据科学工作。在线课程是辨别这一点的一个更廉价的空间。
你总是可以自己免费探索数据科学,以决定你是否喜欢它(见选项 1),而不是参加在线课程,但我发现许多以前从未见过数据科学的人不知道在该领域查找什么来开始。一门介绍性的在线课程并不昂贵,而且对主要话题领域的初步定位也是值得的。
这种方法有三种基本版本:
1)如果你还不知道编程语言,参加在线编程课程。我在本文的中解释了为什么我会推荐 Python 作为学习的语言(Julia 紧随其后)。如果你不喜欢编程,那么你已经吸取了教训,你不应该成为一名数据科学家,即使你最终没有从事数据科学,编程也是一项非常有价值的技能,接受一些培训只会有助于你在大多数其他相关领域的职业前景。
2)如果你确实懂一门编程语言,那就去上一门数据科学入门课程。这些通常提供了数据科学的高级概述,对于需要与数据科学家一起工作并理解他们所谈论的内容的人来说尤其有用。如果你需要数学复习,这也是一个很好的选择。
3)我见过未来的数据科学家参加在线数据分析课程,为他们准备并确定他们对数据科学的潜在兴趣。然而,我不建议这样做。尽管数据科学家有时会将数据分析视为数据科学的“食谱”或“基础”版本,但数据分析是需要不同技能的不同领域。例如,数据分析课程通常不包括严格的编程。如果他们教编程的话,他们通常专注于 R 和 SQL,这些语言对于数据分析和统计来说是很好的语言,但对于数据科学来说还不够(对于数据科学来说,你可能需要像 Python 这样的语言)。数据分析和数据科学通常也强调不同的数学领域:例如,数据分析往往依赖于统计学,而数据科学依赖于线性代数。因此,你在这些课程中学到的东西并不像你想象的那样适用于数据科学。现在,如果你不确定你是否想成为数据科学家或数据分析师,那么数据分析课程可能会帮助你了解和感受数据分析,但我不会用它们来评估数据科学是否适合你。
完成在线课程后,如果您仍然认为自己喜欢从事数据科学工作,那么您可以选择任何选项来更深入地学习该领域。这似乎只是让你回到起点,但通过参加一门介绍性的编程或数据科学课程,可以说你已经让自己变得更好,并且更准备好面对成为数据科学家的“老板之战”。
图片来自heylogostechie
选项 3:数据科学训练营
数据科学训练营也变得流行起来。他们往往是几个星期长(以我的经验,通常是 2 到 6 个月)的强化训练项目。传统的疫情前训练营是面对面的,通常花费大约 10,000 到 15,000 美元。梅蒂斯人的训练营很好地展示了他们通常的样子。
它们最大的优点是,与获得大学学位相比,它们能以更低的成本和更少的时间提供课堂教育的优势。与之前的选项相比,它们在成本方面有了显著提高(见下面的第 2 个选项),但它们试图以低得多的价格和很少的时间提供与数据科学硕士学位相当的(但学术上不太先进和深入的)知识范围。尽管这经常会让他们的步伐感觉紧张,但好的训练营往往能成功做到这一点。这使得他们成为任何想成为数据科学家的人的绝佳选择。最后,与前面的选项不同,你会有一位老师向你提问并激励你,还有一群同学和你一起思考概念。最好的项目提供职业指导,并在数据科学社区建立强大的网络,以帮助他们的学生以后找到工作。
然而,它们有一些主要的缺点:
1)他们能感受到快节奏,在短时间内理解复杂的概念。我的许多参加过训练营的朋友都报告说感觉到了认知上的扭伤。预计那几周/几个月会是精神紧张的,会淹没你的生活。数据科学训练营通常是朝九晚五的全职工作,你可能会在晚上或周末精疲力尽,无法做其他事情(而且在某些情况下,你无论如何都要完成作业)。对于这样的考验来说,几周或几个月的时间并不算太长,但这让他们比之前的选择更不灵活。例如,这迫使许多学生从目前的工作中抽出时间来完成训练营,并在训练营期间尽可能多地限制他们的社会、家庭和其他义务。这使得那些无法从工作中抽出时间,忙于社交或家庭生活,或其他许多事情的人很难做到。
2)几千美元,显然比以前的选择要贵得多(但仍然比大学便宜得多)。一些学校根据需要提供奖学金和其他服务,但即使这样,不得不暂停工作的机会成本仍然很高。鉴于他们普遍的高薪,获得一份数据科学的工作可能会收回投资,但这需要大量的初始投资。
这使得它对于任何考虑数据科学但不确定是否想做的人来说都是一个非常糟糕的选择。10,000 美元对于简单地了解你不喜欢这个领域来说是一笔很大的开支,而且有许多更便宜的方法来初步探索这个领域(尤其参见混合#1)。然而,对于任何真正想成为数据科学家但还不具备关键技能和知识的人来说,这个成本可能还是值得的。
3)在写这篇文章的时候,新冠肺炎疫情已经迫使大多数数据科学训练营进行远程会面,使他们的服务更类似于便宜得多的在线课程。也就是说,许多人寻求虚拟模拟课堂环境,试图提供某种类型的社会环境,但课堂环境是一个主要优势,使他们比以前的选择显著增加的成本是值得的。
4)它们往往存在于大城市(尤其是科技中心)。例如,美国的训练营往往集中在纽约市、洛杉矶、芝加哥、旧金山等地。在疫情之前,任何不住在这些地方的人都必须旅行并临时居住在他们选择的训练营所在地,这是一笔额外的费用。
5)对于不了解编程的人和不了解大学水平的数学如线性代数、微积分和统计的人来说,它们通常很难。如果你不懂编程,我建议你先通过廉价的在线课程和/或在线教程来学习像 Python 这样的编程语言(更多信息请参见我写的这篇文章解释了为什么要学习所有语言的 Python)。一些数据科学训练营提供预备入门在线课程,为那些不懂的人教授必要的编码和数学技能。它们也值得考虑,但是请记住,同等的在线课程在教育价值大致相同的情况下可能更便宜。
如果你决定参加训练营,在研究选择哪个训练营时,这些标准很重要:
1)项目导向:它们在多大程度上使您能够通过项目组合构建项目实践数据科学,以及它的校友所做的项目给人的印象如何?最好的数据科学训练营通常以面向项目的方式授课。
2)找工作资源和/或工作保障:他们给你什么资源或辅导,帮助你事后找工作?例如,帮助建立关系网、展示自己和面试是找到数据科学家工作的重要技能,除了教你技术课程,最好的项目往往会找到职业教练,专门帮助你寻找工作。此外,一些项目提供工作保证:如果你毕业后几个月没有找到数据科学的工作,他们会退还学费。这通常表明他们把找工作看得足够重要,以至于不惜自己的钱去冒险(尽管要检查保证书上的细则,看看他们同意的确切条款)。
3)校友资源:一个令人惊讶的重要细节是,训练营在培养校友网络方面投入了多少资源。我很惊讶地发现,我是多么容易接受与网上训练营的校友见面/建立关系网,而且校友们对训练营是多么的满意。训练营努力与校友一起工作并保持关系,这一点影响很大。在远程研究项目时,与明矾的联系可能很难评估,但询问你是否可以与明矾交谈以了解他们对该项目的体验,查看训练营明矾在 LinkedIn 和其他社交媒体网站上的活动,并询问他们促进了哪些与明矾的社交机会,这些都是评估项目对培养关系的有意程度的好方法。
4)奖学金选项:一些项目根据需要提供全额或至少部分奖学金。显然,降低训练营成本的方法会很好,特别是如果训练营对你来说似乎是一个理想的选择,但成本似乎太令人生畏。
图片来自布鲁克·卡吉尔
混合#2:在线训练营
在线训练营往往拥有在线课程的时间安排灵活性,但提供更严格的个人(尽管是远程)学习,允许您结合数据科学训练营和在线课程的最佳方面。它们通常也比传统训练营便宜(但也比在线课程贵)。最后,对于那些不住在碰巧有本地数据科学训练营项目的大城市的人来说,他们往往是更好的选择。如果说有什么不同的话,那就是疫情可能帮助产生了更多的在线训练营项目,因为它迫使数据科学训练营进行虚拟教学。
2017 年,我参加了跳板的在线数据科学训练营,这是在线训练营的一个很好的例子。当时,他们的费用大约是每月 1000 美元(在撰写本文时,他们的标准费用是每月 1490 美元,并表示他们的计划通常需要六个月)。这比传统的训练营便宜,但仍有一些为期六个月的总费用在 10,000 美元左右。他们有典型的在线课程,但也提供每周与讲师的虚拟会议,讨论材料和你遇到的任何问题。现在他们似乎包括网上虚拟课程。这种个性化培训和远程课堂环境是在线课程的主要附加值,你必须评估对你来说,这些额外的费用是否值得。它们是自定进度的,与典型的训练营相比,在工作时间和频率上提供了更大的灵活性。如果你在毕业后的六个月内没有找到工作,他们也会退还你的钱。
如果你选择这个选项,请注意在线课程和传统训练营的潜在陷阱。就像在线课程一样,你需要评估自己是否适合自学课程(即使你可以一周见一次主要问题的导师,你也要在一周内自学)。像传统的训练营一样,预计学习将是精神紧张的,并确保他们帮助你开发投资组合建设项目,并提供求职资源和培训。
图片来自 A_Ginard
选项 4:硕士学位或其他大学学位
最后的选择是回到学校去获得数据科学的学位。这是最昂贵和最耗时的选择:硕士学位(如果你已经有学士学位,这是一个合理的选择)通常是最短的,需要两年时间。但它们的价格超过 10 万美元。即使部分或全额奖学金降低了这一成本,在学校度过几年的机会成本仍然高于其他任何选择。然而,如果你知道如何恰当地利用它,它可以提升你的简历,这可能会增加你的工资,以弥补最初的成本。如果你已经知道自己热爱数据科学(比如说,因为你已经在这个领域工作过,最好是你也已经搞清楚了你想做的数据科学的具体领域),但想把你的技能、技术和/或模型如何工作的理论知识提升到一个新的水平,我只会建议你去攻读硕士学位。
提高数据科学技能的最佳方式是学习数据科学:在实践数据科学时,寻找或创造推动你的环境。研究生院并不是提炼一个人的数据科学技能的唯一潜在环境(例如,如果做得好,所有之前的选择都可能涉及到这一点),即使研究生院在提供严谨性方面很棒,这些其他选择也可能更便宜、更灵活。最后,在撰写本文时,至少对数据科学家的需求超过了该领域的实际人数,因此在没有数据科学“官方”大学学位的情况下获得数据科学工作是非常现实的。
大学数据科学学位课程相对较新,通常只有几年的历史。因此,并不是所有的大学都有真正的数据科学学位或系,而是要求你注册一个相关的项目,如计算机科学、统计学或工程学,以学习数据科学。这并不总是意味着这些其他项目不好或没有帮助,但这通常意味着为了完成学位,你将不得不执行与数据科学本身无关或半无关的任务(在某些情况下,来自其他领域的教员的帮助很少)。
在考虑一个项目时,你应该确保他们积极主动地教授专业知识,而不仅仅是学术数据科学技能。这些是我会研究的具体问题,以评估它们对你从事非学术数据科学工作的准备程度:
1)他们的教师中有多大比例的人目前在行业中担任或至少曾经担任过数据科学家(或其他类似的职位)?
2)该部门与当地组织的关系如何,他们是否能够利用这些关系来帮助你通过勤工俭学项目或项目期间的实习和/或之后的就业与这些组织合作?
3)他们会帮助你将论文转化为应用数据科学项目,或者至少给你一定的灵活性,让你的简历在未来的雇主面前大放异彩吗?
如果你选择的项目缺乏这些,我强烈建议你在完成项目的同时,建立简历/投资组合提升项目,并与当地的数据科学家建立联系。这需要相当多的时间和精力,所以理想情况下,你的部门会积极地帮助你完成这项工作,而不是要求你在完成他们所有工作的同时独立完成。
融资选择是另一个需要考虑的问题。他们愿意为你的学位提供全额资助还是至少部分资助?在获得硕士学位的同时工作的勤工俭学项目是一个很好的方式,可以让你毕业时没有债务,并获得建立简历的工作经验(尽管它们会让你很忙)。在完成硕士学位的同时,我作为一名数据科学家受益匪浅,不仅因为我毕业时没有负债,还因为这让我能够练习和完善我的技能。
最后,大多数大学要求你住在附近,并且亲自出席(至少在疫情之前,可能在之后)。因此,如果附近没有数据科学学位项目,你可能不得不在附近找一个地方,或者愿意搬迁几年。如果是这样的话,你应该把搬家费用算进项目的成本中。
结论
学习数据科学可能是一个可怕而令人生畏的前景,找到适合你的策略是复杂的,特别是考虑到所有的教学、后勤和财务因素。希望这篇文章能帮助你思考如何前进。
此处原创发布:【https://ethno-data.com/data-science-training-programs/】T2*。有关该网站和其他文章的更多信息,请访问*https://ethno-data.com/。
也感谢《数据科学》杂志发表这篇文章。关于他们工作的更多细节,见 本 。