运行logistic回归出现ValueError报错的解决方法咨询
报错原因说明
这个ValueError的核心原因是你传入逻辑回归模型的因变量MEDVBIN不符合输入要求:要么是取值为非数值类型(比如字符串、布尔值),要么是切片取数时返回了二维结构的DataFrame而非一维的Series,导致被模型识别为多列数据。
具体解决方案
步骤1:先定位问题
运行以下代码查看因变量的类型和维度:
# 查看MEDVBIN列的数据类型 print(df['MEDVBIN'].dtype) # 查看MEDVBIN列的结构 print(df['MEDVBIN'].shape)
如果输出的类型是object/bool,或者维度输出为(506, 1)/(506, 2),就对应匹配下方的修复方案。
步骤2:对应问题修复
- 如果是数据类型异常:
将MEDVBIN转换为数值型,二分类场景确保列的取值只有0和1:
# 转换为整数类型,布尔值会自动转为0/1,数值型字符串也会转成对应整数 df['MEDVBIN'] = df['MEDVBIN'].astype(int)
转换前可先确认列内无异常字符或缺失值,避免转换报错。
- 如果是取数维度异常:
取因变量时不要用双中括号切片,双中括号返回的是二维DataFrame,改为单中括号取一维Series即可:
# 错误写法,返回二维结构 y = df[['MEDVBIN']] # 正确写法,返回一维结构 y = df['MEDVBIN']
步骤3:重新运行模型
修复后再运行逻辑回归代码即可,示例如下(以statsmodels为例):
import statsmodels.api as sm # 取自变量 X = df[['CRIM', 'RM', 'NOX', 'DIS', 'AGE']] # 若需要截距项则加这行 X = sm.add_constant(X) # 取处理好的因变量 y = df['MEDVBIN'] # 训练模型 logit_model = sm.Logit(y, X).fit() # 输出结果 print(logit_model.summary())
内容的提问来源于stack exchange,提问作者Nazim
相关产品推荐
相关产品推荐

