本文想要告诉你,程序员可以进入机器学习领域。我会告诉你学习机器学习就像学习其他任何一门技术一样。我们会首先将学习机器学习和编程进行对比,这本身就是一向更大的挑战。
想要学习编码的设计师
设想你是一个设计师,一个经验不多的设计师。你使用类似Photoshop的工具,切图并且转换成CSS。你的身边都是程序员,或许你也羡慕他们的编码能力。你想要学习编程。不管对错,你认为CSS和HTML是“实践编码”,是一种创意的表达,但是编程,和你的创意相比,完全是另外一回事。
你跑到Quora和StackOverflow去提类似于“我是一个设计师,如何学习编程?”这样的问题。
你得到一堆不着边际的回答。你得到貌似高手的程序员奉上免费的建议“学习C和指针”,“学习二进制”,“买一本ASM的书”,“先学LIST”。可能会有一个雄辩家写了长篇大论来说服你买一本Knuth的《编程艺术》1-3卷。你接受了他的建议,只看了介绍就从Amazon买了那书,然后觉得自己学不会编程是因为自己不够聪明,并且在接下来的3个月中重复着向同的过程。
发生了什么?建议看起来没问题呀?
问提出在建议过时了。这样的建议来自从他们自己的角度考虑问题的程序员,并且是关于已经是程序员的人如何做得更好。这样的建议没有考虑一个完全的新手的情况,好比一个仅有一点兴趣的业余选手正在试探水温,看看是否适合游泳。
现在我承认,情况有一点不一样了。这种场景已经被重视,并且已经有针对这种场景的服务了。例如:教人如何编程。
当然,我们也需要学习指针,ASM,LISP甚至阅读Knuth的著作(我相信不会有人一页一页的读的),那是稍后的事情了。那如何开始呢?我是通过改造一些东西,尝试一些东西,来体验,创造和学习。我会把深挖技术的部分往后放,因为我想创造更大规模,更好,更强大的程序。我没有从技术的细节入手。我认为这种经验和当前大部分程序员是相似的,这和你的相似么?在评论中告诉我。
想要学习机器学习的程序员
现在正在阅读这篇文章的你,很可能是个程序员或某方面的开发人员。想想你在机器学习方面的兴趣。你有看到过专业的机器学习领域的专家给你免费的如何开始的建议吗?
我已经搜索并且阅读了这样的建议,有用的很少。如下是我收集的一部分。
学习机器学习需要具备那些数学知识?
你需要熟练使用线性代数(向量和矩阵)并且懂得指数和对数。
如果你想简单一点,你至少需要知道线性代数中的特征项量。
对于机器学习,很强的数学功底真的这么重要吗?
你的确需要熟悉一些概率,线性代数,线性编程,多变量微积分的东西。
对于机器学习,哪些技能是必须的呢?
第一,你要有个相当的计算机/数学背景。机器学习是一个高级玩意,所以大多数文档都假设你有这样的背景。
统计学,概率,分布式计算。
有一些好的建议,但是这些建议对于一个完全的新手是否合适?是否适合那些正在试探水温的程序员?
有可能大家在问一个错误的问题。并且,我已经摘取了在回答中提到学习机器学习必须先学习数学的片段。我需要指出的是,如果一个初学者把大量时间花在他们不具备的条件和无法做到的事情上,他们会过早得放弃,而那时,他们甚至都没有是个。
很好的掌握线性代数和概率论对进入机器学习领域是一个很好的基础,我完全同意。对多阶分析《统计元素》是一本很棒的书,我完全同意。我只是不赞成学习机器学习的第一步应该是学一门数学课程或读一套领域中相当深奥的理论。实际上,我强烈的反对这样。
两个机器学习领域
机器学习有两个方面:
机器学习实践:这会涉及数据查询,数据清洗,编写用于转换数据的脚本和把算法和库连接起来和写一些代码来解决困难的定义不清的命题。这个都是现实中的。
机器学习理论:这会涉及数学,抽象,理想方案,极限,美学和可行性判断。这个相对纯粹并且脱离现实。
没有了理论部分的支持,实践部分便失去了框架和严谨性。没有了实践部分,理论就失去了意义和动力。将这两者分开说是行不通的,这真的是一个有很多工具,很多公式的领域,跟着我就好了。