用python实现一个简单地感知机模型

'''今天看了几页李航老师的《统计学习方法》,感觉写的很透彻,
有点手痒按照书上的算法花几分钟写了一个简单至极的感知机模型,没有调用numpy,
全程用列表完成,所以内容上稍显复杂'''

alist = [[3,3,1],[4,3,1],[1,1,-1]] #生成实例点
w = [0,0]
b = 0
theta = 1#初始化w和b

def l(x,w,b): #x,w为向量,b为数值

    return x[2] * (x[0]*w[0]+x[1]*w[1] + b)
flag = True
while flag:
    for x in alist:
            if l(x,w,b) <= 0:
                #更新w和b的值
                w[0] = w[0] + theta*x[0]*x[2]
                w[1] = w[1] + theta*x[1]*x[2]
                b = b + theta*x[2]
            print('更新后的模型为:%s*x1+%s*x2+(%s)' % (w[0],w[1],b))
            a = [l(x,w,b) for x in alist]
            if min(a) > 0:
                flag = False
                print('更新完毕!')

'''输出结果如下:
更新后的模型为:3*x1+3*x2+(1)
更新后的模型为:3*x1+3*x2+(1)
更新后的模型为:2*x1+2*x2+(0)
更新后的模型为:2*x1+2*x2+(0)
更新后的模型为:2*x1+2*x2+(0)
更新后的模型为:1*x1+1*x2+(-1)
更新后的模型为:1*x1+1*x2+(-1)
更新后的模型为:1*x1+1*x2+(-1)
更新后的模型为:0*x1+0*x2+(-2)
更新后的模型为:3*x1+3*x2+(-1)
更新后的模型为:3*x1+3*x2+(-1)
更新后的模型为:2*x1+2*x2+(-2)
更新后的模型为:2*x1+2*x2+(-2)
更新后的模型为:2*x1+2*x2+(-2)
更新后的模型为:1*x1+1*x2+(-3)
更新完毕!'''
发布了15 篇原创文章 · 获赞 2 · 访问量 3821

猜你喜欢

转载自blog.csdn.net/KageYamaa/article/details/88553844