xgboost错误 - 当我的标签已经是数字,并且我需要的结果数字不在0,1,0

问题描述:

我使用xgboost进行回归问题时,标签必须位于[0,1]中,但我得到有关响应变量的错误这是输出销售,这是最初的数字类,但为我用xgboost它显示的错误,但我想以数字形式输出仅xgboost错误 - 当我的标签已经是数字,并且我需要的结果数字不在0,1,0

labels <- train$Item_Outlet_Sales# train label 
ts_label <- test$Item_Outlet_Sales # test label 

# converted into matrix (one hot encoding) 
new_tr <- model.matrix(~.+0,data = train[,-c("Item_Outlet_Sales"),with=F]) 
new_ts <- model.matrix(~.+0,data = test[,-c("Item_Outlet_Sales"),with=F]) 

## checking class 
class(labels) 
[1] "numeric" 

我创建标签或响应变量测试作为 test$Item_Outlet_Sales <- NA

class(test$Item_Outlet_Sales) 
[1] "logical" 

# coverting `ts_label` into numeric as it initially is logical 
ts_label <- as.numeric(ts_label)-1 
class(ts_label) 
[1] "numeric" 

现在

dtrain1 <- xgb.DMatrix(data = new_tr,label = labels) 
dtest1 <- xgb.DMatrix(data = new_ts,label= ts_label) 

xgbmodel1 = xgb.train(data=dtrain1, nround=150, max_depth=5, eta=0.1, subsample=0.9, 
         objective="reg:logistic", booster="gbtree", eval_metric="rmse") 

错误 -

Error in xgb.iter.update(bst$handle, dtrain, iteration - 1, obj) : 
    [14:08:41] amalgamation/../src/objective/regression_obj.cc:108: 
    label must be in [0,1] for logistic regression 

我用那么这个:

xgbmodel1 = xgb.train(data=dtrain1, nround=150, max_depth=5, eta=0.1, subsample=0.9, 
         objective="reg:linear", booster="gbtree", eval_metric="rmse") 

我得到了变量等于-1和响应的所有值我RMSE得分是无限的..

请告诉我如何在这种情况下有效实施xgboost即使在默认条件下也不会错误来了。

我在这个数据集中有4个分类变量。

这里是训练集的一个子集

肯定,R < - 火车[1:3,]

[R

Item_Identifier Item_Fat_Content ITEM_TYPE Item_MRP Outlet_Identifier 1:FDA15低脂乳制品249.8092 OUT049 2:DRC01普通软饮料48.2692 OUT018 3:FDN15低脂肉141.6180 OUT049 Outlet_Establishment_Year Outlet_Location_Type Outlet_Type Item_Outlet_Sales 1:1999年第1层超市的Type1 3735.1380 2:2009年第3层超市类型2 443.4228 3:1999年第1层超市的Type1 2097.2700 Item_Weight Item_Visibility Outlet_Size 1:9.30 0.01604730 2 2:5.92 0.01927822 2 3:17.50 0.01676007 2

我在这里看到了两个问题:

  1. 算法预计标签,无论是0或1。相反,您的代码将它们设置为值0或-1。纠正在其中定义ts_label变量如下行:

    ts_label <- as.numeric(ts_label) 
    
  2. 你有一个二进制目标和分类预测。你为什么想做逻辑回归?我觉得“二元:逻辑”可能是一个更好的目标。 “reg:linear”是没有意义的,你的损失函数应该基于准确性而不是rmse。

+0

我没有二元目标,它是一个回归问题,我必须告诉每个项目的总产出销售额,但这是我第一次应用xgboost来提高准确性。请告诉我如何进行更改以实现回归。 –

+0

这是一个实践问题,用于评估的度量是rmse,所以我想根据它进行设置,因此可以知道参数调整可以产生什么效果 –

+0

我的意思是,您提到您的“标签”变量是逻辑的,这意味着TRUE和FALSE。我不明白这可以用于回归。 –