2017-03-01 18 views
0

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の値(ノー欠損値)

おかげ

答えて

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を制御するために2つの手がかりが含まれてい

1)ETAが

:ETAが小さい場合には、モデルが

をオーバーフィットする傾向があります

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