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
我在这里看到了两个问题:
-
算法预计标签,无论是0或1。相反,您的代码将它们设置为值0或-1。纠正在其中定义
ts_label
变量如下行:ts_label <- as.numeric(ts_label)
你有一个二进制目标和分类预测。你为什么想做逻辑回归?我觉得“二元:逻辑”可能是一个更好的目标。 “reg:linear”是没有意义的,你的损失函数应该基于准确性而不是rmse。
我没有二元目标,它是一个回归问题,我必须告诉每个项目的总产出销售额,但这是我第一次应用xgboost来提高准确性。请告诉我如何进行更改以实现回归。 –
这是一个实践问题,用于评估的度量是rmse,所以我想根据它进行设置,因此可以知道参数调整可以产生什么效果 –
我的意思是,您提到您的“标签”变量是逻辑的,这意味着TRUE和FALSE。我不明白这可以用于回归。 –