我希望早点知道的数据科学建议

原文:towardsdatascience.com/data-science-advice-i-wish-i-knew-sooner-5210044e1118


学习和实践数据科学可能会很有挑战性——相信我,我已经做了超过四年了!我处理过所有复杂的数学方程和复杂的代码。然而,我现在知道如何更好地使用我在路上学到的技术和建议来处理它们,这些我将在这篇文章中与你分享。

cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FxWfpq1s2hrs%3Ffeature%3Doembed&display_name=YouTube&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DxWfpq1s2hrs&image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FxWfpq1s2hrs%2Fhqdefault.jpg&key=a19fcc184b9711e1b4764040d3dc5c07&type=text%2Fhtml&schema=youtube

如何处理数学

这是 Bellman 方程,它是强化学习的核心,也是机器学习中最激动人心的领域之一。

https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/91471f5dca234f197e485c8dd0b3ec4e.png

作者用 LaTeX 编写的 Bellman 方程。

让我们说实话。

如果你第一次看到这个,你根本不知道发生了什么——除非你是爱因斯坦级别的天才!

课程、大学学位和在线资源经常向你抛出方程来解释机器学习算法是如何工作的。这种数学“技术上”以非常理论化的方式解释了正在发生的事情,但离直观性还远。

我记得当我刚开始学习神经网络时,所有这些多下标和多上标到处飞。我很难理解发生了什么,这真的让我失去了继续学习的动力。

虽然我非常希望数据科学家学习背后的数学,但除非你完全理解正在发生的事情,否则这样做是没有意义的。

当你遇到一个方程时,不要盯着它,希望有一个顿悟的时刻。相反,退后一步,思考它的目的。这种方法可以显著提高你对机器学习算法的理解。

当数学家和科学家制定他们的理论时,他们从一个想法和一个概念开始,然后将其转化为数学框架。而不是反过来。

你必须思考,“这个方程试图做什么?”

一种对我有效的方法是参与实践练习。例如,当我学习反向传播时,我在纸上手动执行它,甚至没有考虑总体方程(甚至写了一篇博客关于它!)。这种动手方法可以显著提高你对算法过程和原因的理解。

这将使算法的过程和原因深入人心,我可以更好地将其转化为数学公式。

总结这个观点的最好方式是问“为什么”以及数学试图做什么。

思考即是编码

我相信我们都有过这样的经历,至少我是,观看视频教程,有人使用 PyTorch 实现他们的复杂变压器模型,看起来非常简单。你会想,“是的,我也能做到!”

5 小时后,你的代码只有模块的导入部分…

# An example of my python file!
import torch
import help from me

编码是困难的,如果你之前不知道这一点的话。但是,当你将编码与数据科学的复杂性结合起来时,难度会大大增加。

大多数编码专业人士编写的代码比你想象的要少。说实话,我真正花在编码上的时间可能只有 5%左右。大部分时间都花在思考如何实际编码以及最佳编码方式上。我在脑海中运行了许多不同的实现和迭代,可能只有大约 1/20 最终会在我的 IDE 中写出来。

然后,你最终需要调试它,因为第一次尝试很可能会有问题,这将需要更多的时间!

你通常会在调试你所写的内容上花费更多的时间,而不是实际编写它!

然而,我希望有人告诉我,思考你将要编写的代码不仅仅是实际编码的前奏。它是编码过程中的一个关键部分,本身也是一种编码形式。你不仅仅是盯着 IDE,而是在程序化地使用你的大脑,并通过迭代运行各种编码实现。

这种方法有助于在编码时减轻压力,并防止我急于在屏幕上打出东西。事实上,它使我的代码更好,因为我花更多的时间思考它,而不是盲目地敲击键盘。

随着时间的推移,随着你在特定场景中学习正确的实现和模式,你的思考和编程将变得更加流畅和迅速,但这一切都关于实践和获得足够的练习。

相信我,没有人会连续 8 个小时不停地敲击键盘,屏幕上滚动着绿色的数字,就像你在电影中看到的那样!

拆分大型代码库

在我的第一份数据科学工作中,我记得收到一个 jira 工单,要求将训练模型对象从train.py文件提取到 repo/project 的main()函数入口点。

就像你们中的许多人一样,我面临着解读第一个生产标准代码库的艰巨任务。更糟糕的是,train.py文件被埋藏在入口点大约 10 个函数深的地方!

到今天为止,我真心不喜欢嵌套函数和数据结构!

我立刻感到不知所措,并感到真正的冒名顶替综合症(绝对不是第一次或最后一次!)。

然而,在过去的三年里,我不仅磨练了我的技术技能,还培养了我处理新的数据科学或机器学习代码库的系统方法。

这些是我采取的步骤,它们极大地加速了我对代码库的理解:

  • 我首先需要一幅清晰的输入和输出图景——哪些数据正在进入以及从哪里来,哪些数据正在被推送以及它将去往何方。

  • 我会找到main()入口点,了解这个函数中有什么输入,以及它对这些输入做了什么。

  • 然后我追踪到模型被训练的地方,记录传递的输入。这通常在train.py文件中。

  • 然后我运行模型文件并设置调试器,这样我就不能精确地检查所有变量、函数和类中正在发生的事情。

这种从外到内的方法使我能够理解代码库的全局视图,同时将我的知识集中在正在构建的特定模型上,这是我们作为数据科学家主要工作和关心的事情。

向专家请教

我认为,对于学习和理解新主题来说,最被低估的技术之一就是简单地向别人提问。作为一个社交物种,我们从分享知识中获得了快乐,尤其是在我们热衷的领域。

以我的工作场所为例。我们这里有预测、优化、推荐系统、深度学习等多个领域的专家。每当我对这些领域的任何问题有疑问时,我都会联系对这个领域了解最多的人,并与他们简单聊天。

或者,比如说我想提高我的编码能力或云计算知识;然后我会安排时间与软件工程师见面,审查这些内容,并让他们对我的代码以及我可以改进的地方提出反馈。

如果我们在办公室,那就更好了,因为我可以过去占用他们 5 分钟的时间来讨论我的问题。

最好的部分是,这基本上是免费的。你从知识渊博的人那里学习,但没有任何费用,就像大学学位或某些在线课程一样!你既在学习也在赚钱,这是许多人的目标。

我发现,与其在互联网上搜索答案,不如直接向别人请教,这样往往更加高效,因为你甚至可以提出后续问题。你可以真正深入挖掘并探索主题,而且与人交谈也更加有趣!

我过去常常担心占用别人的时间,甚至通过不断提问来打扰他们。为了避免这种情况,你可以在他们的日历中添加一个会议,他们如果需要的话,可以随时拒绝或重新安排。

如何真正掌握数据科学

我必须接受的最終秘密是學習數據科學需要時間和持續的努力。

我收到許多人的訊息,他們問我是否可以在幾個月內學習數據科學。雖然你可能能夠獲得你的第一個數據科學職位,但你絕對不會在那個時間內對數據科學有深入的了解。這基本上是不可能的。

這不是要讓你灰心,而是要設定期望,並對事實保持誠實,即這確實是一個相對較長的過程,你不應該期待一切都能在第一次就成功。

由於其範圍廣泛,我們甚至現在還能看到三年學士學位在數據科學方面的學位

思考我自己的數據科學之旅,我在這個領域已經待了約四年,其中三年半是全職工作的經驗。然而,我對於像強化學習、轉換器以及 LLMs 這樣的“炫酷”主題,只剛剛觸及皮毛。

在我至今的學習旅程中,我優先建立了統計學、經典機器學習和數學優化的堅實基礎。這些是我認為每個有志於成為數據科學家的應該掌握的柱石,它們讓你未來在面對更複雜的主題時能夠更快地進行學習。

我花時間學習這些東西,並且在大多數情況下,寫了關於它們的博客文章(費曼技巧實際操作!)!我一次專注於一個主題,並且沒有被不斷釋出的所有“新”進步所分心。

所以下次當你感到壓力並且在第一次讀過後還不理解反向傳播的原理時,請放鬆並認識到這只是過程的一部分,讓時間做它該做的事!

如著名的企業家和投資者**Naval Ravikant __**所說:

不是 10,000 小時,而是 10,000 次迭代。

cdn.embedly.com/widgets/media.html?type=text%2Fhtml&key=a19fcc184b9711e1b4764040d3dc5c07&schema=twitter&url=https%3A//twitter.com/naval/status/1594923336043069441%3Fref_src%3Dtwsrc%255Etfw%257Ctwcamp%255Etweetembed%257Ctwterm%255E1594923336043069441%257Ctwgr%255E280e86329e1a925f62bb4613774bac7976e28ce0%257Ctwcon%255Es1_%26ref_url%3Dhttps%253A%252F%252Fcdn.embedly.com%252Fwidgets%252Fmedia.html%253Ftype%253Dtext2Fhtmlkey%253Da19fcc184b9711e1b4764040d3dc5c07schema%253Dtwitterurl%253Dhttps3A%252F%252Ftwitter.com%252Fnaval%252Fstatus%252F15949233360430694413Flang3Den-GBimage%253D&image=

拥有这种心态最终会在我学习新主题时减轻压力,让整个过程变得更加有趣!

摘要及进一步思考

我希望这些技巧和框架能帮助到作为实践者或有志于成为数据科学家的你。这五件事对我非常有效,我相信至少有一件会对你有所帮助。

另一件事!

我提供一对一的辅导通话,我们可以聊任何你需要的事情——无论是项目、职业建议,还是只是确定你的下一步。我在这里帮助你前进!

[1:1 Mentoring Call with Egor Howell]

职业指导、工作建议、项目帮助、简历审查topmate.io](https://topmate.io/egorhowell/1203300)

与我联系

内容概要:本文介绍了一个基于MATLAB实现的无人机三维路径规划项目,采用蚁群算法(ACO)与多层感知机(MLP)相结合的混合模型(ACO-MLP)。该模型通过三维环境离散化建模,利用ACO进行全局路径搜索,并引入MLP对环境特征进行自适应学习与启发因子优化,实现路径的动态调整与多目标优化。项目解决了高维空间建模、动态障碍规避、局部最优陷阱、算法实时性及多目标权衡等关键技术难题,结合并行计算与参数自适应机制,提升了路径规划的智能性、安全性和工程适用性。文中提供了详细的模型架构、核心算法流程及MATLAB代码示例,涵盖空间建模、信息素更新、MLP训练与融合优化等关键步骤。; 适合人群:具备一定MATLAB编程基础,熟悉智能优化算法与神经网络的高校学生、科研人员及从事无人机路径规划相关工作的工程师;适合从事智能无人系统、自动驾驶、机器人导航等领域的研究人员; 使用场景及目标:①应用于复杂三维环境下的无人机路径规划,如城市物流、灾害救援、军事侦察等场景;②实现飞行安全、能耗优化、路径平滑与实时避障等多目标协同优化;③为智能无人系统的自主决策与环境适应能力提供算法支持; 阅读建议:此资源结合理论模型与MATLAB实践,建议读者在理解ACO与MLP基本原理的基础上,结合代码示例进行仿真调试,重点关注ACO-MLP融合机制、多目标优化函数设计及参数自适应策略的实现,以深入掌握混合智能算法在工程中的应用方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值