我試圖使用XGBoost
作爲gbm
的替代品。在R中使用XGBoost進行迴歸模型
我得到的分數很奇怪,所以我在想也許我在代碼中做錯了什麼。
我的數據包含幾個因子變量,所有其他數字。
響應變量是指示房價的連續變量。
我明白,爲了使用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)
在那之後,我分割數據回測試&車組:
Xtrain <- Xall[1:nrow(train.data), ]
Xtest <- Xall[-(1:nrow(train.data)), ]
再建立模型,並打印均方根誤差& Rsquared:
# 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)
問題是我得到非常關RMSE & Rsxquare:
RMSE Rsquared
1.877639e+05 5.308910e-01
這是從結果中使用GBM當我走得很遠。
我想我做錯了,我最好的可能與一個熱編碼相,我不熟悉猜,所以使用調整我的數據,谷歌搜索代碼。
有人可以指出我做錯了什麼,以及如何「修復」它?
UPDATE:
審查@Codutie的答案後,我的代碼中有一些錯誤:
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
train.data
是數據幀,它具有1453行。標籤SalePrice
還包含1453個值(無遺漏值)
感謝