0 - 算法描述

  感知机算法是一类二分类算法,其问题描述为,给定一个训练数据集

$$T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},$$

其中$x_i\in \mathbb{R}^n,y_i\in\{-1,1\},i=1,2,\cdots,N$,求参数$w,b$,使得以下损失函数极小化问题的解

$$\min_{w,b}L(w,b)=\min -\sum_{x_i\in M}y_i(w\cdot x_i+b),$$

其中$M$为误分类点的集合。

  下一节给出损失函数的推导过程。

1 - 推导过程

  感知机算法求解的数据集必须具有线性可分性,其定义为,对于数据集

$$T=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},$$

其中$x_i\in \mathbb{R}^n,y_i\in\{-1,1\},i=1,2,\cdots,N$,如果存在某个超平面$S$

$$w\cdot x + b = 0,$$

能够将数据集的正类和负类完全正确地划分到超平面的两侧,即对所有$y_i=+1$的样本$i$,有$w\cdot x_i+b>0$,对所有$y_i=-1$的样本$i$,有$w\cdot x_i + b < 0$,则称数据集$T$为线性可分数据集(linearly separable dataset)。

  感知机算法即是求解线性可分数据集中的超平面$S$的算法。由于超平面是由$w$和$b$确定的,因此学习超平面的目标即是确定参数$w$和$b$,按照梯度下降法优化要求,需要定义一个关于参数$w$和$b$的损失函数进行优化。

  注意到,损失函数被期望是连续可导的,因此不能直接选取误分类点个数作为损失函数,在感知机中,选取误分类点到超平面$S$的总距离作为损失函数。对于输入空间$\mathbb{R}^n$中任意一点$x_i$到超平面$S$的距离为

$$\frac{1}{\left \|  w\right \|_2}\left | w \cdot x_i + b \right |,$$

其次,对于误分类点来说,满足

$$-y_i(w_i\cdot x_i+b)>0,$$

因此可以把距离公式的绝对值替换得到

$$-\frac{1}{\left \|  w\right \|_2}y_i\left ( w \cdot x_i + b \right ),$$

假设超平面$S$的误分类集合为$M$,那么所有误分类点到超平面$S$的总距离为

$$-\frac{1}{\left \|  w\right \|_2}\sum_{x_i\in M}y_i\left ( w \cdot x_i + b \right ),$$

不考虑$\frac{1}{\left \|  w\right \|_2}$,则感知机$sign(w\cdot x+b)$的损失函数定义为

$$L(w,b)=-\sum_{x_i\in M}y_i(w\cdot x_i+b).$$

2 - 参考资料

《统计学习方法》,李航

【分类算法】感知机(Perceptron)的更多相关文章

  1. matlab 实现感知机线性二分类算法(Perceptron)

    感知机是简单的线性分类模型 ,是二分类模型.其间用到随机梯度下降方法进行权值更新.参考他人代码,用matlab实现总结下. 权值求解过程通过Perceptron.m函数完成 function W = ...

  2. 感知机(perceptron)概念与实现

    感知机(perceptron) 模型: 简答的说由输入空间(特征空间)到输出空间的如下函数: \[f(x)=sign(w\cdot x+b)\] 称为感知机,其中,\(w\)和\(b\)表示的是感知机 ...

  3. 2. 感知机(Perceptron)基本形式和对偶形式实现

    1. 感知机原理(Perceptron) 2. 感知机(Perceptron)基本形式和对偶形式实现 3. 支持向量机(SVM)拉格朗日对偶性(KKT) 4. 支持向量机(SVM)原理 5. 支持向量 ...

  4. 神经网络、logistic回归等分类算法简单实现

    最近在github上看到一个很有趣的项目,通过文本训练可以让计算机写出特定风格的文章,有人就专门写了一个小项目生成汪峰风格的歌词.看完后有一些自己的小想法,也想做一个玩儿一玩儿.用到的原理是深度学习里 ...

  5. Logistic回归分类算法原理分析与代码实现

    前言 本文将介绍机器学习分类算法中的Logistic回归分类算法并给出伪代码,Python代码实现. (说明:从本文开始,将接触到最优化算法相关的学习.旨在将这些最优化的算法用于训练出一个非线性的函数 ...

  6. [分类算法] :SVM支持向量机

    Support vector machines 支持向量机,简称SVM 分类算法的目的是学会一个分类函数或者分类模型(分类器),能够把数据库中的数据项映射给定类别中的某一个,从而可以预测未知类别. S ...

  7. K近邻分类算法实现 in Python

    K近邻(KNN):分类算法 * KNN是non-parametric分类器(不做分布形式的假设,直接从数据估计概率密度),是memory-based learning. * KNN不适用于高维数据(c ...

  8. 算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification)

    算法杂货铺——分类算法之朴素贝叶斯分类(Naive Bayesian classification) 0.写在前面的话 我个人一直很喜欢算法一类的东西,在我看来算法是人类智慧的精华,其中蕴含着无与伦比 ...

  9. 分类算法之贝叶斯(Bayes)分类器

    摘要:旁听了清华大学王建勇老师的 数据挖掘:理论与算法 的课,讲的还是挺细的,好记性不如烂笔头,在此记录自己的学习内容,方便以后复习.   一:贝叶斯分类器简介 1)贝叶斯分类器是一种基于统计的分类器 ...

随机推荐

  1. Vue 中的Vue Router一级路由,二级路由,三级路由以及跳转

    今天编写了一下Vue中的路由 先用命令行新建一个空的项目,并且我知道要用路由,就下载了路由的相关依赖 vue init webpack demo5 完毕之后进入所在的项目 cd demo5 之后用vs ...

  2. linux网络编程之socket编程(十五)

    今天继续学习socket编程,这次主要是学习UNIX域协议相关的知识,下面开始: [有个大概的认识,它是来干嘛的] ①.UNIX域套接字与TCP套接字相比较,在同一台主机的传输速度前者是后者的两倍. ...

  3. Oracle中split功能的实现

    原始需求: 有这样的表:tb和pk两列 PK是将表的多个主键用“|”进行分隔,我想把它变成多行 如 fundamentals_asia1_af_out ID_BB_GLOBAL|BC_DT|BC_EQ ...

  4. C++——构造和析构函数

    现在学习进入第三阶段,对c++要有更深入的学习,关于构造函数和析构函数这一块需要总结一下,来深刻理解这两个函数的意义. 什么是构造函数和析构函数呢呢?听着就很高大上,但是要从心里藐视它.就像自然万物有 ...

  5. Hibernate初探之单表映射——Hibernate概念及插件的安装

    什么是ORM ORM(Object/Relationship Mapping):对象/关系映射 为什么要有ORM? 利用面向对象思想编写的数据库应用程序最终都是把对象信息保存在关系型数据库中,于是要编 ...

  6. PL/SQL 子查询

    一.概述 在一个SQL语句中嵌套另一个SQL语句成为子查询.包括单行子查询,多行子查询,多列子查询. 注意,当在DDL语句中引用子查询时,可以带有Order By子句:但是当在where子句.Set子 ...

  7. appium+python+iOS 环境搭建,安装fbsimctl

    (1)设置postBuffer的值 开始如下的安装之前,需先修改postBuffer的值,默认的比较下,会导致下载大文件时失败, 参考链接:http://blog.sina.com.cn/s/blog ...

  8. c语言的函数指针

    简单定义并间接调用 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<time.h> void singas ...

  9. 15组-Legendary-团队项目总结

    一.项目名称:教室选座系统 二.项目进度表: 项目进度表 活动名称 所属阶段 计划开始时间 计划结束时间 实际结束时间 完成情况 项目方向 项目确立阶段 2019.11.14 2019.11.15 2 ...

  10. centos6.5 安装163yum源

    1.下载yum源 http://mirrors.163.com/.help/CentOS6-Base-163.repo 2.把下载好的yum源放到/etc/yum.repos.d下 mv CentOS ...