原文:KDNuggets
数据科学家与其他职业不同的七项独特技能
原文:
www.kdnuggets.com/2022/05/7-unique-skills-set-data-scientists-apart-professions.html
成为数据科学家归结为:处理数据、提取洞察并传达这些洞察。这分解为七项独特的技能,没有其他职位需要这些技能,即便是数据分析师和数据工程师等紧密相关的职位。
我们的三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业的快车道。
2. 谷歌数据分析专业证书 - 提升你的数据分析能力
3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT 需求
要 成为数据科学家,尤其是成为一名优秀的数据科学家,你需要掌握这七项技能来完成工作并脱颖而出。这七项技能也能很好地转移到其他职业。
从事数据科学工作的有趣之处在于,硬技能的需求并不像软技能那样高。任何人都可以学习 Python 编程。你工作的公司明年可能会迁移到新的基础设施。硬技能是可选的。相比之下,软技能是不可谈判的,且更难获得。没有八周的商业思维训练营,也没有分析性问题解决的证书。
那么,哪些七项技能使数据科学家与其他数据职位不同呢?让我们深入了解一下。
1. 与你的利益相关者沟通
数据科学家在业务中占据一个稍显危险的领域:他们必须轻松地将技术用途转化为业务语言,并反向转换。作为数据科学家,你需要以技术团队能够理解的方式传达发现,同时构建图表帮助业务团队理解你的惊人发现对业务的影响。
例如,你可能需要向你的(技术)数据工程师解释为什么他们需要为你以不同的方式构建数据。然后,你可能需要将这一结果与(业务方)老板分享,解释他们为什么应该关心。
这不是一份容易的工作。大多数数据职位要么只涉及技术,要么只涉及业务。只有数据科学家被要求每天在技术与业务之间跳跃。
你如何改进这一点?你可以和你的非技术朋友和家人练习业务方面的事情。看看是否能让他们对你的数据感兴趣。你可以通过询问技术团队他们需要什么,以及如何与他们更紧密地合作,来改善你的技术团队沟通。通常,他们不会对你给出的答案感到害羞。
2. 商业智能
许多人认为数据科学家是每天都在处理数字的人。事实远非如此。虽然数据科学家确实会处理数字和清理数据,但他们的主要角色之一是批判性地思考他们的发现,并提出对未来业务有影响的问题。
例如,假设一个化妆品公司被要求通过增加个性化来提升利润。数据科学家必须了解业务运作,以便建立一个预测模型,让她能够说:“好吧,平均客户都有一张忠诚卡,对吧?我们可以用它来将交易匹配到个人。然后我们可以预测客户 A 会需要指甲油去除剂,而客户 B 则更感兴趣腮红。”
某些工作会关注数字背后的内容。其他则关注客户行为。只有数据科学家必须理解两者。了解业务运作和关键绩效指标(KPIs)对于成为一名优秀的数据科学家至关重要。
提升商业智能技能的最佳方式是参与一个商业项目——甚至不必是你自己的!也许你喜欢一个盆栽植物公司或一个你钟爱的餐馆。习惯性地询问他们的业务运作情况,以及哪些见解对他们的成长有帮助。然后你可以将这些技能应用到自己的工作中。
3. 解决问题的分析和结构化思维
数据科学家每天都会遇到各种棘手的问题。然而,数据科学家没有时间在闲暇时完全解决和解开所有这些问题。相反,数据科学家必须能够以结构化和分析的方式思考问题。
这又回到数据科学家被期望同时兼顾技术和业务两个方面的情况。外部客户或内部业务团队通常会将一个问题交给你。这些团队可能对他们期望的结果没有清晰的想法。作为数据科学家,你需要将问题简化到核心要素,做出假设,并考虑如何证明和解决它。
数据科学家还会面临复杂和混乱的数据集,他们会被要求挖掘这些数据以创建预测性和有用的模型供业务使用。为此,数据科学家需要有结构化和逻辑化的问题解决方法。
有一个很好的过程可以跟随,如果你想提升你的结构化思维技能。首先,了解如何识别问题。当你面对新情境时,考虑一下情况。接下来,提出问题以深入了解问题的核心。为什么会这样?你忽略了什么?之后,确定你的偏见。养成确定假设的习惯。接着,预见障碍——情况中可能会出现什么问题?可能会产生什么后果?最后,练习在不使用 Google 的情况下找出答案。(你可以使用 Google 来检查自己,但你要养成独立思考的习惯。)
有一个很好的指南可以参考 这里 以获取进一步的指导和示例。
4. 以影响力为优化目标
这也被称为“不要过于兴奋”。数据科学家需要知道如何构建复杂且吸引人的模型。但数据科学家也需要知道何时这种做法不是必要的,也许简单的分析就足够了。
初级数据科学家倾向于构建稳健且深度的机器学习模型来回答简单问题。而更好的数据科学家则保持分析的简单性,以便回答问题。这就是为什么区分数据科学家的关键技能之一是避免为了复杂而复杂。
在数据科学领域,识别并使用最快、最简单的方法来回答问题的能力被高度低估。提高的最佳方法就是问自己:有没有更简单的方法?几乎总是有的。
5. 耐心
成为数据科学家的一部分就是能够应对各种挑战。有些商业人士会要求他们不理解的技术东西。有些技术人员会要求商业图景无法允许的东西。在这些中间,数据科学家需要搞清楚谁的需求需要满足,以及何时满足。这需要很多冷静的深呼吸。
例如,数据科学家 Paul May 写道 他看到 数据科学公司 “要求在项目中使用神经网络(因为它很吸引人),即使它完全不合适或相比替代算法表现较差。”数据科学家必须决定:是找办法让它工作?还是告诉他们的商业负责人这没有意义?
作为数据科学家,你需要忍受对你工作的误解,被分配与数据相关的任何任务,因为这在你的职位名称中,人们认为你做的事是魔法,因为数据领域不被理解。耐心是数据科学领域任何人的重要美德。
这是一项难以实践的技能。我的最佳建议是教会朋友或亲戚一些极其技术性的内容,并优雅且有见地地回答他们的每一个问题。
6. 戏剧感
你是否认识你社交圈中那个讲故事特别出色的朋友?在他们的故事结束时,大家都会和他们一起笑。他们有着无与伦比的时间感和叙事能力。这就是数据科学家所需要的技能。
数据科学中的故事讲述占据了很大一部分。不仅仅是讲故事,还要是令人信服的讲故事。作为公司技术和业务两方面的纽带,你需要以一种让利益相关者在意的方式分享数据。这其中很大一部分归结为戏剧感。
任何人都可以制作一个分享有趣数据的幻灯片。数据科学家需要以风格、魅力,甚至戏剧感来做到这一点。
改进的一个很棒(且有趣)的方法是观看电影和阅读书籍。识别出你对所消费故事的喜好和不喜好。它们使用了什么样的预示?英雄之旅如何传达情感和结果?
7. 模式识别
有一种观点认为直觉是错误的,只有数据是正确的。但这并不完全正确。毕竟,我们雇佣的是人,而不是机器,因为机器(目前)无法复制我们的直觉和模式识别能力。
在数据科学中,模式识别是一个关键的软技能。数据科学家必须从大量的数据中筛选,直到对潜在的显著信号有感觉。然后,他们需要再次查看数据以验证自己的直觉。但是,能够相信自己的直觉来发现模式与分析数据所需的技术技能同样重要。
这就是为什么许多数据科学家提倡依靠直觉并跟随数据的原因。面对如此海量的数据,数据科学家需要知道从哪里开始查看。你可以使用大量有趣的文字或数学游戏来练习你直觉性的模式识别技能,比如Brilliant.org。
这七种独特的技能造就了一个数据科学家。
直到你能诚实地说自己具备这七种“软”技能,你才算完全发挥了作为数据科学家的潜力。这七种技能使数据科学家与其他数据相关工作的区别开来。
正如你可能注意到的,很多这些技能都涉及到在公司业务和技术领域的略微尴尬的位置(能够走这条线也需要一个额外的第八种软技能:幽默感)。但许多这些技能也依赖于自信,例如信任自己的直觉;以及个性,例如耐心处理重复的误解或荒谬的要求。
这七项技能难以培养,稀缺而宝贵。如果你具备这些技能,希望你的工作场所能够欣赏你!
如果你还想了解作为数据科学家需要具备哪些技术技能,可以阅读这篇文章“作为数据科学家你需要哪些技能?”。
内特·罗西迪 是一位数据科学家和产品战略专家。他还是一名兼职教授,教授分析学,并且是 StrataScratch 的创始人,该平台帮助数据科学家通过顶级公司的真实面试题来准备面试。可以通过 Twitter: StrataScratch 或 LinkedIn 与他联系。
主题相关内容
Andrew Ng 的《机器学习渴望》中的 7 个有用建议
原文:
www.kdnuggets.com/2018/05/7-useful-suggestions-machine-learning-yearning.html
comments
AI、机器学习和深度学习正在迅速发展并改变许多行业。Andrew Y. Ng 是这一领域的领先人物之一——他是 Coursera 的共同创始人、前百度 AI 部门负责人以及前 Google Brain 负责人。他正在撰写一本书,《机器学习渴望》(你可以获取免费草稿),教你如何构建机器学习项目。
Andrew 写道
本书的重点不是教你机器学习算法,而是如何让机器学习算法发挥作用。一些技术 AI 课程会给你一个锤子;本书则教你如何使用这个锤子。如果你渴望成为 AI 领域的技术领导者,并想学习如何为团队设定方向,这本书将对你有所帮助。
我们已经阅读了草稿,并从书中挑选了 7 个最有趣且实用的建议:
- 优化和满足指标
与其使用单一公式或指标来评估算法,你应该考虑使用多个评估指标。可以通过设置“优化”指标和“满足”指标来实现这一点。
以上述示例为例,我们可以首先定义一个可接受的运行时间——例如少于 100ms——这可以作为我们的“满足”指标。你的分类器只需满足这一要求,即运行时间低于此值即可,无需更多。准确性则是“优化”指标。这可以是评估算法的一种极其高效且简单的方法。
- 快速选择开发/测试集——如有需要,不要害怕更改它们
在开始新项目时,Ng 解释说,他会尽快选择开发/测试集,从而给团队设定一个明确的目标。设定一个初步的一周目标;不完美的初步结果也比过度考虑这一阶段要好,并且能够迅速启动。
话虽如此,如果你突然意识到最初的开发/测试集不合适,不要害怕进行更改。选择不正确的开发/测试集可能有三种原因:
-
你需要在实际分布上表现良好,而与开发/测试集不同
-
你已经过度拟合了开发/测试集
-
该指标测量的是项目需要优化的内容以外的东西
记住,改变这些并不是大事。只需进行更改,并让你的团队知道你正在前进的新方向。
- 机器学习是一个迭代过程:不要指望它第一次就能成功
Ng 说明了他构建机器学习软件的方法有三方面:
-
从一个想法开始
-
将想法实现为代码
-
进行实验以得出这个想法的效果如何
你绕过这个循环的速度越快,进展就会越快。这也是为什么提前选择测试/开发集很重要,因为它可以节省在迭代过程中宝贵的时间。将性能与这个集进行比较可以让你迅速看到是否在朝着正确的方向前进。
- 快速构建你的第一个系统,然后进行迭代
如第 3 点所述,构建机器学习算法是一个迭代过程。Ng 专门 dedicates 一个章节来解释快速构建第一个系统并从中发展起来的好处:“不要一开始就试图设计和构建完美的系统。相反,快速构建和训练一个基础系统——也许只需几天。即使基础系统远非你能构建的‘最佳’系统,也很有价值去检查基础系统的功能:你将迅速找到表明你最有前景的方向的线索,从而投入你的时间。”
- 并行评估多个想法
当你的团队有很多关于如何改进算法的想法时,你可以高效地并行评估这些想法。Ng 以创建一个可以检测猫图片的算法为例,解释了他如何创建一个电子表格并在查看约 100 个错误分类的开发/测试集图像时填充它。
包括对每张图像的分析,为什么失败以及任何可能有助于未来反思的附加评论。完成后,你可以看到哪个想法能够消除更多的错误,因此应该优先考虑哪个想法。
- 考虑是否清理错误标签的开发/测试集是否值得
在错误分析过程中,你可能会注意到开发/测试集中一些示例被错误标记了。即,图像已经被人为地错误标记。如果你怀疑部分错误是由于此原因导致的,可以在你的电子表格中添加一个额外的类别:
完成后,你可以考虑是否值得花时间修复这些错误。Ng 给出了两个可能的场景来判断是否值得修复这些错误:
示例 1:
开发集的总体准确率……………….90%(总体错误率 10%)
由于标签错误导致的错误……0.6%(开发集错误的 6%)
由于其他原因导致的错误…………………9.4%(开发集错误的 94%)
“在这里,由于标签错误导致的 0.6%的不准确率可能相对于你可以改进的 9.4%的错误来说并不显著。手动修正开发集中的标签错误没有害处,但并不是关键:可能不需要知道你的系统的总体错误率是 10%还是 9.4%。”
示例 2:
开发集的总体准确率……………….98.0%(总体错误率 2.0%)
错误由于标记错误的示例……. 0.6%。 (开发集错误的 30%)
其他原因导致的错误………………… 1.4%(开发集错误的 70%)
“30% 的错误是由于开发集中标记错误的图像,给你的准确性估计带来了显著的误差。现在提高开发集中标签的质量是值得的。处理这些标记错误的示例将帮助你确定分类器的错误更接近 1.4% 还是 2%——这是一个显著的相对差异。”
- 考虑将开发集分成独立的子集
Ng 解释说,如果你有一个大的开发集,其中 20% 的数据存在错误率,那么将这些数据分成两个独立的子集可能是值得的:
“以算法错误分类 5,000 个开发集示例中的 1,000 个为例。假设我们想手动检查大约 100 个错误以进行错误分析(10% 的错误)。你应该随机选择 10% 的开发集,并将其放入我们称之为 Eyeball 开发集 的集合中,以提醒自己我们是用眼睛查看它的。(对于语音识别项目,可能会称这个集合为 Ear 开发集)。因此,Eyeball 开发集有 500 个示例,我们期望算法错误分类大约 100 个。
开发集的第二个子集,称为 Blackbox 开发集,将包含剩余的 4500 个示例。你可以使用 Blackbox 开发集通过测量其错误率来自动评估分类器。你还可以用它来选择算法或调整超参数。然而,你应该避免用眼睛查看它。我们使用“Blackbox”这个术语,因为我们只会使用这个子集的数据来获得对分类器的“Blackbox”评估。”
相关:
我们的三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT
更多相关话题
7 种 ChatGPT 让你编码更好更快的方法
原文:
www.kdnuggets.com/2023/06/7-ways-chatgpt-makes-code-better-faster.html
作者提供的图片
我很高兴与您分享七种个人帮助我成为更好、更快的编码者的绝妙方法,这都要感谢 ChatGPT!这些奇妙的技巧不仅可以帮助您避免常见的错误,还能揭示在编码过程中拥有 AI 副驾驶的巨大能力。所以,让我们深入探索,一起提升你的编码技能吧!
我们的前 3 名课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业道路
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织 IT
1. 项目规划
项目规划是任何项目中最重要的阶段,你在这里为成功奠定基础。在规划阶段获得 ChatGPT 的帮助非常宝贵,因为它可以帮助你考虑软件开发或数据科学项目的总体范围、架构、需求和可行性。
通过向 ChatGPT 描述你的目标、限制和使用案例,它可以提供有关以下方面的有用建议:
-
根据你的具体需求选择技术和工具
-
高级设计和架构
-
需要按照正确顺序执行的主要任务和步骤
-
需要注意的潜在问题、风险和障碍
我已经利用 ChatGPT 的见解进行机器学习和数据科学项目规划。它有效地帮助我选择适当的工具、技术和数据集来解决特定问题。ChatGPT 建议的工作流程和路线图也通过从一开始就将我指向正确的方向,为我节省了时间。您可以阅读使用 ChatGPT 进行数据科学项目的指南以了解更多有关 ChatGPT 项目规划的信息。
2. 分解复杂系统
避免要求 ChatGPT 从头开始编写整个端到端系统的代码。它可能会产生通用的、有缺陷的代码,遗漏边界情况,无法满足你的特定要求。
相反,将 ChatGPT 的帮助集中在你整体系统中的较小、定义明确的任务上。请让它生成代码来:
-
执行一个逻辑步骤的具体函数或方法
-
代表你领域内良好界定部分的个别类
-
在整个工作流程中的离散算法或过程
将问题分解为这些较小的组件将产生更易于管理和模块化的代码。
3. 干净易读的代码
ChatGPT 可以通过遵循您语言和框架的最佳实践来建议使您的代码更简洁和更易读的方法。
您可以使用 ChatGPT 清晰地重命名变量,逻辑上拆分长函数,减少嵌套,添加内联注释,并一致地格式化代码,使您的代码对协作者更易读、可维护且无错误。
4. 单元测试和验证
生成代码后,重要的是在隔离的机器上验证代码,然后再将其推送到生产环境或远程仓库。重要的是不要完全依赖代码的功能;确保它使用了最新的 API。
软件开发的一个关键方面是为关键功能创建测试函数。我理解应用程序的单元测试,特别是对于机器学习工程师或数据科学家来说,可能会很具挑战性。然而,在 ChatGPT 的帮助下,您可以在几秒钟内为任何函数生成测试用例。
5. 迭代
ChatGPT 是一个对话型 AI,您可以持续请求帮助添加或删除代码中的元素,甚至要求改进。如果发生错误,只需复制并粘贴错误信息,并请求 ChatGPT 为您生成改进版本的代码。
它理解上下文并可以生成专门针对当前任务的代码,确保功能性和有效性。
6. 代码文档
良好的文档对于您自己和其他开发人员理解您的项目至关重要。ChatGPT 可以通过注释、文档字符串、README 文件、wiki 页面及其他基于您的语言和工具的文档帮助您记录代码。
您只需提供简洁的项目描述和代码片段,ChatGPT 就会生成干净且易读的文档,大大有助于理解您的代码库。
7. 调试和获取帮助
调试是编程中非常重要的一部分,因为它帮助我们找到和修复代码中的错误。然而,让我们承认,调试有时可能会有些挑战,特别是当我们处理复杂代码时。
ChatGPT 可以帮助您调试代码并弄清楚您在运行代码时面临的整体问题。它可以分析您的代码,理解其结构,并提供潜在错误或漏洞的见解。此外,ChatGPT 可以帮助您集成系统、学习新的编程语言,甚至为给定问题提供多种解决方案。
结论
作为数据科学家,我喜欢使用 ChatGPT 进行代码生成、规划和改进我的写作。这就像是有一个有用的伙伴在我身边!有了 ChatGPT 作为我的编码助手,我可以轻松在几秒钟内创建干净且无错误的代码。我只需提供项目描述并请求生成特定任务的代码即可。
当然,就像任何朋友一样,ChatGPT 也有它的烦恼时刻。有时它可能会难以理解上下文或无法解决编码问题。由于它是基于较旧的数据进行训练的,可能无法跟上最新的 API。不过,大家都有自己的怪癖,对吧?
Abid Ali Awan(@1abidaliawan)是一位认证的数据科学专家,喜欢构建机器学习模型。目前,他专注于内容创作和撰写关于机器学习和数据科学技术的技术博客。Abid 拥有技术管理硕士学位和电信工程学士学位。他的愿景是利用图神经网络构建一个 AI 产品,帮助面临心理健康问题的学生。
更多相关话题
提升机器学习模型的 7 种方法
原文:
www.kdnuggets.com/7-ways-to-improve-your-machine-learning-models
由 ChatGPT 生成的图像
你是否在测试阶段努力提高模型性能?即使你改进了模型,它在生产环境中仍然因为未知原因表现不佳。如果你在面临类似问题,那么你来对地方了。
在这篇博客中,我将分享 7 个使你的模型准确和稳定的技巧。通过遵循这些技巧,你可以确保你的模型即使在未见过的数据上也能表现更好。
为什么要听我的建议?我在这个领域已经有近四年的经验,参与了 80 多个机器学习竞赛,并参与了多个端到端的机器学习项目。我还帮助了许多专家建立更好、更可靠的模型。
1. 清洗数据
数据清洗是最重要的部分。你需要填补缺失值、处理离群值、标准化数据,并确保数据的有效性。有时,通过 Python 脚本进行清洗并不完全有效。你必须逐一查看每个样本,确保没有问题。我知道这会占用你很多时间,但相信我,数据清洗是机器学习生态系统中最重要的部分。
举例来说,当我在训练自动语音识别模型时,我发现数据集中存在多个问题,简单删除字符无法解决。我不得不听音频并重新编写准确的转录。有些转录内容非常模糊且不合逻辑。
2. 增加数据
增加数据量通常会提升模型性能。将更多相关且多样化的数据添加到训练集中可以帮助模型学习更多的模式,从而做出更好的预测。如果你的模型缺乏多样性,它可能在多数类上表现良好,但在少数类上表现不佳。
许多数据科学家现在使用生成对抗网络(GAN)来生成更多样化的数据集。他们通过在现有数据上训练 GAN 模型,然后利用它生成合成数据集来实现这一点。
3. 特征工程
特征工程涉及从现有数据中创建新特征,并移除那些对模型决策贡献较少的无用特征。这为模型提供了更多相关的信息,以进行预测。
你需要进行 SHAP 分析,查看特征重要性分析,并确定哪些特征对决策过程很重要。然后,可以利用这些特征创建新特征并从数据集中移除无关特征。这个过程需要对业务用例和每个特征有透彻的理解。如果你不了解特征及其对业务的作用,你将盲目前行。
4. 交叉验证
交叉验证是一种用于评估模型在多个数据子集上的表现的技术,减少过拟合风险,并提供更可靠的泛化能力估计。这将告诉你模型是否足够稳定。
在整个测试集上计算准确率可能无法提供关于模型性能的完整信息。例如,测试集的前五分之一可能显示 100%的准确率,而第二个五分之一的表现可能较差,仅为 50%的准确率。尽管如此,总体准确率可能仍在 85%左右。这种差异表明模型不稳定,需要更多干净且多样的数据进行重新训练。
所以,与其进行简单的模型评估,我建议使用交叉验证,并提供各种指标来测试模型。
5. 超参数优化
使用默认参数训练模型可能看起来简单且快速,但你会错过改进的性能,因为在大多数情况下你的模型并未经过优化。为了在测试期间提高模型性能,强烈建议对机器学习算法进行彻底的超参数优化,并保存这些参数,以便下次可以用于训练或重新训练模型。
超参数调整涉及调整外部配置以优化模型性能。找到过拟合和欠拟合之间的正确平衡对于提高模型的准确性和可靠性至关重要。它有时可以将模型的准确率从 85%提高到 92%,这在机器学习领域是相当显著的。
6. 尝试不同的算法
模型选择和尝试各种算法对找到适合给定数据的最佳算法至关重要。不要仅限于简单算法用于表格数据。如果你的数据有多个特征和一万样本,那么你应该考虑神经网络。有时,即使是逻辑回归也能为文本分类提供惊人的结果,这些结果是深度学习模型如 LSTM 无法实现的。
从简单的算法开始,然后逐步尝试高级算法,以实现更好的性能。
7. 集成学习
集成学习涉及将多个模型组合在一起,以提高整体预测性能。构建一个每个模型都有自己优势的集成模型,可以实现更稳定和准确的结果。
集成模型常常给我带来更好的结果,有时甚至能在机器学习竞赛中获得前十名。不要丢弃低性能模型;将它们与一组高性能模型结合,你的整体准确率将会提高。
集成、数据集清理和特征工程是我在竞赛中获胜并实现高性能的三大最佳策略,即使在未见过的数据集上也是如此。
最后的思考
还有一些技巧仅适用于特定类型的机器学习领域。例如,在计算机视觉中,我们需要关注图像增强、模型架构、预处理技术和迁移学习。然而,以上讨论的七个技巧——数据清理、增加数据、特征工程、交叉验证、超参数优化、尝试不同算法和集成——是普遍适用且对所有机器学习模型都有益的。通过实施这些策略,你可以显著提高预测模型的准确性、可靠性和稳健性,从而获得更好的洞察力和更有依据的决策。
Abid Ali Awan (@1abidaliawan) 是一名认证的数据科学专家,喜欢构建机器学习模型。目前,他专注于内容创作,并撰写有关机器学习和数据科学技术的技术博客。Abid 拥有技术管理硕士学位和电信工程学士学位。他的愿景是利用图神经网络为面临心理健康问题的学生构建一个 AI 产品。
相关主题
数据科学的 8 个基础统计概念
原文:
www.kdnuggets.com/2020/06/8-basic-statistics-concepts.html
统计学是一种数学分析形式,利用量化模型和表示法处理给定的实验数据或现实生活研究。统计学的主要优点在于信息的呈现方式简单明了。最近,我回顾了所有统计材料,并整理了成为数据科学家的 8 个基本统计概念!
-
理解分析类型
-
概率
-
中央趋势
-
变异性
-
变量之间的关系
-
概率分布
-
假设检验与统计显著性
-
回归分析
我们的前三个课程推荐
1. 谷歌网络安全证书 - 快速开启网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析能力
3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT
理解分析类型
描述性分析 告诉我们过去发生了什么,并通过提供背景帮助企业了解其表现,以帮助利益相关者解读信息。
诊断分析 进一步分析描述性数据,帮助你理解过去发生的事情的原因。
预测分析 预测未来最可能发生的情况,并根据信息提供可操作的洞察。
规范分析 提供关于如何利用预测的建议,并引导可能的行动以找到解决方案。
概率
概率 是衡量事件在随机实验中发生可能性的指标。
补集:P(A) + P(A’) = 1
交集:P(A∩B) = P(A)P(B)
并集:P(A∪B) = P(A) + P(B) − P(A∩B)
交集与并集。
条件概率:P(A|B) 是某事件发生与一个或多个其他事件的关系的概率度量。P(A|B)=P(A∩B)/P(B),当 P(B)>0 时。
独立事件:如果一个事件的发生不影响另一个事件的发生概率,则这两个事件是独立的。P(A∩B)=P(A)P(B),其中 P(A) != 0 和 P(B) != 0 ,P(A|B)=P(A),P(B|A)=P(B)
互斥事件:如果两个事件不能同时发生,则它们是互斥的。P(A∩B)=0 和 P(A∪B)=P(A)+P(B)。
贝叶斯定理描述了基于可能与事件相关的条件的先验知识来计算事件发生的概率。
贝叶斯定理。
中心倾向
均值:数据集的平均值。
中位数:有序数据集中的中间值。
众数:数据集中最频繁出现的值。如果数据中有多个值出现频率最高,则为多峰分布。
偏度:衡量对称性的度量。
峰度:衡量数据相对于正态分布是否具有重尾或轻尾的度量。
偏度。
峰度。
变异性
范围:数据集中最高值和最低值之间的差异。
百分位数、四分位数和四分位距(IQR)
-
百分位数— 指示某一百分比的观察值落在观察组中的值的度量。
-
分位数— 将数据点的数量划分为四个大致相等的部分或四分之一的值。
-
四分位距(IQR)— 基于将数据集划分为四分位数的统计离散性和变异性的度量。IQR = Q3 − Q1
百分位数、四分位数和四分位距(IQR)。
方差:值与均值之间的平均平方差,用于衡量数据相对于均值的分散程度。
标准差:每个数据点与均值之间的标准差,以及方差的平方根。
总体和样本方差及标准差。
标准误差(SE):对抽样分布标准差的估计。
总体和样本标准误差。
变量之间的关系
因果关系:两个事件之间的关系,其中一个事件受另一个事件的影响。
协方差:两个或更多变量之间联合变异性的定量度量。
相关性:衡量两个变量之间的关系,其范围从 -1 到 1,是协方差的归一化版本。
概率分布
概率分布函数
概率质量函数 (PMF):一个函数,给出离散随机变量恰好等于某个值的概率。
概率密度函数 (PDF):一个用于连续数据的函数,其中任何给定样本的值可以解释为提供随机变量取该样本值的相对可能性。
累积分布函数 (CDF):一个函数,给出随机变量小于或等于某个值的概率。
PMF、PDF 和 CDF 的比较。
连续概率分布
均匀分布:也称为矩形分布,是一种所有结果都同样可能的概率分布。
正态/高斯分布:分布的曲线呈钟形且对称,与中心极限定理有关,即样本均值的抽样分布随着样本量的增大趋近于正态分布。
指数分布:描述泊松点过程中的事件之间时间的概率分布。
卡方分布:标准正态偏差平方和的分布。
离散概率分布
伯努利分布:一个随机变量的分布,它涉及单次试验且只有 2 个可能结果,即 1(成功)概率为 p,0(失败)概率为(1-p)。
二项分布:在一系列n独立实验中的成功次数的分布,每次实验只有 2 个可能结果,即 1(成功)概率为 p,0(失败)概率为(1-p)。
泊松分布:表示在固定时间间隔内事件数为 k 的概率的分布,如果这些事件以已知的常数平均速率λ发生,并且与时间独立。
假设检验与统计显著性
零假设与备择假设
零假设:一个通用的陈述,表示两个测量现象之间没有关系或组之间没有关联。备择假设:与零假设相对立。
在统计假设检验中,I 型错误是拒绝真实的零假设,而II 型错误是未拒绝虚假的零假设。
解释
P 值:在原假设为真的情况下,检验统计量至少与观察到的统计量一样极端的概率。当 p 值 > α 时,我们无法拒绝原假设,而当 p 值 ≤ α 时,我们拒绝原假设,可以得出我们有显著结果的结论。
临界值:是检验统计量尺度上的一个点,超过该点我们就会拒绝原假设,它由检验的显著性水平α推导而来。它依赖于检验统计量,这些统计量特定于检验类型,以及显著性水平α,这定义了检验的灵敏度。
显著性水平和拒绝域:拒绝域实际上取决于显著性水平。显著性水平用α表示,是在原假设为真的情况下拒绝原假设的概率。
Z 检验
Z 检验是任何统计检验,其检验统计量在原假设下的分布可以用正态分布来近似,并且检验的是我们已经知道总体方差的分布的均值。因此,如果样本量很大或总体方差已知,许多统计检验可以方便地作为近似 Z 检验来进行。
t 检验
t 检验是当总体方差未知且样本量不大(n < 30)时使用的统计检验。
配对样本 意味着我们从同一组、个人、物品或事物中收集两次数据。独立样本 意味着两个样本必须来自两个完全不同的总体。
方差分析(ANOVA)
方差分析是用来确定实验结果是否显著的方法。单因素方差分析 比较两个独立组的均值,使用一个自变量。双因素方差分析 是单因素方差分析的扩展,使用两个自变量来计算主效应和交互效应。
方差分析表。
卡方检验
卡方检验公式。
卡方检验检查当我们拥有一组离散的数据点时,模型是否大致符合正态分布。拟合优度检验 确定样本是否与总体在一个分类变量上的分布匹配。独立性卡方检验 比较两组数据,查看是否存在关系。
回归
线性回归
线性回归的假设
-
线性关系
-
多变量正态性
-
无或很小的多重共线性
-
无或很小的自相关
-
同方差性
线性回归 是一种线性方法,用于建模一个因变量与一个自变量之间的关系。自变量 是在科学实验中控制的变量,用于测试对因变量的影响。因变量 是在科学实验中被测量的变量。
线性回归公式。
多元线性回归 是一种线性方法,用于建模一个因变量与两个或更多自变量之间的关系。
多元线性回归公式。
执行线性回归的步骤
步骤 1:理解模型描述、因果关系和方向性
步骤 2:检查数据、分类数据、缺失数据和异常值
-
异常值 是指显著不同于其他观察值的数据点。我们可以使用标准差方法和四分位距 (IQR) 方法。
-
虚拟变量 仅取值为 0 或 1,以指示分类变量的效应。
步骤 3:简单分析 — 检查因变量与自变量之间、自变量与自变量之间的影响比较
-
使用散点图检查相关性
-
多重共线性 发生在两个以上的自变量高度相关时。我们可以使用方差膨胀因子 (VIF) 来测量,如果 VIF > 5 表示高度相关,如果 VIF > 10,则变量之间肯定存在多重共线性。
-
交互项 意味着斜率从一个值变化到另一个值。
步骤 4:多元线性回归 — 检查模型和正确的变量
步骤 5:残差分析
-
检查残差的正态分布和正态性。
-
同方差性 描述了一个情况,即误差项在所有自变量值下保持相同,意味着残差在回归线上相等。
步骤 6:回归输出的解释
-
R-平方 是一种统计拟合度量,表示因变量的变异程度由自变量解释的比例。较高的 R-平方 值表示观察数据与拟合值之间的差异较小。
-
P 值
-
回归方程
Shirley Chen 是 Outdoorsy 的数据分析师。
原文。经授权转载。
更多相关话题
8 种最佳 Python 图像处理工具
原文:
www.kdnuggets.com/2022/11/8-best-python-image-manipulation-tools.html
编辑器提供的图像
在当今世界,数据在每个行业领域中都扮演着至关重要的角色。图像可以是提取数据的来源之一。图像可以定义为像素矩阵,每个像素代表一种颜色,可以被视为数据值。
我们的前三名课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持您在 IT 方面的工作
图像处理对于揭示任何图像中的潜在数据非常有用。它帮助你从图像中提取、操作和过滤数据。图像处理的主要目标是从图像中揭示一些有价值的信息。
图像处理有各种应用,如图像锐化、图像修复、模式识别、视频处理等。大多数图像处理应用归属于数据分析和数据科学。
当谈到数据分析时,我们脑海中浮现出的唯一语言是 Python。由于其广泛的库,它也是图像处理的首选语言,这使得开发人员可以用简单的代码行执行复杂的操作。
让我们看看一些主要用于图像处理的 Python 库。
8 种最佳 Python 图像处理工具
这里列出了帮助你轻松处理图像的最佳 Python 库。它们都易于使用,并允许你提取图像中的基本数据。
1. OpenCV
OpenCV(开源计算机视觉库)是一个受欢迎的 Python 数据可视化库。这是一个开源库,适用于多种编程语言,包括 C++、Java 以及汇编语言。
这个库是由 Intel 使用C++编程语言开发的,旨在实时计算机视觉。它非常适合执行计算密集型的计算机视觉程序。
安装
由于 OpenCV 是一个第三方库,我们可以通过 Python 的 pip 包管理工具为我们的 Python 环境安装它。
pip install opencv-python
示例
# import opencv
import cv2
# Read the image
image = cv2.imread('tesla.png')
# grayscale the image
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.imshow('Original Image', image)
cv2.imshow('Grayscale Image', gray_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出
2. Pillow (PIL)
Pillow是另一个流行的 Python 图像处理库。它是每个初学者可以入门的最基本的图像处理库。它也被称为 PIL,即 Python Imaging Library。
PIL 库附带不同的文件格式扩展,提供强大且复杂的功能以执行图像处理。如果我们将 PIL 与 OpenCV 进行比较,PIL 是一个轻量级的库,功能较少,使得它对于刚刚进入图像处理领域的新 Python 开发者来说,学习和操作都比较容易。
安装
PIL 也是一个第三方开源库,可以使用pip install命令安装。
pip install pillow
示例
使用 Pillow 在 Python 中将图像转换为灰度
from PIL import Image
with Image.open("tesla.png") as im:
#show the original image
im.show("Original Image")
#convert into grayscale
grayscaleImg = im.convert("L")
#show the grayscale image
grayscaleImg.show()
输出
3. Scikit Image
Scikit Images是一个以科学为导向的 Python 图像处理库。它设计用于使用 Numpy 和 Scipy 库处理图像。它包括各种科学算法,如分割、颜色空间操作、分析、形态学等。该库使用 Python 和 C 编程语言编写,适用于所有流行的操作系统,如 Linux、macOS 和 Windows。
安装
scikit-image 是一个开源库,我们可以使用 pip install 命令进行安装。
pip install scikit-image
示例
使用 scikit-image 库将图像转换为灰度
from skimage import io
from skimage.color import rgb2gray
# way to load car image from file
car = io.imread('tesla.png')[:,:,:3]
#convert into grayscale
grayscale = rgb2gray(car)
#show the original
io.imshow(car)
io.show()
#show the grayscale
io.imshow(grayscale)
io.show()
输出
4. NumPy
NumPy是最基本的 Python 科学计算库。它因引入多维数组或矩阵而闻名。它是一个专门的科学计算库。此外,它还附带广泛的数学功能,如数组、线性代数、基本统计操作、随机模拟、逻辑排序、搜索、形状操作等。
安装
再次安装 NumPy 时,我们可以使用 pip install 命令。
pip install numpy
示例
使用 numpy 将图像转换为灰度
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
#load the original image
img_rgb = mpimg.imread('tesla.png')[...,:3]
#show the original image
plt.imshow(img_rgb)
plt.show()
#convert the image into grayscale
img_gray = np.dot(img_rgb,[0.299, 0.587, 0.144])
#show the grayscale image
plt.imshow(img_gray, cmap=plt.get_cmap('gray'))
plt.show()
输出
5. SciPy
类似于 Numpy,SciPy也是一个科学计算库。由于它是作为 NumPy 库的扩展构建的,因此功能比 Numpy 更多。
Scipy 提供了高级和复杂的命令和类用于数据操作和数据可视化。它涵盖了广泛的数据处理工具。此外,它还支持并行编程、从网络获取数据、数据驱动的子程序及其他数学功能。
安装
要安装 SciPy 库,我们可以使用 Python 包管理工具 pip。
pip install scipy
示例
使用 scipy 将图像转换为灰度图像
from scipy import misc,ndimage
from matplotlib import pyplot as plt
import numpy as np
img=misc.face()
#show original image
plt.imshow(img)
plt.show()
#grayscale using gaussian blur filter
grayscale=ndimage.gaussian_filter(img,sigma=2)
#show grayscale image
plt.imshow(grayscale)
plt.show()
输出
6. Mahotas
Mahotas 是另一个 Python 计算机视觉库,可以执行各种图像处理操作。它使用 C++ 设计,包含许多算法以提高图像处理速度。它还使用 NumPy 数组中的矩阵表示图像。主要功能包括分水岭、凸点计算、击中与错过卷积以及 Sobel 边缘。
安装
Mahotas 是一个开源库,可以通过以下终端命令进行安装。
pip install mahotas
示例
使用 Mahotas 将 RGB 图像转换为灰度图像
import mahotas
from pylab import imshow, show
#read the image
img = mahotas.imread('tesla.png')
#show original image
imshow(img)
show()
img = img[:, :, 0]
grayscale = mahotas.overlay(img)
#show grayscale image
imshow(grayscale)
show()
输出
7. SimpleITK
SimpleITK 是一个功能强大的图像配准和分割工具包。它作为 ITK 工具包 的扩展构建,提供了简化的接口。它支持多种编程语言,如 Python、R、C++、Java、C#、Ruby、TCL 和 Lua。
该库支持 2D、3D 和 4D 图像。与其他 Python 图像处理库和框架相比,该库的图像处理速度非常高。
安装
pip install SimpleITK
示例
使用 SimpleITK 加载并显示图像
import SimpleITK as sitk
import matplotlib.pyplot as plt
logo = sitk.ReadImage('tesla.png')
# GetArrayViewFromImage returns an immutable numpy array view to the data.
plt.imshow(sitk.GetArrayViewFromImage(logo))
plt.show()
输出
8. Matplotlib
Matplotlib 虽然是一个数据可视化库,但也可以用作图像处理库。它通常用于绘制 numpy 数组数据,但也可以读取由 NumPy 数组表示的图像数据。我们在上述库中已经使用了 Matplotlib 库来显示和绘制图像。
安装
可以通过以下简单命令安装 Matplotlib。
pip install matplotlib
示例
# importing libraries.
import matplotlib.pyplot as plt
from PIL import Image
# open image using pillow library
image = Image.open("tesla.png")
#show original image
plt.imshow(image)
plt.show()
# grayscale the image
plt.imshow(image.convert("L"), cmap='gray')
plt.show()
输出
结论
这里结束了我们关于最佳 Python 图像处理工具的列表。在这八个库或工具中,最常用的 Python 图像处理库是 Pillow 和 OpenCV(在某些特定情况下是 SimplICV)。
如果你正在考虑构建一个与图像处理相关的项目,比如对象识别或颜色处理,建议使用 OpenCV 库,因为它是一个拥有众多先进功能的大型库。其他库也支持一些图像处理功能,但效率不如 OpenCV。
Vijay Singh Khatri 计算机科学专业毕业,专注于编程和市场营销。我非常喜欢撰写技术文章和创建新产品。
更多相关主题
8 种内置 Python 装饰器帮助编写优雅代码
原文:
www.kdnuggets.com/8-built-in-python-decorators-to-write-elegant-code
图片由编辑提供
Python,凭借其简洁易读的语法,是一种广泛使用的高级编程语言。Python 设计注重易用性,强调简单性和降低程序维护成本。它配备了丰富的库,减少了开发人员从头编写代码的需要,提高了开发人员的生产力。Python 的一个强大特性是装饰器,它有助于代码的优雅。
什么是 Python 装饰器?
在 Python 中,装饰器是一个函数,它允许你在不改变另一个函数核心逻辑的情况下修改其行为。它接受另一个函数作为参数,并返回具有扩展功能的函数。这样,你可以使用装饰器为现有函数添加额外逻辑,以增加可重用性,只需几行代码。本文将探讨八种内置 Python 装饰器,它们可以帮助你编写更优雅、易维护的代码。
图片由编辑提供
1. @atexit.register
@atexit.register
装饰器用于注册一个在程序终止时执行的函数。这个函数可以在程序即将退出时执行任何任务,无论是正常退出还是由于意外错误。
示例:
import atexit
# Register the exit_handler function
@atexit.register
def exit_handler():
print("Exiting the program. Cleanup tasks can be performed here.")
# Rest of the program
def main():
print("Inside the main function.")
# Your program logic goes here.
if __name__ == "__main__":
main()
输出:
Inside the main function.
Exiting the program. Cleanup tasks can be performed here.
在上述实现中,@atexit.register
被提到在函数定义之前。它将 exit_handler()
函数定义为退出函数。本质上,这意味着每当程序达到终止点,无论是正常执行还是由于意外错误导致的提前退出,exit_handler()
函数将被调用。
2. @dataclasses.dataclass
@dataclasses.dataclass
是一个强大的装饰器,用于自动生成类的常见特殊方法,例如“init”、“repr”等。它帮助你编写更简洁、清晰的代码,避免了编写初始化和比较类实例的样板代码的需要。它还可以通过确保在代码库中一致地实现常见特殊方法来帮助防止错误。
示例:
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
point = Point(x=3, y=2)
# Printing object
print(point)
# Checking for the equality of two objects
point1 = Point(x=1, y=2)
point2 = Point(x=1, y=2)
print(point1 == point2)
输出:
Point(x=3, y=2)
True
@dataclass
装饰器应用在 Point 类定义之上,告诉 Python 利用默认行为生成特殊方法。这会自动创建__init__
方法,在对象实例化时初始化类属性,如 x 和 y。因此,像 point 这样的实例可以在无需显式编码的情况下构造。此外,__repr__
方法,负责提供对象的字符串表示,也会自动调整。这确保了当对象(如 point)被打印时,它会生成一个清晰有序的表示,如输出所示:Point(x=3, y=2)。另外,两个实例 point1 和 point2 之间的相等比较(==)会产生 True。这一点值得注意,因为默认情况下,Python 基于内存位置检查相等性。然而,在 dataclass 对象的上下文中,相等性是由对象中包含的数据来确定的。这是因为@dataclass
装饰器生成了一个__eq__
方法,检查对象中数据的相等性,而不是检查相同的内存位置。
3. @enum.unique
@enum.unique
装饰器,位于枚举模块中,用于确保枚举的所有成员的值是唯一的。这有助于防止意外创建具有相同值的多个枚举成员,从而避免混淆和错误。如果发现重复值,将引发ValueError。
示例:
from enum import Enum, unique
@unique
class VehicleType(Enum):
CAR = 1
TRUCK = 2
MOTORCYCLE = 3
BUS = 4
# Attempting to create an enumeration with a duplicate value will raise a ValueError
try:
@unique
class DuplicateVehicleType(Enum):
CAR = 1
TRUCK = 2
MOTORCYCLE = 3
# BUS and MOTORCYCLE have duplicate values
BUS = 3
except ValueError as e:
print(f"Error: {e}")
输出:
Error: duplicate values found in <enum>: BUS -> MOTORCYCLE</enum>
在上述实现中,“BUS”和“MOTORCYCLE”具有相同的值“3”。因此,@unique
装饰器会引发一个 ValueError,提示发现了重复的值。你不能多次使用相同的键,也不能将相同的值分配给不同的成员。通过这种方式,它帮助防止多个枚举成员的值重复。
4. @partial
partial
装饰器是一个强大的工具,用于创建部分函数。部分函数允许你预设原始函数的某些参数,并生成一个已经填入这些参数的新函数。
示例:
from functools import partial
# Original function
def power(base, exponent):
return base ** exponent
# Creating a partial function with the exponent fixed to 2
square = partial(power, exponent=2)
# Using the partial function
result = square(3)
print("Output:",result)
输出:
Output: 9
在上述实现中,我们有一个名为“power”的函数,它接受两个参数“base”和“exponent”,并返回基数的指数幂结果。我们使用原始函数创建了一个名为“square”的部分函数,其中指数被预设为 2。通过这种方式,我们可以使用partial
装饰器扩展原始函数的功能。
5. @singledispatch
@singledispatch
装饰器用于创建泛型函数。它允许你定义具有相同名称但不同参数类型的函数的不同实现。当你希望代码对不同数据类型表现出不同的行为时,这特别有用。
示例:
from functools import singledispatch
# Decorator
@singledispatch
def display_info(arg):
print(f"Generic: {arg}")
# Registering specialized implementations for different types
@display_info.register(int)
def display_int(arg):
print(f"Received an integer: {arg}")
@display_info.register(float)
def display_float(arg):
print(f"Received a float: {arg}")
@display_info.register(str)
def display_str(arg):
print(f"Received a string: {arg}")
@display_info.register(list)
def display_sequence(arg):
print(f"Received a sequence: {arg}")
# Using the generic function with different types
display_info(39)
display_info(3.19)
display_info("Hello World!")
display_info([2, 4, 6])
输出:
Received an integer: 39
Received a float: 3.19
Received a string: Hello World!
Received a sequence: [2, 4, 6]
在上述实现中,我们首先使用 @singledisptach
装饰器开发了通用函数 display_info()
,然后分别为 int、float、string 和 list 注册了其实现。输出展示了 display_info()
对不同数据类型的工作情况。
6. @classmethod
@classmethod
是一个装饰器,用于在类中定义类方法。类方法绑定到类而非类的实例。静态方法和类方法之间的主要区别在于它们与类状态的交互。类方法可以访问并修改类状态,而静态方法不能访问类状态,并且独立操作。
示例:
class Student:
total_students = 0
def __init__(self, name, age):
self.name = name
self.age = age
Student.total_students += 1
@classmethod
def increment_total_students(cls):
cls.total_students += 1
print(f"Class method called. Total students now: {cls.total_students}")
# Creating instances of the class
student1 = Student(name="Tom", age=20)
student2 = Student(name="Cruise", age=22)
# Calling the class method
Student.increment_total_students() #Total students now: 3
# Accessing the class variable
print(f"Total students from student 1: {student1.total_students}")
print(f"Total students from student 2: {student2.total_students}")
输出:
Class method called. Total students now: 3
Total students from student 1: 3
Total students from student 2: 3
在上述实现中,Student 类具有类变量 total_students。@classmethod
装饰器用于定义 increment_total_students()
类方法,以递增 total_students 变量。每当我们创建一个 Student 类的实例时,学生总数会增加一。我们创建了两个类的实例,然后使用类方法将 total_students 变量修改为 3,这在类的实例中也得到了反映。
7. @staticmethod
@staticmethod
装饰器用于在类中定义静态方法。静态方法是可以在不创建类实例的情况下调用的方法。静态方法通常用于不需要访问与对象相关的参数,并且与整个类更相关的情况。
示例:
class MathOperations:
@staticmethod
def add(x, y):
return x + y
@staticmethod
def subtract(x, y):
return x - y
# Using the static methods without creating an instance of the class
sum_result = MathOperations.add(5, 4)
difference_result = MathOperations.subtract(8, 3)
print("Sum:", sum_result)
print("Difference:", difference_result)
输出:
Sum: 9
Difference: 5
在上述实现中,我们使用 @staticmethod
为类“MathOperations”定义了一个静态方法 add()。我们将两个数字“4”和“5”相加,结果是“9”,而不需要创建类的实例。类似地,将两个数字“8”和“3”相减得到“5”。通过这种方式,静态方法可以生成执行不需要实例状态的工具函数。
8. @property
@property
装饰器用于定义类属性的 getter 方法。getter 方法是返回属性值的方法。这些方法用于数据封装,指定谁可以访问类或实例的详细信息。
示例:
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def radius(self):
# Getter method for the radius.
return self._radius
@property
def area(self):
# Getter method for the area.
return 3.14 * self._radius**2
# Creating an instance of the Circle class
my_circle = Circle(radius=5)
# Accessing properties using the @property decorator
print("Radius:", my_circle.radius)
print("Area:", my_circle.area)
输出:
Radius: 5
Area: 78.5
在上述实现中,类“Circle”具有一个属性“radius”。我们使用 @property
设置了半径和面积的 getter 方法。这为类的用户提供了一个干净且一致的接口来访问这些属性。
总结
本文重点介绍了一些最通用和功能强大的装饰器,你可以使用它们使你的代码更加灵活和易读。这些装饰器允许你扩展原始函数的功能,使其更有组织且不易出错。它们就像是魔法般的点缀,使你的 Python 程序看起来整洁且运行顺畅。
Kanwal Mehreen**** Kanwal 是一位机器学习工程师和技术作家,对数据科学以及 AI 与医学的交汇处充满热情。她合著了电子书《利用 ChatGPT 最大化生产力》。作为 2022 年亚太地区的 Google Generation 学者,她倡导多样性和学术卓越。她还被认可为 Teradata 多样性技术学者、Mitacs Globalink 研究学者和哈佛 WeCode 学者。Kanwal 是变革的坚定倡导者,创办了 FEMCodes,以赋能 STEM 领域的女性。
我们的前三课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业生涯。
2. Google 数据分析专业证书 - 提升你的数据分析技能
3. Google IT 支持专业证书 - 支持你的组织进行 IT 工作
更多相关内容
8 种常见的陷阱可能会破坏你的预测
原文:
www.kdnuggets.com/2018/03/8-common-pitfalls-ruin-prediction.html
评论
由 诺伯特·奥布苏茨特,AnswerMiner。
在普通的一天里,你会基于以往的观察做出数百个预测,通常借助于你脖子顶部的个人神经网络。如果你想要更好的预测,你需要更多的信息,所以你必须利用他人的观察,而不仅仅是你自己的。
我们的前三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT 工作
基于数据的预测可以提高你公司的利润或改善你的生活。
但要小心!一些常见的错误可能导致你的预测无用甚至误导。
你总是计算的常见预测
-
如果你需要一把伞(根据天气预报和你皮肤上的温度传感器)
-
你应该什么时候开始工作(根据星期几、当前月份和交通报告)
-
哪一项工作将来获益最大(基于撰写博客文章、发送电子邮件或与忠实客户会面)
-
你的同事在告诉你某事时在想什么(基于他的手势、面部表情和语调)
-
你的孩子会对你考虑购买的生日礼物有何反应(基于他的年龄、兴趣、礼物价格和产品类别)
基于数据的盈利预测示例
-
你的面包店会卖出多少条面包?如果你烤得太少或太多,你会亏钱。
-
在报名的那些人中,有多少人会参加你的聚会?你必须订购足够但不过多的食物,因为这会花费钱。
-
你什么时候应该将货币从美元兑换成欧元或反之?货币汇率很难预测,但你可以节省 1%-2%。
-
哪位申请者更可能在你招聘的职位上表现出色?招聘最好的销售人员将为你带来更多客户,从而获得更多的收入。
-
你可能会在下个月流失多少客户?如果你预测支付客户的流失率,你可以防止它。
数据越多,你的预测就会越好。
记住这一重要建议
- 方法选择
有几种预测算法和子变体,每种都有其优缺点。你必须选择最适合你需求的算法。
-
线性回归: 易于理解,但无法捕捉复杂的关系。
-
决策树: 易于理解和可视化,但需要仔细选择参数。
-
随机森林: 预测模型质量非常高,但难以可视化且可能较慢。
-
神经网络: 对于非常复杂的任务具有最佳预测能力,但计算密集且难以理解其行为。
决策树
- 过拟合
过拟合是指你根据非常具体、罕见发生的事件得出一般性结论,这些事件仅仅是偶然发生的。
-
好的预测: 如果天空多云且湿度高,那么很可能会下雨。
-
过拟合预测: 如果是星期五,日期是偶数,月份在六月之后,当前时间在上午 9:00 到 10:00 之间,并且你的车正在修理中,那么很可能会下雨。
第二个预测不好,因为过拟合了,因为所列条件很少同时发生,即使你在这些条件满足时总是经历降雨,你也可能无法预测未来的降雨。
避免过拟合是构建预测模型时面临的最大挑战之一。你永远无法知道预测是否过拟合,或者是否存在真实关系。
只有未来才能揭示。
然而,有一些技术可以帮助你,例如交叉验证模型的效率。
- 混合过去和未来
如果你想基于几个不同的因素进行预测,选择预测因子时要小心;它们必须是与你的目标相比的过去数据。
这可能看起来很明显,但如果你的数据集有很多列,你可能会很容易陷入困境。例如,不要基于当天在网络商店花费的时间来预测访客的购买机会。那“在网络商店的总分钟数”列可能还包括了在购买之后花费在网络商店的时间。
历史数据示例
如果你想使用上述历史数据表创建预测,请不要包括“在网络商店的总分钟数”。你可以包括“着陆页”和“访客国家”这两个预测因素,因为这些数据是在购买时间之前生成的。
- 异常值
大多数数值数据集包含异常值,原因可能是数据不洁或错误,或者因为一些特殊的例外情况。
异常值是邪恶的,会破坏一切。在进行任何预测之前,要去除它们,因为均值计算的结果将会失真。
尝试预测正态分布的数据,而不是柯西分布的数据。
- 衡量效率
你应该始终并持续测量你的预测效率,原因如下:
-
预测的表现太差或太好都表明你的模型或预测有问题。
-
你想知道你可以从预测模型中期待什么样的准确率。
-
随着时间的推移,情况会发生变化,因此你的预测在某些时候会过时,你需要检测到这一点。
你应该总是将效率与一些基本经验法则进行比较。例如,假设你想预测今天佛罗里达是否会下雪,并且你正在构建一个复杂的预测模型来确定这一点。
如果你的模型在真实结果(有雪或无雪)上命中率为 90%,那并不好,因为如果你总是猜无雪,你的命中率将达到 99%。
- 预测因子不足
人们常常犯的一个错误是仅用领域特定的知识来改进预测。这主要是因为他们想收集可能的原因,但预测与因果关系无关。
如果你想预测冰淇淋的销售,不仅要使用与冰淇淋相关的预测因子,还要考虑比基尼或空调销售、政治新闻量或联邦基准利率等因素。
这些因素虽然不直接影响冰淇淋销售,但与之相关,因此可以作为预测因子使用。
如果你意外地包含了一个与目标无关的预测因子,这并不是问题,预测算法会自动排除它。
- 相信结果
人们想相信他们有逻辑技能、有经验、聪明、智慧和理性。然而,他们并非如此;相反,他们在很多方面都有偏见。
如果你创建了一个好的预测模型并验证了它,不要丢掉它,像这样说,
“不可能。有数据有问题。” 或 “我比算法更了解我的领域。”
利用你的领域专长来创建预测模型,但一旦完成,不要简单地覆盖它。
- 应用结果
如果不应用预测模型,就没有意义去构建它们。在进行预测之前,总是要定义你将根据可能的结果采取的行动。
假设你正在构建一个预测模型,以检测访问你的网站的访客是否会购买某物,基于访客的国籍、性别、浏览器版本、登陆页面等。
如果你无法利用这些信息,那么预测是没有意义的。然而,如果你有一位专业的网页开发人员,并且可以根据预测动态地给予用户折扣,你可以只对那些没有折扣可能不会购买的人给予折扣。
此外,如果你预测用户会从你的网上商店购买东西,那么就没有必要通过给他们折扣来降低你的利润。
我希望我能在这篇文章中给你提供一些有用的建议。让我再与你分享一件事。AnswerMiner 可以基于众多数据源迅速生成预测。
个人简介:诺伯特·奥布苏茨 是 AnswerMiner 的创始人、数据科学家和程序员。他获得了数学和编程的学位。诺伯特对数据分析、预测分析和数据科学充满热情。他的联系方式是 norbert.obsuszt@answerminer.com
相关:
了解更多相关话题
2024 年你需要选择的 8 个数据工程职位
原文:
www.kdnuggets.com/8-data-engineering-jobs-you-need-to-choose-from-in-2024
作者提供的图片
我们最近听到很多科技公司裁员的消息,当你对市场感到担忧时,开始新的职业或角色可能会非常令人沮丧。现在有很多变化,许多人觉得自己被生成式人工智能取代,而一些人则在与经济和疫情后的金融危机作斗争。
我们的前三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯
2. 谷歌数据分析专业证书 - 提升你的数据分析能力
3. 谷歌 IT 支持专业证书 - 支持你的组织在 IT 方面
不幸的是,我们不得不接受现在和未来,学习如何应对它。
说到这里,数据工程是完美的选择。
为什么你应该考虑从事数据工程职业
首先要说的是,数据被称为新黄金。数据中有如此多的价值,但许多利益相关者不知道如何利用这些数据及其对业务和决策过程的影响。
数据工程师可以提取、转换和加载数据,确保数据格式适合分析,从而提供有价值的洞察并推动明智决策。越来越多的组织力求变得更加数据驱动,因此那些懂得如何处理原始数据的专业人士非常受欢迎。
但数据工程不仅仅是清洗原始数据,还包括处理大数据、云计算和人工智能,数据工程师可以实施和优化数据基础设施,以确保企业能够从前沿技术中受益。
由于数据工程师需要广泛的技能,他们的工作远非枯燥无味。他们将不断发展以适应当前市场,并跟上新技术和新流程。这导致对技能熟练的数据工程师的需求增加,他们在竞争激烈的市场中获得高薪和丰厚的福利。
顶级数据工程职位
如果你想进入一个竞争激烈的市场,你应该关注的数据工程角色包括:
-
数据工程师
-
大数据工程师
-
机器学习工程师
-
数据架构师
-
云数据工程师
-
ETL 开发者
-
数据操作工程师(DataOps)
-
人工智能数据工程师
数据工程职位薪资
自然地,很多人想了解这些职位的薪资,因此让我们通过Glassdoor来深入了解这些数据。这些数据基于英国的基本薪资,但如果你想根据你的所在地了解更多,请点击以下链接。
-
数据工程师 - £37K - £61K/年
-
大数据工程师 - £34K - £65K/年
-
机器学习工程师 - £41K - £73K/年
-
数据架构师 - £55K - £85K/年
-
云数据工程师 - £42K - £66K/年
-
ETL 开发人员 - £31K - £64K/年
-
数据操作工程师(DataOps) - £29K - £55K/年
-
AI 数据工程师 - £39K - £67K/年
大多数薪资数据是平均汇总数据。对熟练的数据工程专业人员的需求很高,许多科技公司大力投资以提供更高的薪资和更多的福利。
如何成为数据工程师
如果你想转行进入技术行业,或者你对数据领域几乎没有经验,你需要找一个可以提供正确学习材料、技能和经验的课程,以启动你的数据工程师职业生涯。
我特别推荐DataCamp 数据工程证书。这是一个业内认可的认证,像 HSBC、微软和谷歌等公司都对其评价很高,许多员工已经获得了认证。
疯狂的是,你可以在 30 天内获得认证!
一旦你注册了课程,你将有 30 天的时间来完成定时考试和实践考试。对于数据工程证书,你将有两个定时考试,这将考验你的技能。你将有两小时来完成考试,并且有两次尝试机会。
一旦你完成了定时考试,你就可以进入实践考试,在那里你可以展示你的能力。对于实践考试,你将有四小时的时间来完成,并且有两次尝试机会。你的考试将会自动评分,你会立即获得结果!
但这还不是全部。你已经完成了定时和实践考试,感到自信并准备好了。下一个挑战是找到你的理想工作,DataCamp 通过提供对其认证社区的独家访问,使这变得更容易。在这个社区中,你将能够与其他专业人士联系,了解行业专家活动、独家内容和资源,以便在求职过程中脱颖而出!
如果你担心自己太早获得认证并在 30 天内完成,不用担心。DataCamp 提供了多个级别的认证,这些认证已经设计得完美地与你的职业目标对齐。你还可以参加准备测验以找到适合你的课程。
例如,你可以选择:
-
数据工程师助理
-
数据工程师
如果你想查看可以在 DataCamp 上修读的数据工程课程列表,可以点击这里。
总结
开始新职业不必如此令人紧张,只要你找到正确的课程,你将拥有所需的所有资源和支持,成功指日可待!
****尼莎·阿利亚****是一名数据科学家、自由技术作家,以及 KDnuggets 的编辑和社区经理。她特别感兴趣于提供数据科学职业建议或教程,以及基于理论的数据科学知识。尼莎涵盖了广泛的话题,并希望探索人工智能如何有助于人类寿命的不同方式。作为一个热衷学习者,尼莎希望拓宽自己的技术知识和写作技能,同时帮助引导他人。
更多相关话题
8 个免费的 AI 和 LLMs 平台
原文:
www.kdnuggets.com/2023/05/8-free-ai-llms-playgrounds.html
图片作者
我们生活在一个充满巨大创新的时代,开源 AI 模型的突破性进展几乎每周都会揭晓。这些非凡的发展展现了人工智能的潜力。然而,虽然一些模型附带了互动演示,但大多数项目仅分享数据集和模型权重。因此,对于非技术人员来说,亲身体验和探索这些新技术变得具有挑战性。
我们的前三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织进行 IT 管理
在本文中,我们旨在通过介绍八个平台来弥补这一差距,这些平台使任何人都能免费测试和比较开源 AI 模型。此外,它们提供了各种更新的模型,确保你能够跟上最新的进展。
1. Chatbot Arena
Chatbot Arena 让你体验多种模型,如 Vicuna、Koala、RMKV-4-Raven、Alpaca、ChatGLM、LLaMA、Dolly、StableLM 和 FastChat-T5。此外,你可以比较模型性能,根据排行榜,Vicuna 13b 以 1169 的 elo 评分领先。
图片来自 Chatbot Arena
2. Vercel AI Playground
Vercel AI Playground 让你免费测试单一模型或比较多个模型。你甚至无需输入你的 OpenAI API 密钥即可测试 GPT-3.5 turbo 模型。该平台提供来自 Hugging Face、OpenAI、cohere、Replicate 和 Anthropic 的模型推断。它运行快速,无需注册。
图片来自 Vercel AI Playground
3. GPT4ALL
GPT4ALL 排在我的列表首位,因为它提供了在线演示、WebUI、LangchainAPI 和桌面应用程序,让你在笔记本电脑上体验模型的状态。它简单且只需两个步骤即可在你的机器上运行模型。
GPT4ALL 提供了各种版本的 gpt4all-j、vicuna、stable-vicuna 和 wizardLM。它还提供了一个 CPU 量化的 GPT4All 模型检查点,可以在任何机器上运行。
图片来自 GPT4ALL
4. Quora Poe
Quora Poe 平台提供了一个独特的机会,可以尝试最前沿的聊天机器人,甚至创建自己的聊天机器人。通过访问行业领先的 AI 模型,如 GPT-4、ChatGPT、Claude、Sage、NeevaAI 和 Dragonfly,可能性无限。它只需要简单注册,且你可以免费使用 AI 模型。
图片来自 Poe
5. Chat LLM Hugging Face
Chat LLM Hugging Face 是一个托管在 Hugging Face Spaces 上的 Gradio 应用。它让你测试 Open assistant Pythia 模型、Google Flan、Big Science bloom 和 Bloomz 以及 EleutherAI GPT-NEOx。它快速简便,不需要设置或注册。你甚至可以通过嵌入的 链接 访问。
图片来自 Hugging Face
6. Open Assistant
Open Assistant 是一个由社区主导的开源项目,允许用户测试各种前沿模型。该平台鼓励任何对改善数据集和增强提示感兴趣的人参与,通过注册我们的服务来贡献。目前,我们提供不同版本的 LLaMA 模型;然而,我们计划推出可以用于商业用途的高级 StableLM 和 Pythia 版本。
图片来自 Open Assistant
7. 开放平台
开放平台 让你在笔记本电脑上使用所有喜爱的 LLM 模型,利用一个 Python 包。该应用程序要么从 Hugging Face 下载模型,要么直接通过 API 使用模型。它提供来自 OpenAI、Anthropic、Cohere、Forefront、HuggingFace、Aleph Alpha 和 llama.cpp 的模型。
通过 Cornellius Yudha Wijaya 的 指南 提升 API 并使用多个模型。
图片来自 Cornellius Yudha Wijaya
8. HuggingChat
HuggingChat 目前是我最喜欢的平台。它速度快、免费、不需要注册,并提供最适合编码和一般使用的模型。HuggingChat 的界面类似于 ChatGPT,你可以用它进行编码、数学、研究和创意写作。
最近,他们推出了用于 86 种编程语言的 BigCode-StarCoder 模型。
图片来自 HuggingChat
Abid Ali Awan (@1abidaliawan) 是一位认证的数据科学专业人士,热爱构建机器学习模型。目前,他专注于内容创作和撰写有关机器学习和数据科学技术的技术博客。Abid 拥有技术管理硕士学位和电信工程学士学位。他的愿景是利用图神经网络为那些受心理疾病困扰的学生构建一款 AI 产品。
更多相关内容
8 个免费的谷歌课程,帮助你获得高薪工作
原文:
www.kdnuggets.com/8-free-google-courses-to-land-top-paying-jobs
图片来源:DALLE
确定新年想要开始的技能可能很困难。选择很多。如今最主要的是你所学的内容能够很容易转移到其他职业和领域。
我们的前三个课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业。
2. 谷歌数据分析专业证书 - 提升你的数据分析能力
3. 谷歌 IT 支持专业证书 - 支持你的组织的 IT
这就是我整理这个博客的原因,以便你可以查看提供丰厚职业机会的课程。最棒的是它们都是免费的!
编程基础
链接:编程基础
我们都知道科技世界发展得很快,越来越多的人希望成为这段旅程的一部分。如果你是这些人之一,那就从学习编程基础开始你的旅程吧。
学习诸如函数、变量、字符串、数组等概念。
数据结构和算法
链接:数据结构和算法
想进入数据科学的世界吗?用谷歌的数据结构和算法 53 套材料开启你的新旅程。没错,53 套免费材料!
如果你想熟悉数据结构和算法,以便开启数据科学职业 - 不妨看看这个!
数据分析师学习路径
链接:数据分析师学习路径
想把你的数据科学/分析师职业提升到新水平 - 你可以通过谷歌的数据分析师学习路径来实现。
在这个学习路径中,你将学习数据分析师如何收集和分析数据,以识别趋势和模式,从而提供有价值的见解以解决问题以及做出明智的商业决策。学习数据清洗、数据可视化和深入分析。
Google Analytics 认证
真的喜欢数据分析路径吗?下一步将是获得认证,将你的技能付诸实践,并向他人展示你的技能。
在这个课程中,你将学习使用 Google Analytics 4 来获得有价值的见解并做出营销决策。这相当于一个项目,你将创建一个网站或应用,收集业务数据并定义关键功能。
机器学习路径
链接:机器学习路径
对深入数据科学世界感兴趣吗?怎么样,机器学习呢?
机器学习工程师负责设计、构建、优化、操作和维护机器学习系统。看起来他们的责任很重大,对吧?机器学习工程师曾负责构建一些令人惊叹的工具。
在这个学习路径中,你将拥有一系列精心挑选的按需课程、实验室和技能徽章,为你提供真实的实践经验。一旦你完成了这个路径并觉得这是你想深入的领域,你可以通过 Google Cloud 机器学习工程师认证继续你的旅程。
AI 适合所有人
链接:AI 适合所有人
目前 AI 非常热门,我能想象那些对它一无所知的人会想了解一两件事。由于这个课程适合所有人,没有任何前提条件,你一定会学到 AI 的方方面面。
了解 AI 在现实世界中的应用,以及对神经网络和不同类型机器学习的更深入理解。
Web 开发
链接:学习网页开发
与传统的技术角色稍有不同,但需求量很大。网页设计非常有趣且富有创意,对于那些想了解更多的人来说,Google Chrome 团队汇集了一系列由行业专家精心挑选的课程。
你可以参加各种课程,例如 HTML、性能、图像、响应式设计等!
Google Android 开发
学习应用开发的开发者方面可能很有趣。随着近年来新工具的出现,你们中的一些人可能会对成为开发者感兴趣。如果是这样,Google 会带领初学者了解如何使用最新的现代 Android 开发实践构建应用。
总结一下
一系列课程,帮助你在 2024 年开启新职业生涯。通过这些免费的学习材料,了解你是否喜欢它!这可能是新的职业或个人旅程的开始。学习愉快!
****尼莎·阿雅****是一名数据科学家、自由技术写作员,以及 KDnuggets 的编辑和社区经理。她特别关注提供数据科学职业建议或教程以及基于理论的数据科学知识。尼莎涉及广泛的主题,并希望探索人工智能如何有利于人类生命的长寿。作为一个热心学习者,尼莎希望拓宽她的技术知识和写作技能,同时帮助他人。
更多相关话题
8 个免费的 MIT 在线数据科学学习课程
原文:
www.kdnuggets.com/2022/03/8-free-mit-courses-learn-data-science-online.html
图片由 Fotis Fotopoulos 提供,Unsplash
我报名参加了一个本科计算机科学项目,并决定主修数据科学。在三年期间我花费了超过$25K 的学费,结果毕业后发现自己没有获得足够的技能来找到相关领域的工作。
我们的前三个课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业道路
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你在 IT 领域的组织
我几乎不知道如何编码,对最基本的机器学习概念也不清楚。
我花了一些时间尝试自己学习数据科学——借助 YouTube 视频、在线课程和教程。我意识到所有这些知识都可以在互联网上公开获取,并且是免费的。
令我惊讶的是,即使是常春藤盟校也开始让许多课程向全球学生开放,几乎没有费用。这意味着像我这样的人可以从一些世界上最好的机构学习这些技能,而不是花费数千美元去读一个质量一般的学位课程。
在本文中,我将为你提供一个我使用仅有的免费 MIT 在线课程创建的数据科学路线图。
第 1 步:学习编程
我强烈建议在深入了解数据科学模型的数学和理论之前学习一门编程语言。一旦你学会编程,你将能够处理真实世界的数据集,并感受预测算法的运作方式。
MIT 开放课程提供了一个面向初学者的 Python 程序,叫做计算机科学与编程导论。
这个课程旨在帮助没有编码经验的人编写程序,以解决有用的问题。
第 2 步:统计学
统计学是每个数据科学工作流程的核心——无论是在构建预测模型、分析大量数据中的趋势,还是选择用于模型的数据特征时,它都是必需的。
MIT 开放课程还提供了一门初学者友好的课程,概率与统计导论。完成此课程后,你将了解统计推断和概率的基本原理。涉及的一些概念包括条件概率、贝叶斯定理、协方差、中心极限定理、重抽样和线性回归。
这门课程还将指导你使用 R 编程语言进行统计分析,这对你作为数据科学家的工具栈有很大帮助。
MIT 还提供了另一个免费的实用课程,统计思维与数据分析。这是该主题的另一门基础课程,将带你了解 Excel、R 和 Matlab 中的各种数据分析技术。
你将学习数据收集、分析、不同类型的抽样分布、统计推断、线性回归、多元线性回归和非参数统计方法。
第三步:基础数学技能
微积分和线性代数是机器学习领域中使用的另外两个数学分支。修习这些学科的一两门课程将使你对预测模型的运作和基础算法有不同的认识。
要学习微积分,你可以先参加 MIT 提供的免费单变量微积分,然后再学习多变量微积分。
然后,你可以参加由 Gilbert Strang 教授讲授的线性代数课程,以深入掌握该学科。
上述所有课程均由 MIT 开放课程提供,并配有讲义、习题集、考试题目和解决方案。
第四步:机器学习
最后,你可以利用以上课程所学的知识参加 MIT 的机器学习导论课程。该项目将指导你如何在 Python 中实现预测模型。
该课程的核心重点是监督学习和强化学习问题,你将学习到如泛化和如何减轻过拟合等概念。除了处理结构化数据集,你还将学习如何处理图像和序列数据。
MIT 的机器学习项目列出了三个前置条件——Python、线性代数和微积分,因此建议在开始此课程之前完成上述课程。
这些课程适合初学者吗?
即使你没有编程、统计或数学的基础知识,你也可以参加上述列出的所有课程。
MIT 设计了这些程序,以从零开始带你学习该主题。然而,与许多其他 MOOC 课程不同,进度会相对较快,并且课程内容覆盖了较大的深度。
因此,建议完成所有讲座附带的练习,并学习提供的所有阅读材料。
Natassha Selvaraj 是一位自学成才的数据科学家,热衷于写作。你可以在 LinkedIn 上与她联系。
更多相关话题
8 个让你的作品集脱颖而出的 AI/机器学习项目
原文:
www.kdnuggets.com/2020/09/8-ml-ai-projects-stand-out.html
评论
作者 Kajal Yadav,数据科学、创业公司和企业家的自由撰稿人。
来源 Unsplash,由作者编辑。
你是否对进入数据科学领域感到兴奋?恭喜你!这仍然是正确的选择,因为在疫情期间,数据科学和人工智能的工作需求大幅提升。
尽管如此,由于危机,市场目前变得更加困难,无法像之前那样通过更多的人力来重新建立。因此,你可能需要在心理上为漫长的求职过程以及沿途的许多拒绝做好准备。
在撰写本文时,我假设你已经了解数据科学作品集的重要性及如何构建它。
你可能会花费大部分时间进行数据处理和清洗,而不是应用复杂的模型。
数据科学爱好者常常问我,他们应该在作品集中包含什么类型的项目,以打造一个极具价值和独特性的作品集。
以下是我为你的数据科学作品集提供的 8 个独特创意,并附上了参考文章,你可以从中获取如何开始特定创意的见解。你还可以在 这里找到更多机器学习项目。
1. 基于社交媒体帖子进行抑郁情绪分析
这个话题在当今非常敏感,并急需采取行动。全球有超过 2.64 亿人正在遭受抑郁症困扰。抑郁症 是全球残疾的主要原因,也是全球疾病负担的重要因素,每年几乎有 80 万人因自杀而死亡。自杀是 15 至 29 岁人群中的第二大死亡原因。抑郁症的治疗往往被延迟、不准确或完全遗漏。
互联网时代为早期抑郁症干预服务提供了主要的机会,尤其是对年轻成年人。每分钟大约有 6,000 条推文发布在 Twitter 上,这相当于每分钟超过 350,000 条推文,每天 5 亿条推文,每年大约 2000 亿条推文。
根据皮尤研究中心的数据,72%的公众使用某种形式的网络生活。从社交网络发布的数据对许多领域,如人类学和心理学,都很重要。但从专业角度来看,这些支持远远不够,具体方法也急需改进。
通过分析社交媒体帖子的语言标记,可以创建一个深度学习模型,该模型能够比传统方法更早地为个人提供有关其心理健康的洞察。
- 你就是你发的推文 - 通过 Twitter 使用检测社交媒体中的抑郁症
- 抑郁症的早期检测:社交网络分析与随机森林技术 - 原始论文,A Coruna 大学。
- 使用机器学习技术从社交网络数据中检测抑郁症
2. 使用神经网络进行体育比赛视频到文本的摘要
照片由 Aksh yadav 提供,来源于 Unsplash。
所以这个项目的想法基本上是基于从体育比赛视频中提取精确的摘要。有一些体育网站会介绍比赛的精彩瞬间。虽然已经提出了各种模型来进行提取式文本摘要,但神经网络的效果最好。一般来说,摘要指的是以简洁的形式呈现信息,集中在传达事实和信息的部分,同时保持其重要性。
自动创建游戏视频的概要带来了区分游戏中精彩时刻或亮点的挑战。
因此,可以使用一些深度学习技术,如 3D-CNN(三维卷积网络)、RNN(递归神经网络)、LSTM(长短期记忆网络),以及通过将视频划分为不同部分并应用 SVM(支持向量机)、NN(神经网络)和 k-means 算法来实现。
为了更好地理解,请详细参考附带的文章。
- 使用迁移学习进行体育视频场景分类 - 本文提出了一种新颖的体育视频场景分类方法。
3. 使用 CNN 解决手写方程
照片由Antoine Dautry在Unsplash拍摄。
在所有问题中,手写数学表达式识别是计算机视觉研究领域中最令人困惑的问题之一。你可以通过手写数字和数学符号训练手写方程求解器,使用卷积神经网络(CNN)和一些图像处理技术来实现。开发这样的系统需要用数据训练我们的机器,使其在学习和进行所需预测方面熟练。
请参考以下附带的文章以便更好地理解。
- 使用卷积神经网络的手写方程求解器
- vipul79321/手写方程求解器 - 使用 CNN 的手写方程求解器。方程可以包含 0-9 的任何数字和符号。
- 计算机视觉—自动评分手写数学答卷 - 将手写在纸上的数学方程求解步骤数字化。
- 手写方程到 LaTeX
4. 使用 NLP 生成商务会议摘要
照片由Sebastian Herrmann在Unsplash拍摄。
是否曾经遇到过大家都想要摘要而不是完整报告的情况?我在学校和大学期间遇到过这种情况,我们花了很多时间准备完整的报告,但老师只有时间阅读摘要。
摘要已经成为应对数据过载问题的一种越来越有用的方式。从对话中提取信息可以具有非常好的商业和教育价值。这可以通过捕捉对话结构中的统计、语言和情感方面的特征来实现。
手动将报告转换为总结形式太费时间了,不是吗?但可以依靠Natural Language Processing (NLP)技术来实现这一点。
使用深度学习的文本摘要可以理解整个文本的上下文。对于需要快速总结文档的我们来说,这不就是梦想成真吗!
请参考下面附上的文章以便更好地理解。
- 使用 Python 深度学习进行文本摘要的综合指南 - “我不需要完整报告,只需给我结果摘要。”
- 理解文本摘要并在 Python 中创建自己的摘要生成器 - 摘要可以定义为生成简洁流畅的总结,同时保留关键信息的任务。
5. 面部识别以检测情绪并相应地推荐歌曲
照片来源:Alireza Attari 在 Unsplash 上。
人脸是个体身体的重要部分,特别在了解一个人的心理状态中发挥着重要作用。这消除了手动隔离或将歌曲分组到不同记录中的乏味任务,有助于根据个体的情感特征生成适当的播放列表。
人们往往根据自己的情绪和兴趣来听音乐。可以创建一个应用,通过捕捉面部表情为用户推荐歌曲。
计算机视觉是一个跨学科领域,帮助将数字图像或视频的高层次理解传达给计算机。计算机视觉组件可以用来通过面部表情判断用户的情感。
我发现了一些有趣且有用的 API。然而,我没有使用这些 API,但附在此处,希望它们对你有所帮助。
- 20+ 欣赏和担忧的情感识别 API | Nordic APIs - 如果企业能够随时使用技术感知情感,他们可以利用这一点进行销售。
6. 从太空探测器如开普勒拍摄的图像中寻找适宜居住的外行星
照片来源:Nick Owuor (astro.nic.visuals) 在 Unsplash 上。
在最近十年里,监测了超过一百万颗恒星以识别过境行星。手动解读潜在的系外行星候选者费时费力,并且容易出错,这些错误的后果很难评估。卷积神经网络适合在噪声较多的时间序列数据中以更高的精度识别类似地球的系外行星,比最小二乘法策略更为精准。
- 使用机器学习寻找系外行星 - 寻找我们太阳系之外的世界。
- 人工智能和 NASA 数据用于发现系外行星 - 我们的太阳系现在与其他星体环绕的行星数量并列最多。
7. 老旧损坏胶卷照片的图像重生
来源 Pikist。
我知道将旧损坏的照片恢复到原始状态是多么耗时且痛苦。因此,可以通过深度学习来完成这项工作,找出所有图像缺陷(裂缝、磨损、孔洞),并使用修补算法,根据周围的像素值发现缺陷,从而恢复和上色旧照片。
- 使用深度学习为旧图像上色和修复 - 用深度学习为黑白图像上色已成为现实应用的令人印象深刻的展示。
- 图像修补指南:使用机器学习编辑和修复照片中的缺陷
- 如何完全不使用数据集进行图像恢复
8. 使用深度学习生成音乐
照片由 Abigail Keenan 提供,刊登于 Unsplash。
音乐是各种频率的音调的组合。因此,自动音乐生成是用最少的人工干预编写一段短音乐的过程。最近,深度学习工程已成为程序化音乐生成的前沿技术。
- 使用深度学习生成音乐
- 如何使用 Keras 中的 LSTM 神经网络生成音乐 - 创建音乐的 LSTM 神经网络介绍
终极词
我知道建立一个出色的数据科学作品集确实很困难。但通过我上面提供的这些资源,你可以在这一领域取得超出平均水平的进展。这个集合是新的,这也为研究提供了机会。因此,数据科学的研究人员也可以选择这些想法进行工作,从而为数据科学家启动项目提供极大的帮助。此外,探索以前没人做过的方面也是很有趣的。虽然,这个集合实际上涵盖了从初级到高级的各种想法。
因此,我不仅会推荐给数据科学领域的新手,也会推荐给资深数据科学家。这将为你的职业生涯开辟许多新道路,不仅是通过项目,还包括通过新获得的网络。
这些想法展示了广泛的可能性,并激发你跳出思维定势。
对我和我的朋友们来说,学习因素、为社会增值以及未被探索的知识都很重要,某种程度上的乐趣也是必不可少的。因此,基本上,我喜欢做那些让我们获得大量知识并探索未知领域的项目。这也是我们在投入时间到这些项目时的主要关注点。
原文。经授权转载。
个人简介: Kajal Yadav 是一位自由撰稿人,专注于数据科学、初创公司和创业。她为多家出版物撰稿,同时与初创公司合作,制定内容营销策略。
相关:
我们的三大课程推荐
1. 谷歌网络安全证书 - 快速开启网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析技能
3. 谷歌 IT 支持专业证书 - 支持你的组织 IT 工作
更多相关信息
机器学习研究人员需要学习的 8 种神经网络架构
5 — 霍普菲尔德网络
非线性单元的递归网络通常很难分析。它们可以表现出许多不同的方式:稳定到一个稳定状态、振荡或沿着无法预测的混沌轨迹前进。一个霍普菲尔德网络由二进制阈值单元组成,这些单元之间有递归连接。1982年,约翰·霍普菲尔德意识到,如果连接是对称的,就存在一个全局能量函数。整个网络的每个二进制“配置”都有一个能量;而二进制阈值决策规则使网络趋向于这个能量函数的最小值。利用这种计算类型的一种巧妙方式是将记忆作为神经网络的能量最小值。使用能量最小值来表示记忆提供了一种内容可寻址的记忆。只需知道其内容的一部分即可访问该项。它对硬件损坏具有鲁棒性。
每次我们记住一个配置时,我们希望创建一个新的能量最小值。但是,如果两个相邻的最小值位于一个中间位置怎么办?这限制了霍普菲尔德网络的容量。那么我们如何增加霍普菲尔德网络的容量呢?物理学家喜欢这样一个想法:他们已经知道的数学可能解释大脑的工作原理。许多论文在物理学期刊上发表,讨论霍普菲尔德网络及其存储容量。最终,伊丽莎白·加德纳发现有一个更好的存储规则,能够充分利用权重的容量。她没有试图一次性存储向量,而是多次循环遍历训练集,并使用感知机收敛过程来训练每个单元,以便在给定该向量中所有其他单元的状态的情况下具有正确的状态。统计学家称这种技术为“伪似然”。
霍普菲尔德网络还有另一种计算作用。我们可以用它来构建对感官输入的解释,而不是用来存储记忆。输入由可见单元表示,解释由隐藏单元的状态表示,而解释的糟糕程度由能量表示。
6 — 玻尔兹曼机网络
玻尔兹曼机 是一种随机递归神经网络。它可以看作是Hopfield网的随机生成对等物。它是最早能够学习内部表示的神经网络之一,能够表示和解决困难的组合问题。
玻尔兹曼机学习算法的学习目标是最大化玻尔兹曼机对训练集中的二进制向量分配的概率的乘积。这等同于最大化玻尔兹曼机对训练向量分配的对数概率之和。这也等同于最大化我们得到准确N个训练样本的概率,如果我们进行以下操作:1)让网络在没有外部输入的情况下收敛到其稳态分布N次;2)每次采样一次可见向量。
Salakhutdinov 和 Hinton 在2012年提出了一种高效的小批量学习程序用于玻尔兹曼机,详见 Salakhutdinov 和 Hinton 在2012。
-
对于正向阶段,首先将隐藏单元的概率初始化为0.5,然后将数据向量固定在可见单元上,然后使用均值场更新并行更新所有隐藏单元直到收敛。在网络收敛后,记录每一对连接单元的PiPj,并对小批量中的所有数据取平均。
-
对于负向阶段:首先保持一组“虚拟粒子”。每个粒子都有一个作为全局配置的值。然后依次更新每个虚拟粒子中的所有单元几次。对于每一对连接单元,计算SiSj在所有虚拟粒子中的平均值。
在一般的玻尔兹曼机中,单位的随机更新需要按顺序进行。有一种特殊的架构允许交替的并行更新,这种更新方式更高效(层内没有连接,层间没有跳跃连接)。这种小批量处理使玻尔兹曼机的更新更加并行。这被称为深度玻尔兹曼机(DBM),它是一个具有许多缺失连接的通用玻尔兹曼机。
2014年,Salakhutdinov 和 Hinton 提出了对其模型的另一种更新,称为 限制玻尔兹曼机。他们限制了连接性以简化推理和学习(仅有一层隐藏单元且隐藏单元之间没有连接)。在RBM中,当可见单元被固定时,只需一步即可达到热平衡。
另一种高效的小批量学习程序如下:
-
对于正向阶段,首先将数据向量固定在可见单元上。然后计算每对可见单元和隐藏单元的的确切值。对于每一对连接单元,计算在小批量数据中的平均值。
-
对于负阶段,也保持一组“虚拟粒子”。然后使用交替并行更新更新每个虚拟粒子几次。对于每对连接的单元,平均所有虚拟粒子的 ViHj。
7 — 深度信念网络
反向传播被认为是人工神经网络中计算每个神经元在处理一批数据后错误贡献的标准方法。然而,使用反向传播存在一些主要问题。首先,它需要标记的训练数据,而几乎所有的数据都是未标记的。其次,学习时间不具备良好的扩展性,这意味着在具有多个隐藏层的网络中,它非常缓慢。第三,它可能会陷入较差的局部最优解,因此对于深度网络,它们离最优解还很远。
为了克服反向传播的局限性,研究人员考虑使用无监督学习方法。这有助于保持使用梯度方法调整权重的效率和简便性,同时还用于建模感官输入的结构。特别是,他们调整权重以最大化生成模型生成感官输入的概率。问题是我们应该学习什么样的生成模型?它可以是类似于玻尔兹曼机的基于能量的模型吗?或者是由理想化神经元组成的因果模型?还是两者的混合?
信念网络 是由随机变量组成的有向无环图。使用信念网络,我们可以观察到一些变量,并希望解决两个问题:1)推理问题:推断未观察到的变量的状态;2)学习问题:调整变量之间的交互,使网络更有可能生成训练数据。
早期的图形模型使用专家定义图的结构和条件概率。那时,图的连接稀疏;因此,研究人员最初专注于进行正确的推理,而不是学习。对于神经网络,学习是核心,手工编写知识并不可取,因为知识来自于学习训练数据。神经网络并不以可解释性或稀疏连接为目标来简化推理。尽管如此,信念网络也有神经网络版本。
有两种类型的生成神经网络,由随机二进制神经元组成:1)基于能量的,其中我们使用对称连接连接二进制随机神经元以获得玻尔兹曼机;2)因果,其中我们在有向无环图中连接二进制随机神经元以获得 sigmoid 信念网络。这两种类型的描述超出了本文的范围。
8 — 深度自编码器
最后,让我们讨论一下深度自编码器。由于以下几个原因,它们一直被认为是进行非线性降维的一个非常好的方法:它们提供了双向灵活映射。学习时间在训练案例数量上是线性的(或更好)。最终的编码模型相当紧凑且快速。然而,使用反向传播来优化深度自编码器非常困难。由于初始权重较小,反向传播的梯度会消失。我们现在有更好的优化方法;可以使用无监督的逐层预训练,或者像在Echo-State Nets中那样小心初始化权重。
对于预训练任务,实际上有3种不同类型的浅层自编码器:
-
RBM作为自编码器:当我们用一步对比散度训练RBM时,它试图使重建看起来像数据。它像自编码器,但通过使用隐藏层中的二进制活动进行强正则化。当用最大似然训练时,RBM不像自编码器。我们可以用一堆浅层自编码器替代用于预训练的RBM堆叠;然而,如果浅层自编码器通过惩罚平方权重进行正则化,则预训练的效果(对于后续的辨别)不如前者。
-
去噪自编码器:这些通过将输入向量的许多组件设置为0(类似于dropout,但用于输入)来添加噪声。它们仍需重建这些组件,因此必须提取能够捕捉输入之间相关性的特征。如果我们使用一系列去噪自编码器,预训练效果非常好。它的效果与使用RBM进行预训练一样好,甚至更好。评估预训练也更简单,因为我们可以轻松计算目标函数的值。它缺乏RBM所提供的优美变分界限,但这仅仅是理论上的兴趣。
-
收缩自编码器:另一种对自编码器进行正则化的方法是尽可能使隐藏单元的活动对输入不敏感;但它们不能忽视输入,因为它们必须重建输入。我们通过惩罚每个隐藏活动相对于输入的平方梯度来实现这一点。收缩自编码器在预训练中效果非常好。编码往往具有这样的特性:只有一小部分隐藏单元对输入的变化敏感。
- 简而言之,现在有许多不同的方法可以进行逐层特征预训练。对于没有大量标记案例的数据集,预训练有助于后续的判别学习。对于非常大、标记的数据集,通过无监督预训练初始化用于监督学习的权重并非必要,即使是对于深度网络。预训练曾是初始化深度网络权重的首选方法,但现在有其他方法。不过,如果我们将网络做得更大,我们将需要再次进行预训练!
最后的收获
-
神经网络是有史以来最美妙的编程范式之一。在传统编程方法中,我们告诉计算机做什么,将大问题拆分成许多小的、明确定义的任务,计算机可以轻松完成。相比之下,在神经网络中,我们不告诉计算机如何解决问题。相反,它从观察数据中学习,找出自己解决当前问题的方法。
-
今天,深度神经网络和深度学习在计算机视觉、语音识别和自然语言处理等许多重要问题上表现出色。它们正在被谷歌、微软和 Facebook 等公司大规模部署。
-
我希望这篇文章能帮助你学习神经网络的核心概念,包括深度学习的现代技术。你可以从我的 GitHub 仓库获取我为 Dr. Hinton 的 Coursera 课程所做的所有讲义、研究论文和编程作业。祝你学习顺利!
简介:James Le 目前正在申请美国的计算机科学硕士项目,计划于2018年秋季入学。他的研究方向将集中在机器学习和数据挖掘方面。与此同时,他还在担任自由职业的全栈网页开发人员。
原文。经授权转载。
相关:
- 我们的前三大课程推荐
1. 谷歌网络安全证书 - 快速进入网络安全职业生涯。
2. 谷歌数据分析专业证书 - 提升你的数据分析水平
3. Google IT支持专业证书 - 支持你的组织在IT方面
了解更多相关话题
-
成功数据科学家的5个特征
图像块以获取更多数据,并使用图像的左右反射。在测试时,结合来自10个不同图像块的意见:四个224 x 224的角落图像块加上中央的224 x 224图像块,以及这5个图像块的反射。
- 使用“dropout”对全连接层的权重进行正则化(这些层包含大部分参数)。Dropout意味着在每个训练样本中,随机去除一半的隐藏单元。这防止了隐藏单元过度依赖其他隐藏单元。
在硬件要求方面,Alex使用了非常高效的卷积网络实现,运行在2块Nvidia GTX 580 GPU上(超过1000个快速的小核心)。这些GPU非常适合矩阵乘法,并且具有非常高的内存带宽。这使得他能够在一周内训练网络,并且在测试时快速结合来自10个图像块的结果。如果我们能快速地通信状态,我们可以将网络分布到许多核心上。随着核心变得便宜,数据集变得更大,大型神经网络将比传统计算机视觉系统改进得更快。
3 — 递归神经网络
要理解 RNNs,我们需要对序列建模有一个简要的概述。在将机器学习应用于序列时,我们通常希望将输入序列转换为位于不同领域的输出序列;例如,将一系列声音压力转换为一系列单词身份。当没有单独的目标序列时,我们可以通过尝试预测输入序列中的下一个项来获得教学信号。目标输出序列是输入序列的前进 1 步。这似乎比尝试从其他像素预测图像中的一个像素,或从图像的其余部分预测图像中的一个补丁自然得多。预测序列中的下一个项模糊了监督学习和无监督学习之间的区别。它使用了为监督学习设计的方法,但不需要单独的教学信号。
无记忆模型 是处理这一任务的标准方法。特别是,自回归模型可以从固定数量的前一个项中预测序列中的下一个项,使用“延迟抽头”;前馈神经网络是广义的自回归模型,使用一个或多个层的非线性隐藏单元。然而,如果我们给生成模型一些隐藏状态,并且如果我们赋予这个隐藏状态自己的内部动态,我们就会得到一种更有趣的模型:它可以在其隐藏状态中存储信息很长时间。如果这些动态是嘈杂的,并且它们从隐藏状态生成输出的方式也是嘈杂的,我们永远无法知道其确切的隐藏状态。我们能做的最好的是推断隐藏状态向量空间上的概率分布。这种推断仅对两种类型的隐藏状态模型是可行的。
递归神经网络 非常强大,因为它们结合了两个特性:1) 分布式隐藏状态,使它们能够高效地存储大量关于过去的信息,以及 2) 非线性动态,使它们能够以复杂的方式更新隐藏状态。只要有足够的神经元和时间,RNNs 可以计算出任何计算机能计算的东西。那么 RNNs 可以表现出什么样的行为呢?它们可以发生振荡,可以收敛到点吸引子,可以表现得混乱不堪。它们还有可能学习实现许多小程序,每个程序捕捉一个知识点并并行运行,相互作用产生非常复杂的效果。
然而,RNN的计算能力使得它们非常难以训练。由于梯度爆炸或消失问题,训练RNN相当困难。当我们通过多层进行反向传播时,梯度的幅度会发生什么?如果权重很小,梯度会指数级缩小。如果权重很大,梯度会指数级增长。典型的前馈神经网络可以应对这些指数效应,因为它们只有少量隐藏层。另一方面,在训练长序列的RNN中,梯度很容易爆炸或消失。即使初始权重良好,也很难检测到当前目标输出依赖于许多时间步之前的输入,因此RNN在处理长距离依赖时会遇到困难。
学习RNN的有效方法有4种:
-
长短期记忆:将RNN构建为旨在长期记忆的模块。
-
Hessian Free Optimization:通过使用一种可以检测到微小梯度但曲率更小的复杂优化器来处理梯度消失问题。
-
回声状态网络:非常仔细地初始化输入->隐藏层和隐藏层->隐藏层以及输出->隐藏层的连接,使得隐藏状态拥有一个巨大的、弱耦合的振荡器储备,这些振荡器可以通过输入选择性地驱动。
-
良好的动量初始化:像在回声状态网络中那样初始化,然后使用动量学习所有的连接。
4 — 长短期记忆网络
Hochreiter & Schmidhuber (1997) 通过建立被称为长短期记忆网络的模型解决了使RNN长期记忆的难题(如数百个时间步骤)。他们设计了一个使用逻辑单元和线性单元以及乘法交互的记忆单元。当“写入”门开启时,信息会进入单元。信息会在“保持”门开启时留在单元中。通过打开“读取”门,可以从单元中读取信息。
阅读草书是一项RNN的自然任务。输入是笔尖的(x,y,p)坐标序列,其中p表示笔是上还是下。输出是字符序列。Graves & Schmidhuber (2009) 显示带有LSTM的RNN目前是阅读草书的最佳系统。简言之,他们使用了一系列小图像作为输入,而不是笔坐标。
更多相关内容
2020 年我作为数据科学家学习的 8 种新工具
原文:
www.kdnuggets.com/2021/01/8-new-tools-learned-data-scientist-2020.html
评论
作者:Ben Weber,Zynga 的杰出数据科学家
我们的前三大课程推荐
1. Google 网络安全证书 - 快速进入网络安全职业轨道
2. Google 数据分析专业证书 - 提升你的数据分析水平
3. Google IT 支持专业证书 - 支持你的组织的 IT
尽管 2020 年是一个充满挑战的年份,我还是利用远程工作的过渡期探索了新的工具,以扩展我的数据科学技能。这一年我从数据科学家转型为应用科学家,不仅负责原型设计数据产品,还要将这些系统投入生产并监控系统健康。我之前有使用 Docker 进行应用程序容器化的经验,但没有经验将容器部署为可扩展、负载均衡的应用程序。虽然我在 2020 年学到的许多技术更常与工程相关,而不是数据科学,但学习这些工具对于构建端到端的数据产品是有帮助的。这对于在初创公司工作的数据科学家尤为重要。以下是我在 2020 年学到的技术:
-
MLflow
-
Kubernetes
-
NoSQL
-
OpenRTB
-
Java Web 框架
-
HTTPS
-
负载均衡
-
日志记录
我将在下面详细介绍这些主题。使用这些不同工具的主要动机是为了建立一个程序化广告的研究平台。我负责构建和维护一个实时数据产品,需要探索新的工具来完成这个项目。
MLflow
MLflow 是一个开源框架,用于模型生命周期管理。项目的目标是提供支持机器学习模型开发、服务和监控的模块。我在 2020 年开始使用其中的两个组件:MLflow 跟踪和模型注册表。跟踪模块使数据科学家能够记录不同模型管道的性能并可视化结果。例如,可以尝试不同的特征缩放方法、回归模型和超参数组合,并查看哪个管道配置产生了最佳结果。我在 Databricks 环境中使用了这个功能,它提供了有用的模型选择可视化工具。我还开始使用 MLflow 中的注册表模块来存储模型,其中一个训练笔记本训练并存储模型,而一个模型应用笔记本检索和应用模型。模型注册表中的一个有用功能是能够在部署之前对模型进行分阶段处理。注册表可以维护不同的模型版本,并提供在发现问题时回退到先前版本的能力。在 2021 年,我计划探索 MLFlow 中的更多模块,包括模型服务。
Kubernetes
Kubernetes 是一个开源的容器编排平台。它使数据科学家能够将容器部署为可扩展的 Web 应用程序,并提供多种配置选项用于在 Web 上暴露服务。虽然从头开始设置 Kubernetes 部署可能相当复杂,但云平台提供了托管版本的 Kubernetes,使得上手这个平台变得容易。我对希望学习 Kubernetes 的数据科学家的建议是使用 Google Kubernetes Engine (GKE),因为它提供了快速的集群启动时间,并具有出色的开发者体验。
为什么 Kubernetes 如此有用?因为它使团队能够将应用程序开发和应用程序部署问题分开。数据科学家可以构建一个模型服务容器,然后将其交给工程团队,后者将该服务暴露为可扩展的 Web 应用程序。在 GCP 中,它还与负载均衡和网络安全系统无缝集成。然而,使用托管服务如 GKE,可以降低使用 Kubernetes 的门槛,数据科学家应当亲自体验这个平台。这样可以使数据科学家能够构建端到端的数据产品。
NoSQL
尽管我在数据科学职业生涯中使用了各种数据库,但直到 2020 年我才首次探索 NoSQL 数据库。NoSQL 包括实现低延迟操作的键值存储数据库。例如,Redis 是一个内存数据库,提供亚毫秒级的读取性能。这种性能在构建实时系统时非常有用,你需要在数据通过网络服务接收时更新用户档案。例如,你可能需要更新描述用户活动的特征向量的属性,该特征向量作为输入传递给流失模型,并在 HTTP POST 命令的上下文中应用。为了构建实时系统,数据科学家需要亲自使用 NoSQL 数据库。学习诸如 Redis 这样的技术时,使用mock库来测试 API 在部署到云端之前是很有帮助的。
OpenRTB
OpenRTB 是一种用于实时广告拍卖和广告投放的规范。该规范被用于如 Google 广告交换等交易所,以连接销售广告库存的出版商与希望投放广告的买家。我使用该协议实现了一个程序化用户获取的研究平台。虽然该规范对数据科学的广泛适用性不强,但对数据科学家学习如何构建能够实现标准化接口的系统非常有用。以 OpenRTB 为例,这涉及到构建一个接收带有 JSON 有效负载的 HTTP POST 请求并返回带有定价细节的 JSON 响应的网络服务。如果你有兴趣快速上手 OpenRTB 规范,Google 提供了一个protobuf实现。
Java Web Frameworks
我决定用 Java 编写 OpenRTB 研究平台,因为我对这种语言最为熟悉。然而,Rust 和 Go 都是构建 OpenRTB 系统的绝佳替代选择。由于我选择了 Java,我需要选择一个用于实现应用程序端点的 Web 框架。虽然我在十多年前使用 Jetty 库来构建简单的 Java Web 应用程序,但我决定根据基准测试探索新的工具。我从Rapidoid库开始,它是一个用于用 Java 构建 Web 应用程序的轻量级和快速框架。然而,当我开始在响应 Web 请求时添加对 Redis 的调用时,我发现需要将 Rapidoid 从非托管模式转换为托管模式。我接着尝试了Undertow,它支持阻塞 IO,并发现它在我的基准测试中表现优于 Rapidoid。虽然数据科学家通常不使用 Java 编写代码,但学习如何尝试不同的 Web 框架,例如选择 gunicorn 和 uWSGI 来部署 Python Web 服务,是很有用的。
HTTPS
实施 OpenRTB 协议现在需要通过安全的 HTTP 服务流量。为 Web 服务启用 HTTPS 涉及通过 DNS 将 Web 服务设置为命名端点,并使用签名证书来建立端点的身份。确保 GCP 上托管的 GKE 中的端点安全相对简单。一旦服务通过节点端口和服务入口暴露出来,你需要为服务的 IP 地址设置一个 DNS 条目,然后使用 GCP 托管的证书来启用 HTTPS。
对于数据科学家来说,学习设置 HTTPS 端点非常有用,因为这涉及到保护服务的细微差别。如果不需要端到端 HTTPS,比如在 OpenRTB 的情况下,其中 HTTP 可以在负载均衡器和 Kubernetes 集群中的 pods 之间内部使用,那么部署就会更容易。如果需要端到端 HTTPS,比如使用 OAuth 的 Web 服务,那么 Kubernetes 配置会稍微复杂一些,因为 pods 可能需要在与服务 Web 请求的端口不同的端口上响应健康检查。我最后提交了一个 PR 来解决与此相关的 Plotly Dash 应用程序中的一个问题。
负载均衡
为了扩展到 OpenRTB 量级的 Web 流量,我需要使用负载均衡来处理每秒超过 10 万个 Web 请求 (QPS)。Kubernetes 提供了扩展服务 Web 请求的 pods 数量的基础设施,但还需要以一种均匀分配请求的方式配置集群。Kubernetes 有一个 open issue 导致使用长连接时 pods 负载不均,这是 OpenRTB 系统推荐的配置。我使用了 container native 的负载均衡功能来缓解这个问题。对负载均衡进行实际操作在大型组织中对数据科学家来说并不常见,但对于拥有高请求量的端到端数据产品的初创公司或团队来说,这是一个有用的技能。
日志记录
部署 Web 应用程序还涉及到为系统设置监控,以确定是否出现任何问题。在构建 GCP 应用程序时,StackDriver 提供了一个用于日志消息、报告自定义指标和设置警报的托管系统。我能够利用这个系统来监控正常运行时间,并在发生事件时向 Slack 和 SMS 发送警报。对数据科学家来说,实际操作日志库非常有用,以确保部署到云中的系统按预期运行。
结论
在 2020 年,我学习了几种通常与工程角色相关的技术。作为一名数据科学家,我出于必要学习了这些工具,以建立和维护端到端系统。虽然许多这些技术在数据科学中并不广泛适用,但应用科学家的角色日益增长,正在对拥有更广泛技术栈经验的数据科学家产生需求。
简介: 本·韦伯 是 Zynga 的杰出数据科学家,也是《数据科学生产》一书的作者。
原文。转载已获许可。
相关:
-
MLOps 正在改变机器学习模型的开发方式
-
轻松数据科学的 5 种工具
-
每位懒散的全栈数据科学家应该使用的 5 种最有用的机器学习工具