14

大規模なデータセット(5000x300)でrandomForestを実行しようとしています。残念ながら、次のようなエラーメッセージが表示されます。

> RF <- randomForest(prePrior1, postPrior1[,6]
+                    ,,do.trace=TRUE,importance=TRUE,ntree=100,,forest=TRUE)
Error in randomForest.default(prePrior1, postPrior1[, 6], , do.trace = TRUE,  : 
  NA/NaN/Inf in foreign function call (arg 1)

だから私はNAを使って見つけようとします:

> df2 <- prePrior1[is.na(prePrior1)]
> df2 
character(0)
> df2 <- postPrior1[is.na(postPrior1[,6])]
> df2 
numeric(0)

NAがないように見えるので、問題はInfだと私は信じています。

Infを根絶する方法について何か提案はありますか?

4

5 に答える 5

25

あなたはおそらく探していますis.finiteが、問題が入力データのInfsであると100%確信しているわけではありません。

is.finite欠落している、無限であるなどのどの組み合わせを選択するかについては、ヘルプを注意深く読んでください。具体的には、これ:

> is.finite(c(1,NA,-Inf,NaN))
[1]  TRUE FALSE FALSE FALSE
> is.infinite(c(1,NA,-Inf,NaN))
[1] FALSE FALSE  TRUE FALSE

これらのうちの1つは、他のものとは異なります。当然のことながら、is.nan機能もあります。

于 2011-12-31T18:20:45.503 に答える
11

randomForestの「外部関数呼び出しのNA/NaN / Inf」は、多くの場合、誤った警告であり、本当に苛立たしいものです。

  • 渡された変数のいずれかが文字である場合、これを取得します
  • 実際のNaNとInfsは、クリーンなデータではほとんど発生しません。

物事を絞り込み、変数リストでバイナリ検索を実行し、変数ntree=2のサブセットで即座に合格/不合格を取得するなどのトークンパラメータを使用するための私の手っ取り早いトリック:

RF <- randomForest(prePrior1[m:n],ntree=2,...)
于 2012-10-29T08:13:33.250 に答える
4

と同様にis.na、を使用is.infiniteして無限の出現を見つけることができます。

于 2011-12-31T18:21:29.903 に答える
2

を見てくださいwith、例えば:

> with(df, df == Inf)
        foo   bar   baz   abc ...
[1,]  FALSE FALSE  TRUE FALSE ...
[2,]  FALSE  TRUE FALSE FALSE ...
...
于 2011-12-31T18:24:47.220 に答える
1

ジョランの答えはあなたが望むものであり、有益です。is.na()およびの詳細については、 https://stat.ethz.ch/R-manual/R-devel/library/Matrix/html/is.na-methods.htmlis.infinite()を確認する必要があります。 さらに、論理ベクトルを取得した後、これは、元のベクトルの各要素がNA / Infであるかどうかを示し、次のように関数を使用してインデックスを取得できます。which()

> v1 <- c(1, Inf, 2, NaN, Inf, 3, NaN, Inf)
> is.infinite(v1)
[1] FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE  TRUE
> which(is.infinite(v1))
[1] 2 5 8
> is.na(v1)
[1] FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE
> which(is.na(v1))
[1] 4 7

のドキュメントwhich()はこちらhttps://stat.ethz.ch/R-manual/R-devel/library/base/html/any.html

于 2015-11-26T06:51:45.637 に答える