为什么你错用了 SNE 霸王龙
以及如何避免常见的陷阱(带代码!)
Source: https://datascienceplus.com/multi-dimensional-reduction-and-visualisation-with-t-sne/
t-SNE 已经成为一种非常流行的可视化高维数据的技术。从深度学习模型的内层提取特征,并使用 t-SNE 在二维空间中绘制它们以降低维度,这是非常常见的。不幸的是,大多数人只是使用 scikit-learn 的实现**,而没有真正理解结果和曲解**它们的意思。
虽然 t-SNE 是一种降维技术,但它主要用于可视化,而不是数据预处理(就像 PCA 一样)。出于这个原因,你几乎总是用 t-SNE 把维数降低到 2,这样你就可以用二维来绘制数据。
t-SNE 常用于可视化的原因是,该算法的目标是获取高维数据,并在低维中正确地表示它-因此,在高维中接近的点在低维中应该保持接近。它以一种非线性和局部的方式实现这一点,因此不同区域的数据可以进行不同的转换。
t-SNE 有一个超级参数叫做困惑。困惑平衡了 SNE 霸王龙对数据的局部和全局方面的关注,并对结果图有很大影响。关于此参数的几点说明:
- 这是对每个点的近邻数量的粗略猜测。因此,越密集的数据集通常需要越高的困惑值。
- 建议在 5 到 50 之间。
- 它应该小于数据点的数量。
人们在 t-SNE 问题上犯的最大错误是只使用一个值来表示困惑,而不测试结果如何随其他值变化。如果在 5 和 50 之间选择不同的值会显著改变您对数据的解释,那么您应该考虑其他方法来可视化或验证您的假设。
还忽略了一点,由于 t-SNE 使用梯度下降,您还必须为您的学习速率和优化器的步骤数调整适当的值。关键是要确保算法运行足够长的时间来稳定。
有一篇关于 t-SNE 的非常好的文章,讨论了以上大部分内容以及您需要注意的以下几点:
- 在 t-SNE 图中你看不到聚类的相对大小。理解这一点至关重要,因为 SNE 霸王龙会自然地扩大密集星团,缩小备用星团。我经常看到人们通过比较可视化中集群的相对大小来进行推断。不要犯这个错误。
- t-SNE 图中分离良好的簇之间的距离可能没有任何意义。另一个常见的谬误。因此,如果你的“海滩”集群比“湖泊”集群更靠近“城市”集群,不要感到沮丧。
- 一簇簇的点——尤其是具有小困惑值的点——可能只是噪声。因此,在使用小的困惑值时一定要小心。并且要记住总是测试许多困惑值的健壮性。
现在——正如承诺的一些代码!这段代码的一些注意事项:
- 在运行 t-SNE 之前,我首先使用主成分分析将维数减少到 50。我发现这是很好的实践(当有超过 50 个特性时),因为否则,t-SNE 将永远无法运行。
- 我没有显示上面提到的各种困惑值。我将把它留给读者做练习。只需用不同的困惑值多运行几次 t-SNE 代码,并比较可视化效果。
from sklearn.datasets import fetch_mldata
from sklearn.manifold import TSNE
from sklearn.decomposition import PCA
import seaborn as sns
import numpy as np
import matplotlib.pyplot as plt # get mnist data
mnist = fetch_mldata("MNIST original")
X = mnist.data / 255.0
y = mnist.target # first reduce dimensionality before feeding to t-sne
pca = PCA(n_components=50)
X_pca = pca.fit_transform(X) # randomly sample data to run quickly
rows = np.arange(70000)
np.random.shuffle(rows)
n_select = 10000 # reduce dimensionality with t-sne
tsne = TSNE(n_components=2, verbose=1, perplexity=50, n_iter=1000, learning_rate=200)
tsne_results = tsne.fit_transform(X_pca[rows[:n_select],:])# visualize
df_tsne = pd.DataFrame(tsne_results, columns=['comp1', 'comp2'])
df_tsne['label'] = y[rows[:n_select]]sns.lmplot(x='comp1', y='comp2', data=df_tsne, hue='label', fit_reg=False)
这是结果可视化:
我希望这是一个关于如何更有效地使用 t-SNE 和更好地理解其输出的有用指南!
你也可以在这里找到这篇文章。
加入我的 邮箱列表 保持联系。
当你最小化你的野心时,为什么你能作为一个开发者茁壮成长
Photo by Nicolas Cool on Unsplash
我们现在能做的事情太多了。
由我们来决定哪些事情需要我们立即关注,以及我们如何才能将其他事情从我们的关注中丢弃。
至少目前是这样,因为这样更有效率,也更有利于我们的理智。
我们不可能同时在纽约和新加坡。
我们都知道并且完全承认这一点。然而,当谈到我们的目标,以及我们生活中想要的东西时,我们很容易忘记这些。
或者至少我们没有意识到我们正在这样做。
我们想同时做 X、Y 和 Z,而这三者之间甚至没有任何联系。
我相信这是因为我们倾向于被许多事情吸引,并且相信我们能够并且需要做所有的事情。
我们可能希望掌握数据科学,同时,我们希望用 React Native 建立一个令人敬畏的生产力应用程序,获得 300 万次下载。在周末期间,我们还想掌握区块链,成为那里最好的开发者。
Photo by Samuel Ng on Unsplash
所有这些可能看起来是高尚的尝试,我们可能想成为对社会有益的人。我们可能打算在我们认为有价值的事情上投入时间,同时掌握多种技能。
但这确实是一件很难完成的事情。
我们可能已经注意到所有这些领域的质量下降。我们甚至不满足于我们的结果,也不满足于我们的生活因被分散而经历的退化。
我们可以注意到进展缓慢,这些不同领域的增长似乎没有超过令人讨厌的门槛。
事实是,我们可能只是在涉猎。
我们害怕去掌握真正重要的东西。
我们认为这是一生一次的机会,我们真的喜欢并相信它。
Photo by Japheth Mast on Unsplash
我们害怕,当我们在追求过程中遭遇重大失败时,我们会在别人面前出丑。脆弱,无法达到精通的水平。
这样,我们往往会借口我们缺乏克服这一障碍的勇气,以及我们未能达到我们目标的某一里程碑。
“当我已经有太多事情要做的时候,失败是显而易见的,”我们告诉自己,并用这些借口来逃避减少琐事的道路。
我们拍拍自己的背,我们已经在许多项目中展开,在许多不同的领域中,对我们来说,不能展示任何类型的有价值的结果是没关系的。我们甚至没有试图去改善它。
然后,我们开始新的事物,哪怕是一点点吸引我们的事物。那些在表面闪耀的东西,我们甚至没有考虑去触及表面,去注意我们是否在追求一些有用的东西。
致力于掌握
Photo by Vance Osterhout on Unsplash
我并不是说我们必须始终完全致力于一条道路,或一个目标,而忘记其他一切。
在某些情况下,我们可能需要一些实验,看看什么是重要的。一些你想掌握并用来帮助他人的东西。或者简单地认为这是一种精通的方式。
但是一旦你已经下定决心,不要让闪亮的物体分散你的注意力。
把你的全部精力和努力投入到你最重要的优先事项中,不要因为碰壁就满足于平庸。
我们忘记了真正的成功和成就是那些花费了很长时间的事情,那些达到这些成就的人经历了很多痛苦和努力。
我相信,我们目前拥有的许多机会可能会在未来 6-12 个月内出现。仅仅知道这一点就可以是一种巨大的解脱,因为我们可能会担心这个机会可能永远不会到来。
我相信,我们需要做得更少,不是分散在 10 个项目中,而是提高我们的工作质量,真正做好我们所做的事情。
我们需要提醒自己,我们不需要一下子掌握所有的东西。我们很可能会有时间回到过去激发我们兴趣的那些爱好或事物上。
然而,我们现在需要关注其他事情。
对我们来说真正重要的事情。
我们需要明确我们的优先事项,摆脱试图一次做完所有事情的诱惑。
我们的生活是我们已经做出的决定的总和。
如果我们真的对繁荣和提高我们的生活质量感兴趣,那么就要靠我们来改进我们所做的决定。
为什么您需要 Spark 的统一分析数据结构
Darius Foroux, from Why More Technology Does Not Equal More Productivity
如何优化 Spark 进行分析而不降低工作效率
Apache Spark 已经被大数据处理广泛采用。最初开发它是为了加速存储在 Hadoop 中的数据的 map-reduce 操作。今天,它仍然最适合于面向批处理的高吞吐量数据操作。
尽管 Spark 在继续改进,但它充其量仍是一个不完整的分析解决方案,特别是在涉及不断变化的数据的实时交互式工作负载时,这是 BI、数据科学和物联网应用程序所需的类型。
Databricks 和 AWS 等软件供应商通过简化大数据解决方案的整合来解决这一问题,内部 it 团队通常会在 Spark 上部署额外的数据管理工具。但是,正如 Darius Foroux 指出的那样,更多的技术并不等于更多的生产力。
缺少的一环是为 BI 用户、数据工程师和数据科学家优化 Spark 的方法,而不是在上面堆积更多消耗生产力的非 Spark 工具。
统一分析数据结构(UADF)解决了这个问题。它增加了对流和交易数据的支持,并针对闪电般的 BI、数据科学和物联网应用优化了 Spark。因为它是 Spark 的原生产品,所以您可以利用现有的人员技能、操作流程和工具。
UADF 通过将 Spark 扩展为面向 BI、数据科学和物联网应用的闪电般快速的平台来提高生产力。
作为 TIBCO 的分析 SVP,我们看到我们的客户正在努力应对这一挑战。我们认为 SnappyData ,一个由 Gemfire 背后的远见团队创建的 UADF,有助于克服 Spark 在分析方面的缺点。本文解释了它如何帮助您从 Spark 获得更多,同时提高您的工作效率。
什么是统一分析结构技术?
UADF 为 Spark 增加了对流、交易、机器学习和分析的支持。目标是为 Spark 增加四项功能:
- Spark 数据的数据可变性和事务一致性
- 高并发性的跨用户和应用程序的数据共享
- 支持低延迟查询(例如,键值读/写操作)和高延迟操作(昂贵的聚合查询或 ML 训练作业)。
- 在高速交易更新数据的同时,畅通分析查询访问
为什么不直接用?
Spark 开发人员经常会问:“当我想对我的 Spark 数据进行 BI、数据科学和流处理时,我应该使用哪个数据库?”
答案往往是“视情况而定。”选项包括柱状商店(Vertica、Teradata、Redshift)、立方体类型商店(Jethro、AtScale、Kyvos)、以数据科学为中心的分析平台(Databricks)和 NoSQL 商店(Cassandra、MongoDB)。这些选择都有其优点,但是作为一个整体,它们都有类似的缺点:
- 他们添加了更多的工具来增加复杂性和降低生产力。
- 商业智能和数据科学工具很难针对世界上的每个数据库进行优化,从而导致性能不佳。
- 这些数据存储专门存储历史数据,而不是流数据。实时流数据是数字业务越来越重要的一个方面,例如物联网感知应用和自动算法系统。
为什么您需要统一分析数据结构
以下是您应该考虑使用统一分析数据结构的五个原因:
#1:事务和流就像花生酱和果冻一样形影不离
越来越多的公司希望他们的所有数据都在一个地方——Spark——包括交易和物联网数据。
例如,一家能源公司使用 SnappyData UADF 在 Spark 中存储他们的交易数据、流数据和参考数据。它们存储实时物联网天气预报更新,以及来自 CRM 和运营系统的客户和设备维护记录。一个 BI 图表可以生成跨三个数据域的查询,例如:
“根据实时天气预报数据,显示可能遭受财产损失的前 100 名客户,以及哪些客户最近没有得到维护。将这些数据放在地图上,这样我就可以决定下一个服务对象,并实时更新。”
如果没有 UADF,这种查询将需要复杂的 Spark 软件开发、定制数据集成,并且可能需要购买、安装和配置非 Spark 数据存储。
UADF 的技术扩展为 Spark 添加了近似查询、缓存和 MVCC,因此它可以同时处理所有这些数据域。所以 Spark 和你所有的数据一起更好,就像花生酱和果冻一样。
#2:利用你所拥有的
要在 Spark 中使用 UADF,您只需下载、配置并运行即可。您可以利用您对 Spark 已经了解和喜爱的一切,包括您的数据、技能和基础设施。
而且,因为它是基于 SQL 的,大多数 BI 和数据科学工具“只需与 UADF 一起工作”。因此,您可以利用您在已经使用的 BI 和数据科学工具上的投资。
结果是,你提高了生产力,同时也清理了你的技术结构。
#3:快如闪电的商务智能
单就 BI 性能而言,统一分析数据结构令人叫绝。开箱即用的简单分析查询的性能是普通 Apache Spark 的 12 到 20 倍。你可以在这里亲自尝试一下。
例如,一家大型企业集团通过统一财务报告和税务数据,将 120 个 ERP 系统减少到 45 个,节省了数百万的基础设施成本,并减少了因税务报告延迟而导致的罚款。
一个 Spotfire pharmaceutical 客户使用它就是为了:提高他们 Spark 存储库的 BI 性能。
#4:将流式商务智能与流式历史统一起来
流式 BI 是分析领域的一项最新创新。当附加到流数据时,它提供了连续、实时的分析体验。这些成果首次将 BI 引入运营系统。
下面的例子显示了一级方程式赛车的 BI 流。当汽车在赛道上加速时,嵌入式物联网传感器会传输数据流。分析师看到汽车位置和数据的实时、连续视图:油门、转速、制动压力——可能有数百或数千个指标。通过可视化其中的一些指标,竞赛战略家可以看到静态快照永远无法揭示的东西:运动、方向、关系、变化率。比如分析监控摄像头。
Streaming Business Intelligence allows business analysts to query real-time data. By embedding data science models into the streaming engine, those queries can also include predictions from models scored in real time.
但是请注意图表上写着:“齿轮颜色与理想齿轮的差异?”给定当前的天气条件、赛车配置和这条特殊的赛道,分析师如何知道理想的档位是什么?这种比较可能需要深入的流历史,将当前状况与以前的比赛进行比较,甚至是几分钟前的练习圈;这些数据可以理想地存储在 UADF 中,以便与实时数据进行比较,并在以后用于深度学习和机器学习。
#5:掌握数据的新机会
通过统一主数据管理、数据虚拟化和集成技术,Spark 可以成为完整数据管理平台的基础。通常,这些工具生活在他们的岛上;通过小心地连接它们,您可以更好地掌握企业数据。
统一分析数据结构走向全球
如果您已经接受了用于 BI、数据科学和物联网应用的 Spark,那么可能是时候了解一下 UADF 技术了。我们已经在 TIBCO 上全力以赴,并期待着与开源社区合作,使它变得更好。我们认为这是一项关键技术,可以同时为分析提供闪电般的性能并提高工作效率。
作为一名数据科学家,您为什么需要了解雪花
唯一为云构建的数据仓库
可能这是你第一次听到这个公司——雪花。
也许你在某个地方听说过这个名字,但仍然不确定雪花作为数据仓库到底是做什么的,以及它与其他平台相比有什么不同。
嗯…你猜怎么着?
最近,在 Gartner 发布了其 2019 年数据管理解决方案分析魔力象限(MQ)报告并将雪花评为领导者之一后,我才开始更多地了解雪花。
Snowflake Recognized as a Leader by Gartner in the Magic Quadrant
这引起了我的注意,我开始了解更多。
如果您在数据科学领域,并且编写 SQL 查询从数据仓库(或数据库)获取数据是您的日常工作,那么本文是从数据科学家的角度为您编写的。
到本文结束时,您将对 Snowflake 和它的一些关键特性有更多的了解,并了解它是如何慢慢改变作为数据仓库的游戏的。
我们开始吧!
雪花是什么?
雪花是一个完整的 SQL 数据仓库,完全是为云而构建的。
事实上,它的架构是它区别于其他平台的地方。
它提供了传统数据仓库或已转移到云的大数据平台无法实现的灵活性和效率。
如果您想更多地了解雪花的架构,以及它如何以传统解决方案的一小部分成本结合数据仓库的强大功能、大数据平台的灵活性和云的弹性,我强烈建议您查看下面的视频。
Introducing Snowflake Architecture in 90 Seconds
雪花的主要特征
到目前为止,您应该已经知道,Snowflake 的专利架构分为三层— 存储、计算和服务。
与传统的数据仓库相比,这是非常不同的,传统的数据仓库受到严格的数据建模和不灵活性的困扰。
1.存储层
这是所有数据集中存储的地方。
雪花管理如何存储这些数据的所有方面——组织、文件大小、结构、压缩、元数据、统计和数据存储的其他方面都由雪花处理。
客户不能直接看到或访问雪花存储的数据对象。它们只能通过使用雪花运行的 SQL 查询操作来访问。
更令人惊奇的是,存储层的扩展完全独立于计算资源。
这意味着雪花能够处理数据加载或卸载,而不会影响正在运行的查询和其他工作负载。
2.计算层
计算层旨在以最高的速度和效率处理大量数据。
雪花中所有的数据处理能力都是由虚拟仓库执行的,这些虚拟仓库是一个或多个计算资源集群。
当执行查询时,虚拟仓库从存储层检索满足查询所需的最少数据。
在检索数据时,数据会与查询结果一起缓存在本地计算资源中,以提高未来查询的性能。
更好的是,多个虚拟仓库可以同时对相同的数据进行操作,同时通过完全的 ACID 合规性全面实施全球系统范围的事务完整性!
3.服务层
想象一下,计算层(我们刚才谈到的)是雪花的肌肉,那么服务层就是控制计算层的大脑。
雪花的服务层认证用户会话,提供管理,执行安全功能,执行查询编译和优化,并协调所有事务。
服务层由无状态计算资源构成,跨多个可用性区域运行,并利用高度可用的分布式元数据存储进行全局状态管理。
本质上,您不需要担心您的查询被抢走计算资源,因为服务层跨所有虚拟仓库执行事务协调。
最后的想法
感谢您的阅读。
我刚才描述的只是雪花为云构建的架构的简要概述。
事实上,雪花还提供了许多其他有趣的关键功能,如 【时间旅行】快速克隆自动查询优化 等等。****
到目前为止,我希望你已经了解了更多关于雪花的一些关键特性。
如果您对学习其他关键特性感兴趣(这是我强烈推荐的!),查看他们的网站 这里 !
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
阿德蒙德·李 目前是东南亚排名第一的商业银行 API 平台 Staq — 的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)****
为什么您需要将数据科学与解决问题结合起来
提高数据科学工作的效率
问题定义在数据科学中很重要
传统观点认为,在开始数据分析项目之前,正确定义问题非常重要。我完全同意这一点。为了将业务问题如实地转化为数据问题,理解业务环境是非常重要的,解决数据问题最终会产生有用的结果。
鼓励数据科学家熟悉业务环境的机制是向业务问题所有者提出问题。然而,正如你可能认识到的,即使一个人提出的问题也受到我们所知道的或试图发现的东西的限制。负责解决某个问题的数据科学家会询问问题发生的时间、方式和原因,以及有哪些数据可用于解决问题。对于领域知识有限的数据科学家来说尤其如此:他们可能会直接深入问题的细节。你认识这个吗?
但是问题的定义并不是一成不变的
如果这是您在您的组织中看到的情况,那么它可能错过了一些解决业务问题的更简单的解决方案。为了发现潜在的更简单的解决方案,您需要让企业所有者参与到问题中来,有点像管理顾问所做的那样,并对企业所有者在定义问题时所做的一些假设进行压力测试。这种合作解决问题的过程可能会带来一些解决问题的新方法,甚至是企业主都没有想到的。
请允许我用一个流程工业的例子来解释。建立一个加工厂需要大量的资本投资。为了有效地利用这种资产,加工厂通常制造多种产品或多种等级的相同产品,例如,多种等级的钢、多种等级的聚合物、不同的配方等。将生产从一个等级转换到另一个等级并非没有风险,而且会导致效率和质量问题。负责此类工厂的工厂经理可能会将此视为流程问题,并要求数据科学家确定驱动质量问题的变量和流程条件。承担这个问题的数据科学家可能会着手创建一个数据驱动的流程模型。但这种方法将错过探索解决问题的至少两个其他途径。
您可以通过协作解决问题来拓展您的数据科学解决方案空间
从哲学上讲,如果一个人想解决任何问题,总有三条途径可以实现——1。回避问题,2。减少问题,以及 3 .直接解决或消除问题。工厂经理决定走第三条路,也许他甚至没有意识到可能还有其他可行的途径。他或她可能从未听说过中国传奇将军和军事家孙子的名言“最高的战争艺术是不战而屈人之兵”。将引文中的敌人解读为当前上下文中的问题。在我们的流程工业示例中,替代途径可能如何工作?
如果有可能弄清楚特定年级之间的转换是否是根本原因,那么人们也许可以首先避免这个问题。例如,在工厂生产的五个等级 A、B、C、D、E 中,也许只有从 A 到 D 和 B 到 D 的转换是有问题的,而其他所有转换都是平稳的。在这种情况下,可以通过避免有问题的转换顺序来消除问题。如果这是一个现实的解决方案,数据科学家应该解决生产调度问题,而不是流程建模问题。
减少转换问题的一种方法是减少所需的转换次数。产品转换是必要的,因为产品的库存是有限的,而客户订单对某种类型的材料的需求超过了手头的可用数量。但是,如果库存管理是次优的,仅仅通过改变库存组合,就有可能满足客户需求,而不需要进行太多的转换,那该怎么办呢?如果这是一个现实的解决方案,数据科学家应该解决库存优化问题,而不是流程建模问题。
正如您所看到的,当您稍微打开解决方案空间并超越业务所有者的问题定义时,问题定义本身就完全改变了。一个从流程问题开始的问题可能最终通过更好的生产调度或库存优化得到解决。我认为,只有通过协作解决问题,才有可能达成这种开箱即用且可能更容易的解决方案。诚然,这样的解决方案可能并不总是可用的,但如果一个人总是完全忽视它们,那将是一个失去的机会。
数据科学工作的关键要点
如果您希望通过解决重要的业务问题来提高数据科学工作的有效性,您可能希望将数据科学工作与问题解决结合起来。
为什么你应该先成为多面手,再成为数据科学家的专家?
当我刚开始从事数据科学时,我想成为的人非常简单——成为一名数据科学家。句号。
我不知道自己是想成为数据科学通才还是专家。老实说,我从未听说过这些术语——“T0”、“通才”、“T1”和“T2”、“专家”、“T3”——直到我在这个领域工作了一段时间之后。
这让我想知道这一切的利弊,并思考我在数据科学领域的职业道路。
在网上做了一些研究并与该领域的一些人交谈后,我决定先成为一名数据科学通才,也就是全栈数据科学家,如果你愿意这样称呼的话,然后在不同领域获得更多经验和技能后成为数据科学专家。
在后面的部分你会知道为什么。
在下面的文章中,我们将在数据科学的背景下讨论更多关于通才和专家的内容。
那么什么是通才和专家呢?
在进一步讨论之前,让我们首先理解当我们谈论成为数据科学方面的通才和专家时,我们指的是什么。
一个通才是在许多领域都有知识的人,而一个专家在一个领域知道很多。就这么简单。
特别是在数据科学领域,在数据科学项目生命周期的所有阶段成为多面手是出了名的困难。获取不同领域的所有技能需要花费数年时间,但没有必要掌握所有技能。
同样,成为数据科学专家也不容易。
现在你可能会把多面手定义为万事通,但什么都不精通。
我完全同意这一点。
这正是我在数据科学道路的后期选择成为专家的原因。
为什么要先做通才?
毕竟,成为多面手并不意味着掌握任何东西,而是要了解整个数据科学项目生命周期的全貌。
问题是:为什么首先理解数据科学项目生命周期的整个流程很重要?
你看。作为一名数据科学家,我们不会为了建立机器学习模型而建立它。我们首先了解业务问题,并将其构建成可以通过数据科学方法解决的问题。然后,您需要识别数据源并定义成功的度量标准。根据您公司的成熟阶段,您可能还需要建立一个管道来收集数据(是的,您可能甚至没有数据)…
我们仍然可以继续下去,但重点是——以上所有的工作范围都是成为多面手的一部分。好消息是,作为一名多面手,作为一名职业生涯初期的数据科学家,你将了解数据科学问题的全貌。
换句话说,你会学习,你会成长,非常大。
**我在这里提倡的是:**如果你刚开始从事数据科学,我建议你先成为一名多面手。去加入一家初创公司,担任许多职务,因为你可能是公司里唯一的数据科学家。在一家公司的早期,多面手比专家能增加更多的价值,因为你的大部分产品都是从零开始打造的,有总比没有好。
你的机器学习模型不一定要改变游戏规则,但应该能够提供可操作的见解和结果。
了解如何帮助公司创造更多收入。了解如何利用现有数据或构建一些收集数据的管道来解决一些问题。
先从低垂的果实开始。如果公司还没有准备好,就不一定需要人工智能。事实上,正常的统计方法通常足以解决一些简单的问题。
理想的数据科学家是一个强大的多面手,他还能带来独特的专长,与团队的其他成员形成互补
做一个强有力的通才。成为行业中的佼佼者。
一旦你有了足够的经验,并且在某个特定的领域(比如 NLP)找到了自己的兴趣和激情,那么你就可以深入其中,这将引导我们进入下一个阶段。
为什么以后要做专科?
假设你是一名自然语言处理专家。您的重点可以仅仅是在给定数据的情况下构建最佳的 NLP 分类器模型。仅此而已。
所有的事情都已经为你准备好了。业务问题被很好地定义(由产品经理完成)。管道已准备就绪,并进行 24/7 维护(由数据工程师完成),数据就在那里等待收集。你需要做的是做你最擅长的事情。这是至关重要的,因为你可以专注于你的专业知识和优势,以增加项目的最高价值。
成为数据科学专家是再好不过了。成为你所在领域的专家在一家公司中起着重要的作用,这也是让你不可替代并对他人有价值的东西。
在这个阶段,既然你已经是数据科学领域的专家,那么你已经在不同领域积累了丰富的经验。你的经验和专业知识不是别人可以轻易替代的。
更好的是,您将能够专注于您的专业,并凭借您对数据科学工作流程其他部分的广泛知识和理解,作为一个团队与其他人合作。
你不再是只知道一件事的人了。相反,你是一个知道很多事情的人,专注于一件让你与众不同的事情。
最后的想法
感谢您的阅读。
我希望这解释了为什么我决定在我的数据科学之旅中首先成为多面手,然后成为专家。
对一些人来说,先成为多面手,再成为专家,然后成为数据科学家的想法可能听起来有点争议。
归根结底,这个问题没有对错之分。只要符合您作为数据科学家的愿景,选择和顺序并不重要。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
Admond Lee 目前是东南亚排名第一的商业银行 API 平台Staq**—**的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)
你为什么要关心 Docker?
如果您是一名软件工程师或数据科学家,您现在可能已经听说过 docker 了。
它引起我注意的方式是我在互联网上浏览深度学习框架,几乎所有其他框架都有 docker 支持,这让我思考 docker 到底是什么。
乍一看肯定不直观。
但是在我们深入 docker 之前,我们需要了解什么是虚拟机和容器。
什么是“容器”和“虚拟机”?
容器和虚拟机的目标相似:将应用程序及其依赖项隔离到一个自包含的单元中,该单元可以在任何地方运行。
此外,容器和虚拟机消除了对物理硬件的需求,允许在能耗和成本效益方面更有效地使用计算资源。
容器和虚拟机之间的主要区别在于它们的架构方法。
VMs and Container architecture
如上图所示,虚拟机构建在主机操作系统之上,因此增加了一个额外的层,这在容器中是完全没有的。
如果你和我一样,就把它(docker)当成一个更好的 VM,在那里你可以做大量的实验,而不必担心环境变量。
Docker 是什么?
Docker 真正做的是将应用程序代码从基础设施需求和需要中分离出来。它通过在一个称为“容器”的隔离环境中运行每个应用程序来实现这一点
这意味着开发人员可以专注于在 Docker 容器中运行的实际代码,而不用担心它最终将在哪个系统上运行,DevOps 可以专注于确保在 Docker 容器中安装正确的程序,并减少所需的系统数量和部署后维护所述系统的复杂性。
你为什么要关心它?
每一个 Docker 容器都是从一无所知的纯普通 Linux 机器开始的。
然后,我们告诉容器它需要知道的一切——为了运行应用程序,它需要下载和安装的所有依赖项。这个过程是用一个Dockerfile
完成的。
对于本节,可以说,Docker 消除了部署应用程序的猜测(和花费的调试时间),因为它总是作为一台全新的、隔离的机器启动,并且添加了完全相同的依赖项。每一个。单身。时间。
没有安装了不同版本依赖项的环境。没有完全缺少依赖关系的环境。不要和 Docker 胡闹。
1.易用性: Docker 让任何人——开发人员、系统管理员、架构师和其他人——更容易利用容器来快速构建和测试可移植的应用程序。它允许任何人在他们的笔记本电脑上打包一个应用程序,反过来可以在任何公共云、私有云甚至裸机上不加修改地运行。咒语是:“构建一次,运行在任何地方。”
2.速度: Docker 集装箱非常轻便快速。由于容器只是运行在内核上的沙盒环境,它们占用的资源更少。您可以在几秒钟内创建并运行 Docker 容器,相比之下,虚拟机可能需要更长时间,因为它们每次都必须启动完整的虚拟操作系统。
- Docker Hub: Docker 用户也受益于 Docker Hub 日益丰富的生态系统,你可以把它想象成一个“Docker 图片的应用商店”Docker Hub 拥有数万张由社区创建的公共图片,随时可供使用。搜索符合您需求的图像非常容易,只需很少或不需要修改就可以下载和使用。
4.模块化和可伸缩性: Docker 使得将应用程序的功能分解到单独的容器中变得容易。例如,您可能在一个容器中运行 Postgres 数据库,在另一个容器中运行 Redis 服务器,而 Node.js 应用程序在另一个容器中运行。有了 Docker,将这些容器链接在一起创建应用程序变得更加容易,使得将来独立扩展或更新组件变得更加容易。
Docker 入门
前往 docker 网站,如果你使用的是 Windows 10 家庭版,你需要 Docker 工具箱。
一旦你成功安装了 Docker,让我们试着在它上面运行 ubuntu image 稍后会详细介绍。
现在 Docker 允许你使用一个已经预先构建好的映像或者在一个已经存在的映像上构建。这个建立在现有图像上的建筑确实令人兴奋。
您可以定制图像,只定制您需要的图像并对其进行处理。
在我们开始研究 Dockerfile 之前,让我们确保我们的安装已经完成。
前往码头快速启动终端
Docker Quick Start Terminal
为了确保我们的设置配置正确,让我们运行 Docker 提供的默认映像。
docker pull hello-world
docker pull command
要查看您刚刚提取的图像,请键入以下命令:
docker image ls
最后,此刻,你在等待,你好,Docker 中的世界
running the hello-world container
docker run hello-world
Dockerfile —一切开始的地方
Docker 是一个强大的工具,但是它的力量是通过使用称为 Dockerfiles 的东西来利用的(如上所述)。
*Dockerfile*
是一个文本文档,包含用户可以在命令行上调用的所有命令,以组合一个图像。使用*docker build*
,用户可以创建一个连续执行几个命令行指令的自动化构建。- Docker,Docker 文件参考
Docker 映像由只读层组成,每一层代表一条 Dockerfile 指令。这些层是堆叠的,每一层都是前一层的变化的增量。
当 Docker 容器启动时,需要告诉它做什么,它没有安装任何东西,它知道如何不做任何事情。真的没有。
Dockerfile 首先需要的是一个基础映像。基础映像告诉容器要安装什么作为它的操作系统——Ubuntu、RHEL、SuSE、Node、Java 等等。
接下来,您将提供设置说明。这些都是 Docker 容器需要知道的事情:环境变量、要安装的依赖项、文件所在的位置等等。
最后,你必须告诉容器做什么。通常,它将运行安装说明中指定的应用程序的特定安装和命令。
在 Docker 上尝试 Ubuntu
这里有几个 docker 文件示例,包括解释每一行和每一层发生了什么的注释。
# Get the base ubuntu 18.04 from Docker hub# Head to https://hub.docker.com/_/ubuntu for other variationsFROM ubuntu:18.04# Get the necessary updatesRUN apt-get update# This ensures that the first directory that is opened once image is # build is /homeWORKDIR /home
将此文件保存为 Dockerfile。
现在前往 DockerQuick 启动终端,确保当前目录和存储 Dockerfile 的位置是相同的。
docker build .
现在当你这样做的时候,虽然 docker 创建了一个图像,但是你必须记住 docker 给它的随机名称,因为我们还没有给它命名。
docker build -t ubuntu1:latest .
现在,这确保了这个刚刚构建的映像被命名为 ubuntu1
docker image ls
Docker images
您可以看到,映像大小只有 111MB,相比之下,我们使用虚拟机时至少要分配 10GB。
还要注意,当我们在构建时没有 -t 标签时,存储库名称和标签是 none。所以当我们试图使用这个图像时,我们需要通过图像 ID 来记住它。
-t 基本上是格式储存库:标签
如果你忘记放置标签,docker 默认将其标记为 latest。
最后
docker run --rm -it ubuntu1:latest
— rm 确保容器运行后,立即删除。
-it 因为我们想使用终端进行交互。
你可以在 docker 终端中输入你在 Ubuntu 系统上输入的所有命令。
结论
我希望你现在已经具备了在自己的系统上开始入侵 Docker 所需要的知识,并且能够意识到这个不可思议的工具的威力!
如果你喜欢这个,这里有第二部分关于 Python 开发的 Docker。
你可以随时联系推特、领英、T21 或电子邮件。
为什么你应该关注算法的经济增长
2016 年,一位 Reddit 用户表白。FiletOfFish1066 将所有工作任务自动化,花了大约六年时间“无所事事”。而原来的帖子似乎已经从 Reddit 上消失了,那里 正在 无数 关于录取的报道。原帖暗示他(所有故事都把 FiletOfFish1066 称为男性)花了大约 50 个小时做“真正的工作”。剩下的——“什么都没有”。当他的雇主发现后,FiletOfFish1066 被解雇了。我认为这是雇主可能犯的最严重的错误。他应该得到加薪。但这是另一篇文章的主题。让我们来谈谈雇佣算法为你工作——就像 FiletOfFish1066 有一堆算法为他工作一样。
如果你的员工把他们的任务自动化到“什么都不做”,不要解雇他们。给他们加薪,并向他们学习。他们将向你展示如何扩展你的业务。
算法不仅仅是为应用程序、脚本提供动力,或者以其他方式自动化任务。他们逐渐成为我们的私人代理人,代表我们做出决定。例如,总部位于波士顿的 Quantopian ,一家专注于众包的投资公司,允许人们提交简单的算法,然后代表投资者做出资金分配决定。算法还不像 Siri 快捷键那样简单,但是即使是初级程序员也应该能够编写简单的量子算法。想象一下成百上千个这样的算法,它们中的每一个都可以访问由 quantopian 提供的信息,决定如何处理它们创造者的钱。它不是科幻小说;它正在发生。一群算法不断决定如何分配资金。
你最近有没有雇过算法?
当算法代表我们做出决定时,当它们与其他组织互动、购物、订购服务或安排会议时,它们充当我们的经济代理。经济主体是经济某个方面的模型中的参与者或决策者。
还记得大公司最为重要的“旧”经济吗?它还没有去任何地方。然而,在过去的 20 年里,一种新的经济——人的经济——已经出现在企业经济的旁边。它给了个人前所未有的参与全球价值创造和交换的机会。当我们惊叹于人的经济时,另一种经济,算法的经济正在出现。在这种新经济中,算法和运行算法的设备(例如机器人)成为经济主体。他们在经济价值创造中发挥着积极的、往往是独立的作用。
三大发展对算法经济的出现至关重要:物联网、算法和商业模式。
Internet of Things + Algorithms as economic agents + Business Models = Economy of Algorithms
物联网
连接和交换数据的庞大电子设备网络创造了我们所说的物联网(IoT)。物联网有助于数据收集、分发、监控、趋势预测等。但最重要的是(对我们来说),它有助于连接我们可能拥有的所有设备。我们可以将物联网视为管道,通过这些管道,数据可以在所有设备之间向各个方向流动。尽管一些供应商希望我们认为物联网主要是管道末端的设备(传感器、服务器等),但网络——管道——才是最重要的。
作为经济代理的算法
管道本身并不创造价值。只有当我们使用管道中流动的数据,并聪明地使用它,我们才能创造价值。这就是代表我们的算法可以介入的地方。我车上的一个智能传感器,将它的引擎电脑连接到我的手机和自动的服务器,现在可以通知我的机械师我的引擎是否有问题,或者在我离开时启动我家的警报器。我写了一个简单的脚本——一个算法——来完成这个任务。 Koola 试验使用预测算法向经销商提供“服务机会”(即:汽车 X 可能很快会坏)。如果你的汽车修理工告诉你你需要修理你的车,因为它很快就要坏了,你会相信吗?这让我想到了第三个部分。
商业模式
创造价值的互联设备和算法是伟大的,但如果没有商业模式,它们只是一个有趣的练习。当创造经济价值时,橡胶就上路了。而且在追踪汽车数据的情况下,值得关注的商业模式越来越多。美国保险公司 Progressive 提供快照。这项服务要求司机在他们的车上安装一个传感器,类似于自动的传感器。然后,累进减少或增加你的保险费的基础上,来自传感器的数据。想铺地板吗?它可能会让你失去优惠折扣!新的保险模式(商业模式)现在有了名字:黑箱保险。哦,还有科拉?他们的推特已经沉寂了一年多。或许他们的商业模式没有那么好?
你为什么要在乎?
1.算法的经济性可以让你变得富有(呃)
是的,你已经可以节省保险费了。但是还有更多的。随着技术的进步,你的设备和算法将能够主动产生收入(是的,你可能已经有了太阳能电池板,可以将能量卖回给电网,但它们完全是被动的)。在未来,你的家可以知道你的车库在接下来的八个小时内将是空的,并将这个空位提供给一辆自动驾驶汽车,寻找一个安全的地方停一会儿。与许多人不同,算法看不出在大型多层广告停车场停车和在两个街区外的私人车库停车有多大区别。如果汽车的偏好功能优先选择便宜的停车点,私人车库比商业车库便宜,汽车就会选择私人车库。不问任何问题。所以,让你的家庭管理算法检查你的日历,广告点,自动打开和关闭车库门,并代表你接收汽车的微支付。
有算法可以帮你省几个钱!如果你对他们有足够的控制权,雇佣他们可能是有意义的。
说到太阳能电池板:运行你家的算法可能会决定在白天不将能量送回电网,而是为附近的电动汽车提供一个弹出式充电站,使用车道上的无线充电垫,就是你通常用来给汽车充电的那种。使用网络(物联网),你的算法将能够为充电站做广告,并可能自动出价,假设其他房屋可能也想出售电力。听起来科幻?不应该。像park hound这样的服务已经可供人类使用。他们开发用于算法的API只是时间问题。
2.你会做更少的决定
就像 FiletOfFish1066 想在重复性任务上花更少的时间一样,我们许多人都试图将每天做出的选择数量减到最少。有人称之为选择极简主义,我称之为便利。我不想在家里做每一个购买决定。卫生纸、牛奶或更换液化石油气容器?我很想摆脱记得买这些东西的负担。
大约两年前,迈克尔·罗斯曼、保拉·杜森和我发表了一份关于零售业未来的报告:零售 5.0。在该出版物中,我们认为“便利购物”(与“体验购物”相对)将会被技术减少到最低限度。换句话说,算法将接管很多这样的决策。根据今天出版的《泰晤士报》的一篇报道,杰夫·贝索斯似乎同意尝试零点击购物。当杰夫·贝索斯尝试一些东西时,很有可能会改变世界。
零售业的未来是没有零售,或者零点击零售。算法的经济性使之成为可能。
是好是坏?它可以双向进行。如果我的冰箱一直点垃圾食品让我“开心”怎么办?如果我的家庭助理让我的账户透支,而我又被银行大量收费,该怎么办?如果我的车库让我变富了呢?如果我周围的所有算法最终允许我专注于完成我去年承诺要完成的那本书,会怎么样?不管怎样,这是我们应该关注算法经济性的另一个原因。
3.你需要重新思考你与技术的关系
算法只是计算机解释的指令。但是,不管喜欢与否,我们需要改变我们对他们的看法。从两个方面来说:我们需要像对待我们的人类经济代理人一样对待他们,我们需要花时间真正理解他们,并找出如何让他们作为一个团队工作。
第一个可能有点意外。但是,你有没有像看待购物者那样看待智能冰箱呢?你如何给冰箱做广告?你如何确保量子运算法则的价值与你的一致?这些问题只是看起来很可笑。它们可以揭示算法的经济性可能带来的机遇或挑战。
你如何给冰箱做广告?
让你的算法像团队一样工作?一旦你雇佣了一堆算法为你工作(或者和你一起工作),你可能会很快看到它的价值。像 FiletOfFish1066,六年每年领 95k 左右的工资。但是,就像人类团队一样,算法作为一个团队工作将会取得更大的成就。希望对你来说。
无论你是像 FiletOfFish1066 一样,寻找雇用算法的机会,还是像他的经理一样,寻找保持世界不变的机会,即将到来的算法经济都将让你忙个不停。有一点可以肯定,那将是一个激动人心的时刻!
作为一名数据科学家,为什么应该首先进行功能工程,然后进行超参数调整
事实上,特征工程比超参数调整更重要的认识对我来说是一个教训——一个觉醒和重要的教训——它彻底改变了我处理问题和处理数据的方式,甚至在建立任何机器学习模型之前。
当我第一次开始我的第一份全职工作时,我是机器学习领域的研究工程师,我非常兴奋,沉迷于构建花哨的机器学习模型,而没有真正关注我拥有的数据。
事实上,我很不耐烦。
我太想要结果了,以至于我只关心从我的模型中榨取每一个百分比的性能。不用说,我尝试了这么多次都失败了,想知道为什么。
“你应该更专注于获得好的特性**(特性工程),而不是优化你的模型的超参数(超参数调整)**。你看…如果你没有模型可以学习的好的特征,即使你有最佳的超参数,它也不会提高你的模型的性能,”
—我的一个团队成员这样对我说。
从那一刻起,我知道有些事情必须改变——我的方法必须改变,我的心态必须改变,以接受别人的意见,实际上是一切。
一旦我试图理解我试图解决的实际业务问题和我拥有的数据,我就添加一些新的特性来更好地表示问题,以便模型可以有效地学习底层模式。
结果?
与使用超参数调整很少或没有改善相比,我设法显著改善了模型的 AUC (这是一个分类问题)。
这就是我如何学会特征工程的重要性的,艰难的方式。并且希望和大家分享一下特征工程和超参数调优的重要性。
在本文结束时,我希望您能够理解为什么特性工程比超参数调优更重要,并在进入调优部分解决您的问题之前使用这种方法。
记住。如果你愿意倾听,数据会和你说话。
我们开始吧!
特征工程的重要性
我记得当我第一次开始学习数据科学的东西时,功能工程并不总是书籍和在线课程的主题。
这给了我一个错误的印象,也许特征工程在应用机器学习解决问题方面并不那么重要。
在讲什么是特征工程及其重要性之前。让我们退一步,试着理解机器学习模型是如何工作的。
**机器学习模型如何工作?**本质上,机器学习模型只是一种算法,通过对历史数据进行训练来学习 【模式】 ,最终基于看不见的测试数据做出预测。
换句话说,如果数据没有足够的代表性来描述您试图解决的问题,您的模型将无法学习底层的 【模式】 。这就是特征工程发挥作用的地方。
**什么是特征工程?**特征工程是将原始数据转化为更好地代表预测模型潜在问题的特征,从而提高未知数据的模型准确性的过程。
—杰森·布朗利(Jason Brownlee),一位出色的机器学习实践者,他创立了机器学习大师。
尽管模型的性能取决于几个因素——准备的数据和特性、模型在训练中的使用、问题陈述、衡量模型成功的指标等——但优秀的特性仍然是决定模型成功的关键因素。
**特征工程的重要性是什么?**在我看来,虽然你可以聚合数据生成额外的特征(均值和最大值等。),拥有强大的业务领域知识将让您对您拥有的数据有更多的了解,并基于其相关性和关系生成新的功能。
凭借出色的功能,它为型号选择提供了更大的空间。您可以选择一个更简单的模型但仍然能够获得良好的结果,因为您的数据现在更具代表性,并且不太复杂的模型可以轻松地学习底层模式。
最终,特征工程归结为问题表示。如果你的数据有很好地代表问题的特征,你的模型很可能会给出更好的结果,因为它已经很好地学习了模式。
就我个人而言,我觉得这篇文章写得很好,非常有助于您开始学习和使用特性工程— 发现特性工程,如何设计特性以及如何擅长它。看看就知道我什么意思了。
超参数调整的重要性
这里我想说一下超参数调优的重要性,让大家在对比中有一个整体的了解。
**什么是超参数调谐?**在机器学习中,超参数调整就是为一个学习算法选择一组最优超参数的问题。
— 维基百科
模型超参数是模型外部的一种配置,其值无法从数据中估计。作为一个数据科学家(或者机器学习实践者,不管叫什么名字),模型超参数对我们来说是未知的。
我们只能通过搜索超参数的离散空间,根据给定的默认值、经验法则或反复试验来找到最佳值。
为了让您更清楚地了解情况,一些超参数是训练神经网络的学习率、支持向量机的 C 和 sigma 值(SVM),或者 k-最近邻中的 k 值(KNN)。
**超参数调优的重要性是什么?**超参数至关重要,因为它们控制着机器学习模型的整体行为。最终目标是找到超参数的最佳组合,使预定义的损失函数最小化,以给出更好的结果。
不这样做将给出次优的结果,因为模型不收敛并且不能有效地最小化损失函数。
这就像探索一系列的可能性,并试图找到给你最好结果的最佳组合。用于调整超参数的一些常用技术包括 网格搜索、随机搜索、贝叶斯优化和其他 。
为什么对于数据科学家来说,功能工程比超参数调整更重要?
既然我们已经理解了特征工程和超参数调整的重要性,让我们更深入地了解一下为什么前者比后者更重要。
这并不是说超参数调整不重要,而是说当我们谈论改善模型的性能和最终结果时,这是一个优先事项,特别是在现实生活的业务场景中(我将在后面解释)。
**首先。**我们必须明白,大多数机器学习库中的超参数的默认值足以迎合大多数用例。通常情况下,很难显著提高性能。在 Kaggle,超参数调整非常重要。在现实生活中,这几乎无关紧要。
其次。面对现实吧。超参数调谐耗时且计算量大**。迭代不同的超参数组合来实现较小的改进需要花费很多时间。更糟糕的是,如果您有大量的数据和复杂的模型,每次迭代都需要大量的资源。在商业领域,时间就是金钱。如果寻找最佳超参数所需的努力和时间不能证明最终 ROI(金钱!),如果给定一组具有很好特性的数据,您的模型对于部署来说足够好,那么很可能根本不需要超参数调整。**
第三个也是最后一个。在现实生活中,由于时间限制,很难同时获得最佳特性和超参数**。因此,要在更短的时间内实现巨大的改进,更明智的选择是首先执行特征工程,以足够好地表示问题,以便模型可以学习和准确预测。只有在我们拥有了出色的特性之后,如果时间允许或者业务环境需要,我们才能考虑调优超参数。这就是为什么特性工程应该放在第一位,超参数调整应该放在第二位的主要原因。**
最后的想法
感谢您的阅读。
通过分享我的错误和学习经验,我希望你已经理解了这两者的重要性,以及为什么在提高你的模型的性能时,特性工程应该是优先考虑的。
如果你想了解更多关于特征工程的知识,以及如何将其应用到你的机器学习问题中,那么这本书就是给你的——机器学习的特征工程。在典型的机器学习课程中,特征工程不是一个正式的主题,因此这本书旨在通过整本书的练习,用几种特征工程技术给你实际的应用。
希望有所帮助!
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
Admond Lee 目前是东南亚排名第一的商业银行 API 平台 Staq — 的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)
为什么您应该记录您作为数据科学家的工作
你看。
每当我们谈论数据科学时,我们很可能会首先想到那些新奇的东西,如人工智能、深度学习、机器学习等。
但是没有人谈论文档,原因之一我们都知道——它听起来不性感(或者听起来很无聊)。
我完全同意文档通常不是数据科学家最感兴趣的事情之一。但是,它的重要性不亚于其他数据科学工作流,尤其是在数据科学项目管理方面。
事实上,文档不再仅仅是程序员或开发人员完成的任务。这是我们作为数据科学家应该知道的事情,并且只能定期执行这项任务。
有趣的是,一份 2017 Github 开源调查显示**“不完整或混乱的文档”**是关于开源软件的头号投诉。
2017 Github Open Source Survey
文档被高度重视,但经常被忽视。
这不仅仅是针对开源文档。类似的重要性也适用于我们的实际工作场所,我们必须记录数据科学工作流程,并确保随时更新。
在接下来的文章中,您将了解为什么文档在数据科学中很重要。
我们开始吧!
那么,为什么文档在数据科学中很重要呢?
1.再现性
是的,再现性。
我特别赞同 Matt.0 写的那篇关于 T 他对于数据科学项目管理 的“黄金标准”。他有一个 Github repo 用于建立一个新的数据科学项目目录的黄金标准工作流。去看看那个!
在他的文章中,他提到了这一点:
Daniele Procida 的这篇关于软件文档的黄金标准的 优秀帖子很好地总结了这一点,他说:
“你的软件有多好并不重要,因为如果文档不够好,人们就不会使用它。
即使出于某种原因他们不得不使用它,因为他们没有选择,没有好的文档,他们不会有效地使用它或以您希望的方式使用它。"
没有一个好的和有组织的文档,人们不会使用你日以继夜工作的代码,更不用说复制你的结果了。
因为面对现实吧。
即使你在为一个项目编写代码库方面做得很好,并为此感到非常自豪。有一天,你团队中的一位同事打算对你现有的代码进行改进。
因此,您的同事希望重现您的结果,但由于文档不完整,他/她不知道该如何做。见鬼,你的同事可能甚至不理解你的代码。
没有好的文档和注释,阅读别人的代码总是一种折磨。
**这里的要点是:**让文档尽可能清晰简单。当你在做项目时(而不是在完成项目后),一致地记录你的工作流程。为了帮助其他人理解你的工作流和代码,以便他们在将来重现你的结果——修复一些错误或进行改进。如果可能的话,找人看一下你的文档,确保其他人能够理解你的解释。
2.确保项目成功完成
这很重要。
不管你是实习生还是全职员工。
因为你猜怎么着?
没有员工会永远在一家公司。如果他们已经不在公司了,并且没有留下任何文档就把他们完成了一半的项目传给了其他人,那么只有两种结果**——项目将会悬而未决,或者项目将会需要比预期更多的时间来完成。**
我在第一次实习时,作为的数据科学家实习生,学到了这重要的一课。
起初,当我被要求制作文档时,我根本无法理解背后的原因,从我如何收集、清理和分析数据,到我使用和比较的机器学习模型,以及我在整个实习期间获得的结果。
只有当我在这个领域获得了更多的经验后,我才意识到文档对于数据科学项目是多么重要,我对我在第一次实习中学到的东西感激不尽。我指的是详细的文档,包括你犯过的所有错误、尝试过的方法、获得的见解以及未来的行动建议等等。
我们不能假设其他人在没有向他们展示我们的项目是什么,以及当你不在的时候,他们如何在你的遗产之上进行建设的情况下,会理解我们的项目是关于什么的。
这将确保您的项目仍将继续运行,并得到良好的管理。
负责任,对他人表现出同理心。
最后的想法
Sharing my data science learning journey at a meetup
感谢您的阅读。
我希望通过与您分享我的个人经验和文档的重要性,能够让您在数据科学之旅中更加清晰。
事实上,如果你一直在关注我的工作,我一直在 【记录】 通过写作和在 LinkedIn、Medium 和许多其他出版物上与他人分享我的知识,来“记录”我的学习之旅。
我觉得这种方式可以帮助我更好地了解数据科学。最重要的是,我喜欢分享!分享是我日复一日生活和呼吸的内容。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
Admond Lee 目前是东南亚排名第一的商业银行 API 平台Staq—的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)**
为什么你应该双浸自然图像分解
基于耦合深度图像先验的无监督图像分解
许多计算机视觉任务都希望将图像分解成单独的部分。在图像分割中,图像被分解成有意义的子区域,例如前景和背景。在透明分离中,图像被分离成其叠加的反射和透射。另一个例子是图像去雾的任务,其目标是将有雾的图像分成其基本的无雾图像和模糊的雾层。
虽然起初看起来不相关,但是这些任务可以被视为将图像分解成单独层的特殊情况。例如,如图 1 所示;图像分割(分离成前景和背景层);透明层分离(分成反射层和透射层);图像去雾(分离成清晰图像和模糊贴图),等等。
在这篇文章中,我们将重点关注“双 DIP”,这是一个基于几个“深度图像优先”(DIP) 网络的单一图像无监督层分解的统一框架。
对于热心读者: 关于“深度图像优先”(DIP) 的更多细节,查看我以前的帖子。
Figure 1: A unified framework for image decomposition.
一些直觉
“双倾角”主要建立在“深度图像先验”(倾角)之上;Ulyanov 等人在 DIP 中的工作表明,DIP 网络的结构足以捕获单个自然图像的低级统计。
DIP 网络的输入是随机噪声,它训练以重建单个图像(作为其唯一的输出训练示例)。这种网络被证明是非常强大的解决图像恢复任务,如去噪,超分辨率和修复,在一个无监督的方式。下面是一个图像去噪的例子,摘自我在之前发表的关于深度图像的文章:
Figure 2: (Left) — Clean image x* restoration result using Deep Image Prior starting from random initialization up to convergence , (Right) — The Noisy image x^
“双倾角”的作者观察到,通过使用多个倾角的组合来重建图像,这些倾角往往会“分裂”图像,就像人类自然分裂图像一样。此外,他们展示了如何将这种方法用于额外的计算机视觉任务,包括图像去雾、图像和视频的 Fg/Bg 分割、水印去除以及图像和视频中的透明分离。
“双下降”:通过耦合深度图像先验的无监督图像分解
双下降的关键方面是固有的,即每个分解层内小块的分布比原始混合图像中的**【更简单】**(更均匀)。我们用一个例子来简化一下;
Figure 3: The complexity of mixtures of layers vs. the simplicity of the individual components
让我们观察图 3a 中的示例。两种不同的纹理, X 和 Y ,混合起来形成一个更复杂的图像 Z ,呈现出图层透明。每个纯纹理( X 和 Y )内部的小块和颜色的分布比组合图像( Z )中的块和颜色的分布更简单**。此外,跨两种纹理的补片的相似性非常弱。**
声称一幅图像可以用一种自然而简单的方式分离成它的子成分是从 信息论 中推导出来的。这里证明了对于两个独立的随机变量 X 和 Y ,它们的和 Z = X+Y 的联合熵大于它们各自的熵。
单倾角与耦合倾角
单一 DIP 网络用于学习 pusre 图像与混合图像之间的差异可以在下面的图 4 中示出。
Figure 4. MSE Reconstruction Loss of a single DIP network, as a function of time
在图 4 中,对于图 3a 中的 3 个图像中的每一个,示出了单个倾角网络的 MSE 重建损失,作为时间的函数(训练迭代)。
- 橙色橙色图是为重建纹理图像 X 而训练的下降的损失
- 蓝色图——经过训练以重建纹理的倾斜 Y
- 绿色图-经过训练以重建其叠加混合物(图像透明度)的倾斜。
请注意,与单个分量的损失相比,混合图像的损失更大,收敛时间更长。这意味着混合图像的损失大于两个单独损失的总和。这可能与混合图像中的小块分布更加复杂和多样(更大的熵;更小的内部自相似性)。
最后,应用多个 DIP 显示它们倾向于在它们之间“分裂”图像碎片。也就是说,图像内类似的小块往往都是由单个 DIP 网络生成的。换句话说,每个倾角捕获图像内部统计数据的不同组成部分。
“双底”框架
图 5。演示了双 DIP 框架:两次 DIP 将输入图像 I 分解为层(y1 和 y2),然后根据学习到的遮罩 m 对这些层进行重组,从而重建 I 的近似图像。
Figure 5. Double-DIP Framework
什么是好的图像分解?
一幅图像有无限多种可能的分层方式。作者提出以下特征来定义有意义的分解:
- 当重新组合时,恢复的层重建输入图像
- 每一层都应该尽可能“简单”
- 恢复的层之间不应该有依赖性或相关性
这些建议转化为用于训练网络的损耗。第一个标准是通过“重建损失”来实施的,该“重建损失”测量所构建的图像和输入图像之间的误差。第二个标准是通过采用多次倾斜(每层一次)获得的。第三个标准是通过不同骤降的输出之间的“排除损失”来实施的(最小化它们的相关性)。
每个 DIP 网络重建输入图像的不同层 y _ I*I。*每个 DIP 的输入是随机采样的均匀噪声 z_i
,其应尽可能接近输入图像 I. 因此,优化损失为
其中,损失第一元素,即重建损失定义为
第二个要素是排除损失,它使 y1 和 y2 的梯度之间的相关性最小化。最后,正则化掩模项将掩模 m 拉至尽可能接近二进制图像。
结果
如上所述,这种方法适用于许多计算机视觉任务,如图像分割、透明层分离、图像去雾等。
分割
将图像分割成前景和背景可以表示为将图像分解成标记为 y_1 的前景层和标记为 y_2 的背景层。这两层与二进制掩模结合将产生分解的图像,并且可以用公式 1 表示:
Equation 1
这个公式自然地适合双倾角框架,服从符合自然图像先验的 y_1 和 y_2,并且每一个都比 I. 更“简单”地生成
正则化项在这里被定义为鼓励分割掩模被二进制化和定义
下面的结果显示了双 DIP 的优点,实现了仅基于层分解的高质量分割,而无需任何额外的训练数据。
Figure 6. Foreground/Background separation results
水印去除
水印广泛用于照片和视频的版权保护。双浸通过将水印视为图像反射的特殊情况来消除水印,其中 y1 是清除的图像,y2 是水印。
这里,与图像语义相反,掩模不是常数*m。*固有的透明层模糊通过两种实际方法之一解决:(I)当只有一个水印图像可用时,用户提供围绕水印位置的粗略提示(边界框);(ii)给定几个共享相同水印的图像(通常 2-3 个就足够了),模糊性自行解决。
图 7。下图显示了双浸法去除水印的显著效果。
Figure 7. Watermark removal from a single image
透明层分离
在图像反射的情况下,图像 I(x) 中的每个像素值是来自透射层 y_1(x) 的像素和反射层 *y_2(x)中的对应像素的组合。*这也可以用等式 1 来表示。其中 m(x) 是反射掩模。
下面的动画展示了真实透明图像的成功分离。
结论
双 DIP 为单个图像的无监督层分解提供了一个统一的框架,并且需要额外的数据集。这个框架适用于各种各样的计算机视觉任务。
如果你对源代码感兴趣,可以在我的 Double-DIP — GitHub 库中找到。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。
在那之前,下一篇文章再见!😄
为什么您应该加倍投资无服务器基础架构
当你加倍使用无服务器架构时,你开始收获惊人的回报。
无服务器已经存在几年了。这不是一个全新的想法,但它是一种关于构建应用程序的新的思考方式。
我总是倾向于在考虑如何做某件事之前,先考虑我为什么要做这件事。它有助于激励、产品设计和理解。它鼓励你重新思考现有的“众所周知”的解决方案,并确保你每天都验证你所做的假设。
为什么选择无服务器?
这就是为什么无服务器的“为什么”是最重要的。如果你不明白你为什么使用无服务器,你将无法正确地实现它。那次失败将会抹去你认为你拥有的任何好处。
- 它有助于你晚上睡觉(因为你不管理服务器)
- 它使您能够快速扩展(最好是自动扩展)
- 它减少了实现解决方案所需的领域专业知识的数量。
所有这些都意味着同样的事情。无服务器允许个人或公司将其全部精力集中在独特的销售主张(USP)上。
所有其他的好处只是让你的团队专注于你的 USP 的描述。一个好的组织应该专注于他们的 USP,无服务器的思维模式确保了这一点。作为一名开发人员,我不必管理服务器、创建和管理数据库、扩展服务器、处理停机时间、构建容错能力,这些都是构建可扩展系统时难以管理的方面。作为一名经理,我可以花更多的时间关注过程和目的。
对于创作者来说,拥有一个将扩展和操作全球应用程序的整个工作抽象化的范式是一个巨大的福音。
Don’t let your developers turn into firefighters.
这需要时间,需要努力,需要专业知识来跟上速度,但无服务器确保创作者创造,而不是交火。无服务器减少流失,提高生产率,增加可伸缩性,并允许您在一个小团队中生成真正改变游戏规则的应用程序。
这就是你应该选择它的原因——毫无疑问。
如果你做得对,无服务器也很好。
大部分公司做的不对。
什么是无服务器?
一旦你理解了为什么你会选择无服务器,你需要理解什么是无服务器解决方案。这个解释需要尽可能的简单,这样你就可以很容易的验证你的决定。了解什么是无服务器变得至关重要,因为它不会工作,如果你不加倍。不断在脑海中重复一句简单的话。
围绕无服务器构建每个决策。只有在你用尽了所有的选择之后,你才应该去寻找其他的东西。一旦您将一个非无服务器组件引入到您的应用程序中,您就引入了一个泄漏。一个单一的决定,一个单一的失败点会成为你无服务器盔甲上的扭结。
你已经打败了整个目的,你已经使你自己残废了,而你的竞争对手甚至不用动一根手指头。我喜欢简单的解释,它们更有说服力。杰里米·戴利对“无服务器”有我能找到的最简单的解释。
- 仅对您使用的内容收费
- 无需服务器维护
- 提供连续缩放
- 支持内置的高可用性和容错能力
任何不具备所有这些属性的东西都无法通过测试。如果它没有通过测试,那么你需要有一个非常好的理由来解释你为什么用不同的方式做这件事。
跃进
转换你的公司或团队的运作模式是困难的,组织越大,决策就越困难。新公司和新应用的优势在于起步较晚。
然而,在你决定坚持你所拥有的之前,好好想想。只有少数真正的极端情况下,正确实施的无服务器解决方案是次等解决方案。它对你的团队起到检查的作用,确保你总是关注你提供价值的地方。90%的情况下。
杰西·摩尔——首席技术官——jesse@mobilads.co
页(page 的缩写)s——如果你有兴趣在一家致力于无服务器、打造伟大产品和颠覆破碎行业(广告技术)的公司工作,请在下面给我发一封电子邮件,附上你的简历、一个示例项目和一段内容(博客帖子、youtube 等)。我会回复所有正版申请。
为什么您应该了解流数据科学
自适应学习和数据流数据科学的独特用例。由 汤姆希尔 和 马克帕
传统的机器学习基于历史数据训练模型。这种方法假设世界本质上保持不变,即过去观察到的相同模式、异常和机制将在未来发生。因此,预测性分析实际上是展望过去而非未来。
最近可用的工具可以帮助商业分析师基于来自任何来源的流数据“查询未来”,包括物联网传感器、网络交互、交易、GPS 位置信息或社交媒体内容。类似地,我们现在可以将数据科学模型应用于流数据。
不再局限于只看过去,流数据科学的影响是深远的。
基于历史数据的数据科学模型是好的,但不是万能的
今天,机器学习的大多数应用程序都试图在历史数据中识别预测未来事件的重复且可靠的模式。当维度和“概念”之间的关系稳定并能预测未来事件时,这种方法是可行的。
例如,海滩的预期游客数量可以根据天气和季节进行预测——在冬天或下雨时,较少的人会去海滩,这些关系将随着时间的推移而保持稳定。
同样,大多数消费者进行的信用卡消费的数量、金额和类型将遵循可从历史消费数据中预测的模式,任何与这些模式的偏差都可以作为欺诈警报的有用触发器。
此外,即使变量之间的关系随着时间的推移而改变,例如当信用卡消费模式改变时,有效的模型监控和模型的自动更新(称为重新校准或重新建立基础)也可以产生有效、准确而又适应性强的系统。
流数据科学在流中应用算法
然而,在某些情况下,将学习算法应用于实时流数据是有优势的。有时,推动应用价值的一个关键因素是新发现和新出现的见解转化为行动的速度。
在某些用例中,对流式数据应用自适应学习算法比等待它在数据库中静止下来更有优势。
例如,为了识别预测公众意见、时尚选择和消费者偏好的关键因素,持续建模和模型更新的适应性方法可能是有帮助的。
流式 BI——流数据科学的使能技术
为了理解流数据科学,首先理解流商业智能(流 BI)是有帮助的。
下面的视频展示了一级方程式赛车中的 BI 流。当汽车在赛道上加速时,嵌入式物联网传感器会传输数据流。分析师看到汽车位置和数据的实时、连续视图:油门、转速、制动压力——可能有数百或数千个指标。
通过可视化其中的一些指标,竞赛战略家可以看到静态快照永远无法揭示的东西:运动、方向、关系、变化率。比如分析监控摄像头。
Streaming Business Intelligence allows business analysts to query real-time data. By embedding data science models into the streaming engine, those queries can also include predictions from models scored in real time.
流式 BI 的创新之处在于,您可以查询实时数据,由于系统会注册并不断重新评估查询,因此您可以有效地查询未来。
也就是说,一旦您创建了可视化,系统会记住您的问题,这些问题为可视化提供了动力,并不断更新结果。你只要设置好,然后忘记它。
在这种情况下,BI 工具记录了这个问题:
“选择连续[位置,转速,油门,刹车]”*
当数据流中的任何数据(位置、转速、油门、制动压力)发生变化时,可视化会自动更新。计算会改变。关系会变。视觉元素会改变。
流式 BI 的突破性创新在于,您可以查询实时和未来的情况。
新问题成为可能
如果可以查询未来,你会问什么问题?比赛团队可以询问赛车何时将采用次优路径进入发夹弯;在给定的赛道条件下,找出轮胎何时会开始出现磨损迹象,或者了解天气预报何时会影响轮胎性能。
因此通过带有查询注册的连续查询,业务分析师可以有效地查询未来。
但是,如果这些查询也可以结合数据科学算法呢?嗯,他们可以!
适应性学习用例
流式数据的自适应学习是数据科学中人类通过不断观察环境来学习的等效方法。
流式数据的自适应学习是数据科学中人类通过不断观察环境来学习的等效方法。
例如,在高科技制造业中,可能会出现几乎无限多种不同的故障模式。为了避免此类故障,流式数据有助于在质量问题出现时尽快识别出相关模式。
当前所未见的根本原因(机器、制造投入)开始影响产品质量时(有概念漂移的证据),员工可以更快地做出反应。
来自流数据的自适应学习意味着基于最新数据的模型的持续学习和校准,有时将专门的算法应用于流数据以同时改进预测模型,和同时做出最佳预测。
持续自适应学习非常有用的其他例子包括保险产品或消费品的价格优化、金融服务中的欺诈检测应用,或者快速识别不断变化的消费者情绪和时尚偏好。
走向流式数据科学的未来
从连续的流数据中学习不同于基于历史数据或静态数据的学习。大多数机器学习和人工智能的实现依赖于相关历史数据的大型数据仓库,并假设历史数据模式和关系将有助于预测未来的结果。
然而,当使用流数据来监控和支持业务关键型连续流程和应用程序时,通常会出现数据模式的动态变化。与静态数据相比,分析动态数据需要不同的分析和架构方法。
流式 BI 提供了独特的功能,支持几乎所有流式使用案例的分析和人工智能。这些能力可以带来关键的竞争优势和成功。
Thomas Hill 博士是 TIBCO 分析集团高级分析(Statistica 产品)高级总监。他曾在 Statistica、Quest 和戴尔信息管理集团担任分析执行总监。
马克·帕尔默是 TIBCO 软件公司的 SVP 分析师。作为 StreamBase 的首席执行官,他被《时代》杂志评为将改变你生活的技术先锋之一。
为什么你应该在看你的数据之前选择你的假设
在统计学课上,我的教授经常重复在查看数据之前决定要检验的假设的重要性。他会对数据挖掘的想法嗤之以鼻,并声称任何在查看数据后形成假设的人注定会失败。
他从没说过为什么。
我在设计医学试验的指南中也看到了类似的想法:在开始随机对照试验来测试药物的疗效之前,事先陈述你预期的假设是至关重要的。
我想知道这背后的原因已经有一段时间了,最近我想通过一个例子来分享一下。
假设我们有一个变量,比如身高。它呈正态分布。我们从人群中抽取 3 个人,测量他们的身高并取平均值。我们称之为 X1。我们从同一人群中抽取 3 个不同的人,平均他们的身高,称之为 X2。
现在想象我们做了一个双尾 t 检验,评估如果 X1=X2,α= 0.05。无效假设是:
另一个假设是
因为这两个平均数来自相同的总体,我们期望 p>0.05,并且我们不能拒绝零。然而,总是有很少的机会,一组是从分布的一个尾部专门取样的,而另一组是从另一个尾部取样的,X1 和 X2 之间的差异出乎意料地大。在这种情况下,我们会错误地拒绝零假设,根据我们的阿尔法,这种情况发生的概率是 5%。
我们可以通过模拟来测试这一点,在模拟中,我们从相同的正态分布中重复抽取 2 组 3 个样本,并对它们的平均值进行 t 检验。我们这样做了 100000 次,并绘制了下面的 p 值直方图。正如所料,我们得到了均匀分布,大约 5%的 p 值落在 0 到 5%之间。这些都是误报,这一点很重要。
即使这些组来自相同的分布,如果我们不知道这一点,只看平均值,有 5%的可能性我们会错误地得出它们来自不同分布的结论。
这个错误率是统计中固有的,我们接受有 5%的可能性我们拒绝零假设的结论是不正确的。只要我们有信心它是 5%,并保持在 5%,我们就没事。
但是现在让我们看看,在看完数据后,当我们改变假设时会发生什么。
我们通过再次从数据中抽取 2 组 3 个来模拟这种情况。我们根据身高对每组进行排序,如果第一组的中间成员比第二组的最高成员高,我们将假设改为:
请注意,这是一个片面的假设,使用它可以更容易地获得重要的结果。如果一组中的中间成员不比另一组中的每个人都高,我们通常使用上面的双面假设。这个过程复制了一个研究人员的行为,他打算使用双边假设,但在数据达到峰值后,他意识到使用单边假设更有可能获得重大结果。
做另一个 100000 样本模拟,我们得到下面的直方图。请注意 p 值在 0–5%之间的变化。急剧增加。
在数据面前达到顶峰并改变我们的假设,使得我们更有可能在不应该的时候拒绝无效假设。最糟糕的是我们甚至没有意识到这正在发生。我们可以得到更“重要”的结果,但它们可能都是假阳性。
在医学和临床试验中,我们希望不惜一切代价避免药物疗效的不正确声明。想象一下,让数百万人服用我们错误地认为有效的药物,因为一名研究人员在查看数据后改变了他们的假设,并错误地拒绝了无效数据,这将会带来怎样的伤害和代价。
这将是一场灾难。
这就是为什么你可能不应该在看完数据后改变你的假设。
如果你有任何问题,请在下面的评论中告诉我你的想法。
为什么今天应该运行这个 Python 命令
现实世界中的数据科学
随着 Python 2.7 即将寿终正寝,运行这个命令来看看您将会受到怎样的影响是至关重要的
The end is near! Photo by NASA on Unsplash.
我们所知的世界末日
玛雅人对世界末日的预测并不遥远。尽管他们错误地认为由于太阳耀斑和其他宇宙异常现象,世界将在 2012 年终结,但他们确实准确地假设了 21 世纪初的大规模混乱。然而,预测的大规模混乱的原因与现实相去甚远。
回到现实,是时候讨论一下软件世界即将到来的末日了 Python 2.7 的死亡。对于那些不知道的人来说,Python 最流行的版本将于 2020 年 1 月 1 日到达其生命周期的终点。你说的生命终结是什么意思?当 Python 版本(这也适用于其他形式的软件)达到这个里程碑时,开发人员同意结束该特定分支的所有未来开发工作,即使主要的安全问题已经确定。
这有什么关系?Python 2.7 是在近十年前发布的,所以它肯定获得了没有任何错误或漏洞的硬化版本的好处,对吗?嗯,不完全是…尽管它的任期很长,但直到今天,新的错误和问题仍然在官方 Python 问题追踪器上出现。明年 1 月,如果发现另一个问题,将不会发布进一步的更新,这可能会使代码无限期地易受攻击。
也许你不访问数据库,操纵关键任务数据,或者在你的代码中暴露用户注入。相反,你有一个单纯的数据科学项目,只是进行预测或运行分析,你不关心这些漏洞?即使是对安全问题“免疫”的代码仍然会受到 Python 2.7 版本的影响,因为许多流行的库都在不断地放弃对该版本的支持。
正如你在 Python 2 日落页面上的项目时间表中所看到的,大多数顶级 Python 包都计划在 2020 年 1 月前停止支持,其中一些已经是 Python 3 独有的。在这些包中有几个重要的数据科学库,如 Scipy 、 scikit-learn 、 Numpy 、 Pandas 和 Matplotlib 。即使我们做了一个[错误的]假设,认为这些包永远不会遇到安全问题,它们总是在更新以提高性能,改进 API,并添加有用的新功能。任何坚持 Python 2.7 的代码都会错过这些重要的更新。
为什么大家不升级到 Python 3,然后继续自己的生活呢?不幸的是,Python 2 和 Python 3 本身并不兼容,在 Python 2 中工作的代码不一定能在 Python 3 中工作。对于大多数开发人员来说,这是最大的入门障碍之一,因为过渡到 Python 的最新版本可能需要对代码进行彻底的返工,这是不可取的。
在过去的几年里,许多操作系统供应商试图通过在系统范围内安装新版本的 Python 来取代过时的版本,从而帮助淘汰 Python 2.7。虽然供应商的这一举动应该受到欢迎,但许多开发人员和用户发现,由于语言的不同默认版本,他们多年来无缝工作的 Python 项目在操作系统升级后突然中断。
综上所述,这个世界上所有的好事都是要结束的,即使是臭名昭著的 Python 2.7。然而,随着这一结束,随之而来的是潜在的破坏,因为一些程序将不再在新的系统上工作。此外,任何漏洞的补丁都将不复存在,新功能将被遗忘,支持将受到冷落。然而,通过确保您的项目是最新的和经得起未来考验的,这种严峻的未来是可以预先避免的。
Photo by Chris Ried on Unsplash
检查你自己
随着悲观情绪的消失,您今天应该做些什么来看看 Python 2.7 的终结会对您产生怎样的影响呢?第一步是运行一个非常简单的 Python 命令,它会告诉您需要知道的一切:
python --version
假设没有抛出错误,上面的命令将列出您的系统正在使用的默认 Python 版本,比如2.7.15
或3.7.3
。如果命令返回3.*something*
,并且您现有的所有代码都像预期的那样工作,那么您就可以继续您的幸福生活,享受 Python 3 新的精彩更新了!然而,如果您看到2.7.*something*
(或者更糟,2.6
或更低),我强烈建议您进一步深入您的系统,确定您的开发环境是否存在未来维护问题和漏洞的风险。
Photo by Hush Naidoo on Unsplash
确定原因
现在,仅仅因为系统报告了版本 2.7 或类似的版本,并不意味着这就是你的 Python 程序正在使用的版本。例如,如果您正在使用虚拟环境或 Anaconda 来本地化您的 Python 可执行文件,那么如果您在所有项目中使用该语言的新版本,您可能仍然没问题。如果这些项目中的任何一个仍然指向旧版本的 Python,那么升级系统将是明智的。
如果虚拟环境和 Anaconda 对您来说毫无意义,那么您可能只是在使用操作系统附带的默认 Python 版本。如果是这样的话,那么我强烈建议您更新您的环境,无论是项目的本地环境还是全局环境。
Photo by Fancycrave on Unsplash
修复问题
如果你还在读这篇文章,你可能正在使用旧版本的 Python,并且正在寻求升级方面的帮助。我建议按照以下常规步骤更新到最新最棒的版本:
- 安装新版本的 Python
- 升级所有依赖包
- 更新代码以兼容 Python 3
- 测试更新
- 部署最终的代码
让我们更深入地了解每一步!
安装新的 Python 版本
在您的系统上实际安装最新版本的 Python 有几种不同的选择。其中一些包括使用虚拟项目本地化,比如 Anaconda 和虚拟环境。官方的 Anaconda 文档对安装和使用它有很好的指导这里。
虚拟环境也可以使用下面的指南来安装,但是请注意,您需要先下载所需版本的 Python 并安装到您的系统中。更多关于下载和安装 Python 的信息可以在这里找到。
当然,您可以选择简单地在系统范围内安装一个新版本的 Python,忘记项目本地化,尽管我建议使用上述方法之一来确保依赖关系特定于每个项目。
另一种选择是使用 Docker 容器,并在定制的 Python 容器中运行应用程序。虽然我喜欢容器化项目,但这不一定是最简单、最合理和最实用的解决方案。
升级所有依赖包
由于许多 Python 包开始放弃对 2.7 的支持,项目完全有可能期望依赖包的旧版本能够正常工作。如果您的项目的依赖项列在目录中的一个requirements.txt
文件中(如果还没有,我强烈建议这样做),明智的做法是检查所有列出的包,如果可能的话尝试升级它们。这确保了您的依赖项与 Python 的最新版本保持同步,即使 Python 2 中的所有内容都是最新的。
更新代码以兼容 Python 3
幸运的是,Python 2 和 3 的代码基础之间没有太大的区别,但是某些命令会使工作代码在新版本上立即失败。最大的例子之一就是print
命令。在 Python 2 中,print
是一个特殊的语句,允许我们写
print "Hello world!"
Python 3 中的行为发生了变化。print 语句现在是一个实际函数,所以上面的 print 语句现在必须写成
print("Hello World!")
另一个重要的问题是整数除法的处理。在 Python 2 中,两个整数相除总会返回一个整数。例如
3 / 2 = 1
尽管正确答案是 1.5,Python 2 认为这是一个整数除以一个整数等于一个整数,因此是 1。
然而,Python 3 在这种情况下会返回一个浮点数。相同的语句将计算为
3 / 2 = 1.5
这可能会对结果产生非常显著的影响,尤其是对于依赖数学运算的数据科学项目。
虽然这些只是版本 2 和版本 3 之间许多差异中的一小部分,但它们通常是升级后错误的最大元凶。从使用的角度来看,其他一些主要的区别可以在这篇博文中找到。
幸运的是,我们创造了一些有用的工具来帮助从 2 到 3 的过渡。其中一个工具被恰当地命名为2to3
,它是大多数 Python 安装所附带的。在一个特定的文件上运行这个程序将会输出为了与 Python 3 兼容而需要做的修改。虽然这个程序对于转换代码来说是一个有价值的资源,但它并不完美,所以我建议回顾一下这些更改,以确保一切都合乎逻辑,并且是必要的更新。
测试更新
Python 和程序的依赖项随代码一起更新后,就该测试这些变化了,以确保新版本的一切都如预期的那样工作。希望您的项目包含某种测试(如果没有,我强烈建议至少编写单元测试,以确保您的代码按预期工作),您可以用 Python 3 运行这些测试来验证代码。
运行测试套件(如果适用)之后,运行一些模拟生产用例的实时测试。希望这个生产测试遍历大部分(如果不是全部)代码库,以验证一切都按预期运行,没有问题。如果一切看起来都很美好,你的代码[可能]已经准备好了!
部署最终的代码
如果你能走到这一步,恭喜你!您应该已经成功地将您的项目从 Python 2 转换到 Python 3,并确保您的代码是经得起未来考验的。此时,将变更推送到生产环境,更新任何上游存储库,并验证所有开发环境都使用最新版本的 Python 可能是安全的。您的代码现在应该能够利用 Python 3 提供的对其前身的大量改进,同时还创建了一个稳定的代码库,将在未来许多年得到支持。
Photo by Alice Achterhof on Unsplash
收尾
如果您遵循了上面的所有步骤,那么您现在应该只在项目中使用 Python 3。正如整篇文章中提到的,升级失败会带来潜在的问题。有时升级并不总是可能的,例如生产系统需要特定的操作系统或系统范围的 Python 版本。几个不同的解决方案是使用虚拟环境或 Anaconda 来安装不同版本的 Python,或者用 Docker 封装应用程序,以便它将使用预期的 Python 版本,而不管您运行在哪个操作系统上。
随着 2.7 版本的结束,很难说接下来的几个月会发生什么。通过主动更新您的项目,您可以在里程碑之后避免任何潜在的陷阱。
2.7 是世界上许多 Python 开发者使用的第一个版本,并且在过去几年中已经成为深度和机器学习项目爆炸的主要容器。但是,即使是最大的火也会随着时间的流逝而熄灭,软件世界的猛兽也是如此。谢谢你的回忆。愿 3 的未来光明昌盛。
为什么应该在安全系统中使用多模式生物识别验证
深度神经网络,TensorFlow,OpenCV,Librosa
将机器学习技术应用于生物识别安全解决方案是当前人工智能趋势之一。本文将介绍多模态生物识别系统的开发,并阐述为什么单峰生物识别不是一个可靠的模型。
在核心层面,大多数生物特征数据可以分为两类:
还有行为生物识别,包括手势、手写文本、声音识别和行走模式。
还有物理生物识别,包括指纹、静脉、虹膜和面部识别,以及手的几何形状。
数据科学顾问可以利用 ML 的能力来挖掘、搜索和分析大数据集,以提高生物识别安全系统的性能和可靠性。
人脸识别
面部识别算法分析人脸上的 64 个参考点,如鼻子的水平和垂直长度、鼻孔的宽度、下巴的尺寸、颧骨和前额的位置以及两眼之间的水平距离。
接下来,形成面部特征的维度描述符向量,并通过确定该新面部和数据库中每个其他面部之间的欧几里德距离来与数据库图像进行比较。如果存在匹配,它将被标记。
然而,问题是存在的。在社交媒体和其他照片公开来源的时代,获得一张人的照片可能是微不足道的。生物识别的主要安全因素之一是确认用户的面部是“活的”。
面部识别需要两个主要策略:
- 首先,活体检测——确定所述图片不是任何类型的遮罩或经修改的图像,并使用反欺骗技术来确认摄像机前的人是活体。
- 第二,将照片与正式的身份证明——将提交的自拍照片与某种正式的身份证明进行交叉比对。这种方法使用光学字符识别技术,对照正式的身份证明检查图片上的文字。正式身份证件上的数据可以作为一个有价值的指标。
声音识别
在生物特征验证系统中,语音验证是最具成本效益的系统之一,因为它只需要一个能够进行语音分类的应用程序和一个捕捉语音的麦克风。
为了产生用于验证的高质量语音样本,应该要求用户说出由单词或数字组成的密码短语。处理语音识别的算法能够辨别单个说话者的语音中的特征和模式之间的相似性和差异。一旦声音样本被读入,它就可以直接与先前已经被分析并存储在预先存在的数据库中的声音模型进行比较。
值得注意的是,语音识别技术的当前状态并不是 100%准确或完美的。随着时间的推移,一个人的声音会因年龄、健康状况甚至情绪等因素而改变。
但生物识别领域的人工智能能够在这方面提供帮助。可以通过处理语音中常见的失真以及常规的背景噪声来训练系统。神经网络能够从遇到的这些类型的虚假输入中学习,并在分析语音样本时将其过滤掉。
光学字符识别
OCR ,一种经典的机器学习和计算机视觉任务,用于区分物理文档数字图像中的印刷或手写文本字符,不是官方的生物识别技术。但是它可以用作将提供的信息与用户文档进行比较的初步工具,例如用于驾照识别。
开发多模式识别系统
在下表中,您可以找到我对生物识别解决方案比较的研究结果。
它证明了没有单一模式的生物识别解决方案能够提供足够高的安全级别来避免黑客攻击。这就是为什么应该使用多式联运解决方案。
以多模式生物特征识别为特征的系统需要确认至少两个标识符,这导致更高水平的准确性。
让我们概述一个基于语音和人脸识别技术的系统,并通过移动应用程序进行访问。
在第一阶段,潜在用户将创建一个照片印记,该照片印记将通过相机存储在相关设备上。OpenCV 库将有助于生物特征印记的转换和标准化。
然后,系统将使用 64 个面部标志解析照片。一旦映射,地标和用户面部的整体剪切图像将被输入到深度神经网络中。这个网络是在 TensorFlow 库的帮助下教授的。
一旦神经网络处理了面部图像,它将创建一个 eDNA 特征向量,该向量代表用户面部图像的所有主要生物特征。eDNA 向量通常测量大约 2048 位。
现在,可以将 eDNA 向量与系统数据库中已经存档的记录进行比较。这种方法不能被逆向工程,因为任何潜在黑客都没有能力访问数据库中的原始记录。
最后,该系统将每隔一段时间对用户的图像进行更新记录,以跟上用户潜在的变化。
在第二阶段,用户通过麦克风给出声音样本。Librosa 库接收音频样本,将其转换为可用的形式,然后将生物特征发送到神经网络(DNN)。
再一次,2048 eDNA 向量将被创建,将像语调、速度、木材、音高和神经网络已经被教导的其他方面的特征考虑在内。
通过生物特征数据的多模态组合来验证用户身份的想法越来越流行。推动采用率上升的是在识别用户时需要更高的准确性,同时击败欺骗或黑客攻击企图。
由机器学习技术驱动的生物识别验证将是决定 2020 年及以后人工智能未来的关键趋势之一。
作为一名数据科学家,你为什么不应该是一个完美主义者
以及如何克服你身上的完美主义
我不确定你。
也许你是一个现实主义者,在任何情况下,你总是实事求是地思考,以实际的方式行动。
或者也许你已经在现实和追求完美之间找到了平衡。
但追求完美一直是我的负罪感。
我不是说追求完美是一件坏事,但是追求完美 【可能】 是一件坏事,尤其是当你在数据科学领域的时候。
完美是不可达到的,但如果我们追求完美,我们就能追求卓越
——文斯·隆巴迪
在我从学术转向数据科学的道路上,在数据科学领域呆了相当长一段时间后,我学到了很多关于能够交付商业价值,同时仍然有带宽来做出优秀的交付品的知识。
因此,我希望与您分享我的想法和经验,希望让您在日常的数据科学工作中有所认识,以及如何克服您身上存在的完美主义。
在这篇文章结束时,我希望你能更好地理解,作为一名数据科学家,为什么追求完美主义可能不是一个好主意,以及如何在你的职业生涯中——或者在生活中——克服这一点。
我们开始吧!
作为一名数据科学家,你为什么不应该是一个完美主义者
你看。
当你是数据科学领域的初学者时,很容易陷入盲目追求完美的陷阱而不了解公司业务的真正需求。
想象一下,你刚加入一家公司,是一名初级数据科学家,现在给你一个项目,为图像分类建立一个深度学习模型,并在六个月内投入生产。
不用说,你对这个项目非常兴奋,并且已经和你的团队成员交换了一些想法。
六个月后,您错过了最终交付的截止日期,因为您仍然认为您的模型不够好,尽管事实上您的模型已经超越了现有的基线模型。
所以你不断地调整你的模型,希望把最后一点提高的精度挤出 2%…
正因为如此,你错过了项目交付(将模型投入生产)的最后期限,你的老板怀疑你作为数据科学家的资质和能力。接下来会发生什么?现在你变得沮丧并且想知道为什么你的老板就是不理解你的工作。
不知何故,这听起来熟悉吗?
“完成比完美更好”
其实类似的案例也发生在我上一次数据科学实习刚入门的时候。
我看了很多研究论文。
我试图训练和调整不同类型的模型,在没有充分了解业务需求的情况下找到最佳模型。
我所知道的是,我得到了有史以来最好的模特,就像我在任何卡格尔比赛中所做的那样。这正是 Kaggle 竞赛和现实生活中的商业项目之间的区别。
在 Kaggle ,你是你唯一的利益相关者,你只需要训练出最好的模型,然后“嘣!”…你赢得了比赛。
在现实生活中的商业项目,情况并非如此。你的老板和其他利益相关者只有有限的资源(时间或金钱)来交付最终的结果。
现在,我意识到交付真正的商业价值是任何数据科学项目的最终目标。如果你是一个完美主义者,你很可能无法总是向客户交付解决方案,因为你可能无法向他们交付 最小可行产品(MVP) 。
有了 MVP 和来自客户的反馈,您可以进一步迭代和改进未来的产品开发(或数据科学解决方案,无论您如何称呼它)。
如果你是一个完美主义者,你总是倾向于给自己和每个人设定不切实际的期望。
如果你是一个完美主义者,你会发现自己在努力完成工作(或者你可能认为你的工作总是不够好,不能被认为已经完成)
如果你是一个完美主义者,你会害怕犯错,这会剥夺你学习和提高的机会。
如何克服你身上的完美主义
知道什么时候不做完美主义者有时可能是塞翁失马焉知非福。
跟你说实话,我承认我身上的完美主义还是存在的。我认为这仍然是一件好事,当且仅当我知道如何“适时”追求完美。
也就是说,每当我意识到自己有拖延的倾向时(我的意思是追求完美),以下是我个人使用的一些步骤。
1。意识到这一点
是的。自我意识是这里的关键。
如果你甚至没有意识到你开始追求完美的时刻,你就没有办法克服它。换句话说,为了克服你身上的完美主义,首先你需要意识到这一点。
开始质疑你自己,为什么你在做你正在做的事情,你正在做的事情将真正有利于商业价值。通过与自己进行这种内心对话,你将开始在正确的时间优先考虑正确的事情。
我知道这听起来有点抽象。所以要花时间去消化和练习。
2.挑战自己,对自己建立更现实的期望
创建一个最小可行产品(MVP)并理解**“什么足够好”**并交付给你的客户。
取决于你正在解决的问题和行业,在某些领域,不完美是完全可以接受的。
准备好为自己设定现实的期望,而不是以更深入的调查和更好的结果为名掉进无限的兔子洞。然而,如果时间和其他资源允许,理想的情况总是更深入,并使结果更好(或更准确)。
3.接受错误和失败
没有绝对的完美。因为总有进步的空间。
拥抱失败,接受你会在前进的道路上犯错误的事实。要有韧性,从错误中学习,不断进步。
这样,你就能通过不断朝着目标前进来克服自己的完美主义,并在前进的道路上不断进步。
最后的想法
感谢您的阅读。
我希望现在你已经更好地理解了为什么作为一名数据科学家追求完美主义可能不是一个好主意,以及如何在你的职业生涯中克服这一点。
虽然追求完美是非常好的,但这取决于你自己,根据你的情况和背景来决定和优先考虑什么是最重要的任务。
一如既往,如果您有任何问题或意见,请随时在下面留下您的反馈,或者您可以随时通过 LinkedIn 联系我。在那之前,下一篇文章再见!😄
关于作者
Admond Lee 目前是东南亚排名第一的商业银行 API 平台Staq**—**的联合创始人/首席技术官。
想要获得免费的每周数据科学和创业见解吗?
你可以在 LinkedIn 、 Medium 、 Twitter 、脸书上和他联系。
让每个人都能接触到数据科学。Admond 正在通过先进的社交分析和机器学习,利用可操作的见解帮助公司和数字营销机构实现营销投资回报。
www.admondlee.com](https://www.admondlee.com/)
为什么你不应该说“这项研究动力不足”
确保我们对权力的批评是相关的、清晰的,并基于良好的统计数据
最近在 Twitter 上,我批评了声称实验或研究“动力不足”的常见做法(有些人可能会说是“速记”)。这最终成为一条受欢迎的推文,这是我没有预料到的(这是一个相当神秘的统计点),但鉴于它对实验设计中最近一些问题的重要性,我认为它值得在一篇博客帖子中重新审视。
首先,我们必须谈谈什么是权力,因为——具有讽刺意味的是——这被所有人误解了,包括统计改革运动。那些抱怨价值观被误解的人会继续搞砸权力。
正如我上面所说的,首先要澄清的是,学习或实验并没有动力不足;相反:
一个设计和测试组合可能不足以检测感兴趣的假设效应大小。
看到这一点的最简单的方法是,我可以选择对来自同一设计的数据应用许多测试;例如,我可能会选择使用符号检验、t 检验或 Wilcoxon 检验;我可能会选择检验一个关于方差而不是均值的假设,或者关于组中最小或最大观察值的假设。所有这些测试都有不同的“效果大小”,并且它们都可以应用于相同的设计,但是每一个都依赖于不同的数据汇总作为统计证据。功效还取决于“决策”标准的选择,该标准通常是参照选定的(但可变的)α(I 型误差)概率来选择的。
关于权力,有一个微妙但重要的点经常被忽略。定义中未提及所述效果大小的实际值。很奇怪,对吧?大多数人似乎认为,如果真的有影响的话,权力就是被计算出来的真实价值。这是一种误解。这将使显著性测试成为一种伪贝叶斯测试,我们需要指定一些我们认为似乎合理的量。但这不是显著性检验的工作方式。
相同的设计和统计测试组合具有相同的功效(曲线),无论我们是否将其应用于具有大的、容易复制的效果的 Stroop 实验,或者说,没有任何效果的超感官知觉实验。有些人觉得这很奇怪,但这正是我们在其他情况下对敏感的看法。着火房屋中的相同设计的烟雾报警器与未着火房屋中的具有相同的灵敏度,因为灵敏度是基于反事实状态,而不是世界的实际状态。可能是什么,而不是是什么。
想象一下,如果不是这样:一个住在没有着火的房子里的人可能会说他们的烟雾报警器“功率低”(灵敏度),仅仅是因为它从来没有响过。这类似于一些人试图从数据中“估计”功率的方式(例如,特设功率,或估计“未知”功率)。事实上,这类工作与统计能力没有任何关系,除了数学方程式是相同的这一点。
我们最好考虑一下“设计灵敏度曲线”,而不是“功率”这个令人困惑的怪物。谈论第一类和第二类错误/概率(以及“自然状态”)使人们认为这些是离散的、真实的概率,而不是在曲线上反映可能性*。*
让我们建立一个例子。有几分钟的时间,忘掉α、β以及 I 型和 II 型误差“率”。
榜样的力量
假设我为一家糖果公司工作,已经决定我们的新糖果要么是绿色的,要么是紫色的。我们的任务是找出人们更喜欢绿色还是紫色的糖果,所以我们设计了一个实验,我们给人们两种糖果,看看他们先拿哪个。对每个人来说,答案不是“绿色”就是“紫色”。我们先把θ称为选紫色的概率,所以我们感兴趣的是θ是否> . 5(也就是优先选紫色)。没有理由我们不能测试糖果制造商可能感兴趣的其他假设(例如,θ>.7,“紫色基本上是首选”);我们只是为了演示而构建这个测试。
Power/sensitivity curves for the candy example. The green region (left) represents when green candies are preferred; the purple region (right) represents when purple candies are preferred). A is the curve for deciding that “purple is preferred” when 31 or more people pick purple first; B is the curve for deciding that “purple is preferred” when 26 or more people pick purple first.
假设我们的设计是 N=50 人选择糖果色。我们现在需要一个测试。显然,在这种情况下,数据中的证据是由我们观察到的首先选择紫色的人数携带的。因此,我们为这个数字设定了一个标准,例如:“如果 31 人或更多人选择紫色,我们就说紫色是首选(即θ>.5)”。我们现在可以绘制设计和测试的功效/灵敏度曲线,给出所有潜在的假设效应大小(如左图所示,曲线“A”)。
“功率分析”就是简单地记录下这条曲线的特征(也许通过增加 N 来改变潜在的设计)。看曲线 a,如果首选绿色糖果(θ <.5 we=“” have=“” a=“” very=“” low=“” chance=“” of=“” mistakenly=“” saying=“” that=“” purple=“” candies=“” are=“” preferred=“” is=“” good=“” if=“” substantially=“”> .7),我们很有可能正确的说首选紫色(也不错!).这些都是反事实,在任何情况下我们都可以用这种设计进行测试:糖果,真/假测试,掷硬币,等等。这种力量不取决于什么是真的,只取决于什么可能是真的,以及我们如何设置设计/测试。
现在让我们考虑这个设计的另一个测试:“如果 26 个或更多的人选择紫色,我们就说紫色是首选(θ>.5)”。这可能是因为每当数据似乎“偏爱”紫色时,我们就会声称紫色是真正的首选。这是上图中的曲线“B”。让我们做一个功率分析。如果紫色基本上是优选的(θ>.7),我们基本上肯定正确地说紫色是优选的(好!).如果绿色糖果是首选,(θ <.5 we=“” could=“” have=“” a=“” high=“” chance=“” of=“” mistakenly=“” saying=“” that=“” purple=“” candies=“” are=“” preferred=“” is=“” bad=“”/>
Crucially, what determines our judgment about a power/sensitivity curve is whether it meets our purposes. We want to be sufficiently protected from often making false claims (saying “purple is preferred” when green actually is), and we want to be able to say “purple is preferred” when it is to some important degree. What is important is determined by us. Do I care if purple candies are preferred at θ=.500001? No. I don’t care about detecting effects that small. But if 70% of the time people reach for the purple candy, (θ> .7),我会在意。所以我确保我的能力/灵敏度曲线在那个区域是高的。
设计灵敏度分析——通常称为功效分析——只是确保灵敏度在“零”为真的区域较低(用普通术语来说,“控制”α),并确保功效/灵敏度在我们关心的区域较高。这些都与从以前的结果中“估计”能量无关,也与真正的 T2 效应无关。
批判力
现在我们已经从正确的角度探索了权力的概念,我们可以更好地理解一个好的权力批判是什么样子的。这里有一些我们可以说的话来评论一项关于权力基础的研究。权力批判是设计批判!
先挑效果尺寸:**“这种设计即使是 X 非常大的效果尺寸,灵敏度也很差;这个实验一开始就不应该做。”**这是非常令人信服的设计评论,即使在研究完成之后。你不会因为一项设计糟糕的研究碰巧“意义重大”而得到好评。然而,重要的是,这种批评涉及到批评家承诺某种效果大小的兴趣。没有这种承诺,你就不能做出权力批判。“这个样本量感觉小”不够好。
首先选择功效:“这种设计不超过 0.5 的功效来检测像 x 一样大的效果尺寸。看起来作者想要检测一种效果,如果它确实那么大的话”。许多人很难理解什么是“重要的”效应大小。我同情;这就是为什么我认为选择 0.5 的“基础”功率,然后计算出 0.5 功率的效果大小比选择一个足够重要的效果大小更容易。如果功率是 0.5,你会经常错过一个效果,因为检测到它,所以功率 0.5 是一个很好的起点来评估一个设计。这不是终点,但它可以很容易地捕捉到非常糟糕的设计。
关注设计的其他方面:“感兴趣的测试是适当的,但所选设计中的样本量太小,以至于很难或不可能检查测试的假设。”这是对可能导致你质疑结果的事物的敏感性的批判。数据分析的一个关键部分是质量控制,如果你不能在你感兴趣的分析之前进行质量控制,你应该对你的分析没有信心。设计计划不仅应该包括感兴趣的测试/效果,还应该包括任何质量检查。
重要的是,这些批评是实验设计,而不是结果。你可以超越设计评论;另一方面,如果所讨论的影响是显著的,这意味着影响的大小必须非常大,因为如果它更小,它几乎没有机会被发现。鉴于什么可能实际上是真的,科学判断随后对结果的合理性发挥作用。但这种扩展不是权力批判,当他们的实际批判是一种似是而非的批判时,批评家不应该躲在“权力”的背后。似是而非的评论很难做出,因为它们是主观的,但是你必须拥有这种主观性并为之负责。
关于这个问题的更多信息,你可以参见 Mayo 和 Morey(预印本)关于为什么涉及所谓的“后验预测值”或“错误发现率”的功效批评是有问题的(最多),或者 Morey 和 Lakens(预印本)关于为什么功效在流行的复制研究中构思不佳。是的,我写这篇文章是为了拖延那些论文的修改和提交,但是我希望它是一个好的入门。
为什么你会后悔没有雇佣本科生
Photo by Good Free Photos on Unsplash
您即将从本科毕业,对获得数据科学家的第一份工作感到兴奋,并开始寻求申请。你在 Indeed 和 LinkedIn 上寻找工作,很快就变得很困惑——几乎所有的工作要么要求有工作经验,要么要求有高等学位。你两样都没有。那么——你是做什么的?嗯,您有几个选择,其中一些我在以前的文章中讨论过:
进入数据科学领域的建议
towardsdatascience.com](/standing-out-in-a-sea-of-data-scientists-c82e42a1e62b)
但是,在这篇文章中,我想从一个不同的角度来解决这个问题。招聘公司的观点。创建该职务公告的公司。我想让这些公司相信,他们肯定会后悔没有招聘没有经验的应届毕业生作为数据科学家。
他们准备好了
数据科学和人工智能需求的兴起为本科生创造了大量学习技能的机会,这些技能以前只在硕士或博士项目中教授。例如,麻省理工学院刚刚宣布一项 10 亿美元的计划,创建一所新学院,“将人工智能、机器学习和数据科学与其他学科结合起来。”许多学校现在为本科生开设了数据科学专业。虽然像任何专业一样,这些项目的质量可能会有所不同,但这确实意味着的本科生比以往任何时候都更愿意为数据科学团队做出贡献。
他们饿了
大学生通常带着充沛的精力和干劲进入就业市场。他们刚刚完成了 4 年的学习,很高兴能够应用他们的知识并产生影响。最好的人也有学习和成长的强烈愿望。驱动力和成长相结合可以给团队增加大量能量。此外,在适当的指导和指引下,你的无经验本科生将会迅速提高自己的能力,成为你团队的重要贡献者。
它们很有影响力
我认为,公司聘用没有经验的本科生的一个担忧是,他或她将难以为公司增加价值。根据我的经验,这与事实相去甚远。数据科学团队中有许多项目既不需要以前的经验,也不需要研究生学位来增加价值。例如,也许你一直忽略了用新数据重新训练你的人工智能模型。让您的新员工在代码上放松,以理解模型,运行它,根据更新的数据重新训练它,并进行一些错误分析,以发现其他潜在的改进机会。这不仅会改进你的模型,还会帮助你的新科学家成长,因为他或她与团队中更有经验的成员一起帮助改进他们的模型。这也给了更多资深科学家领导和指导他人的机会——从本质上扩大他们的知识和影响。
它们是可扩展的
这是一个更实际的观点,但市场上的应届本科生比博士或有 10 年经验的人多得多。由于许多公司在雇用本科生方面做得不太好,这也使得吸引优秀人才变得更容易。这对成长中的数据科学团队来说是一个完美的组合。**雇佣几个关键的高管,然后通过雇佣聪明、渴望、有动力的应届毕业生来帮助他们扩大规模。**通过正确的指导和流程,这些没有经验的新员工将很快为你的公司增加大量价值。
Photo by Tomasz Frankowski on Unsplash
不后悔
现在——下次你为下一个数据科学职位写招聘启事时,问问你自己,一个刚毕业的大学生是否是最合适的人选。如果是这样,请适当地修改帖子。我发现本科生很容易被“需要”丰富经验、培训或学校教育的职位吓跑。相信我,你不会后悔发现如何有效地将新生融入你的数据科学团队。
这篇文章也可以在这里找到。
为什么你的人工智能可能是种族主义者,该怎么办
Individually reasonable correlations can cause an AI to gain a racial bias
即使是设计良好的人工智能系统也可能最终出现偏差。
这种偏见会导致人工智能表现出种族主义、性别歧视或其他类型的歧视。完全出于偶然。
这通常被认为是一个政治问题,并被科学家忽视。结果就是只有非技术人员写这个话题。
这些人经常提出政策建议,以增加人工智能研究人员的多样性。
具有讽刺意味的是令人震惊的:一个黑人人工智能研究人员不会建立一个与白人人工智能研究人员有任何不同的人工智能。这使得这些政策建议本身带有种族主义色彩。出于其他原因,增加人工智能研究人员多样性仍然是有意义的,但它肯定不会有助于使人工智能系统不那么种族主义。
人类中的种族主义是一个社会问题,但人工智能中的种族主义是一个工程问题。
人工智能中的种族主义需要像任何其他类型的工程问题一样得到解决。政治化很可能适得其反,弊大于利。
那么,一个人工智能怎么会是种族主义者呢?
好消息是:
人工智能没有自己的政治议程。只有当它被训练成种族主义者时,它才是故意的种族主义者。
坏消息是:
一不小心把一个 AI 训练成种族主义者是非常容易的。
在这篇文章中,我将解释种族偏见是如何出现在人工智能中的。我还将讨论一些在技术层面上处理这个问题的方法。
(顺便说一句:同样的论点也适用于对女性的偏见或其他类型的歧视。)
1.偏置数据
通过对有偏差的数据进行训练,有可能使人工智能有偏差。除非你非常小心,否则这很容易意外发生。
以这篇文章为例,关于一个在公共数据上训练的人工智能。人工智能最终带有种族偏见,因为它的训练数据是基于互联网:【https://www.theregister.co.uk/2019/09/05/ai_racist_sexist/
众所周知,互联网不是最好的地方。经过训练的人工智能会接受它的先入之见,结果变得很可怕。训练人工智能的一般原则是:垃圾进,垃圾出。
也有可能使用合理的数据而没有任何种族偏见,但最终仍然得到一个有偏见的人工智能:
数据集必须具有来自每个种族群体的代表性数据量。这是因为人工智能在学习种族方面投入的努力量与它在数据集中的频率成正比。人脸识别人工智能往往比任何其他种族更适合白人。偏斜的训练数据集是造成这种情况的部分原因。
如果你认真的话,修复这个问题并不太难。通常,您可以更加努力地选择您的数据集,因此它包含更少的偏见,并且具有更具代表性的种族分布。
如果做不到这一点,至少可以用关于数据来源的指示变量来注释数据。通过这种方式,你可以教会人工智能显式地对训练数据中的偏差进行建模。之后,挑选最种族主义的数据来源。告诉人工智能忘掉任何与其他数据不同的东西。这就像指着最种族主义的人,命令人工智能不要模仿他们。这不是一个完美的解决方案,但总比没有强。
请注意,即使培训过程是公正的,也可能出现问题。有可能某个特定的人工智能算法只是客观上在某些任务上不如其他算法。
举个例子:自动驾驶汽车在夜间探测黑人比白人更困难,因为他们的皮肤在黑暗中更难被看到。这不是种族歧视,只是不幸。不过,这显然还是个问题。为了解决这个问题,你需要确保你付出了适当的努力来教会人工智能如何解决这些更困难的任务。
2.相关性不等于因果关系
一旦训练数据是公平公正的,我们仍然要处理 AI 本身的一个问题。如果你在这里使用神经网络,或者其他东西,这并不重要。事实上,所有流行的人工智能形式都存在这个问题:
我们的核心问题是,人工智能不知道它的任何输入在现实中意味着什么。
人工智能只是获得数字作为输入,而不理解它们在现实世界中的含义。它必须自己学习因果关系,但它只能猜测,而且往往会被证明是错误的。
例如,假设我们正在训练一个人工智能来接受或拒绝工作申请。这个城市的一个街区是犯罪猖獗的贫民区。该地区所有以前的申请者都是坏人。人工智能“知道”来自这个地区意味着你是一个糟糕的申请人。现在,人工智能收到了一份新的申请:一位年轻的黑人女性,她获得了诺贝尔奖。那个女人真的运气不好:人工智能不知道什么是“诺贝尔奖”,因为它以前从未在申请中遇到过。它只是注意到她来自同一个社区,在她之前的每个人都很糟糕。所以人工智能立即拒绝了这个申请。
更糟的是:
许多机器学习算法是无法解释的。这意味着不可能让人工智能解释其决策背后的原因。
有些算法是可以解释的,比如决策树。你可能会认为在可解释的算法中检测种族主义很容易。这只是部分正确。
在一个可解释的算法中,你可以直接检查“种族”是否被用来做决定。然而,这并不能让你注意到间接的相关性。也许人工智能“知道”在某个特定的街区长大会成为一个糟糕的候选人。恰好以黑人为主的街区。发现这种相关性并解释它们需要付出努力。
因此,为了防止种族偏见,我们必须找到一种方法来检测虚假的相关性。但是我们不能直接检查种族对数据的影响。这还不够,因为我们不能排除仍然导致种族偏见的间接相关性。
更糟糕的是:我们有时确实得到了种族和其他属性之间的真实关联。举个例子,我们正在建立一个医疗诊断系统。我们确实希望人工智能了解到一些疾病在不同种族中出现的频率更高。如果我们盲目地消除医学诊断系统中的所有种族相关性,我们可能会害死很多人。
那么我们能做些什么来解决这个问题呢?
我不能给一个明确的答案,因为这是一个极其复杂的问题,有很多特殊情况。以下方法可以作为基线,但绝不是完美的:
首先,确保你明确地使用种族作为你的人工智能的输入。这与你通常在政治正确性讲座中听到的相反。与人类不同,人工智能没有隐含的偏见,也不会采纳其创造者的任何偏见。这意味着,将种族作为一个特征加入进来,可以更容易地检验偶然的相关性,而且没有负面影响。
创建一个生成性对抗网络(GAN)。训练 GAN 制造假的训练数据。
这照顾到了数据中任何偶然的相关性:GAN 创建的假货将以人工智能无法区分的方式创建。这并不能保证人工智能不会学习虚假的相关性。那项任务是不可能的。然而,这将保证人工智能在后期阶段无法绕过自己的反种族主义机制。
现在到了棘手的部分:挑选一些你认为不应该影响预测的训练数据的特征。对于训练数据中的任何人,你现在可以要求 GAN 生成一个不同种族的“等同”人。在生成这些假人物时,您必须只改变所选的安全特征。这确保了假的人是真实的,但没有奇怪的特征,会摆脱预测。
现在,您可以创建假数据来减少数据集中的偏差。因为这些赝品只是在与任务无关的特征上有所不同,所以这不会有任何负面影响。
请注意,这只有在您对可能被更改的特性做出了正确选择的情况下才有效。
也有可能 GAN 将不能仅使用不相关的特征来创建任何好的赝品。如果发生这种情况,你可能在数据中有很多真正的种族关联。
一旦完成 GAN 的训练,实际的预测部分就开始了:
在现有 GAN 的鉴别器网络之上,构建您的主 AI 系统,即应该做出预测的系统。这确保了预测器网络将只使用我们知道不能包含种族偏见的派生要素。
现在用你所有的数据训练新系统。
在培训期间,你可以明确测试种族歧视。对于任何给定的人,你可以创建另一个种族的等效人,并测试该人的预测是否不同。通过对每个这样的案例给出负面反馈,你可以直接惩罚 AI 中的种族主义。
你现在有了一个训练有素的神经网络,它可以做你想让它做的任何事情,而且不太可能有种族偏见。
放弃
你不应该只是盲目地按照我刚才描述的方式来实现它。根据你的使用情况,可能会有很多副作用。它增加了许多复杂性和多重交互,这可能会在许多方面适得其反。这实际上只是对种族主义人工智能问题在理论上如何解决的一个概括描述。它还没有准备好实施。
如果有人有更好的方法,我欢迎在评论中听到。
还要注意,这给模型训练增加了很多开销。它可能会降低人工智能的性能,这是一个副作用。
如果人工智能也更笨,犯更多的错误,那么拥有一个更少种族歧视的人工智能值得吗?如果那个人工智能做出生死抉择呢?在这里,你如何量化什么是值得的权衡呢?这是一个政治问题,我不会用十英尺长的杆子去碰它。
您从这篇文章中应该得到的主要收获是:
- AI 很容易一不小心就种族歧视了。
2.防止这种情况非常困难。
3.这主要是一个工程问题,而不是社会问题。
为什么贵公司需要可重复的研究
Photo by José Alejandro Cuffia on Unsplash
今天的科学——尤其是社会科学——有点混乱。许多最重要的实验和发现是不可重复的。这种“可复制性危机”不仅对学术研究和开发的未来有着重大影响,对任何希望通过投资创新、实验和数据分析获得更高回报的企业也是如此。企业需要从科学的错误中吸取教训。
作为 Arnold Ventures 的研究副总裁,我对这场持续的危机非常了解,因为我为这些“第二次审视”的努力提供了大量资金。以下是我们资助和发现的一个令人不快的例子:
- 2015 年,《科学》发表了有史以来规模最大的复制项目的结果:心理学中的再现性项目,全球数百名研究人员试图复制顶级期刊上的 100 个心理学实验。只有大约 40%的发现可以被成功地复制,而其余的要么是不确定的,要么肯定不能被复制。
- 2018 年 8 月,社会科学复制项目复制了2010 年至 2015 年发表在《科学》或《自然》杂志上的全部 21 个社会科学实验。21 个实验中只有 13 个可以重复。即便如此,重复实验显示“效应大小”——宣布的发现的大小——通常只有最初宣称的一半左右
除了这些众所周知的复制项目,研究人员还在关于经济学、金融、营销、管理学、组织科学和国际商业的研究文献中记录了可复制性问题。事实上,在分析了 2000 多项商业实验后,Ron Berman 和他的同事们估计42%的显著影响实际上是误报。
正如斯坦福大学的约翰·约安尼迪斯告诉《华盛顿邮报》的那样,“我原本期望这些结果在[顶级]期刊上更具可重复性。”全世界的科学机构都认真对待这些发现,并采取行动。例如,国会正式要求国家科学院就如何解决科学中的再现性问题编写一份主要的国家报告。
从阿里巴巴到谷歌,从脸书到网飞,从微软到亚马逊,数字创新者已经积极接受大规模快速实验,将其作为创新努力的一部分。但是每一个从实验中寻求真实洞察力的组织都需要警惕那些使科学研究变得不可靠的问题。
基于文献,基于“可重复研究”的努力,以及与深入了解这些问题的科学家的持续互动,我为商业实验者建议四个关键的“最佳实践”。
- 激励很重要:不要过分强调积极的结果
不要把拇指放在天平上,期望从你的部门或团队那里得到“积极的”结果,他们通过做实验把他们的工作置于危险之中。实验是为了测试和学习,而不是验证某人已经决定要做的事情。
展示结果的压力在整个研究过程中产生了偏见,导致了我们在学术界看到的重现性问题。但是正如吉姆·曼兹和其他人指出的那样,大多数想法并不那么有效。这就是一开始做实验的全部原因(如果我们已经知道所有可行的东西,为什么还要费神去做实验呢?)
当然,当一项实验显示某种东西“有效”时,兴奋是人之常情——无论是治疗白血病的药物还是增加收益或收入的营销创新。但这意味着人们可能会被诱惑(甚至是无意识地)通过任何必要的手段找到这样的结果。如果一家企业要做实验或任何其他类型的数据分析,最好掌握全部真相,而不是让过程有所偏差。
因此,我建议不要刻意要求实验和数据分析来遵循最佳实践,并表明你更关心质量保证,而不是寻找“令人兴奋”的结果。
2。激励很重要:价值复制
即使当一个令人兴奋的结果出现时——比如说,一个提高提升率或注册率的广告实验——这个也不应该意味着立即扩大规模。即使实验做得极其严谨,假阳性还是会存在。因此,与其从对几个客户的研究到在全公司范围内实施该发现,不如在分析师进行一个或多个复制实验的同时,更缓慢地逐步实施该发现。事实上,你可以考虑像罗尼·科哈维在微软做的那样:即使你向客户或网站访问者推出了一项新的实践,也要在持续的基础上随机保留 5%或 10%作为控制组。然后,如果新的实践停止工作,你会知道。
学术界的一个主要问题是,小心翼翼的复制很少得到回报,尽管这通常是必要的。但在任何一家公司,没人需要担心说服整个领域关注复制。你只需要为自己接受好的实践。
3。这个世界很复杂
不可复制性的一个隐藏的、经常没有记录的原因是现实极其复杂这一不可回避的事实。在细胞生物学的一个著名案例中,哈佛和伯克利的科学家们在一个看似简单的乳腺癌细胞实验中得不到一致的结果。用他们的话说,“一组本该几个月完成的数据,花了 2 年时间去理解和整理。”两年后,他们终于意识到,在实验的某一点上,两个实验室一直在以不同的速度搅拌组织。仅此一点就足以让实验以不同的方式进行。
商业实验也是如此。关于商业本身、经济、政治和文化条件以及用户的个人特征的无数因素可以从根本上影响实验结果,即使是优秀的设计。
更糟糕的是,一些商业实验有数百万个实验对象,这意味着他们可以发现即使是最微不足道的影响也是显著的。想想著名的关于情绪传染的脸书实验,在这个实验中,人们被展示了不同数量的来自他们朋友的“正面”或“负面”帖子,然后研究人员测量了人们自己的帖子后来是使用了更多的“正面”还是“负面”词汇。发现的影响小到百分之四。以此类推,这就像发现克利夫兰骑士队的平均身高只比金州勇士队高千分之三英寸。这种微小的影响不仅在现实世界中意义不大,而且在下一次测量中,如果一个人站得稍微高一点,或者稍微低一点,这种影响就会消失。
同样,对数百万谷歌或亚马逊用户进行的“大数据”实验可能会发现生活水平的微小变化。但是如此小的影响几乎可以被任何东西改变,包括公司在日常业务过程中可能做出的成千上万看似微小的变化。
这就是期望定期复制更加重要的原因(第 2 课)。即使一个实验在第一次、第二次、甚至第三次尝试中成功了,那些最初的实验也可能会“过期”,可以这么说,如果仅仅是因为时间的流逝和用户的成分或口味的变化。假设一个显示收入增长 1%的实验可以外推至整个业务部门并一直保持 1%的增长,这在统计上和经济上都是不明智的。
4。让员工跟上研究实践
研究中的基准方法最佳实践。科学中的再现性问题部分归结于教育、培训和对良好统计实践的熟悉。确保你的团队中至少有一个人是职员,或者有一个固定顾问,他了解最新的研究最佳实践。
科学中的再现性危机带来了许多重要的教训,比如如何组织实验,如何进行数据分析等等。注意这些教训,商业实验可以通过展示什么真正有效以及对谁有效来提供竞争优势。
为什么您的数据项目会(可能)失败
您被要求为您的组织构建一个新的数据平台。很刺激,对吧?除了,你更有可能失败而不是成功。
Gartner 估计 60%的数据项目失败,一些分析师认为这是一个保守的估计。
以下是我认为导致数据项目失败的一些原因。
数据中没有价值
数据已成为最重要的商业资产之一,但大多数组织并不重视数据。数据通常被视为功能的一个分支,很少考虑如何使用它来推动组织的价值。
“数据是新的石油”已经成为描述数据价值的常用短语。原油是未经提炼的,虽然它有一些内在价值,但在实现其真正价值之前,它需要进一步加工。太多的组织满足于收集原始数据,很少考虑将其提炼为有用的产品。
没有组织范围的数据策略
康威定律,通常应用于软件开发,陈述如下:
设计系统的组织……被限制生产这些组织的通信结构的复制品。
这条定律成立,并且在数据空间中可能更准确。组织的每个领域都将数据存储在只适用于其用例的结构和位置中,很少考虑如何被组织的其他领域共享或利用。
如果没有一个集中的功能来定义一个组织范围的解决方案,很可能会出现数据孤岛,数据存储在单独的数据存储中。即使在更好的场景中,数据被存储在一个集中的位置,数据结构也不是以开放的心态处理的。这导致不太明显,但同样有问题的筒仓。
技术主导的解决方案
不成熟的组织通常将数据视为可以通过技术解决的技术问题,通常认为数据是由技术系统产生并存储在技术解决方案中的。
这导致数据解决方案由独立于组织其他部分的技术团队开发。数据解决方案的架构通常由软件架构师和开发人员执行,他们对数据的细微差别知之甚少。
很自然,这导致了次优解决方案,要么导致平台的交付不适用于大多数最终用户,要么导致漫长而曲折的交付过程,导致大量的重新设计和重新工作。
不清楚
组织及其领导者正被数据驱动的决策所带来的提高绩效的承诺所诱惑。这导致来自高层的声明,例如:
数据是我们的第一要务。
我们组织的每个领域都必须在决策中利用数据。
如果不获取数据,任何新产品或新系统都无法交付。
虽然这些听起来像是有用的法令,但它们可能会产生意想不到的后果。通常,它会在组织中灌输一种“数据狂潮”的感觉,导致定义不清的需求和数据捕获,而没有考虑如何使用和将如何使用数据。
数据狂潮也可以表现为一次做所有事情的需求,因为需要被视为“在做数据”。这导致所做的决定很少关注这将如何使组织受益,而更多的是打勾,以确保你不会被指责没有做正确的事情。
忽视技能差距
组织通常已经有了历史悠久的数据存储库。数据仓库已经存在很长时间了,它们经常被用来进行分析。
然而,用于交付这些工具和分析其中保存的数据的技能与构建现代数据平台并从其中保存的数据中提供深刻而有意义的见解是不同的。
大多数组织未能理解,向现代数据平台的过渡将需要现有劳动力的大规模技能转移,并努力规划弥合差距。
近年来,对高技能数据人才的需求激增,大多数组织不愿意投资招聘这些人,而是满足于利用现有员工。这是一种虚假的经济。假设你有一个很棒的数据平台,如果没有优秀的人一起工作,你将无法从中获得真正的价值。
结论
数据项目最常因人的问题而失败。技术问题通常可以相当容易地解决,但是人是一个非常困难和微妙的问题。
重要的是要认识到,你的数据项目要取得成功,必须是一个整体的方法,包括来自你的组织的所有领域的人以开放、协作的心态工作。
没有这一点,您的数据项目将(很可能)失败。
为什么你的机器学习模型可能正在融化冰山。
像你们中的许多人一样,我自学了机器学习,我还记得我第一次在模型训练中离开笔记本电脑的那一天,风扇嗡嗡作响,几个小时后回来时发现它仍然嗡嗡作响。“嗯”,我想,“也许我需要一个 GPU”。各位 DIY 思想家:试图拆开一台旧的 Xbox 不是一个好主意,但是你可以自己组装一台。在更久以前的日子里,我家的能源使用有时会在玩视频游戏和开空调之间做出选择:下雨的夏日午后,Xbox 风扇和额外的外部 Xbox 风扇都在与视频游戏和其他电子武器争夺声音优势。那是关于能源效率的讨论引发气候变化辩论之前的日子。现在我们有“绿色 AI”和“红色 AI”。
**人工/增强智能(AI)中所有新计算能力的碳足迹是多少?**什么是「绿色 AI」对「红色 AI」?对于那些需要快速查看的人来说,“绿色人工智能”是经过优化的人工智能,可以最大限度地减少资源利用和环境影响,无论是通过数据中心资源优化,平衡训练数据要求与准确性,选择资源密集度较低的模型,还是在某些情况下转移学习与新模型。另一方面,红色人工智能:胡安·德·迪奥斯·桑托斯上个月在他的文章中做了很好的工作,提供了更详细的评论。
在马萨诸塞大学的一项研究中,研究人员使用二氧化碳磅数作为“红色 AI”水平的相对测量值。他们估计从纽约到旧金山的一次往返飞行的载荷为 1984 磅。记住这个数字,你可以在高速沙丁鱼罐头中享受近 40 次海岸到海岸的飞行,以匹配 NLP 训练、调整和实验管道的二氧化碳当量(78,468 磅)。
如果你想为语言翻译开发一个完整的“Transformer”模型,并平衡该模型的碳足迹,那么你和你的四个朋友可以步行或骑自行车,并选择十年内不开车(普通客车每行驶一英里排放 0.78 磅二氧化碳)。你可以像我们在荷兰的朋友在这个视频中一样享受在户外的旅行(视频时长 4 分钟,配有适合办公室的音乐)。
**我们怎样才能最大限度地减少这种“红色艾”能源对环境的影响?**已经尝试使用深度强化学习来解决冷却成本,如本研究中所述,该研究将冷却成本降低了约 11%(超过手动配置的算法)。像碳继电器这样的公司正在将最大化数据中心的能源效率作为他们使命的一部分。
其他人已经提议将模型效率和成本与模型的准确性一起发布,以提供对机器学习解决方案的整体价值和成本的更平衡的分析。当涉及到医学诊断时,每项医学测试的真实成本最终会转嫁到病人身上。
随着世界各地的公司在人工智能和宣传自己对环境更加敏感方面取得进展,他们是否会根据云提供商的“绿色能源”选择做出这些选择将是一件有趣的事情:
随着越来越多的人工任务被人工智能自动化和优化,能源平衡正在发生变化,并为节省成本和最大限度地减少环境影响创造了机会。或者也许当我们“重启人工智能”时,这一切都将改变,正如我正在阅读的这本新书所建议的那样…
图片由 詹姆斯·杜塞特
从预测到决策
为什么你的预测可能会失败——观点
Photo by Mika Baumeister on Unsplash
“做预测和做决定之间有很多差距”苏珊·艾希[1]
相关性并不意味着因果关系
这是统计测试中重复次数最多的短语之一。我认为这样做是有原因的,那就是这两个概念的抽象层次。这是混乱和复杂的,我们需要提醒自己在解释结果时的区别。然而,这种区别似乎在机器学习、大数据分析或数据科学领域并不明显,这可能并不太令人惊讶。对该领域的明显强调是通过更多数据和微调现有模型来提高预测准确性。根据我对在线课程和教程的经验,在之后的步骤上投入的工作似乎更少,预测的准确性达到了预期的水平。
在为我的应用程序研究相关文献时,我可以看到一些错误,从术语预测、关联、原因和解释之间相对无害的混淆,到一个虚假的声明,即一个变量(或一组特征或协变量)正在解释一个模型的行为,而不仅仅是表明它们之间的关联。这在图像识别、自然语言处理、情感分析等方面都不是问题。在这种情况下,从业者关心的是特性之间的映射。当同样的技术和哲学应用于决策或政策制定领域时,问题就来了。
为什么这是个问题
绘制相关性并不意味着我们理解了手头的问题。为了说明这一点,我们可以看一个简化的例子:假设有酒店价格和入住率的历史数据。酒店价格由软件设定,该软件根据入住率提高价格(入住率越高,价格越高)。现成的 ML 算法将识别价格和入住率之间的正相关关系。如果你想预测任何给定价格下的入住率,这是正确的方法。然而,如果你想知道价格上涨对入住率的影响,我们的预测模型可能会说价格上涨会卖出更多的房间。这是非常不可能的情况,需要一套不同的统计技术来回答这样的问题[1]。
我们能做什么
理解这种局限性并将其传达给决策者将会让我们走很长的路。确定并使用适当的方法来解决这个问题是我们想要的途径。人们一直有兴趣结合计量经济学和机器学习的经验来扩展我们对预测和因果推理的理解[2]。和往常一样,我们能做的最好的事情就是不断学习和了解相关领域的发展。这里是一个很好的起点。
[1] Athey,s .,超越预测:利用大数据解决政策问题,(2017),《科学》第 355 卷,第 6324 期,第 483-485 页
[2]艾希,s .,,,机器学习对经济学的影响,(2017),即将出版的 NBER 著作中的章节《人工智能的经济学:一个议程,阿贾伊·k·阿格拉瓦尔,约书亚·甘斯和阿维·戈德法布
[3] Imbens,g .,& Rubin,d .,统计、社会和生物医学科学的因果推理:导论,(2015),剑桥大学出版社
为什么你还不是一个可以胜任工作的数据科学家
如果说我从我工作的数据科学导师初创公司学到了什么,那就是:从你的数据科学工作申请或面试中获得反馈几乎是不可能的。
公司对反馈持谨慎态度是有充分理由的。首先,公司给被拒申请者的每一条反馈都是潜在的诉讼。另外,事实上许多人对负面反馈反应不好,有些人变得非常好斗。
想象一下,招聘人员给你发一封深思熟虑的反馈邮件需要多长时间,还要给他们必须考虑的几十(或几百)名其他应聘者发邮件。事实是,在一天结束时,他们从发布任何类型的反馈中绝对得不到任何东西,不管它可能多么有帮助或明显。
所有这一切的悲剧结局是大量困惑、没有方向、有抱负的数据科学家。但这里有一些好消息:实际上,申请人被数据科学职位拒绝的原因并不多,而且你可以做很多事情来覆盖这些基础。
这些原因——大多数求职者不具备但公司最想要的技术和非技术技能——就是这篇文章的主旨。
原因 1: Python 对于数据科学的技能
绝大多数的数据科学角色都是基于 Python 的,所以这就是我在这里要关注的。当谈到用于 DS 的 Python 时,有几个工具可以区分新手和专业人士。如果你想打造能引起雇主注意的优秀项目,它们是很好的差异化因素。
为了迫使自己提高数据科学理论和实现水平,请在一些项目中使用这些方法,如果您还没有这样做的话:
- 数据探索。你的舌尖上应该有
.corr()
、scatter_matrix()
、.hist()
、.bar()
等pandas
功能。你应该总是寻找机会使用 PCA 或 t-SNE,使用sklearn
的PCA
和TSNE
函数来可视化你的数据。 - 功能选择。 90%的时候,你的数据集会有比你需要的多得多的特征(这会导致过多的训练时间,并增加过度拟合的风险)。熟悉基本的滤波器方法(查阅 scikit-learn 的
VarianceThreshold
和SelectKBest
函数),以及更复杂的基于模型的特征选择方法(查阅SelectFromModel
)。 - 模型优化的超参数搜索。你肯定应该知道
GridSearchCV
是做什么的,以及它是如何工作的。同样适用于RandomSearchCV
。要真正脱颖而出,尝试用skopt
的BayesSearchCV
来学习如何将贝叶斯优化应用到你的超参数搜索中。 - **管道。**使用
sklearn
的pipeline
库将它们的预处理、特征选择和建模步骤包装在一起。对pipeline
的不适应是一个巨大的信号,数据科学家需要更加熟悉他们的建模工具包。
原因二:概率统计知识
概率和统计并不总是在工作中明确出现,但它们是所有数据科学工作的基础。因此,如果你没有了解以下内容,很容易搞砸面试:
- 贝叶斯定理。这是概率论的一个基本支柱,在面试中经常出现。你应该练习做一些基本的贝叶斯定理白板题,并阅读这本名著的第一章,以获得对该规则的起源和意义的坚如磐石的理解(额外收获:这其实是一本有趣的读物!).
- **基本概率。**你应该能回答类似这些的问题。
- **模型评估。**例如,在分类问题中,大多数 n00bs 默认使用模型准确性作为他们的度量,这通常是一个糟糕的选择。熟悉
sklearn
的precision_score
、recall_score
、f1_score
和roc_auc_score
功能,以及它们背后的理论。对于回归任务,理解为什么你会使用mean_squared_error
而不是mean_absolute_error
(反之亦然)也是至关重要的。花时间查看sklearn
的官方文档中列出的所有模型评估指标真的很值得。
原因 3:软件工程知识
越来越多的数据科学家被要求从事软件工程工作。许多雇主坚持认为申请人了解如何管理他们的代码,并保持干净的笔记本和脚本。特别是:
- 版本控制。你应该知道如何使用
git
,并使用命令行与你的远程 GitHub repos 交互。如果没有,我建议从这个教程开始。 - Web 开发。一些公司希望他们的数据科学家能够轻松地访问存储在他们的 web 应用程序中的数据,或者通过 API 访问这些数据。熟悉 web 开发的基础很重要,而最好的方法就是学习一点 Flask 。
- 网刮。与 web 开发有点关系:有时,你需要通过从实时网站抓取数据来自动收集数据。为此需要考虑的两个重要工具是
BeautifulSoup
和scrapy
。 - **干净的代码。**学习如何使用文档字符串。不要过度使用行内注释。将你的功能分解成更小的功能。小多了。你的代码中不应该有超过 10 行的函数。给你的函数起一个好的、描述性的名字(
function_1
不是一个好名字)。遵循 pythonic 惯例,用下划线like_this
而不是LikeThis
或likeThis
来命名变量。不要编写超过 400 行代码的 python 模块(.py
文件)。每个模块都要有明确的用途(如data_processing.py
、predict.py
)。了解if name == '__main__':
代码块的作用以及它为什么重要。使用列表理解。不要过度使用for
循环。向您的项目添加一个README
文件。
理由 4:商业本能
数量惊人的人似乎认为被雇佣是为了显示你是一个职位最有技术能力的申请人。不是的。事实上,公司希望雇佣能帮助他们更快赚更多钱的人。
总的来说,这意味着不仅仅是技术能力,还要培养一些额外的技能:
- 制造人们想要的东西。当大多数人处于“数据科学学习模式”时,他们会遵循一系列非常可预测的步骤:导入数据、探索数据、清理数据、可视化数据、建模数据、评估模型。当你专注于学习一个新的库或技术时,这很好,但在商业环境中,自动驾驶真的是一个坏习惯,在商业环境中,你所做的一切都要花费公司的时间(金钱)。你会想变得善于像企业一样思考,并对如何最好地利用你的时间为你的团队和公司做出有意义的贡献做出正确的猜测。一个很好的方法是,在开始数据科学项目之前,确定一些您希望它们回答的问题(这样,您就不会被不相关的任务冲昏头脑,而这些任务是“标准”DS 工作流的一部分)。让这些问题尽可能实用,在你完成你的项目后,反思你回答这些问题的能力。
- 提出正确的问题。公司希望雇佣那些在调整模型时能够牢记大局的人,并问自己这样的问题:“我构建这个是因为它对我的团队和公司有合理的帮助,还是因为它是我真正喜欢的算法的一个很酷的用例?”以及“我要优化的关键业务指标是什么,有没有更好的方法?”。
- **解释你的结果。**管理层需要你告诉他们什么产品卖得好,或者哪些用户离开了竞争对手,为什么,但他们不知道(也不关心)什么是精确/召回曲线,或者你避免过度拟合你的模型有多难。因此,一项关键的技能是能够向非技术受众传达您的结果及其含义。尝试建立一个项目,向一个从高中开始就没有上过数学的朋友解释(提示:你的解释不应该涉及任何算法名称,或者参考超参数调优。简单的词更好。).
当然,像这样的清单不可能详尽无遗,但根据我在求职和面试过程中指导数百名早期职业数据科学家的经验(以及与我们的招聘伙伴本人的交谈),这可能占人们遭到拒绝的 70%。
请记住,其他不太明确的东西,如性格契合度,也可能是一个因素。如果你和面试官相处不好,或者谈话感觉紧张或尴尬,那么很有可能你的技术资质很好,但是你没有达到文化契合度。正是因为这个原因,公司经常拒绝那些在技术上表现出色的申请人,所以不要太在意一两次拒绝!
波动分布和非参数
拉里·乏色曼的书,*所有的非参数统计,*开篇描述了当研究非参数估计量时人们倾向于关注的分布类型:
茱莉亚"@ bork"埃文斯对这本书的介绍做了一个的删减,她问道:
不满足[积分]的概率密度函数的例子是什么?(可能是有无穷多个微小摆动的东西,我不认为我感兴趣的任何分布在实践中会有无穷多个微小摆动?)
为什么密度函数“过于波动”会给非参数推断带来问题?
每当我看到这样的约束,试图限制函数的光滑度,我总是立即跳到世界上最不光滑的条件:不连续。随机变量的密度或分布中的任何一种不连续性——即使是一个,即使它真的很小——都会打破乏色曼约束。
我们来说说在哪里可能会看到不连续分布!然后,muuuuch更投机一点,让我们来谈谈为什么它可能对非参数估计器不利。
场景一:定时数据库查询
假设你运行一个让人们阅读博客文章的应用程序。每当读者加载任何特定的帖子时,您的应用程序都会并行地向两个独立的数据库发出两个查询:第一个返回博客作者的个人资料图片,第二个返回博客帖子的实际文本。
您想知道哪个查询通常会首先返回,以及多长时间返回。您的直觉是,有机会使用一个空闲的获取线程来做一些其他的准备工作,同时仍然等待它的兄弟查询完成。
为了查看您的快速获取线程正在处理哪种停机时间,您修改了应用程序以开始跟踪一些统计数据,您希望对这些数据执行一些非参数估计:
- 轨迹曲线 pic 的响应时间, T_pic
- 跟踪博客文本的响应时间, T_text
- 计算差值, *T_delta := T_pic — T_delta,*并记录结果
结果是今天是你的幸运日:你还不知道,但是分布
潜在的 T_delta 是高斯分布,平均值为 100 毫秒,
标准差为 60 毫秒。
正如 Evans 在她的原始帖子中所示,高斯分布绝对符合乏色曼的积分条件:
因此,就乏色曼的介绍来说,你想对这些数据进行的任何非参数估计,大部分结果应该是好的。或者至少,你会对该估计量的性能有一个很好的感觉:乏色曼的书提供的任何误差界限和保证仍然适用于你的数据,因为它的基本分布是如此平滑和良好。
为了便于我们稍后进行比较,下面是这个漂亮、平滑的高斯函数的分布和密度:
场景二:定时数据库查询,但有时会出问题
让我们像场景一中一样重新设置一切——两个查询,两个
响应时间,记录差异。除了现在想象一下,每隔一段时间,一些幽灵虫就会出现。对于一些病理病例,图片总是比文本多花234 毫秒的时间来加载。
(例如:也许一个善意的开发人员已经包含了一个代码路径,它只意味着在单元或集成测试期间出现。出于测试目的,能够控制相对的数据库获取时间是很好的。因此,令人难忘的人类神奇数字“234”除了不知何故,只应该在测试时发生的事情已经泄露到生产中了!)
在这种情况下,分布 P(T_delta ≤ t) 将在精确的 t = 234:
注意,重要的不是那个不连续的大小,而是它根本就是不连续的。即使只有百万分之一的 T_delta 是病态的 234 毫秒,右边的密度图仍然会有一个巨大的无限高的脉冲峰值。
这对非参数化意味着什么?
这种分布给我的印象是超级不平滑。我不是一个伟大的测量理论家,但我不认为这是可微的,更不用说满足乏色曼约束的密度了。事实上,在介绍的下一部分,乏色曼谈到了处理密度绝对连续或密度离散的情况,这让我想知道是否有像场景 2 这样的混合情况的计划。
这就是我不得不承认没有真正读过这本书的地方。也许在商店里有一个答案!
但是除此之外,我可以尝试一下为什么像场景 2 这样的混合分布在处理非参数方面特别棘手。
想象我们正在执行核密度估计。这很像绘制直方图,但是没有你在面元之间看到的粗糙的边界跳跃。直觉告诉我们,如果我们观察到,比如说, T_delta = -30.5 ms,我们应该稍微涂抹一下。就像它在告诉我们,“不仅-30.5 毫秒是一个可能的结果,而且这可能意味着附近的值也是可能的。”我们将-30.5 毫秒出现在我们的数据集中视为一个理由,以增加我们对-30.8 毫秒和-29.2 毫秒以及其他类似值可能在未来出现的信念。
对于一个好的,平滑的分布,我可以看到这种情况。我敢打赌,对于漂亮、平滑的分布,在查看了从分布中抽取的 N 之后,你可以得到内核密度估计有多不正确的一些不错的误差界限。平滑度确实意味着观察到 x 的概率与看到 x +/- ε 的概率差不多。
场景 2 不是这样的,不是以同样的方式*。*因为有一个神奇的数字——234 毫秒——任何对该值的观察都与其余的 T_delta 空间完全不同。对于这些样本来说,密度在 234 ms 左右变化太快,无法进行健康的内核密度估计。不管分布的不连续间隙有多大,都是如此。
要考虑另一个非参数估计量,考虑场景 2 中的 bootstrap 抽样。您的引导亚群不包含任何假的 234 ms 点的情况看起来与场景 1 完全一样——也许这些情况差异很大,使得它更难与其他样本结合。这种少于 234 的情况多久出现一次?独家 -234 案呢?这些疯狂的样本对你的评估过程有什么影响?
因此,场景 2 的误差范围现在不仅取决于你观察到的抽取次数,还取决于抽取病理性 234 ms 病例的普遍程度。乏色曼书中的误差范围可能没有给这种自由度留有余地。
虽然,如果这本书涵盖了所有非参数统计的所有,一定有关于这些混合密度的一些东西!我应该…读这本书。
野生人工智能:负责任的数据科学
谁先开枪——新种族还是人类?
数据科学可以为我们做好事:它改善生活,让事情更有效率,更有效,并带来更好的体验。然而,数据驱动的分析已经出现了一些失误。以下是一些有意或无意滥用数据科学工具的例子:
- 2012 年,一组来自华尔街日报的调查记者发现,跨国供应零售公司 Staples 向生活在更富裕社区的买家提供更低的价格。史泰博的意图是为住在竞争对手商店附近的顾客提供折扣。然而,他们的竞争对手倾向于在富人区建商店。基于位置和社会地位之间的相关性,这导致了基于种族的价格歧视。史泰博和顾客都不知道这个副作用,直到一组调查记者发现了它。
- 2015 年,AdFischer 项目通过模拟证明,合成男性在线资料显示高薪工作广告的频率明显高于女性资料。结果是明显的基于性别的就业歧视(来源)。由于在数据驱动的算法管道中有意或无意地缺乏责任感,这项研究开始浮出水面。
- 2016 年,ProPublica 的调查人员发现,法官在法庭上预测未来犯罪的软件往往不正确,而且具有种族主义色彩:黑人被贴上更高风险标签的可能性几乎是白人的两倍,但重新犯罪的可能性较小。该工具在白人中犯了相反的错误:他们比黑人更有可能被贴上低风险标签,但却继续犯下其他罪行。ProPublica 的研究非常有影响力。他们在 GitHub 上以 Jupyter 笔记本的形式发布了数据集、数据方法以及数据处理代码。这一惊人的结果确实说明了这些工具的不透明和缺乏公平性,尤其是当它们被用于公共部门、政府和司法系统时。
数据科学公正吗?
人们经常声称数据科学是算法科学,因此不能有偏见。然而,我们在上面的例子中看到,所有传统的歧视罪恶都在数据科学生态系统中展现出来。偏差在数据和过程中都是遗传的,被推动和放大。
透明度是一种理念、一种思维模式、一套有助于防止歧视、促进公共辩论和建立信任的机制。当我们做数据科学时,我们与社会互动。我们做决定的方式必须是在一个我们从参与者和公众那里得到信任的环境中。单靠技术解决不了这个问题。用户参与、政策努力很重要。
数据责任
数据科学生态系统中的责任包括:公平、透明、多样性和数据保护。负责任的数据科学领域非常新,但已经处于所有顶级机器学习会议的边缘,因为这些是困难但有趣的相关问题。
Moritz Hardt
什么是公平?
哲学家、律师、社会学家多年来一直在问这个问题。在数据科学的背景下,我们通常解决预测分析的任务,根据过去或现在的一些观察(数据集)预测未来的性能或行为。当用于解决此类任务的模型与数据不符时,就会出现统计偏差。有偏差的模型不知何故是不精确的,不能正确地总结数据。当数据或模型不能正确代表世界时,就会产生社会偏见。当数据不具有代表性时,就会出现一个例子。如果我们只使用警察一次又一次去同一个街区的数据,并且我们只使用这些特定街区的犯罪信息,情况就是这样。我们对世界的定义也可能导致社会偏见。我们试图用预测分析影响的是现实世界还是理想世界?谁应该决定世界应该是什么样子?
什么是歧视?
在大多数法律制度中,有两个概念界定歧视:
- 区别对待是指基于受保护的特征(如种族、性别、年龄、宗教、性取向或国籍)而区别对待某个实体(如债权人或雇员)的非法行为。完全不同的待遇出现在对接受治疗的个人有一些好处或带来一些伤害的情况下,例如对他们判刑或允许他们上大学或给予他们信贷。这是一些实际上有切实的积极或消极影响的事情。
- 完全不同的影响是系统的完全不同的待遇的结果,在这种情况下,在
受保护阶层的成员身上观察到不相称的不利影响。不同的国家保护不同的阶层或亚人群。
当我们谈论歧视时,我们会使用一些让人不舒服的术语,比如种族主义、性别、性取向。极端意义上的政治正确在这些关于负责任的数据科学的辩论中没有位置。我们必须能够说出概念的名称,才能谈论它们。一旦我们可以谈论这些概念,我们就可以采取纠正措施。
公平的技术定义
让我们考虑将结果分配给群体成员的供应商。这是最基本的情况,一个二元分类。积极的结果可能是:提供就业,接受学校,提供贷款,提供折扣。消极的结果可能是:被拒绝就业,被学校拒绝,被拒绝贷款,不提供折扣。在公平方面,我们担心的是结果如何分配给人口中的成员。让我们假设 40%的人得到了积极的结果。然而,这一过程可能会对一些亚群体进行不同的处理。让我们假设我们提前知道亚人群是什么,例如红头发的人。因此,我们可以把我们的人口分为两类:红头发的人和没红头发的人。在我们的例子中,我们观察到 40%的人得到了积极的结果,只有 20%的红发人得到了积极的结果。另一组的 60%得到了积极的结果。在这里,根据一些定义,我们观察到对红头发人群的不同影响。表示这种情况的另一种方式是统计奇偶性失效。这是不带条件的公平的基线定义。在现实生活中使用这种评估相当复杂,例如在法庭上。这一公平的基本定义已写入全球许多法律,它规定接受任何结果的个人的人口统计数据与潜在人口的人口统计数据相同。
评估不同的影响
供应商可以说他实际上并不打算或者根本没有考虑头发的颜色,而头发的颜色恰好是数据集中的敏感属性。取而代之的是,卖主会说他决定给头发长的人积极的结果。该供应商否认了这一指控,并表示他没有基于头发颜色进行歧视。问题是供应商对红发人产生了负面影响。我们关心的不是意图,而是对亚人群的影响。换句话说,致盲不是法律或道德上的借口。从供应商的结果分配流程中删除头发颜色并不能防止歧视的发生。完全不同的影响在法律上是根据影响来评估的,而不是根据意图。
减轻不同的影响
如果我们检测到违反统计奇偶性,我们可能想要减轻。在一个我们可以分配许多积极结果的环境中,我们必须交换一些结果。我们必须从非红发群体中的某个人那里获得积极的结果,并将其传递给红发群体中的其他人。不是每个人都同意交换结果。一个曾经得到积极结果的人将不再得到它。这将导致个人公平。它规定任何两个在特定任务中相似的人应该得到相似的结果。群体公平和个人公平之间存在一种不容易解决的紧张关系。
个人对群体的公平性
个人公平和群体公平被带到最高法院的一个例子出现在 2009 年 Ricci 诉 DeStefano 案。消防员参加了一次晋升考试,该部门抛出了考试结果,因为黑人消防员没有一个得分高到可以晋升。消防部门担心,如果他们承认结果而不提拔任何黑人消防员,他们可能会因歧视和不同的影响而被起诉。但是后来诉讼是由那些本来有资格升职但却因此没有升职的消防员提起的。有一个关于个人公平的争论,一个关于不同待遇的争论。他们认为种族被用来对他们产生负面影响。这个案子的判决有利于白人消防员,有利于个人公平。
个人公平是平等的,每个人都得到相同的盒子到达树。群体公平是一种公平的观点,每个人都有足够多的盒子来够到树。股权成本更高,因为社会必须加大投资。这是两种本质上不同的世界观,我们无法从逻辑上决定哪一种更好。这只是两种不同的观点,没有更好的了。他们回到了我们所认为的世界现状,一个应该有的世界。真相会在中间的某个地方。理解哪种缓解与哪种信仰体系相一致是很重要的。
公平的正式定义
公平性在这里被定义为通过观察空间从构造空间到决策空间的映射。**个体公平(平等)**认为观察空间忠实地代表了建构空间。例如,高中的 GPA 是一个很好的衡量勇气的标准。因此,从构造到决策空间的映射具有低失真。群体公平(equity) 然而,从建构空间到被观察空间,存在由结构偏差、社会偏差引起的系统性扭曲。此外,这种扭曲与群体结构相一致,与我们社会中受保护群体的成员相一致。换句话说,社会有系统地歧视。
未完待续……
参考资料:Julia Stoyanovich 教授(纽约大学)在哈佛大学关于负责任的数据科学的演讲——选自 Shoshana Zuboff 的《监控资本主义的时代》一书的章节——来自 Franç ois Chollet 的《人工智能让我担心什么》一文的思考。
我今天要听土豆沙拉吗?
利用数据、统计和机器学习来理解我对这首歌的痴迷
请原谅我,因为这听起来很疯狂。
有一首歌是由泰勒、创作者和 A$AP 洛基创作的,名叫土豆沙拉,我喜欢它。我的女朋友说我经常玩,等等,算了,我的女朋友和朋友坚持我经常玩,我办公室的同事经常问我是否每天都吃土豆。所以显然我很喜欢它。
给一点上下文,土豆沙拉是一首有趣,清新,明确,甚至欢快的歌曲,其中泰勒和洛奇说唱嘻哈的状态,他们有多少钱(经典!),以及他们对时尚的选择(例如,Rocky 指定他的香奈儿包不是钱包,而是挎包。两次。).这首歌让我着迷的是它的节拍,以及它与高尔夫男孩和 A$AP 酒吧融合的流畅和温和;还有名字也挺搞笑的。最重要的是,这个音乐视频感觉像是两个朋友在周日下午做的项目,为一首已经很酷的歌曲增加了一点额外的滑稽和现实。有什么不喜欢的地方:)?
Potato Salad
总之,回到我的困扰。我已经确定我喜欢这首歌,当然,作为一个数据人,我想用事实和数据来验证这一点。带着这个目的,我进行了一个实验,其目标是找到以下四个问题的答案:
- 我听了多少遍土豆沙拉了?
- 我的倾听模式是什么?
- 在特定的日子和时间里,我听土豆沙拉的可能性有多大?
- 有没有可能用预测性的机器学习模型来预测我会不会玩土豆沙拉?
在这篇文章中,我将分享我的发现。
Image by kartynas from Pixabay
数据
这个实验最重要的部分是数据,尤其是关于我听土豆沙拉时的数据。幸运的是,自 2017 年 10 月以来,我一直在登录 BigQuery 查看我在 Spotify 上播放的每一首歌曲,使用的脚本一直在云中运行。这个用 Python 编写的脚本,利用一个名为 Spotipy 的 Spotify 库,每三个小时调用一次 Spotify 的*“recent _ played”*API 端点,检索我在过去三个小时播放的所有歌曲。有了存储在 BigQuery 中的数据,只需运行一个简单的查询来选择 ID 为1jzIJcHCXneHw7ojC6LXiF
(Spotify 上的土豆沙拉 ID)的所有歌曲。
我听了多少遍了🥔 🥗?
先说最直白的问题:这首歌我听了多少遍了?答案是 104 ,一个还可以的数字(老实说,我期待更多),使它成为我听到最多的歌曲。本身这个值不多说;然而,就百分比而言,土豆沙拉代表了我整个收听历史中 0.57% 。更好的是,如果我只考虑我第一次土豆(2018–10–12)之后播放的歌曲,百分比增加到 2.05% 。
我想知道的第二个重要信息是,自从我第一次喜欢土豆沙拉以来,我已经听了多少天了。值为 2018 年 10 月 10 日至 2019 年 4 月 13 日天数的 66 或 35.86% 。简单来说,这上面写着自 2018 年 10 月 10 日起,我平均每三天至少听一次土豆沙拉。为了形象化这一点,我制作了下面的日历来显示我在哪些日子演奏了这首歌。
在这个图像中,蓝色的方块标记了我的*“土豆日”*,而红色的方块象征着土豆的缺乏。有意思的是,2019 年 2 月我几乎没听过这首歌。
The last couple of days have been fire
我的倾听模式是什么?
实验的这一部分旨在发现关于*【如何】*的任何令人惊讶的见解,或者我决定用一些土豆沙拉来愉悦我的耳朵的情况。
首先,我想调查的是,我的*【音乐课】*有多少是从土豆沙拉开始的。对于“音乐会话”,我指的是,嗯,我决定播放 Spotify 的会话或时刻。比如早上 8 点打开 app,就是一个会话。为了给我的会话定义增加一些额外的深度,我认为一首歌曲在前一首歌曲播放至少两小时后才构成新会话的开始。在最后一个示例中,我在上午 8 点打开了应用程序。现在,假设我播放音乐到上午 11 点(三个小时长的会话),休息一下,并在下午 2 点播放另一首歌曲。在这种情况下,由于从之前收听的歌曲(上午 11 点结束)到新歌曲的时间超过了两个小时,因此这首新歌曲代表会话的开始。
有多少次我是以土豆沙拉开始的?在我所有的 808 个音乐场次中, 24 ( 2.97% )都是土豆场次,而且令人惊讶的是(不是真的),这是我最喜欢的“场次开始”歌曲。从这个值的角度来看,第二个位置的歌曲已经播放了 13 次( 1.60% )作为会话开始。
我想知道的另一个细节是最长的重复链,同样令人惊讶的是(这次是真的),这个数字只是 3 !与我实际上最长的重复播放的歌曲相比,这是一个相当低的数字,我的歌曲连续播放了八次。
Image by Ulrike Mai from Pixabay
在特定的日子和时间里,我听土豆沙拉的可能性有多大?
是时候给我的第一个答案了这篇文章的标题*“我今天要听土豆沙拉吗?”*在我回答这个问题的两种方法中的第一种(第二种在下一节)中,我使用了简单明了的概率。
在继续之前,有一个小小的免责声明:我想让这个有趣的深夜项目简单、清晰、易懂,即使对那些不熟悉我在这里介绍的术语的人来说也是如此。因此,我意识到我在这里应用的方法有一些缺陷、不完美、假设和过于简单化。
好吗?回去吧。
我的程序包括计算我在一周的特定日听 PS 的概率,我在一天的特定小时间隔听 PS 的概率(例如上午 10 点到 10:59 或晚上 7 点到 7:59),然后将这两个值相乘以获得玩游戏的可能性🥔 🥗在日期和时间间隔 x。让我解释整个过程。
为了获得在一周的某一天播放这首歌的概率,我计算了在一周的某一天我播放这首歌的次数,除以该工作日在我的数据集中出现的次数,但只是在我第一次听土豆沙拉的那一天之后。例如,自 2018 年 10 月 10 日起,我在我的数据集上的 21 个星期二中的 11 个不同的星期二播放了这首歌。所以一个星期二我玩 PS 的概率是 11/21 = 0.52 或者 52% 。下面的表格显示了所有的七种可能性。
嗯,周四有什么活动?只有 13% 的几率?会不会是这种近乎周末的感觉让我去演奏其他类型的音乐?这听起来可能令人兴奋和好奇,但答案远远超出了本文的范围。尽管如此,好消息是,经过两天的低土豆活动后,周六就到了,这一天我将通过玩一些甜蜜的 PS 来救赎自己,这是一个 68%的机会。
获得在一天的特定时间播放歌曲的概率遵循与前面相同的方法。唯一的区别是,我没有像以前那样使用一周中的日期,而是使用一天中的小时,例如,上午 12 点,凌晨 1 点…直到晚上 11 点。下表显示了 24 种可能性,每种可能性对应一天中的一个小时。此外,请记住,我不是在寻找播放歌曲的可能性,比方说,正好在上午 11 点,而是在上午 11 点到 11 点 59 分这段时间。
24 probabilities. One per day hour.
这里有一个奇怪的细节是,凌晨 4 点的可能性是 100% ,表明土豆沙拉是我在这个时间播放过的唯一一首歌(我为此感到自豪)。
既然我们知道了在某一天播放这首歌的概率,以及在某一特定时间听这首歌的可能性,我们就可以确定它的联合概率,我指的是两件事同时发生的可能性。在这种情况下,联合概率是在特定的日子和特定的时间播放歌曲的概率。我们可以通过将两个概率相乘来计算这一点——例如,在周二上午 10 点至 10 点 59 分期间收听土豆沙拉的可能性是 4.66% (0.5238 * 0.089)。酷吧。
下面的两个表格给出了联合概率。
那么,我们该如何解读这一串数字呢?概率最大的时段是周六凌晨 4 点(到凌晨 4 点 59 分),可能性 68% 。这个估计是重要的,因为在凌晨 4 点播放这首歌的机会很大。因此,自然地,与其他时间范围相比,这个时间范围的所有联合概率将会高得多。在相反的一端,是可怕的周四,可能性最低的一天,在不太极端的情况下,但完全可以接受的情况下,我们有周一和周六上午 8 点,值为 13.63% 和 17.04% 。
那么,我今天要听土豆沙拉吗?嗯,除非是周四,否则我会做的可能性很小,但却是真实的。
这种概率方法是我回答一直萦绕在我梦中的问题的直接方式。然而,我想把事情复杂化,给问题增加额外的复杂性,并使我的调查不成比例。因此,就像一个理性的数据人一样,我不得不尝试建立一个基于机器学习的预测系统,看看它是否可以学习和预测我是否会在给定的时间和日期听土豆沙拉。
我用来建立我的预测模型的算法是一种被称为支持向量机 (SVM)的算法,这是一种机器学习模型,主要用于将事物分为两类,例如,是或否,好或坏,垃圾邮件和非垃圾邮件。对于这个特殊的问题,我应用了 SVM 的一个特殊变体,称为一类 SVM ,一种用于异常值检测的技术。现在你可能会问,“但是,嘿,胡安,你为什么把这个问题表述为异常值检测问题?”好问题。请看下一张图片。
这张图片显示了我听土豆沙拉的日期和时间。从中我们可以观察到,我的收听时刻通常在日期和时间上是相当规律的,换句话说,在数据中没有太多的离群值(不常见的实例)(除了我在周六午夜播放这首歌的那次)。正因为如此,像 SVM 这样的异常值检测系统可以用来学习决策边界,这是一个将异常值与内部值区分开来的“屏障”,也就是我通常的土豆时间,它知道我什么时候可能会听 Ensalada de Papa。因此,为了预测我是否会听这首歌,我们需要看看时间和日期对是否位于决策障碍内,这将在下一张图中显示。
The X-axis shows the date of the week (starting from Monday) as number
暗红线内的数据点,正式称为决策边界,是我播放 PS 的内点或普通时刻,不在内的点是异常点,或我播放歌曲的不寻常时间,例如周六午夜、周日凌晨 4 点和周一早上 7 点。这里的主要要点是,我的大部分收听时间都落在边界内,这意味着我的收听时间非常标准且符合预期。
我再问一遍:我今天要听土豆沙拉吗?如果日期和时间在红线内,那么可能,否则,“可能更少。”
概述
在这篇文章中,我展示了当一个数据人半痴迷于一首名为《土豆沙拉》的嘻哈歌曲时会发生什么。为了证明这种轻微程度的痴迷,我创建并分析了一个由我在 Spotify 上播放这首歌的每个实例组成的数据集,并发现了以下事实:
- 2018 年 10 月 10 日至 2019 年 4 月 13 日期间,我已经听了 104 遍土豆沙拉。
- 我的音乐课有 2.97%是以 PS 开头的。
- 如果我在凌晨 4 点打开 Spotify,我有 100%的可能会玩 PS。
- 我通常在同一时间播放这首歌。
最后一次:我今天会听土豆沙拉吗?但愿,是的。真正的问题是,你愿意吗?
在我的 GitHub 上可以找到用于生成这个实验的代码,链接如下:
在 GitHub 上创建一个帐户,为 juandes/马铃薯沙拉的开发做出贡献。
github.com](https://github.com/juandes/potato-salad)
感谢阅读。希望你喜欢:)
如果你有任何问题,评论,疑问,想聊天,或者告诉我你是否喜欢这首歌(我肯定你喜欢),请在这里或 Twitter 上留下评论,我将很乐意帮助你。
[## 胡安·德迪奥斯·桑托斯(@ jdiosantos)|推特
胡安·德迪奥斯·桑托斯的最新推文(@ jdiossantos)。机器学习/数据工程师。还有,口袋妖怪大师,还有…
twitter.com](https://twitter.com/jdiossantos)
哦,如果你能在推特上分享这个故事,或者转发我的推文,我会很感激的。如果我幸运的话,泰勒会看到这个:)。
“它会扩展吗?”
在 Spark 中从试点转向生产的好处和隐藏的挑战
Photo by Jukan Tateisi via Unsplash
机器学习产品和管道是一项风险投资。尽管只要有足够的时间和关注,ERP 实施和软件推广很可能成功,但机器学习概念可能失败的原因有很多。你是否应该排除万难,开发一个让用户感到兴奋的工作试点,每个人脑海中的第一个问题将是“它会扩展吗?”。答案通常是“理论上,是的”,但是很难预测您在实践中会遇到什么样的集成障碍。在这个过程中挣扎了一两次之后,你学会了通过在头脑中构建你的试点来预先回答他们的问题。谢天谢地,我们在 Apache 基金会的朋友已经开发了一个架构来做这件事。
Spark 是一个开源计算框架,在本地笔记本电脑上使用它就像在指挥一个由数百台计算机组成的集群一样舒适。在 Spark 上用 Python、R 或 Scala 构建您的 MVP 将使您的代码在生产中更容易扩展,但是 Spark 的许多好处被隐藏的挑战抵消了,如果没有做好准备,这些挑战可能会破坏您的路线图。
为什么是火花?
Spark 在计算机科学界如此受欢迎有几个原因:
它很容易使用
无论你来自技术世界的哪个角落,你都会发现 Spark 生态系统对开发者非常友好。Spark 可以在 Hadoop、Mesos、Kubernetes、AWS、Azure、你的本地笔记本电脑以及几乎所有你会考虑使用的主流存储系统上运行。这种互操作性使得在计算集群上进行大规模测试之前,可以轻松地基于过滤后的数据在本地开发您的代码库,从而在您从试点阶段过渡到大规模阶段时节省您的时间和资金。
Spark 是用 Scala 编写的,但是它的 Python、R 和 Java 包装器使得广大用户可以很容易地用他们喜欢的语言运行分布式作业。这些人在独立工作时不需要争夺空间:Spark 可以同时管理多个不同的工作负载,而不会迫使您的团队为单独的集群付费。
最后,Spark 的开源社区和大型技术支持者已经发布了数百个库来加速您的开发。像 Databricks 这样的服务提供商已经使 Spark 集群的启动、管理变得非常简单,让您的团队成员在非本地环境中获得了他们渴望的独立性。结合起来,这些便利使 Spark 成为大多数用例中比更灵活的框架如 Dask 更容易的选择。
它很快(真的很快)并且扩展性很好
在引擎盖下,Spark 的 Catalyst 优化器将用户输入转换为转换的有向非循环图(DAG ),然后在计算机网络(例如,节点)上分发优化的“作业”以进行内存处理。从视觉上看,这个过程如下所示:
如果这个概念看起来令人困惑,不要担心:Spark 在后端处理这些优化,使 Spark 实现的基准速度比其前身快 100 倍以上,而不会使 90%以上的用例的用户体验复杂化。如果您需要更多内存或处理能力,可以轻松升级现有节点或向网络添加新节点。
它很灵活
与目前市场上的其他分布式架构不同,Spark 可以处理几乎所有的编程任务:
- 将您的结构化数据存储在弹性分布式数据集(rdd)或 Spark SQL 的数据帧中,以优化查询
- 利用 Spark 的 GraphX API 来处理和分析图形数据库
- 使用 Spark 众多语言 API 之一来转换和清理您的数据
- 使用 MLlib 构建和部署机器学习算法
- 使用 Spark 流聚合和分析数据流
其他架构在这些任务中的一个或两个方面可能更有效(例如,Apache Storm for streamingFlink 用于批处理),但没有其他产品能够像 Spark 一样拥有端到端的生产流水线。
它有动力
当你在构建一些持久的东西时,你不能花时间去担心你的架构是否会在未来十年内持续存在。鉴于目前使用 Spark 的公司令人印象深刻,可以合理地假设 Spark 不会很快消失。即使 Spark 架构消失,取而代之的是一个竞争性的框架,在新的后端上运行现有的 Python、R 或 Scala 代码也是相对容易的(对于 SAS 来说就不一样了)。
大规模工作的潜在挑战
Spark 是一个强大的工具,但它并不像我和我的团队最初预期的那样容易采用。尽管有些差异只是需要习惯,但今天仍存在三大挑战:
对低效代码的重罚
在处理万亿字节的数据时避免终止需要非常关注代码效率。当你在 Jupyter 中玩少于 2000 万行时,你没什么可担心的;大多数细胞会立即运行,你能做的最糟糕的事情就是杀死你的内核并强制 30 秒的重置。Spark 集群上的内存不足故障更具破坏性。一个设计不良的连接可能会导致半个小时的延迟,因为您需要等待 Spark 集群自动伸缩、死亡和重置。雪上加霜的是,如果您的集群没有合适的护栏,这些重置会非常昂贵。
工程师们倾向于具备这种注重效率的心态:我们习惯于将问题分解成模块,并在提交代码之前对其进行批判性思考。另一方面,统计学家和分析师倾向于在抛出错误或异常后才调试他们的代码。这些群体倾向于与 Spark 斗争,因为它迫使他们以一种他们不习惯的方式抢先解决潜在的问题。未能发现次要线索(例如不必要的用户定义函数或意外的。collect()方法)对于使用集群的任何人来说都相当于巨大的延迟。
有限的图书馆和社区支持
大多数 Python 和 R 用户(包括我自己)都被支持这些语言的协作社区宠坏了。我们习惯于搜索库来解决我们的问题,当没有库存在时,我们通常可以通过快速访问堆栈溢出或介质来拼凑一个解决方案。当我们需要查看文档时,我们希望找到经过几十年的发展,为非技术读者量身定制的干净、简洁的文章。我们很少会遇到一个还没有被别人解决和记录的问题。
这些公共拐杖对于 Spark 来说还不存在。并不总是有高层次的抽象来解决任何给定的问题,你在网上获得的 bug 支持的数量和质量都比 Python 或 r 中的要弱得多,如果你知道如何阅读 Spark 的文档,它们会很有帮助,但它们显然是为计算机科学家编写的;统计学家和技术含量较低的从业者在学会一些 CS 基础知识之前是不会自给自足的。
无表达语言 API
最初,我们的团队喜欢在 Python、R 和 Scala 之间无缝移动数据的想法。然而,在战壕中呆了几个星期后,这个特征感觉更像是拐杖而不是增强。问题是 PySpark 和 Spark 还没有独立存在:虽然你可以在 pandas 或 dplyr 中搜索 Spark 的等效函数,但许多让这些库变得神奇的直观方法还没有进入 Spark。在等待这些 API 更新的同时,您可以在 Scala 中编写创可贴,但是这样做会增加构建的时间、复杂性和技术负担。
A “code snippet” pulled directly from a prominent provider’s Spark overview
“是的,会的”
尽管存在这些挑战,Spark 仍然是缩小中试和规模化之间差距的一个很好的方法。它为开发生命周期中的一个主要痛点提供了一个全面的解决方案,随着 Spark 及其语言 API 的成熟,上面提到的问题将会随着时间的推移而消失。后端可能会改变,GPU 可能会成为新的规范,但随着工程团队被不断增长的数据量推向计算集群,分布式计算背后的社区只会增长。新的开发人员带来新的开发,不久之后,我们将有一个完全不同的前沿问题要写。