使用XGB模型评分新部署数据

背景

  • 我使用R构建了一个极端梯度提升(XGB)模型
  • 我已经使用模型对象对测试集进行了评分
  • 但是,我无法使用模型对象对部署集进行评分

加载R库

library(xgboost)library(Matrix)

创建虚拟数据

### 训练集 ###train1 <- c("5032","1","66","139","0","9500","12","0")train2 <-c("5031","1","61","34","5078","5100","12","2")train3 <-c("5030","0","72","161","2540","4000","11","2")train4 <-c("5029","1","68","0","6456","10750","12","4")train5 <-c("5028","1","59","86","0","10000","12","0")train6 <-c("5027","0","49","42","1756","4500","12","2")train7 <-c("5026","0","61","14","0","2500","12","0")train8 <-c("5025","0","44","153","0","9000","12","0")train9 <-c("5024","1","79","61","0","5000","12","0")train10 <-c("5023","1","46","139","2121","5600","6","3")train <- rbind.data.frame(train1, train2, train3, train4, train5,     train6, train7, train8, train9, train10)names(train) <- c("customer_id","target","v1","v2","v3","v4","v5","v6")for(i in 1:ncol(train)) {     train[,i] <- as.character(train[,i])}for(i in 1:ncol(train)) {     train[,i] <- as.integer(train[,i])}### 测试集 ###test1 <- c("5021","0","55","64","2891","5000","12","4")test2 <-c("5020","1","57","49","167","3000","12","2")test3 <-c("5019","1","54","55","4352","9000","12","4")test4 <-c("5018","0","70","8","2701","5000","12","3")test5 <-c("5017","0","64","59","52","3000","12","2")test6 <-c("5016","1","57","73","0","4000","12","0")test7 <-c("5015","0","46","28","1187","6000","12","3")test8 <-c("5014","1","57","38","740","4500","12","2")test9 <-c("5013","1","54","159","0","3300","11","0")test10 <-c("5012","0","48","19","690","6500","11","2")test <- rbind.data.frame(test1, test2, test3, test4, test5,     test6, test7, test8, test9, test10)names(test) <- c("customer_id","target","v1","v2","v3","v4","v5","v6")for(i in 1:ncol(test)) {     test[,i] <- as.character(test[,i])}for(i in 1:ncol(test)) {     test[,i] <- as.integer(test[,i])}### 部署集 ###deploy1 <- c("5011","58","5","7897","12000","12","4")deploy2 <- c("5010","60","161","1601","7500","12","2")deploy3 <- c("5009","40","59","0","5000","12","0")deploy4 <- c("5008","57","80","0","3500","12","0")deploy5 <- c("5007","50","70","1056","3000","12","2")deploy6 <- c("5006","65","6","1010","9000","12","3")deploy7 <- c("5005","65","17","1978","4500","12","2")deploy8 <- c("5004","80","103","0","10000","12","0")deploy9 <- c("5003","52","11","2569","3500","12","2")deploy10 <- c("5002","54","81","1905","4000","12","4")deploy <- rbind.data.frame(deploy1, deploy2, deploy3, deploy4, deploy5,     deploy6, deploy7, deploy8, deploy9, deploy10)names(deploy) <- c("customer_id","v1","v2","v3","v4","v5","v6")for(i in 1:ncol(deploy)) {     deploy[,i] <- as.character(deploy[,i])}for(i in 1:ncol(deploy)) {     deploy[,i] <- as.integer(deploy[,i])}

转换为矩阵

# 移除客户IDtrain_A <- train %>% select(-customer_id) test_A <- test %>% select(-customer_id) # 将训练集转换为稀疏矩阵train_sparse_matrix<- sparse.model.matrix(target ~.-1, data = train_A)test_sparse_matrix<- sparse.model.matrix(target ~.-1, data = test_A)# 创建目标向量train_target <- as.vector(train_A$target)test_target <- as.vector(test_A$target)# 将训练集转换为dmatrix(xgboost推荐格式)train_dmatrix <- xgboost::xgb.DMatrix(data=train_sparse_matrix, label=train_target)test_dmatrix <- xgboost::xgb.DMatrix(data=test_sparse_matrix, label=test_target)

训练模型

hn_xgb <- xgboost(tar_flag ~ .,     data              = train_dmatrix,     max_depth         = 6,     eta               = 0.3,      num_parallel_tree = 1,      nthread           = 2,      nround            = 100,     metrics           = 'error',     objective         = 'binary:logistic')

评分测试集

predict(hn_xgb, test_dmatrix)

评分部署集

部署集没有目标变量,因为目标事件尚未发生,即部署评分试图预测的正是这个目标事件。

### 转换为矩阵 #### 移除客户IDdeploy_A <- deploy %>% select(-customer_id) # 将部署集转换为稀疏矩阵deploy_sparse_matrix<- sparse.model.matrix(data = deploy_A) ## 错误 !!!

返回以下错误:

enter image description here

由于无法创建稀疏矩阵,接下来创建DMatrix的步骤也无法工作…

# 将训练集转换为dmatrix(xgboost推荐格式)deploy_dmatrix <- xgboost::xgb.DMatrix(data=deploy_sparse_matrix)

这意味着我无法对我的部署集进行评分…

问题

  1. 如何将我的部署集转换为稀疏矩阵或DMatrix?
  2. 您能推荐任何更简单的步骤来评分我的部署集吗?

回答:

我对您的数据进行了一些清理,以便更易读。如果有不明白的地方,请告诉我。

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注