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 predict 方法为所有行返回相同的预测值