我正在使用R中的xgboost在训练数据集train上建立分类模型。train具有以下属性。
TARGET是接受1/0值的目标变量。xgb.train要求以特定格式传递数据,因此我尝试了以下两种方法来获得xgb.train所需的格式。
1.
y <- train$TARGET
train <- sparse.model.matrix(TARGET ~ ., data = train) ##has 76000 rows and 307 columns
xgtrain <- xgb.DMatrix(data=train, label=y)2.
y <- train$TARGET
train$TARGET <- NULL
x = as.matrix(train)
x = matrix(as.numeric(x),nrow(x),ncol(x)) ##has 76000 rows and 307 columns
xgtrain = xgb.DMatrix(x, label = y)现在,当我使用这两个xgtrain 创建方法建立的模型对测试集进行评分时,我得到了不同的分数/AUC。我已经证实,这不是随机化的问题,因为我已经能够重现分数,如果我运行第一或第二方法两次/三次。在这两种方法中发生了一些不同的事情,我一直无法弄清楚。有谁能帮我找出这个区别吗?
换句话来说。当提供给sparse.model.matrix 的数据只有数值特性而不缺少值和没有分类变量的情况下,与有什么不同呢?
发布于 2016-04-07 09:18:05
使用公式(在sparse.model.matrix中)为您的数据添加一个截距(例如,包含所有1s的列)。因此,两个矩阵是不同的,因此结果是不同的。为避免这种使用:
train = sparse.model.matrix(TARGET~.-1,data = train)此外,用数据模型矩阵覆盖数据集可能不是一个好主意(同时命名两个“列车”)。
发布于 2018-10-16 07:01:43
> data <-
+ data.table(
+ a=c(1,2,NA)
+ ,b=c(3,NA,4)
+ ) %>%
+ mutate_all(as.factor)
> data %>%
+ sparse.model.matrix(a ~.-1,data=.)
1 x 2 sparse Matrix of class "dgCMatrix"
b3 b4
1 1 .
> data %>%
+ as.matrix()
a b
[1,] "1" "3"
[2,] "2" NA
[3,] NA "4"使用sparse.model.matrix方法后,您会发现,缺少值的行将被迫删除。
https://stackoverflow.com/questions/36462372
复制相似问题