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

使用逻辑回归预测电信用户流失时遇ValueError错误求助

问题:逻辑回归模型训练时出现ValueError:Pandas数据无法转换为numpy数值类型

我在尝试用逻辑回归模型预测电信用户流失时,遇到了如下数据类型转换错误:

ValueError: Pandas data cast to numpy dtype of object. Check input data with np.asarray(data)

我的代码如下:

# Putting feature variable to X
X = churn_data.drop(['churn_status','Ph_No.'],axis=1)
# Putting response variable to y
y = churn_data['churn_status']
X_train, X_test, y_train, y_test = train_test_split(X,y, train_size=0.7,test_size=0.3,random_state=100)
logm1 = sm.GLM(y_train,(sm.add_constant(X_train)), family = sm.families.Binomial())
logm1.fit().summary()

排查与解决步骤

这个错误的核心原因是你的训练特征(X_train)中存在object类型的列,statsmodels的GLM模型无法直接处理字符串或非数值型的特征,必须先将它们转换为数值类型。下面是具体的解决流程:

1. 定位问题特征

首先运行这段代码,查看所有特征的数据类型,找出那些类型为object的列:

print(X_train.dtypes)

这些object类型的列(比如字符串形式的类别、未转换的文本字段)就是导致错误的元凶。

2. 处理非数值型特征

根据特征的实际类型,选择对应的转换方式:

  • 类别型特征(如套餐类型、用户性别):
    推荐使用独热编码(One-Hot Encoding),避免标签编码带来的顺序偏差。示例代码:
    # 替换成你实际的object类型特征列名
    categorical_cols = ['plan_type', 'gender']
    X_train = pd.get_dummies(X_train, columns=categorical_cols, drop_first=True)
    X_test = pd.get_dummies(X_test, columns=categorical_cols, drop_first=True)
    
    注意:必须保证训练集和测试集的编码规则一致,否则会出现特征不匹配的问题。
  • 被误识别为object的数值型特征:
    如果某列本质是数值,但被识别为object(比如带逗号的数字、含异常字符的数值),可以强制转换为数值类型:
    # 替换成目标列名
    X_train['monthly_charge'] = pd.to_numeric(X_train['monthly_charge'], errors='coerce')
    # 处理转换产生的NaN值(比如用均值填充)
    X_train['monthly_charge'].fillna(X_train['monthly_charge'].mean(), inplace=True)
    X_test['monthly_charge'] = pd.to_numeric(X_test['monthly_charge'], errors='coerce')
    X_test['monthly_charge'].fillna(X_train['monthly_charge'].mean(), inplace=True)
    
  • 无意义的文本/冗余特征:
    如果某些object列对模型没有帮助(比如用户ID、随机字符串),可以直接删除:
    X_train = X_train.drop(['useless_text_col'], axis=1)
    X_test = X_test.drop(['useless_text_col'], axis=1)
    

3. 验证转换结果

再次运行print(X_train.dtypes),确认所有特征的类型都是int64或float64这类数值型,没有剩余的object列。

4. 重新训练模型

完成数据预处理后,重新运行你的模型代码:

logm1 = sm.GLM(y_train, sm.add_constant(X_train), family=sm.families.Binomial())
model_result = logm1.fit()
print(model_result.summary())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:28:00