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

构建肝脏疾病检测神经网络时遇字符串转float错误的原因咨询

问题根源分析

你误解了报错的来源:错误不是出在标签列(Class),而是出在特征数据集X里。

报错发生在scaler.fit_transform(X_train)这一步——StandardScaler只能处理数值型数据,但你的特征集X(即去掉Class列后的Liver_data)里包含字符串类型的特征(比如性别列,值为'Male'/'Female'),所以在标准化时无法将字符串转换为浮点数,才抛出这个错误。

解决方案

需要先对特征集中的字符串类型分类特征做编码转换,再进行标准化处理,以下是两种常用方法:

方法1:标签编码(适用于二分类特征,如性别)

如果性别只有'Male'和'Female'两个取值,可以用标签编码将其转为0/1的数值:

from sklearn.preprocessing import LabelEncoder
import pandas as pd

# 假设性别列名为'Gender'
le = LabelEncoder()
Liver_data['Gender'] = le.fit_transform(Liver_data['Gender'])

# 再执行后续的拆分和标准化步骤
X = Liver_data.drop('Class',axis=1)
y = Liver_data['Class'] -1

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, stratify=y, random_state=99)

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

方法2:独热编码(适用于多分类特征)

如果特征有多个类别,推荐用独热编码避免类别间的顺序歧义:

import pandas as pd

# 对所有字符串类型列做独热编码,drop_first=True避免多重共线性
Liver_data = pd.get_dummies(Liver_data, drop_first=True)

# 后续步骤同上
X = Liver_data.drop('Class',axis=1)
y = Liver_data['Class'] -1

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, stratify=y, random_state=99)

scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
额外提示

处理前可以先查看数据集的列类型,确认哪些是字符串列:

print(Liver_data.dtypes)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 04:25:23