感知机理论用于线性可分数据集分类+例题计算+编程实现

一、感知机原理
简单来说就是给定一组数据集(以二维为例),在二维平面上求出一根直线将标记好的数据集分为两类,直线一边为一类,另一边为另一类。
感知机模型
例如给定一个数据集:
在这里插入图片描述
其中:
在这里插入图片描述
此时假设分类直线的函数为:
在这里插入图片描述
其中w是这个平面的法向量,b是这个平面的截距。这里用的是平面方程的一般式,即假设平面的法向量为n=(A,B,C)则这个平面的一般式为Ax+By+Cz+D=0。

如果分类正确,那么对于所有y=1的实例i,有:
在这里插入图片描述
对于所有y=-1的实例i,有:
在这里插入图片描述
那么误分类就是:
在这里插入图片描述
这个数据集中某个实例到分类超平面的距离为:
在这里插入图片描述
这里用到了点到平面的距离公式:
在这里插入图片描述
||w||表示w的L2范数,它的形式就是距离公式的分母那种形式,即:
在这里插入图片描述

误分类点到分类超平面的总距离为:
在这里插入图片描述

故感知机的损失函数为:
在这里插入图片描述
求参数w,b,使其为以下损失函数极小化问题的解:
在这里插入图片描述
采用梯度下降法来求解:
在这里插入图片描述
随机选择误分类点对w和b进行更新(梯度的反方向就是下降最快的方向):
在这里插入图片描述
在这里插入图片描述

(二)例题计算
例题:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(三)编程计算

import numpy as np

import matplotlib.pyplot as plt


#将数据保存成字典的形式
train_data_set = {-1:np.array([[1,1]]),
                 1:np.array([[3,3],
                             [4,3]])}
data_color={-1:'r',1:'b'}




def train(data):
    rate=1  #学习速率
    w=np.array([0,0]) #斜率
    b=0  #截距
    optimize1=True
    while optimize1:
        a=0
        exit_flag1=True
        for i in data:           #i=1或-1
            for j in data[i]:
                if  i*(np.dot(j,w)+b) <=0:
                    w=w+rate*j*i
                    b=b+rate*i
                    
                    exit_flag1=False
                    break   #跳出内层for循环
                else:
                    a=a+1
            if not exit_flag1:
                break       #跳出外层for循环,进入内层的while循环
        
        if a==3:   #样本的容量,代表所需循环的次数,意思是只有当不再出现分类错误的现象才能退出while
            break

   
            
            
    
    return w,b


w_t,b_t=train(train_data_set)
print("w0=",w_t[0])
print("w1=",w_t[1])
print("b=",b_t)

运行结果:
w0= 1
w1= 1
b= -3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

comli_cn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值