机器学习 | 分类算法原理——感知机

news2024/11/16 10:40:34

Hi,大家好,我是半亩花海。接着上次的内积继续更新《白话机器学习的数学》这本书的学习笔记,在此分享感知机这一回归算法基础。本章的回归算法基础基于《基于图像大小进行分类》项目,欢迎大家交流学习!

目录

一、感知机概述

二、案例分析

1. 设置问题

2. 训练数据的准备

3. 权重向量的更新表达式


一、感知机概述

感知机(perceptron)是二分类线性分类模型,属于监督学习算法。输入为实例的特征向量,输出为实例的类别(取 +1 和 -1)。感知机旨在求出将训练数据进行线性划分的分离超平面。为求得超平面,感知机导入了基于误分类的损失函数,利用梯度下降法对损失函数进行最优化求解,求得感知机模型。

感知机学习算法具有简单而易于实现的优点,分为原始形式和对偶形式,感知机预测是学习得到的感知机模型对于新的输入实例进行分类。感知机是作为神经网络(深度学习)的起源的算法,因此,学习感知机的构造也就是学习通向神经网络和深度学习的一种重要思想。


二、案例分析

1. 设置问题

具体要如何求出权重向量呢? 基本做法和回归时相同:将权重向量用作参数,创建更新表达式来 更新参数。接下来,我要说明的就是被称为感知机(perceptron) 的模型。入门知识里经常会提到它。

感知机是接受多个输入后将每个值与各自的权重相乘(类似于向量内积或者矩阵乘法),最后输出总和的模型。人们常用这样的下面这样的图来表示它:

在介绍参数更新表达式之前,我们需要做好一些准备工作。

2. 训练数据的准备

首先是训练数据。设表示宽的轴为 x_1、表示高的轴为 x_2,用 y 来表示图像是横向还是纵向的,横向的值为 1、纵向的值为 −1,如下表所示。

接下来,根据参数向量 x 来判断图像是横向还是纵向的函数,即返回 1 或者 −1 的函数 f_w(x) 的定义如下。这个函数被称为判别函数

f_{\boldsymbol{w}}(\boldsymbol{x})= \begin{cases}1 & (\boldsymbol{w} \cdot \boldsymbol{x} \geqslant 0) \\ -1 & (\boldsymbol{w} \cdot \boldsymbol{x}<0)\end{cases}

一起来思考一下,比如,与权重向量 \boldsymbol{w} 的内积为负的向量 \boldsymbol{x} 是什么样的向量呢?用图形来解释更容易理解,所以我们利用这个包含 cos 的表达式来思考:\boldsymbol{w} \cdot \boldsymbol{x}=|\boldsymbol{w}| \cdot|\boldsymbol{x}| \cdot \cos \theta。|w| 和 |x| 必定为正数,所以决定内积符号的是 cos \thetacos \theta 图像如下图所示。

在 90° < θ < 270° 的时候 cos \theta 为负。此时,我们需要知道向量在图形上处于什么位置。与权重向量 \boldsymbol{w} 之间的夹角为 \theta,在 90° < θ < 270° 范围内的所有向量都符合条件,所以向量在图形上处于这条直线下面、与权重向量方向相反的这个区域,如下图左侧所示。同理,使内积为正的向量就是与负的区域相反的区域,同样如下图右侧所示。

内积是衡量向量之间相似程度的指标。结果为正,说明二者相似; 为 0 则二者垂直;为负则说明二者不相似。

3. 权重向量的更新表达式

在这个基础上,我们可以这样定义权重向量更新表达式

\boldsymbol{w}:= \begin{cases}\boldsymbol{w}+y^{(i)} \boldsymbol{x}^{(i)} & \left(f_{\boldsymbol{w}}\left(\boldsymbol{x}^{(i)}\right) \neq y^{(i)}\right) \\ \boldsymbol{w} & \left(f_{\boldsymbol{w}}\left(\boldsymbol{x}^{(i)}\right)=y^{(i)}\right)\end{cases}

式中,f_{\boldsymbol{w}}\left(\boldsymbol{x}^{(i)}\right) \neq y^{(i)}表示判别函数的分类结果不正确f_{\boldsymbol{w}}\left(\boldsymbol{x}^{(i)}\right) = y^{(i)}表示判别函数的分类结果正确i 在介绍回归的时候也出现过,它指的是训练数据的索引,而不是 i 次方的意思,这一点一定要注意。用这个表达式重复处理所有训练数据,更新权重向量。

其次,光看 \boldsymbol{w}+y^{(i)} \boldsymbol{x}^{(i)} 这个表达式的话是会觉得很难。一边把学习过程实际地画在图上,一边去考虑它的含义可能就容易理解了。权重向量通过随机值来初始化,我们可以首先在图上随意画一个权重向量和直线作为初始向量(就像我们在回归时随意确定初始值一样)。

在这个状态下,假设第一个训练数据是 \boldsymbol{x}^{(1)}=(125,30), 目前我们就先用它来更新参数。

这是上述表中列举的训练数据中的一个,标签是 1,它表示图像是横向的:

现在权重向量 \boldsymbol{w} 和训练数据的向量 \boldsymbol{x}^{(1)} 二者的方向几乎相 反,\boldsymbol{w} 和 \boldsymbol{x}^{(1)} 之间的夹角 \theta 的范围是 90° < \theta < 270° ,内积为负。因此,判别函数 f_{\boldsymbol{w}}\left(\boldsymbol{x}^{(1)}\right) 的分类结果为 −1。而训练数据 \boldsymbol{x}^{(1)} 的标签 \boldsymbol{y}^{(1)} = 1,所以 f_{\boldsymbol{w}}\left(\boldsymbol{x}^{(1)}\right) \neq y^{(1)},说明分类失败

已知现在 \boldsymbol{y}^{(1)} = 1,根据向量的加法运算,更新表达式如下。

\boldsymbol{w}+y^{(1)} \boldsymbol{x}^{(1)}=\boldsymbol{w}+\boldsymbol{x}^{(1)}

则 \boldsymbol{w}+\boldsymbol{x}^{(1)} 的矢量图如下所示。

此时,我们得到新的权重,继续更新权重:这个 \boldsymbol{w}+\boldsymbol{x}^{(1)} 就是下一个新的 \boldsymbol{w},我们可以画一条与新的权重向量垂直的直线,相当于把原来的线旋转了一下,如下所示。

如此看来,刚才 \boldsymbol{x}^{(1)} 与权重向量分居直线两侧,现在它们在同一侧了,如下图所示。

这次 \theta < 90°,所以内积为正,判别函数 f_w(\boldsymbol{x}) 的分类结果为 1。而且 \boldsymbol{x}^{(1)} 的标签也为 1,说明分类成功。如此迭代搜索循环,不断更新参数的权重向量。

刚才处理的是标签值 y = 1 的情况,而对于 y = -1 的情况,只是更新表达式的向量加法变成了减法而已,做的事情是一样的。 也就是说,虽然有加法和减法的区别,但它们的做法都是在分类 失败时更新权重向量,使得直线旋转相应的角度。像这样重复更新所有的参数,就是感知机的学习方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1949897.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里云-物联网平台-IoT设备MQTT通信

阿里云-物联网平台-IoT设备MQTT通信 登录阿里云物联网平台创建产品添加设备查看设备客户端登录 登录阿里云 阿里云 注册账号&#xff0c;实名认证这些按提示操作即可不在赘述。 物联网平台 选择产品》物联网》物联网平台 进入管理控制台界面 开通服务 选择开通公共实例测试环…

oracle中存储过程的写法

存储过程常规语法&#xff1a; 实际业务例子&#xff1a; CREATE OR REPLACE TRIGGER "TRI_B00_02_ONLY_GUID" BEFORE/AFTER INSERT OR UPDATE OR DELETE ON B00_02 FOR EACH ROW declare t_guid varchar2(300) : ; --GUID t_cnt int : 0; BEGIN t_guid : :NEW…

Oracle核心进程详解并kill验证

Oracle核心进程详解并kill验证 文章目录 Oracle核心进程详解并kill验证一、说明二、核心进程详解2.1.PMON-进程监控进程2.2.SMON-系统监控进程2.3.DBWn-数据库块写入进程2.4. LGWR-日志写入器进程2.5. CKPT-检查点进程 三、Kill验证3.1.kill ckpt进程3.2.kill pmon进程3.3.kill…

Spring MVC笔记

Java 版本: JDK17 Eclipse: eclipse-jee-2023-12-R-win32-x86_64.zip Tomcat 10 JDK17采用springframework 6 *必须考虑兼容性问题&#xff0c;所以JDK 和spring framework不要乱搭配 初步创建Maven Project 安装包 修改poem.xml <dependency><groupId>org.sprin…

Spark实时(五):InputSource数据源案例演示

文章目录 InputSource数据源案例演示 一、​​​​​​​File Source 1、读取text文件 2、读取csv文件 3、读取json文件 二、Socket Source 三、Rate Source InputSource数据源案例演示 在Spark2.0版本之后&#xff0c;DataFrame和Dataset可以表示静态有边界的数据&am…

客户服务知识库最佳实践 7 个步骤

介绍 每个公司的声誉都依赖于其客户。 如果全世界都向你敞开了大门&#xff0c;但你最终在与客户打交道方面做得很糟糕&#xff0c;那么消息就会传出去&#xff0c;无论你的捕鼠器有多好&#xff0c;你都会失去销售。 正如营销依赖于与潜在客户的关系一样&#xff0c;公司的…

【Linux】信号3——信号的捕捉

1.信号的捕捉 我们都说信号被收到了&#xff0c;可能不会立马处理 信号是什么时候被处理的呢&#xff1f; 前提是我们得知道自己收到了信号&#xff0c;进程就得在合适的时候去查自己的pending表和block表&#xff0c;这些属于内核数据结构&#xff0c;进程一定要处于内核态&a…

Easy es问题总结

官网教程&#xff1a;https://www.easy-es.cn/pages/ac41f0/#settings 一 测试项目 1 pom <dependencies><!-- 排除springboot中内置的es依赖,以防和easy-es中的依赖冲突--><dependency><groupId>org.springframework.boot</groupId><artifa…

Java语言程序设计基础篇_编程练习题*15.26 (改变透明度)

*15.26 (改变透明度) 重写编程练习题15.24&#xff0c;当球摆动的时候改变球的透明度 思路&#xff1a;很简单&#xff0c;改写编程练习题15.24&#xff0c;为小圆Circle添加一个FadeTransition&#xff0c;再把暂停和开始方法设置在鼠标事件中 代码示例&#xff1a;编程练习…

基于多种机器学习的豆瓣电影评分预测与多维度可视化【可加系统】

有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主 在本研究中&#xff0c;我们采用Python编程语言&#xff0c;利用爬虫技术实时获取豆瓣电影最新数据。通过分析豆瓣网站的结构&#xff0c;我们设计了一套有效的策略来爬取电影相关的JSON格式数据。…

鸿蒙(HarmonyOS)自定义Dialog实现时间选择控件

一、操作环境 操作系统: Windows 11 专业版、IDE:DevEco Studio 3.1.1 Release、SDK:HarmonyOS 3.1.0&#xff08;API 9&#xff09; 二、效果图 三、代码 SelectedDateDialog.ets文件/*** 时间选择*/ CustomDialog export struct SelectedDateDialog {State selectedDate:…

【数据结构初阶】单链表经典算法题十二道——得道飞升(上篇)

目录 1、移除元素 2、反转链表 3、链表的中间节点 4、合并两个有序链表 Relaxing Time&#xff01;&#xff01;&#xff01; ———————————————— 天气之子幻 ———————————————— 1、移除元素 思路&#xff1a; 创建一个新链表&#xff0…

CPU350% JVM GC频繁并GC不掉EXCEL导出

背景&#xff1a; 有个Excel导出的需求&#xff0c;测试的时候&#xff0c;只要连续导出大量的数据就会导致FAT机器反请求反应迟钝&#xff0c;甚至卡死&#xff0c;无法恢复。 排查&#xff1a; 1 跳板机跳到机器上&#xff0c;查看 项目 ipd 执行ps -ef | grep 项目名称.j…

FFmpeg音视频流媒体的顶级项目

搞音视频、流媒体的圈子,没法躲开ffmpeg这个神级项目。 FFmpeg 是一个功能强大且广泛使用的多媒体处理工具。FFmpeg 具备众多出色的特性。它支持多种音频和视频格式的转换,能轻松将一种格式的文件转换为另一种,满足不同设备和应用的需求。不仅如此,它还可以进行视频的裁剪、…

机械学习—零基础学习日志(高数11——三角函数)

零基础为了学人工智能&#xff0c;真的开始复习高数 三角函数之所以比较困难&#xff0c;是因为过于抽象&#xff0c;距离生活太过遥远&#xff0c;这里搜集一些资料&#xff0c;帮助大家能加深对三角函数的理解。 三角函数作用——能测距离 三角函数从应用层&#xff0c;开…

增量同步与全量同步:深入解析数据同步的两种策略

目录 一、增量同步 二、全量同步 三、如何选择合适的数据同步策略&#xff1f; 1.增量同步的场景 2.全量同步的场景 数据同步在后端是非常常见的场景&#xff0c;数据同步的稳定性和实时性对业务有非常重要的影响。数据同步的方式主要有全量同步和增量同步两种&#xff0c;本文…

如何学习ClickHouse:糙快猛的大数据之路(技术要点概览)

这个系列文章用"粗快猛大模型问答讲故事"的创新学习方法&#xff0c;让你轻松理解复杂知识&#xff01;涵盖Hadoop、Spark、MySQL、Flink、Clickhouse、Hive、Presto等大数据所有热门技术栈&#xff0c;每篇万字长文。时间紧&#xff1f;只看开头20%就能有收获&#…

[STM32]FlyMcu同时烧写BootLoader和APP文件-HEX文件组成

目录 一、前言 二、HEX文件的格式 三、组合HEX文件 四、使用FlyMcu烧录 一、前言 如题&#xff0c;BootLoader每次烧写都是全部擦除&#xff0c;当我们烧写APP程序的时候&#xff0c;BootLoader程序将不复存在&#xff0c;很多开发者或许只有USB转TTL模块&#xff0c;没有其…

QML ListView snapMode

属性&#xff1a; snapMode 此属性确定视图滚动在拖动或轻拂之后的解决方式 NoSnap:列表滚动停止时可以停在任意位置&#xff0c;即便第一项显示不全 SnapToItem:当放开鼠标时&#xff0c;移动距离超过半个Item时&#xff0c;自动滑动到下一个Item&#xff0c;否则自动滑动回…