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

解决sklearn GridSearchCV训练时报TypeError: must be real number, not str问题

报错根因

错误出在SVC模型训练阶段,底层libsvm库检测到输入特征/标签中存在字符串类型数据,无法进行数值计算。你仅对训练集做了数值类型转换,测试集未同步转换,且数据读取阶段大概率存在隐藏的字符串类型特征列,同时代码本身存在两处语法类错误也会导致后续运行失败。

解决步骤

  • 第一步:先排查特征数据集的类型,在Grid1.fit(x, y)之前插入以下代码,确认是否存在字符串列:
# 打印所有列的类型,以及是否存在字符串值
print(x.dtypes)
print(x.applymap(type).eq(str).any())

如果存在object类型列,先做数值转换,空值先填充或者删除:

# 所有特征强制转数值,无法转换的设为空值后删除
x = x.apply(pd.to_numeric, errors='coerce').dropna()
y = y[x.index] # 同步过滤标签
  • 第二步:统一处理所有输入数据的类型,函数调用时给测试集也做类型转换:
result_using_non_tree_classifier(x_train.astype(int), x_test.astype(int), y_train.astype(int), y_test.astype(int))
  • 第三步:修正参数字典的键名不统一问题,把GaussianNB对应的参数键从params改为param,避免后续遍历到该模型时抛出KeyError:
'GaussianNB' : {'model': GaussianNB(),
                'param':{}
               }
  • 第四步:修正结果字典的键名错误,把best_parameter改为best_params,和返回DataFrame的列名对应,避免返回空值:
scores.append({
    'model' : algo_name,
    'best_score': Grid1.best_score_ ,
    'best_params': Grid1.best_params_
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:54:03