停下来。
你现在正在实现一个机器学习算法吗?
为什么?
从头开始实现算法是我看到初学者犯的最大的错误之一。
在这篇文章中,你会发现:
让我们开始吧。
以下是我收到的一封电子邮件的摘录:
...我真的很挣扎 为什么我必须从头开始实现算法?
很多开发者似乎都陷入了这个挑战。
他们被告知或暗示:
算法必须 在使用之前实现。
或者那个:
你只能通过 实现算法来学习机器学习。
以下是我偶然发现的一些类似问题:
您不必从头开始实现机器学习算法。
这是传统上用于教授机器学习的自下而上方法的一部分。
将机器学习算法应用于一个问题并得到一个结果要比从零开始实现它要容易得多。
超级容易!
学习如何使用算法而不是实现算法不仅更容易,而且更有价值的技巧。一个你可以开始使用非常迅速地产生真正的影响的技巧。
应用机器学习可以挑选出许多低洼的成果。
您用来解决业务问题的算法需要快速和正确。
更复杂的非线性方法比线性方法需要更多的数据。
这意味着他们需要做很多工作,这可能需要很长时间。
算法需要快速处理所有这些数据。特别是在规模上。
这可能需要以最适合于底层库中的特定矩阵操作的方式重新解释在该方法下面的线性代数。
它可能需要专门的缓存知识来充分利用硬件。
在获得“hello world”实施后,这些并不是特别的技巧。这些是包含算法实施项目的工程挑战。
机器学习算法会给你一个结果,即使它们的实现是残缺的。
你得到一个数字。输出。预测。
有时预测是正确的,有时不是。
机器学习算法使用随机性。他们是随机算法。
这不仅仅是单元测试的问题,而是对技术有深入的了解,并设计案例来证明实现如预期的一样,并处理边缘案例。
你可能是一个优秀的工程师。
但是,与现成的实现相比,算法的“hello world”实现可能无法实现。
你的实现可能是基于教科书的描述,这意味着它将是幼稚和缓慢的。你可能有也可能没有专门的设计测试来确保你的实现的正确性。
开源库中的现成实现是为了速度和/或健壮性而构建的。
你怎么能不使用标准的机器学习库?
它们可能是为了尽可能快地适应狭窄的问题类型而设计的。它们也可能用于一般用途,确保它们在广泛的问题上正确运行,超出您的考虑范围。
并非所有从互联网下载的算法实现都是相同的。
来自GitHub的代码片段可能是研究生的“hello world”实现,也可能是整个研究团队在大型组织中贡献的高度优化的实现。
您需要评估您使用的代码的来源。有些来源比其他来源更好或更可靠。
一般用途的库通常是以更快的速度增强的。
黑客工程师的快速实施通常会遭受糟糕的文档记录,并且在涉及到他们的期望时会变得非常迂腐。
考虑到这一点,当你选择你的实施。
当被问及时,我通常会推荐三种平台之一:
这些只是我的建议,还有更多的机器学习平台可供选择。
您刚进入机器学习时,不必自己实现机器学习算法。
但是你可以。
这样做可能有很好的理由。
比如这里有三大原因:
第一个是我最喜欢的。这可能会让你感到困惑。
您可以实现机器学习算法,以了解它们如何工作。我推荐它。这对开发人员来说是非常有效的。
但是。
您不必从实施机器学习算法开始。在实施机器学习算法之前,学习如何使用机器学习算法,您将更快地建立机器学习的信心和技能。
实施和任何需要完成实施的研究将会提高你的理解。下一次使用该算法时,可以帮助您获得更好的结果。
在这篇文章中,您发现初学者陷入了从头开始实施机器学习算法的陷阱。
他们被告知这是唯一的方法。
您发现设计机器学习算法的快速和健壮的实现是一个艰难的挑战。
您了解到,在实施机器学习算法之前学习如何使用机器学习算法更容易,也更可取。您还了解到,实现算法是学习更多关于它们如何工作并从中获得更多的好方法,但只有在您知道如何使用它们之后。