机器学习——感知器算法及python实现

Posted 逗逗飞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了机器学习——感知器算法及python实现相关的知识,希望对你有一定的参考价值。

说明:本文从自己的理解出发来讲解感知器是如何训练的,如想知道比较学术的概念,请查阅相关论文。

1、什么是感知器

本文假设数据为:二维二类、线性可分

感知器就是一个分类器,如:给两类数据做训练集A,B,训练完成之后,给定一个测试数据,通过感知器,可以分成A或B。

因为数据是二维线性可分的,我们不妨假设该线性方程为w0*x0+w1*x1+w2 = 0

2、如何训练

训练的最终结果是训练集中A的结果在直线的一侧,假设经过过滤器后其值<0; B的结果在直线的另一侧经过过滤器后其值>0。

可以先给w=[w0,w1,w2]赋一个初始值如w=[1,1,1]。


如果训练集中的点x的标签为A,且带入线性方程后的值<0,则当前感知器对x点分类正确,不对w进行调整

如果训练集中的点x的标签为A,且带入线性方程后的值>=0,则当前感知器对x点分类不正确,对w进行调整。

本来应该<0,但结果>=0,所以w调整原则为w =w-x。因为wx>(w-x)*x,能够使调整后的结果变小


如果训练集中的点x的标签为B,且带入线性方程后的值>0,则当前感知器对x点分类正确,不对w进行调整

如果训练集中的点x的标签为B,且带入线性方程后的值<=0,则当前感知器对x点分类不正确,对w进行调整。

本来应该>0,但结果<=0,所以w调整原则为w =w+x。因为wx<(w+x)*x,能够使调整后的结果变大


其中应为w比x多了一个维度,对x的处理方式是采用增量模式,即每个样本的第三维度都为1


3、python代码实现

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

w = [1,1,1]
x1 =[[1,0,1],[0,1,1],[2,0,1],[2,2,1]]
x2=[[-1,-1,1],[-1,0,1],[-2,-1,1],[0,-2,1]]
flag = False
while flag != True:
    for i in range(4):
        t = 0
        for j in range(3):
            t += w[j]*x1[i][j]
        if(t <= 0):
           for j in range(3):
            w[j] +=x1[i][j]
    for i in range(4):
       t = 0
       for j in range(3):
           t += w[j]*x2[i][j]
       if(t >= 0):
           for j in range(3):
                w[j] -=x2[i][j]
    flag = True
    for i in range(4):
        t1 = 0
        t2 = 0
        for j in range(3):
            t1 += w[j]*x1[i][j]
            t2 += w[j]*x2[i][j]
        if (t1 <=0 ):
            flag =False
            break
        if(t2 >=0):
            flag = False
            break
plt.figure()
for i in range(4):
    plt.scatter(x1[i][0],x1[i][1],c = 'r',marker='o')
    plt.scatter(x2[i][0],x2[i][1],c = 'g',marker='*')
plt.grid()
p1=[-2.0,2.0]
p2=[(-w[2]+2*w[0])/w[1],(-w[2]-2*w[0])/w[1]]
plt.plot(p1,p2)
plt.show()

4、测试结果


5、结果分析

该算法对线性可分的数据进行分类,若非线性可分,会导致死循环

以上是关于机器学习——感知器算法及python实现的主要内容,如果未能解决你的问题,请参考以下文章

机器学习实验一 感知器及其应用

机器学习--感知器数据分类算法步骤(慕课网-实现简单的神经网络)

机器学习--感知机算法原理方法及代码实现

机器学习——实验一

机器学习 实验一 感知器及其运用

Python机器学习中文版