使用RFE进行特征选择未返回指定数量特征的问题排查
RFE指定选15个特征却返回全部特征的问题解决
核心问题:你没写错代码,是输出解读错了
你当前的代码是把所有100个特征的选择状态(support_)和排名(ranking_)都列出来了,不是只展示被选中的15个。rfe.support_里只有15个True,剩下的都是False;rfe.ranking_里排名为1的就是被选中的特征,其他特征排名大于1。
快速获取选中的15个特征
直接用下面的代码提取真正被选中的特征:
- 方法1:用布尔索引筛选
# 提取被选中的特征列名 selected_features = X_train.columns[rfe.support_] # 验证数量 print(len(selected_features)) # 这里会输出15 print(selected_features)
- 方法2:通过排名筛选(排名=1的就是选中的)
selected_features = [col for col, rank in zip(X_train.columns, rfe.ranking_) if rank == 1] print(selected_features)
如果还是选不出15个?排查这2点
要是上面的代码输出数量不是15,就得检查模型和数据的问题:
- 先给数据做标准化:LogisticRegression默认用L2正则,没标准化的话,不同量级的特征权重会被干扰,RFE没法准确区分特征优劣。
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_train_scaled = scaler.fit_transform(X_train) # 用标准化后的数据重新跑RFE rfe = RFE(estimator=LogisticRegression(), n_features_to_select=15) rfe.fit(X_train_scaled, y_train)
- 检查因变量分布:如果y_train是极端不平衡的(比如90%都是同一类别),模型可能会选一堆无意义的特征,导致RFE的选择逻辑失效。可以先看分布:
print(y_train.value_counts())
内容的提问来源于stack exchange,提问作者JacksonM
相关产品推荐
相关产品推荐

