00:00
大家好,欢迎大家来到腾讯恩爱课程,在今天的课程当中,我们将给大家讲述到对输入的数据特征进行选择,如何去做这件事情。那我们希望通过本节课程的讲授呢,能够帮助大家了解,第一,我们为什么要做这件事情,为什么需要对输入的数据,输入的特征进行选择,第二,我们如何去完成这些啊,特征选择我们是有一些理论基础依据的,那大家需要去了解一下这些基本的知识啊,做一个基本的知识储备,一个铺垫。第三,我们来给大家讲解一下使用的这种特征选择的技术方法。那我们课程的内容章节也是依照上面的方式来给大家去做组织的,我们先来到第一个部分,我们要讲解一下特征选择啊,更重要的是我们会和这个地方的数据降为呢去做一个对比。啊,那我们来看一看特征选择啊,它在英文当中呢,叫做feature selection,或者是selection,或者attribute selection,它指的是选择已有的属性,它的一个子集来进行最后的建模这样的一种方式。那进行特征选择的目的呢,主要有啊,大家看到下面的几点,首先呢,我们会希望说最后的这个模型,它不仅有很好的表现能力,我们希望它还是一个比较简单啊,比较可靠的这样的模型,所以我们会希望去简化模型,那你输入的维度非常非常的高啊,它能达到效果,如果能用呃,输入的低维的特征就能达到同样的效果,我为什么要做那么复杂的模型,做那么多的数据存储呢?
01:46
那第二件事情呢,叫做缩短训练时间啊,这个也非常好理解,当我输入的数据维度非常高的时候呢,通常我的模型要做更多的计算,我会消耗更多的时间,要做更多的迭代才能收敛,那当我的输入数据比较简单的时候,模型也比较容易从这些简单同时又非常有效的数据当中去总结出来非常非常有用的模式和规律。第三点呢,叫做避免啊维数灾难啊,这是维度的为好避免维数灾难,那其实这个事情说的是说我们在有些场景下呢,呃,如果我们输入的这个特征维度非常高的时候,有可能你现在这个模型学习到的会是没有泛化能力的,这样的过拟合的表示。这件事情给大家举个例子是当你有两个方程组成的方程组,你有两个未知数的时候。
02:41
很有可能你解出来的最终是一组解,但是如果你这个地方有两个方程组成的方程组,但是你有八个未知数,很有可能你有无数组解。所以你确定不了那组唯一的解,所以维度高了会带来所谓的维数灾难,它可能会让你的模型很难去学习到有泛化能力的表达,最后呢,呃,是借着刚才给大家说的这个,呃,我们的维数灾难呢,也提一下就是。
03:11
我们会希望更少的特征能有更集中的表示,从而能够增加模型的这种泛化表达能力,啊,就是所谓的泛化能力。OK。那第二件事情呢,就是我们需要给大家强调,我们刚才提到的这种特征选择,就是这个对原有的属性去做筛选,只保留一部分子集的,这样的过程和大家了解的另外一个概念叫做这个地方的数据降维是不同的。那数据降维呢?粗糙一点说,数据降维做的事情是把原始的高维度的信息压缩到低维度的信息当中,所以它不是以剔除的方式去把其中的一些属性踢掉,而是说把原本的,比如说100维压缩到十维当中,尽量多的去把原始100维的信息压缩到这十维当中,所以这是数据降维做的事情,而数据的筛选是直接从原始的100位当中,可能啊,如果要保留十位的话,是剔除掉它不重要的,比较不重要的90位。
04:18
这是刚才的特征选择做的事情,那数据降维呢,主要有两种不同的这个算法啊,比如说最典型的算法叫PC啊,那另外呢,我们也会介绍到LDA啊,下面呢,会有一段介绍,我给大家以非常精炼的方式来提炼一下他说的事情,那PCA做的事情呢,实际上就是一个信息的投影。我会把原始空间张东的数据投影到一个新的坐标系当中,并且选择其中比较显著的坐标系上面的这样的一些取值,作为我这个时候的压缩后的信息。而LDA做的事情是去以最大的鉴别的,就是他做投影希望做到的事情是选出来使能使得我的这个数据投影以后呢,有最好的区分能力,最好鉴别能力的这样的一组机,就是左边的这个就是PC和lda做的事情都是把原始的数据去做一个投影变换,但是PC做的事情是找到方差比较大的这样的一些投影的一些维度一这样的一组机啊,然后那个LDA做的事情呢,是去找到最具备鉴别能力的这样的一组投影啊,总之他们做的事情都是把原始的数据投影到新的空间当中,然后在这个投影到新的空间当中,再去截取其中的一部分的这个坐标轴上的取值,作为我降维后的取值。
05:47
所以LDA和PCA的区别呢,大家可以从在右边的这幅图上可以看到,在这幅图上啊,我如果要从二维空间降维到一维空间,也就是说从平面降维到直线或者说线段上,那这个时候它很有可能如果是PCA的话,它很有可能选择这个地方的啊,二轴就是大家看到的这条方向上的轴,为什么呢?因为投影在这条轴上的数据具备最高的区分能力,你看它的方差是最大的啊,在这个幅度上抖动是最大的,那如果现在是LDA的话,它很有可能会选这个地方的一轴,为什么呢?因为在这个轴上大家会发现这两类实际上它的区分是最大的,是最容易用于分类的,所以这是PC和LDA的一个区别,大家也通过这幅图可以知道说,其实数据降维呢,是试图把我原始的数据投影到另外的一个坐标系上啊,然后去取啊更少的这个坐标轴,完成这样的。
06:47
一个维度约减这样的一个事情,那我们要给大家提到第二章呢,是呃,我们需要给大家说明一下,那呃,刚才我已经对比了特征选择和降维,那我们需要去知道说为什么要去做特征选择。
07:02
啊,就是这件事情为什么需要去做呢?那第一件事情大家要知道说特征选择在什么时候去做。首先整个机器学习建模的过程是这样的,我们特征选择是其中的一环,我们在最开始呢,会采集到一些数据,我们会在采集完数据以后去做一些数据的分析,数据的清洗,数据的采样,特征的抽取,所有前面的过程是从原始的这个roll data,原始数据当中去拿到有用的表达,或者说拿到所谓的这个feature啊,有用的特征表达这样的一个过程,然后这个有用的特征表达,我可能会去做一些这种呃,缺失值的计算,或者说一些数据的变换之后,在这个基础之上,我们拿到了这个特征,我们拿到特征之后去做的选择。也就是说举如举个例子来说,我原始可能会有三个表啊,三个表里头记录了很多东西,比如说商品的信息啊,比如说会有这个用户的信息,好比如说会有这个,呃,用户的这个行为啊,那我会有很多很多的这种表,然后从这种表里头会抽取出来一大堆的这个特征去做表示,举个例子说,这个用户的年龄,他的性别啊,这个用户的这个历史上买东西的一个平均的消费档位,然后这个商品它的这个近期的销量,这个商品的品类,这个商品的星级等等等等等等啊,所有这些信息呢,都会列出来,最终去比如说做一个预估,预估用户是否会下单,所以会抽取出来很多的表达,X1 x2 X3布拉布拉布拉XN好,那我们会希望从这上面去预估最后的Y,那特征选择就在这一步开始做了,他需要从原始的这N个特征当中XNN个特征当中去选出来最有效的一个子集,一个特征的子集用于我们的建模。
08:51
这是我们特征选择他所处的位置,而当你完成这个事情之后,你才能去做后续的一系列的建模呀,上线啊这样的事情。
09:03
那我们再说说特征选择的原因啊啊特征选择的原因呢,大家在这里可以看到啊,刚才我们提到了是更快的模型的训练的速度啊,更低的这个模型的复杂度,呃,更低的模型的复杂度意味着说这个模型呢,我们有更好的可解释性啊,我们可以直接告诉大家说,你看由于这几个属性,因为它是一个啊,年龄处于20岁到30岁之间的一个女性用户,然后它历史上呢,对于呃口红这个品类有特别的喜好啊,他很喜欢在某个平台上买口红,那所以他我预估他会在这段时间内啊,会在本次在啊这个搜索这次过程之后会完成下单这样的一个行为啊,所以我们可以去对这个东西去做解释,我们可以抽取出来最重要这样的一些信息去做解释,第三点是更高纬度的这样的一些特征,可能会意味着说它有非常冗余的信息。这些。
10:03
冗余的信息对于你去完成预估,对于解决这个问题可能是有干扰的。所以我们剔掉,剔除掉了一些不太重要的特征,反倒可以提高我这个地方的精度。那第四点呢,是我会提高模型的泛化能力啊,从而也会这个减弱过拟和啊这样的情况发生,那首先特点选择最最最基础的是大家,呃,需要看一下这个特征呢,是否发散啊,如果一个特征不发散呢,它是没有用的,举个例子来说啊,什么叫做不发散?举个例子来说,大家看到的所有的用户年龄都是28岁啊,所有的用户全都是女性用户。那这个是没有没有问没有用的,因为这个维度没有体现出来任何的差异。在没有差异的情况下,你都看不出来它的不同点,你怎么会能够依照这个维度去提供一些信息,去完成最终的预估呢?右边这个地方说的是我们特征可能会和目标之间呢,会有一些相关性,所以我会我在待会的特征选择当中也会考虑这样的一些因素。第三章我们就要给大家具体来聊一聊特征选择的若干的方法了。
11:18
首先特征选择,大家了解一下有哪些主要的方法,我们再一一给大家做讲解,那首先特征选择呢,有三大类最主流的方法,分别是这个地方的过滤式的特征选择方法,包装式的特征选择方法和嵌入式的特征选择方法,啊这样三类,好,我们来分别了解一下这三类分别指的是什么方法。首先过滤是,诶大家好像从名字上可以听得出来,好像是把一部分的效果不太好的这个特征去做了一个过滤,所以这个地方呢,我们会按照特征的一个发展程度,或者是它的相关性的指标,对每个特征去做评分。
12:00
我们会对特征一个一个去做评分,然后再依照这个地方评分的阈值,或者是它的一个选择的百分比等等去做一个筛选,一个过滤筛选。所以这个地方最常用到的方法分别是特征的方差,相关系数,假设检验和互信息啊,我们来分别来提一下。啊,首先呢,我们给大家提到的是这个地方的,呃,方差。啊,那首先过滤法就是我们在体会到这个过滤法的话,其实过滤法做的事情就是,呃,基本上都是衡量单个特征的效果,或者单个特征和结果之间的相关程度,会留下来相关度比较高的特征,呃,它的缺点呢,其实它是没有太考考量到特征和特征的,是一种交叉或者组合带来的作用,所以它只是在衡量单个维度上看起来和我的标准答案和我的这个地方的,呃,我们的标签之间的一个相关程度到底是什么样的。OK,好,那大家呃,接着往下看啊。
13:05
我们来看一看过滤法当中的方差法呢,实际上它做的事情就是去衡量我的每个指标,它的一个方差到底是怎么样的,也就是他的一个分布散散度,他的一个波动状况,举个例子来说,如果我的这一波用户,他的年龄啊,有很小的年龄,有很大的年龄,然后各种年龄的取值呢都有,那它的方差可能就很大,那代表说这个维度可能信息就比较多。包含的信息可能就比较多,所以方差越大呢,我们认为这个特征的离散程度越大,我们认为它越发散,我们认为它包含的信息量可能越大,越有可能对我最终的预估或者说建模的判断提供依据,所以我们可以以这个东西的大小呢去做排序,作为一个衡量的指标,所以我可以把每个特征拿过来去计算一下方差,然后以方差大小去做一个排序,然后取出来啊方差最大的N的特征,我们认为它的表征能力是最好的。
14:03
那第二种方式叫做皮尔逊的系数,皮尔逊系数呢,实际上是在求两个变量X和Y之间的一种啊线性关系,那其中的这个X和Y呢,它的斜方差其实是对两个变量的总总体误差的一个度量啊,所以大家可以呃,依据我们统计当中的一些知识呢,去做一个计算,它可以衡量出来我的每一个输入的维度和我的标签和我最终结果之间的一个相关程度到底有多高,我们认为这种相关程度越高这样的特征,它对于我最终去预测我的这个标签,它的效果是呃越强的啊,通常呢,在这个地方,我们假设它是这种线性的这种啊模型啊,那它效果肯定是会更强的。那第三个呢,叫做卡方检验,那卡方检验呢,它是属于我们这个概率论和梳理统计当中非常常见的这种啊,假设检验的思想啊,所以他做的事情呢,是观测这个实际值和理论值的偏差,来确定一下原假设是否成立。
15:05
所以我们会,我们同样我们会基于这个统计的方式去计算出来这样的一个卡方检验,那这个卡方值实际上它越大,它表示这个特征呢,它的呃,表征能力会越强,它会越好,所以大家在这个地方呢,呃,可以依照我们这个统计的公式啊,去计算出来这样的一个卡方检验的值,现在也有非常多的工具库,可以直接帮助大家去完成这件事情,它的根本的这个思想,其实就是利用数理统计概率论当中的思想来拿到这种卡方值比较大啊,这个观测值和理论值差异比较大的这样的有表征能力的特征。最后呢是互信息,互信息呢是我们信息论当中的一个很有用的一个概念,其实互信息表示的是说我引入了一个变量之后,我的呃这个另外一个变量,它的不确定性减少的程度,比如说我引入了某一个,我引入了年龄这样一个信息,我能更好的去判断用户在我当前的这一次的浏览当中会不会发生下单这样的行为,那我就认为说他是一个很有用的一个信息。
16:11
对吧,所以这个地方呢,我们就会使用这种统概率统计的方式呢,去计算一个叫做互心息这样的一个概念呢,互心息呢,其实是两个信息熵啊,啊使我们的一个信息商减掉一个条件商啊,这样呢得到的结果,那这个呢都会有啊对应的这个数学公式和工具呢,可以帮助大家去完成,那大家可以看到我们整个过滤法,不管是刚才提到的这种啊,方差啊,卡方检验,呃,这个皮尔逊的系数,还是互相互信息,它都是在衡量我的单变量,单维度,单特征的一个效果,它到底怎么样,然后我们基于这个东西呢,去做一个排序,做一个选择。第二种方式呢,叫做包包裹式啊,会叫包装式,那包装式呢,实际上呃,它会使用一个呃我们的一个效果来一步步的剔除我们的候选的参数,它最常用到的方式呢,是比如说可以借助于呃一些模型,可以拿到特征重要度的一些模型啊,那借助于这样的一些模型,比如说呃什么什么模型可以拿到特征重要度呢?比如说随机森林,比如说逻辑回归,所以呢,我在我在我啊完成了建模之后,我可以把我的特征重要度打出来哦,你就会知道说哦,OK,这个会不会下单呢?和这个人的消费水平啊之间的关系与最高,然后和我的年龄啊是第二相关,和我所在的城市可能是第三相关,好,那你会拿到这样的东西以后呢,你会逐步的把从从尾巴上开始。
17:41
从尾巴上开始,从最不重要的这个特征开始。从最不重要的特征开始啊,逐步的去做。大家在这里见到的特征的题属。所以我剔除掉了一部分特征,诶我再去做一下实验,我看一看效果怎么样,我发现说,哎,效果好像和之前差不多,那就说明你剔除的那些特征没有用嘛,你就把它踢掉就好了,诶如果你发现说它的特征重,它的这个时候效果下降了很多,那肯定你需要去把这个地方的特征留下来,因为因为它的缺失使得我最终的效果变差了啊,所以我们是依照一个模型,先拿到特征重要度,再从最不重要的特征开始踢,看看踢掉他踢到哪里为止,对我的结果影响不太大,同时呢,呃,这个时候特征又能踢掉一些。
18:33
OK,位置,这个叫做包装法,大家在一些工具库当中可以通过这种r fe啊叫叫递规的消除特征法feimation这样的方式来完成。第三种方式叫做embedded嵌入式的这个特征选择方法,那嵌入式的特征选择方法呢?呃,很经典的方式是利用我们在机器学习当中所谓的正则化这样的方式来做特。特征的选择。
19:01
所以这个地方大家见到这个正则画像呢,通常是一个约束项,我们带上了这一项之后呢,我们可以对于我们原始的这个地方的属性,这个地方的特征可以去做一个约束。啊,我们可以对我这个地方的。参数啊,我学习的参数去做一个幅度的约束。那我们加了这一项以后,一个很有意思的事情是啊,通常情况下,加上这一项之后,它会使得我们最终的解,我们最终的权重,我们最终的解是一个稀疏解的形态。是一个很稀疏的极乐心态。OK,所以呃,比如说加上这种L1正则化啊,它可能就会拿到很多权重为零的这样的啊权重,那为零的权重呢,其实代表后面的特征就是没有用的,所以这时候呢,这个特征就可以被剔除掉了啊,所以这是嵌入式做的事情啊,最后我们给大家做一个小小的总结,在这个课程当中呢,实际上我们就给大家提到了特征选择这样的一个概念,我们首先对比的特征选择和降维,我们说特征选择和维度的约减,或者说降维是两件事不同的事情,然后我们讲到特征选择它的原因啊,减少冗余,可以降噪,可以降低过拟和,可以让我们的模型更简单。
20:17
然后我们给大家提到了特征选择的方法,包括过滤式,包括包装法,包括嵌入法,不同的方法啊大家啊,希望大家有所收获,好,谢谢大家。
我来说两句