1

XGBoostの代わりに使おうと思っていますgbm

私が得ているスコアはかなり奇妙なので、コードで何か間違ったことをしているのかもしれません。

私のデータにはいくつかの因子変数が含まれており、その他はすべて数値です。

応答変数は、住宅価格を示す連続変数です。

を使用するには、 One Hot EncondingXGBoostを使用する必要があることを理解しています。私は次のコードを使用してそうしています:

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)), ]

次に、モデルを構築し、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 を使用したときに得られる結果とはかけ離れています。

私は何か間違ったことをしていると思っています。おそらく、私がよく知らないOne Hot Encodingフェーズでそれを推測しているので、データを調整してGoogleコードを使用しました。

誰かが私が間違っていることと、それを「修正」する方法を示すことができますか?

アップデート:

@Coduty の回答を確認した後、私のコードにはいくつかのエラーがあります。

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 個の値も含まれます (欠損値なし)

ありがとう

4

1 に答える 1

0
train <- dat[train_ind,]
train.y <- train[,ncol(train_ind)]
xgboost(data =data.matrix(train[,-1]), 
   label = train.y, 
   objective = "reg:linear", 
   eval_metric = "rmse",
   max.depth =15, 
   eta = 0.1, 
   nround = 15, 
   subsample = 0.5, 
   colsample_bytree = 0.5, 
   num_class = 12,
   nthread = 3
)

XGB for Regression を制御する 2 つの手がかり

1) eta : eta が小さい場合、モデルはオーバーフィットする傾向があります

2) eval_metric : xgb がユーザーに独自の eval_metric の使用を許可しているかどうかは不明です。ただし、量的従属変数に外れ値が含まれている場合、このメトリックは役に立ちません。XGB がハブバー ロス機能をサポートしているかどうかを確認します。

于 2017-05-30T07:33:29.937 に答える