gbm
の代わりにXGBoost
を使用しようとしています。RでXGBoostを回帰モデルに使用
私の得点はかなり奇妙なので、おそらく自分のコードで何か間違っていると思っています。
私のデータには、他のすべての数値の因子変数がいくつか含まれています。
応答変数は、House-Priceを示す連続変数です。
私はXGBoost
を使用するために、ホット・エンコンディングを使用する必要があることを理解しています。私は次のコードを使って、そうやってる:
Xtrain <- Xall[1:nrow(train.data), ]
Xtest <- Xall[-(1:nrow(train.data)), ]
そしてモデル、および印刷の構築:その後
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 & 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の値(ノー欠損値)
おかげ