机器学习-笔记-持续更新

简要

        该文是为了梳理机器学习的相关知识,让自己对机器学习有所了解,因此在学习阶段会不断更新每一章节的内容。同时有错误的地方,请在留言处指出,我会不断更新文章并修改。

参考书籍:《机器学习》周志华版,《机器学习公式详解》谢文睿、秦州编著

 文末有相关书籍的pdf资源

 

目录

简要

一、绪论

1.1、什么是机器学习?

1.2、基本术语

1.3、假设空间

1.4、归纳偏好

 二、模型评估与选择

2.1、经验误差与过拟合

2.2、评估方法

2.2.1、留出法(hold-out)

2.2.2、交叉验证法(cross validation) 

2.2.3自助法(bootstrapping)


一、绪论

1.1、什么是机器学习?

        首先,需要认识到人类在面对新的情况时,会依据“ 经验 ”做出新的判断。那么,当计算机面临新的情况时,会通过学习算法(learing algorithm),同时基于数据产生模型,从而做出相应判断。

        对于计算机而言,人类的“ 经验 ”通常会以“ 数据 ”形式存在,因此,可以得到:

机器学习的主要内容,是关于在计算机上从数据中产生模型(model)的算法

1.2、基本术语

数据集(data set) 记录数据的集合
示例(instance) 每条记录是关于一个事件或对象的描述
属性(attribute) 反映事件或对象在某方面的表现或性质事项
属性值(attribute value) 属性上的取值
属性空间(attribute space) 属性张成的空间
样本空间(sample space)
输入空间
特征向量(feature vector) 在形成的空间中每一个data的坐标位置
学习(learning) 从数据中学习得模型的过程
训练数据(training data) 训练过程中使用的数据
假设(hypothesis) 模型对应数据的某种潜在规律
测试(testing) 得到模型后需要预测
D=\left \{x_{1},x_{1},...,x_{n}\right \} 包含了n个示例的数据集
x_{i}=\left \{ x_{i1},x_{i2},...,x_{id} \right \} 每个示例都由d个属性描述
x_{i}\epsilon \chi x_{i}是d维样本空间\chi中的一个向量
x_{ij} x_{i}在第j个属性上的取值
泛化能力(generalization) 学得模型适用于新样本的能力
独立同分布(i.i.d) 获得的样本都是独立采样得到

1.3、假设空间

        科学推理中最基本的手段有:归纳(induction)和演绎(deduction)。归纳是从特殊到一般的泛化过程;而演绎是从一般到特殊的特化(specialization)过程,即基础原理推出具体状况。

        归纳学习可以分为广义:从样例中学习和狭义:从训练数据中学得概念(concept)

        概念学习的基本学习方法是布尔概念学习,即0/1布尔值,一般借助析合范式表达。概念学习过程是一个在所有假设组成的空间中进行搜索的过程,而搜索的目的是找到与训练集匹配的假设,从而确定假设空间以及其规模大小。在现实问题中,概念学习过程会面临很大的假设空间,因此,需要基于有限样本训练集进行。但这样可能会有多个假设与训练集一致,即版本空间。

1.4、归纳偏好

         由于概念学习过程中有可能会出现版本空间,可能会导致不同假设对应的模型在面临新样本时产生不同输出。但对于具体学习算法而言,必须产生一个模型。因此,学习算法本身的偏好起关键作用,即对某种类型假设的偏好。

        任何一个有效的机器学习算法必有其归纳偏好,需要用一般性原则引导确立“ 正确的 ”偏好。常用的一般性原则有奥卡姆剃刀(Occam's Razor),简单而言:

若有多个假设与观察一致,则选最简单的那个。

        归纳偏好对应了学习算法本身所做出的关于“ 什么样的模型更好 ”的假设,但实际上

对于一个学习算法a,若它在某些问题上比学习算法b好,则必然存在另一些问题b比a好。

        对于上面的结论,可以借助公式进行求证:

        样本空间\chi和假设空间H都是离散,且P\left ( h|X, a \right )表示的是算法a基于训练数据X产生假设h的概率,f表示希望学习的真实目标函数。

        那么a在训练集之外的所有样本上的误差为:

E_{ote}\left ( a|X,f \right )=\sum_{h} \sum_{x\epsilon \chi -X}P(x)\mathbb{I}(h(x)\neq f(x))P(h|X,a)

        其中,\mathbb{I}(\cdot )是指示函数,若该指示函数为真取1,否则取0

        该误差可以认为是二分类,其真实目标函数可以是任何函数,\chi \mapsto \left \{ 0,1 \right \},函数空间\left \{ 0,1 \right \}^{|\chi |}对所有可能的f按照均匀分布对误差求和:

 =\sum_{f}\sum_{h} \sum_{x\epsilon \chi -X}P(x)\mathbb{I}(h(x)\neq f(x))P(h|X,a)

=\sum_{x\epsilon \chi -X}P(x)\sum_{h}P(h|X,a)\sum_{f}\mathbb{I}(h(x)\neq f(x))

        假设f是任何能将样本映射到{0,1}的函数。存在多个f时,f服从均匀分布,即每个f出现的概率相等。依据函数空间\left \{ 0,1 \right \}^{|\chi |}\chi =\left \{ 0,1 \right \},则

|\chi |=2

        那么,所有可能的真实目标函数f如下:

f_{1}:f_{1}(x_{1})=0,f_{1}(x_{2})=0

f_{2}:f_{2}(x_{1})=0,f_{2}(x_{2})=1

f_{3}:f_{3}(x_{1})=1,f_{3}(x_{2})=0

f_{4}:f_{4}(x_{1})=1,f_{4}(x_{2})=1

         一共有2^{|\chi |}=2^{2}=4个可能的f,且无论f预测值为0或者1,都有一半不同,所以:

\sum_{f}\mathbb{I}(h(x) \neq f(x))=\frac{1}{2}2^{|\chi |}

=\frac{1}{2}2^{|\chi |}\sum_{x\epsilon \chi -X}P(x)\sum_{h}P(h|X,a)

=2^{|\chi |-1}\sum_{x\epsilon \chi -X}P(x)\cdot 1

        可以得到结论:无论学习算法a多么聪明,b多么笨拙,它们的期望性相同,也就是NFL定理。但在验证过程中架设了f均匀分布,而在实际情况中并非如此。因此,该结论是在告知:

谈论算法的相对优劣,必须针对具体的学习问题

 二、模型评估与选择

2.1、经验误差与过拟合

容错率(error rate) 分类错误的样本a占样本总数m的比
误差(error) [指的是误差期望] 学习器的实际输出与样本的真实输出之间的差异
训练误差(training error) 学习器在训练集上的误差
泛化误差(generalization error) 学习器在新样本上的误差
过拟合(overfitting) 学习器把训练样本学习得太好时,有可能把训练样本自身的一些特点当作所有潜在样本都具备的一般性质
欠拟合(underfitting) 对训练样本的一般性质尚未学好

        补充:

错误率 E=\frac{a}{m},则精度为

对泛化误差而言,实际期望越低越好

过拟合是无法避免的,只能缓解

2.2、评估方法

        模型选择可通过实验测试来对学习器的泛化误差进行评估进而选择,因此需要使用一个测试集来测试学习器对新样本的判别能力,后以测试集上的测试误差作为泛化误差的近似

需要注意的是测试集尽可能与训练集互斥

         而在一个有m个样例的数据集中,需要通过对数据集D进行适当处理,产生出训练集S和训练集T,常见做法有:

2.2.1、留出法(hold-out)

将数据集D划分出两个互斥集合,其中一个作为训练集S,另一个作为测试集T

即   D=S\bigcup T,S\bigcap T=\phi

 在S上训练出模型后,用T来评估其测试误差,作为泛化误差的估计

         注意:

  • 训练/测试集的划分要尽可能保持数据分布的一致性性,避免因数据划分过程引入额外的偏差而对最终结果产生影响
  • 即便在给定训练/测试集的样本比例后,仍存在多种划分方式对初始数据集D进行分割

         因此,单次使用留出法并不可靠,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果,同时也可得到估计结果的标准差。

        留出法的窘境,如S包含大部分样本,则model更接近用D训练出的模型,但T比较小,评估结果可能不可稳定准确。相反,T比较大,与用D训练出的模型可能有较大差距,降低了评估结果的保真性。

        面对这样的窘境,常见做法有将大约2/3~4/5的样本用于训练,其余用于测试,但一般而言,测试集至少应含30个样例。

2.2.2、交叉验证法(cross validation) 

        数据集D划分为K个大小相似的互斥子集,即D=D_{1}\bigcup D_{2}\bigcup...\bigcup D_{k},D_{i}\bigcap D_{j}=\phi

 (i \neq j)

        每个子集D_{i}都尽可能保持数据分布一致性,即从D中通过分层采样得到。训练集以k-1个子集的并集,测试集用余下的子集。这样可得到K组训练/测试集,从而进行K次训练和测试,最终放回K个测试结果的均值。

        图示:

机器学习-笔记-持续更新_第1张图片

        交叉验证法评估结果的稳定性和保真性很大取决于K的取值,因此,交叉验证法又称K折交叉验证。

        为减小因样本划分不同而引入的差别,K折交叉验证要随机使用不同的划分重复P次,最终评估结果为P次K折交叉验证结果的均值。

        当数据集D中包含m个样本,令k=m(即:不受随机样本划分的影响,每个子集包含一个样本),得到交叉验证法的特例:留一法(Leave-One-Out),简称LOO。留一法使用的训练集与D相比至少了一个样本,因此,留一法中的模型与期望评估的用D训练出的模型相似,评估结果往往被认为准确。但是,当D比较大时,留一法需要训练m个模型,同时,上文中提及的NFL定理同样适用。

2.2.3自助法(bootstrapping)

        在留出法和交叉验证中,用D训练出的模型保留了一部分样本用于测试,因此实际评估的模型所受的训练集比D小,必然会引入一些因训练样本规模不同而导致的偏差。而留一法受训练样本规模变化的影响小,计算复杂度过高

        对此,为减少训练样本规模不同造成的影响,同时比较高效地进行实验估计,可以采用自助法。

        自助法直接以自主采样法(bootstrap sampling),给定m个样本的数据集D进行采样产生数据集D‘,其过程为:

        每次随机从D中挑出一个样本,拷贝放入D’,再将该样本放回初始数据集D中,重复执行m次得到D‘

放回的目的是使得该样本在下次采样中仍有可能采集到

        因此,可得D中欧一部分样本会在D’中多次出现,而另一部分样本不出现,作简单的估计:

         样本在m次采样中始终不被采集到的概率为:

\lim_{m\rightarrow \infty }(1-\frac{1}{m})^{m}=\frac{1}{e}\approx 0.368,e是自然常数

        得到:

初始数据集D中约有36.8%的样本未出现在采样数据D‘中,可将D’作训练集,D\D‘用作测试集

         即,实际评估的模型与期望评估都使用m个训练样本,而仍有数据总量约1/3的,没在训练集中出现的样本用于测试。这样的测试结果,又称“包外估计”(out-of-bag estimate)

        自助法在数据集比较小,难以有效划分训练/测试集时很有用,同时能从初始数据集中产生多个不同的训练集,有利于集成学习。但是,自助法产生的数据集改变了初始数据集分布,这样会引入估计偏差。

        在初始数据量足够时,留出法和交叉验证更常用

-----2022/2/6修改-----

你可能感兴趣的:(机器学习,机器学习)