sklearn Pipeline文本转换后运行RandomForestClassifier报int与str比较TypeError
错误根因
报错发生在模型对目标标签Y进行合法性校验的阶段,和你编写的特征处理Pipeline无关。根本原因是你的Y标签序列中混合存储了int和str两种类型的值,比如同时存在1(整数)和"1"(字符串)、2和"3"这类值。sklearn在校验分类标签时会调用np.unique()去重,该方法需要对值排序,而int和str类型之间无法执行大小比较,因此抛出该错误。
你之前单独验证CountVectorizer转换正常,是因为该步骤仅处理特征X,不涉及目标标签Y,因此无法提前暴露Y的类型问题。
排查步骤
- 执行代码
print(Y.unique()),查看输出的标签值是否同时存在不带引号的数字和带引号的字符串 - 执行代码
print(Y.apply(type).unique()),查看输出的类型列表是否同时包含<class 'int'>和<class 'str'>
只要上述任意一项符合,就能确认是Y标签类型混合的问题。
解决方案
将Y标签统一转换为同一种类型即可,二选一:
- 若标签本质为数值分类,统一转成整数类型:
Y = Y.astype(int)
- 若标签允许为字符串格式,统一转成字符串类型:
Y = Y.astype(str)
转换完成后再执行数据集切分、模型拟合的代码即可正常运行。
内容的提问来源于stack exchange,提问作者eliavs
相关产品推荐
相关产品推荐

