我在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
提供给他们的数据只包含没有缺失值且没有分类变量的数字要素时,as.matrix
与{{1}}的做法有何不同?
答案 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
方法后,您会发现具有缺失值的行被强制删除。