超越朱庇特笔记本
作者照片
对于许多数据科学家来说,笔记本是他们学习编写代码的唯一方式。它设置快速,易于运行,我们不需要真正了解它的本质。
尽管 Jupyter Notebook 有众所周知的默认设置,但实际上没有更好的 Python 工具来进行探索性分析和快速测试。
尽管如此,当面临更多现实问题时,在更大的团队中协作或保持可再现性时,仅使用笔记本完成每项任务是非常有限的。
重点是,如果你的大部分工作都依赖于 Jupyter Notebook,那么你很可能缺少了一些东西。
从实验到生产
数据科学和制药行业有很大的相似性。
我们今天在市场上能找到的任何药物都是由一个或多个科学家发现、研究的。他们不得不尝试新的化学组合来找到对抗相应疾病的分子。第一步生活在他们的实验室里。
数据科学也是如此:你面对一个问题,在笔记本上尝试不同的解决方案,以找到正确的解决方案。
当药物解决方案通过实验室测试时,它在到达您的护理架之前就进入了一个完全不同的世界。为了进行大规模生产,制药公司需要在生产工厂、安全和所有必要的健全检查中投入大量资产。
回到我们的世界,我们可以将这些生产资产视为大胡子们:技术上更接近真正最终产品的数据工程师或软件工程师。他们不使用 Jupyter 笔记本电脑,因为它不是为这类东西而设计的,而且他们比你有更多的限制来使解决方案适应现实世界的应用和基础设施。
什么是生产?
我们将直接在这里,而将有一个简单的文章写这一点。
生产是一种开发状态,或者是一种到达真实世界的运行中的应用程序,它涉及到人们和他们的决策。因此,服务于这种环境的底层代码和基础设施必须处于完美的控制之下,以确保最终用户不会停机或出错。
最终用户可以是真实的客户,也可以是公司内部根据您的报告、仪表板或算法做出决策的人。事实上,也可能是你:想象一下你正在查询的一个数据库,如果它因为任何原因关闭了,你将无法工作。
为了满足这样一个环境的要求,代码必须以这样一种方式设计,当错误发生时,它必须易于发现和解决。任何人升级代码都应该没有太多麻烦——这样你就不是一个人在使用你的代码库,当你离开时,公司仍然可以使用你的产品。
要做到这一点,当您的代码是干净的,抛出好的消息错误,并在重要步骤通过时发出通知时,会更容易。遵守编码指南,通过合并请求进行代码审查,并且记住一些设计模式,在您处理生产职责时,这些通常是很好的事情。
当我们在笔记本上写字的时候,这些都是我们想不到的。我们通常按照自己的想法编写、测试、返回、重新测试等等……代码经常不干净,不处理异常,除了你没人会读它,等等……这是完全正常的,我们正在经历。
软件工程的转变
如果没有服务于业务或“可应用的”目标,大多数花哨的机器学习和实验部分就没有那么重要。
如今,我们用来构建强大模型的技术不需要博士学位:例如,几乎每个具有计算机科学背景的开发人员都可以使用 Scikit Learn。
另一方面也是一样的:你不需要成为一个 Linux 高手来理解无服务器应用程序、容器化以及基本的生产需求和资产。
当我们失去奖学金时,我们经常会看到数据堆栈分成三个不同的职位:数据工程师、数据科学家和数据分析师。
但是如果我们能把这些岗位的所有要求都聚集到一个岗位上呢?
这就是“全栈数据科学家”职位的由来。虽然这个词可能有点夸张,但事实上考虑这种可能性有很大的价值。
在这种职位上,你需要用到很多工具。你将不得不学习很多东西。但是随着数据科学现在变得更加成熟,我们可以找到一堆 blogposts、API 和高级框架来轻松地使我们的代码更接近生产和业务需求。
事实上,这个职位已经在那里了,你可能已经具备了这样做的技能:没有太多的团队拥有大数据堆栈,依赖于几个数据科学家、数据工程师和分析师。大多数工作的名称是“数据科学家”,但通常是需要许多不同技能和经验的角色。
大多数从事数据工作的人都有一些计算机科学背景。对于公司来说,允许人们扩展他们的技能比让一个不知道什么是服务器的人来填补 NLP 研究员的职位更有价值…
更接近生产的另一个工作流程
在生产环境中做事的教育严重缺乏。所以很多人会去上课,并对 NumPy/Pandas/Scikit-learn 感到非常舒服,但不知道如何在现实世界中使用它。
虽然数据科学家的工作不一定要达到生产和部署要求,但如果我们提前考虑我们的工作如何在实际解决方案中发挥作用和应用,可能会节省大量时间。
没有完美的补救措施,Jupyter 笔记本仍然是探索和开发您的功能的绝佳工具。但是正如我们之前所说的,你的笔记本——事实上也是如此——并不是终结。
下面是我个人的工作流程:它帮助我记住我的代码必须清晰、一致、可重复。
免责声明:这可能不适合你的工作方式,但我认为值得分享个人工作流程,看看其他人是如何做的。
- 总是从纸上开始
这可能是最重要的一步。如果你没有事先考虑就开始编码,你很可能会走进死胡同。一开始你会觉得失去了时间,但从长远来看,你是赢了。首先获得一个快速但适当的设计,然后开始编码。
2.用无状态的方式写代码
与其用 Jupyter Notebook 来执行我的代码块,我更喜欢用它的老兄弟: IPython 控制台。
这样,我的代码就不会被保存(尽管我可以运行% save magic 命令)。所以我必须保存它,顺便说一下,在适当的 Python 文件中重构它。
此外,它迫使我把我的代码看作一个整体,因此在模块中构建独立的功能。这种代码比 Jupyter 笔记本电池更强大,可以集成到现实世界的应用程序中,并适合更复杂的管道。
3.想想再现性。
在寻找工作解决方案的过程中,我总是问自己,我的同事如何能在他们的电脑上运行我的代码。如果你的同事能独立运行你的解决方案,他们就能更容易地进行实验并发现一些陷阱。这样,我的开发就不那么依赖于我的本地环境,而更接近于生产环境。
我的简单易行的解决方案是总是写一个带有构建和运行说明的自述文件。我倾向于使用 Docker 来避免安装过程中的麻烦(并且更接近生产环境),但是从一个简单的 requirements.txt 开始总比什么都没有好。
不仅对制作,对“未来的你”也很重要。当你写完代码几个月后回头看代码时,你会感谢自己写了文档并添加了很好的安装说明。这会节省你很多时间。
我目前的个人工作流程。
结论
那又怎样?为了一个完全集成的 IDE,我们必须忘记我们欢呼雀跃的笔记本,或者甚至只使用我们的终端工作吗?为了能够从非常原始的数据到用户前端应用程序进行工作,我们必须学习所有的工具吗?
这些问题可能没有直接的答案,一如既往,它将取决于你必须做什么。尽管如此,对其他可能性和工具的好奇会让你成为更好的工匠,并帮助你以不同的方式看待事物。
这不仅仅是你在笔记本上得到的直接结果,而是你在现实世界中设计和集成解决方案的方式,最终取得成功。
“业余爱好者更关注结果而不是过程。你变得越专业,就越不在乎结果——你仍然会得到结果,但那是因为你知道你可以依赖系统和过程。”瑞安假期。
感谢 伊斯阿多 的点评和评论!
熊猫之外:Spark、Dask、Vaex 和其他大数据技术正面交锋
十亿行数据集上的 API 和性能比较。你应该用什么?
彼得罗·马蒂亚在 Unsplash 上拍摄的照片
为什么
面对新的数据科学问题时,首先要问的问题之一是使用哪种技术。有炒作;有标准工具;有尖端的技术、完整的平台和现成的解决方案。
在过去的几年里,我一直在用我能得到的任何技术构建概念和解决方案的证明。如果有新平台,我注册试用;如果任何一个大的云平台发布了一个新的特性,我都会试用;当一项新技术出现时,你可以确信我会浏览一些教程,并在我的数据集上进行尝试。
从这个角度来看,我决定比较数据争论技术,为我的下一个项目选择最适合表格数据探索、清理和争论的技术。我也将此作为一个机会,重新接触我已经几年没有使用的技术,我认为随着时间的推移,这些技术已经变得越来越好。
TL;速度三角形定位法(dead reckoning)
Vaex 作为新的大数据技术正在崛起。但是,如果你已经在使用 PySpark 平台或者有 PySpark 天赋,这仍然是一个不错的选择。
什么
在下文中,我假设您对 Python API 和大数据能力有基本的了解。我选择的数据是出租车亿 行 100GB 数据集。目标是比较这些技术的 API、性能和易用性。我认为熊猫是具有最自然 API 的基线(我承认这是有争议的),因为它是目前最常见的解决方案,但不能处理大数据。
您有两种处理大数据集的传统方法/方式:更强的/分布式计算,其中您将内存与数据的大小相匹配;或者核外解决方案,其中数据仅在必要时才在内存中读取。
成本的差异是巨大的,所以我决定只考虑能在核外工作的解决方案。
竞争对手:
- Dask DataFrame —用于分析的灵活并行计算库。
- PySpark —基于 Spark 的大规模数据处理统一分析引擎。
- 考拉 —阿帕奇 Spark 上的熊猫 API。
- Vaex —一个用于懒惰的核外数据帧的 Python 库。
- turi create——一个相对秘密的机器学习包,其数据帧结构——SF frame,符合条件。
- 数据表——H2O无人驾驶. ai 的中坚力量。一个 dataframe 包,特别强调速度和对单个节点的大数据支持。
一些可敬的提及:
- H2O —标准的内存数据帧非常全面。尽管如此,对于四倍于数据集大小的集群的建议,您需要雄厚的资金来使用它进行探索和开发。
- cuDF(RapidAI)——GPU 数据帧包是一个令人兴奋的概念。对于大数据,你必须使用带有 Dask 的分布式 GPU 来匹配你的数据大小,非常适合无底的口袋。
- Modin —一个无需改变 API 就能缩放熊猫的工具,它在后端使用 Dask 或 Ray 。遗憾的是,目前它只能读取一个拼花文件,而我已经有了一个分块的拼花数据集。由于可能会得到与 Dask DataFrame 类似的结果,此时将所有的 parquet 文件合并为一个文件似乎不值得追求。
- 熊猫有一个分块的特征,但是在探索和动态互动方面,它和其他的熊猫不在一个级别。
- Vaex 确实有一个 GPU 和 numba 支持用于繁重的计算,我没有进行基准测试。
怎么
我在 AWS Sagemaker 上使用了一个每小时 0.95 美元的 ml.c5d.4xlarge 实例,因此复制基准测试很容易。它有 16 个 vCPUs,32 GB 的 RAM 加上 500 个 SSD,这与固态笔记本电脑有着微妙的相似之处。
尽管所有竞争对手都可以读取 CSV 文件,但更优化的方法是使用最适合每种技术的二进制版本。对于 PySpark、考拉、Dask DataFrame,我用的是拼花,而对于 Vaex,我用的是 HDF5 。Turicreates 的帧有一个特殊的压缩二进制版本。Datatable 是针对 jay 格式优化的特例。虽然我无法使用 Datatable 读取 CSV 文件,但不管我的实例大小如何(即使 RAM 中的数据大小增加了一倍以上), Maarten Breddels 开辟了一条使用 HDF5 的道路。当 Datatable 可以可靠地读取多个 CSV、Arrow 或 Parquet 文件时,最好进行更新。
我想指出的是,这个基准测试的开发有点昂贵,因为技术在运行几个小时后会崩溃很多次,尽管只是按原样运行代码不会花掉你的钱。
结果
编码复杂性
仅仅目测一下 API 就能让你对每种技术的代码量和设计模式有所了解。
常用方法(图片由作者提供)
赢家 — Vaex、Dask DataFrame、Turicreate、考拉都有一个很像熊猫的代码(对考拉来说是一模一样的),想做什么都很容易。
失败者 — PySpark 和 Datatable,因为它们有自己的 API 设计,你必须学习和调整。这不是一个困难的任务,但如果你习惯于和熊猫一起工作,这是一个缺点。
特征
优胜者—py spark/考拉和 Dask DataFrame 提供了各种各样的特性和功能。注意,在使用 PySpark 的一些复杂情况下,您可能需要“map-reduce”知识来编写满足您需要的算法。使用 Dask DataFrame,您可能需要知道何时可以或不可以使用无需占用大量内存即可扩展的 sklearn 特性。
虽然 Vaex 和 Turicreate 有一些缺失的功能,但它们涵盖了大多数核心功能。
失败者 — Datatable 似乎有点不成熟,远远落后。
管道
通常,当构建机器学习和后端 API 的解决方案时(与可视化不同),您需要为您的流程编写一个管道。例如,当规范化一个列时,您需要记住平均值和标准偏差来规范化新的观察值。这里简单性、灵活性和编写更少的代码是必不可少的。对于许多数据科学应用程序,这可能是 80%的工作。
赢家 — Vaex。通过其表达式系统,对数据集的任何转换都保存在后台,以便您可以轻松地将其应用于新数据。这使得流水线作业不仅没有痛苦,而且实际上是一项非任务。
亚军是 Dask DataFrame,它有多种预处理工具。然而,您可能需要实现您的转换器,并考虑哪些 sklearn 转换器可以被有效地处理。
接下来是 PySpark。尽管构建管道是 PySpark 最擅长的事情之一,但您需要编写大量代码来实现这一点。阻碍 PySpark 的另一个原因是模型和管道的安装和部署远非易事。你几乎肯定需要(或者更喜欢)使用昂贵的平台,比如 Databricks 和 Domino ,或者严重依赖 Sagemaker 、 Dataproc 或 Azure 的基础设施。
失败者 —考拉、图里 create、数据表
Turicreate 和 Datatable 没有流水线特性可言。
虽然考拉有比 PySpark 更好的 API,但它对创建管道相当不友好。人们可以很容易地将考拉转换成 PySpark 数据帧,但对于流水线操作来说,这很繁琐,并且会带来各种挑战。
懒惰评估
惰性评估是一个仅在需要时运行计算的特性。例如,如果我有两列 A 和 B,那么创建一个新列 A*B 实际上只需要 0 秒钟,而且不占用内存。如果我想查看该列的前几个值,只计算这些值,而不是整个列。
惰性求值使得特性工程和探索的过程更快、更舒适,并防止您在内存中拥有其他大量的列。这在处理大数据集时尤其有价值,因为设计新列、连接表或过滤太大而不适合内存的数据很可能会使您的机器崩溃。
就性能而言,正如您在下一节中看到的,我创建了一个新列,然后计算了它的平均值。Dask DataFrame 比其他技术花费了 10-200 倍的时间,所以我猜这个特性没有得到很好的优化。
赢家 — Vaex、PySpark、考拉、Datatable、Turicreate。
失败者 — Dask DataFrame。
表演
“所有的基准都是错误的,但有些是有用的”——错误引用了乔治·博克斯的话
由于性能可能会有所不同,这篇博客给了我灵感,让我将每个基准测试运行两次。我认为第一次运行更适合批处理作业(更能反映磁盘读取速度),第二次运行更能代表您交互工作时的体验(该方法的实际速度)。
在以下所有图表中:
- 第一轮用蓝色条表示,第二轮用橙色表示。
- Turicreate 具有草图特性,可以同时计算一系列统计数据和估计值;比较好做统计分析。
- 为了更简洁地显示名称,我使用了别名:“dt”代表 Datatable,“tc”代表 Turicreate,“spark”代表 PySpark,“dask”代表 Dask DataFrame。
基本统计
在这里,我测试了基础知识;平均值、标准偏差、数值计数、两列乘积的平均值,以及创建一个惰性列并计算其平均值。
越大越好(图片作者提供)
- 瓦克斯领先。
- 考拉得到的结果与 PySpark 相似,这是有道理的,因为它在后台使用 PySpark。
- Dask DataFrame、Turicreate 和 Datatable 落后于同类产品。
繁重的计算
我对两列进行了均值和标准差分组,然后将其连接到原始数据集并计算行数,这样我就不必在内存中处理整个连接的数据集。我还运行了一个超级复杂的数学表达式来探索冗长的特征工程过程的影响。
越大越好(图片作者提供)
- Vaex 在连接上做得很好,扭曲了图形。
- Datatable 在连接方面做得非常好。这个结果可能与我用 HDF5 包装 Datatable 的方式有关。我没有包括所有的字符串列,这使得 dataframe 占用的空间要小得多。但对我们的黑马来说是第二名。
- Dask DataFrame 和 Turicreate 再次远远落在后面。
- 请注意,当我在新创建的列上运行连接时,除了 Vaex 之外的所有技术都崩溃了。在规划您的特征工程时,请将它考虑在内。
Vaex 稳操胜券,而 Dask DataFrame 和 Turicreate 则越来越落后。
过滤
在这里,我首先过滤数据,并重复上述操作。
不幸的是,考拉、Datatable 和 Turicreate 在这一点上崩溃了。
这些结果很好地表明了数据清理的性能。
越大越好(图片作者提供)
- 似乎 Vaex 在大多数情况下都很流行,尤其是在第二轮。
- Dask DataFrame 因为没有崩溃而获得了荣誉提名,但结果比 Vaex 和 PySpark 慢了大约 5-100 倍。
数字
下面你可以看到列表结果。
- 结果以秒为单位。
- 如果缺少一个结果,技术就会崩溃。
- 小于一秒的值表示延迟评估。
- 互动表。
越小越好(图片作者提供)
赢家—Vaex 明显胜出。
第二名是派斯帕克和考拉。
失败者 — Dask DataFrame,Turicreate,Datatable。
最后几点
- 这段代码让您自己比较 API 和运行基准。所有数据集都可以以正确的二进制格式下载。
- 我在 Dask DataFrame 上遇到了各种各样的问题,为了获得最佳性能,我竭尽全力重启内核,并在一些计算之前重新读取数据。虽然这很不愉快,但我尽了最大努力去获得最好的表现。如果你只是照原样运行笔记本,你可能要等几个小时,或者它可能会崩溃。
- 正如所料,考拉和 PySpark 的结果非常相似,因为它们都在幕后使用 Spark。
- 如前所述,我不能对没有保存在文件中的新创建的列进行测试,因为这会导致 Dask DataFrame 和 PySpark 崩溃。为了解决这个问题,我进一步计算了结果的平均值或计数,强制使用单一值。
- 我没有使用任何字符串列,因为我们侵入了 Datatable,它不能处理字符串列。
- 免责声明——我是 vaex.io 的一员,我个人知道 Turicreate 的创建者之一,Spark 的贡献者,但我试图尽可能不偏不倚,把它作为一个个人的、专业的项目来做。
结论
几年来我一直使用 Turicreate 作为我的首选包,因为它是开源的,在此之前是 PySpark,但我正在切换到 Vaex 。虽然还处于早期阶段,还有点原始,但是状态的表达式和转移允许我编写更少的代码,牺牲了我不常用的功能,而且速度非常快。
看到 PySpark 和考拉的表现,我很惊讶。尽管如此,设置它,在没有现成平台的情况下部署解决方案,管道问题,开发过程中无法解释的错误(和时髦的 PySpark APIs)对我来说太多了。
Dask DataFrame 是一个不幸的挑战。它崩溃了无数次,我历尽艰辛让它在性能上具有竞争力(查看笔记本)。
总而言之,PySpark 和 Dask DataFrame 是基准测试开发期间时间和金钱上最昂贵的。
后果
我很想知道 Datatable 在未来会如何发展。
不要指望 Turicreate 会有很大进展,因为他们目前正专注于深度学习开发。
如果您有任何问题或想法,欢迎在基准测试的 Github repo 中评论/发布。
如果我找到一个合理的方法来优化任何技术,我计划重新运行并更新基准,包括在使用不同实例时的字符串列基准。
更新
- 01/06/20-在古汉的精彩评论后,我将 PySpark 惰性评估添加到基准中,并更新了所有图。除了第一个图中增加了 PySpark lazy 评估结果和最后一个表中数字的小幅变化之外,新图与原始版本没有区别。我还将 PySpark 添加到了懒惰的评估赢家中。
- 16/06/20 — H2O 的数据帧没有 GPU 实现。我编辑了那个评论。
超越预测模型:酒店预订取消背后的因果故事
使用 Python 中的 Microsoft DoWhy 了解酒店预订被取消的原因。
作者图片
为什么 Medium/Linkedin 或其他任何平台会向你推荐这个帖子?更重要的是,是什么激起了你的兴趣,让你点击了这篇文章?是有趣的标题还是旁边很酷的缩略图?也许你只是点击了一下,因为你个人了解我,作为一个好朋友,想通过增加这篇文章的影响范围来帮助我;-)
作为机器学习的一个流行用例,向你推荐这篇文章的平台必须有一些复杂的机器学习或基于深度学习的分类器在内部运行,其作用是预测你是否应该看到这篇文章。该预测模型将仅根据你点击该文章的概率最大化这一事实来形成其决定(因为大多数定向在线广告公司仅在用户点击其内容时付费)。所有这些预测都将使用潜在预测模型已被训练的某些特征的观测值来做出。
现在你已经点击了这篇文章,如果我改变它的标题或缩略图,你还会点击它吗?
我可以继续一个接一个地问这样发人深省的问题,很有可能连你自己都不知道真正的原因!想象在不同情况下可能是真实的场景,被称为反事实。广义地说,因果推理归结为估计反事实。
自然,人们只能观察到事实(比如当文章的标题是给定标题时,你点击/不点击该文章)或反事实(比如当文章的标题不同时,你点击/不点击该文章)。就数据而言,这意味着你可以有一个对应于事实场景或反事实场景的数据点,但不能两者都有。正是因为这个事实,你永远不能要求那个预测模型解释它为什么会点击这篇文章的决定。
图 1:图片来源:朱迪亚·珀尔的《为什么之书》
上图描述了朱迪亚·珀尔教授在《为什么之书》中所说的因果阶梯。
大多数机器学习和复杂的深度学习模型位于这个阶梯的最底层,因为它们仅通过利用不同变量之间的关联或相关性来进行预测。然而,这并没有给我们提供一个回答“如果”的框架和*“为什么”*这些问题由该阶梯的第二和第三梯级描述,并且是 决策 的关键,如果这些模型将用于任何社会关键领域,例如:-
- 如果我接种这种疫苗,我的新冠肺炎病会被治愈吗?如果我现在不注射疫苗。与我接种该疫苗的情况相比,它是否会增加我感染 COVID’19 的风险?
- **金融:-**Ex——如果股票 A 的价格大幅下跌,会不会导致股票 B 的价格也跟着下跌?如果股票 A 的价格没有下跌,股票 B 的价格会保持不变吗?
- 治理: - 国内生产总值越高的国家,国民普遍越幸福吗?如果来年的国内生产总值急剧下降,会影响国民的幸福吗?
- 教育:-一位教授改变了他对某一门课程的评分方案,这是否会影响你从这门课程中学到多少东西。如果他没有改变评分方案并继续使用之前的方案,他的学生们会学到更多吗?
案例分析:-酒店预订取消
我们考虑的问题是,与客户在取消预订时预订的房间相比,分配不同的房间会产生怎样的影响。
找出这一点的黄金标准是使用 R 和随机对照试验等实验,其中每位顾客被随机分配到两个类别中的一个,即每位顾客要么被分配到不同的房间,要么被分配到与他之前预订的房间相同的房间。但是,如果我们不能干预或者进行这样的实验成本太高怎么办呢(例如,如果人们知道酒店随机将人分配到不同的房间,酒店将开始失去声誉)。我们是否可以仅使用观察数据或过去收集的数据来回答我们的问题?
数据集的描述
该数据集包含来自葡萄牙一家真实酒店的城市酒店和度假酒店的预订信息,并且包括诸如预订时间、停留时间、成人、儿童和/或婴儿数量以及可用停车位数量等信息。所有个人身份信息都已从数据中删除。
要了解更多细节,读者可以参考由 Antonio 等人撰写的文章 酒店预订需求数据集 。al for Data in Brief,第 22 卷,2019 年 2 月,该数据最初来源于此。如果你赶时间,那么你可以快速浏览一下这里。
附:如果你有兴趣了解更多关于在这个数据集上建立预测模型以预测预订是否会被取消的信息,请看看我之前制作的这个笔记本。重点更多的是那个笔记本中的探索性数据分析和建模* 。*
特征工程和预处理
让我们创建一些新的有意义的特征,以降低数据集的维度。创建了以下新功能
- 总停留时间 = 周内停留时间 + 周内停留时间
- 嘉宾 = 成人 + 儿童 + 婴儿
- Different _ room _ assigned= 1 如果reserved _ room _ type*&assigned _ room _ type不同,否则为 0。*
计算预期计数
由于取消的数量和分配不同房间的次数严重不平衡,我们计算预期的数量。
因为预期的计数结果是大约 50%(即这两个变量随机达到相同值的概率)。所以从统计学上来说,我们现阶段没有确定的结论。
让我们看看当我们考虑到预订更改的不同值,重新计算预期数量时会发生什么。
**
当预订更改的数量不为零时,肯定会发生一些变化。所以这给了我们一个提示:预订变化肯定是一个混淆变量。
但是预订变化是唯一的混淆变量吗?如果存在一些未观察到的混杂因素,我们的数据集中没有关于这些混杂因素的信息(特征),那会怎么样。我们还能像以前一样提出同样的主张吗?
众所周知的白衣骑士道伊出场了**
DoWhy 将其注意力集中在因果推断所需的假设上,并提供估计方法(相对简单,因为它是一个统计过程),如匹配和 IV,以便用户可以更专注于识别假设,即明确使用*因果图模型的模型假设。*
输入:- 观察数据和因果图*,其中治疗变量、协变量(除结果和治疗外的所有变量)和结果已明确说明。*
输出:- 期望变量之间的因果关系,“假设”分析(因果关系的阶梯的最高一级)。**
第 0 步。确定你的目标并阐明问题:
我们考虑这样一个问题,即估计分配一个与客户预订不同的房间对预订取消会有什么影响。找出答案的黄金标准是使用随机对照试验*(或 A/B 测试)每位顾客要么被分配到不同的房间,要么被分配到他预订的同一房间。*
随机对照试验( RCT )是影响评估的一种实验形式,在这种试验中,接受方案或政策干预的人群是从合格人群中随机选出的,对照组也是从同一批合格人群中随机选出的。~联合国儿童基金会
但就酒店的声誉而言,这可能不是最佳做法。例如,想象一个场景,一个 6 口之家到达酒店,但他们没有预订顶楼房间,而是被分配到一个只能容纳两个人的房间。因此,在现实世界中,随机实验经常被证明是不可行的、昂贵的或者完全不道德的。
形式上…
我们说处理导致结果如果改变处理导致结果的改变,保持其他一切不变。因果效应是指结果被治疗中的单位变化所改变的幅度。
步骤 1:创建一个因果模型
使用假设将您对预测建模问题的先验知识表示为 CI 图。不要担心,在这个阶段您不需要指定完整的图。即使是部分图表也足够了,其余的可以通过 DoWhy 计算出来;-)因果模型,我认为已经绘制在图 2 中。
这里有一系列的假设,然后我把它们转化成一个因果图
- 细分市场有两个层次,“TA”指的是“旅行社”,而“to”指的是“旅游经营者”,因此它应该会影响提前期(即预订和到达之间的天数)。
- 国家在决定一个人是否提前预订(因此有更多的准备时间)和一个人更喜欢什么类型的餐时也会发挥作用。
- 提前期肯定会影响等候名单的天数(如果预订晚了,找到预订的机会就小了)。此外,更长的交付周期也会导致取消。
- 等候名单中的天数、总住宿和客人的数量可能会影响预订是被取消还是保留。**
- 以前的预订保留会影响客户是否是回头客。此外,这两个变量都会影响预订是否被取消(例如,过去保留了过去 5 次预订的客户也更有可能保留这次预订。类似地,已经取消该预订的人有更高的机会重复同样的预订)。
- 预订变更会影响顾客是否被分配到不同的房间,这也可能导致取消。
- 最后,预约变更的数量是影响治疗和结果的唯一混杂因素,这种可能性极小,可能存在一些未观察到的混杂因素,我们在数据中没有捕捉到关于这些混杂因素的信息。
这里的处理是指分配客户在预订时预订的相同类型的房间。结果是预订是否被取消。常见原因代表我们认为对结果和治疗都有因果影响的变量。根据我们的因果假设,满足此标准的 2 个变量是预订变更和未观察到的混杂因素*。因此,如果我们没有明确指定图形(不推荐!),也可以在下面提到的函数中提供这些参数。*
**
图 2:根据一个简单的图形模型指定的因果假设。
根据你的直觉和假设,你也可以考虑一个更详细的因果图,如图 3 所示。
图 3:用更详细的图形模型来说明因果假设。
步骤 2:确定原因
如果改变处理导致结果的变化,保持其他一切不变,我们说处理导致结果*。*
保持其他一切不变可以通过想象一个反事实的世界或者一个平行宇宙来实现,在这个世界里,在引入治疗之前,一切都是一样的。在真实的世界里,治疗是提供的,而在反真实的世界里,治疗是不提供的。因此,我们可能观察到的结果的任何变化都仅仅是由于治疗造成的。
因此,在这个步骤中,通过使用因果图的属性,我们识别要估计的因果效应。
步骤 3:估计已确定的原因
**因果效应是指处理中单位变化导致结果变化的幅度。因为估算是一个统计过程,所以与其他步骤相比要简单得多。 DoWhy 提供了多种方法,可用于计算确定的因果估计值。
在我们的例子中使用的方法是倾向评分分层估计。人们可以把倾向分数看作是对待观察倾向的一种度量。它们将根据数据进行估计或建模,而不是观察。这些分数通过训练机器学习分类器来计算,例如逻辑回归或随机森林*,以便预测给定协变量的治疗变量(除结果、治疗之外的所有变量)。分层是一种识别配对亚群的技术,配对亚群的协变量分布是相似的(使用不同类型的标准测量相似性)。*
对于这些方法和技术的恰当解释,读者可以参考这个教程,它是由 DoWhy 的创作者在 KDD 2018 上给出的。
第四步:反驳获得的结果
记住因果部分不是来自数据,而是来自你的假设*(步骤 1),这些假设用于识别(步骤 2)和估计(步骤 3)原因。数据只是用于统计估计。*
因此,如果可能的话,就要验证我们的假设,并以多种方式挑战它们的有效性。 DoWhy 提供了多重稳健性检查,可用于测试我们假设的有效性:-
- 随机常见原因 :- 将随机抽取的协变量添加到数据中,并重新运行分析,以查看因果估计值是否改变。如果我们的假设最初是正确的,那么因果估计应该不会有太大的变化。
- 安慰剂治疗反驳者 :- 随机分配任何协变量作为治疗并重新运行分析。如果我们的假设是正确的,那么这个新发现的估计应该是 0。
- 数据子集反驳器 :- 创建数据子集(类似于交叉验证)并检查因果估计是否在子集间变化。如果我们的假设是正确的,应该不会有太大的变化。
通过使用多重稳健性检查,我们已经验证了我们的因果假设确实是正确的!
这告诉我们,平均而言,当一个人被分配到同一个房间时,与他被分配到与他在预订时选择的房间不同的房间相比,酒店预订被取消的概率降低了 ~36% 。
所以下一次,如果酒店员工陷入困境,不得不给顾客分配不同的房间,他们知道他们的行为会对取消预订产生多大的影响。
奖励提示:-
对观察数据进行因果推断的最佳实践
- 请务必遵循四个步骤,即。 建模、鉴别、估计、反驳 。
- 以简单为目标, 如果你的分析太复杂,最有可能是错的!
- 用不同的假设 至少尝试 2 种方法。如果两种方法一致,估计值的可信度更高。
非常感谢微软研究院的 Amit Sharma 博士创建了这个神奇的图书馆!
完整的 jupyter 笔记本和数据集现在是 github 上的 Microsoft Dowhy 知识库的一部分。
permalink dissolve GitHub 是超过 5000 万开发人员的家园,他们一起工作来托管和审查代码,管理…
github.com](https://github.com/microsoft/dowhy/blob/master/docs/source/example_notebooks/DoWhy-The%20Causal%20Story%20Behind%20Hotel%20Booking%20Cancellations.ipynb)*
参考资料:-
- 【为什么之书】 朱迪亚·珀尔教授。
- “因果推理的要素”Bernhard schlkopf 教授。
- Amit Sharma 博士在西北大学关于因果推理的轻松演讲。
- 阿米特·夏尔马博士给 KDD 的 2018 年辅导课
- https://github.com/microsoft/dowhy
超越人工智能炒作:你真正需要为你的创业想法考虑什么
在任何机器学习项目中弥合期望和现实之间的差距
埃里克·克鲁尔在 Unsplash 上的照片
我是一名自由职业的数据科学家,我的工作是咨询和帮助公司和企业家实现他们的机器学习目标。大多数时候,我不得不从一个想法开始(通常以 power-point 演示的形式),然后与客户一起工作,将其塑造成一个 MVP,并进一步成为一个产品级的解决方案。我的大多数客户来自商业背景,对机器学习知之甚少甚至一无所知,所以我确保在整个过程中,我耐心地沟通我在做什么,最重要的是,我为什么要用外行的术语来做这件事。我发现这个过程非常有益,很多时候,我的客户告诉我,在我们完成项目时,他们学到了很多关于机器学习的知识。
我的大多数客户来自商业背景,对机器学习知之甚少甚至一无所知,所以我确保在整个过程中,我耐心地沟通我在做什么,最重要的是,我为什么要用外行的术语来做这件事。
这些天围绕人工智能有很多讨论,毕竟它已经被设计成一个解决一堆问题的一站式解决方案商店。因此,对机器学习或深度学习(或 AI,这是目前更受欢迎的术语)抱有一定的期望是非常自然的。
注意:我在本文中交替使用深度学习和 AI(人工智能)这两个词。严格来说,它们是不一样的,但是在这篇文章的上下文中,如果我们假设它们是一样的,没有独角兽会死。
不幸的是,许多关于人工智能的期望伴随着大肆宣传而来,并隐藏了许多在开始人工智能/人工智能项目之前要做的实际考虑。因此,为了让未来的企业家免受一些痛苦,我决定汇编一份关于人工智能项目的最常见误解的列表,以及在开始这样的练习之前你应该真正考虑的事情!
因此,为了让未来的企业家免受一些痛苦,我决定汇编一份关于人工智能项目的最常见误解的列表,以及在开始这样的练习之前你应该真正考虑的事情!
- 人工智能并不总是更好,做一个成本效益分析:人工智能被认为是一种神奇的成分,当加入任何产品时,都会使它变得更好。从某种意义上说,这的确很神奇,因为大多数人工智能/深度学习实际上是一个黑匣子,即使对数据科学家来说也是如此!但是,想当然地认为人工智能可以解决我们所有的问题几乎就像祈祷中彩票一样。你很可能会赢,但也有同样的可能性(从统计数据来看,更高的可能性)你可能会输!**将机器学习引入现有项目会带来很多额外的复杂性和成本。**因此,在你决定迈出这一步之前,成本效益分析是必不可少的。也许你所需要的可以通过数据库或简单的回归技术来实现。不要低估这一点,因为这将使你在以后的阶段免于旋转。我同意“由人工智能驱动”的口号确实带来了风险投资的绿色,但有时,从长远来看,这是不值得的!
- 我们应该停止说“机器学习是过去,深度学习是我们需要的!”似乎甚至在世界可以接受机器学习之前,我们就有了下一个最好的东西,闪亮的新“深度学习”。虽然行业对经典机器学习的采用似乎很慢,但行业非常欢迎深度学习。这部分是因为时机,我认为深度学习是在行业最终为机器学习做好准备的时候到来的。而 party 因为深度学习确实是,牛逼!但我想给大家一点警示。经典的机器学习方法已经存在了很长时间,并且经过了时间的考验。不像 深度学习在很大程度上仍然是一个黑盒 ,经典方法不太复杂,更容易解释和推理,并且适用于大量用例。
- **跟上研究的步伐:**如果我说深度学习是新的,因为它已经存在很长时间了,这不会是历史上准确的,只是说 摩尔定律 意味着我们直到现在才能很好地测试它,因为硅芯片可以以便宜的价格(更快、更便宜的 GPU)封装大量的晶体管。这种硬件发展导致深度学习在从计算机视觉到自然语言处理(NLP)的几乎每个研究领域都得到了快速采用。这种采用率的上升反过来导致改进以令人印象深刻的速度产生。一篇里程碑式的研究论文很少会在另一个研究团队声称用更好的东西击败它之前在任何基准上停留很长时间。这篇来自伟大的 Yoshua Bengio 的深思熟虑的文章反映了当前的步伐是否健康。但这对行业或你的想法意味着什么?嗯,你必须跟上这种惊人的速度,否则你可能会在几个月甚至几周内变得过时!深度学习项目需要对研究工作进行大量投资,而这一点往往被低估。
- **时间装箱 ML 项目——“我有一个想法和一堆数据。你能在一个月内交付一个工作模型吗?”**这种思路自然地从传统的软件开发项目中溢出。与传统的软件开发不同,机器学习项目很难精确地设定时间,因为所涉及的步骤并不完全确定。你永远不知道在得到足够好的结果之前,你要训练多少个模型,或者你要训练单个模型的多少次迭代。只有当你真正开始解决问题时,任何现实的时间估计才是可能的。在你对数据有了初步的感觉之后,你可以进行有根据的猜测,但是如果期望一个 ML 顾问甚至在看到数据之前就给你时间估计,他/她很有可能会超越。这不是咨询师的错,相信我! 墨菲定律 总是在发挥作用,尤其是在数据科学项目中!
- **时间拳击 ML 项目 2 —“我有一个想法和一堆数据,我需要 99%的准确率。一个月内能发货吗?”**就像时间表一样,在开始之前很难同意一个准确的数字。有时,预期的准确性是不可能的,因为许多因素,如带有坏标签的噪声数据,标记的数据量较少,或者有时可能数据没有足够的有用特征(信号)。同样,这些事情在项目开始前并不总是显而易见的。这就是为什么我总是强调每个项目都有一个初始的 【探索性数据分析】 阶段。重点是,预先有准确的期望只会带来麻烦和痛苦。相反,我建议现实地接近当前可实现的目标,然后找出一种迭代地变得更好的方法(更多的数据,不同的方法等)。)
- **多少数据才算足够的数据?**对深度学习项目最常见的误解之一是,要达到一个好的结果,需要大量的标记数据。经常有人问我“100 张图片足够好吗?1000 呢?”答案是,对于大多数解决方案来说,上限要么根本不存在,要么太高了,吓不倒你!这并不意味着你抛弃了这个想法。存在类似于 迁移学习 、 少量学习 的方法,以在大量训练数据最初不可用的情况下开始。而且,随着时间的推移,你可以收集更多的数据,使用 半监督学习/puse do-labeling方法变得更好。但一般来说,深度学习解决方案总是会在更多数据的情况下表现得更好!
- **从 MVP 到生产解决方案的道路并不总是一帆风顺:**一个成功的 MVP 可能不容易转化为具有类似精度/性能的生产解决方案。在这一转变中有许多因素在起作用,因为在现实生活中会出现许多边缘情况和因素,当您处于 MVP 或开发阶段时,这些情况和因素是难以预料的。这就是为什么就像传统软件一样,即使在成功的 MVP 之后,你也必须修复错误,有时还要从头开始。在这个阶段我见过的最可怕的事情之一就是 数据漂移 或 概念漂移 。如果你的模型在生产中一开始不太好,不要失去希望,它只是需要更多的哄骗!
- 预算:你包括培训时间/ GPU 成本吗?对于许多第一次创业的人来说,训练深度学习模型的训练时间和成本是一个潜在的惊喜。你在新闻中听到的大多数令人惊叹的“人工智能”模型,如【AlphaGO】需要周(alpha go 为 6-8 周)的训练时间!为了增加惊喜因素,培训在多 GPU 设置上进行,在云上拥有或租用这些设置非常昂贵**。例如,像 NVIDIA Tesla V100 这样的单个 GPU 在云上的平均成本为$ 2.5/小时。 在单个 GPU 设置上进行单个实验的成本保守估计约为 2 天的训练时间,大约为 120 美元。久而久之,除非你小心谨慎,否则这只会形成一个过高的 AWS 或 GCP 账单。大多数公司使用内部 GPU 和云 GPU 的组合来进行实验和扩展。如果你是一家初创公司,利用 AWS 提供的云积分激活 和Google Cloud for Startups程序。我曾经与一家初创公司合作,该公司从微软获得了 30 万美元的云信用额度!**
- AutoML:不用雇佣 ML 顾问就能原型化你的想法!对,你没听错!现在有许多 SaaS 的人工智能/人工智能解决方案,它们在评估概念验证方面非常有帮助,甚至不需要雇佣人工智能顾问。你不需要任何技术知识
(好吧,你需要一些基础知识,可能相当于逛 2-3 个小时)你需要一张信用卡。我最喜欢的是 谷歌云视觉 ,因为我主要从事计算机视觉方面的工作。这项服务可以让你上传数据,在平台上标记数据,并通过点击几个按钮来训练图像分类或物体检测等模型。我计划单独写一篇博客,让商业分析师和企业家在单独的帖子中开始使用这样的服务,敬请关注!
结束了
我目前只有这些了。如果你觉得我错过了什么,一定要让我知道,我很乐意收到你的来信!我们生活在一个激动人心的时代,机器学习为许多应用提供了动力,使我们的生活更加舒适和高效。如果你正在构思,我祝你一切顺利!
一如既往的感谢阅读!
超越 jupyter 笔记本:如何构建数据科学产品
苹果 | 谷歌 | SPOTIFY | 其他
Emmanuel Ameisen 在 TDS 播客
背景图片由咪咪 Thian
编者按:迈向数据科学播客的“攀登数据科学阶梯”系列由 Jeremie Harris 主持。Jeremie 帮助运营一家名为sharpes minds的数据科学导师初创公司。你可以听下面的播客:
数据科学不仅仅是 jupyter 笔记本,因为数据科学问题不仅仅是机器学习。
我应该收集哪些数据?我的模型需要有多好才能“好到足以”解决我的问题?我的项目应该采取什么形式才是有用的?它应该是一个仪表板,一个实时应用程序,还是其他什么东西?我如何部署它?我如何确保在生产中部署它时不会发生可怕和意想不到的事情?
这些问题都不能通过输入sklearn
和pandas
并在 jupyter 笔记本上破解来回答。数据科学问题需要商业头脑和软件工程知识的独特结合,这就是为什么 Emmanuel Ameisen 写了一本名为 构建机器学习驱动的应用程序:从想法到产品 的书。Emmanuel 是 Stripe 的机器学习工程师,之前担任 Insight Data Science 的人工智能主管,负责监督数十种机器学习产品的开发。
我们的谈话集中在大多数在线数据科学教育中缺失的环节:商业本能、数据探索、模型评估和部署。以下是我最喜欢的一些外卖食品:
- 数据探索是数据科学生命周期中至关重要的一步,但它的价值很难量化。如果有人因为找不到任何见解,或者因为他们不具备足够的工作技能而未能在数据集中找到有趣的见解,您如何知道呢?公司倾向于根据易于衡量的工作表现方面来评估员工,这种偏见意味着数据探索往往被置于次要地位。解决这个问题的一个好办法是,公司或团队明确地为开放式探索任务留出时间,这样数据科学家就不会在需要的时候回避做这些工作。
- 新数据科学家和机器学习工程师经常低估的生产化的一个方面是模型健壮性的重要性。如果有人试图从你的模型中产生一个社会不接受的输出,会发生什么?如果你的模型遇到一个它不能高置信度预测的输入怎么办?有时,添加一层规则来防止模型在提供不可靠或有问题的用户输入时产生输出可能是至关重要的。
- 许多人错误地以“自顶向下”的方式考虑模型优化。如果他们的第一个模型不工作,他们决定使用另一个(通常更复杂)模型,而不是调查他们的模型正在犯的错误,并试图设计可能有助于解决这些错误的功能或设计启发。这是一个问题,因为大多数数据科学问题只能通过仔细检查错误模型的决策面来解决,而提升模型复杂性而不是在更简单的模型上求助于功能工程往往会使这项任务变得更难而不是更容易。
你也可以在这里的 Twitter 上关注 Emmanuel 以了解他的工作,我在这里。
超越数据科学的最后一英里
如何衡量你的项目的影响?
Jean-Pierre Brungs 在 Unsplash 上拍摄的照片
几周前,在一次团队会议上,我不禁注意到一些人非常关注项目开发和部署的细节。当他们描述他们正在做什么的时候,他们总是不能解释这个项目如何适应组织的需求。
当我询问他们中的一个人时,他们对项目开发完成后将如何使用只有一个模糊的概念。
这对我来说是一个巨大的危险信号——之后我直接和团队领导谈了这件事。我的担心远远超出了缺乏背景。如果他们不理解工具的用途,我们如何知道它是否成功,我们如何衡量其影响?
数据科学中的“最后一英里”问题一直备受关注。最后一英里问题与在生产环境中启动数据科学项目的难度有关,或者与从项目中实际获得有价值的见解的难度有关。这是软件开发中“最后一英里”项目的遗留物,在许多行业中相当普遍。
实施和结论很重要,更加关注项目管理和规划对组织很重要,尤其是那些数据科学项目不是其主要产品的组织(在许多情况下,数据科学是一种支持功能)。
然而,在最后一英里之后,还需要做一些工作,以了解项目是否产生了预期的影响。这项工作的规划需要从数据科学项目概念化的一开始就开始。
为什么评价?
这个重要的步骤,我发现在许多组织中被忽视了,就是项目评估。在某些圈子里,这被称为审计,或计算投资回报。但是,由于来自社会科学,并且因为许多数据科学项目用例涉及人类行为,所以我将重点关注评估实践。
好吧,但是你说的评估是什么意思…
评估领域非常复杂。一些专业人士喜欢被认为是魔术师,向你推销他们的魔术,并在没有人的时候得出结论,这需要你的信仰。其他的实践者关注更具包容性的演进方法,通过积极地参与评估来帮助整个组织(或者至少是那些最直接参与的组织)更好地理解他们的项目。
评估方法的核心是项目管理和测量、科学方法和组织科学的混合。一个好的评估者对本体论(我们如何知道存在什么)和认识论(我们如何学习真理,或知识理论)有深刻的理解和关注——这是允许他们设计导致有效结论的研究的方法。
评估的类型
评价有多种类型和多种目的。在考虑您的项目和组织的需求时,记住这一点很重要。例如,如果您想确保您的机器学习程序在生产中按设计运行,您可以进行责任和合规性评估。这要求评估者将当前状态与计划状态、规则、法律以及其他限制和要求进行比较。
然而,对于有关数据科学项目影响的问题,有两种类型的评估需要关注:实施评估(形成性)和优点和价值评估(总结性)。
形成性评价——实施
几乎所有数据科学项目部署都需要实施评估。您需要衡量与推广计划相比,项目的实施情况如何。很多时候团队认为“部署”是成功的。
例如,我让我的一个团队一直吹嘘他们已经推出了一个复杂的仪表板,这是一个开发了一年多的项目。但当我向他们提出一个简单的后续问题时:“谁在使用它?意向用户是否按预期与之互动?”,他们没有答案。
这是因为他们在开发和项目管理周期中衡量项目的成功。评估一个项目的实施对于理解你是否成功地实现了你的期望是必要的。
很多时候,您已经在部署中完成了部分工作,尤其是技术部分,但是正式的实施评估可以确保您计划提出正确的问题并收集正确的数据,以了解您的部署是否成功。当你遇到问题时,很容易进行路线修正,因为你已经知道正确的输出应该是什么。
总结性评估——影响
我确信我的一些团队成员讨厌我开会,因为我总是问一些尖锐的问题。举个例子,如果你告诉我你的仪表盘已经部署好了,95%的目标受众都在与之交互,我还是不会满意。
为什么?因为我想知道成功的实施是否会产生预期的结果。
我经常看到数据科学团队将项目的部署和实施误认为是成功。但是在大多数组织中,这些项目只是获得对组织重要的东西的工具。
我们没有仪表板,因为我们喜欢仪表板(…对吗?).我们有仪表板,因为它们让领导能够更好地了解生产率和质量。
“好极了,我们的首席管理人员可以看到这一点,他们看起来很高兴。”
等等!这仍然只是一个输出,而不是目标。我们需要这些见解和信息来提高效率和减少浪费。我们是否将这些作为评估计划的一部分来衡量和跟踪?如果没有,我们不知道我们的仪表板是否有任何影响。
现在有些人(尤其是数据科学团队)会认为这不公平。
“我们无法控制一切,我们无法让领导关注仪表盘,根据显示的信息做出决策,或者针对其他因素进行控制!”
没错,但是如果一个组织如此关心这些结果以至于他们投资于这个项目,那么必须有一个计划来实现这些结果,并且有一个评估计划来测量结果。
否则,我们只是创建一个漂亮的仪表板,为您的组织提供一些可视化和数据分析体验,但如果只是这样,最终是浪费组织的时间和金钱。
好吧,我相信。我该怎么做?
规划评估并不那么困难。它从你还在设计项目的时候就开始了。简而言之,任何好的项目都应该遵循因果链,从您希望实现的目标或结果开始,反向工作以理论化数据科学项目将如何帮助您实现这些目标。
想降低成本?你的仪表盘是怎么做到的呢?
“它为关键的组织角色提供了实时数据和见解,然后这些角色可以做出正确的决策来降低成本。”
注意,这里隐含着一个变化理论。首先,假设关键人员目前没有及时获得所需的信息。第二,要求他们理解信息,并利用信息做出正确的决策,从而降低成本。
几乎每一个数据科学项目,我都参与了必要的因果联系,以获得超出数据科学项目本身的结果。
这些联系为你提出问题,为你的评估收集数据。最终,如果您基于项目来度量产出的变化,那么您可以相对确定成功的实现。
然后,当你衡量你的成果和影响时,你可以更加确定这些变化是由于项目的实施而不是其他因素。
评估计划的计划
除了有一种方法来衡量和了解您的数据科学项目的实际影响之外,在整个设计和开发过程中牢记评估计划也有利于项目。这是因为它迫使团队考虑组织的更大目标,并明确地计划和考虑如何度量他们的项目将如何帮助实现这些目标。
它迫使你跳出日常的开发周期,把你的项目框在一个更大的画面中。它还让您能够对数据科学项目、其部署以及开展项目并使其发挥作用所需的其他组织变化进行故障排除。
Tensorflow 2 中的高级 CNN 完全指南
使用复杂的架构生成更深层次的模型,并了解不同的层应该使模型更好。
马库斯·斯皮斯克在 Unsplash 上的照片
我构建的第一个 ConvNet 模型是为了识别狗或猫,它具有一个序列模型的基本结构,该模型具有 Conv2d 层,以及这里和那里的批处理规范化和最大池层的混合,并且不要忘记一个丢弃层以对抗过度拟合😏。所有这一切之后是平坦层,最终导致致密层。使用 add 将它们添加到模型中。它工作得很好,给出了足够好的精度。然后我尝试了著名的 MNIST 数据集,并使用了相同的架构。我所要做的就是将我的密集层中的损失从二元交叉熵改变为分类交叉熵,tada 我觉得我已经掌握了 CNN。但是,孩子,我错了!还有更多的东西,比如用不同类型的 Conv2d 层构建稀疏连接的架构,应用不同的过拟合技术等等。
目录
- 高级 Conv2D 图层
- 深度可分卷积
- 扩张的回旋
2.计数器过拟合
- 空间缺失
- 高斯漏失
- 活动正规化
3.复杂架构
- 稀疏连接的架构
- 跳过连接
4.结论
高级 Conv2D 层
深度可分卷积
它们效率更高,需要更少的内存和更少的计算,在某些情况下甚至可以提供更好的结果。由于这些特征,当我们的模型必须部署在边缘/物联网设备上时,通常使用它们*,因为它们的 CPU 和 RAM 有限。它将正常卷积层的过程分为两个过程,即深度方向卷积和点方向卷积。在深度方向卷积中,内核一次迭代一个通道。逐点卷积使用 1x1 内核来增加通道数量。这样就减少了所需的乘法总数,从而使我们的网络速度更快。这是一篇很棒的文章来了解更多。*
tensorflow.keras.layers.SeparableConv2D(32, (3, 3), padding="same"))
扩张的回旋
可以在正常卷积层以及深度方向可分离的卷积层中实现扩展卷积。这是一个带有间隙的正常卷积运算。除了提供更大的感受域、高效的计算和更少的内存消耗,它还保持了数据的分辨率和顺序。因此,它通常会提高模型的性能。
图片取自这里。
#In Normal Conv2D
tf.keras.layers.Conv2D(32, (3, 3), padding='same', dilation_rate=(2, 2))#In Seperable Conv2D
tf.keras.layers.SeparableConv2D(no_of_filters, (3, 3), padding='same', dilation_rate=(2, 2))
反过度拟合
空间缺失
在正常退出中,一些随机选择的神经元在训练期间被忽略。这些神经元在前向传递中没有贡献,并且它们的权重在后向传递中没有更新。这导致网络学习多个独立的内部表示,并使其不太可能过度适应训练数据。在空间删除中,我们没有删除神经元,而是删除了整个特征图。如空间文档的 Keras 文档所述:
如果特征图中的相邻像素是强相关的(在早期卷积层中通常是这种情况),那么常规的丢弃不会使激活正则化,否则只会导致有效学习率的降低。在这种情况下,空间下降将有助于提高要素地图之间的独立性,因此应改为使用空间下降。
tf.keras.layers.SpatialDropout2D(0.5)
高斯漏失
它是压差和高斯噪声的组合。这意味着这一层连同丢弃的一些神经元也应用了以 1 为中心的乘法高斯噪声。和正常退学者一样,它也采用论证率。来自其文档:
Float,drop 概率(和 dropout 一样)。乘法噪声将具有标准差 sqrt(rate / (1 — rate))。
关于它的更深入的阅读,你可以参考这篇文章这里。
tf.keras.layers.GaussianDropout(0.5)
活动正规化
正则化会对网络进行细微的更改,以便更好地进行概化。它鼓励神经网络学习稀疏特征或原始观察值的内部表示,这使得模型在看不见的数据上表现得更好。支持三种类型的正则化技术:
- l1 :活动计算为绝对值之和。
- l2 :活动计算为平方值的总和。
- l1_l2 :活动被计算为绝对值之和以及平方值之和。
L1 和 L2 正则化公式。λ是正则化参数。图片取自这里。
由于正则化项的增加,权重矩阵的值降低,并且导致减少过拟合的更简单的模型。有关正则化技术的更多信息,请参考此处的。
#L1 regularization
tf.keras.layers.ActivityRegularization(l1=0.001)#L2 regularizaton
tf.keras.layers.ActivityRegularization(l2=0.001)#L1_L2 regularization
tf.keras.layers.ActivityRegularization(l1=0.001, l2=0.001)
复杂架构
稀疏连接的架构
有两种类型的架构,密集连接和稀疏连接。
它因 Inception 网络而流行起来。那么对这些类型的架构有什么需求呢?难道我们不能继续增加层次,网络越深,结果越好吗?一点也不。模型越大,就越容易过度拟合 ,尤其是对于较小的数据集,这也增加了训练模型所需的计算能力。*有时甚至训练误差甚至变得更严重。*稀疏连接的架构有助于我们增加模型的深度和宽度,同时不会超出所需的计算能力。它们可以具有不同大小的卷积核,这在测试对象大小不同时也有助于建模。
一般我们用tf.keras.layers.add
做密集连接的架构。我们可以使用tf.keras.utils.plot_model
来可视化我们的模型。
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, add, Input
from tensorflow.keras.utils import plot_modelmodel = Sequential()
model.add(Conv2D(64, (3, 3), activation = 'relu', padding='same', input_shape=(128, 128, 3)))
model.add(Conv2D(64, (3, 3), activation = 'relu', padding='same'))
model.add(Conv2D(128, (3, 3), activation = 'relu', padding='same'))
plot_model(model)
绘制的模型
我们也可以创建这样的模型,方法是将它们分配给变量,并将它们的变量名放在它最后连接的层上。输入形状在tf.keras.layers.Input
中指定,tf.keras.models.Model
用于强调输入和输出,即我们模型的第一层和最后一层。
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Conv2D, Input
from tensorflow.keras.utils import plot_modelinput_flow = Input(shape=(128, 128, 3))
x = Conv2D(64, (3, 3), activation = 'relu', padding='same')(input_flow)
x = Conv2D(64, (3, 3), activation = 'relu', padding='same')(x)
x = Conv2D(128, (3, 3), activation = 'relu', padding='same')(x)
model = Model(inputs=input_flow, outputs=x)
plot_model(model)
绘制的模型
现在,要构建稀疏连接的架构,我们只需要将一层分配给多层,然后使用tf.keras.layers.concatenate
将它们连接起来。
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Conv2D, Input, concatenate
from tensorflow.keras.utils import plot_modelinput_flow = Input(shape=(128, 128, 3))
x = Conv2D(64, (3, 3), activation='relu', padding='same', input_shape=(128, 128, 3))(input_flow)
one = Conv2D(64, (3, 3), activation='relu', padding='same')(x)
two = Conv2D(64, (5, 5), activation='relu', padding='same')(x)
three = Conv2D(64, (7, 7), activation='relu', padding='same')(x)
x = concatenate([one, two, three])
x = Conv2D(128, (3, 3), activation = 'relu', padding='same')(x)
model = Model(inputs=input_flow, outputs=x)
plot_model(model)
模型已绘制。
跳过连接
这被网络 ResNet50 推广开来。跳过连接背后的主要思想是解决微软研究院在他们的论文图像识别的深度剩余学习中给出的这个问题。
当更深的网络能够开始收敛时,一个退化问题就暴露出来了:随着网络深度的增加,精确度达到饱和(这可能不足为奇),然后迅速退化。出乎意料的是,这种退化不是由过度拟合引起的,并且向适当深度的模型添加更多的层导致更高的训练误差……
图像取自此处的。
它的优点是可以更容易地估计权重的良好值,并且模型可以更好地概括。
如果你了解如何构建稀疏连接的架构,你可以很容易地猜到这是如何工作的,但是在这种情况下,为了连接它们,我们将使用tf.keras.layers.Add
。
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Conv2D, Input, Add
from tensorflow.keras.utils import plot_modelinput_flow = Input(shape=(128, 128, 3))
x = Conv2D(64, (3, 3), activation='relu', padding='same', input_shape=(128, 128, 3))(input_flow)
one = Conv2D(64, (3, 3), activation='relu', padding='same')(x)
two = Conv2D(64, (5, 5), activation='relu', padding='same')(one)
three = Conv2D(64, (7, 7), activation='relu', padding='same')(two)
x = Add()([x, three])
x = Conv2D(128, (3, 3), activation = 'relu', padding='same')(x)
model = Model(inputs=input_flow, outputs=x)
plot_model(model)
绘制的模型
结论
使用这些技术可能会改进我们的模型,但情况并非总是如此。它们的性能甚至可能比普通 Conv2D 层的简单密集连接架构更差。你需要试着看看哪种策略能产生最好的结果。
出于修订的目的,我使用上面提供的概念创建了一个模型。这只是为了修改的目的,我不保证这个模型会给出更好的结果。
绘制的模型
超越 Weisfeiler-Lehman:近似同构和度量嵌入
图形神经网络有多强大?
在这篇文章中,我认为图同构的设置对于分析图神经网络的表达能力来说太有限了,并建议基于度量嵌入的更广泛的设置。
这是关于图形神经网络表达能力系列文章的第三篇。参见 第 1 部分 描述图神经网络与 Weisfeiler-Lehman 图同构测试之间的关系,以及 第 2 部分 展示如何基于子结构计数构造可证明强大的图神经网络。
W 在图形深度学习的背景下,已经表明消息传递神经网络与 1-WL 测试【2】一样强大。前往更高阶并且因此更强大的 k -WL 测试导致具有高计算复杂度和非局部操作的图形神经网络[3],这在实际应用中是不切实际的。
我们在最近的一篇论文[4]中介绍的另一种方法是打破 Weisfeiler-Lehman 层级结构,并求助于一种消息传递机制,这种机制能够感知局部图结构,如循环、集团和路径。这导致图形神经网络具有标准消息传递架构的吸引人的局部性和低复杂性,同时被证明比 2-WL 更强大,并且至少不比 3-WL 更弱。这种观点打开了图论中公开问题的深层链接,这些问题以前在图形神经网络表达性的上下文中没有被探索过。
故事就这样结束了吗?我相信我们可以通过改变对问题的看法来做得更好,并将在本文中讨论几个方向。
**近似同构。**虽然对图形神经网络表达能力的重要见解已经从图形同构问题的链接中显现出来,但设置本身相当有限。图形神经网络可以看作是试图寻找一个嵌入了 f ( G ),具有期望性质f(G)=f(G′)IFFG~G′的图。不幸的是,由于 Weisfeiler-Lehman 测试是图同构的必要但非充分条件,这只能以一种方式工作:f(G)=f(G′)ifG~G′,但反过来就不一定了:两个不同构的图可以产生相等的嵌入。
在实际应用中,我们很少处理完全同构的图,而是处理近似同构的图,如下图所示:
近似同构的图的例子:两对图 G 、*G′和 G 、 G″ 都是非同构的。然而, G 和G′*仅相差一条边,因此比 G 和 G″ “更同构”,它们相差五条边。
量化“近似同构”概念的一种适当方式是以度量 d 的形式,如果两个图不相似,则该度量大,否则该度量小。图形编辑距离[5]或格罗莫夫-豪斯多夫距离[6]是两个可能的例子。重要的是,度量被定义为 d ( G ,G′)= 0 当且仅当G~G′,这意味着两个同构的图是不可区分的[7]。等距嵌入的问题
|f(g)f(g′)| =d(g,g′)为所有 G ,g′(♠)
尝试用欧几里得距离|替换图形距离。在图的嵌入之间,两个距离相等(在这种情况下,嵌入 f 被称为“等距”或“距离保持”)。
关于图神经网络的表达能力的工作表明,在多项式时间内构造满足(♠)的图嵌入是可能的,其中 Weisfeiler-Lehman 测试成功。这个设置似乎限制太多。首先,很可能不可能设计出一个局部有效的算法来保证所有图的♠[8]。二、图同构问题对近似同构的图不提供任何保证,在这种情况下 d ( G ,G′)>0。例如,原则上可能的是,更多相似的图在嵌入空间中不太相似,即, d ( G ,G′)<d(G, G″ )但是|f(G-f(【T24
另一方面,公制公式提供了更多的灵活性。人们可以通过限制度量膨胀来放松它,而不是要求(♠)保持精确,
c⁻d(g,g′)≤|f(g)—f(g′)|≤c d(g,g′)对于 c
其可以表示为嵌入 f 的双李普希兹常数 c 。这意味着嵌入不会“拉伸”或“收缩”地面实况图距离 d 超过一个系数 c ,该系数理想情况下应尽可能接近 1。这种嵌入称为近似等距。人们试图得到的结果是一个与图无关的界限,特别是与顶点数无关的界限。
注意,图同构是(♣)的一个特例,因为对于同构的图g~g′有 d ( G ,g′)= 0,因此f(g)=f(g′)。如上所述,这不可能在所有的图中都实现。相反,模型(♣)可以进一步放宽,允许额外的公制失真ε ,
c⁻d(g,g′)dε≤|f(g)f(g′)|≤c d(g
它对同构图形之间的距离设置了一个容差。在许多应用中,这是一个很小的代价,如果反过来一个人可以满足比(♠).)大得多的图族的话
近似等距嵌入问题。
**大概近似等距。**近似同构问题可以改写为“可能近似正确”(PAC)形式的概率陈述
𝖯( c ⁻ d ( G ,g′)ε≤|f(g)f(g′)|≤c d(g,g′)
其中“近似”在度量膨胀 c 的意义上被理解,而“可能”是指对于图的某些分布,界限()以高概率 1δ成立[9]。这种设置可能比确定性的近似等距嵌入问题更容易分析。
**桥接连续和离散结构。**最后但同样重要的是,图神经网络表达能力的问题主要集中在图的拓扑上。然而,在大多数实际应用中,图也有节点或边的特征或属性,通常表示为向量[10]。度量框架通过定义属性图之间的适当距离来自然地处理这两种结构。
作为最后的评论,我提醒大家应该记住,大多数关于图形神经网络表达能力的工作都是建立在图论经典结果基础上的最近发展。扩展到其他数学领域,如度量几何,似乎是一个有前途的途径,很可能在不久的将来开花结果。
[1] B. Weisfeiler,A. Lehman,将一个图化简为标准形以及其中出现的代数,1968 年(英译)
[2] K. Xu 等图神经网络到底有多强大? (2019)。继续。ICLR。
[3] H. Maron 等人可证明强大的图形神经网络 (2019)。继续。神经炎。
[4] G. Bouritsas 等通过子图同构计数提高图神经网络表达能力 (2020)。arXiv:2006.09252。
[5] A. Sanfeliu,K.-S. Fu,用于模式识别的属性关系图之间的距离度量(1983)。IEEE Trans。系统、人和控制论(3):353–362。
[6] M .格罗莫夫,《黎曼多样性的结构》( 1981 年)。
[7]从技术上讲, d 是一个伪度量,可以看作是模同构关系的图的商集𝒢⧵~上的度量。
[8]我说“可能”是因为图同构问题是否有多项式时间的解还是未知的。这种假设的算法似乎极不可能具有实际的时间和空间复杂性。
[9]在 N. M. Kriege 等人(2018)的图核理论表达能力的属性测试框架中,概率度量设置的一个版本先前用于分析图核。继续。IJCAI。
[10]虽然 Weisfeiler-Lehman 框架在技术上适用于彩色图,但它仅限于具有离散特征集的节点。
我感谢卢卡·贝利、乔治·布瑞萨斯、法布里奇奥·弗拉斯卡、谢尔盖·伊万诺夫和伊曼纽·罗西校对了这篇文章,也感谢克里斯多夫·莫利斯指出了他之前在图形核的性质测试方面的工作。对图形深度学习感兴趣?在 Medium 上看我的 其他帖子 ,或者关注我的Twitter。
超越魏斯费勒-雷曼
超越 Weisfeiler-Lehman:近似同构和度量嵌入
由迈克尔布朗斯坦 — 6 分钟阅读
在这篇文章中,我认为图同构的设置对于分析图神经网络的表达能力来说太有限了,并建议基于度量嵌入的更广泛的设置。这是关于图形神经网络表达能力系列文章的第三篇。
为什么神经网络可以逼近任何函数
托马斯·汐宫光·克拉克——8 分钟阅读
在本文中,我将解释通用逼近定理,并用 PyTorch 代码展示两个快速示例,以演示神经网络学习逼近函数。如果你已经知道神经网络如何工作的基础知识,请随意直接跳到代码和可视化!
图片来源:Unsplash
概率编程简介
由法比亚娜·克莱门特 — 6 分钟读完
概率编程背后的思想是将来自统计的推理算法和理论与来自编程语言的形式语义、编译器和其他工具结合起来,为来自机器学习的模型和应用程序构建高效的推理评估器。
深度学习异常检测:综述
由关松庞 — 7 分钟读完
异常检测,也称为异常值检测,几十年来一直是一个活跃的研究领域,因为它在许多关键领域都有广泛的应用,如风险管理、合规性、安全、金融监控、健康和医疗风险以及人工智能安全。
美国宇航局在 Unsplash 上拍摄的照片
卫星图像分割初学者指南
汉娜·彼得森 — 15 分钟阅读
与根据标签对整个图像进行分类的图像分类相反,图像分割包括检测和分类图像中的单个对象。此外,分割不同于对象检测,因为它在像素级工作以确定图像中对象的轮廓。
超越 Weisfeiler-Lehman:使用子结构用于可证明表达的图形神经网络
图形神经网络有多强大?
在这篇文章中,我将讨论如何设计不基于 Weisfeiler-Lehman 测试体系的局部且计算高效的强大图形神经网络。
这是关于图形神经网络表达能力系列文章的第二篇。参见 第一部分 描述图神经网络与 Weisfeiler-Lehman 图同构测试之间的关系。在 第三部分 中,我论证了为什么我们要完全抛弃图同构问题。
最近的开创性论文[1–2]建立了图神经网络和图同构测试之间的联系,观察了消息传递机制和 Weisfeiler-Lehman (WL)测试之间的相似性[3]。WL 测试是用于确定图同构的一系列图论多项式时间迭代算法的总称。 k -WL 测试根据一些邻域聚集规则在每一步重新着色 k 图的顶点元组,并在达到稳定着色时停止。如果两个图的颜色直方图不相同,则认为这两个图不是同构的;否则,这些图可能(但不一定)是同构的。
消息传递神经网络至多与 1-WL 测试(也称为节点颜色细化)一样强大,因此无法区分甚至是非同构图形的非常简单的实例。例如,消息传递神经网络不能计算三角形[4],这是一个已知在社交网络中起重要作用的主题,它与指示用户“紧密结合”程度的聚类系数相关联[5]。有可能设计出更具表达力的图形神经网络来复制日益强大的 k -WL 测试【2,6】。然而,这种体系结构导致高复杂性和大量参数,但最重要的是,通常需要非本地操作,这使得它们不切实际。
不能用 1-WL 来区分但可以用 3-WL 来区分的非同构图形的例子,因为 3-具有计算三角形的能力。
因此,基于 Weisfeiler-Lehman 层次结构的可证明强大的图形神经网络要么不是非常强大但实用,要么强大但不实用[7]。我认为,有一种不同的简单方法来设计高效且可证明强大的图形神经网络,这是我们在与乔治·布里特萨斯和法布里齐奥·弗拉斯卡的一篇新论文中提出的[8]。
**图形子结构网络。**这个想法实际上非常简单,在概念上类似于位置编码或 graphlet 描述符【9】:我们让消息传递机制知道本地图结构,允许根据端点节点之间的拓扑关系不同地计算消息。这是通过向消息传递函数传递与每个节点相关联的附加结构描述符来完成的[10],这些描述符是通过子图同构计数来构建的。通过这种方式,我们可以将图的节点划分为不同的等价类,这些等价类反映了每个图中的节点之间以及不同图之间共享的拓扑特征。
我们称这种架构为图子结构网络(GSN)。它具有与标准消息传递神经网络相同的算法设计、存储器和计算复杂性,并具有额外的预先计算步骤,在该步骤中构造结构描述符。要计数的子结构的选择对于 GSNs 的表达能力和预计算步骤的计算复杂性都是至关重要的。
在具有 n 个节点的图中,计数大小为 k 的子结构的最坏情况复杂度是𝒪( nᵏ 。因此,它类似于高阶图神经网络模型或 Morris [2]和 Maron [6]。然而,与这些方法相比,GSN 有几个优点。首先,对于某些类型的子结构,如路径和循环,计数可以以低得多的复杂度完成。第二,计算量大的步骤仅作为预处理进行一次,因此不会影响保持线性的网络训练和推理,与消息传递神经网络中的方式相同。训练和推理中的记忆复杂度也是线性的。第三也是最重要的,GSN 的表达能力不同于 k -WL 测试,在某些情况下更强。
gsn 有多强大?子结构计数赋予 GSN 比标准消息传递神经网络更强的表达能力。首先,澄清 GSN 的表达能力取决于所使用的图子结构是很重要的。同样,我们有一个层次的 k -WL 测试,我们可能有基于计数一个或多个结构的 gsn 的不同变体。使用比星形图更复杂的结构,gsn 可以比 1-WL(或等价的 2-WL)更强大,因此也比标准消息传递架构更强大。对于 4-团,GSN 至少不亚于 3-WL,如以下强正则图的例子所示,在该例子中,GSN 成功,而 3-WL 失败:
16 个顶点,节点度为 6 的非同构强正则图的例子,其中每两个相邻的顶点有 2 个共同邻居,每两个不相邻的顶点也有 2 个共同邻居。在这个例子中,3-WL 测试失败,而具有 4-团结构的 GSN 可以区分它们。在左边的图(称为 Rook 图)中,每个节点恰好参与一个 4-团。右图( Shrikhande 图)的最大集团大小为 3(三角形)。图来自[8]。
更一般地说,对于𝒪(1 大小的各种子结构,只要它们不能被 3-WL 计数,就存在 GSN 成功而 3-WL 失败的图[11]。虽然我们找不到相反的例子,但它们可能在原则上存在——这就是为什么我们关于 GSN 力量的陈述是弱形式的,“至少不减弱”。
这同样适用于更大的 k 值;上图中称为 k - 等正则的强正则图的概括,是( k +1)-WL 测试失败的实例[12]。这些例子也可以通过具有适当结构的 GSN 来区分。因此,下图显示了 gsn 的表达能力:
GSN 不属于 Weisfeiler-Lehman 层级。有了适当的结构(例如,一定规模的集团或循环),它很可能至少不亚于 k-WL。
GSN 原则上能有多强大?这仍然是一个悬而未决的问题。图重构猜想 [13]假定了从所有删除节点的子结构中恢复图的可能性。因此,如果重构猜想是正确的,具有大小为n1 的子结构的 GSN 将能够正确地测试任何图的同构。然而,重构猜想目前只对大小为 n≤ 11 [14]的图被证明,其次,这样大的结构是不切实际的。
更有趣的问题是类似的结果是否存在于独立于节点数量的“小”结构(𝒪(1 的)中。我们的经验结果表明,具有诸如圈、路径和集团的小子结构的 GSN 适用于强正则图,这对于 Weisfeiler-Lehman 测试来说是一个难题。
最重要的是,GSN 建立在标准消息传递架构之上,因此继承了它的局部性和线性复杂性。该方法的超参数包括为构造结构描述符而计数的结构。实际应用可能会受到所需表达能力、保证表达能力的结构大小以及计算复杂性之间的权衡的指导。
使用具有长度 k≥6 的循环的 GSN 显著改善了锌数据库中分子图的化学性质的预测,该锌数据库被制药公司用于候选药物的虚拟筛选。这种环状结构在有机分子中很丰富。图来自[8]。
在我们的实验中,我们观察到不同的问题和数据集受益于不同的子结构,因此这种选择很可能是特定于问题的。幸运的是,我们通常知道在某些应用中什么样的子结构很重要。例如,在社交网络中,三角形和高阶小集团很常见,并有明确的“社会学”解释。在化学中,周期是一种非常频繁的模式,比如出现在大量有机分子中的五元和六元 T2 芳香环。下图显示了我们大多数人都熟悉的一个例子,咖啡因的分子,它在我血液中的含量低得惊人。这听起来是写完这篇文章并给自己冲杯咖啡的好时机。
1,3,7-三甲基黄嘌呤,更广为人知的名称是咖啡因,是一种含有 5 环和 6 环的化学环状化合物的例子(用红色和黄色表示)。
[1] K. Xu 等图神经网络到底有多强大? (2019)。继续。ICLR。
[2] C. Morris 等人 Weisfeiler 和 Leman go neural:高阶图神经网络 (2019)。继续。AAAI。
[3] B. Weisfeiler,A. Lehman,将一个图化简为标准形以及其中出现的代数,1968 年(英译)
[4]因此,通过 1-WL 测试,具有不同数量三角形的两个图将被认为可能是同构的,或者等效地,将具有由消息传递神经网络构建的相同嵌入。有大量新的结果扩展了我们对什么结构在 WL 测试下是不变的理解,参见例如 V. Arvind 等人关于 Weisfeiler-Leman 不变性:子图计数和相关图性质 (2018) arXiv:1811.04801 和 Z. Chen 等人图神经网络能计数子结构吗?(2020) arXiv:2002.04025。
[5]图子结构已经在复杂网络中使用了几十年。在生物信息学中,R. Milo 等人的开创性论文《网络基序:复杂网络的简单构建模块》(2002)。科学 298(5594):824–827。和 n . prulj 等人建模交互组:无尺度还是几何? (2004)生物信息学 20(18):3508–3515 介绍了用于生物相互作用网络分析的图形基序和 graphlets。在社会网络中,对三角形主题的研究至少可以追溯到 P. W. Holland 和 S. Leinhardt 的《社会网络中的局部结构》(1976)。社会学家。方法。1–45.
[6] H. Maron 等人可证明强大的图形神经网络 (2019)。继续。神经炎。
[7]Morris 的 3-WL 等价图神经网络架构具有𝒪( n 空间-和𝒪( n ⁴)时间复杂度。Maron 的架构具有稍好的𝒪(空间和𝒪(时间复杂度。对于一个具有 100 万个节点的中等规模的图形,这仍然意味着巨大的 1TB 内存和万亿次计算。
[8] G. Bouritsas 等通过子图同构计数提高图神经网络表达能力 (2020)。arXiv:2006.09252。
[9]基于子结构计数的图形分析方法明显早于最近关于图形深度学习的工作。值得注意的例子包括 T. Milenkovi 和 n . prulj 在生物信息学中提出的 graphlet 签名,通过 graphlet 度签名揭示生物网络功能 (2008)。癌症信息。6:257–273,或 graphlet 内核 N. Shervashidze 等人用于大型图形比较的高效 graphlet 内核 (2009)。继续。AISTATS。
[10]我们对边也展示了同样的机制,为了简洁起见,我在这里省略了。
[11] 3-WL 在子结构计数方面显得相当弱。例如,它可以计算多达 7 个节点的基元循环,但不能计算诱导的 4-循环或长度为 4 的路径。目前还不清楚通过在 WL 层次结构中向上移动可以获得什么样的子结构计数能力。
[12] B. L. Douglas,《Weisfeiler-Lehman 方法与图同构测试》 (2011)。arXiv:1101.5211。请注意,在不同的参考文献所称的“ k -WL”之间存在一定程度的混淆。道格拉斯用术语k——WL 来称呼别人所说的(k——1)——FWL(“民间传说”WL)。在我们的术语中, k -WL 在(k-1)-等规图上失效。强正则图是 2-等正则的。
[13] P.J .凯利,树的一个同余定理 (1957)。太平洋 j .数学。7:961–968.
[14] B. D. McKay,小图是可重构的(1997)。澳大利亚组合学杂志 15:123–126。
感谢卢卡·贝利、乔治·布里萨斯和法布里齐奥·弗拉斯卡帮助我校对这篇文章。本帖的 中文翻译 由 刘止庸 提供。对图形深度学习感兴趣?查看我的 博客 关于走向数据科学, 订阅我的 帖子,获取 中等会员 ,或者关注我的Twitter。
CMOs 在 2020 年遵循的商业智能趋势
nabler.com
了解商业智能在市场营销中的未来
没有数据的营销就像闭着眼睛开车。-(丹·扎雷拉)
2013 年,屡获殊荣的营销大师丹·扎雷拉(Dan Zarrella)接受《福布斯》采访时表示,有多少营销人员不使用数据分析,这是一件可怕的事情。扎雷拉还是一位多作家,也是革命性在线应用的发明者。
但幸运的是,这种趋势正在改善,他说。Zarrella 总结说,这种缓慢的接受是由于老式的非数据营销方法的惯性仍然有影响。
快进到现在。七年后,我们来到了 2020 年。有什么变化?如今,营销人员在多大程度上使用了数据分析?首席营销官(CMO)遵循什么样的商业智能趋势或也称为 BI 趋势?让我们仔细看看。
如今,营销人员在多大程度上利用了数据?
CMO 调查报告中的数字显示,数据驱动营销在公司中的应用达到了多年来的最高点。
2013 年,营销人员花了大约 30%的时间分析数据,用于商业智能和企业决策。到 2019 年,这一比例已增长到 43%以上。
但仍有重大挑战和很大的增长空间:
- 12.9%的首席营销官仍然缺乏决策所需的定性和定量数据。
- 只有 36%的首席营销官使用定量数据。
- 50.7%的首席营销官能够接触到定性数据。
除了上面引用的令人失望的统计数据,还有一个令人清醒的现实是,超过 60%的公司不确定他们的营销有多成功。他们只是缺乏跟踪和证明它的指标!
营销人员面临的关键数据问题有哪些?
有几个主要障碍正在减缓营销人员对 BI 解决方案的大规模采用。
CMO 淹没在数据中!
国际数据公司(IDC)的估计表明,到 2025 年,全球数据创建量将从目前的 330 亿字节(ZB)激增至约 175 亿 ZB。注:1 ZB 等于 1 万亿吉字节(GB)。
IDC 写道“人类正在寻求数字化世界。”它继续说道,“消费者沉迷于数据,而且更多的是实时数据。”IDC 表示,他们希望无论身在何处,都能通过任何联网设备全天候访问服务和产品。
与此同时,世界各地的企业都在忙于利用数据获得竞争优势,以改善客户体验,并提供与消费者的实时和不间断的个性化交互。
对于营销人员来说,继续将世界上忙着生成的大量数据转化为有意义和可操作的信息越来越具有挑战性。
来自任何地方和任何地方的数据都很繁忙。首席营销官正在努力继续从来自智能设备、计算机网络、物联网(IoT)和数据丰富的用户生成内容(包括文本和媒体,如照片和视频)的深不可测的数据海洋中寻找意义和新兴趋势。
数据质量差
不幸的是,全世界每天产生的海量数据中,只有一小部分可供分析。IDC 估计这一数字低至 23%。为了让数据带来真正的商业智能优势,数据需要经过验证、完整、干净和可信,这只是其中几个关键要求。当然,在分析之前需要大量的资源和时间来准备数据。
数据隐私和安全
近年来,未经授权使用个人信息和公司数据安全漏洞一直是全球关注的焦点。在这方面,许多大公司也面临着巨额罚款。
CMO 需要不断获得访问和使用各种数据集的许可。他们还有责任确保数据得到安全处理和合法应用。
随着全球数据的大规模增长,责任越来越大。严格和严格的法规也在不断涌现,例如,2018 年生效的欧盟通用数据保护法规(GDPR)。
CMOs 正在追随哪些最新的商业智能趋势?
可以想象,在一个数据通常被称为保持经济运行的“新石油”的现代世界中,有太多的分析机制、策略和方法被商业界用来尝试和理解这一切。
一份名为“2020 年顶级商业智能趋势:2,865 名商业智能专业人士的真实想法”的调查报告列出了 20 种商业智能解决方案,这些解决方案是公司普遍采用的,旨在最终从其库中的海量数据中获取可操作的信息。将范围缩小到营销领域,两个 BI 未来趋势——即预测分析和人工智能(AI)——是如此明显的领导者,以至于其他人相形见绌。
预测分析
预测分析是高级分析的一个分支,它从现有数据中识别模式,并在此基础上做出预测。虽然预测分析是一种在几乎所有可以想象的商业活动中“绘制未来”的流行方式,但营销人员使用它来推测他们自己空间中未来事件的概率和潜在美元价值。一些预测分析示例如下:
- 未来的客户价值。
- 客户成功预测。
- 防止合同终止。
- 潜在的新业务。
- 销售预测。
预测分析绝不是一种新兴趋势。这是一种久经考验、广受欢迎的 BI 方法,稳定且独立于“炒作和 FOMO ”,后者在当今的颠覆性创新环境中司空见惯。
人工智能(AI)和机器学习(ML)
AI 和 ML 无疑是节目的明星!2020 年 2 月,杜克大学教授 Christine Moorman 写道,“营销领导者报告称,他们的工具包中人工智能和机器学习的使用比 2018 年增加了 27%,并预计这一水平在三年内将再增加 60%。对于较大的公司和通过互联网销售比例较大的公司,这些比率甚至更高。”
摩尔曼教授列举了人工智能在营销人员中的三大应用&
- 内容个性化——得益于人工智能对客户的透彻理解,它可以帮助营销人员评估个性化内容的“正确”数据。埃森哲的统计和研究表明,被误导的个性化会导致客户沮丧甚至不信任。导致仅 2017 年就有 41%的客户换公司!
- 客户洞察——以人工智能为中心的客户洞察不仅可以帮助营销人员获得正确的内容,还可以帮助他们选择合适的时间和交付渠道。通过这种方式,公司可以在最佳时间向合适的客户提供合适的产品。通过把事情做好,它提高了客户忠诚度、保留率和获得率。
- 目标决策-通过智能地细分客户和市场,人工智能帮助营销人员优化广告目标,并更有效地管理活动,以提高市场渗透率。
进一步的关键人工智能趋势是客户细分、程序化广告和媒体购买、通过优化营销内容和时机来提高营销 ROI,以及用于客户服务的对话式人工智能。
而次要趋势包括次优产品、增强和虚拟现实、自主对象/系统、面部识别和视觉搜索以及生物识别/芯片。
人工智能是如此有效和受欢迎的方法,因为:
- 可以在更短的时间内分析巨大的数据集。
- 它还通过挖掘非结构化数据来专业地检测趋势。
- 即使是大规模的个性化也毫不费力。
- 可以在非结构化数据中找到主要影响因素。
- 可以挖掘不明确和不集中的数据来确定竞争分析,并确定 KPI 和各种营销见解。
- 它通过处理未准备好的数据来进行机器学习(ML)。因此,你用得越多,人工智能就变得越“聪明”越“好”!
人工智能也是首席营销官和其他企业高管的最爱,因为它使营销结果可以衡量!通过使用营销分析和数据,AI 可以将实际财务结果与营销 KPI 和业务目标进行比较,从而为业务领导者提供宝贵和可操作的指标。
结论
在这个世界上,90%的现有数据都是在过去两年中创建的,试图理解这些数据绝非易事!面对从四面八方源源不断而来的海量数据,营销人员很难从中获取有意义且可操作的信息。
此外,传统上,数据需要经过充分的准备才能得到有效利用。因此,毫不奇怪,很大一部分营销专业人员没有充分利用商业智能的优势。
然而,随着 AI 和 ML 等革命性和受欢迎的新兴 BI 市场趋势解决了许多历史性的行业难题,预计在未来三年内,接受率将飙升 60%!
原文内容由: 纳布勒
机器学习中的偏差和方差
成功的关键是找到偏差和方差之间的平衡。
照片由 Unsplash 上的 Aziz Acharki 拍摄
在预测分析中,我们建立机器学习模型,对新的、以前从未见过的样本进行预测。整个目的就是能够预测未知。但是模型不能凭空做出预测。我们向模型展示一些样本并训练它。然后,我们期望模型对来自相同分布的样本进行预测。
完美的模型是不存在的,所以我们建立和训练的模型会有错误。预测值和实际值之间会有差异。模型的性能与实际值和预测值之间的差异成反比。差异越小,模型越好。我们的目标是尽量减少误差。我们不能消除错误,但我们可以减少它。可以减小的误差部分有两个分量:偏差和方差。
模型的性能取决于偏差和方差之间的平衡。最佳模式介于两者之间。请注意,偏差和方差之间总是有一个权衡。挑战在于找到正确的平衡。
什么是偏差和方差?
当我们试图用一个简单得多的模型来近似一个复杂的关系时,就会出现偏差。我认为它是一个懒惰的模型。考虑一种情况,其中自变量(特征)和因变量(目标)之间的关系非常复杂并且是非线性的。但是,我们尝试使用线性回归建立一个模型。在这种情况下,即使我们有数百万个训练样本,我们也无法建立准确的模型。通过使用简单的模型,我们限制了性能。不能反映特征和目标之间的真实关系。
具有高偏差的模型不能够捕捉重要的关系。因此,训练集和集合集的精度都将非常低。这种情况也被称为欠配合。具有高偏差的模型倾向于欠拟合。考虑下面的散点图,它显示了一个特征和一个目标变量之间的关系。如果我们使用红线作为模型来预测蓝色数据点所描述的关系,那么我们的模型就有很大的偏差,最终会使数据拟合不足。
高偏置,欠拟合
方差发生在模型对自变量(特征)的变化高度敏感的时候。该模型试图选取关于特征和目标之间关系的每个细节。它甚至学习数据中可能随机出现的噪声。特征中非常小的变化可能会改变模型的预测。因此,我们最终得到了一个模型,它捕获了训练集的每一个细节,因此训练集的准确性将非常高。然而,新的、以前未见过的样本的准确性不会很好,因为特征中总是存在不同的变化。这种情况也被称为过拟合。该模型过度适应训练数据,但未能很好地概括数据集内的实际关系。模型实际看到的样本的精度将非常高,但是新样本的精度将非常低。考虑我们之前讨论过的同一个例子。如果我们试图用下图中的红色曲线来模拟这种关系,模型会过度拟合。如你所见,它非常敏感,试图捕捉每一个变化。
高方差,过度拟合
所以高偏差和高方差都不好。完美的模型是低偏差和低方差的模型。然而,完美的模型很难找到,如果可能的话。偏差和方差之间有一个权衡。我们应该力求在它们之间找到恰当的平衡。作为一名机器学习工程师,成功的关键是掌握在偏差和方差之间找到正确的平衡。对于我们的情况,一个更好的模型应该是这样的:
非常合适
感谢您的阅读。如果您有任何反馈,请告诉我。
媒体混合模型中付费搜索的偏差修正:论文综述
这篇文章提供了“媒体混合建模中付费搜索的偏差纠正”的高级概述,提供了关键概念的代码和实现。
媒体组合建模中付费搜索的偏差修正: 链接论文
媒体组合建模试图仅基于观察数据来估计媒体支出对销售的因果影响。众所周知,从观测数据中估计因果关系充满了挑战。
随着时间的推移,出现了两种主要的、互补的框架来处理因果推理。
- 鲁宾的潜在结果框架。
- Pearl 的图形框架。
本文探讨了使用 Pearl 的图形框架来控制媒体组合建模中的选择偏差,特别是在付费搜索广告中。
问题设置
假设我们的目标是测量搜索广告(PPC)对销售的因果影响。在一个简单的回归模型中,我们可以回归销售支出并得出一个因果估计值:
销售额=平均值 _ 销售额+roas _ 估计值 *搜索 _ 花费+误差
我们可以用普通的最小二乘法(OLS)来拟合上面的模型,在一个简单的世界中,这将产生对 roa 的精确估计。不幸的是,世界并非如此简单,我们知道经常会有令人困惑的变量。例如,我们知道有机搜索也是销售的驱动力,有机搜索和付费搜索都有一个潜在的原因,即消费者需求。下图说明了这一点。
以上,我们可以看到经济因素如何驱动消费者需求,进而驱动搜索查询,进而驱动付费搜索和有机搜索。
当我们使用上面定义的简单模型来模拟更复杂的世界时,我们会遇到选择偏差或更广泛的内生性问题。
**内生性:**是计量经济学中使用的术语,指与误差项相关的解释变量。
简而言之,我们的模型捕捉或吸收了有机搜索在误差项和 ROAS 估计中的解释价值,从而产生有偏差的 ROAS 估计。
为了控制这一点,本文建议使用珀尔的后门标准。Pearl 的后门标准是基于使用图形模型来描述因果关系的思想。图形模型是有用的,因为它们允许我们结合领域知识和来自图论的思想。
其中一个想法就是分离。
D-separation 是 directed-separation 的缩写,它允许我们在一个图中的两个节点被一组第三节点分隔(或有条件地相互独立)时进行通信。
例如,在下图中,给定 x1 和 x2,我们可以说 Z 与 Y 是 d 分离的,或条件独立的。
另一个重要的想法是后门标准。
**后门准则:**给定一个因果图,一组变量 Z 相对于图中一个有序的变量对(X,Y)满足
后门准则,如果:1)Z 中没有一个节点是 X 的后代;以及 2) Z“阻塞”X 和 Y 之间包含指向 X 的箭头的每条路径
此外,如果一组节点 Z 满足有向对的后门准则(X →Y ),那么在给定足够大的数据集的情况下,我们可以揭示 X 对 Y 的无偏估计。这也被定义为可识别性。
为了让自己熟悉后门标准的概念,我建议尝试下面的代码片段(尝试创建各种图形,并确定哪些节点将满足后门标准)并探索其他资源。
from causalgraphicalmodels import CausalGraphicalModelsimple = CausalGraphicalModel(
nodes=["x1", 'x2', 'z', 'y'],
edges=[
("z", "x1"),
("z", "x2"),
("x1", "y"),
("x2", "y"),
]
)simple.draw()simple.is_valid_backdoor_adjustment_set("x1", "y", {"z"})
申请搜索
现在,我们已经探索了一些与因果图模型相关的基本概念,我们可以看到它们是如何应用于恢复付费搜索的无偏 ROAS 估计的。首先,本文阐述了环境的因果结构。(见下图)
上图表明我们将影响建模为:
sales = average _ sales+roas _ estimate* search _ spend+error _ 0+error _ 1
其中 error_0 和 error_1 分别吸收了消费者需求和有机搜索的影响。
基于我们对图形模型的了解,我们现在知道,如果我们可以恢复搜索查询的度量,我们就可以满足(搜索广告 X →销售)的后门标准。为了测试这一点,我们可以使用一个叫做因果图模型的便利包。
from causalgraphicalmodels import CausalGraphicalModelsearch = CausalGraphicalModel(
nodes=["economic_factors", "consumer_demand", "search_queriers", "auction", "organic_search", "paid_search", 'organic_search', 'sales'],
edges=[
("economic_factors", "consumer_demand"),
("consumer_demand", "sales"),
("consumer_demand", "search_q"),
("search_q", "auction"),
("auction", "paid_search"),
("search_q", "paid_search"),
("search_q", "organic_search"),
("organic_search", "sales"),
("paid_search", "sales"),
]
)search.is_valid_backdoor_adjustment_set("paid_search", "sales", {"search_q"})# output is True
在上面的代码中,我们定义了因果图模型(DAG ),并测试我们的控制变量是否满足后门标准(payed _ search→sales)。
接下来,我们生成样本数据,运行 OLS 回归来比较满足和不满足后门标准时的估计值。
from causalgraphicalmodels import StructuralCausalModel
from causalgraphicalmodels import CausalGraphicalModel
import numpy as np# create structural causal model. This let's us generate data. search_data = StructuralCausalModel({
"consumer_demand": lambda n_samples: np.random.normal(100,5, size=n_samples) ,
"search_q": lambda consumer_demand, n_samples: np.random.normal(consumer_demand*.3, 1, n_samples) ,
"organic_search": lambda search_q, n_samples: np.random.normal(search_q*.6, 1) ,
"paid_search": lambda search_q, n_samples: np.random.normal(search_q*.1, 1) ,
"sales": lambda organic_search, paid_search, n_samples: np.random.normal(75 + organic_search*.2 + paid_search*.3, 1 )
})data = search_data.sample(156)# run OLS without backdoor criterion satisfied for paid search --> salesX = data[['paid_search' ]].values
X = sm.add_constant(X)results = sm.OLS(data.sales.values, X).fit()print(results.summary())# run OLS without backdoor criterion satisfied for paid search --> salesX = data[['paid_search' ]].values
X = sm.add_constant(X)results = sm.OLS(data.sales.values, X).fit()print(results.summary())# with backdoor criterion satisfied X = data[['paid_search', 'search_q']].values
X = sm.add_constant(X)results = sm.OLS(data.sales.values, X).fit()print(results.summary())
得出以下 ROAS 估计值:
正如我们所看到的,两种估计都捕捉到了真实的参数,无偏估计(满足后门标准)更接近真实的估计。
现在,您可能已经注意到,在代码示例中,我们只采样了 156 个数据点,这相当于三年的每周 MMM 数据。这并不是大量的数据,也提出了一个重要的问题,即我们如何知道我们的样本量何时足够?
该论文提出,当样本量足够大以允许非参数估计时,这种担心可以得到缓解,然而大样本量在 MMM 建模中并不常见。
为了进一步探索这一点,我制作了下图,展示了在样本量越来越大的情况下,ROAS 估计值和置信区间是如何变化的。
正如我们所见,无偏估计量收敛于真实参数,而有偏估计量过于乐观。此外,上图强调了小样本量如何产生非常大的置信区间。如果样本量很小,需要注意一些事情。
至此,我们已经完成了论文理论部分的主要内容,并涵盖了:
- 付费搜索中的选择偏差与 MMM 建模
- 因果图形模型/珍珠框架
- 如何应用于简单的付费搜索场景
- 如何模拟数据和实现模型
- 一些需要注意的“陷阱”
本白皮书更详细地介绍了这里涉及的主题,并继续介绍:
- 复杂场景
- 履行
- 实证结果
我强烈推荐感兴趣的读者查看全文以了解更多细节。
偏见悄悄进入技术领域
我们无法避免将我们自己的观点带到我们构建的产品中
编写计算机代码——图片来自 Pixabay 的免费照片
大多数开发技术的人都不想有偏见。然而,我们对世界都有自己独特的视角,我们忍不住会将这种视角带入到我们的工作中。我们根据自己的观点和经验做出决定。这些决定可能看起来都很小,但是它们会累积起来。因此,技术往往反映了它的创造者的观点。
这里是我见过的偏见渗入技术的几个地方。
我们构建的数据集
随着机器学习(ML)和人工智能算法最近的成功,数据变得越来越重要。ML 算法从数据集学习它们的行为。这些数据集中包含的内容变得非常重要,因为它会直接影响产品的性能。
以自然语言理解领域(NLU)为例,大型预训练模型最近开始流行。预先训练的模型建立起来很昂贵,但是一旦建立起来,它们可以被不同的人在不同的任务中重用。 BERT 是使用最广泛的预训练模型之一,它是根据维基百科文本构建的。维基百科作为数据来源也有自己的问题。在网站上的人物传记中,只有 18%是女性而绝大多数内容是由欧洲和北美的编辑撰写的。在维基百科中产生的偏见被 BERT 模型学习并传播。
在另一个领域,计算机视觉,数据集在组成上同样存在问题。一类数据集是面部数据集,面部识别系统就是从这些数据集中训练出来的。他们通常是压倒性的白人,在两个流行的数据集中,分别有 79.6%和 86.2%的人肤色较浅。像这样的数据集导致 ML 模型对于深色皮肤的人表现不佳。
我们决定解决还是不解决的问题
在 CogX ,我主持了一场会议,会上海蒂·克里斯滕森博士讲述了她为那些患有言语障碍&临床语音障碍的人研究语音技术的工作。语音技术可能会对那些有语音障碍的人的生活产生巨大影响,因为影响他们声音的相同条件也会影响其他动作,使他们难以执行许多简单的任务。获得独立意味着更好的结果。然而,主流语音技术关注的是健康的说话者,而不是那些说话方式不标准的人。
其他时候,任务的框架是有问题的,并且有延续刻板印象的风险。接性别分类的任务。我相信,把我识别为女性的系统不会带来任何好处。举例来说,我可能会看到低薪工作的广告或者被指向更贵的产品。
关于做什么工作的决定通常是由财务问题指导的——谁将资助一个产品,谁将付费使用它——但也包括那些建设的个人经验和引起他们共鸣的问题。
我们分配给任务的优先级
我身兼数职,但我的众多工作之一是对团队工作的技术任务进行优先排序。在一个理想的世界里,我们有足够的时间和金钱去做任何事情。但事实上,我们的时间有限。我们必须挑选工作内容。每个优先级的决定可能看起来很小,无关紧要,但它们加在一起会对产品的方向产生很大的影响。
这里有一个受真实事件启发的假设示例—在构建语音识别系统时,我们可能会努力构建一个平衡的训练集,但仍然会评估该系统,发现它对于特定的人口统计数据表现不佳。例如,我们的语音识别系统对英国人的表现可能更差,因为我们的一些发音和单词选择与系统预期的非常不同。现在,在花费团队的努力来调查并使系统对英国用户更可靠,与试验一种新的模型架构,看起来有希望使整个系统对每个人都有更好的表现之间,有一个选择。这个选择并不总是容易做出的。第二种选择可能最终也会提高英国用户的性能,但它不会解决这种不平衡。
我们听取的意见
我们倾听的人会影响我们的想法和我们对谁应该担任这些有影响力的职位的看法。
众所周知,科技公司的人口统计数据——远见者和决策者——在是倾斜的。在最高层,白人和亚裔男性占据了主导地位。除了科技之外,高层的构成也好不到哪里去。富时 100 指数的首席执行官中,叫史蒂夫的 T4 男性比少数族裔男性多,只有 6 名女性。不提拔更多的人进入这些行列,我们就没有听取他们的意见和观点。
2016 年的一项调查显示,英国媒体 94%是白人,女性薪酬明显低于男性。虽然传统媒体的构成有所扭曲,但社交媒体为许多未被充分代表的声音提供了一个平台。然而,即使是社交媒体也存在性别问题。最近的一项研究关注了学术医学领域,发现“女性学者在该平台上的 Twitter 关注者、喜欢者和转发者也比男性同行少得多,无论她们的 Twitter 活动水平或专业级别如何”。
我们通过自我评估的指标
我们经常通过平均错误率来评估最大似然系统。计算这一点并在不同系统间进行比较很容易。也许有 100 个人使用我们的系统,每个人都有 95%的错误率。对于大多数系统来说,这是完全可用的。相反,假设这些用户中的 90 个具有 98%的错误率,10 个具有 68%的错误率。现在,这两组之间有很大的差异,但平均错误率仍然是 95%。发现错误率为 68%的用户可能会发现系统不可用,但这并没有显示在平均指标中。如果不衡量不同人群的表现,我们就无法发现我们建立的模型中的偏差。
在其他产品中,我们测量并优化参与度——一篇帖子的点击数&赞数,或在网站上停留的时间。但是,参与可能不是用户福祉的最佳衡量标准。参与不仅可以由喜欢某人的页面或帖子引起,也可以由对内容的失望引起。据显示,标题中较高的情感水平会让读者更有可能点击,但也会分化观点并导致回音室,随着时间的推移会强化极端观点,而不是挑战它们。
我们对顾客的看法
我怀孕的时候,我的任天堂 Wii 痛斥我长胖了。没有办法告诉它我的体重增加只是暂时的,最终我把它扔进了垃圾箱。我们设计系统,想象我们的客户将如何使用它们。但是,客户在某些方面与我们不同,这是我们无法预料的。任天堂 Wii 的设计者似乎没有预料到用户可能会经历怀孕。任天堂 Wii 是我可以停止使用的东西,但怀孕歧视是一个非常现实的问题。
另一次,我在一个关于家庭安全系统的演讲的接收端,连接到云上。当你不在家时,你不仅可以在线查看录像,还可以随时查看谁在房子里,并在特定事件发生时发出警报。设计这个的团队想象他们的用户和他们一样——骄傲的父亲和慈爱的丈夫,他们只是想做好保护家庭安全的工作。但是,技术也以新的方式使滥用成为可能。设计师没有想到他们的一些客户可能会以不同的意图利用这样的家庭安全系统,所以安全是事后才想到的。
我们对客户的看法可能会限制我们为他们构建的东西,通常是在我们有盲点的领域,并强化我们持有的偏见。
我们选择的商业模式
在科技行业,许多工程类工作报酬丰厚且有保障。相比之下,数据注释员、司机和内容管理员等低收入、不稳定的工作,许多科技公司没有这些工作就无法运营。对这些角色的依赖对许多科技公司的商业模式至关重要,这些员工的人口统计数据与工程人员非常不同。
最近一项关于打车公司算法定价的研究发现,种族、教育和年龄等因素都会影响乘车价格,尽管这些因素并不是模型的明确组成部分。这是因为它们与模型考虑的因素相关,如位置。
另一种常见的商业模式依赖于免费提供服务,并从广告中获得收入。这是一把双刃剑。一方面,免费提供产品扩大了产品的覆盖范围,让原本可能买不起的人也能使用它们。另一方面,伴随这种商业模式而来的定向广告是偏见被强化的另一种方式,例如允许广告针对种族和性别。
技术对世界产生了巨大的影响。但是这个世界是有偏见的,我们这些创造技术的人有我们甚至不知道的盲点。即使有最好的意图,也很难将偏见排除在我们构建的产品之外。
你可以雇佣我!如果我能帮助你的组织使用 AI &机器学习,请 取得联系 。
人工智能中的偏见:远不止是一个数据问题
虽然数据偏差是人工智能不公平的一个众所周知的原因,但它绝对不是唯一的原因。
奥巴马被人工智能上采样为白人,最初作为这条推文的一部分发表:https://twitter.com/Chicken3gg/status/1274314622447820801?s=20
在过去的几天里,人工智能社区中有很多关于偏见的讨论,特别是在 Y ann LeCun 在这条推文之后加入了对话之后:
关于 PULSE 偏差的原始推文,一种新的照片上采样算法
PULSE 是创建这张图像的算法,它通过使用自我监督训练来搜索使用 GAN 生成的高分辨率人工图像的空间,并识别那些缩小到低分辨率图像的图像。该算法很快发现了一个偏差问题:给定著名非白人的下采样(但仍然非常容易识别)图像,该算法仍然对它们进行上采样,以产生白人输出。这是另一个明显的例子:
原始 AOC 照片,降采样图像和脉冲输出。
Lecun 回复了那条推文,声称 ML 系统因为数据的质量而存在偏见。
Yann Lecun 建立了数据偏差和人工智能偏差之间的关系
部分人工智能社区对这条推文做出了反应,声称 Lecun 的声明暗示 ML 系统只有在数据有偏差的情况下才会有偏差。参与对话的最活跃的专家之一是谷歌道德人工智能团队的技术联合负责人 Timnit Gebru。
Timnit Gebru 对 Yann Leccun 推文的回应
我必须承认,跟随那次谈话让我获得了许多关于人工智能伦理主题的有趣资源,尤其是偏见。让我与你分享一些我发现的最有趣的例子:
- 计算机视觉中的公平、问责、透明和道德 作者蒂姆尼特·格布鲁和艾米丽·丹顿。在当前背景下,特别适用于将视觉计算用于监控目的。
- 我们的数据体项目 :一个非常小的团体,致力于了解“政府和企业如何收集、存储和共享社区的数字信息”,特别是在边缘化的社区。
- fast.ai 艾伦理资源 ,由瑞秋托马斯编译。一组非常有趣的视频、链接和对人工智能伦理专家和机构的介绍,值得关注。
- 关于 AI 系统的政治设计 ,一篇很有意思的文章,揭穿了 AI 偏差只是由有偏差的数据造成的观点。
我在迈向数据科学中的一篇名为“计算机说不”的短文包括了我们在当前公司使用的处理人工智能伦理的框架的高级视图。正如你所看到的,通过人工智能实现真正积极的社会影响和公平有很多需要考虑的问题。
艾弗里斯人工智能伦理框架,版权所有。
我真的很高兴成为新的斯普林格人工智能和伦理杂志的创始编委会成员,在这本杂志中,我将有幸与一个了不起的专家小组一起详细探讨这个话题。
你有任何你认为与人工智能伦理高度相关的资源吗?我将非常乐意与您合作,定期更新这篇文章。
如果你喜欢读这篇文章,请 考虑成为会员 以便在支持我和媒体上的其他作者的同时,获得每个故事的全部信息。
人工智能中的偏见
大数据时代的不平等、种族主义和歧视
人工智能和机器学习都很牛逼。它们让我们的手机助手能够理解我们的声音,并为我们预订优步。人工智能和机器学习系统在亚马逊为我们推荐书籍,类似于我们过去喜欢的书籍。他们甚至可能让我们在约会应用程序中有一个惊人的匹配,并遇到我们生命中的爱。
所有这些都是人工智能的酷但潜在无害的应用:如果你的语音助手不理解你,你可以打开优步应用程序,自己订购一辆汽车。如果亚马逊向你推荐一本你可能不喜欢的书,一点点研究就能让你抛弃它。如果一个应用程序带你去和一个不适合你的人相亲,你甚至可能会和一个性格令人困惑的人度过一段美好的时光。
然而,当人工智能被用于更严重的任务时,如过滤求职者,发放贷款,接受或拒绝保险请求,甚至用于医疗诊断,事情就变得很糟糕。所有以前的决定,部分由人工智能系统辅助或完全由人工智能系统处理,可以对某人的生活产生巨大的影响。
对于这些类型的任务,必须有争议地研究输入机器学习系统的数据,这些系统是人工智能应用的核心,试图避免使用信息代理:用来替代另一个对某项任务来说更合法和精确但不可用的数据的数据片段。
让我们来看看由机器学习系统自动处理的汽车保险请求的例子:如果在模型中使用邮政编码而不是纯粹的驾驶和支付指标作为变量,生活在贫困和不受重视地区的优秀司机可能会拒绝汽车保险请求。
除了这些代理之外,人工智能系统还依赖于以另一种方式训练它们的数据:在人口的非代表性样本中进行训练,或者对被贴上某种偏见标签的数据进行训练,都会在最终的系统中产生相同的偏见。
我们来看一些源于 AI 的偏差的例子。
Tay:令人不快的推特机器人
tay(Thinking you)是一款 Twitter 人工智能聊天机器人,旨在模仿一名 19 岁美国女孩的语言模式。它是由微软在 2016 年开发的,用户名为 TayandYou ,被放在平台上的目的是与其他用户进行对话,甚至从互联网上传图像和迷因。
在 16 个小时和 96000 条推文之后,它不得不被关闭,因为它开始发布煽动性和攻击性的推文,尽管已经被硬编码为避免某些主题的列表。因为机器人从它的对话中学习,当与之互动的用户开始在推特上发布政治上不正确的短语时,机器人学习这些模式,并开始发布关于某些主题的冲突消息。
机器学习系统从它们看到的东西中学习,在这种情况下,Tay 采用的这种鹦鹉学舌的行为给微软带来了巨大的公开耻辱,以这封信结束,因为他们的 19 岁女孩变成了新纳粹千禧聊天机器人。
在下面的链接中,你可以找到一些 Tay 推文的例子。
昨天,微软发布了 Tay,这是一个青少年对话的人工智能聊天机器人,旨在模仿用户并与用户实时交谈…
gizmodo.com](https://gizmodo.com/here-are-the-microsoft-twitter-bot-s-craziest-racist-ra-1766820160)
现在,想象一下,如果像这样的聊天机器人不是用于社交网络,而是被用作虚拟心理学家或类似的东西。或者想象一下,机器人开始针对社交媒体中的特定人群进行攻击。对它说话的人可能会受重伤。
谷歌的种族主义图片应用
另一家大型科技公司,这次是谷歌,也有一些关于偏见和种族主义的问题。2015 年,谷歌照片中谷歌图像识别的一些用户收到了应用程序将黑人识别为大猩猩的结果。谷歌为此道歉,并表示图像识别技术仍处于早期阶段,但他们会解决这个问题。你可以在下面的链接中读到所有相关内容。
[## 谷歌通过从其图像标签技术中移除大猩猩来“修复”其种族主义算法
早在 2015 年,软件工程师 Jacky Alciné指出,谷歌照片中的图像识别算法是…
www.theverge.com](https://www.theverge.com/2018/1/12/16882408/google-racist-gorillas-photo-recognition-algorithm-ai)
如果像谷歌这样强大、技术先进的公司会有这种问题,想象一下成千上万的其他企业在没有这种专业知识的情况下创建人工智能软件和应用程序。这很好地提醒了我们,训练人工智能软件保持一致性和健壮性是多么困难。
然而,这不是谷歌在图像和人工智能方面的唯一问题。手持温度计枪已经在整个 COVID 疫情广泛使用,谷歌的云视觉软件(一种用于检测和分类图像中物体的服务)必须快速学习识别这种设备,以便使用包含很少图像的数据集对它们进行正确分类,因为这些设备尽管不是新设备,但最近才为公众所知。
图片来自来源。
上一张图片显示了当一个黑皮肤的人拿着一支温度计枪时,它是如何被归类为枪的,而当一个浅棕色皮肤的人拿着它时,它又是如何被归类为单筒望远镜的。谷歌产品战略和运营总监特雷西·弗雷(Tracy Frey)在这起病毒事件后写道:
“这个结果是不可接受的。认识到这一结果与种族主义之间的联系很重要,我们对这可能造成的任何伤害深感抱歉。”
谷歌解决这一问题的方式是改变云视觉返回枪支或火器所需的置信概率(上图中出现的 61%),然而,这只是人工智能模型结果显示的变化,而不是模型本身,这再次凸显了在许多情况下让这些系统正常运行的困难,特别是在数据很少的情况下。
如果像这样的系统被用来在街上使用监控摄像头定位潜在的有害或可疑的个人,会怎么样?无辜的人可能仅仅因为他们的肤色而成为危险的目标。
最新有偏见的 AI 新闻:
最近,世界上一些顶级人工智能研究人员之间围绕人工智能偏见的话题进行了很多讨论,这些讨论源于论文 “脉冲:通过生成模型的潜在空间探索进行自我监督的照片上采样” 。这个模型使用人工智能将低分辨率图像转换为更高分辨率的图像,如下面的推文所示。
这条推文附有一个谷歌 Colab 笔记本(一个编程环境)的链接,任何人都可以在那里运行代码,并使用不同的图像尝试该模型。这很快导致人们发现 PULSE 似乎偏向于输出白人的图像,让一个具体的用户用巴拉克·奥巴马的像素化图像来响应前一个用户,这被重建成一个白人的图像。
这篇论文的作者对此做出了回应,在论文中增加了一个偏见部分,并包括一个模型卡:一个阐明模型细节的文件,它的目的,用于评估它的指标,训练它的数据,以及不同种族的结果分类,以及一些道德考虑。我认为在构建机器学习模型时创建这种文档是一种很好的实践,应该更频繁地进行。
您可以在下面的链接中找到关于这个主题的讨论和更多信息。
在这篇文章中,我将试图总结最近在人工智能研究者中发生的讨论的一些内容,作为…
thegradient.pub](https://thegradient.pub/pulse-lessons/?utm_campaign=The%20Batch&utm_medium=email&_hsmi=91009266&_hsenc=p2ANqtz-_IIn_r2KtiZQpf3OGgusrmLPCXxkBLdSy-fSEayQeQKgQ-srfey1xs-kuatrzTwvSN-1SZJhWaASQg0Jd0hBiSatpwsw&utm_content=91009266&utm_source=hs_email)
人工智能偏见的其他例子
除了这些在媒体上引起共鸣的案例之外,还有许多其他不太为人所知的案例,这些案例中的模特也有类似的歧视味道。可以为每一个写一节,但是这里我们将简要地提及它们,如果需要的话,允许读者进一步研究。
- 与男性相比,女性不太可能在谷歌上看到高薪工作的广告。为显示这些而建立的模型增加了个人信息、浏览历史和互联网活动等二手信息。 链接 。
- 算法陪审团:使用人工智能预测累犯率 s .一个用于预测个人在被释放后是否会再次犯罪的预测模型(因此用于延长或减少个人的监禁时间)显示了种族偏见,对黑人比对白人更严厉。 链接 。
- **优步的 Greyball:逃避世界各地的当局:**从优步应用程序收集的数据被用来逃避当地当局,他们试图在法律不允许该服务的国家取缔他们的骑手。这本身并不是偏见的例子,但它将重点放在人工智能可以做什么来歧视某些用户(在这种情况下是警察),以及它如何被用于自私的利益。 链接 。
- 最后,对人工智能来说,并不是所有的都是坏消息。以下链接展示了人工智能系统如何减少大学招聘应用中的偏见: 链接 。
对于这一切,我们能做些什么?
我们已经看到了如果人工智能系统开始显示种族、性别或任何其他类型的偏见会发生什么,但是,我们能做些什么呢?
为了规范这些数学模型,第一步必须从建模者本身开始。当创建这些模型时,设计者应该尽量避免使用过于复杂的数学工具,以免混淆模型的简单性和可解释性。他们应该非常仔细地研究用于构建这些模型的数据,并尽量避免使用危险的代理。
此外,他们应该始终考虑模型的最终目标:让人们的生活更轻松,为社区提供价值,提高我们的整体生活质量,通过商业或学术界,而不是专注于机器学习指标,如准确性或均方差。此外,如果模型是为一个特定的业务建立的,另一个通常的成功标准可能必须放在第二个平面上:经济利润。除了这一利润之外,模型在决策方面的结果也应该被检查:按照我们的保险例子,模型的创建者应该看看谁被拒绝,并试图理解为什么。
随着我们进入一个更加数据驱动的世界,政府可能需要介入,为人工智能模型在金融、保险、医药和教育等特定领域的使用提供公平透明的监管。所有这些都是任何个人生活的基本部分,应该非常小心地对待。
作为人工智能从业者,创建系统的人有责任重新审视他们收集和使用数据的方式。最近的提议为记录模型和数据集设定了标准,以在有害偏见扎根之前将其剔除,使用之前提到的模型卡和类似的数据集系统:数据表。
除此之外,我们应该尝试建立非黑盒的、可解释的模型,审计这些模型,并仔细跟踪它们的结果,花时间手工分析一些结果。
最后,我们可以教育更广泛的社区和公众如何使用数据,可以用它做什么,它会如何影响他们,并让他们透明地知道他们何时被人工智能模型评估。
结论和额外资源
就是这样!一如既往,我希望你喜欢这篇文章,并且我设法帮助你了解更多关于人工智能中的偏见,它的原因,影响,以及我们如何与之斗争。
如果您想了解有关该主题的更多信息,您可以在这里找到一些附加资源:
- 解决人工智能和自动化中的性别偏见。
- AI 注定是种族主义者和性别歧视者吗?
- 人工智能和偏见——IBM 研究
- 数学毁灭的武器:大数据如何增加不平等并威胁民主,作者凯茜·奥尼尔。
如果你想了解更多关于机器学习和人工智能的知识 关注我上媒 ,敬请关注我的下期帖子!另外,你可以查看 这个资源库 来获得更多关于机器学习和人工智能的资源!
- 封面图片来自。
- 图标来自 平面图标 。
- 所有其他图像都是自己制作的。
机器学习项目中的偏见
我们应该害怕机器学习模型做出的自动化决策不公平吗?
(图片由 Unsplash 上的 Deon Black 拍摄)
引言。
我正在准备一场网上研讨会,在脑海中浮现的众多不同主题中,我在思考哪些主题可能会让我感兴趣。
我认为要成功实现一个机器学习项目,一个人应该真正意识到什么是陷阱,什么是要点,在项目过程中,哪里会犯重要的错误。
一个关注的领域肯定是关于偏差的**。为此,我决定投入一些时间,准备以下笔记。**
什么是偏见,为什么它很重要?
好吧,先说定义。而我会拿一个来自维基百科:偏见是一个不成比例的权重赞成或反对一个想法或事情,通常是以思想封闭、偏见或不公平的方式。…人们可能会对某个人、某个团体或某个信仰产生偏见。在科学和工程领域,偏见是一种系统误差。
因此,我们可以从说偏差是我们的机器学习 (ML)模型中的系统误差开始。
当我们开发一个监督模型时(现在,让我们限制我们对这种类型模型的讨论),给定一组输入 X = (x1,… xn)我们希望能够预测相关 y 的最可能值。我们认为在 X 和 y 之间存在有意义的关系
y = f(X)
我们想要训练一个模型,从一大组例子开始,其中对于每个样本,我们给出输入值(X)和相应的期望值 y。
该模型使用一些非常通用的算法(例如神经网络),但它从训练期间使用的数据中学习所有知识。
通常,在模型的开发过程中,可用数据的一部分被分离出来(保留)用于验证模型。在这个阶段,人们通常想要验证模型是否已经学习了可概括的知识。换句话说,如果它在训练阶段对看不见的数据表现良好。但是,在准备将该模型用于生产之前,在真实世界的数据上,应该进行许多测试来验证该模型是正确的。
我们可能会发现,我们的模型倾向于以系统和不合理的方式对一些样本(可能与人相关)给出有利的预测,而对其他样本给出不太有利的预测。如果我们在生产中使用模型之前发现了这个问题,那就太好了。
一个例子:让我们想象我们已经开发了一个深度学习模型,可以帮助我们诊断黑色素瘤,使用一部分皮肤的图片作为输入。
基于我们的验证集,看起来我们的模型有很好的准确性(90%?),但后来我们开始了一项实地评估研究,我们发现这个模型对深色皮肤的人不太适用。系统地说,这类人群的错误率更高。我们在模型中发现了一个偏差。
毫无疑问,这是我们在某个地方犯的一个错误。但这是一个系统性的错误,而不是随机产生的错误。
我们仔细分析了数据收集过程,发现我们的数据集包含更高比例的皮肤白皙的人。很简单,因为众所周知,这些人暴露在阳光下的风险更高(这是风险因素之一)。添加更多来自深色皮肤人群的病变样本有助于提高该亚人群的准确性,并减少我们模型中的偏差。
这与道德规范,与我们认为的公平或不公平有必然联系吗?
这可能是我们想要回答的一个大问题。但这不是唯一的一个。现在,我们可以说是和不是。
让我试着表达我的第一个想法:每次我们制定一个规则,以某种方式区别对待几组人,我们应该问自己这是否公平。答案并不容易,因为对于什么是公平的,什么是不公平的,并没有一个普遍接受的定义。
公平是无法用数学来衡量的(这并不意味着我们不应该提出这个问题,这意味着答案并不容易)。
但是,这里的问题总是看起来更大,因为我们有一种祖传的恐惧,即计算机迟早会代替我们做决定。在故事的最后,ML 模型是做决策的东西。
首先,ML 中偏差的不同来源。
正如在每个科学领域一样,在得出任何结论之前,我们应该收集所有相关的信息(在这个过程中,我们应该不带偏见!).
所以,我们首先应该试着理解偏见从何而来。
ML 模型的开发几乎总是一个漫长的过程,有一系列的步骤。让我们试着做一个总结:
- 模型应该回答的问题的定义。
- 数据来源的识别
- 数据收集
- 数据提取、转换
- 培训、验证和测试集的生成
- 定义我们想要采用的算法类型
- 算法的训练
- 对训练模型的评估
- 模型的部署
- 证明文件
- 随时监控模型的性能
嗯,大概这不是总结开发过程的唯一方式。但我认为这是支持我们讨论的好理由。
当我们看上面详细描述的步骤时,我们应该想到在每一个步骤中我们都可能犯错误。而且,这些错误中的一些可能会使我们的模型对样本的一个或多个亚群体产生系统误差。
因此,没有任何故意的意图,我们可以在我们的模型中引入偏差。
偏见有哪些不同的类型?
正如我们所说,我们可以在 ML 模型开发的不同步骤中引入偏差,因此我们可以有不同类型的偏差。在识别模型中可能的偏差来源的过程中,进行分类有助于指导我们。
两位研究人员提出了一种有用的分类,在这篇文章中:“理解机器学习模型意外后果的框架”(h . Suresh,J. V. Guttag,麻省理工学院,2020 年 2 月)。
在文章中,他们确定了这六个类别:
- 历史偏见
- 表征偏差
- 测量偏差
- 聚集偏差
- 评估偏差
- 部署偏差
前三个涉及数据生成和收集。模型开发中的最后三个。
它们还提供了一个很好的图表,帮助我们将不同的类别与 ML 模型开发中的不同步骤联系起来:
(来源:H:苏雷什,J. V .古塔格,麻省理工学院,2020 年 2 月,https://arxiv.org/pdf/1901.10002.pdf)
我想对上面的图片补充一些考虑。
- 如你所见,我们有不同的,多种来源的偏见
- 还有其他引入偏差的方法:例如,当您在训练集和验证集之间拆分可用数据时,如果拆分不正确,您可能会最终在没有正确分布的集上评估和优化模型。或者,您可以从训练中“泄漏”一些信息到验证集,并测量您在现实中找不到的准确性
综上所述,我们必须仔细检查整个过程,以避免偏见。多重测试和测试越来越多的数据是有帮助的,正如我个人的建议,拥有一个拥有不同领域专业知识和背景的团队也是有帮助的。
反馈循环。
与偏差相关的另一个问题是,ML 模型会产生反馈回路。
什么是反馈回路?当模型错误地产生“下一代输入数据”,放大偏差,或模型本身产生的一些不正确的预测时,就会出现反馈回路。
让我们试着用一个(有点真实的)例子来解释:想象一下一群人要宣传一个“假理论”。他们制作了一个精美的视频来解释他们的理论。然后,他们在一个社交媒体上发布这个视频,推荐系统只基于用户的评分。这个组的所有人都给这个视频很高的评价。
推荐引擎基于这些评级,将开始向其他人推荐该视频,如果这些人给出更多积极的评级,就有可能开始一个积极的循环,越来越多的人将会看到该视频。
嗯,这个问题不是不真实的。例如,过去曾有文章暗示,YouTube引擎创造了这种东西。我们都知道关于其他社交媒体是否会导致假新闻或仇恨言论传播增加的争论。
一个例子来自《纽约时报》的文章:“(T12)YouTube 掀起了一股阴谋论热潮。能遏制吗?”。
在 arXiv 上可以找到一篇有趣的论文,标题为“推荐系统中的反馈回路和偏差放大”。在这种情况下,产生的偏差可以被称为“流行偏差”:该模型倾向于根据流行度而不是内在质量来推送项目,这种偏差可以通过诸如协作过滤等算法来放大,如本文中所分析的。
模型可解释性。
偏见难以识别的原因之一是有时 ML 模型被用作(神奇的)黑盒。你在验证和测试集上验证了模型有足够高的精度,这就可以了。然后,您忽略了您无法解释为什么模型产生一些预测而不是其他预测(例如,为什么模型决定向一个客户提供贷款是高风险的)。
这是有可能发生的,尤其是当你使用有许多层的大型神经网络时。
但是,即使解释起来很复杂,我们也不应该接受这样的情况。首先,因为这个模型存在一个真实的风险,它包含了错误和偏见。第二,因为如果模型的使用有社会后果,这是不可接受的。第三,因为题目上可能有一些规定。
ML 的一个活跃研究领域是模型可解释性,在过去的几年里,许多技术已经被开发出来,甚至可以用来支持复杂模型的解释。
从一般的观点来看,我们谈论:
- 一般可解释性,当我们想大体描述模型如何工作时;例如,什么是最重要的特性,什么不是那么重要
- 局部可解释性:我们想要解释为什么模型已经做了一个单一的、特定的预测(例如对一个病人)
一种用于解释甚至复杂的非线性模型的技术是 LiMe:局部可解释的模型不可知解释,其中我们用线性模型对模型进行局部近似(局部意味着:围绕特定样本),以识别特征变化对预测的影响。例如,请参见https://christophm . github . io/interpretable-ml-book/lime . html
最后一句话,对生活在欧盟的人来说很有趣:有些人倾向于错误地断言 GDPR 定义了“解释权”。这不是真的,这是一个不能简单裁定的问题。
总的来说,在 GDPR 有一篇文章(第 22 号)是关于完全自动化决策的可能性。如果满足三个条件,本条款适用:
- 有一个完全自动化的决策过程
- 该流程处理个人数据
- 它的目标是评估一个自然人的个人方面
在这种情况下,GDPR 禁止完全自动化的决策过程,如果它产生法律效力或如果它对用户的个性有重大影响。
这并不意味着你不能使用 ML 模型,但是,在上面描述的场景中,这个过程需要人工干预(决策过程不能完全由机器做出)。
此外,GDPR 并未规定“解释权”。试图向人们解释一个 ML 模型的内部运作是相当困难的,而且在大多数情况下可能是无效的。但它规定了“知情权”和“反对权”。
最后,如果我们在从事 ML 模型开发的人之间交谈,我们有知识和工具来理解为什么一个模型产生一些决策,因此我们不应该接受一个模型被用作“黑箱”,而不理解它如何工作。
结论。
现在你可能清楚地了解到,ML 模型中的偏倚风险是一个可以分析的问题,如果不消除,这个问题可以大大减少。
关于“自动化决策”模型的采用有很大的担忧,特别是因为大多数人不理解这些模型是如何工作的,他们担心这些决策有偏见和不公平的风险。
但是,我认为,首先,我们应该将偏差视为一种系统误差:作为数据科学家和 ML 工程师,我们应该尽力避免或减少这种误差。然后,我们不应该把一个模型当作一个“暗箱”,总是试图解释决策和结果,看看它们是否有意义。
显然,我们不应该忘记 ML 模型的结果会产生社会和伦理后果。
然而,这类问题不应阻止我们认真考虑采用人工智能可能带来的巨大好处,即使是在社会领域。
更多信息。
如果你想要更多的信息,我会推荐“参考”一节中列出的文章,我已经从中获取了一些信息和图片。
我极力推荐的一本书是参考文献中的那本。第 3 条。这本书的第 3 章由 R. Thomas 博士撰写,包含了对偏见、反馈循环和其他与数据伦理相关的主题的广泛研究。
参考文献。
[1]理解机器学习模型的意外后果的框架,H. Suresh,J. V. Guttag,麻省理工学院,【https://arxiv.org/pdf/1901.10002.pd】T2f
[2]m . Mansoury,H. Abdollahpouri,M. Pechenizkiy,B. Mobasher,R. Burke,https://arxiv . org/pdf/2007.13019 . pdf #:~:text = Recommendation % 20 algorithms % 20 are % 20 know n % 20 to,known % 20 as % 20a % 20 Feedback % 20 Loop。
[3]fastai & py torch、J. Howards 和 S. Gugger 合著的《程序员的深度学习》,O’Reilly,2020 年。
[4]可解释的机器学习,https://christophm.github.io/interpretable-ml-book/
原载于 2020 年 11 月 9 日https://luigisaeta . it。
自然语言处理中的偏见:一个危险但可以解决的问题
自然语言处理(NLP)模型面临的最大新问题之一是它们学习的隐含偏见。
自然语言处理(NLP)是机器学习研究的最大领域之一,尽管当前的语言机器学习模型在许多语言理解任务上实现了数值上的高性能,但它们通常缺乏减少隐式偏差的优化。
马库斯·斯皮斯克在 Unsplash 上的照片
让我们从头开始。
**机器学习模型中的偏见是什么?**本质上,这是当机器学习算法表达隐含的偏差时,这些偏差在测试过程中经常未被检测到,因为大多数论文测试他们的模型的原始准确性。以下面这些表达性别偏见的深度学习模型为例。根据我们的深度学习模型,
- “他是医生”比“她是医生”的可能性更高[ 来源
- 男人对于女人就像电脑程序员对于家庭主妇一样。[ 来源 ]
- 有女性名词的句子更能表示愤怒。[ 来源
- 翻译“他是一名护士。她是一名医生”变成匈牙利语,再回到英语的结果是“她是一名护士”。他是医生。”[ 来源
在这些例子中,该算法本质上是表达刻板印象,这不同于诸如“男人对女人就像国王对王后一样”的例子,因为国王和王后有字面上的性别定义。国王被定义为男性,女王被定义为女性。电脑程序员没有被定义为男性,家庭主妇也没有被定义为女性,所以“男人对女人就像电脑程序员对家庭主妇一样”是有偏见的。
除了性别偏见之外,其他形式的偏见在我们的模型中也很突出。以下是一些其他形式的偏见的例子:
如果你和我一样,你可能会想:但是如果机器没有情感,它们怎么会有偏见呢?
关键是机器学习模型在数据中学习模式。假设我们的数据倾向于将女性代词放在单词“护士”周围,将男性代词放在单词“医生”周围我们的模型将学习这些模式,并了解护士通常是女性,医生通常是男性。呜呜。不是我们自己的错,我们无意中训练我们的模型认为医生是男的,护士是女的。
**那么,如何解决这个问题呢?**像许多问题一样,自然语言处理中的偏见可以在早期或晚期解决。在这种情况下,早期阶段将对数据集进行去偏置,后期阶段将对模型进行去偏置。
流行的计算机视觉数据集 Tiny Images 在发现该数据集充满社会偏见后被撤回。图片来自(Torralba 等人,2008 年)。
**解决方案 A:去偏数据集。**为了取得成功,我们首先必须删除包含偏见的现有数据集。例如,麻省理工学院最近撤销了一个名为 Tiny Images 的流行计算机视觉数据集,因为它充满了社会偏见,包括种族主义,厌恶女性和贬低的标签。这并不意味着我们不能使用这些数据集,但这意味着我们应该删除它们并编辑它们以解决偏见。类似地,必须检查新的数据集以考虑偏差。到目前为止,对 debias 数据集最一致的方法是使数据集多样化。例如,如果数据集始终将女性代词放在单词“护士”周围,则可以通过添加护士是男性的数据来消除偏见。
**解决方案 B:去偏模型。**这是通过修改单词的实际矢量表示来实现的。例如,硬 Debias 算法和双硬 Debias 算法修改向量表示以移除定型信息(例如“接待员”和“女性”之间的联系),同时保留有用的性别信息(例如“女王”和“女性”之间的联系)。这些算法显示了有希望的结果,并且肯定是解决 NLP 偏差的好的一步。
我们还有时间解决偏见吗?尽管 NLP 作为一个领域发展迅速,但解决 NLP 模型中的偏见永远不会太迟。然而,无论我们如何解决这些偏见问题,我们仍然必须尽可能早地解决它们,最好是在模型达到真实世界设置之前。这是一个没有抓住偏见的例子,一个有偏见的模型最终被应用到现实世界,并产生了巨大的影响:
COMPAS 是一个在各州使用的人工智能系统,旨在预测犯罪者是否有可能再次犯罪。然而,该系统被证明对非裔美国人有隐性偏见,预测非裔美国人的假阳性数量是白种人的两倍。因为这种隐含的偏见在系统部署之前没有被发现,许多非裔美国人被不公平和不正确地预测会再次犯罪。
COMPAS 是一个帮助执法部门识别低风险和高风险罪犯的人工智能,结果证明它对非洲裔美国人有明显的偏见。图片获取自ProPublica,发现这些偏见的组织。
NLP 中的偏见是一个必须尽快解决的紧迫问题。让有偏见的模型进入现实世界的后果是巨大的,好消息是解决 NLP 偏见的方法的研究正在迅速增加。希望通过足够的努力,我们可以确保深度学习模型可以避免隐含偏见的陷阱,并确保机器能够做出公平的决定。
延伸阅读:
偏差、方差以及它们与欠拟合、过拟合的关系
我在学习一门课程时遇到了偏差、方差、欠拟合和过拟合这些术语。这些条款似乎令人望而生畏,网上的文章也无济于事。尽管与它们相关的概念很复杂,但术语本身却很简单。下面我将以一种易于理解的方式给出上述术语和偏差-方差权衡的简要概述。
艾萨克·史密斯在 Unsplash 上拍摄的照片
假设您有一个分类模型、训练数据和测试数据
x_train , y_train // This is the training data
x_test , y_test // This is the testing data
y_predicted // the values predicted by the model given an input
误差率是模型预测值与正确值的平均误差。
偏见
假设我们已经对模型进行了训练,并尝试使用输入“x_train”来预测值。预测值为 y_predicted。偏差是 y_predicted 和 y_train 的误差率。
简而言之,可以将偏差视为训练数据的错误率。
当错误率高时,我们称之为高偏差,当错误率低时,我们称之为低偏差
差异
假设我们已经对模型进行了训练,这次我们尝试使用输入“x_test”来预测值。同样,预测值是 y_predicted。方差是 y _ 预测和 y _ 测试的误差率
简单地说,把方差看作是测试数据的错误率。
当错误率高时,我们称之为高方差,当错误率低时,我们称之为低方差
欠拟合
当模型在训练数据中具有高错误率时,我们可以说该模型是欠拟合的。这通常发生在训练样本数量过低的时候。由于我们的模型在训练数据上表现不佳,因此在测试数据上也表现不佳。
因此,训练数据中的高错误率意味着高偏差
简单地说,高偏差意味着拟合不足
过度拟合
当模型在训练数据中的错误率较低,但在测试数据中的错误率较高时,我们可以说模型过拟合。这通常发生在当训练样本的数量太高或者超参数已经被调整以在训练数据上产生低错误率时。
想想一个学生,他研究了一组问题,然后进行了一次模拟考试,其中包含了他们所研究的那些问题。他们可能在模拟考试中表现出色,但在包含看不见的问题的真实考试中,他们不一定表现出色。如果学生在模拟考试中得了 95%,但在真实考试中得了 50%,我们可以称之为过度适应。
因此,训练数据中的低错误率意味着低偏差,而测试数据中的高错误率意味着高方差
简单地说,低偏差和高方差意味着过度拟合
回归中的过度拟合和欠拟合
在第一张图中,我们尝试使用线性方程来拟合数据。这个模型很死板,一点也不灵活。由于线性方程的灵活性低,它不能预测样本(训练数据),因此错误率高,偏差大,这反过来意味着欠拟合。这个模型在看不见的数据上表现不好。
在第二张图中,我们使用了一个 4 次方程。该模型足够灵活,可以正确预测大多数样本,但也足够严格,可以避免过度拟合。在这种情况下,我们的模型将能够在测试数据上做得很好,因此这是一个理想 模型。
在第三张图中,我们使用 15 次方程来预测样本。虽然它能够预测几乎所有的样本,但它有太多的灵活性,将无法在看不见的数据上表现良好。这样一来,它在测试数据时会有很高的错误率。由于它在训练数据中差错率低(低偏倚),在训练数据中差错率高(高方差),所以是过拟合。
分类中的过拟合、欠拟合
假设我们有三个模型(模型 A、模型 B、模型 C ),训练和测试数据的错误率如下。
+---------------+---------+---------+---------+
| ** Error Rate** | **Model A** | **Model B** | **Model C** |
+---------------+---------+---------+---------+
| **Training Data** | 30% | 6% | 1% |
+---------------+---------+---------+---------+
| **Testing Data** | 45% | 8% | 25% |
+---------------+---------+---------+---------+
对于模型 A,训练数据的错误率太高,因此测试数据的错误率也太高。它有一个高偏差和高方差,因此它是欠拟合的。这个模型在看不见的数据上表现不好。
对于模型 B,训练数据的错误率低,测试数据的错误率也低。它具有低偏差和低方差,因此是一个理想模型。该模型将在看不见的数据上表现良好。
对于模型 C,训练数据的错误率太低。然而,测试数据的错误率也很高。它具有低偏差和高方差,因此它是过拟合。这个模型在看不见的数据上表现不好。
偏差-方差权衡
来源:https://medium . com/@ prvnk 10/bias-variance-trade off-ebf 13 ADC ea 42
当模型的复杂度太低时,即一个简单的模型,该模型将不能在训练数据或测试数据上很好地执行,因此它是欠拟合的
在最佳点上,该模型在训练数据和测试数据上的错误率较低,因此是理想的模型
随着模型复杂性的增加,该模型在训练数据上表现良好,但在测试数据上表现不佳,因此过拟合
感谢您阅读文章。请让我知道我是否犯了任何错误或有任何误解。总是乐于收到反馈:)
我最近用 WordPress 创建了一个博客,如果你能看看的话,我会很高兴的😃
[## Python 项目教程-使用这些 Python 项目教程改进您的简历/作品集。
使用 Streamlit 共享部署您的机器学习 Web 应用程序在我以前的文章中,我谈到过构建一个…
realpythonproject.com](https://realpythonproject.com/)
看看我关于准确度、回忆、精确度、F1 分数和混淆矩阵的教程
这篇文章还包括显示你的困惑矩阵的方法
towardsdatascience.com](/understanding-accuracy-recall-precision-f1-scores-and-confusion-matrices-561e0f5e328c)
在 LinkedIn 上与我联系
[## Rahul baner JEE——产品工程实习生——EY | LinkedIn
查看 Rahul Banerjee 在世界上最大的职业社区 LinkedIn 上的个人资料。拉胡尔有 4 个工作列在他们的…
www.linkedin.com](https://www.linkedin.com/in/rahulbanerjee2699/)
偏差方差分解
使用 mlxtend 库演示偏差和方差权衡的实际实现
迈克·冯在 Unsplash 上的照片
我们经常想知道如何从一堆机器学习方法中选择一种方法,为给定的数据集提供最好的结果。
“为特定问题陈述选择具有适当复杂性的最佳模型的过程称为模型选择”
这给我们带来了统计学习方法的一个非常重要的属性,称为偏差方差权衡,它强调模型在训练数据集中学习关联的程度。
在本文中,我们将讨论什么是偏差和方差,以及如何减少它们。最后,我们将实现几个实际的例子来看看这些概念是如何应用于模型构建的。
那么,我们开始吧。
由于偏离实际真相,预测中有 3 种类型的误差:
- 不可约误差
- 偏置
- 差异
不可约误差是对数据中固有噪声的度量。可能总会有一些预测因素对目标变量有一些小的影响,并且不是我们模型的一部分。
因此,无论我们选择多好的模型,它都不能完美地逼近实际函数,从而留下无法减少的误差。
因此,让我们关注我们在构建模型时可以控制的内容,即偏差和方差以及如何控制。
为此,我们将使用’ mlxtend '库(由 Sebastian Raschka 开发)来计算 ‘bias_variance_decomp’ 。
偏差:
偏差是指当模型学习的近似函数对于非常复杂的问题来说微不足道时的误差,从而忽略了预测器和目标之间的结构关系。
高偏差导致拟合不足和较高的训练误差。可以通过向模型增加更多信号来减少,即,如果我们可以添加更好地描述与目标变量关联的特征。
让我们看下面的例子:
我们假设好像所有的特性都不能立刻可用,并按照其贡献的顺序(来自 df_feat)一次引入一个特性。从下面的图表可以明显看出,以较高的方差为代价,偏差显著下降
添加功能以降低偏差
但是如果我们在模型中已经有了全面的特征,也就是说,没有从商业知识中引入额外的特征,但是偏差仍然很高,该怎么办呢?在这种情况下,我们需要改进建模空间,即使用能够更好地理解数据中结构细微差别的算法。
差异:
方差是模型学习的近似函数在不同训练集之间差异很大的程度。高方差导致过度拟合
当模型的复杂程度增加时,它开始通过学习微小的波动来拟合数据,甚至是随机噪声的程度。
由于模型在训练数据中学习到一些偶然存在的模式,而这些模式并不是数据的真实属性,因此在测试数据中可能不存在类似的模式。这导致较低的训练误差,但是非常高的测试集误差
正则化方法通常用于控制方差。
在上述示例中,我们将 lasso 模型(正则化参数设置为 0.05)中的方差与线性回归中的方差进行了比较,观察到方差减少了 7.5%
variance Reduction: -7.53%
At the expense of introducing bias: 5.87%
剪枝常用于正则化决策树。
我们观察到通过修剪树,方差减少了 62 %
variance Reduction: -62.01%
At the expense of introducing bias: 118.32%
让我们看看当我们在 K 最近邻算法中增加邻居数量时,偏差和方差会发生什么变化
由于越来越多的邻居决定输出,这导致了具有更低方差和更高偏差的更简单的模型。
高 k 值导致 KNN 中的高偏差和低方差
权衡:
我们看到,为了减少一个误差,我们最终增加了另一个误差,这是不可取的。那么,我们如何减少偏差和方差。是否可以实现?
答案是肯定的!
这两个误差项不以线性方式变化;因此,预测误差取决于两者的相对变化率。
集成和交叉验证是克服偏差方差困境的常用方法。
让我们来看看,与单一决策树相比,随机森林如何在不增加太多偏差的情况下减少 82%的方差
variance Reduction: -82.29%
At the expense of introducing bias: 10.73%
Jupyter 笔记本可以在这里找到。
偏差-方差权衡:360 度视角
你需要知道的关于偏差、方差和权衡的一切。
来源 (pxfuel — royaltyfree)
大多数从事机器学习的人都听过“偏差-方差权衡”这个短语。但我在采访或与 ML 或数据科学工程师讨论时观察到,我们大多数人甚至不清楚上述短语中的偏差和方差是什么意思,忘记理解权衡吧。
在本文中,我将使用两种方法来解释“偏差”、“方差”和“偏差-方差权衡”——第一种方法将参考日常生活中的例子进行概念性解释,以便即使没有数据科学或统计背景的普通人也能理解它,第二种方法将使用一点数学知识(统计、代数、概率等)。)来强化解释。这两种方法将齐头并进。
偏差和方差:
第一种方法:“普通人!”
我们将使用著名的牛眼类比来解释偏差和方差这两个术语。
根据资料来源改编的偏差和方差图解:http://scott.fortmann-roe.com/docs/BiasVariance.html
让我们假设牛眼(黄点)是我们想要预测的真实值(目标)。我们开始玩(预测),投了几次飞镖(蓝点)。想象 X 轴和 Y 轴穿过中心,如图所示。每个蓝点将有 x 和 y 坐标;将绿点视为所有蓝点的平均值。通俗地说,我们可以说平均来说,我们击中了绿点。绿点(平均预测值)和黄点(真实值)之间的距离称为“偏差”。
而蓝点(预测)在绿点(预测的平均值)周围的分散程度称为“方差”。
用正式的话来说,
偏差:估计值的平均值与真实平均值的差异量。
方差:预测围绕其均值的预期方差。
第二种方法:“数学观”
让我们在数学和建模的光芒下看看。
假设,一个模型
y = f(x)+ɛ
其中“X”是自变量,Y 是目标或因变量。ɛ(ε)是均值为零的随机误差项。
考虑我们要预测’ y ‘的值,f̂(f-hat)代表 f 的估计值,ŷ(y-hat)代表它对应的’ y '值。
ŷ=f̂(x)
正如我们看到的,y 是 x 和’ɛ’的函数,ŷ的精度取决于 f̂和ɛ.f̂的精度可以提高,因此它被称为“可约误差”,但是由于“ɛ”引起的误差不能被减少,因为它与“x”无关,因此它被称为“不可约误差”。
设,E()代表期望值或平均值。因此,下面的表达式表示实际值和预测值之间的平方差的平均值或期望值
作者照片
我们正在测量预期的预测误差——EPE。如果我们以如下所示的均方误差 MSE 为例。
作者照片
x0 处的 MSE 可以写成:
作者照片
其中“T”是训练数据集。所以,EPE 变成了
作者照片
在很多地方,我们会看到它被直接写成,
作者照片
这是真的,但这个结果是如何得出的,几乎没有人谈论或解释。让我们尝试更深入地了解一下(可以跳过,但为了更好地理解,建议看一看)如果不感兴趣,请直接跳到“但是取舍在哪里?”
派生:
作者照片
让我们加上 f(x0),
作者照片
只是,ŷ0 依赖于“t”训练数据集。因此,我们可以用(a+b) = a +b +2a.b 改写上述等式,如下所示
作者照片
让我们来看第一项,因为它独立于 T,所以可以写成
作者照片
第二个量可以写成
作者照片
这可以进一步分解,如
第一学期,
第二任期,
最后一个学期,
把这些放回到上面的等式中,我们看到,第一项抵消了第三项,第二项抵消了第四项,因此主等式中的中间项= 0。
现在主方程的最后一项,
进一步扩展它,
而且,我们知道
把这个放回我们得到的原始方程中,
如果我们记得,根据偏差和方差的定义
因此,我们得到最终等式——
(作者供图)
但是取舍在哪里呢?
正如我们所见,偏差更有可能是由于预测模型或函数的简化——f̂.所以,如果我们增加模型的复杂度,它就会降低。这听起来是一个好主意,增加复杂度,减少偏差,从而减少 EPE,但没有这么快。“差异”中还有另一个术语。
权衡:我来了!
从上面的模型中可以明显看出,为了减少误差,我们需要最小化方差和偏差,,但是问题是这些术语相对于模型复杂性的相反行为。
让我们举一个 K 近邻的例子来更好地理解它。我假设我们知道 K-最近邻算法,所以不去深入它的细节。
K-nn 插图(作者照片)
但是对于那些不知道的人来说,这个算法的基础是预测一个点的值,我们看它最近的 k 个点,然后取这 k 个最近点的平均值。这意味着成为该点的预测值。例如,如果 k = 2,点‘P6’值可以通过它的邻居 p4、p10 来预测。
第一招:“庶人!”
具有 P11 实际值的 K-nn(作者提供照片)
让我们取模型复杂性的两个极端——仅基于“k”的值,看看它对偏差和方差的影响。我们有一个实际值为 5.8(蓝色)的新点“p11”,我们想预测它的值。
先说最简单的模型 K=10。
总共有 10 个点,因此‘p11’的值将是所有点的平均值,如下图*绿色‘p11’*所示。
K=10 的 K-nn(最简单的模型)(作者供图)
直观上,我们可以看到考虑所有的点是不好的。如果我们有 3 岁或 5 岁的数据,那么在预测 30 岁左右的人的价值时考虑这些数据是没有意义的。让我们看看偏差和方差有什么说法!
偏差:我们可以直接看到这里的偏差非常高(记住偏差的定义)。
方差:假设点“11”在年龄= 40 时,即使在给定模型下,11 的预测值也不会改变,因为我们考虑了所有的点。所以这是方差= 0 的完美场景。
现在我们取 K = 1。
K = 1 的 K-nn(复杂模型)(作者供图)
偏差:将点 3 的值作为最接近的值。这里看起来好多了(我知道不是最好的例子,但你可以考虑另一个例子,如房价和轴是位置和价格)。与距离较远的点相比,距离最近的点更有意义。
方差:假设点 11 在 32 岁,那么最接近的点应该是 9,因此新的预测值应该与当前值有很大不同。因此,它具有很高的方差。
此外,直觉上,测量最亲近的人的身高是没有意义的。因此这种模式也是不好的。
最佳点位于两者之间的某个地方,我们考虑足够多的近点,这样我们可以捕捉到邻域中的不同变化,但同时不会捕捉到所有随机的远点或噪声。
我希望在直觉层面上,它有助于理解偏差-方差权衡。现在,让我们转向数学,来真实地了解它。
第二种方法:“数学观”
回想一下我们的预期预测误差(EPE)公式,
(作者供图)
对于 K-最近邻,它将变成,
(作者供图)
因此,我们可以看到,增加“K”会减少方差,因为“K”是分母,而偏差会增加。
如果我们绘制偏差、方差和总误差与模型复杂性的关系,我们将得到下图。
偏差方差权衡(最优模型复杂度)(作者提供图片)
因此,我们看到最佳点将是,相对于复杂性的偏差梯度等于相对于复杂性的方差梯度,符号相反。因为如果我们向右移动到这一点,偏差的减少小于方差的增加,这被称为过拟合,如果你向左移动,反之亦然,这被称为 欠拟合 。
从人类的角度来看,我总是喜欢将过度拟合与孩子记忆教科书中给出的数学解决方案但不理解它联系起来——因此,如果问题来自教科书(训练数据集),他/她可以完美地回答,但如果问题来自外部(看不见的测试数据集),他/她就不会表现得那么好。同时,如果你没有学习公式(太基础的模型),没有解决教科书上的大量问题,你将无法解决教科书上的问题以及测试中的问题,因为你没有足够的知识。最重要的是理解概念,记住基本公式,然后练习。
我希望所有这些都有意义,与阅读本文之前相比,偏差-方差及其权衡现在更加清楚了。
参考文献:
[1]Trevor Hastie、Robert Tibshirani 和 Jerome Friedman,统计学习的要素:数据挖掘、推理和预测 (2008)
[2]Gareth James,Daniela Witten,Trevor Hastie,和 Robert Tibshirani,统计学习的介绍及其在 R (2013) 中的应用
[3]Scott Fortman-Roe,了解偏差-方差权衡(2012)
偏差-方差权衡
在建立机器学习模型之前,请阅读此内容。
paweczerwi ski 在 Unsplash 上的照片
一些事实只是在我们的脑海中混乱,然后很难回忆起什么是什么。在回忆偏差和方差之间的差异时,我也有过类似的经历。你在这里的事实表明你也被这些条款弄糊涂了。
所以让我们来理解什么是偏差和方差,什么是偏差-方差权衡,以及它们如何在机器学习中发挥不可避免的作用。
偏见
让我问你一个问题。为什么人类会有偏见呢?或者是什么促使他们时不时地表现出一些偏见?
我敢肯定你有一个好答案或许多好答案。但是总结一下,我们看到身边偏见的最根本原因是——心态的放松。
作为人类,我们很容易将我们的思想和偏好倾向于我们喜欢的,我们钦佩的,或者我们认为正确的东西,而不会使我们的思想弯曲太多。
对于我们生活中的大部分决定,我们不想让我们的大脑去分析每一个场景。现在,一个人可能会在做重要且有结果的事情时进行调查,一丝不苟,或相当系统化,但在大多数情况下,我们懒得这样做。
但是这种人类的偏见直觉和机器学习有什么关系呢?让我们来了解如何。
考虑下图。
图片来自 Sangeet Aggarwal
人们很容易猜测这个数字代表了简单线性回归,这是一个不灵活的模型,假设输入和输出变量之间存在线性关系。这个假设、近似和限制将偏差引入到这个模型中。
因此偏差指的是使用简单(或限制性)模型近似复杂问题时观察到的误差。
人类和机器之间的这种类比可以很好地理解 不灵活会带来偏见 。
观察下图。这些图代表了用于拟合相同数据的两种不同模型。你认为哪一个会导致更高的偏差?
图片由 Sangeet Aggarwal
右边的情节比左边的灵活得多。它与数据更加吻合。另一方面,左边的图表示拟合不佳的模型,该模型假设数据中存在线性关系。这种由于偏高造成的拟合不良也被称为 欠拟合 。欠拟合会导致较差的性能和较低的精度,如果需要,可以通过使用更灵活的模型来纠正。
让我们总结一下关于偏见的要点:
- 当使用限制性(不灵活)模型来解决复杂问题时,会引入偏差
- 随着模型灵活性的增加,训练数据的偏差开始减小。
- 偏差会导致拟合不足,进而导致性能和预测不佳。
那么如何才能摆脱这种偏见呢?我们可以建立一个更灵活的模型来拟合我们的数据,并消除拟合不足。
那么,我们是否应该继续构建更复杂的模型,直到将误差降至最低?让我们试着用一些随机生成的数据来做这件事。
图片由 Sangeet Aggarwal
现在花几秒钟时间观察这些图,看看如何增加我们的模型的复杂性来训练相同的数据,减少偏差和拟合不足,从而减少训练误差。
- 图 1 显示了限制性最强的模型,即我们前面看到的线性模型。这个模型中的偏差肯定是最高的。
- 图 2(多项式回归)是一条更平滑的曲线,进一步减少了训练误差,因此显示出比线性模型更小的偏差。
- 图 3 显示了 K=9 的 K-最近邻(KNN)模型,该模型能够比前两个模型更准确地对数据进行分类。
- 图 4,K=1 的 KNN 模型,密切跟踪数据,几乎没有错误分类任何样本。与所有以前的模型相比,它给出了最少的偏差和欠拟合。
那么,你会选择这四个中的哪一个来解决你的问题呢?
如果你选择了图 4,这是我们很多人都想做的,那么你最有可能遭受 高方差的诅咒。
方差
假设你要参加一个你讨厌的科目的考试。你理解这些概念有困难,所以为了通过考试,你决定一个字一个字地学习,而不是真正关心为什么要写,写什么。现在,你可能会在考试前给你的朋友留下深刻印象,如果他问你课本上的同样的问题。但是你很可能会在考试中表现很差,如果万一问题与你预期的不一样,或者如果它们要求你使用一些逻辑而不是记忆。
在机器学习中,当一个模型在训练数据集上表现得如此之好,以至于它几乎记住了每一个结果时,它在运行测试数据集时可能表现得非常糟糕。
这种现象被称为 过拟合 ,通常在构建非常复杂和灵活的模型时观察到。
图片由 Sangeet Aggarwal 提供
那么什么是 方差 ?
方差是我们的模型在不同数据集上进行预测时必须改变的量。
让我们简化上面的陈述→如果我们用它来估计看不见的数据的输出,我们的模型不应该产生高误差。也就是说,如果模型在训练数据集上显示出好的结果,但是在测试上显示出差的结果,则称其具有高方差。
因此,好的模型不是只在训练数据集上表现良好的模型。它应该能够在任何其他数据集上产生良好的结果。这么说吧,你不会想制造一辆只能在班加罗尔街道上行驶良好的自动驾驶汽车,而一旦离开城镇,就会显示太多错误。
因此,构建一个非常复杂的模型可能会以过度拟合为代价。一个人必须明白 过多的学习会带来高方差 。
让我们来看看关于方差的一些关键点。
- 方差是模型在对未知数据进行预测时需要改变的量。
- 高方差相当于模型过拟合。
- 线性回归等限制性模型显示低方差,而更复杂、更灵活的模型会引入高方差。
困惑
那么我们如何消除偏差和方差呢?看起来解决一个会导致另一个溜进来。
我们看到,限制模型会在训练时导致高偏差和欠拟合。另一方面,增加其灵活性会导致方差和过度拟合。
解决方法是什么?
偏差-方差权衡
重要的是要记住,在建立机器学习模型时,一些偏差和一些差异将始终存在。偏差和方差都会增加模型的总误差。
为了最小化可约误差(偏差+方差),我们必须找到两者之间的最佳点,偏差和方差都有最小可能值。这被称为偏差-方差权衡。这更多的是预测准确性(方差)和模型可解释性(偏差)之间的权衡。
这就是偏差和方差。我希望这篇文章能帮助你理解这些术语。不断学习应用。敬请关注。
偏差-方差权衡如何影响机器学习算法
偏差-方差权衡的直观解释
监督机器学习算法试图根据历史数据预测未来的观察值。在构建模型时,我们理想地想要一个模型,它不仅能准确地捕捉不规则性,还能概括样本外的数据。不幸的是,通常不可能同时做到这两点。当我们试图平衡这两者时,偏差-方差权衡就出现了。理解偏差-方差分解在衡量预测模型性能中的重要性是极其重要的。
简而言之,由于偏差和方差导致的预测误差有助于我们建立一个模型,该模型在训练数据(用于训练模型的数据)和测试数据(模型先前未发现的数据)上表现良好。
什么是偏见?
关于反应和预测变量之间真实潜在关系的假设引入了偏差。当我们的假设接近真实关系时,偏差较小。但是如果我们对真实的关系做一个过于简化的假设,就会导致很大的偏差。
我前天写了一份试卷,但我不知道试卷将如何出题。我认为考试会很容易(引入了偏见)。我只是对每一章做了一个概述,假设试卷会有选择题,我会从选项中得到帮助。
原来,这份论文是主观的,有 3 个基于概念的论文问题。猜猜我考试的表现?很糟糕!!
为什么?因为假设它是容易的仍然是好的,但是假设它将是 MCQ 格式引入了高偏差并且导致了差的结果。
我们希望避免对真实模式做出过于简化的假设,以避免高偏差。
线性回归被认为是高偏倚的,因为我们假设真实的关系是线性的。不幸的是,现实世界中的大多数统计关系都不是线性的。但是,由于可解释性,线性回归在某些情况下通常是首选。
什么是方差?
如果我们不断给模型提供更多的参数,以便更好地学习训练数据,模型最终也会学习随机噪声。学习随机噪声会降低模型对看不见的数据进行归纳的能力。这会导致过度拟合和高方差。这变得有问题,因为当您使用两个不同的训练集来估计一组参数时,来自这些训练集的参数估计相差很大,从而导致高方差。
我哥哥讨厌数学!!他一步一步地把课本上的所有问题都抢过来了,却没有理解其中的概念。正因为如此,他在他的老师(老师推荐了这本书,并要求学生彻底解决)设置的班级测试中表现出色。然而,期末考试是由一位资深数学教授设计的,没有一个问题是直接从书上来的。你猜怎么着?
他把事情搞砸了!!
上面的例子是一个纯粹的过度拟合的例子。你能很好地学习你所看到的东西,从而表现出色。但是只要纸样稍有变化,你就搞砸了。
下图是实际数据拟合曲线的图示(过度拟合和欠拟合的实例)。蓝点代表观察值,红色曲线是我们估计的 x 和 y 之间的统计关系。
让我们看另一个例子,并尝试更深入地理解这个问题,即偏差和方差如何影响精度和准确度。目标是击中靶心的著名镖靶例子:
低偏差、低方差:高精度(击中目标)、高精度(始终如一)
低偏差,高方差:高精度(击中目标),低精度(不一致)
高偏差、低方差:低精度(偏离目标)、高精度(始终如一)
高偏差、高方差:低准确度(偏离目标)、低精确度(不一致)
机器学习算法面临类似的情况,我们需要在偏差和方差之间进行权衡,以使我们的模型准确和通用。它是关于实现模型可解释性和模型复杂性之间的折衷。像线性回归这样的模型是高度可解释的,而具有更精确结果的神经网络就像一个黑盒。
下面的图表将给出偏差和方差如何影响模型误差的估计。
找到一个最佳模型就是找到正确的平衡。
参考资料:
[1]http://scott.fortmann-roe.com/docs/BiasVariance.html
[2]https://towards data science . com/understanding-the-bias-variance-trade off-165 e 6942 b229