逻辑回归训练报错: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
相关产品推荐
相关产品推荐

