机器学习的5种“兵法"
在研究机器学习中,理论在其整个自上而下方法中试用于哪里呢?
在传统的机器学习教学中,丰富的数学理论知识对于理解机器学习是至关重要的,我的机器学习教学方法通常是教你如何端对端解决问题以及传输结构。
所以此方法哪里要用到理论知识了呢?
在此帖中你将了解我们是如何理解机器学习中的“理论”一词。提示:全部与算法有关。
你会发现一旦你可以熟练解决问题以及传输结果后,你就欲罢不能地想要对机器学习有更深入的理解以及获得更好的结果,没人能拉得住你。
最后,你会发现可以通过应用标准数据集练习机器学习的5个技巧,从而进一步加深你对机器学习算法的理解。
理论学习----放在最后而不是第一
对开发者的机器学习教学法很麻烦。
教学方法是自下而上的, 它对于一个仅想通过运用机器学习工具来解决问题,而非对此领域进行专门研究的开发者来说确实很狗屎。传统的学习方法要求你在学习算法理论前有诸如线性代数、概率学及统计学等预备数学知识,如果你曾经历如何端对端解决问题然后传输一个有效、可靠且准确的预测模型的工作执行或讨论,那你是很幸运的。
我来教你一个自上而下的学习机器学习的方法。这种方法首先是
学习端对端解决问题的系统性处理
绘制一张“最佳组合”机器学习工具及平台的步骤图
在测试数据库里进行定向实践。
你可以在标题为“编程员的机器学习:从开发者到机器学习实践者的跳跃”一贴中了解更多自上而下机器学习教学的方法。
所以在这个过程中,理论到底在哪里呢?
如果教学法倒置,后学理论,但是我们所说的理论到底是什么理论,在测试数据库实践中到底是怎样学习那个理论的呢?
理论其实都是算法
机器学习是一个理论密集型的领域。
他之所以密集是因为它有着从数学角度描述及解释概念的传统。
这招很管用,因为数学描述是非常简洁明了的,这些数学描述也通过与专业领域技术相结合来做分析(例如对一个程序概率性的理解)。
很多这些次要的数学技巧与机器学习算法是捆绑在一起的。对于一些想要通过粗略了解机器学习方法来配置及应用它的人来说,这确实太难搞定了。
如果你没有能解析及理解算法表述的知识基础的话,学习机器学习真的是很令人沮丧。沮丧感是来自诸如计算机科学的领域,在这些领域,对算法的描述随处可见,但其描述意在快速理解(如桌面检查)及其执行。
例如,我们在学习及学习使用哈希表是从来不深入追究哈希方程的,但是我们知道哈希方程是什么以及去哪里可以了解哈希方程的细节和书写。为什么机器学习就不能这样呢?
机器学习领域中的理论大部分与机器学习算法有关,如果你去问一个初学者为何这些理论令人如此沮丧,他会告诉你是因为你必须得理解并且懂得使用一些特定的机器算法。
这里,算法不仅是一个预测模型的程序,这里的算法也意味着选择特征,设计新功能,转换数据以及估算未见数据的模型准确度。
因此,所谓后学理论, 其实是说最后学习机器学习算法。
深入理论的冲动
总的来说,我建议对知名机器学习数据库作定向练习。
这是因为知名机器学习数据,如UCI机器学习仓库,可操作性更好,它们体积小,因此不会占用很多内存,并且可以直接在工作站上处理。它们还经过了充分地研究及学习,因此你可以有一个比较的基准值。
你可以在标题为“用UCI机器学习库小内存数据练习机器学习”一贴中了解更多关于机器学习数据库定向练习的信息。
理解机器学习算法是过程中的一部分,原因是你会在为得出标准机器学习算法结果中遇到限制。你会想知道如何能在已有算法中获得更多,或怎样得到最优解,亦或是其作用原理。
要做到这些,你必须知道更多,好奇心也会驱动你去学习机器学习算法, 为得到一个更好的结果,你会迫使自己去拼凑一个对算法的理解。
我们已经看到很多背景各异的年轻开发者为了提高他自己的作品,而去学习开源项目代码、课本甚至研究论文。要做一个更好更全能的编程者,他们必须去做这些。
如果你想成功并且有动力取得成功,你是一定会去学习算法理论的。
理解机器学习的5种“兵法"
到了深入钻研机器学习算法以作为目标来实践的时候了,此时有很多技术和模板你可以用来简化学习的过程。
这一节你会发现五大技巧帮你快速理解机器学习算法理论。
1. 创建机器学习算法列表
刚开始的时候,你会觉得被现有的大量算法压得喘不过气来。
即使只是测试算法,你也许仍会不确定要将哪些算法加入到你的菜单里。(提示:尽量多样化)。
作为一个菜鸟,一个很棒的技巧是持续跟踪你所学到的算法。这些列表可以简单到包括算法名称,并随着你的兴趣和好奇心而增加难度。
抓住算法适用问题的细节(分类或是回归)、相关算法、和算法分类(决策树,核等等),当你看到新的算法名称就添加到你的列表里,当开始解决一个新问题的时候,尝试下你还没用过的算法,在你用过的算法旁边进行标注,诸如此类。
把算法名称记录在册可以增加你对算法的驾驭能力,这个简单到令人乍舌的战术可以使你不会被过多信息压垮。以下列出了简单的算法列表可以事半功倍、减少挫败的一些例子:
来尝试新的不同类型的问题的算法思路(时间序列,评分系统等等)。
那些你可以研究以便学习如何应用的算法。
按类别对算法分类,诸如树,核等等。
避免只专注于最喜欢的一类问题,现在就着手开始创建算法列表吧!
阅读博文“Take Control By CreatingTargeted Lists of Machine Learning Algorithms”来获取这方面的更多信息。
2. 研究机器学习算法
当你希望更深入了解一个算法的时候,你就需要开始研究了。你将会对研究一个算法感兴趣的重要原因是可以学习如何配置算法以及了解它的工作原理。
研究不仅仅是学术界的专利,一些简单的技巧可以让你在收集一个给定的机器学习算法的信息上走的更远。
关键在于信息的来源,下面列出了一个你可以作为研究算法的参考文献的各种类型来源。
权威来源,如课本,讲义,幻灯片和综述文献。
开创性的来源,如对算法进行初次描述的论文和报刊文章。
描述最前沿推广和实验的第一手资料。
启发式来源,如机器学习竞赛中出现的文章或者在问答网站的帖子以及会议论文。
实现代码的资源如用于工具和库的开放源代码,博客文章和技术报告。
你并不需要成为一个博士研究人员或者机器学习算法的专家。
针对一种你希望学习的机器学习算法,耐下心来挑选多样的来源作为参考。着眼于你可以应用或者理解的具体细节,把其他部分暂时悬疑。
关于研究机器学习的更多信息,请参阅博文“How to Research a Machine Learning Algorithm”
3. 创造你自己的算法描述
在你的研究中,将会发现机器学习算法的描述会不完备或者不统一。
你可以用的一个方法是把你自己的简短算法描述整合起来,这是另一个非常简单而行之有效的策略。
你可以设计一个标准的算法描述模板,仅包含能帮助你最大化了解该算法的细节,例如算法应用探讨、伪代码列表、参数范围和资源列表。
然后你可以用相同的算法描述模板来归纳许多关键算法,并开始逐步建立你自己的小型算法百科全书作为之后做项目的参考。
以下是你可以用在算法描述模板中的问题:
算法的标准缩写是什么?
该算法的目标或者需要解决的问题是什么?
该算法的伪代码或者算法流程图是怎样的?
应用该算法的思路或者要点是什么?
更深入学习算法的有用的资源是什么?
你将会感慨这些描述的威力。例如,我用这种方法撰写了一本灵感来源于自然的算法描述书籍,多年之后我仍然时常参考此书。
希望了解如何创建有效的算法描述模板,请参阅“How to Learn a Machine Learning Algorithm”.
关于我利用标准算法模板建立的算法描述书籍,请参阅“Clever Algorithms: Nature-Inspired Programming Recipes”.
4. 研究算法行为
机器学习的算法是一套复杂的运算系统,通过研究它们在真实数据库上的行为往往是了解算法的有效方法。
通过设计实验, 利用一个小的数据库试着运行算法,能有效发现算法的运行效果、短处和参数设置方法,这样在解决别的问题上也往往会取得满意结果。
你可以按照以下几个简单的步骤来研究机器学习的算法:
1) 选择一个你想了解的算法(如:随机森林Random Forests)
2) 选定一个你想要了解的有关该算法的问题(如:随机树的数量对最后结果的影响)
3) 设计解决问题的试验(如:在几个不同的二分类问题上试验不同数量的随机树,并绘制数的数量与分类精度的关系图)
4) 执行试验并写出结果,以便日后使用
5) 不断重复这些步骤
这是实用性的机器学习的优势之一,你通过自己的简单研究即得到出人意料的结果。
5. 执行机器学习算法
没有比执行算法本身更好的方式去了解机器学习的算法了。
在从头开始执行算法过程中,你将碰到各种算法问题相关的一些微观决策。你将决定哪些可以通过经验法则来完成,哪些需要将参数一一暴露给用户。
以下是从头开始重复执行机器学习算法的步骤:
1) 选择一种程序语言,越熟悉越好。
2) 选择一种算法执行,从简单的开始(可以参考下面的清单)。
3) 选择一个课题去测试你的执行方法,2D数据适合可视化(即使是用Excel)
4) 研究这个算法并利用多种信息来源(如:阅读教程、论文、其他执行方式)
5) 对算法进行单元测试,以确认你对算法的理解,并验证你的执行方式 。
从小处开始并逐渐建立自信。有三种机器学习算法适合你从头开始尝试执行:
梯度下降法的线性回归(LinearRegression using Gradient Descent)
k近邻算法(k-Nearest Neighbor)
贝叶斯分类器(Naive Bayes)
理论不只是给数学家使用的
机器学习不只属于数学精英。即使不深入学习多变量统计,你也能知道机器学习算法如何运行。
你不需要对数学很在行。
如前文所言,你可以从算法单开始并逐步深入了解算法研究,算法描述和算法行为。
不需要太深入理解数学也一样大有可为。
你不需要是一个学术专家。
研究不只属于学术领域。每个人都可以通过阅读书籍和文摘完善他们对某一主题的理解,一个具体的机器学习算法就是其一。
即使需要通过学习来了解这些复杂的运算,一旦你尝试成为“科学家”并开始你的算法试验,你将获得很大的突破。你将发现许多未经记录的趣谈怪事。
行动起来!
从以下的清单中选一个来开始吧。从今天开始,now!
列一个清单,包含10种用于分类的机器语言
找有关随机森林算法(Random Forests)的5本书
用自己的算法描述模板做一个5页的PPT来展示贝叶斯分类器(NaiveBayes)
打开Weka了解”k”参数是怎样影响k近邻算法(k-NearestNeighbor) 的准确率的
利用随机的梯度下降法运行线性回归