2017-08-26 40 views
0

回帰問題にxgboostを使用していますが、これは出力の販売であり、それはクラスで、最初は数値ですが、私はそれxgboost使うと、エラーを示していますが、私がしたい数値形式で出力のみxgboostエラー - 私のラベルがすでに数字であり、0、1の範囲にない数字で結果が必要な場合、ラベルは[0,1]にする必要があります。

labels <- train$Item_Outlet_Sales# train label 
ts_label <- test$Item_Outlet_Sales # test label 

# converted into matrix (one hot encoding) 
new_tr <- model.matrix(~.+0,data = train[,-c("Item_Outlet_Sales"),with=F]) 
new_ts <- model.matrix(~.+0,data = test[,-c("Item_Outlet_Sales"),with=F]) 

## checking class 
class(labels) 
[1] "numeric" 

私は test$Item_Outlet_Sales <- NA

class(test$Item_Outlet_Sales) 
[1] "logical" 

# coverting `ts_label` into numeric as it initially is logical 
ts_label <- as.numeric(ts_label)-1 
class(ts_label) 
[1] "numeric" 
としてテストにラベルまたは応答変数を作成しました

dtrain1 <- xgb.DMatrix(data = new_tr,label = labels) 
dtest1 <- xgb.DMatrix(data = new_ts,label= ts_label) 

xgbmodel1 = xgb.train(data=dtrain1, nround=150, max_depth=5, eta=0.1, subsample=0.9, 
         objective="reg:logistic", booster="gbtree", eval_metric="rmse") 

エラー -

Error in xgb.iter.update(bst$handle, dtrain, iteration - 1, obj) : 
    [14:08:41] amalgamation/../src/objective/regression_obj.cc:108: 
    label must be in [0,1] for logistic regression 

私は、この使用:私はへの応答変数のすべての値が等しくなっ-1と私のRMSEスコアは無限である

xgbmodel1 = xgb.train(data=dtrain1, nround=150, max_depth=5, eta=0.1, subsample=0.9, 
         objective="reg:linear", booster="gbtree", eval_metric="rmse") 

を..

xgboostの実装方法を教えてください。この場合、デフォルトの条件でも効果的ですエラーが発生します。

このデータセットには4つのカテゴリ変数があります。ここ

は列車のデータセットのサブセットである

確認、R < - 電車[1:3、]

R

Item_Identifier Item_Fat_Content ITEM_TYPE Item_MRP Outlet_Identifier 1:FDA15低脂肪の乳製品249.8092 OUT049 2:DRC01レギュラーソフトドリンク48.2692 OUT018 3:FDN15低脂肪肉141.6180 OUT049 アウトレット_施設アウトレット_アウトレット_タイプ1:1999ティア1スーパーマーケットタイプ1 3735.1380 2:2009ティア3スーパーマーケットタイプ2 443.4228 3:1999ティア1スーパーマーケットタイプ1 2097.2700 Item_Weight Item_Visibility Outlet_Size 1:9.30 0.01604730 2 2:5.92 0.01927822 2 3:17.50 0.01676007 2

答えて

1

私はここで二つの問題を参照してください。アルゴリズムはラベルが0または1のいずれかであることを期待

  1. を。それどころか、あなたのコードはそれらを0または-1の値に設定します。

    ts_label <- as.numeric(ts_label) 
    
  2. あなたは、バイナリターゲットとカテゴリ予測を持って次のようにあなたがts_label変数を定義する行を修正します。なぜロジスティック回帰をしたいのですか?私は "バイナリ:ロジスティック"がより良い目的であるかもしれないと感じています。 "reg:linear"は意味をなさないので、あなたの損失関数はrmseではなく、正確さに基づいていなければなりません。

+0

私はバイナリターゲットを持っていません。回帰の問題があり、それぞれのアイテムの合計売上高を教えなければなりませんが、これは初めてxgboostを適用して精度を上げることです。どのように回帰の実装に変更を加えるかについて教えてください。 –

+0

これは実習上の問題であり、評価に使用されるメトリックはrmseなので、それに合わせて設定したいので、パラメータチューニングの効果を知ることができます –

+0

「ラベル」変数が論理的でTRUE偽です。私はそれがどのように回帰のために使用されるのか分かりません。 –

関連する問題