开始机器学习之路可能会令人沮丧。需要学习的东西太多了,感觉不堪重负。
以至于许多对机器学习感兴趣的开发者从未开始。在临时数据集上创建模型并在 Kaggle 竞赛中崭露头角这样的想法,听起来很令人兴奋,但又像遥远的目标。
那么,一位哲学系毕业生是如何开始接触机器学习的呢?
在这篇文章中,我采访了布莱恩·托马斯。
布莱恩在发现理论性强的在线课程令人沮丧后,通过实际进行应用机器学习的自上而下方法开始了机器学习的学习。
发现布莱恩的故事以及他使用的工具和资源。
如果布莱恩能找到开始机器学习的方法,你也能。

哲学系毕业生到机器学习实践者
照片由 Andrew E. Larsen 拍摄,部分权利保留。
问:您之前尝试过哪些资源来理解机器学习?
有效的方法
您的《Jump-Start Scikit-Learn》和《Jump-Start Machine Learning in R》早期非常有价值,它们就像是使用这两种工具的机器学习领域地图,让您能够深入其中并开始尝试不同的机器学习模型。我喜欢将不同的算法进行了细分和布局,就像一张地图一样,组织了我拜访它们的努力。
从那时起,我转向了 Brett Lantz 的《Machine Learning with R》,我认为这本书特别好。
目前我正在学习 Stephen Marsland 的《Machine Learning: An Algorithmic Perspective》。这本书非常棒,而且我发现比一年前第一次拿起它时更容易理解了。
总的来说,最有效的方法就是动手去尝试不同的数据集和模型。我必须说,特别是 scikit-learn 帮助我更好地理解了这个主题。我还要感谢 IPython,哦,或者说 Jupyter notebook。对我来说,能够加载一些数据,尝试 scikit-learn 的不同模型,然后添加一些 markdown 单元格来用我自己的话解释模型和结果,这是非常有益的。
最近,我还在学习一些在线机器学习教程,特别是 Jake VanderPlas 和 Olivier Grisel 关于 scikit-learn 的教程。能够克隆他们的 git 仓库并跟随他们的演示一起玩转代码,也极具启发性。
无效的方法
几乎我尝试过的 2 到 3 个在线课程,包括 Andrew Ng 的 CS229 ML 课程,以及 Nando de Freitas 从 UBC 提供的在线 ML 课程。
不是说它们不好,只是我发现尝试坐着观看一个关于随机梯度下降的 50 分钟讲座并没有多大帮助,尤其是在没有数学背景的情况下。我通过将 Marsland 的 ML 书籍中提供的代码粘贴到 Jupyter notebook 中进行尝试,从而对 SGD 有了更好的理解。
当然,我并没有正式注册这些课程,我只是下载了所有的讲座、笔记和作业,并尝试去学习。最终,它似乎陷入了理论的泥潭。我认为这反映了许多问题的症结所在:人们在没有太多数学背景(比如我自己)的情况下进入这个领域,看到所有这些数学理论就望而却步了。
先写代码,然后再发展理论理解。这似乎是正确的方法,而且我知道 你绝对赞同 这一点。
问:您能分享一下您的背景和工作情况吗?
我于 1995 年大学毕业,获得哲学学士学位。
令人惊讶的是,这无意中为我打开了进入 IT 市场的大门,因为我在一个地方找到了一个行政工作,当时我是一名合同工。从那份工作中,我通过自学在数据库和编程方面学到了很多东西。
在哲学背景下,我一直能够将事物分解成组成部分,并看到它们是如何相互作用的(这可能解释了我相当不错的解决问题能力)。然而,从那个背景来看,我的数学技能为零!我早在高中就停在了二年级代数,再也没有往前学。
在过去的 7 年里,我在一家大型保险公司担任了许多不同的职务,我的日常职责包括服务器和软件测试管理,这包括开发大量的 PowerShell(以及现在的 Python)应用程序来协助完成这些工作。
问:您是否能分享一些您尝试过的具体算法和数据集的例子?
我认真学习的第一本 ML 书是 Brett Lantz 的《Machine Learning with R》,我学习了其中所有的数据库和算法,以及“经典热门”的 Iris 数据集。IMO,这是一本非常适合初学者的书。
在学习 Lantz 的书的同时,我也在自学 Python(通过 Charles Dierbach 的《Introduction to Computer Science Using Python: A Computational Problem-Solving Focus》等书籍,这些书籍专注于 Python 编程本身,而不是 ML)。
很快,在 Lantz 的书之后,我发现自己日常工作越来越倾向于 Python。我唯一使用过的 Python 机器学习书籍是 Stephen Marsland 的《Machine Learning: An Algorithmic Perspective》。
最近,我也尝试了 泰坦尼克号数据集,练习了数据清理、特征选择,然后尝试了 scikit-learn 的各种算法,如朴素贝叶斯、K 近邻、AdaBoost 和随机森林分类器。
我也开始探索使用 GPU 的 Python 包(我最近购买了一台 配备 NVIDIA GeForce 950M GPU 的 ASUS 笔记本电脑,并在上面搭建了一个不错的 CUDA 环境),特别是 Theano。
问:我注意到您尝试过 Python 和 R 进行机器学习,您对这两者有什么看法?
我最初是使用 R 而不是 Python 来实际进行机器学习的,所以这可能歪曲了我对两者的看法。
然而,学习机器学习确实感觉用 R 更直接。
是因为 Lantz 的书吗?
是因为 R 是一种统计编程语言,因此在编码时必须直接接触各种数学概念吗?
我肯定认为后者可能与这个印象有关。
现在,我基本上完全转向 Python 了,主要是因为像 pandas 和 Theano 这样的包(这是我目前最喜欢的两个)。我尤其对 Theano 感兴趣,并且玩得很开心。
我喜欢声明变量、它们的类型,然后构建由这些变量组成的表达式,再构建函数,这些函数可以被自动编译以供 GPU 使用。
这真是太酷了!
问:您深入研究机器学习的目的是什么?
回想我自己的哲学背景,正是哲学上的好奇心让我投入其中。
机器……会学习?!怎么做?!?
你必须承认,这个领域的整个历史和实践都堪称迷人,触及了大量本质上是哲学的问题。再加上随着深度学习等近期发展,整个领域变得越来越有趣。
与深度学习相关的还有随着大规模并行 GPU 编程的出现而发生的一种范式转变。
看来,最近在深度学习方面的进步可能没有它就不可能实现,而且能够告诉 Theano 利用我的 GPU,然后处理 LISA Lab 的 深度学习网站 上的深度学习教程算法和 MNIST 数据,这很酷。
结束语
感谢 Brian 分享他的故事和经验。
Brian 已经开始了学习,通过在 R 和 Python 中解决问题来建立技能,现在正在攻克更复杂的深度学习主题。
尽管他仍然处于初级阶段,但他的机器学习之旅已经有一个很棒的开端。他可以实际进行应用机器学习。
我认为,如果您希望开始学习机器学习,Brian 的故事非常鼓舞人心。
你还在等什么?
这个故事确实令人鼓舞。继续加油,Brian……
我简要地研究了增加 k 在 kNN 中作为训练数据集大小的比例的影响,以及在 SVM 中选择不同核对二元分类问题的影响。
对于逻辑回归在二元分类上的不同属性缩放是怎样的?
请尽可能解释其影响。
Rasananda Behera, DTM
首席数据科学家
ScientistRBehera@gmail.com