Logistic Regression拟合报"bad input shape",多标签y_train是否可用?
关于Logistic Regression触发"bad input shape"的解答
直接答复:你当前形状为(187,5)的嵌套数组形式y_train,不能直接传入默认配置的Logistic Regression进行训练,这就是触发"bad input shape"报错的核心原因。
报错触发逻辑
sklearn内置的Logistic Regression默认仅支持单标签分类任务:
- 对训练目标
y的强制校验规则为一维结构,要求形状为(n_samples,),即每个样本仅对应1个分类标签值 - 你当前的
y_train是典型的多标签格式:每一个样本对应5个独立的0/1标签,意味着一个样本可以同时属于多个类别,这种二维结构的y不符合默认输入要求,因此会被形状校验逻辑拦截抛出报错 - 你的
X_train形状(187, 12432)完全符合Logistic Regression的样本输入要求,只要X和y的样本数一致,哪怕特征维度很高,也不会触发这个形状报错
可行的适配方案
不需要修改现有y_train的结构,通过sklearn提供的多标签包装类即可正常训练:
- 引入
MultiOutputClassifier对基础Logistic Regression做封装,封装后的模型会自动适配二维结构的多标签y - 封装逻辑的本质是对y的每一列标签单独训练一个独立的Logistic Regression二分类器,最终将5个列的预测结果拼接为多维度输出,完全匹配你当前的y结构
可直接复用的代码片段:
from sklearn.linear_model import LogisticRegression from sklearn.multioutput import MultiOutputClassifier # 初始化支持多标签的分类器 model = MultiOutputClassifier(LogisticRegression()) # 直接传入当前形状的X_train、y_train即可完成训练,不会再触发形状报错 model.fit(X_train, y_train)
注意:这种独立列训练的方式默认假设5个标签之间不存在关联,如果标签间存在强相关关系,后续可以基于任务精度需求调整多标签适配方法,但就解决输入形状报错的目标来说,上述方案完全可用。
内容的提问来源于stack exchange,提问作者Roobesh Balaji
相关产品推荐
相关产品推荐

