前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《模式识别与智能计算》感知机模型

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

作者头像
Max超
发布2020-02-13 16:49:33
5650
发布2020-02-13 16:49:33
举报

感知机模型 按照统计学三要素来写的话: 模型:符号函数 策略:损失函数;误点到超平面的距离之和 算法:利用梯度下降算法进行求解 感知机原理: 感知机模型用来线性判别数据集,什么意思呢就是用一超平面来隔断两个不同的类别,超平面在二维的数据集中就是一条直线,在三维的数据集中就是一个平面,假设有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
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-01-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档