本节书摘来自华章社区《R语言机器学习:实用案例分析》一书中的第2章,第2.2节机器学习算法,作者[印度] 拉格哈夫·巴利(Raghav Bali)迪潘简·撒卡尔(Dipanjan Sarkar),更多章节内容可以访问云栖社区“华章社区”公众号查看
2.2 机器学习算法
目前为止,我们已经大致了解了机器学习。我们理解了机器学习的定义是指,计算机程序在经验E形式的数据的帮助下,改进其性能P,进而学习了任务T。我们还看到,由于没有一步一步执行的代码,而是让程序形成对问题的理解,进而帮助我们解决问题,所以机器学习与传统的程序范式是不同的。更让我们惊讶的是,这样的一个程序就工作在我们面前。
一直以来,虽然我们学习了机器学习的概念,但是我们仍将这个神奇的计算机程序当作一个帮助我们学习和解决问题的神秘黑匣子。现在是让我们揭晓谜底,探究面纱下这些神奇算法的时候了。
我们将从机器学习中最常见和最广泛使用的一些算法开始,探究它们复杂的细节和应用,以及少量必需的数学原理。通过本章,你将了解不同的算法类别。这里给出的算法列表并不详尽,尽管对一些算法进行了很详细的解释,对每一个算法的深刻理论理解超出了本书的范围。有大量有关机器学习的资料可以容易地从书籍、在线课程、博客等诸多的渠道获取。
感知机
这个算法就像机器学习领域中的Hello World算法。这或许是所有算法中最易于理解和使用的算法,但这并不意味着这个算法不强大。
感知机(perceptron)算法由Frank Rosenblatt于1958年提出,由于它找到了可分类数据的分类器(separator)而受到了极大的关注。
感知机是一个函数(或者精确地说,一个简单化的神经元),它将一个实数向量作为输入,并生成一个实数作为输出。
在数学上,感知机可以表示为以下形式:
y = f(w1x1 + w2x2 + … + wnxn + b)= f(wTx + b)
这里,w1,…,wn表示权重,b是一个表示偏差(或误差)的常数项,x1,…,xn是输入,y是函数f的输出,函数f称为激活函数。
感知机算法如下所示:
1)用小的随机数作为权重向量w和误差项b的初始值。
2)基于函数f和向量x计算输出向量y。
3)通过更新权重向量w和误差项b来校正偏差。
4)重复步骤2和3,直到没有偏差或将误差减小到一个给定的范围内。
感知机算法尝试找到一种分类器,通过应用称为训练集(训练集对应上一节中机器学习定义中的经验E)的带标签的数据集,将输入数据分为两个类。该算法通过随机数设置初值权重向量w和误差项b。然后通过函数f对输入数据进行处理,给出向量y。然后将这个生成的输出y与训练集中正确的输出值进行比较,并对权重向量w和误差项b进行相应的调整。为了理解向量调整过程,假设存在点p1,其正确的输出值是+1。现在,假如感知机将p1错误地分类为-1,为了正确地对p1进行分类,感知机将向量w和误差项b向p1方向进行微小的移动(为防止突然的跳跃,移动将受到学习率的限制)。当找到正确的分类器或者将偏差限定在一个用户给定的特定范围内时,算法将停止。
现在让我们通过一个简单的例子来了解感知机算法是如何运行的。
为了让感知机算法工作,我们需要一个线性可分的数据集。假定数据通过下式生成:
x2 = x1 + 1/2
基于上式,正确的分类器由下式给出:
![35610cc4d1283996a77c1eec412275f9a34d624e](https://i-blog.csdnimg.cn/blog_migrate/5023075c8726edaa1a7e120539de8d08.png)
![f5603483d952de48b1518daf54a9838b44b0aa8a](https://i-blog.csdnimg.cn/blog_migrate/60b3d4bda6a2af8c046ef1f263ebc985.png)
现在是时候训练感知机了!
![75173d6d2860b8f55ca4d6fcd88b7c1b10b4e9af](https://i-blog.csdnimg.cn/blog_migrate/ec71a94d9c1fe6695ff529bfda5db42c.png)
感知机找到正确分类器的工作方式示意图。正确的分类器用黑色表示
上面的图形给出了感知机的训练状态。每一个错误的分类器用一根灰色线表示。如图所示,在找到用黑色线标识正确的分类器后,感知机停止运算。
最后的分类器的放大视图如下所示。
![image]( https://yqfile.alicdn.com/a4504e9beeb1ff53391f89f5405b2671136319b8.png" >