感知机模型[实现]

感知机模型:f(x)=sign(wx+b)

感知机学习策略:通过改变w,b,使损失函数最小

L(w,b)=-\sum(y(wx+b)))

感知机学习算法:随机梯度下降(每次仅对一个误分点进行学习)

import numpy as np

def f(w, x, b):
    y = np.sum(np.dot(w, x)) + b
    if y > 0:
        return 1
    return -1

def loss(w, x, b, y):
    t = -1 * y * f(w, x, b)
    if t > 0:
        return t
    return 0  ##important!!!

def dloss(x, y):
    return -1 * np.dot(x, y)

def perceptron(x, y, w, b, sinta):
    # 感知机学习算法
    t = 1
    while (t > 0):
        wrong = 0
        for i in range(len(x)):
            t = loss(w, x[i], b, y[i])
            if t > 0:
                wrong = i
                break
        if t > 0:
            w = w - sinta * dloss(x[wrong], y[wrong])
            b[0] = b[0] + sinta * y[wrong]
        print(wrong, w, b)

def gram(x):
    tx = np.mat(x).transpose()
    return np.dot(x, tx)

def Dual_form(x, y, sinta):
    # 对偶形式
    gram_x = gram(x)
    alpha = [0] * len(x)
    b = 0
    t = -1
    while (t <= 0):
        for i in range(len(x)):
            t = y[i] * (np.sum(np.multiply(np.multiply(alpha, y), gram_x[i])) + b)
            if t <= 0:
                alpha[i] += sinta
                b += y[i]
                break
        print(alpha)
    w = np.dot(np.multiply(alpha, y), x)
    print(w)

if __name__ == "__main__":
    x = [[3, 3], [4, 3], [1, 1]]
    y = [1, 1, -1]
    w = [0] * 2
    b = [0]
    print(x, y, w, b)
    # perceptron(x,y,w,b,1)
    Dual_form(x, y, 1)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值