教你6步从头写机器学习算法——以感知机算法为例

栏目: 数据库 · 发布时间: 6年前

内容简介:自己从头写一个算法,不仅能给你带来成就感,也能帮你真正理解算法的原理。可能你之前用 Scikit-learn 实现过算法,但是从零开始写个算法简单吗?绝对不简单。有些算法要比其它算法复杂的多,所以在写算法时可以先从简单的开始,比如单层的感知机。下面就介绍机器学家 John Sullivan 总结出的 6 个步骤,以感知机算法为例,教你从头开始写出一个机器学习算法。文中的方法论同样能应用到其它机器学习算法上。这 6 个步骤是:

自己从头写一个算法,不仅能给你带来成就感,也能帮你真正理解算法的原理。可能你之前用 Scikit-learn 实现过算法,但是从零开始写个算法简单吗?绝对不简单。

有些算法要比其它算法复杂的多,所以在写算法时可以先从简单的开始,比如单层的感知机。

下面就介绍机器学家 John Sullivan 总结出的 6 个步骤,以感知机算法为例,教你从头开始写出一个机器学习算法。文中的方法论同样能应用到其它机器学习算法上。这 6 个步骤是:

  • 对算法有个基本的了解
  • 寻找实用的学习资源
  • 把算法拆成几个部分
  • 以一个简单的例子开始
  • 使用可靠的实现进行验证
  • 整理出写算法的过程

对算法有个基本的了解

如果你不了解算法的基本知识,先不要尝试从头写算法。至少。你应该能回答以下问题:

  • 算法的含义?
  • 它通常用来干吗?
  • 什么时候不能用它?

以感知机为例,我们试着回答这些问题:

单层感知机是最简单的神经网络,通常用于二元分类问题(1或0,“是”或“否”)。

它相当于一个二元分类器,所以只有出现线性决策边界时才会用到它。还有些简单的用途,比如情感分析(正面或负面回应)或贷款违约预测(会违约,不会违约)。在这两类用途中,决策边界都需要是线性的。

如果决策边界是非线性的,那么就不能使用感知机。对于这类问题,需要使用其它算法。

教你6步从头写机器学习算法——以感知机算法为例

寻找一些学习资源

在对算法有个基本的理解后,就可以开始做点研究了。建议多用一些不同的资源,有些人看书学得快,有些是看视频学得快。学习感知机知识,这里有一些不错的资源:

  • 书本:

《统计学习精要》:

web.stanford.edu/~hastie/Pap…

《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…

  • 视频:

感知机算法训练:

www.youtube.com/watch?v=5g0…

感知机算法工作原理:

www.youtube.com/watch?v=1Xk…

把算法拆成几部分

等收集好资源后,就开始学习了。首先准备好纸笔,我们不是通读整个章节或整篇博客,而是略读章节标题和其它一些重要信息。写下内容要点,试着概述算法。

在看完学习资料后,我们将感知机算法拆成以下几个部分:

  • 初始化权重
  • 将权重和输入相乘,并求和
  • 将结果和阙值进行比较,以计算输出(1或0)
  • 更新权重
  • 重复

像这样将算法拆成几个部分,学起来会更容易。基本上我们先以伪代码概述算法,再回头填补细节。下图是第二步时John Sullivan所做的笔记,即权重和输入的点积:

教你6步从头写机器学习算法——以感知机算法为例

以一个简单的例子开始

整理好算法的笔记后,开始用代码实现。在深入研究一个复杂的问题之前,建议先从一个简单的例子开始。对于感知机来说,与非门(NAND gate)是一个完美的简单数据集。如果两个输入都为真(1)则输出为假(0),否则输出为真。以下是数据集的示例:

教你6步从头写机器学习算法——以感知机算法为例

现在使用一个简单的数据集,开始实现我们在步骤 3 中概述的算法。最好以块的方式写算法,并进行测试,不要试图一次性写完。这样你在刚开始时更容易调试。当然最后可以回去整理一下,使代码看起来更整洁一些。

下面是在第 3 步中算法的点积部分的 Python 代码:

教你6步从头写机器学习算法——以感知机算法为例

使用可靠的实现进行验证

等写完代码并用小数据集测试以后,接下来尝试较大的数据集。为了确保代码能在更复杂的数据集上正确运行,最好用可靠的实现进行测试。对于感知机来说,我们可以用 Scikit-learn 中的实现。

教你6步从头写机器学习算法——以感知机算法为例

测试代码时需要查看权重。如果正确地实现了算法,权重应该与 scikit-learn 感知机的权重相匹配。

教你6步从头写机器学习算法——以感知机算法为例

如果最开始没有得到相同的权重,那么就需要调整 scikit-learn 感知机中的默认设置。如果每次都实现一个新的随机状态,只是一个固定的种子,那么就必须关闭它。在 Jason Sullivan 自己的实践操作中,为了匹配学习率,他将 eta0 改为 0.1。最后,他关闭了 fit_intercept 选项,在特征数据集中包含了一个 1 的虚拟列,所以已经自动拟合了截距(也就是偏置项)。

这就给我们一个很重要的启示。在验证模型的现有实现时,你需要非常了解模型的输入。永远不应盲目地使用模型,要始终对你的假设以及每个输入的确切含义保持怀疑。

整理出写算法的过程

过程的最后一步可能是最重要的,前面完成学习、做笔记、写算法以及将结果和可靠实现比较等这几个步骤后,最后把这个过程整理出来很重要,有两个原因:

  1. 随着你向别人展示自己所学的东西,你会对算法有更深入的理解;
  2. 可以作为一项成果,展示给潜在的雇主,作为求职的加分项。使用机器学习库实现一个算法是一回事,自己从头开始写出一个算法是另一回事,而后者给人留下的印象更深刻。

以上就是从头开始实现一个机器学习算法的 6 个步骤,刚开始最好先从简单的算法开始,熟练这套方法论后再扩展到其它更复杂的算法上。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Making Things See

Making Things See

Greg Borenstein / Make / 2012-2-3 / USD 39.99

Welcome to the Vision Revolution. With Microsoft's Kinect leading the way, you can now use 3D computer vision technology to build digital 3D models of people and objects that you can manipulate with g......一起来看看 《Making Things See》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试