TowardsDataScience 博客中文翻译 2020(九百八十九)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

Python 2020 的新特性—第 2 部分

原文:https://towardsdatascience.com/whats-new-in-python-2020-part-2-1d9abb0f0e7c?source=collection_archive---------39-----------------------

更多隐藏在 Python 3.9 袖子里的技巧。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Fotis FotopoulosUnsplash 上拍摄

我写给 Python 3 新特性的第一封情书有点长。这里是第一篇文章,介绍了编写 Python 代码时添加类型,以及用:=赋值表达式,也就是“walrus 操作符”。

本文将简要介绍即将发布的 Python 3.9 中的一个新特性。然后我们将深入研究数据类(dataclasses)。看看它们是什么,想知道它们在我们的编程生涯中去了哪里。

字典联合运算符— 3.9

这将是一个快速的。

从 Python 3.8 及以下版本开始,当我们想要组合两个或更多字典时,我们习惯于使用语法体操来完成工作:

d1: dict = dict(apple=2, banana=3, cactus=3)
d2: dict = dict(cactus="overwrite!", durian=4, elderberry=5)
​
# method 1
d1.update(d2)
​
# method 2
d1 = dict(d1, **d2)
​
# method 3(this is what I use)
d1 = {**d1, **d2}
​
# method 4 (for psychopaths)
for k, v in d2.items():
     d1[k] = v

我喜欢目前用双星号**打开字典的方法。这很像 JavaScript 中的... spread 运算符。

尽管如此,新的语法是一种改进。

# Python 3.9+ union operator
d1 = d1 | d2
​
# or ...
d1 |= d2

所有这些语句返回:

{'apple': 2, 'banana': 3, 'cactus': 'overwrite!', 'durian': 4, 'elderberry': 5}

很酷,对吧?

“新的”union 操作符实际上借鉴了在set集合类型中使用的现有 Python 语法。如果您没有使用集合来比较集合,请现在开始。他们太棒了。

数据类— 3.7 以上

dataclasses内置库已经有一个时代了(从 3.7 开始)。然而,我没有看到它得到太多的爱。应该的。创建数据类对于编写有效的 Python 代码是不必要的,Python 是一种动态类型化的语言(类型与血型相同,而不是以每分钟 75 个单词的速度*)。这意味着 Python 解释器在运行时运行类型检查,而不是在编译时,所以代码中不需要类型检查(这是推断出来的)。*

Python 中的 Dataclasses 很像 TypeScript 与 JavaScript 的关系。JavaScript 程序在 Node.js 或浏览器中运行并不需要输入。然而,有很好的理由在代码中使用类型。除非有回报,否则开发人员不会费尽周折去学习另一种工具。

回报就是理解通过你的程序的数据。验证输入。在声明时看到变量的类型,而不是在堆栈跟踪中找到。

例如变量people。那是…人数?一份名单?什么清单?一本字典?我们可以做得更好。

from dataclasses import dataclass, field
from typing import List
​
@dataclass
class Person:
    first: str
    last: str
    full_name: str = field(init=False)
    age: int

    def __post_init__(self):
        self.full_name = f"{self.first} {self.last}"
        if self.last == '' or not self.last:
            self.full_name = self.first
​
@dataclass 
class People:
    people: List[Person] = field(default_factory=list)

OO7 = Person('James', 'Bond', 40)
tech_guy = Person('Q', None, 80)
​
M16: People = People([OO7, tech_guy])

print(OO7)
print(tech_guy)
print(M16)

这将返回:

Person(first='James', last='Bond', full_name='James Bond', age=40)
Person(first='Q', last=None, full_name='Q', age=80)
People(people=[
    Person(first='James', last='Bond', full_name='James Bond', age=40),     
    Person(first='Q', last=None, full_name='Q', age=80)])

清晰多了!

当您开始输入 Python 代码时,内置的dataclasses库可以带您走得更远。尽管如此,你最终还是会漫游到美好的pydantic 图书馆的绿色牧场。Pydantic 本身对构建可伸缩、可维护的 Python 代码有很大帮助。库 FastAPI 可以做好一切,开箱即用。这两个图书馆都应该有自己的文章或课程,所以我将把它留在这里。

结论

Python 3.9 充满了有用的语言特性。全新的版本,并结合了所有在以前版本中添加的内容。如果您还没有阅读 Python 2020 年的新特性第一部分的话,请阅读该部分。

请将您的安装升级到 3.9!你没什么可失去的!

Python 3.9 字典有什么新特性?

原文:https://towardsdatascience.com/whats-new-in-python-3-9-dictionaries-ddb5d18460da?source=collection_archive---------41-----------------------

首先看一下新的 union 操作符,它有助于合并和更新字典

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

自由库存Unsplash 上的照片

Python 3.9 目前处于测试阶段,预计将于 2020 年 10 月发布,有很多东西值得期待。对于急切等待更新的 Python 开发人员来说,有一些有趣的补充,可以是新的字符串方法、拓扑排序或类型提示。

但是对我来说最突出的是新的 union 操作符,它提供了一种更简洁的方式来合并或更新字典。在接下来的几节中,我们将看看新的 union 操作符如何使操作字典变得更加简单和简洁。

合并或更新 Python 字典的旧方法

字典是一种内置的 Python 数据类型,用于保存可变的、插入有序的键值对集合。在 Python 3.8 之前,我们通常使用update方法或**解包操作符,但是更新字典最简单的方法是插入一个键值对,如下所示:

d1 = {'a': 'Cat', 'b': 10}
d1['type'] = 'animal'
{'a': 'Cat', 'b': 10, 'type': 'animal'}

但是在用多个新的键-值对更新字典时,这并不会让我们走得太远。

在这种情况下,update()方法显然是更好的选择:

dict1 = {'a': 'Cat', 'b': 10}dict2 = {'c': 'Dog', 'd': 11}dict1.update(dict2)
#prints {'a': 'Cat', 'b': 10, 'c': 'Dog', 'd': 11}

虽然上面的方法对于更新字典很有效,但是对于合并字典,您需要依靠copy()方法。这是因为update()方法就地执行,会修改原始字典。因此,您必须创建第一个字典的克隆,以便在不进行修改的情况下进行合并,如下所示:

d3 = d1.copy()
d3.update(d2)

这看起来不错,但不是 pythonic 式的。通过使用双星号操作符**在单行代码中合并字典,我们可以做得更好。

dict4 = {**dict1, **dict2, **dict3}
#or
d3 = dict(d1, **d2)

虽然上面的方法很有效,当然也很简洁,但是有一个警告。对于像 Python 这样以可读性赢得加分的高级语言来说,上面的解包操作符对许多开发人员来说可能很难看。

难怪 Python 3.9 中有两个新的 union 操作符。

新字典运算符

Python 3.9 以||+的形式引入了新的 clean union 操作符,分别用于合并和更新字典。

为了合并两个字典,我们像这样使用操作符:

d3 = d1 | d2

上面的操作符整齐地修剪了copy()update()方法。此外,该操作符在 Python 中带来了一致的行为,因为它已经用于合并两个集合。

同时,我们可以通过使用|=操作符来使用字典的就地合并或更新。它的工作方式与扩充赋值操作符+=相同。

d1 |= d2
#equivalent to
d1 = d1 | d2

如果我们在两个或更多字典中有公共键,那么在合并或更新操作中会从第二个或最后一个字典中选取键值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

重要的是要注意插入顺序的重要性,正如我们在上面看到的。

结束语

Python 3.9 中推出的新的 union 操作符虽然很小,但是很受欢迎。好的一面是,在合并字典和可重复项时,它们也能工作。

这一次到此为止。感谢阅读。

RStudio v1.4 版的新功能(预览版)

原文:https://towardsdatascience.com/whats-new-in-rstudio-v1-4-preview-5611f08c6233?source=collection_archive---------28-----------------------

Python 支持、可视化 RMarkdown 编辑和许多很酷的东西

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

克里斯多夫·高尔Unsplash 上拍摄

不到六个月前,RStudio 发布了最后一个稳定版本(1.3),但最近发布了 r studio 1.4 版的功能预览。看起来我们将会有关于两个关键点的重要消息:带有 markdown 的可视化文档版本和 Python 的使用。

如果您想提前试用新版本,请点击链接并下载该软件的预览版(非最终版或稳定版):

[## RStudio 预览

RStudio v1.4.904-1 预览版-发行说明这是 RStudio 1.4 的预览版,是 RStudio 的主要新版本。

rstudio.com](https://rstudio.com/products/rstudio/download/preview/)

看起来在这个 1.4 版本中我们会有重要的变化和新的特性:

  • 用于 R Markdown 文档的新的可视化编辑器
  • 改进了对 Python 的支持,包括 Python 的环境面板和 Python 对象的可视化
  • 工作台生产率的提高,包括一个命令面板彩虹括号
  • 更具可配置性的工作空间,具有额外的源列和改进的可访问性
  • 在 RStudio Server Pro 中支持 SAMLOpenID 认证,以及对 VS 代码会话的实验性支持

你可以在他们的网站上阅读完整的发行说明。

让我们开始吧!

✍️视觉降价编辑

R markdown 是我每天坚持使用 Rstudio 的原因。从版本 1.4 开始,此功能更深入地集成到系统中,允许您查看文档中的动态变化,而无需每两分钟编织一次文档。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

资料来源:RStudio

此更改不是强制性的,您可以使用编辑器工具栏右上角的一个按钮从可视编辑器切换回 classic R markdown 文档。

任何可以在 pandoc markdown 中表达的东西(包括表格、脚注、属性等。)可以在可视模式下编辑。此外,还有许多旨在创作技术内容的生产力增强,如嵌入式代码、等式、引用、交叉引用和内联 HTML/LaTeX。

让我们来看几个新特性:

引文

可视模式使用引用的标准 Pandoc 标记表示法(例如[@citation])。可以从各种来源插入引文:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

资料来源:RStudio

如果您插入来自 Zotero、DOI 查找或搜索的引文,它们会自动添加到您的文档参考书目中。

这会让写报告快很多。

桌子

现在,您有一个专门的部分来处理表。插入它们,编辑它们,做你通常做的任何事情,但是更快。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:作者

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:作者

不再有愚蠢的内嵌式绘画,比如:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

乳液

新的可视化编辑器也适用于方程式。现在你可以写乳胶公式,并立即看到,如果像我一样错过了一些花括号。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

资料来源:RStudio

要查看新的可视化编辑器的所有特性,请查看精美的文档

🐍Python 集成

RStudio 1.4 版本引入了许多功能,这些功能将进一步改善 Python 编辑体验。

当使用 reticulate 时,通常使用 reticulate 函数选择 Python 解释器——例如,通过reticulate::use_python(…, required = TRUE)或通过设置RETICULATE_PYTHON环境变量。(或者,他们信任 r eticulate 找到并激活他们系统上可用的适当版本的 Python。)

然而,人们可能想要控制 Python 的版本,而不明确地使用 reticulate 来配置活动的 Python 会话。RStudio 现在提供了一个 Python 选项面板,既可以全局(通过Tools -> Global Options…)使用,也可以按项目(通过Tools -> Project Options…)使用,可以用来配置 RStudio 中使用的默认 Python 版本。

在 Python 首选项窗格中,可以查看和修改 RStudio 使用的默认 Python 解释器:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:作者

此外,当reticulate REPL 处于活动状态时,RStudio 环境窗格现在能够显示 Python 模块的内容。默认情况下,显示主模块的内容。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:作者

🔎命令选项板

命令选项板是一种软件启示,它提供对程序所有命令的即时、可搜索的访问。可以使用键盘快捷键 Ctrl + Shift + P(在 macOS 上为 Cmd + Shift + P)来调用调色板。

也可以在工具菜单中找到(工具->-显示命令面板)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

首先也是最重要的一点,命令调板是一种只需几次击键即可快速搜索和调用 RStudio 命令的方法。每个 RStudio 命令都在调色板中,除非它在当前模式下被显式隐藏。这将提高速度,因为从调色板中快速击几下键来调用命令通常比使用鼠标或进入菜单要快得多。

🌈彩虹括号

你是否曾经错过在一个长函数中关闭一个括号或者编辑你的代码(或者从 StackOverflow 中复制粘贴)?现在,这可能是一个过去的噩梦。

在全局选项面板中,您现在可以启用彩虹括号选项:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:作者

结果是这样的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:作者

它对 R 和 Python 脚本都有效,并且会使括号匹配变得非常容易。

参考

编辑视觉—https://blog . r studio . com/2020/09/30/r studio-v1-4-preview-Visual-markdown-editing/

python—https://blog . r studio . com/2020/10/07/r studio-v1-4-preview-python-support/

命令面板—https://blog . r studio . com/2020/10/14/r studio-v1-4-preview-command-Palette/

拼接机 3.0 的新功能

原文:https://towardsdatascience.com/whats-new-in-splice-machine-3-0-9047556c3390?source=collection_archive---------44-----------------------

Splice Machine 3.0 增加了地理复制、Kubernetes 支持、时间旅行、Jupyter 笔记本、DB 内机器学习模型部署等等

Splice Machine 是数据库管理系统(DBMS)市场中一个相对较新的细分市场的一部分,在这个市场中,交易和分析功能集中在一起。2013 年 7 月,Gartner 使用术语 HTAP 或混合交易分析处理来描述这一新兴细分市场。弗雷斯特称之为易位。今天,Splice Machine 宣布发布其平台的最新版本,Splice Machine 3.0。这份新闻稿证明了自分析师创造出这些词汇以来,我们已经取得了多大的进步。Splice Machine 是一个集成平台,企业可以使用它来支持其任务关键型运营应用程序,以及用作管理报告的决策支持系统和构建机器学习模型,所有这些都在一个无缝集成的平台上。

使用集成平台的好处是:

  1. 弹性可扩展性
  2. 显著降低开发和许可成本
  3. 最小 ETL 延迟
  4. AI/ML 更快的上市时间
  5. 能够通过现代化来延长传统应用程序的寿命

在 3.0 版本中,我们在添加特性和功能方面迈出了重大步伐,这些特性和功能将使我们的平台能够被企业用来实现其关键任务应用的现代化。凭借全面的 SQL 支持、出色的事务性和分析性工作负载性能、内置的机器学习功能以及内部和云中的统一部署体验,Splice Machine 3.0 在应用程序现代化数据库方面具有独特的定位。

Splice Machine 3.0 为应用程序开发人员、开发人员/数据库管理员、分析师、数据工程师和数据科学家提供企业级功能。在 3.0 版中,DBA 将能够使用分析资源队列按角色分配分析资源,以便特定用户的工作负载获得足够的资源。这有助于确保高优先级工作负载的性能,也有助于在不同的业务组织之间分配计算资源。Splice Machine 3.0 通过主动-被动故障转移来保护业务数据,并在面临自然灾害、基础设施故障和用户错误时确保业务连续性和高可用性。在 Splice Machine 3.0 中,我们通过提供编辑敏感业务数据的能力,提供了广泛的高级安全选项。

Splice Machine 3.0 的标准 ODBC/JDBC 接口使分析师能够集成他们选择的商业智能和数据可视化工具,并提供对数据科学家创建的笔记本的访问,以执行假设分析。3.0 版提供了我们的 ML Manager 2.0,它支持端到端的数据科学工作流,具有前所未有的操作 ML 的简便性,新的原生 JupyterLab 笔记本,以及跟踪 ML 实验的新功能。

Splice Machine 3.0 显著降低了 IT 组织管理运营、分析和 ML/AI 工作负载的负担,以支持历史报告的分析查询和运营记录系统用例。这大大减少了维护该架构所需的实施时间和数据工程师的数量。对于计划从专有数据库迁移的组织,Splice Machine 3.0 通过详尽的 SQL 实施,包括对一些专有 SQL 扩展的支持,提供了遗留数据库的无缝替换。Splice Machine 3.0 提供了与基础设施无关的部署,可以灵活地部署在内部或云上。

拼接机 3.0 在多个功能领域进行了重大改进,包括:

  • 工作量管理
  • SQL 覆盖率
  • 复制和高可用性
  • 安全性
  • 数据科学生产力
  • Kubernetes 支持

让我们来详细探讨其中的每一个。

工作量管理

  • **应用服务器队列:**该特性支持使用多个 OLAP(在线分析处理)队列,允许用户为特定查询预留集群容量,跟踪每个服务器/角色消耗的资源,并为特定种类的查询和组织管理资源容量。该功能允许用户相互隔离工作负载,以确保即使在多个资源密集型查询同时运行时也有足够的资源可用。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Splice Machine 3.0 引入了应用服务器队列(asq)来提供工作负载管理和隔离。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

公平调度器使集群上的所有应用程序都能获得同等份额的集群资源。容量调度程序为用户指定最小或最大容量

SQL 覆盖率

  • 对特定于 DB2 的 SQL 语法的支持: Splice DB 3.0 现在支持许多特定于 DB2 的扩展,这使得通过最少的 SQL 重写就可以轻松地从 DB2 进行迁移。例子包括支持 DB2 触发器语法、错误代码、文本操作语法等。
  • **全外连接支持:**全外连接是一些 SQL 语言中的一个连接选项,可以通过使用以前的 Splice DB 语法重写查询来实现,但现在在 Splice DB 3.0 中直接支持。这将消除重写针对使用这种语法的遗留数据库编写的查询的需要。
  • 时间旅行—时间点查询: Splice DB 3.0 支持强大的新 SQL 语法扩展,允许数据库用户查询过去某个时间的数据库。这种功能在很多情况下都非常有用。它可用于在处理缓慢变化的维度时支持灵活性,支持各种数据审计场景,了解用户所做的可能需要取消的更改,再现历史报告,以及分析一段时间内的趋势。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

时间点查询或时间旅行查询允许数据库用户查询过去某个时间点的数据

  • **增强的触发器支持:**Splice Machine 3.0 为触发器提供了新的选项,允许更灵活地处理可触发自动操作的事件,以及作为这些触发器的结果可采取的操作。

复制和高可用性

  • **主动-被动复制:**在此版本中,Splice DB 支持通过主动-被动复制自动保持同步的多个数据库集群,以实现严格的恢复点目标(RPO)和恢复时间目标(RTO)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Splice DB 3.0 包括异步、主动/被动复制

安全

  • **模式访问限制:**允许限制对属于指定模式的对象的访问,这样,如果没有适当的管理权限,其他用户就无法查看、访问甚至了解这些对象的存在。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

必须明确授权用户访问 sys 模式,或者必须禁用模式限制配置。

  • **日志编校的定制模式匹配:**该特性允许用户使用正则表达式定义的模式来编校系统日志中的敏感信息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

可以通过定义“掩码”将日志配置为自动识别和编辑敏感信息

数据科学生产力

  1. 对 Jupyter 笔记本的支持: Jupyter 笔记本是目前最流行的开源笔记本实现。在拼接 DB 3.0 Jupyter 笔记本电脑是标准。Splice 的本地 Jupyter 支持来自 JupyterHub 和 BeakerX。
  • JupyterHub 是向多个用户提供 Jupyter 笔记本的最佳方式。每个用户都有自己的专用服务器来托管、存储和运行他们的 Jupyter 笔记本电脑,并且保证用户与其他人隔离。由于增加了链接 GitHub 帐户的功能,用户可以轻松共享笔记本电脑,从而加快协作和开发速度。
  • BeakerX 是位于 Jupyter 之上的一个附加层,提供了许多强大的功能:
  • 多语言编程。每种语言都有独立的内核,Splice Machine 允许在一个 Jupyter 笔记本中用多种不同的语言编程,从 SQL 到 R 到 Python 甚至 Java 和 Scala。这极大地增加了开发时间,因为它允许特性工程和实验在同一个地方进行。
  • 跨内核变量可用性。BeakerX 的全局名称空间为构建跨语言模型创造了机会。您可以将变量存储到 Python 内核中的全局 beakerx 对象中,并在 r 内核中访问这些数据。您甚至可以在 SQL 中选择一个变量,并从任何其他内核中访问它。这一强大的功能为任何想要快速进入并分析其数据子集的数据科学家节省了大量时间。

2.模型工作流管理

  • 通过我们基于 MLFlow 的新 MLManager 平台,我们已经结束了机器学习生命周期。我们改进的 API 使管理您的 ML 开发变得更快更容易,从模型参数和指标的批量记录到管道阶段和特性转换的完全可见性。只需添加几行代码,您就可以在几秒钟内重新创建任何 ML 管道。
  • 因为一切都存储在 Splice DB 中,所以维护模型的治理特别容易。通过直接访问培训和测试表,您可以确保新模型与当前部署的模型基于相同的数据进行评估。
  • 新的数据库内事务性机器学习模型部署—具有一个基于数据库触发器的数据实时评分功能。
  • MLFlow 1.1.0
  • 与平台无关:模型、工件和元数据保存在 Splice DB 中
  • 对 SQL 炼金术的拼接支持

重大平台升级

  • 支持 Cloudera 6.3 和 HWX 3.2.3
  • Apache Spark 和 Apache HBase 的最新版本: Splice Machine 3.0 使用户能够利用 HDFS 3.0、HBase 2.0 和 Spark 2.4.1 提供的底层功能

Kubernetes 支持—原生 Spark 数据源(NSDS)

Splice 使数据工程师和数据科学家能够使用熟悉的火花模式,通过数据帧与数据库进行交互。NSDS 2.0 通过容器/网络边界将数据帧流式传输到 Splice,提供了一种在 Kafka 后台实施的高吞吐量解决方案。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

NSDS 支持数据工程师和数据科学家对 Spark 数据帧进行拼接操作,避免了 JDBC/ODBC 协议 serde 和网络开销。

要观看拼接机器 3.0 的运行,请注册参加网络研讨会

YOLOv4 有什么新功能?

原文:https://towardsdatascience.com/whats-new-in-yolov4-323364bb3ad3?source=collection_archive---------6-----------------------

YOLO 是一个实时物体识别系统,可以在一个帧中识别多个物体——而且它还变得更好了!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

YOLO 实时检测视频中的对象。

什么是 YOLO?

YOLO 是你只看一次的简称。这是一个实时对象识别系统,可以在单个帧中识别多个对象。YOLO 识别物体比其他识别系统更准确、更快速。它可以预测多达 9000 个类,甚至看不见的类。实时识别系统将从图像中识别多个对象,并在对象周围创建边界框。它可以很容易地在生产系统中训练和部署。

这里有几个你可能感兴趣的链接:

- [Complete your Python analyses 10x faster with Mito](https://trymito.io/) [Product]- [Free skill tests for Data Scientists & ML Engineers](https://aigents.co/skills) [Test]- [All New Self-Driving Car Engineer Nanodegree](https://imp.i115008.net/c/2402645/1116216/11298)[Course]

你愿意多读一些这样的文章吗?如果是这样,你可以点击上面的任何链接来支持我。其中一些是附属链接,但你不需要购买任何东西。

YOLO 是如何工作的?

YOLO 是基于一个单一的卷积神经网络(CNN)。CNN 将图像划分成区域,然后预测每个区域的边界框和概率。它同时预测这些类别的多个边界框和概率。YOLO 在训练和测试期间看到整个图像,因此它隐式地编码了关于类及其外观的上下文信息。

YOLO v3 对 YOLO v4

谁开发了 YOLO?

YOLO 是由约瑟夫·雷德蒙开发的。2016 年推出的 YOLO 实时物体识别系统是物体识别研究的基石。这导致了更好更快的计算机视觉算法。

YOLOv4 是谁开发的?

YOLO v4 由阿列克谢·博奇科夫斯基、钱和廖宏远三位开发人员开发。

为什么 Joseph Redmon 不开发 YOLOv4?

他放弃了开发 YOLO v4,因为他的技术可能被滥用。他特别提到“军事应用和数据保护问题”。他停止了对计算机视觉的研究,因为他发现其中涉及的伦理问题“变得无法忽视”。

YOLOv4 有什么新功能?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

YOLOv4:物体检测的最佳速度和精度

YOLOv4 的架构由 CSPDarknet53 作为主干,空间金字塔池附加模块,PANet 路径聚合颈和 YOLOv3 头组成。

CSPDarknet53 是一种能够增强 CNN 学习能力的新型主干。在 CSPDarknet53 上添加了空间金字塔池块,以增加感受野并分离出最重要的上下文特征。PANet 取代了 YOLOv3 中用于目标检测的特征金字塔网络(FPN ),用作不同检测器级别的参数聚合方法。

什么是成绩的提高?

YOLOv4 的速度是 EfficientDet(竞争识别模型)的两倍,但性能相当。此外,AP(平均精度)和 FPS(每秒帧数)相比 YOLOv3 分别提高了 10%和 12%。

结论

YOLO 是一种未来主义的识别器,具有更快的 FPS,比现有的探测器更准确。该检测器可以在传统的 GPU 上训练和使用,这使得广泛采用成为可能。YOLOv4 中的新功能提高了分类器和检测器的准确性,并可用于其他研究项目。

参考

在你走之前

Twitter 上关注我,在那里我定期发布关于数据科学和机器学习的消息。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由Courtney hedgeUnsplash 拍摄

机器学习之后的下一步是什么?

原文:https://towardsdatascience.com/whats-next-after-machine-learning-1ad89aa45997?source=collection_archive---------53-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

安迪·凯利在 Unsplash 上的照片

商业和组织的观点

最近,人们越来越关注机器学习及其在个人和商业环境中的应用。维基百科将其定义为:

“对通过经验自动改进的计算机算法的研究”

机器学习利用数学模型和大数据来解决商业问题。这需要数据工程和数据科学的两个关键支持领域。在数据工程中,云计算的发展使得大数据可以廉价地存储。在数据科学领域,数据科学家和数据科学工具的兴起使得模型构建和探索变得更加容易。

然而,机器学习并不是数据分析进化之旅的顶峰。基于我丰富的组织经验数据分析愿景和实施,还有另一个明确的下一步。

为了理解接下来会发生什么,让我们来探索数据分析随着时间的推移而发生的演变。下面我将讨论 3 个关键的组织疲劳:

身体疲劳

许多组织都是以人为本的。这包括在电子表格或零散数据源中运行手动数据刷新的人员。鉴于对定期更新数据的需求和资产数量的不断增加,这种模式是不可持续的。我们称之为身体疲劳。

为了解决身体疲劳,组织正在投资自动化。这允许创建更多的数据处理和近乎实时的执行。所有这些都是通过利用相同数量的人员完成的。

决策疲劳

许多组织正在做出“直觉”决定。这主要是由于与组织决策相关的复杂因素,尽管有大量的数据和信息。因此,决策往往是不知情的或仓促的,这将导致次优的组织成长。我们称之为决策疲劳。

为了解决决策疲劳,组织正在投资机器学习。数据科学家通常被带入公司,通过预测性数学算法整合所有数据和因素。这使得组织能够做出非常复杂而又不那么明显的明智而主动的决策。

洞察力疲劳

许多组织没有提供足够的见解。这通常表现为周转时间长和缺乏业务背景。典型的根本原因通常与组织数据成熟度增长导致的指数级需求增长有关。此外,通常缺乏有才能的资源来帮助整个组织。我们称之为洞察力疲劳。

为了解决洞察疲劳,组织需要投资数据民主化。这包括创建生态系统、文化和工具,使企业能够“自助服务”。此外,它将实现数据团队和业务团队之间从“提供者”到“合作伙伴”的更大的工作协作。

走向数据民主化

最后,组织越来越倾向于数据驱动,因为它能产生竞争优势。在旅程中,值得注意的是解决三个主要疲劳的演进旅程。最重要的是,随着机器学习的大肆宣传,承认数据民主化可能是下一个重要步骤是很重要的。在这一前沿领域,需要更多的思想领导力和重点领域,以实现切实可行的组织变革。

如果你喜欢这篇文章,并想看更多的内容,请考虑加入媒体会员,使用下面的链接来支持我和其他作者:

[## 通过我的推荐链接加入 Medium-Albert Suryadi

阅读艾伯特·苏亚迪(以及媒体上成千上万的其他作家)的每一个故事。您的会员费直接支持…

albertsuryadi.medium.com](https://albertsuryadi.medium.com/membership)

关于作者:Albert sur yadi是蓝筹股组织中实现高级分析和数据科学能力的公认领导者。他被公认为分析团队(实践社区)的领导者,该团队授权并激励他人超越现状。

你在想什么?

原文:https://towardsdatascience.com/whats-on-your-mind-a8f556af8839?source=collection_archive---------57-----------------------

皮质

第 2 部分:运动想象的机器学习

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图片来源:chombosan | Getty Images

第 1 部分,共 4 部分:大脑计算机界面之旅的开始

第 2 部分,共 4 部分:运动想象的机器学习

当我们还是孩子的时候,世界对我们来说是新的。我们不能理解它,但我们可以用我们的感觉器官看到它,触摸它,闻到它,以及更多。除了翻译。但是随着年龄的增长,我们的老师、父母等等。教会我们社会和物质世界是如何运作的,让我们最终形成新的视角来理解我们周围的世界。随着大数据和不断改进的计算机器时代的到来,研究人员开始以同样的方式思考机器;空白的石板,当美联储收集数据(充当老师),它可以开始形成关于数据集描述的系统的新见解。尤其是这方面最著名的例子是 IBM 的沃森,一种能够提取重要数据并提供分析和见解以预测工作场所和行业结果的人工智能。沃森是使用大型金融和企业数据集进行训练的,使其能够提供人类因大量数据而无法检测到的洞察力。随着机器智能的这些进步,研究人员已经开始在不同领域使用学习系统,特别是神经科学和神经计算领域。诸如线性判别分析(LDA)和支持向量机(SVM)之类的机器学习算法可以用于检测脑电波中的模式,这些模式可以导致运动和情绪状态分类。

这个系列试图让一个在脑机接口(BCI)领域没有专业知识的人了解他们是什么,以及我们如何使用机器学习以独特的方式分析脑电波。本系列探索的项目是与阿拉巴马大学人类技术互动实验室的克里斯·克劳福德博士合作的。这也证明了业余科学家可以使用基本的脑电图(EEG)设备来提取和分析脑电波,进而可以部署大规模的开源平台,以便公众可以用自己的大脑数据进行实验。

在这里,我们将涵盖机器学习背后的基础知识及其在脑波分类中的应用:

  1. BCI.js 简介:我们将过一遍 BCI.js ,一个动态高效的库,用于对脑电波数据运行基本的机器学习算法。
  2. 实验流程:在我们进入算法本身之前,建立一个实验流程将有助于我们理解运行这些算法所必需的设置。
  3. 线性判别分析(LDA)和公共空间模式(CSP):我们将探索这两种机器学习算法,以及它们可以给我们的运动和情绪状态分类的洞察力。

为了实现本文中描述的项目部分,您将需要以下内容:

  • 对 JavaScript/React 以及如何使用 React 组件创建组件树有初步了解。这里是 React 文档
  • 一个 Chrome 浏览器和一个 Muse EEG 版本 2

本系列的第 1 部分探讨了 Muse EEG、蓝牙系统和项目架构;这里可以看

BCI.js:一个强大的机器学习库

一个基于 EEG 的 BCI 项目从使用电极系统或小型硬件解决方案(如 Muse EEG)收集神经系统数据开始。然后,这些数据被传输到 MATLAB 等计算环境中,在那里用傅里叶变换(将在本系列的后面讨论)等过滤算法和 LDA 等分类算法进行处理。阿拉巴马大学人类技术互动实验室的研究人员意识到,MATLAB 对脑电波的分析不是模块化的,不能分布在采用这种数学建模的应用程序中。他们试图将这些算法移植到更模块化的编程语言中,如 C 语言,但这对编程新手来说很难实现,而且学习曲线很陡。 BCI.js 就是为了解决这些问题而开发出来的;它是一个 JavaScript 库,可移植且相对易于使用,是开源的,并且可以很容易地与现有的应用程序集成。

BCI.js 包含许多可以帮助脑机接口应用开发的模块,但最重要的是用于机器学习算法的学习分类函数、混淆矩阵函数和转置函数。学习分类功能代表机器学习系统的两个主要阶段:学习和分类。在我们之前的类比中,学习步骤旨在充当教师,向系统提供数据,目的是在能够从新数据中得出自己的结论之前,向程序传授有关环境的知识。在分类步骤中,程序能够根据新的数据集以及从训练数据中学习到的信息来识别某些模式。为了说明这一点,我们将以线性判别分析(LDA)为例。LDA 是一种算法,它在两个数据类之间绘制一个边界,允许对新数据进行分类。我们将在本文的后面讨论 LDA 背后的数学,但是由于这是一个 learnclassify 函数的例子,这个定义已经足够了。下面是用于从现有数据中学习和对新数据进行分类的 LDA 函数的示例。类别 1 和 2 分别代表范围从 0 到 2 和 7 到 10 的两类数据点。 ldaParams 是存储从 ldaLearn 函数学习到的优化函数的变量,predictions 存储未知点所属类的分类向量。我们将在下一节中介绍优化函数以及 LDA 实际上是如何学习的,但只需知道 BCI.js 为机器学习算法提供了简单的实现,不需要深入的数学或统计知识。

混淆矩阵函数是 BCI.js 必须提供的第二个最重要的函数。混淆矩阵是分类系统上的性能度量,其利用分类结果的识别作为假阳性/阴性和真阳性/阴性。混淆矩阵的术语可能很难,但是这里的是让你熟悉这些术语的资源。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

混淆矩阵示例

这个混淆矩阵将允许我们分析我们的机器学习模型的性能,并调整系统,以最小化系统中的假阳性和假阴性的数量。下一个最重要的,也可能是最简单的函数是转置函数,它做一件基本的事情:翻转一个对角线上的矩阵(从左上延伸到右下),同时保持元素的原始顺序。在大多数矩阵中,左上、中、右下的元素在转置时保持在它们的原始位置,因此原始元素顺序保持不变。转置功能很有用,因为它允许一个矩阵满足矩阵乘法的要求(参见这里的以深入了解乘法时矩阵的维数)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Codeforwin 提供

四个函数, learnclassify混淆矩阵和 *transpose、*在对大脑数据运行机器学习模型时极其高效。它还允许实时处理,由 BCI.js 实现的一些机器学习算法只需不到 4 毫秒即可完成。考虑到一些机器学习模型可能需要几个小时的训练, BCI.js 允许极快高效的实验。现在我们已经建立了这四个函数,我们将介绍实验流程和 LDA 以及公共空间算法(CSP ),以便我们可以开始在大脑数据上实现它们,用于运动状态分类。

如果你有兴趣回顾脑电图数据使用的其他常见分类策略,请查阅这篇论文:分类系统 10 年回顾

实验流程

在我们进入关于这两种机器学习算法的技术细节之前,让我们先回顾一下。一旦系统开发完成,应该如何进行实验?我们可以使用机器学习模型的基本轮廓作为我们协议的基础;我们知道它需要一个训练阶段和一个测试阶段。如前所述,训练阶段“教导”模型理解标记的数据,以便在测试阶段,它可以在新数据中搜索和识别相似的模式。可以根据这个概念建立一个协议;我们需要一系列的训练和测试阶段来深入了解特定的认知任务。在这个项目和系列中,主要的认知任务集中在运动想象上,因为我有兴趣探索用 Muse 检测想象运动的可行性。

这个硬件不是为运动想象而设计的,但对于简单的运动任务来说已经足够了。这里是对前运动皮层和检测想象运动的硬件的回顾。

在本节中,我将使用右手和左手运动检测的例子来描述一个理想的实验流程,然后您可以推断出不同的认知活动的分类。

在右手与左手运动检测中,我们的目标是识别对象是在移动他/她的右手还是左手(甚至是两者的混合)。我们可以通过建立两个训练集和一个测试集来实现这一点:一个训练集用于右手数据,另一个用于左手数据,一个测试集用于测试阶段的未知数据点。在时间上,我们把它分成三个块,受试者记录他们自己移动右手一段时间,然后是左手,然后是他们希望模型分类的手部动作。例如,受试者 A 在记录期间移动他们的右手,然后移动他们的左手,对于测试集,他们决定只移动他们的右手。在对测试集中描述的运动进行分类之前,模型有足够的时间用两个训练集来训练自己。下面是实验流程的架构图。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

实验流程

第 1 部分中,我提到为了节省计算时间,我们将存储在训练和测试集中的数据点(缓冲区)数量限制在 2000 左右。您可以随时增加或减少该数量,但需要注意的是,训练和测试收集周期必须足够长,以满足缓冲区设置的限制。如果不是,那么不相等的数组大小使得模型不可能正确训练。举个例子,在采样率为 256(每秒收集 256 个值)的情况下,填充 2000 个数据点的缓冲区大约需要 10 秒钟。当你开发自己的应用程序时,我给你的建议是选择这两个变量:最小化计算时间,最大化收集效率,限制训练和测试时间。计算时间最小化和收集效率最大化是机器学习的模型标准,但我们为什么要限制训练和测试的时间呢?尽管更多的训练数据会使你的模型更精确,但通过脑机接口实验,让你的参与者接受超过一分钟的活动是乏味和多余的;大多数有意义的数据会在实验的早期出现。

实验流程在 BCI 应用中极其重要,甚至必须在创建和测试机器学习模型之前建立。了解您的实验流程实际上可以让您清楚您的模型试图优化什么性能任务,从而更容易开发模型。现在有趣的事情开始了,我们将讨论两种基本的机器学习模型:LDA 和 CSP。

线性判别分析

线性判别分析(LDA)是统计学和模式识别中使用的一种方法,通过找到特定特征的线性组合来表征两类或更多类数据。虽然这个定义看起来很复杂,但算法背后的直觉其实相当简单。让我们以天气为例;我们将使用两个指标来确定与天气相关的一天的类型:温度和降水百分比(下雨的可能性)。对于我们的两个类别,热天和冷天,较高的温度和较低的降水百分比表示热天,冷天则相反。当用 x 轴建模温度和 y 轴建模降水量绘制在图上时,右下角的点是热的,左上角的点是冷的。下面是 16 个不同日子的曲线图(冷热混合),每个班 8 天。LDA 将找到每个类的中心,并定义一个斜率和截距形式函数来分隔这两个类。因此,模型已经从训练数据中学习了哪些天是热的或凉爽的。如果您要向模型提供第 17 天的天气信息(作为测试集的一部分),模型可以对其进行适当的分类。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

温度与降水

在这一部分,我们将介绍 LDA 背后的数学原理,以及它如何应用于运动想象任务。如果你对统计学不熟悉,可以跳过数学部分;它不会限制你对 LDA 应用部分的理解。

LDA 的数学

分类的正式定义是根据共有的特征和质量排列数据的过程。我们如何用数学方法将这些数据点归入各自的类别?在分类中,我们考虑 Y 类,类别 i ,以及一个输入向量 X ,假设只有两个类别/类。我们可以将 X 归类为最大化类:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

LDA 中的分类依赖于贝叶斯定理,该定理规定:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们将 X 被分类到每个类中的概率与在该类中被分类为 X 的每个后续值相关联,本质上识别每个子类中的数据聚类。由于我们希望贝叶斯定理提供一个具有良好数学特性的概率密度函数,因此使用了正态分布的公式:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

正态分布提供的标准模型预测可变行为,如果这种预测不成立,模型的性能就会下降。将正态分布代入贝叶斯定理时,最大化结果值将导致正确的分类预测。简化后,判别函数为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

其中使用了类别 i 中输入的平均值(在我们的情况下为两个)和我们两个变量之间协方差的倒数(标准偏差)。 X 被分类到产生最高判别函数值的类别中。当评估两个类别的判别函数时,可以使用生成的等式对输入进行分类。如果有两个以上的类,跨 i 类评估上述函数;然而,为了运动想象的目的,两节课就足够了。为了绘制天气示例中显示的决策边界,您可以从两个类的判别函数输出中获取两个斜率的平均值,这将准确地绘制两个数据聚类之间的边界。现在,让我们继续右手和左手运动的运动想象的例子。

LDA 和运动想象

正如我们在第 1 部分中所建立的,在训练阶段收集的数据存储在 React 上下文中,以便可以随时从任何组件访问它。通过为 LDA 创建一个单独的组件,我们可以划分我们的代码,同时仍然能够向该组件传递值以及从该组件传递值。BCI . js’ LDAlearnclassify 可用于从训练数据中学习参数并对新点进行分类。在 learn 函数中,计算了决策边界的斜率和截距,因此无需自己实现上述计算。在我们将数据输入 LDA learn 函数之前,我们必须从 CSP 算法中计算 LDA 参数,如下所示。

虽然我们还没有讨论 CSP,但我们采用了 CSP 信号投影算法来分离和放大这两个信号。计算特征函数用于计算参数并放大训练集的信号,然后我们可以在学习函数中使用这些信号来计算 LDA 的参数。下面是从预处理到 LDA 参数的数据流的代码片段。

我们首先转置数据集,以符合前面解释的矩阵乘法规则。然后,我们学习 CSP 的参数,以便我们可以隔离和放大两种不同的信号类型,一种用于右手运动,另一种用于左手运动。然后,我们从 CSP 参数和每个训练集生成特征向量,这将有助于训练分类器。接下来,学习 LDA 参数,并生成两个变量θbθ描述 x 和 y 的变化, b 描述线性函数的截距。斜率 m 通过取 y 的负变化并除以 x 的变化来计算,并且 b 使用 x 轴的分布来归一化。我们可以用θb 来描述一个方程 y = mx+b 来定义我们的决策边界。下面是绘制的 LDA 的两个示例,带有决策边界。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

两个不同实验的 LDA

该可视化表示比较右手和左手运动的两个数据集。在这个实验中,受试者移动他们的左手或右手来收集两组训练数据。在图像的顶部,显示了一个图表,其中受试者在两个训练集中混合了右手和左手运动,这使模型混淆。在图像的底部,受试者在一个训练集中思考左手运动,在另一个训练集中思考右手运动,模型根据信号幅度准确地分离右手数据集(红色)和左手数据集(蓝色),并使用判别函数在两个数据集之间绘制决策边界。通过适当训练的模型,测试数据可以根据绘制的线准确分类,用户可以直观地看到他们的脑电波的分类。

这都是为了艾达!我们讨论了算法背后的数学,以及如何在运动想象实验中应用它来绘制决策边界。接下来,我们将介绍常见的空间模式(CSP)算法,以及如何使用它们来隔离信号以帮助分类。

常见空间模式

用于多通道 EEG 设备中运动状态分类的另一种算法是公共空间模式,或 CSP。该方法使用线性变换将多通道 EEG 信号投影到子空间中以生成空间模式向量。在本节中,由于上一段中的天气示例不适用,因此我们将使用右手和左手运动分类的重复示例。虽然我们不会涉及常见空间模式的数学,因为这超出了本系列的范围,但我们将探索与运动想象相关的 CSP 示例。

CSP 算法本质上是隔离和投射信号。举个例子,如果您同时播放两个音频信号,CSP 算法可以将信号隔离并投影到同一个子空间,从而允许您单独分析这两个信号。我们已经在运动想象和 LDA 中看到了类似的例子,其中 CSP 算法将两个信号(右手和左手)投射到两个独立的轴上。下面是一个例子,红点代表右手运动,蓝点代表左手运动。红点沿 x 轴投影,蓝点沿 y 轴投影,这是 LDA 从每个信号生成参数的关键。绿点来自测试集,投影在两个轴上,意味着左手和右手都有运动。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左手与右手运动想象的 CSP 图

CSP 算法本身并不作为一种学习形式,而是处理数据以使学习过程更容易。 BCI.js 结合了 CSP 和 LDA,创建了一个强大的处理和分类系统。然而,还有其他形式的处理,如傅立叶变换,可以提供更好的精度和性能。傅立叶变换可以与支持向量机(SVM)算法相结合,以在某些情况下提供更高的分类精度。我们将在第 3 部分讨论这个系统。然而,要构建一个简单的分类系统,CSP 是一种很好的处理方法,可以更好地帮助分类算法从 EEG 数据中提取特征。

结论

在本文中,我们介绍了 BCI.js、实验流程和 CSP-LDA 分类模型组合。你现在可以实现这个解决方案,开始从脑电波中提取有意义的数据。以下是一些有用的提示:

  • 记得检查你的 Muse 上的版本,并充满电以获得最佳性能。有时不同版本的 Muse 需要修改源代码中的 MuseClient 配置(来自第 1 部分)。
  • 尝试创建一个计时器,以确保在进入机器学习之前存储阵列已满,以便数据集保持一致。
  • 总是输出一个性能指标来检查你的模型的准确性。BCI.js 有一个混淆矩阵函数,可以帮助你计算模型精度。

在本系列的第 3 部分中,我们将深入探讨一些更复杂的算法,如傅立叶变换和 SVM 算法,从而构建我们对机器学习的讨论。我们还将介绍一种通过称为数据带通滤波器的方法来提高模型精度和数据质量的方法。

请继续关注第 3 部分!

出什么事了?:关于流行音乐流行原因的探索性分析项目

原文:https://towardsdatascience.com/whats-popping-an-exploratory-analytics-project-on-what-makes-popular-music-popular-7b183e6e48d2?source=collection_archive---------31-----------------------

对 Lyric、Spotify 和 Twitter 数据的 R 分析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由埃利斯·摩尔Unsplash 拍摄

你有没有想过流行歌曲有什么共同的特点?你有没有听过一首流行歌曲,并想知道为什么它如此受欢迎,因为它的歌词真的很基本?(看着你,舞猴。)

音乐是每个人都听的东西。它以各种不同的形式和流派存在,是一种人们在非常个人的层面上产生共鸣的艺术形式。这使得分析不仅作为一种文化产品,而且由于现代分析,作为一种数据产品变得特别有趣。Spotify 等公司通过每周策划播放列表和 Spotify Wrapped 等项目开创了这种分析和音乐策划。我认为在一个更高、更数据化的层面上剖析一些我们都非常珍视的东西会很有趣。在这个分析中,我将探索歌曲的内容,包括歌词和音乐,如何与其流行度相关联,以及围绕歌曲的歌词和流行情绪如何转化为流行度。然后,我将应用我的发现来分析坎耶·韦斯特的椎间盘造影术。

用于为该分析提供信息的人类行为数据包括来自 Spotify API 的流行数据和来自 Twitter API 的情感分析。

流行歌曲中最常见的词

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最流行单词的单词云(约 200 个单词)

“爱”是热门歌曲中最流行的词。你上一次听到与爱情无关的歌曲是什么时候?

结果并不令人惊讶。这个词云显示了流行歌曲中的前 200 个词,越大的词意味着出现的次数越多。流行歌曲是那些能引起很多人共鸣的歌曲,而“爱”绝对是每个人生活中常见的主题。许多其他流行词都是非常常见的词,也是以“爱”为主题的。“Like”和“babi (baby)”在列表中也很高,因为它们也属于这种一般的浪漫类型。

其他大多数热门词汇都很常见:想要、知道、能、制造、不要、得到等等。其中很多往往是连接歌词部分的动词,可能出现的频率更高,因为它们很短,在歌词中容易使用。其他单词如“耶”和“嘿”是常见的填充词。

一些更有趣的词仍然很常见,尽管它们在这个词云上可能会变小,它们是:夜晚、时间、好、心、女孩等等。这些词也遵循轻微的浪漫主题。

荣誉提名去了 F 字和 B 字。

使用的数据集:3(附录)

按流派分类的最常用词

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从左到右,从上到下排:另类/独立,嘻哈/说唱,摇滚,流行,R&B/灵魂乐,乡村

每种体裁中的热门词汇往往非常相似,有些词在某些体裁中出现的次数比其他体裁多。例如,Hip-Hop/Rap 中咒骂语的频率比其他流派高得多。R&B/灵魂使用更多的填充词,如“只是”和“是”。

使用的数据集:1(附录)

流行歌曲中最流行的词

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按十年划分的前 16 个单词的计数数据框架

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

热门词汇随时间变化的趋势(折线图形式)

这两个图表显示了十年来歌曲中最热门词汇的数量。随着时间的推移,大多数流行词的计数都有增加的趋势,这很有趣。该数据集包含每年前 50 首歌曲,因此歌曲数量受到控制。这意味着这些词在更新的歌曲中出现得更多;这可能与最近的歌曲具有更多重复的歌词/诗句的现象有关。

下图更直观地展示了字数是如何随时间变化的。大多数单词会随着时间的推移而增加,但有些单词的数量会减少。2010 年的数据全面下降,但这可能是因为数据不完整(数据集只包括 2010 年至 2015 年的数据)。然而,从 20 世纪 90 年代开始,一些词的出现频率似乎有所下降,如“get”、“love”和“babi ”,这表明歌曲歌词稍微偏离了浪漫。

使用的数据集:3(附录)

流行歌曲的抒情情怀

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

平均抒情情绪

在使用歌词计算歌曲的整体情绪后,计算了 1964 年至 2015 年公告牌 100 强年终排行榜的平均情绪。平均情绪如上图所示,似乎总体呈下降趋势。然而,尽管有这种下降趋势,总体情绪仍然是积极的(> 0)。一段时间内,歌曲人气波动似乎很大。例如,从 2007 年到 2011 年,市场人气有所下降,这可能与 2008 年金融危机有关。

使用的数据集:3(附录)+我使用 syuzhet 进行的情感分析

按流派划分的抒情情绪

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按流派划分的情感得分

以上是按流派划分的平均情绪表。此分析中使用的数据集是一个包含歌曲名称、歌词和流派信息的大型数据集。使用 syuzhet 方法(因为它在字典中有最多的单词),通过将歌曲按流派分组来计算情感,积极的分数意味着更积极的歌曲。从这些结果中,我们看到金属是负面情绪最多的流派,其次是嘻哈/说唱和朋克作为下一个负面情绪流派。最积极的流派是布鲁斯/爵士乐和乡村音乐。

使用的数据集:1(附录)+我使用 syuzhet 进行的情感分析

流行歌曲的音乐特征

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Spotify API 通过各种属性来描述每首歌曲的特征。例如,可跳舞性是“基于包括速度、节奏稳定性、节拍强度和整体规律性在内的音乐元素的组合,一个音轨有多适合跳舞”的度量,0 是最不适合跳舞,9 是最适合跳舞。你可以在这里找到其余的定义。

上图显示了 1964 年至 2015 年美国公告牌百强年终排行榜中的 7 个特征。一些有趣的趋势是,随着时间的推移,流行歌曲变得越来越不声学(红线)。效价,或者一首歌听起来有多积极/消极,也在轻微下降。除了趋势,有趣的是,这些流行歌曲往往具有相对较高的可舞性、活力和效价。他们也倾向于低语音,活跃度和工具性。

使用的数据集:3(附录)+我的 SpotifyR 采集/分析

流行歌曲的音乐情感与抒情情感

我觉得比较歌词的积极程度和音乐听起来的积极程度会很有趣。Spotify API/SpotifyR 包有一个度量标准,你可以用它来衡量这一点。这种特性被称为价,它被定义为“[对]一首曲目所传达的音乐积极性的描述”。

为了比较这两种情绪,因为它们是在不同的尺度上计算的(化合价的值是 0 到 1;歌词情感是单个单词情感值的总和),我决定将音乐和歌词的情感分数简单地转换为它们总体上是正面的还是负面的。积极的歌词情感分数用 1 表示,消极的分数用 0 表示。积极的音乐情感分数或价数用 1 表示,消极的分数用 0 表示。为了将化合价分数转换为正数或负数,我选择 0.5 作为 0 到 1 的总临界值,因为整个 Spotify 的化合价分布看起来相对正常和对称

#initializing the columns on the dataset
allfeatures$lyric.comp = c(2) 
allfeatures$music.comp = c(2)#looping through songs and assigning 0/1 for both lyric and musical sentiment scores
for (i in (1:nrow(allfeatures))) {
  if(allfeatures$sentiment[i] < 0) {
    allfeatures$lyric.comp[i] = 0
  } else {
    allfeatures$lyric.comp[i] = 1
  }

  if(allfeatures$valence[i] < 0.5) {
    allfeatures$music.comp[i] = 0
  } else {
    allfeatures$music.comp[i] = 1
  }
}
View(allfeatures)#calculating % of songs that have same sentiment for  music and lyrics
mean(allfeatures$lyric.comp == allfeatures$music.comp)

结果是, **60.89%的歌曲具有相同的音乐和抒情情感,**意味着它们要么[听起来消极,有更多消极的话]要么[听起来积极,有更多积极的话]。其余 39.11%的歌曲具有不同的音乐和抒情风格。这意味着他们要么[听起来积极,但有更多消极的话]要么[听起来消极,但有更多积极的话]。

使用的数据集:3(附录)+我的 SpotifyR 采集/分析

预测一首歌是否进入前 10 名

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

逻辑回归输出

我建立了三个不同的预测模型来预测一首歌是否会成为热门歌曲(出于这个项目的目的,半任意地定义为 Billboard 年度排行榜前 100 名)。第一个是使用各种行为和音乐指标的逻辑模型,可以在结果部分找到。

逻辑回归结果*

从汇总模型输出来看,“流行度”,根据 Spotify 指的是歌曲的当前流行度,在预测一首歌是否进入前 10 名方面非常重要(***)。这些数据可以追溯到 1964 年,因此有趣的是,我们可以看到当前歌曲的流行程度与预测一首歌在当时是否流行有关。声音是另一个非常重要的预测因素,从 1.120118 的正“估计”值来看,前 10 名/热门歌曲似乎更有声音。

其他相对重要的变量(**)是可跳舞性和情绪。更多的可跳舞性与更有可能成为热门歌曲相关,这符合流行歌曲往往更容易上口和易于跟随的范式。情感是通过将歌词中的正面和负面单词相加来计算的,值越高意味着歌曲越积极。该模型发现,更积极的歌曲往往更有可能成为热门歌曲/前 10 名。即使悲伤歌曲的兴起,我想人们仍然喜欢听到好的事情。

在清理数据集并向其中添加 Spotify API、流行度和情感数据后,我将数据分为训练集和测试集。设定阈值~0.25 后,准确率为 88.42% ,相当高。然而,由于数据中的大多数值不是点击数/前 10 名(因此将被预测为 0),这些数据点的优势可能会使模型预测更多的点击数/前 10 名,并且在预测前 10 名/点击数的歌曲时不准确。但是,这是一个模型的良好开端,进一步的分析应该检查所使用的预测因子,并进一步完善该模型的预测能力。更大的数据集也有助于提高准确性。

我还对数据运行了最近邻分类和随机森林模型,看看它们是否有更好的结果。精确度是相似的。代码和后续输出如下所示:

# NEAREST NEIGHBOR CLASSIFICATION
#model code, neighbors used = 3
neighbor = knn(allfeatures_train_neighbor, 
allfeatures_test_neighbor, allfeatures_train_neighbor_top10, k=3)#calculating accuracy
mean(neighbor == allfeatures_neighbor[-include_in_train, "Top10"])

从最近邻分类来看,准确率为 87.51%。

# RANDOM FOREST
#model code
rf = randomForest(as.factor(Top10) ~ popularity + key + tempo + 
                    sentiment, data = allfeatures_train_rf)
rf#calculating accuracy
rf_pred =predict(rf, allfeatures_test_rf)
mean(rf_pred == allfeatures_test$Top10)

从随机森林建模,准确率为 88.70%

*有关如何构建该模型的更多详细信息,请参见附录:流程/分析部分。

关于指标的更多详细信息

前两个指标是使用 Spotify API 和 R 包获得的。

  • 流行度:Spotify 歌曲流行度的数值衡量标准(Spotify 自己对流行度的计算可能基于各种因素,如流的数量、独特的流等。).
  • 情绪:从 syuzhet 包中的歌词计算情绪值,并使用 method = "syuzhet "(字典中有最多的单词)。

这些其他度量是使用数据帧中每个轨道的“获取 _ 轨道 _ 音频 _ 特征”获得的。以下单词的定义由 Spotify 给出,可在此处找到:

  • 可跳舞性:根据音乐元素的组合,包括速度、节奏稳定性、节拍强度和整体规律性(从低 0 到高 1),一首曲目适合跳舞的程度。
  • 能量:强度和活动的感知度量。通常,高能轨道感觉起来很快,很响,很嘈杂。例如,死亡金属具有高能量,而巴赫前奏曲在音阶上得分较低。对该属性有贡献的感知特征包括动态范围、感知响度、音色、开始速率和一般熵。
  • key:估计的音轨的整体 key。整数使用标准的音高分类符号映射到音高。例如,0 = C,1 = C♯/D♭,2 = D,等等。如果没有检测到密钥,则值为-1。
  • 语音:音轨中出现的语音。越是类似语音的录音(例如脱口秀、有声读物、诗歌),属性值就越接近 1.0。
  • 声音:一种置信度,从 0.0 到 1.0,表示音轨是否是声音的。1.0 表示音轨是声学的高置信度。
  • 乐器性:预测音轨是否不包含人声。“Ooh”和“aah”在这种情况下被视为乐器。Rap 或口语词轨道明显是“有声的”。仪器性值越接近 1.0。
  • 配价:从 0.0 到 1.0 的一种量度,描述音轨所传达的音乐积极性。高价曲目听起来更积极(例如,快乐、愉快、欣快),而低价曲目听起来更消极(例如,悲伤、沮丧、愤怒)。
  • 速度:轨道的总体估计速度,单位为每分钟节拍数(BPM)。

使用的数据集:3(附录)+我的 SpotifyR 采集/分析

歌词和流行分析的含义

那么是什么让流行歌曲流行起来呢?

  1. 铺天盖地的流行歌曲都有浪漫主题,并提到“爱”和“babi(宝贝)”等词。热门歌曲中的流行词因流派而略有不同,但大多数流派仍将浪漫词作为最常见的词。
  2. 尽管浪漫主题仍然占据着排行榜的主导地位,但自 60 年代以来,“爱”和“babi(宝贝)”这两个词的使用越来越少。也许品味正在慢慢远离浪漫主题的歌曲?虽然现在,他们仍然是最受欢迎的主题。
  3. 歌词情绪或歌曲信息/歌词的积极性正在下降。人们越来越不喜欢非常快乐的歌曲。这可能是由于更悲伤的流派和更能引起情感变化的音乐的兴起。
  4. 当检查音乐情绪或衡量一个声音听起来有多快乐或悲伤时,有一个类似的趋势,人们喜欢听起来更快乐的歌曲(更高价),而不喜欢原声歌曲。人们倾向于喜欢更适合跳舞、更有活力、更有积极意义的歌曲。
  5. 大多数歌曲(~60%)都有一致的歌词和音乐情感,这意味着歌词的积极性与音乐的积极性相匹配。对于流行歌曲来说,在歌曲中传达一致的信息是很重要的。
  6. 当建立一个模型来预测一首歌曲是否会成为热门/前 10 名时,发现歌曲的当前流行度、歌词情感和声音是重要的预测因素。展望未来,该模型的敏感性应该在更大的模型上进行测试,以提供更大的预测能力。然而,这个模型提供了一个大概的指导方针,如果一首歌的作者想要大获成功,他应该遵循什么样的指导方针。

让我们学以致用:Kanye West 分析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Unsplash 上的 israel palacio 拍摄

说唱歌手兼企业家坎耶·韦斯特(Kanye West)是流行文化偶像。他的职业生涯多产,发行了 10 多张专辑,获得了 21 个格莱美奖和许多其他荣誉,这使他成为迄今为止获得最多奖项和最受好评的音乐艺术家之一。

作为一名艺术家,他一直在不断进化。从他早期更传统的 hip-hop sounding 专辑到他现在更混合的风格,结合了福音、电子和摇滚流派的影响,Kanye 一直被认为是业内的进步和创新者。

在音乐之外,他是一个非常直言不讳,甚至有争议的公众人物。坎耶因在 2009 年 MTV 音乐录影带颁奖典礼上打断泰勒·斯威夫特的演讲而声名狼藉。他经常利用他的平台来表达他对政治和音乐/时尚产业的观点。除了音乐,他还有自己的服装品牌 YEEZY。

综上所述,许多人认为坎耶是一个天才,而其他人则认为他是另一个令人讨厌的精神错乱的名人。无论哪种方式,看看 Kanye 的光盘目录是否与我们在上面收集到的一般结论一致都将是有趣的。他是一个在职业生涯中不断发展的艺术家,并产生了很多轰动,这使得这个分析特别有趣。他的歌词跟随流行歌曲的趋势吗?在他的职业生涯中,他的音乐和歌词在哪些方面发生了变化?我们能预测他的哪些歌曲是热门/前 10 名吗?最重要的是,人们对 Kanye 的音乐有什么感觉?

在我们深入分析之前,我想花点时间提醒你一些我最喜欢的标志性的坎耶歌词:

“星期天关门,你是我的福乐鸡快餐店”(出自耶稣为王)

" Poopy-di Scoop
Scoop-Diddy-hook
hoop-di-Scoop-di-Poop
Poop-di-scoopty "
(出自《自我提升》)

“如果你摔倒在水泥地上,那是你屁股的错”
(出自我美丽黑暗扭曲的幻想)

本节中使用的人类行为数据是为每张专辑收集的推文,然后进行情感分析。更多细节见下文。

在这个分析中,我修改了一个数据集,其中包含 Kanye 的全长个人专辑的歌曲、艺术家和歌词信息,以包括他最近的两张专辑以及流行度、情感和音乐属性/特征信息。数据集总共有 155 首歌曲。

用于以下分析的数据集:4(附录)+清洗+添加流行度、情感和音乐特征数据;5(附录)

总体椎间盘造影分析

坎耶歌曲中最流行的词

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

坎耶的全部字典中最常见的单词

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Kanye 全部词典中前 20 个单词的计数

从这个分析中,你可以看到 Kanye 的热门词汇与流行歌曲的热门词汇非常相似,如“喜欢”、“爱”、“知道”、“不要”、“只是”、“得到”等等。与一般的流行歌曲相比,Kanye 的歌曲中出现了一些特定的词,如 n-词,“shit”,“aint’t”,“bitch”和“god”。这些词在嘻哈/说唱音乐中更受欢迎,Kanye 通常属于这种类型。就整体抒情内容而言,坎耶最受欢迎的词确实沿用了大多数流行歌曲的词。

整体歌词情绪分析

在进行了情绪分析后,我发现坎耶整个唱片集的抒情情绪是 -0.154 ,意味着他的歌词倾向于负面多于正面的词。考虑到说唱更多的口语性质和更严肃、更广泛的话题,这并不奇怪。尤其是坎耶的歌词,众所周知,从滑稽到挑衅到激烈。

整体音乐特征分析

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Kanye 整个唱片集的平均音乐特征

这个向量显示了 Kanye 整个唱片集的平均音乐特征。在 155 首歌曲中,平均来说,Kanye 的歌曲更适合跳舞,也更有活力。它们也具有较低的工具性。其他特征都很一般。具有很高的可舞性和能量是流行歌曲的特征,所以坎耶的歌曲具有流行歌曲的一般音乐特征。然而,Kanye 的唱片比大多数流行歌曲有更高的语音和活力,可能是由于说唱的性质。

逐个专辑分析

专辑最常用词

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

专辑中最常见的单词变化(从左到右:发行时间顺序)。

每本专辑中最常用的单词如上表所示。NAs 代表 0。正如你所看到的,随着专辑的进展,Kanye 一直在改变他写的词。像“喜欢”、“不要”这样的词,以及名词性的词越来越少被使用。一些单词在专辑中以相似的数量出现,如“just”、“make”和“want”。显然,这不是一个完整的分析,通过更严格的机器学习方法,看到更多的单词以及它们在专辑中的趋势会很有趣。

这可能是因为他最近创作的歌曲字数较少,更多的是歌唱性的。这也可能是对早期内容的真正转变。

专辑感悟

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

感情按专辑,按时间顺序往下。

这张表按发行时间顺序显示了每张专辑的人气。结果相当有趣。虽然 Kanye 的 discography 整体情绪略负(-0.154),但也有积极的情绪专辑。其中包括《远离校园》、《迟到的登记》、《毕业》、《808 的心碎》和《耶稣为王》,后者是最积极的,平均情绪得分为+3.768。总的来说,似乎 Kanye 出道时歌词比较正面,然后进步到发布歌词比较负面的歌曲。他最近的专辑是这一趋势中的异类,所以看看他接下来发布的是正面还是负面的歌词会很有趣。

专辑的音乐属性/特征

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按专辑的平均音乐特征,从上到下按时间顺序排列。

从这个分析中,你可以看到每个音乐特征是如何随着时间的推移而演变的。非常有趣的是,尽管有更多负面的歌词(专辑的情绪),一首歌听起来有多积极/消极的效价仍然相对积极。这是不匹配的,因为大多数流行歌曲(流行歌曲的音乐情感与歌词情感)具有匹配的歌词和音乐情感。

总的来说,Kanye 的音乐特征一直保持不变。他的专辑总是有很高的可跳性和活力,这可能是他的歌曲受欢迎的部分原因。随着时间的推移,他的专辑的音质会有所变化,这可能是因为制作风格的改变和尝试。

应用前 10 名/成功案例模型

当将逻辑回归模型应用于该 Kanye 数据集时,准确率为 92.9% 。然而,如果你仔细观察数据,坎耶的 9 首热门/前 10 名歌曲没有一首被正确预测。因此,即使准确率很高,那也可能是因为大多数歌曲不是热门歌曲,并且低于阈值。

这个模型有明显的问题。有多种促成因素:

  • Kanye 数据集只有 155 行,非常小。
  • 从技术上来说,Kanye 不是一个“流行”艺术家,所以他的流行歌曲可能不会跟随一般趋势。
  • 原始模型中的变量需要调整或纳入更多数据以获得更大的预测能力。

或者,也许这只是表明,创造一首热门/前 10 名的歌曲并不像人们想象的那样公式化!展望未来,更多地使用模型来获得更高的准确性会很有趣。

推特分析

与“坎耶”相关的最常见词汇

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Twitter 上与 Kanye 相关的热门词汇。

使用 RTweet 包抓取 Twitter 数据,这些是最常与“Kanye”联系在一起的词。当人们谈论 Kanye 时,最流行的词似乎是“喜欢”,这表明艺术家周围的情绪通常是非常积极的。其他常用词包括“song”和其他类似的艺术家,如 Kendrick Lamar 和 Drake(你也可以看到 Travis Scott、卡迪小子和碧昂斯的较小单词散落在那里)。

专辑推特人气

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

按专辑从上到下的时间顺序排列。

这些数据是通过搜索与 Kanye 相关联的每张专辑的名称并计算情感来抓取 Twitter 而生成的(更多详细信息请参见附录 9)。坎耶每张专辑的人气似乎都相当积极,这与坎耶作为一名广受好评的艺术家的地位相符。一些专辑比其他专辑更受欢迎,如《毕业》、《耶稣为王》和《我美丽的黑暗扭曲的幻想》。将来看看是否可以对单个曲目进行情感分析会很有趣,因为搜索更通用的歌曲名称音乐比搜索专辑名称要困难一些。

整理专辑信息

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

流行度、歌词情绪、推特情绪和音乐属性/特征。

此表显示了以上所有汇编到一个表中的指标。当并排在一起时,我们可以看到专辑的受欢迎程度、歌词情感、Twitter 情感和音乐属性是如何相互关联的。流行度是通过取专辑歌曲流行度的平均值来计算的。

最受欢迎的专辑“耶稣是王”有最积极的歌词情绪,但不是最积极的推特情绪。与 Kanye 的其他专辑相比,它没有最高价(11 张中的第 6 张)或积极向上的音乐,舞蹈性(11 张中的第 10 张)和活力(11 张中的第 9 张)较低。因此,即使它更受欢迎,它也没有通常与流行歌曲相关的最高音乐属性值(流行歌曲随着时间推移的音乐特征)。

Twitter 上人气最高的专辑“毕业”,意思是更积极的口碑,是 Kanye 第四大最受欢迎的专辑,歌词在所有专辑中排名第五。与 Kanye 的其他专辑相比,这张专辑的可跳舞性(第 8)和活力(第 5)也很一般,这可能表明听众在听 Kanye 的时候并不是在寻找“流行”的歌曲。

听起来最积极(高价)的专辑“远离校园”只有一般的可跳性和活力。这也是最不受欢迎的坎耶专辑之一(第三),并有非常积极的抒情情绪(第二)。

我可以继续说下去,但根据这些结果,有时似乎最受欢迎的专辑(按 Twitter 人气和受欢迎程度)并不具备流行歌曲所具有的高度可舞性和活力的标志性特征。

结论

在进行情感分析并将其与 Spotify 和 Twitter API 数据等人类行为数据联系起来后,我发现肯定有一些词与积极的歌曲关联更多,尤其是那些有浪漫主题的词,如“爱情”和“babi(宝贝)”。随着时间的推移,我们越来越多地看到爱情主题的音乐不再主宰排行榜。

就歌词情绪而言,歌曲通常越来越悲伤,但总体上仍保持略微积极的情绪(情绪高于 0)。

一般来说,最流行的歌曲是高度可舞,充满活力和声音。他们往往还具有较低的工具性和演讲性。

将所有这些因素结合在一起,我们可以尝试预测哪些歌曲将成为热门歌曲,但该模型未能准确预测什么是热门歌曲。然而,我们仍然可以收集重要的见解,例如哪些变量是重要的,并使用这些来调整模型向前发展。

将这些发现应用于 Kanye West 作为一个案例研究是很有意思的,看看一般结论是否成立。他的唱片通常遵循流行歌曲的特点,包括具有高度的舞蹈性和活力。从他出道到现在,歌词的情绪普遍降低,最新专辑《耶稣为王》是个例外。逻辑回归热门/前 10 名模型并不成立,但这也意味着找出流行歌曲流行的原因更加微妙。通过分析 Kanye 每张专辑的 tweets,我们看到他的音乐广受好评。此外,查看专辑的歌词情感、推特情感、流行度和音乐属性/特征如何相互关联提供了有趣的观察。这也表明破解一首歌流行的原因是相当复杂的。总的来说,这个分析是这样做的一个很好的第一次尝试,编写代码也很有趣。

感谢阅读!

关于作者

Alice Tang 是宾夕法尼亚大学生物学、商业分析和医疗保健管理专业的大四学生。音乐是她最大的兴趣之一,她认为她会找到一种有趣的方式将其融入她的学业。这个数据项目是 Prasanna Tambe 教授的 OIDD 245:分析和数字经济课程的一部分。

附录

使用的数据集😗*

  1. Kaggle 数据集:Nikita Detkov 和 Ilya @https://www . ka ggle . com/det kov/lyrics-Dataset # songs _ Dataset . CSV超过 2k 位歌手的 25 万+歌词。该数据集包含 250,000 多首歌曲的歌手、专辑、歌曲、流派和歌词信息。当涉及流派并且歌曲的流行度/排名不重要时(例如,按流派分类的最常用词),使用该数据集。
  2. Kaggle 数据集:Vageesha bud anur/Jin wook Chang @【https://www.kaggle.com/vageeshabudanur/songdetails】的歌曲详情。该数据集包含从 1900 年到 2010 年进入排行榜前 10 名的所有歌曲的歌曲、年份、艺术家信息。
  3. Kaggle 数据集:Billboard 1964–2015 歌曲+rakan nimer @https://www.kaggle.com/rakannimer/billboard-lyrics作词。该数据集包含 1964 年至 2015 年公告牌年度排行榜前 100 首歌曲中所有歌曲的排名、歌曲、艺术家、年份和歌词信息(每年年末的前 100 首歌曲)。该数据集用于涉及流行度的分析。
  4. Kaggle 数据集:威尔@https://www.kaggle.com/slickwilly/kanye-west-discography的 Kanye West Discography。该数据集包含除 Kanye 最近两张专辑之外的所有歌曲、艺术家和歌词信息。
  5. 使用访问 Twitter API 的 RTweet 包自行生成的 Twitter 数据集。使用 search_tweets 功能,通过查询专辑名称,删除了过去 7 天的推文。
  • *为这些 Kaggle 数据集的创建者大声疾呼!我一个人可能要花很长时间来搜集所有的歌词。

流程/分析:

  1. 首先,数据集被导入并清理/标准化。在一些歌词中有一些奇怪的字符,我不得不寻找解决方法。所有相关字段(歌词、艺术家姓名、歌曲名称)都改为小写,并删除了标点符号。
  2. 对于 wordcloud 分析,使用 wordcloud 包创建、清理和生成语料库文档。流派词云分析是在按流派过滤歌曲后进行的。
  3. 为了生成一段时间内最流行的单词,构建了一个 for 循环来生成文档术语矩阵,然后将这些矩阵转换为计算频率的矩阵。由此产生的前 25 个单词和它们的频率被放入一个列表中,该列表可以用图表显示和打印。
  4. 使用 syuzhet 软件包进行情感分析。使用 for 循环来获取每首歌曲的情感,并将该分数添加到新列中。
  5. 受欢迎程度是这个项目中使用的人类行为数据。你可以通过使用“get_track”来获得歌曲的流行度,但你需要 Spotify ID 来调用这个功能,而我没有这个功能。相反,我使用了一个更迂回的功能“search_spotify”来首先搜索艺术家,然后从列表中识别歌曲。边缘情况(空搜索或不匹配的歌曲名称/艺术家)必须被合并,这样循环就不会烧坏。一旦匹配了歌曲,就可以提取流行度。我使用的主要数据集是第三个数据集,包含了从 1964 年到 2015 年的 Billboard 年度排行榜前 100 名的所有歌曲。由于我无法将所有歌曲与 spotify IDs 匹配,所以我最终使用了数据集中的 3654/5100 个原始行/歌曲,这仍然是一个相当大的数量。这个具有 n=3654 的流行度数据的清理过的数据集被用于其余的分析。
  6. Spotify 的音乐属性/特征必须在步骤 5 中手动添加到上述数据集中。使用 for 循环,提取 Spotify IDs 并将其输入函数“get_track_audio_features”以获取音乐属性数据。然后将其“绑定”到现有的数据集,以产生具有歌曲、艺术家、歌词、流行度和音乐属性/特征信息的数据集。
  7. 对于逻辑回归,在步骤 6 中向数据集添加了一个名为“Top10”的附加列。这是从 1964 年到 2015 年的 Billboard 年度排行榜前 100 名歌曲的排名,如果这首歌是前 10 名歌曲,则分配“1”,如果不是,则分配“0”。这是一种半随意的方式来指定什么是超级流行/热门歌曲。未来应该使用不同的界限来检验预测因子的敏感性和显著性。然后对最终数据集运行三种不同的模型:逻辑回归、最近邻分类和随机森林。
  8. 对于 Kanye 特定的分析,使用了与 1–7 相似的方法,但只针对 Kanye 的数据。为了使歌曲和专辑与 Spotify API 上的流行度和音乐属性值相匹配,进行了大量的清理工作。
  9. Twitter API/RTweet 用于提取每张专辑的人类行为数据。在过去的 7 天里,我能够从每张专辑中拉出 1000 条推文,包括流行的和最近的推文。我排除了转发、引用和回复。我用 Kanye 的名字搜索专辑名称的查询词,以过滤出通用的结果(例如,一般谈论“毕业”的推文与谈论 Kanye 专辑毕业的推文)。

使用的包:

lubridate,magrittr,spotifyr,tm,wordcloud,stringr,dplyr,readr,rvest,ggplot2,tidyr,tidytext,syuzhet,readr,rpart,httr,class,randomForest,rtweet

其他来源:

  1. https://en . Wikipedia . org/wiki/Kanye _ West # 1996% E2 % 80% 932002:_ Early _ work _ and _ Roc-A-Fella _ Records
  2. 图片来源:Unsplash
  3. AZlyrics.com 为坎耶最近的两张专辑搜集了不在第五号数据集中的歌词。

“那是什么?现实世界中的强化学习?”

原文:https://towardsdatascience.com/whats-that-reinforcement-learning-in-the-real-world-942d5d735d8e?source=collection_archive---------55-----------------------

一个开放的痛苦减缓现实世界 RL 的亮点,以及一些使应用可行的创造性方法。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Unsplash 上的Torsten dede RICS拍摄的图像

强化学习提供了一种解决机器学习难题的独特方式。它的顺序决策能力,以及对需要在即时和长期回报之间进行权衡的任务的适用性,是一些使其在监督学习或无监督学习方法相比较而言不适合的环境中成为理想选择的因素。

通过让代理从零知识开始,然后通过与环境的交互来学习定性的良好行为,几乎可以说强化学习(RL)是迄今为止最接近人工智能的东西。我们可以看到 RL 被用于机器人控制,医疗保健中的治疗设计,以及其他;但是,为什么我们不吹嘘许多 RL 代理正在扩大到现实世界的生产系统?

1。诅咒的奖励功能

像 *Atari、*这样的游戏是如此好的 RL 基准是有原因的——它们让我们只关心最大化分数,而不用担心设计奖励函数。一个理想的奖励函数既能鼓励代理人按照我们希望的方式行事,同时又是可学习的。

我们可以选择仅在目标状态奖励代理*,而不在其他地方奖励代理。例如,在这样一个迷宫解决任务中,代理人只有找到目标房间才能得到+1 奖励。这是一个稀疏的奖励。它简单明了地指定了期望的目标,但也几乎是不可学习的,因为代理人没有收到关于它离期望目标有多近的反馈。对此,通常的解决方案是重塑函数,以在代理接近目标时提供递增的奖励。然而,该政策可能会曲解这种奖励机制,并最终学习最懒惰的可能行为来适应局部最优,而不是我们希望它应该学习的。*

这使得奖励函数的设计异常古怪。

一个很好的例子来自 Irpan,一个机器人手臂被训练去触及桌面上的目标。然而,可爱的机器人选择学习砸桌子,这使目标指向它。

值得注意的是,一个奖励函数可以优化一个单一的度量,仅仅是为了在学习行为的评估过程中发现其他同等重要的度量。许多系统需要多维全局奖励函数来优化许多较小的目标。为了成功,这需要在奖励函数中整合多个系统指标,这可能很难实现,或者更糟的是,一些指标我们仍然不知道。然而,对于 RL 特有的多目标奖励函数,还没有多少研究。

在现实世界的设置中,奖励函数必须对策略进行调整,使其在任务目标的所有实例上(而不仅仅是其中的一个子集)都能按预期执行。如果一个机器人正在向顾客分发饼干和微笑,它应该为每一个顾客这样做,而不仅仅是为一个吝啬的顾客。

奖励函数的现有方法

模仿学习不是硬编码一个改善系统政策的奖励函数,而是利用专家的示范来训练一个政策——这本质上是监督学习。该系统学习复制专家的确切行为,而不关心专家试图实现什么。

反向 RL 通过尝试从演示的行为中推断专家的意图,而不是复制专家可能无意中采取的非最佳行动,来改进模仿技术。它学习适合专家演示的可能的奖励函数。

2。安全 RL

安全是我们不在道路上发布轮式机器并要求它们通过犯错来学习的一个很好的原因。它是关于确保一个自治系统构成不可挽回的自我毁灭或对人类生命构成危险的非临界风险。

安全感知代理

安全 RL 的现有方法是在策略上指定安全约束。安全约束可以是任何被认为潜在不安全的行为,例如在航行期间避免高速碰撞。以这种方式优化安全性的解决方案被称为受约束的马尔可夫决策过程 (MDP)。该约束可以是固定的和预定的,或者是可变的,以允许在最大化预期回报和满足最小安全阈值之间进行权衡。类似地,通过使用概率客观 MDP,我们可以选择激励代理人在选定的步骤数内采取冒险行动以获得迫在眉睫的更高回报,或者专注于保持安全。

受约束的 MDP 的问题在于,为了了解保持安全需要什么,系统必须通过采取导致不安全后果的行动来获得经验。这种冒险行为通常会在培训期间受到鼓励,以产生一个策略,该策略概括为在现实世界的用例中避免它们。

在训练期间鼓励不安全的行为可以包括学习一个近似器,该近似器预测处于附近状态的安全性,然后可以用于帮助代理的探索策略。

**3。**状态感测和驱动的延迟

高维输入需要耐心处理,现实世界的系统使用多个传感器和图像来获得状态的准确表示。因此,在观察到的状态到达代理之前需要时间。向致动器发送选定的动作也会有一定的通信延迟。行动执行时也不会立即达到预期的下一个状态,因为移动系统部件需要时间来调整——相对于某个物体,将机械臂从 45 旋转到 100 度不会在一瞬间实现。

所有这些意味着代理人**(a| s)可能正在采取以过去的状态为条件的动作,而不是当前的,时间步长 t. 这将违反马尔可夫性质要求下一个状态 sₜ ₊₁ 有条件地依赖于当前状态和动作对(马尔科夫性是 RL 决策过程p*(sₜ₊₁|sₜ*,t41】π(a| s)【t49)的基础,所以违反它是一件大事。**

减轻系统延迟

向代理添加内存可用于优化两个因素:

  • 动作延迟:将一个简短的动作历史合并到状态中,帮助策略学会将每个动作与结果延迟相关联。当然,这种启发式方法增加了输入维度。
  • 寻找对未来状态负责的延迟状态-动作转换对:包括使用来自记忆的过去的状态-动作转换对,以尝试对在当前时间步长的预测中有用的转换给予应有的信任。

***4。*系统的非平稳性和政策稳健性

真实系统将经常经历可移动接头处的磨损或通风口的部分堵塞,如果代理人不知道,这将导致学习到的环境动力学中的不可观察到的变化。对于这种类型的问题,我们可以使用一个随时间变化的非常数奖励函数来模拟非平稳性。通过元学习寻找一个最能适应非平稳性引入的变化的策略也是不错的尝试。

在基于模型的 RL 中出现了另一种情况,其中寻求内在好奇心(仅因在新/新奇状态中的探索而获得奖励)的代理将需要观测的稳定函数,以确保在基于策略的模型训练期间的稳定性。然而,这样的代理被认为经历了不稳定的回报,因为被认为是新的状态在未来的时间步骤中将是旧的和无回报的。由于动态模型在演化过程中学习新的特性来纠正过去的错误,所以它也是不稳定的一个额外来源。

我们可以通过随机初始化和固定卷积网络的特征作为观察函数来减轻这种情况,代价是状态的充分表示,或者从不需要特征学习的图像像素中学习。

非平稳性是真实系统中可能遇到的随机性的一个来源——它也必然会有来自传感器读数和动作执行的噪声。因此,需要确保代理对这些问题的不同子集是健壮的。成功的模拟真实转移很大程度上依赖于学习策略对真实世界系统的欠建模特征的鲁棒性。

制定稳健的政策

领域随机化在增加策略稳健性方面被证明是非常宝贵的,它引入了对代理环境的干扰,并平均了在训练期间学习到的错误。此外,训练一个策略,使其能够识别当前环境,并根据情况进行自我调整(元学习),可以减轻环境噪音的影响。

稳健的 MDP 公式专注于改善最坏情况价值函数,然后产生一个可以承受各种环境干扰的代理。在每个时间步,代理使用单独的转移函数(s“| s,a )来最小化长期预测值。

***5。*习得政策的可解释性

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

安博塞利,肯亚| 哈希尔古德卡Unsplash

在可解释的 RL 方面做得很少。在真实的系统中,我们需要对代理的意图有明确的保证,并对我们指出潜在失败案例的能力有信心。由于该策略可能会为系统问题创建一个新的、意想不到的解决方案,因此正确认识其短期和长期意图至关重要。

一种令人兴奋的方法——可编程解释的强化学习——试图将非线性策略提炼为人类可验证的、显式编码的系统程序。

***6。*高维状态和动作空间

维数灾难无处不在。例如,机器人系统在它们的许多自由度上具有连续的动作空间,这些自由度与每一个自由度相关的关节角度和速度有关。与监督和非监督设置不同,在监督和非监督设置中,一些回归方法,如 l1 正则化,给出一个缩减的输入特征空间,这在 RL 中更难实现,因为我们需要在整个状态-动作-空间中收集数据,以更好地收敛我们的全局策略。此外,(无监督)学习中的这种回归技巧旨在增加模型的方差。但是在 RL 中,我们已经有一肚子的差异,我们关心的是找到减少差异的方法。

接近

通过减少候选动作的数量实现了较低的输入维数。其中一个方法是消除看起来不相关的行为。虽然这可能会诱使我们学习另一个函数逼近器,但它会使参数空间变得更大。通过将无用的行为框定为 MDP 问题的一部分,并使用上下文强盗将其过滤掉,已经研究了行为消除。此外,给定候选动作的向量,对最近的动作执行最近邻搜索可以降低离散动作空间的维度。

对于高维状态,可以通过使用逆动力学来实现更紧凑的状态表示。这预测了下一个和前一个状态( a ₜ| s ₜ₋₁, s ₜ₊₁).)给出的动作所使用的直觉是,所学习的观察空间的特征是那些在代理的直接控制下的特征,而那些被忽略的是代理对其没有直接影响的环境方面。

***7。*政策外学习

脱离策略学习允许我们使用轨迹( s,a,s,a……)在独立于代理运行的策略下训练代理。在实际系统中,当代理收集新数据时,它将被用来提高当前策略的性能。由于这种改进可能会出错,而这在生产中是至关重要的,因此在部署新策略之前,需要先对其进行偏离策略的评估。

政策外评估提出了一个问题,即在使用相关但不同的分布样本时,评估某一分布下的概率。重要性抽样被广泛用于缓解这种分布不匹配。我们还可以学习系统的动力学模型,并使用模型转换预测来评估新策略。

***8。*样本复杂度

一个模拟的环境提供了无限的训练数据,并且完全不用担心不良行为的影响。真实系统中的所有训练数据都来自系统本身,但不是免费的。

在真实世界的系统中产生 RL 数据是昂贵的——代理通过多次动作来学习,这可能导致在它学习到预期的行为之前系统磨损。因此,代理人必须遵守安全,严格限制探索,同时表现得相当好。

与模拟器不同,实时运行也很慢,无法加速。回报期可能长达数月,例如在医疗保健政策中,这限制了代理人纠正错误的频率。

基于模型的 RL 可以通过对合成样本进行训练来提供样本效率的优势。如果模型是真实系统的足够接近的表示,这可能是有帮助的。对于初始策略,使用专家演示作为训练过渡,而不是随机初始化,将有助于降低长期样本复杂性。此外,元学习可以使学习策略适应训练分布中的未知任务,减少为多个相似目标训练策略所需的样本数量。

结论

这是对减缓强化学习在现实世界中的应用的已知核心挑战的概述。强调的解决方案绝不是完全的解决方案,也不是详尽无遗的,而是旨在展示为解决同一问题而选择的不同视角,以及随着时间的推移而取得的进步。

参考文献

[1] Kober J .,Bagnell,A .,Peters,j .,机器人学中的强化学习:一项调查。IJRR,2013 年。

[2] Dulac-Arnold G .,Mankowitz D. Hester T .,现实世界强化学习的挑战,ICML,2019。

[3]y .布尔达,Storkey A .,Edwards H .,Pathak d .,Darrell t .大规模研究好奇心驱动的学习,2018。

【4】深 RL 还不行https://www.alexirpan.com/2018/02/14/rl-hard.html

处理 NaN 值的最好方法是什么?

原文:https://towardsdatascience.com/whats-the-best-way-to-handle-nan-values-62d50f738fc?source=collection_archive---------2-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在我进行大数据分析的实践中,我发现了一个可以破坏每个数据分析过程的障碍。这种障碍在数据科学和机器学习中被称为 NaN 值。

什么是 NaN 价值观?

NaN 或 Not 数字是在 DataFramenumpy 数组中的特殊值,表示单元格中缺少的值。在编程语言中,它们也被表示,例如在 Python 中,它们被表示为 None 值。

您可能认为 None(或 NaN)值只是零,因为它们表示没有值。但是这里有一个陷阱,零和 None 值之间的区别在于,零是一个值(例如 integer 或 float),而 None 值表示没有该值。这里有一个迷因很好地解释了零价值和零价值之间的区别:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

0 和 NULL 的区别(来源——谷歌)

南值有多危险?

NaN 值在两个方面是危险的:

  • 一些指标的变化,如平均值或中间值,因此给科学家错误的信息。
  • sklearn 实现的算法不能在具有这样的值的数据集上执行(尝试在心脏病数据集上实现 TreeDecsisionClassifier)。

怎么处理他们?

那么,如果 NaN 值对数据科学家的工作如此危险,我们应该如何处理它们呢?有几种解决方案:

  • 擦除具有 NaN 值的行。但是这不是一个好的选择,因为这样我们会丢失信息,尤其是当我们处理小数据集的时候。
  • 用特定的方法或值估算 NaN 值。本文参考了这些方法。

有很多方法来估算这些差距,在大多数情况下,数据科学家,尤其是新手,不知道它们。以下是实现这一目标的方法:

  • 输入特定的值。
  • 用特殊度量估算,例如,平均值或中值。
  • 使用方法估算:鼠标或 KNN。

让我们看看每种方法是如何工作的,以及它们如何影响数据集。

实验!

为了验证每一种方法,我选择了一个名为虹膜数据集的数据集——这可能是机器学习测试中最常见的数据集。我还在更大、更复杂的数据集上尝试了这些方法,但对于某些算法来说,执行插补的时间太长了。

首先,我为这个数据集中的每个特性列生成了 15 个介于 0 和 149 之间的随机且唯一的索引。使用这些索引(对于每个列,它们是单独生成的),我用 NaN 更改了列值。

在对这些 NaN 值应用每种方法后,我使用均方差(MSE)来检查每种方法的“准确性”。

那么,我们开始吧。

方法 1:用特定值插补。

在这种方法中,NaN 值用一个特定的值(例如一个数字)来改变,在大多数情况下,这个值是 0。有时这是最好的选择,就像你的特征是花在糖果上的钱,但有时这是最糟糕的选择,就像年龄。

现在让我们看看它是如何影响初始数据集的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

估算值用星号(*)表示,正常值用点表示。

正如您所看到的,用零填充 NaN 值会强烈影响那些不可能有 0 值的列。这将严重影响空间,取决于所使用的算法,尤其是 KNN 和 TreeDecissionClassifier。

提示: 我们可以通过套用 来看看零是不是一个好的选择。向我们的数据帧描述() 函数。如果最小值等于 0,那么它可能是一个好的选择,如果不是,那么你应该选择另一个选项。

方法 2:指标插补。

指标插补是一种用一些特殊指标填充 NaN 值的方法,这些指标取决于您的数据:例如平均值或中值。

平均值是一个序列中某个值的总和除以该序列中所有值的个数。它是统计学中最常用的度量类型之一。但是为什么我们用平均值来估算 NaN 值呢?均值有一个非常有趣的性质,如果你在数列中加入更多的均值,它不会改变。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

均值插补后的数据可视化。

在上面的图中,你可以看到它并没有过多地影响数据集的结构,最重要的是它没有将一个类中的任何样本放入另一个类的区域中。

中值将数字分成具有相同样本数的两半。有时在统计分析中,中间值比平均值更能提供信息,因为它不会被新值扭曲太多。在正态分布(实际上并不存在)中,平均值和中值是相等的。

由于不存在正态分布,在大多数情况下,平均值和中值非常接近。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

中位数插补后的数据可视化。

从上面的图中,如果你仔细观察,可以清楚地看到中间值是如何工作的,所有的星星(估算的值)都排列在两条正交线上(萼片长度为 5.6,萼片宽度为 3.0)。

方法 3:用 KNN 进行估算

这种插补算法与 sklearn 的 KNearesNeighbours 非常相似。它从数据集中找到与 NaN 值的样本最接近的 k 个样本,并用它估算这些样本的平均值。

这个方法是在库 impyute 和 sklearn 中实现的(当我开始写这篇文章时,我不知道 sklearn 的实现。)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用 3 个邻居进行 KNN 插补后的数据可视化。

从上面的图中,我们可以看到一个严重的错误——将来自红色类的样本放置在蓝绿色区域中(这是具有 3 个邻居的 knn 实现)。

方法 4:用小鼠输入

本文的最后一个算法,也是我目前知道的最好的一个算法——链式方程的多重插补。这种算法适用于每一个有缺失值的列,可以用当前值进行线性回归。之后,它使用这些线性函数来估算具有这些值的预测的 NaN 值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

小鼠插补后的数据可视化。

我们可以看到,在上面的图上,它并没有强烈影响 2D 图上的数据集表示。但是为什么呢?

KNN 和 MICE 插补使用整个数据集来替换 NaN 值,而中值和平均值仅使用缺失值的列,这就是为什么后两种算法不会强烈影响数据集结构,也不会改变其信息。

但是这些数字说明了什么呢?

最后的话交给数字。为了了解上述方法的效果,我使用了 MSE(均方误差)。我计算了原始值和估算值之间的 MSE 值。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上表显示了每种方法的 MSE(在 KNN 和鼠标上,我使用了两个版本:一个包括目标值(有 y 值),另一个不包括它)。

下面是哪种算法最适合哪一列。

  • 萼片长度—小鼠
  • 萼片宽度— KNN4_y
  • 花瓣长度—老鼠
  • 花瓣宽度—鼠标

正如我所想的那样,老鼠在大多数情况下都工作得很好。

遗言!

我从这个实验中得到的结论是,估算连续值的最好方法是使用整个数据集,如 MICE 或 KNN,而不仅仅是一列。

感谢您的阅读!

医疗保健领域的数据科学现状如何?

原文:https://towardsdatascience.com/whats-the-current-state-of-data-science-in-healthcare-3b6d8ebc7e0a?source=collection_archive---------48-----------------------

仔细看看数据科学在医疗保健领域的应用,了解为什么该行业在接受数据转型方面仍然落后。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Pexels 的 bongkarn thanyakij 拍摄

如今,从大型政府医院网络到私人医生办公室,各种医疗机构都在转向数据科学咨询。这并不奇怪,因为医疗保健是一个天然的数据聚合器。数据驱动的决策为医疗保健专业人员提供了一个机会,可以实现更简化的临床操作、更经济高效的诊断以及更个性化的患者护理。

人工智能的可能性

人工智能为医疗保健提供了一个机会的春天。然而,最有希望的是,人类一直在寻求可靠的癌症治疗方法。简单来说,癌症的治疗通常是通过人工分析基因突变,然后据此选择治疗方法。尽管这种方法已经被证明是有效的,但是它非常耗费时间和资源。人工智能辅助成像使医疗保健专业人员能够更快、更有效地识别肿瘤。2020 年初,谷歌宣布,在经过数千张乳房 x 光片的训练后,其 DeepMind AI 算法在乳腺癌检测方面的表现优于放射科医生。

人工智能的预测能力已被证明对 ICU 中患者威胁生命的早期检测特别有用。例如,飞利浦设计了 eICU 系统,允许医生对患者病情恶化的细微信号做出积极反应。通过利用各种物联网设备、摄像头和强大的 ML 支持的预测分析系统,护理团队还可以快速确定哪些患者可以出院,从而根据病情的严重性更好地确定患者的优先顺序。该解决方案解决了病房中的典型问题:资源稀缺,如疫情时期的 ICU 床位、护理成本和高死亡率。采用 eICU 计划的医院报告称,患者的生存机会总体增加了 16%,出院速度加快了 15%。

预测分析也对医学的下一个前沿领域基因组学产生了巨大影响。这个新兴领域解决了长期以来不同人之间药物耐受性不同的问题。每个人的 DNA 包含数千个数据点之间的不同相关性,现在可以通过预测模型快速分析。这使得护理人员能够检测疾病将如何发展,并更可靠地确定适当的治疗。

自然语言处理(NLP)是人工智能的另一个分支,旨在帮助医疗保健专业人员处理每天都在增长的非结构化数据的雪崩。医生通常将治疗过程记录到 EHR 系统中,这带来了许多问题。首先,EHR 系统让医生感到沮丧,因为它们需要非常标准化和结构化的信息输入方法,这需要花费大量时间。第二,医生花数小时解释漫长的病史,然后识别来自 EHR 的相关信息。NLP 通过自动将医生的非结构化笔记转换为适合 EHR 的数据,并为需要快速评估患者病史的医生反向执行同样的操作,解决了这两个问题。

人工智能的问题

在人工智能的大肆宣传中,尽管该技术有巨大的潜力,人工智能的黑箱问题仍然存在。最先进的人工智能辅助工具可以比人类更快更准确地诊断,但它们无法解释决策背后的逻辑。

黑匣子问题不允许人工智能在医学背景下展示其全部潜力。在我们找到解构这些模型用于决策的方法之前,人工智能将需要人类干预。虽然乍一看这似乎不是什么大问题,但这种模糊因素完全消除了诊断自动化的可能性,这可能会对整个医疗保健行业产生重大影响。

此外,人工智能还有一个主要未解决的问题,即数据集偏差。许多现代模型在广义数据集上运行,这意味着少数民族可能会受到虐待。在关于数据集歧视的坚实监管框架付诸实践之前,人工智能没有机会在更大的规模上可靠地运行。此外,以美国为例,任何人工智能系统都需要获得 FDA 的批准。本质上,人工智能在医疗保健领域的所有问题都与可扩展性有关,没有其他行业像医疗保健一样需要可扩展性。

未来展望

凭借大数据带来的所有优势,医疗保健系统最终可以变得预防性而非反应性。数据使医疗保健专业人员能够更深入地了解图像分析和整体患者筛查,以便医生能够在癌症等严重疾病升级之前可靠地检测到这些疾病。

大数据还解决了最关键的医疗保健方面之一——个性化。医生现在可以使用超越简单的人口统计和身体指标的信息,使患者能够得到个性化治疗。

然而,很明显,医疗保健目前还没有为这种转变做好准备。与数据相关的法规、缺乏政府支持和数据碎片都是依赖数据科学的系统广泛采用的严重瓶颈。另一方面,我们现在看到由大型政府组织领导的大数据计划正在医疗保健领域获得足够的资金支持。

例如,2019 年,英国生物银行收集了广泛的医疗保健数据集,包括约 50 万人的社会学信息、生物样本和常规身体指标,使研究人员能够找到疾病结果和这些丰富的医疗信息之间的相互联系。2018 年,中国还开始鼓励在医疗保健领域使用大数据,将其个人身份识别系统与医疗数据联系起来,并建立了国家中央癌症登记处。考虑到中国是世界上人口最多的国家,这样的项目可以对癌症治疗产生巨大的影响。

这些活动刚刚开始,医疗机构之间缺乏互操作性,这意味着我们不能指望在未来几年有任何显著的结果。鉴于大数据在医疗保健领域的渗透很可能是该行业在过去几十年中经历的最大转变之一,政府、医疗保健机构、研究人员和医生需要时间来适应也就不足为奇了。

数据科学家、研究科学家和应用科学家之间有什么区别?

原文:https://towardsdatascience.com/whats-the-difference-between-a-data-scientist-research-scientist-and-an-applied-scientist-30c04190c1fa?source=collection_archive---------12-----------------------

揭开数据科学角色之间的异同

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由班德万托创作—www.freepik.com

随着数据科学领域的发展,各种职业术语之间的混淆也在增加。一些公司似乎将术语“数据科学家”与“应用科学家”互换使用,而其他公司则有明确的区别。

那么,数据科学家、研究科学家和应用科学家之间到底有什么区别呢?

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

由作者创建

**本质上,数据科学家、研究科学家和应用科学家在科学深度和期望水平方面是不同的。**研究科学家通常有更高的技术理解水平,因此也有更高的期望值。应用科学家和数据科学家也是如此。上面的图像概括了这个想法:应用科学家通常可以做研究科学家做的事情,并且做得更多,而研究科学家可以做数据科学家做的事情,并且做得更多。

让我们更深入地了解一下每个角色:

数据科学家

数据科学家做什么样的工作真的取决于公司。在某些情况下(或者很多情况下),数据科学家做的正是数据分析师做的事情:他们查询数据、处理数据、分析数据和可视化数据。在上限上,数据科学家还应用统计和机器学习模型来提取见解。

总体而言,数据科学家通常能够回答前瞻性问题(例如,我们能否预测明年我们将拥有多少客户)以及回顾性问题*(例如,为什么我们的增长率下降了 8%?).他们能够收集数据、处理数据、应用特征工程、建模数据和可视化数据。他们是技术人员和商业头脑之间的纽带。*

研究科学家

科学家是研究的专家。研究科学家不制造产品或管道。相反,他们是构建实验、发展假设和证明假设真假的专家。它们通常出现在学术界,尽管公司越来越看到它们在应用中的价值。

应用科学家

应用科学家据说与研究科学家能力相当,但他们也是大规模应用知识和实施解决方案的专家。因此,虽然研究科学家更专注于科学发现,但应用科学家对现实生活中的应用更感兴趣。

在亚马逊,应用科学家是一个比研究科学家略高的角色,需要通过编码栏。例如,亚马逊的应用科学家专注于增强亚马逊客户体验的项目,如亚马逊的自动语音识别(ASR)、自然语言理解(NLU)、音频信号处理、文本到语音(TTS)和对话管理。

感谢阅读!

如果你喜欢我的工作并想支持我,我会非常感谢你在我的社交媒体频道上关注我:

  1. 支持我的最好方式就是在媒体T2 上关注我。
  2. 推特 这里关注我。
  3. 点击这里订阅我的新 YouTube 频道
  4. LinkedIn 这里关注我
  5. 在我的邮箱列表 这里报名。
  6. 查看我的网站terenceshin.comT21

来源

[## 数据 vs 应用 vs 研究科学家@亚马逊

这三个角色有什么区别?

www.teamblind.com](https://www.teamblind.com/post/Data-vs-Applied-vs-Research-Scientist–%40Amazon-OiJ0KOSx) [## 数据科学家、应用科学家、研究科学家的角色有什么区别…

答(第 1 题,共 4 题):数据工程师通常负责获取、处理、清理、存储和维护…

www.quora.com](https://www.quora.com/What-is-the-difference-between-the-roles-of-Data-scientist-Applied-scientist-Research-Scientist-Machine-Learning-Engineer-and-Data-Engineer) [## “研究科学家”、“科学家”、“参谋科学家”、“数据科学家”之间有什么区别

回答(第 1 题,共 3 题):在我职业生涯的某个阶段,我曾从事过以上所有的工作(除了应用科学家),我会…

www.quora.com](https://www.quora.com/Whats-the-difference-between-a-research-scientist-scientist-staff-scientist-data-scientist-and-applied-scientist) [## ML 工程师,数据科学家,研究科学家:有什么区别?

如果你必须写一份人工智能(AI)或机器学习(ML)的工作描述,这可能很难…

www.topbots.com](https://www.topbots.com/understanding-different-ai-ml-job-descriptions/)

一年中最美好的时光是什么时候?提示:这不是《经济学人》所说的

原文:https://towardsdatascience.com/whats-the-most-wonderful-time-of-the-year-hint-it-s-not-what-the-economist-says-45d96551b664?source=collection_archive---------23-----------------------

用 Python 和 Matplotlib 分析 Spotify 的 valence 评分

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

马塞拉·拉斯科斯基在 Unsplash 上的照片

被困在付费墙后面?点击这里阅读完整的故事和朋友链接!

我是 Greg Rafferty,湾区的数据科学家。这个项目的代码可以在我的 GitHub 上找到。

在 2020 年 2 月 8 日出版的 The Economist 中,图表细节部分简要讨论了对 Spotify 数据的分析,表明 7 月是平均最快乐的一个月(悲伤的歌曲说明了很多:
Spotify 的数据表明,听众在 2 月最沮丧
)。我试图重复他们的研究,得出了一些不同的结论,并在此过程中有了一些新的发现。

数据

这种分析需要两个数据来源。第一个是 Spotify 在spotifycharts.com上提供的按日期和国家排名的最热门的 200 首歌曲。因为我不想从下拉菜单中选择每个国家和日期,并手动下载近 70,000 个每日图表 csv 文件,所以我构建了一个 scraper 来为我完成这一切。

第二组必要的数据是那些排行榜中每首歌的valence分数。Spotify 通过他们的开发者 API 提供这些数据。要获取这些数据,你需要在这里注册证书。谢天谢地,Spotify 没有让这变得太难,所以你应该不会有任何问题。我构建了第二个刮刀,它遍历前 200 名排行榜中的每首独特歌曲,并下载其特征向量。这里有几个可用的特征,但《经济学人》使用的是valence分数,一个介于 0 和 1 之间的小数,它描述了歌曲的“快乐”。

这个乐谱最初是由一个名为 Echo Nest 的音乐情报和数据平台开发的,该平台于 2014 年被 Spotify 收购。a(现已死亡,但可通过 Wayback 机器获得)的博客帖子对比分只有这样的说法:

我们让一位音乐专家根据效价对一些样本歌曲进行分类,然后使用机器学习将这些规则扩展到世界上所有其他的音乐,并在我们进行的过程中进行微调。

通过 API 可用的其他特征包括速度、能量、调、模式和可跳舞性等,并且已经推测这些特征在价分值中起作用。无论如何,效价分数是如何得出的有点像黑箱,但它似乎确实与歌曲非常匹配。然而,由于训练数据极有可能倾向于流行音乐,我想知道古典、爵士或非西方音乐风格是否没有被准确地评分。

分析

与《经济学人》的分析相比,我的分析显示了非常相似的数据分布:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:https://www . economist . com/graphic-detail/2020/02/08/data-from-Spotify-suggest-listeners-is-glow most-in-two

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

尽管我们的两个图表的外观不同,但两个核密度估计的形状非常相似(如果你不熟悉,核密度估计,或 KDE,几乎只是一个平滑的直方图,曲线下的面积总和为 1)。那些关键歌曲沿着价轴的位置也匹配。你可以看到,平均来说,巴西人比世界上其他地方的人听“快乐”的音乐,而在美国,听众听的音乐平均来说没有世界上其他地方的人快乐。正如我们将看到的,拉丁美洲的音乐典型的配价很高。

这是《经济学人》的第二张图表,我从中看到了一些关键的区别。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源:https://www . economist . com/graphic-detail/2020/02/08/data-from-Spotify-suggest-listeners-is-glometer-in-two

首先,我们来看看右上角的那个十日均线图。发现二月平均价最低,七月最高。以下是我的发现:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在我的分析中,12 月的平均化合价最高,其次是 8 月,第三是 7 月。我最初也发现了一些非常不同的二月平均价分数,因此研究了为什么我们的数据集会不同。《经济学人》使用了从 2017 年 1 月 1 日(Spotify 图表上最早可用的时间)到 2020 年 1 月 29 日(大概是他们进行抓取的时间)的数据。我有所有的数据,加上几乎所有的 2020 年 2 月的数据。没有像上面的图那样按月汇总,也没有执行移动平均,我看到同一个月的年与年之间的差异比我预期的要大得多:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在任何一年,我都认为 12 月是最高的。然而,2018 年(特别难过的一年?)夏季的化合价得分低于二月份。此外,2020 年的数据远远高于前几年,这一数据的纳入导致了 2 月份的平均数据不断膨胀。因此,我选择排除 2020 年的数据。比较这两个图表,一个包含 2020 年,另一个不包含:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

左侧:包括 2020 年 1 月/2 月;右侧:不包括 2020 年 1 月/2 月

这并没有改变图表太多,然而,经济学家在他们的图表中指出的一个关键点是,尽管与北半球相比,南半球的新西兰在 2 月份也经历了化合价的下降,尽管他们的夏季和冬季相反。当我包括 2020 年 2 月时,我看到了与《经济学人》所注意到的相反的效果,但当我排除 2020 年 2 月时,我确实看到了下降;然而远没有《经济学人》看到的那么明显。按照《经济学人》包括所有可用数据的惯例,我会包括 2 月份,因为 2020 年比往年快乐得多,这证明了相反的观点是正确的。不幸的是,在我看来,包含这些数据似乎有些武断——我们称之为合适的截止点是什么?不过,在我看来,每年包含相同数量的月份似乎是合理的,因此排除 2020 年的数据就不那么武断了。我很想在年底重新运行这个分析,看看它会是什么样子。

我的一个关键发现是,12 月是最快乐的月份,而不是他们发现的 7 月,这肯定与《经济学人》的发现不同。

我还将这些国家按大洲进行了分类,以观察更广泛的趋势。正如《经济学人》所发现的,拉丁美洲国家确实比世界上其他国家流传着更多快乐的音乐。还要注意的是,在除欧洲以外的每个大洲,12 月是最快乐的月份;除了非洲和澳大利亚,二月是最悲伤的:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

此外,我还观察了白天的情绪。正如我所料,我发现星期六是最快乐的。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我也看了美国和新西兰的图表。我发现星期五是美国最悲伤的一天,而星期天是最快乐的一天。有什么可能的理论吗?新西兰展现了我可能最期待的行为,周一是最悲伤的,周六是最快乐的。

最后,我花了一点时间研究了 Spotify API 的其他功能,并制作了最后一个图表,每个国家的可跳舞性:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这里,正如我所料,我发现周五比周一有更多适合跳舞的音乐。此外,从化合价表来看,国家的排序变化很大。例如,在这张图表中,美国处于价谱的最悲伤的一端,但却处于更适合跳舞的一端。我还注意到,可舞性排名最低的国家都是亚洲国家,它们的传统音乐风格不符合西方“标准”的 12 音 4 拍体系。我想知道当结构与大多数训练样本如此不同时,该算法是否很难预测可跳舞性。

我还注意到,在荷兰的周日,他们的舞蹈得分直线下降!挪威和瑞典也有这种现象,尽管程度较轻。宗教星期日可能是这一结果的一个解释,尽管在我看来,荷兰、挪威和瑞典并不比许多其他没有这种行为的国家更宗教化。

只是为了好玩,我查找了我所知道的最悲伤的歌曲(悲惨地从前 200 名排行榜中消失),Henryk Górecki 的第三交响曲(非常恰当地命名为悲伤歌曲交响曲)。第二乐章的配价分数仅为 0.0280,远低于阿黛尔的 0.0896 的让你感受我的爱。这个分数将使它在所有 68,000 多首歌曲的效价排行榜上排名倒数第二,仅略高于 Tool 的军团接种,这是排行榜上最悲伤的歌曲,效价为 0.0262(尽管在我看来,Tool 的这首歌曲确实超出了合理的范围)。

我还查了一下 Pharrel Williams 的 Happy ,期望找到一个最高分,却失望地看到“只有”0.9620。相比之下,地球,风和火带来了近乎滑稽的快乐九月,化合价为 0.982(图表中最高)。

美国前 200 名排行榜中最快乐的 10 首歌:

[Earth, Wind & Fire - September](https://open.spotify.com/track/1mqlc0vEP9mU1kZgTi6LIQ)
[Gene Autry - Here Comes Santa Claus (Right Down Santa Claus Lane)](https://open.spotify.com/track/25leEEaz1gIpp7o21Fqyjo)
[The Beach Boys - Little Saint Nick - 1991 Remix](https://open.spotify.com/track/5xlS0QkVrSH7ssEbBgBzbM)
[Logic - Indica Badu](https://open.spotify.com/track/0jqBo5RYn008f4ZY8kPewW)
[Chuck Berry - Johnny B. Goode](https://open.spotify.com/track/3BUQFs6aFWh7EFNmI8bfL7)
[Shawn Mendes - There's Nothing Holdin' Me Back](https://open.spotify.com/track/79cuOz3SPQTuFrp8WgftAu)
[Foster The People - Pumped Up Kicks](https://open.spotify.com/track/7w87IxuO7BDcJ3YUqCyMTT)
[Tom Petty - I Won't Back Dow](https://open.spotify.com/track/7gSQv1OHpkIoAdUiRLdmI6)n
[OutKast - Hey Ya!](https://open.spotify.com/track/2PpruBYCo4H7WOBJ7Q2EwM)
[Aretha Franklin - Respect](https://open.spotify.com/track/7s25THrKz86DM225dOYwnr)

十大最悲伤的歌曲:

[TOOL - Legion Inoculant](https://open.spotify.com/track/48C0O5CXfQdfjUCUhOs1YP)
[Joji - I'LL SEE YOU IN 40](https://open.spotify.com/track/606F3qdYCXtDVtKN53YsuW)
[Trippie Redd - RMP](https://open.spotify.com/track/5e4oAwSsIzkNZxh4fLSKUH)
[Drake - Days in The East](https://open.spotify.com/track/4czcw3NVLY0of5hTD7OufN)
[Drake - Jaded](https://open.spotify.com/track/3jipFRgLyKK0oJoG1pKicx)
[Lil Uzi Vert - Two®](https://open.spotify.com/track/65kp3OFn7JXbCvkm3m2Ui2)
[TOOL - Litanie contre la Peur](https://open.spotify.com/track/4qE9yOgBNsARadpZTAb6RH)
[Russ - Cherry Hill](https://open.spotify.com/track/7eZOvhHWlB3AcrOuZfTTOA)
[2 Chainz - Whip (feat. Travis Scott)](https://open.spotify.com/track/6Z4rmc0uujCpl8yXe3yjgI)
[Rae Sremmurd - Bedtime Stories (feat. The Weeknd) - From SR3MM](https://open.spotify.com/track/6nI74KsH94IN0J2vp5shdT)

因此,看起来安迪·威廉姆斯是正确的:12 月实际上是一年中最美妙的时间(效价分数:0.7240)。

权重和偏差在神经网络中的作用是什么?

原文:https://towardsdatascience.com/whats-the-role-of-weights-and-bias-in-a-neural-network-4cf7e9888a0f?source=collection_archive---------3-----------------------

以最全面的方式理解神经网络的权重和偏差。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

阿洛拉·格里菲斯在 Unsplash 上拍摄的照片

介绍

我们都知道人工神经元是神经网络的基本构建模块。在进入主题“权重和偏差在一个神经网络中的作用是什么”之前,我们先来了解一下这个人工神经元的骨架。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

基本人工神经元的组成部分:

  1. 输入:输入是我们需要预测输出值的一组值。它们可以被视为数据集中的要素或属性。
  2. **权重:**权重是每个输入/特征的真实值,它们传达了相应特征在预测最终输出中的重要性。(将在本文中详细讨论这一点)
  3. **偏差:**偏差用于向左或向右移动激活功能,您可以将其与直线方程中的 y 截距进行比较。(将在本文中对此进行更多讨论)
  4. **求和函数:**求和函数的工作是将权重和输入绑定在一起,并计算它们的和。
  5. **激活功能:**用于在模型中引入非线性。

如果没有重量呢?

只有当一件事物不存在时,我们才会理解它的重要性。

正如声明所说,让我们看看如果在神经网络中没有权重的概念会怎么样。为了简单起见,让我们考虑在一个数据集中只有两个输入/特征(输入向量xϵ【x₁x₂】),我们的任务让它执行二元分类。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

求和函数 g(x) 对所有输入求和,并添加偏差。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

因此,在求和函数完成其工作后,我们得到一个整数值作为输出,但由于这是一个二进制分类问题,我们需要将这个整数值转换成一个二进制输出,为此,我们借助一个激活函数将整数值映射到二进制输出。激活函数看起来像这样

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果您观察,如果求和函数的输出大于或等于 0,激活函数将一个整数值映射到 1,否则它将输出为 0。

如果我们将激活函数表达式与直线方程进行比较:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

通过仔细观察上面 2 个表达式,我们可以推断出方程 x₂ = -x₁ + b 的斜率(m)是固定的即-1 ,在任何情况下都不会改变。现在你应该明白这个问题了,对于任何给定的数据集,如果不涉及权重,那么对数据点进行分类的线的斜率永远不会改变,并且我们无法绘制一条可扩展的线来分隔两个类别**。**

放心吧!我们用一个例子来了解一下…

考虑这个用于演示的样本数据集,它包含两个输入(特征)【x₁和 x₂】和一个输出 y. 现在我们的任务是,如果我们提供 x1 和 x2 ,我们需要训练计算机预测 y。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

因此,第一步是我们需要给求和函数输入(x1 和 x2)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

下一步是使用激活函数将整数输出映射为二进制值,即(x1 + x2 + b ≥ 0)表示输出为 1,可视为(x2 ≥ -x1 -b ),边界条件为 x2 = -x-b ,因此落在这条线以上的所有点都被视为 1,而这条线以下的所有点都将为 0,因此我们绘制不同的线,并找到 b 的最佳值,以正确分类数据集。

现在,如果我们尝试拟合 x1 和 b 的不同值的直线方程 ( x₂ = -x₁ + b) ,我们将得到这个图…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

在表达式(x2 = -x1-b)中,你可以任意多次改变 x1 和 b 的值,你观察到的一件事是所有的线都是平行的,斜率与(-1)相同。让我们再来看一个场景

如果我们认为 b 的值是 0,并且对于 x1 的任何值,直线方程看起来像( x₂ = -x₁ + 0 ),那么它在上面的图中被表示为橙色 直线

如果我们考虑 b 的值为 1,则线方程看起来像( x₂ = -x₁ + 1 ),就表示为上图中的蓝色 线

如果我们考虑 b 的值为 2,直线方程看起来像( x₂ = -x₁ + 2 ),则在上面的图中表示为绿线

如果我们继续改变 b 的值,我们只会得到平行线,但线的方向或斜率不会有任何变化,这样我们甚至不能正确地对数据集进行分类,所以我们需要一些额外的东西来改变线的斜率,这就是权重。

让我们将重量付诸行动!

当我们给每个输入分配权重时,等式看起来像…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

更符合上面数据集的线是: x₁ = 0

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

看一下涉及重量时的情节…

当 w2 = 0,w1 = 1,b = 0 时,该方程以最佳方式拟合数据集。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

从图中,我们可以观察到,随着等式中权重的引入,线的斜率发生了变化。

神经元中的权重向我们传达了什么?

1.功能的重要性

与每个特征相关联的权重传达了该特征在预测输出值中的重要性。与权重值较大的特征相比,权重值接近于零的特征在预测过程中的重要性较低。

在上面的例子中,w2 是 0,这意味着我们不需要 w2 来预测 y 的值,w1 的值是 1,这意味着我们可以单独使用 x1 来预测 y 的值。

2.说明数据集中特定要素与目标值之间的关系。

让我们考虑一个寻找买车可能性的例子,数据集包含两个输入特征,如

  1. 汽车价格
  2. 汽车普及度

让我们假设人们经常倾向于在他们的预算内买一辆车,并且是众多车中最受欢迎的一辆。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

线的方程看起来像…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如果汽车的价格增加,那么表达价值也增加,这意味着“我们更有可能购买那辆车”,但我们不希望这种情况发生,所以我们必须用负价值的权重(w₁)来补偿它,这样他们的产品变成负的,表达价值降低,这意味着我们对购买那辆车不感兴趣,这样权重帮助了我们。

因此,如果与某一特征相关的权重为正,则意味着该特征与目标值之间存在直接关系,如果与该特征相关的权重为负,则意味着该特征与目标值之间存在反比关系。

摘要

  • 权重在更改分隔两类或更多类数据点的线的方向或斜率时起着重要作用。
  • 权重表明了某个特征在预测目标值时的重要性。
  • 权重说明了特征和目标值之间的关系

神经元中偏差的使用?

偏置用于将激活功能向左向右移动,没有得到这种说法吗?😕别担心,让我们用视觉体验来理解它…

让我们考虑一个 sigmoid 激活函数来演示偏置的使用,我们可以用以下数学表达式来表示 sigmoid 激活函数

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

用直线方程代替 x

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.让我们改变 w 的不同值,并将 b 值固定为 0

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

当 b =0 且

w = 0.3 —图中的蓝线

w= 0.5 —图中的红线

w = 0.7 —图中的绿线

即使给出不同的 w 值,我们也不能移动激活函数的中心,在这种情况下,是 sigmoid 函数。

改变 w 的值只会改变曲线的陡度,但我们无法将曲线向左或向右移动,将曲线向左或向右移动的唯一方法是改变 bias(b)的值。

2.让我们改变不同的 b 值,并将 w 值固定为 0.5

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

当 w=0.5 且

b = -1 —图中的红线

b= -5 —图中的绿线

b = 1 —图中的蓝线

b = 5 —图中的黄线

查看该图,改变 b 的值会改变曲线的位置,因此 bias 用于向左或向右移动激活函数。

为什么我们需要将激活功能移向左边或右边?

让我们先了解乙状结肠的工作原理…

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

曲线的方程式是

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从图中,我们推断,所有朝向 0 右侧的的值都被映射到 1 ,所有朝向 0 左侧的的值都被映射到 0

假设 x = -1,那么对应的 y 值大约为 0.1,我们将其四舍五入为 0,现在假设 x= 5,那么对应的 y 值大约为 1,我们将其四舍五入为 1。

如果我们希望 x<5 时 y 值为 0 呢?

答案是你需要向右移动曲线,即

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

作者图片

曲线的方程式是

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

从图中,我们可以推断,x=5 的点左边的所有点的 y 值似乎都小于 0.5,当四舍五入时,y 值最终为 0。因此,我们通过将曲线移向偏移来实现我们的目标,而偏移负责将曲线移向右侧,这就是偏移在人工神经元中的应用。

结论

我希望这篇文章消除了你对为什么我们在人工神经元中需要权重和偏差的所有疑虑。

感谢阅读😃过得愉快

NCAA 篮球冠军的秘诀是什么?

原文:https://towardsdatascience.com/whats-the-secret-of-ncaa-basketball-champions-9cc8e649288?source=collection_archive---------40-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

蓝魔庆祝 2015 年 NCAA 锦标赛

不到三个月,亚特兰大将见证激动人心的 2020 年 NCAA 篮球锦标赛。每年,男子全国大学生篮球锦标赛都会吸引公众的广泛关注,尤其是在临近决赛的时候。在急切等待最终结果的同时,我们注意到,尽管排名有所起伏,但一些篮球队总是位居榜首。这些获胜团队的秘诀是什么?他们成功的因素是什么?

在下面的帖子中,我们将通过分析 2008-2018 年 NCAA 篮球队和球员的数据来发现其中的秘密。

目标

我们的项目有两个主要目标。

  1. 一个冠军团队的成功因素是什么?
  2. 每个位置(中锋、后卫、前锋)都有哪些高级功能?

然后,我们应用这些发现来看看我们的蓝魔如何继续领先。

数据理解

我们使用团队数据集来发现团队成功因素,并使用球员数据集进行球员位置分析。两个数据集的数据源是 运动会

在团队数据方面,我们检索了 2009-2019 年冠军团队的每一场 NCAA 比赛的表现数据。数据集有 23 个要素和一个二项式目标变量,win (=1)或 lose (=0)。

对于球员数据,我们选择了历史上排名前 10 的球队,并根据篮球参考编写了最近 10 年的每场比赛高级球员统计数据。我们还设计了三个功能:真实投篮命中率、有效投篮命中率和团队胜率。正常情况下,一场篮球赛有五个位置。然而,鉴于数据源的有限信息,我们将小前锋和大前锋组合为前锋(F),得分后卫和控卫组合为后卫(G)。该数据集包含以下 37 个要素和 1531 条记录。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据清理

团队数据集是高度不平衡的(85%的记录有 win=1),所以我们使用 SMOTE 来平衡数据。球员数据集包含板凳球员的大量缺失值和零。领军人物也有一些缺失的价值观。由于我们的目标侧重于后者,我们采取了以下两个步骤来清理数据:

  1. 淘汰了每队的替补队员。
  2. 用 0 来填补这些年来主要球员的缺失值。

方法论

首先,我们在杜克的球员信息上使用无监督的 k-means 聚类来了解蓝魔的招募构成。UNC 和 Uconn 的数据用于比较。

我们的第一个目标是发现冠军团队的成功因素是一个监督学习问题。我们首先使用关联热图进行探索性数据分析。然后,我们建立了逻辑回归、决策树(CART)和随机森林模型。

第二个目标是探索每个职位的高级特征。我们使用逻辑回归和随机森林模型。

建模

利用 k-means 对杜克大学 2009 年至 2019 年的球员信息进行聚类,我们发现蓝魔一般分为两类。第一个聚类更看重玩家在游戏中的实际表现,而第二个聚类更关心玩家的背景信息,如位置。类似的聚类结果也可以在北卡罗来纳焦油脚跟队和康涅狄格哈士奇队中找到,他们在过去十年中也获得过两次 NCAA 篮球冠军。

有趣的是,当我们查看集群时,我们发现在性能集群中,三所学校在配置上有不同的策略。康涅狄格大学更喜欢后卫,而北卡罗来纳大学有更多的前锋。杜克大学在后卫和前锋球员的数量上相当平衡。在与这两支球队比赛时,这种洞察力可以用来制定球场策略。

目标 1: 冠军团队的成功因素

从热图中,我们观察到两个特征之间的强相关性,这是由于它们的部分-全部关系。比如投篮命中率% (FG%) &投篮命中率(FG),2 分 FG (X2P) & 2 分 FG 尝试(X2PA)。我们发现 X2P 比 X3P 与 FG 更相关,防守篮板与总篮板也是如此。此外,与罚球相比,投篮命中率与总得分的相关性更强。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1 特征关联的热图

然后,我们使用逻辑回归(LR)、逐步回归、决策树(CART)和随机森林来预测团队获胜。表 2 显示了结果汇总:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

随机森林模型的准确率最高,为 95.3%。在所有四个模型中,我们观察到增加的点数(PTS。防守篮板(DRB)和 2 分投篮(X2P)是赢得比赛的关键属性。由于随机森林更高的准确性和决策树更好的可视化,我们深入到细节中研究每个特征的重要性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2 决策树可视化

让我们看看图 2。从根分裂条件点(PTS。g),我们知道积分对胜利至关重要,这符合我们的直觉。再往下分支,如果个人犯规(PF)少于 23 次(分支右侧),一支球队极有可能赢得比赛。否则,凭借队员之间良好的助攻,球队仍有机会获胜。防守篮板(DRB)是另一个至关重要的特点。高 DRB 有助于胜利。有趣的是,我们发现,当一支球队在对手错过一个投篮机会后不擅长获得控球权时,高尝试 2 分和 3 分投篮机会导致高概率的失败。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3 随机森林分类器

在随机森林分类器中,我们还可以通过比较两个条形之间的高度差来查看每个高级功能的重要程度。点数(PTS。g)保持获胜的最高级特征。DRB 的重要性也符合分类树模型的重要性。此外,投篮命中率(FG%)、2 分和 3 分投篮命中率(X2P & X3P)也非常重要。我们进一步发现,罚球在赢得一场比赛中更重要,X3P 对 X2P 也是如此。另一方面,上场时间(MP)相对来说是最不重要的。

总之,得分和防守篮板是成功的决定性因素。此外,更少的个人犯规大大增加了获胜的机会。FG%也起了重要作用,X3P 在凯旋中对 X2P 的贡献更大。然而要记住,盲目的 X2P 和 X3P 尝试可能会导致控球权的丧失并导致失败。我们将在下面的内容中进一步讨论每个位置的高级特性。

对象 2:每个位置的重要特征

我们放大以探索每个位置的高级功能。如何将对方的实力发挥到前台,带动集体潜力?对于玩家分析,我们运行了两个模型:随机森林和逻辑回归。前者显示了所有玩家和各自位置的重要特征。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 4 总体特征重要性

从上面的图表中,盖帽(BLK),阻止进攻球员得分的能力,是个人对球队的一项基本能力,其次是三分球尝试。助攻(AST)仍然是一个重要的特性。但是,与球队分析不同的是,对于一个球员来说,进攻篮板(ORB)比防守篮板更关键。虽然上场时间是球队表现最不重要的特征,但它对每个人都很重要。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们来看看每个职位的细分情况。各职位的高级功能有什么不同吗?在历史上排名前 10 的团队中,我们从上表中得到了以下观察结果:

总的来说,对每个球员来说,三分球比两分球更重要。助攻和拦网是另外两个必备技能。那么每个位置都有各自的高级功能:

  • 中心©:在这个模型中没有明显的特征来区分中心。所以后来我们用逻辑回归发现了这个位置。
  • 前锋(F):辅助技能和失误使这一职位与众不同,因为这两项在其他特征中具有更高的重要性。他们也有更高的机会开始一个游戏。
  • 后卫(G):阻挡技能和投篮相关的指标区分后卫。篮板能力对他们来说也更重要。

我们还运行了一个多类逻辑模型。下面的结果表明,F 和 G 有更高的机会去偷,而 C 有更高的机会去挡。此外,在一场比赛中,C 比 F 和 G 更有可能进行个人犯规。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

部署:针对蓝魔

目标 1 的结果确定以下 11 个变量为高级特征。以历届冠军的平均值为基准,我们观察到杜克 2020 的 3P、3PA 和 DRB 低于这些基准。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 5 与基准的比较

然后我们再分解看看之前 16 场的杜克 2020 表现。下图 6 显示了 3P 和 AST 是最常低于基准的两个特性,分别有 69%和 56%的早期游戏低于基准。虽然杜克 2020 的表现在 44%的游戏中缺少 DRB,但它的 2PA 相当高。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 6 低于基准%

因此,我们对即将到来的杜克 2020 运动会有以下建议:

  1. 更多地关注三分球,因为它们比 2P 和罚球更重要。
  2. 加强后卫在防守篮板球方面的能力,这样高 2P 的尝试对胜利有更大的贡献。

对于未来蓝魔的招募,基于我们的分析,我们提出以下建议:

  1. 首先测试所有候选人的拦网技巧,因为它起着至关重要的作用。然后测试一下 3P 候选人的命中率。
  2. 评估前锋和后卫的防守技能,因为抢断是他们的一个重要特征。同样,考验前锋的助攻技术,后卫的得分技术。
  3. 由于防守(BLK,DRB,STL)和进攻(FG,ORB,AST,TOV)特征在团队数据集中都显示出重要性,杜克可以评估每个球员的实力,组成一个平衡的团队,以避免出现明显的弱点。

对于未来的游戏策略,如果我们的蓝魔遇到像 UNC 和 Uconn 这样的老对手,我们可以相应地调整团队组成。

北卡罗来纳大学倾向于招募更多的前锋,所以它更注重整体合作。彼此最熟悉的蓝魔可以开始游戏,想出突破的策略。

Uconn 通常有更多的后卫球员可以在球队中获得高分。他们更有可能阻挡我们的进球,并在我们错过一个进球后接管球权。命中率高的玩家可以加入我们蓝魔队。

合著者:李嘉文和季春雨

意大利计算机科学行业的性别差距有多大?

原文:https://towardsdatascience.com/whats-the-situation-in-italy-for-women-in-the-world-of-computer-programming-7782bbb8a54b?source=collection_archive---------66-----------------------

一种基于数据的方法,使用 Stack Overflow 2017 年至 2019 年的开发者调查数据。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

照片由 Unsplash 上的 ThisisEngineering RAEng 拍摄

简介

几周前,我读了一篇关于阿达·洛芙莱斯的文章。可能你们很多人不知道她是谁,但你肯定知道英国诗人拜伦。

好吧,但是它们之间有什么联系呢?拜伦是阿达的父亲!

洛夫莱斯伯爵夫人奥古斯塔·爱达·拜伦是一位数学家,今天她被认为是第一位计算机程序员。

她出生于 1815 年,她接受了以数学和科学为基础的教育。这不是 19 世纪女性的标准。

一天,艾达决定翻译一篇关于计算机之父查尔斯·巴贝奇的文章。这篇文章描述了一种被称为分析引擎的设备,旨在处理复杂的计算。

她不仅翻译了这篇文章,还添加了一些关于机器潜力的思考。事实上,Ada 描述了如何用该设备创建代码,以便管理单词和符号以及数字。

她还为设备重复一系列指令的方法建立了理论,这一过程被称为计算机编程今天使用的循环。

第一部分:与男性相比,意大利女性在编程领域的地位如何?

从那篇关于阿达·洛芙莱斯的文章开始,我问自己,在计算机编程领域,尤其是在意大利,女性的现状如何。为了回答这个问题,我分析了 Stack Overflow 的开发者调查收集的数据。

在我分析的第一步中,我试图了解意大利和美国 2017 年至 2019 年从事编程语言工作的女性的百分比。所以,我注意到他们中的少数人在这个领域工作,尤其是在意大利。

正如你在下面的图表中所看到的,在工作中使用编程语言的总人数中,女性所占的比例非常低。意大利的情况并不好,三年来平均只有 3.5%的女性从事编程工作。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 1:在编程界工作的意大利和美国女性的百分比(图片由作者提供)

第二部分:在义大利从事计算机编程工作的女性背景如何?他们有什么资格?

然后,我试图深入了解这种情况,以便了解这些妇女有什么资格。

我发现他们中的大多数都非常合格(例如,他们拥有学士学位、硕士学位或博士学位)。

下图显示,从 2017 年到 2019 年,拥有大学背景的计算机编程女性多于相同背景的男性。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 2:意大利超级合格女性与超级合格男性的对比(图片由作者提供)

第三部分:相反,在美国,技术领域的超级合格女性是什么情况?

在美国,情况与意大利相似。从 2017 年到 2019 年,大多数从事编程语言工作的美国女性都超级合格,而且她们比男性更超级合格。

在下面的条形图中,可以观察到这种情况。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图 3:美国女性超级合格与男性超级合格的比较(图片由作者提供)

结论

多亏了我用 Python 分析的数据,我明白了,即使在今天,从事计算机编程的女性人数也非常少,只有非常优秀的女性才会尝试进入这个领域。这意味着由于文化偏见和排斥,有大量的女性不了解这个世界。

因此,在这个领域给女性适当的空间是很重要的,因为正如阿达·洛芙莱斯向我们展示的那样,她们有潜力改变和改善计算机编程世界的许多事情。

关于这个分析更详细的信息,你可以在这里看到我的 GitHub 的链接

可以在我的电报群 初学数据科学中联系。

纽约天气数据:探索性分析

原文:https://towardsdatascience.com/whats-the-weather-like-in-new-york-e8c1586e5c4?source=collection_archive---------35-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Giovanni Tancredi 在 Unsplash 上拍摄的照片

纽约的天气怎么样?

住在纽约,我想知道随着时间的推移天气会是什么样子。我几乎一生都住在这里,每年我都发现自己在抱怨天气比前一年热了多少。天气变暖了吗?气候真的在变化吗?也许那些夏天的热浪只是异常值。

气候变化是近年来最受争议的话题之一,尤其是在政治领域。有许多数据和研究表明,全球气温普遍上升。然而,这篇文章并不是要强加给任何人。它仅仅提供了对过去 20 年天气数据的快速探索和可视化,以调查趋势(使用 Python)。

数据

皇后区拉瓜迪亚机场的气象数据是根据 Ritvik Kharkar 的这篇文章中的方法从美国国家海洋和大气管理局(NOAA)收集的。它演示了如何轻松地利用 API 从美国任何地方收集所需的天气数据。我对他的代码做了一些调整,从 2000 年到 2020 年提取平均气温、最低气温、最高气温和总降水量的每日记录。然而,当我试图这样做时,从 2006 年到 2012 年,有一整个时期都没有平均气温。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2006 年至 2012 年缺失的数据

我最初是在试图获取曼哈顿中央公园的数据时发现这个问题的,结果只得到 2000 年到 2005 年的平均气温。考虑到这可能只是 NOAA 数据可用性的问题,我决定通过使用最低和最高日平均气温作为代理来进行简单的修复。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

包括降水量、最低温度、最高温度和平均温度的最终数据帧

分析

温度

对于任何时间序列,第一件事是随着时间的推移可视化。首先查看 2000 年至 2020 年的日平均气温,我们看到冬季全年平均气温在个位数之间,夏季在 90 多度之间。随着时间的推移,它看起来不会倾向于更暖或更冷的温度。平均温度的分布略呈双峰型(约 40°F 和 70°F ),有趣的是,这与时间序列中的拐点温度相对应。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

日平均气温时间序列(左)和平均气温分布(右)

虽然肯定是不正常的,但纽约市有很多次出现极端温度,最冷时达到华氏 1 度,最热时达到华氏 104 度。我想纽约市过去也有几次出现零下温度,但我想我的记忆没有我希望的那么可靠。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

温度统计

我们可以从另一个角度来看这个数据,那就是月度水平。这里我汇总了一年中每个月的日平均气温。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

月平均温度

在一月、七月、五月和十月等几个月,似乎有轻微的上升趋势。而在 6 月份,过去 10 年的年同比变化一直在下降,徘徊在 73 华氏度左右。

沉淀

除了温度的变化,我还对总降水量随时间的变化感兴趣。下面是 20 年来的日降雨量,单位为毫米。老实说,我很惊讶地看到有这么多天的降雨量超过 25 毫米(约 1 英寸)。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

每日降水量(左)和雨天的降水量分布(右)

单日最大降雨量是 169.9 毫米(约 6.7 英寸),早在 2007 年 4 月中旬!纽约市一天的降雨量通常不会超过 10 毫米。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

降水统计(包括无降水的天数)

在那张图上显示一段时间内的日降水量有点太忙了,所以我把数据汇总成了累积年降水量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在过去的 20 年里,纽约市平均每年的降雨量为 1190 毫米。2011 年,降水量为 1659 毫米,比正常情况下多了 40%。在过去的两年里,降水量增加了 10-25%。这不重要,但肯定比平时多。

将所有有记录的降水天数加起来,2018 年的降水天数最多,为 150 天,而 2010 年的降水天数最少,为 100 天。这几乎比平均水平(122 天或一年的三分之一)多了整整一个月!

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,我们可以看看这些年来逐月的降雨量。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

平均月降水量

二月、七月和十二月似乎显示出降水增加的趋势,而六月变得越来越干燥。

结论

纽约的气温变化很大,从华氏 0 度到华氏 104 度,但通常这个季节的气温在华氏 30 度到 80 度左右。这些时间序列图显示,一些月份似乎正在变暖,但肯定需要更多的分析(可能需要一些 t 检验)。无论是下雨还是下雪,纽约一年中有四个月都有降水。最近几年甚至可能显示出年降水量和月降水量的增加。

最后,我绝不是一个气象学家或气候学家,只是一个来自纽约的发现这个数据集很有趣的人。我还意识到,湿度和露点等其他指标没有包括在这个分析中。更多的问题可能会从这个分析中产生,但最终,这只是为了教育和娱乐目的对纽约市气象数据的快速和肮脏的分析。

如果你有兴趣查看我的代码,请查看我的 GitHub

什么是整齐的数据?

原文:https://towardsdatascience.com/whats-tidy-data-how-to-organize-messy-datasets-in-python-with-melt-and-pivotable-functions-5d52daa996c9?source=collection_archive---------8-----------------------

如何用 Melt 和 pivot 函数在 Python 中组织杂乱的数据集

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

资料来源:R for Data Science(Hadley Wickham & Garrett grole mund)

数据科学家花费大约 80%的时间清理和组织数据。整齐的数据是一种组织数据集以促进分析的方式。

2014 年,Hadley Wickham 发表了一篇名为 Tidy Data 的精彩论文,描述了用 r 整理数据集的过程,我这篇文章的目标是总结这些步骤并展示 Python 中的代码。

整理数据:

  1. 每个变量都必须有自己的列。
  2. 每个观察必须有自己的行。
  3. 每种类型的观测单位形成一张表。

杂乱数据是数据的任何其他排列。

杂乱的数据

我们将在这里探讨 5 个杂乱数据的例子:

  • 列标题是值,不是变量名。
  • 多个变量存储在一列中。
  • 变量存储在行和列中。
  • 多种类型的观测单位存储在同一个表中。
  • 一个观察单位存储在多个表中。

当然,还有更多类型的脏乱没有在上面显示出来,但它们可以用类似的方式来整理。

列标题是值,不是变量名。

对于这个例子,我们将使用数据集“relinc.csv ”,它探索了收入和宗教之间的关系。注意,尽管很乱,这种安排在某些情况下还是有用的,所以我们将学习如何整理和不整理它。

import pandas as pddf_relinc=pd.read_csv("relinc.csv")
df_relinc.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个数据集中有三个变量:宗教、收入和频率。列标题是值,而不是变量名,所以我们需要将列(income)中的变量转换为行。我们将使用熊猫的功能融化。

# Applying melt (to a long format)df_relinc=df_relinc.melt(id_vars=["religion"],var_name=["income"],value_name="frequency")df_relinc.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上面的输出是我们数据集的整洁版本。

为了将数据集返回到宽格式,我们将使用 Panda 的函数 pivot_table

# Applying pivot_table (to a wide format)df_relinc=(df_relinc.pivot_table(index = "religion", columns = "income", values = "frequency")
   .reset_index() 
   .rename_axis(None, axis = 1))df_relinc.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

多个变量存储在一列中。

现在我们将研究来自世界卫生组织的结核病数据集。这些记录显示了按国家、年份和人口统计组分列的肺结核病例数。

人口统计组按性别(男,女)和年龄(0-14 岁,15-24 岁,25-34 岁,35-44 岁,45-54 岁,55-64 岁,65 岁以上,未知)细分。

df_tb=pd.read_csv('tb.csv')
df_tb.columns

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

df_tb.tail()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这些列包含性别和年龄值。请注意 0 和缺失值(NaN)的混合。这是由于数据收集过程造成的,这种区别对于该数据集非常重要。

首先,我们将收集非变量列,将年龄范围和性别移到一列中。为此,我们将使用熔体。

# Applying melt (to a long format)df_tb=df_tb.melt(id_vars=["iso2","year"],var_name=["demographic"],value_name="cases")df_tb.sample(5)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在我们需要拆分人口统计列,得到两列变量性别和年龄。

# Creating new columns for sex and agedf_tb=(df_tb.assign(sex = lambda x: x.demographic.str[0].astype(str),
age = lambda x: x.demographic.str[1:].astype(str))
      .drop("demographic",axis=1))df_tb.sample(5)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,每个观察都有自己的行,每个变量都有自己的列。我们刚刚整理了我们的数据集!在继续之前,让我们清理数据。

# Styling the datasetdf_tb.update(pd.DataFrame({"age":[age[:2]+'-'+age[2:] if len(age) == 4 else (age) for age in df_tb["age"]]}))df_tb=(df_tb.replace(to_replace =["m","f","014","65","u"],value =["Male","Female","0-14","65+","unknown"])
            .dropna())df_tb.sample(10)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

变量存储在行和列中。

我们将使用来自全球历史气候学网络的数据,这些数据代表了墨西哥 2010 年五个月的每日气象站(MX17004)。

它在单个列(id,year,month)中有变量,跨列(day,D1–d31)和跨行(tmin,tmax)(最低和最高温度)。少于 31 天的月份的最后一天有结构缺失值。为了更好的可视化,已经省略了列 d9 至 d31。

import datetimedf_weather = pd.read_csv('weather-raw.csv')df_weather.sample(5)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如上所示,数据集是杂乱的。变量存储在行(tmin,tmax)和列(days)中。让我们从 d1、d2、d3…列开始。

我们将应用 melt 为 day 变量的每个记录创建一行。

# Applying melt (to a long format)df_weather=df_weather.melt(id_vars=["id","year","month","element"],var_name=["day"],value_name="temp")
df_weather.update(pd.DataFrame({"day":[day[1:] for day in df_weather["day"]]}))df_weather.sample(5)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,我们将使用 pivot_table 函数为 tmin 和 tmax 创建新列,一旦它们是变量。

# applying pivot_table to create columns for tmin and tmaxdf_weather=(df_weather.pivot_table(index = ["year","month","day","id"], columns = "element", values = "temp")
       .reset_index().rename_axis(None, axis = 1))df_weather

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据集看起来更好,但我们仍然需要改进它。让我们为日期创建一个列并对其进行分组。

# Creating a date columndf_weather=(df_weather.assign(date = lambda x: x.year.astype("str") +"/"+ x.month.astype("str").str.zfill(2) +"/"+ x.day.astype("str").str.zfill(2))
            .drop(["year", "month","day"],axis=1))
df_weather['date'] =  pd.to_datetime(df_weather['date'], format='%Y/%m/%d')# Grouping by datedf_weather=(df_weather.filter(["date", "tmax","tmin"]).groupby("date").aggregate("mean").reset_index())df_weather

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们最终整理了我们的数据集。

多种类型的观测单位存储在同一个表中。

该数据集显示了 2000 年的 Billboard 热门歌曲。这个数据集记录了一首歌首次进入 Billboard Top 100 的日期。它包含艺术家、曲目、输入日期、峰值日期、流派、时间、排名和星期等变量。

import pandas as pd
import re
import numpy as np
import datetimedf_bill = pd.read_csv('billboard.csv',header=0,encoding = 'unicode_escape')df_bill.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

进入前 100 名后的每周排名记录在 76 列中,从第 1 周到第 76 周。如果一首歌进入前 100 名的时间少于 76 周,则剩余的列用 NaN 填充。

df_bill.columns

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这个数据集包含对两种类型的观察单位的观察:歌曲和它在每个星期的排名。因此,艺术家和时间会在每周的每首歌曲中重复出现。在将 Billboard 数据集一分为二之前,我们需要对其进行整理。让我们从收集所有的周专栏开始。

# Applying melt (to a long format)
df_bill=(df_bill.melt(id_vars=["year","artist.inverted","track","genre","date.entered","date.peaked","time"],var_name=["week"],value_name="rank"))# Week to number 
df_bill.update(pd.DataFrame({"week": np.ravel([list(map(int, re.findall(r'\d+', i))) for i in df_bill["week"]])}))df_bill.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

更好看!现在我们有一个可变周的列。顺便说一下,我们可以使用输入的日期和星期中的信息来创建一个新列,它将成为日期列。

# creating a date column from date.entered and weekdf_bill['date.entered'] =  pd.to_datetime(df_bill['date.entered'], format='%Y/%m/%d')df_bill=(df_bill.assign(date= [df_bill['date.entered'][i]+datetime.timedelta(weeks = df_bill["week"][i]-1) for i in range(len(df_bill["week"]))])
         .drop(['date.entered','date.peaked','week'], axis=1)
         .sort_values('artist.inverted', ascending=True)
         .reset_index(drop=True))df_bill.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

现在,我们将从轨道创建一个 id。每首歌曲必须有一个唯一的 id 号。为此,我们将使用熊猫的功能因式分解。

# creating an id column from tracklabels,unique=pd.factorize(list(df_bill["track"]))
df_bill["id"]=labels+1
df_bill.reset_index(drop=True)
df_bill.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最后,我们将把数据集分成两个数据集:歌曲数据集和排名数据集。

# creating a new dataframe for rankdf_rank=df_bill.filter(["id", "date", "rank"]).dropna()
df_rank=df_rank.sort_values(by=['id','date']).reset_index(drop=True)# creating a new dataframe for songdf_song=df_bill.filter(["id", "artist.inverted", "track","time"])
df_song=df_song.drop_duplicates('id').reset_index(drop=True)df_rank.head(10)
df_song.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们刚刚解决了在同一个表中存储多种类型的观测单位的问题!

一个观察单位存储在多个表中。

这个问题过去很容易解决。我们基本上需要读取这些表,添加一个记录原始文件名的新列,最后将所有表合并成一个表。

import pandas as pddf_baby14 = pd.read_csv("2014-baby-names-illinois.csv")
df_baby15 = pd.read_csv("2015-baby-names-illinois.csv")df_baby14.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

df_baby15.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

让我们根据文件名在每个数据集中创建一个列 year。最后,我们将应用 Panda 的 concat 函数来连接数据帧。

# Creating a column for the year
df_baby14["year"]="2014"
df_baby15["year"]="2015"# Concatenating the datasets
df_baby = pd.concat([df_baby14, df_baby15]).sort_values(by=['rank'])(df_baby.set_index('rank', inplace=True))df_baby.head()

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

最终意见

本文的目标是解释整洁数据的概念,包括五种最常见的杂乱数据,以及如何用 Python 组织和清理这些数据集。

如果你发现任何错误,请不要犹豫与我联系!我最近开始在数据科学世界里冲浪,尽管我很喜欢,但我是个傻瓜。

我的代码和数据集可以在 Github 上找到:https://github.com/rodrigomf5/Tidydata。另外,这里是 Hadley Github,它提供了更多关于 Tidy Data 的信息:【https://github.com/hadley

新冠肺炎数据可视化有什么问题,如何解决

原文:https://towardsdatascience.com/whats-wrong-with-covid-19-data-visualizations-and-how-to-fix-it-3cdc9adc774d?source=collection_archive---------4-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

英国《金融时报》新冠肺炎数据可视化报道示例

自从冠状病毒爆发以来,我一直对媒体甚至专家向我们展示数据的方式感到困惑。

我想现在每个人都已经看到了代表每个国家的病例数或死亡数的“轨迹”图。问题?首先,大多数不是交互式的,就像现在不是 2020 年,媒体停留在 20 世纪。你生活在一个小国家还是你的国家仍处于疫情爆发的初期?您感兴趣的数据在包中丢失了,或者更糟,甚至没有显示出来,太糟糕了。

但实际上这不是最大的问题。病例总数或死亡总数当然是制造头条新闻或给读者和观众留下印象的好方法,但它们没有给我们任何实际的洞察力。一些人使用对数标度,另一些人根据国家人口加权,或者绘制每日数字而不是绝对总数(这是一种更好的方式来感受正在发生的事情),但所有这些可视化仍然没有抓住要点。正如 Eric Ries 所说,这些不是“T0”可操作的度量标准。

关于这次爆发有什么实际的见解?我们真正想知道的是什么?嗯,我们想知道:

  1. 爆发进展率。病毒传播速度加快了吗?疫情发展速度放缓了吗?
  2. 如果正在放缓,鉴于目前的趋势,每日病例/死亡人数何时开始减少?那就是,**我们什么时候会到达顶峰?**我们的卫生系统何时会开始好转,而不是一天比一天糟糕?

获得这两种见解的良好指标是查看每日病例数/死亡数的进展率。用数学术语我们要看每日例数的二阶导数,或者急动度(加速度的加速率)。在你退出之前,让我解释一下。

如果每日病例数的变化率为正,也就是说,如果每日新增病例数在加速增长,这意味着疫情正处于指数阶段,尚未得到控制。这是一个实际的洞察力。如果每天的病例数仍在增长,但变化率为负,也就是说,如果每天新增病例的增长速度在放缓,这意味着疫情的爆发速度在放缓。再次,实际的洞察力。

如果我们拿汽车做类比,总例数是汽车里程,每日例数是汽车速度,每日例数变化是汽车加速度(汽车加速时为正,汽车刹车时为负),每日例数变化率是汽车加速的方式:是加速更快,还是加速变慢(速度仍在增加,但速度变慢)。在爆发的情况下,我们最感兴趣的是汽车加速的方式,对吧?那么,为什么每个人都向我们展示汽车的里程数**

鉴于我们知道汽车加速的方式,我们可以知道它何时开始减速(=爆发峰值),并最终停止(爆发结束)。

让我们就这么做吧,用交互式数据可视化代替静态图像。首先,让我们看看某个特定国家的死亡和病例的详细信息(您可以使用右上方的度量菜单在两者之间切换):

如何阅读图表:4 月 1 日,美国的死亡人数比前一天增加了 37.5%。考虑到这一趋势,我们仍然可以预计 4 月中旬会有 12%的增长。

在这里,我们使用线性插值得到实际的进展率及其趋势。如果比率为正,则每日死亡人数/病例数在增长,如果比率为负,则每日死亡人数/病例数在萎缩。如果它的趋势是上升的,增长是加速的,如果它是下降的增长是减缓的。当趋势越过 0,爆发达到顶峰(如果是未来,只是一个预测)。

注意:对于一些国家来说,数据存在一些问题,扭曲了实际趋势,如 4 月 2 日法国官方数字中增加了 884 例额外死亡(在此之前,官方数字中不包括养老院),这使得死亡率飙升。应该对数据进行预处理,以便将这些问题考虑在内,但我没有时间这样做。尽管如此,一般的方法仍然有效。

现在,让我们关注一下趋势,并比较一些国家(为了更好地了解情况,您最多可以选择 5 个国家):

如何阅读图表:鉴于目前的趋势,美国的日常进展正在放缓,但比法国慢。英国的日常进步正在加速。

我们可以看到:

  • 法国、意大利、西班牙和美国的增长速度都在下降,这意味着疫情似乎得到了控制,病例仍在增长,但速度较慢
  • 英国仍在加速增长,这表明那里的疫情尚未得到控制
  • 意大利在 4 月 1 日左右达到顶峰,现在已经进入萎缩阶段
  • 法国和西班牙将在四月中旬达到顶峰,美国将在四月底达到顶峰

当然,我们可以通过查看通常的案件数量“轨迹”图来得出相同的结论,试图猜测它是否仍然具有指数形状(对于线性标度)或曲线将在哪里变平(对于对数标度),但那些只是:猜测。通过查看每日病例数/死亡进展率就简单多了,我们只看实际数据进展,没有解释的余地。升学率上升?指数爆发。正往下走?仍在增长,但速度较慢。消极?萎缩。穿越 0?达到了巅峰。一个国家的升学率比另一个国家更低?它恢复得更快了。就这么简单。

为了更进一步,我们可以观察每日病例数/死亡进展率随时间的演变,这将使我们能够比较疫情同一阶段的国家应对措施,而不仅仅是当前的情况。我还可以让图表的数据每天自动刷新,并查看国家地区而不是整个国家。但那是另一篇文章…

感谢阅读!如果你喜欢这篇文章,不要犹豫,分享它。

我每天都在学习,如果我有任何错误,请随时纠正我,并在评论区添加您的建议。另外,请注意英语不是我的母语。

来自作者的说明:我不是流行病学家,这里显示的结果仅基于应用于公开可用数据的纯数学,而非医学专业知识,本文的观点不应被解释为专业建议。收集这些数据的方式也存在偏差,当然还有数据质量问题,这些我都没有提到。最后,各国在疫情方面并不一致,数字可能会因国家内的实际地区而有很大差异,这里也没有显示。

编者按: 走向数据科学 是一份以数据科学和机器学习研究为主的中型刊物。我们不是健康专家或流行病学家,本文的观点不应被解释为专业建议。想了解更多关于疫情冠状病毒的信息,可以点击 这里

酸橙有什么不好

原文:https://towardsdatascience.com/whats-wrong-with-lime-86b335f34612?source=collection_archive---------16-----------------------

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

众所周知,荷马·辛普森是一个头脑简单的人,时不时会做出一些愚蠢的事情。在这里,他决定用微波炉烹饪面包、熏肉和鸡蛋。我们发现看起来很有趣,但同时,我们倾向于在数据科学中做类似的事情。不要像荷马那样;使用合适的工具。辛普森一家(《荷马史诗》第七季第 17 集)中的这个镜头被认为是合理使用

本地可解释的模型不可知解释( LIME )是一个流行的 Python 包,用于解释单个模型对文本分类器或作用于表格(数字或分类数据的 NumPy 数组)或图像的分类器的预测。莱姆最初是在一篇名为《我为什么要相信你》的论文中提出来的:解释任何分类器的预测“在 2016 年,从那以后 LIME project repository 达到了几乎 8k 星的点(作为对比,scikit-learn 有 42k start)。

虽然 LIME 是解释任何分类器预测的最受欢迎的方法之一,但它在研究社区中受到了几次批评:LIME 遭受标签和数据偏移,解释取决于超参数的选择(是的,LIME 有超参数),甚至类似的点可能有不同的解释。这些问题的组合可能会给出错误的、意想不到的解释。

石灰是如何工作的

在机器学习项目中,我们经常使用复杂的模型,如随机森林或深度神经网络。对于一个人来说,理解这些黑盒是如何做出预测的是不可行的。与此同时,如果我们用更简单、更容易解释的模型,如线性回归或浅层决策树,来代替复杂的模型,我们将会在分数上失利。

LIME 背后的想法旨在从两个世界获得权利:让我们训练一个准确的黑盒模型,但该模型的解释将基于简单、易于理解的模型,如线性或逻辑回归。

也就是说,为了解释单个点 P ,让我们训练一个局部线性(或逻辑)回归模型。输入数据是通过到点 P ( l1 、 *l2、*或其他)的距离加权的扰动列车数据( X )。目标是黑盒模型对 X 的预测。可以通过探索替代模型的系数来获得解释(关于 LIME 如何工作的更多信息可以在原始论文这本优秀的书中找到)。

这种方法可以处理任何数据类型:表格数据、文本和图像。石灰库有一个很好的 API,易于使用。然而,石灰有几个隐藏的问题。

问题

石灰法有几个重大问题,本节将对此进行描述。

石灰的解释并不可靠

在做预测的同时,我们期望相似的点应该有相似的预测。也就是说,如果信贷申请人的收入从 60k/年变为 61k/年,我们预计信贷评分不会下降或上升(至少经常如此)。同样的逻辑也应该适用于解释:特征输入向量的微小变化不应该显著影响解释。回到信用评分的例子:如果模型的解释表明收入=60k 是一个重要的特征,并且它将信用评分推向一个积极的方向,那么收入=61k 也应该如此。不幸的是,莱姆和 SHAP 并不总是如此。

大卫·阿尔瓦雷斯-梅利斯和汤米·s·雅克拉在他们的论文“关于可解释性方法的健壮性”中介绍了一种解释工具的健壮性的度量。局部 Lipschitz 估计的度量被定义为:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

来源

其中 x_i 是输入示例, x_jx_if(x) —特征的重要性, B(x_i) —是以 x_i 为中心的半径为 ε 的球。此测量显示了由于输入要素的微小变化而导致的要素重要性的最大变化。降低测量值——更有力的解释是。

在这篇论文中,作者用 SHAP 和莱姆估计了随机森林模型解释的稳健性。对于几个数据集,他们从每个数据集中采样一百个点,并计算局部李普希茨估计。结果如下图所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在各种 UCI 分类数据集的 100 个测试点上计算的局部 Lipschitz 估计。图片来源

为了便于理解,这些值是低、平均还是高,我们来看一个解释示例。在这里,作者提出了波士顿数据集中的一个点和一个修改点,它最大化了局部 Lipschitz 估计:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

上图:波士顿数据集中的示例 x_i 及其解释(属性)。下图:对 Lipschitz 估计 L(x_i)的最大化的解释。图来源

我们可能会看到,输入特征的一个小变化(CRIM: 0.4 → 0.3,AGE: 92.3 → 92.2,DIS: 3.0 → 3.1,TAX: 307 → 307.1,B: 395.2 → 395.3,LSTAT: 21.5 → 21.4)使得解释发生了巨大的变化:对于几乎一半的特征,特征重要性和绝对值的符号都发生了变化!作者在用石灰解释图像时也观察到了类似的行为。

对类似例子的解释可能完全不同。

LIME 遭受标签和数据移位

数据转移是指训练和测试分布不同时。这是至关重要的,但有时也是 ML 管道的一个隐藏问题,它可能会导致验证阶段的分数低估或高估,或者生产中的模型退化。数据偏移是由以下原因造成的:

  1. 样本选择偏差。使用不同的规则选择训练和测试部分的数据。例如,一个图像分类模型在使用专业相机拍摄的图像上进行训练,而在使用智能手机拍摄的照片上进行测试。
  2. 不稳定的环境。世界不是静止的,底层过程是变化的,所以算法必须更新。这在不断发展的算法交易和欺诈检测领域更为明显,而在情绪分析等更为“保守”的领域则不那么明显。

关于数据转移的更多信息可以在了解数据集转移博客文章中找到。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

数据移位的例子

阿米尔·侯赛因·阿哈旺·拉赫纳马和亨里克·博斯特罗姆进行的研究——“石灰框架中数据和标签转移的研究”——解决了这个问题。他们做了几个实验,并得出结论,由 LIME 的扰动过程生成的实例与从基础分布中提取的训练实例有显著不同。基于所获得的结果,作者认为所解释的例子的特征的随机扰动不能被认为是 LIME 框架中数据生成的可靠方法。

这导致了一个严重的问题。部分由于数据转移,部分由于替代模型预测能力的限制,替代模型不能足够好地近似黑箱模型的预测。这种低保真度的解释几乎毫无用处(近似的良好程度被称为保真度)。

石灰解释保真度低。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

新闻组和 ImageNet 数据集中的保真度和 MMD 散度。来源

石灰解释取决于超参数的选择

石灰有一组基本的超参数:

  1. 训练一个代理模特需要多少分?
  2. 我们应该如何权衡这些要点?我们应该使用什么距离度量?
  3. 如何选择替代模型的超参数(即正则化的类型和强度)?

希望无论我们选择哪一组超参数,解释都或多或少是相同的。我试着检查了一下。

在实验中,我训练了 LightGBM 模型,并使用一组不同的超参数对来自心脏病 UCI 数据集的样本点进行了合理的解释。对于每个点,我计算了使用不同超参数集获得的特征权重之间的成对 Spearman 等级相关性。在最好的情况下,当解释不依赖于超参数时,成对相关性应该等于 1。不幸的是,酸橙的情况并非如此。

成对相关的分布如下所示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

前五个最重要特征的成对相关性分布(使用 LightGBM“增益”重要性获得):

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们看到相关性很高,但远非完美。这意味着,对于不动点,我们可能期望不同的本质特征和它们的贡献,取决于超参数的选择。在某些情况下,基于使用什么超参数进行解释,相同的特征可以将预测“推向”积极或消极的方向。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

使用不同的石灰超参数的特征权重。我们可以看到,根据超参数的选择,该特征可能对最终预测产生积极或消极的影响。

解释取决于石灰超参数的选择。

我的 GitHub 中提供了再现性代码:

[## DenisVorotyntsev/lime _ experiments

这个库包含关于超参数的选择如何影响石灰解释的实验代码。的…

github.com](https://github.com/DenisVorotyntsev/lime_experiments)

摘要

石灰框架现在被广泛使用。正如我在这篇博文中所展示的,它有几个显著的问题,这使得 LIME 成为模型解释的一个糟糕的选择:

  1. 相似例子的解释可能完全不同;
  2. 石灰解释保真度低;
  3. 解释取决于石灰超参数的选择。

有可能克服那些问题吗?我认为,可以通过使用一组不同的超参数和稍微改变的特征输入向量来计算实际的特征重要性,作为获得的时间重要性的平均值。但对我来说,它反而像一根拐杖,是一个可靠的解决方案。我想听听你对此的评论和想法。

相反,我建议使用完全可解释的模型,如线性回归或加法模型(例如,解释显示与基于树的模型相当的结果,同时是完全可解释的)或使用 SHAP 解释 ML 模型。

附加链接

如果你喜欢这个,你可能会有兴趣阅读我的另一篇关于排列重要性问题的文章:

[## 停止置换功能

排列重要性可能会给你错误的、误导的结果。但是为什么呢?

走向数据科学](/stop-permuting-features-c1412e31b63f)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值