【发布时间】:2017-12-14 23:36:00
【问题描述】:
我在 R 中使用 xgboost 函数,我收到以下错误消息
bst <- xgboost(data = germanvar, label = train$Creditability, max.depth = 2, eta = 1,nround = 2, objective = "binary:logistic")
Error in xgb.get.DMatrix(data, label, missing, weight) :
xgboost only support numerical matrix input,
use 'data.matrix' to transform the data.
In addition: Warning message:
In xgb.get.DMatrix(data, label, missing, weight) :
xgboost: label will be ignored.
以下是我的完整代码。
credit<-read.csv("http://freakonometrics.free.fr/german_credit.csv", header=TRUE)
library(caret)
set.seed(1000)
intrain<-createDataPartition(y=credit$Creditability, p=0.7, list=FALSE)
train<-credit[intrain, ]
test<-credit[-intrain, ]
germanvar<-train[,2:21]
str(germanvar)
bst <- xgboost(data = germanvar, label = train$Creditability, max.depth = 2, eta = 1,
nround = 2, objective = "binary:logistic")
数据混合了连续变量和分类变量。
但是,由于只能使用连续变量的错误提示,所有变量都被识别为连续变量,但错误提示又出现了。
我该如何解决这个问题???
【问题讨论】:
-
“因为只能使用连续变量的错误提示,所有的变量都被识别为连续的,但是错误提示又出现了”是不正确的。这就是发生的情况:因为你有非连续变量,你会得到一个错误,告诉你只使用连续变量。这会停止程序。
-
错误信息非常好:它告诉你不能有非连续变量。将分类变量编码为数字的解决方案。最常见的方法称为“one-hot encoding”或“dummy variables”。
model.matrix()是一个可以帮助您执行此操作的函数 - 您可以在 Stack Overflow 上搜索“[r] 虚拟变量”或在?model.matrix的帮助中找到许多示例。 -
@Gregor 哦,谢谢。但是我必须将其更改为虚拟变量吗?如果我通过将因子类型变量识别为int类型来强制执行它,是否会出现问题?
-
xgboost 使用决策树,在连续数据中寻找切点。如果您的因子是有序的,即 A
-
@Gregor 谢谢你的好信息:)。祝你有美好的一天!