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

使用imblearn的classification_report_imbalanced遇样本量不一致错误

问题分析

报错Found input variables with inconsistent numbers of samples: [200, 807]的核心是传入classification_report_imbalanced的真实标签和预测标签样本数量不匹配:200是测试集样本数(对应test_size=0.2的分割结果),807应该是训练集或全量数据集的样本数,说明你调用函数时传错了参数。

解决方案

1. 明确classification_report_imbalanced的调用规则

该函数必须按「真实标签在前,预测标签在后」的顺序传参,且两者必须是长度完全一致的一维数组:

classification_report_imbalanced(y_true, y_pred)

2. 修改评估函数,正确集成指标

更新你的evaluate_model函数,加入该指标的正确调用,还可以加个断言提前排查问题:

def evaluate_model(model, X_test, y_test):
    y_pred = model.predict(X_test)
    # 提前验证样本数是否匹配,避免后续报错
    assert len(y_test) == len(y_pred), "真实标签和预测标签样本数对不上"
    
    accuracy = accuracy_score(y_test, y_pred)
    precision = precision_score(y_test, y_pred)
    recall = recall_score(y_test, y_pred)
    f1 = f1_score(y_test, y_pred)
    # 正确调用imblearn的不平衡分类报告函数
    imbalanced_report = classification_report_imbalanced(y_test, y_pred)
    return accuracy, precision, recall, f1, imbalanced_report

3. 调整结果收集逻辑

遍历模型时接收新增的分类报告,按需打印或保存:

results = []
for name, model in models:
    model.fit(X_train, y_train)
    accuracy, precision, recall, f1, imbalanced_report = evaluate_model(model, X_test, y_test)
    results.append([name, accuracy, precision, recall, f1])
    # 打印当前模型的不平衡分类报告
    print(f"=== {name} 不平衡分类报告 ===")
    print(imbalanced_report)

4. 验证真实数据集的加载与分割

如果你用的是心脏病数据集,要确保数据处理没有问题:

import pandas as pd

# 加载数据集(确认文件路径正确)
df = pd.read_csv("heart_disease_dataset.csv")
# 分离特征和标签(替换成你实际的标签列名)
X = df.drop("target", axis=1)
y = df["target"]

# 分割后验证样本数一致
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
assert len(X_test) == len(y_test), "测试集特征和标签样本数不匹配"
常见踩坑点
  • 别把二维的X_test(特征数组)当成标签传入函数
  • 别搞混y_train和y_test,必须用测试集的真实标签+对应预测结果做评估
  • 模型预测时一定要传X_test,而非X_train

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 18:03:26