TowardsDataScience 博客中文翻译 2021(五百)

原文:TowardsDataScience Blog

协议:CC BY-NC-SA 4.0

我 2021 年的数据科学之旅

原文:https://towardsdatascience.com/my-data-science-journey-in-2021-5f95b93f98e2?source=collection_archive---------12-----------------------

2022 年将会发生什么

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

GR StocksUnsplash 上拍照

我简直无法想象又到了一年一度的时候,每个人都试图吹嘘他们一年来的成就,并为来年制定他们大多无法实现的一厢情愿的计划。

我不是伟大传统的例外。

2021 年是孤独、挣扎、沮丧和精疲力竭的一年。同时,这也是学习、成长和成就的一年。在全球疫情的背景下,我以一个在三个月内找到工作的雄心勃勃的目标开始了这一年,但却以几乎三倍的时间结束了。幸运的是,事情进展顺利,我在沃尔玛全球科技得到了一份数据科学(统计学家)的工作。

数据科学就业市场现在很热,但竞争也很激烈。如果你正纠结于面试循环,请看看我的沃尔玛之旅: 我是如何在沃尔玛 获得一份数据科学工作的。

年度关键词是什么?

面试!

没错。整个 2021 年都是围绕着准备技术面试和面试后做事。因此,我将这篇文章的剩余部分分成四个部分,详细阐述我在每个阶段的成就。最后,我会列出 2022 年的几个计划。

第一季度:准备面试

在和业内朋友完成了几轮模拟面试后,我很快意识到了学术研究和真实行业工作的差距。我确定了一些需要培养的关键技能。SQL 和 Python 站在列表的顶端。为了快速发展我的编码技术,我在第一季度写了 20 多篇冗长的技术博客。

作为一名教育工作者,我坚信通过写作教学是最好的学习方式。如果您能够将核心数据科学概念分解成更小的模块,您就真正理解了这些概念。

教学重塑了我对数据科学和其他技术学科的整体看法。当然,学习应该是反复的,以小剂量进行。

如果你是一名数据科学家或者想进入这个领域,请查看这篇关于如何更有效地学习的文章:

在线写作的另一个好处是,它创造了一个奇妙的在线存在,并作为你的数据科学投资组合。在沃尔玛的现场面试中,所有的面试官都提到了我的技术博客文章。

写作时,我把质量放在首位。例如,我花了大约一年时间为下面这篇文章做研究,这篇文章记录了科技公司在实验策略中最常犯的错误:

第二节:学会破解面试

在接下来的几个月里,我参加了多家科技公司的面试。刚开始并不顺利,因为各种原因炸了几个面试。首先,我将技术面试视为学术讨论,而不是评估候选人能力的结构化方式,这是一个新手的错误。幸运的是,我很快意识到了不同之处,并采用了更具互动性的采访方式。

第二,我当时视野狭窄,未能从每次面试中反思哪些地方可以改进。回顾过去,我会把每一次面试都视为一次学习的机会,并接受自己的弱点。

第三,将拒绝视为个人行为只会带来伤害。如果你在面试循环中,试着接受一个否定的回答,并从拒绝中学习。要有弹性,因为从拒绝中恢复的速度决定了你能走多远。

我应对拒绝的策略是保持一种成长的心态,更加肯定自己的成长。帮我完成一个简单的任务。

例如,编写有效的代码曾经是我最大的弱点,我遵循这些技巧来提高我的 SQL 和 Python 编程技能:

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

照片由杰米街Unsplash

第三季度:广度>深度

7 月底,我收到了一份工作邀请,并与沃尔玛全球技术签订了合同。感到幸福和感激。这完全符合我在统计学、机器学习和实验&因果推理方面的学术背景。

签完合同后我做了什么?

我没有放松和无所事事,而是收集团队的反馈,并试图更好地了解他们的痛点。例如,他们会遇到哪些常见问题?他们从最终用户那里收到了哪些投诉和担忧?同样重要的是,他们想进入什么样的未来方向?他们希望关注哪些优先事项?

此外,我退出了其他科技公司的剩余面试(其中几家已经进入最后一轮),并从任何面试准备中解脱出来。从时间管理的角度来看,这是一个明智的决定,因为我有更多的时间阅读和研究。

利用额外的时间,我深入研究了其他科技公司如何解决具体技术问题的文献,并了解了其中的细微差异。事实上,我每天花大约 8 个小时,每周花 6 天时间(大约 50 个小时/周)研究相关主题。因此,到本季度末,我对实验和数据科学的理解显著提高。

上一季度:深度>广度

随着开学日期的迅速临近,我再次调整了阅读习惯。我没有广泛阅读各个领域的书籍,而是选择了几个主题,集中在精简的列表上。

到第三季度末,我已经很好地了解了其他科技公司是如何进行实验的,并确定了我下一步需要努力的关键领域。

深度和广度是不可能同时达到的。所以,最后一个季度我放弃广度换取深度。事实证明,专注服务于我的长期目标。

Medium 最近进化出了自己的 作家伙伴计划 ,支持像我这样的普通作家。如果你还不是订户,通过下面的链接注册,我会收到一部分会员费。

https://leihua-ye.medium.com/membership

2020 新年决心

没有完成所有的目标是正常的,一个经验法则是实现 80%的目标:高于目标意味着你把标准定得太低,低于目标意味着你高估了自己的能力。

我一生的座右铭是通过对我所能达到的目标不设上限来获得自由。

我将与我的数据科学社区分享以下 2022 年的具体计划:

  • 练习相邻学习,获得更多的数据工程技能。 End **结果:**能够执行基本和中等水平的工程任务。
  • 探索新的交流渠道,邀请人们加入我的 YouTube 频道。**最终结果:**征求他们的职业建议,并与数据科学社区分享。
  • 媒体LinkedIn 上继续写。**最终结果:**建立更有意义的联系。
  • 多运动,保持健康,多运动。最终结果:完成另一场马拉松,增肌更多。

外卖食品

以下是我从 2021 年最大的收获。

  • 学无止境。与任何技术领域一样,数据科学正在快速变化和发展。最近的趋势是转向工程,数据科学家必须执行许多工程任务。没有适当的 SQL、Python 和大数据培训,我们做不了多少事情。令我惊讶的是,数据科学家需要对数据管道有如此高的理解,这促使我学习更多关于数据工程的知识。
  • 在学习中学会更好。我创造了“主动学习”这个术语,指的是通过理解基础知识来更有效地学习。我主动学习的秘密武器是通过反复阅读、写作和教学。
  • 保持干劲!我是一个高成就者。例如,我同时完成了两个研究生项目(政治学博士和统计学硕士)。嗯,明显的缺点是它很容易导致倦怠。以下是我的应对策略。首先,走出我的舒适区,探索未知的领域,这就是为什么我开办了一个 YouTube 频道。第二,成长的心态帮助我放松自己。第三,稍事休息,神清气爽地回来。第四,举重有帮助。

喜欢读这本书吗?

请在 LinkedIn 和 Youtube 上找到我。

还有,看看我其他关于人工智能和机器学习的帖子。

我作为数据工程师和数据科学家的经历

原文:https://towardsdatascience.com/my-experience-as-a-data-engineer-vs-a-data-scientist-9ad0bcb26b61?source=collection_archive---------6-----------------------

如何确保成功过渡

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

来自 Pexels金德媒体的照片

当我第一次从数据工程师转变为数据科学家时,我天真地认为我只需要学习工作所需的数据科学技能。多年以后,现在看来显而易见的事情我当时并没有想到。今天,我想谈谈我一路走来遇到的挑战,以及如何做好准备以确保成功过渡到数据科学。

商业思维

作为一名数据工程师,很容易确定技术问题是否得到解决。代码要么执行了预期的行为,即将所有原始数据加载到数据库中,要么没有执行。我不能让代码只加载 90%的数据就声称这是成功的。

作为一名数据科学家,我的工作是帮助利益相关者解决业务问题。然而,由于缺乏数据或技术限制,我并不总是能够使用机器学习模型,必须找到替代方法来回答只能解决 90%问题的问题。这种心态的改变对我来说是一个困难的调整,因为当我处理技术问题时,我习惯了要么全有要么全无。

要点:在解决商业问题而不是技术问题时,改变你的思维模式。在数据科学中,不能 100%解决问题是可以接受的。

数据叙事

作为一名数据工程师,我很少做演示,即使做,也是技术性的。我也不经常与利益相关者交流,我的沟通技巧也不是最好的。

当我成为一名数据科学家时,我不得不开始向我的非技术利益相关者解释机器学习结果,并学习数据讲故事,以提供背景并显示业务影响。说发展我的沟通技巧很容易是骗人的,但最终,我成功了。

**要点:**与利益相关者交谈是数据科学家工作的重要组成部分。发展你的沟通技巧,特别是如果你是一个内向的人,不喜欢和别人交流。学习如何以清晰的方式向非技术观众解释结果。

利益相关者沟通

我发现在我成为数据科学家后,利益相关者向我这个数据工程师描述技术问题比业务问题更容易。例如,作为一名数据工程师,一个利益相关者会告诉我他们没有看到数据库中的最新数据。技术问题很清楚,对我来说研究根本原因并解决问题很容易。

作为一名数据科学家,并不总是清楚利益相关者的问题是什么。我经常需要会见利益相关者,以便更好地理解业务问题,因为有时他们要求的并没有解决真正的问题!这使我向数据科学的过渡更加困难,但随着时间的推移,我能够掌握这种“翻译技巧”,即提出引导性问题来解决真正的业务问题。

要点:调整你与技术利益相关者和业务利益相关者的沟通方式。不要表面上接受利益相关者的要求,因为他们的要求可能不能解决实际问题。询问后续问题或召开会议,以了解利益相关者的真正需求。

最后的想法

从数据工程师成功转型为数据科学家不仅需要学习该角色所需的软技能,还需要学习数据科学技能。如果你正在考虑从技术岗位转向数据科学岗位,我希望我的经历能帮助你更顺利地过渡。

感谢您的阅读,如果您想在这篇文章发表的媒体上无限制地获取故事,请考虑每月支付 5 美元注册成为会员。如果你订阅了这个 推荐链接 ,我就赚点小提成。

你可能也会喜欢…

https://medium.com/swlh/how-i-used-a-machine-learning-model-to-generate-actionable-insights-3aa1dfe2ddfd

我作为产品数据分析师的经历

原文:https://towardsdatascience.com/my-experience-as-a-product-data-analyst-3d01748bc6ea?source=collection_archive---------15-----------------------

支持产品如何让我成为更好的数据分析师

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

来自佩克斯小伙子弗瑞的照片

在成为产品数据分析师之前,我的大部分数据工作都是支持市场营销的。你可能认为支持产品和其他部门是一样的,但是根据我的经验,我可以告诉你事实并非如此。今天,我想讨论一下我转变为产品数据分析师的经历,以及与产品打交道如何让我成为一名更好的数据分析师。

学习曲线

与通用的营销概念如 SEO 和 SEM 不同,每个产品都是不同的,并且有一个学习曲线让你了解产品的用途以及用户如何与之互动。分配入职所需的额外时间来学习用户流和用于事件跟踪的系统。当我开始担任产品分析师时,我花了几周时间来学习如何有效地使用产品分析软件,并找出映射到用户流中每个屏幕的事件名称。

用户体验

支持产品让你有机会在申请职位之前尝试一下。对产品或行业感兴趣将有助于你成为一名更有效的分析师,因为你可以联系用户体验,并在你的分析中考虑到这一点。我目前是一个移动应用程序的产品分析师,在我面试之前,我下载了这个应用程序来试试。这让我可以在面试中提出改进建议,以显示我事先对公司产品的积极研究。作为一名产品分析师,我可以自己使用该应用来评估新功能,并与用户体验相关联。

移动与网络

即使您以前是一名产品分析师,当您支持移动产品时,也需要考虑其他分析事项。

  • 平台:当我们想到手机时,它只是一部电话。然而,从产品的角度来看,一个公司为 Android 或 iOS 平台开发一个应用程序。我的公司有 Alexa 技能的应用程序,成为另一个分析平台。还可以为 iPad 等平板电脑开发一款应用,这是又一个平台。可以首先在一个平台上开发功能,以评估用户反馈。作为一名产品分析师,我必须记住各个平台的特性,因为这可能会影响我的分析。平台和功能可用性只是产品分析中需要考虑的几个项目。
  • 约束—一个网站的变更只需要在代码被批准后,由工程师进行部署即可。移动开发者必须制定发布时间表,所有修改必须在指定日期前完成,并在应用商店更新之前提交给苹果谷歌审查。一个应用程序的漏洞修复不能像网站那样快速更新。如果你在等待一个代码变更被部署,考虑延迟,并相应地对你的任务进行优先级排序。

数据量

用户与产品的交互会产生大量的事件数据。想象一下,你在手机或网页上的每次打开、点击和输入都会被记录和保存。作为一名产品分析师,我经常被问到什么功能的使用会影响用户保持率和溢价转化。我必须使我的查询尽可能高效,因为我从数十亿行数据中查询,我犯的每个错误都意味着我在完成分析之前损失更多的时间。了解查询优化,以利用索引或分区,并在从大量数据中提取数据时估计更多的时间来完成分析。

A/B 测试

产品的一个常见 KPI 是用户保持率,而 A/B 测试通常用于产品变更以衡量影响。一个产品可以有许多团队支持产品的不同部分,同时运行所有的实验。请注意正在进行的其他实验,这些实验可能会影响您的实验 KPI,并希望您将大部分时间用于产品实验和测量。在成为产品分析师之前,确保你理解 A/B 测试的概念,因为你很可能会参与评估测试。

片段

KPI 通常因您支持的部门和业务而异。相反,产品有通用 KPI,这些 KPI 不会因公司而改变,比如用户保持率、每日活跃用户和流失率。产品目标可以是通过新功能或产品增强来吸引用户。我以前从不按用户细分来看 KPI,但在产品分析中,通常会按新用户和现有用户来划分用户,以评估产品变化是影响所有用户的行为,还是只影响单个用户。如果只有一个细分市场受到影响,产品经理可能会测试进一步的改进,看看保留率是否有所提高。产品分析师参与这些讨论,并评估这些后续实验,以衡量用户保留的影响。

漏斗分析

漏斗分析来看产品交互是很常见的。例如,注册漏斗可以有多个屏幕,在帐户注册完成之前提示用户输入信息。更多的屏幕会增加摩擦,并可能导致帐户完成率下降。在漏斗的每个步骤中,我们都会评估掉线率,以确定漏斗的任何部分是否需要改进。在支持产品之前,我从不需要进行漏斗分析。现在,任何产品 KPI 调查都要求我考虑可能影响 KPI 的漏斗变化。例如,如果新用户突然减少,除了查看可能导致新用户减少的其他因素,我还需要检查注册流程中是否有产品变更。

结论

与产品打交道使我成为一名更好的数据分析师。我不再像在营销中那样关注一系列常见因素,而是学会了考虑漏斗变化和用户体验可能会如何影响产品结果。通过与产品经理在实验设计和产品计划规模方面的紧密合作,我提高了我的沟通技巧。因为不断的实验来改进产品,我有很多机会练习解释结果和用数据讲故事。转换到产品数据分析师的角色并不是一个无缝的过渡,但这绝对是一次值得尝试的经历,我希望你会发现这也让你成为一名更好的数据分析师。

你可能也会喜欢…

https://madfordata.medium.com/how-to-get-your-first-data-analyst-job-without-experience-7a9afc663439 [## 关于 A/B 测试,产品分析师应该知道什么

towardsdatascience.com](/what-product-analysts-should-know-about-a-b-testing-a7bdc8e9a61)

我在 Correlation One 面向所有人/女性的数据科学计划中的经历

原文:https://towardsdatascience.com/my-experience-with-correlation-ones-data-science-for-all-women-program-692b9c736b4?source=collection_archive---------8-----------------------

看看 Correlation 的一个免费数据科学训练营

在攻读化学博士两年后,我决定不想读完它。相反,我想从事数据科学/ML 工作。于是,我开始求职,上网络课程,做项目,搞人脉。通过网络,我了解到 DS4A/Women——这是一个为女性举办的为期 7 周的免费 数据科学训练营,号称可以与美国银行和 2 适马等公司直接建立联系。不用说,我非常感兴趣。在这里,我想分享一下我对该计划包括申请过程的经验。

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

照片由乔尔·穆尼斯Unsplash 上拍摄

评估

以下摘自网站:

对于从业者,将有一个核心数据科学技能的入门评估,如 Python、统计学和建模。

对于 DS4A/Women 计划,我得到了 60 分钟。对于 DS4A/Empowerment 项目,我认为你以前可以得到 90 分钟(根据我用疯狂的谷歌搜索技巧找到的这篇博客文章)。但是在网站上,现在也是 60 分钟。他们还给了我大约一周的时间来开始评估。

我花了一些时间冥想,思考我的人生决定,并像一个人一样,为即将到来的一切做好自我准备。当然,你也可以花时间温习 Python、统计学和建模。

我想我不能在这里安全地讨论具体的问题。总的来说,我感到惊喜。这些问题肯定是针对那些具有一些 Python 技能和数据处理经验的人的。我想说,如果你像我一样在 STEM,你有一个很好的机会。

面试

大约一个半星期后,我收到了面试邀请。面试官感谢我同意在周末和她见面。作为一名模范博士生,我不知道“周末”是什么。但我不想在面试时说漏嘴,说我什么都不知道,所以我只说了句‘没问题’。

我认为称之为采访让它听起来比以前更可怕。面试官超级冷淡。她问的大多是我的背景,为什么要从事数据科学方面的工作,为什么要申请 DS4A。还有一些行为问题。不过,它们在上下文中是有意义的。但是我还是没有做好准备,尽管我不应该做好准备,因为我也在准备工作面试!那次面试真的让我坐下来想出了一个行为问题的游戏方案。

上层社会

这些课程从美国东部时间周六上午 11 点到下午 5:30 开始,中间有休息时间,最后 2.5 小时是团队合作(为了你的顶点项目)。以下内容摘自网站:

培训包括 2021 年 9 月至 10 月为期四周的在线直播讲座,所有讲座都基于真实案例,并以可用的 Jupyter 笔记本形式提供。

我参加过机器学习的面授课程,以及一些网上课程。他们的一个共同点是,技术和概念通常是在真空中教授的,在漂亮的数据集上,除了教育目的之外,没有太多价值。有了 DS4A,每堂课都从业务环境开始,由教授或真正的数据科学家讲授,并洞察哪些技术是重要的!

此外,他们的 Jupyter 笔记本比我们从该计划中获得的课程数量还要多,每个笔记本都包含一个专注于一系列技能的案例研究。这是一个非常好的自学资源。

顶点工程

这部分很有趣。我看到许多新兵训练营宣传顶点工程是他们课程的一部分,但我经常对此感到困惑,因为如果每个校友都有相同的顶点工程,那还有什么意义呢?

DS4A 在 capstone 项目中非常自由。我们被分成几组。每个小组都有一名助教和一名导师,他们都是数据科学家。小组成员需要讨论并提出自己的想法,寻找数据,并在助教和导师的指导下用这些数据做一个项目。因此,您实际上获得了一个独特的项目和一个关于您在数据团队工作时的故事!

现在对于女子项目来说,日程有点紧。我们有 7 周时间,但我觉得更像是 6 周。前 2 周花在寻找数据和定义项目范围上。然后,花大约 3 周时间进行分析和建模。然后,我们有大约 1 周的时间来整理最终报告、datafolio 和仪表板(并非所有团队都有时间整理仪表板)。这肯定是可行的,因为我在大结局中看到了一些令人印象深刻的项目。但我要说,这高度依赖于你的团队的整体专业知识和时间投入。

社区

在过去的一年半时间里,我一直在慢慢训练自己,当主持人问“有问题吗?”时,不要因为沉默而退缩在变焦会议期间。但是每堂课和每次聚会的热情参与程度都令人震惊。这些女性绝对不会羞于提问,这让人耳目一新。我们被邀请到一个空闲频道,它在整个节目中一直很活跃。人们到处分享技巧、资源和机会。所有我有机会交谈过的女人都超级好又聪明!

就业机会和职业支持

每周,我们都有一个专门的现场会议,讨论求职的不同方面,从如何设计你的简历和 LinkedIn 页面,到如何建立关系网和协商你的薪水。更重要的是,我提到的数据科学家导师?他们亲自看了你的简历,并讨论你如何能做得更好!

此外,一旦你成为研究员,你就可以随时访问充满合作伙伴公司机会的工作板!这些公司在整个项目中亲自来和我们谈论在那里工作的感觉。在我的项目中,C1 还聘请了一名专门的招聘人员,与同事一起在这些机会中寻找合适的人选。

现在,我不会说这是有保障的,因为,当然,它不是。公司不会仅仅因为你是 C1 研究员就自动雇用你,但这个项目肯定会打开大门。

总结

如果你正在考虑,就去做吧!这是 facetime 之上的免费相关教育,面向招聘公司和各级数据科学家。到目前为止,他们提供了 4 个不同长度和目标学员的项目。例如,赋权计划为期 13 周,面向黑人、拉丁裔、LGBTQ+和其他代表性不足的群体。

坦率地说,有时我确实想知道我是否应该申请授权项目,因为它需要 13 周的学习。这是顶点工程的更多课程和更多时间。然而,我认为女子项目正适合我。7 周听起来不算多,但那就是加班 7 周,所以真的要看你的耐力了。

保持联系

我喜欢写关于数据科学和科学的文章。如果你喜欢这篇文章,请在 Medium 上关注我,加入我的电子邮件列表,或者成为 Medium 会员(如果你使用这个链接,我将收取你大约 50%的会员费),如果你还没有的话。下一篇帖子再见!😄

我在 HuggingFace 的 dataset-hub 上上传数据集的经验

原文:https://towardsdatascience.com/my-experience-with-uploading-a-dataset-on-huggingfaces-dataset-hub-803051942c2d?source=collection_archive---------18-----------------------

HuggingFace 的数据集库是一个单行 python 库,用于从 HuggingFace 数据集中心下载和预处理数据集。截至目前,该图书馆包含约 1000 个公开可用的数据集。

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

(来源:self)

在这篇文章中,我将分享我在 dataset-hub 上上传和维护数据集的经验。以下 meme 总结了使用数据集库背后的意图:

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

上传数据集的灵感(作者:self)

获取数据:

在 HuggingFace 人员的帮助和指导下,我能够将模型中心(类似于数据集,HuggingFace 托管 10,000 多个公开可用的模型)上可用信息的元数据下载到一个 csv 文件中。然后,我开始将它作为数据集上传到 dataset-hub。

安装数据集库:

$pip install datasets

添加数据集:

添加公共数据集有两种方式:

  • 社区提供的 :数据集托管在数据集中心。它未经验证并在名称空间或组织下被识别,就像 GitHub repo 一样。
  • 规范 :通过打开 PR(Pull Request) 到回购,数据集直接添加到 数据集回购。通常,数据是不托管的,必须经过 PR 合并过程。

因为我想托管数据,以及预处理脚本(被库称为“数据集加载脚本”),所以我选择上传数据集作为社区提供的数据集

将 csv、json、xml 或任何其他格式的现有数据集转换为数据集有两个主要要求:

  • 数据集加载脚本
  • 数据集元数据

数据集加载脚本:

创建这样一个脚本有很好的文档可用。然而,我更喜欢通过使用与我相似的预先存在的数据集的脚本进行复制粘贴,这些脚本存在于数据集库中。例如:如果我的数据集是 csv 类型,我将从一个类似的 csv 类型脚本开始,并根据我的需要修改它。

该脚本主要需要定义三个组件:

  • 关于列和数据类型的信息(称为特性
  • 从(或本地文件)下载数据并指定培训/测试/验证分割的 URL
  • 利用分割和特征产生 1 行数据

**1。_ info:**CSV 字段的标题需要用它们的数据类型来定义。我最后用了stringint32large_string。f 特性中提供了受支持数据类型的描述。

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

数据类型很重要!(来源:self)

def _info(self):
        return datasets.DatasetInfo(
            description=_DESCRIPTION,
            features=datasets.Features(
                {
                    "modelId": datasets.Value("string"),
                    "lastModified": datasets.Value("string"),
                    "tags": datasets.features.Sequence(datasets.Value("string")),
                    "pipeline_tag": datasets.Value("string"),
                    "files": datasets.features.Sequence(datasets.Value("string")),
                    "publishedBy": datasets.Value("string"),
                    "downloads_last_month": datasets.Value("int32"),
                    "library": datasets.Value("string"),
                    "modelCard": datasets.Value("large_string"),
                }
            ),
            homepage=_HOMEPAGE,
            license=_LICENSE,
            citation=_CITATION,
        )

列“标签”和“文件”是数组,因为它们可以是多个,由库通过dataset.features.Sequence.支持

2。URLs 本地文件:

下一步是定义一个 URL,在我的例子中是一个本地文件。因为数据只是探索性的,没有任何目标标签(不是专门用于训练的),所以不需要测试分割。因此,只有训练数据集分割会起作用。

_URL = "huggingface-modelhub.csv"
...
def _split_generators(self, dl_manager):
    """Returns SplitGenerators."""
    data_file = dl_manager.download_and_extract(_URL)
    return [
        datasets.SplitGenerator(
            name=datasets.Split.TRAIN,
            gen_kwargs={
                "filepath": data_file,
            },),]

3。生成一行:

下一步是生成单行数据。在运行时,适当的生成器(如上定义)将从 URL 或本地文件中选取数据源,并使用它来生成一行。这里,由于数据格式是csv,我们可以使用 python 内置的 csv 模块及其函数csv.reader从文件中读取数据。

def _generate_examples(self, filepath):
    """Yields examples."""
    with open(filepath, encoding="utf-8") as f:
        reader = csv.reader(f)
        for id_, row in enumerate(reader):
            if id_ == 0:
                continue
            yield id_, {
                "modelId": row[0],
                "lastModified": row[1],
                "tags": ast.literal_eval(row[2]),
                "pipeline_tag": row[3],
                "files": ast.literal_eval(row[4]),
                "publishedBy": row[5],
                "downloads_last_month": float(row[6]) if row[6] else 0,
                "library": row[7],
                "modelCard": row[8]
            }

ast.literal_eval是一个将字符串中的数组解析成实际数组(list)的便捷函数。

该脚本可以这样测试:

**>>>** from datasets import load_dataset
**>>>** dataset = load_dataset('PATH/TO/MY/SCRIPT.py')
>>> dataset["train"] # To access train generator
>>> dataset["train"][0] #Access elements in dataset

脚本就绪后,我们继续添加数据集元数据,并准备好发布数据集。

数据集元数据:

文档详细解释了如何为共享准备数据集。为了添加元数据,可以通过datasets-cli使用一个 helper 命令,它是在我们安装datasets库时安装的。

datasets-cli test datasets/<your-dataset-folder> --save_infos --all_configs

运行上面的命令会生成一个文件dataset_infos.json,其中包含数据集大小、校验和等元数据。

上传数据集:

Huggingface 在幕后使用 git 和 git-lfs 将数据集作为存储库进行管理。首先,我们需要创建一个新存储库

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

创建新的数据集 repo ( 来源

一旦存储库准备就绪,就可以应用标准的 git 实践了。即从您的项目目录运行:

$ git init .
$ git remote add origin https://huggingface.co/datasets/<user>/<repo>
$ git pull origin main

现在,我们已经将本地机器与存储库同步。下一步是添加以下文件并提交:

  • 数据集文件(csv): 数据本身
  • 数据集加载脚本:数据的加载器
  • 数据集元数据:元数据,如大小、引用等

但是有一个条件!传统的 git 系统不适合处理大文件。这是通过 git-lfs (大文件存储)来管理的。我们不需要深入了解它是如何工作的,我们只需运行以下命令就可以将大文件推送到 repo:

$ git lfs install
$ git lfs track huggingface-modelhub.csv
$ git add dataset_infos.json huggingface-modelhub.csv huggingface-modelhub.py
$ git commit -m "Commit message"
$ git push origin main

文档也详细介绍了 lfs。因为这只是一个 git repo,所以也可以提交像 README 这样的任何其他文件。Dataset-hub UI 还提供了一种快速更新自述文件(称为 datasetCard)的方法

仅此而已。数据集应上传到数据集中心。要访问它,请运行:

>>> dataset = load_dataset("<user>/<repo>")

将更改推送到已发布的数据集:

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

维护数据集版本(来源:self)

由于数据集的 repo 可以使用 git 进行控制,我认为首先提交到一个dev分支,完整地测试它,然后执行到main的合并可能是一个好的实践。这将大大有助于“意外地”破坏一个已经存在且稳定的工作数据集。这非常类似于标准的基于 git 的软件发布哲学。

另一个优势是数据集版本也不一定需要连续(1、1.1、1.2 等)。不同的分支可以保存不同版本的数据集。

**>>>** dataset = load_dataset("<user>/<repo>",
**>>> **  script_version="dev")  *# tag name, branch name, or commit hash*

卡住时该怎么办:

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

HuggingFace 有一个自主持的讨论平台(来源:self)

拥抱脸论坛非常活跃,团队+社区非常有帮助和支持。我个人觉得比 stackoverflow 更主动,反应更快。你也可以直接在 github 上打开问题,但是我更喜欢论坛,因为它们有点不正式。

没有问题是愚蠢的问题!永远不要害怕问。

那都是乡亲们!

我希望你喜欢这篇文章,并发现数据集库是有用的。我用加载脚本上传的数据集可以在这里查看,并用作 csv 格式的参考。

请在评论中分享你的观点。我也准备在推特上进行讨论。

祝你愉快。😃

我最喜欢的包管理器:Pip 和 Pkg 的比较

原文:https://towardsdatascience.com/my-favorite-package-managers-a-comparison-between-pip-and-pkg-56db9f3d6e6a?source=collection_archive---------49-----------------------

深入了解 Python 和 Julia 的包管理器。

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

图像来源

介绍

这里有很多工具可以改变编程语言的用法,并使其从众多竞争对手中脱颖而出。程序员会经常使用的一个很好的例子是包管理器,它会对他们的语言体验产生巨大的影响。编程世界中出现了许多非常酷和有趣的包管理解决方案,尤其是像 Python 和 Julia 这样的脚本语言。这两种语言都有非常酷的包管理器,分别是 PIP 和 Pkg,我认为它们对依赖关系管理和包安装经常遇到的许多问题有一些非常有趣的解决方案。今天我想后退一步,指出我喜欢这两者的一些特点,因为我认为它们在解决某些计算问题的方式上都很有趣。

概述(CLI)

当谈到像这样的包管理器时,首先要看的也是最明显的是两个包的命令行界面,或 CLI。CLI 是大多数用户与软件包管理器交互的方式,对于所讨论的编程语言的整体用户体验以及用户与软件包的交互方式来说,它无疑是一个重要的方面。从一开始,我们就看到了 PIP 和 Pkg 之间的巨大差异。

PIP 包管理器通常与 Python 编程语言本身分开安装。此外,它通常是在类 Unix 系统上从 Bash 调用的。通常,为了在全球范围内安装 Python 包,我们会运行如下代码:

sudo pip install numpy

另一方面,对于 Pkg,我们有两种选择。在 Julia 中,Pkg 包管理器通常在语言内部使用,而不是作为一个单独打包的应用程序。为此,Julia 包含了用于管理包的 Pkg REPL 和包 Pkg。这两者都包含在 Julia 的基础安装中,在它与语言的集成和 PIP 与 Python 的集成之间建立了明显的区别。这意味着我们通常会使用 Julia 来访问它,而不是 Bash 来调用应用程序。我们可以通过输入朱莉娅·REPL 并按下]来输入 Pkg REPL,或者用朱莉娅打电话给包裹。

juliajulia> ]pkg> add DataFramesjulia> using Pkgjulia> Pkg.add("DataFrames")

我认为这两种方法都很酷。我喜欢添加来自 Pkg REPL 的包裹。这方面另一个很酷的因素是能够在 Pkg 包中调用 using 并在 Julia 中创建一个完整的环境。它使得从包中创建环境变得相当方便,这是我喜欢的。我认为将它作为一个单独的应用程序调用的 PIP 解决方案也很方便,因为它确实使从您的终端快速添加一个包变得非常容易。当然,我不能说这在不像 Unix 的操作系统上是如何工作的,但是在我的 Linux 机器上,这无疑是一个很好的实现,也是用 Python 处理包的一个很好的方法。

虚拟环境

包管理器要考虑的另一个重要方面是如何管理单个项目的包。为此,我们使用了一种叫做虚拟环境的东西,它使得为任何包设置和加载依赖关系变得相对容易,而不管您当前正在使用的包需要什么版本,也不管它们是什么。对于 PIP,我们有 Pipenv。使用 Pipenv,它与 PIP 打包在一起,您可以使用

pip install -r requirements.txt

我认为这是一个非常好的解决方案,然而,在我看来,它确实有点落后于 Pkg 的方法。这是因为 Pkg 使用 Project.toml 文件自动化了创建虚拟环境的整个过程。与 Python 的方法相反,Julian 的包管理方法非常有组织性,并且普遍一致。使用 Pkg.activate()和 Pkg.generate(),我们可以更容易地创建新的环境,其中加载到该环境中的依赖项已经最终包含在该包中。

结论

不管你使用的是哪种高级编程语言,包管理器对于完成工作都非常重要。当然,并不是所有的包管理器都是平等的,肯定有一些东西是这个或那个包管理器更好的。我认为不管你使用什么样的包管理器,将包管理器相互比较并与每一个一起工作都是非常酷和有趣的。我认为这两种实现都有一些很棒的想法,而且两者都可以通过相互研究学到一些东西。

2021 年我最喜欢的 Python Web 框架

原文:https://towardsdatascience.com/my-favorite-python-web-frameworks-for-2021-a255fde2cd68?source=collection_archive---------6-----------------------

这是我最喜欢的 Python 编程语言 DS/ML web 框架的精选列表。

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

(src =https://pixabay.com/images/id-1729157/

介绍

在Python 的世界里,除了数据科学和后端网络开发之外,这种语言已经越来越少被使用。也就是说,数据科学领域有一部分恰好与使用 Python 进行 web 开发重叠。对于数据科学家来说,部署端点和 API 以便通过 HTTP 访问他们的数据是很常见的。如果您的数据科学领域碰巧更加面向软件,那么几乎可以肯定会出现这种情况。在这种情况下,通常这些端点将由数据科学家自己部署,因此学习如何部署这类端点无疑是成为成功的数据科学家的一项重要技能。

幸运的是,有了像 Python 的奇妙包索引这样的生态系统,有很多奇妙的选项可供选择。在大多数情况下,您可以找到您的产品想要或需要的特定特性,或者您喜欢使用的特定特性和代码风格。也就是说,下面的列表将是一个排名列表。当你知道第一名是什么时,你可能会非常惊讶!这当然只是我的个人观点,和我在这个时候的个人偏好。此外,这是从数据科学家的角度来看的。虽然我承认这些包有能力做其他事情,例如 Django 进行全栈 web 开发的能力可能会使它成为使用 Python 的 web 开发人员的一个更好的选择,但对于像我这样的数据科学家来说是一个更差的选择,这可能会影响我对它的排名。最后,如果你想阅读这篇文章更全面的更新版本的前身,这里有一个你可能感兴趣的链接!

</5-smooth-python-web-frameworks-for-the-modern-developer-47db692dfd52>

№10:涡轮

从我们的列表开始是非常值得一提的 TurboGears 框架。在我的上一篇文章“查看 Python web 框架”中,我提到了 TurboGears 以及为什么我喜欢这个包,现在它又回来了——这是完全合理的。与我通常选择的创建端点和仪表板的许多选项相反,TurboGears 是一个类似于 Django 的全栈框架。

让 TurboGears 令人敬畏的是,它像 Django 一样功能丰富,但往往比 Django 更轻便。虽然 Django 的重点是全栈,它的许多特性都被推送到使用该框架制作的每个应用程序中,但 TurboGears 不会先发制人地向您提供过多的特性。虽然对于全栈来说,这可能意味着在全栈应用程序中启动和运行某些功能可能需要更多的工作,但这也意味着在简单的返回和 API 方面,TurboGears 变得比 Django 更加通用。

我非常喜欢 TurboGears 的另一点是编程接口。许多 Python 的 web APIs 并没有在它们的 API 中使用令人难以置信的 Python 方法,但是 TurboGears 确实做到了这一点。界面非常 Python 化,非常面向对象。

№9:败家子

Black Sheep 是一个 web 框架,灵感来自于像 ASP.NET 和 Flask 这样的优秀工具,可以用来轻松地创建基于事件的 web 应用程序。尽管名为 Blacksheep,但它是一个非常普通的 web 框架,具有一些独特的特性,可以使它成为您下一个项目的资产。首先,Blacksheep 可以是同步或异步的,并且是非阻塞的,如果您碰巧正在寻找这种东西,这是很好的,因为这个列表中的许多其他框架不是这个就是那个。然而,Blacksheep 也允许您根据请求更改这一点。换句话说,您可以混合异步和同步操作。

使用 Blacksheep 的语法非常类似于 Flasks 的语法。大多数时候,语法最终只是略有不同——这并不奇怪,因为 web-framework 是建立在 Flask 之上的。话虽如此,我也认为这是一件好事,因为它很熟悉。

№8:龙卷风

Tornado 不仅是一个伟大的 web 框架,而且还是一个异步网络库。凭借这一特性,Tornado 能够为数千个开放连接提供服务。这是因为 tornado 使用非阻塞网络进出流。这使得 Tornado 成为那些希望在运行不同 web 服务器的同时将许多端点部署为同一服务器的一部分的人的非常合适的解决方案。

在语法方面,Tornado 采用了一种非常类似涡轮的路由方法。使用 Tornado,而不是把逻辑放在路线中,你通常会构建类来提供回报。

№7:金字塔

名单上的下一个是金字塔。Pyramid 是一个很棒的网络框架,因为它非常有效地在轻量级和功能丰富之间取得了一个稳固的平衡。当然,我相信这种平衡在某种程度上是一种光谱,但金字塔对我来说是一个合适的位置。我不能忍受某些框架的一点是,当你不需要它的时候,所有的膨胀都被扔进了你的项目,而金字塔在这种膨胀中取得了很好的平衡。同时不要将太多的特性混合在一起,以至于仅仅通过查看项目目录就感觉过载。

金字塔既可以是基本的,也可以是复杂的,这可能会吸引那些希望在未来扩展其端点的数据科学家。像前面提到的一些框架一样,Pyramid 采用非常 Pythonic 化的、面向对象的方法来构建全栈应用程序和端点。

№6:姜戈

说到 Python 的网络开发,Django 已经成为工作的同义词。这是有充分理由的,因为如果说 Django 有什么特质的话,那就是包容性。Django 打包了一些非常复杂的全栈 web 开发可能需要的所有工具。也就是说,Django 的最终目标是 web 开发人员,而不是数据科学家。

对于我所做的工作,Django 最大的缺陷仅仅是它不是针对我的。虽然这个列表强调了端点和仪表板,数据科学家的网络开发,我仍然认为 Django 必须被提及,因为它是一个典型的 Python 网络框架,在业界非常流行。我发现 Django 对您正在创建的应用程序做了很多假设,制造了很多额外的依赖项和代码,最终导致了很多膨胀,而您想要做的只是部署一个端点。此外,在制作仪表板之类的东西时,Django 仍然存在问题,因为它更像是一个后端工具。也就是说,Django 只是为了一个目的而创建的,而 Flask 服务于 Django 所缺乏的目的,所以这些属性对这个包都有意义。

№5: Jam.py

接下来是专门针对数据工程的 Python 编程语言的 web 框架。虽然这个网络框架肯定是直接针对数据科学家的,但它仍然相对通用,可以用于几乎任何事情。然而,Jam.py 真正的亮点在于创建分析仪表板。

与这个列表中的许多其他选项相比,Jam.py 是非常基于模板的。虽然这在某些情况下可能是负面的,例如端点,但它确实为使用该框架构建仪表板带来了显著的优势。这种基于模板的方法的伟大之处在于,它使得非常快速地构建像交互式仪表板这样的全栈应用程序变得容易得多。这意味着在大多数情况下,Jam.py 非常容易使用!

真正让 Jam.py 变得出色和独特的是,Jam.py 不仅仅是一个 Python web 框架,还是一个用于构建交互式仪表盘和基于 web 的演示的 Python web 开发集成开发环境(IDE)。IDE 是全浏览器的,基本工作原理是创建一个服务器,然后允许您在该服务器上进入一个仪表板构建应用程序。这使得完全有可能利用 Jam.py,即使你甚至不知道 Python!Jam.py 也是可扩展的,这意味着基本上任何 Javascript 或 Python 库的元素都可以轻松地实现到用 Jam.py 构建的仪表板中。Jam.py 对我来说是一个额外的加分,因为它是如此易于访问和使用,因为真的没有其他东西像它一样!

№4:虚线

在这个列表中排在第四位的是 Plot.ly Dash。有些人可能会惊讶地发现这个包在这个列表中排在这么靠前的位置,但是 Dash 确实是一个构建交互式仪表盘的好工具。当然,Dash 是一个如此神奇的工具的大部分原因是因为 Plot.ly 首先是非常棒的。

虽然 Dash 确实有其缺点,但在我看来,它确实是 Plot.ly 和那个令人惊叹的图形库的功能,它将这些交互式仪表盘带到了一个高点。Plot.ly 可视化很容易制作,而 Dash 框架使它们更容易呈现。Dash 是基于 Flask 的,所以它的大部分工作方式与人们通常对路由语法的预期完全相同。在我看来,Dash 最大的缺点就是缺乏可扩展性和定制性。虽然 Dash 支持 Plot.ly 可视化,但让其他东西工作,甚至定制用户界面可能会非常困难。有些方面甚至是不可能改变的,有点不幸。

3 号:烧瓶

如果有一个网络框架,我可以称之为“可靠”,那就是 Flask。虽然 Flask 可能有点简单,但这种简单也有利于它。作为终结点和类似事物的行业标准,Flask 实际上非常容易使用,并且能够快速响应给定的请求。

它也可以是多才多艺的。尽管它可能依赖于一些相对基本的模板引擎,但它最终仍然能够做很多事情,而这个列表中的其他 web 框架已经做了足够多的工作。你也可以在 Flask 中添加许多附加组件或额外的功能,因为你可能已经注意到许多这些包都是基于 Flask 的。如果您想从头到尾学习如何开发和部署 Flask endpoint,包括服务器管理,我实际上有一个很酷(也很经典!是两年前写的!)的文章,您可以在这里查看!:

№2: FastAPI

另一个我非常喜欢的 Python web 框架是 FastAPI。我喜欢 FastAPI 的一点是,它被创建得简单而轻量。与这个列表中的许多其他选项相比,FastAPI 更轻量级,响应速度更快。这当然是我在寻找一个好的数据科学网络框架时所寻找的东西。因此,我认为这是我个人的首选。我还认为这个 web 框架非常容易使用,在很多方面它都很像 Flask。

№1:埃米特

我最近偶然发现并爱上的一个 web 开发框架是 Emmett。Emmett 是一个很棒的 web 框架,因为它速度快,易于使用,最重要的是:

别挡路!

这并不是来自与我同名的框架的偏见,它只是一个方便易用的框架!在很多方面,Emmett 属于 Flask 一方,但用许多可选的内置功能进行了升级。最后,我认为埃米特是最好的选择之一!由于结合了必要的后端 web 开发特性(如身份验证)和前端特性(如高质量的模板引擎),甚至还有可能做一些前端和后端的事情。总的来说,这是一个很好的选择,我写了一整篇关于它有多好的文章,如果你愿意,你可以在这里阅读:

[## 用 Python 语言用 Emmett 进行优雅的 Web 开发

towardsdatascience.com](/elegant-web-development-with-emmett-in-python-612ed898a71e)

结论

数据科学的 web 开发方面通常是该领域中被低估的部分,尤其是对于入门级的初级数据科学家而言。然而,尽管忽略了这个主题,端点和仪表板是数据科学领域的一个非常重要的支柱。幸运的是,由于数据科学目前围绕着 Python,我们有大量非常好的选项来完成我们需要完成的工作!事实上有太多好的选择,很难把它们缩小。我还认为,最终这些可能会不时地为我切换,因为我可以互换使用它们,因为它们都有稍微不同的用例。

如果你没有看到一个你真正喜欢用来写东西的框架,我很乐意在回复中了解更多!请记住,这些只是我的主观喜好,其中一些是出于我喜欢在 web 框架中看到的主观原因。当然,你对此的想法可能会有所不同,所以我很想听听你对此的看法!非常感谢你阅读这篇文章,我希望它能鼓励一些人跳出框框思考如何创建你的下一个网络应用。

我最喜欢的管理、组织和阅读研究论文的工具

原文:https://towardsdatascience.com/my-favorite-tools-for-managing-organizing-and-reading-research-papers-56525083b827?source=collection_archive---------1-----------------------

这样你就不会迷失在文件的海洋中。

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

UnsplashMari Helin 拍摄的照片

如果说我看得更远,那是因为我站在巨人的肩膀上*——艾萨克·牛顿。*

上面的引用首次出现在牛顿于 1675 年写给罗伯特·胡克的一封信中。从那时起,这句话就被用来象征科学的进步和发展。人们常说,了解机器学习领域最新动态的最佳方式之一是阅读研究论文。然而,这说起来容易做起来难。阅读研究论文并不是每个人都喜欢的。虽然许多人觉得它们令人生畏,但其他人觉得不可能跟上每天发表论文的剂量。 Arxiv —查找此类论文的必去网站之一,已提交超过190 万篇论文(截至 2021 年 10 月*)并且每天都在增加。更糟糕的是,还有一个` 怕漏了’ 上的最新领域。如果你属于这个群体,不要担心,你不是唯一的一个。许多人都在同一条船上航行,以至于有一个完整的吴恩达关于阅读研究论文的讲座。*

吴恩达关于阅读斯坦福 CS230 课程研究论文的讲座

阅读研究论文确实是一门艺术,可以从一些方便的工具开始,随着时间的推移而发展。在这篇文章中,我想分享几个这样的工具,我用它们来组织我最喜欢的研究论文,并获得最新的信息。这不是一个详尽的列表,但对于那些研究和文献综述领域的新手来说,这是一个很好的起点。

1.ArXiv 理智保护者

在处理 ArXiv 的研究论文时,我使用 Arxiv 理智保护程序来保护我的理智。由 Andrej Karpathy 创建的网站 Arxiv Sanity Preserves 是一个帮助你找到你最喜欢的论文和该领域趋势的网络界面。该网站为你提供了一个搜索引擎来查找任何主题的论文。然后,您可以将喜爱的论文保存在您的库中,以便以后访问。根据您在网站上的搜索,该网站还将提供建议,这些建议将随着时间的推移而改进。这是 Karpathy 的一个很棒的介绍视频,解释了如何浏览网站。

Andrej Karpathy 关于使用 arxiv-sanity 的视频

根据作者的说法,目前的网站正在维持生命,他正在开发第二版。

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

图片作者|来源: Reddit

有趣的事实:以 CFOP Speedcubing 闻名于世的巴德梅菲斯托实际上是安德烈卡帕西😲

2.ArXiv 虚荣

Arxiv Vanity 是一个有用的网络界面,用于查看来自 arXiv 的研究论文。也就是说;它以更易读的格式呈现 arXiv 文件,令人赏心悦目。根据作者的说法:

arXiv Vanity 将 arXiv的学术论文呈现为响应性网页,这样你就不用眯着眼睛看 PDF 了。

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

Arxiv 虚空截屏|作者图片

3.相关论文

一篇研究论文不是孤立产生的。相反,每篇论文都与其他几篇论文有联系。读者会对论文中提到的参考文献和引文感兴趣。 Connected papers 是为解决这一特定问题而创建的可视化工具。它创建由与感兴趣的论文具有最强联系的论文组成的图。除此之外,它还展示了与论文相关的前期和衍生作品。

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

相关论文的截屏|作者图片

4.门德利咨询经理

我最初是在一个论坛上了解到 Mendeley 推荐经理的。Mendeley reference manager 是一款免费工具,可以帮助您在一个地方存储、组织和注释您的研究论文。笔记本设施使你能够在阅读时做笔记,也可以整理你在论文中的各种重点。下面的演示 gif 应该给你一个关于它的用法的好主意。

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

Mendeley Reference Manager 桌面应用的屏幕截图|作者图片

5.代码论文—方法语料库

我们都喜欢代码为的网站论文——这是一个免费开放的资源,包含机器学习论文、代码、数据集、方法和评估表。然而,我想指出网站上的方法部分,我发现它特别有用。

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

作者图片来自代码为的论文网站

这一部分包含了组织良好、分类有序的论文。每个类别还包括根据使用的方法类型分类的论文。例如,有一个计算机视觉类别,包含与计算机视觉技术相关的论文。然后,它被进一步分为 853 个子类别,每个子类别包含一个基于不同计算机视觉方法的论文集。

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

截屏来自代码为的论文网站|图片由作者提供

结论

我在上面文章中提到的工具和网站给了我很大的帮助。我现在在阅读论文时做笔记,然后用笔记来写文章和帖子。机器学习领域正在快速变化,每隔一天就会有新的研究和最先进的实现问世。然而,这种进步是由于前人不屈不挠的工作和知识。因此,阅读研究论文、理解、实施并以此为基础是研究和科学进步的真正本质,这让我们想起牛顿的名言——“如果我看得更远,那是因为我站在巨人的肩膀上”

我作为医疗保健数据分析师的头 100 天——我学到的经验

原文:https://towardsdatascience.com/my-first-100-days-as-a-healthcare-data-analyst-lessons-i-learned-c8422d463575?source=collection_archive---------8-----------------------

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

图片来源:作者

医疗保健是人类生活中发展最快、需求最大的领域之一。如今,随着技术的快速发展,医疗保健行业从未落后过。无论是计算机的发明,互联网的繁荣,还是现代的大数据和人工智能,医疗保健都是一个需要适应和发展的行业。

医疗行业对数据分析的需求是巨大的。

大数据改变了我们跨行业(包括医疗保健)分析、管理和利用数据的方式。随着世界范围内的数字革命,数据驱动的质量改进成为医疗保健转型的核心。

我认为,一个组织的医疗保健决策和分析的有效性取决于其利用这些数据的能力。这就是高效医疗保健数据分析师的价值所在(就是我!)

我获得了管理信息系统硕士学位,对金融分析有着强烈的热情,并在金融科技领域追求自己的职业生涯……直到我参加了一门医疗保健分析课程,迎来了真相时刻。医疗保健数据和分析鼓励我继续前进,在夜里 3 点,我以同样的热情工作了五个小时。进入医疗保健行业三个月后,我收到了芝加哥蓝十字蓝盾公司的录用通知!

我在 6 月份加入了这家公司,到目前为止,我学到了很多东西,更重要的是学到了很多东西!我过去在学校课堂上的经历(伊利诺伊大学芝加哥分校让我为“现实世界”做好了准备),在百事可乐两个不同团队的实习经历,团队项目一切都可以在今天使用。

以下是我在过去 100 天里学到的一些东西。

1.提高您的 SQL 技能

回到研究生院,当教授讲授实体关系图(ERD)时,我会最不注意,而今天当我每隔一天使用实体关系图时,我意识到保持强大的数据库知识基础是多么重要,而且至少要有从云存储到社交媒体帐户的 Spark 流的初级概念知识。

如果我的公司没有大数据查询,我的一天就是不完整的,当一天中使用五个不同的数据湖来获取和处理一天的数据时,您不可能不深入学习 SQL。

从理解左连接和内连接、子查询(查询中的查询)或创建临时表之间的区别和影响,当您作为数据分析师工作时,关于 SQL 的一切都很重要。

2.为你的工作建立商业敏锐性

在医疗保健行业,商业语言就像任何常用术语一样。不仅仅是行话,还有一个国家的保险历史、流程架构、资金流、数据流、责任和业务的利益相关者——你需要每个部分都参与到这个拼图中才能收工。

当我作为一名数据分析师加入我的公司时,前三周的培训只是习惯于业务语法、大量术语、业务资源、公司愿景和使命,最后是数据部分,这是你被聘用的原因。

你可能擅长编写 Python 代码、预测建模或 BI 工具,但如果你不了解业务所涉及的风险,一个数字上升或下降对你来说并不重要。与此相反,如果你知道你理解数据分析中的错误术语对业务意味着什么,你的故事就完成了。

流程中每一步的基本第一步是设置正确的上下文。从提出正确的问题到选择正确的数据,再到向最终消费者解释分析结果,一个好的故事需要商业头脑有目的地描绘出结果。

数据分析和商业敏锐性应该是赞美,而不是替代。

3.理解数据

如果你是一个面向业务的数据专家,你就是这个能够奇迹般地将来自两个不相交数据源的数据点组合起来并提供答案的向导。对于像这样的随机请求,如果您不太了解您的数据,那么您现在就陷入了一个试图找到一个数字的恶性循环中。

医疗保健数据非常庞大;从公共或私有数据、提供商数据、索赔数据、调查/营销数据、关于一般消费模式的信息、医疗保健提供系统生成的管理数据、医生笔记到保险数据等等。

每过一天,我都意识到了解我将使用的数据的显著特征对我来说是多么重要:数据来自哪里,谁拥有数据,多个数据集的用例,数据质量,每个数据集的不同数据点。

归根结底,每个数据问题都遵循标准的数据科学生命周期-从业务理解到数据清理和挖掘、数据探索、功能工程、预测建模和数据可视化,再到将分析与业务相关联-数据为您指路。

能够编写模拟现实世界流程的代码,并有切实的成果来解决重要问题。

比如,你想找到你的哪个客户有可能会再购买保险,如果他们不买,你想找到原因。为此,您需要您的数据点到位-人口统计信息(患者姓名、出生日期、性别、地址、受保护健康信息(PHI))-拉动保险信息、计划名称、共付额、保险日期、网络信息以及更多此类数据字段。

一个高效的医疗保健数据分析师可以定义一个良好的数据模型,该模型可以捕获所有需要的数据元素,并以一种有意义的方式将它们关联起来,以反映实际的工作流。

4.了解您的工具

作为一名应届毕业生开始一份工作,有一个不言而喻的语法——你应该知道工具,并具备所需的技能和能力。总会有一段培训期,但没人会教你大量的工作。你学习并适应。

我在研究生院的实习对我帮助最大。

实习开始让你准备好流行数据工具所需的面向业务的知识。

结构化查询语言(SQL)

一个实际操作的数据分析师必须能够通过结构化查询语言(SQL)来操作数据库,并从中清晰地表达出一份报告。当我说 SQL 时,认识到 SQL 有各种不同的方言,我一般指的是以 SQL 为语言核心通过代码处理数据库的能力。

MS Excel

怎么强调这些 excel 快捷方式对你的帮助都不为过。如果没有什么,数据透视表和宏的坚实基础是一个很好的起点。

我的日常工作主要涉及基本的 Excel 功能,如连接、查找和替换、过滤和排序、条件格式、索引匹配、删除重复项、逻辑函数、宏和数据透视表。

(舞台上由人扮的)静态画面

或者任何数据可视化工具…

我一直是 Tableau 的粉丝,能够有效地呈现数据,让外行观众以预期的方式进行解读,这是我认为一个普通分析师和一个杰出分析师的区别。

讲故事是业务流程中不可或缺的一部分——发出危险信号或使用数据提出建议,在不牺牲质量的情况下降低成本。

计算机编程语言

在开始新工作之前,至少掌握一门数据编程语言的中级到高级知识总是一个很好的起点。

5.PowerPoint 和沟通技巧

作为数据专业人员,没有人会花时间关注演示或沟通技巧。

如果你没有面对客户,你仍然会向你的团队做报告,向别人传达你的发现。确定你的听众,并根据他们的知识水平传达你的演讲。

我通常从声明任务的为什么开始。我的导师建议我总是从陈述你为什么做你所做的事情开始——这为根深蒂固的对话设置了前提,并设置了正确的背景。一两分钟的介绍,涵盖议程并直接进入任务的结果。一旦人们看到了结果,当你向他们讲述你是如何到达那里的以及克服了哪些挑战时,他们会更好地理解。

6.负责任的领导

除了掌握这些技能,还应该注重提高个人的责任感。表现出责任感的人会在组织中脱颖而出。

你在承担责任时的行为让你值得被认可。

就我个人而言,我总是努力使我的目标和价值观与组织的目标和价值观保持一致。你要对你工作的成败负责,因此,一个人应该计划你的工作对他人的影响。

这就是我的博客的结尾。感谢您的阅读!如果你也在医疗保健领域,请在评论中告诉我。我很想知道更多关于你的作品。

如果你喜欢阅读这样的故事,并希望支持我成为一名作家,可以考虑使用这个链接注册成为一名媒体会员(我可以赚取一小笔佣金,而不需要你额外付费!)

数据帐篷快乐!

Rashi 是一名来自芝加哥的数据奇才,他喜欢将数据可视化,并创造有见地的故事来传达隐含的见解。当她没有赶着赶上学校的最后期限时,她喜欢喝一杯好咖啡,写关于数据的博客……

我的第一次人工智能黑客马拉松

原文:https://towardsdatascience.com/my-first-ai-hackathon-4e67cf988dd2?source=collection_archive---------11-----------------------

我学到的一切,以及你如何赢得你的第一次黑客马拉松

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

我涂鸦的尝试

退出。好奇。焦虑。就像任何第一次参加黑客马拉松的人一样,我脑海中闪过许多想法。这是我成为传奇 CS 之神的第一步。尽管面临艰巨的挑战,但前方道路的每个转弯处都会有意想不到的回报。在接下来的 5 分钟左右的时间里,请允许我带你去神秘化,我会分享更多关于我的经历,让你在注册你的第一次黑客马拉松时有一个更好的了解。

背景

大约半年前,我和几个朋友参加了一个应用程序设计比赛。它的结构相当简单。比赛前的几天,由外部供应商和专家举办的可选培训研讨会占满了时间。虽然我们没有通过第一轮,但它让我对黑客马拉松的进行有了一个简单的了解。几个月过去了,我设法让一些朋友加入了我们的第一次人工智能黑客马拉松。我们中的几个人是未来的计算机科学学生,具有非常基本的编程知识。我们还对人工智能和一些方便的工具有了初步的了解(非常感谢在线课程)。差不多就是这样。完全不知道我们为自己注册了什么,我们一头扎进了黑客马拉松。

黑客马拉松结构

首先,这是一个很大的遗憾,但是黑客马拉松是百分之百虚拟的,符合所有的健康指南(世界仍然被新冠肺炎震撼)。它持续了 3 周,真正的黑客马拉松在最后才举行。前两周基本上是“培训阶段”,参与者被关于人工智能和流行的机器学习平台 google colab 的速成讲座轰炸。在此期间,我们安排了几次 AMA 会议,在会上我们可以澄清我们的任何疑问,但考虑到长时间尴尬的沉默,结果证明这是徒劳的。

问题陈述

首先,我们给出了一个虚构的场景。在不远的将来,通过控制论的增强,动物被广泛用作监视船,参与者的任务是开发人工智能模型,以识别和识别动物图像和音频文件。比赛分为 6 个不同难度的计算机视觉(CV)和语音分类(SC)挑战。这些以训练和测试数据集的形式出现,以判断参与者模型的准确性和性能。第一个 CV 和 SC 挑战数据集在活动开始时发布,我们有大约两周的时间来微调我们从讲座中学到的关于这两个挑战的基线模型。此后,第三和第四个挑战在黑客马拉松第一天发布,最后两个挑战在黑客马拉松第二天发布。只有成功达到最低及格标准的队伍才能参加随后的挑战。

黑客马拉松前准备

正如一些成功人士曾经说过的,“如果你没有做好准备,你就是在为失败做准备。”虽然我们的参与主要是为了更多地了解当地的黑客马拉松场景,并获得宝贵的经验点,但我们不会不战而退。经过一些深入的研究,我指的是几个小时的谷歌搜索,我能够提取一些关于过去黑客马拉松的有价值的信息。尽管问题陈述和结构可能(并且很可能应该)有很大的不同,但是强烈建议任何希望更清楚地了解预期情况的人采取这一步骤。幸运的是,我们发现了一个 2 年前参加过同样活动的选手写的博客。与本文类似,它包含了一份冗长的第一手资料,描述了发生的一切,以及一些示例代码。

是的,虽然我确实提到了问题陈述的变化,但我怎么强调访问这些样本代码的重要性都不为过。数据集、人工智能模型和函数可能略有不同,但当我们最终构建和编写我们的机器学习模型时,整体框架是至关重要的。一些团队包含了他们使用的各种 ML 技术,这些都是值得深入研究的有趣领域。

培训,学习,再培训,再学习

为了启动我们的培训和学习,每个人都完成了一个快速 python 速成课程,以刷新我们的记忆,加速我们的神经引擎。组织团队还提供了 30 多个由 IBM 人工智能讲师录制的讲座视频。这时,我们先前的人工智能知识派上了用场。由于主题的深度,仅仅在几周内给出对 AI 的全面理解几乎是不可能的。许多重要的关键想法被轻松地通过,更多的时间花在解释 Google Colab 中的代码实现上。即便如此,这些解释还是让人觉得仓促且不充分。我们不得不依靠我们最好的朋友谷歌来获得更多的答案。与它看起来的相反,能够搜索信息和在线帮助是计算机科学和软件工程中的一项关键技能。即使是世界上顶尖的程序员也经常在网上寻找解决问题的灵感,见鬼,他们甚至应该在大型技术编码面试中加入这一点。

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

克林特·帕特森拍摄的 Unsplash 图像

掌握一件事的最好方法是教它。感谢我最喜欢的物理学家,伟大的理查德·费曼,我们能够更好更快地掌握概念。轮流分解概念,互相教导,好像对方完全没有先验知识,这有助于暴露我们概念上的缺陷。这也让我们能够补充我们的学习。我们纠正了彼此的错误,并确保每个人都对我们的神经网络模型有一个完整的(或至少有能力的)理解。

在不深入探讨技术领域的情况下,我将试图解释我们工作的关键。所有团队都在 Google Colab 中获得了一个基线 ML 模型,在这个模型中,我们将解析给定的训练和测试数据集,以查看我们的模型执行得有多好。与从头开始,一层一层地学习构建模型的基本结构不同,基线代码采用了迁移学习。想象一个博士研究项目,其中研究人员不是从零开始,而是在最新的相关研究论文的帮助下研究当前信息。从一个预先写好的模型开始,我们的团队不得不对代码进行逆向工程,以完全理解每一行代码在做什么。虽然这大大提高了我们对迁移学习和各种神经网络模型的理解,但它推迟了我们在黑客马拉松中的进度。

图像识别人工智能模型通过对特定的标记数据集进行训练来工作。训练集通常由一幅图像(例如一只猫)和一个标签(“猫”)组成。类似于给孩子看图片卡,我们“教”人工智能正确地识别一只猫的图像,而不是任何其他动物。有不同的方法来实现这一点,例如特征提取等。然后,对于经过训练的模型,下一步将是使用模型从未见过的新图像的测试数据集来测试训练的好坏,并评估它可以识别图像的准确程度。这相当于一个人类孩子参加一个小型考试来验证他的学习。AI 正确识别的图像越多,精确度和性能就越高。

现在,有多种方法可以提高这种性能。虽然模型调整确实改善了结果,但数据扩充通常被证明对准确性有更大的提升。这一步包括在将训练数据集传递给我们的 AI 进行学习之前,对其进行清理和细化。首先,检查标签错误的数据总是有用的。毕竟,你不会想给你的孩子一张大象的照片,然后告诉他们那是一只长颈鹿。移除或重新标记此类数据可能会很繁琐,但可以通过自动化来增强。

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

鸭肉还是披萨?memegenerator 生成的图像

接下来,我们希望我们的人工智能能够准确一致地识别图像,即使在条件不理想的情况下。当我们指着一只鸭子的蹼足时,我们希望我们的孩子能认出它是一只鸭子,而不是橙色的披萨片!通过数据扩充,我们可以通过水平或垂直翻转图像、旋转、剪切、裁剪、添加模糊或雨水滤镜来模拟恶劣的天气条件、添加高斯噪声、更改色调饱和度亮度等方式,向训练数据中引入随机变化。这些只是各种技术来模拟我们的人工智能可能被‘测试’的独特变化。

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

作者图片

最初,在黑客马拉松的早期阶段,测试数据集相当一致和简单。然而,随着挑战的进行,数据集中出现了更多的变化。一些照片更模糊,甚至光线不好,雨滴遮住了主体。这就是我们的数据增强帮助扭转了局面。结果,我们的人工智能经过了充分和相关的训练,能够在雨中看到一只恐龙的照片,并识别出它是一只恐龙,而不是一团灰色。

结论

就像生活中的任何冒险一样,在开始旅程之前设定一个目标总是有益的。设定一个可实现的目标对于突出团队的重点,确保每个人在整个比赛期间都遵守纪律是至关重要的。你们中可能有很多人考虑参加黑客马拉松只是为了曝光,只是为了涉猎一点,获得一些经验。设定一个目标,可以是前 10 名甚至前 3 名登上领奖台,任何目标都会极大地提升整体体验。团队将更积极地参与并开发一个可行的解决方案。如果你没有达到任何一个最初的目标,那也没什么。我可以有把握地说,我的团队玩得很开心,结果从这次经历中收获了很多。

这基本上概括了我的第一次人工智能黑客马拉松。希望这能激励你鞭策自己,报名参加下一次黑客马拉松!最重要的是,记得玩得开心,一路上结交新朋友!祝大家黑客快乐。

我在 Kaggle 的第一枚金牌:NLP 竞赛的技巧和诀窍

原文:https://towardsdatascience.com/my-first-gold-in-kaggle-tips-and-tricks-for-an-nlp-competition-cec48dda5895?source=collection_archive---------25-----------------------

或者如何用拥抱脸模型解决回归问题

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

马克斯·哈林金在 Unsplash 上的照片

自然语言处理是深度学习中最令人兴奋的领域之一。在计算机视觉领域,我们使用迁移学习已经有几年了,并且有非常强大的预训练模型,如 VGG、Resnet 或 EfficientNet。随着著名的注意就是你需要的全部论文的发表,自然语言处理领域也有了突破。Huggingface 上有数千个预先训练好的 NLP 任务模型,使我们能够用比以往更少的数据创建最先进的模型。

关于比赛

比赛的主持人是 CommonLit ,一个非盈利教育科技组织。他们提供免费的数字阅读和写作课程。在教育中,给学生适合他们阅读水平的课文是很重要的。老师不应该直接给一个 10 岁的孩子读歌德的《浮士德》,然而课文仍然应该具有挑战性。

这就是 CommonLit 经常要求教师和学者根据可读性对某些文本进行排名的原因:

目标值是布拉德利-特里(Bradley-Terry)对 111,000 多个摘录进行成对比较后得出的结果。3-12 年级的教师(大多数在 6-10 年级授课)是这些比较的评分者。—斯科特·克罗斯利,竞赛主持人之一

结果是从-4 到+2 的等级,数字越大表示可读性越好。每个节选一次由几个人评价。然后将平均值作为最终得分。在挑战中,有一个包含文本和相应分数的训练数据集。该模型应该学习分数,然后预测新文本的分数。

共同的方法

预先训练的拥抱脸模型已经变得非常流行,用于任何类型的 NLP 任务:分类、回归、摘要、文本生成等等。在竞争的早期就很明显,transformer 架构的性能明显优于传统的机器学习方法或 LSTM 架构。因此,很大一部分参与者关注于变压器的微调。由于生成带标签的训练数据的资源密集型过程,可用的示例相对较少,大约 2800 个示例。大多数人最初使用 Roberta-base,一个有 12 层、12 个头和 1.25 亿个参数的变压器,它已经给出了很好的结果,无需太多的微调。但是,我们确定了几个可以显著提高性能的字段,我将在后面简要说明:

  • 大型模型架构
  • 辨别学习率
  • 定制头
  • 装袋和堆放
  • 伪标记
  • 基础设施

大型模型架构

从其他比赛中得知,预训练模型的较大版本通常表现更好。某些架构通常有小型、基础和大型版本(例如 RoBERTa)。这些区别主要在于隐藏层的数量、隐藏状态的大小和头的数量。

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

罗伯塔基地对罗伯塔大

这种联系具有直观的意义:更多的参数允许更好的模式映射,即模型可以学习更多和更深。较大的型号在这次比赛中也表现得更好。然而,由于数据有限,或者他们只是在训练数据上过度拟合模型,许多团队未能使模型收敛。我们的突破是实施了区别学习率和自定义头。

辨别学习率

众所周知,在迁移学习中,以相同的学习速度训练所有层并不总是有意义的。有时所有嵌入层都被冻结,头部以较大的学习速率被训练,然后所有层以较低的学习速率被再次训练。

这个想法是神经网络的第一层学习一般概念,然后每层学习越来越多的特定任务信息。

由于这个原因,我们不得不调整第一层小于,例如,新的头部,它仍然包含初始化时完全随机化的权重。因此,我们实现了一个定制的优化器。我们对 RoBERTa 主干使用线性递增的学习速率,对头部使用 1e-3 或 2e-4 的固定学习速率(取决于预先训练的模型)。递增的学习速率从第一层的 1e-5 开始,到最后一个嵌入层的 5e-5 结束。

定制头

我个人一开始觉得这个话题有点混乱。当您微调预训练模型时,通常会删除神经网络的最后一层(例如分类头)并用新的神经网络替换它。变压器通常输出最后隐藏状态。这包含相应序列的所有标记的所有最后隐藏状态。在开始时,总是有特殊的 CLS 令牌,根据 BERT 论文的作者,该令牌可用于下游任务(并且在没有进一步微调的情况下也用于分类)。这个想法是,这个令牌已经是整个序列的表示。这个令牌在这场比赛中经常被用作回归头。另一种可能性是额外输出池状态。这包含 CLS 令牌的最后隐藏状态,由线性层和 Tanh 激活函数进一步处理。这些输出也可以用作回归头的输入。还有无数更多的可能性和一个非常全面的总结可以在这里找到。
我们尝试了不同的表达方式。最后,我们还使用了 CLS 代币和一种注意力集中的形式。BERT 论文的作者在他们的一项测试中显示,连接多个层比只使用最后一层可以产生更好的结果。

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

Jay Alammar 在他的博客中写道:哪种载体作为情境化嵌入效果最好?

背后的想法是不同的层包含不同的信息。因此,我们已经连接了最后 4 层的 CLS 令牌。此外,我们为最后 4 层生成了注意力权重。然后我们连接结果,并通过最后一个线性层传递它们。下面是实现过程:

装袋和堆放

如前所述,我们在这场比赛中没有太多的训练数据。超过 2 个时代的训练导致排行榜和我们的交叉验证分数之间的过度拟合和巨大差距。我们使用 5 个折叠来训练数据,并为每个折叠创建一个模型。我们创建了一个评估调度程序,以便随着分数的提高(根据较低的 RMSE)更频繁地进行评估。在 2 个时期内具有最佳验证分数的模型被保存。我们设法得到了与排行榜的密切关联:我们的简历越低,我们的 lb 分数越好。这是每个挑战中最重要的事情之一:

如果可能的话,你应该努力缩小本地简历和排行榜之间的差距。否则,您无法以有意义的方式进行本地测试。

伪标记

如前所述,训练数据集非常小。我们使用新的、未标记的文本,如维基百科文章(可通过 api 免费获得),并根据我们的训练示例的长度调整文本的长度。然后,我们使用现有的集成预测新数据的得分,并使用新数据和旧数据来重新训练模型。

一个重要的发现是,用更好的集合重新计算伪标签并没有提高多少分数。聚合更多的数据总是比提高伪标签的质量更重要。

基础设施

我们将 Kaggle 基础设施(内核、数据存储)和 Google drive 与 Google Colab 结合使用。我们更加灵活,因为我们可以在多个实例上进行训练,并且在 Colab 上每个帐户可以访问多达 3 个 GPU。一个结构良好的工作空间有助于组织和跟踪实验。通过使用 Kaggle api,可以非常容易地将数据从 Colab 推送到 Kaggle 或从 Kaggle 拉回来。我们还使用了一个 slack 频道来讨论我们的想法和跟踪我们的实验。

不可思议的队友

我的队友尤金与社区分享了令人难以置信的有用的笔记本,编写了自定义标题并创建了训练程序。他的方法被广泛使用,他还出版了第一本真正有效的RoBERTa——大型培训笔记本。祝贺他在第一场比赛中获得第一枚金牌。

结论

HuggingFace 是一个用于各种 NLP 任务的优秀平台,并提供了大量预训练模型的选择。然而,在这场竞赛中,如何进一步调整模型以获得更好的结果变得很清楚。如果没有预先训练的模型,结果会更糟,同时仍有优化的潜力。Kaggle 的参与者表明,从模型架构到优化器到训练程序,所有领域都有改进的空间。这些方法也可以转移到其他任务中。我希望 CommonLit 可以利用结果,使教师在未来更容易为学生提供正确的文本。

感谢您的阅读,祝您愉快!

进一步阅读

  1. 培训用完整笔记本:https://www . ka ggle . com/chame call/clrp-fine tune-Roberta-large
  2. HuggingFace 上的预训练模型概述:https://huggingface.co/transformers/pretrained_models.html
  3. 组装方法:https://towards data science . com/ensemble-methods-bagging-boosting-and-stacking-c 9214 a10a 205
  4. 伯特微调教程:https://mccormickml.com/2019/07/22/BERT-fine-tuning/

如果你对数据科学感兴趣并且还没有注册,请随时使用我的推荐链接加入这个社区。

我的第一次黑客马拉松

原文:https://towardsdatascience.com/my-first-hackathon-3f6d5fbf7d91?source=collection_archive---------18-----------------------

为什么你一定要参与其中,如果可以的话!

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

考尔·克里斯詹在 Unsplash 上拍摄的照片

这个周末,我参加了我的第一次黑客马拉松,Hex Cambridge。很久以来,我一直想参加一个,但是每当我感兴趣的一个出现时,我总是找到借口不参加,不可否认,主要是因为我害怕我不够好,或者我不喜欢它。公平地说,我应该更快地参与进来,我肯定会建议任何想做一个的人去做吧!

那么什么是黑客马拉松呢?简而言之,这本质上是一个短期的编码挑战,在 24/36 或 48 小时内,你就能想出一个技术解决方案或产品。在某些情况下,这些解决方案或产品必须解决一个明确定义的挑战,而在其他情况下,有一个总的主题,你可以自由地创造。它包括作为一个团队一起工作,通常与你以前没有见过的人一起工作,深夜编码和比萨饼/外卖食品,产生一个由你的同事和评判小组评判的工作成果。

这次黑客马拉松有几个挑战,包括来自贝莱德、华为和 Optiver 的挑战,都集中在一个特定的任务上。然而,我们决定把重点放在 Marshall Wace 整体挑战赛上,该挑战赛旨在开发一个社会公益应用程序,这给了我们很大的权限。

我们的想法是什么?鉴于当前疫情突出的无家可归问题,对无家可归者有害的做法是敌意建筑。这种做法在长凳上很明显,长凳上有明确的座位,这样某人就不能躺下,或者地板上有钉子,睡在上面不舒服,灯整夜亮着,甚至播放很大的声音。这些做法迫使无家可归者离开他们可以获得资源的市中心,并试图将他们藏起来,而没有实际解决问题或帮助那些有需要的人。因此,我们认为强调这种做法是很重要的,这样我们就可以让人们远离它,并希望尝试解决它所带来的一些问题。

为此,我们认为一个应用程序将允许外出或甚至在家的个人能够标记这种敌对的架构,并最终提醒公众和决策者这种做法的流行。有两种方法可以做到这一点,首先是那些在现实世界中四处走动的人,如果他们发现了敌对的建筑,他们可以拍一张照片并提交到网站上。这张照片将包含元数据,如拍摄时间和地点,然后可以通过这些提交的照片创建的活动 twitter feed 和网站上标识这些照片拍摄地点的交互式地图进行可视化。另一个选择是让用户利用谷歌街景,或者让我们自己建造一个机器人,从他们自己的家出发到世界各地去识别敌对的建筑,这也会出现在地图和 twitter 上。这当然都是通过图像分类算法来实现的,该算法能够识别提交的图片是否是恶意建筑。

就我们的技术栈而言,我们的计划是使用 cassandra 数据库来存储照片元数据,使用 google cloud bucket 来存储实际照片,使用 HTML、css 和 javascript 前端,使用 fast.ai 机器学习算法来对图像进行分类,使用 flask 后端将所有这些结合在一起,以便能够在 google cloud 上托管。

我是怎么适应这个的?鉴于这是我的第一次黑客马拉松,我真的不知道我到底能在哪里提供帮助,我有机会在机器学习方面或后端方面提供帮助。最后,我和另一个以前使用过 Flask 的团队成员合作,主要在后端工作。我的主要任务是让谷歌云架构正确运行应用程序,并帮助一些 Flask 基础设施。这当然是非常棘手的,因为我基本上是从零开始,但我设法快速刷起来,让网站工作。我在这么短的时间内学习了 google 云应用程序开发、flask 构建、cassandra 数据库集成和模型部署,尽管还有很多东西需要学习!

我们的结果是什么?嗯,我们设法在 hacktheurban.space 上建立了一个部分运行的网站,它设法满足了我们的一些目标,但不是全部。嗯,我们让 wesbite 自己在 hacktheurban.space 上启动并运行,托管在谷歌云平台上,如下图所示:

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

作者图片

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

作者图片

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

作者图片

在这个系统中,网站连接到数据库,因此任何图像都可以被上传、发送到数据库,并且元数据将被存储,包括位置和图片本身。嵌入的 twitter feed 也出现了,从最后的三张照片中可以看到。我们还可以实现街景步行,你可以输入不同的纬度和经度值来环游世界,就像在伦敦桥上看到的一样:

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

作者图片

然而,我们在开发地图方面有所欠缺,twitter 集成也没有用于谷歌云,图像分类的实际模型也无法嵌入(尽管后两者我们最终设法在完全集成的本地机器上工作)。

最终,我们获得了基于 cassandra 框架的 DataStax Astra 数据库最佳使用奖,当然,我们对此非常自豪(只是在最后 30 分钟内才设法让它工作)!虽然最终的应用程序现在由于缺乏功能而被删除,但如果你想四处看看,可以在这里找到代码库!

那么,我学到了什么?:

  1. 黑客马拉松对于快速学习新技术或者强化你已经掌握的技能来说是非常棒的。对我来说,这是学习如何使用 flask,以及如何将其与谷歌云平台集成。
  2. 任何大型项目早期的技术集成都是关键。在这里,大多数问题都是关于将 Flask 后端集成到谷歌云平台上,因为我们最初努力连接数据库,加载模型和集成 twitter,只能在一个小时内克服数据库连接,其他两个问题在谷歌云平台上根本不存在。
  3. 有时候,最好的办法就是卡住,看看什么管用,什么不管用。在如此短的时间内举办一次黑客马拉松,你通常不得不继续进行,而不是犹豫使用什么,尤其是如果你以前没有使用过的话。边做边学是关键,即使不总是成功,你最终还是会在过程中学习。

除此之外,这次黑客马拉松还有许多很棒的提交材料,可以在这里找到:【https://hex-cambridge.devpost.com/project-gallery。其中包括一些令人惊叹的决赛选手,他们的工作主题包括在线教室中的情绪检测、手机在飞行模式下的信息传输以及计算机之间的安全数据传输。看到所有这些,并与从事这些工作的一些人交谈,真是太棒了。

总的来说,这是一次很棒的经历。未来我会关注更多的黑客马拉松吗?是的,肯定的!我玩得很开心,和了不起的人一起工作,学到了很多东西。虽然我们的解决方案最终没有完全按照我们想要的方式工作,我们也没有赢得任何主要奖项,但我肯定可以带走很多东西,并希望将我的学习应用到下一个项目和我的博士学位中!现在,该睡觉了!

[## scikit-learn 决策树分类器简介

towardsdatascience.com](/introduction-to-decision-tree-classifiers-from-scikit-learn-32cd5d23f4d)

我的第一个 NLP 管道

原文:https://towardsdatascience.com/my-first-nlp-pipeline-99d24aafb773?source=collection_archive---------12-----------------------

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

照片由西格蒙德Unsplash 上拍摄

为有监督的文本分类问题创建 NLP 管道

这篇文章基于由阿迪·沙莱夫和我为 2021code fest创建的一个工作室。

在数据科学领域,特别是在 NLP 领域迈出第一步时,我们经常会遇到一组全新的术语和短语;*“契合”、“转换”、“推论”、“度量”*等等很多。虽然可用的信息源允许理解这些术语,但并不总是清楚这些不同的工具如何最终结合在一起,以形成我们能够用于新数据的基于生产机器学习的系统。

从标记数据集到创建可应用于新样本的分类器(也称为监督机器学习分类)应该经历的有序阶段集被称为 NLP 管道。

在本帖中,我们将为一个监督分类问题创建这样一个管道:根据电影的描述对电影是否是剧情电影进行分类。完整的代码可以在这里找到。

监督机器学习分类的 NLP 管道——到底是什么?

我们从数据集开始我们的旅程,数据集是一个分类已知的文本记录表。我们的数据就像一股水流,我们想用它来创造我们的产品。为此,我们将创建一个管道:一个多级系统,其中每一级都从上一级获得输入,并将其输出作为输入转发给下一级。

我们的管道将由以下阶段组成:

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

作者图片

虽然我们构建每个阶段的方式会因问题而异,但是每个阶段在我们的最终产品中都有一个角色,一个闪亮的文本分类器!

数据

我们将使用的数据基于来自 Kaggle 的电影数据集。我们将使用这些数据来确定一部给定电影的类型是不是剧情片——是还是不是,这是一个二元分类问题。我们的数据是一个 pandas 数据帧,有 45466 条记录,删除空条目后有 44512 条。

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

1。探索数据

每当我们开始处理一个新的数据集时,在我们继续进行设计决策和创建模型之前,我们必须了解我们的数据。让我们回答一些关于数据集的问题:

  • 概视图是什么样的?

因为我们希望使用概述来确定电影是否是剧情电影,所以让我们来看一些概述。

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

  • 概观有多长?最长的概述?最简短的概述?

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

  • 我们有多少戏剧电影?

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

  • 概述中出现频率最高的词是什么?在特定类型的概述中?

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

探索数据的阶段对于接下来的阶段很重要,因为它允许我们获得在接下来的步骤中做出决策所需的信息。

  • 任何有助于我们更好地了解数据集的信息!

2。清洗&预处理数据

现在我们对手中的数据有了更好的理解,我们可以继续清理数据了。这一阶段的目标是在使用数据创建模型之前,删除数据中不相关的部分。“不相关部分”的定义因问题和数据集而异,在现实世界中,可以对问题进行实验以找到最佳方式。

  • 删除短于 10 的条目

在数据探索过程中,我们注意到我们的一些概述篇幅较短。因为我们希望使用描述来对流派进行分类,所以我们可以删除长度小于 15 的记录,因为包含如此少字符的概观可能不具信息性。

  • 删除标点符号

因为我们想捕捉描述戏剧电影和描述其他电影的词语之间的区别,我们可以去掉标点符号。

  • 词汇化

词汇化用于将一个单词的不同屈折形式组合在一起,这样它们就可以作为一个项目进行分析。让我们看一个例子:

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

我们现在可以对我们的数据应用术语化:

在清理和预处理之后,我们的文本就可以转换成特征了。

3.列车测试分离

在创建模型之前,我们应该将数据分为训练集和测试集。训练集将用于“教授”模型,测试集将由我们用来评估我们的模型有多好。在现实世界的场景中,我们也经常分割一个验证集,在其中我们可以使用 hyper 参数调整。

下面的代码会拆分。更多示例可在[这里](https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.train_test_split.html)找到。

4。特色工程

在构建管道的这一点上,我们已经熟悉了我们的文本数据,它是“干净的”并经过预处理的。尽管如此,它仍然是文本。由于我们的最终目标是为我们的数据训练一个分类器,是时候将我们的文本转换为机器学习算法可以处理和学习的格式,这种格式也被称为*“vectors”*。

将文本数据编码成向量的方法有很多种:从基本的、直观的方法到基于神经网络的最新方法。让我们来看看其中的一些:

计数向量

将文本描述为一个向量,在这个向量中,我们保存了词汇表中每个单词的出现次数。我们可以选择向量的长度,这也是我们词汇量的大小。

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

你可以阅读更多关于计数向量和创建它们时使用的不同参数这里

TF-IDF 矢量

使用 TF-IDF 向量,我们可以解决使用计数向量时遇到的一个问题:在文本数据中多次出现的无意义的单词。在创建 TFIDF 向量时,我们将词汇表中每个单词的出现次数乘以一个因子,该因子标记该单词在语料库中的其他文档中的出现频率。这样,出现在我们的语料库中的许多文档中的单词将在我们的特征向量中获得更小的值。

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

你可以在这里阅读更多关于 TF-IDF 矢量和创建它们时使用的不同参数

5。建模

使用矢量器后,我们的电影概述不再用文本表示,而是用矢量表示,这允许我们使用我们的数据来训练模型。

我们现在可以使用我们的训练集来训练一个模型。这里我们训练多项朴素贝叶斯,但是 Scikit-Learn 中可用的许多其他算法可以类似地应用,并且当解决一个新问题时,我们通常会检查不止一个算法。

6。评估

在训练一个模型之后,我们想要评估它在新数据上的表现如何。为此,我们对数据进行了划分,并留出了一个测试集。我们现在将使用我们的模型为测试集做出的预测来评估我们的模型。

我们将根据正确答案和我们的模型所犯的错误创建一个混淆矩阵

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

二元分类的混淆矩阵

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

我们现在可以使用混淆矩阵产生的值来计算一些其他指标:

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

通常,我们建立模型的第一次尝试不会有惊人的指标。这是一个很好的时间回到早期的阶段,尝试做一些不同的事情。

7。推论——对新样本使用我们的模型

在使用我们的数据创建一个模型来解决我们根据电影的概述来分类电影是否是戏剧电影的问题并评估我们的模型之后,我们可以使用它来确定新的样本- 戏剧还是非戏剧?

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

由于我们的原始概览在用于训练/评估我们的模型之前已经经历了一段旅程,我们需要以同样的方式处理新样本:

我们现在可以使用我们的模型来预测新样本的类型:

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

我们的预测是正确的!

总结

在这篇文章中,我们为一个有监督的文本分类问题创建了一个管道。我们的管道由几个相互链接的部分组成(就像一个真实的管道!).我们希望这篇文章能帮助你理解这个过程的每一部分在创建最终产品——文本分类器中的作用。

我作为数据科学家的头六个月

原文:https://towardsdatascience.com/my-first-six-months-as-a-data-scientist-69f6697c9ec3?source=collection_archive---------1-----------------------

办公时间

我学到的技术和非技术课程

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

奈杰尔·塔迪亚恩多在 Unsplash 上的照片

科学很酷,但我不认为 2000 年或更早的孩子长大后会梦想这样做。对我来说,我首先想成为一名兽医,然后是公园管理员、训狗师、作家,最后是经济学家。我仍然有点想获得最后两个工作角色,就像一些孩子梦想成为律师-医生-宇航员一样(或者律师-医生-美人鱼,但让我们现实一点,美人鱼太棒了,无法学习像法律这样枯燥的东西)。

当然,目标会随着时间的推移而改变,今年 5 月,我获得了弗吉尼亚大学的 was 数据科学硕士学位。毕业几个月后,我获得了第一份全职工作,成为一名数据科学家。我欣喜若狂,因为我能够运用我的技能,向我的新同事证明我自己。在我开始工作的 135 天里,我也有过 426 次感觉力不从心。

这是我从课堂跳到数据科学领域以来学到的技术和非技术课程的清单。作为免责声明,这当然只是我的经验,每个人的会有一点不同。

1.你会用到在✂️学校学到的不到 20%的工具

我真的很喜欢 r 语言编程。如果有选择的话,我甚至参加了上述 it 工作的编码面试。尽管如此,我在工作中 95%的时间使用 Python 和终端(在 VS 代码中),大约 5%的时间使用 SQL,而从我开始使用以来 R 正好是 0%。结果,我在 R 语言中所学的课程(大约是课程的一半)对我来说比在 Python 中所学的课程有用得多。很多作业——比如网络抓取、NLP、Apache Spark 或 Tableau——我根本就没用过。这是意料之中的事,因为很难猜测你在这份工作中会做些什么。

如果你是一个真正致力于用特定语言编码的人,我建议尽早询问你的招聘人员团队使用什么。即使你可以“技术上”用你选择的语言编码,如果团队使用其他的语言,这将使代码审查和集成更加困难。对我来说,我真的很享受在 Python 上变得更好,但是如果是在 Scala 之类的东西上,我不认为我会喜欢它。

2.AWS (&云服务)是王道👑

当我开始的时候,AWS 和我并不像握手那样熟悉,但是现在我每天都在使用它。众所周知,AWS 的产品种类繁多,让人很难知道对于给定的任务,你需要什么样的服务。更糟糕的是,在 AWS 中搜索如何做某事通常会指向 5 个听起来基本相同的服务。

为了解决这个问题,我一直在使用 ExamPro 为 AWS 云从业者认证做准备。要学的东西实在太多了,但在我学习的过程中,我发现自己在建立联系,学习可能对我未来的工作有用的服务。最终我也会参加考试,这也有望成为一个很好的简历助推器。我不认为我会成为一名 AWS 巫师,但是如果我能成为一名相对称职的 AWS 圣骑士,我会接受的。

AWS 被我加冕。GIF by GIPHY

像谷歌云和 Azure 这样的服务也很受欢迎,但如果你不知道你可能会使用哪一个,我还是会诚实地推荐 AWSTechJury.net 发现,2020 年,AWS 在新企业云采用中占有 76%的份额。尽管如此,大多数公司在某种程度上使用云服务,了解他们如何工作以及他们提供什么是有好处的。

3.了解硬件对于有效排除软件故障非常重要💻

在学校里,我们经常被给予干净的、玩具般的例子,以便专注于一个特定的高层次问题。在拥有较小数据科学团队的公司,你经常会自己处理真实、混乱、丑陋的数据。如果是大数据,试图让它在您的管道中运行就像试图让犀牛穿上舞会礼服。

了解你的电脑在幕后做什么将会有很大的不同。对于处理有问题的数据,我使用watch -d -n 0.5 nvidia-smihtop等命令来跟踪 GPU/CPU 的使用和内存,使用df -h来监控给定目录中文件的大小,以防空间溢出。我还使用 tmux 会话,以便同时打开多个终端窗口,并防止我的工作在 ssh 登录到远程机器时中断。最后,当我找到一个可行的解决方案时,我仍然会在网上寻找具有更好复杂度的替代方案,这可以在处理大数据集时节省几分钟到几天的处理时间。

这些只是我对抗测试我的机器上限的数据的几种方法——我很想听听你自己的提示和技巧!

4.无时无刻不在谷歌搜索一切🔍

作为一名数据科学新手,学习曲线是持续不断的。你将被要求做的任务在很多时候会感觉完全脱离了领域,这意味着你正在匆忙地找出一个解决方案,解决你甚至不知道存在的错误。你将学会在日常生活中驾驭最随机事物的内在复杂性,虽然你不再需要映射 A → C → Q,但你开始变得更擅长编程,代码库将随着每次迭代变得更有意义。

总而言之,“数据科学家”、“问题解决者”和“职业谷歌人”几乎是一回事。至少对我来说,我觉得我在第一份工作中学到的东西至少和我在大学时一样多,这有点令人惊讶(毕竟,我是在付钱给某人在那里教我东西)。

使用流行的数据科学编程语言的公司是伟大的,因为大量使用的语言也方便地拥有最好的堆栈溢出帖子(这在无数场合下救了我的命)。

5.你的坏习惯不会随着学校的结束而突然消失🍜

这不是数据科学特有的,但我在学校时给自己施加了很多压力,没有像我的同龄人那样经常放松(虽然我住在兄弟会街,所以这也可能是为什么🤔).在期中考试前,我会学习整整一周(有时是一个月——微积分很难),除了打印更多的练习题或续杯,我几乎不离开房间。在非期中考试周,我会强迫自己学习到早上很晚,然后把自己推醒,穿上运动裤、凉鞋和一件旧套头衫,匆匆忙忙地熬到那天早上 8 点或 9 点。从我没有出去的数量来看,我很惊讶我没有在毕业典礼上看起来像一个瘦长、苍白的吸血鬼而吓到每个人。

我一直以为一旦拿到学位,我就会像正常人一样生活。在我想象的这个完美的世界里,我终于可以每天健康地写日记、阅读、冥想、锻炼和饮食。此外,工作不会感觉像工作,因为我喜欢编程,因此我生活中的一切都会一直很棒。

是啊,所以…那没有发生。

虽然工作确实增加了一些额外的结构,但我有一些坏消息;如果你在大学里是一个工作狂,你很可能是一个工作狂……工作中的。如果你远程工作(像我一样)并且没有太多的会议,那么运动裤、破旧的运动衫和睡发在大多数时候都是不错的选择。所以基本上大学…没有朋友或 darties 在你的窗外大放厥词。

GIF by GIPHY

总的来说,你可能有更多的可支配收入,但是当你工作到凌晨 1 点时,除了“我想我快要解决这个问题了”之外,没有任何其他原因,你会感觉像是生活在阴阳魔界,却在第二天开会前几分钟醒来,再次重复这个循环。善待自己——精疲力尽是不好的,平衡是关键,这一点我仍在学习。

6.在改变世界的同时好好生活🌎

我不同意那些认为数据科学将在 10 年内消亡的反对者,因为公司总是希望信息(即数据)增加利润,并希望人们对其进行定量分析,即数据科学家(或工程师,或分析师,名称并不重要)。在我的工作中,我已经能够直接影响大型计划,并通过我的数据科学产生积极的影响,在我离开后,这些项目将继续存在许多年。

我也非常有理财头脑,我希望我能开始自己的事业,或者如果我选择提前退休的话。有了数据科学,做有影响力的事情和经济富裕之间不再有典型的权衡;你可以两全其美。结合编程有趣的事实,数据科学真的是完美的三连胜。

结论❄️

显然我有点偏见,但我很高兴成为一名数据科学家,并且仍然相信,为了大局,我的不足和自我怀疑是值得的。对于那些在大学里的人来说,在成为专业人士方面,你最紧张的是什么?对于那些现在工作的人来说,当你自己进行转变时,你最大的文化冲击是什么?

一如既往的感谢阅读!失陪了,我要去做兼职了,为一些寄居蟹咨询 ML 算法。

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

照片由娜佳·贝尔托尔特·詹森Unsplash 拍摄

https://amawest.medium.com/membership

我的 Google Foobar 之旅

原文:https://towardsdatascience.com/my-google-foobar-journey-2d02e8150158?source=collection_archive---------5-----------------------

走查

第 1 级—获得邀请。

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

FooBar 完成截图(图片作者: Pratick Roy )

索引

  1. 我的 Google FooBar 之旅:第 1 级-获得邀请。(这个)
  2. 我的 Google FooBar 之旅:2.1 级——电梯维护
  3. 我的 Google FooBar 之旅:2.2 级— 整装待发

怎么开始的

时间是 2016 年至 2017 年左右。我是一名年轻的计算机科学大学生,非常想成为一名开发人员。我喜欢编码和构建东西,我同样讨厌做 mcq(选择题)。

我对 MCQs 是恨之入骨,工程应该是 。要想在 MCQs 中取得好成绩,你必须记住一千个捷径公式,学会应用技巧而不是应用概念,并虔诚地避免试图回答难题,这一切都是为了在尽可能短的时间内回答尽可能多的简单问题。

现在我还在上学,但从逻辑上来说,

作为一名工程师,我的工作描述是拿一个足够大、困难和模糊的问题,学习、忘记和重新学习概念,以便将它分解成更小更简单的问题,随着时间的推移赋予它越来越多的形状,直到我对问题的核心概念及其周围的许多边缘情况有一个好的干净的解决方案。

事后回想起来,我认为年轻时的自己在这个分析上是正确的。

然而,所有的大学就业面试总是以 MCQ 回合开始,所以我想你可以很好地衡量我的偏执,不要带着工作机会走出大学。

然后有一天,当我正在摆弄一些代码块时,我可能出现了一些错误,或者需要查找一些语法,当我谷歌搜索时,浏览器扭曲显示了这条消息

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

FooBar 邀请(图片作者: Pratick Roy )

现在,作为一个为了乐趣而编码的人,我想玩,但是当屏幕动画出现时,我已经点击了第一个堆栈溢出链接。我热情地按下了后退键,但没有成功。

我心烦意乱。我意识到我刚刚犯的错误的严重性。我从之前的 reddit 帖子中了解到这个挑战是关于什么的。这是谷歌足球挑战赛。我刚刚收到一份邀请,我设法浪费了它。

现在,如果你不知道这个挑战是关于什么的,简单地说就是谷歌只邀请秘密招聘程序。一旦被邀请,你就可以解决编码挑战,如果你完成了,你就有机会直接面试谷歌。此外,可笑的严格时间限制和无法使用互联网的标准障碍,是大多数在线编码挑战和面试过程的专利,并不适用。你有大量的时间去阅读、理解、研究、修改和解决问题。

如果这还不明显的话,这正是我渴望的那种挑战。我错过了抓住它的唯一机会。然而,作为一个坚忍的人,我设法很快站起来,笑自己是多么笨拙。

就这样,生活照常进行,然后,在运气和努力的共同作用下,我设法获得了亚马逊的实习机会,给了我 6 个月的时间来证明我在现实世界软件开发环境中的勇气。又一次尝试玩我喜欢的游戏。

我知道这里说的可能有点生存偏见,但是塞内卡曾经说过,

运气是当准备遇到机会时发生的事情。[2]

而且这次我是有备而来,没有犯什么愚蠢的错误。从那以后,我就成了亚马逊人,并为此超级自豪,那场侥幸逃脱的挑战的记忆也开始慢慢从记忆中淡化。

它是如何结束的

大约几个月前,也就是那次致命的误点击发生近 4 年后,当我再次陷入一些代码中,并希望利用在我之前解决问题的开发人员的智慧时,我的浏览器再次扭曲,向我显示一条熟悉的消息。

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

FooBar 邀请(图片作者: Pratick Roy )

这一次,我没有重复失礼。这一次风险降低了,我不再需要工作面试,但我想要挑战。我说我想玩,我就加入了。

这就把我带到了上个周末,当时我提交了最后一个问题的代码。曾经逃脱的挑战终于完成了。

现在开始旅程

你有没有进行过一次你计划了很久的旅行,在你的脑海中建立了它,但当你最终到达那里时却感到失望。这是而不是的旅程之一。

我们是一种说书人,fooBar 让你成为渗透并摧毁 Lambda 指挥官的邪恶组织的故事中的主角,在那里你所拥有的只是你的智慧来拯救你的兔子同志。

在这个过程中,你会边走边学。从马尔可夫链到细胞自动机,这个挑战让我接触到了很多有趣的想法和概念。

如果你收到邀请,并且你喜欢编程和挑战,我强烈建议你接受 FooBar 的邀请。

需要注意的另一点是,如果你熟悉 python,那么使用它可能很有意义,因为标准库将为你提供许多有用的函数。我个人使用 Java,因为我对它更熟悉,坦率地说,我不是 Python 的忠实粉丝。也许有一天我会写一篇关于厌恶 python 的帖子。如果是的话,我会把它链接到这里。

这篇文章现在对我来说太大了,所以在接下来的几篇文章中,我将一个接一个地讨论这些挑战,强调我从这次挑战中获得的知识和见解。

但是在结束之前,让我们解决第 1 级的问题 1。

一级

问题 1:重新识别

奴才队伍中有一些不安定因素:ID 号码像“1”、“42”和其他“好”号码的奴才们一直对那些被更无聊的 ID 卡住的可怜奴才们颐指气使。为了平息骚乱,Lambda 指挥官让你根据一个完全万无一失的方案给每个人重新分配新的随机 id。

Lambda 指挥官将质数串联成一个长串:“2357111317192329……”。现在每个仆人必须从帽子里抽出一个号码。该数字是素数串中的起始索引,并且 minion 的新 ID 号将是该串中接下来的五个数字。所以如果一个奴才抽到了“3”,他们的身份证号就会是“71113”。

通过编写一个函数 solution(n)来帮助指挥官分配这些 id,该函数接受 Lambda 的所有素数的字符串的起始索引 n,并返回该字符串中的下五位数字。Lambda 司令有很多爪牙,所以 n 的值永远在 0 到 10000 之间。

—测试用例—
输入:
解决方案.解决方案(0)
输出:
23571

输入:
解决方案.解决方案(3)
输出:
71113

其核心是,这里的挑战是计算一长串素数。每当你面对这个挑战,你的 goto 算法应该是厄拉多塞[3] 的筛子。我很确定 Sieve 会成功,但是我已经忘记了它是如何工作的,所以我在 Youtube 上放了一个视频来复习。现在,让我们来构建解决方案。

重新识别解决方案

因此,一旦筛选功能就绪,我们需要做的就是

  • 稍微修改一下 Sieve 函数,产生一个素数的串联列表。
  • 计算这个列表中从 index 到 index + 5 的子串,因为本质上这将从 index 之后的素数串中给出接下来的 5 个数字。这正是 Lambda 指挥官想要的输出 ID。
  • 此外,考虑到约束条件,该列表需要至少 10000 + 5 个数字长。因此,通过一点强力检查,找出 206412 之前的所有素数,对于我们的用例来说已经足够好了。

仅此而已。如果你对我如何解决其他挑战感兴趣,看看我的回购。

https://github.com/pratickRoy/foobar

在以后的帖子中,我将回顾我解决的其他问题的解决方案的关键见解/经验。我在这里把它们联系起来。要获得相同的通知,请考虑在 medium 上关注我,订阅一封相同的电子邮件,直接发送到您的收件箱!😊

来源、脚注和进一步阅读链接

我的 Google Foobar 之旅

原文:https://towardsdatascience.com/my-google-foobar-journey-a6488df029cf?source=collection_archive---------17-----------------------

走查

2.1 级—电梯维护

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

FooBar 完成截图(图片作者: Pratick Roy )

索引

  1. 我的 Google FooBar 之旅:第一关——获得邀请
  2. 我的 Google FooBar 之旅:2.1 级——电梯维护。(这个)
  3. 我的 Google FooBar 之旅:2.2 级— 整装待发

故事到此为止

你在 Lambda 指挥官的组织里活了一个星期,你甚至设法让自己升职了。万岁!不过,你的党羽还是没有那种安全权限来拿下 Lambda 指挥官,所以你最好继续工作。快快快。

所以现在我有了 2 级权限,但是要打败 Lambda 指挥官还有很长的路要走。在我寻求释放我的兔子兄弟的过程中,我的下一个障碍,我前进的下一个关键,是一个相当有趣的挑战。

电梯维修

粗略地看,这确实是一个非常简单的问题;魔鬼藏在边缘的箱子里。我一开始用一种非常不干净的方法来强迫自己通过,并且在很大程度上成功了。然而,我就是无法破解一些测试用例,不管我引入了多少黑客。

所以我深吸一口气,睡了个好觉。第二天早上,我起床,喝了点咖啡,重构了代码。它一次性通过了所有的测试用例。

好代码的一个小切线

在我开始写代码之前,我想强调一点,总是试图写干净的代码。我知道这在一个竞争激烈的编码环境中并不真正必要,事实上,有时它会对事业不利。在未来的等级中,我已经采取了许多我在生产环境中永远不会写的捷径,并且永远不会让任何一个我正在审查其代码的人来写。它们让我的生活变得更容易,代码运行得更快,所以我跟着它,你也应该在你的 fooBar 之旅中这样做,但重要的一点是,你应该对这样做感到内疚。

如果你能写出工作正常但不干净的代码,而不用担心上面的伟人[1],那么你可能是一个伟大的程序员,但你将是一个糟糕的开发者。

如果你不同意这一点,我强烈建议你读一读我不久前写的一篇文章,即使读完之后,如果你不同意,请随时给我留言/评论,我们可以进一步讨论这个问题。

现在回到手头的问题

你被分配了繁重的电梯维修任务——唉!除了所有的电梯文档已经在文件柜的底部杂乱无章的堆了好几年,而且你甚至不知道你将要工作的电梯版本号,这不会太糟糕。

电梯版本由一系列数字表示,分为主要、次要和修订整数。电梯的新版本增加了主要编号,例如 1、2、3 等等。当新的特征被添加到电梯中而不是一个完整的新版本时,名为“次要”的第二个数字可以用于表示那些新添加的特征,例如 1.0、1.1、1.2 等。小的修复或维护工作可以用第三个数字“修订”来表示,例如 1.1.1、1.1.2、1.2.0 等等。数字 0 可用作
电梯预发布版本的主要版本,例如 0.1、0.5、0.9.2 等(Lambda 指挥官总是小心翼翼地测试她的新技术,以她的忠实追随者为对象!).

给定一个以字符串表示的电梯版本列表,编写一个函数解(l ),返回按主版本号、次版本号和修订号升序排序的相同列表,以便您可以识别当前的电梯版本。列表 l 中的版本将总是包含主要版本号,但是次要版本号和修订版本号是可选的。如果版本包含修订号,那么它也将有一个次版本号。

例如,给定列表 l 为[“1.1.2 “,” 1.0 “,” 1.3.3 “,” 1.0.12 “,” 1.0.2”],函数解(l)将返回列表[“1.0 “,” 1.0.2 “,” 1.0.12 “,” 1.1.2 “,” 1.3.3”]。如果两个或多个版本相同,但其中一个版本包含的数字比其他版本多,则这些版本必须根据它们拥有的数字数量按
升序排序,例如[“1”、“1.0”、“1 . 0 . 0”]。列表 l 中的元素数量至少为 1,不会超过 100。

—测试用例—
输入:
Solution.solution({“1.11 “,” 2.0.0 “,” 1.2 “,” 2 “,” 0.1 “,” 1.2.1 “,” 1.1.1 “,” 2.0”})
输出:
0.1,1.1.1,1.2,1.2.1,1.11,2,2.0,2.0

输入:
Solution.solution({“1.1.2 “,” 1.0 “,” 1.3.3 “,” 1.0.12 “,” 1.0.2”})
输出:
1.0,1.0.2,1.0.12,1.1.2,1.3.3

问题陈述相当直接。给定一个版本列表,按照优先顺序升序排序:主要>次要>修订。这很简单,让我们来看看边缘案例。

  • 次要版本号和修订号是可选的
  • 如果两个或两个以上的版本是相同的,但是其中一个版本包含的数字比其他版本多,那么这些版本必须根据它们包含的数字的多少按升序排序。

在解决这些问题之前,让我们先看看解决方案代码

电梯维护解决方案

在运行代码之前,让我们首先讨论一个常见的编码结构。

比较器[2]。

简单地说,比较器总是采用以下形式:

比较器框架

现在,如果你观察,这里我们没有使用任何 if 语句来进行比较,而是简单地减去两个散列码。

这种减法实际上是实现这一点的一种简单而常见的惯例。例如,考虑两个 int,a 和 b,那么

a — b < 0, if a is smaller
a — b == 0, if a and b is same
a — b > 0, if a is larger

这正是我们想要的输出。

这对于排序非常有用,因为 Java 标准库提供了排序函数,可以根据比较器对任何对象集合进行排序。在我们的代码中,我们将不止一次而是两次使用这个概念。

代码缩减

所以没有比较器。让我们精简代码,并涵盖上述边缘情况

  • 首先,我们根据自定义的比较器对数组进行排序。
  • 在我们的比较器中,我们首先将版本划分为主要、次要和修订类型。
  • 同样,我们编写了另一个比较器(这次没有继承的华丽,但基本上它做同样的事情),用于比较特定的版本类型。
  • 我们按照主要版本>次要版本>修订版本的优先顺序来比较版本类型。如果在任何阶段,两者不相等,我们简单地返回内部比较器的输出。如果是,我们就进入下一种类型。如果最后没有区别(边缘情况 2),我们基于版本子类型计数进行排序。
  • 在我们的内部比较器中,我们首先检查特定版本子部分是否在任一版本中存在(边缘情况 1)。如果不是,我们默认它为 0,否则我们选择它,然后像在任何整数比较器中一样进行比较。

一个重要的外卖

在上面的部分中,我给出了代码的概要,以帮助初学者理解核心概念,但是对于那些已经花了相当长时间在 IDE 前涉猎的人来说,我需要这样做吗?

代码正在做的事情非常清楚,不需要任何文档。当然,它甚至可以更好,我们可以添加枚举来使版本类型更加清晰,并使用正确命名的私有方法来使边缘情况的处理更加直观。但是我们在这里应该理解的是,遵循干净的代码原则,边缘情况的处理不再是中断思想流动的丑陋的异常值,而是它的自然延伸。

现在我意识到我没有把它打扫得尽可能干净,这让我感到非常内疚。所以让我们忏悔吧。

清洁电梯维护解决方案

我不会在这里给出一个纲要,因为坦率地说,这是不必要的。此外,我鼓励你只看解决方法,看看你是否能理解流程,而不需要看版本和版本类型的实现,这就是为什么我把它们放在底部。如果你只需要阅读 1/4 的代码就能理解代码在做什么,那么我的工作就完成了!

在我的下一篇文章中,我将进入第二关的第二个挑战:*准备毁灭。*当我找到时,我会在这里链接它。要获得相同的通知,请考虑在 medium 上关注我,订阅一封相同的电子邮件,直接发送到您的收件箱!

来源、脚注和进一步阅读链接

我奶奶的室友是个机器人

原文:https://towardsdatascience.com/my-gradmas-flatmate-is-a-robot-f083ecb933a?source=collection_archive---------58-----------------------

人工智能如何帮助我们的老年人在自己的家中

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

张家瑜Unsplash 上拍照

众所周知,如今人们的寿命更长了,大多数政府都面临着提供更多机构护理的压力。但这种护理非常昂贵,而且在大多数情况下,需求远远高于供给,从而使弱势人群得不到充分的监督。许多人担心,因为他们的父母已经到了不能独立生活的阶段,但另一方面,没有可供他们负担得起的机构护理的空间。此外,我们都知道,人们更愿意继续生活在自己的社区,而不是被连根拔起,安置在一个陌生的环境中。他们需要亲人的安慰,需要邻居的闲聊,需要友好面孔的偶尔造访。有各种纵向研究表明,拥有令人满意的人际关系的人更快乐,健康问题更少,寿命更长。

但是一个人的家也可能包含死亡陷阱。老年人面临的一个重大风险是意外跌倒。研究估计,大约三分之一生活在社区中的老年人每年至少经历一次跌倒(因为意识丧失、癫痫发作、中风或其他情况),其中 30%的 65 岁或以上的人每年经历一次跌倒。在有人注意到事故或恢复意识之前,无论一个人躺在哪里,跌倒之前或之后失去意识都会产生问题。如果相关人员受伤并且无法移动,这种情况可能会导致进一步的并发症。因此,呼救或试图站起来可能是至关重要的。

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

照片由扬·安东宁·科拉尔Unsplash 上拍摄

养老院中的环境辅助生活(AAL)服务可以解决这个问题。这些技术通过帮助清洁、提供支持和监控来帮助老年人独立生活。基于传感器、麦克风和视觉系统,已经设计和开发了几种设备,结果非常有希望。这些产品包括温度控制器、智能手表、机器人和许多其他产品。它们在安全的环境中为老年人或弱势群体提供更好的生活方式。

这些技术的奇妙之处在于,它们使用非侵入性的廉价传感器来监控人的运动和行为。由人工智能系统监控的标准摄像头能够跟踪一个人的整个家。他们可以执行骨骼检测(估计人的骨骼),并通过它来推断这个人在做什么。因此,如果系统在夜间检测到有人躺在地板上,它将首先尝试通过语音与他进行互动。如果这个人不回答,它将向他的近亲或有关当局发出警报。整个过程由人工智能自动执行,没有人类参与,因此保护了个人的隐私。

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

蒂亚戈·穆拉罗在 Unsplash 上的照片

但是这样一个系统是如何运作的呢?首先,用户需要安装一些必要的传感器,如摄像头、麦克风和扬声器。一个人工智能系统连接到它们,管理不同的设备以及与用户的所有交互。让我们想象一下一个叫露西的老人的情况,她独立生活。

早上,人工智能会在所需的时间唤醒她,方法是拉起窗帘,打开有 wifi 功能的水壶。咖啡的香味轻轻地涌入她的鼻孔,她最喜欢的音乐开始在最近的扬声器上播放。当露西起床时,人工智能祝她早上好,并提醒她吃药。该系统还向她所爱的人发送短信,通知他们露西已经醒来,身体健康。随着时间的推移,人工智能为露西提供各种服务,如阅读最新新闻,提醒她可能有约会,将她与她的在线朋友联系起来,并建议一个可爱的食谱。有时露西会迷失方向,因为她有轻微的老年痴呆症症状,并试图在没有任何帮助的情况下走出家门。系统注意到这种尝试,试图通过呼叫她来吸引她的注意力,同时通知她所爱的人。幸运的是,露西冷静下来,回到了她的日常生活中。当她坐在沙发上看她最喜欢的电视节目时,系统会指示机器人清洁工开始打扫房间。然后,它注意到露西睡着了,并调整恒温器来保持这个地方温暖。当她睡了一个长时间的午觉醒来后,她需要使用浴室,但她绊了一下,摔倒在地板上。系统注意到这一点,并与她交谈。听到没有回应,它立即通知她的亲人,并要求救护车。幸运的是,露西没有受什么重伤,很快就回家了。

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

托尼·里德在 Unsplash 上的照片

正如我们刚刚看到的,AAL 系统有各种好处。它可以帮助弱势群体完成最平凡的任务和更严肃的事情。在某些情况下,它可以保护它们免受房子周围各种陷阱的伤害,从而成为救生员。入门的费用不高,而且大多数人都可以负担得起。此外,我们还必须考虑将这些人制度化所节省的成本,以及将他们从社区中剥离的情感代价。总的来说,AAL 显然是最实用的方法。通过在他们的私人家中安装这项技术,我们可以保证我们年迈的亲属有一个光明的未来,我们也可以保证我们的亲人在安全的数字手中度过一些宁静的夜晚。

如果你喜欢这篇文章,并想与我联系,请这样做🐦 碎碎念 ,🔗LinkedIn,📷insta gram或者😊 脸书

https://medium.com/dataseries/from-paris-to-london-in-a-handful-of-minutes-7657d978152

阿列克谢·丁力教授 是马耳他大学的 AI 教授。二十多年来,他一直在人工智能领域进行研究和工作,协助不同的公司实施人工智能解决方案。他的工作被国际专家评为世界级,并赢得了几个当地和国际奖项(如欧洲航天局、世界知识产权组织和联合国等)。他已经出版了几本同行评审的出版物,并成为马耳他的一员。由马耳他政府成立的人工智能特别工作组,旨在使马耳他成为世界上人工智能水平最高的国家之一。

我从化学工程师到数据工程师的旅程

原文:https://towardsdatascience.com/my-journey-from-chemical-engineer-to-data-engineer-908cca5c1989?source=collection_archive---------22-----------------------

我在两个看似无关的领域之间的转换

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

伊恩·施耐德在 Unsplash 上拍摄的照片

数据工程的独特领域

数据工程的独特之处在于它没有正式的教育要求。你可以有物理学博士学位,或者根本没有高等教育。技能和经验决定了你能否成为一名成功的数据工程师。我本人有化学工程学位。在担任第一个数据工程职位之前,我没有接触过传统的数据工程。然而,通过自学(加上一点运气),我成为了一名数据工程师,并找到了一份我非常喜欢的职业。

我采取的步骤

正如我上面提到的,每个人的数据工程之旅都是独一无二的。进入这个领域并没有一套规定的步骤。然而,我所采取的步骤足够通用,任何有抱负的数据工程师都可以采取类似的步骤,并根据自己的喜好修改它们。

我拥抱世俗 *。*数据无处不在。公司越来越依赖数据来推动增长和/或利润。作为制造部门的化学工程师,我参与了与流程改进相关的项目。幸运的是,我有大量的数据要处理:传感器数据、财务数据、生产力数据等等。虽然我们通常将数据检索和存储解决方案外包给我们的 IT 部门,但作为一名有抱负的数据工程师,我请求成为工程部门和 IT 部门之间的联络人,以便我可以参与数据处理。最初分配的任务很普通:我为表添加二级索引,为报告查询表,等等。然而,这是我第一次涉足数据工程领域。我学习了 SQL 的基础知识,一旦我证明了自己,我就被分配了越来越复杂的任务。通过充当两个部门之间的粘合剂,我拓宽了我的数据工程经验。

我求云认证 。认证是一个有争议的话题。有些人坚信它们的必要性,而有些人则完全不相信它们。我倾向于前者,但我不认为认证是一项要求。证书是对数月辛勤工作的奖励。作为一名化学工程师,我选择学习云认证,特别是 AWS。我认为选择哪种云环境并不重要,因为它们都提供类似的服务。对我来说,我想学习各种公司和行业使用的数据工具。不幸的是,我的雇主没有利用任何种类的云解决方案,所以我需要一个包括云产品的学习路径:因此,认证。事实证明,为每一项认证而学习会产生有价值的知识,而且作为一个额外的好处,它给了我一个借口来建立多个我可以在面试时谈论的副业项目。

我看的书和文章 。我认为学习需要大量阅读是不足为奇的。我阅读书籍、文章、研究论文等。任何与数据工程领域的现状相关的东西都在我的阅读清单上。我保留了一切吗?绝对不行。我觉得一切都有趣吗?没有。然而,通过广泛的阅读,它让我了解了这个领域当前发生的事情。我让自己熟悉了数据工程术语,并记下了每个我不知道的术语。不久,我能够与数据工程师和数据专业人员进行智能对话。

我练过编码……很多 。如果你想在数据工程领域开始职业生涯,这是一项必要的任务。数据工程师实际上只是专门研究数据的软件工程师。因此,每个面试循环都需要某种算法问题的解决。数据工程师的面试循环往往包括一个简单/中等的算法问题和一个中等/困难的 SQL 问题。因此,我花了大量时间复习数据结构、算法和 SQL 查询。在去面试一个数据工程师的职位之前,我每天都在练习。练习编码问题的额外好处是它直接有利于学习编程。我练习得越多,使用文档进行简单操作的次数就越少。

我给大大小小的观众做演讲 *。*这可能不是每个人都需要的,但以清晰、简洁的方式交流技术概念对我来说一直是个挑战。我很难将技术概念传达给非技术受众。但是,作为一名数据工程师,您可能会处理属于整个公司各个部门的数据。我认识到能够将业务需求转化为技术需求的重要性。为了实践这个薄弱领域,我经常主动向任何愿意倾听的部门展示项目发现。我抓住一切机会练习交流复杂的想法。随着时间的推移,我改进了我的沟通方式,我找到了一种适合我的沟通方式。

我找到了导师 。作为一名有抱负的数据工程师,导师对我的成长极其重要。互联网上有很多信息。我发现很难区分什么是最新的,什么是过时的。一位导师帮助我将精力集中在对数据工程师角色至关重要的主题上。我在阅读各种资料时遇到的任何歧义都通过与我的导师的简短交谈而立即消除了。我不认为导师是成为数据工程师的必要条件;然而,它对我和我的旅程来说非常有价值。

结束语

数据工程是一个如此伟大的领域,因为进入的障碍不是你的学历;你可以通过努力工作和对该领域的奉献获得经验和技能。我可以证明,仅仅因为你现在不知道如何处理数据,并不意味着你不会在数据工程领域取得成功。努力工作,致力于学习基础知识,如果运气好的话,你也会在数据工程领域找到一席之地。

Kaggle BIPOC 赠款计划-我的经验

原文:https://towardsdatascience.com/my-journey-of-getting-started-with-kaggle-competitions-fdd4a059f329?source=collection_archive---------17-----------------------

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

费德里科·朗塞洛蒂在 Unsplash 上的照片

一个好的导师和 Kaggle 如何帮助我利用我的数据科学技能

今年, Kaggle 启动了一个名为 BIPOC(黑人、土著、有色人种)资助计划的新项目。它旨在为代表性不足的数据科学家提供支持,以促进他们的职业发展和抱负。我很感激自己是参与这个精彩项目的少数人之一。所有参与该项目的学生都被分配了一名导师。在成为这个项目的一部分之前,我已经做了一些基本的项目。我试着自己学习,但我参加这个项目的原因之一是获得一个合适的导师。我的导师,Usha Rengaraju,帮助我开始了 Kaggle 竞赛。

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

照片由克莱门斯·范·雷在 Unsplash 上拍摄

我的旅程

我和我的导师合作,在 3 个月的时间里参加了 5 场比赛。然而,一开始这一切都让人不知所措(数据量和方法),那么,我是如何开始的呢?我的导师提出了以下建议

  • 浏览数据集中的每个文件,阅读数据描述,并记下我观察到的一切。
  • 浏览前几年的成功解决方案——帮助我为我可能使用的各种技术打下基础
  • 浏览公共笔记本——有助于更好地理解数据的结构
  • 浏览讨论线索——让我进一步了解哪些模型可能过度拟合,或者是否有任何数据泄漏或我可以使用的额外数据集

这有助于我学习新的方法和技巧,然后用在我自己的笔记本上。我希望这些建议能对任何想开始 Kaggle 比赛的人有所帮助。我们参加了以下比赛

三月机器学习狂潮 2021- NCAAM 三月机器学习狂潮 2021- NCAAW :- 在这场比赛中,目的是预测一支队伍在 NCAA 2021 年男女比赛中战胜另一支队伍的概率。虽然我们参赛晚了一点,但我们还是在男子比赛中获得了一枚铜牌。通过这次比赛,我学到了一些新的东西,如单变量样条模型和 如何进行 Kaggle 比赛 ,因为这是我的第一次比赛。关于我的方法的更多细节可以在本次比赛的 讨论部分 中找到。这是我为这两个比赛写的笔记本。:-

https://www.kaggle.com/muskan2006/ncaam-feature-engineering-and-xgboost https://www.kaggle.com/muskan2006/ncaaw-feature-engineering-and-xgboost

室内定位导航:-在这个比赛中,需要根据实时传感器数据预测智能手机的室内位置。该数据由室内定位技术公司 XYZ10 与微软研究院合作提供。不幸的是,由于新冠肺炎,我生病了。所以我们只能工作四天,但我确实学到了一些新东西,比如后处理的重要性以及用于后处理的各种技术(网格捕捉、成本最小化等)。).此外,可视化数据在这场比赛中是一个挑战,但有很多很棒的公共笔记本在这方面帮助了我。关于我的方法的更多细节可以在本次竞赛的 讨论部分 中找到。

https://www.kaggle.com/c/indoor-location-navigation

表格游乐场系列-2021 年 5 月 :-这是一个为任何希望开始 Kaggle 比赛的人准备的比赛系列。它旨在提供一个任何人都可以接近的表格数据集。通过这次比赛,我了解了去噪自动编码器(DAE)、自动机器学习模型(AutoML)、Google Research 的 TabNet 库。关于我的方法的更多细节可以在本次比赛的 讨论部分 中找到。

https://www.kaggle.com/c/tabular-playground-series-may-2021

植物病理学 2021-fgvc 8:-T竞赛的主要目标是开发基于机器学习的模型,将测试数据集中给定的叶片图像准确分类到特定的疾病类别,并从单个叶片图像上的多个疾病症状中识别出单个疾病。这是我第一次参加与图像检测相关的 Kaggle 比赛。我以前从事过手写数字识别,但这次比赛涉及彩色图像,并且关于各种颜色(RGB)分布的知识是 EDA 的重要部分。使用的模型可以从 CNN 到 DenseNet、EfficientNet 等。关于我的方法的更多细节可以在本次比赛的 讨论部分 中找到。

我还做过 SESHAT 的社会复杂性数据集 。在这里,我处理了非结构化数据,并致力于分析多年来社会复杂性演变的各种趋势,以及可能在社会复杂性演变中发挥重要作用的各种因素。这是我写的笔记本

https://www.kaggle.com/muskan2006/evolution-of-social-complexity-a-data-analysis

我最终成为了 Kaggle 笔记本电脑专家!除了赠款,Kaggle 还提供了一些 Coursera 专业和 GCP 学分,以帮助学员开始使用谷歌云。他们还发出了令人惊叹的好东西,并向每个人传达了美好的信息,耶!

这是一次很棒的经历,鉴于这是第一批 BIPOC 受资助者,整个 Kaggle 团队都付出了很大的努力,让这次经历变得有价值和有趣。作为项目的总结,受资助者应该在其他学员、导师和 Kaggle 团队成员(包括 Kaggle 首席执行官 Anthony Goldbloom)在场的情况下进行最终展示。

总结思路

一开始,开始做任何事情似乎都令人生畏,尤其是在 Kaggle 比赛的情况下,因为数据集非常大。弄清楚数据本身可能会变得很困难,但是你不需要自己做所有的事情。慢慢来,正确地浏览数据描述。记下您对数据的所有理解,每个文件与另一个文件的关系,每个列的描述,或者提到的关于数据集的任何独特的东西,或者您能够找到的东西。如果你试图理解什么有困难,浏览讨论区和公共笔记本。很多时候,讨论线程包含有助于理解数据的公共笔记本列表。如果您无法理解公共笔记本中的内容,请尝试运行代码并探索每一步的数据。它不仅能帮助你理解数据,还能帮助你开始写自己的笔记本。此外,这些笔记本将让您了解可以用来形成基线的各种模型。您可以使用这些模型,并使用各种技术来提高分数,如集合最佳分数或后处理或调整模型本身的参数。作为初学者,重点应该放在学习上,所以,记录下你从每次比赛中学到的新东西,从长远来看会对你有帮助(我也在上面的讨论帖中总结了我在每次比赛中学到的一切)。从别人的旅程中获得灵感,开创一条属于自己的旅程:)

我希望我的文章能启发和帮助任何想开始使用 Kaggle 的人。如果您有任何进一步的疑问或需要帮助,请随时通过 LinkedIn 联系我!

[1] Kaggle-室内定位和导航。(https://www.kaggle.com/c/indoor-location-navigation)

[2] 【卡格-表格游乐场系列(【https://www.kaggle.com/c/tabular-playground-series-may-2021】T2)

[3] Kaggle: 植物病理学 2021—fgvc 8(https://borda.github.io/kaggle_plant-pathology/)

我的 UCL 计算机科学之旅——最艰难的计算机科学学位之一

原文:https://towardsdatascience.com/my-journey-through-ucl-computer-science-one-of-the-toughest-cs-degrees-977a1d1e0bea?source=collection_archive---------36-----------------------

从我在伦敦大学学院 3 年的计算机科学学习中

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

内森·杜姆劳在 Unsplash 上的照片

如果你不熟悉伦敦大学学院,它是世界上排名第十的大学(根据 QS 排名)。我在那里的三年旅程相当坎坷,但我很高兴去年夏天以一级荣誉毕业。

在这个故事中,我将为大学生提供全面的建议和细节,告诉他们如何避免犯和我一样的错误。这将为你节省很多时间,我认为这些建议甚至可以在大学之外使用。

也许不是每个人都同意,但是我确信如果你问人们他们在 UCL 大学计算机科学学士学位的时间,他们会同意这有点困难,特别是如果他们试图获得一级荣誉的话。

我将谈论这三年中的每一年,不是因为我想提出一个无聊的时间表,而是我认为每一年都有一些不同的挑战,我想分别解决。

大一的时候

尽管这所大学是从零开始的,但是学习材料的速度非常快。我记得在我工作的前几周,有人要求我用 Dijkstra 算法、Prim 算法、动态编程算法和其他算法编写 python 代码来解决图形问题。不要误会我的意思,我知道这些是计算机科学课程的标准,但通常在几个月后,当你开始掌握计算机科学时。

所以我给即将获得计算机科学学士学位的人的第一个建议是:

在开始上大学之前,尽可能做好准备

这包括学习编程语言的基础知识(如 Python、HTML 等),学习计算机科学的基础知识,并复习数学。这对你第一年的学习大有帮助。此外,在开始之前,试着在网上查找第一年的内容。

我的第二个建议是:

阅读有效的时间管理策略

我不打算详细讨论这个问题,因为网上有很多这方面的资源。从我的经验来看,大多数大学生在第一年遭受痛苦的原因是他们的时间管理太糟糕了。例如,虽然我的第三年课程比第一年难多了,但我能够以更好的方式处理它,因为我更好地管理了我的时间。

最终提示:

总是研究你的任务,一旦收到任务就制定一个完成任务的计划

生活有时会妨碍你,有时推迟完成任务也没关系。然而,你必须有一个完成它们的计划。我之前已经推迟了几个我认为需要几个小时才能完成的任务,结果它们只花了几天,因为我没有意识到它们的复杂性。一旦你收到作业,花 30 分钟研究一下,你就可以避免这种情况。

倒数第二年

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

达米安·扎莱斯基Unsplash 上拍摄

我一直认为第二年会轻松一点,因为我会从第一年学到很多东西。就大学模块而言,这稍微容易一点,但是,因为你几乎必须在毕业前获得实习机会,所以第二年相当困难。

当然,我预料到第二年会比第一年更困难,我只是没想到获得实习机会有多难。

对此,我的第一条建议是:

从你的第一年开始准备,参加招聘会(这真的很重要),开始写你的简历,和你大学的学长交谈。

如果你对我的实习经历感兴趣,我将很快发布一个全面的指南。

最后一年

预计这将是你最艰难的一年。Covid 无疑让今年变得比预期的更加艰难。但是无论如何,成功毕业的主要挑战之一是做好你的论文。

大三前的暑假,我开始研究各种论文题目。我认为这是我做的最好的一步。我不仅选择了一个独特的论文主题,而且我学到了很多关于机器学习的知识(因为它是那个主题的一部分),这帮助我通过了几个最后一年的模块。

你的论文可以非常乏味,也可以非常有趣。我和我的朋友们见过这两个极端。对我来说,这是相当愉快的,我建议你看看这里:

此外,最后一年的主要挑战之一是找到一份研究生工作。如果你在倒数第二年后有一个暑期实习,这可能对你来说不是问题。然而,如果你没有,我强烈建议你从九月开始申请研究生工作。

最后的想法

我想我的最后一条建议,也可能是最重要的一条是冷静下来!老实说,我过去常常因为到处丢了几个分数而感到压力很大,这不值得。我最终获得了一等荣誉,我本可以享受更多的旅程。你的大学时光可能会是你一生中最美好的时光之一,我相信很多读者都会同意这一点。

我将 MariaDB 连接到 MySQL Workbench 的旅程

原文:https://towardsdatascience.com/my-journey-to-connect-mariadb-to-mysql-workbench-2d7e599a8a26?source=collection_archive---------8-----------------------

数据库ˌ资料库

我的老板向我要一个保存在 MariaDB 中的模式的 ER 图。

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

希尔德·德梅斯特在 Unsplash 上的照片

我碰巧必须从 SQL 模式中提取实体关系图。我通常使用 XAMPP 来处理 SQL,所以我告诉自己尝试使用 PhpMyAdmin 提供的**设计工具。事实上,结果并不好。我的数据库有超过 20 个表格,设计者显示它们一个接一个。**此外,PhpMyAdmin 设计器是一个非常基础的工具,它不允许您自动对齐表格以提高可读性。

然而,由于我的老板要求我制作这个受祝福的 er 图,并且不希望手动地在图中一个接一个地移动表格,我考虑使用 MySQL Workbench 。我记得在很久以前的回忆中,MySQL Workbench 为将 SQL 模式自动转换成 ER 图提供了一个非常强大的工具。这个工具叫做逆向工程

问题就出现了。让 Maria db(XAMPP 新版本提供的数据库)与 MySQL Workbench 对话不是一个非常简单的操作。但我想最终成功。

我想告诉你我是如何成功的。

首先,我已经在我的电脑(Mac OS)上预装了 XAMPP 的最新版本(在我写这篇文章的时候是 7.3.33),所以我不想像 StackOverflow 上的一些帖子所说的那样,降级到以前安装了 MySQL DB 的版本。

第一次尝试😱

我下载了最新版本的 MySQL Workbench (写这篇文章的时候是 8.0.27)并安装了它。

我的第一次尝试是让 MariaDB 直接与 MySQL Workbench 对话。我从 XAMPP 的控制面板启动了 MariaDB:

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

作者图片

当服务器处于活动状态时,其名称旁边的指示灯会变成绿色。然后我启动 MySQL Workbench 并点击+号来创建一个新的连接:

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

作者图片

我添加了连接参数,但是当我试图按下 Connect 按钮时,不幸的是连接失败了,因为这需要配置 SSL。

第二次尝试😢

所以我搜索了一下,找到了如何在 Maria DB 中配置 SSL。我发现本文中描述了一个相当复杂的过程。但是说实话,我有点害怕。所以我放弃了。

然而,在浏览 MySQL Workbench 的连接配置选项卡时,我发现存在一个向导(在 SSL 选项卡下),它允许您自动生成密钥和证书。

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

作者图片

通过遵循向导过程,可以生成各种证书。我已经在“使用默认参数”项中打上了勾号。

该过程完成后,您可以通过单击向导按钮正下方的“文件”按钮来访问文件。我将文件复制到我的本地文件夹,然后转移到 Maria DB 服务器配置。

从 XAMPP 菜单中,我选择了 MySQL 服务器,然后单击配置,然后单击打开配置文件,在底部,我粘贴了与证书一起生成的my.conf.sample文件中的文本。有问题的文本是这样的:

[client]
ssl-ca=<directory>/ca-cert.pem
ssl-cert=<directory>/client-cert.pem
ssl-key=<directory>/client-key.pem[mysqld]
ssl-ca=<directory>/ca-cert.pem
ssl-cert=<directory>/server-cert.pem
ssl-key=<directory>/server-key.pem

我用我的目录的路径替换了<directory>。我重启了 SQL server,它安静地启动了。

然后我回到 MySQL Workbench 并创建了一个新的连接。这一次,我已经在 SSL 选项卡中的适当位置配置了所有必需的 SSL 参数。

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

这一次我尝试连接 MySQL 工作台给了我一个警告(见侧面)。我还是点击了继续,一切似乎都很好。

看起来的确如此。

我可以看到存储在我的 SQL server 上的所有数据库,但是当我试图访问单个表时,它告诉我无法加载它们:

无法获取表—加载模式内容时出错

唉,连第二次尝试,都不幸悲惨失败…

第三次尝试😌

但是我不灰心。我再次尝试谷歌。这次我发现另一个 StackOverflow 线程奇怪地说 MySQL 需要更新。

没有什么可失去的,并且总是想着我的老板不惜一切代价想要那个 ER 图,我打开一个终端并运行这个命令,希望它不会破坏一切:

sudo /Applications/XAMPP/bin/mysql_upgrade

有东西在动。看起来像是在安装什么东西。好了,完成了。我重启了 SQL 服务器,一切正常。然后,我回到 MySQL 工作台,重新连接到 SQL server,现在,我终于可以看到这些表了!哇!我很开心!

我只要启动逆向工程就行了!
但是不行,系统崩溃了。

不要。它看起来像一个古老的奥德赛。但是我不放弃,我能做到。我不得不做。

我总是在想我必须带给我老板的那个 ER 图。
事实上,我有点泄气了……也许,我对自己说,我可以重用 PhpMyAdmin 设计器。

然后,然而,我想象自己用手移动所有的桌子…不-不。我试着再找一遍。

第四次尝试😄

我不停地在谷歌上搜索,直到我看到这篇 StackOverflow 文章,文章中说逆向工程崩溃问题是最新版本 MySQL Workbench 在 Mac OS 上的一个已知错误。所以如果你安装一个老版本,最晚 8.0.21,问题应该就解决了。

那我试试。卸载最新版本,下载 8.0.21,安装。我尝试逆向工程,一切正常!这些桌子都完美地排列在一起,不需要任何手工操作😎

那都是乡亲们!

声明一下,这里制作的 ER 图我不能放截图,出于隐私考虑。相反,我放了一个简单的 ER 图的截图,它产生了我的逆向工程:

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

作者图片

摘要

在本文中,我描述了我尝试将 Maria DB 与 MySQL Workbench 连接起来的经历,以利用 MySQL Workbench 提供的逆向工程工具。

这是一个漫长的过程,但我最终设法产生我的 ER 图。但是这个问题仍然存在:

花时间让自动工具工作是否值得,还是进行手动操作更好?

老实说,我几乎总是喜欢花一些时间让自动程序工作。你看呢?如果你愿意,请随意发表评论。

如果你已经走了这么远来阅读,对我来说今天已经很多了。谢谢!你可以在这篇文章中读到更多关于我的信息。

相关文章

https://alod83.medium.com/how-to-import-and-export-a-dataset-in-phpmyadmin-b108288a3ca3 https://alod83.medium.com/how-to-install-xampp-bcb43fb11912

我 14 岁的卡格尔大师之旅

原文:https://towardsdatascience.com/my-journey-to-kaggle-master-at-the-age-of-14-e2c42b19c6f7?source=collection_archive---------1-----------------------

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

作者的 Kaggle 简介

有些人可能会觉得“数据科学”和“机器学习”这两个术语令人生畏,认为它们需要专业技能才能成功。初看数据科学和机器学习领域,可能会不知所措,盯着无尽的代码行和技术术语,不知道从哪里开始。

卡格尔是许多人开始旅行的地方之一。对于其他人来说,Kaggle 是他们竞争、赢得声誉和深入机器学习领域的地方。

在这篇文章中,我将带你了解我是如何在 14 岁时成为最年轻的 Kaggle 竞赛大师之一的。

关于我自己

我是 Andy Wang,一名高一学生,对数学、人工智能和计算机科学有着浓厚的兴趣。我在 Kaggle 上比赛以学习和提高我的技能,获得了 2 枚银牌和 1 枚金牌。

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

作者图片

早期经历

几年前,我对数学产生了兴趣,并开始自学比学校里教的更高级的课题。不久之后,我开始研究编程,因为我从小就对计算机科学着迷。我搜索在线课程,找到了几门教授 Python 和基本编码概念的课程。不久,我开始自己编程,用回溯算法做一些小项目,比如数独解算器。

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

我的数独生成器的代码片段。图片作者。

在这一点上,我有点怀疑以我手中掌握的知识,我该何去何从。直到有一天,我的朋友向我介绍了机器学习和数据科学领域,我对它的力量感到非常惊讶。然后我找到了 Kaggle,这是一个网站,它扩展了我对当前计算和人工智能技术的可能性的了解。

我是如何进步和学习的

我的编程知识和机器学习概念很大程度上来源于互联网。当你有疑问时,互联网是你最好的老师。没有学校教授数据科学或神经网络,如果我要在 Kaggle 上取得成功,我只能靠自己。

数据科学和机器学习对许多人来说是一项艰巨的任务。面对如此多的资源和科目,人们不知道从哪里开始,也不知道如何学习。因为有如此多的领域与术语“数据科学”和“机器学习”相关联,精通每一个类别几乎是不可能的。ML 和 DS 的力量令人着迷。对于像我这样的初学者来说,你需要找到你感兴趣的东西,并充分发掘它所能实现的潜力。

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

机器学习的不同领域。作者在 LucidSpark 上创建的图像。

学习 ML 和 DS 对许多人来说是不同的,基于他们先前的知识,这里是我选择的道路,我在其中找到了成功。

  1. 我知道数学是未来一切的基础。线性代数微积分是机器学习中使用的两个最重要的数学概念。几乎所有的机器学习算法都以这样或那样的方式与这两个领域相关。数据以向量和矩阵的形式表示和处理。因此,需要了解矩阵的基本运算。机器学习中微积分最常见的用法之一是 梯度下降 。这是一种算法,旨在通过使用函数的梯度迭代地逐步达到全局最小值来最小化目标函数。
  2. 统计也不能被遗漏。顾名思义,数据科学就是关于数据的。虽然计算机可以预测数据的某些趋势,但人类是唯一可以分析它们,计算某些属性,并最终得出数据结论的人。数据的预处理和特征工程严重依赖于统计学。我零零碎碎的学了统计学,刮了网上的文章,找了合适的网上课程。
  3. 了解了基础知识后,我开始着手编写代码。有了面向对象编程 (OOP)和 Python 的基础知识,我找到了在线课程,这些课程教会了我所有机器学习中常用的库。与简单地遵循代码和复制粘贴相反,我确保我理解了所写内容背后的数学原理。如果你不了解事物的内部运作,就不可能充分利用它。我从简单的算法开始,如线性回归,直到更复杂的算法,如梯度推进神经网络。

学习点点滴滴,一步一个脚印,你从一开始获得的知识可以在未来轻松地积累成复杂的东西。

加入 Kaggle

在这一点上,我想利用我在 Kaggle 竞赛方面的知识。我参加了一个利用回归技术预测房价的初级竞赛。我发现我学到的远远不够。我最怀念的是经历。**最好的学习方式是通过失败和尝试新事物。**我熟悉了 Kaggle 的环境,浏览讨论和笔记本,寻找关于这个问题的解释。不久之后,我觉得我已经为我的第一次真正的比赛做好了准备。我和朋友 Andre Ye 一起参加了机关动作大赛

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

我们的第一场比赛,莫阿。来源

当时我们都是竞赛的新手。论坛上那些看起来很专业的代码和技术讨论让我们目瞪口呆。我决定从头开始,而不是分叉一个入门笔记本。在讨论帖子的帮助下,我能够在短时间内建立一个基线。创新对于在竞争中取得成功至关重要。我翻遍了关于这个问题的论文和文章,然后将它们与论坛上介绍的方法结合起来,将我们的解决方案排在前 4%。后来,随着更多的经验,我们又参加了两项比赛,获得了另一枚银牌和我们的第一枚金牌。结果对我来说是一个真正的惊喜,我无法感谢 Kaggle 社区引导我度过了。以下是我在参加比赛时观察和学到的一些技巧和诀窍。

我的高尔夫比赛总流程

从我参加的比赛来看,有一个我遵循的通用流程,它不仅能组织工作,还能有效地产生有意义的结果。

  1. **仔细阅读数据描述和概述。**如果可能的话,温和地探索领域知识。
  2. 在阅读任何论文、讨论或笔记本之前,试着自己建立一个基线。这有助于在你锁定别人所说的之前产生全新的想法。
  3. 制定可行的交叉验证策略,并提交至排行榜。确保你的简历策略也适用于 LB,这一点很重要。
  4. **读,读,学!**充分发掘与主题相关的论文,在论坛和笔记本上寻找灵感。
  5. **开始调整基线,无论是模型方面还是特性方面。**一次只调整一件事,这样你就知道是什么导致模型改善/表现变差。
  6. 探索尽可能多的新方法,不要停留在那些行不通的事情上。
  7. **合奏!**如果其他方法都失败了,组装或堆叠是我发现的最稳定的改进方法。
  8. 只选择简历分数好的提交(并确保自己知道为什么表现好)。

我所学到和利用的

随着我参加越来越多的比赛,我对一些解决方案的复杂性感到惊讶,从特征工程到神经网络的结构。

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

来自 RANZCR 竞赛的惊人的第一名解决方案

一般来说,机器学习算法可以很好地学习,只从信息数据中学习。在某些情况下,能够利用与预期稍有不同的算法会有所帮助。例如,使用主成分分析(PCA) 来减少数据的维度然后将减少的特征连接回原始特征在不止一种情况下帮助了我。

特征工程带来了特征选择。移除不重要的要素有助于减少数据中的噪音。在行动竞赛机制中,论坛和讨论帖中的方法对我们设计的模型没有帮助。在这种情况下,不要害怕深入研究和阅读论文。由于我正在处理的多标签分类案例并不常见,所以我找不到任何简单的教程。我发现了一篇旨在使用问题转换比较多标签特征选择的论文。

阅读研究论文似乎令人生畏,但是能够快速浏览并从长长的技术术语中抓住关键词是一项至关重要的技能。对我这样的初学者来说,试图理解你遇到的每一篇论文的每一个细节是不可能的。只有当我降落在我需要和将要使用的纸上时,我才试着去理解文中的每一个词和参考文献。

在建模期间,我学到的最大的一课是创造力。不仅仅是在模型结构中,还要跳出框框思考模型如何在不同类型的数据上工作。

  • 调整模型,使其具有非线性拓扑或为表格数据构建类似 ResNet 的结构化网络,不仅在 MoA 比赛中,而且在接下来的 Jane Street Market Prediction 比赛中,我们在 4.2k 个团队中排名第 16 位,取得了一些惊人的成绩。
  • 探索不同类型的自动编码器,如去噪变分稀疏编码器可以给你的数据带来令人惊讶的变化,而不是简单的特征工程和选择所能实现的。
  • 合奏。组合不同模型的结果增加了您的解决方案的多样性,从而使它更加健壮和稳定。无论什么样的建模技巧奏效与否,在比赛中,组装总是我的“最后手段”。
  • 时刻关注新的论文,探索论坛中没有提到的东西。调整一些小事情,比如激活函数(尝试 swish 而不是 ReLU),以及优化器(尝试 AdaBelief 而不是 Adam,等等。)可能会从模型中挤出一些性能。
  • 跳出框框思考!使用 1D CNN 对表格数据进行特征提取。或者使用 DeepInsight ,将表格数据转化为图像,利用 CNN 的优势。

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

图片来自 Kaggle

最后,在一场比赛中奏效的策略不一定会在另一场比赛中改善你的解决方案。在简街市场预测挑战中,我发现特征工程对结果一点帮助都没有。相反,我发现了建模的魔力。要记住的一般经验法则是:

在这种情况下,不要停留在“以前工作过”或“为他人工作过”的事情上,继续前进,花更多的时间探索能带来进步的新事物。

参加 Kaggle 比赛并获得奖牌不是一件容易的事,但是通过正确的学习方法和工具,这个过程可以变得更容易。

  • 查看讨论帖子和阅读公共笔记本非常有帮助。每天都有新的想法出现,我通过论坛中提到的论文和笔记本中使用的库了解了一些最新的、令人着迷的模型和工具。其中之一是 TabNet ,这是一种通过使用顺序注意将特征选择纳入模型来对表格数据建模的新方法。这个模型让我在 MoA 比赛中获得银牌。
  • 最后,拥有稳定而强劲的渠道是在最终私人排行榜上取得优异表现的最关键因素。为了在公共排行榜上获得额外的 0.0001 而浪费时间过度拟合是没有意义的。始终相信您的本地交叉验证分数,因为训练数据的数量大于公共排行榜。

尽管有很多技巧和诀窍,但我成功的最重要部分是我始终如一的建模渠道和稳定的简历。

对于一个强有力的,稳健的 CV…

设置本地交叉验证方案时。我谨记以下几点:

  1. *折数> 3。*对于较小的折叠数,训练分裂不足以代表全部数据。
  2. *确保数据没有泄露。*特别是在时间序列预测等情况下,常规交叉验证会导致未来数据泄露,应使用某种形式的时间序列分割。
  3. *当目标不平衡时使用分层折叠。*分层折叠方法试图在折叠中平均分割目标。
  4. 确保你知道某事为什么会改善。 这非常重要,因为结果可能会受到随机种子和其他未知因素的影响。这可能会导致看不见的数据中的重大不确定性(私人排行榜)。

仅仅按下复制粘贴对学习或赢得比赛没有任何帮助。我在 Kaggle 最重要的座右铭是永远不要抄袭别人的作品,我可以从他们的想法中获得灵感,甚至使用他们的建模方法,但我从不提交别人的作品作为我的解决方案。当接触新的事物时,我养成了一种习惯,去查阅一切我不懂的东西,直到我能自信地向别人解释这个主题。

最后…

这篇文章可能不会帮助你赢得竞争,但是我向你保证,他们会引导你在 ML 和 DS 的旅程中少失败。

我的第一份数据科学工作之旅

原文:https://towardsdatascience.com/my-journey-to-landing-my-first-data-science-job-8a64907f7343?source=collection_archive---------8-----------------------

野外的数据科学和机器学习

以及我一路走来学到的 10 个教训

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

史蒂夫·哈维Unsplash 上拍照

介绍

众所周知,数据科学工作的竞争非常激烈。你可能正在填写你的第一份申请,也可能已经有 100 份申请了。不管怎样,我想和你分享我的故事,希望它能激励你继续前进。我热爱我作为首席数据科学家的工作,但这并不容易。我面临持续的拒绝和失望;有一段时间,我准备接受一份我讨厌的职业。我没有放弃,你也不应该放弃。这是我的故事。

我一直是一个好奇的人,这让我的父母和周围的人很烦恼。我喜欢理解“为什么?”发现我参与哲学辩论或谈论想法并不罕见,这是许多数据科学家的共同特征(我相信)。无意冒犯,但我认为这条职业道路选择了我。当我还是个孩子的时候,并没有真正意义上的“数据科学家”这种工作。我知道有些人在逻辑、数学和科学方面做了很酷的事情……我想成为他们中的一员,不管是什么。

教育

追随我的梦想,我攻读了过程工程学位。建造大型炼油厂,设计可再生能源发电站,这很酷吧?我会产生巨大的影响,至少我是这么想的。我很快发现这根本不适合我。我坚持完成了学业,并以一个平庸的工程学士学位毕业。我把这归咎于我缺乏兴趣、派对生活方式和不成熟。

即使在我糟糕的大学经历之后,我仍然有这种渴望。我知道我想以某种方式产生影响,我仍然相信我的能力。我申请了运筹学、应用统计学和风险的硕士课程。这太棒了!班级规模很小,我学习了(一点)编码,我第一次感觉到我在学习真正有影响力的东西。我们讨论了图形网络、信用卡、时间序列预测、优化算法等等。当时,这种东西看起来像是最先进的分析技术,它会很好地为我的第一份职业工作做准备。我也很幸运地得到了一份关于零售和消费价格指数的实习工作。

早期职业生涯

我的第一份职业是在一家非常大的银行从事风险分析。最初这很棒,我接触到了所有的信贷准备金模型。在最初的几个月里,我会把它们分开,试图理解它们是如何工作的。当时所有的模型都是用 SAS 编写的,并且有一个 excel 前端。出于好奇,我找到了改进模型的方法,但作为一个天真的孩子,我无法向我的高级利益相关者推销我的想法。我很快就变得灰心丧气,只能听天由命地输入数据和遵循流程。我对这一经历不再抱有幻想,进入了轻度抑郁状态。

我知道我必须离开。在接下来的 5 年里,我会在不同的公司和不同的工作间穿梭,试图为自己找到一个位置。这是一段艰难的旅程,我很矛盾。我知道我很幸运,但同时我对工作不满意,完全没有成就感。提供给我的工作类型大同小异,我无法胜任我想要的工作。

投资我自己

最让我难以接受的是,自从我完成硕士学位后,这个世界已经变了。当时的“最先进”现在看来已经过时了。新一批毕业生现在可以构建深度学习模型,闭着眼睛编码,并创建强化学习模型,可以在国际象棋上打败我。好吧,我夸大其词了,但重点是世界已经变了,我的技能已经过时了。我知道在这个时候,如果我想朝着正确的方向前进,我必须投资我的职业生涯。我抽不出时间去完成另一个硕士项目。“我能怎么办?”,我问自己。

我认为 MOOCs 是一个好的开始。我热切地报名参加了尽可能多的活动,并努力完成了所有的活动。从在 sci-kit learn 中构建基本的 ML 模型到发现谷歌云平台的来龙去脉,我学到了一切。这太棒了,它极大地满足了我的好奇心,我终于觉得我要去某个地方了。

我尽可能多地接触书籍,我想尽可能地了解算法、统计、计算、机器学习、深度学习等等。

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

我真正的书架上有我在旅途中读过的书

我花时间构建机器学习模型,也写了一些关于它们的文章。除了头衔,我开始觉得自己什么都像数据科学家。

这里是我写的一些文章,可能会对你的人生有所帮助……

找到我的第一份工作

在此之后,我开始申请工作。起初,我试探性地认为我没有合适的经历,直到一个朋友说服我要么做大,要么回家。他是对的,我绝对没有什么可失去的。仅仅申请了几份,我就成功获得了谷歌、脸书和 Spotify 等科技和金融公司的面试机会。这很令人兴奋,我觉得自己离成为数据科学家的目标越来越近了。

对我来说,所有的面试都很难。我接受了无数带回家的挑战,被编码能力问题轰炸,有时连续 7 个小时被拷问,有时三个问题同时被拷问。

我做得很好,但发现我在最后一轮面试中一直表现不佳。我总是被比我多一点经验的候选人击败。几个月来,我接连收到拒绝信,有时根本没有回音。在努力工作了大约一年后,我在情感上和精神上都筋疲力尽了。

我最终找到了我的第一份工作,成为一名正式的数据科学家,并被提升为领导一个数据科学家团队。我必须说这超出了我申请时的预期。我想给你留下我在旅途中学到的十件事。

我在旅途中学到的十课

1.你的过去并不能定义你。即使你的背景不够好,你也有能力改变它。

2.追随你的激情。生命太短暂了,不要困在你讨厌的事情上。

3.投资职业发展总是值得的。即使这需要一些钱,和你的雇主谈谈,看看是否有资金来源,或者如果资金太难的话,自学。

4.指导你的学习。我花了很多时间学习多余的东西,如果我能回到过去,我会选择一个专业来指导我的研究。这可能是一件困难的事情,因为你可能不知道你想去哪里。

5.尽快申请工作。许多人发现面试令人生畏,所以他们用学习、MOOCs 或任何他们能告诉自己还没准备好面试的事情来拖延时间。根据我的经验,你可以从面试中学到很多东西。你开始弄清楚外面有什么,雇主在找什么,你在面试中也会变得更好。

6.以拒绝为教训。不要掉入变苦的陷阱。每一次拒绝都有一个教训。从每次面试中寻求反馈,并以此来指导你的学习。如果没有反馈,这本身就是一个教训。

7.庆祝小胜。通过一轮又一轮的面试并不容易。当你庆祝的时候,提醒自己庆祝,这会让你精神振奋。提醒自己你已经走了多远,许多人甚至没有申请到。

8.该休息的时候休息。如果你感到筋疲力尽,放下书本或者暂停一会儿面试。你的大脑工作能力有限,它需要时间休息。如果你发现你的工作越来越马虎,面试变得越来越费力,那可能是时候休息一下了。

9.向机遇敞开大门。我受邀参加研讨会、播客和社交活动。敞开心扉去参加。让自己走出舒适区,你永远不知道那里会出现什么机会。

10.别放弃。在这条路上你会遇到许多障碍,你的工作就是去克服。作为数据科学的从业者,工作中也是如此。一旦你被雇佣了,事情就不会变得容易了。当你开始真正的事情时,把这看作是条件反射。

奖金 ⭐️: 学习永不停止。这个领域不会停滞不前,继续学习和发展你的技能。我将在明年年初开设一门开放式银行和人工智能课程。你需要保持这种内在的知识。

我祝你一路顺风。记住外面有很多工作机会!

https://www.linkedin.com/in/john-adeojo/

我的机器学习模型是完美的

原文:https://towardsdatascience.com/my-machine-learning-model-is-perfect-9a7928e0f604?source=collection_archive---------34-----------------------

但我能闻到。

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

Unsplash 上@ youxventures@ tade KL@ Mario Gogh的照片

需要重构的代码

奇怪和难以阅读的代码是引发重构(重写)的常见原因。想象一下没有大量文档的非结构化意大利面条式代码——或者相反——文档太多,你再也看不到森林了。这种代码问题被称为“代码味道”。这个术语在 1999 年马丁·福勒的书“重构:改进现有代码的设计”出版后被广泛采用。其本质,重构是应用一系列小的行为保持转换,其累积效果是“降低引入错误的风险”。

有些气味很容易被发现,有些气味比其他气味更微妙、更阴险。虽然这些问题和迹象本身可能并不有害,但它们值得仔细观察。你可能以前见过其中一些:

  • 不必要的复杂性(也就是炫耀)。
  • 带有太多参数的函数,表明“上帝函数”没有划分成辅助函数。
  • 屏幕上的函数长度失控,难以阅读。
  • 过多的注释使得很难区分代码和非代码。
  • 重复代码——这就是“不要重复自己”原则的来源。

看看代码气味的完整列表及其在维基百科上的描述,以及 Anupam Chugh 在他的 TowardsDataScience 帖子中讨论的内容。

突围:谁有最臭的代码?

在写这篇文章的时候,华盛顿州的谷歌搜索用户对代码气味最感兴趣,或者至少排名很高。立即查看谷歌趋势。他们的代码是所有代码中最臭的吗?兴趣可能与一个状态中的编码者的数量相关,并且不可避免地会有有问题的代码被发现。

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

粘土银行Unsplash 拍摄的照片

机器学习闻起来是什么味道?

几乎所有的机器学习都需要有人编写代码。这意味着已知的问题或气味可能来自代码库——不管是我们写的还是其他人放入黑盒中让我们调用的。机器学习模型是传统的函数,但在数学上遵循不同的范式:一个将样本值 X 与某个目标值 y 相关联的函数。虽然 PyTorch、TensorFlow 和 Scikit-learn 等全面的 ML/DL 库的所有函数都有望得到优化,并且没有代码味道,但一个项目涉及的不仅仅是在单个函数中调用的单个算法。根据我们项目的需求调用函数库功能的工作流是一个“元模型”,有其自身的设计复杂性。

那么,在我们的预测工具中,哪些“ML 气味”可能会提醒我们更深层次的问题呢?

【Matt Hall 博士于 2020 年 10 月在 Twitter 和地质机器学习社区 Software Underground 中提出了以下问题:

🐽ML 气味很可能不是一个东西,但也许应该是。一个# machine learning项目中潜在更深层次问题的表面迹象是什么?——马特·霍尔(@ kwinkunks)2020 年 10 月 7 日

Matt 众包了一些优秀的回答:

  • 像 AutoML 这样的暗箱服务。
  • 违反直觉的模型权重 - >已知影响具有低特征重要性。(里斯·霍普金斯,安克雷奇)
  • 不可复制、不确定的代码 - >不设置随机种子。(里斯·霍普金斯,安克雷奇)
  • 无列车价值测试分割描述/理由。训练数据和盲数据之间的泄漏很容易随着空间相关数据中的随机分裂而引入。(贾斯汀·戈斯,休斯顿)
  • 无评估指标讨论 - >如何选择或设计(Dan Buscombe,Flagstaff)
  • 无事实根据的讨论以及目标标签如何与之相关。(贾斯汀·戈斯,休斯顿)
  • 过高的超参数精度 - >可能意味着过度调整。(克里斯丁宁,珀斯)
  • 未考虑精度-召回权衡 - >,尤其是在二分类任务中。(丹·巴斯科姆,弗拉格斯塔夫)
  • 强烈的阶级不平衡并且没有明确提到如何处理。(丹·巴斯科姆,弗拉格斯塔夫)
  • 一个或两个特征的偏斜特征重要性可能暗示特征泄漏。(约翰·拉米,奥斯汀)
  • 找借口 - >“我们需要更多数据”“标签不好”等。(哈尔格里姆·拉德维森,斯塔万格)
  • 花在清理数据上的时间太少 - >不到准备数据工作的 80–90%。(迈克尔·皮尔茨,奥斯汀)
  • 非常高的精度,例如,对于新任务上的复杂模型为 0.99。(Ari Hartikainen,赫尔辛基 Lukas Mosser,雅典)。在大多数真实世界的场景中,接近 0.7 的精确度是非常好的,任何 0.8 的精确度都表明发生了一些不寻常的事情。

这是一个很长的列表,但还有更多。

最有可能的是,我们有自己的偏见和倾向来产生一些气味,因为我们没有意识到,没有更好的了解,或者没有其他选择。在这种情况下,同行评审提供了第二(或第三、或第四……)双眼睛,这是至关重要的,所有的气味都被清除了。

你怎么想呢?

你的 ML 代码有多完美?你看到了什么样的表面现象可能表明 ML 项目中更深层次的问题?

也许是时候有人正式创造一个新的术语叫做“ML 气味”了……

感谢马特·霍尔,他的问题激发了我写这篇文章的灵感!

关于

Christian 拥有Marine Science的博士学位,Geoscience的理学硕士学位,有很强的计算机编程背景。他精通我们这个时代最热门的课题之一:Data Science,并开发Machine Learning模型。查看更多…

原载于 2021 年 1 月 16 日https://www . Christian Haller . me

我在数据科学领域的指导经验:经验和教训

原文:https://towardsdatascience.com/my-mentoring-experience-in-data-science-lessons-taught-and-learned-e7df0317f44c?source=collection_archive---------18-----------------------

我对工作内外的人进行正式和非正式指导的经历

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

乔恩·泰森在 Unsplash 上的照片

什么是师徒制?怎么才能找到导师?像这样的问题经常在论坛、社交媒体和社区中被问到。当一个有经验的人分享见解并无偿指导学员走向成功时,师徒关系应该是一个令人兴奋的局面。有人建议在工作中找一个导师;还有人说,你可以在任何地方找到潜在的导师。

但是从导师的角度来看事情是如何进行的呢?也许有一天,一个人只是决定是时候指导别人了,并开始帮助别人?就我而言,它是逐渐开始的。

很长一段时间,我认为我只是在帮助人们向我伸出援手。但是后来,在一份工作中,我开始正式指导人们。项目结束后,我回头看,意识到我已经指导了很多人。以前我认为师徒关系是一个重要而正式的承诺,但现在我知道这并不总是正确的,师徒关系可以是完全非正式和有趣的。

2020 年,我获得了 ods.ai 颁发的导师奖,现在我认为是时候谈谈导师了。

在这篇博文中,我想分享我的指导经验,我对它的想法,对导师的好处,以及潜在的困难。

什么是指导

指导有许多定义,侧重于不同的方面。维基百科提供了以下一条:

辅导是一个非正式传递知识、社会资本和接受者认为与工作、职业或专业发展相关的心理社会支持的过程;指导需要非正式的沟通,通常是面对面的,持续一段时间,在被认为拥有更多相关知识、智慧或经验的人(导师)和被认为拥有较少相关知识、智慧或经验的人(被保护人)之间进行。

我基本同意,并想强调最重要的几点:

  • 导师在学员感兴趣的领域更有经验。这是不言自明的,但也意味着学员在其他领域可能更有经验。例如,学员正在转行或学习新的兴趣领域;
  • 学员有一个具体的目标(例如,获得一份更好的工作)。如果被辅导者不知道他们想要什么,导师将无法提供帮助;
  • 通常,指导是在两个人之间进行的,而不是在小组中进行。唯一的例外是,导师同时帮助几个学员处理类似的话题,例如,指导新同事。但是尽管如此,这些小组会议应该比更多的个人指导更少;
  • 与其他形式的知识共享相比,指导更个性化,更不正式。例如,教练仅限于商业话题,在教学的情况下,学生通常没有太多的选择自由,教师也不太容易分享个人想法;
  • 指导的开始通常不是正式的。其实给我写信“成为我的导师”的只有几个人,我一般都是拒绝的(我在这篇博文的最后说说我的理由);
  • 导师交流可以面对面进行,但我更喜欢短信或电话。
  • 指导可以偶尔进行,但必须至少进行几次。一次性建议不是完全的指导,尽管它仍然是有益的;

导师本身有多种形式:导师可能会给出模糊的建议或帮助解决技术问题,提供一个新的视角,激励,支持和激励,并以许多其他方式提供帮助。导师风格取决于导师的偏好、学员的目标和背景(例如,是否在工作)。

我的指导经历

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

我生成的模因

首先,我想分享一下我在开始 DS 职业生涯时的经历:大学毕业后,我作为 ERP 系统实施领域的分析师/顾问工作了大约 4 年。在那段时间里,我在精益六适马获得了绿带。

由于从事咨询工作,我学到了很多东西,特别是与客户交谈,讨论他们的需求并将其形式化,向程序员解释任务,测试结果,组织项目和许多其他技能。

然后就离开了这个职业,经过 8 个月的自学,开始了大三 DS 是银行的工作。在那里工作期间,我已经完成了两门课程,并做了一个自己喜欢的项目。这个热门项目包括收集数据、训练模型、部署模型,以及制作一个与模型交互的 web 界面。还有就是我在 ods.ai 社区里问答。

结果,尽管我是一个大三的 DS,但我成功地将我的职业生涯转向了数据科学,拥有了各种技能和知识,以及一个已完成项目的经验(尽管是在工作之外)。这意味着我已经可以帮助别人了,事实上,我在做 DS 的第一份工作时就已经开始指导了。

非正式指导

我将把正式的(工作中的)和非正式的(工作之外的)指导分开,因为它们非常不同:它们有不同的承诺水平、不同的参与者动机、不同的期望等。详细描述我所有的指导经历太长了,所以我想只描述我正式的指导经历。对于非正式的指导,我将介绍更高层次的信息。

第一次指导经历

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

我产生的迷因

正如我已经提到的,我在从事我的第一份 DS 工作时就开始了指导。ods.ai 社区的一名成员向我提出了关于转行的问题,我分享了我的经验并给出了建议。

然后我们继续交流,我帮助他解决技术和理论问题,对各种项目提出建议。其中一个是关于制作网站和部署模型的,这和我上面提到的宠物项目很相似。

在帮助寻找这些问题的答案的同时,我自己也学到了很多有用的信息。

我们的交流持续了 6-12 个月。

卡格尔

如你所知,我是 Kaggle 竞赛大师和笔记本电脑大师(我甚至保持了 1 年的排名第一)。

我在 Kaggle 上活跃的时候(目前不太活跃),经常在 Kaggle 论坛上回答问题。许多人写信给我,通过社交媒体、电子邮件和其他媒介提出问题。在某些情况下,我们的交流持续了很长时间。最显著的例子是两个人成为 Kaggle 笔记本电脑大师;这是其中之一:

我分享了我写和推广笔记本的经验,对他们的工作提供了反馈,给出了想法和建议——而且效果很好!

短期和长期指导

我不仅在 Kaggle 上很活跃——我在几个社区回答问题,发表演讲,并参加许多其他活动。结果,很多人向我求助。

他们中的一些人就某个特定的主题提出了问题,或者在解决某个技术问题时需要帮助(例如,询问客户流失预测的方法或者解决某个特定的医疗 CV 任务)。其他人想要关于职业的建议或一般指导。通常,它是通过文本,有时使用语音。

在大多数情况下,一次会议就足够了,所以我不愿意称之为“指导”,但无论如何我可以帮助这些人,这很好。

但在某些情况下,我们的交流持续了很长时间。有时我们经常互相发信息,有时我们可以几个月没有任何联系。

正式辅导

我在一份工作中是正式的导师。指导是我职责的一部分,但当你是一名技术主管时,有时很难将指导与其他工作活动区分开来。因此,以下几点纯粹是关于指导的;其他的将是关于管理团队或其他工作的事情。

该项目是关于使用深度学习模型开发一种产品。这项工作在我加入公司之前很久就开始了,但公司的一些变化让我成为了这个项目 NLP 部分的技术主管。

在我开始领导技术的时候,我的团队只有一个人,但是我很快就雇佣了 3 个人。因此,我必须指导有经验和没有经验的同事。还有一个额外的问题——这正好与新冠肺炎疫情和锁定的开始相吻合,所以一切都很遥远,这带来了不同的挑战,因为我不习惯。

入职

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

我生成的模因

入职培训是一种特殊类型的指导——它帮助新人成为项目、团队和公司的一部分。

它主要是关于日常的事情——帮助更多地了解队友,描述过程和非正式的规则。

在理想世界中,没有必要教授任何特定于项目的技术内容——它们在文档和内部 wiki 中有描述,但这在现实中很少。最好的情况——有一些有用的文档,但是它们有点过时了。

在我的案例中,我认为现有的文档是不够的,所以我和每个新人打了 2-3 个小时的电话。我从高层次和低层次的细节讲述了这个项目,展示了代码,演示了它是如何工作的,解释了我们的开发实践,等等。然后,我们更新了文档并试图维护它。

初始教学

我的团队中有些人有着不同的经历,他们中的一些人比其他人需要学习的东西更多。

从一开始,我就声明任何问题都是受欢迎的。如果有人在一个纯粹的技术问题上花了一个多小时——寻求帮助比在这上面花太多时间要好。所以我们经常在一周内互相发信息或打电话。

有时我组织现场编码会议,在那里我展示了我将如何解决一个特殊的问题。

顺便说一句,我认为指导最有价值的好处之一是看到导师的思维过程。发送解决方案/文章/课程的链接就可以了;给予暗示也是好的。但是当你展示你的思考过程时,这对学员来说真的很有价值。

培养主人翁精神

由于项目的结构,将功能的不同部分交给不同的人是可能的。它的代码大部分已经写好了,但是还有很多尝试新事物的机会。我设置了一些必要的任务,当然,也鼓励人们尝试他们的想法。有些想法失败了,有些超出了我的预期。

当然,这并不总是容易的。例如,有时人们追求先进的方法而没有尝试更简单的方法,这损害了项目的进展。解决办法是设定具体的最小的事情,应该尝试,然后任何人都可以做任何事情。

一对一

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

我产生的迷因

我不会说这是我的失败,但事后看来,我本可以做得更好。

我是如何做到的:每个月初,我都会给我团队中的人写信(当然是单独的),询问反馈、问题、担忧以及其他他们想告诉我的事情。然后,我们讨论它们,如果出现问题,我会尽力解决。

我应该怎么做:我认为视频通话(或者至少是音频)会更好——看到或听到另一个人比短信提供更多的信息和线索。此外,我应该从我的角度给出更多的反馈(我给出了反馈,但并不总是这样)。

每周电话

在团队成立和最初的问题得到解决后,我意识到我需要两样东西:

  • 某种定期的非正式会议。敏捷/scrum 会议不算数——它们主要是关于工作的,而且还有太多其他人。但有机会互相交谈是至关重要的,特别是考虑到我们完全处于偏远地区,彼此之间的联系比在办公室里更少。
  • 向整个团队而不是单独向每个人教授同样的东西。

我的解决方案是每周打电话(通常是音频,但有时也有视频),持续 1-2 小时,由两部分组成:

  • 起初,有人(通常是我,但过了一段时间也有人)就某个话题做了一次演讲/研讨会。通常,它是一些实际的东西:可以是分享功能的进展,一些一般性的问题,或者一个特定技术问题的解决方案
  • 关于工作、生活和其他任何事情的非正式谈话

我认为效果非常好。

  • 我们从介绍性的话题开始,逐渐转向更高级的概念;一些问题是:从头开始用 Pytorch 编写训练神经网络的代码,NER 建模,使用通气管、Docker、ONNX
  • 我鼓励我的团队成员在这些每周电话会议上至少做一次演讲。这有助于他们发展或提高公开演讲技巧;
  • 我们能够更好地了解彼此,即使在项目结束后也能保持沟通;

领导团队的一般原则

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

艾萨克·史密斯在 Unsplash 上拍摄的照片

很难描述我所做的一切,但我想说出主要的想法和原则:

  • 试图在团队中培养良好的环境/文化,旨在互相帮助和提高技能;
  • 正如我前面说过的,我鼓励人们提问,尤其是当他们被卡住的时候。我试图帮助解决理论和技术问题;
  • 不仅提供单独完成任务的机会,还提供结对完成任务的机会;
  • 我教授了编写好代码的实践:设置预提交挂钩、使用 ci/cd 进行风格检查、代码审查和其他事情;
  • 帮助提高软技能,给出前进的一般建议;
  • 推动改进我们的技术解决方案——改进小事情,尽可能自动化,使用更好的现代方法;
  • 尝试给予很多积极的反馈,因为以前我经历过很多我完成的事情没有得到表扬/认可的情况;
  • 还有一点——我很幸运,其中一位同事也想指导我,他从我这里接过了一部分责任,并帮助了经验较少的队友;

导师的观点

现在我已经详细描述了指导,让我们来谈谈指导的更高层次。

指导对导师的益处

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

我产生的迷因

既然我已经描述了我的指导经历,你可能会问——为什么导师还要这么做?我的时间和努力换来的是什么?嗯,有些指导纯粹是像志愿者一样完成的,但也有很多好处,导师可以得到。这是合理的——因为导师在他们的学员身上花费了大量的时间和精力。有段时间,我每周花大约 5 个小时进行辅导。我将从指导的更理想化的理由开始,逐渐转向更实际的理由。

  • 指导是回报社区的方式之一。我在 ods.ai、kaggle 论坛和其他地方得到了很多帮助,我想回报这些帮助
  • 我在以前的工作中没有得到足够的指导,所以当我在工作中有这样的机会时,我想把事情做得“正确”
  • 通常,这是毫不费力的,尤其是在短期或不经常辅导的情况下。你可以直接回答或者改变方向。这花费了导师几分钟的时间,但可以为学员节省几个小时
  • 此外,看到你的学员如何进步并取得成功也是令人满意的
  • 我认为最常见的动机之一就是渴望分享经验。人们写博客,发表演讲,制作视频来分享他们的知识,以帮助人们避免错误。当然,告诉人们他们有多棒,但这不太适用于指导
  • 人们常说,理解某事的最好方法是把它教给别人。指导给了我们一个绝佳的机会。它有助于构建和系统化知识,提高和完善基本技能。如果很多人问类似的问题,你可以在以后与公众分享这些专业知识
  • 指导和任何讨论一样,允许从不同的角度看待一些问题。通常一个新的观点会带来新的更好的解决方案,你可以在未来使用
  • 指导也帮助我学到了很多新东西。有时人们会问我一些超出我专业范围的问题。但是由于我的知识和经验,我可以很快学会这些东西并帮助解决问题。还有,有时候我有想法但是没有时间或者机会去尝试;我可以向学员提供这些想法,并看到结果
  • 指导还能提高沟通和其他软技能
  • 指导增加了你的社交网络。你永远不知道你的学员会取得什么成就。他们很可能会在未来帮助你
  • 最后,你可以写一篇关于你的经历的博文😉

当导师不指导时

有必要再次重申,不同的导师有不同的风格、技能和偏好。这意味着有时导师可以拒绝指导请求,因为他们不能或不想满足学员的期望。

我已经提到我过去拒绝成为一名导师。我想分享我做出这些决定的一些理由。

  • 我害怕承诺。是的,就这么简单。我害怕成为一名完全的导师,让我未来的学员失望,所以我拒绝了。
  • 我不想教基础的东西(在工作中教是个例外)。如果有人要求解释逻辑回归是如何工作的,我会给出好文章的链接,就这样。原因之一是这些话题已经有足够多的优质资源。另一方面,很有可能我多年没有刷过这些话题,所以可能要花很多时间才能记住。
  • 我们并不总是有足够的空闲时间。有许多 DS 活动、爱好和生活本身——有时你没有足够的时间教其他人。
  • 有些人想被填鸭式喂养。他们不想接受暗示或建议——他们期待直接的答案和现成的解决方案。有些人希望我能解决他们的问题,并把完整的工作代码发给他们,而他们自己却什么也没做。
  • 他们想在我不感兴趣的话题上得到指导。

你需要指导吗?

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

我产生的迷因

这是一个好问题。

我想说,指导的主要优势是比没有它更快地得到结果。

想象一下当你需要完成一项你并不完全熟悉的任务时的情况。你可以在论坛、社交媒体、社区上寻求建议。你可以搜索论文、博客文章、视频和课程。在这之后,你会得到一堆材料,许多建议(其中一些可能是相互矛盾的),以及许多可以尝试的东西。当然,你可以自己完成所有的工作,或者使用最新和最流行的资源推荐。但是导师可以帮助你避免典型的错误,并指出哪些在实践中有效,这将节省你很多时间。更重要的是,导师可以分享一些基于经验的想法,这是你想都没想过的。

另一方面,如果你现在没有导师,找到他们可能需要更长的时间,所以自己解决问题可能会更快。

我想有导师吗?

这可能很讽刺,但我很少有机会有导师。

我从论坛、社区、会议和工作中学到了很多东西。有些人,我可以称之为导师,但通常是短期的。过去有(现在仍然有)我们与之交谈并分享经验的人。但是我想我从来没有请过任何人做我的导师。

一部分是因为缺乏自信和自我怀疑,一部分是因为我习惯了自学,一部分是因为我对很多事情感兴趣,参加了很多活动,因此不知道半年后我会做什么。

我想有一个导师吗?当然了。但首先,我需要找到这个问题的答案,“我想被教导什么,我想实现什么”。

如何获得导师

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

我生成的模因

让我们回到这篇博文提出的第一个问题。寻找导师很有挑战性;通常,人们不知道从导师那里能期待什么,不知道他们能提供什么作为交换,也没有目标。我将分享几个想法:

  • 最重要的是——学员和导师应该和谐相处。他们可能有不同的心态,不同的表达方式,其他更喜欢的教学/学习方法——有时指导不起作用;
  • 你需要有一个具体的要求,而不是泛泛而谈。如果你写“帮助我成为 DS”,你很可能会收到一个普通的回复或者一篇博客的链接;
  • 如果你没有尝试自己做任何事情,不要指望导师会为一个技术问题写出完整的解决方案;
  • 一些导师要求潜在的学员通过特定的测试,因为他们不想从头开始教授一切;
  • 也有导师在社交媒体上发布他们正在接受学员的情况——这可能是找到导师的理想选择;
  • 多了解导师,问相关的事情。如果指导者从未接触过音频,不要要求音频处理方面的指导;
  • 如果你想有更高的成功几率,那就试着在初次接触时参考导师活动中的一些东西。例如,说你对他们的一次谈话感兴趣,并询问更多细节;
  • 这取决于导师的性格,但有些导师愿意接受指导请求;有些人喜欢简单地回答问题。对不同的人尝试不同的方法;
  • 如果可能的话——提供一些东西作为指导的交换。例如,如果你想让一位导师帮助你参加 ML 竞赛,给他们在团队中提供一个位置以换取指导(尽管你没有提交任何参赛作品,但这种方法可能会失败)。只有当导师以提供有偿指导而闻名时,才提供金钱补偿;否则,它可能会导致拒绝;
  • 如果你的公司提供导师项目,这可能是最好的选择;

结论

这就是我的指导经验和我的想法。我希望我的博客文章能更清楚地说明从导师的角度来看,指导是怎样的,以及它的困难和优势。不是每个人都需要一个导师,尤其是如果有可能从在线社区获得支持的话,但是获得一个好的导师可能会给你的技能和职业生涯带来巨大的推动。

页(page 的缩写)这篇博文最初发表于这里

我的 ML 模型失败了。为什么?是数据吗?

原文:https://towardsdatascience.com/my-ml-model-fails-why-is-it-the-data-d8fbfc50c254?source=collection_archive---------23-----------------------

了解模型表现不佳是因为错误的模型选择,还是因为训练数据中的噪声,并提供一个真实的示例。

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

图片:拉斐尔 1509 年创作的《雅典学院》

介绍

当你建立和训练一个模型并检查其准确性时,机器学习中最常见的问题之一是"我能从数据中获得的准确性最好吗或者 a 能找到更好的模型吗?"。

此外,一旦您的模型被部署,下一个常见的问题是“为什么模型失败了”。有时这两个问题都无法回答,但有时我们可以通过研究模型误差的统计分布来发现预处理误差、模型偏差以及数据泄漏。

在本教程中,我们将解释和演示如何对模型结果进行统计研究,以在示例中发现错误的原因。

商业案例

在本例中,我们将使用来自驱动的数据竞赛的数据,从一组社会经济变量中预测一个人是否生活在贫困状态。

该商业案例的价值不仅在于能够利用机器学习模型预测贫困状况,还在于了解衡量贫困的社会经济变量的预测性,并从特征上分析其原因。

模特培训

数据由一组九个描述性变量组成,其中四个是分类变量,另外五个是数字变量(但是其中一个似乎是 id,所以我们将丢弃它)。

import pandas as pd

pd.set_option('display.max_columns', None)
train = pd.read_csv('train.csv', index_col='id')
print(train)

它返回

 Unnamed: 0 kjkrfgld bpowgknt raksnhjf vwpsxrgk  omtioxzz  yfmzwkru
id                                                                          
29252  2225    KfoTG    zPfZR    DtMvg      NaN      12.0      -3.0   
98286  1598    ljBjd    THHLT    DtMvg    esAQH      21.0      -2.0   
49040  7896    Lsuai    zPfZR    zeYAm    ZCIYy      12.0      -3.0   
35261  1458    KfoTG    mDadf    zeYAm    ZCIYy      12.0      -1.0   
98833  1817    KfoTG    THHLT    DtMvg    ARuYG      21.0      -4.0   

       tiwrsloh  weioazcf   poor  
id                                
29252      -1.0       0.5  False  
98286      -5.0      -9.5   True  
49040      -5.0      -9.5   True  
35261      -5.0      -9.5  False  
98833      -5.0      -9.5   True 

这里可以看到数据分布

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

按作者分类的图像:数据集中用目标着色的所有要素的成对绘图。黄色表示差=假,紫色表示差=真。

在一些预处理(NaN 值插补、缩放、分类编码等)之后,我们将训练一个 SVM 模型(它通常在来自一键编码的高维数据中工作良好)

支持向量机

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import RobustScaler
from sklearn.neighbors import KNeighborsClassifier

model = Pipeline(steps=preprocess+[
                 ('scaler', RobustScaler()),
                 ('estimator', KNeighborsClassifier(n_neighbors=5))])

model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(classification_report(y_test,y_pred))

它返回

precision    recall  f1-score   support

       False       0.73      0.77      0.75       891
        True       0.70      0.66      0.68       750

    accuracy                           0.72      1641
   macro avg       0.72      0.71      0.71      1641
weighted avg       0.72      0.72      0.72      1641

从二进制分类问题来看,0.72 的精度不是非常好的精度。相比之下,查全率和查准率似乎是平衡的,这使我们认为该模型不是偏向于任何一个类别。

测试其他模型

尝试改进模型的下一步是尝试其他 ML 模型和超参数,看看我们是否找到任何提高性能的配置(或者甚至只是检查性能是否在平稳状态下保持不变)。

我们将使用来自不同系列函数的两个其他模型。KNN 模型是学习局部模式影响的一个很好的选择,梯度增强树也是具有最高能力的 ML 模型之一

K-最近邻

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import RobustScaler
from sklearn.neighbors import KNeighborsClassifier

model = Pipeline(steps=preprocess+[
                 ('scaler', RobustScaler()),
                 ('estimator', KNeighborsClassifier(n_neighbors=5))])

model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(classification_report(y_test,y_pred))

它返回

precision    recall  f1-score   support

       False       0.71      0.74      0.72       891
        True       0.67      0.63      0.65       750

    accuracy                           0.69      1641
   macro avg       0.69      0.69      0.69      1641
weighted avg       0.69      0.69      0.69      1641

梯度推进

from sklearn.pipeline import Pipeline
from sklearn.ensemble import GradientBoostingClassifier

model = Pipeline(steps=preprocess+[
                 ('estimator', 
                  GradientBoostingClassifier(max_depth=5,
                                             n_estimators=100))])

model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(classification_report(y_test,y_pred))

它返回

precision    recall  f1-score   support

       False       0.76      0.78      0.77       891
        True       0.73      0.70      0.72       750

    accuracy                           0.74      1641
   macro avg       0.74      0.74      0.74      1641
weighted avg       0.74      0.74      0.74      1641

我们可以看到,其他两个模型的表现似乎非常相似。这提出了以下问题:

这是我们用 ML 模型所能预测的最好结果吗?

模型预测分布

除了检查性能的一般指标之外,分析模型输出分布也很重要。我们不仅要检查测试数据集中的分布,还要检查训练数据集中的分布。原因是因为我们不想看到我们的模型表现如何,而是是否也学会了如何分割训练数据

import matplotlib.pyplot as pltpd.DataFrame(model.predict_proba(X_train))[1].hist()
plt.show()

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

按作者排序的图片:在训练集上评估的模型输出分布

pd.DataFrame(model.predict_proba(X_test))[1].hist()
plt.show()

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

作者图片:测试集上评估的模型输出分布

我们可以看到,在 0 的预测数量中有一个高峰,这表明有一个数据子集,该模型非常确定其标签为 0。除此之外,分布似乎相当均匀。

如果模型已经知道肯定区分两个标签,则分布将具有两个峰值,一个在 0 附近,另一个在 1 附近。因此,我们可以看到我们的模型没有正确地学习模式来区分数据。

偏差分布

我们已经看到,该模型还没有学会清楚地区分这两个类别,但我们还没有看到它是否即使不自信也能猜出预测,或者它只是一直失败。

此外,检查模型是否更偏向于某一类别也很重要。为了检查这两个方面,我们可以画出预测值与目标值的偏差分布图

train_proba = model.predict_proba(X_train)[:,1]
pd.DataFrame(train_proba-y_train.astype(int)).hist(bins=50)
plt.show()

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

作者图片:模型置信度输出与在训练集上评估的基础真实值的偏差

test_proba = model.predict_proba(X_test)[:,1]
pd.DataFrame(test_proba-y_test.astype(int)).hist(bins=50)
plt.show()

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

作者图片:模型置信度输出与测试集上评估的基础事实的偏差

从这两幅图中我们可以看到,偏差分布似乎是对称的,以零为中心。差距正好为零,因为模型从不返回 0 和 1 的精确值,我们不必担心这一点。

如果模型误差来自训练数据的统计/测量噪声误差,而不是偏差误差,我们预计偏差分布遵循高斯分布**。**

我们的分布类似于在 0 中具有更高峰值的高斯分布,但是该峰值可能是由于模型预测的更大数目的 0(即,模型已经学习了一种模式来区分 0 的子集和 1 的类别)。

正规性检验

由于训练数据中的统计噪声,在考虑模型预测偏差是否合理之前,我们必须确保它们遵循高斯分布。

import scipy

scipy.stats.normaltest(train_proba-y_train.astype(int))

带退货

NormaltestResult(statistic=15.602215177113427, pvalue=0.00040928141243470884)

在 p 值=0.0004 的情况下,我们可以假设预测与目标的偏差遵循高斯分布,这使得模型误差来自训练数据中的噪声的理论看似合理。

模型可解释性

正如我们之前提到的,这个商业案例的目标不仅仅是一个可以预测为什么会发生以及与之相关的社会经济变量的模型。

可解释模型不仅能对未知数据进行预测,还能提供特征如何影响模型的信息(全局可解释性),以及为什么某个预测是这样的(局部可解释性)。

然而,一个模型的可解释性越少,也就越有助于理解它为什么能做出预测以及为什么会失败。从梯度推进模型中,我们可以如下提取全局可解释性:

cols = X_train.columns
vals= dict(model.steps)['estimator'].feature_importances_

plt.figure()
plt.bar(cols, vals)
plt.show()

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

作者图片:梯度增强特征重要性

现在,我们将进行相同的特征重要性分析,但只是在数据子集内进行训练。具体来说,我们将只使用零类别的明显为零的数据(之前模型明确预测为零的数据)来训练模型。

zero_mask = model.predict_proba(X_train)[:,1]<=0.1
one_mask = y_train==1
mask = np.logical_or(zero_mask,one_mask)
X_train = X_train.loc[mask,:]
y_train = y_train.loc[mask]
model.fit(X_train,y_train)

现在特征的重要性是

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

作者图片:在模型表现最佳的训练集的子样本上训练的梯度增强要素重要性

我们可以看到,现在, *tiwrsloh,*和 yfmzwkru 的重要性增加了,而 vwpsxrgk 的值减少了。这意味着人口中有一个子集明显不属于贫困人口(0 类),可以用贫困变量中的这两个变量来表征,并且 vwpsxrgk 在许多情况下可能很重要,但并不具有决定性

如果我们绘制这两个特征的过滤值,我们会看到:

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

按作者分类的图像:分割并描述模型明确检测到非贫困的特征区域。

对于这两个特征,模型已经学会区分两个类别,同时对于这些变量的其他值,对于整个数据集,零类别和一类别是混合的,因此不能清楚地区分。

我们也可以从前面的图表中将非贫困人口的一个明确子集描述为那些具有 tiwrsloh < 0 和 yfmzwkru < -2 的人。

结论

  • 我们分析了在给定数据集中检测贫困的问题,并分析了给定社会经济数据的贫困原因,发现贫困不容易预测,但是,我们可以定义一些明确确定人们贫困状况的区域:tiwrsloh0 和 yfmzwkru < -2。
  • 我们已经尝试了许多不同的型号和配置,性能稳定在 0.75。根据这一点以及模型预测和误差偏差分布的统计性质,我们可以得出结论,问题在于缺乏从训练数据预测目标的预测能力。所以不可能建立一个更好的模型。
  • 数据预测性不足的原因可能是因为噪音,但也因为除了我们的数据集中的社会经济特征之外,缺乏一些预测贫困的预测特征。

我们学到了什么?

我们已经用一个真实的例子解决了模型没有得到足够好的结果的问题。这种情况下的目标是试图理解模型未能理解的地方,如果问题是在数据或模型中。

回答这个问题的过程是:

1 —尝试不同的系列函数模型和超参数,并确认所有的性能都处于平稳状态。

2-对于可解释的最好的一个,计算目标的模型输出分布和偏差分布。如果数据有问题,输出必须一致,偏差必须遵循高斯分布

3-尽管数据是问题所在,但尝试从模型输出和偏差分布中找出模型表现良好的区域。尝试分割和描述这个区域,例如,用这个子集重新训练模型,并提取它的可解释性。

4 —此外,在描述某些子集的特征时,我们可以尝试从业务知识的角度考虑问题是来自数据的统计/测量噪声,还是缺少预测因变量所需的某些特征值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值