内容简介:自己从头写一个算法,不仅能给你带来成就感,也能帮你真正理解算法的原理。可能你之前用 Scikit-learn 实现过算法,但是从零开始写个算法简单吗?绝对不简单。有些算法要比其它算法复杂的多,所以在写算法时可以先从简单的开始,比如单层的感知机。下面就介绍机器学家 John Sullivan 总结出的 6 个步骤,以感知机算法为例,教你从头开始写出一个机器学习算法。文中的方法论同样能应用到其它机器学习算法上。这 6 个步骤是:
自己从头写一个算法,不仅能给你带来成就感,也能帮你真正理解算法的原理。可能你之前用 Scikit-learn 实现过算法,但是从零开始写个算法简单吗?绝对不简单。
有些算法要比其它算法复杂的多,所以在写算法时可以先从简单的开始,比如单层的感知机。
下面就介绍机器学家 John Sullivan 总结出的 6 个步骤,以感知机算法为例,教你从头开始写出一个机器学习算法。文中的方法论同样能应用到其它机器学习算法上。这 6 个步骤是:
- 对算法有个基本的了解
- 寻找实用的学习资源
- 把算法拆成几个部分
- 以一个简单的例子开始
- 使用可靠的实现进行验证
- 整理出写算法的过程
对算法有个基本的了解
如果你不了解算法的基本知识,先不要尝试从头写算法。至少。你应该能回答以下问题:
- 算法的含义?
- 它通常用来干吗?
- 什么时候不能用它?
以感知机为例,我们试着回答这些问题:
单层感知机是最简单的神经网络,通常用于二元分类问题(1或0,“是”或“否”)。
它相当于一个二元分类器,所以只有出现线性决策边界时才会用到它。还有些简单的用途,比如情感分析(正面或负面回应)或贷款违约预测(会违约,不会违约)。在这两类用途中,决策边界都需要是线性的。
如果决策边界是非线性的,那么就不能使用感知机。对于这类问题,需要使用其它算法。
寻找一些学习资源
在对算法有个基本的理解后,就可以开始做点研究了。建议多用一些不同的资源,有些人看书学得快,有些是看视频学得快。学习感知机知识,这里有一些不错的资源:
- 书本:
《统计学习精要》:
《Understanding Machine Learning: From Theory To Algorithms》:
www.cs.huji.ac.il/~shais/Unde…
- 博客:
John Brownslee 写的这篇《用 Python 从头实现感知机算法》:
machinelearningmastery.com/implement-p…
Sebastian Raschka 的博客《单层神经网络与梯度下降》:
sebastianraschka.com/Articles/20…
- 视频:
感知机算法训练:
感知机算法工作原理:
把算法拆成几部分
等收集好资源后,就开始学习了。首先准备好纸笔,我们不是通读整个章节或整篇博客,而是略读章节标题和其它一些重要信息。写下内容要点,试着概述算法。
在看完学习资料后,我们将感知机算法拆成以下几个部分:
- 初始化权重
- 将权重和输入相乘,并求和
- 将结果和阙值进行比较,以计算输出(1或0)
- 更新权重
- 重复
像这样将算法拆成几个部分,学起来会更容易。基本上我们先以伪代码概述算法,再回头填补细节。下图是第二步时John Sullivan所做的笔记,即权重和输入的点积:
以一个简单的例子开始
整理好算法的笔记后,开始用代码实现。在深入研究一个复杂的问题之前,建议先从一个简单的例子开始。对于感知机来说,与非门(NAND gate)是一个完美的简单数据集。如果两个输入都为真(1)则输出为假(0),否则输出为真。以下是数据集的示例:
现在使用一个简单的数据集,开始实现我们在步骤 3 中概述的算法。最好以块的方式写算法,并进行测试,不要试图一次性写完。这样你在刚开始时更容易调试。当然最后可以回去整理一下,使代码看起来更整洁一些。
下面是在第 3 步中算法的点积部分的 Python 代码:
使用可靠的实现进行验证
等写完代码并用小数据集测试以后,接下来尝试较大的数据集。为了确保代码能在更复杂的数据集上正确运行,最好用可靠的实现进行测试。对于感知机来说,我们可以用 Scikit-learn 中的实现。
测试代码时需要查看权重。如果正确地实现了算法,权重应该与 scikit-learn 感知机的权重相匹配。
如果最开始没有得到相同的权重,那么就需要调整 scikit-learn 感知机中的默认设置。如果每次都实现一个新的随机状态,只是一个固定的种子,那么就必须关闭它。在 Jason Sullivan 自己的实践操作中,为了匹配学习率,他将 eta0 改为 0.1。最后,他关闭了 fit_intercept 选项,在特征数据集中包含了一个 1 的虚拟列,所以已经自动拟合了截距(也就是偏置项)。
这就给我们一个很重要的启示。在验证模型的现有实现时,你需要非常了解模型的输入。永远不应盲目地使用模型,要始终对你的假设以及每个输入的确切含义保持怀疑。
整理出写算法的过程
过程的最后一步可能是最重要的,前面完成学习、做笔记、写算法以及将结果和可靠实现比较等这几个步骤后,最后把这个过程整理出来很重要,有两个原因:
- 随着你向别人展示自己所学的东西,你会对算法有更深入的理解;
- 可以作为一项成果,展示给潜在的雇主,作为求职的加分项。使用机器学习库实现一个算法是一回事,自己从头开始写出一个算法是另一回事,而后者给人留下的印象更深刻。
以上就是从头开始实现一个机器学习算法的 6 个步骤,刚开始最好先从简单的算法开始,熟练这套方法论后再扩展到其它更复杂的算法上。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 机器学习算法——感知机&支持向量机
- 清华&商汤开源超高精度边缘感知人脸对齐算法
- Pymetrics开源公平性感知机器学习算法Audit AI
- 从头开始编写任何机器学习算法的6个步骤:感知器案例研究
- 亲手打开EQ系列黑匣子后,Mobileye又给感知算法上了道锁
- 黑芝麻CEO单记章:拒绝激光雷达也可实现L3自动驾驶,改进感知算法是关键
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
UNIX网络编程 卷1:套接字联网API(第3版)
W.Richard Stevens、Bill Fenner、Andrew M. Rudoff / 杨继张 / 人民邮电出版社 / 2010-6 / 129.00元
这是一部传世之作!顶级网络编程专家Bill Fenner和Andrew M. Rudoff应邀执笔,对W. Richard Stevens的经典作品进行修订。书中吸纳了近几年网络技术的发展,增添了IPv6、SCTP协议和密钥管理套接字等内容,深入讨论了最新的关键标准、实现和技术。 书中的所有示例都是在UNIX系统上测试通过的真实的、可运行的代码,继承了Stevens一直强调的理念:“学习网络......一起来看看 《UNIX网络编程 卷1:套接字联网API(第3版)》 这本书的介绍吧!