sparse.model.matrix和as.matrix之间的区别

时间:2016-04-06 21:07:46

标签: r sparse-matrix xgboost

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

  1. 它具有所有数字功能
  2. 没有遗漏的值。
  3. 不存在分类/文本/因子变量。
  4. TARGET是获取1/0值的目标变量。
  5. 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提供给他们的数据只包含没有缺失值且没有分类变量的数字要素时,as.matrix与{{1}}的做法有何不同?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分: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方法后,您会发现具有缺失值的行被强制删除。