机器学习基石(林轩田)学习笔记:Lecture 6 & Lecture 7

本文探讨了机器学习中VC维的概念及其与泛化能力的关系,通过数学推导介绍了VC界的含义,并给出了感知机的VC维的具体计算过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lecture 6:Theory of Generalization

对于n个点\(x^{(1)},\cdots,x^{(n)}\),break point=k,我们称此时\(\mathcal H\)的成长函数\(m_\mathcal H(n)=B(n,k)\),可以证明\(B(n,k)\leq n^k\)(而且这个上界很宽松)

根据Lecture 4推得的公式
\[P(\mathcal D\ is\ bad\ for\ all\ h)\leq 2m\exp(-2\epsilon^2n)\]

\[P(\exists h\in \mathcal H\ \mathrm{s.t.}\ |E_{in}(h)-E_{out}(h)|>\epsilon)\leq 2m\exp(-2\epsilon^2n)\]

此时我们希望把其中的m替换为\(n^k\),但这个替换并不是简单的替换,其中证明很复杂,这里省去,最终可以得到

\[P(\exists h\in \mathcal H\ \mathrm{s.t.}\ |E_{in}(h)-E_{out}(h)|>\epsilon)\leq 2\cdot 2m_\mathcal H(2n)\exp(-2\frac 1 {16}\epsilon^2n)\]

\[P(\exists h\in \mathcal H\ \mathrm{s.t.}\ |E_{in}(h)-E_{out}(h)|>\epsilon)\leq 4m_\mathcal H(2n)\exp(-\frac 1 8\epsilon^2n)\]

我们称这个引入成长函数的新不等式为VC(Vapnik­-Chervonenkis) bound

而在已知break point=k时,\(m_\mathcal H(n)=O(n^k)\),此时我们可以说机器是可以学习的,能够保证\(E_{in}(g)\approx E_{out}(g)\)

Lecture 7:The VC Dimension

Definition of VC Dimension

之前我们已经定义了假设函数集\(\mathcal H\)的break point,break point是满足\(m_\mathcal H(n) <2^n\)的最小的n

而假设函数集\(\mathcal H\)的VC维\(d_{VC}(\mathcal H)\)是存在一组\(x^{(1)},\cdots,x^{(n)}\),满足\(m_\mathcal H(n) =2^n\)的最大的n

或者说,存在n个点\(x^{(1)},\cdots,x^{(n)}\),不论这n个点标签是怎样的,都能从\(\mathcal H\)中找到一个h对它们全部正确分类(即存在\(h\in \mathcal H\)能shatter这n个点)

根据上述定义,显然有\(d_{VC}(\mathcal H)=\)break point(\(\mathcal H\))-1

回顾Lecture 5中\(\mathcal H\)分别为positive rays、positive intervals、convex sets以及2D感知机时的\(m_\mathcal H(n)\),我们可以得到对应的\(d_{VC}\)

669611-20180723111518917-155492641.png

\(n\geq 2,d_{VC}\geq 2\)时,我们有\(m_\mathcal H(n)\leq n^{d_{VC}}\),在我们已知\(d_{VC}\)时,Lecture 6的不等式

\[P(\exists h\in \mathcal H\ \mathrm{s.t.}\ |E_{in}(h)-E_{out}(h)|>\epsilon)\leq 4m_\mathcal H(2n)\exp(-\frac 1 8\epsilon^2n)\]

中的\(m_\mathcal H(2n)\)就可以被替换掉:

\[P(\exists h\in \mathcal H\ \mathrm{s.t.}\ |E_{in}(h)-E_{out}(h)|>\epsilon)\leq 4m_\mathcal H(2n)\exp(-\frac 1 8\epsilon^2n)\]

\[\leq 4(2n)^{d_{VC}}\exp(-\frac 1 8\epsilon^2n)\]

\(P(\exists h\in \mathcal H\ \mathrm{s.t.}\ |E_{in}(h)-E_{out}(h)|>\epsilon)\)的上界就只与n有关了。

669611-20180723135959430-739346823.png

答案:(4)
理由:题目条件只告诉我们,存在一组n个点不能被\(\mathcal H\) shattered,但我们不能判定是否存在一组n个点可以被\(\mathcal H\) shattered,也就无法推断\(d_{VC}(\mathcal H)\)

VC Dimension of Perceptron

669611-20180723140441909-438946597.png

对于2D感知机而言,假设训练集\(\mathcal D\)线性可分,那么经过足够多次迭代,我们能找到一个假设函数\(g,E_{in}(g)=0\)

而所有的输入数据\(x{(n)}\sim P,y^{(n)}=f(x^{(n)})\)(f(x)是我们未知的一个函数)

由于2D感知机的\(d_{VC}=3\),所以\(P(\exists h\in \mathcal H\ \mathrm{s.t.}\ |E_{in}(h)-E_{out}(h)|>\epsilon)\)有一个确定的、只关于n的上界,n足够大时,\(E_{out}(g)\approx E_{in}(g)\)

下面我们把2D感知机的VC维,推广到d-D感知机的情况(d>2):\(d_{VC}=d+1\)

首先证明,d-D感知机\(d_{VC}\geq d+1\):

我们可以构造一组d+1个点,使得它们能被d-D感知机的\(\mathcal H\) shattered:

669611-20180723141739339-1005749927.png

(注意第一列灰色的1对应于偏置)

显然这样的d+1个输入数据构成的矩阵\(X\)可逆,对于任意的标签列向量\(y\),令\(Xw=y,w=X^{-1}y\),此时显然有\(\mathrm{sign}(Xw)=\mathrm{sign}(y)=y\),所以这d+1个点能被shattered

再证明,d-D感知机\(d_{VC}\leq d+1\):
669611-20180723142608935-909068930.png

此时d+2个输入数据构成的矩阵\(X\)\(r(X)\leq d+1\),所以行向量组线性相关,不妨设\(x_{d+2}\)可以被其他d+1个行向量线性表示(如果不能的话,找一个可以被其他行向量线性表示的\(x_i\)交换到\(x_{d+2}\))

\[x_{d+2}=a_1x_1+\cdots a_{d+1}x_{d+1}\]

\(a_1>0,a_2<0,\cdots,a_{d+1}<0\),则,如果这d+2个点的标签分别为
\[y_1=\mathrm{sign}(a_1),y_2=\mathrm{sign}(a_2),\cdots,y_{d+1}=\mathrm{sign}(a_{d+1}),y_{d+2}=-1)\]

那么

\[w^Tx_{d+2}=a_1w^Tx_1+a_2w^Tx_2+\cdots+a_{d+1}w^Tx_{d+1}\]

为了满足要求,\(w^Tx_1\)\(a_1\)同号,......,\(w^Tx_{d+1}\)\(a_{d+1}\)同号,那么\(a_1w^Tx_1>0,\cdots,a_{d+1}w^Tx_{d+1}>0\),从而

\[w^Tx_{d+2}=a_1w^Tx_1+a_2w^Tx_2+\cdots+a_{d+1}w^Tx_{d+1}>0\]

这就导致第d+2个数据分类一定是错误的。

所以对于任意的d+2个点,d-D感知机的\(\mathcal H\)都不能shatter它们。\(d_{VC}(\mathcal H)\leq d+1\)

Physical Intuition of VC Dimension

假设函数集\(\mathcal H\)的VC维决定了假设函数的分类能力(这体现在参数数量上,参数越多)。VC维越大,\(\mathcal H\)的分类能力越强,\(\mathcal H\)能够shatter更多的点。

一般地,VC维\(\approx\)假设函数参数个数(但这个规律在某些时候不成立)

669611-20180723145202544-353397529.png

回顾之前所学的内容,机器要想学习,必须满足:

  • 1、\(E_{in}(g)\approx E_{out}(g)\),泛化误差是可以通过假设函数在训练集上的经验误差近似估计的。
  • 2、\(E_{in}(g)\)能够做到足够小。这样学习算法才能从\(\mathcal H\)中选取出一个经验误差足够小的g,从而根据(1)保证它的泛化误差足够小,这样学习算法才是有效的。

\(\mathcal H\)为有限集时:

  • (a)\(m=|\mathcal H|\)小,此时根据之前推出的不等式,可以满足(1),但是由于可供选择的假设函数h太少,不能满足(2)
  • (b)\(m=|\mathcal H|\)很大,可选择的假设函数很多,(2)能满足,但是(1)就无法满足了。

类似地,当\(\mathcal H\)为无限集时:

  • (a)VC维很小,此时根据之前推出的不等式,可以满足(1),但是由于假设函数分类能力太弱,不能满足(2)
  • (b)VC维很大,假设函数分类能力很强,(2)能满足,但是(1)就无法满足了。

可见合适大小的VC维是非常重要的。

Interpreting VC Dimension

\[P(\exists h\in \mathcal H\ \mathrm{s.t.}\ |E_{in}(h)-E_{out}(h)|>\epsilon)\leq 4(2n)^{d_{VC}}\exp(-\frac 1 8\epsilon^2n)\]

\(\delta=4(2n)^{d_{VC}}\exp(-\frac 1 8\epsilon^2n)\),则,\(\epsilon =\sqrt{\frac 8 n \ln (\frac{4(2n)^{d_{VC}}}{\delta})}\)

那么我们至少有\(1-\delta\)的把握,使得对于所有的\(h\in \mathcal H\):
\[\ |E_{in}(h)-E_{out}(h)|\leq\epsilon=\sqrt{\frac 8 n \ln (\frac{4(2n)^{d_{VC}}}{\delta})}\]

\[E_{out}(h)\leq E_{in}(h)+\sqrt{\frac 8 n \ln (\frac{4(2n)^{d_{VC}}}{\delta})}\]

\(\Omega=\sqrt{\frac 8 n \ln (\frac{4(2n)^{d_{VC}}}{\delta})}\ \ \mathrm{w.r.t}\ \ n,\mathcal H,\delta\),则

669611-20180723150924872-184500378.png

\[P(\exists h\in \mathcal H\ \mathrm{s.t.}\ |E_{in}(h)-E_{out}(h)|>\epsilon)\leq 4(2n)^{d_{VC}}\exp(-\frac 1 8\epsilon^2n)<\delta\]

我们令误差容忍度\(\epsilon=0.1\)\(\delta=0.1\),如果我们已知\(d_{VC}=3\),那么样本数取多少才合适呢?

669611-20180723152010981-305768601.png

从上表可见,理论上我们至少要\(n\approx 10000d_{VC}\)

然而VC Bound这个上界很宽松,实际上一般来说\(n\approx 10d_{VC}\)就够了

转载于:https://www.cnblogs.com/qpswwww/p/9351187.html

资源下载链接为: https://pan.quark.cn/s/1bfadf00ae14 &ldquo;STC单片机电压测量&rdquo;是一个以STC系列单片机为基础的电压检测应用案例,它涵盖了硬件电路设计、软件编程以及数据处理等核心知识点。STC单片机凭借其低功耗、高性价比和丰富的I/O接口,在电子工程领域得到了广泛应用。 STC是Specialized Technology Corporation的缩写,该公司的单片机基于8051内核,具备内部振荡器、高速运算能力、ISP(在系统编程)和IAP(在应用编程)功能,非常适合用于各种嵌入式控制系统。 在源代码方面,&ldquo;浅雪&rdquo;风格的代码通常简洁易懂,非常适合初学者学习。其中,&ldquo;main.c&rdquo;文件是程序的入口,包含了电压测量的核心逻辑;&ldquo;STARTUP.A51&rdquo;是启动代码,负责初始化单片机的硬件环境;&ldquo;电压测量_uvopt.bak&rdquo;和&ldquo;电压测量_uvproj.bak&rdquo;可能是Keil编译器的配置文件备份,用于设置编译选项和项目配置。 对于3S锂电池电压测量,3S锂电池由三节锂离子电池串联而成,标称电压为11.1V。测量时需要考虑电池的串联特性,通过分压电路将高电压转换为单片机可接受的范围,并实时监控,防止过充或过放,以确保电池的安全和寿命。 在电压测量电路设计中,&ldquo;电压测量.lnp&rdquo;文件可能包含电路布局信息,而&ldquo;.hex&rdquo;文件是编译后的机器码,用于烧录到单片机中。电路中通常会使用ADC(模拟数字转换器)将模拟电压信号转换为数字信号供单片机处理。 在软件编程方面,&ldquo;StringData.h&rdquo;文件可能包含程序中使用的字符串常量和数据结构定义。处理电压数据时,可能涉及浮点数运算,需要了解STC单片机对浮点数的支持情况,以及如何高效地存储和显示电压值。 用户界面方面,&ldquo;电压测量.uvgui.kidd&rdquo;可能是用户界面的配置文件,用于显示测量结果。在嵌入式系统中,用
资源下载链接为: https://pan.quark.cn/s/abbae039bf2a 在 Android 开发中,Fragment 是界面的一个模块化组件,可用于在 Activity 中灵活地添加、删除或替换。将 ListView 集成到 Fragment 中,能够实现数据的动态加载与列表形式展示,对于构建复杂且交互丰富的界面非常有帮助。本文将详细介绍如何在 Fragment 中使用 ListView。 首先,需要在 Fragment 的布局文件中添加 ListView 的 XML 定义。一个基本的 ListView 元素代码如下: 接着,创建适配器来填充 ListView 的数据。通常会使用 BaseAdapter 的子类,如 ArrayAdapter 或自定义适配器。例如,创建一个简单的 MyListAdapter,继承自 ArrayAdapter,并在构造函数中传入数据集: 在 Fragment 的 onCreateView 或 onActivityCreated 方法中,实例化 ListView 和适配器,并将适配器设置到 ListView 上: 为了提升用户体验,可以为 ListView 设置点击事件监听器: 性能优化也是关键。设置 ListView 的 android:cacheColorHint 属性可提升滚动流畅度。在 getView 方法中复用 convertView,可减少视图创建,提升性能。对于复杂需求,如异步加载数据,可使用 LoaderManager 和 CursorLoader,这能更好地管理数据加载,避免内存泄漏,支持数据变更时自动刷新。 总结来说,Fragment 中的 ListView 使用涉及布局设计、适配器创建与定制、数据绑定及事件监听。掌握这些步骤,可构建功能强大的应用。实际开发中,还需优化 ListView 性能,确保应用流畅运
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值