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

在银行数据上实现Logistic Regression遇ValueError:无法转字符串为浮点数

问题原因

RobustScaler 仅能处理数值型特征,你的训练集 X_train 中包含字符串类型的分类特征(比如报错中的 'low working hours'),这类特征无法直接转换为浮点数,导致抛出 ValueError。

解决方案

先识别并处理所有字符串/分类特征,再对数值特征进行缩放,以下是两种常用处理方式:

1. 序数编码(适用于有序分类特征)

如果分类特征存在明确顺序(如 low working hours < medium working hours < high working hours),可以用序数编码将字符串映射为有序数值:

from sklearn.preprocessing import OrdinalEncoder
import pandas as pd

# 筛选所有字符串类型特征
categorical_cols = X_train.select_dtypes(include=['object']).tolist()

# 初始化编码器,指定分类顺序(以工作时长为例)
ordinal_encoder = OrdinalEncoder(categories=[['low working hours', 'medium working hours', 'high working hours']])

# 对训练集和测试集的分类特征编码
X_train[categorical_cols] = ordinal_encoder.fit_transform(X_train[categorical_cols])
X_test[categorical_cols] = ordinal_encoder.transform(X_test[categorical_cols])

# 再进行RobustScaler缩放
scaler = RobustScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

2. 独热编码(适用于无序分类特征)

如果分类特征无明确顺序(如职业、地区),用独热编码将其转换为二进制特征,避免模型错误学习顺序关系:

from sklearn.preprocessing import RobustScaler, OneHotEncoder
from sklearn.compose import ColumnTransformer

# 区分数值特征和分类特征
numeric_cols = X_train.select_dtypes(exclude=['object']).tolist()
categorical_cols = X_train.select_dtypes(include=['object']).tolist()

# 构建预处理流水线,同时处理两类特征
preprocessor = ColumnTransformer(
    transformers=[
        ('num_scaler', RobustScaler(), numeric_cols),
        ('cat_encoder', OneHotEncoder(sparse_output=False, drop='first'), categorical_cols)
    ])

# 应用预处理(训练集fit+transform,测试集仅transform)
X_train_processed = preprocessor.fit_transform(X_train)
X_test_processed = preprocessor.transform(X_test)
注意事项
  • 必须保证训练集和测试集使用相同的编码规则:仅在训练集上调用 fit(),测试集只调用 transform(),避免数据泄露。
  • 有序分类优先用序数编码,无序分类用独热编码,否则会影响模型效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:55:27