机器学习-特征选择-序列后向选择Sequential Backward Selection方法

本文介绍了Sequential Backward Selection(SBS)算法的基本思想,该算法通过逐步移除特征来寻找最佳特征子集。SBS通过定义一个准则函数来衡量移除特定特征后模型性能的变化,并在每步中移除导致性能损失最小的特征。文中还提供了Python代码实现和运行结果,指出特征选择对于避免冗余和提高模型训练效果的重要性。
Section I: Brief Introduction on Sequential Backward Selection方法

The idea behind the SBS algorithm is quite simple: SBS sequentially removes features from the full feature subset until new feature subspace contains the desired number of features. In order to determine which feature is to be removed at each stage, we need to define the criterion function J that we want to minimize.The criterion calculated by the criterion function can simply be the difference in performance of the classifier before and after the removal of a particular feature. Then, the feature to be removed at each stage can simply be defined as the feature that maximizes this criterion;or in more intuitive terms,at each stage we eliminate the feature that causes the least performance loss after removal.
Personal Views:

  1. 每一步依据当前特征组合,选择模型训练泛化性能最佳者
  2. 下一步的特征组合是前一步特征空间的子集

From
Sebastian Raschka, Vahid Mirjalili. Python机器学习第二版. 南京:东南大学出版社,2018.

Section II: Code Implementation and Feature Selection

第一部分:Code Bundle of Sequential Backward Selection

from sklearn.base import clone
from itertools import combinations
import numpy as np
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

class SBS():
    def __init__(self,estimator,k_features,
                 scoring=accuracy_score,
                 test_size=0.25,random_state=1):
        self.scoring=scoring
        self.estimator=clone(estimator)
        self.k_features=k_features
        self.test_size=test_size
        self.random_state=random_state

    def fit
### SFS(后向特征选择方法详解 **SFS(Sequential Feature Selection序列特征选择)** 是一种经典的特征选择方法,根据搜索方向的不同可以分为前向特征选择(Forward Sequential Feature Selection)和后向特征选择Backward Sequential Feature Selection)。其中后向特征选择是一种从完整特征集开始逐步剔除冗余特征的策略。 #### 实现步骤 1. **初始化特征集**:从数据集中所有特征开始,即包含所有特征的集合。 2. **评估子集性能**:使用指定的模型和评分标准对当前特征集进行评估。通常使用交叉验证来提高评估的稳定性[^3]。 3. **移除一个特征**:在每一步中,尝试移除一个特征,并计算移除后模型的性能。选择使模型性能下降最小的特征进行删除。 4. **重复迭代**:不断重复第2步和第3步,直到达到指定的特征数量或满足停止条件。 5. **选择最优子集**:在整个过程中记录不同特征子集的性能,最终选择性能最佳的特征子集。 #### 示例代码(Python) 以下是一个使用 `mlxtend` 库实现 SFS 后向特征选择的示例: ```python from sklearn.neighbors import KNeighborsClassifier from sklearn.datasets import load_iris from mlxtend.feature_selection import SequentialFeatureSelector as SFS # 加载数据 iris = load_iris() X, y = iris.data, iris.target # 初始化分类器 knn = KNeighborsClassifier(n_neighbors=4) # 创建SFS对象(设置 forward=False 表示使用后向选择) sfs = SFS(knn, k_features=2, # 期望选择的特征数量 forward=False, # 设置为后向选择 floating=False, scoring='accuracy', cv=0) # 执行特征选择 sfs.fit(X, y) # 查看结果 print(sfs.subsets_) ``` 上述代码展示了如何使用 `mlxtend` 的 `SequentialFeatureSelector` 来执行后向特征选择。通过设置 `forward=False`,表示采用后向选择策略[^1]。 #### 应用场景 1. **高维数据处理**:当数据集中存在大量特征时,后向特征选择可以帮助识别并剔除冗余或无关紧要的特征,从而减少计算开销并提升模型泛化能力。 2. **模型优化**:适用于需要提升模型精度或降低过拟合风险的场景,特别是在特征之间存在较强相关性的情况下。 3. **资源受限环境**:在硬件资源有限的环境中,减少特征数量有助于部署轻量级模型。 4. **可解释性需求**:某些领域(如医疗、金融)对模型的可解释性要求较高,后向特征选择能够帮助构建更简洁且易于解释的模型。 #### 优缺点分析 - **优点**: - 能够有效减少特征维度,提升模型效率。 - 相比穷举法(如所有可能子集搜索),计算复杂度较低。 - 适用于多种机器学习模型,具有良好的通用性。 - **缺点**: - 属于贪心算法,不能保证找到全局最优解。 - 对于特征间复杂的交互关系考虑不足。 - 每次只添加或删除一个特征,可能导致收敛速度较慢。 ---
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值