特征工程是利用数据领域的相关知识来创建能够使机器学习算法达到最佳性能的特征的过程。简而言之,特征工程是从原始数据中提取特征的过程,这些特征可以很好地表征原始数据,并且可以利用它们建立的模型在未知数据上的表现性能达到最优。本节内容将从数据预处理、特征选择和降维3个部分展开。
在工程实践中,原始数据经过数据清洗后,在使用之前还需要进行数据预处理。数据预处理没有标准的流程,通常情况下对于不同的任务和数据集,属性会有所不同。本节主要从特征缩放和特征编码两方面进行叙述。
1. 特征缩放
如果输入数值的属性比例差距大,就容易导致机器学习算法表现不佳。例如,一条数据存在两个特征,分别为特征 A 和特征 B 。特征 A 的分布范围为[0, 1],特征 B 的分布范围为[-1, 1],特征 A 和特征 B 的分布范围相差非常大。如果我们对这样的数据不进行任何处理,直接用于模型训练中,则可能导致模型在训练时一直朝着特征 B 下降的方向收敛,而在特征 A 的方向变化不大,导致模型训练精度不高,收敛速度也很慢。所以我们要调整样本数据每个维度的量纲,让数据每个维度量纲接近或者相同。常用的方法有归一化和标准化。
1)归一化
通过对原始数据的变化把数据映射到[0,1]。常用最大、最小函数作为变换函数,变换公式如下:
2)标准化
对于多维数据,将原始数据的每一维变换到均值为0、方差为1的范围内。变换公式如下:
其中,
为平均值,
σ
为标准差。
归一化和标准化虽然都是在保持数据分布不变的情况下对数据的量纲进行调整,但是对比公式2.53和公式2.54可以看出,归一化的处理只和最大值、最小值相关,标准化和数据的分布相关,并且标准化可以避免归一化中异常值的影响。所以,大部分情况下可以优先考虑使用标准化方法。
2. 特征编码
1)类别特征
在数据处理中,类别特征总是需要进行一些处理,仅仅通过离散的数字来表示类别特征会对机器学习的过程造成很大的困难。当类别特征的基数很大时,数据就会变得十分稀疏。相对于数字特征,类别特征的缺失值更难以进行插补。接下来使用Adult Data Set这一公开数据集中的部分数据说明各个编码方法是如何应用的。这里取出的5条数据标签为[State-gov,Self-emp-not-inc,Private,Private,State-gov]。
(1)One-Hot编码
One-Hot(One-of- K )编码是在长为 K 的数组上进行编码。One-Hot编码的基础思想被广泛应用于大多数线性算法。One-Hot编码将对应类别的样本特征映射到 K 维数组中,其中表示该类别的维度值为1,其余维度值为0。在One-Hot算法中,需要将第一行去除,以避免特征间的线性互相关性。One-Hot编码是一种简洁直观的编码方式,缺点在于大多数情况下不能很好地处理缺失值和因变量,因此表示能力较差。One-Hot编码对上述标签的编码结果为:
编码中,State-gov这一变量代表的行被忽略,矩阵的第一行代表Self-emp-not-inc这一变量,若为1,则代表该样本标签为Self-emp-not-inc。
(2)哈希编码
哈希编码使用定长的数组进行One-Hot编码,首先将类别编码映射为一个哈希值,然后对哈希值进行One-Hot编码。哈希编码避免了对特别稀疏的数据进行One-Hot编码可能导致的稀疏性。这种编码方式可能发生冲突,通常会降低结果的表达能力,但是也有可能会使结果变得更好。对于新的变量来说,哈希编码的处理方式具有更强的鲁棒性。对于本文中的例子,假设Hash(Self-emp-not-inc)=2、Hash(Private)=0、Hash(State-gov)=1,则上述数据集的哈希编码为:
(3)标签编码
标签编码给每个类别变量一个独特的数字ID,这一处理方式在实践中最为常见。对于基于树的算法来说,这种编码不会增加维度。在实践中,可以对数字ID的分配进行随机化处理来避免碰撞。对于本节中的例子,将Private编码为0、Self-emp-not-inc编码为1、State-gov编码为2,则该数据集的标签编码为[2,1,0,0,2]。
(4)计数编码
计数编码用训练集中类别变量出现的次数来代替变量本身,这一方法适用于线性和非线性算法,但是对于异常数据十分敏感。在实践中,可以对出现次数进行对数转换,同时用1替代未出现的变量。计数编码可能会引入许多冲突,比如相似的编码可能代表不同的变量。对于本节的例子,该数据集的计数编码为[2,1,2,2,2]。
(5)标签计数编码
标签计数编码根据类别变量在训练集中出现的次数进行排序,例如出现次数最少的类别用1表示、出现次数排在第 N 的类别用 N 表示等。标签计数编码对线性和非线性算法同样有效,并且对异常值不敏感。相比计数编码,标签计数编码对于不同的类别变量总有不同的编码。对于本节的例子,该数据集的标签计数编码为[2,1,3,3,2]。
(6)目标编码
目标编码是将列中的每个值替换为该类别的均值目标值。这一目标可以为二元分类或回归变量。目标编码的方法通过避免将变量的编码值设定成0值来使其变得光滑,同时添加了随机噪声来对抗过拟合。如果被正确使用,目标编码可能是线性或非线性编码的最好方式。对于本节中的例子,假设目标值为[1,1,1,1,0],则目标编码结果为[0.5,1,1,1,0.5]。
(7)类别嵌入
类别嵌入使用神经网络的方法将类别变量嵌入为一个稠密的向量。类别嵌入通过函数逼近的方式将类别变量嵌入欧式空间中。类别嵌入可以带来更快的模型训练和更少的存储开销,相比One-Hot编码可以带来更好的准确率。对于本节中的例子,类别嵌入三维平面的结果如下:
(8)多项式编码
无交互的线性算法无法解决异或问题,但是多项式核可以。多项式编码对于类别变量的交互进行编码。多项式编码可以通过FS、哈希和VW等技术来扩大特征空间。假设本文数据集中另一列的类别特征为[White,White,White,Black,Asian-Pac-Islander],若第一列特征为Private或第二列特征为White的情况下编码为1,其余情况下编码为0,则生成的多项式编码为[1,1,1,1,0]。
(9)扩展编码
扩展编码从一个变量来创建多个类别变量。基数较大的特征可能会具有远多于其本身的信息。对于本节中的例子,根据是否为Private和是否为State-gov生成的两个扩展编码为[0,0,1,1,0]和[1,0,0,0,1]。
(10)统一编码
统一编码将不同的类别变量映射到相同的变量。真实的数据可能是混乱的,例如文本中可能会有不同的拼写错误、缩写和全称,不同的表达具有相同的意义,这些情况均可以进行统一编码。
(11)NaN编码
考虑到数据中出现的NaN值可能会具有信息,NaN编码赋予NaN值一个显式的编码。在使用NaN编码时,要求NaN值在训练集和测试集中出现的原因是相同的,或者通过数据集的局部验证确认NaN代表同一种信息。
2)数字特征
相对于类别特征,数字特征更容易应用到算法中,同时数字特征中的缺失值也更容易被填补。数字特征可能包括浮点数、计数数字和其他数字。下面使用数据举例说明以下编码方法的流程。
(1)取整
取整一般是指对含有小数的数字变量进行向上取整或者向下取整。取整可以理解为对信息的压缩,鉴于有时过度的精确会导致噪声,这一过程会保留数据中最重要的部分。取整会将变量从可能的连续值变为离散值,因此这些变量可以当作类别变量进行处理。取整前,可以应用对数变换。例如,取整将上述5条数据处理为[0,2,1,3,2]。
(2)桶化
桶化指的是将数字变量置入一个桶中,然后用桶的编号进行编码。桶化的规则可以依据一定的程序进行设定,依据数量的大小或者使用一定的模型来找到最优的桶。桶化的优势在于,对训练集范围之外的变量依然能够进行良好的表示。设桶化过程中的所有桶为[0,1]、[1,2]、[2,3]。桶化将上述5条数据处理为[1,2,2,3,3]。
(3)缩放变换
缩放变换指的是将数字化变量缩放到一个指定的范围,包括标准变换、最小最大变换、根号变换和对数变换。
(4)缺失值填补
缺失值填补可以和硬编码相结合,有3种办法:用均值填补,是一种非常基础的方法;用中位数填补,相对于异常值具有更强的鲁棒性;使用外部模型填补,这种方法可能会引入算法的误差。
(5)交互(加、减、乘、除)
交互,尤其是用于数字变量之间的编码时,某一因素的真实效应(单独效应)随着另一因素水平的改变而改变。当两种或两种以上暴露因素同时存在,所致的效应不等于它们单个作用相联合的效应时,则称因素之间存在交互作用。在实践中,人类的直觉不一定会起作用,有时看起来奇怪的交互反而会带来显著的效果。
(6)线性算法的非线性编码
对非线性的特征进行编码,可以提高线性算法的性能,常见的方法有使用多项式核、随机森林方法、遗传算法、局部线性嵌入、光谱嵌入、t-SNE等。
3)时间型变量
时间型变量(如日期)需要有一个更好的局部验证范式(如后退测试)。在时间型变量的处理中很容易犯下错误,因此在这个领域有很多挑战。
(1)投影到一个圆上
在实践中,我们可以将一个特征(如一周中的一天)映射到一个圆上的两个共轭点。投影时,需要确保最大值到最小值的距离与最小值加一相同。投影的方法可以用于一周中的一天、一月中一天、一天中的小时等。
(2)趋势线
除了使用总消费进行描述外,我们还可以用过去一周内的消费、过去一个月内的消费和过去一年内的消费等统计量进行描述。这一方法给算法提供了一个可参考的趋势,两个消费相同的顾客可能会具有完全不同的行为,一个顾客可能在开始时消费较多,另一个可能在开始时消费较少。
(3)趋近主要活动
在实践中,我们可以将时间编码为类别特征,例如用放假前的天数来描述一个日期。我们可以使用的主要活动包括全国假期、主要体育活动、周末、每个月的第一个周六。这些因素可能会对一些行为造成影响。
4)空间变量
空间变量指描述空间中一个地点的变量,比如GPS坐标、城市、国家、地址等。
(1)用地点分类
使用一个类别变量可以将部分地点转化为同一个变量,比如插值、K-Means聚类、转化成经度和纬度、在街道名称上添加邮政编码等。
(2)趋近中心
部分地点变量可能会有一个中心点,我们可以描述一个地点和中心点的近似程度。例如,一些小的城镇可能继承一些近邻大城市的文化,通信的地点可以被关联到近邻的商业中心。
5)文本特征
自然语言通常可以使用和类别变量同样的处理方法。深度学习的发展促进了自动化特征工程,并逐渐占据主导地位。但是使用精心处理后的特征进行传统机器学习训练的方法仍然很有竞争力。自然语言处理的主要挑战是数据中的高稀疏性,这会导致维度灾难。
(1)清理
首先,我们需要对自然语言进行一定的处理,大概有以下几个固定的流程:
①小写化:将标识符从大写字母转化成小写字母。
②通用编码:将方言或其他语言转化成它们的ASCII表示方法。
③移除非数字字母:移除语言文本中的标点符号,仅仅保留其中的大小写字母和数字。
④重新匹配:修复匹配问题或标识内的空格。
(2)标记化
标记化用不同的方法对自然语言进行标记,主要方法如下:
①词标记:将句子切分成单词标记。
②N-Grams:将连续的标记编码在一起。比如,“Knowledge begins with practice”可以被标记化为[Knowledge begins, begins with, with practice]。
③Skip-Grams:将连续的标记编码在一起,但是跳过其中的一小部分。比如,“Knowledge begins with practice”可以被标记为[Knowledge with, begins practice]。
④Char-Grams:和N-Grams方法类似,但是在字符级别进行编码。比如,“Knowledge”可以被标记为[Kno, now, owl, wle, led, edg, dge]。
⑤Affixes:和Char-Grams方法类似,但是仅对后缀和前缀进行处理。
(3)移除
需要移除的主要包括以下3种单词:
①停止词:移除出现在停止词清单的单词或标记。
②稀有词:移除训练集中出现很少次数的单词。
③常见词:移除过于常见的词。
(4)词根
词根编码主要包括下列几种方法:
①拼写纠正:将标识转化为它的正确拼写。
②截断:仅截取单词的前 N 个字符。
③词干:将单词或标识符转化为它的词根形式。
④异体归类:找到词语的语法词根。
(5)补充信息
补充文本中的信息有以下几种方法:
①文档特征:对空格、制表符、新行、字母等标识进行计数。
②实体插入:在文本中加入更通用的标识。
③解析树:使用逻辑模式和语法成分对句子进行解析。
④阅读水平:计算文档的阅读水平。
(6)相似性
衡量文本相似性的方法有以下几种:
①标识相似性:计算两段文本中出现的标识数量。
②压缩举例:查看一段文本是否可以使用另一段文本进行压缩。
③距离度量:通过计算一段文本如何通过一系列操作转化为另一段文本计算文本之间的相似性。
④Word2Vec:检查两个向量之间的余弦相似度。
⑤TF-IDF:用于识别文档中最重要的标识符,移除不重要的标识,或作为一个降维前的预处理。
在实际项目中经常会遇到维数灾难问题,这是由于特征过多导致的。若是能从中选择出对于该问题重要的特征,使得后续的学习模型仅使用这部分特征进行学习,则会大大缓解维数灾难问题。常见的特征选择方法包括3类:过滤式、包裹式和嵌入式,本节将逐一对这3类方法进行介绍。
1. 过滤式选择
过滤式选择方法先对数据集进行特征选择,然后训练学习器。其特征选择过程与后续学习器无关。过滤式选择是按照发散性或者相关性对各个特征进行评分,设定阈值或者待选择特征的数量进行特征选择。根据评分方法的不同,过滤式选择方法又可以分为很多种方法,比如单变量选择法、方差选择法、Fisher得分法、Relief选择法、卡方检验选择法、相关系数选择法等。
1)单变量选择法
不需要考虑特征之间的相互关系,按照特征变量和目标变量之间的相关性或互信息对特征进行排序,过滤掉最不相关的特征变量。优点是计算效率高、不易过拟合。
2)方差选择法
首先计算各个特征的方差,然后根据阈值或者待选择特征的个数选择满足要求的特征。一般来说,阈值或者待选择特征个数设置合适,方差接近0的特征基本都会过滤掉,方差接近0可说明该特征在不同样本上取值不变,对于学习任务没有帮助。在实际项目中,可根据实际情况进行参数设置。方差计算公式如下:
其中 µ 为第 i 个特征的均值, n 为样本数量。
3)Fisher得分法
对于分类问题,好的特征应该是在同一个类别中的取值比较相似、在不同类别之间的取值差异较大。因此,特征的重要性可以用Fisher得分来表示,计算公式如下:
其中,
和
分别是特征在类别中的均值和方差,
为特征
i
的均值,
为类别
j
中的样本数。Fisher得分越高,特征在不同类别之间的差异性越大,在同一类别中的差异性越小,则特征越重要。
4)Relief选择法
Relief(Relevant Features)算法是著名的过滤式特征选择方法,最初版本主要针对二分类问题,由Kira和Rendell在1992年首次提出。Relief算法是一种特征权重算法,通过设计一个“相关统计量”来度量某个特征对于学习任务的重要性,该统计量是一个向量,每个分量分别对应一个初始特征,需要指定一个阈值,选择比阈值大的相关统计量分量对应的初始特征即可,也可以指定需要的特征数量 k ,然后选择相关统计量分量最大的 k 个特征。
5)卡方检验选择法
在统计学中,卡方检验用来评价两个事件是否独立,即 P ( AB )= P ( A )* P ( B )。卡方检验是以卡方分布为基础的一种假设检验方法,主要用于分类变量。其基本思想是根据样本数据推断总体的分布与期望分布是否有显著性差异,或者推断两个分类变量是否独立或者相关。
首先假设两个变量是独立的(此为原假设),然后观察实际值和理论值之间的偏差程度,若偏差足够小,则认为偏差是很自然的样本误差,接受原假设,即两个变量独立;若偏差大到一定程度,则否定原假设,接受备选假设,即两者不独立。卡方检验的公式如下:
其中, A 为实际值, T 为理论值。
CHI值越大,说明两个变量越不可能是独立不相关的。也就是说,CHI值越大,两个变量之间的相关性越高,就可以用于特征选择,计算每一个特征与标签之间的CHI值,然后按照大小进行排序,最后选择满足临界值要求的CHI值或者根据待选择的特征个数进行特征选择。同样,也可以利用F检验和t检验等假设检验方法进行特征选择。
6)相关系数选择法
(1)Pearson相关系数
Pearson相关系数是一种最简单的能够帮助理解特征和响应变量之间关系的方法,该方法衡量的是变量之间的线性相关性,结果的取值区间为[-1,1],-1表示完全负相关,1表示完全正相关,0表示没有线性相关,即相关系数的绝对值越大、相关性越强,相关系数的值越接近0,相关性越弱。
Pearson相关也称为积差相关,是英国统计学家Pearson于20世纪提出的一种计算直线相关的方法。假设有两个变量 X 和 Y ,那么两个变量之间的Pearson相关系数可通过如下公式进行计算:
用于特征选择时,Pearson相关系数易于计算,通常在拿到数据(经过清洗和特征提取之后的)之后的第一时间执行。Pearson相关系数的一个明显缺陷是,作为特征排序机制,只对线性关系敏感,如果关系是非线性的,即使两个变量具有一一对应的关系,Pearson相关系数也可能会接近0。
(2)距离相关系数
距离相关系数就是为了克服Pearson相关系数的弱点,在一些情况下,即便Pearson相关系数是0,我们也不能断言这两个变量是独立的,因为Pearson相关系数只对线性相关敏感,如果距离相关系数是0,就可以说这两个变量是独立的。例如, x 与 x 2 之间的Pearson系数为0,但是距离相关系数不为0。类似于Pearson相关系数,距离相关系数被定义为距离协方差,由距离标准差来归一化。
距离相关系数定义:利用Distance Correlation研究两个变量 u 和 v 的独立性,记为dcorr( u , v )。当dcorr( u , v )=0时,说明 u 和 v 相互独立;dcorr( u , v )越大,说明 u 和 v 的相关性越强。设{( u i , v i ), i =1,2,…, n }是总体( u , v )的随机样本,定义两个随机变量 u 和 v 的DC样本估计值公式如下:
其中,
,
计算公式如下:
同理,可计算
和
。
用于特征选择时,我们可根据上述公式计算各个特征与标签数据的距离相关系数,根据阈值或者待选择特征的个数进行特征选择。
2. 包裹式选择
包裹式特征选择法的特征选择过程与学习器相关,使用学习器的性能作为特征选择的评价准则,选择最有利于学习器性能的特征子集。一般来说,由于包裹式选择直接对学习器性能进行优化,因此从最终的性能来看包裹式选择比过滤式选择更好,但是选择过程需要多次训练学习器,因此包裹式选择的计算开销通常要比过滤式选择大得多。包裹式特征选择可使用不同的搜索方式进行候选子集的搜索,包括确定性搜索、随机搜索等方法。
1)确定性搜索
确定性搜索包括前向搜索、后向搜索和双向搜索。前向搜索即从空集开始逐个添加对学习算法性能有益的特征,直到达到特征选择个数的阈值或者学习算法性能开始下降;后向搜索即从初始的特征集逐个剔除对学习算法无益的特征,直到达到特征选择个数的阈值或者学习算法性能开始下降;双向搜索即将前向搜索与后向搜索结合起来,每一轮逐渐增加选定的相关特征(这些特征在后续轮中将确定不会被剔除),同时减少无关特征。显然,无论是前向搜索、后向搜索还是双向搜索策略都是贪心的,因为这3个策略仅仅考虑在本轮选择中使学习算法性能最优。
2)随机搜索
随机搜索即每次产生随机的特征子集,使用学习算法的性能对该特征子集进行评估,若优于以前的特征子集,则保留,否则重新进行随机搜索。随机算法中包含众多启发式算法,例如模拟退火、随机爬山和遗传算法等,在此不再赘述,这里主要介绍在拉斯维加斯方法框架下的LVW(Las Vegas Wrapper)算法。
LVW是一种典型的包裹式特征选择方法,在拉斯维加斯方法框架下使用随机策略来进行子集搜索,并以最终分类器的误差为特征子集评价准则。
3)递归特征消除
(1)RFE
递归特征消除(Recursive Feature Elimination,RFE)的主要思想是反复地构建模型(如SVM或者回归模型),然后选出最好的(或者最差的)的特征(可以根据系数来选),把选出来的特征放到一边,然后在剩余的特征上重复这个过程,直到所有特征都遍历了。这个过程中特征被消除的次序就是特征的排序。因此,这是一种寻找最优特征子集的贪心算法。
RFE的稳定性很大程度上取决于在迭代的时候底层用哪种模型。例如,如果RFE采用普通的回归方法,没有经过正则化的回归是不稳定的,那么RFE就是不稳定的;如果RFE采用的是Ridge(L2),而用Ridge正则化的回归是稳定的,那么RFE就是稳定的。sklearn在feature_selection模块中封装了RFE,感兴趣的读者可以参考sklearn相关文档进行进一步学习。
(2)RFECV
RFE设定参数n_features_to_select时存在一定的盲目性,可能使得模型性能变差。比如,n_features_to_select过小时,相关特征可能被移除特征集,导致信息丢失;n_features_to_select过大时,无关特征没有被移除特征集,导致信息冗余。在工程实践中,RFECV通过交叉验证(Cross Validation)寻找最优的n_features_to_select,以此来选择最佳数量的特征,它所有的子集的个数是2的 d 次方减1(包含空集)。指定一个外部的学习算法,比如SVM之类的。通过该算法计算所有子集的validation error。选择error最小的那个子集作为所挑选的特征。sklearn封装了结合CV的RFE,即RFECV。在RFECV中,如果减少特征会造成性能损失,那么将不会去除任何特征。
4)稳定性选择
稳定性选择是一种二次抽样和选择算法相结合的较新的方法,选择算法可以是回归、SVM或其他类似的方法。它的主要思想是在不同的数据子集和特征子集上运行特征选择算法,不断地重复,最终汇总特征选择结果,比如可以统计某个特征被认为是重要特征的频率(被选为重要特征的次数除以它所在的子集被测试的次数)。理想情况下,重要特征的得分会接近100%。稍微弱一点的特征得分会是非0的数,而最无用的特征得分将会接近0。
在sklearn的官方文档中,该方法叫作随机稀疏模型。sklearn在随机Lasso和随机逻辑回归中有对稳定性选择的实现。
3. 嵌入式选择
嵌入式特征选择是将特征选择过程与学习器训练过程融为一体,两者在同一个优化过程中完成,并不是所有的机器学习方法都可以作为嵌入法的基学习器,一般来说,可以得到特征系数或者可以得到特征重要性(Feature Importance)的算法才可以作为嵌入法的基学习器。
1)基于正则项
正则化惩罚项越大,模型的系数就会越小。当正则化惩罚项大到一定程度时,部分特征系数会变成0;当正则化惩罚项继续增大到一定程度时,所有的特征系数都会趋于0。其中一部分特征系数会更容易先变成0,这部分系数就是可以筛掉的,即选择特征系数较大的特征。
2)基于树模型
(1)随机森林
随机森林具有准确率高、鲁棒性好、易于使用等优点,这使得它成为目前最流行的机器学习算法之一。随机森林提供了两种特征选择的方法:平均不纯度减少(Mean Decrease Impurity)和平均精确率减少(Mean Decrease Accuracy)。
①平均不纯度减少
随机森林由多个决策树构成,决策树中的每一个节点都是关于某个特征的条件,为的是将数据集按照不同的响应变量一分为二。利用不纯度可以确定节点:对于分类问题,通常采用基尼系数或者信息增益;对于回归问题,通常采用的是方差或者最小二乘拟合。当训练决策树的时候,可以计算出每个特征减少了多少树的不纯度。对于一个决策树森林来说,可以计算出每个特征平均减少了多少不纯度,并把平均减少的不纯度作为特征选择的值。
②平均精确率减少
另一种常用的特征选择方法就是直接度量每个特征对模型精确率的影响,主要思路是打乱每个特征的特征值顺序,并且度量顺序变动对模型的精确率影响。很明显,对于不重要的变量来说,打乱顺序对模型的精确率影响不会太大,但是对于重要的变量来说,打乱顺序就会降低模型的精确率。
sklearn.ensemble中的RandomForestClassifier和RandomForestRegressor中均有方法feature_importances_,该值越大,说明特征越重要,可根据此返回值中各个特征的值判断特征的重要性,进而进行特征的选择。
(2)基于GBDT
GBDT选择特征的细节其实就是CART生成的过程。这里有一个前提,GBDT的弱分类器默认选择的是CART。其实也可以选择其他弱分类器,选择的前提是低方差和高偏差。框架服从Boosting框架即可。CART生成的过程其实就是一个选择特征的过程。在CART生成的过程中,被选中的特征即为GBDT选择的特征。同随机森林一样,sklearn.ensemble中的GradientBoostingClassifier和GradientBoostingRegressor中均有方法feature_importances_,该值越大,说明特征越重要,可根据此返回值中各个特征的值判断特征的重要性,进而进行特征的选择。
(3)基于XGBoost
XGBoost和GBDT同理,在XGBoost中采用3种方法来评判模型中特征的重要程度:weight,在所有树中被用作分割样本的特征的总次数;gain,在出现过的所有树中产生的平均增益;cover,在出现过的所有树中的平均覆盖范围(注意:覆盖范围指的是一个特征用作分割点后其影响的样本数量,即有多少样本经过该特征分割到两个子节点)。详细内容可参考XGBoost官方文档。
当特征选择完成后,可以直接训练模型,但是可能由于特征矩阵过大导致计算量大、训练时间长的问题,因此降低特征矩阵维度也是必不可少的。常见的降维方法有主成分分析(Principal Component Analysis,PCA)和线性判别分析(Linear Discriminant Analysis,LDA)。
1. 主成分分析
主成分分析作为最经典的降维方法,属于一种线性、无监督、全局的降维算法。它基于投影思想,先识别出最接近数据的超平面,然后将数据集投影到上面,使得投影后的数据方差最大,旨在找到数据中的主成分,并利用这些主成分表示原始数据,从而达到降维的目的。
假设数据集
X
={
x
1
,
x
2
,...,
x
n
},其中
x
i
为列向量,
i
∈{1,2,...,
n
}。向量内积在几何上表示为第一个向量投影到第二个向量上的长度,因此向量
x
i
在
ω
(单位向量)上的投影可以表示为
。PCA算法的目标是找到一个投影方向
ω
,使得数据集
X
在
ω
上的投影方差尽可能大。
当数据集
X
={
x
1
,
x
2
,...,
x
n
}表示的是中心化后的数据时,即
。投影后均值表示为
。投影后的方差表示公式如下:
就是样本协方差矩阵,所以就转化成求解一个最大化问题:
引入拉格朗日乘子:
对
ω
求导并令导数等于0,可得
,则
。至此,可以分析出数据集
X
投影后的方差就是数据集
X
的协方差矩阵的特征值。因此,PCA算法要找的最大方差也就是协方差矩阵最大的特征值,最佳投影方向就是最大特征值所对应的特征向量。次佳投影方向位于最佳投影方向的正交空间中,是第二大特征值对应的特征向量,以此类推。
PCA求解方法可以归纳为如下步骤:
(1)中心化处理,即每一位特征减去各自的平均值。
(2)计算协方差矩阵。
(3)计算协方差矩阵的特征值与特征向量。
(4)将特征值从大到小排序,保留前 k 个特征值对应的特征向量。
(5)将原始数据集转换到由前 k 个特征向量构建的新空间中。
2. 线性判别分析
线性判别分析是一种有监督算法,可以用于数据降维。它是Ronald Fisher在1936年发明的,所以又称为Fisher LDA。与PCA相同的是,它也是基于投影思想实现的,将带上标签的数据点,通过投影变换的方法投影到更低维的空间。在这个低维空间中,同类样本尽可能接近,异类样本尽可能远离。与PCA不同的是,LDA更关心的是分类而不是方差。
从简单的二分类问题出发分析LDA算法,假设有
C
1
、
C
2
两个类别的样本,两类的均值分别为
、
。假设投影方向为
ω
,我们需要最大化投影后的类间距离,公式如下:
进一步优化目标,公式如下:
接下来定义类内散度,公式如下:
定义类间散度,公式如下:
故目标由公式2.70变换如下:
对 ω 求导,令其为0,得:
令
,所以
S
B
ω
=
λS
ω
ω
,
,又成为求矩阵特征值与特征向量的问题,最大化
J
(
ω
),即求
的最大特征值,投影向量即为该特征值对应的特征向量。
LDA求解方法可以归纳为如下步骤:
(1)计算类内矩阵 S ω 。
(2)计算类间矩阵 S B 。
(3)计算矩阵
。
(4)计算
最大的
d
个特征值和特征向量,按列组成投影矩阵
ω
。
(5)对样本集中的每一个样本
x
i
计算投影后的坐标,
。