在建立模型时,特征选择是一个重要环节,它指通过保留一部分特征子集来拟合模型,而舍弃其余特征。进行特征选择有多重原因:
保持模型的可解释性(过多特征会增加解释难度)
避免维数灾难
优化与模型相关的目标函数(如R平方、AIC等)
防止过拟合等
如果特征数量N较小,可使用穷举搜索尝试所有可能的特征组合,保留使成本/目标函数最小的那个。但当N较大时,穷举搜索就行不通了,因为需尝试的组合数为2^N,这是指数级增长,N超过几十个就变得极其耗时。
此时需采用启发式算法,以有效方式探索搜索空间,寻找能使目标函数最小化的特征组合。具体来说,需寻找一个长度为N的0/1向量[1,0,0,1,0,1,1,0,...],其中1表示选择该特征,0表示舍弃。目标是找到一个能最小化目标函数的这样一个向量。搜索空间的维度等于特征数量N,每一维只有0/1两种取值可能。
寻找一个好的启发式算法并非易事。R语言中regsubsets()函数提供了一些选项。Scikit-learn库也提供了几种启发式特征选择方法,前提是问题能很好地符合它们的技术假设。然而,要找到一种通用的、高效的启发式算法仍是一个挑战。在本系列文章中,我们将探讨几种即使在特征数量N很大、目标函数可为任意可计算函数(只要不过于缓慢)的情况下,也能给出合理结果的协方差矩阵适应进化算法方法。
数据集
特征选择是机器学习中一个重要的预处理步骤,它通过选择出对预测目标贡献最大的特征子集,从而提高模型的性能和简洁性。常见的特征选择方法包括Filter(过滤式)、Wrapper(包装式)和Embedded(嵌入式)等。其中,协方差矩阵适应进化算法(Covariance Matrix Adaptation Evolution Strategy, CMA-ES)是一种高效的Wrapper式特征选择算法。
在本文中,我们将使用著名的房价预测数据集(来自Kaggle[1] ,共213个特征,1453个样本)对CMA-ES算法的特征选择能力进行说明。我们所使用的模型是线性回归模型,目标是最小化贝叶斯信息准则(BIC),它是一种评估模型质量的指标,值越小表示模型越好。与之类似的指标还有AIC(Akaike信息准则),两者都能有效避免过拟合。当然,我们也可以使用R平方或调整R平方作为目标函数,只是需要注意此时目标是最大化而非最小化。
顺序特征搜索(SFS)
顺序特征搜索是一种贪婪的特征选择算法,它包含前向搜索和后向搜索两种策略。以前向搜索为例,算法流程如下:
首先从全部N个特征中选择一个使目标函数值最优的单特征子集。
在已选特征子集的基础上,再添加一个新特征,形成两个特征的子集,选择能使目标函数进一步最小化的那个组合。
重复步骤2,每轮迭代都只增加一个新特征,直到所有特征都被尝试加入子集。
从所有被尝试过的特征子集中,选择使目标函数值最小的那个作为最终输出。
SFS是一种贪婪算法,它每一步的选择都是基于当前最优解的局部决策,无法回头修正之前的决策。但它的搜索复杂度只有O(N^2),相比暴力搜索指数级的复杂度,计算效率大幅提高。当然,这种高效是以潜在的全局最优解被忽略为代价的。
SFS的后向策略则是从全量特征集合出发,每轮迭代移除一个使目标函数值改善最小的特征,直至所有特征被遍历过为止。
协方差矩阵适应演化策略(CMA-ES)
CMA-ES是一种高效的无约束/约束黑箱连续优化的随机搜索算法。它属于进化计算的一种,但与传统的遗传算法有着明显区别。
与遗传算法直接对解个体进行变异和交叉操作不同,CMA-ES在连续域上对多元正态分布模型的参数(均值和协方差矩阵)进行更新迭代,间接实现对潜在解集群的适应性搜索。
算法不需要目标函数的梯度信息,即无需计算导数,因此具有很强的鲁棒性,可应用于非线性、非凸、多峰、多模态等各种复杂优化问题。同时,CMA-ES通过自适应策略有效利用样本信息,在保证全局性的同时提高了收敛速度。
CMA-ES已被广泛应用于机器学习、计算机视觉、计算生物学等诸多领域,并成为优选的优化算法之一。在Optuna、PyGMO等知名数值优化库中都有CMA-ES的实现版本。由于算法理论较为复杂,这里只是简要介绍,可参考文末的扩展阅读材料进一步学习。