TowardsDataScience 博客中文翻译 2021(六百四十四)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

AGI 的认知科学

原文:https://towardsdatascience.com/the-cognitive-science-of-agi-139e1f4b31d5?source=collection_archive---------26-----------------------

思想和理论

人工智能概论系列的第 2 部分

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

大脑和思维是一回事吗?资料来源:Bret Kavanaugh viaUnsplash

“为什么大脑不证明自己在做所有这些事情呢?哦,顺便说一下,是我,聪明的——在你脑子里。我是让你保持平衡和咀嚼食物的东西;我是你入睡或坠入爱河的原因……”

Patricia S. Churchland 博士,触动神经:作为大脑的自我

欢迎来到这个探索人工智能的新系列的第二部分(AGI)。如果你错过了第 1 部分,或者只是在寻找一些关于 AGI 的背景知识,那么点击这里查看。本周我们将看看世界上认知科学是什么,为什么它与 AGI 相关,以及为什么每个人工智能/AGI/人工智能的追随者都应该至少知道一点点*。*

在这个系列中,每周/每隔一周会有一个新的帖子出现(我希望如此),如果有问题、评论或澄清,可以随时给(mferg@mit.edu 发电子邮件。尽情享受吧!

免责声明:毫无疑问,有些人更有资格深入探讨我将涉及的问题和主题,从情感到神经形态计算。对于这些人来说,这个系列只是对这些主题的介绍,因此,如果为了简洁而省略或浓缩了一些内容,请见谅。我真的只是想要这个系列,以及激发它的课程,作为一个相关 AGI 主题的调查,这些主题通常在学习人工智能或人工智能时不会被教授。还要注意:这个系列与麻省理工学院或其品牌没有任何关系——我只是喜欢写一些我感兴趣的东西,麻省理工学院并不正式认可这里陈述的观点。

第一部分:什么是认知科学?

与心理学或神经科学相比如何?

“现实存在于人的头脑中,而不存在于其他地方.”

―乔治·奥威尔, 1984

心灵的本质是什么?你是否等同于你所有的大脑过程,被裹得严严实实,为生活做好了准备?或者对你来说,除了记忆、感知和注意力过程的结合之外,还有什么别的东西吗?你是你的信仰、理想、目标和恐惧吗?本周,我们将对认知科学领域进行一次简短的旅行,看看其中有哪些概念对我们 AGI 人有所帮助和相关。让我们开始吧。

简而言之,认知科学是对思维及其过程的研究,包括:

  1. 注意:“我在关注什么?”
  2. 感知:“我在看什么?”
  3. 意识:“什么是?”
  4. 记忆:“我是怎么记住事情的?”
  5. 理性:“我怎么做决定?”
  6. 自我:“?”
  7. 元认知:“关于思考的思考是什么?”
  8. 语言:“什么是语义?”
  9. 潜意识过程:“什么影响我的想法?”
  10. 思考(认知):“思考是什么意思?”

还有一个非常粗糙的类比,将大脑与运行思维“软件”的“硬件”联系起来。这种类比在某些层面上是站不住脚的,并且与所谓的计算机心理理论(认为大脑是一台计算机/计算机器)有所关联,但在很大程度上,这是对大脑和思维之间差异的一个很好的介绍。

来自斯坦福哲学百科全书[1]的 cog sci 的官方定义是:

认知科学是对思维和智力的跨学科研究,包括哲学、心理学、人工智能、神经科学、语言学和人类学。

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

大脑。3 磅瘦肉。来源:Robina Weermeijer viaun splash。****

希望现在你能明白为什么这个领域可能对人工智能研究人员有用:看看 DeepMind 和 AlphaGo 的成功就知道了。人工智能研究的许多方面都涉及到研究或再现一些作为认知过程基础的算法——为了试图再现这些算法,人们必须对他们所观察的现象的认知科学有坚实的理解。人工智能研究人员也是认知科学家已经有很长的历史了,现在仍然如此。

那么神经科学、认知科学和心理学的区别是什么呢?什么是认知神经科学?认知心理学?一切听起来都变得一样了……

这里有一个很好的概述:简而言之,神经科学是“最底层”,也就是最接近大脑硬件的,下面列表向下的每个领域都从这个硬件“向上”移动到更多的“软件”;从突触到心理过程到人类行为。微观到宏观,如果你愿意的话。**

  1. 神经科学 关注的是的低级功能,在抽象的神经元/神经化学水平及其以下。
  2. 认知神经科学 专门针对头脑的过程的大脑(神经)基础,在大脑中寻找认知功能的“标记”。
  3. 认知科学 更上一层楼,关注的是头脑灌输的过程,如前一节所列。
  4. 认知心理学 定义起来有点棘手,但主要研究心理现象背后的心智过程。
  5. 心理学 主要关注人类行为和互动以及信息处理。

这些就是这些领域的差异,以一种非常粗略的方式。请注意,许多大脑/思维研究人员在以上所有方面都有经验,但最终大多专注于一两个一般领域以获得研究生学位。例如,麻省理工学院的 BCS 项目提供认知科学、系统神经科学、细胞和分子神经科学以及计算方面的研究生学位——但不包括心理学[2]。

因此,简而言之,认知科学研究的是思维及其过程。那么大脑又如何呢?

第二部分:对你大脑的基本介绍

比如说,真的是基本。比如神经 101 基础课的前 10 分钟。

人们应该知道,我们的快乐、喜悦、欢笑和玩笑,以及我们的悲伤、痛苦、悲伤和眼泪,都来自大脑,而且只能来自大脑。

――希波克拉底,公元前 400 年

W 大脑的基本解剖是什么?大脑分为三个主要部分[3]:

  1. 脑干
  2. 小脑
  3. 大脑

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

脑干是杆状的东西,小脑是右下的一小部分,大脑是大的上半部分。资料来源:Milad b . faku rian viaun splash

根据梅菲尔德诊所【3】和医药网【4】,

…是连接脊髓的大脑基底的茎状部分。它控制着大脑和身体其他部分之间的信息流动,以及其他基本的身体功能,如呼吸、吞咽、心率、血压以及人是清醒还是困倦。它由中脑、脑桥和延髓组成。

接下来,梅菲尔德诊所【3】也给了我们一个关于小脑的很好的概述:

小脑位于脑干顶部(脊髓与大脑交汇处)的后面,由两个半球(两半)组成。它接收来自感觉系统、脊髓和大脑其他部分的信息,然后调节运动。它还协调随意运动,如姿势、平衡、协调和言语,从而产生平稳和平衡的肌肉活动。它对学习运动行为也很重要,但它只占大脑相对较小的一部分——约占总重量的 10%,但它包含了大脑神经元的大约一半

最后,《大英百科全书》对大脑的最后一部分——大脑——有很大的研究:

大脑是大脑最大和最上面的部分,由大脑半球组成,占大脑总重量的三分之二。一个半球,通常是左半球,在功能上占主导地位,控制语言和言语。另一个半球解释视觉和空间信息。大脑半球由有髓神经纤维的内核、白质灰质的外皮层组成。一般来说,大脑负责整合感觉冲动,指导运动活动,并控制高级智力功能。大脑皮层的灰质通常分为四个叶,大致由主要的表面褶皱定义。这些脑叶是额叶、顶叶、颞叶和枕叶。

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

所有这些大脑单词听起来都一样…来源:大卫·马托斯 via Unsplash

好的,这是很多信息——别担心,这只是一个调查,之后没有考试——我只是想给你一个很好的概述。那么,为什么所有这些谈论神经科学、认知科学和所有其他听起来像认知的科学呢?

第三部分:为了创造/理解 AGI,我们需要知道认知科学/神经科学中的哪些重要概念?

看看 AGI 人的几个相关话题

“现在在大脑中发现的工作原理可能会在未来提供比我们目前所能预见的更强大的机器……”

― J.Z. Young,《科学中的怀疑和确定:生物学家对大脑的思考》, 1960 年

如果你愿意的话,可以复述一下,你是一名来自计算机科学领域的游客,正在认知科学领域进行一次旅行。有哪些大的收获可以带给你的深度学习弟兄们,他们可能没有接触过?让我们来看看认知科学中的几个重要话题和主题,这将有助于我们稍后理解它们如何(或是否)可以在机器中复制。

首先出场的是 记忆 ,以及其鲜明的类型。所有的记忆都是一样的吗?不会。最大的区别在于长期记忆和短期记忆(也称为工作记忆):短时记忆通常可以同时处理 5-9 件事情,持续时间长达 18 秒左右,而 LTM 可以持续一生,但对编码的内容有选择性。另一种记忆二分法是陈述性程序性*:陈述性是关于事物的知识,通常被认为包括语义记忆(事实)和情景记忆(经历)。程序记忆是如何做事情,比如骑自行车,弹吉他和弦,或者在《光晕 3》中杀死一群圣约人野兽。***

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

如果你真的想让你的思维爆炸(哈哈),查一下“扩展思维理论”。资料来源:劳拉·富尔曼转自 Unsplash

接下来是的边缘系统:为此我们期待昆士兰大学【6】:**

…大脑中与行为和情绪反应有关的部分,尤其是当涉及到我们生存所需的行为时:喂食、繁殖和照顾后代,以及战斗或逃跑反应。你的边缘系统埋藏在大脑深处,大脑皮层之下,脑干之上。丘脑和下丘脑(产生重要的激素和调节口渴、饥饿、情绪等)和基底神经节(奖励处理、习惯形成、运动和学习)也参与其中。你的杏仁核位于海马体旁边,左右杏仁核在我们的情绪反应中起着核心作用,包括快乐、恐惧、焦虑和愤怒等感觉。杏仁核也将情感内容与记忆联系在一起。最后,海马体本质上是我们大脑的记忆中心。情景记忆被形成并分类,在大脑皮层的其他部分长期储存。

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

恐惧很大程度上是由边缘系统控制的。来源:Benjamin wede Meyer viaUnsplash

还有数不清的其他认知科学现象和主题,涵盖这些将是有益的:我只是选择了上面的两个(和下面的一个)作为起点。其他可能包括视觉感知音频/语言处理认知周期全局工作空间,以及意识

最后介绍一个认知科学的话题,我们下周会深入探讨: 心智与大脑的本质 。认知科学和神经科学的圣杯是发现思维是如何从大脑中产生的。长久以来,哲学家们一直在争论到底是什么让你成为你;从苏格拉底到笛卡尔到佛陀。我们不可能希望回答一个 AGI 人是否有“头脑”的问题,除非我们能就是什么造就了头脑达成一致——这是一个巨大的问题,但一些答案正开始从现代神经科学的土地上浮现出来……

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

下周,威尔将介绍一些心灵哲学。资料来源:K . Mitch Hodge viaun splash

TL;博士

本周快速总结

“只要我们的大脑是一个谜,宇宙,大脑结构的反映,也将是一个谜。”

―圣地亚哥·拉蒙·卡哈尔,西班牙医生,诺贝尔奖获得者

本周,我们研究了世界上的认知科学是什么(对思维的研究),以及它为什么与我们 AGI 人相关(记忆、注意力、感知等重要话题)。下周,我们将介绍一些奇特的心灵哲学,来讨论灵魂、心灵和同一性的本质。重磅消息,敬请关注!

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

西斯廷教堂里藏着大脑吗?来源:Calvin Craig viaUnsplash

需要思考的进一步问题:

  1. 计算机能像人类一样拥有思维吗?
  2. 思维是否独立于实施它们的基质?
  3. 你认为大脑是从头脑中产生的,还是有其他东西缺失了?

关于作者

Mike Ferguson 是麻省理工学院 DiCarlo 实验室的计算研究开发人员。他将研究大脑评分工具,这是一种测量人工神经网络有多像大脑的工具。他将于 2021 年春天从弗吉尼亚大学毕业,获得计算机科学和应用数学学士学位,以及认知科学和哲学学士学位。他是《一周挑战》一书的参与者,在两年内阅读了超过 138 本关于人工智能、哲学以及对人类意味着什么的书籍。他和他的伯恩山犬“博伊·温斯顿”以及收养的边境牧羊犬“影子”住在弗吉尼亚州的夏洛茨维尔。

参考资料:

  1. 认知科学(斯坦福哲学百科全书)
  2. 研究生项目|大脑和认知科学(mit.edu)
  3. https://mayfieldclinic.com/pe-anatbrain.htm
  4. https://www . medicine net . com/script/main/art . ASP?articlekey=2517
  5. https://www.britannica.com/science/cerebrum
  6. 边缘系统——昆士兰脑研究所——昆士兰大学(uq.edu.au)

Docker 卷完全指南

原文:https://towardsdatascience.com/the-complete-guide-to-docker-volumes-1a06051d2cce?source=collection_archive---------0-----------------------

了解 docker 卷的基础知识

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

照片由克里斯汀·休姆Unsplash 上拍摄

在我们重启或移除容器后,容器生成和使用的数据不再持久。因此,我们可以使用 Docker 卷绑定挂载来管理 Docker 容器中的数据,以解决这个问题。我们可以用它来持久化容器中的数据或者在容器之间共享数据。从这篇文章中,你将学习如何在你的项目中使用 Docker 卷和绑定挂载。

设置

Docker 使用以下类型的卷和绑定挂载来保存数据。对于这个设置,我使用的是 macOS。

  1. 匿名卷
  2. 命名卷
  3. 绑定安装

在这篇文章中,我们将运行一个 MySQL 服务器并执行一些命令。默认情况下,MySQL 会将其数据文件存储在容器的/var/lib/mysql目录中,Docker volumes 会帮助我们持久存储这些数据。

我们有三个 docker-compose.yml 文件来演示卷和绑定挂载。要启动这些文件,您需要使用以下命令。

docker compose up

一旦我们的容器开始运行,我们可以使用下面的命令在容器中创建一个表用于测试。

# Access the container
docker exec -it mysql_db_1 bash
# Connect to MySQL server
mysql -uroot -proot
# Run MySQL commands
USE test_db;
SHOW TABLES;
CREATE TABLE users (
       user_id int NOT NULL AUTO_INCREMENT,
       name VARCHAR(20),
       PRIMARY KEY (user_id)
);
SHOW TABLES;

1.匿名卷

如果我们运行下面的 docker-compose.yml 文件,将会创建一个匿名卷。如果我们重启我们的容器,数据将是可见的,但不是在我们移除容器之后。此外,其他容器也无法访问它。如果我们想暂时保存数据,这是很有帮助的。这些卷是在/var/lib/docker/volume本地主机目录中创建的。

version: '3.8'
services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test_db
    ports:
      - "3306:3306"
    volumes:
      - /var/lib/mysql

正如我们所看到的,我们不必指定主机目录。我们只需要指定容器内的目录。

如果我们从 docker-compose.yml 文件中删除 volume 指令,容器将默认创建一个匿名卷,因为它是在 MySQL Dockerfile 中指定的。因此,MySQL 映像确保了我们在不提供任何卷信息的情况下仍然可以访问数据。

VOLUME /var/lib/mysql

现在,我们有一个带有随机标识符的匿名卷。

docker volume ls
DRIVER    VOLUME NAME
local  4e679725b7179e63e8658bc157a1980f320948ab819f271fd5a44fe94c16bf23

让我们检查一下我们的码头集装箱。

docker inspect mysql_db_1
.
.
.
"Mounts": [
            {
                "Type": "volume",
                "Name": "4e679725b7179e63e8658bc157a1980f320948ab819f271fd5a44fe94c16bf23",
                "Source": "/var/lib/docker/volumes/4e679725b7179e63e8658bc157a1980f320948ab819f271fd5a44fe94c16bf23/_data",
                "Destination": "/var/lib/mysql",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
.
.
.

我们可以使用下面的命令删除容器及其相关的匿名卷。

docker rm -v mysql_db_1

如果我们不将匿名卷和容器一起删除,它将成为悬挂卷。

docker rm mysql_db_1

我们可以使用以下命令列出并删除所有悬挂卷。

docker volume ls -qf dangling=true
docker volume rm $(docker volume ls -qf dangling=true)

2.命名卷

在我们重新启动或删除容器后,命名卷可以保存数据。此外,其他容器也可以访问它。这些卷创建在/var/lib/docker/volume本地主机目录中。

version: '3.8'
services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test_db
    ports:
      - "3306:3306"
    volumes:
      - db_data:/var/lib/mysql
volumes:
  db_data:

这里,第一个字段是主机上卷的唯一名称。第二部分是容器中的路径。

此外,如果我们使用以下命令删除容器,我们将仍然拥有该卷,这与匿名卷不同。

docker rm -v mysql_db_1

3.绑定安装

在我们重启或移除容器后,绑定装载可以持久化数据。正如我们所看到的,命名卷和绑定装载是相同的,只是命名卷可以在特定的主机目录下找到,而绑定装载可以在任何主机目录下。

version: '3.8'
services:
  db:
    image: mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: test_db
    ports:
      - "3306:3306"
    volumes:
      - $PWD/data:/var/lib/mysql

这里,我们正在装载一个主机文件夹。第一部分是主机中的路径。第二部分是容器中的路径。

命令

现在,让我们列出 volume 指令的所有可用命令。

docker volume --help

Commands:
  create      Create a volume
  inspect     Display detailed information on one or more volumes
  ls          List volumes
  prune       Remove all unused local volumes
  rm          Remove one or more volumes

我们可以使用这些命令来管理匿名卷和命名卷。

# Creat a volume
docker volume create test-vol
# test-vol

# Inspect a volume
docker inspect test-vol
# [
#     {
#         "CreatedAt": "2021-07-17T07:23:25Z",
#         "Driver": "local",
#         "Labels": {},
#         "Mountpoint": "/var/lib/docker/volumes/test-vol/_data",
#         "Name": "test-vol",
#         "Options": {},
#         "Scope": "local"
#     }
# ]

# List all volumes
docker volume create test-vol-2
docker volume ls
# DRIVER    VOLUME NAME
# local     test-vol
# local     test-vol-2

# Remove all volumes
docker volume prune
# WARNING! This will remove all local volumes not used by at least one container.
# Are you sure you want to continue? [y/N] y
# Deleted Volumes:
# test-vol
# test-vol-2

# Remove volumes
docker volume create test-vol-3
docker volume rm test-vol-3
# test-vol-3

docker volume create test-vol-4
docker volume create test-vol-5
docker volume rm test-vol-4 test-vol-5
# test-vol-4
# test-vol-5

我希望你对 Docker 卷和装订线有一个清晰的了解。它将帮助您为 Docker 项目持久化数据。编码快乐!

相关职位

神经网络多类分类完全指南

原文:https://towardsdatascience.com/the-complete-guide-to-neural-networks-multinomial-classification-4fe88bde7839?source=collection_archive---------0-----------------------

神经网络到底是什么?本文将向您全面完整地介绍如何从头开始编写神经网络,并使用它们进行多项式分类。包括 python 源代码。

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

作者照片:与朋友一起骑山地车 2018

神经网络反映了人脑的行为。它们允许程序识别模式并解决机器学习中的常见问题。这是执行分类而不是逻辑回归的另一种选择。在 Rapidtrade ,我们使用神经网络对数据进行分类并运行回归场景。这篇文章的源代码可以在 GitHub 上找到。

我们将使用来自 Kaggle 的数据集,你可以在这里下载。所以为了可视化我们将在本文中使用的数据,见下文。我们将使用它来训练网络根据 j 列对我们的客户进行分类。我们还将使用突出显示的 3 个特征对我们的客户进行分类。我需要 3 个特征来适应我的神经网络,这是最好的 3 个特征。

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

图 1:我们的数据集

请记住,我们将把所有的字母字符串值转换成数字。毕竟我们不能把字符串塞进方程*;-)*

这是一篇相当长的文章,分为两个部分:

  • 介绍
  • 把所有的放在一起

好运;-)

介绍

神经网络总是由层组成,如图 2 所示。这看起来很复杂,但是让我们把它拆开,让它更容易理解。

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

图 2:神经网络

一个神经网络有 6 个重要的概念,我将在这里简单解释一下,但在这一系列文章中会详细介绍。

  • 权重这些就像我们在其他算法中使用的 theta 的 *-我们的网络将有 3 层
  • 前向传播使用特征/权重来获得 Z 和一个
  • 反向传播*

在这个系列中,我们将建立一个三层的神经网络。在进入正题之前,让我们快速讨论一下这些层次。

-输入层

参考上面的图 2,我们将这一层的结果称为 A1 。该图层的大小 (# units) 取决于我们数据集中要素的数量。

构建我们的输入层并不困难你只需简单地将 X 复制到 A1 ,但是添加一个所谓的偏向层,默认为“1”。

第 1 栏:偏向的图层默认为“1”
第 2 栏:**“曾经结婚”我们的第一个特征,并被重新标记为 1/2
第 3 栏:
“毕业”我们的第二个特征,并被重新标记为 1/2
第 4 栏:
“家庭规模”**我们的第三个特征

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

图 3:可视化 A1 —输入层

-隐藏层

参考上面的图 2,我们只有 1 个隐藏层,但是你可以为每个特征设置一个隐藏层。如果您有比我下面提到的逻辑更多的隐藏层,您将为每个隐藏层复制计算。

大小(单位数)由你决定,我们选择了#features * 2 ie。6 台

该层是在向前和向后传播期间计算的。运行这两个步骤后,我们计算每个单元的 Z2、A2 和 S2 。运行每个步骤后的输出如下。

正向传播

参考图 1,在这个步骤中,我们计算 Z2,然后是 A2。

  • Z2 包含我们对隐藏层中的假设的计算结果。
  • A2 也包括偏置层(col 1)并且具有应用于来自 Z2 的每个单元的 sigmoid 函数。

因此,根据图 4,Z2 具有 6 列,A2 具有 7 列。

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

图 4:可视化 Z2 和 A2-隐藏层

反向传播

因此,在前向传播穿过所有层之后,我们然后执行反向传播步骤来计算 S2 。S2 被称为每个单元假设计算的δ。这用于计算该θ的梯度,随后,结合该单元的成本,帮助梯度下降计算出最佳θ/重量。

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

图 5:可视化 S2 的梯度

-输出层

我们的输出层给出了我们假设的结果。即。如果应用这些 thetas,我们对这些客户分类的最佳猜测是什么。大小(#单位)源自 y 的数字标签。如图 1 所示,有 7 个标签,因此输出层的大小为 7。

与隐藏层一样,这个结果是在向前和向后传播的 2 个步骤中计算出来的。运行这两个步骤后,结果如下:

正向传播

在向前推进期间,我们将为输出层计算 Z3A3 ,就像我们为隐藏层所做的那样。参考上面的图 1,可以看到不需要偏置柱,下面可以看到 Z3 和 A3 的结果。

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

图 6:可视化 Z3 和 A3

反向传播

现在(参考图 1)我们有了 Z3 和 A3,让我们计算 S3 。由于 S3 只是一个基本的成本计算,从 Y 中减去 A3,所以我们将在接下来的文章中探索这些等式,但我们仍然可以看到下面的结果

把所有的放在一起

因此,上面是一个有点尴尬,因为它可视化的输出在每一层。我们在神经网络中的主要焦点是计算神经网络成本的函数。该函数的编码将采取以下步骤。

  1. 准备数据
  2. 设置神经网络
  3. 初始化一组权重/θ
  4. 创建我们的成本函数,它将
    4.1 执行正向传播
    4.2 计算正向传播
    成本4.3 执行反向传播 4.4 计算增量,然后从反向道具计算梯度
  5. 执行成本优化
  6. 预测结果以检查准确性

1.准备数据

为了开始这个探索性的分析,首先导入库并定义使用 matplotlib 绘制数据的函数。根据数据的不同,并不是所有的图都要绘制。

嘿,我只是一个简单的内核机器人,而不是卡格尔比赛的大师!

from mpl_toolkits.mplot3d import Axes3D
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import LabelEncoder
import seaborn as sns
import matplotlib.pyplot as plt # plotting
import numpy as np # linear algebra
import os # accessing directory structure
import pandas as pd # data processing, CSV file I/O (e.g. 
from scipy import optimize as optpd.read_csv)
import matplotlib.pyplot as plt

现在,让我们阅读我们的数据并快速浏览一下。

df = pd.read_csv(‘customertrain.csv’)
df.head()

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

图 4:可视化测向

做一个信息,我们可以看到我们有一些工作要做的空值以及一些对象字段转换成数字。

df.info()

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

图 8

因此,让我们将对象字段转换为数字,并删除我们不需要的列。

columns = [“Gender”,”Ever_Married”,”Graduated”,”Profession”,”Spending_Score”]
for feature in columns:
  le = LabelEncoder()
  df[feature] = le.fit_transform(df[feature])df = df.drop([“ID”,”Gender”,”Age”,”Profession”,”Work_Experience”,”Spending_Score”], axis=1)
df.dropna(subset=['Var_1'], inplace=True)df.head()

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

图 9 准备数据后的测向结果

使用 fit_transform 将我们的多项式类别编码成我们可以处理的数字。

yle = LabelEncoder()
df[“Var_1”] = yle.fit_transform(df[“Var_1”])
df.head()

填写缺失的特征

回归的一个重要部分是理解哪些特征缺失了。我们可以选择忽略所有缺少值的行,或者用 mode、median 或 mode 填充它们。

  • 模式=最常见的值
  • 中位数=中间值
  • 平均值=平均

这里有一个方便的函数,你可以调用它,用你想要的方法来填充缺失的特性。我们将选择用平均值填充值。

经过下面的搞笑,你应该看到 7992 没有空值。

def fillmissing(df, feature, method):
  if method == “mode”:
    df[feature] = df[feature].fillna(df[feature].mode()[0])
  elif method == “median”:
    df[feature] = df[feature].fillna(df[feature].median())
  else:
    df[feature] = df[feature].fillna(df[feature].mean()) features_missing= df.columns[df.isna().any()]
for feature in features_missing
  fillmissing(df, feature= feature, method= “mean”)df.info()

提取 Y

让我们将 Y 列提取到一个单独的数组中,并将其从 dataframe 中移除。

Y = df[“Var_1”]df = df.drop([“Var_1”], axis=1

现在把我们的 X 和 y 列复制到矩阵中,以便于以后的矩阵操作。

X = df.to_numpy() # np.matrix(df.to_numpy())
y = Y.to_numpy().transpose() # np.matrix(Y.to_numpy()).transpose()
m,n = X.shape

规格化特征

现在,让我们将 X 归一化,使其值介于-1 和 1 之间。我们这样做是为了让所有的特征都在一个相似的范围内。我们使用下面的等式

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

执行标准化的目标是将所有特征降低到一个共同的比例,而不扭曲值范围的差异。这一重定要素等级的过程使得它们的均值为 0,方差为 1。

2.设置神经网络

现在,我们可以设置我们的神经网络的大小,首先,下面是我们要放在一起的神经网络。

在下面的初始化中,确保实现了上述网络。所以,现在你会问“合理的数字是多少?”

  • 输入层=设置为尺寸的大小
  • 隐藏层=设置为输入层* 2
  • 输出层=设置为 y 的标签大小。在我们的例子中,这是 7 个类别
input_layer_size = n                      # Dimension of features
hidden_layer_size = input_layer_size*2    # of units in hidden layer
output_layer_size = len(yle.classes_)     # number of labels

3.初始化重量(θs)

事实证明,对于梯度下降来说,这是一个相当重要的话题。如果你没有处理过梯度下降,那么先查一下这篇文章。从上面可以看出,我们需要 2 组砝码。(用表示)。

我们仍然经常称这些重量为θ,它们的意思是一样的。

我们需要一套 2 级的 thetass 和一套 3 级的 theta。每个θ是一个矩阵,大小为(L) * size(L-1)。因此如上所述:

  • θ1 = 6×4 矩阵
  • θ2 = 7×7 矩阵

我们现在必须猜测哪个初始 thetas 应该是我们的起点。这里,epsilon 来拯救我们,下面是 matlab 代码,可以轻松地为我们的初始权重生成一些随机的小数字。

def initializeWeights(L_in, L_out):
  epsilon_init = 0.12
  W = np.random.rand(L_out, 1 + L_in) * 2 * \
     epsilon_init - epsilon_init
  return W

如上所述,在对每个θ的大小运行上述函数后,我们将得到一些好的小随机初始值,如图 7 所示。对于上面的图 1,我们提到的权重指的是下面矩阵的第 1 行。

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

图 7:初始θ

4.成本函数

我们需要一个函数来实现用于执行分类的两层神经网络的神经网络成本函数。

在 GitHub 代码中,checknn.py 我们名为 nnCostFunction 的成本函数将返回:

  • 梯度应该是神经网络偏导数的“展开”向量
  • 最后的 J 是这个重量的成本。

我们的成本函数需要执行以下操作:

  • 将 nn_params 重新整形为参数θ1 和θ2,这是我们的 2 层神经网络的权重矩阵
  • 执行正向传播以计算(a)和(z)
  • 执行反向传播以使用(a)计算(s)

因此,我们的成本函数首先需要将 theta 重新整形为隐藏层和输出层的 theta。

# Reshape nn_params back into the parameters Theta1 and Theta2, 
# the weight matrices for our 2 layer neural networkTheta1 = nn_params[:hidden_layer_size * \
   (input_layer_size + 1)].reshape( \
   (hidden_layer_size, input_layer_size + 1))
Theta2 = nn_params[hidden_layer_size * \
   (input_layer_size + 1):].reshape( \
   (num_labels, hidden_layer_size + 1))# Setup some useful variables
m = X.shape[0]

4.1 正向传播

前向传播是神经网络的重要组成部分。这并不像听起来那么难。

在图 7 中,我们可以看到去掉了很多细节的网络图。我们将重点介绍第二级的一个单元和第三级的一个单元。这种理解可以复制到所有单位。注意我们可以做的矩阵乘法(图 7 中蓝色部分)来执行正向传播。

我在每一层显示一个单元的细节,但是你可以重复所有层的逻辑。

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

图 7:神经网络正向传播

在我们展示正向推进代码之前,让我们谈一谈正向推进过程中需要的两个概念。

4.1.1 乙状结肠功能

既然是做分类,我们就用 sigmoid 来评估我们的预测。sigmoid 函数是一种数学函数,具有特征性的“S”形曲线或 sigmoid 曲线。sigmoid 函数的一个常见示例是逻辑函数,如图一所示,由以下公式定义

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

在 github 中,checknn.py 创建了以下方便的函数:

  • sigmoid 是计算输入参数 Z 的 sigmoid 的简便函数
  • sigmoidGradient 计算在 z 处计算的 sigmoid 函数的梯度。无论 z 是矩阵还是向量,这都应该有效。
def sigmoid(z):
  g = np.frompyfunc(lambda x: 1 / (1 + np.exp(-x)), 1, 1)
  return g(z).astype(z.dtype)def sigmoidGradient(z)
  return sigmoid(z) * (1 - sigmoid(z))

4.1.2 正规化

我们将实现正则化,因为数据科学专业人员面临的最常见问题之一是避免过度拟合。过度拟合会给你一种情况,你的模型在训练数据上表现得非常好,但是不能预测测试数据。神经网络很复杂,使它们更容易过度拟合。正则化是一种对学习算法进行轻微修改以使模型更好地概括的技术。这反过来也提高了模型在不可见数据上的性能。

如果你研究过机器学习中正则化的概念,你会有一个公平的想法,正则化惩罚系数。在深度学习中,它实际上惩罚了节点的权重矩阵。

我们在 nnCostFunction 中通过传递一个 lambda 来实现正则化,该 lambda 用于惩罚计算的梯度和成本。

4.1.3 实施正向推进

根据图 1,让我们计算 A1。你可以看到它几乎是我的 X 的特征,我们在前面添加了硬编码为“1”的 bias 列。下面是实现这一点的 python 代码:

# Add ones to the X data matrix
a1 = np.insert(X, 0, 1, axis=1)

现在,结果将为您提供图 4 中 A1 的结果。特别注意前面增加的偏差栏“1”。

很好,A1 完成了,让我们继续 A2。在我们得到 A2 之前,我们将首先运行一个假设来计算 Z2。一旦你有了假设,你就可以通过 sigmoid 函数得到 A2。同样,根据图 1,将 bias 列添加到前面。

# Perform forward propagation for layer 2
z2 = np.matmul(a1, Theta1.transpose())
a2 = sigmoid(z2)
a2 = np.insert(a2, 0, 1, axis=1)

好了,我们快到了…现在在 A3 上,让我们做与 A2 相同的事情,但是这一次,我们不担心添加偏差列。

z3 = np.matmul(a2, Theta2.transpose())
a3 = sigmoid(z3)

你可能会问,“我们为什么要保留 Z2&Z3】。嗯,我们在反向传播中需要这些。所以我们最好把它们放在手边;-).

4.2 计算前进支柱的成本

在我们继续之前,如果您了解我们的 Y 列(图 9 ),其中包含用于对客户进行分类的标签。然后,为了计算成本,我们需要将 Y 重新格式化为一个与标签数量相对应的矩阵。在我们的案例中,我们的客户有 7 个类别。

图 8 显示了如何将 Y 转换为矩阵 y_one_hot,并且标签现在在适当的列中显示为二进制。

# turn Y into a matrix with a new column for each category and marked with 1
y_one_hot = np.zeros_like(a3)
for i in range(m):
  y_one_hot[i, y[i] - 1] = 1

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

图 8:将 Y 从 vector 映射到矩阵 y_one_hot

现在我们有了矩阵形式的 Y,让我们看看计算成本的等式。

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

嗯,这非常复杂,但好消息是,通过一些矩阵操作,我们可以用如下几行 python 代码来完成。

# Calculate the cost of our forward prop
ones = np.ones_like(a3
A = np.matmul(y_one_hot.transpose(), np.log(a3)) + \
  np.matmul((ones - y_one_hot).transpose(), np.log(ones - a3))J = -1 / m * A.trace()
J += lambda_ / (2 * m) * \
  (np.sum(Theta1[:, 1:] ** 2) + np.sum(Theta2[:, 1:] ** 2))

4.3 执行反向传播

因此,我们简化了图 1 中的神经网络,首先只显示了细节:

  • 从 Y 减去 A1(3)计算 S3
  • 此后,使用下面提到的θ乘以 S3 来计算线性方程。S2。

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

由于一张图片描绘了 1000 个单词,图 9 应该解释我们用什么来计算 S3 以及随后的 S2(用红色标记)。

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

图 9:反向传播

从(3)中,我们了解了我们的权重(θs)是如何初始化的,所以只是为了可视化图 9 所指的权重(φ),参见下面的图 10。

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

图 9:反向传播中使用的权重

因此,有了矩阵操作的帮助,正向传播在 python 中并不是一件困难的事情

# Perform backward propagation to calculate deltas
s3 = a3 - yv
s2 = np.matmul(s3, Theta2) * \
  sigmoidGradient(np.insert(z2, 0, 1, axis=1))# remove z2 bias column
s2 = s2[:, 1:]

4.4 从反向道具计算坡度

我们需要返回梯度作为我们的成本函数的一部分,这是需要的,因为梯度下降是在反向属性中发生的过程,其中目标是基于权重 w 在相反方向上连续重新采样模型参数的梯度,持续更新,直到我们达到函数 J(w)全局最小值

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

反向推进方程

简单来说,我们用梯度下降最小化代价函数, J(w)

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

图 10

再一次,矩阵操作拯救了它,只需要几行代码。

我们的第一步是计算一个可以用来调整我们的成本的惩罚。如果你想要一个关于正规化的解释,那么看看这篇文章

# calculate regularized penalty, replace 1st column with zeros
p1 = (lambda_/m) * np.insert(Theta1[:, 1:], 0, 0, axis=1)
p2 = (lambda_/m) * np.insert(Theta2[:, 1:], 0, 0, axis=1)

对于成本优化,我们需要反馈这组特定权重的梯度。图 2 显示了梯度一旦被绘制出来。对于输入到我们的成本函数的权重集,这将是绘制线的梯度。

# gradients / partial derivitives
Theta1_grad = delta_1 / m + p1
Theta2_grad = delta_2 / m + p2
grad = np.concatenate((Theta1_grad.flatten(), 
  Theta2_grad.flatten()), axis=None)

然而,成本优化函数不知道如何处理 2θ,所以让我们把它们展开成一个向量,结果如图 5 所示。

grad = np.concatenate((Theta1_grad.flatten(),  
   Theta2_grad.flatten()), axis=None)

好了,哇,这是很多信息,但我们的成本函数已经完成,让我们继续运行梯度下降和成本优化。

5.执行成本优化

5.1 验证我们的成本函数

一件很难理解的事情是我们的成本函数是否表现良好。检查这一点的一个好方法是运行一个名为 checknn 的函数。

创建一个小的神经网络来检查反向传播梯度,它将输出由反向传播代码产生的分析梯度和数值梯度(使用 computeNumericalGradient 计算)。这两个梯度计算应该产生非常相似的值。

如果你想更深入地研究这种技术背后的理论,这在吴恩达的机器学习课程第 4 周是很难的。

您不需要每次都运行,只需在第一次设置成本函数时运行即可。

这里就不放代码了,但是在 checknn.py 里面检查一下 github 项目有没有以下功能:

  • 检查梯度
  • 去基尼化权重
  • 计算美国梯度

运行 cheecknn 之后,您应该会得到以下结果

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

图 11:验证我们的成本函数的结果

5.2 梯度下降

梯度下降是一种优化算法,主要用于寻找函数的最小值。在机器学习中,梯度下降用于更新模型中的参数。参数可以根据算法而变化,例如线性回归中的系数和神经网络中的权重。我们将使用 SciPy 优化模块来运行我们的梯度下降。

from scipy import optimize as optprint('Training Neural Network... ')
#  Change the MaxIter to a larger value to see how more 
#  training helps.
options = {'maxiter': 50, 'disp': True}# You should also try different values of lambda
lambda_ = 1;# Create cost function shortcuts to be minimized
fun = lambda nn_params: nnCostFunction2(nn_params, input_layer_size, hidden_layer_size, output_layer_size, xn, y, lambda_)[0]jac = lambda nn_params: nnCostFunction2(nn_params, input_layer_size, hidden_layer_size, output_layer_size, xn, y, lambda_)[1]# Now, costFunction is a function that takes in only one 
# argument (the neural network parameters)res = opt.minimize(fun, nn_params, method='CG', jac=jac, options=options)nn_params = res.x
cost = res.fun
print(res.message)print(cost)

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

图 12:运行梯度下降的结果

通过使用 reshape 为每一层获取我们的 thetas

# Obtain Theta1 and Theta2 back from nn_paramsTheta1 = nn_params[:hidden_layer_size * (input_layer_size + 
   1)].reshape((hidden_layer_size, input_layer_size + 1))Theta2 = nn_params[hidden_layer_size * (input_layer_size + 
   1):].reshape((output_layer_size, hidden_layer_size + 1))

6.预测结果以检查准确性

现在我们有了最佳权重(thetas ),让我们使用它们来进行预测,以检查准确性。

pred = predict(Theta1, Theta2, X)print(f’Training Set Accuracy: {(pred == y).mean() * 100:f}’)

你应该得到 65.427928%
的准确率,是的,有点低,但那是我们正在处理的数据集。我用物流回归& SVM 测试了这个数据集,得到了相同的结果。

结论

我希望这篇文章能让你对神经网络有更深层次的理解,以及你如何用它来分类数据。让我知道你怎么走…

多项式完全指南

原文:https://towardsdatascience.com/the-complete-guide-to-polynomials-6a221f360357?source=collection_archive---------29-----------------------

多项式到底是什么?本文将向您全面完整地介绍多项式,包括一些源代码。

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

来源:肖恩·安斯林拍摄于 2014 年飞越南极洲。我想知道那会是什么形状的多项式?

1.介绍

需要简单易懂的多项式介绍吗?提前阅读或在 youtube 上观看本教程。您也可以从 github 下载本文中的源代码。

线性回归的问题是数据通常不是直线的。如果我们看下面的数据集,一个线性函数是完全有意义的。

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

来源:图为德斯莫斯

多项式由以下公式定义

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

2.多项式的次数(转折点)

多项式的形状取决于次数项的数量,我已经在下面解释过了,所以正如你所看到的,一旦你理解了多项式的形状,你就可以开始计算它可能是哪一次了。一些学位的名称如下所示。

  • 蓝色=线性多项式
  • 黑色=二次多项式
  • 红色=三次多项式

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

来源:绘制在 desmos

3.过度拟合/欠拟合

因此,增加多项式的次数,可以让直线更好地拟合数据。但是,要小心,过高也会“过度拟合”数据,也不会给你一个准确的预测。

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

来源:在 desmos 上绘制

4.常数或指数变化的影响

现在让我们看看其他一些二次函数,看看当我们改变 x 的系数时会发生什么。我们将使用一个数值表来绘制图形,但我们将只填写那些靠近函数转折点的值。

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

您可以在表格的每一行中看到对称性,这表明我们已经将注意力集中在每个函数转折点周围的区域。我们现在可以使用这些值来绘制图表。

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

来源:在 desmos 上绘制

你为什么不登录www.desmos.com并绘制下面的多项式。尝试改变系数和常数项,看看形状的变化。

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

来源:在 desmos 上绘制

5.分解多项式

理解多项式如何因式分解很重要。这将允许稍后理解如何计算零来指示 x 轴上的截距。如果你喜欢看,那就看看我的 youtube 教程。

事实上,因式分解的过程是如此重要,以至于在不理解它的情况下,很少能完成超过这一点的代数。

例 1:带有 GCF 的二次型

理解这一点最简单的方法是做一个例子,假设我们有多项式:

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

所以,我们的第一步是看看能不能找到最大公因式(gfc)。在这种情况下,它将是 3,因此这允许我们将每一项除以 3。这导致:

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

现在,我们需要将 8 分解成 2 个数字,它们相乘应该等于 8,但是相加等于 6:

 8
 / \
-4 -2

所以,-4 * -2 = 8,而-4–2 = 6
现在我们有了-4 和-2,我们可以因式分解我们的多项式如下:

F(x) = (x — 4) (x — 2)

在我们的因式分解多项式或原始多项式中插入一个 x 值,会得到相同的结果。

示例 2:没有 GCF 的二次函数

现在,当没有 gcf 的时候呢?让我们来看看多项式:

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

我们的第一步是将第一个系数乘以常数项。
Ie。2 * -3 = -6

现在,让我们找出两个数字,它们乘以-6,但也加到-5

 -6
 /  \
-6  +1

下一步是扩展我们的“- 5x”术语,以使用上述数字。记住
-6x+1x = 5x。

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

所以,让我们把这两部分分开

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

从第一个红色部分,我们可以去掉 2x,所以 2x 2–6x 变成

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

我们的第二部分,我们可以分解 1,得到:1(x-3)。
所以,我们以

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

很好,让我们把(x-3)分解掉,我们最终得到一个分解的多项式

f(x) = (x-3) (2x + 1)

示例:分组的三次多项式因子

处理二次多项式的方法如上所述,那么现在,我们如何处理分解一个三次多项式。

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

看看我们能否通过划分系数来分组。在下面的例子中,两者给我们的值都是 1.5,所以我们可以通过分组进行因式分解。

3/2 == -12/8 == -1.5

将上述分为两项,并对其进行分解。我们第一项的 GCF 是 x2,而第二项的 GCF 是-4。

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

现在,让我们分解各项,我们可以分解出(3x — 2)

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

这留下了一个问题,因为我们有一个完美的正方形的差异。我们可以如下纠正这一点,取 x2 和 4 的平方根,将这一项分成两项,最后得到最终的因式多项式。

f(x) = (3x -2) (x — 2) (x + 2)

什么是多项式的零点?
如果你喜欢看,那就去 youtube

我们需要它们只是因为我们经常在物理和其他情况的建模中使用多项式!零非常有用,因为它有助于找到根。那么,为什么要找到根源呢?

好吧,假设我们知道我们有问题,

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

那么,x 能是什么呢?

如果我们把一边化为零,问题就变得简单多了。

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

现在,我们可以把它代入二次公式,求出 x。

当然,你可能会说这只适用于二次型。然而,给定任意一个多项式,如果让它等于零,求根就变得容易多了。

所以,回答你的问题,我们实际上不需要零,但是它们真的很方便!

如果我们取以下分解多项式:
P1(x) = (x-1)(x-2)(x-3)

好吧,那么 x 的任何值,其中上面的等式=“零”。
所以任何时候上面 3 个表达式中的任何一个都是零,那么自然地所有 3 的乘积也将是零

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

因式分解后,这变得很容易推导,正如我们可以看到,当 x 是 1,2 或 3,P1(x)的结果将是零。

让我们再举一个例子,我们可以用图表来表示。

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

从上面我们可以看到,当 x = [-2,-3/2,2]时,我们的 3 个项都为零的点。当我们画出这个多项式时,它在图中也很明显。

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

来源:图为德斯莫斯

我相信这可以清除零,这些可以在下一篇文章中看到,当我们讨论多项式的重数时。

6。多项式的多重性

简单来说,重数是多项式穿过 x 轴的次数。如果你喜欢看,去 YouTube看看

让我们以下面两个已经是因子形式的多项式为例。

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

所以,在我们的下一步中,如果我们想计算多项式的重数,我们可以看到我们有多少个单独的零项。在上面的例子中。我们下面的第一步是计算出每一项下的零值。

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

因此,如果我们创建一个表,我们现在可以在重数列中输入,对于这个零 x 值,我们有多少个零项。

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

如果重数是奇数,那么我们有一个符号变化,而如果重数是偶数,那么我们没有符号变化。这告诉我们:

  1. 对 P1 来说,因为所有的重数都是奇数,所以每当它碰到 x 轴,它就会改变符号。
  2. 然而,对 P2 来说,当它达到 3 时,符号没有变化,因为多重数是偶数。

你可以在下面的动作中看到这一点,每次 P1 接触 x 轴时,它从负变为正,反之亦然。

然而,当 x=1 时,P2 确实从负变为正,但是当 x=3 时,它反弹并保持正。

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

来源:在 desmos 上绘制

7.Matlab 中多项式的编码

是我们开始编码的时候了,系好安全带,让我们试一试…
github 上的源代码。
如果取以下多项式:

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

现在,如果我们将下面的 x 值代入上述等式,我们将得到下面的 y 结果。

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

你现在可以启动 Matlab,创建你的 x 和 y 向量如下。然后运行 polyfit 命令,在最后一个参数中输入 2,因为我们使用的是二次函数。

x=[0,1,2]
y=[5,3,3]
polyfit(x,y,2)

运行以上,你应该得到一个如下的系数。很好,从我们的数据中,polyfit 找到了正确的多项式系数。

ans =1.0000 -3.0000 5.0000

这是一个很好的基本例子,但是让我们来尝试一些更复杂的例子。

7.1 生成样本数据

在这个例子中,我们没有数据集,但没关系,我们可以让 Matlab 生成一些样本数据来拟合我们的二次方程。首先,让我们定义我们的二次函数如下,称之为 f

clc;
clear;
close all;% declare our quadratic polynomial
f = @(x) 2*x.² — 4*x + 5;

现在,让我们使用 unifrnd 函数生成一些样本 x 值。我们用 + 1.5randn(size(x))给 y 值添加一些变化。*毕竟,我们不希望数据太完美;-)

% Create x by getting random uniform values between -1 and 5
x = unifrnd(-1, 5, [100,1]);% Calculate y by running the polynomial but add some variations
y = f(x) + 1.5 * randn(size(x));

绘制数据点,这样我们就可以可视化数据

% plot the data points
figure;
plot(x,y,’rx’);

执行后,您将看到我们已经生成了一个很好的数据集来补充我们的二次函数。

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

来源:来自 matlab 的屏幕截图

7.2 找到我们的最佳系数

现在我们有了数据,让我们对二次曲线进行拟合,找出最佳系数。我们选择二次曲线,因为我们可以看到在 x 轴上大约“1”处的数据中有一圈,因此形状符合二次曲线。

% find the best coeffeciant
[p,S] = polyfit(x,y,2);

我们现在有了 p 的最佳系数,可以用 polyval 为我们的系数画一条线了。

xx = linspace(-1, 5, 100);       % generate even spaced xx
[yy, delta] = polyval(p,xx,S);   % Now get the y for xx
hold on;
plot(xx,yy);

执行后,您的系数应该被绘制出来

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

来源:来自 matlab 的屏幕截图

7.3 绘制我们的支撑线/阻力线

一个很好的小特性是,我们可以使用从 polyval 返回的 delta 来绘制多项式的支撑线和阻力线。这些图给了我们 90%的信心,数据将落在这些范围内。

% Lets use our delta to plot our support and resistance lines
plot(xx, yy + 2*delta, ‘b:’);
plot(xx, yy — 2*delta, ‘b:’);

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

来源:截图来自 Matlab

8 结论

阅读完本文后,您应该能够:

  • 解释什么是多项式
  • 因式分解多项式
  • 计算零点
  • 理解多项式的多重性

最后,我们在 Matlab 中构建了一个很好的示例,创建了具有二次多项式形状的数据。这就给出了你的假设,基于 X 值来预测 Y。

R 平方、调整 R 平方和伪 R 平方完全指南

原文:https://towardsdatascience.com/the-complete-guide-to-r-squared-adjusted-r-squared-and-pseudo-r-squared-4136650fc06c?source=collection_archive---------5-----------------------

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

线性模型和均值模型(图片由作者

了解如何使用这些方法来评估线性和某些非线性回归模型的拟合优度

回归分析中最常用也是最常被误用的之一是 R(读作 R 平方)。它有时被称为它的长名字:决定系数,它经常与相关系数 r 混淆。看,它已经变得令人困惑了!

R 的技术定义是,它是响应变量 y 中方差的比例,您的回归模型能够通过回归变量的引入来“解释”。

显然,这并不能消除误会。

因此,我们呼吁熟悉的视觉线性回归线叠加在云的 (y,x) 点:

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

线性模型和均值模型(图片由作者)(数据集:台湾新北市房价)

平坦的水平橙色线代表平均模型。均值模型是可以为数据构建的最简单的模型。对于每个 x 值,均值模型预测相同的 y 值,该值就是你的 y 向量的均值。在这种情况下,它恰好是 38.81 x 10000 新台币/坪,其中一坪是 3.3 米。

在解释 y 的方差方面,我们可以比均值模型做得更好。为此,我们需要添加一个或多个回归变量。我们将从这样一个变量开始——房子的年龄。图中红线表示线性回归模型拟合到*(yX)数据集时的预测,其中y*=房价,X=房龄。如您所见,单变量线性模型比均值模型更适合。

R 让您量化与均值模型相比,线性模型拟合数据的程度。

让我们放大上图的一部分:

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

均值模型的预测误差(图片由作者提供)

上图中, (y_i — y_mean) 是均值模型在预测 y_i 时产生的误差。如果对y的每个值计算这个误差,然后计算每个误差的平方和,就会得到一个与y中的方差成正比的量。它被称为 TSS 平方的总和。****

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

总平方和(TSS)(图片由作者提供)

平方和的总和与数据的方差成正比。这是均值模型无法解释的方差。

因为 TSS/Ny 中的实际方差,所以 TSS 与数据中的总方差成比例。

作为平方和,任何数据集的 TSS 总是非负的。

均值模型是一个非常简单的模型。它只包含一个参数,即因变量 y 的平均值,表示如下:

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

平均模型(图片由作者

均值模型有时也被称为零模型或仅截距模型。但是这种定义的可互换性仅在零模型或仅截距模型被拟合时才是适当的,即在数据集上被训练。只有这样截距才会成为y的无条件均值。

如前所述,如果你想比均值模型更好地解释 y 中的方差,你需要添加一个或多个回归变量。让我们仔细看看添加回归变量房屋年龄如何帮助线性模型减少预测误差:

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

线性模型的预测误差(图片由作者)

上图中, (y_i — y_pred_i) 是线性回归模型预测 y_i 的误差。这个量被称为残差或简称为残差

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

残差(图片由作者提供)

在上图中,残差明显小于均值模型的预测误差。这种改进是不保证的。在次优或构造不良的线性模型中,残差可能大于平均模型的预测误差。

如果你为每个 y 的值计算这个残差,然后计算每个这样的残差的平方和,你会得到一个与线性模型的预测误差成正比的量。它被称为 RSS 平方和的残差。

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

残差平方和(RSS)(图片由作者提供)

残差平方和捕捉自定义回归模型的预测误差。

作为平方和,回归模型的 RSS 总是非负的。

因此,(残差平方和)/(总平方和)*【y】***中总方差的分数,这是您的回归模型无法解释的。

相反地:

1 —(残差平方和)/(总平方和)是你的回归模型能够解释的中方差的分数。**

我们现在将根据 RSS 和 TSS 来陈述 R 的公式如下:

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

R 平方公式(图片由作者提供)

下面是生成上述图形的 Python 代码:

这里是数据集的链接。

R 的范围

对于使用普通最小二乘(OLS)估计技术拟合(即训练)的线性回归模型,R 的范围是 0 到 1。考虑以下情节:

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

总误差和残差(图片由作者

*从上图可以看出,残差 (y_i — y_pred_i) 小于总误差 *(y_i — y_mean)。可以证明,如果使用 OLS 技术,即通过最小化残差平方和(RSS)将线性回归模型拟合到上述数据,最差的结果是均值模型。但是均值模型的残差平方和就是 TSS,即对于均值模型,RSS = TSS。

因此对于 OLS 线性回归模型, RSS ≤ TSS

由于 R =1 — RSS/TSS ,在完全拟合的情况下,RSS=0,R =1。最差情况下,RSS=TSS,R = 0。

对于普通的最小二乘线性回归模型,R 的范围是从 0 到 1

R 对非线性回归模型的适用性

许多非线性回归模型不使用普通的最小二乘估计技术来拟合模型。这种非线性模型的例子包括:

  • 用于在范围(-∞,∞)内连续变化的y 的指数、伽玛和逆高斯回归模型。**
  • 二元选择模型,如 Logit(又名逻辑)和 Probit 及其变体,如用于 y = 0 或 1 的有序 Probit,以及二项式回归模型的一般类别。
  • 离散非负的【ϵ[0,1,2,…, ∞】的泊松、广义泊松和负二项回归模型。即基于计数的数据集模型。**

这些非线性模型的模型拟合过程不是基于逐步最小化残差平方和(RSS ),因此最佳拟合模型可能具有大于总平方和的残差平方和。这意味着,这种模型的 R 可以是一个负数。因此,对于大多数非线性模型,R 不是有用的拟合优度度量。

对于大多数非线性回归模型,r 平方不是有用的拟合优度度量。

一个显著的例外是使用非线性最小二乘** ( NLS )估计技术拟合的回归模型。NLS 估计量寻求最小化残差的平方和,从而使 R 适用于 NLS 回归模型。**

在本文的后面,我们将研究非线性回归模型的 R 平方的一些替代方法。

线性模型 R 平方的替代公式

我们再来看下图:

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

解释错误(ESS)(图片由作者提供)

在上图中, (y_pred_i — y_mean) 是我们通过向模型中添加回归变量 HOUSE_AGE_YEARS 而实现的预测误差减少。

如果你计算每一个 y 值的差值,然后计算每一个差值的平方和,你将得到一个与y 中的方差成比例的量,这是线性回归模型能够解释的。它被称为 ESS 平方的解释和。**

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

解释平方和(ESS)(图片由作者提供)

解释的平方和与您的回归模型能够解释的数据方差成比例。****

让我们做一些数学。

从上面的情节可以看出:

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

OLSR 模型的 R 平方替代公式的推导(图片由作者提供)

可以看出当使用最小二乘估计技术拟合线性回归模型时,项2 (y _ I—y _ pred)(y _ pred—y _ mean)为 0。**

所以对于 OLS 回归模型的特例:

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

适用于 OLSR 模特的身份(图片由作者)

换句话说:

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

OLSR 模型的 R 平方的替代公式(图片由作者提供)

例子

我们用来说明这些概念的线性回归模型已经适用于新北市房地产数据集的策划版本。让我们看看如何建立这个线性模型,并找到它的 R 值。

我们将从导入所有需要的库开始:

****import** pandas **as** pd
**from** matplotlib **import** pyplot **as** plt
**from** statsmodels.regression.linear_model **import** OLS **as** OLS
**import** statsmodels.api **as** sm**

接下来,让我们使用 Pandas 读入数据文件。您可以从这里下载数据集

**df = pd.read_csv(**'taiwan_real_estate_valuation_curated.csv'**, header=0)**

打印前 10 行:

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

新北市房地产数据前 10 行 se t(图片由作者

我们的因变量 y房价单位面积我们的解释变量又称为回归变量 X房屋年龄年限**。**

我们将雕刻出 yX 矩阵:

**y = df[**'HOUSE_PRICE_PER_UNIT_AREA'**]
X = df[**'HOUSE_AGE_YEARS'**]**

由于房龄为零的房屋,即新的房屋也将有一些非零价格,我们需要添加一个 y 截距。这就是直线方程中的’β0’:y _ pred=β1X+β0*

*X = sm.**add_constant**(X)*

接下来,我们构建并拟合 OLS 回归模型,并打印培训摘要:

*olsr_model = **OLS**(**endog**=y, **exog**=X)
olsr_results = olsr_model.**fit**()

print(olsr_results.**summary**())*

下面是我们得到的输出:

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

OLSR 模型的输出(图片由作者提供)

我们看到 R 是 0.238。r 不是很大,表明房价单位面积房龄年限之间的线性关系很弱。

拟合模型的方程如下:

HOUSE _ PRICE _ PER _ UNIT _ AREA _ pred =-1.0950 * HOUSE _ AGE _ YEARS+50.6617。

房子的年龄和它的价格之间有一种微弱的负相关。而零楼龄的房子,预计单位面积的均价为 50.6617 x 10000 新台币/坪。

如何增加 R 平方

某种程度上,这就像在问如何变得富有或者如何减肥?俗话说,小心你的要求,因为你可能会得到它!

在 OLS 线性回归模型中增加 R 的简单方法是加入更多的回归变量,但这也会导致模型过度拟合。

要了解为什么向 OLS 回归模型添加回归变量不会降低 R,请考虑使用 OLS 技术拟合的两个线性模型:

y _ pred=β1*X1+β0

y _ pred=X2+β1X1****+β0**

OLS 估计技术使残差平方和(RSS)最小化。如果第二个模型没有比第一个模型提高 R 的值,OLS 估计技术将把【β2】设置为零或某个统计上不重要的值,这将使我们回到第一个模型。一般来说,每次您添加一个新的回归变量并使用 OLS 重新调整模型,您将获得一个具有更好 R 的模型,或者与更受约束的模型具有基本相同的 R。

OLS 的这种属性估计会对你不利。如果您继续添加越来越多的变量,模型将变得越来越不受约束,过度适应训练数据集的风险也将相应增加。

另一方面,添加正确选择的变量将增加模型的拟合优度,而不会增加过度拟合训练数据的风险。

我们增加 R 的愿望和最小化过度拟合的需要之间的斗争导致了另一种拟合优度度量的产生,称为调整的 R .

调整-R

Adjusted-R 背后的概念很简单。为了得到调整后的-R,我们每增加一个新的回归变量就要罚 R。

具体来说,我们通过与回归变量的数量成正比的因子来缩放(1-R)。模型中回归变量的数量越多,比例因子就越大,R 的向下调整也越大。

调整后 R 的公式为:

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

调整后的 R 公式(图片由作者提供)

df_mean_model 是均值模型的自由度。对于大小为 N 的训练数据集, df_mean_model=(N-1)

df_model 是回归模型的自由度。对于有 p 个回归变量的模型, df_model=(N-1-p)

替换为:

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

调整后的 R 公式(图片由作者提供)

可以看到,随着模型获得更多的变量, p 增加,并且因子 (N-1)/(N-1-p) 增加,这具有抑制 R 的效果。

调整-R 的缺点

Adjusted-R 存在一些问题,特别是:

  1. 它平等地对待所有回归变量的影响。实际上,在使模型适合(或过度适合)训练数据的能力方面,一些变量比其他变量更有影响力。
  2. 当 R 低于 p/(N-1)时,调整后的 R 的公式产生负值,从而将调整后的 R 的使用限制为仅高于 p/(N-1)的 R 值。

使用 Adjusted-R 比较两个线性模型的拟合优度

我们将使用我们的示例数据集来说明使用 Adjusted-R 的过程。为此,让我们引入另一个回归变量NUM _ conveniency _ STORES _ IN _ AREA,并根据数据集重新调整我们的 OLS 回归模型:

****y = df[**'HOUSE_PRICE_PER_UNIT_AREA'**]
X = df[[**'HOUSE_AGE_YEARS'**, **'NUM_CONVENIENCE_STORES_IN_AREA'**]]
X = sm.**add_constant**(X)olsr_model = **OLS**(endog=y, exog=X)
olsr_results = olsr_model.**fit**()****

让我们打印模型培训总结:

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

具有两个回归变量的 OLSR 模型的输出(图片由作者提供)

请注意,具有两个回归变量的模型的 R 和调整后 R 是具有一个变量的模型的两倍多:

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

一元和二元 OLSR 模型的 R 和调整后 R 的比较(图片由作者

总的来说,新回归变量的加入提高了拟合优度。回归参数系数的 p 值进一步支持了这一结论。我们从回归输出中看到,2 变量 OLSR 模型中所有三个系数的 p 值基本为零,表明所有参数都具有统计显著性:

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

具有两个回归变量的 OLSR 模型的参数(图片由作者

拟合的双变量模型的方程如下:

HOUSE _ PRICE _ PER _ UNIT _ AREA _ pred =-0.7709 * HOUSE _ AGE _ YEARS+2.6287 * NUM _ 便利店 _IN_AREA + 36.9925

非线性回归模型中的 r

非线性模型通常使用模型拟合技术,如最大似然估计(MLE) ,这些技术不一定会使残差平方和(RSS)最小化。因此,给定两个使用 MLE 拟合的非线性模型,拟合优度较大的模型可能具有较低的 R 或调整后的 R。这一事实的另一个结果是,向非线性模型添加回归变量会降低 R。总体而言,R 或调整后的 R 不应用于判断非线性回归模型的拟合优度。

对于非线性模型,已经提出了一系列的替代方案。我们将研究一个这样的替代方案,它基于我们已经非常熟悉的以下等式:

总平方和(TSS) =残差平方和(RSS) +解释平方和(ESS)。

虽然这个恒等式适用于 OLS 线性回归模型,也称为线性模型,但对于非线性回归模型,事实证明,类似的三角形恒等式使用偏差的概念起作用。我们稍后会解释偏差的概念,但现在,让我们来看看非线性回归模型的这种同一性:**

仅截距模型的偏差=拟合的非线性模型的偏差+由拟合的非线性模型解释的偏差。

符号方面:

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

非线性回归模型的偏差单位(图片由作者提供)

其中:

D(yy _ mean)=仅截取模型的偏差

D(yy _ pred)=拟合的非线性模型的偏差

D(y _ predy _ mean)=拟合非线性模型解释的偏差

使用上述恒等式,Cameron 和 Windmeijer 描述了(参见文章末尾的论文链接)以下基于偏差的 R 公式,该公式适用于非线性模型,尤其适用于拟合离散数据的广义线性回归模型(称为 GLMs)。这种非线性模型的常见例子是泊松和广义泊松模型、负二项式回归模型和逻辑回归模型:

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

用于离散数据的非线性模型的 Pseu-R(图片由作者提供)

在我们继续之前,有些术语需要解释一下。

异常

回归模型的偏差通过拟合回归模型的对数似然(更多关于对数似然)比饱和模型的对数似然大多少来衡量。具体来说,****

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

拟合回归模型的偏差(图片由作者提供)

所以这回避了两个问题:什么是饱和模型和什么是可能性****

饱和模型

饱和回归模型是回归变量的数量等于样本数据集中唯一 y 值的数量的模型。饱和模型给你的本质上是 N 个变量的 N 个方程,我们从大学代数中知道,N 个变量的 N 个方程的系统产生每个变量的精确解。因此,可以构建饱和模型来完美地拟合每个 y 值。因此,饱和模型最大可能地符合您的训练数据集。

可能性

现在让我们来解决可能性。拟合回归模型的似然性是使用拟合模型的预测作为概率分布函数的平均参数,联合观察训练数据集中所有 y 值的概率(或概率密度)。计算可能性的过程如下:****

  • 假设你的训练数据集包含 100 个 y 观察值。你要计算的是用你拟合的回归模型观察到 y1y2y3 和……直到 y100联合概率。****
  • 因此,您首先要根据这些训练数据拟合您的回归模型。
  • 接下来,通过拟合的模型输入训练集中的 100 行,以从该模型获得 100 个预测。这 100 个 y_pred_i 值就是您的 100 个条件平均值(具有平均值的取决于您的 X 矩阵中相应的具有行的)。**
  • 现在,您在的概率(密度)函数中设置 100 个观察到的 y 值和 100 个条件均值(预测值)以获得 100 个概率值。 y 中每个 y_i 一个概率。
  • 最后,你把这 100 个概率相乘得到可能性值。这是在给定拟合模型的情况下观察训练数据集的可能性。

为了对计算有个感觉,我建议你参考下面的文章。它包含泊松模型似然性的示例计算:

******

对数似然就是拟合模型似然的自然对数。

有了这些概念,让我们回到伪 R 的基于偏差的公式:

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

用于离散数据的非线性模型的 Pseu-R(图片由作者提供)

如前所述:

D(yy _ pred)=拟合的非线性模型的偏差

D(yy _ mean)=仅截距模型的偏差(又名空模型)。零模型仅包含截距,即没有回归变量。

使用我们的异常公式:

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

拟合回归模型的偏差(图片由作者提供)

而且,

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

零模型的偏差(图片由作者提供)

因此:

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

用于离散数据的非线性模型的 Pseu-R(图片由作者提供)

有时会使用麦克法登提出的以下更简单版本的伪 R (详情见下文论文链接):

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

麦克法登的伪 R(图片由作者

麦克法登的伪 R 由 Python statsmodels 库实现,用于离散数据模型,如泊松或负经济或逻辑(Logit)回归模型。如果你调用[DiscreteResults.prsquared()](https://www.statsmodels.org/stable/generated/statsmodels.discrete.discrete_model.DiscreteResults.prsquared.html?highlight=prsquared#statsmodels.discrete.discrete_model.DiscreteResults.prsquared),你将得到你拟合的非线性回归模型上麦克法登的 R 平方值。

有关如何在基于离散(计数)的数据集上拟合此类非线性模型,请参见我的泊松和负双项回归模型教程:

另请查看:

参考文献、引文和版权

数据集

叶以智、徐东光(2018)。通过案例推理用比较法建立房地产估价模型。应用软件计算,65,260–271。

纸质和图书链接

Cameron A. Colin,Trivedi Pravin K ., 计数数据回归分析 ,计量经济学学会专论№30,剑桥大学出版社,1998 年。国际标准书号:0521635675

McCullagh P .,Nelder John A ., 广义线性模型 ,第二版。,CRC 出版社,1989,ISBN 0412317605,9780412317606

d .麦克法登(1974), 定性选择行为的条件逻辑分析 ,载于:p .扎伦布卡(编。),计量经济学前沿,学术出版社,纽约,105–142 页。 PDF 下载链接

卡梅伦和弗兰克温德梅杰。(1996).应用于医疗保健利用的计数数据回归模型的 R 平方测量。商业杂志&经济统计, 14 (2),209–220。doi:10.2307/1392433PDF 下载链接

A.Colin Cameron,Frank A.G. Windmeijer,https://www.sciencedirect.com/science/article/pii/S0304407696018180一些常见非线性回归模型拟合优度的 R 平方度量,计量经济学杂志,第 77 卷,1997 年第 2 期,第 329-342 页,ISSN 0304-4076,
https://doi . org/10.1016/s 0304-4076(96)01818-0PDF 下载链接

名词(noun 的缩写)J. D. Nagelkerke, 关于决定系数 一般定义的注记,《生物计量学》,第 78 卷,第 3 期,1991 年 9 月,第 691-692 页,【https://doi.org/10.1093/biomet/78.3.691】T4。 PDF 下载链接

形象

本文中的所有图片版权归 Sachin Date 所有,版权归 CC-BY-NC-SA 所有,除非图片下面提到了不同的来源和版权。

相关文章

*

感谢阅读!如果你喜欢这篇文章,请 关注我 获取关于回归和时间序列分析的技巧、操作和编程建议。*******

简单技术交流的复杂艺术

原文:https://towardsdatascience.com/the-complex-art-of-simple-technical-communication-4f19952d330a?source=collection_archive---------26-----------------------

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

杰斯·贝利在 Unsplash 上的照片

作为一名编辑如何让我成为一名更好的数据科学家

我最初被数据科学吸引是因为它在解决大量复杂问题方面具有不可思议的潜力,我认为今天许多从事数据科学家工作的人也是如此。对于几乎任何问题,都可以收集一个数据集,通过它可以收集洞察力并开发解决方案。因此,非常恰当的是,数据科学家是一个非常多样化的群体,他们最大的特点可能是永不满足的好奇心和解决问题的热情——我认为这是该领域最大的优势。

然而,尽管我的同龄人多种多样,但当我在做了一段时间全职妈妈后重新进入就业市场时,我想知道我最近的经历是否会让我成为数据科学职位申请者中的害群之马。具体来说,在离开上一份全职数据科学家的工作后,我花了大约两年时间做技术编辑。我假设招聘经理认为这种经历很奇怪——如果脱离上下文来看,这很奇怪——但它也极大地影响了我对复杂信息的呈现方式的思考,正因为如此,它使我成为了一名更强大的数据科学家。

在本文中,我将讨论数据科学中交流的重要性,以及用编辑的眼光查看技术信息的好处。

通信在数据科学中的重要性

在许多公司中,数据科学家跨越了业务领域和技术领域之间的鸿沟。从这个角度来看,数据科学家类似于一个解释者,他与客户和利益相关者一起定义业务问题,然后将这些问题转化为技术程序或研究,可以遵循这些程序或研究来获得洞察力。通常,在实施解决方案之前,必须将这些见解重新翻译成可交付的语言和技术可行性。

由于数据驱动项目的迭代和多学科方面,有许多地方可能会发生误解。

可以想象,随着项目的发展*,这个定义、翻译和再翻译的过程会重复到令人作呕。*此外,由于数据驱动项目的迭代和多学科方面,有许多地方可能会发生误解。因此,沟通是项目流程和成功的关键。更具体地说,如果数据科学家不能从利益相关者提供的信息中提取特定的业务问题,那么他或她可能会浪费大量的时间和资源探索似是而非的途径。此外,如果数据科学家无法清晰、令人信服地展示从分析中得出的见解,那么利益相关者可能不会支持实施提议的解决方案。

尽管数据科学家在商业和技术之间发挥着核心作用,但许多职位描述都强调熟悉数十种平台和方法的重要性,而只为书面和口头交流等所谓的软技能保留一两个要点。我认为这种不均衡是不公平的,原因有两个:(1)如上所述,它没有准确地描述沟通在数据科学角色中的重要性;(2)它意味着,虽然技术技能来之不易,并且是基本的,但沟通技能很容易获得,并且不太重要。

软技能很难学

我是一个害羞的孩子,所以当我决定本科学习化学工程时,我在工程师是出了名的不善于沟通的刻板印象中找到了安慰。我认为,如果工程师被认为不善于沟通,那么通过成为一名工程师,我可以安全地保持在害羞的外壳中。然而,在完成学士学位后,我决定攻读(非常多学科的)分析硕士学位,我很快意识到,我必须放弃我的外壳的温暖和熟悉,才能沿着这条新的职业道路茁壮成长。在我的第一个学期开始之前,在为期一周的训练营中,我和我的同事们在回顾该计划的背景材料时,强调了沟通和合作在分析中的重要性。

我对技术技能比沟通技能更重要、更难掌握的暗示感到失望。

忠实于其多学科的重点,该计划主办了定期课程中没有涉及的主题的网络活动和研讨会。一个这样的研讨会——一个为期六周的公众演讲课程——是我在研究生期间上的最难的课。每次我不得不发言时,我都非常紧张,当我想起我关于我对小猫的爱的即兴独白时,我仍然会因尴尬而退缩。(我不知道为什么我选择谈论小猫;那时我甚至没有一只小猫。)尽管如此,我并不后悔我的参与,因为尽管我对公开演讲的恐惧并没有完全减轻,但我现在在众人面前演讲比我想象的要舒服得多。

因此,鉴于我最初与沟通的斗争,当我看到工作描述列出了几种机器学习方法的名称,而忽略了提及沟通时,我对技术技能比沟通技能更重要、更难掌握的暗示感到失望。具体来说,作为一个最初出于对人际交往的恐惧而选择技术舒适的人,我知道,虽然我可以很快学会一种不熟悉的方法论背后的理论,但如果我不花费更多的努力来学习软技能,我就不可能获得类似的舒适。

编辑眼光的好处

当我和丈夫从克利夫兰搬到费城,以便他能在我们的家乡从事法律工作时,我选择了自由职业,而不是找一份全职的数据科学工作。我最初的计划是寻找分析项目,但没过多久,我就陷入了编辑研究手稿的持续工作中。令我惊讶的是,我如此喜欢编辑,以至于在两年的大部分时间里,这成了我唯一的收入来源。

想一想,不同背景或技能的人对信息(无论是口头交流还是视觉交流)的理解会有什么不同。

技术编辑以两种方式满足了我的好奇心:(1)我每周可以阅读 20 多篇来自计算、工程和数学等领域的研究论文,(2)我有足够的空闲时间探索长期被忽视的兴趣,如心理学。此外,我对语言学和交流产生了热情:我编辑的许多论文都是非英语母语者写的,看到讲不同母语的人如何以不同的方式利用英语令人着迷;最终,我可以通过单词的节奏来区分中国报纸和巴西报纸。然而,最重要的是,在编辑一篇论文时,我不得不解释作者的意图,并把文章塑造成一种形式,在保持这种意义的同时提高简洁和清晰。

对我来说,编辑过程突出了文字表达思想的无数方式,以及轻微的歧义掩盖句子意义的巨大力量。因此,虽然我不一定建议每个从事数据科学家工作的人都花时间从事自由编辑,但我确实相信,所有数据科学家都可以从我作为编辑学到的同理心课程中受益:为了向不同的受众传达复杂的想法,思考信息——无论是口头还是视觉传达——如何被不同背景或技能的人不同地理解。

结论

最终,我厌倦了剪辑。到了两年的时候,破译作者意图所需的大部分工作变成了第二天性,编辑过程变得重复。因此,在编辑了近 2000 份手稿(并指导我的儿子度过婴儿期)后,我离开了编辑的岗位,去咨询数据科学项目。我已经有大约两年没有关注数据科学了;然而,在从事我的第一个项目时,我意识到我比以前的角色更自信了:我更善于倾听客户的意见,界定业务问题,并将这些问题转化为可操作的计划,我能够对我的方法和工作结果提供更强有力的书面和口头解释——所有这些都归功于我通过编辑获得的沟通赞赏。

所以总的来说,我走向数据科学的道路可能有点奇怪,但我更愿意认为它是多样化的,这是它最大的优势。

神经网络的组成部分

原文:https://towardsdatascience.com/the-components-of-a-neural-network-af6244493b5b?source=collection_archive---------16-----------------------

对构建最常用的深度学习方法之一的关键部分的总结

本文是我正在撰写的关于机器学习关键理论概念的系列文章的延续。除了对 ML 的介绍,我还写了关于分类和回归的文章,可以在我的 页面 访问。

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

马库斯·斯皮斯克在 Unsplash 上拍摄的照片

介绍

神经网络是深度学习的典范,深度学习是机器学习的一部分,其特点是使用大量交织的计算。单个计算本身相对简单,但正是连接的复杂性赋予了它们高级的分析能力。

神经元

神经网络的构建模块是单个神经元。下图显示了具有一个输入的中子的结构。

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

作者图片

神经元的输入是 x,它有一个与之相关的权重 w。权重是固有参数,是模型为了更好地拟合输出而控制的参数。当我们将一个输入传递给一个神经元时,我们将它乘以它的权重,得到 x * w。

输入的第二个元素称为偏置。因为节点的值是 1,所以偏差仅由值 b 决定。偏差给我们的模型增加了不可预测性的因素,这有助于它一般化,并使我们的模型在使用测试数据时能够灵活地适应不同的未知输入。

偏差和输入的组合产生了我们的输出 y,给出了公式 w*x + b = y。这应该看起来很熟悉,因为它是对直线方程 y = mx + c 的修改。神经网络由数十、数百甚至数千个相互连接的神经元组成,每个神经元都运行自己的回归。本质上是类固醇的退化。

多端输入

自然,我们将无法使用如上图那样简单的回归来分析我们在现实世界中遇到的大多数数据集。我们将会看到更多的输入被组合起来估计输出。这是以与具有一个输入的神经元相似的方式实现的。

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

作者图片

上述等式的公式将读作 x0 * w0 + x1 * w1 + x2 * w2 + b = y。

神经网络将神经元组织成。其中每个神经元都与其下一层中的所有其他神经元相连的层被称为密集层。

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

作者图片

通过这种不断增加的复杂性,神经网络能够以各种复杂的方式转换数据并推断关系。随着我们向网络中添加更多的层和节点,这种复杂性也在增加。

激活功能

目前,我们的模型仅适用于预测数据中的线性关系。在上图中,与一系列回归相比,运行这个神经网络没有任何好处。

神经网络以两种方式提供了解决方案。第一个是在输入和输出之间增加更多层的能力,称为隐藏层。这些隐藏层中的每一层都将具有预定数量的节点,并且这种增加的复杂性开始将神经网络与其回归对应物分开。

神经网络增加复杂性的第二种方式是通过在每个不是输入或输出的节点引入一个激活 功能。如果你对这个术语不熟悉,我肯定会查看我以前写的关于线性分类的文章,这篇文章更深入地研究了激活函数,但是总结一下,激活函数是一个使用非线性方法转换输入数据的函数。Sigmoid 和 ReLu 是最常用的激活函数。

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

作者图片

这两个模型都是非线性的这一事实意味着我们为我们的模型添加了另一个适应性元素,因为它现在可以预测没有线性决策边界或近似非线性函数的类。用最简单的话来说,没有激活函数,神经网络只能学习线性关系。如果不引入激活函数,像 x 曲线这样简单的对象的拟合将是不可能的。

因此,隐藏层中神经元的作用是获取输入及其权重的乘积之和,并将该值传递给激活函数。这将是作为输入传递给下一个神经元的值,无论它是另一个隐藏神经元还是输出。

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

作者图片

优化重量

当神经网络初始化时,其权重是随机分配的。神经网络的强大之处在于它可以通过调整这些权重来控制大量的数据。网络迭代地调整权重并测量性能,继续这个过程,直到预测足够准确或达到另一个停止标准。

我们预测的准确性由一个损失T2 函数决定。也称为成本函数,该函数将模型输出与实际输出进行比较,并确定我们的模型在估计数据集时有多差。本质上,我们为模型提供了一个旨在最小化的函数,它通过增量调整权重来实现这一点。

损失函数的常见度量是均值 绝对值 误差平均误差。这测量了估计值和它们的实际值之间的绝对垂直差的总和。

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

作者图片

寻找最佳权重集的工作由优化器完成。在神经网络中,使用的优化方法是随机梯度下降下降

每个时间周期或时期,随机梯度下降算法将重复某一组步骤,以便找到最佳权重。

  1. 从权重的初始值开始
  2. 不断更新我们知道会降低成本函数的权重
  3. 当我们达到数据集的最小误差时停止

梯度下降需要一个可微分的算法,因为当我们找到最小值时,我们通过计算我们当前位置的梯度,然后决定向哪个方向移动以达到我们的梯度 0。我们知道误差函数的梯度等于 0 的点是曲线上的最小点,如下图所示。

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

作者图片

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

作者图片

我们迭代的算法,即梯度下降算法的步骤 2,采用我们当前的权重,并从中减去微分成本函数乘以所谓的学习率,学习率的大小决定了我们收敛或偏离最小值的速度。在我关于线性回归的文章中,我对梯度下降的过程有更详细的解释。

过度和不足

过度拟合欠拟合是机器学习的两个最重要的概念,因为它们可以帮助你了解你的 ML 算法是否能够达到其真正的目的,被释放到世界上并遇到新的未知数据。

数学上,过度拟合被定义为训练数据的准确性大于测试数据的准确性的情况。不适应通常被定义为在训练和测试方面表现不佳。

那么这两个实际上告诉我们关于我们的模型什么呢?嗯,在过度拟合的情况下,我们基本上可以推断出我们的模型不能很好地概括看不见的数据。它获取了训练数据,而不是找到我们正在寻找的这些复杂、精密的关系,它建立了一个基于观察到的行为的严格框架,将训练数据视为真理。这个模型没有任何预测能力,因为它过于依赖提供给它的初始数据,而不是试图概括和适应略有不同的数据集。

在拟合不足的情况下,我们发现了相反的情况,我们的模型根本没有将自己附加到数据上。与之前类似,该模型无法找到强关系,但在这种情况下,它生成了松散的规则来提供数据的粗略估计,而不是任何具体的东西。因此,欠拟合模型在训练数据上的表现也会很差,因为它缺乏对变量之间关系的理解。

避免欠拟合通常比它的对应物更直接,因为一般认为欠拟合模型不够复杂。我们可以通过向模型中添加层、神经元或特征,或者增加训练时间来避免欠拟合。

一些用于避免过度适应的方法与避免适应不足正好相反。我们可以移除一些要素,尤其是那些与数据集中已经存在的其他要素相关的要素,或者那些与我们的输出几乎没有相关性的要素。更早地停止模型还可以确保我们获得更通用的模型,而不是让它过度分析我们的数据。

在某些情况下,过度拟合可能是由于模型过度依赖于某一组权重或我们神经网络中的路径而发生的。在训练期间,该模型可能已经发现,我们的神经网络的一部分中的某一组权重提供了与输出的非常强的相关性,但是这与其说是实际关系的发现,不如说是巧合。如果出现这种情况,那么当提供测试数据时,模型将无法提供相同级别的准确性。

我们这里的解决方案是引入辍学的概念。辍学背后的概念是,在我们培训过程的每一步,从本质上排除网络的一部分。这将帮助我们在整个网络中生成更均匀的权重,并确保我们的模型不会过于依赖任何一个子部分。

这就是你对神经网络组成部分的总结。我希望在以后的文章中更详细地介绍更多的概念,所以请密切关注这些概念!接下来是评估模型。如果你对我以前的文章感兴趣,也可以关注我的页面。在那之前,✌️.

神经网络中人工神经元(感知器)的概念

原文:https://towardsdatascience.com/the-concept-of-artificial-neurons-perceptrons-in-neural-networks-fab22249cbfc?source=collection_archive---------1-----------------------

神经网络和深度学习课程:第一部分

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

来自 PixabayClker-Free-Vector-Images 的图片(左图)和作者用 draw.io 制作的图片(右图)

今天,我们正式开始我们的 神经网络和深度学习课程 正如这里介绍的。我们将从对神经网络中人工神经元(感知器)概念的扎实介绍开始。

人工神经元 (也叫 感知器单元节点 )是神经网络中最简单的元素或积木。它们的灵感来自于人类大脑中的生物神经元。

在本文中,我们将讨论感知器是如何受到生物神经元的启发,绘制感知器的结构,讨论感知器内部的两个数学函数,最后,我们将在感知器内部执行一些计算。

感知机是如何受到生物神经元的启发的?

人工神经元(感知器)如何受到生物神经元的启发,值得探讨。您可以将人工神经元视为受生物神经元启发的数学模型。

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

来自 PixabayClker-Free-Vector-Images的图像(在左边)和作者的图像(在右边),使用 draw.io 制作

  • 一个生物神经元通过树突(小纤维)接收来自其他神经元的输入信号。同样,一个感知器通过输入神经元接收来自其他感知器的数据。
  • 树突与生物神经元的连接点称为突触。同样,输入和感知器之间的连接被称为权重。他们衡量每个输入的重要性水平。
  • 在生物神经元中, 根据树突提供的信号产生输出信号。同样,感知器中的 核心 (蓝色)基于输入值执行一些计算,并产生一个输出。
  • 在一个生物神经元中,输出信号由 轴突 带走。同样,感知器中的轴突是输出值,它将是下一个感知器的输入。

感知器的结构

下图显示了感知器的详细结构。在某些情况下,偏差 bw0 表示。输入值 x0 总是取值 1。所以, b*1 = b

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

感知器的结构(图片由作者提供,用 draw.io 制作)

一个感知器接受输入, x1x2 ,…, xn ,将它们乘以权重, w1w2 ,…, wn ,并添加偏置项, b,,然后计算线性函数, z ,激活函数,f

在画感知器时,为了方便起见,我们通常忽略偏置单元,并将图表简化如下。但是在计算中,我们仍然考虑偏差单位。

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

没有偏差单元的感知器的简化版本(图片由作者提供,使用 draw.io 制作)

感知器内部

感知器通常由两个数学函数组成。

感知器的线性函数

这也被称为感知器的线性组件。用 z 表示。其输出是输入加上偏置单元的加权和,计算公式如下。

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

感知器的线性函数(图片由作者提供,用 draw.io 制作)

  • x1x2 、…、 xn 是取数值的输入。单个神经元可以有几个(有限的)输入。它们可以是原始输入数据或其他感知器的输出。
  • w1w2 、…、 wn权重 取数值,控制每个输入的重要程度。值越高,输入越重要。
  • w1.x1 + w2.x2 + … + wn.xn 称为输入的加权和。
  • b 称为 偏置项偏置单元 也是取数值。它被添加到输入的加权和中。包含偏置项的目的是移动每个感知器的激活函数,以不得到零值。换句话说,如果所有的 x1x2 、…、 xn 输入都为 0,则 z 等于 bias 的值。

在神经网络模型中,权重和偏差被称为 参数 。这些参数的最佳值在神经网络的学习(训练)过程中找到。

你也可以把上面的 z 函数想象成一个线性回归模型,其中权重被称为 系数 ,偏差项被称为 截距 。这只是用来在不同的上下文中标识同一事物的术语。

感知器的非线性(激活)功能

这也被称为感知器的非线性部分。用 f 表示。它应用于 z 上,根据我们使用的激活函数类型得到输出 y

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

(图片由作者提供,用 draw.io 制作)

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

(图片由作者提供,用 draw.io 制作)

功能 f 可以是不同类型的激活功能。

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

激活功能的类型(图片由作者提供,使用 draw.io 制作)

由于有许多不同类型的激活函数,我们将在另一篇文章中详细讨论它们。现在,记住激活函数的目的是向网络引入非线性就足够了。如果没有激活函数,神经网络只能模拟线性关系,而不能模拟数据中存在的非线性关系。在现实世界的数据中,大多数关系是非线性的。因此,如果没有激活功能,神经网络将毫无用处。

“激发一个神经元”是什么意思?

为此,考虑下面的 二进制步骤 激活函数,也称为 阈值激活函数 。我们可以为阈值设置任何值,这里我们指定值为 0。

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

二进制步进激活函数(图片由作者提供,用 draw.io 制作)

我们说,只有当 z 的值超过阈值 0 时,神经元或感知机才会激发(或激活)。换句话说,如果 z 的值超过阈值 0,则神经元输出 1(触发或激活)。否则,它输出 0。

因此,激活函数的类型决定了神经元如何激活或激发,而偏置项 b 控制了激发的难易程度。现在考虑线性函数, z

z =(w1 . x1+w2 . x2+…+wn . xn)+b
z =(输入的加权和)+ bias

假设偏差为-2。这里,我们也考虑二元阶跃激活函数。因此,只有当输入的加权和超过+2 时,神经元才会激活。用数学术语来说,这可以表示如下。

为了激活神经元,根据上面定义的二进制阶跃激活函数,它应该输出 1。它只发生在,

z > 0
(输入加权和)+ bias > 0
(输入加权和)> -bias

在我们的例子中,当偏差为-2 时,

(输入的加权和)> -(-2)
(输入的加权和)> 2

因此,在这种情况下,输入的加权和应该超过+2,以激发或激活神经元。

在感知器内执行计算

让我们在感知内部进行一个简单的计算。假设我们有 3 个输入,值如下。

**x1=2**, **x2=3** and **x3=1**

因为我们有 3 个输入,所以我们也有 3 个权重来控制每个输入的重要程度。假设重量值如下。

**w1=0.5**, **w2=0.2** and **w3=10**

偏差单位也有以下值。

**b=2**

我们来计算一下线性函数, z

z =(0.5 * 2+0.2 * 3+10 * 1)+2
z = 13.6

激活函数将 z (13.6)的输出作为其输入,并根据我们使用的激活函数类型计算输出 y 。现在,我们使用下面定义的激活函数。

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

Sigmoid 激活函数(图片由作者提供,用 draw.io 制作)

y = sigmoid(13.6)
y = 0.999
y ~ 1

整个计算过程可以用下图表示。为了便于理解,我们也在单独的节点中表示偏置项。

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

感知器内部的计算过程(图片由作者提供,用 draw.io 制作)

恭喜你!你已经成功地在感知器中完成了计算。

摘要

感知器是一种数学模型,其中线性函数和非线性激活函数一起工作来计算输出,该输出可以是下一个感知器的输入或者仅仅是最终输出。

我们在感知器中使用激活函数用于以下目的。

  • 它给网络带来了非线性。它使神经网络能够模拟现实世界数据中常见的非线性关系。
  • 激活函数的类型决定了神经元应该如何激发或激活。
  • 它将 z 的输出值保持在一定的范围内。例如,sigmoid 激活功能将 z 的值保持在 0 和 1(包括 0 和 1)的范围内。无论 z 的值是大是小。

事实上,没有激活函数的神经网络只是线性回归模型,只能对数据中的线性关系进行建模。

感知器的参数是权重偏差*。权重控制每个输入的重要程度。偏置项具有以下功能。***

  • 如上所述,它决定了神经元点火或激活的难易程度。
  • 它移动每个感知器的激活函数以不得到零值。有时,零值可能会影响网络的训练过程。

随着感知器数量的增加,神经网络中可能有数千个参数(权重和偏差)。如前所述,这些参数的最佳值在神经网络的学习(训练)过程中找到。因此,参数(权重和偏差)从我们提供的数据中学习它们的最佳值。

本课程第 1 部分到此结束。第 2 部分见。

一如既往,祝大家学习愉快!

通过 订阅我的 邮件列表 ,再也不要错过精彩的故事。我一点击发布按钮,你就会在收件箱里收到每一篇文章。

如果你愿意,你可以 注册成为会员 以获得我写的每一个故事的全部信息,我将收取你一部分会员费。

鲁克山·普拉莫迪塔
2021–12–26

逻辑回归背后的概念

原文:https://towardsdatascience.com/the-concepts-behind-logistic-regression-6316fd7c8031?source=collection_archive---------15-----------------------

Sigmoid 函数、对数损失、优势比、模型系数、指标

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

米凯尔·布隆维斯特摄于佩克斯

逻辑回归

逻辑回归是用于分类的监督机器学习算法之一。在逻辑回归中,因变量是分类变量。

模型的目标是,给定独立变量,类可能是什么?[对于二元分类,0 或 1]

在本文中,我介绍了以下概念。

  • 逻辑回归如何使用 sigmoid 函数来预测类?
  • 哪个成本函数用于确定最佳拟合的 sigmoid 曲线?
  • 什么是赔率,赔率比,对数赔率?
  • 如何解读模型系数?
  • 如何从模型系数中得到优势比?
  • 用于评估模型的指标是什么?
  • 如何利用 ROC 曲线设置阈值?

为什么不是线性回归?

在逻辑回归-二元分类中,我们将输出预测为 0 或 1。

举例:

  1. 糖尿病患者(1)或非糖尿病患者(0)
  2. 垃圾邮件(1)或火腿(0)
  3. 恶性(1)或非恶性(0)

在线性回归中,产量预测将是连续的。所以,如果我们拟合一个线性模型,它不会预测 0 到 1 之间的输出。

因此,我们必须使用 sigmoid 函数将线性模型转换为 S 曲线,这将在 0 和 1 之间转换输入。

Sigmoid 函数

sigmoid 函数用于将输入转换为范围 0 和 1。

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

  1. 如果 z → -∞,则 sigmoid(z) → 0
  2. 如果 z → ∞,则 sigmoid(z) → 1
  3. 如果 z=0,则 sigmoid(z)=0.5

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

Sigmoid 曲线[图片由作者提供]

因此,如果我们将线性模型输入到 sigmoid 函数,它将在范围 0 和 1 之间转换输入

在线性回归中,y 的预测值通过使用下面的等式来计算。

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

在逻辑回归中, **ŷ是 p(y=1|x)。**这意味着 ŷ 提供了对 y=1 的概率的估计,给定一组特定的自变量(x) 如果预测值接近 1,则意味着我们可以更确定该数据点属于第 1 类。
→如果预测值接近 0,意味着我们可以更确定该数据点属于 0 类。

如何确定最佳拟合的 sigmoid 曲线?

价值函数

为什么不用最小二乘法作为代价函数?

在逻辑回归中,实际的 y 值将是 0 或 1。预测的 y 值 ŷ 将在 0 和 1 之间。

在最小二乘法中,误差是通过减去实际 y 值和预测 y 值并将它们平方来计算的

误差=(y- ŷ)

如果我们为错误分类的数据点计算最小二乘,比如说
y=0,而 ŷ 接近 1,误差只会非常小。

即使对于错误分类的数据点,产生的成本也非常少。这是原因之一,最小二乘法没有被用作逻辑回归的成本函数。

成本函数—对数损失(二元交叉熵)

对数损失或二元交叉熵被用作逻辑回归的成本函数

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

让我们检查分类成本函数的一些属性

  1. 如果 y= ŷ ,误差应该为零
  2. 错误分类的误差应该很高
  3. 误差应该大于或等于零。

让我们检查一下这些性质是否适用于对数损失或二元交叉熵函数。

  1. 如果 y=ŷ,误差应该为零。

情况 1: y=0 且 ŷ =0 或接近 0

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

情况二:y=1, ŷ =1 或接近 1。

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

ln1 =0 且 ln0 = -∞时

2.错误分类的误差应该很高

情况 1: y=1 且 ŷ=0 或接近 0

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

情况 2: y=0 且 ŷ=1 或接近 1

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

对于错误分类的数据点,误差往往非常高。

3.误差应该大于或等于零。

误差= -{y ln ŷ + (1-y) ln (1-ŷ)}

→ y 为 0 或 1
→ ŷ始终在 0 和 1 之间
→ ln ŷ为负,ln (1-ŷ)为负
→在包含表达式以使误差为正之前的负号【在线性回归最小二乘法中,我们将平方误差】

因此,误差将总是大于或等于零。

解释模型系数

为了解释模型系数,我们需要知道术语优势,对数优势,优势比。

赔率,对数赔率,赔率比

可能性

赔率被定义为事件发生的概率除以事件不发生的概率。

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

**例子:**掷出一个公平骰子时得到 1 的赔率

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

对数概率(Logit 函数)

对数赔率=ln(p/1-p)

应用 sigmoid 函数后,我们知道

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

根据这个等式,赔率可以写成:

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

对数比值= ln(p/1-p) = β 0+ β 1x

因此,我们可以通过使用对数优势将逻辑回归转换为线性函数。

让步比

赔率是两个赔率的比率

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

解释逻辑回归系数

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

逻辑回归模型

β 0 →当 X 为零时,对数几率为β 0。
β 1 →与变量 X1 相关的对数优势比的变化。

如果 X1 是数值变量,β 1 表示 X1 每增加一个单位,对数优势就增加β 1。

如果 X1 是一个二元分类变量,β 1 表示 x1=1 相对于 X1=0 的对数优势的变化。

如何从模型系数得到优势比?

逻辑回归中的优势比

逻辑回归中独立变量的优势比取决于在保持所有其他独立变量不变的情况下,特定变量增加一个单位时优势如何变化。

β 1 →与变量 X1 相关的对数优势变化。
变量 X1 的优势比是β 1 的指数

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

从模型系数推导优势比

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

分类的评估标准

  1. 准确(性)
  2. pulse
  3. TNR
  4. 定期用量法(Fixed Period Requirements)
  5. PPR
  6. F1 分数

准确(性)

准确性衡量实际预测占总预测的比例。这里我们不知道误差的确切分布。[假阳性和假阴性之间的分布]

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

困惑矩阵[图片由作者提供]

在准确性度量中,我们不知道误差的确切分布[假阳性和假阴性之间的分布]。因此,我们去寻找其他指标。

敏感度或回忆率或真阳性率(TPR)

真实阳性率衡量被正确分类的实际阳性的比例。

特异性或真阴性率(TNR)

真实否定率衡量被正确分类的实际否定的比例。

假阳性率或(1-特异性)

假阳性率衡量被错误分类的实际阴性的比例。

正预测率(PPR)或精度

预测阳性率衡量实际阳性占总阳性预测的比例。

F1 比分

F1 分数是精确度和召回率的调和平均值

调和平均值怎么算?

  1. 取精度和召回的倒数(1/精度,1/召回)
  2. 求精度和召回率倒数的平均值

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

3.然后,求逆结果。

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

选择哪个指标?

这取决于问题陈述。

  1. 精度 →当我们需要知道预测精度时,比如有多少个 1 被归类为 1,有多少个 0 被归类为 0,但不考虑误差的分布(FP 和 FN)。
  2. 灵敏度 →当我们希望所有阳性记录都被正确识别时。更重视假阴性[在癌症数据集中,应正确预测癌症患者]
  3. 特异性 →当我们不希望任何负面标签被错误分类时。更重视误报[在垃圾邮件检测中,我们希望所有真正的电子邮件都能被正确预测]
  4. F1 得分指标用于不平衡的数据集。

度量公式

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

指标[作者图片]

门槛水平是多少?门槛水平如何设置?

阈电平

逻辑回归模型根据概率预测结果。但是,我们想预测 0 或 1。这可以通过设置阈值来实现。

如果阈值设置为 0.5 均值,则大于 0.5 的预测概率将转换为 1,其余值为 0。

受试者工作特征曲线

ROC 曲线是在所有分类阈值水平的 FPR 和 TPRor(1-特异性对敏感性)之间的权衡。

FPR →错误分类的负标签分数。
TPR→正确分类的阳性标记分数

如果 FPR=TPR=0,表示模型将所有实例预测为负类。
如果 FPR=TPR=1 表示模型预测所有实例为正类

如果 TPR=1,FPR=0 意味着模型正确预测了所有数据点。(理想模型)

**示例:**我已经根据实际 y 和所有阈值级别的预测概率计算了所有指标。

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

实际 y 和预测概率

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

为所有阈值级别(0–1)计算的所有指标

让我们画出所有阈值水平的 ROC 曲线(FPR 对 TPR)。

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

受试者工作特征曲线

ROC 曲线的解释

从上面的 ROC 曲线,我们可以选择最佳的阈值水平。在 FPR =0 和 TPR =0.75 时,是上述 ROC 曲线的最佳阈值水平。
该点的 AUC 往往较高,FPR 也为零。

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

AUC——曲线下面积是 ROC 曲线覆盖的面积。AUC 范围从 0 到 1。

对于任何随机分类器,AUC =0.5。所以好模型的 AUC 评分应该在 0.5 到 1 之间。

如果 TPR=1,FPR=0 意味着模型正确预测了所有数据点。(理想模式)。在这种情况下,AUC 为 1。

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

AUC = 1[图片由作者提供]

为什么要用 ROC 曲线?

  1. 比较不同型号的性能。从 ROC 曲线计算 AUC,AUC 越高的模型表现越好。
  2. 为模型选择最佳阈值。

关键要点

  1. 为了解释模型系数,我们使用以下等式

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

2.为了计算 ŷ ,我们使用以下等式

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

3.指数模型系数给出了优势比

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

结论

在本文中,我介绍了逻辑回归中的基本概念,如模型如何预测输出,如何解释模型系数,如何评估模型的性能。希望你们都喜欢。

感谢阅读!

关注此空间,了解更多关于 Python 和数据科学的文章。如果你喜欢看更多我的教程,就关注我的 LinkedIn推特

**点击此处成为中等会员:https://indhumathychelliah.medium.com/membership

令人困惑的矩阵

原文:https://towardsdatascience.com/the-confusing-matrix-71a43778b56a?source=collection_archive---------21-----------------------

当直觉让我们犯错时

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

来源:【https://unsplash.com/photos/pkKRdpurSPw】T2

你应该读这篇文章吗?

如果你能回答下面的问题,并充分解释原因(不只是提供一个有根据的猜测),那么这篇文章可能对你没有什么价值。

  1. 测试的精确度是 95%,我们被告知测试总是发现 10%的受试者是阳性的。我们对一个随机的受试者进行测试。测试返回真阳性的概率是多少?
  2. 测试的特异性为 95%,精确度为 90%。
    我们对一个健康的受试者进行测试。测试返回阳性结果的概率是多少?
  3. 测试的灵敏度(召回率)为 90%,特异性为 90%。假设我们将测试应用于患病率为 1%的数据集。假设测试返回阳性结果,受试者患病的概率是多少?
  4. 一家公司试图向你推销他们的新测试,这种测试在检测某种疾病时(据说)非常准确。他们声称,它的灵敏度(回忆)为 95%,特异性为 95%,精确度为 95%。有没有可能这不是某种营销伎俩,这种测试确实存在?
  5. 假设某项测试的灵敏度(召回率)为 95%,特异性为 95%。我们也知道患病率是 10%。我们对 1000 名受试者进行了测试。测试会发现多少阳性结果?
  6. 假设某项测试的灵敏度(召回率)为 95%,特异性为 95%。我们也知道患病率是 10%。有没有可能检测的阴性预测值是 50%?
  7. 假设在某个数据集上评估了一个测试,发现其精度为 95%。我们现在在不同的数据集上运行这个测试,其中 50%的受试者患有该疾病。测试会返回任何阳性结果吗?

介绍

通常的做法是通过从混淆矩阵容易获得的性能度量来评估返回二进制结果的测试(或模型)的性能,例如,给定混淆矩阵,我们可以容易地计算精度、召回、f1 分数等。

无论计算多么简单,一旦我们不仅仅考虑一个指标,或者当我们需要揭示一个口头调查的概率意义时,它就会变得相当棘手。
例如,“对于患有该疾病的受试者,检测结果呈阳性的概率是多少?”可以重新表述为“P 的估计值是多少(阳性测试结果|真条件为阳性)”,这可以使用估计值*# {真阳性}/# {真阳性+假阴性}* 来实现,即,我们希望对测试的灵敏度(召回)进行估计。

这篇文章的目的是提供一些问题的例子和可能的解决方案,它们可以帮助我们加深理解和直觉,让我们更容易地在一个测试的性能指标和每个指标所暗示的各种含义之间流动。

这篇文章并没有涵盖所有关于从困惑矩阵中得出的性能指标的问题。它确实(希望)涵盖了一些基础知识,可以帮助我们解决更复杂的问题,并更好地理解度量标准如何相互关联以及它们在实践中的意义。

符号及更多

当我们考虑一个检测疾病存在的测试时,我们将从回顾我们将在这篇文章中使用的符号开始。

将***【P(D)表示为受试者患病的概率*(即疾病的患病率)。
P(不是 D)P( D) 是一个受试者没有患病的概率。
P(+) 是测试返回一个阳性结果的概率。
**P(–)是测试返回一个阴性结果的概率。

根据以上我们得到:
P(+|D) 这是假设受试者患有疾病,测试将返回阳性结果的概率。
P(–| not D)这是假设受试者没有疾病的情况下,测试返回阴性结果的概率。
同样我们有 P(不是 D|+) 、***P(D |–)*等条件概率。

我们将互换使用回忆和敏感性这两个术语,阳性率/患病率和精确度/阳性预测值也是如此。下表可能有助于解决本文中的问题:

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

作者图片

我们也可以在这个维基百科页面中找到表格中的信息。

一些概率定律的简要回顾

回忆几个可能对我们有用的基本概率定律:

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

作者图片

关于完整性的几点说明

评估者和估计

在这篇文章中,我完全忽略了一个事实,即我们基于经验混淆矩阵计算的指标,是运行一些实验、测试、模型等的结果。实际上是估计。

换句话说,如果以精度的估计量为例,TP/(TP + FP)只是检验(或模型)的真实(未知)精度的估计量。我们根据在数据集上运行模型/测试得到的混淆矩阵计算的任何度量值都是测试的真实(未知)度量的估计**。**

贝叶斯或频率主义方法

我也避免讨论度量标准,这正是我们试图估计的,是某个未知的常数还是实际上是一个随机变量。对于这篇特定的文章来说,讨论是不太相关的,尽管在实践中它是非常有趣的。

不适当的评分规则

在考虑分类性能指标时,存在使用正确的评分规则还是不正确的评分规则的问题。

这里就不赘述了,不过你可以在这里和这里了解更多。

关于这个主题的全面综述可以在gne iting&raftey(2007)中找到。

题型

关于各种性能指标,我们可以问许多类型的问题。在这里,我们将只涵盖几种类型的问题,你可以在这些问题的基础上提出更多的变化。

型个性

该问题中仅提供了一个指标,我们以受试者的真实状况(患病/健康)为条件。

答案可能是度量值,1 减去度量值,或者使用现有信息无法回答问题。

问题格式: 某测试的 <度量 >X%
我们对一名< 健康/患病 >的受试者进行测试。测试返回一个 <阳性/阴性> 结果的概率是多少?

:
一项检测的特异性是 95%。我们对一名健康的受试者进行测试。测试返回阳性结果的概率是多少?

问题求假阳性率,P(+|not D)
给定特殊性,应用规则P(A|B) = 1 — P(not A|B)我们知道P(+|not D) = 1 — P(-|not D) = 1 — specificity,所以答案是1 — specificity = 1 — 0.95 = 0.05

型个性

与上一个问题类型相同,只是添加了不相关的信息。

问题格式: 某项测试的 <指标 >X%<其他指标>Y%
我们对一名< 健康/患病 >受试者进行测试。测试返回一个 <阳性/阴性> 结果的概率是多少?

:
一项检测的特异性为 95%,精确度为 90%。我们对一名健康的受试者进行测试。测试返回阳性结果的概率是多少?

我们不需要精确来回答这个问题;特异性就足够了。这个问题的答案和上一个题型的答案一样:1 - specificity

C 型

在问题中,只有一个指标与阳性/阴性检测结果的流行率或比例一起出现。注意,在这种情况下,问题不会要求我们找到一个条件概率。

问题格式: <某项测试的度量 >X% ,我们被告知 <患病率/阳性测试结果比例>Y% 。我们对一个随机的对象进行测试。测试返回一个 <真/假> - <正/负> 的概率是多少?

示例 :
测试的精确度是 95%,我们被告知测试总是发现 10%的受试者是阳性。我们对一个随机的对象进行测试。测试返回真阳性的概率是多少?

这些问题要求我们找到P(+ and D)
我们知道P(A and B) = P(B|A)P(A)所以
P(+ and D) = P(D|+)P(+) = (precision) * (proportion positive results)
所以我们得到0.95*0.1 = 0.095

D 型

类似于前一种类型,但增加了冗余信息,这一次我们可能会问一个条件概率。

问题格式:
某测试的< 度量 >为 X% 。我们还知道测试的< 其他指标 >是 Y% ,并且这些指标是在患病率为 Z% 的数据集上评估测试时获得的。
我们对单个对象执行测试,它返回一个< 阴性/阳性 >结果。是一个< 假/真 > - < 负/正 >的概率有多大?

举例: 某测试的误发现率为 5%。我们还知道,该测试的阴性预测值为 95%,并且这些指标是在患病率为 10%的数据集上评估该测试时获得的。我们对单个受试者进行测试,结果是否定的。它是假阴性的概率是多少?

**问题要求P(D|-)我们知道
**

除了测试的阴性预测值之外的所有信息都不是回答问题所必需的,它们只是噪音。

E 型

该问题包括两个指标和测试给出的阳性测试结果的流行率或比例。

问题格式: 测试的< 度量 >为 X% 其< 其他度量 >为 Y% 。假设我们将测试应用于一个数据集,其中< 阳性结果的患病率/比例 >为 Z% 。假设测试返回一个< 阳性/阴性 >结果,受试者健康/患病 >的概率是多少?

例: 某项检测的灵敏度为 90%,特异性为 90%。假设我们将测试应用于患病率为 1%的数据集。假设测试返回阳性结果,受试者患病的概率是多少?

这个问题要求我们找出测试的精确度,P(D|+)
为了找到P(D|+),我们可以应用贝叶斯法则,在明确写出这些术语后,我们看到只需插入灵敏度、特异性和患病率的值,就可以得到精确度的值。

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

作者图片

F 型

与上一个问题类型相同,只是更糟糕—问题包含看似相关的信息,但问题无法回答。

例:
用前面题型例中的阴性预测值替换特异性。当我们用贝叶斯法则重写它时,算出精度的形式,你会看到我们最终得到的项的值在问题中没有给出,所以它无法求解。

再举几个例子

  1. **假设某项测试的特异性为 95%。我们在没有受试者患病的数据集上运行这个测试。测试会返回任何阳性结果吗?
    **回答:是的,该测试会将数据集的 5%标记为阳性,即使它们实际上都是该疾病的阴性。这是因为假阳性率也可以表示为1 — specificity,所以我们有1 — 0.95 = 0.05
  2. 假设某项测试的灵敏度为 60%。数据集中的患病率为 70%,我们还知道测试返回的结果中有 80%是阳性的。测试的精确度是多少?
    回答 :
    问题让我们去找P(D|+)
    我们可以用贝叶斯法则来解决:
    P(D|+) = P(+|D)P(D) / P(+)
    = sensitivity * prevalence / proportion positive results
    = 0.6 * 0.7 / 0.8 = 0.525
  3. **假设在某个数据集上评估了一个测试,发现其精度为 95%。我们现在在不同的数据集上运行这个测试,其中 50%的受试者患有该疾病。测试会返回任何阳性结果吗?
    **回答:**根据问题中给出的信息,我们无法回答。考虑到我们现有的信息,我们知道P(D|+) = 0.95P(D) = 0.5
    问题问的是P(+),或者更确切的说是问P(+) > 0是否。
    P(+)也可以写成
    P(+) = P(D)P(+|D) + P(not D)P(+|not D) 由于我们不知道P(+|D)(灵敏度)的值,也不知道P(+|not D) (假阳性率)的值,所以我们无法回答这个问题。
    只是为了说明,我们确实知道P(not D) 的值,因为1−P(D) = P(not D)
  4. **假设某项测试的灵敏度为 95%,特异性为 95%。我们也知道患病率是 10%。我们对 1000 名受试者进行了测试。测试会发现多少阳性结果?
    **回答:我们之前展示了如何使用贝叶斯法则解决一个非常相似的问题。我们现在将展示另一种方法。
    我们知道该疾病的患病率,因此我们知道 1000 名受试者中有 10%患有该疾病,因此有 100 名实际阳性。
    测试灵敏度为 95%,因此 100 个实际阳性中的 95 个将通过测试发现,并且它们是真阳性。
    测试特异性为 95%,因此 900 个实际阴性中的 855 个将通过测试发现,并且它们是真阴性。剩余的 45 个实际阴性将被测试错误地检测为阳性,并且将是假阳性。这与注意到我们的假阳性率是 5%是一样的,因为假阳性率等于 1-特异性。
    我们最终得到 95 个真阳性+ 45 个假阳性,总共 140 个阳性,这是我们被要求找到的数量。
    顺便说一下,我们现在也知道测试精度是95/(95+45)=67.9%
  5. **假设某项测试的灵敏度为 95%,特异性为 95%。我们也知道患病率是 10%。有没有可能检测的阴性预测值是 50%?
    **答案:
    根据与上一个问题非常相似的计算,为了简单起见,假设我们对 1000 名受试者进行了测试:
    患病率为 10%,因此我们有 100 名实际阳性者和 900 名实际阴性者。
    95%的灵敏度为我们提供了 95 个真阳性和 5 个假阴性。95%的特异性产生 855 个真阴性和 45 个假阳性。
    阴性预测值为
    T1
  6. **一家公司试图向你推销他们的新测试,这种测试在检测某种疾病时(据说)非常准确。他们声称,它的灵敏度为 95%,特异性为 95%,精确度为 95%。有没有可能这不是某种营销伎俩,这种测试确实存在?
    **回答:正如我们看到的,我们可以把精确度写成患病率、敏感性和特异性的函数。让我们再看一遍:

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

作者图片

我们注意到,我们可以重新排列上述内容,以便将患病率表示为敏感性、特异性和准确性的函数。然后,我们插入公司报告的指标,如下所示:

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

作者图片

事实证明,根据该公司提供的指标,他们在患病率为 50%的数据集上评估了他们的测试,这是非常高的,可能与我们希望在我们打算使用该测试的人群中看到的真实患病率完全无关。换句话说,将相同的测试应用于患病率为 2%的一组受试者将导致不同的表现指标,并且不是所有的指标都可以达到 95%。

使用贝叶斯因子

回答问题 4 的另一种方法是使用贝叶斯因子,该方法在本视频中有详细介绍:“医学测试悖论,重新设计贝叶斯法则”。我不会在这里介绍这个方法,因为我认为这个视频解释得非常好,我强烈推荐观看。

这玩意在现实生活中真的有用吗?

最近由科斯托拉斯等人(2021) 发表在《美国流行病学杂志》上的一项研究报告了一项荟萃分析的结果,该分析评估了 RT-聚合酶链式反应测试对新冠肺炎的诊断准确性。

在我们的案例中,研究的两个结果是令人感兴趣的,这两个结果是 RT-聚合酶链式反应测试的灵敏度估计值 0.68 和测试的特异性估计值 0.99。

正如我们之前看到的,给定敏感性和特异性,我们现在可以将精确度固定在某个值并获得患病率,或者反之,将患病率设置为某个值并获得精确度。

假设我们将疾病患病率固定在 1.5%。使用在研究中估计的敏感性和特异性值以及这个流行率值,我们最终得到 50.9%的精确度。在这种情况下,由 RT-聚合酶链式反应测试提供的大约 49%的阳性结果是假阳性。注意:49%是误发现率,不要和误报率混淆(这是两个不同的指标)。

另一方面,假设我们将精确度设置为 95%,同时仍然使用研究中发现的 68%灵敏度和 99%特异性的值。在这种情况下,我们发现这种疾病的患病率约为 12%,这有点高。

因此,我们看到了精确性和普遍性之间的权衡,假设敏感性和特异性是固定的。我们可以画出这种权衡:

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

作者图片

我们现在可以问更多的问题,关于我们在做各种公共卫生决策时使用 RT-PCR 检测结果的方式。

在 Andrew Gelman 的帖子中可以找到另一个很好的度量标准及其含义的例子:“对斯坦福冠状病毒流行研究的关注”。

练习练习练习

我们在这篇文章中讨论的问题有许多不同的风格。

我能想到的提高我们对主题的掌握的最好的方法是练习这些问题,并弥补我们在理解中发现的任何差距。

在以下链接中,您可以找到 1000 个这样的问题- 绩效指标问题。这些问题是自动生成的,其中一些无法回答,也就是说,问题中提供的信息不足以回答它,我们可能缺少指标或其他一些数据。我们可以把这些看做是难题,这取决于我们去理解到底缺少了什么,以及为什么这个问题不能被回答。

一些解决方案

这些是一些问题的解决方案,可以在的链接中找到。

第一个例子:

测试的错误发现率为 95%,其阴性预测值为 85%。
这些指标是在数据集上评估测试时获得的,其中阳性测试结果的比例为 1%。我们对一个生病的受试者进行测试。测试返回否定结果的概率是多少?

先把问题中给出的信息写成概率:
FDR = P(not D|+) = 0.95; NPV = P(not D|–) = 0.85``proportion of positive test results (prop+) = P(+) = 0.01

这个问题要求我们找到P(–|D),即假阴性率(FNR):

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

作者图片

我们现在可以代入 FDR,NPV,prop+的值,找到答案。

第二个例子:

测试的精确度为 95%,假阳性率为 90%。我们对一个生病的受试者进行测试。测试返回否定结果的概率是多少?

和往常一样,我们先把问题中的信息表示成概率:
precision = P(D|+) = 0.95; FPR = P(+|not D) = 0.9

问题要求我们求P(–|D),即假阴性率(FNR):
P(–|D) = P(D|-)P(-) / P(D)我们知道可以把P(D)写成P(D) = P(+)P(D|+) + P(-)P(D|–) = P(+)P(D|+) + (1 — P(+))P(D|–)但是,求P(D)的值需要我们知道P(+)的值,以及P(D|+)(在问题中作为精度给出)和P(D|–)(即没有给我们的假漏报率(FOR)。因此,我们无法回答这个问题,因为我们缺少一些必需的信息。

面试问题——注意事项

如果你打算在求职面试中问这类问题,要记住的一点是,回答一个问题有不止一种方式,你应该能够跟随候选人沿着概率计算的道路走下去,直到当他正确回答时,你会对他露出放心的微笑。

你应该对你提出的问题非常熟悉。仅仅知道“5%是正确答案”是不够的,因为关键是要理解候选人是如何得出这个数字的,而不仅仅是让他凭直觉猜测。

如果你对材料不够熟悉,候选人将无法从你那里得到任何暗示和指导,以防他结结巴巴,或者更糟的是,如果答案变得有点复杂,他会意识到你无法理解他的答案,这绝不是一件好事。

摘要

基于混淆矩阵中可用计数数据的性能度量被广泛用于评估预测性能。尽管它们很容易计算,但是一旦我们用语言描述它们,并试图解释它们的含义以及它们如何相互作用,这些指标就不总是直观的了。

仅仅因为一些指标只涉及简单的计算,并不意味着它也很容易掌握。

希望这篇文章能鼓励你花些时间深入研究这些常用的度量标准,并更好地理解当度量标准 X 取值 y 时的真正含义。

我希望你觉得这篇文章有用,而不是完全无聊:)

欢迎评论和反馈!

我们一直在寻找有才华的人加入我们的团队!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值