2016-04-06 46 views
1

Rでxgboostを使用して、トレーニングデータセットtrainに分類モデルを作成しています。 trainには次の属性があります。sparse.model.matrixとas.matrixの相違

  1. それは、すべての数値の機能
  2. ノー欠損値を持っていません。
  3. カテゴリ/テキスト/要因変数はありません。
  4. TARGETは、1/0の値をとるターゲット変数です。

xgb.trainは、データを特定の形式で渡す必要があるため、xgb.trainに必要な形式を取得する2つの方法を試しました。今

1.

y <- train$TARGET 
train <- sparse.model.matrix(TARGET ~ ., data = train) ##has 76000 rows and 307 columns 
xgtrain <- xgb.DMatrix(data=train, label=y) 

2.

y <- train$TARGET 
train$TARGET <- NULL 
x = as.matrix(train) 
x = matrix(as.numeric(x),nrow(x),ncol(x)) ##has 76000 rows and 307 columns 
xgtrain = xgb.DMatrix(x, label = y) 

私はこれらの2つのxgtrain作成方法によって構築されたモデルを使用してテストセットを獲得するとき、私は/ AUC異なるスコアを取得します。私は1回目の方法や2回目の方法を2回/ 3回実行するとスコアを再現できたので、ランダム化の問題ではないことを確認しました。何かが私が把握できなかった2つの方法で異なって起こっている。誰かがその違いを特定するのを助けてくれますか?

質問別の言葉です。 sparse.model.matrixにはas.matrixとは何の違いがありますか?提供されたデータに欠損値がなく、カテゴリ変数がない場合はどうなりますか?

答えて

1

(sparse.model.matrix内の)式を使用すると、データにインターセプトが追加されます(すべて1の列など)。したがって、あなたが持っている2つの行列は異なるので、異なる結果になります。その使用を避けるために:また

train = sparse.model.matrix(TARGET~.-1,data = train) 

を、おそらく

+0

を(「電車」の両方に名前を付ける)データモデル行列を使用してデータセットを上書きするのは良いアイデアではありませんが、私はNcoI部位を使用して列をチェックしたときに(電車)前と後、それは同じに出てくる。どうして? – user3664020

+0

@ user3664020最初の例では、行列には​​まだTarget列があり、2番目の例ではこの列を削除し、行列に切片を追加します。 – amit