稀疏.model.matrix和as.matrix之间的差异
我在R中使用xgboost在训练数据集稀疏.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
train
上构建分类模型<代码>列车具有以下属性
TARGET
是取1/0值的目标变量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"