感知器算法
感知器算法是一种可以直接得到线性判别函数的线性分类方法,由于它是基于样本线性可分的要求下使用的,所以先来了解下什么是线性可分?
- 线性可分与线性不可分
假设有一个包含 个样本的样本集合 , 其中 . 我们想要找到一个线性判别函数
将两类样本分开,其中 ,如图1所示:
图 1
为了讨论方便,我们将样本 增加了一维常数,得到增广样本向量 ,则 个样本的集合表示为 ,增广权矢量表示为 ,我们得到新的判别函数
对应的决策规则就变为: ,则决策为第一类; 决策为第二类.
那什么是线性可分?什么是线性不可分?
假设有一组样本 ,如果存在这样一个权矢量 ,使得任何一个样本满足“属于第一类, ;属于第二类, ”这样一个条件,那么我们就说这一组样本是线性可分的,即在样本特征空间中,至少会存在一个决策面可以将两类样本正确无误的分开,反之找不到一个决策面来区分的话,就说样本是线性不可分的。
对于感知器,我们要求样本必须是线性可分的,因为它作为一种最最简单的学习机器,目前还无法很好的解决线性不可分的情况(当然,有了解决不可分的算法),即便是不可分的情况,人们也更加倾向于使用其他算法,这也是感知器无法应用到更多实践场合的原因。
2. 感知器算法
感知器算法采用最直观的准则,即最小错分样本数。将错分样本到判别界面距离之和作为准则,称为感知器准则,表示如下:
为了求解感知器的准则函数,就是找到一个权矢量,使得惩罚函数最小化。我们使用机器学习中常用的梯度下降方法来迭代。惩罚函数对权矢量的梯度公式为:
利用梯度下降,我们有:
其中 是学习率(或步长)。
我们得到下列感知器算法(批量调整版本):
当然,我们都知道这种对所有错分样本放到一起进行修正的做法是不妥当的,更妥当的办法是对每一个错分样本都单独修正,且每次都使用同一个固定步长,假如设步长为1,得到单样本调整版本的感知器算法:
感知器算法特点:
- 当样本线性可分情况下,学习率 合适时,算法具有收敛性
- 收敛速度较慢
- 当样本线性不可分情况下,算法不收敛,且无法判断样本是否线性可分
原文地址:https://www.cnblogs.com/celine227/p/15072130.html
- cordova插件- Network Information
- SpringCloud配置中心客户端读取配置
- cordova插件- Inappbrowser
- SpringCloud配置中心高可用搭建
- hadoop压缩与解压
- cordova插件- Media
- JDK8之新特性扩展篇
- Java管理Cookie增删改查操作。
- Intellij Idea乱码解决方案都在这里了
- 神奇,教你用随机数打印hello world
- Mapreduce任务实现邮件监控
- Eclipse中Maven打包程序并在Linux中运行
- SDN开发笔记(七):L2switch源码分析(上)
- spark使用zipWithIndex和zipWithUniqueId为rdd中每条数据添加索引数据
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- IdentityServer4 3.1.x 迁移到 4.x
- 淘宝用户行为数据分析
- PyTorch中Transformer模型的搭建
- A轮公司数据分析面试经验
- Pytorch转NCNN的流程记录
- 算法图解:如何找出栈中的最小值?
- 滴滴出行二面笔试题
- spring JdbcTemplate 查询,参数中使用BeanPropertyRowMapper的作用
- 百万级类别的分类模型的拆分训练
- 关于Spring定义的preDestroy修饰的方法不执行,有以下两种原因,总有一款适合你
- CSP201912-2-回收站选址题目解析-Java ,
- Spring boot框架快速入门
- SpringBoot 跨域问题:Access to XMLHttpRequest at ‘***‘ from origin ‘***‘ has been blocked by CORS policy
- 火车购票-CSP201609-2-Java
- 从后端开发人员的视角:最浅显的理解 Vue