处理分类问题常用算法-----算法岗面试题
Posted zhangyang520
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了处理分类问题常用算法-----算法岗面试题相关的知识,希望对你有一定的参考价值。
● 分层抽样的适用范围
参考回答:
● LR的损失函数
参考回答:
M为样本个数,为模型对样本i的预测结果,为样本i的真实标签。
● LR和线性回归的区别
参考回答:
● 生成模型和判别模型基本形式,有哪些?
参考回答:
判别式:LR,SVM,神经网络,CRF,Boosting
详情:支持向量机
● 核函数的种类和应用场景。
参考回答:
特征维数高选择线性核
样本数量可观、特征少选择高斯核(非线性核)
样本数量非常多选择线性核(避免造成庞大的计算量)
详情:支持向量机
● 分类算法列一下有多少种?应用场景。
参考回答:
● SVM核函数的选择
参考回答:
● SVM的损失函数
参考回答:
● 核函数的作用
参考回答:
● SVM为什么使用对偶函数求解
参考回答:
● ID3,C4.5和CART三种决策树的区别
参考回答:
● SVM和全部数据有关还是和局部数据有关?
参考回答:
● 为什么高斯核能够拟合无穷维度
参考回答:
● 完整推导svm一遍,还有强化学习说一说,dqn的各种trick了解多少,以及都怎么实现
参考回答:
支持向量机是一种二分类模型,他的基本想法就是基于训练集和样本空间中找到一个最好的划分超平面,将两类样本分割开来,首先你就要知道什么样的划分发才能称为“最”好划分
看上图,二维平面上有两类样本,一类是用‘+’表示,另一类用‘-’表示,那么中间那几条划分线每条都能将两类样本分割开来,但我们我们一眼就注意到中间那条加粗的划分超平面,似乎他是最好的,因为两类的样本点都离他挺远的,专业点说就是该划分超平面对训练样本局部扰动的‘容忍’性最好。好,这还只是个二维平面,我们可以通过可视化大概寻找这样一个超平面,但如果三维,四维,五维呢,我们必须用我们擅长的数学去描述它,推导它。
在样本空间中,划分超平面可用表示,记为(w,b),样本点(xi,yi)到划分超平面的函数间隔为
,几何间隔为:
若,可知函数间隔和几何间隔相等,若超平面参数w,b成比例的改变(超平面没有变),则函数间隔也是成比例的改变,而几何间隔不变。
支持向量机的基本想法就是求解能够正确划分训练数据集并且几何间隔最大的分离超平面,表达为数学公式即为:
其实函数间隔的取值并不影响最优化问题的解,假设将w和b成倍的改变为aw,ab,那么函数间隔也会相应变成a,函数间隔的对上面最优化问题的不等式没有影响,也对目标函数没有影响,因此为简便,取,而且我们注意到最大化等价于最小化(为啥取平方呢,因为后面好求导),便可得到下面支持线性可分(线性不可分的情况后面会提到)的支持向量机的最优化问题
这是一个凸二次优化的问题,可以直接求解,但是为了简便呢,我们要应用拉格朗日对偶性,求解他的对偶问题
其实求解对偶问题相比于原问题有一下几点好处(1).对偶问题更容易求解,因为不用求w了 (2)我们可以自然引入核函数,这样可以推广到线性不可分分类问题上
建立拉格朗日函数,引进拉格朗日乘子,定义拉格朗日函数:
根据原始问题的对偶性,原始问题的对偶性是极大极小问题,即
将其代入对偶问题,可得
解出alpha之后,那么w,b也相应得到啦
接下来,我们看看很有意思的上式不等式约束的kkt条件(不懂请百度)带给我们的信息
咦,对于任意训练样本,总有或者,也就是说最终与模型有关的的样本点都位于最大间隔的边界上,我们称之为支持向量,其余的样本点与模型无关
在前面的讨论中,我们都是聊的线性可分的情况,那么大多数情况下都线性不可分怎么办,比如这样(如左)
山人自有妙计,我们可以将样本先映射到高维特征空间,然后就可以继续分割了(如右)
前面我们说到了对偶问题是
公式中涉及到计算,xi,xj是映射到特征空间之后的内积,由于特征维数可能会很高,甚至是无穷多维,直接计算很困难,所以我们引入了核函数:
这样我们就可以不用麻烦的计算内积了
dqn的各种trick:
第一个Trick。DQN引入卷积层。模型通过Atari游戏视频图像了解环境信息并学习策略。DQN需要理解接收图像,具有图像识别能力。卷积神经网络,利用可提取空间结构信息卷积层抽取特征。卷积层提取图像中重要目标特征传给后层做分类、回归。DQN用卷积层做强化学习训练,根据环境图像输出决策。
第二个Trick。Experience Replay。深度学习需要大量样本,传统Q-Learning online update方法(逐一对新样本学习)不适合DQN。增大样本,多个epoch训练,图像反复利用。Experience Replay,储存Agent Experience样本,每次训练随机抽取部分样本供网络学习。稳定完成学习任务,避免短视只学习最新接触样本,综合反复利用过往大量样本学习。创建储存Experience缓存buffer,储存一定量较新样本。容量满了,用新样本替换最旧样本,保证大部分样本相近概率被抽到。不替换旧样本,训练过程被抽到概率永远比新样本高很多。每次需要训练样本,直接从buffer随机抽取一定量给DQN训练,保持样本高利用率,让模型学习到较新样本。
第三个Trick。用第二个DQN网络辅助训练,target DQN,辅助计算目标Q值,提供学习目标公式里的maxaQ(st+1,a)。两个网络,一个制造学习目标,一个实际训练,让Q-Learning训练目标保持平稳。强化学习 Q-Learning学习目标每次变化,学习目标分部是模型本身输出,每次更新模型参数会导致学习目标变化,更新频繁幅度大,训练过程会非常不稳定、失控,DQN训练会陷入目标Q值与预测Q值反馈循环(陷入震荡发散,难收敛)。需要稳定target DQN辅助网络计算目标Q值。target DQN,低频率、缓慢学习,输出目标Q值波动较小,减小训练过程影响。
第四个Trick。Double DQN。传统DQN高估Action Q值,高估不均匀,导致次优Action被高估超过最优Action。targetDQN 负责生成目标Q值,先产生Q(st+1,a),再通过maxa选择最大Q值。Double DQN,在主DQN上通过最大Q值选择Action,再获取Action在target DQN Q值。主网选择Action,targetDQN生成Action Q值。被选择Q值,不一定总是最大,避免被高估次优Action总是超过最优Action,导致发现不了真正最好Action。学习目标公式:Target=rt+1+γ·Qtarget(st+1,argmaxa(Qmain(st+1,a)))。
第五个Trick。Dueling DQN。Dueling DQN,Q值函数Q(st,at)拆分,一部分静态环境状态具有价值V(st),Value;另一部分动态选择Action额外带来价值A(at),Advantage。公式,Q(st,at)=V(st)+A(at)。网络分别计算环境Value和选择Action Advantage。Advantage,Action与其他Action比较,零均值。网络最后,不再直接输出Action数量Q值,输出一个Value,及Action数量 Advantage值。V值分别加到每个Advantage值上,得最后结果。让DQN学习目标更明确,如果当前期望价值主要由环境状态决定,Value值大,所有Advantage波动不大;如果期望价值主要由Action决定,Value值小,Advantage波动大。分解让学习目标更稳定、精确,DQN对环境状态估计能力更强。
● SVM所有核函数的了解应用,SVM的损失函数
参考回答:
1 核函数本质
核函数的本质可以概括为如下三点:
1)实际应用中,常常遇到线性不可分的情况。针对这种情况,常用做法是把样例特征映射到高维空间中,转化为线性可分问题。
2)将样例特征映射到高维空间,可能会遇到维度过高的问题。
3)针对可能的维灾难,可以利用核函数。核函数也是将特征从低维到高维的转换,但避免了直接进行高维空间中的复杂计算,可以在低维上进行计算,却能在实质上将分类效果表现在高维上。
当然,SVM也能处理线性可分问题,这时使用的就是线性核了。
常用的核函数包括如下几个:线性核函数,多项式核函数,RBF核函数(高斯核),Sigmoid核函数
2 线性核
2.1 线性核
SVM肯定是可以处理线性问题的,这个就是斯坦福课程里讲SVM时候,最开始讲解的部分,以线性问题入手进行讲解。
线性核计算为k(x1,x2)=,其实就是在原始空间中的内积。
2.2 线性SVM和逻辑回归
当SVM使用线性核时,在处理分类问题时,和逻辑回归比较有哪些异同,如何选择?
1)线性核SVM和逻辑回归本质上没有区别
2)n=特征数,m=训练样本数目
如果n相对m比较大,使用逻辑回归或者线性SVM,例如n=10000,m=10-1000
如果n比较小,m数值适中,使用高斯核的SVM,例如n=1-1000,m=10-10000
如果n比较小,m很大,构建更多特征,然后使用逻辑回归或者线性SVM
3 非线性核
常用的非线性核包括多项式核,RBF核(高斯核),sigmoid核。
RBF核通常是首选,实践中往往能表现出良好的性能。计算方法如下:
其中,如果σ选得很大的话,高次特征上的权重实际上衰减得非常快,所以实际上(数值上近似一下)相当于一个低维的子空间;反过来,如果σ选得很小,则可以将任意的数据映射为线性可分——当然,这并不一定是好事,因为随之而来的可能是非常严重的过拟合问题。不过,总的来说,通过调控参数,高斯核实际上具有相当高的灵活性,也是使用最广泛的核函数之一。
多项式核计算方法如下:
sigmoid核函数计算方法如下:
采用Sigmoid函数作为核函数时,支持向量机实现的就是一种多层感知器神经网络,应用SVM方法,隐含层节点数目(它确定神经网络的结构)、隐含层节点对输入节点的权值都是在设计(训练)的过程中自动确定的。而且支持向量机的理论基础决定了它最终求得的是全局最优值而不是局部最小值,也保证了它对于未知样本的良好泛化能力而不会出现过学习现象。
4 如何选择
1)可以利用专家先验知识余弦选定核函数,例如已经知道问题是线性可分的,就可以使用线性核,不必选用非线性核
2)利用交叉验证,试用不同的核函数,误差最小的即为效果最好的核函数
3)混合核函数方法,将不同的核函数结合起来
我觉得问题是线性可分和线性不可分其中之一,那在选择核函数的时候,如果不清楚问题属于哪一类,就两类核都尝试一下,所以可以主要尝试线性核以及RBF核。
1) Linear核:主要用于线性可分的情形。参数少,速度快,对于一般数据,分类效果已经很理想了。
2)RBF核:主要用于线性不可分的情形。参数多,分类结果非常依赖于参数。有很多人是通过训练数据的交叉验证来寻找合适的参数,不过这个过程比较耗时。
至于到底该采用哪种核,要根据具体问题,有的数据是线性可分的,有的不可分,需要多尝试不同核不同参数。如果特征的提取的好,包含的信息量足够大,很多问题都是线性可分的。当然,如果有足够的时间去寻找RBF核参数,应该能达到更好的效果。
没有一种黄金规则可以确定哪种核函数将推导出最准确的SVM,在实践中,核函数的选择一般并不导致准确率的很大差别。SVM总是发现全局解,而不是局部解。
5 其他
SVM的复杂度主要由支持向量数刻画,而不是数据的维度,因此相比其他方法,SVM不太容易过拟合。
SVM的损失函数:
1、Hinge损失函数
首先我们来看什么是合页损失函数(hinge loss function):
hinge loss function
下标”+”表示以下取正值的函数,我们用z表示中括号中的部分:
也就是说,数据点如果被正确分类,损失为0,如果没有被正确分类,损失为z。合页损失函数如下图所示:
2、SVM损失函数
SVM的损失函数就是合页损失函数加上正则化项:
2、SVM损失函数
SVM的损失函数就是合页损失函数加上正则化项:
损失函数
● LR和SVM 区别
参考回答:
● 朴素贝叶斯基本原理和预测过程
参考回答:
决策树和朴素贝叶斯是最常用的两种分类算法,本篇文章介绍朴素贝叶斯算法。贝叶斯定理是以英国数学家贝叶斯命名,用来解决两个条件概率之间的关系问题。简单的说就是在已知P(A|B)时如何获得P(B|A)的概率。朴素贝叶斯(Naive Bayes)假设特征P(A)在特定结果P(B)下是独立的。
1.概率基础:
在开始介绍贝叶斯之前,先简单介绍下概率的基础知识。概率是某一结果出现的可能性。例如,抛一枚匀质硬币,正面向上的可能性多大?概率值是一个0-1之间的数字,用来衡量一个事件发生可能性的大小。概率值越接近1,事件发生的可能性越大,概率值越接近0,事件越不可能发生。我们日常生活中听到最多的是天气预报中的降水概率。概率的表示方法叫维恩图。下面我们通过维恩图来说明贝叶斯公式中常见的几个概率。
在维恩图中:
S:S是样本空间,是所有可能事件的总和。
P(A):是样本空间S中A事件发生的概率,维恩图中绿色的部分。
P(B):是样本空间S中B事件发生的概率,维恩图中蓝色的部分。
P(A∩B):是样本空间S中A事件和B事件同时发生的概率,也就是A和B相交的区域。
P(A|B):是条件概率,是B事件已经发生时A事件发生的概率。
对于条件概率,还有一种更清晰的表示方式叫概率树。下面的概率树表示了条件概率P(A|B)。与维恩图中的P(A∩B)相比,可以发现两者明显的区别。P(A∩B)是事件A和事件B同时发现的情况,因此是两者相交区域的概率。而事件概率P(A|B)是事件B发生时事件A发生的概率。这里有一个先决条件就是P(B)要首先发生。
因为条件概率P(A|B)是在事件B已经发生的情况下,事件A发生的概率,因此P(A|B)可以表示为事件A与B的交集与事件B的比率。
该公式还可以转换为以下形式,以便我们下面进行贝叶斯公式计算时使用。
2.贝叶斯公式:
贝叶斯算法通过已知的P(A|B),P(A),和P(B)三个概率计算P(B|A)发生的概率。假设我们现在已知P(A|B),P(A)和P(B)三个概率,如何计算P(B|A)呢?通过前面的概率树及P(A|B)的概率可知,P(B|A)的概率是在事件A发生的前提下事件B发生的概率,因此P(B|A)可以表示为事件B与事件A的交集与事件A的比率。
该公式同样可以转化为以下形式:
通过计算可以证明P(A|B)*P(B)和P(B|A)*P(A)最后求得的结果是概率表中的同一个区域的值,因此:
我们通过P(A∩B)= P(B∩A)证明了在已知P(A|B),P(A),和P(B)三个概率的情况下可以计算出P(B|A)发生的概率。整个推导和计算过程可以说得通。但从统计学的角度来看,P(A|B)和P(B|A)两个条件概率之间存在怎样的关系呢?我们从贝叶斯推断里可以找到答案。
3.贝叶斯推断:
贝叶斯推断可以说明贝叶斯定理中两个条件概率之间的关系。换句话说就是我们为什么可以通过P(A|B),P(A),和P(B)三个概率计算出P(B|A)发生的概率。
在贝叶斯推断中,每一种概率都有一个特定的名字:
P(B)是”先验概率”(Prior probability)。
P(A)是”先验概率”(Prior probability),也作标准化常量(normalized constant)。
P(A|B)是已知B发生后A的条件概率,叫做似然函数(likelihood)。
P(B|A)是已知A发生后B的条件概率,是我们要求的值,叫做后验概率。
P(A|B)/P(A)是调整因子,也被称作标准似然度(standardised likelihood)。
贝叶斯推断中有几个关键的概念需要说明下:
第一个是先验概率,先验概率是指我们主观通过事件发生次数对概率的判断。
第二个是似然函数,似然函数是对某件事发生可能性的判断,与条件概率正好相反。通过事件已经发生的概率推算事件可能性的概率。
维基百科中对似然函数与概率的解释:
概率:是给定某一参数值,求某一结果的可能性。
例如,抛一枚匀质硬币,抛10次,6次正面向上的可能性多大?
似然函数:给定某一结果,求某一参数值的可能性。
例如,抛一枚硬币,抛10次,结果是6次正面向上,其是匀质的可能性多大?
第三个是调整因子:调整因子是似然函数与先验概率的比值,这个比值相当于一个权重,用来调整后验概率的值,使后验概率更接近真实概率。调整因子有三种情况,大于1,等于1和小于1。
调整因子P(A|B)/P(A)>1:说明事件可能发生的概率要大于事件已经发生次数的概率。
调整因子P(A|B)/P(A)=1:说明事件可能发生的概率与事件已经发生次数的概率相等。
调整因子P(A|B)/P(A)<1:说明事件可能发生的概率与事件小于已经发生次数的概率。
因此,贝叶斯推断可以理解为通过先验概率和调整因子来获得后验概率。其中调整因子是根据事件已经发生的概率推断事件可能发生的概率(通过硬币正面出现的次数来推断硬币均匀的可能性),并与已经发生的先验概率(硬币正面出现的概率)的比值。通过这个比值调整先验概率来获得后验概率。
后验概率=先验概率x调整因子
● LR推导
参考回答:
sigmoid function 的导数如下:
逻辑回归用来分类0/1 问题,也就是预测结果属于0 或者1 的二值分类问题。这里假设了二值满足伯努利分布,也就是
其也可以写成如下的形式:
对于训练数据集,特征数据x=x1, x2, … , xm和对应的分类标签y=y1, y2, … , ym,假设m个样本是相互独立的,那么,极大似然函数为:
log似然为:
如何使其最大呢?与线性回归类似,我们使用梯度上升的方法(求最小使用梯度下降),那么。
如果只用一个训练样例(x,y),采用随机梯度上升规则,那么随机梯度上升更新规则为:
● 请你说一说交叉熵,也可以再说一下其他的你了解的熵
参考回答:
大写字母X表示随机变量,小写字母x表示随机变量X的某个具体的取值;
P(X)表示随机变量X的概率分布,P(X,Y)表示随机变量X、Y的联合概率分布,P(Y|X)表示已知随机变量X的情况下随机变量Y的条件概率分布;
p(X=x)表示随机变量X取某个具体值的概率,简记为p(x);
p(X=x,Y=y) 表示联合概率,简记为p(x,y),p(Y=y|X=x)表示条件概率,简记为p(y|x),且有:p(x,y)=p(x)*p(y|x)。
熵:如果一个随机变量X的可能取值为X=x1,x2,…,xk,其概率分布为P(X=xi)=pi(i= 1,2,...,n),则随机变量X的熵定义为:
把最前面的负号放到最后,便成了:
上面两个熵的公式,无论用哪个都行,而且两者等价,一个意思(这两个公式在下文中都会用到)。
联合熵:两个随机变量X,Y的联合分布,可以形成联合熵Joint Entropy,用H(X,Y)表示。
条件熵:在随机变量X发生的前提下,随机变量Y发生所新带来的熵定义为Y的条件熵,用H(Y|X)表示,用来衡量在已知随机变量X的条件下随机变量Y的不确定性。
简单解释下上面的推导过程。整个式子共6行,其中
第二行推到第三行的依据是边缘分布p(x)等于联合分布p(x,y)的和;
第三行推到第四行的依据是把公因子logp(x)乘进去,然后把x,y写在一起;
第四行推到第五行的依据是:因为两个sigma都有p(x,y),故提取公因子p(x,y)放到外边,然后把里边的-logp(x,y)-logp(x))写成-log(p(x,y)/p(x)) ;
第五行推到第六行的依据是:p(x,y)=p(x)*p(y|x),故p(x,y)/p(x)=p(y|x)。
相对熵:又称互熵,交叉熵,鉴别信息,Kullback熵,Kullback-Leible散度等。设p(x)、q(x)是X中取值的两个概率分布,则p对q的相对熵是:
在一定程度上,相对熵可以度量两个随机变量的“距离”,且有D(p||q) ≠D(q||p)。另外,值得一提的是,D(p||q)是必然大于等于0的。
互信息:两个随机变量X,Y的互信息定义为X,Y的联合分布和各自独立分布乘积的相对熵,用I(X,Y)表示:
通过上面的计算过程,我们发现竟然有H(Y)-I(X,Y)=H(Y|X)。故通过条件熵的定义,有:H(Y|X)=H(X,Y)-H(X),而根据互信息定义展开得到H(Y|X)=H(Y)-I(X,Y),把前者跟后者结合起来,便有I(X,Y)= H(X)+H(Y)-H(X,Y),此结论被多数文献作为互信息的定义。
● LR公式
参考回答:
则
sigmoid function 的导数如下:
逻辑回归用来分类0/1 问题,也就是预测结果属于0 或者1 的二值分类问题。这里假设了二值满足伯努利分布,也就是
其也可以写成如下的形式:
log似然为:
如果只用一个训练样例(x,y),采用随机梯度上升规则,那么随机梯度上升更新规则为:
● 交叉熵公式
参考回答:
在一定程度上,相对熵可以度量两个随机变量的“距离”,且有D(p||q) ≠D(q||p)。另外,值得一提的是,D(p||q)是必然大于等于0的。
且有I(X,Y)=D(P(X,Y)||P(X)P(Y))。下面,咱们来计算下H(Y)-I(X,Y)的结果,如下:
以上是关于处理分类问题常用算法-----算法岗面试题的主要内容,如果未能解决你的问题,请参考以下文章