《神经网络与深度学习》邱希鹏 学习笔记(4)
- 完成进度
- 第二章 机器学习概述
- 机器学习算法的类型
- 数据的特征表示
- 传统的特征学习
- 特征选择
- 特征抽取
- PAC学习理论
- 没有免费午餐定理
- 奥卡姆剃刀原理
- 丑小鸭定理
- 归纳偏置
- 代码
- 实现不同基函数
- 实现最小二乘法
- 实现梯度下降法
完成进度
- …
- 第二章(2)
- 第二章(3)
- 第三章
- …
第二章 机器学习概述
第二章首先介绍机器学习的基本概念和基本要素,并较为详细地描述一个机器学习的例子——线性回归
机器学习 (Machine Learning , ML) 通俗地讲,就是让计算机从数据中进行自动学习,得到某种知识/规律。
事实上,作为一门学科,机器学习通常指一类问题以及解决这类问题的方法,即如何从观测数据/样本中寻找规律,并利用学习到的规律/模型对未知或无法观测的数据进行预测。
机器学习在早期的工程领域被称作模式识别 (Pattern Recognition) ,但模式识别更偏向于具体的应用任务光学字符识别 语音识别 人脸识别 。这些任务的特色是,人类自身很容易完成,但背后的原因未知,因此也很难人工设计出一个计算机程序来完成这些任务。
机器学习可以直接从有标注的样本上学习其中的规律,并完成各种识别任务,并最终取代模式识别,成为这一类问题及解决方法的总称。
机器学习算法的类型
机器学习可以按照不同的标准来进行分类。
按 f(x;θ)f(\\pmb{x};\\theta)f(xxx;θ) 的不同,机器学习算法可分为线性模型和非线性模型;
按学习准则的不同,机器学习算法可分为统计方法和非统计方法。
一般按照训练样本提供的信息以及反馈方式的不同进行分类,分类如下:
- 监督学习
-
如果机器学习的目标是建模样本的特征 x\\pmb{x}xxx 和标签 yyy 之间的关系:y=f(x;θ)y=f(\\pmb{x};\\theta)y=f(xxx;θ) 或 p(y∣x;θ)p(y|\\pmb{x};\\theta)p(y∣xxx;θ),并且训练集中每个样本都有标签,那么这类学习称为监督学习 (Supervised Learning)
-
根据标签类型的不同,监督学习又可分为:
- 回归 (Regression)
回归问题中的标签 yyy 是连续值(实数或连续整数),f(x;θ)f(\\pmb{x};\\theta)f(xxx;θ) 的输出也是连续值。 - 分类 (Classification)
分类问题中的标签 yyy 是离散的类别(符号)。
在分类问题中,学习到的模型也称为分类器 (Classifier)。
分类问题根据其类别数量又可分为二分类 (Binary Classification) 和多分类 (Multi-class Classification) 问题。 - 结构化学习 (Structured Learning)
结构化学习问题是一种特殊的分类学习。
在结构化学习中,标签 y\\pmb{y}yyy 通常是结构化的对象序列 树 图 。
由于结构化学习的输出空间比较大,因此一般定义一个联合特征空间,将 x\\pmb{x}xxx,y\\pmb{y}yyy 映射为该空间中的联合特征向量 ϕ(x,y)\\phi(\\pmb{x},\\pmb{y})ϕ(xxx,yyy),预测模型可以写为
y^=arg maxy∈Gen(x)f(ϕ(x,y);θ)\\hat{y}=\\mathop{arg\\,max}\\limits_{y \\in \\mathtt{Gen}(x)}f\\big(\\phi(\\pmb{x},\\pmb{y});\\theta\\big)y^=y∈Gen(x)argmaxf(ϕ(xxx,yyy);θ)
其中Gen(x)\\mathtt{Gen}(\\pmb{x})Gen(xxx)表示输入 x\\pmb{x}xxx 的所有可能的输出目标集合。
计算 arg maxarg\\,maxargmax 的过程也称为解码 (Decoding) 过程,一般通过动态规划的方法来计算。
- 回归 (Regression)
- 无监督学习
-
无监督学习 (Unsupervised Learning,UL) 是指从不包含目标标签的训练样本中自动学习到一些有价值的信息,典型的无监督学习问题有聚类、密度估计、特征学习、降维等。
- 强化学习
-
强化学习 (Reinforcement Learning,RL) 是一类通过交互来学习的机器学习算法。
在强化学习中,智能体根据环境的状态做出一个动作,并得到即时或延时的奖励。
智能体在和环境的交互中不断学习并调整策略,以取得最大化的期望总回报。
监督学习需要每个样本都有标签,而无监督学习则不需要标签。
一般而言,监督学习通常需要大量的有标签数据,这些数据集一般都需要由人工进行标注,成本很高。因此,也出现了很多弱监督学习 (Weakly Supervised Learning) 和半监督学习 (Semi-Supervised Learning,SSL) 的方法,希望从大规模的无标注数据中充分挖掘有用的信息,降低对标注样本数量的要求。
强化学习和监督学习的不同在于,强化学习不需要显示地以“输入/输出对”的方式给出训练样本,是一种在线的学习机制。
下图为三种学习方式比较。
数据的特征表示
在实际应用中,数据的类型多种多样文本 音频 图像 视频,不同类型的数据,其原始特征 (Raw Feature) 的空间也不相同,而很多机器学习算法要求输入的样本特征是数学上可计算的,因此在机器学习之前需要将这些不同类型的数据转换为向量表示。
- 图像特征
-
在手写体数字识别任务中,样本 x\\pmb{x}xxx 为待识别的图像,为了识别 x\\pmb{x}xxx 代表的数字,需要从图像中抽取特征。
-
若图像是一张大小为 M×NM\\times NM×N 的图像,其特征向量可以简单地表示为 M×NM\\times NM×N 维的向量,每一维的值为图像中对应像素的灰度值。
-
为了提高模型准确率,也会经常加入一个额外的特征直方图 宽高比 笔画数 纹理特征 边缘特征。
-
假设对样本 x\\pmb{x}xxx 共抽取了 DDD 个特征,这些特征可以表示为一个向量 x ∈ RD\\pmb{x}\\,\\in\\,\\mathbb{R}^Dxxx∈RD。
- 文本特征
-
在文本情感任务中,样本 xxx 为自然语言文本,类别 y∈{+1,−1}y \\in \\{+1,-1\\}y∈{+1,−1} 分别表示正面或负面的评价。
-
为了将样本 xxx 从文本形式转为向量形式,可以使用 词袋 (Bag-of-Words,BoW) 模型。
-
假设训练集合中的词都来自于一个词表 V\\mathcal{V}V,大小为 ∣V∣|\\mathcal{V}|∣V∣,则每个样本可以表示为一个 ∣V∣|\\mathcal{V}|∣V∣ 维的向量 x∈R∣V∣\\pmb{x}\\in\\mathbb{R}^{|\\mathcal{V}|}xxx∈R∣V∣ 。向量 x\\pmb{x}xxx 中第 iii 维的值表示词表中的第 iii 个词是否在 xxx 中出现。若出现,值为1;否则为0。
-
词袋模型将文本看做词的集合,不考虑次序信息,不能精确地表达文本信息。对其改进:使用N元特征 (N-Gram Feature),即每 NNN 个连续词构成一个基本单元,然后再用词袋模型进行表示。
- 表示学习
-
如果直接用数据的原始特征来进行预测,对机器学习模型的能力要求比较高。
-
使用原始特征存在以下不足:
- 特征比较单一,需要进行组合才能发挥其作用;
- 特征之间冗余度比价高;
- 并不是所有的特征都对预测有用;
- 很多特征通常是异变的;
- 特征中存在一些噪声。
-
为了提高机器学习算法的能力,需要抽取有效、稳定的特征。
-
传统的特征提取是通过人工方式进行的,需要大量的人工和专家知识。
-
一个成功的机器学习系统通常需要尝试大量的特征(特征工程 Feature Engineering),但这样的特征在很多任务中仍不能满足需要。因此,需要机器自动地学习出有效的特征(特征学习 Feature Learning/表示学习 Representation Learning)
-
特征学习在一定程度上也可以减少模型复杂性、缩短训练时间、提高模型泛化能力、避免过拟合等。
传统的特征学习
传统的特征学习一般是通过人为地设计一些准则,然后根据这些准则来选取有效的特征,具体分为:特征选择和特征抽取。
特征选择
特征选择 (Feature Selection) 是选取原始特征集合的一个有效子集,使得基于这个特征子集训练出来的模型准确率最高。简单地说,特征选择就是保留有用特征,移除冗余或无关的特征。
- 子集搜索
-
一种直接的特征选择方法为子集搜索 (Subset Search)。
-
假设原始特征数为 DDD,则共有 2D2^D2D 个候选子集。特征选择的目标是选择一个最优的候选子集。
-
最暴力的做法是测试每个特征子集,看机器学习模型哪个子集上的准确率最高。
-
常采用的方法是贪心策略:由空集合开始,每一轮添加该轮最优的特征,称为前向搜索 (Forward Search) / 从原始特征集合开始,每次删除最无用的特征,称为反向搜索 (Backward Search)。
-
子集搜索方法可分为以下两种:
- 过滤式方法 (Filter Method) 是不依赖具体机器学习模型的特征选择方法。
每次增加最有信息量的特征,或删除最没有信息量的特征。
特征的信息量可以通过信息增益 (Information Gain) 来衡量,即引入特征后条件分布 pθ(y∣x)p_{\\theta}(y|\\pmb{x})pθ(y∣xxx) 的不确定性(熵)的减少程度。
2.包裹式方法 (Wrapper Method) 是使用后续机器学习模型的准确率作为评价来选择一个特征子集的方法。
每次增加对后续机器学习模型最有用的特征,或删除对后续机器学习任务最无用的特征。
这种方法是将机器学习模型包裹到特征选择过程的内部。
2.5 ℓ1\\ell_1ℓ1 正则化 也是进行特征选择的一种方法。
由于 ℓ1\\ell_1ℓ1 正则化会导致稀疏矩阵,因此间接实现了特征选择。
- 过滤式方法 (Filter Method) 是不依赖具体机器学习模型的特征选择方法。
特征抽取
特征抽取 (Feature Extraction) 是构造一个新的特征空间,并将原始特征投影在新的空间中得到新的表示。
特征抽取又可以分为监督和无监督的方法。
监督的特征学习的目标是抽取对一个特定的预测任务最有用的特征线性判别分析(Linear_Discriminant,LDA)。
无监督的特征学习和具体任务无关,其目标通常是减少冗余信息和噪声主成分分析(Principal_Component_Analysis,PCA) 自编码器(Auto-Encoder,AE)。
下图为一些传统的特征选择和特征抽取的方法。
特征选择和特征抽取的优点是可以用较少的特征来表示原始特征中的大部分相关信息,去掉噪声信息,进而提高计算效率和减小维度灾难 (Curse of Dimensionality) 。
对于很多没有正则化的模型,特征选择和特征抽取非常必要。
经过特征选择和特征抽取后,特征的数量一般会减少,因此特征选择和特征抽取也被称作维数约减/降维 (Dinension Reduction)。
深度学习方法
传统的特征抽取一般是和预测模型的学习分离的:首先通过主成分分析或者线性判别分析等抽取出有效的特征,再基于这些特征训练一个具体的机器学习模型。
把特征的表示学习和机器学习的预测学习有机地统一到一个模型中,建立一个端到端的学习算法,就可以有效避免准则的不一致性,而这种表示学习方法被称为深度学习 (Deep Learning,DL)。
深度学习方法的难点是如何评价表示学习对最终系统输出结果的贡献或影响(贡献度分配问题)。
目前比较有效的模型是神经网络:把最后的输出层作为预测学习,其它层做为表示学习。
评价指标
为了衡量一个机器学习模型的好坏,需要给定一个测试集,用模型对测试集中的每一个样本进行预测,并根据预测结果计算评价分数。
对于分类问题,常见的评价标准有准确率,精确率、召回率和 F值等。
给定测试集 J={(x(1),y(1)),…,(x(N),y(N))}\\mathcal{J}=\\{(\\pmb{x}^{(1)},y^{(1)}),\\dots,(\\pmb{x}^{(N)},y^{(N)})\\}J={(xxx(1),y(1)),…,(xxx(N),y(N))},假设标签 y(n) ∈ {1,…,C}y^{(n)}\\,\\in\\,\\{1,\\dots,C\\}y(n)∈{1,…,C},用学习好的模型 f(x;θ∗)f(\\pmb{x};\\theta^*)f(xxx;θ∗) 对测试集中的每一个样本进行预测,结果为 KaTeX parse error: Expected \’EOF\’, got \’}\’ at position 36: …s,\\hat{y}^{(N)}}̲。
- 准确率 (Accuracy)
-
最常用的评价指标
A=1N∑n=1NI(y(n)=y^(n)),\\mathcal{A}=\\frac{1}{N}\\sum^{N}_{n=1}I({y}^{(n)}=\\hat{y}^{(n)}),A=N1n=1∑NI(y(n)=y^(n)),
其中 I(.)I(.)I(.) 为指示函数。 - 错误率 (Error Rate)
-
和准确率相对
ε=1−A=1N∑n=1NI(y(n)≠y^(n)).\\begin{aligned}\\varepsilon&=1-\\mathcal{A}\\\\&=\\frac{1}{N}\\sum^{N}_{n=1}I({y}^{(n)}\\ne\\hat{y}^{(n)}).\\end{aligned}ε=1−A=N1n=1∑NI(y(n)=y^(n)). - 精确率 (Precision) 和召回率 (Recall)
-
准确率是所有类别整体性能的平均,精确率和召回率是对每个类的性能评估
-
对于类别 ccc 来说,模型在测试集上的结果可以分为以下四种情况:
- 真正例 (True Positive,TP)
一个样本的真实类别为 ccc 并且模型正确地预测为类别 ccc 。这类样本记为
TPc=∑n=1NI(y(n)=y^(n)=c).TP_c=\\sum^{N}_{n=1}I({y}^{(n)}=\\hat{y}^{(n)}=c).TPc=n=1∑NI(y(n)=y^(n)=c). - 假负例 (False Negative,FN)
一个样本的真实类别为 ccc,模型错误地预测为其他类。这类样本记为
FNc=∑n=1NI(y(n)=c∧y^(n)≠c).FN_c=\\sum^{N}_{n=1}I({y}^{(n)}= c\\wedge\\hat{y}^{(n)}\\ne c).FNc=n=1∑NI(y(n)=c∧y^(n)=c). - 假正例 (False Positive,FP)
一个样本的真实类别为其他类,模型错误地预测为类别 ccc 。这类样本记为
FPc=∑n=1NI(y(n)≠c∧y^(n)=c).FP_c=\\sum^{N}_{n=1}I({y}^{(n)}\\ne c\\wedge\\hat{y}^{(n)}=c).FPc=n=1∑NI(y(n)=c∧y^(n)=c). - 真负例 (True Negative,TN)
一个样本的真实类别为其他类,模型也预测为其他类。这类样本记为TNcTN_cTNc。对于类别 ccc 来说,这种情况不需要关注。
- 真正例 (True Positive,TP)
-
可用下表的混淆矩阵表示。
-
可进一步定义精确率、召回率和F值。
-
精确率,又称精度或查准率,类别 ccc 的查准率是所有预测为类别 ccc 的样本中预测正确的比例:
- Pc=TPcTPc+FPc.\\mathcal{P}_c=\\frac{TP_c}{TP_c+FP_c}.Pc=TPc+FPcTPc.
-
召回率,又称查全率,类别ccc 的查全率是所有真实标签为类别 ccc 中预测正确的比例:
R=TPcTPc+FNc.\\mathcal{R}=\\frac{TP_c}{TP_c+FN_c}.R=TPc+FNcTPc. -
F值 (F Measure),是一个综合指标,为精确率和召回率的调和平均:
Fc=(1+β2)×Pc×Rcβ2×Pc+Rc,\\mathcal{F}_c=\\frac{(1+\\beta^2)\\times \\mathcal{P}_c \\times \\mathcal{R}_c}{\\beta^2 \\times \\mathcal{P}_c +\\mathcal{R}_c},Fc=β2×Pc+Rc(1+β2)×Pc×Rc,
其中 β\\betaβ 用于平衡精确率和召回率的重要性,一般取值为1。β=1\\beta=1β=1 时的F值称为F1值,是精确率和召回率的调和平均。 - 宏平均 (Macro Average) 和微平均 (Micro Average)
-
宏平均和微平均为了计算分类算法在所有类别上的总体精确率、召回率和F1值所使用的方法。
-
宏平均是每一类的性能指标的算术平均值:
Pmacro=1C∑c=1CPc, Rmacro=1C∑c=1CRc, F1macro=2×Pmacro×RmacroPmacro+Rmacro.\\mathcal{P}_{macro}=\\frac{1}{C}\\sum^{C}_{c=1}\\mathcal{P}_c,\\\\\\,\\\\\\mathcal{R}_{macro}=\\frac{1}{C}\\sum^{C}_{c=1}\\mathcal{R}_c,\\\\\\,\\\\\\mathcal{F}1_{macro}=\\frac{2\\times\\mathcal{P}_{macro}\\times\\mathcal{R}_{macro}}{\\mathcal{P}_{macro}+\\mathcal{R}_{macro}}.Pmacro=C1c=1∑CPc,Rmacro=C1c=1∑CRc,F1macro=Pmacro+Rmacro2×Pmacro×Rmacro. -
另外,有些文献中F1值的宏平均为F1macro=1C∑c=1CF1c\\mathcal{F}1_{macro}=\\frac{1}{C}\\sum^{C}_{c=1}\\mathcal{F}1_{c}F1macro=C1∑c=1CF1c 。
-
微平均是每一个样本的性能指标的算术平均值。
-
对于单个样本而言,它的精确率和召回率是相同的(1/0),因此精确率的微平均和召回率的微平均是相同的。同理,得到F1值的微平均指标是相同的。
-
当不同类别的样本数量不均衡时,使用宏平均会比微平均合理。宏平均会更关注小类别上的评价指标。
-
在实际应用中,可以通过调整分类模型的阈值来进行更全面的评价AUC(Area_Under_Curve) ROC曲线(Receiver_Operating_Characteristic) PR曲线(Precision_Recall),此外还有其他自己专门的评价TopN准确率。
- 交叉验证 (Cross_Validation)
-
交叉验证是一种比较好的衡量机器学习模型的统计分析方法,可以有效避免划分训练集和测试集是的随机性对评价结果造成的影响。
-
把原始数据集平均分为 KKK 组不重复的子集,每次选择 K−1K-1K−1 组子集作为训练集,剩下一组作为验证集。这样进行 KKK 次实验并得到 KKK 个模型,将这 KKK 个模型在各自验证集上的错误率的平均作为分类器的评价。
理论和定理
PAC学习理论
当使用机器学习方法来解决某个特定问题时,通常靠经验或者多次试验来选择合适的模型、训练样本数量以及学习算法收敛的速度等,但是经验判断或多次试验往往成本较高,也不可靠,因此希望有理论来分析问题难度、计算模型能力,为学习算法提供理论保证,并指导机器学习模型和学习算法的设计。
计算学习理论 (Computational Learning Theory) 是机器学习的理论基础,其最基础的理论是可能近似正确 (Probably Approximately Correct,PAC) 学习理论。
泛化错误 (Generalization Error) 是指期望错误和经验错误之间的差异,是机器学习中一个很关键的问题。
它可以衡量一个机器学习模型 fff 是否可以很好地泛化到未知数据。
GD(f)=R(f)−RD(f)emp.\\mathcal{G}_{\\mathcal{D}}(f)=\\mathcal{R}(f)-\\mathcal{R}^{emp}_{\\mathcal{D}(f)}.GD(f)=R(f)−RD(f)emp.
根据大数定理,当训练集大小 ∣D∣|\\mathcal{D}|∣D∣ 趋向于无穷大时,泛化错误趋向于0,即经验风险趋向于期望风险。
lim∣D∣→∞R(f)−RD(f)emp=0.\\mathop{lim}\\limits_{|\\mathcal{D}|\\to\\infty}\\mathcal{R}(f)-\\mathcal{R}^{emp}_{\\mathcal{D}(f)}=0.∣D∣→∞limR(f)−RD(f)emp=0.
由于真实的数据分布 p(x,y)p(\\pmb{x},y)p(xxx,y) 以及真实的目标函数 g(x)g(\\pmb{x})g(xxx) 未知,因此期望从有限的训练样本上学习到一个期望错误为0的函数 f(x)f(\\pmb{x})f(xxx) 是不现实的。因此,需要降低对学习算法的期望,只要求学习算法可以以一定的概率学习到一个近似正确的假设,即PAC学习 (PAC Learning)。
一个PAC可学习 (PAC-Learning) 的算法是指该学习算法能够在多项式时间内从合理数量的训练数据中学习到一个近似正确的 f(x)f(\\pmb{x})f(xxx) 。
PAC学习可以分为两部分:
- 近似正确 (Approximately Correct):一个假设 f∈Ff\\in\\mathcal{F}f∈F 是“近似正确”的,是指其在泛化错误 GD(f)\\mathcal{G}_{\\mathcal{D}}(f)GD(f) 小于一个界限 ϵ\\epsilonϵ。ϵ\\epsilonϵ 一般为0到 12\\frac{1}{2}21 之间的数,0<ϵ<120\\lt\\epsilon\\lt\\frac{1}{2}0<ϵ<21。如果 GD(f)\\mathcal{G}_{\\mathcal{D}}(f)GD(f) 比较大,说明模型不能用来做正确的“预测”。
- 可能 (Probably):一个学习算法 A\\mathcal{A}A 有“可能”以 1−δ1-\\delta1−δ 的概率学习到这样一个“近似正确”的假设。δ\\deltaδ 一般为0到 12\\frac{1}{2}21 之间的数,0<δ<120\\lt\\delta\\lt\\frac{1}{2}0<δ<21。
PAC学习可以如下公式描述:
P((R(f)−RD(f)emp)≤ϵ)≥1−δ,P\\Bigg(\\bigg(\\mathcal{R}(f)-\\mathcal{R}^{emp}_{\\mathcal{D}(f)}\\bigg)\\le\\epsilon\\Bigg)\\ge1-\\delta,P((R(f)−RD(f)emp)≤ϵ)≥1−δ,
其中 ϵ,δ\\epsilon,\\deltaϵ,δ 是和样本数量 NNN 以及假设空间 F\\mathcal{F}F 相关的变量。
如果固定 ϵ,δ\\epsilon,\\deltaϵ,δ ,可以反过来计算出需要的样本数量:
N(ϵ,δ)≥12ϵ2(log∣F∣+log2δ),N(\\epsilon,\\delta)\\ge\\frac{1}{2\\epsilon^2}(log|\\mathcal{F}|+log\\frac{2}{\\delta}),N(ϵ,δ)≥2ϵ21(log∣F∣+logδ2),
其中 ∣F∣|\\mathcal{F}|∣F∣ 为假设空间大小。
可知模型越复杂,即假设空间 F\\mathcal{F}F 越大,模型的泛化能力越差。
要达到相同的泛化能力,越复杂的模型需要的样本数量越多。
为了提高模型的泛化能力,通常需要正则化 (Regularization) 来限制模型复杂度。
如果希望模型的假设空间越大,泛化错误越小,其需要的样本数量越多。
没有免费午餐定理
没有免费午餐定理 (No Free Lunch Theorem,NFL) 是由 Wolpert 和 Macerday 在最优化理论中提出。
它证明:
-
对于基于迭代的最优化算法,不存在某种算法对所有问题(有限的搜索空间内)都有效。
-
如果一个算法对某些问题有效,那么它一定在另外一些问题上比纯随机搜索算法更差。
不能脱离具体问题来谈论算法的优劣。任何算法都有局限性。
在机器学习中,不存在一种机器学习算法适用于任何领域或任务。
奥卡姆剃刀原理
奥卡姆剃刀原理 (Occam’s Razor) 是由14世纪逻辑学家 William of Occam 提出的一个解决问题的法则:
如无必要,勿增实体
此原理的思想和机器学习中的正则化十分相似:简单的模型泛化能力更好。
如果有两个性能相近的模型,应选择更简单的模型。
奥卡姆剃刀的一种形式化是最小描述长度原则 (Minimum Description Length,MDL):
对一个数据集 D\\mathcal{D}D,最好的模型 f∈Ff\\in\\mathcal{F}f∈F 会使数据集的压缩效果最好,即编码长度最小。
最小描述长度也可通过贝叶斯学习的观点来解释:
模型 fff 在数据集 D\\mathcal{D}D 上的对数后验概率为
maxf log(f∣D)=maxf log p(D∣f)+log p(f)=minf−log p(D∣f)−log p(f),\\begin{aligned}\\mathop{max}\\limits_{f}\\,log(f|\\mathcal{D})&=\\mathop{max}\\limits_{f}\\,log\\,p(\\mathcal{D}|f)+log\\,p(f)\\\\&=\\mathop{min}\\limits_{f}-log\\,p(\\mathcal{D}|f)-log\\,p(f),\\end{aligned}fmaxlog(f∣D)=fmaxlogp(D∣f)+logp(f)=fmin−logp(D∣f)−logp(f),
其中 −log p(f)-log\\,p(f)−logp(f) 和 −log p(D∣f)-log\\,p(\\mathcal{D}|f)−logp(D∣f) 可以分别看做模型 fff 的编码长度和在该模型下数据集 D\\mathcal{D}D 的编码长度。
也就是说,模型 fff 不但可以编码数据集 D\\mathcal{D}D,而且要尽可能简单。
丑小鸭定理
丑小鸭定理 (Ugly Duckling Theorem) 是1969年由渡边慧提出的。
丑小鸭与白天鹅之间的区别和两只白天鹅之间的区别一样大
归纳偏置
归纳偏置 (Inductive Bias) 是在机器学习中很多算法对学习问题所做的一些的假设。
归纳偏置在贝叶斯学习中被称为先验 (Prior)。
自我理解
代码
第二章要求实现线性回归下的最小二乘法、以及梯度下降法;实现不同的基函数。
在实现最小二乘法时,遇到了np.power与np.linalg.inv 的问题,其余正常。
实现不同基函数
def multinomial_basis(x, feature_num=10):\'\'\'多项式基函数\'\'\'x = np.expand_dims(x, axis=1) # shape(N, 1)#==========#todo \'\'\'请实现多项式基函数\'\'\'x_expend = [x]for i in range(2,feature_num+1):x_expend.append(x**i)#==========ret = np.concatenate(x_expend,axis=1)return retdef gaussian_basis(x, feature_num=10):\'\'\'高斯基函数\'\'\'#==========#todo \'\'\'请实现高斯基函数\'\'\'mu = np.linspace(0, 25, feature_num)sigma = 1.0 * (mu[1]-mu[0])x = np.expand_dims(x, axis=1)x = np.concatenate([x] * feature_num, axis=1)temp = (x - mu) / sigma#==========ret = np.exp((-1/2) * (temp)**2)return ret
实现最小二乘法
# 最小二乘法 矩阵形式def train_matrix():temp1=np.dot(phi.T,phi)temp2=np.linalg.inv(temp1) # np.powertemp3=np.dot(phi.T,y_train)w=np.dot(temp2,temp3)return w
- 简单线性回归下的最小二乘法
2. 多项式回归下的最下二乘法
3. 高斯基函数下的多项式回归下的最小二乘法
实现梯度下降法
def train_gradient(w):learning_rate = 1e-3temp1 = y_train - np.dot(phi,w)temp2 = np.dot(phi.T,temp1)print(temp2)ret = w + learning_rate * temp2return ret
- 简单线性回归下的梯度下降法
2. 高斯基函数下的多项式回归下的梯度下降法