机器学习常用特征变量选择方法

在做数据挖掘分析、传统机器学习相关的工程实践中,我们大部分的精力将花费在数据预处理、特征工程上,这一阶段输出结果质量高低将直接影响到模型最后的效果,甚至在模型调优无果后,我们不得不重新回到特征工程阶段,尝试挖掘出更多的特征或者挑选出重要的特征从而提升模型的性能。虽说近年来深度学习的盛行已经取代了人工特征工程的方式,而且取得了更好的效果,但是其本身可解释性差的诟病。有时无法解决我们一些需要可解释的需求,比如分析某种疾病的诱发因素时,我们需要知道那种诱发因子最容易导致某种疾病。

所以在解决类似问题上,还是以传统机器学习为主,以最简单也是最常用的线性回归为例,我们往往会先从实际问题中不断的抽丝剥茧探索出一个又一个潜在特征,比如推荐系统领域常常需要为用户建立海量的用户画像(其实大部分领域都会用到),希望描述这个用户的特征尽可能多而全。比如在薪水的预测模型中,我们需要分析员工的工作年龄、学历、级别、技术栈、所处的team、性别、甚至婚姻状况、家庭教育背景、是否有子女、出行交通方式等(PS:所列举特征没有“歧视”的意思,比如性别、婚姻子女状况一定程度上能反应出员工的工作年龄,而从业务经验上看,工作年龄对薪资的影响重要性比较大),以及当地城市GDP、消费平均水平、平均薪资等因素。

在特征工程结束后,重新审视我们所构建的特征变量时,可能发现我们构建了成千上万种特征变量,然而并不是每种特征都会对我们的预测目标值(比如薪水)产生作用,所以需要对我们构建的特征过滤一下(这其实也是特征工程的一部分工作),然后再应用到预测模型中去。 在面对这个问题的时候,Tony老师就有不同的意见啦。

Tony老师: 酱紫的话,超烦的勒(戏精上身),我可以直接把它们(特征)作为神经网络(假设多层)的输入从而得到结果,让神经网络去确定使用哪些特征变量,不使用哪些特征变量。只要数据量足够多,我可以不断调节我们的网络,得到不错的效果的啦。

  • 村口王师傅:嗯有道理,那你能告诉我哪些特征变量对预测目标(薪水)的影响程度最大以及它们之间的相对重要性么,如果我只能选着一个方法提升自己,那你能告诉我那个方向最好,我好朝这些方向发展,升职加薪赢取白富美啊。

Tony老师: 。。。等我两天,我去看下是否能看懂神经网络训练后的权重矩阵参数,或者我们搞几条不同的测试数据去试一下哪些些变量对预测结果的影响比较大。

  • 村口王师傅:。。。

Tony老师: 那我给你搞一个随机森林嘛,这可是一个超赞的集成模型,超厉害的勒。我给你酱,它可以训练多颗树,每棵树可以从多个特征变量中随机的选取特征变量作为输入,而且训练完成之后,我可以知道对应特征变量的重要性,也就解决了你需要的可解释性的问题,然后再去掉那些不重要的特征,再重新训练就是了,干嘛还要花费大量时间去做特征工程的事情呢。

  • 村口王师傅:嗯,的确,随机森林的确可以满足需求,我们项目目前也是采用的这种方式(在符合当下的业务场景以及结合了数据量的情况下),但是如果在尝试各种调优之后依然无法达到我们想要的效果呢?又或者是在大数量的场景下呢?如果客户有在线训练的需求呢?你可要知道随机森林模型每次训练的时候需要全量数据,没法以流的方式类似梯度下降那种可以分批训练,而且其调优方式比较局限。尽管它在小数据量、特征维度较小的场景下非常适用,而且性能结果较好。

Tony老师: 。。。你囊个这么多需求呢。照你这么说,看来不得不去重新审视一下你千辛万苦构建的特征体系了。但是这个我不太懂,求普及。。。

  • 村口王师傅:(意味深长的嗯了一下)重现审视特征体系主要目的就是过滤掉无关的特征变量,而无关的变量又分为两类,一类是特征变量与预测目标无关,比如你薪资的多少跟你姓什么、名字里有几个字无关;另外一类是特征变量之间的相关性,又称共线性。。。。

Tony老师: 。。。稍等。。什么是共线性?

  • 村口王师傅:。。。简单来讲,就是他们之间有依赖关系,不完全独立。在线性代数中,如果一个矩阵中的行与行之间或者列与列之间如果存在线性关系的话,也就是如果存在A=n*B的情况,这个矩阵是不存在逆矩阵的,而有些机器学习优化函数是需要计算矩阵与逆矩阵的乘积的。比如年龄和工作年限就有强线性关系(假设每个人都从20岁开始工作,那么工作年限=年龄-20),在预测工资的时候,二者选择一个就是了。这种特征变量过滤的问题有个专业的名词叫变量选择,或者模型选择(这里的模型专指使用同一类算法,不同特征变量的模型)。

  • 村口王师傅:所谓模型(变量)选择,就是利用统计学方法和准则从多个候选模型中选择最佳的一个。换句话说,我们并不总是建立一个包含所有变量的模型,而是选取其中信息量最大的子集进行建模。模型选择自六七十年代以来一直是统计学的热点研究问题,各种方法和准则相继被提出。传统的模型选择方法可概括为子集选择法,包括全子集法、最优子集法、逐步(向前、向后)选择法等。评判模型好坏的准则包括AIC(Akaike Information Criterion)准则、BIC(Bayesian Information Criterion)准则、Mallows'CP、交叉验证(Cross Validation)等。

  • 村口王师傅:模型(变量)选择的目标可归结为两个。

  • 村口王师傅:一为模型预报的准确性,即选择合适的子模型使得其对新数据的预测更为准确。有些地方也将其称为模型的有效性。例如在判别问题中,研究者往往并不关心哪些变量被选入了模型或这些变量的系数估计是多少,而是关心所选择的模型能否将新样本点正确地归入相应的类别。换句话说我不用关心过程,我只关心结果,现在流行的解释性比较差的神经网络模型就属于这一类。

  • 村口王师傅:二为选择模型的相合性,即选择模型是否与真实模型相同。弱相合性表述为样本量增加时选择模型概率逼近于真实模型;强相合性表述为选择模型几乎必然是真实模型。通常我们并不假定真实的模型存在于候选模型中,上述相合性表述中的真实模型可由候选模型中最接近真实的模型替换。例如在遗传疾病研究中,人们最关心哪些位点(自变量)与疾病(因变量)有密切关联,这时选择模型的相合性显得尤为重要。

  • 村口王师傅:不同的模型选择方法侧重于不同的目标,而有效性和相合性一般无法同时满足。

  • 村口王师傅:并且在特征变量选择的时候,最好满足这三条性质,又称为Oracle性质,当然这个Oracle不是数据库的那个Oracle。

    • 解的稀疏性:解的稀疏性是变量选择的核心,变量系数真实值为0并且估计值都为0的概率为1,则称该解具有稀疏性。也就是使原本系数值就比较小的系数的估计值被设置为0,这样就将无效变量踢出了模型,目前解决稀疏问题比较有效的方法是惩罚方法。
    • 无偏性:参数估计应无偏或近似无偏,至少对于系数较大的变量的参数估计应如此。
    • 连续性:参数估计应对于数据是连续的,以避免模型预测的不稳定性。
      同时满足上述三条的模型选择方法称为满足Oracle性质的方法。

Tony老师: 。。。。。。停停停。。打住,你直接给我说说有哪些特征变量选择的方法就行,别整这么多概念性的知识。。。听着头晕。

  • 村口王师傅:特征变量选择的方法主要可以分为这几类

    • 惩罚因子模型选择方法:惩罚因子法是目前较为流行的可以较好处理高维模型选择的方法。该类方法可以同时实现变量选择和参数估计,即在估计参数时,通过将部分系数压缩到零来实现模型选择,比如Lasso回归即其衍生版本、Smoothly Clipped Absolute Deviation(SCAD)等
      Dantzig Selector(DS)方法:它主要针对变量数大于样本量的高维变量选择问题
    • 降维模型:主要有主成分分析(PCA)、偏最小二乘(PLS)、充分降维
    • 统计学方法:卡方检验、最大似然比检验、得分检验、wald检验、相关性检验
    • 其它方法:信息增益、互信息

Tony老师: ??????怎么有这么多方法,你直接给我说那个方法最好就行啦。。。

  • 村口王师傅:这世上并没有最好的方法,也没有最对的人,合适的时间遇到合适的人就是最好的选择,变量选择方法也是这样(无量天尊)。每个方法都有自己适合的场景,比如特征类型是连续类型时,就可以直接计算特征之间的相关系数就行了,你可选皮尔逊相关系数(pearson)、斯皮尔曼(spearman)相关系数、肯德尔(kendall)相关系数,或者你可以使用自适应Lasso算法模型、PCA;如果特征类型是离散类型的话,你可以尝试一下卡方检验。

Tony老师: 。。。。相关系数和PCA我知道,自适应Lasso和卡方检验是啥?

  • 村口王师傅:在说卡方检验之前,先要了解一下卡方分布,卡方分布(chi-square distribution, χ2-distribution)是概率统计里常用的一种概率分布,也是统计推断里应用最广泛的概率分布之一,在假设检验与置信区间的计算中经常能见到卡方分布的身影。

  • 村口王师傅:首先,卡方分布的定义为: 若k个独立的随机变量,均符合标准正态分布N(0,1),则这k个随机变量的平方和:,我们把它称为服从自由度为k的卡方分布,记为: ,也可以记为: 。

  • 村口王师傅:卡方分布是由正态分布构造而成的一个新的分布,当自由度n很大时,分布近似为正态分布。卡方分布的期望与方差分别为:,其中n为卡发分布的自由度。
    [图片上传失败...(image-760319-1561280671658)]

  • 村口王师傅:检验是以分布为基础的一种假设检验方法,主要用于分类变量。其基本思想是根据样本数据推断总体的分布与期望分布是否有显著性差异。在统计学中,卡方检验用来评价是两个事件是否独立,也就是P(AB) = P(A)*P(B)。 一般可以设原假设为:观察频数与期望频数没有差异,或者两个变量相互独立不相关。

  • 村口王师傅:实际应用中,我们先假设成立,计算出的值,表示观察值与理论值之间的偏离程度。根据分布, 统计量以及自由度,可以确定在成立的情况下获得当前统计量以及更极端情况的概率p。如果p很小,说明观察值与理论值的偏离程度大,应该拒绝原假设。否则不能拒绝原假设。比如在检验员工的星座和薪资高低有没有直接关系时,先做一个简单的假设:假设员工的星座和薪资高低有联系,然后去统计每个星座员工的薪资的期望值 (均值),然后再一一计算每个员工的与对应星座期望值得差异,再经过一系列类似加权的计算得到一个值,再查表得到对应的卡方值,然后可置信区间做对比,如果超出了置信区间,即说明原假设不成立,即不管你是什么星座,跟你的薪资没有半毛钱关系。

  • 村口王师傅:的计算公式为: ,其中,A为实际值,T为理论值。用于衡量实际值与理论值的差异程度,这也是卡方检验的核心思想。 包含了以下两个信息:

    • 实际值与理论值偏差的绝对大小。
    • 差异程度与理论值的相对大小。
  • 村口王师傅:卡方检验经常被用来做特征选择,尤其是在生物和金融领域。用来描述两个事件的独立性或者说描述实际观察值与期望值的偏离程度.值越大,则表明实际观察值与期望值偏离越大,也说明两个事件的相互独立性越弱。简单来说,我们可以通过卡方值来判断特征是否与类型有关.越大,说明关联越强,特征越需要保留。越小,说明越不相关,特征需要去除。

  • 村口王师傅:卡方检验这个我讲的清晰么?你有什么问题么?

Tony老师: 。。。。额。。。。我觉得我可能要上个厕所消化一下。。。

  • 村口王师傅:。。。不着急,我给你说完自适应Lasso再去也不迟。。。

Tony老师: ?????

  • 村口王师傅:在了解自适应Lasso之前,先来看看Lasso回归,它可以起到变量选择的作用,要了解Lasso(least absolute shrinkage and selection operator)为什么能解决变量选择问题,首先就要来好好理解一下什么是Lasso回归?Lasso回归是线性回归的变种之一,还有另外一个比较有名的变种叫岭回归。他们三者的区别就在于损失函数的不同。

    • 线性回归的一般形式:
    • 线性回归的损失函数:
    • Lasso回归的损失函数:
    • 岭回归的损失函数:
  • 村口王师傅:岭回归和Lasso回归最大的区别在于岭回归引入的是L2范数惩罚项,Lasso回归引入的是L1范数惩罚项,Lasso回归通过压缩系数绝对值的和以及调整参数的选择,能够使损失函数中许多均变为0,从而去掉某些对应的变量达到变量选择的效果,在实现变量选择的同时实现参数估计的连续稳定。

  • 村口王师傅:参数是用来调整模型稀疏性的,如果的值过大,可能导致大的回归系数的估计有实质性偏差。如果太小,可能导致模型的解不够稀疏。所以这个要靠一定的准则来选择,如BIC(贝叶斯信息准则)、CV(交叉验证函数)、GCV(广义交叉验证函数)

  • 村口王师傅:但Lasso也有一个缺陷,那就是它对所有变量都施加相同的惩罚,使得其估计量是有偏的,并且,这个方法也不适合处理高维数据。它对变量之间的强关联性也十分敏感,在自变量存在共线性的情形下,LASSO方法的模型选择效果不及岭回归方法

  • 村口王师傅:对于Lasso的有偏性,自适应Lasso法对系数采用不同权重进行二次惩罚:,其中起到进行二次惩罚的正数权重是通过数据自动适配选择出来的,它的确定是保证最优解的关键。它的作用是对越重要的变量使其的惩罚变越小,这样就可以使重要的变量更容易被挑选出来,而不重要的变量更容易被剔除。这样就很好的弥补了Lasso的缺陷,满足了Oracle性质。

  • 村口王师傅:除了自适应Lasso改进的方法以外,还有另外一种改进方法叫Relaxed LASSO。它的主要思想为:先计算LASSO在由全路径方法选取的调整参数下的参数估计结果,选出合适的变量;对于选出的变量,再次应用LASSO,但减小或者消除惩罚因子的作用,因此第二步不进行变量选择。由此,Relaxed LASSO会得到与普通LASSO方法同样的模型,但是回归参数估计不同,前者不会过度缩小非零参数,因为模型选择和参数估计被分成两个独立的过程。

  • 村口王师傅:另外还有Fused LASSO,该方法在LASSO惩罚项基础上添加了相邻系数之差的惩罚项:,第二项惩罚项是对相邻变量系数差距的惩罚,可鼓励参数局部平缓变化。Fused LASSO一般用于变量存在自然顺序的模型选择中,它给出的参数估计在局部近似于常数。给定调整参数的值,则可利用二次算法来求解上述最小化问题。

  • 村口王师傅:另外还有结合LASSO方法与Bridge方法的优点,提出了既有群组效应又能进行模型选择的Elastic Net(EN)方法来解决未知变量分组情况下的组群模型选择;Group LASSO,Composite Absolute Penalty(CAP),他们在选择变量时,在已知组群的情况下,可以同时保留或删除同一组的变量

  • 村口王师傅:所以在实际运用过程中,往往会先使用Adaptive-Lasso进行变量筛选,然后再把筛选的结果供其他回归分类模型使用。

  • 村口王师傅:这个就是Lasso体系相关变量选择算法,你还知道哪些其它的变量选择方法呢?你有没有在项目中实践过哪些方法,分析出来,大家学习一下?

  • 村口王师傅:。。。Tony老师,Tony老师,Tony老师,醒醒,你不是要去上厕所么。。。。

题外话: 无论是传统机器学习还是深度学习,L1范数惩罚项被广泛的应用到解决实际问题时需要定义的损失函数中,它不仅是特征选取的方式之一,它还是解决过拟合问题的一种手段,而且还能减少计算量。背后的依据就是它在最优化损失函数时能产生稀疏解。那么问题来了,你知道为什么加了L1范数的惩罚项的解能产生稀疏性使权重W中的很多项变成0么?如果不清楚的话,可以参考这里

你可能感兴趣的:(机器学习常用特征变量选择方法)