liuqipeng

介绍:用 JavaScript 来做机器学习

liuqipeng · 2016-12-22翻译 · 1529阅读 原文链接

我爱机器学习算法。我教过课程班和研讨会,并就机器学习进行了讨论。这个主题对我来说很迷人,但就像所有的技能一样,只有迷人是不够的。为了更好的学习,你需要实践。

我恰好是一个 PHP 和 JavaScript 开发者。但作为经历远古时代的软件工程师,我也教过以下这些语言:Ruby、Python、Perl 和 C,但我还是更喜欢 PHP 和 JS。在你对 PHP 着迷前,我会对你说,尽管它自身有问题,我喜欢它正是因为它把所有事情都搞定了。

无论什么时候我说用 PHP 写了 Tidal Labs 的机器学习算法,他们都会有趣地看着我,并对我说这怎么可能。简单来说,用任何语言来写机器学习算法都是有可能的。大多数人对他们可以从头写一个算法的基本原理没有足够的关心。相反,他们更喜欢依赖 Python 库去完成工作,并且最终变得对黑盒里的事情毫无关心。剩下的人可能只知道学术上的机器学习是使用 Octave 或者 Matlab 完成的。

在一系列的文章里,我会使用 JavaScript 作为示范语言,而不是 Python 或者 Octave 来教学习你基础的机器学习算法。一开始,我比较倾向于使用不同的语言(PHP、JS、Perl、C、Ruby)来写这些文章,但是最终选择 JavaScript 有如下原因:

  • 无论你的后端技术是什么,如果你是一个 Web 开发者,你可能已经知道 JS。

  • Javascript 有一个叫 JSFiddle 的好工具,它可以让我将文章里的可执行的 Javascript 正确地嵌入(C 或者 Perl 就很难做到这样子!)

  • 不少人让我坚持使用某一种语言。

虽然我决定使用 JavaScript 写这些文章,但是请使用你所选择的语言来重写例子作为作业。熟能生巧,通过使用不同的语言重写相同的算法有助于你更好地理解范式。

使用像 PHP 和 JavaScript 的语言,机器学习算法是有可能出现良好性能的。我提倡使用不同的语言写机器学习算法是因为,从头写一遍机器学习算法有助于你学习它们的基础原理,同时它可以使得你的后端语言一致,例如不需要在一个 PHP 应用中间使用一个 Python 脚本去处理,你可以用 PHP 去替换这个脚本,通过这样来去除使用其他语言的开销(心理上和实际计算上都是)。

好吧,大多数时候是这样的。还是有一些东西你是无法使用 PHP 或者 JavaScript 完成的,但那些都是要求深度矩阵计算的高级算法。当你需要用 JS 做矩阵计算,“简单地做矩阵计算”和“高效地做矩阵计算”是有非常大的不同的。Numpy 或者 Matlab 的优势不在于它们做矩阵操作的能力,而在于实际上它们是用了优化后的算法进行操作——除非你决定自学线性代数计算,否则你是没有办法超越这个算法的。上面这些都不是我擅长的领域,因此我们还是专注于那些不使用高深矩阵算法的机器学习吧。你可以尝试暴力解决矩阵操作,但是你最终会得到一个相当低效的系统。这有助于学习,但我不鼓励这么做——我会非常担心在生产环境下这样做的后果。

记住,大多数我们正在看的算法,用不用矩阵计算我们都是可以解决的。我们可以使用迭代或者函数去解决它,但这些算法最好是用线性代数去解决。条条道路通罗马!我非常鼓励你们去学习(或者解决)线性代数的方案,但是因为这不是我的强项,所以我得用其他的办法。

这里有一些建议去看的算法。只要相关文章发表了,我会更新这个列表下文章对应的链接:

祝你学的开心!

相关文章