一周精选
1 如何抉择是否要做机器学习?如何入门机器学习? 2 机器学习是万能的吗?AI落地有哪些先决条件?
1 特征工程
今天我们聊一聊特征工程方面的知识,随着大数据时代的到来,特征工程发挥着越来越重要的作用。当数据预处理完成后,我们需要选择有意义的特征输入机器学习的算法和模型进行训练。简单说,就是发现对因变量y有明显影响作用的特征,通常称自变量x为特征,特征工程的目的是发现重要特征。一般来说,特征工程大体上可以分为三个方面,一是特征构造,二是特征生成,三是特征选择。
2 特征构造
先说特征构造。顾名思义,特征构造就是构造出来新的特征,一般都是通过对原有的特征进行四则运算产生新的特征。比如原来的特征是x1和x2,那么x1 x2就是一个新的特征,或者当x1大于某个数c的时候,就产生一个新的变量x3,并且x3=1,当x1小于c的时候,x3=0,所以这样看来呢,可以按照这种方法构造出很多特征,这个就是构造。
3 特征生成
我们再来说说特征生成,特征生成和特征构造有些相似,但是还是存在一些区别的,特征生成的话,比如主成分分析或者因子分析,都可以对原有数据进行特征生成,比如卷积神经网络的卷积层就是一个特征生成的过程,一张图片,经过卷积的不断扫描,就会把原始图片里边的好多特征逐步提取出来,这个就是特征生成。
再如通过主成分分析对原始数据进行降维,那么降维后,每个主成分其实就代表一个新的特征,同样因子分析也具有这方面的功能,通过因子分析可以把潜在变量后面的潜在因子找出来。
通过这几个例子,大家可以逐渐感觉到特征构造和特征生成会有一些区别,但是也有一定的联系。实际上,主成分分析本身就是初始变量的线性组合。这样来看,也属于特征构造的,但是一般特征构造就是简单的四则运算。
上面呢就是简单说了一下,特征生成和特征构造,其实就是想尽各种办法产生个新的特征。下面呢,我们重点要说说特征选择。
4 特征选择
特征选择是非常重要的,如果特征选择失败,那么前面的工作都是徒劳的,大家试想一下,比如我们构造出了100多个特征,但是,却不知道哪个特征最重要,那不是还是没有解决问题吗,所以特征选择就显的尤为重要。
我们首先对特征选择的方法进行一个分类:
Filter:过滤法,按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择阈值的个数,选择特征。 Wrapper:包装法,根据目标函数(通常是预测效果评分),每次选择若干特征,或者排除若干特征。 Embedded:嵌入法,先使用某些机器学习的算法和模型进行训练,得到各个特征的权值系数,根据系数从大到小选择特征。类似于Filter方法,但是是通过训练来确定特征的优劣。
4.1 Filter 使用方差选择法,先要计算各个特征的方差,然后根据阈值,选择方差大于阈值的特征。使用相关系数法,先要计算各个特征对目标值的相关系数以及相关系数的P值。还有卡方检验,互信息方法,这些在之后陆续推送。
4.2 Wrapper Methods 除了看显著性呢,还有常用的手段就是,先把所有的变量一起和y做一个回归,在逐渐去掉某些x,观察模型的deviance如何变化,这类方法其实叫 Wrapper Methods。但是呢,如果因变量y是离散的,那么我们的回归对应的就是广义线性回归模型了,那么这个时候还可以通过其他方法进行特征选择了,一般做法是单独将每个x和y做一个回归,之后再计算这个模型对应的基尼系数,通过观察基尼系数确定哪个方程对应的特征是最好的。
在搜索特征组合时,可以用启发式搜索。
但是呢,这种方法存在缺点,一个是每一个变量都需要单独和y做回归,比较麻烦。第二个是按照这种方法选出来的特征,其实效果不行,也就是在测试集上面表现并不好。
4.3 Embedded Methods 那么呢,难道统计学方面就没有好一点方法吗? lasso回归,lasso回归本来就是统计学大师搞出来的,现在已经发展出好多lasso回归的模型了。那么大家一看lasso这个单词是套索的意思。就是套着马脖子,主要是控制马的装置,那么在回归当中呢,主要是套回归系数的,意思是把回归系数控制住,不让它太大,本质上是一种正则化的手段,但是呢,不叫它太大,那数学的语言刻画方式有很多种了,但是lasso回归就选择了很巧妙的一种刻画方式,按照这种套路来,不仅可以约束系数,而且可以在模型最优的时候把不重要的系数约束为0. 既然x的系数都成了0了,那我们也不用看显著性了,直接做到了特征选择,或者变量选择。目前看,这个方法是效果是非常好的,而且非常实用与高维数据分析。说的官方一些,这类方法叫Embedded Methods. 上面就是统计学角度的变量选择。
机器学习算法做特征选择,我们最容易想到的就是决策树。这个方法好,主要是模型本身可解释性很强。它是按照x的值,对y进行了划分,划分的好坏依据是啥呢,主要是纯度,一个划分块里,纯度高,就说明划分的好,也就说明了这个划分变量选择的好。变量的重要性也就不言而喻了。实际上决策树家族,随机深林(random forest),bagging,boosting,gradient booting, 以及 xgboost 都有特征选择的功能。除了基于树的模型呢,还有其他模型,比如神经网络,支持向量机也都有特征选择的功能。
5 框架或包
scikit-learn全面支持常用的特征选择工程功能,详情参考:
http://scikit-learn.org/stable/modules/feature_extraction.html#feature-extraction
如有任何疑问,欢迎留言。