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

逻辑回归训练报错:y应为一维数组,却获(234,11)形状数组

问题解决办法

核心原因

报错显示y是形状为(234,11)的多维数组,但逻辑回归模型的fit()方法要求因变量y必须是一维数组。这说明你的y实际上是多列数据,大概率是disp_dummies['hwy']被误处理成了独热编码(One-Hot)的多列,而非原始的单标签列。

具体修复步骤

  • 确认hwy列的原始状态:检查disp_dummies中的hwy是否是独热编码后的多列。如果是,必须使用未做独热编码的原始hwy列作为因变量,而非dummy后的版本。
  • 修正y的取值:如果原始数据集(比如命名为df)有未处理的hwy列,直接从原始数据提取:
    y = df['hwy'].values  # 用原始单标签列,而非dummy后的多列
    
    若disp_dummies是你自行生成的,确保生成dummy时仅处理自变量列,保留hwy为原始列:
    # 示例:仅对自变量列生成dummy,再把原始hwy列加回
    disp_dummies = pd.get_dummies(df.drop('hwy', axis=1))
    disp_dummies['hwy'] = df['hwy']
    
  • 修正训练时的变量使用:你的代码中已将处理后的自变量赋值给X,且完成了数据集划分,训练时应使用划分后的X_train和y_train,而非原始的x、y:
    lr.fit(X_train, y_train)
    
  • 强制转换y为一维数组:若确认y应为一维但实际是多维,可通过以下方式转换:
    y = y.ravel()  # 或 y = y.flatten()
    

修正后的完整示例代码

import pandas as pd
from sklearn.preprocessing import LabelEncoder, OneHotEncoder
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# 假设df是你的原始数据集
df = pd.read_csv('你的数据文件路径.csv')

# 仅对自变量列生成dummy,保留hwy为原始标签列
disp_dummies = pd.get_dummies(df.drop('hwy', axis=1))
disp_dummies['hwy'] = df['hwy']

# 提取自变量和因变量
X = disp_dummies.drop('hwy', axis=1).values
y = disp_dummies['hwy'].values

# 确保y为一维数组
y = y.ravel()

# 划分训练集与测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=0)

# 训练逻辑回归模型
lr = LogisticRegression()
lr.fit(X_train, y_train)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 11:57:23