使用iris数据集训练线性回归模型出现字符串转float报错如何解决
问题原因
Iris数据集默认包含一列类别特征,取值为setosa、versicolor、virginica三类字符串。你构造特征矩阵X时仅剔除了目标列sepal length in cm,没有处理这列字符串类型的特征。sklearn的线性回归模型要求输入的所有特征均为数值类型,无法自动完成字符串到浮点数的转换,因此抛出该错误。
修复方案
有两种可行的处理方式,可根据需求选择:
方案1:直接剔除字符串类型的类别列
如果不需要将类别作为训练特征,直接在构造X时同时剔除目标列和类别列即可。首先执行print(iris_df.columns)确认你的csv文件中类别列的实际列名(通常为species),再修改特征提取代码:
# 同时剔除目标列和字符串类型的类别列 X= iris_df.drop(labels= ['sepal length in cm', 'species'], axis= 1) y= iris_df['sepal length in cm']
方案2:对类别列做数值编码保留特征
如果需要使用类别特征参与训练,可对字符串列做独热编码转换为数值类型:
# 对类别列做独热编码,drop_first避免多重共线性 iris_df_encoded = pd.get_dummies(iris_df, columns=['species'], drop_first=True) # 从编码后的数据中提取特征和标签 X= iris_df_encoded.drop(labels= 'sepal length in cm', axis= 1) y= iris_df_encoded['sepal length in cm']
你可以在构造完X后执行print(X.dtypes)检查所有特征的类型,确认没有object类型的字段后再训练模型,可避免同类转换错误。
内容的提问来源于stack exchange,提问作者Key2020
相关产品推荐
相关产品推荐

