感知机学习随笔

 本文主要讲Python实现感知机算法,简单讲一下感知机模型,学习策略和算法。

感知机学习随笔_第1张图片

  感知机学习随笔_第2张图片

   感知机学习随笔_第3张图片

import copy

training_set = [[(3, 3), 1], [(4, 3), 1], [(1, 1), -1]] #以书本训练数据为例
w = [0, 0]   #权值向量
b = 0        #偏置
history = []  #存放所有的w和b的历史记录


#更新w和b
def update(item):
    global b    #这里的变量需要定义为全局变量,否则会认为b是局部变量
    w[0]=w[0]+1*item[1]*item[0][0]
    w[1]=w[1]+1*item[1]*item[0][1]
    b=b+1*item[1]
    history.append([copy.copy(w),b])   #浅拷贝w,因为w的值一直在更新


#计算误分类点
def cal(item):
    res=0
    for i in range(len(item[0])):
        res=res+(w[i]*item[0][i])
    res=res+b
    res=res*item[1]
    return res


#检查是否没有误分类点
def check():
    flag=False
    for i in range(len(training_set)):
        if(cal(training_set[i])<=0):
            flag=True
            update(training_set[i])
    if not flag:
        print("最终的w为"+str(w))  #将结果转换成字符串
        print("最终的b为"+str(b))
    return flag


if __name__ == "__main__":
    for i in range(1000):
        if not check():break   #check()返回的是False才结束,所以不能定义为真结束,
                               #有误判断点 也是为真
    print("w和b的迭代记录"+str(history))

算法比较简单,三个函数,知道最后没有误分类点即可,采用迭代的思想,结果也和书本上一致。

最终的w为[1, 1]
最终的b为-3
w和b的迭代记录[[[3, 3], 1], [[2, 2], 0], [[1, 1], -1], [[0, 0], -2], [[3, 3], -1], [[2, 2], -2], [[1, 1], -3]]

你可能感兴趣的:(机器学习)