首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sparse.model.matrix与as.matrix的区别

sparse.model.matrix与as.matrix的区别
EN

Stack Overflow用户
提问于 2016-04-06 21:07:45
回答 2查看 5.8K关注 0票数 1

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

  1. 它具有所有的数字特性。
  2. 没有丢失的值。
  3. 不存在分类/文本/因素变量。
  4. TARGET是接受1/0值的目标变量。

xgb.train要求以特定格式传递数据,因此我尝试了以下两种方法来获得xgb.train所需的格式。

1.

代码语言:javascript
复制
y <- train$TARGET
train <- sparse.model.matrix(TARGET ~ ., data = train) ##has 76000 rows and 307 columns
xgtrain <- xgb.DMatrix(data=train, label=y)

2.

代码语言:javascript
复制
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 的数据只有数值特性而不缺少值和没有分类变量的情况下,与有什么不同呢?

EN

回答 2

Stack Overflow用户

发布于 2016-04-07 09:18:05

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

代码语言:javascript
复制
train = sparse.model.matrix(TARGET~.-1,data = train)

此外,用数据模型矩阵覆盖数据集可能不是一个好主意(同时命名两个“列车”)。

票数 1
EN

Stack Overflow用户

发布于 2018-10-16 07:01:43

代码语言:javascript
复制
> 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方法后,您会发现,缺少值的行将被迫删除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36462372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档