我们和他们想的一样吗?
我们如何发现 NLP 模型是否像我们一样思考?第一部分
机器学习模型看待语言的方式与我们不同吗,我们如何才能发现?这是在之前的一篇文章之后提出的问题,这篇文章是关于在 NLP 模型中查看哪些单词产生了输出,并问:为什么是这些单词?
当与其他数据科学家讨论这些结果时,我们会开始解释为什么每个词对模型都很重要;为什么一个词被认为是积极的,而另一个不是?例如,在一条关于网飞系列电影《虎王》的推文中,该模型会建议一些明显的词来表达积极的情绪(“被爱的”、“令人惊讶的”),但也会建议像“纪录片”和“我”这样的词对积极的情绪也很重要。
由 NLP 模型突出显示单词的推文。绿色越亮,对情感的贡献越大。
我会犹豫地建议“嗯,纪录片很受欢迎”和“也许使用我们在更深层次上联系的人称代词,因此会对此持积极态度……”
顶多流行心理学。但它提出了一个问题。
随着 NLP 的发展,这一点可能很重要——你的自动化营销活动是否会对错误的信息做出反应?那个读股票预测的报告是否比你预期的使用了不同的短语?一种新的方言或互联网迷因会让你的模式发生变化吗?
因此,计划是测试这个想法,并比较人类如何对情绪和模型进行分类。但为此,我需要关于一个人如何解释一个句子的数据,我不想仅仅依靠我自己的观点,以防我的偏见或流行心理学妨碍我。因此,我打算开发一个工具,从更广泛的受众那里收集数据。这篇文章将讨论这个工具的构建和通过 docker 的部署。
成品工具。设计不是我的强项。
自从在 PyData London 2019 上看到作者谈到它,我就想用总监。这是一个很棒的基于 Jupyter 笔记本的工具,通过它可以对 ML 数据进行主动标记,并且拥有我正在寻找的大部分演示元素,例如进度跟踪、跳过错误的样本、布局标签选项等。
这个界面随后被优秀的 Voila 所改变,这是一个将笔记本变成独立网络应用的工具。一旦以网络形式出现,它将更容易分发给我所希望的许多用户。
再加上一个保存句子和回答的数据库,以及一个连接和运行不同部分的 docker 集群,我就完成了。
首先,我必须确认主管能适应我的需要。一个下午的黑客活动表明,通常使用的静态标签可以通过简单地分割输入文本并将其指定为该示例的标签选项,从给定的输入句子中动态创建。
随后,我需要一个数据库接口层位于管理者和数据库之间,以加载和保存数据。通过扩展现有的类,这主要是关于在创建时添加连接到数据库的调用,然后将提取的样本输入到现有的管理员队列中。
最后,从数据库中提取一些用户可以查看的样本。在这里,我想把重点放在最少被审查的样本上。
为了保持干净,我分叉原来的主管,并在那里做我的更新。所有的变化都可以在这里找到。
docker 配置非常简单——一个运行 Voila 的容器和一个用于 PostgreSQL 数据库的容器。我为数据库数据使用了一个持久卷,这提供了灵活性,但在部署中产生了更多问题。
我已经包括了我的 docker 音量命令,因为这是最难得到正确的领域之一。
创建卷时使用
docker volume create postgres_db_nlp_compare
并且存在于*/var/lib/docker/volumes*
它们可以通过以下方式查看
docker volume ls
要添加到正常使用的合成文件中,请在 docker-compose.yml 文件中添加以下内容(注意*_ data*&data目录):
volumes:
- /var/lib/docker/volumes/postgres_db_nlp_compare/_data: \ /var/lib/postgresql/data/
还可以使用以下命令将卷装载到合成网络之外的临时容器中:
docker run \
--env-file database.env \
--volume postgres_db_nlp_compare:/var/lib/postgresql/data/ \
-p 5432:5432 \
--name temp_postgres_nlp postgres
这种方法允许您通过作为标准连接到数据库的笔记本向开发机器上的数据库添加数据。
或者,运行后,您可以登录到容器,通过命令行使用以下命令检查数据:
docker exec -it temp_postgres_nlp bashpsql -U user_name -h localhost -d database_name
可以使用以下命令删除临时容器,但是数据将保留在卷中。
docker rm temp_postgres_nlp
有了这个设置,我就能够在本地开发项目,直到它可以进行远程部署。在这里我研究了 docker-machine。
ocker 机器允许远程机器被视为本地机器。您可以在本地开发,翻转机器开关并运行相同的命令来远程运行。这使得部署一个魅力。
要进行设置,您需要一台安装了 docker 的服务器,您可以通过 ssh 以 root 身份访问该服务器。创建一个新用户(例如 dockeradmin ),并通过 visudo 工具授予他们 sudo 权限,而不需要本地密码(这是为了远程操作)。
# add following to /etc/sudoers using visudo
dockeradmin ALL=(ALL) NOPASSWD: ALL
将用户添加到 docker 组:
sudo usermod -a -G docker dockeradmin
然后使用 ssh-copy-id 使用您的本地 ssh 身份远程登录,不需要密码。
ssh-copy-id dockeradmin@remote_host
然后,您可以使用以下信息登录:
ssh dockeradmin@remotehost
最后,使用以下命令创建远程机器:
docker-machine create -d generic \
--generic-ip-address <remote_host_ip_address> \
--generic-ssh-key $HOME/.ssh/id_rsa \
--generic-ssh-user dockeradmin \
--generic-ssh-port 22 \
name_for_remote_machine
你可以检查它的运行情况
docker-machine ls
此后,您可以使用以下命令在本地和远程机器之间切换 docker-machine 的焦点:
# to run the commands on the remote machine
eval $(docker-machine env name_for_remote_machine)
现在 docker 命令的运行将在远程机器上执行。
# to switch back to the local machine
eval $(docker-machine env -u)
设置这个别名有助于区分 docker-machine 所指向的服务器。
alias de='env | grep DOCKER_'
如果 docker-machine 指向远程机器,随后运行’ de '将返回终端信息,否则不返回。此外,要使 docker-compose 正常工作,还需要以下命令。
export COMPOSE_TLS_VERSION=TLSv1_2
因此,远程部署的完整顺序是:
# set up the alias
alias de='env | grep DOCKER_'# ensure correct encryption is used
export COMPOSE_TLS_VERSION=TLSv1_2# refocus to remote machine
eval $(docker-machine env name_for_remote_machine)# check!
de# build the same containers you have locally but remotely
docker-compose build# start the remote compose network
docker-compose up -d# refocus back to development box
eval $(docker-machine env -u)
如果已经部署并执行更新;在建造之前,你可能也想跑
docker-compose down
这个序列将使用本地资源远程构建一组 docker 容器。如果需要,将复制本地文件,下载图像。就好像在本地机器上一样…但是那个卷呢?
这是最难解决的问题。最终这对我有用:
docker run --rm -v postgres_db_nlp_compare:/from alpine ash -c \
"cd /from ; tar -cf - . " | \
ssh dockeradmin@<remote_host_ip_address> \
'docker run --rm -i -v postgres_db_nlp_compare:/to alpine ash -c "cd /to ; tar -xpvf - "'
我首先手动登录到远程机器,并使用上面显示的相同命令创建了一个同名的卷,这不是绝对必要的,但这意味着我不必为本地和远程创建不同的 docker-compose.yml 文件。
然后,该命令将:在本地创建一个临时容器,将该卷装载到该临时容器,记录数据内容,并通过 ssh 将该数据传输到另一个已将远程卷装载到其自身的远程临时容器,并取消记录数据。唷!
有了以上内容,我就能够创建并部署我的工具来捕捉其他人对之前被 NLP 模型分类的推文的想法。下一步是尽可能多的联系一些人,请他们做一些评论。
然后,这些数据将被用来比较用户如何解释推文和模型如何解释推文。当心第二部分。
所有文件都可以在这里找到,这个 T2 项目解释了我使用的推特数据的来源。
女性正在打破数据科学和相关领域的性别差距吗?
人工智能学术界和工业界的包容性和多样性。
数据海报中的女性由穆罕默德·阿古利在商店Displate.com
技术领域为女性和男性提供了广泛的机会。作为其中的一部分,人工智能和分析在过去几十年中也有了大幅增长。关于兴趣爆发的更多细节可以在附加的文章中找到:
先说 AI 状态的统计。
towardsdatascience.com](/is-artificial-intelligence-dead-ceb3830033a1)
如此重要的发现带来了许多相关的问题,其中之一是关于性别差距。虽然这不是一场男人和女人的战斗。但是,统计数据总是提供了一个清晰的视野领域的情况,如果有任何“进入的障碍。”低百分比通常是一个大的危险信号。那么女性在数据科学及相关领域的地位如何呢?
女性在研发中的份额是多少?
研究和开发是学术界和工业界最重要的领域之一。妇女在这样一个充满活力的领域中的存在是一个重要的指标。
在人工智能领域,基于 arXiv 上的出版物进行了一项分析,以跟踪至少有一名女性作者的论文的百分比。
**作为人工智能研究的世界领导者之一,中国被排除在样本之外,原因是对按名称标注作者性别的信心较低,并且在 arXiv 上发表文章少于 5,000 篇的国家不在此分析之列。
至少有一名女性作者的论文百分比——资料来源:NESTA,arXiv,2019 年。
- 荷兰超过 41%的人工智能论文和丹麦超过 39%的人工智能论文至少有一名女性合著者。
- 只有 10%和 16%的日本人和新加坡人有女性合著者。
- 与非人工智能论文相比,马来西亚、丹麦、挪威和以色列的人工智能研究中女性的比例更高。
在整个 2000-2018 年期间,来自欧洲的女性作者的人工智能出版物有了显著增长。一些国家的 arXiv 人工智能论文中有超过 30%的作者是女性,包括阿根廷、加拿大、伊朗和许多欧洲国家(葡萄牙、西班牙、法国、比利时、意大利、荷兰、丹麦、爱尔兰、匈牙利)。在美国,人工智能领域女性作者的比例在此期间略有下降。
会议参与呢?
为了研究女性参与会议的情况,我们挑选了全球知名的例子作为例证。第一个是由一个致力于支持妇女参与机器学习的组织主办的年度研讨会(WiML),第二个是旨在增加人工智能多样性和包容性的人工智能教育倡议(AI4ALL)。
WiML 注册-资料来源:WiML,2019 年
AI4ALL 校友和项目-来源:AI4ALL,2019
在过去的几年里,这两个项目的注册人数都有了显著的增长。WiML 研讨会的参与者比 2014 年增加了 738%,AI4ALL 的校友比 2015 年增加了 2000%。这些增长反映了将妇女和代表性不足的群体纳入人工智能领域的持续努力。
第三项举措是数据科学中的女性(WiDS ),始于 2015 年 11 月,为期一天的技术会议。这个全球会议吸引了来自学术界、工业界、政府和非营利组织的数百名女性。在其头五年中,成千上万的人参加了妇女参与发展。
数据科学统计中的女性。资料来源:妇女参与发展倡议
就业市场?
男性技能渗透率和职业数量-来源:LinkedIn,2019 年
女性技能渗透率和职业数量-来源:LinkedIn,2019 年
数据显示了以下趋势:
- 在样本中的所有国家,男性往往比女性拥有更多人工智能职业。
- 男性的高人工智能技能渗透率并不意味着女性的高人工智能技能渗透率。一些国家在只考虑女性时的排名明显高于考虑男性时的排名。
大型科技公司员工中女性的比例。
据 Adeva IT 称,截至 2018 年,女性仅占科技行业所有工作的 25%,尽管女性占总劳动力的近一半。
教师多元化。
数据显示,男性构成了人工智能系教师的绝大多数,在全球几所领先的计算机科学大学中,平均占人工智能教授的 80%。
- 比例最高的是苏黎世联邦理工学院,为 35%。
- 比例最低的是 IIT 马德拉斯,为 7%。
全球不同地区的性别差异并不明显,教师性别差异与院系规模之间也没有任何关联。
虽然妇女仍然没有接近平等代表性,特别是在就业市场,但正在加大努力,以便在学术界和工业界建立包容性和多样性。由于在全球传播意识和教育的多种现有举措,人工智能和相关领域的性别差距正在缓慢但肯定地缩小。缩小这种性别差距的另一个重要因素是,女性目前因其在该领域的杰出成就而得到认可,无论她们是企业主、研究人员,还是在该行业中担任任何职务。
女性和男性应该有平等的机会进入人工智能领域,为他们提供这种权利是共同的责任。
关于作者:
Hajar 是一个数据驱动的人,致力于帮助企业从他们的数据中获得关键的洞察力。三年多的科技志愿者。一个永远充满热情的学生,他愿意不断改进并帮助社区进步。可以在LinkedIn&Twitter上找到她。
**参考:部分提及的统计数据摘自斯坦福大学 2019 年 HAI 年度报告。
你是数据科学家的追求者吗?这是我成为其中一员的故事
我非常想成为一名数据科学家,经过 18 个月的自学,终于在 2016 年 12 月成为了一名数据科学家。在这篇文章中,我将谈论在成为数据科学家之前我在做什么,我是如何成为一名数据科学家的,以及成为一名数据科学家是什么感觉。
亚历山大·辛恩在 Unsplash 上的照片
数据科学出现之前:
我在印度一所三流大学学习计算机科学与工程,2013 年毕业。我不知道在我的生活和事业中我想做什么。我在大学最后一年收到了两份聘书。一个来自 HCL 技术公司,另一个来自 BNY 梅隆大学。我接受了后来的邀请,因为他们要求我在大学毕业后立即加入。
因此,我在企业界作为一名软件工程师的职业生涯始于 2013 年 9 月,在那里我接受了大型机培训。大型机是一项非常古老的技术,发明于 20 世纪 50 年代。他们听起来很酷,只有在电影里,一些戴着耳机的家伙大叫,“他们黑进了我们的主机!”(现实中他们从未被黑过)。我对编程充满热情,所以我喜欢培训,因为我有很多实践经验。在我参与一个项目后,最初的几个月非常棒,因为我开始学习应用程序。一旦我熟悉了这个应用程序,事情就变得平淡无奇了。所以我转到了汇丰科技,印度,因为他们承诺一些纯开发工作。
追求数据科学:
加入汇丰银行后,我知道世界上任何地方都没有纯粹的大型机开发工作。这是开始。
大约在 2015 年中期,我周围的每个人都在谈论 Hadoop。所以我想,为什么我不进入 Hadoop,因为这是一个时髦的词,当然,也是一个高薪的工作。所以我买了一台新的笔记本电脑,学习 Hadoop 教程,并获得了认证。我做过 Hortonworks 数据平台认证开发者(HDPCD)。
同样,对 Hadoop 不满意。我继续阅读关于数据科学的书籍,并开设了一些 MOOCs 课程。一件事接一件事,我终于找到了我的新欢,机器学习。然后我更加专注于 ML,报名参加了华盛顿大学 Coursera 的 ML 专业课程,这是一门很棒的课程(当他们取消了最后一个模块和顶点课程时,我有点失望。我怪苹果!).
经过一年半的 MOOC 之旅,我觉得我现在知道了一些东西,我真的可以解决一些问题。然后,我向公司几乎所有的负责人和高级成员发送了关于我的抱负的垃圾邮件。我在邮件中提到“我是一名有抱负的数据科学家,我想实践机器学习”。此外,我在邮件中提到了我所做过的所有认证和课程。很少有人回复我,也很少有人把我介绍给另一个更相关的人。从没想过我会从那些大人物那里得到这种回应。最终,一扇门为我打开了。在我给他发邮件的第二天,印度大数据部门的负责人,同时也是印度创新实验室的负责人,邀请我去见他。这是我职业生涯的转折点。
我们在创新实验室见面,他问我能做什么。我透露了一点关于 Kaggle 的信息(我尝试了一些问题)。我很确定我搞砸了我唯一的机会。但令我惊讶的是,他们希望我和他们一起工作,但不是正式的,因为那时在印度没有任何关于数据科学的项目。那时 TensorFlow 是开源的,我们银行的每个人都想看看我们如何使用它。所以校长让我带头做点什么。我花了近一周的时间来理解 TensorFlow,幸运的是,我从 Kaggle 获得了 LendingClub 的数据集。利用这一点,我开发了一个信用风险模型,并提交给 iLab 的人。他们都很喜欢。然后我们把它展示给我们的高级成员和各部门的领导。每个人都喜欢它。我想这给了人们对我的信心,让他们相信我能够胜任这份工作。
幸运的是,2016 年 12 月,我们全球市场部在印度有一个数据科学的职位空缺,负责人推荐了我。因为同样的原因被面试并被安排到这个项目中。我是印度第一个数据科学家,当时印度有 10K+员工。
作为一名数据科学家:
我成为数据科学家的前 6 个月是我职业生涯中最具挑战性的时期。这是一个小团队,我们有 5 个人,谢天谢地,我有一个最好的线索,我可以希望的。他教授的是真实生活中的数据科学,而我从 Kaggle 和 MOOCs 中学到的却是相反的。在最初的几个月里,我有点纠结,因为分析行话与软件工程领域非常不同,而且,由于非常接近业务,我不得不付出额外的努力来获得我所从事的领域的知识。我疯狂地工作,几乎一天 16 个小时,周末也是如此!我在学习,我很开心,我每天都在做新的事情!在我工作的同时,我成立了一个机器学习搏击俱乐部(俱乐部的第一条规则是谈论俱乐部!)并开始分享我通过组织会议学到的东西。
从事数据科学 2 年半后,我发现我目前的工作列在我们的内部工作列表门户中。这份工作的地点在多伦多,是为汇丰银行正在建立的一个新的数据实验室。对于喜欢研究的人来说,这份工作看起来很有吸引力,我想探索世界的其他地方。所以我申请了这个角色,经历了差不多 5 轮面试,最终从 2019 年 5 月 19 日开始在多伦多数据实验室工作。我现在是一个由 30 名成员组成的全球(伦敦的另一个实验室)团队的一员,团队成员包括研究生数据科学家、数据工程师和高级数据科学家。作为一个更大的团队的一部分,同时也是一个高级 DS,我可以通过领导一个用例、管理利益相关者等来练习我的软技能。这是我参加过的最好的球队之一!
概要:
我不会说我天生就是一个数据科学家,这一切都是从对我所做的不满意开始的。在没有任何证书的情况下进入数据科学很难,但我为此努力工作,不断学习,敲开我看到的任何一扇门,这一切都有回报。MOOCs 用正确的技术和工具帮助了我,但应用于实际问题是只有实践才能教会的事情。我很高兴成为一名数据科学家,每天都是新的一天,仍然有很多东西要学,这让我不会感到无聊!
你是高级数据科学家吗?
香港李小龙雕像, Pixabay
还是大三?
以下是我个人对如何成为高级数据科学家(SDS)的看法,或者换句话说,如何成为一名初级数据科学家。
我想这些想法也可以推广到其他领域。然而,我个人的兴趣在于数据科学领域。
高级数据科学家应该是独立的。
独立是这里的关键词,但它意味着什么呢?独立包含了各种各样的品质和技能,一个人应该获得这些才能在职业生涯中取得进步。
一般来说,SDS 在研究方面应该完全独立,从创建数据和标记,到交付基于产品设计的成品项目,即端到端。
SDS 应该理解现代产品管理以及如何在与项目经理等利益相关者合作的同时管理项目的期望。他们应该让他们的经理放心,并且应该是团队中每个人都去咨询的人。
让我们将它分解为 SDS 应该擅长的几个关键领域,如个人、学术、技术、管理、产品和业务。
个人的
SDS 应该有“能做”的态度,他们应该总是努力接受更多的责任,运用良好的判断力,做超出预期的事情。
积极主动并始终向前,不断改进和学习,对关键问题和各种用例有完整和深入的回答,同时考虑所有可能的利弊并充分理解决策结果。
持批评态度,给出积极的反馈,能够说服你的同事,同时记住反馈是不够的,他们应该总是提出更好的替代方案,换句话说,说某事“不够好”是不够的。
学术的
SDS 应该是一个思想者,关心并理解真正科学过程的意义,同时平衡产品需求,在不损害其科学完整性的情况下具有生产特性。
要知道假设是万恶之源,并在情况变化时重新审视它们。关心完整和正确的验证、监控、可解释性和可解释性。对“行得通”的心态感到不满。接受科学反馈并高度批评自己的决定和行为,这导致我们再次验证假设并经常踩刹车以批评自己的行为,这导致验证假设,不断查看数据以确保他们所说的是正确的。
提出开箱即用的解决方案,成为一名 macgyver 和一名乐高大师,使用各种科学积木构建算法,以便为他们面临的任何挑战找到创造性的解决方案,无论领域、数据或难度如何。通过分享知识、想法、论文和解决方案来帮助你的同事。流利地谈论他们所知道的话题,连贯地介绍他们的工作,毫不费力地将知识传授给非优等生和低年级学生,并在简短的交谈中发现方法上的问题。
他们应该阅读文献,如学术论文、博客文章、技术和工具文档,以便了解更多信息并扩展其范围。站在当前研究和进步的最前沿,甚至是在其他领域。你知道的越多,你的手艺就越好。IMO 阅读应该在工作时间之外练习。这是一个成为更好的科学家的个人旅程。
熟记 Scikit-learn 或类似软件包提供的所有算法、方法和指标,深入了解深度学习,并理解数据或数据来源是影响我们工作各个方面的最重要元素。
技术的
SDS 应该是一个实干家。他们必须能够将一个特性交付给生产。他们应该在他们选择的编程语言方面有很好的技能,他们应该能够在 Github 的各种条件下使用和实现包。他们应该能够将他们的算法作为基于标准化接口的类或包来交付。他们应该理解 CI/CD 处理,并努力实现某种形式的开发标准化。
经理的
SDS 应该是一个计划者和优先排序者。将复杂的项目转化为可管理的小任务。保持对组织及其经理的持续可见性。在考虑可用资源的同时,对任务进行优先级排序,即重要任务得到更多关注,而其他任务得到的关注较少。成为一名“一劳永逸”的会员。自我管理,以减少他的经理的开销。能够管理期望和风险。撰写清晰透彻的设计文档、演示文稿,并记录他们的工作。换句话说,为了交付一个完整的项目,他们必须能够管理项目,并且他们自己很少或者没有指导。
产品
SDS 应该知道什么是现代产品管理,熟悉与产品世界相关的概念、方法、框架和术语。理解和解决复杂的商业问题和产品问题,同时考虑技术和算法的限制,总是思考如何为特性提供新的能力。这绝不是一种替代产品的方式,而是一种给出产品可能不具备的科学-算法观点的方式。
商业
SDS 应该了解业务。由于他们早期参与项目,SDS 需要了解公司如何赚钱,业务问题是什么,我们如何找到并签下新客户,谁是主要竞争对手,公司关心的业务指标是什么,客户保留率是多少,等等。
领导/原则
最后,如果你问自己一个领导或一个主要的 DS 的品质和技能是什么?简而言之,他们应该能够做一个高级 DS 能做的一切,但要规模化。雇佣并管理多个项目和人员,在了解细节的同时,看到更广阔、更大的图景。他们需要能够承担高风险、高影响的业务产品问题,进行必要的研究,并能够在没有指导的情况下轻松快速地交付工作解决方案。
我为初创企业和扩大规模的企业提供无偿建议。你可以在这里 了解更多关于我的信息并联系我 。
我要感谢菲利普·坦诺、纳塔内尔·达维多维茨、迪安·普莱班和塞菲·凯勒的宝贵意见。
Ori Cohen 博士拥有计算机科学博士学位,主要研究机器学习和脑机接口(BCI)。他在一家智能城市初创公司领导了一个数据科学团队,主要利用机器和深度学习进行自然语言处理(NLP)和理解(NLU)研究。目前,他是 TLV 新遗迹公司在 AIOps 领域的首席数据科学家。他定期在 Medium.com 撰写关于管理、流程和所有数据科学的文章。
乔氏民主党人和沃尔玛共和党人
使用连锁店模拟美国选举
如果你所在的县的一元树商店比星巴克还多,你很可能是共和党人。如果你所在的县只有一家乔氏商店,你可能是民主党人。
在一个社区中发现的连锁店可以告诉我们许多关于住在那里的人的情况。想想塔吉特和沃尔玛;你与哪个政党有联系?我想调查一下这种看法,所以我建立了一个选举模型,只基于你所在地区的连锁店数量。
我的假设是,连锁店的总数将与民主投票的增加相关,因为连锁店在城市地区更频繁。此外,这些品牌(将在本文后面介绍)表明共和党或民主党选民倾向于某一特定党派。
我的选举数据
为了研究这个问题,我决定利用 2018 年中期选举的选举结果建立一个分类模型。
这个项目的选举数据来自麻省理工学院选举实验室的杰出人士。我用政治边界文件(geojson)和来自data.gov的其他县信息补充了县信息,以便我可以使用 Plotly 创建地图。
我选择看县级数据。美国有 3000 多个县,我觉得这足以建立一个强大的机器学习模型,而不是查看州或国会选区的数据。我根据所有政党候选人(包括当地和全国)的总票数将每个县指定为民主党或共和党。不幸的是,阿拉斯加没有包括在我的选举数据中(我向阿拉斯加的行政区道歉)。
关于美国各县
在美国,大多数州被划分为政治和行政区,称为县。美国 3000 多个县中的大部分都是共和党的,这使得我的数据集一开始就有偏差。民主国家大约有 600 个,通常集中在大城市及其周边。
虽然民主县只占总县数的 20%,但美国近 60%的人口居住在其中。这也是我们在这个项目中发现大多数零售点的地方。
连锁店数据
在做了一些关于品牌政治的研究后,我发现已经有很多关于这个主题的文章了,我推荐看看其中的一些( NBC 、 Time 、 Washington Post 和 The New York Times )。
我根据研究中发现的信息选择了 20 个特征(零售连锁店),还有一些是出于我自己的好奇。我调查的商店如下图所示(最终模型中未使用的功能显示为灰色)。
为我的项目选择的功能
所有功能都是全国连锁,已经扩展到几乎或所有的美国。根据我的研究,我的目标是在感知的共和党和民主党倾向商店之间取得平衡。
现在我所需要的是每家商店的位置,我可以认真地开始这个项目了。有些数据很容易从 Kaggle 和类似的网站上获得,但是对于许多连锁商店来说,我不得不求助于创造性的和合乎道德的网络搜集来编辑位置数据。这部分花了我比我愿意承认更多的时间;网络抓取有时是一项具有挑战性的运动。
总之,我从 20 家连锁店收集了超过 45,000 家店铺的经纬度信息。使用我从 data.gov 和 Python 的 Shapely 库中获得的形状文件,我能够确定每个商店的正确县,并编译一个包含美国每个县的每个连锁店数量的数据集。然后,我添加了选举数据,以确定这些县在 2018 年的投票方式。
在下面的图表中,我们可以看到我选择的所有品牌,以及它们大多数商店的所在地。
每个连锁店的红/蓝分布
初步测绘
首先,我在 choropleth 地图上绘制了 2018 年选举的结果。不出所料,民主党(蓝色)的县主要集中在人口集中的地方,尤其是沿两岸。蓝点点缀着美国中部的共和党红色海洋,但大多数大城市呈现出一片蓝色。
美国中期选举(2018 年)
我还绘制了 choropleth 地图,显示了所有县的每个连锁店的密度。下面两幅图显示了商店分布的极端情况。超过 93%的全食超市位于主要人口中心的民主县。此外,像库克县(芝加哥)这样的大都市地区拥有美国 500 家全食超市中的 15 家。洛杉矶县有 26 个。
全食超市购物地图
相比之下,1900 年拖拉机供应公司的位置似乎一直覆盖整个农村地区,只有最低限度的渗透到城市市场。如果你从未听说过或去过拖拉机供应公司的商店,很可能你住在一个大城市地区。芝加哥的库克县没有一家拖拉机供应公司的商店,而人口 1000 万的洛杉矶县只有一家。——相比之下,内布拉斯加州林肯市(人口 33 万)有三个。
拖拉机供应 Choropleth
在城市和农村地区代表过多或不足的某些连锁店。由于我们的政治分歧至少部分归因于这种城乡分歧,这些特征应该对我们的模型有用。
我们的模型
为了简化模型并考虑到每个县不同的物理和人口规模,我计算了每个县单位面积的商店数量。该模型不是基于商店的数量,而是每平方英里的商店数量。这使得我的数据是连续的,并且更容易建模。当你向西看时,这也是一些相当大的县的原因。(类似的方法是计算每个人口的商店数量)
模型一览:
- 随机森林(基于树的算法)
- 使用 Boruta Python 库算法选择的 10 个要素
- 加权以考虑红/蓝县的不平衡
- 调整以达到最大的准确性
- 使用 0.25 的测试/训练分割
最终的模型达到了 85.7%的准确率。
特征重要性
最重要的功能如下所示。当查看随机森林模型中的单棵树时,我确定了特征的方向(这个特征更多地指示红色还是蓝色状态?).如果更多商店的存在有助于区分一个县是共和党的,它们周围有一个红框(蓝色代表民主党)。
前四个特征是用于识别民主县的特征。最重要的“共和党”特色是沃尔玛,最重要的“民主”特色是星巴克。一般来说,商店越多,功能越有利于模型。
我们的模型重视民主党的“高端”品牌(星巴克、Trader Joe’s 和 Whole Foods),以及共和党的“价值”品牌(Dollar Tree、沃尔玛、拖拉机供应公司)。
混淆矩阵
当使用测试数据(n=776)进行预测时,我们看到该模型有点倾向于预测共和党。92%的共和党县被正确识别,相比之下,民主党县只有 52%。民主国家占少数,因此我们预计这将是该模型更困难的任务。
我最近通过电子邮件收到了以下问题:嗨,杰森,问个小问题。一个阶层失衡的案例:90 例…
machinelearningmastery.com](https://machinelearningmastery.com/dont-use-random-guessing-as-your-baseline-classifier/)
上面的链接给出了一个很好的方法来简单地衡量你的模型的有效性。如果我们以 81%到 19%的比率(Dem/GOP 的实际百分比)随机猜测每个县的政治,我们只能达到 69%的准确性。我们的模型通过机器学习获得了额外的 17%。
模型预测法
我们的模型正确预测了几乎 86%的县。让我们看看地图,看看我们错过了什么,并确定我们的模型中的弱点。
我们的模型预测:
2018 年中期选举的模型预测
实际结果:
模型遗漏的地方:
我们模型的不正确预测
我们的地图上有清晰的区域,这个模型漏掉了大量的县。一些领域非常突出:
- 在新英格兰地区,特别是佛蒙特州和新罕布什尔州,民主党人的表现明显优于该模式。这些州的农村地区倾向于民主党,这与假定农村地区是共和党的模式相反。
[## 欢迎来到新罕布什尔州,在这里农村地区投蓝色票,郊区投红色票,而…
如果民主党人依靠多元化的大城市在全国其他地方取得胜利,他们将一无所获…
www.bostonglobe.com](https://www.bostonglobe.com/2020/02/06/opinion/yes-newhampshiresowhite-also-newhampshiresoweird/)
- 新墨西哥州是个例外。这是白人选民占少数的三个州之一。新墨西哥州的拉美裔选民近年来对民主党表现出了热情的支持。
- 密西西比州西部是美国非洲裔选民最集中的地区之一,他们压倒性地(90%)支持民主党。阿拉巴马州的部分地区也存在类似的人口统计数据,这可能是这些失误的原因。
- 该模型还忽略了太平洋西北部和南部腹地的一些县,在这些地方,保守主义和人口统计学在投票习惯中发挥了巨大作用。
- 其他重大失误发生在摇摆州佛罗里达和威斯康星,这两个州的政治倾向是分裂和不稳定的。
《华盛顿邮报》的这篇文章很好地报道了 2018 年大选前各州的政治。
政治分析根据包括数据在内的证据对新闻进行严密解读,并预测如何…
www.washingtonpost.com](https://www.washingtonpost.com/graphics/2020/politics/united-states-political-geography/)
结论
在过去的几年里,品牌比以往任何时候都更加政治化,每天都有新的公司决定试水,让他们的政治理念为人所知。看看像耐克、本杰里、业余爱好游说团、福乐鸡快餐店和巴塔哥尼亚这样外表政治化的公司就知道了。我们似乎无法将购物和政治分开,而且人们认为,随着政治分歧的加剧,这种商店和品牌的二元分类很可能会加强。像这样的模型可能会随着时间的推移而改进。
该模型和方法的优势在于独立于任何普查或投票。这是一种“基于基本面”的方法。这些数据也很容易获得,并且比人口普查数据更新得更频繁,这使得一个政党能够灵活地应对自然灾害、气候迁移和快速变化的经济带来的人口变化。资本主义,随着商业的开放和关闭,对市场变化做出快速反应,一个政党可以利用这一点。
在 85.7%的情况下,该模型可以帮助政党确定他们在哪些领域的表现低于预测模型。这些确定的地区可能需要干预和投资,因为它们是潜在的危险地区。
后续步骤
这种方法可以通过以下方法进行改进:
- 基于区域或更同质的投票区(中西部、亚利桑那州/新墨西哥州、加利福尼亚州、西北太平洋地区、佛罗里达州等)建立几个较小的目标模型。)
- 使用类似的方法评估州级、国会选区级或辖区级的数据。国会选区级别的初步模型预测美国众议院选举的准确率超过 80%。
- 针对我们模型的缺点添加或更改功能。找到在错过的县流行的业务。
- 建立模型专门识别紫色区域,在那里进一步投资可能产生政治席位。
该项目的代码可以在下面的回购中找到。感谢阅读!
[## 科学研究/DSC-mod-3-项目-v2-1-在线-ds-sp-000
零售连锁选择模型回购。github.com](https://github.com/sciencelee/dsc-mod-3-project-v2-1-online-ds-sp-000)
你收集的数据正确吗?
为什么从算法(而不是数据)入手会导致灾难
对于寻求通过数据回答问题、解决问题和做出决策的公司来说,这是前所未有的好时机。收集和存储数据的技术成本正在下降,分析数据的工具甚至更便宜(或免费)。那么是什么仍然导致分析计划失败呢?
任何分析项目最困难的部分不是技术、数学或业务目标,而是将技术和数学与业务目标结合起来。通常,这是因为没有正确的数据来解决手头的特定业务目标。这不是一个新问题,它需要更多的批判性思维而不是专业技能。
第二次世界大战期间,美国海军担心飞越德国上空的轰炸机的耐久性。他们决定对被击中并返回基地的飞机进行研究,并确定轰炸机遭受损坏最严重的地方(右翼、左翼、尾部等)。).他们的想法是在最容易受伤的地方增加额外的装甲。
亚伯拉罕·瓦尔德
一位名叫亚伯拉罕·瓦尔德的统计学家介入协助海军进行研究,并发现他们的方法中有一个关键缺陷:他们没有被击落坠毁的飞机的数据!相反,他们只有返回基地的飞机(和飞行员)的数据。根据从炮火中幸存下来的人那里收集到的信息,给轰炸机配备额外的装甲是没有意义的。
在统计学中,这是一种形式的样本偏差,由缺乏正确解决手头问题的数据导致。如今,这种现象经常出现在数据和业务的交叉点上。“欺诈检测”是机器学习领域的一个热门话题,尽管大多数公司(可能除了大型银行和信用卡供应商)在其数据库中没有足够的欺诈观察数据来准确预测欺诈实例。更糟糕的是,他们甚至可能没有收集欺诈案例的数据。
这并不是说一家试图检测欺诈(或预测任何事情)的公司不能解决与他们拥有的数据相匹配的类似问题。关键是要有所需的专业知识和必要的手段来调整数据以符合业务目标,并开始收集与您想要解决的问题相关的数据。
原载于https://www.ketchbrookanalytics.com/
你是民主党人还是共和党人?让你的推文定义你…
当你在短短几秒钟内分析数百条推文,并自动获得话题、观点和情绪等信息时,感觉就像是魔法一样。
玛利亚·奥斯沃特在 Unsplash 上拍摄的照片
最近,我有一次关于政治和下一届 2020 年美国总统选举的谈话。引起我注意的是,人们对此的态度变得极端对立。他们开始说: “你听起来就像一个民主主义者!” 或 “你是反共和党的吗?” 。通过武力,你开始有理由捍卫自己的立场。所以我很快去做了一些在线测试,试图回答这个问题:“你是民主党人还是共和党人?”****
不幸的是,我没有被说服,所以我想找到一种新的方式,谢天谢地,我们有了 Twitter 的世界作为我们的数据集!
在这项研究中,我将尝试寻找以下问题的答案:
- 民主党人和共和党人在他们的推特上使用最多的词是什么?
- 谁得到的转发和喜欢更多?
- 我们可以对提取的推文进行情感分析吗?
- 我们能否使用机器学习算法来训练一个模型,并确定这条推文是由民主党还是共和党候选人写的?
- 一个神经网络(RNN) 会帮我决定我的推特账号更民主党/共和党吗?
数据收集:
首先,我们需要弄清楚哪些推特账户是民主党或共和党。推特上的国会议员目录TweetCongress.org,列出了网站上的 101 名共和党人和 57 名民主党人。每个政党大多由几个推特超级明星支撑着(像民主党 参议员克莱尔·麦卡斯基尔 和共和党 参议员约翰·麦凯恩 ),但是国会共和党总体上有更多的追随者和更频繁的推特。
另一个选择是直接查看 Twitter 上的 @TheDemocrats 和 @HouseGOP 成员列表。在浏览列表之后,您可以看到我们可以提取所有的全名和用户名类元素。我们还将保存头像图像的 URL,供以后使用。
我将使用 美汤 提取手柄。这是一个用于解析 HTML 和 XML 文档的 Python 库。当 HTML 或 XML 文档格式不良时(例如,如果它缺少结束标签), Beautiful Soup 提供了一种基于启发式的方法,以便在不产生错误的情况下重建语法树。
提取句柄后,我将结果导出到**。csv** 文件,看起来像这样:
然后,我需要创建一个数据集,其中包含这些成员与 2018 年美国国会选举相关的推文。我收集了 2018 年 1 月 22 日和 2019 年 1 月 3 日J之间的推文从 Twitter API 使用 社交 Feed Manager 。有关收集日期、账户和查询中使用的标签,请参见每个收集的自述文件。
数据收集法
探索性数据分析(EDA):
该数据集包含与 2018 年美国国会选举相关的 86,460 条推文(共和党的 44392 ,民主党的 42068 )。我们可以说,在训练数据集中,民主党和共和党的比例大致相当。
我将从美国的民主党和共和党议员的推文开始快速探索。这个初始分析的主要目的是可视化他们两个使用的标签。****
********
这越来越有趣了。我们现在可以看到共和党党(红衣)吹捧他们的政策(例如 taxcutsandjobsact )。对于那些不太熟悉美国政治的人来说,共和党控制着总统职位和国会两院,因此能够相对不受限制地实施他们的议程。另一方面,对于民主党来说,我们看到了一些明显的痛苦(例如 goptaxscam )。
此外,我将探讨不同党派使用的词汇。这将通过清理 tweets,将它们解析为单词的向量,移除常见的停用词,通过计数聚合单词,并使用条形图绘制最频繁的结果来实现。停用词的选择有时很关键。我认为最好从*【word cloud】库中选择停用词*,因为它们包含了所有停用词的平均列表。******
比如民主党人发的推文中使用次数最多的就是【今天】 (3850 次)这个词。然后我们找到**【川普】** (2502 次)【美国】 (2053 次)。****
如果我们看一下有共和党观点的人的推文,这个词【今天】 (4883 次)再次位于第一位,**【税收】位于第二位,【伟大】位于第三位。**
我还将词频分为 5 类:
- 如果一个词的使用少于 50 ,它就在极低组。
- 如果在 50 和 200 之间使用,则处于低组。
- 如果在 200 和 750 之间使用,则属于中等组。
- 如果在 750 和 1500 之间使用,则在高组。
- 如果一个词的使用量大于 1500 ,它就在极高组。
用精心制作
解释:
我试图绘制一个矩阵,其中‘X’轴指的是共和党推文的词汇使用频率,而‘Y’轴指的是同一事物,但与民主党**有关。**
例如,单词“tax reform”被共和党人使用了 966 次,所以它被放在他们的高类别中。然而,民主党人只用了这个词 12 次。另一个例子是【枪】字。它在民主党推文中被使用了 876 次,在共和党推文中被使用了 117 次。
也没有词,当共和党人使用非常高,民主党人使用中等,低或非常低的水平。和民主党人一样。“今天”、“美国人”、“伟大的”、“房子”、“年”、“家庭”、“日子”和“感谢”这些词被民主党人和共和党人高度使用。
离差图:
我在数据集中选择了一些单词,以便绘制一个图表,显示单词在文本中的分布。这几个词分别是【投票】【民主】【自由】【美国】【美国人】【税收】【特朗普】【克林顿】**。**
民主党推文剧情
共和党推文剧情
情感分析
在这里,我将尝试使用不同的文本分类器将推文分类为有组织的团体或团体,此外还有情感分析以了解给定推文对给定主题是正面还是负面的谈论。
所以我开始将双方的推文集合转换成一个令牌计数矩阵,使用来自sk learn的 计数矢量器 函数。然后我应用 ML 算法进行分类:random forest,logistic regression, Multi-NB , 决策树 , AdaBoost****
之后,我试图确定每一方的态度或情绪,即它是积极的还是消极的还是中立的。所以我使用了著名的 Python 库text blob,它返回 2 个重要指标:
- 极性分数在 [-1.0,1.0】范围内浮动。它代表了一个句子所表达的情感。 1 表示正声明, -1 表示负声明。****
- 主观性在【0.0,1.0】范围内浮动,其中 0.0 非常客观****1.0非常主观**。它指的是个人的观点、情感或判断。******
********Democrat_Tweets :**
Sentiment(polarity=0.16538325109722254, subjectivity=0.4649093199451984)**Republican_Tweets:** Sentiment(polarity=0.19837398561739605, subjectivity=0.4590746992419168)******
简单神经网络分类
现在让我们尝试用一个简单的神经网络来回答最后一个问题“如果我的 Twitter 账号更民主党/共和党】。我将利用 Keras 深度学习库,为序列分类开发一个 LSTM 和卷积神经网络模型。****
让我们从导入该模型所需的类和函数开始,并将随机数生成器初始化为一个常量值(例如 7),以确保结果可以重现。
****然后,我们分割数据集,根据政党变量分层,以便在整个数据集中分别具有大约相似比例的民主党 & 共和党培训&测试 集合。该设置将基于那些 推特手柄 ,因为我们不希望任何单独的推特出现在两个 **训练&设置中。
实际上,就单词而言,tweets 不具有相同的长度,但是在 Keras 中执行计算需要相同长度的向量。这就是为什么我们需要截断和填充输入 tweets,以便它们在建模时长度相同。该模型将了解到零值不携带任何信息。
我们现在可以定义、编译和拟合我们的 LSTM 模型:
- 第一层是嵌入的层,它使用 32 个长度向量来表示每个单词。
- 我们在嵌入层之后添加一个一维 CNN 和一个最大池层,然后将合并后的特征提供给 LSTM 。
- 下一层是 LSTM 层,带有 100 记忆单元(智能神经元)。
- 最后,因为这是一个分类问题,我们使用一个具有单个神经元的密集输出层和一个 sigmoid 激活函数来为两个类别民主党/共和党做出 0 或 1 预测。
我使用 epochs=10 和 batch_size=64 来拟合模型。一旦拟合完成,我们就可以评估模型在看不见的推文上的表现:
我得到了一个74.52%的整体准确率。一条推文被错误分类并不罕见,所以也许我们应该考虑每个人推文的整体分类。
通过这种调整,我们得到了 ~93% 的准确度。
结论:
文本分类不仅有趣,而且是从非结构化数据中提取价值的强大工具。 Twitter 是一个非常受欢迎的社交媒体平台,有数百万用户使用,发布的推文有时可以用来了解公众对某个问题的看法。当你在短短几秒钟内分析数百条推文,并自动获得话题、观点、情绪等信息时,感觉就像变魔术一样
经过这次研究,我发现我们可以对人们进行分类,看看他们是民主党还是共和党,结果在某种程度上是准确的。如果情感分析算法得到改进,我们可以用它们来预测今年的下一次总统选举结果。
尽管如此,开发出来的模型仍然有 2 的主要障碍:
- 讽刺是所有情感分析算法的另一个弱点,我们的模型在这个阶段也无法检测到讽刺。****
- 由于推文可以由任何人发布,并且可能包含拼写&语法错误,拼写错误的关键词可能会被我们的算法错误地分析。
笔记本:
permalink dissolve GitHub 是 4000 多万开发人员的家园,他们一起工作来托管和审查代码,管理…
github.com](https://github.com/chouhbik/Sentiment-Analysis-of-Tweets/blob/master/Tweets%20Analysis%20DemvsRep.ipynb)
参考资料:
- **TweetCongress.org:**http://www.tweetcongress.org/tweeters
- **美汤:**https://www.crummy.com/software/BeautifulSoup/bs4/doc
- 社交供稿经理:https://gwu-libraries.github.io/sfm-ui/
- **Scikit-learn:**https://scikit-learn.org/stable/index.html
如果你设法来到这里,恭喜你。感谢阅读,我希望你喜欢它。关于机器学习的个人接触或讨论,请随时在 LinkedIn 上联系我,别忘了在 GitHub 和 Medium 上关注我。
在 GitHub 上注册你自己的个人资料,这是托管代码、管理项目和构建软件的最佳地方…
github.com](https://github.com/chouhbik)****
以人为中心的数据解决方案设计方法
你是在为人民设计吗?
本·斯威特在 Unsplash 上的照片
2004 年,美国银行聘请设计公司 IDEO 帮助他们吸引更多的客户。当 IDEO 开始参与时,他们做了一些意想不到的事情,他们没有走进美国银行的办公室,而是去实地观察人们如何处理金钱,并记录他们的消费习惯。他们发现,人们将支出四舍五入是因为 1)这更容易计算,2)他们感到安全,因为这增加了储蓄的缓冲。然而,人们仍然在努力存钱。
这种见解启发 IDEO 设计了“保持变化”计划。每次顾客用美国银行的借记卡进行交易时,购买的东西都会被取整,零钱就会进入储蓄账户。每次存入零钱时,银行也会在储蓄账户中存入一部分。通过这个项目节省了 20 多亿美元。统计数据显示,自 2005 年 9 月推出以来,已有 1230 多万客户注册了该计划。那么,IDEO 做了什么?
IDEO 没有试图改变银行内部的战略,或者根据假设设计不同的营销策略来吸引客户,而是从客户的角度来看待问题。他们观察并接触客户,了解他们的习惯,感受他们的痛苦,并利用这些知识来设计一个非常规的解决方案。这种设计解决方案的方法被称为以人为中心的设计。
这种设计方法有什么好处?
以人为中心的设计方法将人置于中心,使设计师能够更接近他们为之设计的人,了解他们所描述的条件背后的实际问题,产生想法并快速构建原型以进行测试、学习和重新定义。
以人为中心的设计过程( IDEO )
它鼓励设计师实践同理心
观察阶段鼓励设计师放下所有先入为主的观念,与用户同理心——感受他们的体验,知道他们所做事情背后的动机。当设计者从用户的角度看问题,而不偏向于预先确定的解决方案时,他们可以找到用户描述的问题的根源。这有助于针对根本原因,而不是治疗症状。
它在每个阶段都把人联系起来。设计师在观察阶段与用户密切合作,他们在构思阶段从用户那里获得关于草图解决方案概念的反馈,并在实施阶段让用户参与测试和体验真正的解决方案。通过将人们包括在观察-构思-实现阶段,这种方法将所有权给予他们,并让他们对影响他们的转换有发言权。
培养信任和信心 在每个阶段都让用户参与进来,听取他们的反馈并减少所有顾虑,培养组织对设计师的信任。设计师对解决方案更有信心,因为这些解决方案是基于不断的反馈反复构建和测试的。它确保解决方案在组织中被接受,并且人们会使用它们。
它非常适合现代技术和实践 像云这样的现代技术平台允许企业动态构建资源,消除管理和维护资源的开销,从而实现快速原型开发。成本是基于使用的,所以实验可能非常便宜,这鼓励了迭代。敏捷方法可以应用于产品开发,它的建立是为了支持变化并提供比传统方法更大的灵活性。这使得设计人员可以快速、持续地发布变更。
为什么这种方法在设计数据解决方案时至关重要?
2019 年进行的一项调查显示,在 77.1%的公司中,采用大数据和人工智能解决方案仍然是一项重大挑战,高管们表示,这些挑战中有 95.0%源于文化变化(人员和流程),只有 5.0%与技术有关。
众所周知的事实是,业务战略和数据战略之间的不一致导致了几个项目的失败,而业务、数据和 It 之间缺乏沟通导致了用户想要的和他们得到的之间的巨大差距。造成这种情况的主要因素之一是 解决方案不能解决用户面临的问题 。
除非将数据放入环境中,否则它对业务没有任何意义。设计师必须通过与业务及其人员密切合作来理解这种背景。许多设计决策是基于过去的经验 或应用以前项目的模板做出的,这降低了解决方案在不同环境中工作的机会。此外,用预先确定的解决方案来解决问题会分散设计者对实际问题的注意力,将他们的注意力转移到产品或服务上。
数据解决方案只有当设计者超越印刷的要求,发现没有陈述的内容时才会成功。 设计师应该在人员、流程和技术之间建立联系——这要求他们放眼全局,思考的不仅仅是分类、整合和存储数据。设计师必须赋予每个用户(以及整个组织)知识和洞察力,帮助他们做出正确的商业决策。
数据解决方案设计师如何应用这种方法?
在实践中,数据解决方案项目有不同的形式和规模,它们有自己的动力,并按照一套通常与特定组织(或部门)相一致的既定原则运行。因此,将这种方法应用于每个项目可能会很棘手。然而,有一些原则,设计师可以在任何环境下遵循,这将有助于以人为本的方式形成解决方案。
- 解决问题时,忘掉以前的项目。用新鲜的镜头看问题。
- 与用户产生共鸣 —了解他们描述的是原因还是症状。
- ****在了解根本原因之前,不要提出解决方案。在理解问题之前谈论解决方案会在设计思维过程中制造界限,甚至会分散用户讲述他们故事的注意力。
- 使用视点(POV)方法生成有意义且可行的问题陈述。
【用户…】需要【需要…】因为【洞察…】
例子:
—数据科学家/s(用户)需要一个沙箱因为他们要运行机器学习实验。
—数据分析师(用户)每天早上都需要数据仓库中的最新数据,因为他们向外部客户发送每日报告。** - 提出“我们如何可能”的问题来产生想法。如果你发现用户不信任数据,比如说“我们如何培养用户对数据的信任”,产生尽可能多的想法,而不是建议像“实施数据质量工具”这样的解决方案,或者排列产品。**
- 将复杂的问题分解成更小的、可管理的部分。分析每个部分,构思并将不同的想法综合成可能的解决方案。
- 涉及用户。在构建解决方案之前,听取他们对不同概念的反馈。这可以节省时间。
- 构建、测量、学习Eric Ries 提出了精益创业方法论中的构建-测量-学习概念。它指出“创业公司的基本活动是将想法转化为产品,衡量客户的反应,然后学习是转向还是坚持。”同样的概念也适用于此。小规模构建,向用户寻求反馈,学习并重新定义,如果需要的话。
记住更大的图景
数据解决方案项目通常是企业级数据策略的结果。因此,在设计底层解决方案的同时,设计师也应该记住更大的图景。应用治理方法来审查与业务战略的一致性,并确保较小的解决方案能够很好地解决企业规模的数据管理难题,这一点很重要。
如果目的是 “为人民而设计”, 关于数据和人工智能解决方案采用的令人担忧的统计数据将朝着有利于成功实施的方向变化,为企业创造价值,并塑造一个更好的连接组织。
点击阅读更多关于以人为中心的设计。点击阅读美国银行的故事和更多。
连接上LinkedIn。**
你是否丢弃了太多相关的特性?
对当前方法的分析和建议的解决方案
卡拉·里维拉在 Unsplash 上的照片
更新:本文描述的更新后的 Python 关联函数可以在 PYPI 上的 exploretransform 包中找到。
总结
一些常用的相关滤波方法倾向于丢弃比所需更多的特征。随着数据集变得越来越大,并且随着更多的成对相关性超过特定阈值,这个问题变得更加严重。如果我们丢弃了不必要的变量,那么可用的信息就会减少,从而可能导致模型性能不佳。在本文中,我将展示当前方法的缺点,并提出一个可能的解决方案。
示例
让我们来看一个例子,当前的方法是如何删除本应保留在数据集中的要素的。我们将使用波士顿住房修订数据集,并用 R 和 Python 展示示例。
R: 下面的代码使用 caret 包中的 findCorrelation()函数来确定应该删除哪些列。
该功能确定[ 'indus ‘,’ nox ‘。lstat ‘,’ age ‘,’ dis’ ]应根据 0.6 的相关临界值删除。
Python : Python 没有 findCorrelation()这样的内置函数,所以我写了一个叫 corrX_orig()的函数。
我们得到与 R: drop 列[ 'indus ‘,’ nox ‘相同的结果。lstat ‘,‘年龄’,’ dis’ ]
不幸的是,两者都不正确。年龄一栏不应该被删除。我们来探究一下原因。
这些功能是如何工作的? 首先创建一个相关矩阵。这些数字代表所有数值变量组合的成对相关性。
波士顿住房的相关矩阵
然后,计算每个变量的平均相关性。这可以通过取每行或每列的平均值来实现,因为它们是相等的。
列和行的平均相关性
之后,矩阵的下三角和对角线被屏蔽。我们不需要下面的三角形,因为相同的信息存在于对角线的两边(见上面的矩阵)。我们不需要对角线,因为它代表变量和它们自身之间的相关性(它总是 1)。
下三角形和对角线被遮罩的矩阵
下面是伪代码来演示该函数的其余部分是如何工作的。我将 0.6 硬编码为本例的相关截止值:
现在到了你期待已久的部分。为什么功能不会老化?
下面的表格显示了我从原始函数中捕获的变量。还记得函数告诉我们去掉[ 'indus ‘,’ nox ‘吗。lstat ‘,’ age ‘,’ dis’ ]。所以我们手动从表中删除[ ‘indus ‘,’ nox ‘,’ lstat ‘,’ dis’ ]。正如您在表中看到的,没有其他变量可以与年龄进行比较来做出放弃决定。因此年龄不应该下降。
但是为什么会这样呢?
由于 R 和 python 函数的顺序性质,它们无法整体考虑所有变量的状态。删除变量的决定按顺序发生,并且是最终决定。
如何证明年龄属于数据集中?
我们可以从下拉列表中删除 age,得到[ indus,nox,dis,lstat],然后从原始数据集中删除这四列。当我们重新运行这个变量子集时,如果它应该被删除,我们将期望“age”作为输出。如果我们没有输出,这意味着“年龄”应该留在集合中。
如下图所示,这两个函数都没有输出。年龄应该留下来。
R
Python
简要回顾
在这个例子中,我们已经证明了常用的相关过滤函数夸大了删除列的数量。我的断言是,这是由于相关矩阵中的每个单元如何被评估和丢弃的顺序性质。
那么解决办法是什么呢?
-
根据原始逻辑记录变量状态
-
使用日志计算最后要删除的变量
-
原始:原始解决方案顺序地、立即地、最终地删除列。
-
修改后的:捕捉变量状态而不落入数据帧 res
2。修订后的:使用 res 计算要删除的变量
下面是 res 的输出,包含变量状态和变量定义
v1,v2 :被分析的行和列
v1,v2【T27。mean] :每个 v1 和 v2 的平均相关性
corr:v1 和 v2 的成对相关性
drop :初始 drop 决定下降(v1.mean,v2.mean)中的较高值
捕获的可变状态
修改了跌落计算中的(2)个步骤
我鼓励读者使用上面的捕获变量状态(res)图来手动完成下面的步骤。我还嵌入了 calcDrop()函数中每一步的代码。整个函数在这一节的末尾。
第一步: all_vars_corr = 所有超过相关临界值 0.6 的变量。因为我们的逻辑将捕获满足这个条件的变量,所以这将是上面 res 表中 v1 + v2 列中的唯一变量集。
结果 : [‘tax ‘,’ indus ‘,’ lstat ‘,’ rm ‘,’ zn ‘,’ age ‘,’ nox ‘,’ dis’]
第二步: poss_drop = 来自 drop 列的唯一变量。这些最终可能会也可能不会被放弃。
结果 : [‘indus ‘,’ lstat ‘,’ age ‘,’ nox ‘,’ dis’]
步骤 3: 保持 = 来自 v1 和 v2 的变量不在 poss_drop 中。本质上,任何不可能被删除的变量都将被保留
结果 : [‘zn ‘,’ tax ‘,’ rm’]
步骤 4: drop =来自 v1 和 v2 的变量出现在与 keep 相同的行中。如果我们知道要保留哪些变量,那么任何与这些变量配对的变量都将被丢弃。
结果 : [‘lstat ‘,’ nox ‘,’ dis ‘,’ indus’]
第五步 : poss_drop =从 poss_drop 中移除 drop 变量。我们正在删除我们知道会从可能性列表中删除的变量。
结果 : [‘年龄’]这是可能性中剩下的最后一个变量。
步骤 6 :将数据帧子集化,仅包含 v1 和 v2 中的 poss_drop 变量。我们想知道是否有任何理由降低年龄。
步骤 6 的结果
Step7 :删除 drop 变量在 v1 或 v2 中的行,存储 drop 列中的唯一变量。将结果存储在 more_drop 中。在这里,我们删除了包含要删除的变量的行。在这个较小的例子中,我们将得到一个空集,因为所有的行都包含我们知道要删除的变量。这是正确的结果:年龄不在这个集合中。
结果:设定()
第 8 步:添加更多 _drop 变量到 drop 并返回 drop
结果 : [‘lstat ‘,’ nox ‘,’ dis ‘,’ indus’]:手动完成 res 表上的步骤后,more_drop 不包含年龄,这正是我们所期望的
下面是完整的 calcDrop()函数:
简要回顾
在本例中,我们展示了一对基于相关性过滤变量的修正函数。这些函数的工作方式如下:
- corrX_new :记录基于原始逻辑的变量状态
- calcDrop :计算要删除的变量
最终示例
让我们使用来自 R 的 caret 包的(mdrr)数据集,它包含许多相关的特性。我们将在本节中使用新旧函数,因为我们已经介绍了一般的测试例程,所以不会太冗长。
R(原始)
findCorrelation()删除了 203 列
Python(原创)
corrX_orig()删除 203 列
Python(修订版)
有 9 列被识别为不应该从数据集中删除。我们用 R 和 Python 来确认一下。
R
当 python 所标识的列被添加回 R 中的主集中时,没有删除任何列。
Python
Python 中的结果是相同的。最初不应该删除列[‘DDI ‘,’ ZM1V ‘,’ X2v ‘,’ piPC05 ‘,’ VAR ‘,’ SPAN ‘,’ QYYe ‘,’ GMTIV ‘,’ X5sol’]。
结论
在本文中,我们已经展示了常用的相关滤波方法是如何不必要地丢弃特征的。我们已经展示了当数据变大时,问题会如何加剧。尽管我们没有给出证据,但可以合理地假设,不必要的特征移除会对模型性能产生负面影响
我们还提供了有效的解决方案,包括代码、解释和示例。在以后的文章中,我们将扩展这个解决方案,将目标相关性添加到过滤决策中。
请随时在 LinkedIn 上联系我。
你是否正确地评估了你的模型的性能?
你的模型真的 95%准确吗?
在 Unsplash 上 engin akyurt 拍摄的照片
作为一个机器学习者,你应该知道如何评估你的分类模型。您应该知道用于显示分类和预测得分的不同指标。
这个故事包括以下几点
- 准确性如何误导?
- 分类标准的构建模块
- 其他分类指标精度和召回率是什么?
- 如何轻松记住精确和回忆的区别?
- 如何在多类(2 类以上)分类上找到精度和召回率?
准确性是广泛用于评估分类模型预测的度量标准。
精确度是
在许多情况下,精确度指标都很有效,如狗与猫的分类、MNIST 数据集等。但是在一些情况下,准确性度量可能会欺骗您。
让我们分析一个这样的场景。
您已经建立了一个人工智能模型,通过实时更新来检测您的 web 服务器上的入侵和网络攻击。只要有攻击,你的模型就会启动警报。
我们的分类指标将使用四个构件。
1.真正
2。真负
3。误报
4。假阴性
这个分类场景有两个类。
1。正面类:网络攻击,警示用户。
2。负类:没有网络攻击,不提醒用户。
真阳性:模型预测为阳性类别,实际类别也为阳性。表示模型正确预测了正类。
真阴性:模型预测为阴性类别,实际类别也为阴性。表示模型正确预测了负类。
假阳性:模型预测为阳性类别而实际类别为阴性。表示模型错误地将负类预测为正类。
假阴性:模型预测为阴性类,而实际类为阳性。表示模型错误地将正类预测为负类。
注意:假阳性和假阴性容易混淆。所以要多关注他们。
准确(性)
如上所述,准确度是正确预测的总数除以预测的总数。
对于二元分类:
精确度是
精确度公式
我将以上述网络攻击模型为例,解释准确性有时会产生误导。
我们在 100 次观察中测试了该模型,以下是结果。
精确度为(2 + 95 ) / (2 + 1 + 2 + 95) = 0.97
97%的准确率。干得好。
在 100 起案件中,有 4 起网络攻击(TP 和 FN)和 96 起非网络攻击(FP 和 TN)。
在 96 次非网络攻击中,有 95 次被正确预测。但在 4 次网络攻击中,只有 2 次被正确识别。 不好。
如果一个模型总是预测每个样本都是非网络攻击,那么我们也会有 96%的准确率,这是误导。在这种情况下,模型没有学到任何东西。
这是一种不平衡数据集的情况,其中一个类(大量观察值)压倒了另一个类(少量观察值)。)
精确度和召回率
精确度和召回率是用于定义分类模型有效性的另外两个度量。
这两个术语很多时候会变得混淆,但是如果你记得下面的公式推导过程,它可能会帮助你记住这两个术语。
第一条对角线只包含真 值。
第二条对角线只包含 假 值。
第一行只包含正值,第二行只包含负值。
精确
公式为 真阳性除以第一行的和,即(真阳性+假阳性)
假阳性意味着实际值/类别为负,但预测值/类别为正。
Precision 告诉我们在所有阳性预测样本中有多少样本是实际阳性的。
回忆
公式为真阳性除以第一列,即(真阳性+假阴性)
假阴性意味着实际值/类为正,但模型预测它为负。
召回告诉我们在所有实际阳性样本中检测到多少个阳性样本。
多类分类中的精度和召回率
我们已经建立了一个水果分类模型,我们有 3 类/水果苹果,猕猴桃和橘子。
让我们找到每种水果的精确度和召回率。
苹果
精度= 5 / (5 + 2 + 1) = 0.625
精密——苹果
回忆= 5 / ( 5 + 3 + 1) = 0.56
召回—苹果公司
猕猴桃
精度= 6 / ( 3 + 6 + 1) = 0.6
精密——猕猴桃
回忆= 6 / ( 6 + 2 + 2) = 0.6
回忆—猕猴桃
柑橘
精度= 7 / ( 1 + 2 + 7 ) = 0.7
精确—橙色
回忆= 7 / ( 1 + 1 + 7 ) = 0.77
召回—橙色
看看我的其他故事。
感谢您的阅读。继续学习!
错误使用“实验”这个词,你是否有罪?
谈论因果的三个要求
电影《公主新娘》的模板。
*“实验”*是一个被滥用的词。它有多重含义,所以你必须仔细听上下文。这个词是随便用的吗,小孩子用的方式?还是指在成年人的对话中回答有关因果关系的问题的科学黄金标准?
就像“树皮”一样,“实验”有多重含义。与“树皮”不同,混淆它们会产生危险的后果。
滥用(语义)关系
当科学家使用这个词时,它指的是理解事物本质的圣杯。难怪你想通过告诉每个人你也“做了一个实验”来给他们留下深刻印象。令人印象深刻!实验是唯一合法的工具,它给了你在礼貌谈话中使用*“因为”*这个词的许可。
实验允许你谈论什么导致了什么。
想想一个科学家在看到你写了“实验”这个词的文件时的情绪——保持我们的小心脏!我们要打开生日礼物了!我们要去看看什么导致什么!!!我们太激动了!
当我们发现你所谓的“实验”就是这个时,你能想象我们有多么失望吗?
“让我们看看会发生什么。”
图片修改自维基共享。
你伤了我的心。
作为一名统计学家,我被训练对术语保持精确,但当别人错误地使用他们的话时,我也相当放松。只要没有危险的后果,而且我们或多或少相互理解,我不介意。
这就是为什么我想借此机会把我所有的优惠券花在这个词上:实验。滥用它会导致致命的后果。(尤其是在新冠肺炎的时代。)
安全单词
如果你把*“让我们看看会发生什么”**“实验”*叫做“让我们看看会发生什么”,并且你已经超过 10 岁了,请把你文档中的这个词替换成别的词。
这个怎么样?
原创模因模板:来源。
“混乱。”或者,如果这太苛刻的话,我给你提供了*“让我们看看会发生什么”*的七个同义词,就科学而言,它们远没有那么沉重。它们是安全词,从某种意义上说,如果你说它们而不是 T2 实验 T3,你的 T4 统计学家 T5 就会停止伤害你。
如果“实验设计”的意思只是“让我们看看会发生什么”,为什么专业人士会把它放在简历上呢?
前三个是*学习 *,调查 ,分析——你可以用那些做任何事情。当有疑问时,就把一切都称为“学习”
“学习”这个词可以指任何古老的事物——你可以随意使用这个词。
如果要稍微行话起来,的专业术语是观察研究*** 。*****
你也可以称你所做的为试运行或试用,如果你不介意暗示你打算以后回来做一些设计得更严谨的东西。****
尽量不要点燃你随便调查的东西。
最后,“让我们看看会发生什么”的第七个词是…
……”发射!
如果你想像孩子一样用这个词来指代一个试探性的程序,那么请不要在讨论商业、科学或政策等成人问题的人面前这样做。对他们来说,实验是一种可靠的、精心设计的、有控制的尝试,以了解什么导致什么。他们在讨论诸如“这种疫苗真的有效吗?”这样的问题时会提到实验误解可能会造成巨大损失的问题。如果你不确定你是否在处理一个真实的实验,避免这个词。
什么是实验?
什么是科学意义上的实验,为什么它带有合法化的含义?
通过主动控制(并消除)替代解释,实验是进行因果推理的最佳科学工具。如果您要在数据的上下文中使用该词,那么请确保以下所有组件都存在:
- 应用不同的处理
- 随机分配的治疗
- 科学假设得到验证(见我的解释这里
假设
一个假设不足以让一项研究成为一项实验。例如,我可能有零假设成年人的真实平均身高超过 3 米,然后我可以收集数据,这将使我得出结论,这个零假设看起来很可笑。我将只剩下科学理论:一个 10 英尺高的巨人将超过人类成年人的平均水平。耶,科学!附近没有任何实验!
一个理论就是一个假设长大后变成的样子。
顺便说一下,你注意到我在那里使用了“理论”这个词吗?是的,理论是科学能做出的最好的东西。就是一个假设长大后变成的样子。(人们混淆了这两者,认为理论不如假设。它不是。)
原图来自 xkcd 。
我没有说“科学事实”,因为这是表明你不知道科学如何运作的一种快捷方式。科学家不崇拜信息,他们只愿意抓住理论不放,直到更好的理论出现,那时他们会像扔烫手山芋一样扔掉旧理论。与此同时,公众在接下来的几年里虔诚地继续在它身上烧钱,因为科学
但是让我们回到正题。一个假设不足以让某件事成为一个实验,但是你应该有一个…否则你将不知道如何应用治疗。
不同的治疗
实验最特别的地方在于,我们不再只是被动地观察数据。相反,我们将把我们的意志强加于现实!Bwahahaha—
总之。
要做一个实验,我们必须对宇宙的不同部分做出不同的改变。我们做的各种事情被称为治疗。(即使实验与医学无关。)我们不做任何额外工作的治疗称为控制。我们假装做某事而实际上什么也没做的对照被称为安慰剂。**
随机分配
如果在我们开始之前,实验单元(对象或受害者,呃,我的意思是参与者)之间有任何变化,那么这不是一个真正的实验,除非这些单元被随机分配到治疗组。
随机化加上足够大的样本量是使实验成为因果推断有效工具的秘方。**
相关性不是因果关系
如果我们有了这三个组成部分,我们就真正有了一个实验。有牙齿的那种。我们能够谈论什么导致什么…甚至在不确定的情况下!这太神奇了。没有实验,你所拥有的只是相关性。相关性是一种很好的表达方式“两种模式似乎在一起移动,但是如果我们用这个来得出一个导致另一个的结论,我们会被嘲笑。”**
例如,如果一项观察研究发现喝红酒的人更长寿,那只是一种相关性。没有人会随意给一些人强行灌酒,而让其他人远离。可能是因为其他原因,更健康/更富有/更法国化的人活得更久,而且碰巧也喝更多的红酒。没有实验,没有证据表明红酒会让你更健康。
虽然这些事情高度相关,但我希望你能和我一起怀疑这两者互不因果。更多关于虚假相关性的有趣内容,请查看我发现这个例子的有趣网站。
实验为什么有效?
如果你有兴趣看到一个实验的运行,以理解为什么它们作为因果推论的工具,看看你能做的最简单的实验之一背后的逻辑:A/B 测试。
随机处理是使实验成功的秘方。
如果你想让我向你解释一下 A/B 测试,请阅读我的文章A/B 测试是如何工作的?
致命的错误
当没有太多利害关系时,漂亮的观点是好的,但在一些情况下,不做实验就下结论是危险的。
如果没有真正的实验,对任何人用“因为”这个词来解释复杂现象之间的联系要持非常怀疑的态度。那个人真正想说的是,“我有一个自己认为合理的观点,但我并没有真正做足功课去排除其他的解释。 我喜欢我的故事 而且我在坚持。”**
五个例子(众多例子中!)在这里,我建议你在下结论之前要求进行一次真正的实验:
- 这种疫苗会导致人在接触病毒时不生病吗?
- 这种最新的节食和健身时尚会带来你所期望的任何改善吗?
- 这个 ML/AI 系统是否导致 改善结果?
- 这种开放式办公室会让的员工更有效率吗?
- 这项政策会给公民带来更好的条件吗?
看一下最后一项,你会想起有时候做实验太难/太贵/太不道德了。当然,有时候我们买不起好东西(比如使用单词的许可证,“因为”而不是“我希望”)。
没有实验,我们的行动是基于希望而不是证据。
如果生活如此不公平,以至于你不能做实验,这并不意味着你有资格跳到假装你做了实验的那一部分。相反,承认你在黑暗中盲目地四处摸索,并且要格外小心。
感谢阅读!喜欢作者?
如果要说谢谢,我很欣赏分享和转发。如果你渴望阅读更多我的作品,这篇文章中的大部分链接会带你去我的其他思考。
如果你在这里玩得开心,并且你正在寻找一个为初学者和专家设计的有趣的应用人工智能课程,这里有一个我为你制作的娱乐课程:
在这里欣赏整个课程播放列表:bit.ly/machinefriend
脚注
*** 因果推断是统计学的一个子领域,它试图在没有实验的情况下得出因果关系的结论。请注意,要让这些方法有效,你必须愿意接受堆积如山的假设,所以不是每个人都相信它们。他们也倾向于非常依赖于*“我们想到了一切”这种想法,考虑到我们这个物种美丽的易错性,是相当牵强的。在大样本中利用随机性的精心设计的实验更有说服力。*
*** 总有一天,我会写关于功耗分析和如何设计实验的文章,但与此同时,你可以在我的其他文章[1&[2]中找到定义。*
与凯西·科兹尔科夫联系
让我们做朋友吧!你可以在 Twitter 、 YouTube 和 LinkedIn 上找到我。有兴趣让我在你的活动上发言吗?使用表格取得联系。
你生活在一个快乐的国家吗?下面就用 Power BI 来了解一下吧。
采用微软 Power BI 的数据科学
使用微软商务智能分析世界幸福报告的逐步指南
准备好一个关于世界幸福的数据分析仪表板了吗?我将向您展示如何分析幸福报告这个词,并使用 Power BI 可视化它,而无需任何代码。
但首先对《世界幸福报告》做一个小小的介绍:
《T4 世界幸福报告》是联合国可持续发展解决方案网络的年度出版物。它包含了一些文章,以及根据受访者对他们自己生活的评价而进行的国民幸福度排名。
——维基百科
如果你想了解更多关于这份报告的信息,有一个官方网站可以给你提供大量的见解。
获取数据
我们使用的是 2017 年世界幸福报告的数据。csv 格式。虽然有更新的数据可用,但这一个远未过时,而且确实有良好的结构和完整的数据。
您可以下载。来自我的 Github 库的 csv。如果你不熟悉 Github 和 git,不要担心,有一个下载选项。点击克隆或下载并选择下载 ZIP 。把数据提取到你电脑的某个地方。开始分析吧。
获得 Microsoft Power BI 桌面
微软商务智能桌面是免费下载的,可以在的 Windows 商店买到。那些喜欢独立安装程序而不是从 Windows 商店下载的人可以从这里下载。
世界幸福报告分析
现在,我们已经准备好接触分析和 Power BI 桌面。为此,我们遵循 提取、转换、加载 ( ETL ) 的一般过程。
提取数据
启动 Power BI Desktop,随意注册或点击注册表下方的已经拥有 Power BI 帐户链接。
在那里,您可以登录或创建一个 Power BI 帐户并免费试用。
现在从入门窗口点击获取数据,选择 Text/CSV 作为数据源。
找到之前下载过的 data-2017.csv 文件。
接下来,我们从数据类型检测下拉列表中选择不检测数据类型,并点击转换数据。
**为什么不自动检测数据类型?除此之外,我们将学习如何手动完成这一重要步骤,这是数据分析工具箱中的一项重要技能。
转换数据
现在我们已经从。csv 文件我们要转换它。
您可能已经发现,我们数据的第一行包含实际的标题(在数据分析中也称为特性)。为了使用第一行作为标题,我们通过点击命令功能区上的使用第一行作为标题来应用我们的第一个转换步骤。
注意第一行是如何被提升为数据标题的。
事实上,这个动作实际上应用了两个步骤:您可以在右侧的应用步骤面板中观察到这一点。除了提升头这一步,Power BI 试图(再次)推断每个特征的数据类型,没有做好我的案例。
为什么我会得到错误的数据类型? 数据类型的检测可能出错的原因有很多。最常见的是您正在使用的设备的区域设置。如果您的设备具有不同于英语(美国)或英语(英国)的区域设置,则值得在 Power BI 中更改区域设置以匹配您的数据。就我而言,我不得不从英语(瑞士)——这是一种非常不常见的环境——切换到英语(美国)。这很容易做到,你可以遵循这里的建议。
要撤销 Power BI 应用的更改类型步骤,只需点击它旁边的 X 图标。
我们在这里学习了一个非常重要的 Power BI 概念:您所做的所有转换都可以被视为一系列步骤,这些步骤一个接一个地应用于底层数据。这样,您可以保持原始数据不变(未修改),并动态地添加/删除转换步骤。记住这种行为,因为它使数据转换变得非常强大和灵活。
我能看到每个步骤对我的数据做了什么吗? 是的,你只需点击 应用步骤 面板中的一个步骤,就可以在你的变换步骤之间来回跳转。这样,您可以监控您的转换步骤实际上对数据做了什么。
现在是手工定义数据类型的时候了。选择总体快乐评分功能,并观察其当前数据类型。该特征应为数据类型十进制数,但目前被分配给数据类型文本。这由特征名称旁边的小 ABC 图标或数据类型控件上的值表示。
让我们通过点击数据类型控件并选择十进制数来改变它。
查看列中的数据如何变化(根据您的区域设置)以及 1.2 图标如何指示新的数据类型。
对数据中的每个特征重复此步骤,并根据下表将其设置为相应的功率 BI 数据类型。**
现在我们已经设置了正确的数据类型,我们可以继续并稍微清理一下数据。数据分析中的典型任务是检查缺失值,如空值、NaN 值或 n.a .值。
如果数据包含缺失值,Power BI 已经为您提供了一个很好的可视化指示。您可以在工作满意度功能上找到这样的指示。悬停指示器并点击移除空值从我们的数据中清除丢失的值。
我们的数据中有哪些缺失值? 没有关于北塞浦路斯和南苏丹的工作满意度数据,如 南 值所示。通过删除这些数据,我们删除了两个国家的完整条目。换句话说:这些国家不会出现在我们的分析中。**
作为我们的最后一步,点击关闭&应用**,并使用保存图标随意保存您的工作。**
既然我们已经转换和清理了我们的数据,我们准备好可视化它并回答我们的主要问题:你生活在一个快乐的国家吗?
可视化我们的数据
我们将想象出最幸福的 10 个国家和最不幸福的 10 个国家。此外,我们将使用 Power BI QnA visual 来回答有关我们数据的其他问题。
让我们点击可视化面板上的图标,添加一个堆积条形图可视化。
当视觉仍处于选中状态时,从字段面板中检查国家和幸福分数字段。这将添加国家作为轴值和幸福分数作为值**,给我们一个按**幸福分数排序的所有国家的视图。****
让我们把范围缩小到前 10 个国家。选择视觉,展开滤镜面板上的国家是(全部)滤镜,从滤镜类型下拉列表中选择前 N 名**。将其设置为前 10 位下显示项**项。****
**来多了?详情见下面截图。
最后,将快乐分数字段从字段面板拖放到过滤器的【按值 面板,然后点击应用过滤器。****
再次重复这些步骤,为最不快乐的国家添加一个第二视觉。这次你选择底部 10 而不是顶部 10 作为过滤器。**
相应地为你的两个画面设置标题。为此,选择视觉效果,点击格式图标,并将标题文本设置为最幸福的 10 个国家和最不幸福的 10 个国家。
要对结果进行升序排序,请单击图像右上角的小 … 图标。
作为最后一步,我们将地图和 QnA 视觉添加到我们的页面。对于地图**,像之前一样在字段面板中目视检查国家。**
我们已经完成了第一份数据报告的设计!您的最终视图应该类似于下面的屏幕。
你生活在一个快乐的国家吗?
我们来问问权力 BI QnA!我住在德国,所以我想知道我的国家的幸福排名。
点击进入询问一个关于你的数据的问题框,简单地说出类似德国的幸福排名。
这立刻给了我排名 #16 。因此,德国不在前 10 名之内,但它的排名相当不错。你的国家怎么样?
让我们将您的分析导出为 PDF 文件,与朋友或同事分享。转到文件并点击导出为 PDF** 。**
****恭喜你!您已经从一个. csv 文件中提取了数据,转换了数据,清理了数据,并最终可视化了数据,给出了对数据的见解,并回答了我们最初的问题。
就这样吧。
—塞巴斯蒂安
你在轨道上吗?—在没有代码的交互式路线图上传达您的战略主题。
微软 POWER 平台解决方案
一张图胜过千言万语,路线图也是如此。让我们用 Microsoft Power BI 和 Power Apps 构建一个
当谈到调整你的组织或项目团队时,没有什么比一个清晰的、视觉上吸引人的路线图更好的了。
所以,如果你想要这个仪表盘👇那么这个故事是给你的!
但是等等! 有问题……
…路线图通常是与您的团队和利益相关者合作的结果。虽然我们有一堆很好的工具来可视化东西,但我们没有一个工具可以即时处理数据。
有了微软 Power BI 和 Power Apps 的组合,我们可以自己构建这样一个解决方案。
最棒的是:不需要编码技能!
设置公共数据服务
首先,我们需要一个存储路线图数据的地方。通常,这会导致在另一台服务器上建立另一个数据库。
幸运的是,微软 Power 平台附带了一个叫做公共数据服务 (CDS)的东西,它可以让你安全地存储和管理你的业务应用程序所使用的数据。
我已经准备了一套示例路线图项目来帮助您开始,并将它们打包到一个中。csv 文件,可以从我的 Github 库下载。
使用 Power BI 和 Power Apps 构建路线图仪表盘-sebastianzolg/Roadmap-in-Power BI
github.com](https://github.com/sebastianzolg/roadmap-in-powerbi)
让我们开始在 CDS 中创建我们的路线图项目实体。确保你至少有一个微软电力应用和微软电力商务智能的试用账户。
在浏览器中打开电力应用,打开实体,点击获取数据。
有几种方法可以将数据载入光盘。我们选择文本/CSV 。
将产品路线图 Items.csv 从我的 Github 仓库上传到你的 OneDrive 或者将这个要点的 URL复制到文件路径文本框中,点击下一步。
检查数据是否正确加载,并点击下一步。
基于我们的样本数据,我们现在可以对我们的路线图项目实体进行建模。根据下面的截图对其建模,并确保您已经将所有的目标字段类型设置为文本、,除了描述字段,它应该保持为多行文本。
准备好之后,点击下一步。
我们可以选择定期刷新数据源中的数据,但目前我们坚持手动刷新。
点击创建,等待将您的数据载入 CD 的过程。
回到实体视图,我们可以搜索新创建的路线图项目实体,并确保它已被创建。
*就是这样!*我们的数据现在在云中,由 CDS 管理,我们可以在任何我们想要的业务应用程序中使用这些数据。
加载数据
现在我们已经将路线图数据保存在 CD 中,我们可以轻松地在 Power BI 中使用这些数据,以进行进一步的 ETL。
打开 Power BI 桌面,点击获取数据。
从可用数据源列表中选择 Power 平台并选择公共数据服务。点击连接继续。
现在我们必须输入公共数据服务的根 URL。这个是每个账户唯一的,所以你要先自己查一下。
在 Power Apps 门户中,转到设置(齿轮图标)>高级设置。
复制根 URL,如下图所示。这是您的 CD 的 URL。
回到 Power BI Desktop,将 URL 粘贴到服务器 Url 字段,然后单击确定。
可能会提示您使用您的帐户登录。成功签名后点击连接。
如果一切顺利,您可以在导航器中搜索路线图。请注意,名称前缀会有所不同,因为每个帐户都是唯一的。
勾选 RoadmapsItems 表格图标旁边的方框,点击加载。
添加时间线视觉效果
现在,我们已经从光盘中加载了数据,是时候可视化我们的路线图了。我们将使用 Power BI Marketplace 中的作为时间线自定义视觉效果。
点击可视化面板中的 … 图标,并选择从市场导入。
搜索作为时间线,点击添加。
将空的作为时间轴添加到我们的页面后,我们现在可以将必要的字段从 CDS 数据源拖放到数据面板。查看下面的屏幕截图,看哪个字段放在哪里。
为了使它在视觉上更吸引人,选择时间线视觉,点击格式图标并设置如下属性。
Appearance > Y-Axis label length: 0
Appearance > Element height: 22
Overlay text options > xxx_item: Center
Overlay text options > xxx_item: 14
Title: Off
结果是在你的 CDS 数据上建立了一个看起来相当不错的时间线。干得好!抓紧了!
添加一个 Power 应用程序来处理数据
我们已经有了最重要的可视化工具,所以现在是时候更进一步,通过允许直接从仪表板更改数据,使我们的仪表板真正具有交互性。我们通过在仪表板上添加一个 Power 应用程序来实现这一目标。
为此,从可视化面板点击 Power App 图标,并从字段面板检查 xxx_item 。最后,在 Power App visual 中点击新建**。**
这将在您的浏览器中启动 Power App 门户。点击确定确认该重定向。
新创建的 Power 应用程序已经包含了一个我们想要去掉的图库控件。点击图库控件旁边的 … 图标,并选择删除。这给了我们一块空白的画布和很多空间来完成我们自己的工作😎。
从控制功能区,点击表单>编辑。
现在我们在画布**、上有了一个空的编辑表单**,我们可以连接到与 Power BI 仪表板相同的 CDS 数据源。点击数据库图标,搜索路线图项目。你应该看到你的 CDS 实体被列出。单击它,它将作为数据源添加到您的应用程序中。
选中空的编辑表单,从数据源下拉列表中选择路线图项目。这将把编辑表单绑定到我们的数据源。
接下来,我们告诉编辑表单我们想要显示哪些字段并使其可供编辑。点击编辑字段链接打开字段面板。
点击 +添加字段,将所有必要的字段添加到编辑表单中。您可以使用拖拽&对字段进行重新排序。
**形态好看!**现在我们有了一个可以显示和编辑值的表单,我们需要一个按钮来写回对 CDS 数据源的更改。
从控制功能区添加一个按钮,双击它并将文本更改为保存。
选择新按钮时,从公式栏中选择 OnSelect 动作,并粘贴下面的公式。
SubmitForm(Form1);
PowerBIIntegration.Refresh();
该公式只是将更改写回 CDS 数据源,并刷新 Power BI 连接。
注意 *PowerBIIntegration.Refresh()*
命令有一些限制,超出了这个故事。你可以在这里 读起来 。
接下来,我们需要告诉编辑表单要显示哪个特定的项目。该信息通过使用PowerBIIntegration
对象及其数据属性直接来自 Power BI。
下面的公式将从我们的数据源中查找项目,方法是将其名称与 Power BI 仪表板中的选定项目进行匹配。
LookUp(
'Roadmap Items',
Item = First(PowerBIIntegration.Data).crXXX_item
)
现在我们必须保存我们的工作。点击文件。
选择另存为,将应用程序命名为类似*路线图项目编辑器的名称。*点击保存。
回到我们的 Power BI 报告,Power 应用程序视觉效果应该已经自动刷新。通过点击时间轴上的单个项目来验证它的工作,并注意我们的编辑表单如何加载相应的细节。
好吧。让我们改变一些数据。单击时间线上的任何给定项目,并修改其开始日期和描述。点击保存按钮,并点击控制功能区上的刷新以查看您的时间线更新。
就是这样!我们需要的所有功能都有了。是时候让它看起来性感一点,并加入著名的黑暗主题🕶.了****
黑暗主题和更多视觉效果
回到 Power Apps,点击主题,选择暗黄色。
为了匹配我们 Power BI 仪表板即将推出的背景颜色,将应用程序的背景设置为#333333
。
别忘了保存并再次发布你的 Power App。变化应该立即反映在您的 Power BI 仪表盘上。
在 Power BI Desktop 中,从控制功能区点击开关主题,选择太阳能主题。
这给了我们正确的调色板,我们可以开始调整它甚至更多。以下是我推荐的一些设置。
动力匕页
Page Background > Color > Custom Color: #333333
Page Background > Transparency: 0%
电力 App 可视化
Background: Off
时间线视觉
Background: Off
Appearance > Scale Color: White
通过拖放添加更多的视觉效果后,你的最终结果应该如下图所示。
**恭喜!**你做得很好,这是一个非常好的仪表板,你现在可以用各种格式分享。考虑将其导出为 PDF,使用 Power BI 在您的组织内部发布,或者向您的利益相关者发送每周报告。
总结和想法
现在我们已经解锁了微软 Power BI 和 Power Apps 的组合 power ,我们可以实现更高级的场景。
添加一个按钮,将您的路线图项目导出到您组织中与特雷罗、吉拉或 Azure DevOps 合作的任何团队的看板板上,怎么样?
还有其他想法吗?祝你自己试用愉快。
就这样吧!
—塞巴斯蒂安
你准备好开始编程生涯了吗?要考虑的五个个人特征
不是每个人都适合从事编程工作。在你走得太远之前,你可能想知道你是否能成为一名程序员。
法托斯 Bytyqi 在 Unsplash 上的照片
在我们开始分析你是否适合做程序员之前,我们首先要明白编程是一个非常广泛的话题。
**首先,你不一定要在软件公司工作才能成为程序员。**随着技术的发展,编程几乎进入了所有行业,从空间科学、金融服务、教育、医疗保健,到能源、农业和制造业等传统行业。
第二,有许多不同的工作角色,他们的主要职责是用各种语言编程。例如,你可以是一名使用微软 SQL 的数据库管理员。你可以做一个专门研究 Angular 的网站程序员。你可以使用 Python 或 r 成为统计学家,你可以使用 Java、Kotlin、Swift 或 Flutter 开发移动应用程序。
第三,你不一定要有计算机科学或软件开发的学士学位才能找到一份好的编程工作。这是一个非常开放的就业市场。雇主关心的是你的编程能力。所以,如果你的教育背景不是编程,不要感到害羞。只要你有必要的编程技能,你总能找到编程的工作。
就这三个方面来说,有五件事你需要自己检查,看看你是否很适合程序员的工作,更重要的是,你想把你的职业生涯奉献给它,并有合理的回报,如工资,成就感。
№1.热情
如果你想选择什么作为你的职业,你必须有 100%的兴趣去做。如果你觉得编码很有趣,如果你可以调试你的代码一天而不累,如果你边走边想改进你的代码,你绝对对编程充满热情。
如果你对编程有热情,这里有几个重要的暗示。第一,有时候或者大部分时间自己做项目,你不会感到孤独。第二,你可以全神贯注地编码。我们都明白,如果不给予足够的重视,事情就做不好——编程也不例外。第三,编码是你的爱好。例如,当你有时感到不安时,写一些代码有助于你放松。觉得无聊的时候,写点代码自娱自乐。
№2.学习能力
你能学得多好多快,决定了你的编程生涯能走多远。如今,每隔几个月就会出现新技术、许多不同的编程语言和各种框架。许多旧的编程语言和框架跟不上最新的技术进步(例如,更好的智能手机),因此它们被抛弃了。因此,如果你不想丢掉程序员的工作,你需要思想开放,愿意主动学习新事物。
**学习能力的一个重要方面是正确识别需要改进的领域。**你需要跟上各种技术及其优缺点,并评估是否有任何东西可以用在你的项目中。我不能再强调它了。但是我见过太多的程序员总是想把最新的技术应用到他们的项目中,而不评估他们是否合适。因此,这个决策过程非常关键。因为你的时间和资源是有限的,如果你把它们投资在错误的方向上,它们就都浪费了。一旦选好了方向,你就投入时间去钻研,去挖掘官方文档,去学习各种相关教程。
№3.批判性分析
这是一个好程序员的基本要求。每个程序员在他/她的代码中迟早总会写出一些 bug。有时候,一个异常可以清楚地告诉你哪里错了。更多的时候,要知道 bug 在哪里并不容易。当它发生时,你必须批判性地分析相关代码,就好像代码是别人写的一样。
当客户或项目经理要求一个新特性时,这也是使用你的关键分析的好时机。首先,您需要评估它是否是一个有效可行的请求。很多时候,许多被请求的特性实际上是无用的。您可能想与利益相关者就是否值得花时间来实现它进行交流。当然,在这种情况下,沟通非常重要。第二,如果是真正的用户需求,你需要批判性地分析如何从数据模型到用户界面和体验实现。
№4.创造力(抽象和想象)
这大概是一个人编程生涯的上限了。要成为一名相当优秀的程序员,你不必在这方面特别优秀。通常,如果你作为一名架构师从零开始设计一个应用程序,你必须有很好的创造力来安排用户界面和交互方面的事情,以及可以使用哪些适当的技术。
即使你不必设计应用程序,编程也是一项或多或少需要创造力的工作。例如,如果您不能抽象某些用户活动和交互背后的逻辑,您就不能编写适当的代码来有效地处理这些活动。
在你编写复杂的代码来实现某些功能之前,你需要在脑海中想象或描绘整个流程。当然,你想为它绘制一些蓝图,但所有这类工作都需要大量的想象力。
№5.沟通
无论你想成为自由职业程序员还是在开发团队工作,你都必须有良好的沟通技巧。例如,如果你是自由职业者,你显然需要确切了解你的客户在寻找什么。你还负责展示你正在开发的产品。
如果你是团队的一员,沟通会更重要。如果你是一个 UI 程序员,你需要向后端开发者明确你在数据下载和上传方面的需求。当一个 bug 涉及到多个开发人员时,你们所有人都需要互相沟通,才能找到解决方案。
结论
如果你考虑以成为程序员为职业,你可以从这五个方面评估你的能力,从而对编程是否可以成为你的终身职业有一个粗略的想法。
最后,我不能再强调这一点,但是如果你对编程没有足够的热情,不要浪费你的时间,因为你会因为要跟上需要不断学习新事物的技术进步而受苦。
你准备好迎接视频分类挑战了吗?
阿尔茨海默氏症研究面临的数据科学挑战
视频分类准备指南
图像源(失速捕捉器)
为了帮助您在家工作时学习新技能并赢得一些在线奖金,MathWorks 推出了一项数据科学竞赛。
***预告:***Datathon 将于五月上线。注册驱动数据账户,接收发布公告。在这里申请免费的 MATLAB 许可证:用失速捕捉器推进老年痴呆症的研究
该数据集将由取自活鼠大脑的图像堆栈(3D 图像)组成,显示血管和血流。每个堆栈都有一个围绕目标血管段绘制的轮廓,并将被转换为. mp4 视频文件。问题是将目标血管段分类为流动的或停滞的。挑战将在网上进行,全球均可参加,并可免费参与。你可以用任何方法来解决这个问题。
在这个故事中,我将谈谈我在设置这个问题时学到的概念和方法。我还会给你指出你可以参考的文件,开始准备挑战。
使用数据
视频数据
处理视频是处理图像的扩展;我们还必须考虑视频的动态特性,而不是图像的静态特性。视频可以定义为一堆图像,也称为按特定顺序排列的帧。每一帧都有意义,但顺序也很重要。因此,需要测量帧的空间和时间内容。
所以,第一步是从视频中提取帧。确保帧应该同时具有序列建模和时间推理。
过程数据
处理视频的另一个挑战是数据集的庞大。在 MATLAB 中,您可以使用数据存储库的概念,为太大而无法放入内存的数据集合创建一个存储库。数据存储允许您将存储在磁盘、远程位置或数据库上的多个文件中的数据作为一个实体进行读取和处理。
参考文件:
- 了解数据存储的概念:数据存储入门
- 为图像、文本、音频、文件等创建不同的数据存储。不同文件格式或应用的数据存储
- 直接使用内置的数据存储库作为深度学习网络的输入:用于深度学习的数据存储库
- 为基于文件的数据实施自定义数据存储:开发自定义数据存储
- 质询的数据将使用存储在 AWS 中的数据。因此,学习如何从 S3 桶中访问数据
视频分类方法
一旦数据准备就绪,您可以使用以下 5 种方法中的任何一种进行分类。我将从基本的非深度学习方法到高级方法来谈论最常用的视频分类方法。但是由于数据的规模,我会鼓励你使用深度学习方法,并及时从每一帧中提取特征。
经典计算机视觉方法
方法 1:光流、目标跟踪和级联分类器
光流、活动识别、运动估计和跟踪是您可以用来确定视频相邻帧中的类别及其运动的关键活动。
参考资源:
- 要了解如何使用算法 Horn-Schunck 方法、Farneback 方法和 Lucas-Kanade 方法实现光流请查看本教程视频:计算机视觉训练、运动估计
- 关于跟踪&运动估计的更多示例和文档
- 要学习使用基于直方图的跟踪来跟踪物体,使用卡尔曼滤波器来跟踪遮挡或隐藏的物体,请查看本教程视频:计算机视觉训练,物体跟踪
- 举例说明如何对视频中的运动对象进行自动检测和基于运动的跟踪:基于运动的多对象跟踪
另一种方法是使用局部特征,比如图像的斑点、角落和边缘像素。级联分类器支持局部特征,如 Haar、局部二元模式(LBP)和梯度方向直方图(HOG)。
参考资源:
深度学习方法
方法二:卷积神经网络(CNN) +长短期记忆网络(LSTM)
在这种方法中,您使用预先训练的卷积神经网络从每一帧中提取特征,将视频转换为一系列特征向量。然后在序列上训练一个长短期记忆(LSTM)网络来预测视频标签。最后一步,将两个网络中的图层组合起来,组成一个直接对视频进行分类的最终网络。
要了解这个完整工作流程的步骤,请查看这个文档:使用深度学习对视频进行分类
图片来源( MATLAB 文档 t)
方法 3:用 CNN 进行大规模视频分类
如果视频分类像图像分类,为什么不直接用卷积神经网络?
要回答这个问题,记得我说过视频的时间成分。因此,为了捕捉时间和空间方面,你可以使用 CNN,但你需要以不同的方式构建网络。
来自斯坦福大学的论文使用卷积神经网络进行大规模视频分类,讨论了基本 CNN 对视频的挑战。它进一步阐述了您可以使用的所有不同的 CNN 模型,以融合来自多个帧的特征。
图片来源:研究论文
方法 4:双流 CNN
研究人员在本文中解释的另一种方法:用于视频中动作识别的双流卷积网络,是两个分别用于空间和时间方面的 conv 网络。
图片来源:研究论文
在 MATLAB 中开发 CNN 架构要参考的文档:
方法 5:使用 3D 卷积网络
3D ConvNets 是视频分类的首选,因为它们固有地在 3D 空间中应用卷积和最大池。在本文中:用 3D 卷积网络学习时空特征,研究人员提出了一种具有紧凑特征和高效计算的 C3D(卷积 3D)。
图片来源:研究论文
要参考的文件:
- 使用 MATLAB 中的 image3dInputLayer 、 convolution3dLayer 、maxpool3d layer等函数设计 3D-ConvNet
- 使用深度网络设计器设计网络
- 点击这里查看 MATLAB 中深度学习层的完整列表:深度学习层列表
- 处理 3d 医学图像的示例:使用深度学习的 3d 脑肿瘤分割
后续步骤
如果您没有 MATLAB 许可证,请从这里申请免费的 MATLAB 许可证开始准备:用拖延战术推进老年痴呆症研究。
请继续关注进一步的更新,在我五月份的下一篇博客中,在比赛启动日。该博客将是所有其他细节问题的基准代码。
请在下面的评论中给出您的反馈或任何问题。
你准备好接受视觉变形器(ViT)了吗?
“一幅图像相当于 16x16 个字:大规模图像识别的变形金刚”可能会给计算机视觉带来又一次突破
达里娅·谢夫索娃在 Unsplash 上的照片
地球上的生命面临着兴衰循环。它不仅适用于生物,也适用于技术。数据科学中的技术充满了炒作和有偏见的成功故事。说到这里,有一些技术导致了数据科学的发展:卷积神经网络(CNN) 。自 2012 年 AlexNet 以来,不同架构的细胞神经网络已经为实际的商业运作和学术研究带来了巨大的贡献。【ResNet】由微软研究院在 2015 年带来了构建“深度”CNN 的真正突破;然而,这项技术即将光荣退休。神经网络之父、2018 年图灵奖得主之一杰弗里·辛顿(Geoffrey Hinton)多年来一直在提及 CNN 的缺陷。可以找他的一个研讨会“ 卷积神经网络 怎么了?“2017 年。CNN 的一个主要缺陷存在于合并图层中,因为它丢失了许多有价值的信息,并且它忽略了图像的局部与整体之间的关系。代替 CNN,Geoffrey Hinton 和他的团队在 2018 年发表了一篇关于 胶囊网 的论文;然而,它还没有取代 CNN。
目录
- 一幅图像的简介相当于 16x16 个字:大规模图像识别的变形金刚
- 为什么视觉转换器(ViT)很重要?
- 关闭
- 进一步研究的材料
一幅图像的简介相当于 16x16 个字:大规模图像识别的变形金刚
我是从安德烈·卡帕西 2020 年 10 月 3 日的推特上得知这篇论文的。
作者截图。这条推文是由 Andrej Karpathy 创作的。
安德烈·卡帕西(Andrej Karpathy)是特斯拉人工智能的高级主管,他曾在 2016 年教过一堂课 CS231n ,内容涵盖了斯坦福大学计算机视觉方面的主题。尽管内容已经过时,他还是表现出了用简单的语言表达复杂概念的高超技巧。我从他的课上学到了很多东西。
这篇文章的目的是给那些不了解 Transformer 的机器学习工程师和数据科学家提个醒,让他们在“创新科技公司”为 Vision Transformer 推出 GitHub 知识库之前做好准备。
这篇论文是谁写的?
作者截图。出处是论文上的扉页“一个图像抵得上 16x16 个字。”
我一般会在阅读前查看作者/机构的名字,以鉴别论文的可信度。这篇名为 一幅图像抵得上 16x16 个字:图像识别的变形金刚 的论文于 2020 年 9 月 28 日提交,由于论文正在进行双盲评审,作者姓名尚未透露。我不会明确提到公司的名字。然而,你可以做出一个有根据的猜测,谁能花得起 2500 个 TPU 日来训练一个模型(下面突出显示),还有另一个线索表明,该模型是在 JFT-300M 上训练的,这是一个拥有 3 亿张图像的私人数据集。
作者截图。来源是“一幅图像相当于 16x16 个单词”这篇论文中的表 2
为什么视觉转换器(ViT)很重要?
这不是第一篇将 Transformer 应用于计算机视觉的论文。脸书 2020 年 5 月发布【DETR】;然而,DETR 与 CNN 联合使用了《变形金刚》。ViT 是 Transformer 对于计算机视觉最成功的应用,这项研究被认为做出了三点贡献。
训练精度高,计算时间少
与 吵闹的学生 (由谷歌于 2020 年 6 月发布)相比,ViT 减少了 80%的训练时间,尽管 ViT 已经达到了与论文(上图)中表 2 所示大致相同的准确度。Noisy Student 采用了 EfficientNet 架构,我将写另一篇关于 EfficientNet 的博文,以帮助读者了解自 ResNet 以来,CNN 在不久的将来走了多远。
无卷积网络的模型架构
变压器架构背后的核心机制是自我关注。它提供了理解输入之间的联系的能力。当变压器应用于 NLP 时,它以双向方式计算单词之间的关系,这意味着输入的顺序不像 RNN 那样重要。具有 Transformer 架构的模型使用自关注层的堆栈而不是 CNN 和 rnn 来处理可变大小的输入。你可以在我的上一篇文章中了解更多关于 Transformer 的知识,这篇文章是用通俗易懂的语言写给商务人士的,“假装你熟悉 BERT 的最低要求”。
将没有 CNN 的变形金刚应用到图像的一个主要挑战是在像素之间应用自我关注。如果输入图像的大小是 640x640,那么模型需要计算 409K 个组合的自我关注度。此外,您可以想象,图像一个角上的像素不太可能与图像另一个角上的另一个像素有有意义的关系。ViT 通过将图像分割成小块(如 16x16)克服了这个问题。句子的原子是一个单词,这项研究将碎片定义为图像的原子,而不是像素,以有效地梳理模式。
作者截图。来源是纸上的图 1“一个图像抵得上 16x16 个字。”
小贴片变压器的功效
通过分析多头注意的中间结果,分析了 ViT 的内部表征。本文发现,该模型能够在位置嵌入的相似性中编码面片的距离。另一个发现是,论文发现 ViT 整合了整个图像的信息,甚至在《变形金刚》中的最低层。作为旁注,ViT-Large 有 24 层,隐藏大小为 1,024 和 16 个注意头。该论文引用的内容是“我们发现一些头部已经注意到最底层的大部分图像,这表明模型确实使用了全局整合信息的能力。”
定性分析模型性能通常与定量分析一样重要,以了解预测的稳健性。我通常使用 类激活图 (麻省理工学院于 2015 年发布)来验证模型性能的稳健性,方法是查看来自具有正确预测、假阳性和假阴性的图像的类激活图,以创建和测试不同的假设。
关闭
我很少阅读正在接受审查的论文,因为提交的论文内容会被修改,其中许多甚至会被期刊拒绝。但是,我写了这篇文章,因为内容真的很有创意,而且我也喜欢这篇论文富有诗意的标题!当论文正式发表时,我计划对这篇文章做一些更新。
更新:2020 年 12 月 4 日
视觉变形金刚的官方仓库准备好了。享受 ViT 的生活!
进一步研究的材料
- 你可以阅读提交的论文,在 OpenReivew.net,谷歌一幅图像值 16x16 字:大规模图像识别的变形金刚。
- Jay Alamer 的《变形金刚》插图是理解《变形金刚》如何一步一步工作的最佳材料,其中的图片非常有用。
- 如果你想在没有数学的情况下理解 Transformer 的应用,我的博客文章假装你熟悉 BERT 的最低要求将会帮助你,因为我的读者是商务人士和初级数据科学家。
- 如果你对视觉变形器统治这个领域之前,谷歌大脑和研究团队(截至 2021 年 2 月)使用 CNN 的计算机视觉的艺术模型感兴趣,你可以在中看到没有数学的解剖学简单的复制粘贴是计算机视觉问题的游戏改变者。
- 最后一个材料与学习 Transformer 的概念没有直接关系,但读者曾问我如何实现 Transformer。如果你已经对变形金刚有了基本的了解,首先你可以从这篇文章中学习如何使用 PyTorch,通过一个例子了解 PyTorch:一个分步教程,然后你可以通过 HuggingFace 的快速入门来创建你的第一个变形金刚模型。享受变形金刚!
你真的在照顾过度合身吗?
如果你的回答是“是的,我使用过提前停止”,你可能想看看这个
过度合身就像试着穿一套为别人量身定做的衣服。图片来源: Freepik
Y 你坐在一个满是数据科学家的酒吧里,无意中听到了下面这段对话:
-等一下!你解决了过度装配的问题了吗?
-是的,我用过早停。
即使你对机器学习一无所知,但你会说英语,你也能推断出两件事。首先,存在一种叫做“过度拟合”的不好的东西。第二,过度拟合可以用一种叫做“提前停止”的方法来克服。
这不仅仅是酒吧里的谈资。如果你翻阅深度学习的圣经,在第 425 页你会读到“早停应该几乎普遍使用”(Goodfellow)。在数据科学中,并不是每天都能听到“普遍”这个词。所以,你可能会相信提前停止是适配过度的哲人之石。但是,不幸的是,尼可·勒梅从未致力于机器学习。
提前停止是机器学习实践者最大的错觉之一。
事实上,许多人认为,通过使用这种技术,他们变得对过度拟合免疫。遗憾的是,事实并非如此。事实上,经常发生的情况是,你使用早期停止,但是你最终得到一个严重过度拟合的模型。
在本文中,我将使用著名的蘑菇数据集(可在 Kaggle 上获得)来展示这是多么容易发生。此外,我们将观察过度配合在实践中会造成什么样的损害。
以下是段落列表:
- 什么是过度拟合?
- 什么是提前停止?
- 树林中的数据科学家
- 约翰尼·德普谬论
- 德怀特家的晚餐
- 收尾
1.什么是过度拟合?
过度拟合是预测模型无法将它从一些数据 A(“训练数据”)学到的东西推广到一些新数据 B(“测试数据”)。
例如,假设你给一个模型 100,000 张猫的肖像和 100,000 张狗的肖像(训练数据),让它学会区分猫和狗。然后,你拿一万张新的猫狗肖像(测试数据),让模型给它们贴上标签。如果模型在测试数据上的表现不如在训练数据上的表现,则意味着您的模型不能进行归纳。
现在,如果一个预测模型不能很好地处理新的(看不见的)数据,那么拥有一个预测模型首先有什么意义呢?如果不危险的话,过度拟合会使模型无用。这就是为什么它是任何数据科学家都必须处理的最大问题之一。
但是数据科学家是聪明人,所以他们已经找到了防止过度拟合的方法。这些方法被称为“正则化技术”。
2.什么是早停?
早期停止是一种用于对抗过度拟合的正则化技术。它是“大概是深度学习中最常用的正则化形式*”(深度学习,247 页)。它是如此简单、有效且无副作用,以至于 Hinton、Bengio 和 LeCun 称之为“一顿美好的免费午餐”。*
此外,早期停止可以应用于通过后续迭代训练的任何预测模型,例如具有梯度下降的逻辑回归、梯度推进算法、神经网络等。
让我们看一个在迭代培训过程中培训和测试 ()* 表现的典型例子。
说明提前停止是如何工作的
可以看出,训练数据的性能不断提高。这是为什么呢?因为——随着迭代一个接一个地成功——模型对训练数据越来越“定制”。相反,测试数据的性能会提高到一定程度,然后开始下降。
提前停止的功能正是利用了这种行为。提前停止意味着在测试集上获得最佳分数时(在这种情况下,在第 77 次迭代时)采用该模型。通过这样做,我们将不会浪费时间进行不必要的迭代,我们将拥有一个在看不见的数据上工作良好的模型。
很神奇,不是吗?嗯,提前停止是强大的,但并不可靠。我们来看看为什么。
()为了简单起见,在本文中,我将不适当地使用术语“测试”数据来代替“验证”数据*
3.树林中的数据科学家
Dwight 是一名数据科学家。由于他计划下周末去采蘑菇,他已经从 Kaggle 下载了蘑菇数据集。Dwight 的目标是提出一个预测模型,能够根据蘑菇的特性告诉他蘑菇是否有毒。
数据集由 8124 个蘑菇组成。对于每种蘑菇,记录了 22 种不同的特征(如气味、菌盖形状、菌盖颜色等)。目标变量是蘑菇是可食用的还是有毒的。该数据集有一些特点:
- 所有 22 个特征都是绝对的;
- 它们都由少数独特的价值观组成。
这使得数据集几乎不会过度拟合。
德怀特意识到,如果他建立了一个糟糕的模型,他可能会因蘑菇中毒而住院。因此,他希望他的测试集非常可靠。因此,他只将 33%的数据放在训练集中,其余 67%放在测试集中。
德怀特数据帧的形状
这是德怀特的训练集的样子:
训练数据帧的前五行和前十列
是的,你没看错。德怀特不小心忘记了特征中的行索引!这个男孩如此心不在焉。然而,这个错误应该不会造成太大的伤害。事实上,由于 Dwight 将使用一些正则化技术,模型应该自动忽略“ROW_INDEX ”,因为它会导致过多的过拟合。
由于所有的特征(除了一个)都是分类的,Dwight 选择使用 Catboost ,这是一种非常强大的算法,正是为了处理分类特征而诞生的。为了使模型防弹,德怀特还决定包括早期停止,他认为这应该足以避免过度拟合。
在设置了一些他认为合适的超参数后,Dwight 启动 catboost 分类器:
Dwight 用于训练其模型的 Python 脚本
4.约翰尼·德普谬论
这就是 Dwight 的模型在每次迭代中对训练数据和测试数据的表现。
Dwight 模型在每次迭代中的训练和测试性能
这个数字是一个明显的例子,说明为什么早停并不像许多人认为的那样不可战胜。
早期停止着眼于测试性能发生了什么,但它没有说训练性能。然而,过度拟合是由两者之间的关系给出的。
事实上,在最后一次迭代中,该模型在训练集和测试集上的平均精度分别达到了 94%和 79%。这两个数字之间存在巨大差异,这是过度拟合的一个非常明显的迹象。
但德怀特不在乎。“毕竟——他认为——79%的测试成绩并没有那么糟糕”。他是这么看的:
“唯一重要的是测试集上的性能。谁在乎超配,只要我能有个好的考试成绩就行了?”
我打赌你以前听过这种说法。事实上,在机器学习的世界里,存在一种普遍的倾向,即只关注测试表现,而完全忽视训练表现。这就是我所谓的“T2”约翰尼·德普谬论“T3”。
这和强尼·德普有什么关系?
想象你是一个电影制片人。你的下一部电影需要一名男主角,你开始四处寻找,直到你有了一个想法:约翰尼·德普将是那个角色的完美人选。因为你是彻底的家伙,所以你做足了功课,查了他的一些电影的票房,比如《Mortdecai》(4700 万美元)、《Black Mass》(1 亿美元)、《独行侠》(2.6 亿美元)。现在,你可能会想“哇,那可是一大笔钱啊!约翰尼·德普绝对是个不错的选择。”
但是你没有考虑电影预算。换句话说,这项投资值得吗?事实上,约翰尼·德普已经连续两年成为“T4 片酬最高的演员”。这意味着与他的电影票房相比,他的片酬太高了。如果你只关注票房,你就看不到真正重要的东西:投资回报。
这如何应用于机器学习?
正如电影行业一样,在机器学习中,考虑投资回报也很重要。在机器学习中,“预期回报”是用训练集上的表现来表示的,而实际的“投资回报”是看不见的数据(测试集)上的表现。
德怀特对模特的期望很高。事实上,该模型“承诺”交付 94%的平均精度(训练性能)。然而,结果非常令人失望,仅达到 79%(测试性能)。这种模式就像是一种无法偿还投资者的资产。
5.德怀特家的晚餐
你可能认为票房和机器学习的类比有点鲁莽。好吧,如果你仍然不相信约翰尼·德普谬误在机器学习中与在电影行业中一样危险,那就看看德怀特模型的特征重要性吧:
德怀特模型的特征重要性。行索引是最重要的特性。这没有任何意义!
“ROW_INDEX”是模型中最重要的特性。基本上,Dwight 主要根据数据集中蘑菇的行索引来决定他要吃哪些蘑菇,这只是一个随机数!如果你不是俄罗斯轮盘赌爱好者,我会在接受他的晚餐邀请前三思。
当然,这只是一个玩具例子。在现实世界的应用中,模型要比这复杂得多。你不知道哪些功能应该是重要的,哪些功能不应该是重要的(如果你知道,你会从一开始就放弃这些功能)。这正是仔细观察训练和测试表现如此重要的原因。
例如,您可能最终拥有以下两种模型:
同样的考试成绩,不同的训练成绩
如果你是约翰尼·德普谬误的受害者,你可能会得出结论,模型 A 和模型 B 基本上是相同的,因为它们在测试数据上获得了相同的结果。然而,如果你有完整的图片,你会注意到模型 B 比模型 A 好得多,因为模型 A 显然是过度拟合的。
有很多原因可以解释你为什么要避免过度拟合:
- 当你有一个过拟合的模型时,很可能可行找到一个更好的模型(即训练性能较低和/或测试性能较高的模型),这就是:从模型 A 转移到模型 b。
- 机器学习模型意味着学习模式。过度拟合模型是学习了许多错误模式的模型。
- 过度合身的模特很快就会变老。如果你的意图是随着时间的推移使用你的模型,那么你将遭受更多的概念漂移。
6。结束
在本文中,我们使用了 Kaggle 上最不“过度适应”的数据集之一:蘑菇数据集。仍然不满足于此,我们还包括了在训练阶段提前停止。
但这是徒劳的:无论如何,我们最终得到了一个饱受过度拟合之苦的模型。这证明了对付过度拟合的灵丹妙药并不存在。
与过度拟合密切相关的是我们所称的“约翰尼·德普谬误”:忽视训练表现而只关注测试表现的诱惑。当然,测试性能很吸引人。但是,正如我们所看到的,这只是硬币的一面。
总之,处理过度拟合并不意味着仅仅使用早期停止(或任何其他正则化方法),而是意味着检查模型在训练集和测试集上的表现。这是评估给定模型泛化能力的唯一方法。
使用这款笔记本可以重现上述所有结果。
笔记本上的任何错误都是德怀特的错。
感谢您的阅读!我希望你喜欢这篇文章。
相反,如果你非常喜欢它,请留下掌声,并跟随我在 Medium 上阅读更多关于数据科学的帖子。也可以在 Linkedin 上和我联系。
你正在使用 K-Means 解决 ML 聚类问题吗?
绘制肘部曲线、轮廓曲线、簇间距离的一行程序,并了解 sci kit——了解可以改进模型的技巧。
来源:作者图片
K-Means 是无监督机器学习问题中最常用的聚类算法,它对于找到相似的数据点和确定数据的结构非常有用。在这篇文章中,我假设您对 K-Means 有一个基本的了解,并将更多地关注于您如何能够-
- 使用不同的方法,如肘形曲线、Sillhouette 曲线和簇间距离,找到 K (簇数)的值。
- 一个伟大的可视化库 YellowBrick ,它可以帮助你用仅仅 1 行代码来绘制这些曲线。
- 不同的 sci kit-学习技巧,以改善您的 K 均值模型。
如果你是新手,网上有很多很棒的文章可以帮助你理解 K-Means。我会推荐浏览博客,从 Imad Dabbura 、 K-means Clustering:算法、应用、评估方法和缺点和 Azika Amelia 、 K-Means Clustering:从 A 到 Z 涵盖了大部分内容。你也可以参考 Scikit-Learn 的文档来了解集群的情况,这些文档很好地展示了集群。
让我们开始,看看如何能做到这一点。
求 K-均值中的 K。
要使用 K-Means,我们需要指定 K 的值,这是我们想要将数据分组到的聚类数。大多数情况下,我们不知道数据中会出现多少组,找到 k 的最佳值变得很困难。幸运的是,不同的方法可以帮助我们找到正确的值。
在这里,我将通过 4 种不同的方式。
- 肘部曲线。
- 轮廓曲线。
- 星团间距离图。
- 使用其他聚类算法。
数据集详细信息
为了更好地演示,我将使用 Scikit-Learn 的 make_blobs API 创建一个数据集,该 API 用于通过将每个类分配给一个或多个正态分布的点聚类来创建多类数据集。
看看我创建的笔记本,它有更多的细节,可以随意下载并导入到您的环境中,然后在周围玩玩-
这个库提供了一个如何应用 K-Means 和使用 Yellowbrick 生成肘形曲线的例子…
github.com](https://github.com/ankitgoel1602/data-science/tree/master/clustering-projects/K-Means%20Example)
这里,我们使用 make _ blobs 创建了一个包含 10 个中心的数据集。
from sklearn.datasets import make_blobs# Generate synthetic dataset with 10 random clusters in 2 dimensional space
X, y = make_blobs(n_samples=1000, n_features=2, centers=10, random_state=42)
虽然我们创建了 10 个随机簇,但下图显示了一些簇之间存在重叠,我们将看到 Elbow 方法如何告诉我们获得最大增益的簇的确切数量。
来源:作者图片
肘形曲线
如维基百科所述-
肘方法是一种用于确定数据集中聚类数量的启发式方法。该方法包括将解释的变化绘制为聚类数的函数,并选取曲线的拐点作为要使用的聚类数。
肘形曲线背后的直觉是,所解释的变化会快速变化,直到数据中的组数增加,然后它会变慢,导致图表中出现肘形,如下所示。拐点是您应该用于 K-Means 算法的聚类数。
最近我发现了一个名为yellow brick的库,它可以帮助我们只用一行代码就绘制出肘部曲线。它是 Scikit-Learn 的包装器,因此可以很好地与之集成。
# Import ElbowVisualizer
from yellowbrick.cluster import KElbowVisualizermodel = KMeans()
# k is range of number of clusters.
visualizer = KElbowVisualizer(model, k=(4,12), timings=False)visualizer.fit(X) # Fit the data to the visualizer
visualizer.show() # Finalize and render the figure
上面的代码将生成这个包含所有细节的漂亮图形。默认情况下,它使用“失真分数”作为度量,计算每个点到其指定中心的平方距离之和。您也可以尝试这里提到的其他指标。
图片:作者来源
一些聚类问题可能不会导致肘形结构,而可能会导致连续下降的图形,从而难以选择 k 值。在这种情况下,我们可以使用其他方法,如下一小节所述。
轮廓曲线
通常,我们在聚类问题中没有基础事实(标签),评估需要使用模型本身来完成。剪影系数通过基于平均聚类内距离和由最大值归一化的该样本的平均最近聚类距离之间的差为每个样本生成分数来计算聚类的密度。我们可以通过为不同的 K 值生成图并根据聚类的分配选择得分最高的一个来找到 K 的最佳值。
下面,我画出了 K = 6,7,8,9 的轮廓图,你可以看到我们用肘方法得到的 K = 7 的分数最高。这也有助于我们识别类别不平衡,因为聚类的宽度显示了该聚类中的样本数量,如果您看到 K=9 的图表,我们有许多小聚类。
来源:作者图片
我用 Yellowbrick 生成了上面的图。下面的代码将为 K=7 生成一个 Sillhouette 图,你可以参考我的笔记本,了解如何通过它循环生成多个图。
model = KMeans(7, random_state=42)
visualizer = SilhouetteVisualizer(model, colors='yellowbrick')
visualizer.fit(X) # Fit the data to the visualizer
visualizer.show() # Finalize and render the figure
集群间距离图
尽管这可能无法直接帮助找到集群的数量。它有助于评估 K-Means 算法,因为它给出了聚类的相对重要性。默认情况下,Yellowbrick 使用 MDS(多维缩放)作为嵌入算法来嵌入到二维空间中。你可以在这里阅读更多相关信息。
model = KMeans(7)
visualizer = InterclusterDistance(model, random_state=0)visualizer.fit(X) # Fit the data to the visualizer
visualizer.show() # Finalize and render the figure
上面的代码会生成下面的图-
来源:作者图片
使用其他算法
我们可以尝试的另一件事是使用其他聚类算法,如亲和传播,它不需要您提供 K 的值,并使其成为学习过程的一部分。这些算法可能不适用于大型数据集。因此,在某些情况下,我们需要在数据子集上尝试它们,然后使用 K-Means 中的值。下面的代码预测了 10 个与我们使用的中心数量相匹配的集群。
from sklearn.cluster import AffinityPropagation# Creating Affinity Propagation model instance
affinity_propagation = AffinityPropagation(random_state=None, damping=0.90)# number of clusters found by Affinity propagation
len(affinity_propagation.cluster_centers_indices_)
决赛成绩
现在,当我们用不同的方法评估时,我们得到的 K 的最佳值是 7。让我们应用 K=7 的 K-Means 算法,看看它如何对我们的数据点进行聚类。
model = KMeans(n_clusters=7)# fit X
model.fit(X)# predict labels
data['y_pred'] = model.predict(X)# plot results
sns.scatterplot(x='feature1', y='feature2', hue='y_pred', data=data)
来源:作者图片
sci kit-学习技巧
Scikit-learn 为我们可以利用的 K 均值提供了不同的配置。你可以在这里找到的完整名单。我将介绍其中的几个,它们有助于改进我们的模型。
init='k-means++ ’
K-Means 算法很大程度上取决于你如何初始化质心(聚类的中心)。Scikit-Learn 提供了可以使用的不同的 init 值,但一般来说,k-means++比其他的更突出,因为它试图初始化质心,使其(一般来说)彼此远离,从而导致可证明的更好的结果。
使用降维算法
K-Means 使用欧几里得距离来计算点之间的距离。据观察,在非常高维的空间中,欧几里德距离往往会爆炸,并且不太管用。因此,如果您有大量的特征,在 k-means 之前使用 PCA 等降维算法可以克服这个问题,并加快计算速度。
小批量 K-均值
对于大型数据集,K-Means 可能需要很长时间才能收敛。如 Scikit-Learn 文档所述-
MiniBatchKMeans 是 KMeans 算法的变体,它使用小批量来减少计算时间,同时仍然试图优化相同的目标函数。小批量是输入数据的子集,在每次训练迭代中随机采样。这些小批量极大地减少了收敛到局部解所需的计算量。与其他减少 k-means 收敛时间的算法相比,小批量 k-means 产生的结果通常只比标准算法稍差。
因此,如果您有一个大型数据集,一定要查看 MiniBatchKmeans。
聚类度量
大多数开始机器学习的人都知道准确性、精确度和召回率等指标。我们倾向于认为,如果没有标签,我们如何衡量结果。Scikit-Learn 提供了不同的聚类指标,如同质性、完整性、v-measure 或我们在这里讨论的剪影系数。这些指标可以帮助我们评估模型。虽然其中一些遵循半监督学习方法,并要求您有几个数据点的目标标签,但至少其他方法不需要任何标签。请点击这里查看 Scikit-Learn 中所有可用的集群指标。
缩放数据集
您必须在应用 k-means 之前缩放数据集,因为它会影响距离计算。
不均匀的形状(限制)
由于 K-Means 的工作方式,它通常适用于具有像球形一样的均匀形状的星团。如果您知道您的数据遵循不均匀的形状,那么最好使用其他聚类算法,如适用于不均匀聚类的 DBSCAN。
K-Means 是一种强大而简单的算法,适用于大多数无监督的机器学习问题,并提供了相当好的结果。我希望这篇文章能帮助您解决集群问题,并为将来的集群项目节省时间。还有,你在 Scikit-Learn 里用的是 Pipeline 吗?如果没有,请查看我的另一篇文章这里,它可以帮助你改进你的机器学习工作流程。
注意安全!!!继续学习!!!
你是否花了太多的钱来标记数据?
如何在不牺牲模型质量的情况下节省数据标注
技术专家将会记住 2010 年是大数据的十年。
数据存储变得足够便宜,以至于公司开始囤积数据,甚至不知道如何处理这些数据。数据收集变得无处不在,这在很大程度上要归功于物联网,它允许全新的有价值、可操作的数据流。数据处理极大地受益于 GPU 和 TPU 的新兴能力,以训练更强大的深度学习模型。
一般来说,拥有优势数据来推动业务运营是一件非常积极的事情。但是,今天生产的 90%的 ML 模型使用监督学习方法,这些项目的成功在很大程度上取决于公司准确有效地标记其数据的能力。
这说起来容易做起来难。
标签质量
如果您不熟悉通常收集标签的方式,您可能会认为标注是一项简单的任务。那些职业生涯致力于数据标签的人知道这与事实相去甚远。
当然,注解的概念本身看似简单。通常情况下,数据由负责生成被专家称为“基本事实”的人进行注释。生成的标签(如果标签比简单的值更复杂,我们称之为注释,就像在分段或边界框注释的情况下)是我们希望在该数据集上训练的模型为该特定数据点预测的类或值。举个简单的例子,注释器可能会查看一个图像,并从预先存在的类本体中标记一个对象。标签被输入机器进行学习。在某种意义上,标记是将人类知识注入到机器中,这使得它成为开发高性能 ML 模型的关键步骤。冒着被简化的风险,好的标签驱动好的模型。
问题是,在现实世界中,仅仅因为这些标签表面上看起来很容易,并不意味着它们在实践中很容易。
这里,我们有一个简单的图像和一些简单的说明。一个人类注释者被要求围绕他在原始的、未标记的图像中看到的任何人画一个矩形。很简单,对吧?这里,形象清晰;只有一个人,并且这个人没有被遮挡。然而,有很多方法会出错:例如,画一个太大的方框可能会导致模型过度适应背景噪声,并失去确定相关模式的能力。画一个太小的盒子,你可能会错过有趣的图案。这还没有考虑到注释者在压力下处理数据更快或赚更多钱的情况,或者犯了错误(诚实与否!)或未能正确理解说明。
质量注释(这张照片的所有版本由 Clem Onojeghuo 在 Unsplash 上进行内部注释)
较低质量的注释
更低质量的注释
一句“你在努力吗?”注释
现在认为这实际上是一个简单的用例,因为图像不包含太多的对象(现实生活中的情况实际上看起来更混乱),并且手头的任务是客观的。有多个部分遮挡的人的图像更难处理。同样的道理也适用于情感分析,其中存在固有的主观性。
我们可以继续。但关键是:即使是简单的标记任务也充满了潜在的错误。这些错误相当于你提供给你的模型的坏数据。很有可能,你知道这会导致什么。
相信暴徒!
面对所有这些潜在的挑战,收集足够高质量的标签来训练一个像样的 ML 模型会变得更加困难。然而,在过去几年里,有监督的机器学习仍然取得了巨大的进步。那么是什么原因呢?
“诀窍”是,虽然信任单个人类注释者是不明智的,但是依赖一个更大的群体实际上通常会让我们走得很远。这是因为如果一个注释者犯了一个错误,另一个注释者就不太可能犯同样的错误。换句话说,通过从多个人那里收集每条记录的标签,我们可能会去除大多数离群值,并确保标签更有可能是真实的。
例如,如果一个注释者在一个二进制用例中有 10%的机会出错,那么两个注释者出错的概率已经下降到 0.1 x 0.1 = 0.01 = 1%,这当然更好,但是对于每个(甚至大多数)应用程序来说还不够。三四个注释者会进一步减少这个数字。
注释中的小差异可以累积成大问题(图像来源: CIFAR-10 数据集)
质量与数量:数量能弥补不好的标签吗?
下一个问题是,你能否用越来越多的训练数据来对抗不准确标记的训练数据。换句话说,量可以对抗质差吗?我们在其他地方讨论了其中的一些权衡,但我们能够表明的一件事是,一些类比其他类更可能对坏标签敏感,并且修复坏标签的影响所需的额外数据量在整个数据集中变化很大。使用什么型号并不重要。糟糕的标签会对训练数据造成更大的污染,而且比只有少量标签良好的数据更有害。
换句话说,当涉及到标注时,并不是所有的数据都应该得到同样的关注。我们还证明了对标记噪声的敏感性几乎与模型无关。这是一个好消息,因为这意味着可以使用通用模型来识别需要更高标记准确性的有问题的数据簇,并在标记数据时战略性地依赖该信息。
什么是主动学习,它与数据标注有什么关系?
换句话说,拥有一个智能标签策略比你想象的要重要得多。不可否认,这并不像研究最新的模型那样有趣,但是对于将一个成功的模型推向生产来说,这常常是更重要的。如果你问任何数据标注专家在讨论如何减少标注预算时想到了什么,他们通常会说主动学习。
主动学习是 ML 算法的一个类别,是半监督学习的一个子集,它依赖于增量学习方法,并提供了一个优雅的框架,允许 ML 科学家处理仅部分标记的数据集。
主动学习基于一个简单而强大的假设,即并非所有数据都对模型有同等影响,并且模型不会以相同的速度学习所有数据。这是因为数据集通常包含大量重复的信息(这意味着一些记录可能单独有价值,但当与类似的记录一起使用时,提供的增量改进非常少),也因为一些数据不包含任何相关信息。
一个例子?假设您想要训练 OCR(光学字符识别)算法,但是有一个数据集,其中大部分记录根本不包含任何文本。通过增量添加更多的训练记录,主动学习动态地找到模型最难学习的记录(或最有益的记录),从而允许 ML 科学家首先关注最重要的数据。也就是说,主动学习选择“正确的”记录来标记。这是预算持有人可以欣赏的。
但是主动学习忽略了一些重要的东西。它不能必然推测给定记录需要收集的注释数量。
一般来说,公司一直将贴标频率(或每条记录的注释数量)视为静态参数,必须根据其贴标预算和所需的贴标精度预先确定。换句话说:你给每张图片贴五次标签,或者给每个句子贴三次标签。在如何选择最佳频率方面,真的没有理论支持,也没有框架来动态地调整频率,作为记录对模型的重要性、对噪声的容忍度以及标记它的难度的函数。
我们最近的研究改变了这一点。我们现在有数据来模拟标签准确性对模型准确性的影响,并建立策略来优化如何花费我们的标签预算。了解哪些记录需要更多标签,哪些不需要,这为智能优化标签预算策略打开了大门。
如何用更好的标签策略省钱
因此:标注准确性是每个记录的注释数量和错误标注记录的概率的函数,而模型准确性是标注过程的准确性和训练集大小的函数。当你把这些结合起来。你可以开始考虑如何将一个模型的准确性和它的标签预算结合起来。
我们模拟了一个 250,000 样本数据集的情况,其中每个标注的成本为 25 英镑,假设整个数据集的误标注概率为 40%,并获得了以下标注预算与 5 个不同训练数据量的模型准确性之间的关系:
在上面的图表中,每行的每个点代表一个额外的标签(图表由作者创建)
马上,您可以看到优化预算的战略标准实际上不是数据的量,而是每条记录的注释数量。
例如,预算为 50K 美元,客户最好将 50K 记录标记 4 次。与一次标记 200,000 条记录相比,这种策略的准确率提高了 16%。
然而,如果客户需要她的模型达到 86%的模型准确度,她会做出更好的选择,使用 200K 训练记录 3 次;与在 150,000 条记录的训练集上每条记录 5 个标签的策略相比,这将为她节省大约 50,000 美元(超过 25%)。
精确度与成本的对比分析(图表由作者创建)
如果我们现在表示相同的模拟数据,但是按照每条记录的注释数量对其进行分组,那么很明显,为每条记录标记一次数据是一个糟糕的主意。即使是两个注释也远远胜过一个容易出错的标签。大多数情况下,为每条记录添加 3 次注释似乎是一个安全的赌注,但是如果超过 3 次,你可能会对这一成本的合理性产生疑问。
现在,需要注意的是,到目前为止,我们仍然选择对所有记录使用固定数量的注释。但是自从最近我们能够确定一些类比其他类对标记噪声更敏感以来,尝试利用这一事实来进一步调整和优化我们的标记预算似乎是合理的。
在另一个模拟中,我们现在在一个平衡的 500K 数据集上有一个二元分类图像分类问题,假设一个更有利的误标记概率为 25%,并对一个对噪声的敏感度明显高于另一个的类进行建模。我们针对这个问题分析了四种不同的标记策略:
- 策略 1:我们将最不敏感的类标记两次,将最敏感的类标记三次
- 策略 2:我们将最不敏感的类标记三次,将最敏感的类标记两次
- 策略 3:我们将两个类标记三次
- 策略 4:我们将两个类标记两次
作者创建的图表
我们可以看到,应用于整个数据集的策略 3 导致最强的准确性;然而,它比策略 1 好不了多少,策略 1 要便宜得多。策略 1 似乎最适合低标签预算,而策略 4 更适合中等预算。
在类级别上调整标签策略当然会导致一个先有鸡还是先有蛋的问题,因为标签是对数据进行分类所必需的;然而,同样的敏感性研究可以与无监督的方法相结合,并应用于聚类而不是类;这项研究是我们目前的重点领域之一。
结论
那么这一切给我们留下了什么?首先,我们希望你已经意识到更多的数据并不总是一件好事。另一方面,更干净、标记更好、更准确的数据是。
但实际上,从我们的实验中最重要的是:你可能花了太多的钱来标记数据。如果你像许多 ML 从业者一样,你可能会贴太多标签,而没有深入研究质量,以及你的好标签和坏标签对你的模型有多大影响。记住:不同的类和不同的问题需要不同的标签模式。利用主动学习来了解哪些类需要贴标机的额外关注,有望以现在所需的一小部分成本和时间建立更准确的模型。这应该让你公司的每个人都参与进来。