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

如何在不使用异常的情况下解决 ValueError dtype

ValueError: numpy.dtype 的大小错误,尝试重新编译