LabelEncoder使用异常求助:训练RandomForestRegressor时出现无法将字符串转为浮点数的ValueError
问题排查与解决方案
嘿,我一眼就揪出问题所在了!你犯了一个很容易踩的变量赋值顺序坑:
- 你先执行了
y = data['Class'],把原始的字符串类型标签存进了y变量; - 之后才用LabelEncoder把
data['Class']转换成数值,但这个操作完全没影响到已经提前赋值好的y。
所以当你把y传入模型训练时,里面还是'veryhigh'这类字符串,模型自然会抛出could not convert string to float的错误。另外还有个小提醒:你的Class明显是分类标签(比如veryhigh是类别),用RandomForestRegressor(回归模型)并不适配,应该换成RandomForestClassifier(分类模型)才对。
修正后的完整代码
import pandas as pd import numpy as np data = pd.read_csv('ohe_label_encoder.csv') data.head(3) # 先处理Class标签的编码,再定义X和y from sklearn.preprocessing import LabelEncoder label = LabelEncoder() data['Class'] = label.fit_transform(data['Class']) X = data.drop('Class', axis = 1) y = data['Class'] # 现在y已经是编码后的数值类型了 # 处理Color和Material的独热编码 from sklearn.preprocessing import OneHotEncoder from sklearn.compose import ColumnTransformer categorical_features = ['Colour','Material'] one_hot = OneHotEncoder() transformer = ColumnTransformer([('one_hot', one_hot, categorical_features)], remainder = 'passthrough') transformed_X = transformer.fit_transform(X) # 划分数据集并训练分类模型 from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier # 替换为适配分类任务的模型 model = RandomForestClassifier() X_train, X_test, y_train, y_test = train_test_split(transformed_X, y, test_size = 0.2) model.fit(X_train, y_train)
关键改动说明
- 调整了流程顺序:先对Class列做编码转换,再定义X和y,确保y是模型能识别的数值类型;
- 把回归模型替换为分类模型,匹配你的任务场景;
- 保留了你原本正确的独热编码逻辑,这部分无需改动。
内容的提问来源于stack exchange,提问作者Ingenious Robotics
相关产品推荐
相关产品推荐

