18-感知机模型在经典数据集鸢尾花上的应用

Posted Love AI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了18-感知机模型在经典数据集鸢尾花上的应用相关的知识,希望对你有一定的参考价值。

今天去新宿舍打扫了一天,一切都是新的。立秋了,天气也凉爽起来,让人可以静下心来,不再那么浮躁。如果用心生活,时间是会慢下来的。你会享受多出N倍的人生。浮光掠影,追求效率,牺牲的是本该属于自己的趣味盎然的过程。自从脱离大公司的束缚,不再有周末和下班的概念。然而工作成了一种打怪升级的冒险历程,有点类似游戏。周一不再如上坟,工作和休息也不再泾渭分明。不到两年时间,比在大公司工作十年的经历更值得回忆。有时后悔在大公司呆太久了,单调的生活真的是杀时间的利器,会让你觉得逝去年华如流水,然而并没有什么值得追忆。

 

上周我们学习了感知机模型,它的损失函数定义为误分类点到分离超平面的距离之和。之前的线性回归模型中,我们用的损失函数是实际值y和理论值技术分享的误差平方和。可能有的同学觉得奇怪,为啥损失函数用的不一样呢?因为我们要求w和b,使得损失函数最小,对于可导函数,我们的套路是用梯度下降法,不断更新w和b,向极值点方向靠拢。在线性回归模型中,实际值y和理论值技术分享的误差平方和是可导函数,所以是可行的。而在感知机模型中,实际值y和理论值技术分享的取值只可能是+1或-1,它们的误差平方和与w,b并没有明显的函数关系,也就不能通过梯度下降法来求使得损失函数极小化的w和b了。这个时候,我们发现误分类点到分离超平面的距离(注释1),和w,b都能扯上关系,而且很幸运也是连续可导的,所以就用这个作为损失函数,这样我们可以继续使用梯度下降法来更新w和b,使得损失函数向极值点方向靠拢。

【注释1:误分类点到超平面的距离=技术分享=技术分享

 

用这个损失函数有个缺点,即它只计算了误分类点到分离超平面的距离,正确分类点的损失函数应该是0,那么针对每个点,我们首先要判断它是否是误分类点,如果是才需要计算梯度,更新w,b。

 

损失函数L(w,b)的梯度通过偏导计算:

 

技术分享

 

随机选取一个误分类点,根据上面的规则,计算新的w, b然后进行更新:

技术分享

 

如果有一个通用的公式,对于所有点,无论是正确分类还是错误分类都适用,只是在正确分类点的情况下不更新w,b,能实现吗?数学家说SO EASY,于是有了下面改良版的权重更新规则:

 

技术分享

 

这意味着,仅当针对给定训练实例 (x,y) 产生的输出值 f(x)与预期的输出值 y不同时,权重向量才会发生改变。并且输出值 f(x)与预期的输出值 y不同时,意味着y-f(x)=y-(-y)=2*y【记住 f(x)和y的取值只可能是+1或-1】,即对于误分类点,w(j):=w(j)+2*α*y*x(j),这样和上周推导的权重更新公式是不是很像了?只是之前的学习率η=2*α。下面我们用算法实现这个改良版的权重更新规则:

(代码及数据集地址:http://pan.baidu.com/s/1nu6P6sx)

 

 

技术分享

技术分享

 

用感知机模型来训练大名鼎鼎的鸢尾花数据集:

这里只考虑两种花 Setosa 和 Versicolor,以及两种特征 sepal length 和 petal length。但是 Perceptron Model 其实可以解决多类别分类问题, 参考 one-vs-all。

  • 读入数据

    技术分享

 

  • 画散点图

 

技术分享

技术分享

 

  • 训练感知机模型

技术分享

技术分享

 

结果 error 的确最后为 0, 证明是 convergent 的, 且分类效果应该说是非常准确了。

 

  • 画决策边界(可以打印看下np.meshgrid和xx1.ravel的值)

技术分享

技术分享

 

虽然 Perceptron Model 在上面 Iris 例子里表现得很好,但在其他问题上却不一定表现得好。Frank Rosenblatt 从数学上证明了,在线性可分的数据里,Perceptron 的学习规则会收敛,但在线性不可分的情况下,却无法收敛。这个时候只能通过定义最大迭代次数来控制了。

以上是关于18-感知机模型在经典数据集鸢尾花上的应用的主要内容,如果未能解决你的问题,请参考以下文章

统计学习方法线性可分支持向量机对鸢尾花(iris)数据集进行二分类

从零开始机器学习 第1篇 一个感知机的实现

Keras之对鸢尾花识别

数据分析经典案例-鸢尾花(iris)数据集分析

3、鸢尾花数据集

Python3入门机器学习经典算法与应用学习 资源