xgboost中的二进制响应变量范围很窄

时间:2017-11-14 19:04:57

标签: r xgboost

我使用xgboost(R版本3.4.2的版本0.6-4)来解决二进制分类问题。我发现响应变量主要局限于非常窄的范围。这似乎与我选择用于培训的超参数(var sortedLinks = links.OrderBy(le => Array.IndexOf(linkTypes, le.linkType)).ToList() etamax_depth)无关。

为了说明这个问题,我已经明确地创建了嵌套的for循环来存储各种超参数集的响应变量范围:

nround

因此,pred_df <- data_frame(eta = numeric(0), depth = numeric(0), round = numeric(0), min_score = numeric(0), first_quart = numeric(0), median = numeric(0), mean = numeric(0), third_quart = numeric(0), max = numeric(0) ) for (this_eta in c(1.0, 0.7, 0.4, 0.1, 0.01, 0.001)) { for (this_depth in seq(4, 16, 2)) { for (this_round in c(5, 10, 25, 75, 150)) { dtrain <- xgb.DMatrix(data = data.matrix(X_train), label = Y_train) xgb_model <- xgboost(data = dtrain, eta = this_eta, max_depth = this_depth, nround = this_round, objective = "binary:logistic", verbose = 0, save_period = NULL, nthread = 4) y_pred <- predict(xgb_model, data.matrix(X_test)) summ <- summary(y_pred) this_entry <- data_frame(eta = this_eta, depth = this_depth, round = this_round, min_score = as.numeric(summ[1]), first_quart = as.numeric(summ[2]), median = as.numeric(summ[3]), mean = as.numeric(summ[4]), third_quart = as.numeric(summ[5]), max = as.numeric(summ[6]) ) pred_df <- bind_rows(pred_df, this_entry) } } } 只是用于存储响应变量摘要的数据框。

让我们添加另一个变量来帮助显示问题:

pred_df

第一和第三四分位数彼此非常接近,表明响应变量的范围非常紧凑:

pred_df <- mutate(pred_df, quartile_diff = round(third_quart - first_quart, 3))

但这个狭窄的范围转移了很多:

> summary(pred_df$quartile_diff)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
0.00000 0.01625 0.04600 0.05498 0.09400 0.14600 

对于任何特定的超参数集,此范围更接近最小响应而非最大响应。

如果您想知道,> summary(pred_df$median) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.0008036 0.0107366 0.0590362 0.1743002 0.4010580 0.4977787 有2856个病例,有33个预测因子。 X_train有1209个案例。我有点担心对这么少的预测因素不合适,但我不知道是否应对此负责。

任何可能导致此类问题的想法?我需要我的响应变量是概率,因此使用X_test

编辑:我被问及培训数据中的结果计数。他们在这里:

objective = "binary:logistic"

0 个答案:

没有答案