有没有必要把机器学习算法自己实现一遍？
机器学习算法的实现分为两种： 以及 相比于调包，我想题主大概指的是第二种，也就是从数学底层原理出发，把整个算法的流程从0到1直接实现一遍。此时，编程语言只是载体，一般用到的包括python/Java/C++甚至Matlab。 如果你是学生/研究人员，且时间足够，可以自己实现一遍。但不要为了实现算法而写代码， @微调 说的很好，要警惕掉到“用忙碌而逃避困难“的陷阱当中去，更好的缓解焦虑的方法是应用算法，去解决具体问题。所以，去kaggle或者天池上找一个比赛/一份开放数据集，或者在自己的课题中设定一个可被算法解决的问题，然后一步步去实现，对你的算法学习有很大帮助。 如果你是从业者/交叉领域应用者，那么请尽量避免从底层往高层走的算法路径。说到底，机器学习算法就是数学在应用领域的扩展和普及，说直白点，现在AI的大火让数学这个古老学科焕发了第二春，为啥以前不“春”呢？因为很多数学相关的理论、应用都需要非常底层的知识铺垫，才能由特定领域的特定数学家应用到对应问题上，时间成本太高，比如航天轨道计算、天文探测。这在学术界或许没什么，但是在大众化的市场中是不被接受的。所以，从高层往底层走，走到合适的地方就停下来，再返回底层专注于应用，是更适合的方法。 我之前写过一个算法学习的4大步骤，放在这里也给大家一个参考： 第一步，即初步了解，是对算法的基本构成，大致用途以及基础假设有一个模糊的认识，比如从某某博客中看到一个不认识的算法，知道它主要是用于分类，基于线性模型，要求独立同分布等。 第二步是教材学习，就是说当你听到这个算法的大致意思后，去寻找教材，可以是一本书，一篇博客或是知乎的一个回答，进一步了解这个算法的原理和应用场景，如算法由Logit构成，属于广义线性模型，在定义域内充分饱和等，可以用于二分类和多分类。 第三步，深入原理，此时经过一定的教材，你已经完全了解了算法的流程，知道它为什么叫逻辑回归，以及逻辑回归的作用甚至衍生算法，但对其基础原理还是一知半解，不知道Logit函数怎么来的，为什么要用负对数似然函数做LOSS，以及什么时候不该用LR等。这一步往往是最难的一步，需要大量的时间和思考，来充分理解并推导算法的组成。 对于大部分工程师来说，这一步取决于项目的时间宽裕程度（往往都是跳过的），但对于研究人员或是有心深入的人，却是必不可少的地基。吃透这一步，不管是面试还是科研，都是成为你胸有成竹的不二法门。 最后一步，自我实践，顾名思义就是通过代码将所学算法实现，现如今python和tensorflow的封装API以及各种库、包已经十分完善，我个人的建议是，除非是算法底层架构开发方向的人员，否则没有必要从0开始编写一个算法（比如在某本中文教材中，作者连numpy或pandas都不用），适当的借助工具，如可以让自己的学习经验更加的实用化，同时也加强对算法的理解。当然，在这个专栏的部分文章中，针对基础性较强的一些算法，比如逻辑回归或KNN，从底层逻辑一步步实现也是必要的，届时也会给出对应代码供大家参考。 第2、3、4步并非固定顺序，也不是走过一次就可以高枕无忧。实际上，很多时候它们是打乱的，也是迭代的，比如早上的一个项目要临时迁移算法，那么下午之前你就要完成第一步和第四步，在初步完成后，或许你会花一些时间来把第、二三步走一遍。而迭代的循环这个学习链条，可以加固算法知识和理解。