偏差与方差:https://www.cnblogs.com/daguankele/p/6561419.html
对于测试样本x,令yD为x在数据集中的标记(可能存在噪声导致标记值和真实值不同),y为x的真实值,f(x;D)在训练集D上学得模型f在x上的输出。以回归任务为例:
学习算法的期望预测为:
就是所有预测值的平均值;
产生的方差的计算为:
方差就是表示在某测试数据集上的方差,都是测试数据集上的预测值之间的关系,与真实的值并没有关系
对于噪声定义为:
标记值与真实值差平方的期望。
偏差则定义成期望输出与真实标记的差别:
偏差用于描述模型的拟合能力;
方差用于描述模型的稳定性。
导致偏差和方差的原因:
偏差通常是由于我们对学习算法做了错误的假设,或者模型的复杂度不够;
- 比如真实模型是一个二次函数,而我们假设模型为一次函数,这就会导致偏差的增大(欠拟合);
- 由偏差引起的误差通常在训练误差上就能体现,或者说训练误差主要是由偏差造成的
方差通常是由于模型的复杂度相对于训练集过高导致的;
- 比如真实模型是一个简单的二次函数,而我们假设模型是一个高次函数,这就会导致方差的增大(过拟合);
- 由方差引起的误差通常体现在测试误差相对训练误差的增量上
如果你的模型训练结果是high bias,我们一般用以下几种方法来改进:
- 尝试使用更复杂更大的网络结构(增加单元数、增加层数,或者更改结构)
- 训练更长的时间(增加迭代次)数
因为high bias意味着我们训练的还不够,连训练集的内容都无法很好的识别。所以这种情况下不 用去想增加数据量,因为这个没关系,是模型太差了。
当bias问题解决好了之后,如果还有high variance问题,那我们可以这样改进:
- 收集更多的训练样本去训练
- 使用正则化手段
与或门可以分解为一个与非门和一个或门的与:
生成模型与判别模型的区别
判别模型直接学习决策函数或者条件概率分布。
生成模型学习的是联合概率分布P(X,Y),然后计算条件概率公式计算 P(Y|X)。
生成模型:朴素贝叶斯、隐马尔可夫(em算法)、混合高斯模型。
判别模型:k近邻法、感知机、决策树、逻辑回归、线性回归、最大熵模型、支持向量机(SVM)、提升方法、条件随机场(CRF)。
对比:
1、生成模型可以还原出联合概率分布(还原数据本身相似度),而判别方法不能;
2、生成方法的学习收敛速度更快,当样本容量增加的时候,学到的模型可以更快的收敛于真实模型;
3、当存在隐变量时,仍可以利用生成方法学习,此时判别方法不能用;
4、判别学习不能反映训练数据本身的特性,但它寻找不同类别之间的最优分类面,反映的是异类数据之间的差异,直接面对预测,往往学习的准确率更高,由于直接学习P(Y|X)或Y=f(X),从而可以简化学习;
5、简单的说,生成模型是从大量的数据中找规律,属于统计学习;而判别模型只关心不同类型的数据的差别,利用差别来分类,没有生成模型对大数据量的要求。
余弦相似度(Cos距离)与欧氏距离的区别和联系:
- 欧式距离和余弦相似度都能度量 2 个向量之间的相似度
- 放到向量空间中看,欧式距离衡量两点之间的直线距离,而余弦相似度计算的是两个向量之间的夹角
- 没有归一化时,欧式距离的范围是 [0, +∞],而余弦相似度的范围是 [-1, 1];余弦距离是计算相似程度,而欧氏距离计算的是相同程度(对应值的相同程度)
- 归一化的情况下,可以将空间想象成一个超球面(三维),欧氏距离就是球面上两点的直线距离,而向量余弦值等价于两点的球面距离,本质是一样。
解释一下过拟合和欠拟合,如何解决这两种问题?
所谓过拟合(Overfitting):指一个假设训练误差小但是测试误差大。此时模型的泛化能力较差,不利于推广。有多种因素都能导致过拟合,其中最常见的情况是由于学习能力过于强大,以至于把训练样本中包含的不太一般的特性都学到了,学习能力是否过于强大,是由学习算法和数据内涵共同决定的。欠拟合就是模型没有很好地捕捉到数据特征,不能够很好地拟合数据。
过拟合产生的原因:训练数据中存在噪音或者训练数据太少或模型复杂度过高。
过拟合处理方法:
- 正则化。调整特征大小,对一些或者所有特征进行惩罚。
- 增加样本量。
- 丢弃一些不能帮助我们正确预测的特征。
- 重新清洗数据,做好数据预处理工作。
欠拟合处理方法:增加网络复杂度或者在模型中增加多点特征项。
如何处理维度灾难?
维度灾难在机器学习中指,在样本数量固定时,随着特征维度的增加,训练样本的在特征空间的密度呈指数型下降,由于稀疏性,我们更加容易找到一个超平面来实现分类,然而,如果我们将高维的分类结果投影到低维空间中,将会出现一个严重的问题:分类器学习了训练数据的噪声和异常,而对样本外的数据拟合效果并不理想,甚至很差。另外,维度很大的时候,计算量也会特别大。
处理维度灾难的方法:利用启发式方法(例如贪心算法、best-first方法等)来定位最佳的特征组合和数量,或者利用深度学习自编码器解决维度过大的问题,利用交叉验证方法避免过拟合。
自动编码器是一种数据的压缩算法,其中数据的压缩和解压缩函数是数据相关的、有损的、从样本中自动学习的。在大部分提到自动编码器的场合,压缩和解压缩的函数是通过神经网络实现的。搭建一个自动编码器需要完成下面三样工作:搭建编码器,搭建解码器,设定一个损失函数,用以衡量由于压缩而损失掉的信息。编码器和解码器一般都是参数化的方程,并关于损失函数可导,典型情况是使用神经网络。编码器和解码器的参数可以通过最小化损失函数而优化,例如SGD。
什么是正则化项。为什么要使用正则化,说出一些常用的正则化方法?
1 什么是正则化?答:正则化就是在损失函数后加上一个正则化项(惩罚项),其实就是常说的结构风险最小化策略,即经验风险(损失函数)加上正则化。一般模型越复杂,正则化值越大。正则化其实就是带约束条件的优化问题,正则化项是用来对模型中某些参数进行约束的。
2 为什么要正则化?答:就是对目标函数加上一个约束条件,L1正则化可以产生稀疏权重矩阵,即大部分w为0,只有少数w非0,可以用于特征选择,因为L1正则化约束的解空间一般在与坐标轴相交的顶点处取得最优解。L2正则化可以防止模型过拟合,因为L2正则化项可以获得很小的权重系数,减小模型的复杂度。(参考:https://blog.csdn.net/m0_37952909/article/details/79686573)另外,机器学习中许多线性模型都依赖与矩阵求逆,当数据生成分布在一些方向上确实没有差异,或因为例子较少而在一些方向上没有观察到方差时,这个矩阵就是奇异的,正则化矩阵可以保证是可逆的。
3 说出一些正则化方法。答:正则化的一般形式如下:
lamda>=0,是调整损失函数和正则化项的系数。在回归问题中,常见的正则化有L1正则化和L2正则化。
为什么L1正则化可以产生稀疏模型(L1是怎么让系数等于零的),以及为什么L2正则化可以防止过拟合
假设有如下带L1正则化的损失函数:
J=J0+α∑∣w∣
其中J0是原始的损失函数,加号后面的一项是L1正则化项,α是正则化系数。J的优化问题可以转化为在L1正则化项这个约束条件下的求最小值问题。注意到L1正则化是权值的绝对值之和,它造成的约束区域是一个直线拼成的平面,一般J0会在这个平面的尖角的地方(坐标轴上)取得极值,而在这些角上,会有很多权值等于0,这就是为什么L1正则化可以产生稀疏模型,进而可以用于特征选择。这些极值点的可以采用在该点处左导数和右导数异号来证明。
假设有如下带L2正则化的损失函数:
拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是『抗扰动能力强』。L2正则化可以获得值很小的参数。之所以L2正则化不会让参数变得稀疏是因为当参数变得很小时,比如0.001,这个参数的平方基本就可以忽略了,于是模型不会进一步将这个参数调整为0。
L1正则化计算公式不可导,L2正则化公式可导,因为在优化时需要计算损失函数的偏导,L2正则化计算起来更加简便,而优化带L1正则化的损失函数更加复杂。在实践中,也可以将L1和L2正则化同时使用。
神经网络为什么要使用激活函数,为什么relu要比sigmoid要好?
如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是该层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与只有一个隐藏层效果相当。如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。
那么为什么relu要比sigmoid要好?采用sigmoid等函数,反向传播求误差梯度时,求导计算量很大,而Relu求导非常容易,并且收敛速度快。对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况。Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。如果使用 ReLU,要小心设置 learning rate,注意不要让网络出现很多 “dead” 神经元,如果不好解决,可以试试 Leaky ReLU、PReLU 或者 Maxout。
什么是数据标准化,为什么要进行数据标准化?
标准化也称规范化,是数据预处理中的一个步骤,指将数据按照比例缩放,使之落入一个特定的区间。数据标准化能够消除变量之间的量纲关系,减少数值导致问题出现的风险(大数吞小数,梯度消失和梯度爆炸的问题)使网络快速收敛。
归一化是对不同特征维度进行伸缩变换,目的是使各个特征维度对目标函数的影响权重是一致的,即使得那些扁平分布的数据伸缩变换成类圆形,梯度下降求解时不同特征的更细速度变得更为一致,提高迭代求解的收敛速度。这也就改变了原始数据的一个分布。常用的数据归一化方式有:最大最小归一化,将数据映射到[0, 1];零-均值归一化,处理后数据均值为0,标准差为1;小数定标归一化,将数据映射到[-1, 1]。
标准化对不同特征维度的伸缩变换的目的是使得不同度量之间的特征具有可比性。同时不改变原始数据的分布。
需要标准化的模型:
有些模型在各个维度进行不均匀伸缩后,最优解与原来不等价,例如SVM(距离分界面远的也拉近了,支持向量变多?)。对于这样的模型,除非本来各维数据的分布范围就比较接近,否则必须进行标准化,以免模型参数被分布范围较大或较小的数据支配。
有些模型在各个维度进行不均匀伸缩后,最优解与原来等价,例如logistic regression(因为θ的大小本来就自学习出不同的feature的重要性吧?)。对于这样的模型,是否归一化理论上不会改变最优解。但是,由于实际求解往往使用迭代算法,如果目标函数的形状太“扁”,迭代算法可能收敛得很慢甚至不收敛。所以对于具有伸缩不变性的模型,最好也进行数据归一化。
什么是降维,优缺点是什么,有哪些降维方法?
降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中。降维的原因:原数据特征之间存在相互关联关系,降维可以使属性相互独立;高维空间样本具有稀疏性,训练困难,降维利于训练模型。降维的缺点使会造成信息损失。
常用的降维方法有PCA和LDA,都是线性降维方法,前者是无监督的,后者是有监督的。PCA的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性。LDA(Linear Discriminant Analysis)的原理是,将带上标签的数据(点),通过投影的方法,投影到维度更低的 空间中,使得投影后的点,会形成按类别区分,一簇一簇的情况,相同类别的点, 将会在投影后的空间中更接近。用一句话概括就是:“投影后类内方差最小,类间方差最大”。LDA是为了使得降维后的数据点尽可能地容易被区分!
- 如何处理缺失值数据?
缺失值数据的处理方法大致可以分为两类,删除和填补。填补方式有均值、中位数、众数插补;固定值插补;最近插补;回归方法,建立模型,数据预测;插值法,拉格朗日插值,牛顿插值。
最小二乘法和梯度下降的对比
相同
1.本质相同:两种方法都是在给定已知数据的前提下算出一个一般性的估值函数。
2.目标相同:都是在已知数据的框架内,使得估算值与实际值的总平方差尽量更小
不同
1.实现方法和结果不同:最小二乘法是直接对拟合函数的参数求导找出全局最小,不是迭代法。而梯度下降法是一种迭代法,向下降最快的方向调整,在若干次迭代之后找到局部最小。梯度下降法的缺点是到最小点的时候收敛速度变慢,并且对初始点的选择极为敏感,其改进大多是在这两方面下功夫。
最小二乘法和极大似然法的区别
对于最小二乘法,当从模型总体随机抽取n组样本观测值后,最合理的参数估计量应该使得模型能最好地拟合样本数据,也就是估计值和观测值之差的平方和最小。而对于最大似然法,当从模型总体随机抽取n组样本观测值后,最合理的参数估计量应该使得从模型中抽取该n组样本观测值的概率最大。显然,这是从不同原理出发的两种参数估计方法。
在最大似然法中,通过选择参数,使已知数据在某种意义下最有可能出现,而某种意义通常指似然函数最大,而似然函数又往往指数据的概率分布函数。与最小二乘法不同的是,最大似然法需要已知这个概率分布函数,这在实践中是很困难的。一般假设其满足正态分布函数的特性,在这种情况下,最大似然估计和最小二乘估计相同。
最小二乘法以估计值与观测值的差的平方和作为损失函数,极大似然法则是以最大化目标值的似然概率函数为目标函数,从概率统计的角度处理线性回归并在似然概率函数为高斯函数的假设下同最小二乘建立了的联系。
说一下EM算法的原理?
我们经常会从样本观察数据中,找出样本的模型参数。 最常用的方法就是极大化模型分布的对数似然函数。
但是在一些情况下,我们得到的观察数据有未观察到的隐含数据,此时我们未知的有隐含数据和模型参数,因而无法直接用极大化对数似然函数得到模型分布的参数。怎么办呢?这就是EM算法可以派上用场的地方了。
EM算法解决这个的思路是使用启发式的迭代方法,既然我们无法直接求出模型分布参数,那么我们可以先猜想隐含数据(EM算法的E步),接着基于观察数据和猜测的隐含数据一起来极大化对数似然,求解我们的模型参数(EM算法的M步)。由于我们之前的隐藏数据是猜测的,所以此时得到的模型参数一般还不是我们想要的结果。不过没关系,我们基于当前得到的模型参数,继续猜测隐含数据(EM算法的E步),然后继续极大化对数似然,求解我们的模型参数(EM算法的M步)。以此类推,不断的迭代下去,直到模型分布参数基本无变化,算法收敛,找到合适的模型参数。
从上面的描述可以看出,EM算法是迭代求解最大值的算法,同时算法在每一次迭代时分为两步,E步和M步。一轮轮迭代更新隐含数据和模型分布参数,直到收敛,即得到我们需要的模型参数。
EM算法一定是可以收敛的,但不一定收敛到全局最优点。如果目标函数是凸函数,则可以收敛到全局最优。缺点是对初始值敏感,在GMM(高斯混合模型)和K-means聚类算法上有应用。
Adaboost、GBDT与XGBoost的区别
- Adaboost与GBDT两者boosting的不同策略是两者的本质区别。
- Adaboost强调Adaptive(自适应),通过不断修改样本权重(增大分错样本权重,降低分对样本权重),不断加入弱分类器进行boosting。
- 而GBDT则是旨在不断减少残差(回归),通过不断加入新的树旨在在残差减少(负梯度)的方向上建立一个新的模型。——即损失函数是旨在最快速度降低残差。
- 而XGBoost的boosting策略则与GBDT类似,区别在于GBDT旨在通过不断加入新的树最快速度降低残差,而XGBoost则可以人为定义损失函数(可以是最小平方差、logistic loss function、hinge loss function或者人为定义的loss function),只需要知道该loss function对参数的一阶、二阶导数便可以进行boosting,其进一步增大了模型的泛化能力,其贪婪法寻找添加树的结构以及loss function中的损失函数与正则项等一系列策略也使得XGBoost预测更准确。
- GBDT每一次的计算是都为了减少上一次的残差,进而在残差减少(负梯度)的方向上建立一个新的模型。
- XGBoost则可以自定义一套损失函数,借助泰勒展开(只需知道损失函数的一阶、二阶导数即可求出损失函数)转换为一元二次函数,可以加快优化速度,得到极值点与对应极值即为所求。
- XGBoost将树模型的复杂度加入到正则项中,来避免过拟合,因此泛化性能会好于GBDT。XGBoost的正则项会惩罚具有多个叶子节点的树结构。