Python 如何从具有稀疏[uint8,0]类型字段的pandas数据帧生成XGBoost数据矩阵

Python 如何从具有稀疏[uint8,0]类型字段的pandas数据帧生成XGBoost数据矩阵,python,pandas,sparse-matrix,xgboost,Python,Pandas,Sparse Matrix,Xgboost,我有一个pandas数据帧,我想从中创建一个列车测试分割来训练XGBoost模型。问题在于,我的数据帧有许多类型为稀疏[uint8,0]的字段。这是必要的,因为我必须对某些字段执行一次热编码,否则会使数据帧太大而无法存储。这是通过运行以下命令完成的: df = pd.get_dummies(df, columns=['item_id', 'user_age', 'user_region'], sparse=True) 首先,我将数据帧拆分为数据/目标,然后生成我的训练/测试拆分,如下所示

我有一个pandas数据帧,我想从中创建一个列车测试分割来训练XGBoost模型。问题在于,我的数据帧有许多类型为稀疏[uint8,0]的字段。这是必要的,因为我必须对某些字段执行一次热编码,否则会使数据帧太大而无法存储。这是通过运行以下命令完成的:

 df = pd.get_dummies(df, columns=['item_id', 'user_age', 'user_region'], sparse=True)
首先,我将数据帧拆分为数据/目标,然后生成我的训练/测试拆分,如下所示

 dfX = df.drop('target', axis=1) 
 dfY = df[['target']] 
 X_train, X_test, y_train, y_test = train_test_split(dfX, dfY, test_size=0.2, random_state=1)
X_-train,X_-test,y_-train,y_-test都是熊猫数据帧,但当我尝试制作xgb.DMatrix时:

dtrain = xgb.DMatrix(X_train, label=y_train)
dtest = xgb.DMatrix(X_test, label=y_test)
我得到以下错误:

数据的DataFrame.d类型必须为int、float或bool。 不应在字段item_id_0、item_id_1、。。。用户年龄9.0,用户年龄10.0,用户地域0.0,用户地域2.0

因此,XGboost似乎不知道如何处理我之前执行的一次热编码所产生的所有字段


如何解决此错误?我的直觉告诉我,我应该将我的数据帧表示为csr矩阵,然后从中生成DMatrix,但我不太确定

您是否可以共享用于“一次热编码”的代码,它似乎会留下一些带有字符串值的col。