机器学习基石2-Learning to Answer Yes-No

article/2025/11/7 2:11:40

注:
文章中所有的图片均来自台湾大学林轩田《机器学习基石》课程。
笔记原作者:红色石头
微信公众号:AI有道

上节课,简述了机器学习的定义及其重要性,并用流程图的形式介绍了机器学习的整个过程:根据模型\(\mathcal{H}\),使用演算法\(\mathcal{A}\),在训练样本\(\mathcal{D}\)上进行训练,得到最好的\(h\),其对应的\(g\)就是我们最后需要的机器学习的模型函数,一般\(g\)接近于目标函数\(f\)。本节课将继续深入探讨机器学习问题,介绍感知机Perceptron模型,并推导课程的第一个机器学习算法:Perceptron Learning Algorithm(PLA)。

一、Perceptron Hypothesis Set

引入这样一个例子:某银行要根据用户的年龄、性别、年收入等情况来判断是否给该用户发信用卡。现在有训练样本\(\mathcal{D}\),即之前用户的信息和是否发了信用卡。这是一个典型的机器学习问题,我们要根据\(\mathcal{D}\),通过\(\mathcal{A}\),在\(\mathcal{H}\)中选择最好的\(h\),得到\(g\),接近目标函数\(f\),也就是根据先验知识建立是否给用户发信用卡的模型。银行用这个模型对以后用户进行判断:发信用卡(+1),不发信用卡(-1)。

在这个机器学习的整个流程中,有一个部分非常重要:就是模型选择,即Hypothesis Set。选择什么样的模型,很大程度上会影响机器学习的效果和表现。下面介绍一个简单常用的Hypothesis Set:感知机(Perceptron)。

还是刚才银行是否给用户发信用卡的例子,我们把用户的个人信息作为特征向量\(x\),令总共有\(d\)个特征,每个特征赋予不同的权重\(w\),表示该特征对输出(是否发信用卡)的影响有多大。拿所有特征的加权和的值与一个设定的阈值threshold进行比较:大于这个阈值,输出为\(+1\),即发信用卡;小于这个阈值,输出为\(-1\),即不发信用卡。感知机模型,就是当特征加权和与阈值的差大于或等于\(0\),则输出\(h(x)=1\);当特征加权和与阈值的差小于\(0\),则输出\(h(x)=1\),而我们的目的就是计算出所有权值\(w\)和阈值threshold。
1010007-20190314104055694-1371766688.png

为了计算方便,通常我们将阈值threshold当做\(w_0\),引入一个\(x_0=1\)的量与\(w_0\)相乘,这样就把threshold也转变成了权值,简化了计算。\(h(x)\)的表达式做如下变换:

1010007-20190314104110480-1647191345.png

为了更清晰地说明感知机模型,我们假设Perceptrons在二维平面上,即\(h(x)=sign(w_0+w_1x_1+w_2x_2)\)。其中,\(w_0+w_1x_1+w_2x_2=0\) 是平面上一条分类直线,直线一侧是正类\((+1)\),直线另一侧是负类\((-1)\)。权重\(w\)不同,对
应于平面上不同的直线。

1010007-20190314104123548-1070535133.png

那么,我们所说的Perceptron,在这个模型上就是一条直线,称之为linear(binary) classifiers。注意一下,感知器线性分类不限定在二维空间中,在3D中,线性分类用平面表示,在更高维度中,线性分类用超平面表示,即只要是形如的线性模型就都属于linear(binary) classifiers。同时,需要注意的是,这里所说的linear(binary) classifiers是用简单的感知器模型建立的,线性分类问题还可以使用logistic regression来解决,后面将会介绍。

二、Perceptron Learning Algorithm (PLA)

根据上一部分的介绍,我们已经知道了hypothesis set由许多条直线构成。接下来,我们的目的就是如何设计一个演算法\(\mathcal{A}\),来选择一个最好的直线,能将平面上所有的正类和负类完全分开,也就是找到最好的\(g\),使\(g\approx f\)

如何找到这样一条最好的直线呢?我们可以使用逐点修正的思想,首先在平面上随意取一条直线,看看哪些点分类错误。然后开始对第一个错误点就行修正,即变换直线的位置,使这个错误点变成分类正确的点。接着,再对第二个、第三个等所有的错误分类点就行直线纠正,直到所有的点都完全分类正确了,就得到了最好的直线。这种“逐步修正”,就是PLA思想所在。

1010007-20190314104144367-1738366325.png

下面介绍一下PLA是怎么做的。首先随机选择一条直线进行分类。然后找到第一个分类错误的点,如果这个点表示正类,被误分为负类,即\(w^T_tx_{n(t)}<0\),那表示\(w\)\(x\)夹角大于90度,其中\(w\)是直线的法向量。所以,\(x\)被误分在直线的下侧(相对于法向量,法向量的方向即为正类所在的一侧),修正的方法就是使\(w\)\(x\)夹角小于90度。通常做法是\(w\leftarrow w+yx\)\(y=1\), 如图右上角所示,一次或多次更新后的\(w+yx\)\(x\)夹角小于90度,能保证\(x\)位于直线的上侧,则对误分为负类的错误点完成了直线修正。

同理,如果是误分为正类的点,即\(w^T_tx_{n(t)}>0\),那表示\(w\)\(x\)夹角小于90度,其中\(w\)是直线的法向量。所以,\(x\)被误分在直线的上侧,修正的方法就是使\(w\)\(x\)夹角大于90度。通常做法是\(w\leftarrow w+yx\)\(y=-1\),如图右下角所示,一次或多次更新后的\(w\)\(x\)夹角大于90度,能保证\(x\)位于直线的下侧,则对误分为正类的错误点也完成了直线修正。

按照这种思想,遇到个错误点就进行修正,不断迭代。要注意一点:每次修正直线,可能使之前分类正确的点变成错误点,这是可能发生的。但是没关系,不断迭代,不断修正,最终会将所有点完全正确分类(PLA前提是线性可分的)。这种做法的思想是“知错能改”,有句话形容它:“A fault confessed is half redressed.”

实际操作中,可以一个点一个点地遍历,发现分类错误的点就进行修正,直到所有点全部分类正确。这种被称为Cyclic PLA。

1010007-20190314104224613-489759869.png

下面用图解的形式来介绍PLA的修正过程:
1010007-20190515154441259-1416450706.png
1010007-20190515154455103-1275966927.png
1010007-20190515154507816-770528407.png
1010007-20190515154520398-846839206.png
1010007-20190515154533453-981632627.png
1010007-20190515154548027-1977629579.png
1010007-20190515154559706-627923980.png
1010007-20190515154610999-999568188.png
1010007-20190515154626766-1434199203.png
1010007-20190515154640926-1222552054.png

对PLA,我们需要考虑以下两个问题:

  • PLA迭代一定会停下来吗?如果线性不可分怎么办?
  • PLA停下来的时候,是否能保证\(f\approx g\)?如果没有停下来,是否有\(f\approx g\)

三、Guarantee of PLA

PLA什么时候会停下来呢?根据PLA的定义,当找到一条直线,能将所有平面上的点都分类正确,那么PLA就停止了。要达到这个终止条件,就必须保证D是线性可分(linear separable)。如果是非线性可分的,那么,PLA就不会停止。
1010007-20190515155102024-915896169.png
对于线性可分的情况,如果有这样一条直线,能够将正类和负类完全分开,令这时候的目标权重为\(w_f\),则对每个点,必然满足\(y_n=sign(w^T_fx_n)\),即对任一点:\[y_{n(t)}w^T_fx_{n(t)}\geq min_{n}y_nw^T_fx_n>0\] PLA会对每次错误的点进行修正,更新权重\(w_{t+1}\)的值,如果\(w_{t+1}\)\(w_f\)越来越接近,数学运算上就是内积越大,那表示\(w_{t+1}\)是在接近目标权重\(w_f\),证明PLA是有学习效果的。所以,我们来计算\(w_{t+1}\)\(w_f\)的内积:
1010007-20190314104255963-973958092.png

从推导可以看出, \(w_{t+1}\)\(w_f\)的内积跟\(w_t\)\(w_f\)的内积相比更大了。似乎说明了\(w_{t+1}\)更接近\(w_f\),但是内积更大,可能是向量长度更大了,不一定是向量间角度更小。所以,下一步,我们还需要证明\(w_{t+1}\)\(w_t\)向量长度的关系:

1010007-20190314104307889-438116819.png

\(w_t\)只会在分类错误的情况下更新,最终得到的\(\|w_{t+1}\|^2\)相比\(\|w_{t}\|^2\)的增量值不超过\(max\|x_n\|^2\)。也就是说, \(w_t\)的增长被限制了, \(w_{t+1}\)\(w_t\)向量长度不会差别太大!

如果令初始权值\(w_0=0\),那么经过T次错误修正后,有如下结论:
\[\frac{w^T_f}{\|w_f\|} \frac{w_T}{\|w_T\|} \geq \sqrt{T}\frac{ \min_n y_n\frac{w^T_f}{\|w_f\|}x_n}{\sqrt{\max_n\|x_n\|^2}}\] 推导过程如下:

  • \(w_0=0\) ===> \(w^T_f w_{T} \geq T \min_n y_nw^T_fx_n\)
  • \(\frac{w^T_f w_T}{\|w_f\|} \geq T \min_n y_n\frac{w^T_f}{\|w_f\|}x_n\)
  • \(w_0=0\) ===>\(\|w_T\|^2 \leq T \max_n\|x_n\|^2\)===> \(\frac{1}{\|w_T\|} \geq \frac{1}{\sqrt{T} \sqrt{\max_n\|x_n\|^2}}\)
  • \(\frac{w^T_f}{\|w_f\|} \frac{w_T}{\|w_T\|} \geq \sqrt{T}\frac{ \min_n y_n\frac{w^T_f}{\|w_f\|}x_n}{\sqrt{\max_n\|x_n\|^2}}\)

四、Non-Separable Data

上一部分,我们证明了线性可分的情况下,PLA是可以停下来并正确分类的,但对于非线性可分的情况, \(w_f\)实际上并不存在,那么之前的推导并不成立,PLA不一定会停下来。所以,PLA虽然实现简单,但也有缺点:
1010007-20190515160449831-1519492421.png

对于非线性可分的情况,我们可以把它当成是数据集\(D\)中掺杂了一下noise,事实上,大多数情况下我们遇到的\(D\),都或多或少地掺杂了noise。这时,机器学习流程是这样的:
1010007-20190515160540671-1202229192.png
在非线性情况下,我们可以把条件放松,即不苛求每个点都分类正确,而是容忍有错误点,取错误点的个数最少时的权重\(w\)
1010007-20190515160613432-375372568.png

事实证明,上面的解是NP-hard问题,难以求解。然而,我们可以对在线性可分类型中表现很好的PLA做个修改,把它应用到非线性可分类型中,获得近似最好的\(g\)

修改后的PLA称为Packet Algorithm。它的算法流程与PLA基本类似,首先初始化权重\(w_0\),计算出在这条初始化的直线中,分类错误点的个数。然后对错误点进行修正,更新\(w\),得到一条新的直线,在计算其对应的分类错误的点的个数,并与之前错误点个数比较,取个数较小的直线作为我们当前选择的分类直线。之后,再经过n次迭代,不断比较当前分类错误点个数与之前最少的错误点个数比较,选择最小的值保存。直到迭代次数完成后,选取个数最少的直线对应的\(w\),即为我们最终想要得到的权重值。
1010007-20190515160801448-1605018210.png
如何判断数据集\(D\)是不是线性可分?对于二维数据来说,通常还是通过肉眼观察来判断的。一般情况下,Pocket Algorithm要比PLA速度慢一些。

五、总结

本节课主要介绍了线性感知机模型,以及解决这类感知机分类问题的简单算法:PLA。我们详细证明了对于线性可分问题,PLA可以停下来并实现完全正确分类。对于不是线性可分的问题,可以使用PLA的修正算法Pocket Algorithm来解决。

转载于:https://www.cnblogs.com/SweetZxl/p/10528702.html


http://chatgpt.dhexx.cn/article/igIgj4Yl.shtml

相关文章

机器学习基石-林轩田-第一周笔记

Lecture 01 - The Learning Problem When Can Machine Learn ?Why Can Machine Learn ?How Can Machine Learn ?How Can Machine Learn Better ? What is Machine Learning 什么是“学习”&#xff1f;学习就是人类通过观察、积累经验&#xff0c;掌握某项技能或能力。就…

机器学习基石16:三个重要原则(Three Learning Principles)

本节介绍了机器学习中三个重要原则&#xff0c;包括奥卡姆剃刀原理&#xff0c;样本偏差&#xff0c;数据窥探&#xff1b;并对16课程所学知识进行了总结。 系列文章 机器学习基石01&#xff1a;机器学习简介 机器学习基石02&#xff1a;感知器算法&#xff08;Perceptron Alg…

机器学习基石1(ML基本概念和VC dimension)

文章目录 一、什么是机器学习?二、什么时候可以使用机器学习?三、感知机perceptron四、机器学习的输入形式五、机器真的可以学习吗&#xff1f;六、vc dimension 一、什么是机器学习? 其实第一个问题和第二个问题是穿插到一块儿回答的&#xff0c;首先机器学习要解决的是常规…

Wireshark抓包数据

首先官网下载Wireshark&#xff0c;下载好后&#xff0c;用浏览器打开桂林生活网&#xff0c;无需注册&#xff0c;输入账号密码。 打开Wireshark&#xff0c;用命令提示符查看本机ip 在Wireshark的过滤搜索中输入ip10.34.152.44&#xff0c;找到http类型的数据查看&#xff0…

Wireshark抓包数据分析

文章目录 准备数据链路层实作一 熟悉 Ethernet 帧结构实作二 了解子网内/外通信时的 MAC 地址实作三 掌握 ARP 解析过程 网络层实作一 熟悉 IP 包结构实作二 IP 包的分段与重组实作三 考察 TTL 事件 传输层实作一 熟悉 TCP 和 UDP 段结构实作二 分析 TCP 建立和释放连接 应用层…

网络数据包分析与抓取

多年的网络数据包分析与抓取经验&#xff0c;闲话少说&#xff0c;上干货。先列举数据包的种类&#xff1a;1、Http数据包&#xff1b;2、UDP数据包&#xff1b;3、TCP数据包&#xff1b;4、ARP数据包&#xff1b;其实数据包的概念是很泛的&#xff0c;在软件可逆领域&#xff…

如何进行数据的抓包

抓包 抓包就是对网络传输中发送与接收的数据包进行截获、重发、编辑、转存等操作。 前提&#xff1a;抓取的数据包是从网卡设备中进行抓取的&#xff1b; win wiresharkLinux tcpdump命令 从上图我们就可以了解到tcpdump就是我们使用的一个工具&#xff1b; 我们在使用它时有…

WireShark基本抓包数据分析

WireShark抓包数据分析&#xff1a; 1、TCP报文格式 源端口、目的端口&#xff1a;16位长。标识出远端和本地的端口号。 顺序号&#xff1a;32位长。表明了发送的数据报的顺序。 确认号&#xff1a;32位长。希望收到的下一个数据报的序列号。 TCP协议数据报头DE 头长&#xff…

网络抓包及分析

今天我们主要来讲一下网络抓包的教程&#xff0c;我们用WireShark来说明 我们先说明下抓包工具界面 我们现在本地机子上用上面两个比较多 上面是抓无线网卡&#xff0c;就是你访问外网的包 下面是抓环回地址 &#xff0c;就是你访问127.0.0.1或localhost的包 我们抓上面WLAN…

Wireshark数据抓包分析之UDP协议

目录 预备知识1.UDP协议概述2.什么是UDP协议3.UDP协议的特点 实验目的实验环境实验步骤一1.配置TCP&UDP测试工具2.配置服务器端3.配置客户端4.获取UDP数据包 实验步骤二1.UDP首部格式2.分析UDP数据包 预备知识 1.UDP协议概述 UDP是User Datagram Protocol&#xff08;用户…

常见的几种网络抓包及协议分析工具

常见的几种网络抓包及协议分析工具 引言 网络工程师必备技能-抓取网络数据。 在本篇博客中&#xff0c;我们将集中记下几个问题进行探讨&#xff1a; 如何抓取电脑本机发送/接收的网络数据&#xff1f;如何在主机 A 上抓取 主机 B 上的网络数据&#xff1f;如何使用第三方设…

WireShark抓包分析

简述&#xff1a;本文介绍了抓包数据含义&#xff0c;有TCP报文、Http报文、DNS报文。如有错误&#xff0c;欢迎指正。 1、TCP报文 TCP&#xff1a;&#xff08;TCP是面向连接的通信协议&#xff0c;通过三次握手建立连接&#xff0c;通讯完成时要拆除连接&#xff0c;由于TCP …

抓包分析数据(Charles以及HttpCanary)

在开发小程序时&#xff0c;我们经常需要检查线上的请求&#xff0c;但是小程序并没有提供这方面的入口&#xff0c;本文为大家详细说一下我工作中使用到的关于抓包的经验&#xff0c;包括pc配合手机以及直接用手机抓包 一.pc配合手机实现抓包&#xff08;Charles&#xff09;…

wireshark抓包分析TCP数据包

1、直接从TCP的三次握手开始说起 三次握手就是客户与服务器建立连接的过程 客户向服务器发送SYN&#xff08;SEQx&#xff09;报文&#xff0c;然后就会进入SYN_SEND状态服务器收到SYN报文之后&#xff0c;回应一个SYN&#xff08;SEQy&#xff09;ACK&#xff08;ACKx1&…

wireshark抓ping数据包以及简单分析

目录 相关知识 1.Ping原理 2.ICMP报文协议 3.wireshark 一、wireshark抓数据包 二、报文分析 三、总结 相关知识 1.Ping原理 Ping是一句DOS 命令&#xff0c;一般用于检测网络通与不通 &#xff0c;也叫时延&#xff0c;其值越大&#xff0c;速度越慢 PING (Packet Inte…

wireshark抓包数据:理解与分析

注明&#xff1a;本文为原创文章&#xff0c;转载请注明出处。参考文章见本文末尾。 wireshark是一个非常好用的抓包工具&#xff0c;本文根据平时抓包经验&#xff0c;对之前wireshark抓包的一些常见知识点进行了整理。 有不当之处&#xff0c;欢迎指正 1.SYN&#xff0c;F…

WireShark抓包后数据分析

在分析数据之前&#xff0c;我们先了解一下我们传输数据的结构体系&#xff0c;如下图&#xff1a; 这是两种体系&#xff0c;我们常用的一般都是TCP/IP体系结构。 TCP/IP体系架构分析 不难发现&#xff0c;TCP/IP体系中包含着很多我们熟悉的协议&#xff0c;比如说&#xff1…

Wireshark --> 抓包(网络分析)工具

前言 贴一张wireshark抓包的总图&#xff0c;便于理解分析网络分层 ​ 为了让大家更容易「看得见」 TCP&#xff0c;我搭建不少测试环境&#xff0c;并且数据包抓很多次&#xff0c;花费了不少时间&#xff0c;才抓到比较容易分析的数据包。 接下来丢包、乱序、超时重传、…

Wireshark抓包工具使用以及数据包分析

多年之后&#xff0c;愿你有清风与烈酒&#xff0c;也有人是你的归途。 打开Wireshark抓包工具开始抓包会看到如下展开内容&#xff1a; 这里我是对wlan进行抓包&#xff0c;192.168.2.112是我当前wifi的ip地址。 点击某个包&#xff0c;可以查看具体内容&#xff0c;差不多刚…

使用wireshark抓网络报文(抓包)并分析其中数据

如何使用wireshark抓网络报文&#xff08;抓包&#xff09; 1、 物理层数据帧2、 数据链路层以太网帧头部信息3、 互联网层 IP 包头部信息4、 传输层 TCP 数据段头部信息 本文包内容分析转载自下午茶的芬芳&#xff0c;感谢作者的分享。 网络下载好wireshark打开软件按下开始捕…