在R中使用XGBoost用于基于回归的模型

问题描述 投票:1回答:1

我正在尝试使用XGBoost作为gbm的替代品。

我得到的分数相当奇怪,所以我想我的代码中可能做错了。

我的数据包含几个因子变量,所有其他数字。

响应变量是一个连续变量,表示房价。

我明白为了使用qazxsw poi,我需要使用One Hot Encoding。我是通过使用以下代码这样做的:

XGBoost

之后,我将数据拆分回测试和训练集:

Xtest <- test.data
Xtrain <- train.data
XSalePrice <- Xtrain$SalePrice
Xtrain$SalePrice <- NULL

# Combine data  
Xall <- data.frame(rbind(Xtrain, Xtest))

# Get categorical features names
ohe_vars <- names(Xall)[which(sapply(Xall, is.factor))]

# Convert them
dummies <- dummyVars(~., data = Xall)
Xall_ohe <- as.data.frame(predict(dummies, newdata = Xall))

# Replace factor variables in data with OHE
Xall <- cbind(Xall[, -c(which(colnames(Xall) %in% ohe_vars))], Xall_ohe)

然后构建模型,并打印RMSE和R Squared:

Xtrain <- Xall[1:nrow(train.data), ]
Xtest <- Xall[-(1:nrow(train.data)), ]

问题是我离RMSE和Rsxquare很远:

# Model
xgb.fit <- xgboost(data = data.matrix(Xtrain), label = XSalePrice,
  booster = "gbtree", objective = "reg:linear",
  colsample_bytree = 0.2, gamma = 0.0,
  learning_rate = 0.05, max_depth = 6,
  min_child_weight = 1.5, n_estimators = 7300,
  reg_alpha = 0.9, reg_lambda = 0.5,
  subsample = 0.2, seed = 42,
  silent = 1, nrounds = 25)

xgb.pred <- predict(xgb.fit, data.matrix(Xtrain))
postResample(xgb.pred, XSalePrice)

这与我使用GBM时获得的结果非常相似。

我在想我做错了什么,我最好猜测它可能是我不熟悉的One Hot Encoding阶段,所以使用谷歌代码调整我的数据。

有人可以说明我做错了什么以及如何'修复'它?

更新:

在查看@Codutie答案后,我的代码有一些错误:

        RMSE     Rsquared 
1.877639e+05 5.308910e-01 

Xtrain <- sparse.model.matrix(SalePrice ~. , data = train.data) XDtrain <- xgb.DMatrix(data = Xtrain, label = "SalePrice") 产生:

xgb.DMatrix

Error in setinfo.xgb.DMatrix(dmat, names(p), p[[1]]) : The length of labels must equal to the number of rows in the input data 是数据框,它有1453行。标签train.data还包含1453个值(无缺失值)

谢谢

r regression decision-tree xgboost one-hot-encoding
1个回答
0
投票
SalePrice

回归控制XGB的两条线索,

1)eta:如果eta很小,模型往往过度拟合

2)eval_metric:不确定xgb是否允许用户使用自己的eval_metric。但是,当量化因变量包含异常值时,此度量标准无用。检查XGB是否支持hubber丢失功能。

© www.soinside.com 2019 - 2024. All rights reserved.