一周时间,初试 ML

982 查看

在外行人眼里,上手机器学习 (ML) 似乎是件不可能的事情。要是方法不对的话,确实如此。

事实上,经过用一周时间对主干知识的钻研,我发现机器学习比想像中容易很多。

本文从我自己入门周的亲身体会出发,希望给其他想要学习 ML 却又无从下手的朋友一点启发。

背景

在 ML 学习周开始之前,我曾浏览过许多这方面的文章,Coursera 上面 Andrew Ng 的课上了一半,其他理论课程也有涉猎。所以我已经具备一些 ML 的概念理解,只不过完全不能够把这些理论知识转化为程序,而这正是我想要改进的地方。

我的目标是,在这一周结束的时候可以用 ML 解决实际问题,甚至可以跳过许多基础理论,而实现自上而下地学习 ML,而不是一点点按部就班地从底层学起。

通过在 Hacker News 上提问,我得到的结论是:从 Python 的 Scikit Learn 模块下手也许是最好的选择。这个模块包含了许多备选算法,把实际的机器学习问题简化成为仅仅几行程序。

星期一:学习实用技巧

首先我尝试寻找 Scikit Learn 相关的教学视频。最终我决定使用 Sentdex 的关于如何使用 ML 进行股票投资的教程。该教程提供了进行下一步学习的必备知识。

Sentdex 教程的一个很大优点是,它带领你经历了收集数据的每一个步骤。在学习教程的过程中,你可以深切地体会到,提取数据和清理数据甚至比实际的机器学习更消耗时间。因此对每一个有志于学好 ML 的朋友来讲,从文件或网络上提取有效数据的编程技术必不可少。

在后期的学习中遇到困难的时候,我会将部分视频重复再看几遍。我建议你也可以这样做。

但如果你已经熟悉如何从网络提取数据,这个教程就不那么合适了。因为教程中的很多视频都着重在数据提取。这时候 Udacity 的 《Intro to Machine Learning》 课程也许是更好的入门选择。

星期二: 应用到实际问题

星期二,我想试试自己能不能把学到的理论应用于实践。恰好此时,我所在的编程小组的另一位成员,正在为英格兰银行举办的数据可视化竞赛做准备,我便和他组队一起分析银行提供的数据。这些数据中最有意思的是家庭调查部分。银行每年会对几千家庭进行与钱相关的调查。

我们打算解决的问题如下:

给定某人的教育水平、年龄和收入,能否通过计算机预测此人的性别?

我花了个把小时整理数据,并通过 Scikit Learn map 寻找到一种解决该问题的合适算法。

最终我们的预测成功率在 63% 左右,这结果并没有多好,但至少强过纯随机扔硬币预测的 50% 概率。

看到实际结果,就好比给你的学习热情再添把火,所以当基本掌握了如何使用 Scikit Lear 以后,我强烈建议你也找些实际数据练练手。

意识到自己开始能够把 ML 应用于实际问题,是一个里程碑式的时刻。

星期三:从零开始

在反复尝试各种 Scikit Learn 模块之后,我决定从零开始写一个线性回归的算法。

之所以如此,是因为我当时感觉(现在依然感觉),自己实际上并不理解算法底层是怎样运作的。

所幸 Coursera 的课程里,包含了一些很有用的算法的具体细节。确切来说,它介绍了用线性回归做梯度下降的底层程序。

这种强迫你理解算法深层每一个步骤的学习方法,毫无疑问是最有效的。我强烈建议你也尝试一下。

我打算随着学习的深入,记录下自己对更复杂算法的应用。但在此之前我倾向于先把 Scikit Learn 上相对应的算法用熟练。

星期四:开始竞赛

星期四,我开始学习 Kaggle 的入门教程。Kaggle 是一个机器学习的竞赛平台,公司或组织在上面发布问题,每个人都可以提交自己的解决方案。

我建议,在对机器学习有一定理论和实践基础的时候,再来尝试 Kaggle。因为要使用 Kaggle,这些知识是必不可少的,否则只能给自己徒增困惑。

Bag of Words》这个教程详细讲解了参与竞赛的每一个步骤,并且提供了一个 Natural Language Processing (NLP) 简短有趣的介绍。学完以后我对 NLP 的兴趣大增。

星期五:回到学校

周五我继续学习 Kaggle 的教程,并开始了在 Udacity 上《Intro to Machine Learning》的课程。如今课程过半,我也乐在其中。

这门课比 Coursera 上的课程容易许多,也不深究每一个具体算法。这门课更偏重实际应用,它教你如何使用 Scikit Learn。比起 Coursera 课上一步步学习写 Octave 算法,这门课更容易应用于实际。

前方的路

一周的学习不仅仅是一次快乐的体验,更帮助我意识到机器学习在社会中的广泛应用。学的越多就能发现更多的应用领域。

如果你对机器学习感兴趣,我强烈建议专门拿出几天或几个晚上,好好钻研一番。

要是你还没做好系统学习的打算,就采用由上而下的方法,尽早进入解决实际问题的阶段。

祝好运!

有问题欢迎通过 Twitter 和 GitHub 与我联系,或发邮件到我的邮箱:perhborgen@gmail.com。