构建肝脏疾病检测神经网络时遇字符串转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
相关产品推荐
相关产品推荐

