我使用xgboost
来表示回归问题,但我得到的错误是关于响应变量,即输出销售,它在课堂上最初是数字但是因为我使用xgboost它显示错误但是我只想要以数字形式输出< / p>
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中创建了标签或响应变量
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&lt; - train [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 Tier 1 Supermarket Type1 3735.1380 2:2009 Tier 3 Supermarket Type2 443.4228 3:1999 Tier 1 Supermarket 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 :(得分:3)
我在这里看到两个问题:
算法要求标签为0或1。相反,您的代码将它们设置为值0或-1。更正您定义ts_label
变量的行,如下所示:
ts_label <- as.numeric(ts_label)
您有二进制目标和分类预测变量。你为什么要做逻辑回归?我认为“二元:逻辑”可能是一个更好的目标。 “reg:linear”毫无意义,你的损失函数应该基于准确性而不是rmse。