0

分布の実用面での違い=アダブーストかベルヌーイかよくわからない

   library(MASS)
   library(gbm)
   data=Boston
   data$chas = factor(data$chas)
   ada_model = gbm(chas~ . , data, distribution ='adaboost')
   bern_model = gbm(chas ~ . , data, distribution = 'bernoulli')
   ada_model
   bern_model

ベルヌーイが結果を出さない理由がわかりませんか? これがどのように機能するかについて根本的な誤解があると思いますか?

私が探しているもの: 1. ベルヌーイが機能しない理由の説明。これは分類に使用できるとドキュメントに書かれていると思いましたか?2. 両方とも分類に使用できる場合、実際の違いは何ですか?

4

2 に答える 2

0

factor呼び出しが 0/1 を 1/2 に再コード化するため、Bernoulli は壊れています。

> str(factor(data$chas[350:400]))
Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 2 2 2 ...
于 2015-11-18T00:10:20.257 に答える
0
> str(data$chas)
 int [1:506] 0 0 0 0 0 0 0 0 0 0 ...
> sum(data$chas==0) + sum(data$chas==1)
[1] 506

現在、506 個の整数があり、すべてゼロまたは 1 です。何もする必要はありません。@Neal Fultzが元のコメントで推奨し、回答で説明したように、4行目を削除します。変数を {0,1} に明示的にバインドする場合は、次のコードを使用できas.logicalます。コードは次のようになります。

library(MASS)
library(gbm)
data=Boston
data$chas = as.logical(data$chas) # optionally cast as logical to force range into 0 or 1
ada_model = gbm(chas~ . , data, distribution ='adaboost')
bern_model = gbm(chas ~ . , data, distribution = 'bernoulli')
ada_model
bern_model

行間を少し読んでみると、実際の問題は、実稼働データセットに {0,1} 以外の値が含まれていることだと思います。それらを論理的にキャストすると、それらはTRUE(1) に変換され、準備が整います。それが望ましくない場合は、これを使用してそれらを見つけ、ケースバイケースで調べます。

which((data$chas != 0) & (data$chas != 1))
于 2016-05-24T21:58:01.427 に答える