传统特征选择会涉及到贪心算法、前向搜索、后向搜索的知识,通过本文,更好的认识三者的概念,并结合三个具体的例子,加深对三者的理解,为后面学习传统的特征选择做准备。
一、贪心算法、前向搜索和后向搜索
贪心算法、前向搜索和后向搜索都是解决优化问题时常用的策略,但它们的应用范围和侧重点有所不同,下面分别说明它们的概念、联系与区别:
1. 贪心算法
- 概念:
贪心算法是一种构造解的策略,在每一步都选择在当前看来最优的选项(即局部最优解),期望通过这种局部最优的选择最终获得全局最优解。 - 特点:
- 每一步只关注局部最优,不回溯修改之前的决策。
- 计算效率高,但不保证能找到全局最优解,适用于满足贪心选择性质和最优子结构的问题。
2. 前向搜索(前向选择)
- 概念:
前向搜索是一种特征选择方法,它是一种具体的贪心算法。其基本思想是:- 从一个空的特征集合开始,逐步将最能提升模型性能的特征添加到集合中,直到满足停止条件(例如,添加任何特征都不能显著改善模型性能或达到预设的特征数量)。
- 特点:
- 每一步都只选择当前最有利的特征。
- 容易实现,但可能错过特征之间的协同作用,因为它不考虑后续可能的组合效果。
3. 后向搜索(后向消除)
- 概念:
后向搜索也是一种特征选择方法,采用贪心策略,但与前向搜索相反。其基本思想是:- 从包含所有特征的集合开始,逐步移除对模型性能影响最小的特征,直到进一步移除会导致性能显著下降或达到预设标准。
- 特点:
- 开始时考虑所有特征,逐步消除冗余或噪声特征。
- 计算成本较高,尤其当初始特征数很多时。
三者之间的联系与区别
-
联系:
- 贪心算法思想:前向搜索和后向搜索都是基于贪心算法的策略,在每一步都做出局部最优的决策,希望构造出整体上较优的特征子集。
- 目标一致:它们都旨在从高维特征中挑选出能使模型性能最优的子集,最终提高模型的泛化能力和计算效率。
-
区别:
- 起始点不同:
- 前向搜索从空集开始,每一步添加一个最优特征;
- 后向搜索从全特征集开始,每一步剔除一个影响最小的特征。
- 搜索方向:
- 前向搜索关注的是“逐步构建”模型;
- 后向搜索关注的是“逐步简化”模型。
- 计算成本和风险:
- 前向搜索在开始时计算量较小,但可能遗漏后续特征间的协同作用;
- 后向搜索一开始需要考虑所有特征,计算量较大,但在某些情况下能更全面地评估特征重要性。
- 起始点不同:
结论
- 贪心算法是一种普适的算法策略,旨在每步选择局部最优。
- 前向搜索和后向搜索是应用于特征选择中的两种具体贪心策略,它们都在尝试从所有可能的特征组合中寻找一个最优(或近似最优)的子集。
- 前向搜索从空集开始逐步构建,而后向搜索从全集开始逐步消除,两者在实际应用中各有优缺点,但都共享贪心算法的基本思想。
这种划分和理解有助于在实际机器学习项目中,根据数据特点和计算资源,选择合适的特征选择策略,从而优化模型性能。
二、应用举例
下面分别给出三个简单易懂的例子,分别说明贪心算法、前向搜索和后向搜索的基本思想和过程。
1. 贪心算法的例子:零钱找零问题
问题描述:
假设你需要找零 37 分(或 37 单位货币),你拥有的硬币面额有 25、10、5 和 1 分。目标是使用尽可能少的硬币来凑够 37 分。
贪心算法思路:
每一步都选取不超过当前剩余金额的最大面额的硬币。
求解过程:
- 当前需要找零 37 分,最大面额不超过 37 的是 25 分,选一个 25 分硬币后,剩余 37 - 25 = 12 分。
- 接下来需要找零 12 分,最大面额不超过 12 的是 10 分,选一个 10 分硬币后,剩余 12 - 10 = 2 分。
- 现在剩余 2 分,最大面额不超过 2 的是 1 分,选两个 1 分硬币,剩余 0 分。
结果:
共用了 1 个 25 分、1 个 10 分和 2 个 1 分硬币,总共 4 个硬币完成找零。
这种每一步都做局部最优选择的策略就是贪心算法,它的优点是简单高效,但需要满足贪心选择性质才能得到全局最优解。
2. 前向搜索的例子:特征选择(前向选择)
问题描述:
假设我们有一个小数据集用于预测房价,原始特征有三个:面积(A)、房龄(B)、楼层(C)。目标是从这三个特征中选择一个子集,使得用这些特征建立的模型在预测房价时效果最好。
前向搜索思路:
从空集合开始,每一步选择一个能使模型性能(如预测准确率或均方误差)最优提升的特征,直到没有特征可以进一步显著改善模型。
求解过程:
- 初始阶段:
- 空集合:{}
- 分别使用单个特征建立模型,得到三个模型的性能评估。例如,模型用 A 得到的性能最好。
- 第一步:
- 选择特征 A,当前特征集为 {A}。
- 第二步:
- 在剩余的特征 {B, C} 中,尝试分别将 B 或 C 加入当前特征集,构建两个模型 {A, B} 和 {A, C}。
- 假设模型 {A, B} 的性能比 {A, C} 更优,则选择 B,当前特征集变为 {A, B}。
- 停止条件:
- 如果加入 C 后模型性能没有明显提升,则停止搜索,最终选定的特征子集为 {A, B}。
这种方法通过逐步添加特征,寻找使模型性能逐步提升的最佳特征组合,典型的贪心策略。
3. 后向搜索的例子:特征选择(后向消除)
问题描述:
还是考虑前面的房价预测问题,数据集包含三个特征:面积(A)、房龄(B)、楼层(C)。但这次我们从全特征集开始,希望通过逐步剔除不重要的特征来简化模型。
后向搜索思路:
从包含所有特征的集合开始,每一步移除对模型性能影响最小的特征,直到移除任何特征都会使模型性能明显下降为止。
求解过程:
- 初始阶段:
- 全特征集合:{A, B, C}。
- 构建模型并评估整体性能。
- 第一步:
- 分别尝试移除 A、B、C 中的每一个特征,得到三个模型:{B, C}、{A, C}、{A, B}。
- 比较三个模型的性能,假设移除 C 后模型性能下降最小,则认为 C 对模型贡献较小,将 C 移除。
- 当前特征集为 {A, B}。
- 第二步:
- 继续尝试从 {A, B} 中移除一个特征,评估移除 A 和移除 B 对模型性能的影响。如果移除任一特征后性能都会明显下降,则停止。
- 最终结果:
- 最终选定的特征子集为 {A, B}。
后向搜索从全特征集出发,通过逐步消除冗余或噪声特征,达到简化模型、提高泛化能力的目的。
总结
-
贪心算法:
通过每一步选择局部最优决策(例如零钱找零问题),来构造全局解。 -
前向搜索:
从空集合开始逐步添加特征,每一步都选择能够使模型性能最大提升的特征。 -
后向搜索:
从全特征集开始逐步消除特征,每一步移除对模型影响最小的特征,直到进一步移除会显著降低模型性能。
这三个方法都基于贪心策略,但应用场景和搜索方向不同,通过这样的特征子集搜索,能够在高维数据中找到对模型最有用的特征组合。