多标签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)
额外提示
- 特征集
X中的ICD/CPT列均为字符串类型,后续训练前需做编码处理(如OneHotEncoder、标签编码,或针对医疗编码的专用嵌入方法),否则模型无法处理非数值特征; - 若数据存在全空的标签行(ERR1/ERR2/ERR3均为空),
y_labels会生成空列表,MultiLabelBinarizer会将其转为全0向量,可根据业务需求决定是否保留这类样本。
内容的提问来源于stack exchange,提问作者user1578992
相关产品推荐
相关产品推荐

