本文想要告诉你,程序员可以进入机器学习领域。我会告诉你学习机器学习就像学习其他任何一门技术一样。我们会首先将学习机器学习和编程进行对比,这本身就是一向更大的挑战。

想要学习编码的设计师

设想你是一个设计师,一个经验不多的设计师。你使用类似Photoshop的工具,切图并且转换成CSS。你的身边都是程序员,或许你也羡慕他们的编码能力。你想要学习编程。不管对错,你认为CSS和HTML是“实践编码”,是一种创意的表达,但是编程,和你的创意相比,完全是另外一回事。

你跑到Quora和StackOverflow去提类似于“我是一个设计师,如何学习编程?”这样的问题。

你得到一堆不着边际的回答。你得到貌似高手的程序员奉上免费的建议“学习C和指针”,“学习二进制”,“买一本ASM的书”,“先学LIST”。可能会有一个雄辩家写了长篇大论来说服你买一本Knuth的《编程艺术》1-3卷。你接受了他的建议,只看了介绍就从Amazon买了那书,然后觉得自己学不会编程是因为自己不够聪明,并且在接下来的3个月中重复着向同的过程。

发生了什么?建议看起来没问题呀?

问提出在建议过时了。这样的建议来自从他们自己的角度考虑问题的程序员,并且是关于已经是程序员的人如何做得更好。这样的建议没有考虑一个完全的新手的情况,好比一个仅有一点兴趣的业余选手正在试探水温,看看是否适合游泳。

现在我承认,情况有一点不一样了。这种场景已经被重视,并且已经有针对这种场景的服务了。例如:教人如何编程。

当然,我们也需要学习指针,ASM,LISP甚至阅读Knuth的著作(我相信不会有人一页一页的读的),那是稍后的事情了。那如何开始呢?我是通过改造一些东西,尝试一些东西,来体验,创造和学习。我会把深挖技术的部分往后放,因为我想创造更大规模,更好,更强大的程序。我没有从技术的细节入手。我认为这种经验和当前大部分程序员是相似的,这和你的相似么?在评论中告诉我。

想要学习机器学习的程序员

现在正在阅读这篇文章的你,很可能是个程序员或某方面的开发人员。想想你在机器学习方面的兴趣。你有看到过专业的机器学习领域的专家给你免费的如何开始的建议吗?

我已经搜索并且阅读了这样的建议,有用的很少。如下是我收集的一部分。

学习机器学习需要具备那些数学知识?

你需要熟练使用线性代数(向量和矩阵)并且懂得指数和对数。

如果你想简单一点,你至少需要知道线性代数中的特征项量。

对于机器学习,很强的数学功底真的这么重要吗?

你的确需要熟悉一些概率,线性代数,线性编程,多变量微积分的东西。

对于机器学习,哪些技能是必须的呢?

第一,你要有个相当的计算机/数学背景。机器学习是一个高级玩意,所以大多数文档都假设你有这样的背景。

统计学,概率,分布式计算。

有一些好的建议,但是这些建议对于一个完全的新手是否合适?是否适合那些正在试探水温的程序员?

有可能大家在问一个错误的问题。并且,我已经摘取了在回答中提到学习机器学习必须先学习数学的片段。我需要指出的是,如果一个初学者把大量时间花在他们不具备的条件和无法做到的事情上,他们会过早得放弃,而那时,他们甚至都没有是个。

很好的掌握线性代数和概率论对进入机器学习领域是一个很好的基础,我完全同意。对多阶分析《统计元素》是一本很棒的书,我完全同意。我只是不赞成学习机器学习的第一步应该是学一门数学课程或读一套领域中相当深奥的理论。实际上,我强烈的反对这样。

两个机器学习领域

机器学习有两个方面:

机器学习实践:这会涉及数据查询,数据清洗,编写用于转换数据的脚本和把算法和库连接起来和写一些代码来解决困难的定义不清的命题。这个都是现实中的。

机器学习理论:这会涉及数学,抽象,理想方案,极限,美学和可行性判断。这个相对纯粹并且脱离现实。

没有了理论部分的支持,实践部分便失去了框架和严谨性。没有了实践部分,理论就失去了意义和动力。将这两者分开说是行不通的,这真的是一个有很多工具,很多公式的领域,跟着我就好了。

作为一个程序员,你会更倾向于实践方面,但是,作为一个“技术人员”,你迟早会碰带天花板,你会需要学习理论来得到有效的提高。你必须阅读关于算法的数学论文,你必须读很厚的书。那是在这个领域作出杰出成果必须要做的。但,问题是,那是一个实践者给初学者的建议,那过于理想化,适合程序员,所以,对初学者依然是不合适的。

程序员喜欢强大的工具。

我认为,对于一个经验丰富的程序员,把机器学习看成是一个高级的编程方法,就像线程(跟上我)。

如果你想掌握线程,你只需写一些多线程的程序并且了解他能解决哪些问题。你把线程的知识和你原先的知识体系进行绑定,你原先的知识体系会起作用,并且你会注意到线程可以解决哪些以前不能解决的问题。如果你确定这是适合你的,你可以阅读书籍并且挖得更深。

你可以使用现成的多线程库,你也可以自己写一个,你可以挖得更深并且学到更多线程结构背后包含的数学知识。你的兴趣驱使着你学习并且最终你可以确保完成一段多线程的代码。这是一个渐变的过程。

显然,机器学习是一个更庞大的更复杂的领域,我提倡使用循序渐进的策略,在未来的文章中我会详细说明。

不要让一个初学者来学习机器学习,并且把系统上线。这是很危险的。你迟早会得到足够多的教训,并且意识到这是危险的。不过,如果有编程的经验就不一样了,代码审查,主从意识,编程常识都会控制那些可能存在的危险性。

就像学习编程,学习机器学习是一个没有终点的旅途,精通就意味着持续的学习。学会阅读公式,用代码实现公式,如果有兴趣的话,接下来就用你自己的代码来解决问题。

资源

如果你想要持续研究这个问题,下面有我列出的资源。可能有一点深,我确定我们会产生很多不错的讨论。

向上翻,看看那些来自StackOverflow的回答。有说程序员不能学机器学习,除非他们懂数学的,但也有鼓励的,给你信心的。

为什么成为一名数据科学家会比你想像的容易?一篇来自Gigaom的报道称,在同等条件下,从scratch起步的数据科学家可以很快具备国际竞争力。

数学对编程是必须的吗?有趣的是,我认为两方的辩论是十分相关的,并且这是一个很有用的观点。

这篇文章可能引发论战,我很感兴趣你们怎吗看。和你的朋友太论这个话题,我的确听到很多关于危险区和“技术人员”循序渐进学习学习机器学习的观点。我会在未来的文章中对以上两个话题进行跟进。

关注中国IDC圈官方微信:idc-quan 我们将定期推送IDC产业最新资讯

查看心情排行你看到此篇文章的感受是:


  • 支持

  • 高兴

  • 震惊

  • 愤怒

  • 无聊

  • 无奈

  • 谎言

  • 枪稿

  • 不解

  • 标题党