Python XGBoost 分类器无法“预测”:“TypeError: Not supported type for data”

Posted

技术标签:

【中文标题】Python XGBoost 分类器无法“预测”:“TypeError: Not supported type for data”【英文标题】:Python XGBoost classifier can't `predict`: `TypeError: Not supported type for data` 【发布时间】:2021-05-24 05:40:41 【问题描述】:

我有一个这样的数据集:

print(X_test.dtypes)
metric1                    int64
rank                     float64
device_type                 int8
NA_estimate              float64

当我尝试对此数据集进行预测时,我收到以下错误:

y_test_pred_xgb = clf_xgb.predict(xgb.DMatrix(X_test))
TypeError: Not supported type for data.<class 'xgboost.core.DMatrix'>

我搜索了一下,但只发现了关于 object 变量数据类型导致问题的讨论。我的数据还有其他问题还是其他问题?我查看了各种博客和 Kaggle 代码,但运气不佳。

【问题讨论】:

源代码表明您的类型很好 (github.com/dmlc/xgboost/blob/…) 但也许可以尝试 as.type() 将 int8 更改为 int64?还要检查你的数值变量中是否只有数值 【参考方案1】:

我遇到了同样的问题,并通过使用np.float32() 转换数据类型来解决它:

model.predict(np.float32(X_test))

【讨论】:

【参考方案2】:

在使用.values 将我的数据帧转换为numpy 数组时,我遇到了同样的错误,然后将它传递给xgb.DMatrix

dtest = xgb.DMatrix(X_test.values)

根据https://datascience.stackexchange.com/a/43805/87921下面的帖子,我发现xgboost从0.81版本开始直接支持pandasDataFrames,所以不需要调用DMatrix。这适用于我的情况(我使用的是 1.3.3 版)

model = XGBRegressor().fit(X_train, y_train)  # X_train, y_train and X_test are DataFrames
predictions = model.predict(X_test)

希望,这会有所帮助!

【讨论】:

以上是关于Python XGBoost 分类器无法“预测”:“TypeError: Not supported type for data”的主要内容,如果未能解决你的问题,请参考以下文章

xgboost原理与实战

技术分享 | 机器学习-浅谈XGBoost算法

xgboost predict 方法为所有行返回相同的预测值

xgboost predict 方法为所有行返回相同的预测值

xgboost通俗理解

使用XGBoost实现多分类预测的实践