求助:训练LogisticRegression模型时出现字符串转浮点数错误
解决无法将字符串转换为浮点数的模型训练错误
你遇到的错误是因为训练数据(train_X或train_Y)中存在带双引号的字符串格式数值(比如"840343879668908032"),而逻辑回归模型要求输入必须是数值型数据,无法直接将这类字符串转换为浮点数。
解决步骤
1. 定位问题数据列
先检查哪些列是字符串类型,确认带引号的数值所在位置:
# 查看特征集的数据类型 print(train_attr.dtypes) # 查看标签列的数据类型 print(train_label.dtypes) # 找出特征集中包含字符串的列 string_cols = train_attr.select_dtypes(include=['object']).columns print("字符串类型列:", string_cols)
2. 清洗数据:去除引号并转换为数值型
针对带引号的字符串列,去除引号后转换为浮点数(或整数,如果是整数类型的话):
- 单个列处理:
# 处理特征集中的目标列 train_attr['目标列名'] = train_attr['目标列名'].str.strip('"').astype(float) # 如果是标签列存在问题 train_label = train_label.str.strip('"').astype(float)
- 批量处理所有字符串列:
# 批量处理特征集的所有字符串列 for col in train_attr.select_dtypes(include=['object']).columns: # 去除首尾双引号后转浮点数 train_attr[col] = train_attr[col].str.strip('"').astype(float) # 处理标签列(如果是字符串类型) if train_label.dtype == 'object': train_label = train_label.str.strip('"').astype(float)
3. 处理特殊情况(可选)
如果存在无法转换为数值的字符串(比如缺失值、非数字内容),可以用pd.to_numeric强制转换,无法转换的设为NaN后再处理缺失值:
train_attr['目标列名'] = pd.to_numeric(train_attr['目标列名'].str.strip('"'), errors='coerce') # 填充缺失值(示例用均值填充) train_attr['目标列名'] = train_attr['目标列名'].fillna(train_attr['目标列名'].mean())
4. 重新训练模型
数据清洗完成后,重新转换为numpy数组并训练:
train_X = train_attr.to_numpy() train_Y = train_label.to_numpy() logreg = LogisticRegression().fit(train_X, train_Y)
内容的提问来源于stack exchange,提问作者Krishna Srinivasan
相关产品推荐
相关产品推荐

