[python学习]机器学习 -- 感知机

思路过程参考:李航 《统计学习方法》-- 感知机
代码内容为:原始形式+对偶形式
如有问题欢迎讨论

import numpy as np
import matplotlib.pyplot as plt
'''
def perceptron_strategy_original(data,y,loop_numb):
    w = np.array([[0,0]])
    b = 0
    delta = 1
    for i in range(loop_numb):
        k = 0
        for j in data:
            if y[k]*(np.dot(w,j)+b)<=0:
                w += delta*y[k]*j
                b += delta*y[k]
            k += 1
    return w,b
'''
def perceptron_strategy_dual(data,y,loop_numb):
    w = np.array([[0,0]])
    b = 0
    delta = 1
    gram = [[18,21,6],
            [21,25,7],
            [6,7,2]]
    alpha = [0,0,0]

    for m in range(loop_numb):
        k = 0
        for n in data:
            if y[k]*(alpha[0]*y[0]*gram[0][k]+alpha[1]*y[1]*gram[1][k]+alpha[2]*y[2]*gram[2][k]+b)<=0:
                alpha[k]+=1*delta
                b += y[k]
            k += 1
    for z in range(len(data)):
        w += np.dot(alpha[z]*y[z],data[z])
    return w,b

def perceptron_figure(data,weight,y,b):
    for i in range(len(data)):
        if y[i] == 1:
            plt.plot(data[i][0],data[i][1],'ro')
        else:
            plt.plot(data[i][0],data[i][1],'bo')

    x = np.linspace(0,6,100)
    z = -b/weight[0][1]-x*weight[0][0]/weight[0][1]

    plt.plot(x,z,'k',color='y',linewidth=3,linestyle='-')
    plt.show()

def main():
    T = np.array([[3,3],[4,3],[1,1]])
    y = [1,1,-1]
    loop_numb = 100
    #weight,bias = perceptron_strategy_original(T,y,loop_numb)
    weight,bias = perceptron_strategy_dual(T,y,loop_numb)
    print('weight=',weight,'bias=',bias)
    perceptron_figure(T,weight,y,bias)

main()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值