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

多标签ML模型训练报错求助:输入变量样本数不一致

解决多标签模型训练时的样本数不匹配ValueError

错误原因

触发ValueError: Found input variables with inconsistent numbers of samples: [75, 3]的核心问题是**MultiLabelBinarizer使用方式错误**:

  • 你传入了包含3列的DataFrame(dataset[['ERR1', 'ERR2', 'ERR3']]),但MultiLabelBinarizer默认会把每一列识别为一个样本,导致输出的y仅包含3个样本;
  • 而特征集X提取自原数据集的75个样本,两者样本数不匹配,引发错误。

解决方法

需要将每行的ERR1、ERR2、ERR3合并为一个标签列表,过滤掉空值后再传入MultiLabelBinarizer:

修正后的代码

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MultiLabelBinarizer
from skmultilearn.adapt import MLkNN
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, hamming_loss

dataset = pd.read_csv("G:\work\ML\PythonEV1\Insurance Model\Data Files\sample_dataset.csv")
dataset.fillna("", inplace=True)

X = dataset[['ICD1', 'ICD2', 'ICD3', 'ICD4', 'CPT1', 'CPT2', 'CPT3', 'CPT4', 'CPT5', 'CPT6', 'CPT7', 'CPT8', 'CPT9', 'CPT10']]

# 关键修正:将每行的三个ERR列合并为标签列表,过滤空字符串
y_labels = dataset[['ERR1', 'ERR2', 'ERR3']].apply(lambda row: [x for x in row if x != ""], axis=1)
mlb = MultiLabelBinarizer()
y = mlb.fit_transform(y_labels)

# 样本数匹配,可正常拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42, shuffle=True)

额外提示

  1. 特征集X中的ICD/CPT列均为字符串类型,后续训练前需做编码处理(如OneHotEncoder、标签编码,或针对医疗编码的专用嵌入方法),否则模型无法处理非数值特征;
  2. 若数据存在全空的标签行(ERR1/ERR2/ERR3均为空),y_labels会生成空列表,MultiLabelBinarizer会将其转为全0向量,可根据业务需求决定是否保留这类样本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 23:32:31