ValueError:无法使用 dtype='numeric' 将字节/字符串数组转换为十进制数
Posted
技术标签:
【中文标题】ValueError:无法使用 dtype=\'numeric\' 将字节/字符串数组转换为十进制数【英文标题】:ValueError: Unable to convert array of bytes/strings into decimal numbers with dtype='numeric'ValueError:无法使用 dtype='numeric' 将字节/字符串数组转换为十进制数 【发布时间】:2021-08-11 13:11:47 【问题描述】:我有这个管道:
diamonds = sns.load_dataset("diamonds")
# Build feature/target arrays
X, y = diamonds.drop("cut", axis=1), diamonds["cut"]
# Set up the colnames
to_scale = ["depth", "table", "x", "y", "z"]
to_log = ["price", "carat"]
categorical = X.select_dtypes(include="category").columns
scale_pipe = make_pipeline(StandardScaler())
log_pipe = make_pipeline(PowerTransformer())
categorical_pipe = make_pipeline(OneHotEncoder(sparse=False))
transformer = ColumnTransformer(
transformers=[
("scale", scale_pipe, to_scale),
("log_transform", log_pipe, to_log),
("oh_encode", categorical_pipe, categorical),
]
)
knn_pipe = Pipeline([("prep", transformer), ("knn", KNeighborsClassifier())])
# Fit/predict/score
_ = knn_pipe.fit(X_train, y_train)
preds = knn.predict(X_test)
当我运行它时,它非常适合数据,但我无法评分或做出预测,因为我收到了这个错误:
ValueError: could not convert string to float: 'G'
The above exception was the direct cause of the following exception:
ValueError: Unable to convert array of bytes/strings into decimal numbers with dtype='numeric'
这是一个分类问题,所以我认为错误的原因是因为我没有对目标进行编码。但即使在目标上使用 LabelEncode 后,我仍然遇到同样的错误。 可能是什么原因?我也尝试了其他模型的管道。错误是一样的。顺便说一句,我正在使用 Seaborn 的内置 Diamonds 数据集。
【问题讨论】:
【参考方案1】:您似乎没有用您的knn_pipe
预测X_test
的值。您在最后一行中使用的变量 knn
在您提供的示例中实际上是未定义的。我猜你已经在原始文件的某个地方定义了它,因此看到了这个错误消息。
不管怎样,改变一下
preds = knn.predict(X_test)
到
preds = knn_pipe.predict(X_test)
它会起作用的。
【讨论】:
哇,敏锐的观察力。非常感谢!以上是关于ValueError:无法使用 dtype='numeric' 将字节/字符串数组转换为十进制数的主要内容,如果未能解决你的问题,请参考以下文章
无法导入 scikit-learn - ValueError:numpy.dtype 的大小错误,
Tensorflow:ValueError:预期的非整数,得到<dtype:'int32'>
ValueError:使用 KNeighborsRegressor 的拟合,输入包含 NaN、无穷大或对于 dtype('float64') 来说太大的值
ValueError:在使用 tf.image.crop_to_bounding_box 时,张量转换为具有 dtype float32 的张量请求 dtype int32