You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python的mlxtend执行前向逐步特征选择时得分返回NaN的技术问题求助

解决Sequential Feature Selection返回NaN得分的问题

这个问题的核心原因很明确:你给分类模型用了回归任务的评分指标!

你用的RandomForestClassifier是分类模型,但指定了scoring="r2"——r²是专门用于回归任务的指标,分类模型的预测结果(类别标签或概率)无法用r²计算,所以所有步骤的得分都返回了NaN。

下面是具体的解决方案:

1. 匹配任务类型与评分指标

如果你的任务是分类任务(y是离散类别),把评分指标换成分类任务适用的选项,比如:

  • accuracy:准确率(最常用的分类指标)
  • f1_macro:宏平均F1分数(适合不平衡数据集)
  • roc_auc:ROC曲线下面积(适合二分类或多分类概率输出)

修改后的代码示例:

x_train, x_test = train_test_split(x, test_size = 0.2, random_state = 0)
y_train, y_test = train_test_split(y, test_size = 0.2, random_state = 0)

# 替换为分类任务的评分指标
sfs = SFS(
    RandomForestClassifier(n_estimators=100, random_state=0, n_jobs = -1),
    k_features = 28,
    forward = True,
    floating = False,
    verbose= 2,
    scoring= "accuracy",  # 这里改成分类指标
    cv = 4,
    n_jobs = -1 
).fit(x_train, y_train)

2. 确认任务类型,选择正确的模型

如果你的任务实际是回归任务(y是连续数值),那应该使用回归模型而非分类模型,此时r2指标是适用的。把RandomForestClassifier换成RandomForestRegressor即可:

from sklearn.ensemble import RandomForestRegressor

x_train, x_test = train_test_split(x, test_size = 0.2, random_state = 0)
y_train, y_test = train_test_split(y, test_size = 0.2, random_state = 0)

# 使用回归模型,保留r2评分
sfs = SFS(
    RandomForestRegressor(n_estimators=100, random_state=0, n_jobs = -1),
    k_features = 28,
    forward = True,
    floating = False,
    verbose= 2,
    scoring= "r2",
    cv = 4,
    n_jobs = -1 
).fit(x_train, y_train)

3. 额外排查点(如果上述方案无效)

  • 检查数据集是否存在缺失值:用x_train.isnull().sum()和y_train.isnull().sum()查看,缺失值可能导致模型预测异常,进而出现NaN得分。
  • 确认标签y的格式:分类任务中y应该是整数或字符串类型的类别,回归任务中y应该是连续数值类型。

内容的提问来源于stack exchange,提问作者Ankur Sharma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 06:54:36