稀疏.model.matrix和as.matrix之间的差异

稀疏.model.matrix和as.matrix之间的差异,r,sparse-matrix,xgboost,R,Sparse Matrix,Xgboost,我在R中使用xgboost在训练数据集train上构建分类模型列车具有以下属性 它具有所有数字特征 没有丢失的值 不存在分类/文本/因子变量 TARGET是取1/0值的目标变量 xgb.train要求以特定的格式传递数据,因此我尝试了以下两种方法来获得xgb.train所需的格式 一, y使用公式(在sparse.model.matrix中)将截距添加到数据中(例如,包含所有1的列)。所以你得到的两个矩阵是不同的,因此结果也不同。为了避免这种使用: train = sparse.model.ma

我在R中使用xgboost在训练数据集
train
上构建分类模型<代码>列车具有以下属性

  • 它具有所有数字特征
  • 没有丢失的值
  • 不存在分类/文本/因子变量
  • TARGET
    是取1/0值的目标变量
  • xgb.train要求以特定的格式传递数据,因此我尝试了以下两种方法来获得xgb.train所需的格式

    一,

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

    train = sparse.model.matrix(TARGET~.-1,data = train)
    
    此外,用数据模型矩阵覆盖数据集(将两者命名为“train”)可能不是一个好主意。

    >data%
    +全部变异(作为因子)
    >数据%>%
    +稀疏.model.matrix(a~-1,data=)
    “dgCMatrix”类的1 x 2稀疏矩阵
    b3 b4
    1  1  .
    >数据%>%
    +as.matrix()
    a b
    [1,] "1" "3"
    [2,]“2”NA
    [3,]NA“4”
    

    您会发现,在使用
    sparse.model.matrix
    方法后,丢失值的行将被强制删除。

    但是,当我在前后使用ncol(train)检查列时,结果是相同的。为什么?@user3664020在第一个示例中,矩阵仍然具有目标列,在第二个示例中,删除此列并将截距添加到矩阵中。
    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)
    
    train = sparse.model.matrix(TARGET~.-1,data = train)
    
    > 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"