《机器学习基础》学习笔记-第二章 PAC学习框架-2.1PAC学习模型

第二章 PAC学习框架

※ 思考几个基本问题
1.从样本中可以高效地学习什么?
2.学习过程中的内在难点是什么?
3.想要学习成功需要多少样本呢?
4.是否存在一个通用的学习模型?
※ 本章任务:以PAC框架对上述问题进行形式化解释
※ PAC框架前言:PAC框架借助样本复杂度(欲达到近似解所需要的样本点数目)和学习算法的时空复杂度(依赖于对概念类计算表示的代价)来定义可学习的概念类

2.1 PAC学习模型

公认假定:所有的样本是独立同分布的,并且服从的是某个固定但是未知的分布 D D D
Why?详见为什么机器学习中, 要假设我们的数据是独立同分布的?

概念介绍:

1.样本(example)/实例(instance)集合 or 输入空间:记为 X \mathcal{X} X
2.标签(label)/目标值(taget value)集合:记为 Y \mathcal{Y} Y

**注意:本书中考虑二分类问题作为入门,因此 Y = { 0 , 1 } \mathcal{Y} = \{0,1\} Y={0,1} ;

3.一个概念 c c c (A concept) : c : X → Y c :\mathcal{X} \rightarrow \mathcal{Y} cXY 表示 X \mathcal{X} X Y \mathcal{Y} Y的一个映射;

注意:同样,对于二分类问题中,可以认为概念指的是从 X \mathcal{X} X { 0 , 1 } \{0,1\} {0,1}的映射,进一步的可以认为概念是 X \mathcal{X} X的一个子集。

4.概念类 C C C (A concept class):指我们可能想要学习的概念构成的集合

例如:概念可以是三角形内的点构成的集合或者这些点的指示函数(Indicator function)——具体概念可以看这个部链接。对于这种例子,我们可以将带学习的概念简称为三角形,而概念类在这个例子中,指的是所有的三角形的集合。

注释:我把这个大集合看作一个**完备的理想的集合**:
1、完备的:意思是,这概念类表示的是,所有的我们希望能学习到的概念的集合;
2、理想的:意思是,对于现实情况而言,由于我们一般情况下,预先并不能知道所有的概念有哪些(科学在发展,不敢说一件事所有的因素都已经研究透了),因此,概念类只是我们假想出来的一个完备集合,是理想的。

5.假设集 H H H学习器需要考虑的是一个固定的、由所有可能的概念组成的集合

注释:我们为了学习这个问题,会给出一些所谓的特征,在这些特征空间下,我们所研究的所有概念组成的集合。举例来说,比如引用,周志华著《机器学习》(西瓜书)中第一章所举的例子,假设我们要判断一个瓜是好瓜,我们给出这么3个特征:色泽、根蒂、敲声。通过判断每个特征的不同来判断结果是不是一个好瓜。那么对于这个问题而言,由这三个特征组成所有可能的情况(概念的集合),就是假设空间。
因此从这里可以看出 H H H C C C一般是不一样的 。

6.分布 D D D:后面的介绍中经常提到一个D,这里的D可以理解为你所研究的问题背后蕴含着某种规则,其中每个观测信息按照分布D进行,这个规则就可以理解为D,比如举个例子,在现实中进行体检的时候,我们要观测的信息是体检人员的身高,等你把海量的体检人员身高列出来之后,你发现他竟然近似满足一个正态分布,这时候,我们抽象的去理解就是说这个背后的规则就是D。

部分定义

※ 学习流程:学习器在学习过程中,会得到来自分布 D D D的独立同分布的样本集 S = ( x 1 , x 2 , ⋯   , x m ) S=(x_1,x_2,\cdots,x_m) S=(x1,x2,,xm)以及对应的标签集 ( c ( x 1 ) , c ( x 2 ) , ⋯   , c ( x m ) ) (c(x_1),c(x_2),\cdots,c(x_m)) (c(x1),c(x2),,c(xm)),该标签集通过特定的,待学习的目标概念 c ∈ C c\in C cC得到。学习器的任务就是,利用已经标记的样本集 S S S选择一个假设 h S ∈ H h_S \in H hSH,使其关于概念 c c c有尽可能小的泛化误差。这里,假设 h ∈ H h \in H hH的泛化误差(有时也称为真实误差,或者直接简称误差),记为 R ( h ) R(h) R(h)
※ 相关定义如下:
定义2.1 泛化误差:给定一个假设 h ∈ H h \in H hH,一个目标概念 c ∈ C c\in C cC,以及一个潜在的分布 D D D,则 h h h的泛化误差或风险定义为: R ( h ) = P r x ∼ D [ h ( x ) ≠ c ( x ) ] = E x ∼ D [ 1 h ( x ) ≠ c ( x ) ] R(h)=Pr_{x\sim D}[h(x)\neq c(x)]=E_{x\sim D}[1_{h(x)\neq c(x)}] R(h)=PrxD[h(x)=c(x)]=ExD[1h(x)=c(x)] w h e r e : 1 w where: 1_w where:1w是事件 w w wIndicator function

注意:对于学习器而言,假设的泛化误差并不是可以直接得到的,因为分布 D D D和目标概念 c c c均是未知的。

定义2.2 经验误差:给定一个假设 h ∈ H h \in H hH,一个目标概念 c ∈ C c\in C cC,以及一个样本采集 S = ( x 1 , x 2 , ⋯   , x m ) S=(x_1,x_2,\cdots,x_m) S=(x1,x2,,xm),则 h h h的经验误差或风险定义为: R ^ ( h ) = 1 m ∑ i = 1 m 1 h ( x i ) ≠ c ( x i ) \hat{R}(h)=\frac{1}{m} \sum_{i=1}^{m} 1_{h(x_i)\neq c(x_i)} R^(h)=m1i=1m1h(xi)=c(xi)因此, h ∈ H h \in H hH的经验误差是其在样本集 S S S上的平均误差,而泛化误差则是其在分布 D D D上的误差期望。
在后面的章节中,可以知道,在某些一般性假设下,对于这两种误差的一些关于近似程度的保证以较高概率成立。
现在,可以注意到一个这样的事实,对于一个固定的 h ∈ H h \in H hH ,在独立同分布样本集上的经验误差的期望就等于泛化误差 E [ R ^ ( h ) ] = R ( h ) E[\hat{R}(h)]=R(h) E[R^(h)]=R(h)※给出简单证明:实际上,根据期望的线性特性以及样本是独立同分布的事实,对于样本集S中的任意样本 x x x,有下式成立:
E S ∼ D m [ R ^ ( h ) ] = 1 m ∑ i = 1 m E s ∼ D m [ 1 h ( x i ) ≠ c ( x i ) ] = 1 m ∑ i = 1 m E s ∼ D m [ 1 h ( x ) ≠ c ( x ) ] E_{S\sim D^m}[\hat{R}(h)] = \frac{1}{m} \sum_{i=1}^{m} E_{s\sim D^m}[1_{h(x_i)\neq c(x_i)}]= \frac{1}{m} \sum_{i=1}^{m} E_{s\sim D^m}[1_{h(x)\neq c(x)}] ESDm[R^(h)]=m1i=1mEsDm[1h(xi)=c(xi)]=m1i=1mEsDm[1h(x)=c(x)]从而按照大数定律容易证得,当数据量大了之后,样本的均值可以替代总体均值,可以证得成立。
下面给出PAC学习框架:

对任意元素 x ∈ X x\in \mathcal{X} xX计算代价的上界表示为 O ( n ) O(n) O(n);对概念 c ∈ C c\in C cC计算代价最大值表示为 s i z e ( c ) size(c) size(c).
例如:元素 x x x可能是一个 R n \mathbb{R}^n Rn(n维向量),则以数组的形式对其进行表示代价为 O ( n ) O(n) O(n)

定义2.3 PAC学习:如果存在一个算法 A \mathcal{A} A 以及一个多项式函数 p o l y ( ⋅ , ⋅ , ⋅ , ⋅ ) poly(·,·,·,·) poly(⋅,⋅,⋅,⋅),使得对于任意的 ε > 0 , δ > 0 \varepsilon >0 , \delta >0 ε>0,δ>0, 对于所有在 X \mathcal{X} X上的分布 D D D以及任意概念 c ∈ C c\in C cC,对于满足 m ⩾ p o l y ( 1 / ε , 1 / δ , n , s i z e ( c ) ) m\geqslant poly(1/\varepsilon,1/\delta,n,size(c)) mpoly(1/ε,1/δ,n,size(c))的任意样本规模 m m m均有下式成立,那么就可以说,概念类 C C C是PAC可学习的。
P r s ∼ D m [ R ( h s ) ≤ ε ] ≥ 1 − δ Pr_{s\sim D^m}[R(h_s)\leq \varepsilon]\geq1-\delta PrsDm[R(hs)ε]1δ
理解:如果一个输入算法中的样本点数目对于 1 / ε , 1 / δ 1/\varepsilon,1/\delta 1/ε,1/δ是多项式的,并且由该算法基于这些样本点得到的假设是以高概率(至少是 1 − δ 1-\delta 1δ)、近似正确(误差至少是 ε \varepsilon ε)的,则概念类 C C C是可学习的。因此, δ \delta δ-用来描述置信程度 ε \varepsilon ε-用来定义准确性。

关于PAC,还有以下几点需要注意:
1.PAC学习框架是不依赖分布的模型,指对产生样本的分布D,没有做特别的假设;
2.用于得到误差的训练样本和测试样本产生于相同的分布D,是大多数情况下使得泛化成为可能的必要条件;
3.PAC学习框架考虑的是概念类C的可学习型,而不是一个特定概念的可学习性,这里要注意,对于学习算法,概念类C是已知的,而目标概念 c ∈ C c\in C cC是未知的。

注意**:在许多情况下,特别是当概念的计算表示没有明确讨论或很直接时,我们可能会忽略PAC定义中对n和大小O©的多项式依赖关系,而只关注样本复杂度,就是说让样本m大于某个整数M。

综上,引出常用的PAC框架原理:PAC框架本质上就是确定一个最优假设(ERM),使得目标概念是高概率、近似正确的。而从方法上来讲,工程中常用的主要是只考虑样本复杂度,可使用Hoeffding不等式求解样本复杂度m的大小。

举例: 详细解题过程,请另见:2.1PAC学习模型-例题:学习平行于坐标轴的矩形
考虑这么一种情况,样本集为平面上的点, X = R 2 \mathcal{X}=\mathbb{R}^2 X=R2,概念类C为这个平面上所有平行于坐标轴的矩形,即在这种设定下每个概念c都是一个特别的平行于坐标轴的矩形中所有内点构成的集合。本例的学习问题是依据有标签的学习样本确定一个误差较小的平行于坐标轴的目标矩形。我们将论述平行于坐标轴的矩形这种概念类是PAC可学习的。
如下图,R为平行于坐标轴的目标矩形,R‘为一个假设。
在这里插入图片描述

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很高兴听到你正在学习机器学习》这本经典的教材,下面我为你提供第十四章概率图模型的Python实现学习笔记。 ## 1. 朴素贝叶斯分类器 ### 1.1 数据准备 在本章中,我们将使用著名的鸢尾花数据集进行分类。首先,我们可以从sklearn库中导入该数据集。 ```python from sklearn.datasets import load_iris iris = load_iris() X = iris.data y = iris.target ``` ### 1.2 朴素贝叶斯分类器实现 接下来,我们可以使用sklearn库中的朴素贝叶斯分类器进行分类,具体实现如下: ```python from sklearn.naive_bayes import GaussianNB from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) gnb = GaussianNB() gnb.fit(X_train, y_train) y_pred = gnb.predict(X_test) accuracy = accuracy_score(y_test, y_pred) print('Accuracy:', accuracy) ``` ### 1.3 结果分析 运行上述代码后,我们可以得到该模型在测试集上的准确率,结果如下所示: ``` Accuracy: 1.0 ``` 可以看出,该模型在鸢尾花数据集上表现出色,准确率达到了100%。 ## 2. 隐马尔可夫模型 ### 2.1 数据准备 在本节中,我们将使用一个简单的例子来介绍隐马尔可夫模型的实现。假设我们有一个长度为100的序列,每个位置上的值都是0或1,其中0和1出现的概率分别为0.6和0.4。我们可以使用numpy库生成这个序列。 ```python import numpy as np np.random.seed(42) sequence = np.random.choice([0, 1], size=100, p=[0.6, 0.4]) ``` ### 2.2 隐马尔可夫模型实现 接下来,我们可以使用hmmlearn库中的隐马尔可夫模型进行序列建模,具体实现如下: ```python from hmmlearn import hmm model = hmm.MultinomialHMM(n_components=2) model.fit(sequence.reshape(-1, 1)) logprob, states = model.decode(sequence.reshape(-1, 1)) print('Sequence:', sequence) print('States:', states) ``` ### 2.3 结果分析 运行上述代码后,我们可以得到该模型对序列的建模结果,结果如下所示: ``` Sequence: [0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] States: [1 1 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] ``` 可以看出,模型对序列进行了建模,并输出了每个位置上的状态,其中0表示“假”,1表示“真”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值