特征递归消除法选择最优特征子集时,代码每次运行产生的最优特征子集不同

本文介绍了如何通过设置随机种子、增加交叉验证折数以及使用稳定的模型来解决特征递归消除法(RFECV)中因模型训练随机性导致的特征子集不一致问题。作者提供了使用决策树和随机森林示例,以及如何利用集成方法来稳定特征选择过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当使用特征递归消除法(如 RFECV)选择最优特征子集时,如果每次运行产生的最优特征子集不同,这通常是因为模型训练过程中存在随机性(例如,在决策树和随机森林中的特征选择和分裂点选择,或者在交叉验证的数据划分中)。为了解决这个问题,使得特征选择过程更加稳定,您可以尝试以下几种方法:

  1. 设置随机种子:确保在模型训练和数据划分过程中设置固定的随机种子,以确保每次运行的结果一致。

  2. 增加交叉验证的折数:使用更多的交叉验证折数可以提高特征选择的稳定性,但也会增加计算时间。

  3. 使用稳定的模型:某些模型(如决策树)比其他模型(如逻辑回归)具有更高的随机性。尝试使用更稳定的模型可能会减少特征选择的变异性。

  4. 集成方法:可以通过多次运行特征选择过程并记录每个特征被选中的次数,然后选择那些被频繁选中的特征作为最终的特征集。

    import pandas as pd
    import numpy as np
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.feature_selection import RFECV
    from sklearn.model_selection import StratifiedKFold
    
    # 假设 data 和 y 已经准备好
    # data = pd.read_excel("./data/result_gen.xlsx")
    # y = data["PVT"]
    # del data["PVT"]
    # del data["编号"]
    
    # 设置随机种子
    np.random.seed(42)
    
    # 创建一个决策树模型,设置随机种子(如果适用)
    estimator = DecisionTreeClassifier(random_state=42)
    
    # 创建一个带有更多折数的交叉验证生成器
    cv = StratifiedKFold(n_splits=10, shuffle=True, random_state=42)
    
    # 创建RFE选择器
    selector = RFECV(estimator, step=1, scoring="accuracy", cv=cv)
    
    # 拟合数据
    selector = selector.fit(data, y)
    
    # 输出选定的特征
    print("Selected features:", data.columns[selector.support_])
    
    # 输出特征排名
    print("Feature ranking:", selector.ranking_)

    在上述代码中,通过设置随机种子(np.random.seed(42) 和 random_state=42)来确保每次运行的结果一致。此外,使用了 StratifiedKFold 来进行更稳定的交叉验证,并设置了 n_splits=10 来增加交叉验证的折数。这些改动有助于提高特征选择过程的稳定性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值