【校招面经】机器学习与数据挖掘常见面试题整理 part2
2018年07月25日 12:36:40 稻蛙 阅读数:150
三十、随机森林如何评估特征重要性
衡量变量重要性的方法有两种,Decrease GINI 和 Decrease Accuracy: 1) Decrease GINI: 对于回归问题,直接使用argmax(VarVarLeftVarRight)作为评判标准,即当前节点训练集的方差Var减去左节点的方差VarLeft和右节点的方差VarRight。 2) Decrease Accuracy:对于一棵树Tb(x),我们用OOB样本可以得到测试误差1;然后随机改变OOB样本的第j列:保持其他列不变,对第j列进行随机的上下置换,得到误差2。至此,我们可以用误差1-误差2来刻画变量j的重要性。基本思想就是,如果一个变量j足够重要,那么改变它会极大的增加测试误差;反之,如果改变它测试误差没有增大,则说明该变量不是那么的重要
三十一、常见的损失函数
对于给定的输入X,由f(X)给出相应的输出Y,这个输出的预测值f(X)与真实值Y可能一致也可能不一致(要知道,有时损失或误差是不可避免的),用一个损失函数来度量预测错误的程度。损失函数记为L(Y, f(X))。 常用的损失函数有以下几种(基本引用自《统计学习方法》):
如此,SVM有第二种理解,即最优化+损失最小,或如@夏粉_百度所说“可从损失函数和优化算法角度看SVM,boosting,LR等算法,可能会有不同收获”。 关于SVM的更多理解请参考:支持向量机通俗导论(理解SVM的三层境界),链接:http://blog.csdn.net/v_july_v/article/details/7624837
三十二、什么是OOB?随机森林中OOB是如何计算的,它有什么优缺点?
bagging方法中Bootstrap每次约有1/3的样本不会出现在Bootstrap所采集的样本集合中,当然也就没有参加决策树的建立,把这1/3的数据称为袋外数据oob(out of bag),它可以用于取代测试集误差估计方法。 袋外数据(oob)误差的计算方法如下: 对于已经生成的随机森林,用袋外数据测试其性能,假设袋外数据总数为O,用这O个袋外数据作为输入,带进之前已经生成的随机森林分类器,分类器会给出O个数据相应的分类,因为这O条数据的类型是已知的,则用正确的分类与随机森林分类器的结果进行比较,统计随机森林分类器分类错误的数目,设为X,则袋外数据误差大小=X/O;这已经经过证明是无偏估计的,所以在随机森林算法中不需要再进行交叉验证或者单独的测试集来获取测试集误差的无偏估计。
三十三、什么样的模型对缺失值更敏感
三十四、生成模型与判别模型的区别是什么
生成模型可以产生数据,判别模型只能根据数据做判断。
常见的判别式模型有: Logistic regression(logistical 回归) Linear discriminant analysis(线性判别分析) Supportvector machines(支持向量机) Boosting(集成学习) Conditional random fields(条件随机场) Linear regression(线性回归) Neural networks(神经网络) 常见的生成式模型有: Gaussian mixture model and othertypes of mixture model(高斯混合及其他类型混合模型) Hidden Markov model(隐马尔可夫) NaiveBayes(朴素贝叶斯) AODE(平均单依赖估计) Latent Dirichlet allocation(LDA主题模型) Restricted Boltzmann Machine(限制波兹曼机) 生成式模型是根据概率乘出结果,而判别式模型是给出输入,计算出结果。
三十五、SMOTE过采样算法
JAIR‘2002的文章《SMOTE: Synthetic Minority Over-sampling Technique》提出了一种过采样算法SMOTE。概括来说,本算法基于“插值”来为少数类合成新的样本。下面介绍如何合成新的样本。
设训练集的一个少数类的样本数为 T ,那么SMOTE算法将为这个少数类合成 NT 个新样本。这里要求 N 必须是正整数,如果给定的 N<1 那么算法将“认为”少数类的样本数T=NT ,并将强制 N=1 。
考虑该少数类的一个样本 i ,其特征向量为 xi,i∈{1,...,T} :
1. 首先从该少数类的全部 T 个样本中找到样本 xi 的 k 个近邻(例如用欧氏距离),记为 xi(near),near∈{1,...,k} ;
2. 然后从这 k 个近邻中随机选择一个样本 xi(nn) ,再生成一个 0 到 1 之间的随机数ζ1 ,从而合成一个新样本 xi1 :
xi1=xi+ζ1⋅(xi(nn)−xi)
3. 将步骤2重复进行 N 次,从而可以合成 N 个新样本:xinew,new∈1,...,N。
那么,对全部的 T 个少数类样本进行上述操作,便可为该少数类合成 NT 个新样本。
如果样本的特征维数是 2 维,那么每个样本都可以用二维平面上的一个点来表示。SMOTE算法所合成出的一个新样本 xi1 相当于是表示样本 xi 的点和表示样本 xi(nn) 的点之间所连线段上的一个点。所以说该算法是基于“插值”来合成新样本。
三十六、流形学习是什么
流形学习(manifold learning)是机器学习、模式识别中的一种方法,在维数约简方面具有广泛的应用。它的主要思想是将高维的数据映射到低维,使该低维的数据能够反映原高维数据的某些本质结构特征。流形学习的前提是有一种假设,即某些高维数据,实际是一种低维的流形结构嵌入在高维空间中。流形学习的目的是将其映射回低维空间中,揭示其本质。
以下图为例[1],左边是一个三维数据的分布,右边是降低到二维后的结果。我们可以发现二维的数据更能直观地表示其流形结构。
通过流形学习来实现降维的方法有很多,其基本思想也类似:假设数据在高维具有某种结构特征,希望降到低维后,仍能保持该结构。
比较常见的有
1. 局部改线嵌入(Local Linear Embedding, LLE)[1]
假设数据中每个点可以由其近邻的几个点重构出来。降到低维,使样本仍能保持原来的重构关系,且重构系数也一样。
2. 拉普拉斯特征映射(Laplacian Eigenmaps, LE)[2]
将数据映射到低维,且保持点之间的(相似度)距离关系。即在原空间中相距较远的点,投影到低维空间中,希望它们之间仍相距较远。反之亦然。
3. 局部保持投影(LPP)[3]
4. 等距映射(Isomap)[4]
等等。。。
浙江大学何晓飞老师有个关于流形学习的报告,有兴趣可以看下。
http://www.cad.zju.edu.cn/reports/%C1%F7%D0%CE%D1%A7%CF%B0.pdf
[1] Roweis, Sam T and Saul, Lawrence K. Nonlinear dimensionality reduction by locally linear embedding. Science, 290(5500). 2000: 2323-2326.
[2] Belkin, Mikhail and Niyogi, Partha. Laplacian eigenmaps for dimensionality reduction and data representation. Neural computation. 15(6). 2003:1373-1396.
[3] He, Xiaofei and Niyogi, Partha. Locality preserving projections. NIPS. 2003:234-241.
[4] Tenenbaum, Joshua B and De Silva, Vin and Langford, John C. A global geometric framework for nonlinear dimensionality reduction. Science, 290(5500). 2000: 2319-2323.
三十七、深度学习SparseAutoEncoder
AutoEncoder:AutoEncoder的结构与神经网络的隐含层相同,由输入L1,输出 L2组成,中间则是权重连接。Autoencoder通过L2得到输入的重构L3,最小化L3与L1的差别 进行训练得到权重。在这样的权重参数下,得到的L2可以尽可能的保存L1的信息。 Autoencoder的输出L2的维度由输出的神经元个数决定。当输出维度大于L1时,则需要在训练目标函数中加入sparse 惩罚项,避免L2直接复制L1(权重全为1)。所以称为sparseAutoencoder( Andrew Ng提出的)。
三十八、线性分类器最佳准则
线性分类器有三大类:感知器准则函数、SVM、Fisher准则。
1. 感知器准则函数:代价函数J=-(W*X+w0),分类的准则是最小化代价函数。感知器是神经网络(NN)的基础,网上有很多介绍。
2. SVM:支持向量机也是很经典的算法,优化目标是最大化间隔(margin),又称最大间隔分类器,是一种典型的线性分类器。(使用核函数可解决非线性问题)
3. Fisher准则:更广泛的称呼是线性判别分析(LDA),将所有样本投影到一条远点出发的直线,使得同类样本距离尽可能小,不同类样本距离尽可能大,具体为最大化“广义瑞利商”。
三十九、数据清理中,处理缺失值的方法是
由于调查、编码和录入误差,数据中可能存在一些无效值和缺失值,需要给予适当的处理。常用的处理方法有:估算,整例删除,变量删除和成对删除。
1. 估算(estimation)。最简单的办法就是用某个变量的样本均值、中位数或众数代替无效值和缺失值。这种办法简单,但没有充分考虑数据中已有的信息,误差可能较大。另一种办法就是根据调查对象对其他问题的答案,通过变量之间的相关分析或逻辑推论进行估计。例如,某一产品的拥有情况可能与家庭收入有关,可以根据调查对象的家庭收入推算拥有这一产品的可能性。
2. 整例删除(casewise deletion)是剔除含有缺失值的样本。由于很多问卷都可能存在缺失值,这种做法的结果可能导致有效样本量大大减少,无法充分利用已经收集到的数据。因此,只适合关键变量缺失,或者含有无效值或缺失值的样本比重很小的情况。
3. 变量删除(variable deletion)。如果某一变量的无效值和缺失值很多,而且该变量对于所研究的问题不是特别重要,则可以考虑将该变量删除。这种做法减少了供分析用的变量数目,但没有改变样本量。
4. 成对删除(pairwise deletion)是用一个特殊码(通常是9、99、999等)代表无效值和缺失值,同时保留数据集中的全部变量和样本。但是,在具体计算时只采用有完整答案的样本,因而不同的分析因涉及的变量不同,其有效样本量也会有所不同。这是一种保守的处理方法,最大限度地保留了数据集中的可用信息。
采用不同的处理方法可能对分析结果产生影响,尤其是当缺失值的出现并非随机且变量之间明显相关时。因此,在调查中应当尽量避免出现无效值和缺失值,保证数据的完整性。
四十、神经网络之损失函数
来源:https://blog.csdn.net/xmdxcsj/article/details/50210451
1. quadratic+sigmoid (平方损失函数)
2. cross entropy + sigmoid (交叉熵损失函数)
3. softmax + log-likelihood
一、quadratic+sigmoid (平方损失函数)
(1)定义
平方和损失函数定义 C=0.5*(y−a)^2,其中y是期望输出,a是实际输出。
(2)收敛特性
不幸的是,使用平方和作为损失函数的神经单元不具备这种性质,即当误差越大的时候,收敛(学习)速度应该越快。你可以按照下面的列子验证一下。
z=wx+b a=δ(z)
- 1
- 2
根据链式法则,求C对于w的偏导数
∂C/∂w=(δ(z)−y)δ′(z)x ∂C/∂b=(δ(z)−y)δ′(z)
- 1
- 2
如果激活函数使用的是sigmoid函数的话,根据激活函数的形状和特性可知,当δ(z)趋近于0或者趋近于1的时候,δ′(z)会趋近于0,当δ(z)趋近于0.5的时候,δ′(z)会最大。
比如说,取y=0,当δ(z)=1的时候,期望值和实际值的误差δ(z)−y达到最大,此时,δ′(z)会趋近于0,所以就会发生收敛速度慢的问题。
二、cross entropy + sigmoid (交叉熵损失函数)
(1)定义
为了解决当误差大时,收敛速度大的问题,引入交叉熵损失函数。
C=−(ylna+(1−y)ln(1−a))
- 1
(2)特点
要想成为loss function,需要满足两点要求:
1. 非负性
2. 预测值和期望值接近时,函数值趋于0
显然,quadratic cost function满足以上两点。cross entropy同样也满足以上两点,所以其可以成为一个合格的cost function。
(3)收敛特性
z=wx+b a=δ(z)
- 1
- 2
依旧根据链式法则,可以求得对应的偏导数
∂C/∂w={(δ(z)−y)/δ(z)((1−δ(z))}δ′(z)x
- 1
对于sigmoid函数,有δ′(z)=δ(z)(1−δ(z))对上式子进行替换和约分有∂C/∂w=(δ(z)−y)x
∂C/∂b同理,∂C/∂b=(δ(z)−y)x。
可以看到梯度(∂C/∂w)正比与误差(δ(z)−y),满足我们最初的目标!
(4)含义
交叉熵是用来衡量两个概率分布之间的差异。交叉熵越大即信息量越大,两个分布之间的差异越大,越对实验结果感到意外,反之,交叉熵越小,两个分布越相似,越符合预期。如抛掷两枚硬币,如果确定出现某一面其信息量不大,而正反面都是以1/2的概率出现,这个时候信息熵最大。下面以离散分布为例讨论。
q(x)表示估计x的概率分布,p(x)表示真实x的概率分布,交叉熵定义如下:
H(p(x),q(x))=H(p(x))+D(p(x)||q(x))
- 1
其中,H(p(x))表示p(x)的熵,定义如下:
H(p(x))=−∑p(x)logp(x)
- 1
D(p(x)||q(x))表示p(x)和q(x)的KL距离(Kullback-Leibler divergence),也叫作相对熵,定义如下:
D(p(x)||q(x))=∑p(x)log(p(x)/q(x))
- 1
由H(p(x))和D(p(x)||q(x))可得H(p,q)=−∑p(x)logq(x)
对于神经网络的二值输出(0或者1),假设神经网络输出a表示是输出1的概率(此时对应的y=1),那么1−a表示输出0的概率(此时对应的1−y=0),所以交叉熵可以定义成如下形式:
C=−(ylna+(1−y)ln(1−a))
三、softmax + log-likelihood
(1)softmax多分类器定义
zj=∑wx+b aj=ej/∑ek (原来此处是sigmoid函数)
- 1
- 2
(2)loss的计算公式
C=−lnay
- 1
ay表示类别y对应的预测概率,如果预测好的话,ay会趋近于1,C会趋近于0,反之,ay趋近于0,C趋近于极大。
(3)梯度计算
∂C/∂w=(a−1)∗x ∂C/∂b=a−1
- 1
- 2
当aj预测不好时,误差会很大,收敛会变快。
四、结论
(一)sigmoid
在激活函数使用sigmoid的前提之下,相比于quadratic cost function, cross entropy cost function具有收敛速度快和更容易获得全局最优(至于为什么更容易获得全局最优,个人感觉有点类似于动量的物理意义,增加收敛的步长,加快收敛的速度,更容易跳过局部最优)的特点。
因为我们一般使用随机值来初始化权重,这就可能导致一部分期望值和预测值相差甚远。所以选择sigmoid作为激活函数的时候,推荐使用cross entropy。如果激活函数不是sigmoid,quadratic cost function就不会存在收敛速度慢的问题。
(二)softmax
对于分类问题,如果希望输出是类别的概率,那么激活函数选择使用softmax,同时使用log-likelihood作为损失函数。
原文地址:https://www.cnblogs.com/yumoye/p/10354137.html