xgboost有关数值变量和标签的错误消息

时间:2017-07-11 04:39:42

标签: r xgboost gradient-descent gbm

我在R中使用toolBar.getMenu().clear();函数,我收到以下错误消息

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.

数据包含连续变量和分类变量。

但是,由于错误信息只能使用连续变量,所有变量都被识别为连续变量,但错误信息再次出现。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

因此,如果您有分类变量表示为数字,则它不是理想的表示形式。但是如果有足够深的树木,你就可以逃脱它。树将最终分割它。我不喜欢这种方法,但它会让你的列最小化,并且可以在正确的设置下成功。

请注意,xgboostnumeric matrix作为数据,将numeric向量作为label

NOT INTEGERS:)

以下代码将在输入正确投射的情况下进行训练

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]
label <- as.numeric(train$Creditability) ## make it a numeric NOT integer
data <-  as.matrix(germanvar)  # to matrix
mode(data) <- 'double'  # to numeric i.e double precision


bst <- xgboost(data = data, label = label, max.depth = 2, eta = 1,
               nround = 2, objective = "binary:logistic")