《模式识别与智能计算》感知机模型

感知机模型
按照统计学三要素来写的话:
模型:符号函数
策略:损失函数;误点到超平面的距离之和
算法:利用梯度下降算法进行求解
感知机原理:
感知机模型用来线性判别数据集,什么意思呢就是用一超平面来隔断两个不同的类别,超平面在二维的数据集中就是一条直线,在三维的数据集中就是一个平面,假设有n维的数据,那么划分的超平面为(n-1)维度。如下图二维和三维的情况,蓝色部分为超平面:
在这里插入图片描述
如何来找这个超平面可以使得分类呢,这里采用计算点到超平面的距离之和作为损失函数。
点到这个超平面的距离公式推导为:
点到超平面公式推导
有了这个后我们就可以来写感知机模型了。原谅我偷懒了,这里就把图片弄过来吧,图片来源(统计学习方法)
在这里插入图片描述

# coding:utf-8
"""
@author:Darren
@file:perceptron.py
@time:2020/1/14
"""
import numpy as np


class Perceptron:
    def __init__(self, x, y, n, eta):
        self.x = x  # 实例点
        self.y = y  # 实例点的分类
        self.n = n  # 实例点个数
        self.eta = eta  # 学习率

    # 随机梯度下降法
    def SGD(self):
        # 对w,b取初值
        w = np.array([0, 0])
        b = 0
        # 记录一次迭代是否有误分类点
        flag = 1
        while flag == 1:
            flag = 0
            for i in range(n):
                # 如果有误分类点
                if self.y[i] * (w.dot(self.x[i]) + b) <= 0:
                    # 更新w,b,设置flag为1
                    w = w + self.eta * self.y[i] * self.x[i]
                    b = b + self.eta * self.y[i]
                    flag = 1
        return w, b


if __name__ == "__main__":
    x = np.array([[3, 3], [4, 3], [1, 1]])
    y = np.array([1, 1, -1])
    n = 3
    eta = 1
    perceptron = Perceptron(x, y, n, eta)
    w, b = perceptron.SGD()
    print("w is",w)
    print("b is",b)

结果

w is [1 1]
b is -3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值