1

我在 R 中使用 xgboost 在训练数据集上构建分类模型traintrain具有以下属性。

  1. 它具有所有数字功能
  2. 没有缺失值。
  3. 不存在分类/文本/因子变量。
  4. 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.matrixas.matrix

4

2 回答 2

1

使用公式(在 sparse.model.matrix 中)为您的数据添加截距(例如,全为 1 的列)。因此,您拥有的两个矩阵是不同的,因此结果也不同。为了避免这种使用:

train = sparse.model.matrix(TARGET~.-1,data = train)

此外,使用数据模型矩阵覆盖您的数据集可能不是一个好主意(同时命名为“train”)

于 2016-04-07T09:18:05.187 回答
0
> 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,缺失值的行会被强制删除。

于 2018-10-16T07:01:43.913 回答