原文:KDNuggets
Pandas Profiling:用于 EDA 的一行神奇代码
原文:
www.kdnuggets.com/2021/02/pandas-profiling-one-line-magical-code-eda.html
评论
由 Juhi Sharma 提供,产品分析师
使用 Pandas Profiling Python 库的自动化探索性数据分析
我们的前三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业
2. 谷歌数据分析专业证书 - 提升您的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持您的组织的 IT
探索性数据分析是一种探索/分析数据集以生成可视化形式洞察的方法。EDA 用于了解数据集的主要特征。
EDA 帮助我们了解缺失值、计数、均值、中位数、分位数、数据分布、变量间的相关性、数据类型、数据形状等。为了进行 EDA,我们需要编写大量代码,这需要很多时间。
为了使 EDA 更加简单快捷,我们可以编写一行神奇代码来进行 EDA。
EDA 可以通过一个名为 Pandas Profiling 的 Python 库进行自动化。这是一个出色的工具,可以创建交互式 HTML 格式的报告,易于理解和分析数据。让我们探索 Pandas Profiling,以便在非常短的时间内和仅用一行代码进行 EDA。
Pandas Profiling 的安装:
使用 pip 包安装
!pip install pandas-profiling
使用 conda 包安装
conda install -c conda-forge pandas-profiling
加载数据集
在这篇文章中,我使用了 Titanic 数据集。
import pandas as pd
df=pd.read_csv(“titanic2.csv”)
df.head()
Titanic 数据集
数据集属性的描述
survived — 生存(0 = 否;1 = 是)
Pclass — 乘客等级(1 = 1st;2 = 2nd;3 = 3rd)
name — 乘客姓名
sex — 性别(男/女)
age — 年龄
Sibsp — 登船的兄弟姐妹/配偶数量
Parch — 登船的父母/子女数量
Ticket — 票号
Fare — 乘客票价
Cabin — 舱位
Embarked — 登船港口(C = 切尔堡;Q = 皇后镇;S = 南安普敦)
运行 pandas_profiling 的代码在我们的数据框上,返回 Pandas Profiling 报告。
import pandas_profiling as pp
pp.ProfileReport(df) #to display the report
Pandas Profiling 报告
你可以看到,我们的 Pandas Profiling EDA 报告通过一行代码已经准备好了。
Pandas Profiling 报告包含以下部分:
-
概述
-
变量
-
交互
-
相关性
-
缺失值
-
示例
1. 概述部分:
报告的概述部分
本部分提供了整体数据集信息。** 数据集统计** 和 变量类型。
数据集统计 显示了列、行、缺失值等信息。
变量类型 显示了数据集中属性的数据类型。它还显示了 “警告”,指出哪些特征与其他特征高度相关。
2.变量部分
本部分详细提供了每个特征的信息。当我们点击上图所示的 切换详细信息 选项时,新部分会显示出来。
本部分展示了特征的统计信息、直方图、常见值和极端值。
3.相关性部分
相关性部分
本部分展示了特征之间的相关性,利用 Seaborn 的热图。我们可以轻松切换不同类型的相关性,如 Pearson, Spearman, Kendall 和 phik。
4.缺失值部分
缺失值部分
我们可以从上述的计数和矩阵图中看到“年龄”和“船舱”列的缺失值。
5.样本部分
前 10 行
最后 10 行
本部分展示了数据集的前 10 行和最后 10 行。
我希望“Pandas Profiling”库能帮助更快、更轻松地分析数据。那么你对这个美丽的库有什么看法?试试看,并在回复部分提到你的经验。
在离开之前
感谢阅读!如果你想与我联系,请随时通过 [email protected] 或我的 LinkedIn 个人主页 联系我。
简介: Juhi Sharma (Medium) 热衷于通过数据驱动的方法解决业务问题,包括数据可视化、机器学习和深度学习。Juhi 正在攻读数据科学硕士学位,并拥有 2.2 年分析师工作经验。
原始 文章。经许可转载。
相关:
-
仅用两行代码进行强大的探索性数据分析
-
在 Python 中合并 Pandas 数据框
-
使用管道进行更清洁的数据分析
更多相关话题
强化学习中的 Pandas:使用 Dask 进行端到端数据科学
原文:
www.kdnuggets.com/2020/11/pandas-steroids-dask-python-data-science.html
评论
由 Ravi Shankar,数据科学家
Dask - 拥有超级能力的 pandas
我们的三大推荐课程
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持组织的 IT 工作
正如俗话所说,数据科学家花费 90% 的时间在清理数据上,10% 的时间抱怨数据。他们的抱怨可能涉及数据大小、数据分布不准确、空值、数据随机性、数据捕捉中的系统性错误、训练集和测试集之间的差异等等。
一个常见的瓶颈主题是数据大小的庞大,数据无法适配内存或处理时间过长(以分钟为单位),导致内在模式分析难以进行。数据科学家本质上是好奇的,他们希望识别和解释那些通常在表面拖拽观察中隐藏的模式。他们需要戴上多顶帽子,通过反复的折磨(即多次迭代)让数据“坦白”。
在探索性数据分析中,他们戴上了多种帽子,从包含 6 列的纽约出租车费用数据集(www.kaggle.com/c/new-york-city-taxi-fare-prediction
) - ID、费用、旅行时间、乘客和位置,他们的问题可能包括:
- 费用年复一年地变化情况如何?
- 年复一年,旅行次数是否增加了?
- 人们更喜欢单独旅行还是有同行?
- 随着人们变得更加懒惰,小距离的骑行是否增加了?
- 人们希望在一天中的什么时间和一周中的哪几天旅行?
- 最近城市中是否出现了新的热点区域,除了常规的机场接送?
- 人们是否在进行更多的城际旅行?
- 交通量是否增加,导致相同距离的费用/时间增加?
- 是否存在接送点的集群或高流量区域?
- 数据中是否存在异常值,如 0 距离和超过 $100 的费用等?
- 需求是否在节假日季节变化,机场接送是否增加?
- 是否有天气因素(如雨雪)与出租车需求的相关性?
即使回答了这些问题,仍然可能会出现多个子线程,例如我们能否预测新年受 Covid 影响的情况、年度纽约马拉松如何影响出租车需求、某个特定路线是否更容易有多个乘客(聚会中心)与单个乘客(机场到郊区)?
为了满足这些好奇心,时间至关重要。如果让数据科学家等待 5 分钟以上来读取一个 csv 文件(5500 万行)或进行列添加和后续聚合,那是犯罪行为。此外,由于大多数数据科学家是自学成才的,他们已经习惯了 pandas 数据框 API,不愿意用不同的 API,如 numba、Spark 或 datatable,重新开始学习过程。我曾尝试在 DPLYR(R)、Pandas(Python)和 pyspark(Spark)之间来回切换,这有点令人失望/不高效,因为需要一个统一的管道和代码语法。然而,对于好奇的人,我在这里写了一个 pyspark 入门指南:medium.com/@ravishankar_22148/billions-of-rows-milliseconds-of-time-pyspark-starter-guide-c1f984023bf2
在后续部分,我尝试提供一个 Dask 的实用指南,尽量减少与我们钟爱的 Pandas 的架构差异:
1. 数据读取和分析
Dask 与 Pandas 的速度对比
Dask 如何能够将数据处理速度提高 ~90 倍,即在 pandas 中从 1 秒以下到 91 秒。
Dask 之所以如此受欢迎,是因为它使 Python 中的分析具有可扩展性,并且不一定需要在 SQL、Scala 和 Python 之间来回切换。它的神奇之处在于这个工具需要最小的代码更改。它将计算分解为 pandas 数据框,从而并行操作以实现快速计算。
来源:https://docs.dask.org/en/latest/
2. 数据聚合
完全没有改变 Pandas API 的情况下,它能够在毫秒级别执行聚合和排序操作。请注意,compute() 函数在延迟计算结束时,将大数据的结果带到 Pandas 数据框中。
3. 机器学习
下面的代码片段提供了使用 XGBoost 在 Dask 中进行特征工程和 ML 模型构建的工作示例
特征工程和 Dask 的 ML 模型
结论:
Dask 是一个强大的工具,提供并行计算、大数据处理以及创建端到端的数据科学管道。它有一个陡峭的学习曲线,因为它的 API 与 pandas 几乎相似,而且可以轻松处理超出内存限制的计算(~10 倍 RAM)。
由于这是一个动态博客,我将继续编写 Dask 系列的后续部分,我们将通过并行处理来瞄准 Kaggle 排行榜。如果你在设置 Dask 或执行任何 Dask 操作时遇到问题,或者只是想聊聊,请在评论中告诉我。祝学习愉快!!!
资源:
-
www.kaggle.com/yuliagm/how-to-work-with-big-datasets-on-16g-ram-dask
-
medium.com/better-programming/what-is-dask-and-how-can-it-help-you-as-a-data-scientist-72adec7cec57
简历:Ravi Shankar 是亚马逊定价部门的数据科学家-II。
原文。转载已获许可。
相关:
-
在 Dask 中进行机器学习
-
在云中使用 Dask 进行数据科学
-
为什么以及如何在大数据中使用 Dask
更多相关话题
Pandas 与 Polars:Python 数据框库的比较分析
原文:
www.kdnuggets.com/pandas-vs-polars-a-comparative-analysis-of-python-dataframe-libraries
作者提供的图片
Pandas 长期以来一直是处理数据的首选库。然而,我相当确定你们中的大多数人可能已经体验过在 Pandas 处理大型 DataFrame 时坐上几个小时的痛苦。
我们的三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升您的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持您的组织的 IT 工作
对于那些关注 Python 最新发展的用户,很难忽视 Polars 的热度,这是一款专门开发用于处理大型数据集的强大数据框库。
所以今天我将尝试深入探讨这两个数据框库之间的关键技术差异,审视它们各自的优势和局限性。
语法与执行:Pandas 与 Polars
首先,为什么大家都这么执着于比较 Pandas 和 Polars 库呢?
与专为大型数据集设计的其他库(如 Spark 或 Ray)不同,Polars 是专门为单机使用而设计的,这使得它与 pandas 的比较非常频繁。
然而,Polars 和 pandas 在数据处理方法及其理想使用场景上存在显著差异。
Polars 出色性能的秘密在于四个主要原因:
1. Rust 提升了效率
与基于 Python 库如 NumPy 的 Pandas 形成鲜明对比,Polars 是使用 Rust 构建的。这个以快速性能著称的低级语言,可以编译成机器代码,而不需要使用解释器。
作者提供的图片
这样的基础为 Polars 提供了显著的优势,特别是在处理 Python 难以应对的数据类型时。
2. 急切和惰性执行选项
Pandas 遵循急切执行模型,按编码顺序处理操作,而 Polars 提供急切执行和惰性执行选项。
Polars 在其惰性执行中使用了查询优化器,以高效地规划并可能重新组织操作顺序,从而消除任何不必要的步骤。
这与 Pandas 可能在应用过滤器之前处理整个 DataFrame 相对。
例如,在计算某些类别的列均值时,Polars 会首先应用过滤器,然后进行分组操作,从而优化处理效率。
3. 进程的并行化
根据 Polars 用户指南,其主要目标是:
“提供一个 lightning-fast 的 DataFrame 库,利用你机器上所有可用的核心。”
Rust 设计的另一个好处是其对安全并发的支持,确保可预测和高效的并行处理。此功能使 Polars 能够充分利用机器的多个核心进行复杂操作。
作者提供的图片
因此,Polars 显著优于 Pandas,后者仅限于单核操作。
4. 富有表现力的 API
Polars 拥有高度灵活的 API,几乎可以使用其方法执行所有所需任务。相比之下,在 pandas 中执行复杂任务通常需要使用 apply 方法及其 apply 方法中的 lambda 表达式。
然而,这种方法有一个缺点:它逐行处理 DataFrame,每次执行操作时都是顺序进行的。
相反,Polars 利用固有方法在列级别上执行操作,利用一种被称为 SIMD(单指令、多数据)的不同并行性类型。
每个库的理想使用案例
Polars 是否优于 Pandas?它在未来是否可能取代 Pandas?
一如既往,这主要取决于具体的使用案例。
Polars 相对于 Pandas 的主要优势在于其速度,特别是在处理大型数据集时。对于处理大量数据的任务,强烈建议探索 Polars。
虽然 Polars 在数据转换效率方面表现出色,但在数据探索和集成到机器学习管道等领域仍不及 Pandas。
Polars 与大多数 Python 数据可视化和机器学习库(如 scikit-learn 和 PyTorch)的不兼容性限制了其在这些领域的适用性。
关于在这些软件包中集成 Python 数据帧交换协议以支持多样化数据帧库的讨论仍在进行中。
这一发展可能简化目前依赖于 Pandas 的数据科学和机器学习过程,但这是一个相对较新的概念,实施需要时间。
在数据科学工作流中同时使用这两种工具
Pandas 和 Polars 各有其独特的优势和局限性。Pandas 仍然是数据探索和机器学习集成的首选库,而 Polars 在大规模数据转换方面表现突出。
理解每个库的功能和最佳应用方式是有效应对不断发展的 Python 数据框架环境的关键。
拥有这些见解后,你可能迫不及待地想亲自尝试 Polars 了!
作为数据科学家和 Python 爱好者,拥抱这两种工具可以提升我们的工作流程,使我们能够在数据驱动的工作中利用两者的最佳特性。
随着这些库的持续发展,我们可以期待在 Python 中处理数据的方式会变得更加精细和高效。
Josep Ferrer**** 是一位来自巴塞罗那的分析工程师。他在物理工程方面毕业,目前在数据科学领域专注于人类流动性。他还兼职从事数据科学和技术方面的内容创作。Josep 涉及人工智能的各个方面,涵盖了这一领域的持续爆炸性发展。
更多相关话题
带代码的论文:机器学习的一个极好的 GitHub 资源
原文:
www.kdnuggets.com/2018/12/papers-with-code-fantastic-github-resource-machine-learning.html
评论
寻找带代码的论文吗?
如果是这样,这个GitHub 仓库,准确地称为“带代码的论文”,由Zaur Fataliyev创建,正是你所需要的。
带代码的论文。按星级排序。每周更新。
这可能很直接,但也相当准确。
基于首尔的机器学习工程师 Fataliyev,在贡献者的请求帮助下,整理了这一广泛的资源,并进一步描述了该仓库如下:
这项工作正在持续进展和更新。我们每天都在添加新的 PWC!在推特上关注我 @fvzaur
使用这个线程请求我们将你最喜欢的会议添加到我们的观察列表和 PWC 列表中。
除了按星级排序,论文还按年份排列,使得找到突出研究变得更加容易——当然,还有相应的代码。
如果这听起来对你感兴趣,务必查看一下这个仓库,并且向 Zaur 表示感谢,因为他为我们整理了这样一个有用的资源。
相关:
-
GitHub Python 数据科学亮点:AutoML、NLP、可视化、ML 工作流
-
前 10 大 Python 数据科学库
-
前 20 大 Python AI 和机器学习开源项目
我们的前三大课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析水平
3. Google IT 支持专业证书 - 支持你的组织 IT
了解更多相关信息
人工智能和机器学习领域的最新进展——代码论文亮点
原文:
www.kdnuggets.com/2019/02/paperswithcode-ai-machine-learning-highlights.html
评论
正如任何机器学习、人工智能或计算机科学爱好者所知,找到感兴趣主题的资源和论文可能是一项麻烦的工作。通常,你需要注册一个网站,有些甚至会收取订阅费用来阅读他人的研究成果。
这就是使* Papers with code*如此出色的原因;他们提供了大量免费的资源,涵盖了各种主题。他们的使命声明如下:
Papers With Code 的使命是创建一个免费的开放资源,提供机器学习论文、代码和评估表格。
我们相信,这最好是与社区共同完成并通过自动化实现的。
我们已经自动化了代码与论文的链接,现在正致力于自动化从论文中提取评估指标。
在此基础上,他们有自己的slack 频道,并允许用户下载所有帮助运行网站的数据。他们欢迎贡献,所以可以随时参与进来,继续壮大社区!
为了庆祝这一伟大资源,我们尝试总结了网站上我们最喜欢的 6 个主题(网站称之为“任务”)及其提供的一些论文:
语义分割
语义分割的概念是识别和理解图像中的每一个像素。这是网站上内容最多的类别之一,共有 322 篇带代码的论文。其中最受欢迎的论文标题为*带有 Atrous 可分离卷积的编码器-解码器用于语义图像分割*。该论文旨在结合语义分割的两种方法的优势:空间金字塔池化模块和编码-解码结构。该论文附带了一个公开的 TensorFlow 模型实现。
其他顶级语义分割论文:
自然语言处理(NLP)
自然语言处理是站点上最大的一类任务集合之一,涵盖了机器翻译、语言建模、情感分析、文本分类等多个子领域。在这些子领域中,问答系统是最受欢迎的类别之一,相关论文超过 200 篇。该领域排名最高的论文由 Jacob Devlin、Ming-Wei Chang、Kenton Lee 和 Kristina Toutanova 撰写,题为*BERT:用于语言理解的深度双向变换器预训练*。该论文介绍了一种新的语言表示模型,称为 BERT,代表双向编码器表征来自变换器。与近期的语言表示模型不同,BERT 旨在通过在所有层中共同考虑左右上下文来进行深度双向表示的预训练。
其他顶级 NLP 论文:
迁移学习
迁移学习是一种方法论,其中从一个任务上训练的模型的权重被提取并用于:
-
构建一个固定的特征提取器
-
作为权重初始化和/或微调
关于迁移学习,最受欢迎的论文是*半监督知识迁移:从私有训练数据中学习*。这篇论文旨在解决一个影响使用私有数据的模型的问题,即模型可能会无意中和隐性地存储一些训练数据,因此对模型的后续仔细分析可能会揭示敏感信息。为了解决这个问题,论文展示了一种通用的提供敏感数据安全性的办法:教师集体的私有聚合(PATE)。这种方法以黑箱的方式结合了用不重叠的数据集训练的多个模型,例如来自不同用户子集的记录。该论文还包括一个指向 GitHub 仓库的链接,其中包含该项目的所有 TensorFlow 代码。
其他顶级迁移学习论文:
腾讯 ML-Images:一个用于视觉表示学习的大规模多标签图像数据库
多任务学习
多任务学习旨在同时学习多个不同的任务,同时最大化一个或所有任务的性能。目前星标最多的论文是:DRAGNN:一个基于转换的动态连接神经网络框架。这项工作提出了一个紧凑的模块化框架,用于构建新型的递归神经网络架构。再次提醒,这篇论文还提供了一个完整的 TensorFlow 工作代码示例。
关于多任务学习的其他顶级论文:
推荐系统
推荐系统的目标是为用户生成推荐列表。该领域的一个热门论文是*【训练深度自编码器用于协同过滤](https://paperswithcode.com/paper/training-deep-autoencoders-for-collabora2)*,作者是 Oleksii Kuchaiev 和 Boris Ginsburg。这篇论文提出了一种新颖的模型用于推荐系统中的评分预测任务,该模型在时间切分的 Netflix 数据集上显著超越了以前的最先进模型。该模型基于 6 层的深度自编码器,并且是端到端训练的,没有任何逐层预训练。这是一个在 PyTorch 中进行的 NVIDIA 研究项目,所有使用的代码都可以公开使用。
关于推荐系统的其他顶级论文:
DeepFM:一个端到端的广泛与深度学习框架用于 CTR 预测
当然,我们只是触及了Papers with Code提供的表面。我们希望你像我们一样喜欢这个网站!
资源:
相关:
我们的三大课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业领域。
2. Google 数据分析专业证书 - 提升您的数据分析技能
3. Google IT 支持专业证书 - 支持您所在组织的 IT 工作
相关主题更多信息
数据科学的悖论
评论
由托马斯·鲍尔,分析专业人士。
在当今的数据科学世界中存在许多悖论、讽刺和脱节:痛点、被忽视的事情、被掩盖的东西、被否认的东西,或者仅仅是口头上的承诺,而数据科学的强大势头仍在数字领域不断推进。例如,尽管 Hal Varian 广泛引用的观察是“未来 10 年最性感的工作将是统计学家”,但易于使用的点选式统计软件和分析工具的出现意味着实际上任何人都可以按下按钮得到答案。这是否像是把装满子弹的火箭筒交给一只大猩猩,让它出去玩得开心一样,这并不重要。未言明的现实是,统计分析已被贬低为一种次要的重要技能,与更紧迫的任务相比,这些任务需要真正管理数字信息流架构的技能。一个相关的假设是,任何具有计算机科学背景的人都具备必要的统计和分析技能,不管他们是否真正具备这些技能。
我们的前 3 名课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业轨道。
2. Google 数据分析专业证书 - 提升你的数据分析能力
3. Google IT 支持专业证书 - 支持你的组织的 IT 需求
说时代具有颠覆性是一句陈词滥调,但正如麦克卢汉所指出的,文明正处于数字化、网络化变革的边缘,这一变革的重要性相当于古滕堡圣经的印刷。那一创新的影响花了几个世纪才在宗教和文化中逐渐显现,因为大规模生产的圣经传播到欧洲各地,减少了神职人员和天主教会的权威在与上帝关系中的调解作用,这在路德的理解中,印刷的圣经使每个人都成为了神学家,最终形成了新教改革。
在这个民主化的历史时刻,几乎没有人愿意给数字革命几百年的时间去展开。成千上万的声音在博客或 PLOS One 上涌现,每年出版数百万篇文章和书籍,共同传递着希望、炒作和虚伪的海啸。虚假药水供应商和大数据及数据科学的 PT Barnum 们与令人窒息的知识过剩一同涌现,且在混乱中没有明确的视线。以许多方式,无知已经成为我们时代的讽刺裁判——我们可以赞美愚蠢,但没有人愿意为此买单。
然而,穿越混乱的视线代理是可能的。其中一个代理是华尔街给予像谷歌、苹果、亚马逊和 FB 等实体的过高市场估值,与巨大的代理和媒体控股公司如 WPP、Publicis、Omnicom 和 Interpublic 形成对比——雅虎也可以被纳入这一组。无论现实与否,科技公司累积的市场总值大约是大型媒体公司估值的 20 倍(截至 2015 年 8 月 14 日星期五)。尽管这些差异看起来痛苦地明显,但背后的原因并不明确。
其中一个关键点是,科技实体是由技术精通的工程师和数学家创办和/或管理的,而那些最多只是半懂技术的控股公司则由传统的老派营销人员管理:那些凭借其卓越的沟通和人际交往能力上升到高层的高管们。
这强调了一个容易识别的界限,将技术精通、前瞻性的商业领域与不懂技术的传统主义者区分开来:传统主义者是那些被迎合的对象,是那些在面对即使是稍微具挑战性的演示时,眼神呆滞的技术文盲,要求信息被简化到可以立即理解和消化的水平。另一方面,这些人却完全能够流利地谈论数字时代,对这种不连续性视而不见,安慰自己任何有技术精通的下属都会因为“缺乏适配性”而被迫离开他们的组织。
这些传统主义者是巨大的惯性和趋同于“常识”做事方式和赚钱方式的源头:总是按照既定方式进行。他们围绕维护现状构建了商业模型:只需考虑从 Napster 开始到今天的音乐版权争夺战的证据。所有这些的讽刺和悖论在于,尽管许多人愿意将自己标榜为创新前卫者,但实际上却是老派或传统主义者。这就像行为经济学研究显示的 80%的人认为自己高于平均水平一样。如今每个人都是自封的前瞻性创新者,加入到最新“热点”中,以参与所有的兴奋、激动的热潮,使得区分优质内容和次要内容变得极其困难。
这对数据科学有重要影响,特别是在对预测分析、算法学习和人工智能的胃口、潜力和投资方面——这些高度技术化、最难理解的领域具有最显著的前景潜力。在数据科学家需求的所谓直观、创造性见解与能够使复杂想法“易于理解”的能力之间存在一种未被承认的分歧,这与推动不直观的黑箱算法答案的那些人形成对比。
不直观的技术精通者正在提供基础性的、算法驱动的创新,20 世纪科幻小说中的构想如无人驾驶汽车、虚拟现实、可穿戴技术、芯片上的研究实验室等正在变为现实。另一方面,媒体实体则保持犹豫和风险规避,远远落后于这些创新的潮流,以至于这个词几乎失去了意义。他们更倾向于“易于理解”的事物,这些事物已经广泛被认可,争议较少,例如在医疗保健领域,使用 CMS 批准的方法如医疗保险的 CDPS 进行慢性病费用分析和控制,而不是利用专注于快速高效、机器学习方法的动态诊断和治疗的新兴学术研究。毕竟,CDPS 方式是“经过验证”的,而另一种方法几乎没有真实依据,只是“凭空捏造”(这是数据科学分歧前线的直接引语)。
所有这些中的另一个巨大脱节是所谓的人才争夺战,即公司正在争夺技能资源短缺的神话。这个“短缺”人才的一个显著方面是许多数据科学职位描述的惊人不切实际,几乎是妄想。如果 HR 成本是公司损益表上的最大项目,在错误地尝试最小化这些成本时,公司寻找的候选人更像是史蒂夫·乔布斯——即使是初级职位——以便将计算机科学、IT 和实际分析等一系列技能浓缩到一个人身上,同时代表公司参加行业会议、推动创新、战略规划、团队领导、产品开发和客户管理。找到一个具备所有这些技能的资源并不容易,但有深口袋的公司愿意等待,像煮海一样等待完美的雇佣——那只传说中的紫色松鼠。
话虽如此,现实是人才洪流——花 2 秒钟在 Google Trends 上查看,几年来“数据科学家”关键词的指数增长便能提供有力证据。这意味着竞争并不是为了人才本身,而是为了优秀、富有创意、便宜的人才——愿意接受生存工资的员工。这里的重点是“便宜”,因为许多初创公司的薪资规模——即使对于高度技能的高级数据科学资源——不仅是生存水平,而且低得让人感觉对这个职业的蔑视。从 Y2K 以来,利用离岸资源的举措是这种制度化蔑视的另一个表现,伪装成成本节约。
这种变化使得对规范数据科学薪酬的预期被重新设置到了一个极低的基准:既然可以从次大陆以巨大的折扣获得“相同的东西”,为何还要为北美人才支付更高的薪水?这些是无情的、以 MBA 驱动的财务决策,像大多数削减成本的措施一样,影响了公司资产负债表的单变量维度。其他不易量化的指标,如交付工作的质量、开发的创新或获得的答案,可能在过程中受到阻碍,但由于不易量化,因此变得不重要。
理解这一点的一个方式是将其视为一种虚假的二分法,这种二分法源自制造业,将服务分为事实上的白领与蓝领技能集,以及相应的薪酬(性别也是这种划分中的一个隐含因素)。由于每个人都使用某种计算机,因此这种划分不仅由平台(例如,移动设备或平板电脑与固定工作站)定义,还由日常使用的软件定义。任何编写代码的人,按定义都是蓝领工人——程序员——在组织中具有二级或三级的商品化地位,他们只是按照白领思考者和战略家的创意、战术大纲来操作——并因此获得相应的报酬。
相关:
-
我爱数据和分析的 10 个原因
-
数据科学的历史信息图:5 条脉络
-
我被分析机器人取代了
-
采访:迈克尔·布罗迪谈行业经验、知识发现与未来趋势
相关主题
提示工程中的并行处理:Skeleton-of-Thought 技术
原文:
www.kdnuggets.com/parallel-processing-in-prompt-engineering-the-skeleton-of-thought-technique
图片由作者使用 Midjourney 创建
主要要点
-
Skeleton-of-Thought(SoT)是一种创新的提示工程技术,旨在最小化大型语言模型(LLMs)的生成延迟,提高其效率。
-
通过创建答案的骨架并平行地详细阐述每个要点,SoT 模拟人类思维,促进更可靠和准确的 AI 响应。
-
在项目中实施 SoT 可以显著加快问题解决和答案生成,特别是在需要 AI 结构化和高效输出的场景中。
我们的前三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能。
3. 谷歌 IT 支持专业证书 - 支持你所在组织的 IT。
SoT 是数据中心优化的初步尝试,揭示了推动 LLMs 更像人类思考的潜力,以提高答案质量。
简介
提示工程是利用生成 AI 潜力的起点。通过设计有效的提示和提示编写方法,我们可以引导 AI 理解用户的意图并有效地应对这些意图。在这个领域,一种值得注意的技术是 Chain-of-Thought(CoT)方法,它指示生成 AI 模型在处理任务或回应查询时逐步阐明其逻辑。在 CoT 的基础上,出现了一种新的有前景的技术 Skeleton-of-Thought(SoT),旨在改进 AI 处理和输出信息的方式,从而促进更可靠和准确的响应。
理解 Skeleton-of-Thought
思维骨架的起源来自于减少大型语言模型(LLMs)固有生成延迟的努力。与顺序解码方法不同,SoT 通过首先生成答案的骨架,然后平行填充细节来模拟人类思维,从而显著加快推理过程。与 CoT(链式思维)相比,SoT 不仅鼓励结构化的响应,还有效组织生成过程,以提高生成文本系统的性能。
图 1:思维骨架过程(来源:思维骨架:大型语言模型可以进行并行解码)
实施思维骨架
如上所述,实施 SoT(思维骨架)涉及引导 LLM(大型语言模型)创建问题解决或答案生成过程的骨架,然后对每一点进行平行详细阐述。这种方法在需要 AI 高效且结构化输出的场景中尤其有用。例如,在处理大规模数据集或回答复杂查询时,SoT 可以显著加快响应时间,提供一个简化的工作流程。通过将 SoT 融入现有的提示工程策略,提示工程师可以更有效、可靠和快速地利用生成文本的潜力。
也许展示 SoT 的最佳方式是通过示例提示。
示例 1
-
问题:描述光合作用的过程。
-
骨架:光合作用发生在植物中,涉及将光能转化为化学能,生成葡萄糖和氧气。
-
要点扩展:详细阐述光的吸收、叶绿素的作用、卡尔文循环和氧气释放。
示例 2
-
问题:解释大萧条的原因。
-
骨架:大萧条是由于股市崩盘、银行倒闭和消费者支出减少引起的。
-
要点扩展:深入探讨“黑色星期二”、1933 年的银行危机以及减少购买力的影响。
这些示例展示了 SoT 提示如何促进结构化的、逐步的回答复杂问题的方法。它还展示了工作流程:提出问题或定义目标,给 LLM 一个广泛或全面的答案作为阐述支持性推理的基础,然后明确地呈现这些支持性推理问题并特意提示其进行操作。
图 2:思维骨架简化过程(作者图片)
虽然 SoT 提供了一种结构化的问题解决方法,但它可能并不适用于所有场景。识别合适的应用案例和理解其实现是重要的。此外,从顺序处理到并行处理的过渡可能需要系统设计的调整或额外的资源。然而,克服这些障碍可以揭示 SoT 在提升生成文本任务的效率和可靠性方面的潜力。
结论
SoT 技术在 CoT 方法的基础上,提供了一种新的提示工程方法。它不仅加速了生成过程,还促进了结构化和可靠的输出。通过在项目中探索和整合 SoT,实践者可以显著提升生成文本的性能和可用性,推动更高效和更具洞察力的解决方案。
马修·梅奥 (@mattmayo13) 拥有计算机科学硕士学位和数据挖掘研究生文凭。作为 KDnuggets 的总编辑,马修的目标是让复杂的数据科学概念变得易于理解。他的专业兴趣包括自然语言处理、机器学习算法和探索新兴的人工智能。他致力于在数据科学社区中普及知识。马修从 6 岁起便开始编程。
了解更多信息
Python 中的大文件并行处理
原文:
www.kdnuggets.com/2022/07/parallel-processing-large-file-python.html
图片由作者提供
对于并行处理,我们将任务划分为子单元。这增加了程序处理的作业数量,并减少了总体处理时间。
我们的三大课程推荐
1. 谷歌网络安全证书 - 快速开启网络安全职业生涯
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的 IT 组织
例如,如果你正在处理一个大型 CSV 文件,并且想要修改单列。我们会将数据以数组的形式传递给函数,函数会根据可用的工作者的数量同时并行处理多个值。这些工作者的数量基于你处理器中的核心数。
注意: 在较小的数据集上使用并行处理不会提高处理速度。
在这篇博客中,我们将学习如何使用multiprocessing、joblib和tqdm Python 包来减少大型文件的处理时间。这是一个简单的教程,适用于任何文件、数据库、图像、视频和音频。
注意: 我们使用的是 Kaggle 笔记本进行实验。处理时间可能因机器而异。
入门
我们将使用来自 Kaggle 的美国事故数据集(2016 - 2021),该数据集包含 280 万条记录和 47 列。
我们将导入multiprocessing
、joblib
和tqdm
用于并行处理,pandas
用于数据引入,以及re
、nltk
和string
用于文本处理。
*# Parallel Computing*
import multiprocessing as mp
from joblib import Parallel, delayed
from tqdm.notebook import tqdm
*# Data Ingestion*
import pandas as pd
*# Text Processing*
import re
from nltk.corpus import stopwords
import string
在我们开始之前,让我们将n_workers
设置为cpu_count()
的两倍。如你所见,我们有 8 个工作者。
n_workers = 2 * mp.cpu_count()
print(f"{
n_workers} workers are available")
>>> 8 workers are available
在下一步中,我们将使用pandas的read_csv
函数引入大型 CSV 文件。然后,打印出数据框的形状、列名和处理时间。
注意: Jupyter 的魔法函数
%%time
可以在处理结束时显示CPU 时间和墙钟时间。
%%time
file_name="../input/us-accidents/US_Accidents_Dec21_updated.csv"
df = pd.read_csv(file_name)
print(f"Shape:{
df.shape}\n\nColumn Names:\n{
df.columns}\n")
输出
Shape:(2845342, 47)
Column Names:
Index(['ID', 'Severity', 'Start_Time', 'End_Time', 'Start_Lat', 'Start_Lng',
'End_Lat', 'End_Lng', 'Distance(mi)', 'Description', 'Number', 'Street',
'Side', 'City', 'County', 'State', 'Zipcode', 'Country', 'Timezone',
'Airport_Code', 'Weather_Timestamp', 'Temperature(F)', 'Wind_Chill(F)',
'Humidity(%)', 'Pressure(in)', 'Visibility(mi)', 'Wind_Direction',
'Wind_Speed(mph)', 'Precipitation(in)', 'Weather_Condition', 'Amenity',
'Bump', 'Crossing', 'Give_Way', 'Junction', 'No_Exit', 'Railway',
'Roundabout', 'Station', 'Stop', 'Traffic_Calming', 'Traffic_Signal',
'Turning_Loop', 'Sunrise_Sunset', 'Civil_Twilight', 'Nautical_Twilight',
'Astronomical_Twilight'],
dtype='object')
CPU times: user 33.9 s, sys: 3.93 s, total: 37.9 s
Wall time: 46.9 s
清理文本
clean_text
是一个简单的文本处理和清理函数。我们将使用nltk.corpus
获取英语stopwords,并用它来过滤文本中的停用词。之后,我们将从句子中移除特殊字符和多余的空格。这将成为确定serial、parallel和batch处理时间的基准函数。
def clean_text(text):
*# Remove stop words*
stops = stopwords.words("english")
text = " ".join([word for word in text.split() if word not in stops])
*# Remove Special Characters*
text = text.translate(str.maketrans('', '', string.punctuation))
*# removing the extra spaces*
text = re.sub(' +',' ', text)
return text
串行处理
对于串行处理,我们可以使用 pandas 的.apply()
函数,但如果你想查看进度条,你需要激活tqdm以支持pandas,然后使用.progress_apply()
函数。
我们将处理 280 万条记录,并将结果保存回“Description”列。
%%time
tqdm.pandas()
df['Description'] = df['Description'].progress_apply(clean_text)
输出
高端处理器处理 280 万行数据的串行处理时间为 9 分钟 5 秒。
100% 2845342/2845342 [09:05<00:00, 5724.25it/s]
CPU times: user 8min 14s, sys: 53.6 s, total: 9min 7s
Wall time: 9min 5s
多进程
有多种方法可以并行处理文件,我们将学习所有这些方法。multiprocessing
是一个内置的 Python 包,通常用于并行处理大文件。
我们将创建一个包含8 个工作线程的多进程Pool,并使用map函数来启动处理。为了显示进度条,我们使用tqdm。
map 函数由两个部分组成。第一部分需要函数,第二部分需要一个参数或参数列表。
了解更多信息,请阅读文档。
%%time
p = mp.Pool(n_workers)
df['Description'] = p.map(clean_text,tqdm(df['Description']))
输出
我们将处理时间提高了近3 倍。处理时间从9 分钟 5 秒减少到3 分钟 51 秒。
100% 2845342/2845342 [02:58<00:00, 135646.12it/s]
CPU times: user 5.68 s, sys: 1.56 s, total: 7.23 s
Wall time: 3min 51s
并行
我们现在将学习另一个 Python 包来执行并行处理。在这一部分,我们将使用 joblib 的Parallel和delayed来模拟map函数。
-
Parallel 需要两个参数:n_jobs = 8 和 backend = multiprocessing。
-
然后,我们将把clean_text添加到delayed函数中。
-
创建一个循环一次处理一个值。
下面的过程相当通用,你可以根据需要修改你的函数和数组。我已经用它处理了成千上万的音频和视频文件,没有遇到任何问题。
推荐: 使用try:
和except:
添加异常处理
def text_parallel_clean(array):
result = Parallel(n_jobs=n_workers,backend="multiprocessing")(
delayed(clean_text)
(text)
for text in tqdm(array)
)
return result
将“Description”列添加到text_parallel_clean()
中。
%%time
df['Description'] = text_parallel_clean(df['Description'])
输出
我们的函数比使用Pool的多进程慢了 13 秒。即便如此,Parallel比serial处理快了 4 分钟 59 秒。
100% 2845342/2845342 [04:03<00:00, 10514.98it/s]
CPU times: user 44.2 s, sys: 2.92 s, total: 47.1 s
Wall time: 4min 4s
并行批处理
有一种更好的方法来处理大文件,即将其拆分为批次并进行并行处理。让我们从创建一个批处理函数开始,该函数将在一批值上运行clean_function
。
批处理函数
def proc_batch(batch):
return [
clean_text(text)
for text in batch
]
将文件拆分为批次
下面的函数将根据工作线程的数量将文件拆分为多个批次。在我们的案例中,我们得到 8 个批次。
def batch_file(array,n_workers):
file_len = len(array)
batch_size = round(file_len / n_workers)
batches = [
array[ix:ix+batch_size]
for ix in tqdm(range(0, file_len, batch_size))
]
return batches
batches = batch_file(df['Description'],n_workers)
>>> 100% 8/8 [00:00<00:00, 280.01it/s]
运行并行批处理
最后,我们将使用Parallel和delayed来处理批次。
注意: 要获取单个值数组,我们必须运行列表推导式,如下所示。
%%time
batch_output = Parallel(n_jobs=n_workers,backend="multiprocessing")(
delayed(proc_batch)
(batch)
for batch in tqdm(batches)
)
df['Description'] = [j for i in batch_output for j in i]
输出
我们已经改进了处理时间。这种技术因处理复杂数据和训练深度学习模型而闻名。
100% 8/8 [00:00<00:00, 2.19it/s]
CPU times: user 3.39 s, sys: 1.42 s, total: 4.81 s
Wall time: 3min 56s
tqdm 并发
tqdm 将多进程处理提升到了一个新的水平。它简单且强大。我会向每位数据科学家推荐它。
查看文档以了解更多关于多进程的信息。
process_map
需要:
-
函数名称
-
数据框列
-
max_workers
-
chucksize 类似于批大小。我们将使用工作数量来计算批大小,或者你可以根据个人喜好添加数量。
%%time
from tqdm.contrib.concurrent import process_map
batch = round(len(df)/n_workers)
df["Description"] = process_map(
clean_text, df["Description"], max_workers=n_workers, chunksize=batch
)
输出
只需一行代码,我们就能获得最佳结果。
100% 2845342/2845342 [03:48<00:00, 1426320.93it/s]
CPU times: user 7.32 s, sys: 1.97 s, total: 9.29 s
Wall time: 3min 51s
结论
你需要找到一个平衡点,选择最适合你情况的技术。可以是串行处理、并行处理或批处理。如果你处理的是较小且复杂性较低的数据集,并行处理可能会适得其反。
在这个迷你教程中,我们学习了各种 Python 包和技术,这些技术允许我们并行处理数据函数。
如果你仅处理表格数据集并希望提升处理性能,我建议你尝试Dask、datatable和RAPIDS
参考
Abid Ali Awan (@1abidaliawan) 是一位认证的数据科学专业人士,热爱构建机器学习模型。目前,他专注于内容创作,并撰写有关机器学习和数据科学技术的技术博客。Abid 拥有技术管理硕士学位和电信工程学士学位。他的愿景是利用图神经网络为有心理疾病困扰的学生开发 AI 产品。
主题更多
获取免费的电子书《伟大的自然语言处理入门》和《数据科学备忘单的完整合集》,以及有关数据科学、机器学习、人工智能和分析的领先新闻通讯,直接送到你的收件箱。
订阅即表示你接受 KDnuggets 的 隐私政策
最新文章
|
热门文章
|
© 2024 Guiding Tech Media | 关于 | 联系 | 广告合作 | 隐私政策 | 服务条款
发表时间:2023 年 2 月 21 日,作者:Abid Ali Awan
并行化 Python 代码
评论
由 Dawid Borycki,生物医学研究员和软件工程师 & Michael Galarnyk,数据科学专家
Python 非常适合用于训练机器学习模型、执行数值模拟和快速开发概念验证解决方案,而无需设置开发工具和安装多个依赖项。在执行这些任务时,你还希望尽可能多地使用底层硬件以获得快速结果。并行化 Python 代码可以实现这一点。然而,使用标准 CPython 实现意味着你无法充分利用底层硬件,因为全局解释器锁(GIL)阻止了字节码在多个线程中同时运行。
本文回顾了几种常见的并行化 Python 代码的选项,包括:
-
专门的库
对于每种技术,本文列出了一些优点和缺点,并展示了代码示例,帮助你理解使用它的感觉。
如何并行化 Python 代码
并行化 Python 代码有几种常见的方法。你可以启动多个应用程序实例或脚本以并行执行作业。这种方法非常适合当你不需要在并行作业之间交换数据时。否则,在进程之间共享数据会显著降低性能,特别是在汇总数据时。
在同一进程内启动多个线程可以更有效地在作业之间共享数据。在这种情况下,基于线程的并行化可以将一些工作卸载到后台。然而,标准 CPython 实现的全局解释器锁(GIL)阻止了字节码在多个线程中同时运行。
以下示例函数模拟复杂计算(旨在模仿激活函数)
iterations_count = round(1e7)
def complex_operation(input_index):
print("Complex operation. Input index: {:2d}".format(input_index))
[math.exp(i) * math.sinh(i) for i in [1] * iterations_count]
complex_operation
执行多次以更好地估计处理时间。它将长时间运行的操作分成一批较小的操作。它通过将输入值划分为多个子集,并从这些子集中并行处理输入来实现这一点。
这是运行 complex_operation
多次(输入范围为十)的代码,并使用 timebudget 包测量执行时间:
@timebudget
def run_complex_operations(operation, input):
for i in input:
operation(i)
input = range(10)
run_complex_operations(complex_operation, input)
执行 这个脚本后,你将获得类似于下面的输出:
如你所见,在本教程中使用的笔记本电脑上执行此代码大约花费了 39 秒。让我们看看如何改进这个结果。
基于进程的并行 ism
第一种方法是使用基于进程的并行 ism。通过这种方法,可以同时启动多个进程。这种方式可以使它们并行地执行计算。
从 Python 3 开始,multiprocessing 包 已经预装,并且为我们提供了启动并发进程的便捷语法。它提供了 Pool 对象,该对象自动将输入划分为子集,并在多个进程中分配它们。
这是一个示例 展示了如何使用 Pool 对象启动十个进程:
import math
import numpy as np
from timebudget import timebudget
from multiprocessing import Pool
iterations_count = round(1e7)
def complex_operation(input_index):
print("Complex operation. Input index: {:2d}\n".format(input_index))
[math.exp(i) * math.sinh(i) for i in [1] * iterations_count]
@timebudget
def run_complex_operations(operation, input, pool):
pool.map(operation, input)
processes_count = 10
if __name__ == '__main__':
processes_pool = Pool(processes_count)
run_complex_operations(complex_operation, range(10), processes_pool)
每个进程并行执行复杂的操作。因此,理论上代码可以将总执行时间减少最多十倍。然而,下面的代码输出仅显示了大约四倍的改进(上一节的 39 秒 vs 本节的 9.4 秒)。
改进效果没有达到十倍的原因有几个。首先,能够同时运行的最大进程数取决于系统中的 CPU 数量。你可以通过使用os.cpu_count()
方法来查看系统中的 CPU 数量。
import os
print('Number of CPUs in the system: {}'.format(os.cpu_count()))
本教程中使用的机器有八个 CPU。
改进效果没有更好的原因是,本教程中的计算相对较小。最后,需要注意的是,进行并行计算时通常会有一些开销,因为需要通信的进程必须利用进程间通信机制。这意味着对于非常小的任务,并行计算往往比串行计算(普通 Python)要慢。如果你对了解更多关于 multiprocessing 的内容感兴趣,Selva Prabhakaran 有一篇优秀的博客 ,这篇博客启发了本教程的这一部分。如果你想了解更多关于并行/分布式计算的权衡,可以查看这个教程。
专用库
像 NumPy 这样的专用库的许多计算不受 GIL 影响 ,能够使用线程和其他技术进行并行计算。本教程的这一部分讲解了结合 NumPy 和 multiprocessing 的好处。
为了展示原始实现和基于 NumPy 的实现之间的差异,需要实现一个额外的函数:
def complex_operation_numpy(input_index):
print("Complex operation (numpy). Input index: {:2d}".format(input_index))
data = np.ones(iterations_count)
np.exp(data) * np.sinh(data)
代码现在使用 NumPy 的 exp 和 sinh 函数对输入序列进行计算。然后,代码使用进程池执行 complex_operation 和 complex_operation_numpy 十次,以比较它们的性能:
processes_count = 10
input = range(10)
if __name__ == '__main__':
processes_pool = Pool(processes_count)
print(‘Without NumPy’)
run_complex_operations(complex_operation, input, processes_pool)
print(‘NumPy’)
run_complex_operations(complex_operation_numpy, input, processes_pool)
以下输出显示了使用和不使用 NumPy 的性能对比,针对 这个脚本。
NumPy 提供了显著的性能提升。在这里,NumPy 将计算时间减少到原始时间的大约 10%(859ms 对比 9.515 秒)。它更快的原因之一是因为 NumPy 中的大部分处理都是向量化的。通过向量化,底层代码有效地被“并行化”,因为操作可以一次计算多个数组元素,而不是逐一循环处理。如果你对了解更多内容感兴趣,Jake Vanderplas 进行了一次很好的讲座,可以在这里观看。
IPython Parallel
IPython shell 支持在多个 IPython 实例之间进行交互式并行和分布式计算。IPython Parallel 几乎是与 IPython 一起开发的。当 IPython 被更名为 Jupyter 时,它们将 IPython Parallel 分离成了一个独立的包。IPython Parallel 有许多优势,但也许最大的优势是它使得并行应用程序可以以交互的方式开发、执行和监控。在使用 IPython Parallel 进行并行计算时,你通常会从 ipcluster 命令开始。
ipcluster start -n 10
最后的参数控制要启动的引擎(节点)数量。上述命令在 安装 ipyparallel Python 包后变得可用。以下是一个示例输出:
下一步是提供应该连接到 ipcluster 并启动并行作业的 Python 代码。幸运的是,IPython 提供了一个方便的 API 来实现这一点。代码看起来像是基于 Pool 对象的进程并行:
import math
import numpy as np
from timebudget import timebudget
import ipyparallel as ipp
iterations_count = round(1e7)
def complex_operation(input_index):
print("Complex operation. Input index: {:2d}".format(input_index))
[math.exp(i) * math.sinh(i) for i in [1] * iterations_count]
def complex_operation_numpy(input_index):
print("Complex operation (numpy). Input index: {:2d}".format(input_index))
data = np.ones(iterations_count)
np.exp(data) * np.sinh(data)
@timebudget
def run_complex_operations(operation, input, pool):
pool.map(operation, input)
client_ids = ipp.Client()
pool = client_ids[:]
input = range(10)
print('Without NumPy')
run_complex_operations(complex_operation, input, pool)
print('NumPy')
run_complex_operations(complex_operation_numpy, input, pool)
在终端中新标签页中执行的代码生成了如下输出:
对于 IPython Parallel,使用和不使用 NumPy 的执行时间分别为 13.88 毫秒和 9.98 毫秒。注意,标准输出中没有包含日志,但可以通过额外的命令进行评估。
Ray
类似于 IPython Parallel,Ray 可以用于并行 和 分布式计算。Ray 是一个快速、简单的分布式执行框架,使得扩展应用程序和利用最先进的机器学习库变得容易。使用 Ray,你可以将顺序运行的 Python 代码转化为分布式应用程序,代码修改最小。
虽然这个教程简要讲解了 Ray 如何简化普通 Python 代码的并行化,但值得注意的是,Ray 及其生态系统也使得并行化现有库变得容易,如 scikit-learn、XGBoost、LightGBM、PyTorch 等等。
使用 Ray 时,需要 ray.init() 来启动所有相关的 Ray 进程。默认情况下,Ray 为每个 CPU 核心创建一个工作进程。如果你想在集群上运行 Ray,你需要传入类似 ray.init(address=‘insertAddressHere’) 的集群地址。
ray.init()
下一步是创建一个 Ray 任务。这可以通过使用 @ray.remote 装饰器装饰一个普通的 Python 函数来完成。这会创建一个可以在你的笔记本电脑的 CPU 核心(或 Ray 集群)上调度的任务。下面是对之前创建的 complex_operation_numpy 的一个示例:
@ray.remote
def complex_operation_numpy(input_index):
print("Complex operation (numpy). Input index: {:2d}".format(input_index))
data = np.ones(iterations_count)
np.exp(data) * np.sinh(data)
在最后一步,在 Ray 运行时执行这些函数,如下所示:
@timebudget
def run_complex_operations(operation, input):
ray.get([operation.remote(i) for i in input])
执行 这个脚本 后,你将得到类似以下的输出:
使用和不使用 NumPy 的 Ray 执行时间分别为 3.382 秒和 419.98 毫秒。重要的是要记住,当执行长时间运行的任务时,Ray 的性能优势会更加明显,如下图所示。
当运行更大规模的任务时,Ray 的好处更为明显 (image source)
如果你想了解 Ray 的语法,可以在 这里 查阅介绍教程。
其他 Python 实现
一个最终的考虑是,你可以使用其他 Python 实现来应用多线程。例如,IronPython 用于 .NET,Jython 用于 Java。在这种情况下,你可以使用底层框架的低级线程支持。如果你已经有 .NET 或 Java 的多处理经验,这种方法会非常有利。
结论
这篇文章回顾了通过代码示例并突出一些优缺点来并行化 Python 的常见方法。我们使用简单的数值数据进行了基准测试。重要的是要记住,并行化的代码通常会引入一些开销,并且并行化的好处在处理较大的任务时更为明显,而不是在本教程中的短期计算。
请记住,并行化对于其他应用可能更为强大。尤其是在处理典型的基于 AI 的任务时,你必须对模型进行重复的微调。在这种情况下,Ray 由于其丰富的生态系统、自动扩展、容错能力和使用远程机器的能力,提供了最佳支持。
Dawid Borycki 是生物医学研究员和软件工程师,书籍作者和会议讲者。
Michael Galarnyk 是数据科学专业人士,并在 Anyscale 从事开发者关系工作。
原文。已获得许可重新发布。
相关内容:
-
如何加速 Scikit-Learn 模型训练
-
使用 Ray 编写你的第一个分布式 Python 应用程序
-
Dask 和 Pandas:数据量再多也不为过
我们的前三大课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的组织 IT
更多相关话题
数据科学家的帕累托原则
原文:
www.kdnuggets.com/2019/03/pareto-principle-data-scientists.html
评论
作者:Pradeep Gulipalli,Tiger Analytics
一个多世纪前,政治经济学教授维弗雷多·帕累托发布了他关于社会财富分配的研究结果。他观察到的剧烈不平等现象,如 20%的人拥有 80%的财富,令经济学家、社会学家和政治学家感到惊讶。在过去的一个世纪中,许多领域的先驱观察到这种不成比例的分配,包括商业。少数关键投入/原因(例如 20%的投入)直接影响大多数输出/效果(例如 80%的输出)的理论被称为帕累托原则,也称为 80-20 法则。
来源:威廉·利波夫斯基
我们的前三个课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析能力
3. 谷歌 IT 支持专业证书 - 支持你的组织 IT
帕累托原则是一个非常简单却极其强大的管理工具。企业高管们长期以来一直用它来进行战略规划和决策。比如,20%的商店产生了 80%的收入,20%的软件漏洞导致了 80%的系统崩溃,20%的产品特性驱动了 80%的销售等,这些观察结果非常普遍,分析能力强的企业试图在其业务中发现这样的帕累托。这样,他们能够进行计划和优先排序。事实上,今天,数据科学在筛选大量复杂数据以帮助识别未来的帕累托中扮演着重要角色。
虽然数据科学有助于预测企业的新帕累托,但数据科学也可以通过内部视角来受益,寻找内部的帕累托。利用这些可以使数据科学显著更高效、更有效。在这篇文章中,我将分享作为数据科学家,我们如何利用帕累托原则的力量来指导我们日常活动的一些方法。
项目优先排序
如果你是数据科学领域的领导者/经理,你不可避免地需要帮助制定组织的分析策略。虽然不同的业务领导者可以分享他们的需求,你必须将所有这些组织(或业务单元)的需求进行阐述,并将它们优先排序为分析路线图。一种简单的方法是量化每个分析需求的解决价值,并按价值降序排序。你会发现,前几个问题/用例通常具有不成比例的高价值(帕累托原则),应该优先于其他问题。实际上,更好的方法是量化解决/实施每个问题/用例的复杂性,并根据价值与复杂性之间的权衡来进行优先排序(例如,通过将价值放在 y 轴上、复杂性放在 x 轴上的图示来进行排序)。
问题范围定义
业务问题往往模糊且结构不明确,而数据科学家的工作涉及确定正确的范围。范围定义通常需要关注问题最重要的方面,并降低较低价值方面的优先级。首先,查看输出/效果与输入/原因的分布将帮助我们理解问题空间中是否存在高层次的帕累托分布。随后,我们可以选择只关注某些输入/输出或原因/效果。例如,如果 20%的商店产生了 80%的销售额,我们可以将其余的商店分组为一个集群进行分析,而不是逐个评估它们。
范围定义还涉及评估风险——更深入的评估通常会告诉我们,最重要的项目可能会带来显著更高的风险,而较低的重要性项目发生的可能性非常小(帕累托原则)。我们可以优先将时间和精力集中在少数关键风险上,而不是解决所有风险。
数据规划
复杂的业务问题需要的数据超出分析数据集市中易得的数据范围。我们需要请求访问、购买、获取、抓取、解析、处理和整合来自内部/外部来源的数据。这些数据形态、规模、健康状况、复杂性、成本等各不相同。等待整个数据计划完全到位可能会导致项目延迟,而这些延迟不在我们的控制范围内。一种简单的方法是根据数据对最终解决方案的价值将数据需求进行分类,例如绝对必须的、希望有的和可选的(帕累托原则)。这将帮助我们专注于绝对必须的数据,而不会被可选项目分散注意力或拖延。此外,考虑数据获取的成本、时间和努力方面将帮助我们更好地优先排序我们的数据规划工作。
分析
据说工匠使用仅 20%的工具完成 80%的工作。对我们数据科学家来说也是如此。我们往往在工作中使用少量的分析和模型(帕累托原则),而其他技术则使用得较少。典型的探索分析例子包括变量分布、异常检测、缺失值填补、相关矩阵等。建模阶段的例子包括 k 折交叉验证、实际与预测图、误分类表、超参数调优分析等。构建小型自动化(如库、代码片段、可执行文件、用户界面)来使用/访问/实施这些分析可以显著提高分析过程的效率。
建模
在建模阶段,我们通常能在过程中较早地得出一个合理的工作模型。此时大部分的准确度提升已经完成(帕累托原则)。其余的过程主要是对模型进行微调,以争取逐步的准确度提升。有时,这些逐步的准确度提升是使解决方案对业务可行所必需的。在其他情况下,模型的微调对最终的洞察/提案贡献不大。作为数据科学家,我们需要对这些情况保持意识,以便知道在哪里适当划定界限。
商业沟通
当今的数据科学生态系统是高度多学科的。团队包括业务分析师、机器学习科学家、大数据工程师、软件开发人员和多个业务利益相关者。这类团队成功的关键驱动因素之一是沟通。作为一个努力工作的人,你可能会被诱惑去传达所有的工作——挑战、分析、模型、洞察等。然而,在信息过载的今天,这种方法不会有帮助。我们需要意识到有“有用的很多,但至关重要的少数”(帕累托原则),并利用这一理解简化我们沟通的信息量。同样,我们展示和强调的内容也需要根据目标受众(业务利益相关者与数据科学家)进行定制。
帕累托原则是我们工具箱中的一个强大工具。使用得当,它可以帮助我们理顺并优化我们的活动。
简介: Pradeep Gulipalli 是 Tiger Analytics 的联合创始人,目前负责印度的团队。在过去的十年里,他与财富 100 强公司和初创公司客户合作,以推动他们组织中的科学决策。他帮助设计了复杂商业环境的分析路线图,并架构了众多数据科学解决方案框架,包括定价、预测、异常检测、个性化、优化、行为模拟。
相关:
-
关于数据科学职位申请的那些你不知道的事
-
如何识别适合你团队的数据科学家?
-
为意外情况做准备
更多相关话题
全栈数据科学的路径
原文:
www.kdnuggets.com/2021/09/path-full-stack-data-science.html
评论
作者:Jawwad Shadman Siddique,德州理工大学研究生。
全栈数据科学已经成为计算机科学领域最热门的行业之一。从传统数学到数据工程等高级概念,这个行业要求广泛的知识和专业技能。它的需求在在线资源、书籍和教程中呈指数级增长。对初学者来说,这简直是令人不知所措。大多数初学者要么从 Python 课程、机器学习课程或一些基础数学课程开始。但许多人往往不知道从哪里入手。面对如此众多的资源,他们常常在各大平台之间游移,浪费了很多时间。
我们的三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业道路
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织 IT
涉及数据科学的学科领域。
本文的目标 不是列出所需的课程大纲,而是列出在端到端数据科学领域中,每个学科领域的一些突出的在线资源。它将帮助初学者在不浪费宝贵时间的情况下开始他们的数据科学之旅。我尽量将资源按顺序排列。但这可能会根据个人的专业知识和需求有很大差异。本文的重点仅仅是列出一些深入且全面的在线课程和教程,涉及到全栈数据科学的领域。我尽力将列表保持尽可能简短,以帮助初学者开始学习,而无需过多选择。
以下领域的资源
-
数学 — 线性代数、微积分、概率、统计和凸优化
-
Python 编程 — 基础、面向对象的概念、算法、数据结构和数据科学应用
-
R 编程 — 基础、数据科学和网络应用
-
核心数据科学概念— 数据库编程、机器学习、深度学习、自然语言处理、计算机视觉、强化学习、数据可视化、模型部署、大数据
-
C/C++ 编程— 基础、问题解决、面向对象编程概念、算法和数据结构
-
计算机科学基础— 介绍、算法、数据结构、离散数学、操作系统、计算机体系结构、数据库概念、Git 和 GitHub
数学
线性代数
-
讲师:Grant Sanderson / 频道:3Blue1Brown
课程: 线性代数的精髓
-
讲师:Prof. Gilbert Strang / MIT OpenCourseWare
-
讲师:Kaare Brandt Petersen & Michael Syskind Pedersen
书籍: 矩阵代数
微积分
-
讲师:Grant Sanderson / 频道:3Blue1Brown
课程: 微积分的精髓
-
讲师:Prof. David Jerison / MIT OpenCourseWare
-
讲师:Prof. Denis Auroux / MIT OpenCourseWare
课程: 多变量微积分 / YouTube
概率与统计
-
讲师:Khan Academy
课程: 概率论
-
讲师:Khan Academy
课程: 统计学
-
讲师:Joshua Starmer
课程: 统计学基础
-
讲师:Prof. John Tsitsiklis / MIT OpenCourseWare
课程: 概率方法
-
讲师:Allen B. Downey
书籍: 统计思维
注:在完成 Python 和统计学基础后使用此书
凸优化(高级概念)
-
讲师:Prof. Stephen Boyd / Stanford
课程: 凸优化简介
Python 编程
Python 基础
算法与面向对象编程(OOP)与 Python
Python 数据科学
-
Python 数据科学手册:书籍
-
数据科学与 Python:freecodecamp 课程
-
计算思维与数据科学导论:课程
-
应用数据科学与 Python:课程
R 编程
数据库编程
-
数据库系统基础:书籍
-
完整的数据库设计课程:教程
-
使用 MySQL 的 SQL:课程
-
PostgreSQL:课程
-
PostgreSQL for Everybody:课程
-
使用 Python 的 SQLite:课程
-
流行的数据库:教程
数据可视化
-
Edureka 的 Power BI 完整课程:课程
-
Simplilearn 的 Power BI 完整课程:课程
-
Edureka 的完整 Tableau 课程:课程
-
Simplilearn 的完整 Tableau 课程:课程
-
freecodecamp.org 的 Tableau 速成课程:课程
机器学习
初学者课程
-
教授:Andrew Ng
-
讲师:Krish Naik
-
MIT 的人工智能:课程
使用 Python 的应用机器学习课程
实践机器学习书籍
深度学习
专业课程
-
讲师:Krish Naik
-
讲师:Yann Le’Cun
-
讲师:MIT
使用 Python 和 TensorFlow 的应用深度学习
-
深度学习 A-Z: 实践人工神经网络:课程
-
freecodecamp.org 的 TensorFlow 完整课程:课程
-
AI TensorFlow 开发者专业证书:课程
-
TensorFlow 数据与部署:课程
实践深度学习书籍
自然语言处理
计算机视觉
强化学习
Web 开发
-
Corey Schafer 的 Django 教程: 课程
-
Django for Everybody: 课程
-
Corey Schafer 的 Flask 教程: 课程
-
全栈 Web 开发指南: 教程
-
面向每个人的网页设计: 课程
-
面向每个人的 Web 应用程序: 课程
Git & Github
-
freecodecamp.org 的速成课程: 课程
-
Traversy Media 的速成课程: 课程
-
Edureka 的完整课程: 课程
-
Mosh 的 Git 入门教程: 课程
-
Amigoscode 的 Git 和 Github 教程: 课程
AWS
-
AWS 认证: 教程
-
AWS 入门教程: 课程
-
AWS 基础知识入门: 课程
-
AWS 认证云计算从业者培训: 课程
-
AWS 认证解决方案架构师 — 助理培训: 课程
-
AWS 认证开发者 — 助理培训: 课程
-
AWS SysOps 管理员-助理培训: 课程
模型部署
-
教师: Krish Naik
-
教师: Daniel Bourke
-
实时端到端模型部署: 教程
-
使用 Amazon Sagemaker 进行模型部署:教程
-
使用 Azure 进行模型部署:教程
大数据
-
CrashCourse 的大数据导论:教程
-
Edureka 的大数据导论:教程
-
Simplilearn 的大数据介绍:教程
-
Edureka 的大数据与 Hadoop:课程
-
Edureka 的 Apache Spark:课程
C/C++编程与问题解决
教程与课程
-
Mike 的完整 C 教程:课程
-
Caleb Curry 的完整 C++教程:课程
-
Suldina Nurak 的完整 C++教程:课程
-
C++面向对象编程概念:课程
-
使用 C++进行问题解决与面向对象编程:课程
-
C++中的指针:课程
-
使用 C++的 STL:课程
-
使用 C/C++的数据结构:课程
书籍
算法与数据结构
计算机科学基础
-
计算机科学的缺失学期:课程
-
CMU 的计算机系统架构:课程
-
MIT 的计算机系统架构: 课程
-
Neso Academy 的操作系统课程: 课程
-
UC Berkeley 的操作系统: 课程
-
软件工程基础: 课程
我尝试提供一些具体的资源(课程/教程/书籍),这些资源深入且在网络上非常知名,对大量数据科学学习者非常有帮助。我尽量提供了我熟悉的资源。毋庸置疑,还有许多优秀的资源被遗漏。因此,这份列表不应被视为专家指南。相反,它挑选了一些突出的课程,以便让初学者的学习旅程更加轻松。我将最后提供一些最受欢迎的 YouTube 频道,这些频道有大量的学习材料和关于该主题的很好的指导。
顶级 YouTube 数据科学频道
原文. 经许可转载。
相关:
更多相关内容
学习人工智能的路径
原文:
www.kdnuggets.com/2017/05/path-learning-artificial-intelligence.html
评论
由 Kirill Eremenko 和 Hadelin de Ponteves 提供,Super Data Science。
学习人工智能的路径通常被复杂的数学和技术话题所压倒。但不必如此……我们想通过创建一个直观而令人兴奋的课程来打破这种趋势,该课程将引导你进入蓬勃发展的人工智能世界,同时享受乐趣:
我们的前三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织在 IT 领域
点击这里加入人工智能在线课程 [链接: bit.ly/2BuildAI
]
就在此刻,我们正在进行一个 Kickstarter 项目,以创建一个革命性的人工智能培训项目。在这篇博客中,我们将描述课程结构背后的秘密,以便即使你还没有准备好加入培训——你也可以在自己的学习计划中复制这些步骤。
图. 人工智能、机器学习与深度学习
在这次人工智能之旅中,我们将实现四个层级的人工智能,从简单到高级:
- 人工智能等级 1: Q 学习
最简单的 AI 算法之一是 Q 学习。简单但强大,我们将使用它来训练像 R2D2 这样的机器人找到迷宫的出口。这将是我们在课程中制作的第一个 AI,只是为了热身,同时享受乐趣。
- 人工智能等级 2 – 深度 Q 学习
然后我们将通过研究深度 Q 学习(DQN)将事情提升到下一个层级。通过 DQN,我们将能够解决一个更具挑战性的问题:征服流行的游戏《打砖块》!为了完成这个挑战,我们的输入将是编码值的向量,所有这些都描述了环境的一个状态,即:球的位置坐标、球的运动方向向量坐标,以及每个砖块是否存在的二进制值,其中 1 表示砖块仍在,0 表示砖块已不存在。
图. 人工智能玩《打砖块》
深度 Q 学习的理念是将 Q 学习算法与神经网络结合起来。我们的输入是编码向量。它们进入一个神经网络,输出将是要执行的动作。
这已经是一个更高级的人工智能,但我们可以更进一步:如果输入不是一些编码向量,而是游戏中我们看到的实际图像呢?这就引出了 AI 级别
- AI 第 3 级 – 深度卷积 Q 学习
开始吧!通过这个,我们将构建一个非常接近人类玩游戏的人工智能。由于编码向量无法保留图像的空间结构,这不是描述状态的最佳形式。空间结构确实很重要,因为它为我们提供了更多的信息来预测下一个状态,而预测下一个状态对于人工智能了解正确的下一步至关重要。因此,我们需要保留空间结构,为此,我们的输入必须是 3D 图像(2D 的像素数组加上一个额外的颜色维度)。在这种情况下,输入就是屏幕上的图像,与人类玩游戏时看到的完全相同。按照这个类比,人工智能的行为像人类:它观察游戏时屏幕的输入图像,输入图像进入一个卷积神经网络(相当于人类的大脑),该网络将检测每张图像中的状态,然后通过 Q 学习预测下一个状态,人工智能/人类将预测最佳动作。而这个动作再次是神经网络的输出。
我们将构建这个高度先进的人工智能,挑战在非常受欢迎的游戏《毁灭战士》中通过一个关卡。
- AI 第 4 级 – 异步演员-评论员代理(A3C)
如果环境中有多个代理需要训练呢?在这种情况下,最佳的人工智能是 A3C,这是人工智能领域的热门话题,由 Google DeepMind 去年推出。我们希望在同一地图上实现多个自动驾驶汽车的 AI。我们将训练汽车避免相互碰撞并避开障碍物。这将是结束这段 AI 之旅的一个非常激动人心的挑战!
加入我们
这是我们在全新人工智能课程中将采用的方法。如果你想为自己的学习计划构建类似的内容,可以随意复制……但与他人一起学习会更加令人兴奋。
我们的 Kickstarter 项目已经得到了超过 1,500 名学生的支持。距离截止日期仅剩几天——快来加入我们,获取课程及大量早鸟奖励!
了解如何构建人工智能 [链接: bit.ly/2BuildAI
]
人工智能是一项每个人都应该可以掌握的技能,这不仅是学习 AI 的机会,也是站在下一个工业革命前沿的机会。
此致敬礼,
Hadelin de Ponteves & Kirill Eremenko
注:图片 #1 和 #3 的版权归 SuperDataScience Pty Ltd 所有。KDNuggets 在本博客及任何相关宣传媒体中的使用已获批准。
作者简介: Kirill Eremenko 是一位多语言企业家,在教育领域有 3 年的经验,在数据科学领域有 7 年的经验。而**Hadelin de Ponteves** 是 Google 的数据工程师。
相关:
-
什么是人工智能?智能的组成成分
-
人工智能与深度学习的进展:DeepMind、Facebook 和 OpenAI
-
人工智能简史
更多相关主题
Fidelity 如何找到量体裁衣的独角兽数据科学家
原文:
www.kdnuggets.com/2020/02/paw-find-tailor-fit-unicorn-data-scientist.html
赞助帖子。
![]() |
---|
| Fidelity Investments 的 Victor Lo 将在 PAW Financial 2020**金融服务预测分析世界**上发表主题演讲,会议将于 2020 年 5 月 31 日至 6 月 4 日在拉斯维加斯举行,荣幸地邀请到 Fidelity Investments 人工智能和数据科学卓越中心领导者 Victor Lo:题目为:“如何为金融服务找到量体裁衣的‘独角兽’数据科学家”。
我们的前 3 大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业道路。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能!
3. 谷歌 IT 支持专业证书 - 支持你组织的 IT 需求
使用代码 KDNUGGETS 获取预测分析世界门票 15% 的折扣。
如何为金融服务找到量体裁衣的“独角兽”数据科学家随着数据科学家背景和经验的多样化,如何确定你真正需要哪种类型的数据科学家来满足你的业务需求?数据科学家有多少种类型?你可以在哪里找到他们?他们能为金融服务行业提供什么样的分析?Victor Lo 将结合超过 25 年的行业经验以及 20 多年的管理经验,介绍数据科学家的分类框架,并提出这些人才与各种项目类型之间的映射方案。
| Victor Lo AI 和数据科学卓越中心负责人,职场投资富达投资 | Victor S.Y. Lo 是一位经验丰富的大数据、市场营销、风险和金融领域的领导者,拥有超过 25 年的广泛咨询和企业经验,致力于在各种商业领域应用数据驱动的解决方案。他积极从事因果推断,是 Uplift/True-lift 建模的先驱,这是数据科学的一个关键子领域。在学术服务方面,Victor 曾在本特利大学担任访问研究员和企业驻校执行官。他还曾在波士顿运筹学与管理科学学会(INFORMS)分会的指导委员会和两个学术期刊的编辑委员会中服务。他还是国家统计科学研究所(NISS)的选举董事会成员。Victor 获得了运筹学硕士学位和统计学博士学位,并曾在管理科学领域担任博士后研究员。他曾合著了一本研究生级别的计量经济学书籍,并在数据挖掘、市场营销、统计学、分析学和管理科学领域发表了众多文章,目前正在完成一本关于商业中因果推断的研究生级别书籍。 |
金融服务预测分析世界 (拉斯维加斯 2020 年 5 月 31 日至 6 月 4 日 ) 汇聚了强大的演讲者阵容。现在就计划参加这场领先的跨供应商会议,涵盖银行、保险公司、信用卡公司、投资公司及其他金融机构在机器学习部署方面的应用。
PAW 金融 2020 年其他重要演讲
|
| “大海捞针”——缺陷和欺诈检测案例研究 **Richard Lee -**数据科学总监,美国 EOIT 高级分析与人工智能 - 宏利 |
|
Jen Gennai -**负责任创新全球事务负责人 - Google |
|
| 从自动驾驶到欺诈检测——Lyft 如何简化机器学习的部署
Gil Arditi -**产品负责人,机器学习 - Lyft |
早鸟价格截至 2 月 21 日 查看完整议程 | 立即注册 |
| **机器学习周的一部分(前身为 Mega-PAW)——“一个活动五个会议”**PAW Financial 是机器学习周(前身为 Mega-PAW)的一部分——包括五个(5)平行会议,共有八个(8)专题: PAW Business, PAW Financial, PAW Healthcare, PAW Industry 4.0, 和 深度学习世界。
钻石赞助商
铂金赞助商
金牌赞助商
媒体合作伙伴
|
![]() |
---|
会议主办单位: Rising Media 和 Prediction Impact ![]() |
更多相关主题
统计学、因果关系及难以接受的论点:Judea Pearl 辩论 Kevin Gray
原文:
www.kdnuggets.com/2018/06/pearl-gray-statistics-causality-claims-difficult-swallow.html
评论
最近,著名计算机科学家和人工智能研究员Judea Pearl 发布了他与 Dana Mackenzie 共同编著的新书《因果之书:因果关系的新科学》。虽然这本书迅速成为畅销书,但也引起了部分读者的共鸣。
在发布后,市场营销科学家和分析顾问(以及常驻 KDnuggets 的撰稿人)Kevin Gray 撰写了对这本书的评论和反驳,该评论在 KDnuggets 上发表。Pearl 随后回应了 Gray,Gray 又做出了回应,然后 Pearl 再次回应……你懂的。
我们的前 3 大课程推荐
1. Google 网络安全证书 - 加速你的网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的组织的 IT
图片来源:虚假相关
本文包括了从 Kevin 原始回应文章引发的辩论。虽然 KDnuggets 没有表态,我们呈现了这场信息丰富且尊重的辩论,因为我们认为它对我们的读者有价值。我们希望你同意。
读者 Carlos Cinelli 指出,Judea Pearl 回复了 Kevin Gray 的文章,回复内容见下文。
Kevin 预测许多统计学家可能会认为我的观点“奇怪或夸张”是准确的。这正是我在过去 30 年与统计学家进行的众多对话中发现的。然而,如果你更仔细地审视我的观点,你会发现它们并不像初看时那样异想天开或草率。
当然,许多统计学家会挠头问:“这不正是我们多年来一直在做的事情,只是名字不同或者根本没有名字吗?”这就是我观点的本质。以非正式的方式,在不同的名字下进行,同时避免用统一的符号进行数学化处理,对因果推断的进展产生了毁灭性的影响,无论是在统计学中,还是在许多依赖统计学指导的学科中。最好的证据是,直到今天,只有一小部分实践中的统计学家能够解决《为何之书》中提出的因果玩具问题。
例如:
选择足够的协变量来控制混杂因素
明确假设以便能够一致地估计因果效应
查找这些假设是否可被检验
估计因果的原因(而不是因果的效果)
逐渐增多。
《为何之书》的每一章都带来了一系列统计学家深切关注的问题,他们多年来一直在努力解决这些问题,尽管用错了名字(例如 ANOVA 或 MANOVA)“或者根本没有名字”。结果是许多深层次的问题却没有解决方案。
在这一点上,一个有效的问题是,是什么让我如此大胆地断言在 1980 年代之前,没有统计学家(实际上没有科学家)能够正确解决这些玩具问题。怎么能如此确信没有某位聪明的统计学家或哲学家找到解决辛普森悖论的正确方法或区分直接效应与间接效应的正确方式?答案很简单:我们可以从科学家在 20 世纪使用的方程式的语法中看出这一点。要正确定义因果问题,更不用说解决它们,需要一种超出概率论语言的词汇。这意味着所有使用联合密度函数、相关分析、列联表、ANOVA 等的聪明和杰出的统计学家,如果没有用图示或反事实符号丰富这些工具,都是在徒劳地工作——与问题正交——如果没有提问的词汇,就无法回答问题。(《为何之书》,第 10 页)
正是这种符号化的试金石让我有信心支持《为何之书》中您所引述的每一个声明。此外,如果您仔细观察这一试金石,您会发现它不仅是符号化的,还有概念上的和实际的。例如,费舍尔使用 ANOVA 来估计直接效应的错误仍然困扰着当今的中介分析师。其他许多例子在《为何之书》中有所描述,我希望您认真考虑每一个例子传达的教训。
是的,你的许多朋友和同事会挠头说:“嗯……这不是我们多年来一直在做的事情吗,虽然可能用不同的名字,或者根本没有名字?”我希望你在阅读《为什么的书》后,能够抓住一些让人挠头的问题,并告诉他们:“嘿,在你进一步挠头之前,你能解决《为什么的书》中的任何一个玩具问题吗?”你会对结果感到惊讶——我确实是!
对我来说,解决问题是理解的测试,而不是挠头。这就是我写这本书的原因。
Kevin Gray 随后注意到了Judea Pearl 的回复,并在下面提供了跟进的回应。
我很感激 Judea Pearl 花时间阅读并回应我的博客文章。我也感到受宠若惊,因为我多年来一直是 Pearl 的仰慕者和追随者。由于某种原因——这种情况以前发生过——我在使用 Disqus 时遇到了困难,并请 Matt Mayo 代表我发布这篇(确实写得很仓促的)回应。
简而言之,我认为 Pearl 对我帖子评论的实质性不强,因为他基本上重复了我在文章中质疑的观点。
他开篇评论的建议是我对他的观点只了解皮毛。显然,我不觉得是这样。此外,文章中我没有将 Pearl 的观点描述为异想天开或轻率。我非常认真对待这些观点,否则我不会费心写博客文章。
像许多其他统计学家,包括学术界人士,我觉得他对统计学家的描述不准确,而且他对谨慎的处理方法过于简单。这就是我的观点的本质(正如我所说,我并不孤单)。对于这些差异的许多可能原因,我在这里不会猜测为什么。???
“你没有词汇来提问就无法回答问题”这确实是对的。实践中的统计学家——与专注于理论的学术人员相对——与他们的客户紧密合作,而这些客户是特定领域的专家。该领域的语言在很大程度上定义了特定语境中使用的因果关系语言。这就是为什么没有普遍的因果框架,以及为什么心理学、医疗保健和经济学等领域的统计学家有不同的方法,并且经常使用不同的语言和数学。我自己结合了这三者以及 Pearl 的观点。在我 30 多年经验中,每种方法的实用性都是个案情况。此外,还有一些临时方法(有些值得怀疑)。
他声称“……即使到今天,只有一小部分从业统计学家能解决《为什么的书》中提出的因果玩具问题”,但没有提供证据。这些问题并不难,声明并不是证据。此外,他在《为什么的书》的每一章中给出的统计学失败的例子,通常并不令人信服,且这些例子本身就是文章写作的动机之一。
西蒙斯悖论的各种形式是几代研究人员和统计学家被训练去警惕的内容。我们确实如此。它并没有什么神秘之处。(关于西蒙斯的辩论,发表于 2014 年的《美国统计学家》,我在文章中提供了链接,希望对不是 ASA 会员的读者可见。)
调解,常常与调节混淆,可能是一个难题。简单的路径图或包含少量变量的 DAG 往往是不够的,并且可能严重误导我们。在统计学家的实际工作中,通常存在大量潜在的相关变量,包括那些我们无法观察到的变量。还有一些关键变量由于各种原因没有包含在我们可以使用的数据中,并且无法获得。测量误差可能是相当大的——这并不罕见——而且不同类别的主体(例如,消费者)可能存在不同的因果机制。这些类别通常是未观察到的,对我们来说是未知的。
我应该明确表示,我非常赞赏 Pearl 将因果分析引入公众视野的努力。我会建议统计学家阅读他的著作,但也要咨询(就像我做的那样)其他资深从业者和学者对他的著作和因果分析的看法。因果关系有许多种方法来处理,Pearl 的方法只是其中之一。正如 Pearl 自己也意识到的那样,直到今天,哲学家们对因果关系是什么仍然存在分歧,因此在我看来,建议他找到了答案是不现实的。真正的统计学家知道寻找“万能钥匙”是不切实际的。
Pearl 随后回应了这一回复:
亲爱的 Kevin,
我并不是在暗示你只是对我的工作有肤浅的了解。实际上,你对我的了解比我们部门的大多数统计学家要深得多,我非常感激你花时间评论《为什么的书》。你向我展示了其他有类似视角的读者会如何看待这本书,以及他们会发现哪些观点没有依据或难以接受。因此,让我们直接进入这两个要点(即,没有依据和难以接受)并进行深入的探讨。
你说我没有提供支持我说法的证据:“即使在今天,只有一小部分实践中的统计学家能解决《为何之书》中提出的任何因果玩具问题。”我相信我确实提供了这样的证据,在每一章中,而这一说法是有效的,只要我们对“解决”的含义达成一致。
让我们以你提到的第一个例子——Simpson 悖论为例,它在《为何之书》第六章中处理,并且每个热血的统计学家都很熟悉。我用这些话描述了这个悖论:“它困扰了统计学家超过六十年——直到今天仍然令人困扰”(第 201 页)。正如你正确地注意到的,这是一种委婉的说法:“即使在今天,大多数统计学家无法解决 Simpson 悖论”,这一事实我坚信是正确的。
你觉得这个说法很难接受,因为:“几代研究人员和统计学家已经被训练去留意它[Simpson 悖论]”,这一观察似乎与我的说法相矛盾。但我恳请你注意,“被训练去留意它”并不能使研究人员能够“解决它”,即在数据中出现悖论时决定该怎么做。
这种区别在 2014 年《美国统计学家》上的辩论中表现得非常明显,而这是你我引用的期刊。然而,尽管你将辩论中的分歧视为统计学家解决 Simpson 悖论的多种方式的证据,我却认为这是他们甚至没有接近正确答案的证据。换句话说,其他参与者没有提出一种方法来决定是聚合数据还是分离数据能正确回答“治疗是否有帮助或有害”的问题。
请特别注意 Keli Liu 和 Xiao-Li Meng 的文章,他们都来自哈佛大学统计系(Xiao-Li 是资深教授和系主任),所以不能被指责扭曲 2014 年统计知识的现状。请仔细阅读他们的论文,并自行判断它是否能帮助你决定在辩论中提供的任何示例中,治疗是否有效。
绝对不会!!我怎么知道?我在听他们的结论:
- 他们否认与因果关系的任何关联(第 18 页),并且
- 他们最终得出了错误的结论。引用:“当 Simpson 悖论出现时,较少的条件设定最有可能导致严重偏差。”(第 17 页)Simpson 本人举了一个例子,说明条件设定会导致更多偏差,而不是更少。
我不责怪 Liu 和 Meng 在这一点上的错误,这不完全是他们的错(Rosenbaum 和 Rubin 也犯了同样的错误)。解决 Simpson 困境的正确方法依赖于后门准则,而没有 DAG 几乎不可能阐明这一点。正如你可能知道的,DAG 在哈佛大学周围 5 英里禁飞区内是禁止进入的。
所以,我们来到了这里。大多数统计学家认为每个人都知道如何“留意”辛普森悖论,而那些寻求“我们应该治疗还是不治疗?”答案的人意识到,“留意”远非“解决”。此外,他们还意识到,没有走出统计分析的舒适区,进入因果关系和图形模型的禁忌之地,就没有解决方案。
我同意你的一点——你对因果革命的不切实际的警告。引用:“直到今天,哲学家们对于因果关系是什么存在分歧,因此,建议他找到了答案是不切实际的。”确实,不切实际的是,特别是一个半外部者,找到了银弹。这很难接受。这也是我如此兴奋于因果革命的原因,也是我写这本书的原因。这本书并没有为所有存在的因果问题提供银弹,但它为一类问题提供了解决方案,而这些问题几个世纪以来的统计学家和哲学家尝试过但未能破解。我同意这不切实际,但它发生了。发生的原因不是因为我更聪明,而是因为我认真对待了 Sewall Wright 的想法,并尽可能将其推导到逻辑结论。
我冒着相当大的风险,显得自负地称这一发展为因果革命。我认为这是必要的。现在我请你花几分钟时间,自己判断证据是否足以证明这样的冒险性描述是合理的。
如果我们能提醒那些深度投入统计语言的统计学家,21 世纪甚至可能出现范式转变,那就太好了,并且几个世纪的无效争论并不会使这样的转变变得不可能。
你对范式转变的必要性表示怀疑和不信是对的,任何负责任的科学家都会这样做。下一步是让社区进行探索:
- 多少统计学家能真正回答辛普森的问题,以及
- 如何让那个数字达到 90%。
我相信《因果之书》已经把那个数字翻倍了,这算是一种进展。实际上,这是我在过去三十年里通过与我们时代的主要统计学家的艰苦讨论无法做到的事情。
这是一些进展,让我们继续,
Judea
最新的消息是,Gray 在发布时向我们提供了以下内容。
再次感谢你抽出时间回复我的博客文章和早期的回复。也感谢你的好评,特别是考虑到 UCLA 在 SEM 和 AI 方面处于前沿。那里没有禁飞区。
我觉得我们是在为同一个问题而战,尽管方式不同、角度不同、往往对抗的“敌人”也不同。我告诉别人我对因果关系情有独钟,但不知其所以然。??? 我从应用市场研究员和“数据科学家”(这是我不太舒服且自己也不完全理解的术语)的角度来看待这场战斗。为了让你了解我“来自何处”,让我重现一下我刚刚在 LinkedIn 上发布的一条帖子:
关于因果关系的更多想法…
了解“谁、什么、何时、何地、如何、多久一次”等信息在市场营销和市场研究中至关重要。预测分析在许多情况下和许多组织中也很有用。
然而,了解“为什么”也往往至关重要,这有助于我们更好地理解和预测“谁、什么、何时、何地、如何、多久一次”等问题。
然而,因果关系的分析非常具有挑战性,有些人会说几乎是不可能的。
传统观念认为,最佳的方法是通过随机实验。虽然我同意这一点,但在许多情况下,实验是不可行或不道德的。实验也可能出现错误,或过于人为,以至于无法推广到真实世界条件中。它们也可能无法复制。它们不是魔法。
在许多情况下,非实验性研究可能是我们唯一的选择。但这并不意味着数据挖掘或其他不靠谱的研究方式。进行非实验性研究有更好和更差的方法。这就是问题所在——这并不容易做到正确,错误可能非常昂贵。
我觉得最后一点最为重要。一些人似乎误解了你的著作,认为理论和判断无关紧要,计算机能够自动找到“最佳模型”。这是现代形式的“散弹枪经验主义”…这种情况因点选和拖拽的软件而加剧,这些软件可以说比微软 Word 更易于使用。散弹枪(有时还有 DAG)在孩子手中…
在大数据时代,我这种角色有时需要确定成千上万变量的相对重要性,有时是针对每个消费者单独进行。一般认为这不是因果分析。在另一极端,基于少数几个焦点小组有时会得出广泛的因果推论。同样,这也经常不被认为是因果研究。
关于辛普森悖论,我会让你继续与学术同行争论。我会根据手头的数据和研究目标逐案处理这个问题。显然,一些应该知道更好的人在这方面犯了错误。要明确的是,我指的是实际解决方案,而不是理论数学解决方案。虽然我与孟教授并不熟识,但我看过他在 YouTube 上的几次讲座,并阅读过他的一些论文。他在讨论常见的大数据谬误方面有很多见解。
在应用领域,我确实注意到一些拥有出色数学和编程技能的人,尽管如此,他们在使用统计学解决现实世界问题方面却不尽如人意。这不是一个原创的观察。也许 ASA、RSS 和其他专业组织会对定期技能评估感兴趣,这完全是自愿的,旨在专业发展?
我设想一个在线测验,包含少量应用统计学问题——不是数学问题,除非是某些重要领域。这将是保密的。作为激励,参与者在完成测试后将看到正确答案。随着时间的推移,参与者将能够了解他们在哪些方面表现强劲,哪些方面需要改进。我们还将拥有一些实证证据(即使不是来自真正具有代表性的样本)来了解实践统计学家和研究人员在关键领域的技能水平,这将是可以发表的。我希望你能贡献一些问题!
对于任何领域具有良好统计学背景的统计学家和研究人员,我认为《因果关系》是必读书目。我也觉得《为什么的书》有价值,正如我所提到的。你当然会熟悉概率图模型(Koller 和 Friedman),我了解到 Fenton 教授和 Neil 教授将出版《风险评估与决策分析》的新版本。由于你为第一版撰写了前言,你显然也认为这本优秀的书值得阅读。
再次感谢你在漫长而卓越的职业生涯中对许多领域所做的诸多贡献。不幸的是,对我来说,现在是时候戴上安全帽,回到工作中了。
此致,
凯文
相关:
-
为什么的书
-
为什么的书:因果关系的新科学
-
更好的统计学 101
更多相关话题
《使用 RetinaNet 进行航拍图像中的行人检测》
原文:
www.kdnuggets.com/2019/03/pedestrian-detection-aerial-images-retinanet.html
评论
由 Priyanka Kochhar,深度学习顾问
介绍
航拍图像中的物体检测是一个具有挑战性且有趣的问题。随着无人机成本的降低,生成的航拍数据量激增。拥有能够从航拍数据中提取有价值信息的模型将非常有用。RetinaNet 是最著名的单阶段检测器,在这篇博客中,我想测试它在来自 斯坦福无人机数据集 的行人和骑车人的航拍图像上的表现。见下图。这是一个具有挑战性的问题,因为大多数物体宽度只有几个像素,有些物体被遮挡,而阴影中的物体更难检测。我阅读了几篇关于航拍图像中物体检测的博客,特别是在行人检测方面的链接较少,这尤其具有挑战性。
斯坦福无人机数据集中的航拍图像 — 行人用粉色标记,骑车人用红色标记
我们的前三个课程推荐
1. 谷歌网络安全证书 - 快速入门网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织 IT 部门
RetinaNet
RetinaNet 是一种单阶段检测器,使用特征金字塔网络 (FPN) 和焦点损失进行训练。特征金字塔网络 是一种用于多尺度物体检测的结构,介绍于这篇 论文 中。它通过自上而下的路径和横向连接将低分辨率、语义强的特征与高分辨率、语义弱的特征结合在一起。最终结果是,它在网络的多个层次上生成不同尺度的特征图,这有助于分类器和回归器网络。
Focal Loss 旨在解决单阶段目标检测问题中的不平衡问题,在这种问题中,背景类别的数量非常大,而前景类别则很少。这导致训练效率低下,因为大多数位置都是容易的负例,不提供有用的信号,而这些大量的负例会淹没训练并降低模型性能。Focal Loss 基于交叉熵损失,如下所示,通过调整 gamma 参数,我们可以减少来自已分类示例的损失贡献。
Focal Loss 解释
在这个博客中,我想谈谈如何在 Keras 上训练一个 RetinaNet 模型。我没有充分阐述 RetinaNet 背后的理论。我使用了这个链接来了解该模型,并强烈推荐它。我的第一个训练模型在检测目标方面表现很好,如下面的视频所示。我还在我的Github 链接上开源了代码。
Retina Net 在人和骑车人的航空图像上的效果
斯坦福无人机数据集
斯坦福无人机数据集是一个由无人机在斯坦福校园上空收集的大量航空图像数据集。该数据集非常适合用于目标检测和跟踪问题。它包含约 60 个航空视频。每个视频都有 6 个类别的边界框坐标——“行人”、“骑车人”、“滑板车手”、“推车”、“汽车”和“公交车”。该数据集在人和骑车人方面非常丰富,这两个类别覆盖了约 85%-95%的标注。
在斯坦福无人机数据集上训练 RetinaNet
为了训练 Retina Net,我使用了Keras 中的这个实现。它文档齐全且没有错误。非常感谢 Fizyr 开源他们的实现!
我遵循的主要步骤是:
-
从庞大的斯坦福无人机数据集中选择样本图像以构建模型。我取了大约 2200 张训练图像,带有 30,000+个标注,并保留了大约 1000 张图像用于验证。我已经将我的图像数据集上传到 Google Drive 这里,供有兴趣跳过这一步的人使用。
-
生成 Retina Net 所需格式的标注。Retina Net 要求所有标注都符合该格式。
path/to/image.jpg,x1,y1,x2,y2,class_name
我将斯坦福标注转换为这种格式,我的训练和验证标注已上传到我的Github。
- 调整锚点尺寸:Retina Net 的默认锚点尺寸为 32、64、128、256、512。这些锚点尺寸适用于大多数物体,但由于我们处理的是空中图像,一些物体可能小于 32。这些库提供了一个方便的工具来检查现有锚点是否足够。下图中绿色的注释被现有的锚点覆盖,红色的注释被忽略。如图所示,相当一部分注释对于最小的锚点尺寸来说仍然太小。
使用默认锚点的 Retina Net
因此,我调整了锚点,去掉了最大的 512 并添加了一个大小为 16 的小锚点。这带来了明显的改进,如下所示:
添加一个小锚点后
- 有了这些准备,我们已经可以开始训练了。我保留了大部分其他默认参数,包括 Resnet50 主干,并开始了训练:
keras_retinanet/bin/train.py --weights
snapshots/resnet50_coco_best_v2.1.0.h5 --config config.ini
csv train_annotations.csv labels.csv --val-annotations
val_annotations.csv
这里的权重是 COCO 权重,可以用于启动训练。训练和验证的注释是输入数据,config.ini 中有更新后的锚点尺寸。所有文件也在我的 Github 仓库 中。
就这些!模型训练速度较慢,我整晚都在训练。我通过检查测试集上的 平均精度 (MAP) 来测试训练模型的准确性。如下所示,第一个训练模型的 MAP 达到了 0.63,表现非常好。尤其在汽车和公交车类别上表现优异,因为这些类别在空中比较容易识别。Biker 类的 MAP 较低,因为它经常被行人混淆。我目前正在进一步提高 Biker 类的准确性。
Biker: 0.4862
Car:0.9363
Bus: 0.7892
Pedestrian: 0.7059
Weighted: 0.6376
结论
Retina Net 是一个强大的模型,使用了特征金字塔网络。它能够在一个非常具有挑战性的数据集上进行空中物体检测,该数据集中的物体尺寸非常小。我在半天的工作时间内训练了一个 Retina Net。第一个版本的训练模型性能相当不错。我仍在探索如何进一步调整 Retina Net 架构,以提高空中检测的准确性。有关内容将在我的下一篇博客中介绍。
希望你喜欢这篇博客,也尝试自己训练模型。
我有自己的深度学习咨询公司,喜欢处理有趣的问题。我帮助了许多初创公司部署创新的 AI 解决方案。请访问我们的 网站 了解更多。
你也可以查看我的其他文章: deeplearninganalytics.org/blog
如果你有一个可以合作的项目,请通过我的网站或邮件 [email protected] 联系我。
参考文献
个人简介: Priyanka Kochhar 已有 10 年以上的数据科学经验。她现在拥有自己的深度学习咨询公司,并热衷于解决有趣的问题。她曾帮助多家初创公司部署创新的 AI 解决方案。如果你有一个可以合作的项目,请通过 [email protected] 联系她。
原创。经许可转载。
相关:
-
使用深度学习进行人员跟踪
-
Keras 深度学习入门
-
Keras 四步工作流程