如何提取sklearn中SequentialFeatureSelector的最佳估计器?
关于SequentialFeatureSelector提取最优模型的方法
首先明确:SequentialFeatureSelector(简称SFS)核心是筛选特征,本身不会直接存储训练好的最优模型,但你可以通过以下步骤复刻出对应模型:
1. 获取最优特征子集
训练完成后,直接通过selected_features_属性拿到SFS筛选出的最优特征索引:
# 假设你的SFS实例名为sfs best_feature_indices = sfs.selected_features_
2. 复刻基础模型并重新训练
用筛选后的特征,结合SFS中基础模型的参数配置,重新训练最优模型:
# 假设原始特征矩阵为X,标签为y X_best = X[:, best_feature_indices] # 从SFS的参数中提取你当初传入的基础模型配置 base_estimator_params = sfs.get_params()['estimator'] # 初始化相同配置的基础模型(以RandomForestClassifier为例) from sklearn.ensemble import RandomForestClassifier best_model = RandomForestClassifier(**base_estimator_params) # 用最优特征子集训练模型 best_model.fit(X_best, y)
关于get_params()的说明
get_params()返回的是SFS的全部配置参数,其中estimator字段对应你当初传入的基础模型的参数集合。比如你初始化SFS时用了estimator=RandomForestClassifier(n_estimators=100, max_depth=5),那sfs.get_params()['estimator']就会返回{'n_estimators': 100, 'max_depth': 5, ...}这类参数,用它就能复刻出和当初一致的基础模型。
关键注意点
- 不要直接用SFS的
estimator_属性:这个属性存储的是SFS最后一步训练的模型,不一定对应最优特征子集的模型。 - 若基础模型有随机状态参数(比如
random_state),务必保持参数一致,才能保证重新训练的模型结果和SFS筛选时的最优模型匹配。
内容的提问来源于stack exchange,提问作者Maxipet
相关产品推荐
相关产品推荐

