第一章作为开篇,其实是导论性质的一章,大部分内容也都是老生常谈,不过还是有一些概念我觉得挺有意思的,值得记录总结一下。不积跬步无以至千里,对基本概念的了解是基础,只有在掌握了这些理论的基础上,我们才能更好的掌握更高深的知识。
独立同分布概念本身包含了两部分内容:独立和同分布
在西瓜书中解释是:输入空间$\chi $中的所有样本服从一个隐含未知的分布,训练数据所有样本都是独立地从这个分布上采样而得。其实这个解释与上面的大同小异,强调的仍旧是独立和同分布两部分内容。
__那么在统计学习方法中为什么要对数据做出独立同分布的假设呢?__机器学习方法无论如何变化,归根到底都是对现有的数据(信息)进行训练和学习,以得到其中所隐含的概率分布,这种概率分布通常以条件概率分布或决策函数的形式获得。当所有的样本都独立且符合同一个概率分布时,模型就能较好的对这个统一的概率分布进行拟合,反之如果样本都是特例,不服从一个统一的概率分布,那么模型学习到的概率分布就不具有代表性,不能进行泛化。尽管机器学习并不总是要求数据具有同分布的特性,但数据的独立同分布假设 仍旧是一个重要的假设。
首先,对极大似然估计概念的理解,可以拆分成三部分:
极大:最大的概率
似然:看起来应该是这个样子的
估计:估计就是这样的
极大似然估计:利用已知的样本分布,反推最有可能(最大概率)导致这种概率分布的参数值
看完这段解释可能对概念本身比较懵,从大佬那里看到了一个很形象的例子解释极大似然估计的原理,如下图所示。
概念解释完了,下一个问题就是在给定条件下,将极大似然估计应用到具体问题中去。极大似然估计是建立在极大似然原理基础之上的统计方法,其给出了一种给定观察数据来评估模型参数的方法,即“模型已定,参数未知” 。(这个确定的模型为数据的概率分布函数,比如数据如果服从正态分布,则似然函数的形式为正态分布函数,需要确定的参数为正态分布中的参数,这些参数使得样本的出现概率最大)。
由于数据都是基于独立同分布假设,所以当样本集为 D = { x 1 , x 2 , ⋯   , x N } D=\left \{ x_{1},x_{2},\cdots ,x_{N} \right \} D={x1,x2,⋯,xN},可以用这一样本集来估计参数向量$\theta $ 。
似然函数(likelihood function):给出了在给定参数向量 θ \theta θ 的条件下,样本集D出现的概率,极大似然估计就是为了使已有样本集出现的概率 p ( D ∣ θ ) p(D|\theta ) p(D∣θ)最大。
l ( θ ) = p ( D ∣ θ ) = p ( x 1 , x 2 , ⋯   , x N ∣ θ ) = ∏ i = 1 N p ( x i ∣ θ ) l(\theta )=p(D|\theta )=p(x_{1},x_{2},\cdots ,x_{N}|\theta )=\prod_{i=1}^{N}p(x_{i}|\theta ) l(θ)=p(D∣θ)=p(x1,x2,⋯,xN∣θ)=i=1∏Np(xi∣θ)
如果 θ n \theta_{n} θn是参数空间空能使似然函数 l ( θ ) l(\theta ) l(θ)最大的 θ \theta θ 值,则 θ n \theta_{n} θn是最有可能的参数值,那么 θ n \theta_{n} θn就是$\theta $ 的极大似然估计值,它是样本集的函数,记做:
θ n = d ( x 1 , x 2 , ⋯   , x N ) \theta_{n}=d(x_{1},x_{2},\cdots ,x_{N}) θn=d(x1,x2,⋯,xN)
似然函数的定义和求解:当确定了似然函数的函数形式和参数之后,要做的就是根据现有的样本求解参数值使得样本出现的概率最大。最大似然估计的形式化定义为:
θ ^ = arg max θ l ( θ ) = arg max θ ∏ i = 1 N p ( x i ∣ θ ) \hat{\theta}=\arg \underset{\theta }{\max} l(\theta )=\arg \underset{\theta }{\max }\prod_{i=1}^{N}p(x_{i}|\theta ) θ^=argθmaxl(θ)=argθmaxi=1∏Np(xi∣θ)
实际中为了便于分析,定义了对数似然函数(这也是很常用的将乘法转化为加法,以达到简化运算的方法):
H ( θ ) = ln l ( θ ) H(\theta )=\ln l(\theta ) H(θ)=lnl(θ)
θ ^ = arg max θ H ( θ ) = arg max θ ln l ( θ ) = arg max θ ∑ i = 1 N ln p ( x i ∣ θ ) \hat{\theta }=\arg \underset{\theta }{\max }H(\theta )=\arg \underset{\theta }{\max }\ln l(\theta )=\arg \underset{\theta }{\max }\sum_{i=1}^{N}\ln p(x_{i}|\theta ) θ^=argθmaxH(θ)=argθmaxlnl(θ)=argθmax∑i=1Nlnp(xi∣θ)
要使得似然函数的值最大,一般是采用求导的方法。具体情况分为包含一个变量和多个变量,以及离散和连续概率分布的情况。
当有S个变量时,设 θ = [ θ 1 , θ 2 , ⋯   , S ] T \theta =[\theta _{1},\theta _{2},\cdots ,_{S}]^{T} θ=[θ1,θ2,⋯,S]T,记梯度算子为
▽ θ = [ ∂ ∂ θ 1 , ∂ ∂ θ 2 , ⋯   , ∂ ∂ θ S ] T \bigtriangledown_{\theta }=[\frac{\partial }{\partial \theta _{1}},\frac{\partial }{\partial \theta _{2}},\cdots ,\frac{\partial }{\partial \theta _{S}}]^{T} ▽θ=[∂θ1∂,∂θ2∂,⋯,∂θS∂]T
若似然函数满足连续可导的条件,则最大似然估计量就是如下方程的解:
▽ θ H ( θ ) = ▽ θ ln l ( θ ) = ∑ i = 1 N ▽ θ ln p ( x i ∣ θ ) = 0 \bigtriangledown_{\theta }H(\theta )=\bigtriangledown_{\theta }\ln l(\theta )=\sum_{i=1}^{N}\bigtriangledown_{\theta }\ln p(x_{i}|\theta )=0 ▽θH(θ)=▽θlnl(θ)=∑i=1N▽θlnp(xi∣θ)=0
举例1:设样本服从正态分布 N ( μ , δ 2 ) N(\mu ,\delta ^{2}) N(μ,δ2),则似然函数为:
L ( μ , δ 2 ) = ∏ i = 1 N 1 2 π δ e − ( x i − μ ) 2 2 δ 2 = ( 2 π δ 2 ) − N 2 e − 1 2 δ 2 ∑ i = 1 N ( x i − μ ) 2 L(\mu ,\delta ^{2})=\prod_{i=1}^{N}\frac{1}{\sqrt{2\pi }\delta }e^{-\frac{(x_{i}-\mu )^{2}}{2\delta ^{2}}}=(2\pi \delta ^{2})^{-\frac{N}{2}}e^{-\frac{1}{2\delta ^{2}}}\sum_{i=1}^{N}(x_{i}-\mu )^{2} L(μ,δ2)=∏i=1N2πδ1e−2δ2(xi−μ)2=(2πδ2)−2Ne−2δ21∑i=1N(xi−μ)2
将其改成对数形式,求偏导联立即可解得使对各个参数的偏导全为0的参数值。
针对离散型的概率分布函数依照类似的做法即可,这里主要介绍概念,所以不再赘述。
这一个概念的辨析其实一直到目前我都还是感觉挺困惑的,有很多的点都不是很明确,先写出目前为止对它的一点理解,在之后的学习过程中要联系具体方法进一步深入。
生成模型:从数据中学习到的是联合概率分布P(X,Y),然后根据贝叶斯公式可求条件概率分布P(Y|X)作为预测输出。模型表示了给定输入X产生输出Y的生成关系。
P ( Y ∣ X ) = P ( X , Y ) P ( X ) P(Y|X)=\frac{P(X,Y)}{P(X)} P(Y∣X)=P(X)P(X,Y)
判别模型:从数据中直接学习决策函数f(X)或者条件概率分布P(Y|X)作为模型的预测输出。判别模型关心的是对给定的输入X,应该预测什么样的输出Y
两者的优缺点对比
通常生成模型的收敛速度更快,即在样本数量足够大的条件下,生成模型能更快的收敛到真实模型
生成模型能够在存在隐变量的情况下使用,而判别模型不行
生成模型所能够学习到的信息比判别模型更多,但对数据量的要求也比判别模型更多,即生成模型能学习到更多的信息是建立在更大数据量的基础之上的
这里借助大佬的博客中给出的一个很形象的例子来解释这一点:
假如你的任务是识别一个语音属于哪种语言。例如对面一个人走过来,和你说了一句话,你需要识别出她说的到底是汉语、英语还是法语等。那么你可以有两种方法达到这个目的:
1、生成方法:学习每一种语言,你花了大量精力把汉语、英语和法语等都学会了,我指的学会是你知道什么样的语音对应什么样的语言。然后再有人过来对你哄,你就可以知道他说的是什么语音,你就可以骂他是“米国人还是小日本了”。
2、判别方法:不去学习每一种语言,你只学习这些语言模型之间的差别,然后再分类。意思是指我学会了汉语和英语等语言的发音是有差别的,我学会这种差别就好了。
这个很简单的例子很好的说明了生成方法和判别方法的区别。生成方法常事去找出到底数据是如何生成的(什么样的语音对应什么样的语言),然后再基于学到的知识进行分类(根据听到的语音确定语言)。而判别模型不关心数据是如何生成的(不去学习每一种语言),而只关心数据之间的差异(语言模型之间的差异),然后根据学到的差异对数据进行分类。这也解释了生成方法是对联合概率建模,而判别方法是直接对条件概率建模。
通过这个例子,我们同样可以看出生成方法能够学习到的信息比判别方法更多,在这个例子中生成方法学习了各种语言的语音知识再根据语音判断语种,而判别方法是直接学习语种之间的差异,其学习到的信息必然没有生成方法多。而另一方面,可以很明显的看出生成方法需要额数据量比判别方法更多,因为生成方法需要学习更多的知识。
当然只通过一个简单的例子无法证明什么,但这个例子能帮助我们更好的理解生成模型和判别模型的差异。
生成模型能够反映同类数据本身的相似度,但它并不关心划分各类的分类边界是什么。而判别模型不能反映训练数据本身的特性,它的目标是寻找不同类别之间的最优分类面,是对不同类别数据之间的差异进行建模的。这一点由上面的例子也可以发现。
生成模型的准确率往往没有判别模型高
由生成模型可以得到判别模型,但由判别模型不能得到生成模型。直观上理解这一点,学习到的生成模型可以用于分类任务,而判别模型无法转化成包含更多知识的生成模型。
另一个很典型的例子是跟踪算法,同样在大佬的博客中可以找到。这种算法的实现一般可以有两种思路:基于外观模型的生成模型或者基于外观模型的判别模型。
生成模型:一般是学习一个代表目标的模型,然后通过它去搜索图像区域,然后最小化重构误差。类似于生成模型描述一个目标,然后就是模式匹配了,在图像中找到和这个模型最匹配的区域,就是目标了。
判别模型:将跟踪问题看成一个二分类问题,然后找到目标和背景的决策边界。它不管目标是怎么描述的,那只要知道目标和背景的差别在哪,然后你给一个图像,它看它处于边界的那一边,就归为哪一类。
这个例子也很能说明生成模型和判别模型在学习过程中的差异。
典型的生成模型:朴素贝叶斯模型、隐马可夫模型;
典型的判别模型:k近邻法、感知机、决策树、逻辑斯蒂回归模型、最大熵模型、支持向量机、提升方法、条件随机场
核(kernel)方法是使用核函数将输入空间(低维空间)映射到特征空间(高维空间),从而将低维的线性不可分问题转化为高维的线性可分问题,在高维特征空间中进行内积计算的一种方法。比如在SVM中,利用核函数将输入空间中的线性不可分问题转化为高维特征空间中的线性可分问题,因为经典的SVM模型针对的就是线性可分的数据,通过确定超平面实现对数据的二分类。
核方法定义的是一种高维空间中的内积运算。比如在SVM中,当通过映射函数 ϕ ( x i ) \phi(x_{i}) ϕ(xi)将低维空间的数据向量映射到高维空间后,模型需要的是两个向量 x i , x j x_{i},x_{j} xi,xj对应的高维向量的内积 ϕ ( x i ) T ϕ ( x j ) \phi(x_{i})^{T}\phi (x_{j}) ϕ(xi)Tϕ(xj)。而这个值通常是很难直接计算的,核方法的意义就在于两个向量 x i , x j x_{i},x_{j} xi,xj在高维特征空间的内积等于它们在原始低维空间中通过函数 κ ( ⋅ , ⋅ ) \kappa (\cdot ,\cdot ) κ(⋅,⋅)计算的结果。有了这个函数,我们就不必直接计算高维甚至无穷维特征空间中的内积。(具体的内容见李航老师的《统计学习方法》或者西瓜书中的SVM相关章节,因为不是这里的重点不做详解。)
常用的核函数(其中的向量均为原始低维空间中的数据向量)
线性核(基本经验表明,对文本数据进行映射时,通常用线性核,情况不明时可先尝试高斯核)
k ( x i , x j ) = x i T x j k(\mathbf x_{i},\mathbf x_{j})=\mathbf x_{i}^{T}\mathbf x_{j} k(xi,xj)=xiTxj
多项式核
k ( x i , x j ) = ( x i T x j ) d k(\mathbf x_{i},\mathbf x_{j})=(\mathbf x_{i}^{T}\mathbf x_{j})^{d} k(xi,xj)=(xiTxj)d
高斯核(RBF核)
k ( x i , x j ) = e − ∥ x i − x j ∥ 2 2 δ 2 k(\mathbf x_{i},\mathbf x_{j})= e^{-\frac{\left \| \mathbf x_{i}- \mathbf x_{j} \right \|^{2}}{2\delta ^{2}}} k(xi,xj)=e−2δ2∥xi−xj∥2
拉普拉斯核
k ( x i , x j ) = e − ∥ x i − x j ∥ δ k(\mathbf x_{i},\mathbf x_{j})= e^{-\frac{\left \| \mathbf x_{i}- \mathbf x_{j} \right \|}{\delta}} k(xi,xj)=e−δ∥xi−xj∥
Sigmoid核
k ( x i , x j ) = tanh ( β x i T x j + θ ) k(\mathbf x_{i},\mathbf x_{j})= \tanh (\beta \mathbf x_{i}^{T}\mathbf x_{j} + \theta ) k(xi,xj)=tanh(βxiTxj+θ)
核函数的组合性质
若 κ 1 , κ 2 \kappa _{1},\kappa _{2} κ1,κ2为两个核函数,则对于任意正数 γ 1 , γ 2 \gamma _{1},\gamma _{2} γ1,γ2,其线性组合
γ 1 κ 1 + γ 2 κ 2 \gamma _{1}\kappa _{1}+ \gamma _{2}\kappa_{2} γ1κ1+γ2κ2
也是核函数
若 κ 1 , κ 2 \kappa _{1},\kappa _{2} κ1,κ2为两个核函数,则核函数的直积
κ 1 ⨂ κ 2 ( x , z ) = κ 1 ( x , z ) κ 2 ( x , z ) \kappa _{1}\bigotimes \kappa _{2}(\mathbf x,\mathbf z)=\kappa _{1}(\mathbf x, \mathbf z)\kappa _{2}(\mathbf x, \mathbf z) κ1⨂κ2(x,z)=κ1(x,z)κ2(x,z)
也是核函数
若 κ 1 \kappa _{1} κ1为核函数,则对于任意函数 g ( x ) g(\mathbf x) g(x)
κ ( x , z ) = g ( x ) κ 1 ( x , z ) g ( z ) \kappa (\mathbf x, \mathbf z)=g(\mathbf x)\kappa _{1}(\mathbf x, \mathbf z)g(\mathbf z) κ(x,z)=g(x)κ1(x,z)g(z)
也是核函数
正则化是模型选择时应用到的典型方法,是在平均风险上加一个正则化项(regularizer)或罚项(penalty term)。正则化一般是模型复杂度的单调递增函数,模型越复杂,正则化值越大,比如,正则化项可以是模型参数向量的范数。
正则化项一般形式如下:
min f ∈ Γ 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ J ( f ) \underset{f\in \Gamma }{\min} \frac{1}{N}\sum_{i=1}^{N}L(y_{i},f(x_{i})) + \lambda J(f) f∈ΓminN1∑i=1NL(yi,f(xi))+λJ(f)
其中 λ \lambda λ为超参, J ( f ) J(f) J(f)为正则化项,一般取得是模型参数向量的范数,下面给出几种常用的向量范数,设n维向量 X = { x 1 , x 2 , ⋯ x n } X=\left \{ x_{1},x_{2},\cdots x_{n} \right \} X={x1,x2,⋯xn},则
向量的1-范数
∥ X ∥ 1 = ∑ i = 1 n ∣ x i ∣ \left \| X \right \|_{1}=\sum_{i=1}^{n}\left | x_{i} \right | ∥X∥1=∑i=1n∣xi∣
向量的2-范数
∥ X ∥ 2 = ( ∑ i = 1 n x i 2 ) 1 2 \left \| X \right \|_{2}=(\sum_{i=1}^{n} x_{i}^{2})^{\frac{1}{2}} ∥X∥2=(∑i=1nxi2)21
向量的无穷范数
∥ X ∥ ∞ = max 1 ⩽ i ⩽ n ∣ x i ∣ \left \| X \right \|_{\infty }=\underset{1\leqslant i\leqslant n}{\max }\left | x_{i} \right | ∥X∥∞=1⩽i⩽nmax∣xi∣
向量的p-范数
∥ X ∥ p = ( ∑ i = 1 n ∣ x i ∣ p ) 1 p \left \| X \right \|_{p}=(\sum_{i=1}^{n} \left |x_{i} \right |^{p})^{\frac{1}{p}} ∥X∥p=(∑i=1n∣xi∣p)p1
最后提一句比较有意思的一点,正则化符合奥卡姆剃刀原理(Occam’s razor)。奥卡姆剃刀原理应用于模型选择时的想法为:在所有可能选择的模型中,能够很好的解释已知数据并且十分简单才是最好的模型,也就是应该选择的模型。
__交叉验证的方法是为了缓解实际应用场景下数据不足的问题而提出的。__如果给定的样本数据充足,那么可以简单的按照一定比例将数据分为训练集、验证集和测试集。而数据不足时,为了更好的利用有限的样本,就有了交叉验证的方法。其基本思想是重复的使用数据:把给定的数据进行切分,将切分的数据集组合为训练集和测试集,再次基础上反复进行训练、测试以及模型选择。
简单交叉验证
就是最简单的思路,将数据按照一定比例分为训练集和测试集,用为训练和测试。
S折交叉验证(S-fold cross validation)
首先随机的将数据集切分为S个互不相交、大小相同的子集;然后利用S-1个子集的数据训练模型,利用余下的一个子集测试模型;将这个过程对可能的S种选择重复进行;最后选出S次评测中平均测试误差最小的模型。
留一交叉验证
S折交叉验证的特殊情况是 S = N S=N S=N,往往是在数据缺乏的情况下使用。
试。
S折交叉验证(S-fold cross validation)
首先随机的将数据集切分为S个互不相交、大小相同的子集;然后利用S-1个子集的数据训练模型,利用余下的一个子集测试模型;将这个过程对可能的S种选择重复进行;最后选出S次评测中平均测试误差最小的模型。
留一交叉验证
S折交叉验证的特殊情况是 S = N S=N S=N,往往是在数据缺乏的情况下使用。