我在将我的数据拟合到xgboost分类器模型时遇到了困难。当我运行以下命令时:
classifier = xgboost(data = as.matrix(training_set[c(4:15, 17:18,20:28)]),
label = training_set$posted_ind, nrounds = 10)R Studio告诉我:
Error in xgb.DMatrix(data, label = label, missing = missing) :
'data' has class 'character' and length 1472000.
'data' accepts either a numeric matrix or a single filename. 训练集数据既有连续数据也有分类数据,但所有分类数据都是这样编码的(并且相同的数据适合随机森林和朴素贝叶斯模型)。为了在xgboost模型中使用这些数据,我需要完成一些额外的步骤吗?
发布于 2019-05-02 22:37:26
确保您的"training_set“没有任何作为因子的列。如果您将分类变量编码为数字,但将它们转换为因子,则会出现此错误。
发布于 2020-04-28 08:40:37
我遇到了同样的问题,并找到了一个完整的解决方案。你必须使用:
sparse_matrix <- sparse.model.matrix(label_y ~ ., data = df)[,-1]
X_train_dmat = xgb.DMatrix(sparse_matrix, label = df$label)这会将分类数据转换为虚拟变量。存在几种编码方法,例如,一次性编码是一种常见方法。上面的是虚拟对比度编码,它很受欢迎,因为它产生了“满秩”编码(也请参阅Max Kuhn的这篇博客文章)。
其目的是将每个分类特征的每个值转换为二进制特征{0,1}。
例如,列Treatment将替换为两列:TreatmentPlacebo和TreatmentTreated。它们中的每一个都是二进制的。因此,转换前在列Treatment中值为Placebo的观察值在转换后将具有新列TreatmentPlacebo中的值1和新列TreatmentTreated中的值0。列TreatmentPlacebo将在对比度编码期间消失,因为它将被吸收到公共常数截距列中。
https://stackoverflow.com/questions/52320502
复制相似问题