私はこれを解決策を見つけることなく広範囲に研究しました。次のようにデータセットをクリーンアップしました。
library("raster")
impute.mean <- function(x) replace(x, is.na(x) | is.nan(x) | is.infinite(x) ,
mean(x, na.rm = TRUE))
losses <- apply(losses, 2, impute.mean)
colSums(is.na(losses))
isinf <- function(x) (NA <- is.infinite(x))
infout <- apply(losses, 2, is.infinite)
colSums(infout)
isnan <- function(x) (NA <- is.nan(x))
nanout <- apply(losses, 2, is.nan)
colSums(nanout)
予測アルゴリズムを実行すると問題が発生します。
options(warn=2)
p <- predict(default.rf, losses, type="prob", inf.rm = TRUE, na.rm=TRUE, nan.rm=TRUE)
すべての調査では、データ内でNAまたはInfまたはNaNである必要があると述べていますが、見つかりません。 [削除済み]でデータとrandomForestの概要を検索できるようにしました(とにかく)
4: .C("classForest", mdim = as.integer(mdim), ntest = as.integer(ntest),
nclass = as.integer(object$forest$nclass), maxcat = as.integer(maxcat),
nrnodes = as.integer(nrnodes), jbt = as.integer(ntree), xts = as.double(x),
xbestsplit = as.double(object$forest$xbestsplit), pid = object$forest$pid,
cutoff = as.double(cutoff), countts = as.double(countts),
treemap = as.integer(aperm(object$forest$treemap, c(2, 1,
3))), nodestatus = as.integer(object$forest$nodestatus),
cat = as.integer(object$forest$ncat), nodepred = as.integer(object$forest$nodepred),
treepred = as.integer(treepred), jet = as.integer(numeric(ntest)),
bestvar = as.integer(object$forest$bestvar), nodexts = as.integer(nodexts),
ndbigtree = as.integer(object$forest$ndbigtree), predict.all = as.integer(predict.all),
prox = as.integer(proximity), proxmatrix = as.double(proxmatrix),
nodes = as.integer(nodes), DUP = FALSE, PACKAGE = "randomForest")
3: predict.randomForest(default.rf, losses, type = "prob", inf.rm = TRUE,
na.rm = TRUE, nan.rm = TRUE)
2: predict(default.rf, losses, type = "prob", inf.rm = TRUE, na.rm = TRUE,
nan.rm = TRUE)
1: predict(default.rf, losses, type = "prob", inf.rm = TRUE, na.rm = TRUE,
nan.rm = TRUE)
コードは完全に再現可能ではありません(実際のrandomForest
アルゴリズムは実行されていません)が、notInf
の値を列ベクトルの手段に置き換えています。これは、_na.rm = TRUE
_関数内のmean()
の呼び出しの_impute.mean
_引数が、NA
の値(Inf
の値ではなく)を削除するためです。
これは、たとえば次の方法で確認できます。
_impute.mean <- function(x) replace(x, is.na(x) | is.nan(x) | is.infinite(x), mean(x, na.rm = TRUE))
losses <- apply(losses, 2, impute.mean)
sum( apply( losses, 2, function(.) sum(is.infinite(.))) )
# [1] 696
_
無限の値を取り除くには、次を使用します。
_impute.mean <- function(x) replace(x, is.na(x) | is.nan(x) | is.infinite(x), mean(x[!is.na(x) & !is.nan(x) & !is.infinite(x)]))
losses <- apply(losses, 2, impute.mean)
sum(apply( losses, 2, function(.) sum(is.infinite(.)) ))
# [1] 0
_
エラーメッセージの原因の1つ:
外部関数呼び出しのNA/NaN/Inf(引数X)
RandomForestをトレーニングする場合、data.frameにcharacter
- class変数があります。警告が付いている場合:
強制によって導入されたNA
すべての文字変数が因子に変換されていることを確認してください。
例
set.seed(1)
dat <- data.frame(
a = runif(100),
b = rpois(100, 10),
c = rep(c("a","b"), 100),
stringsAsFactors = FALSE
)
library(randomForest)
randomForest(a ~ ., data = dat)
利回り:
RandomForest.default(m、y、...)のエラー:外部関数呼び出しのNA/NaN/Inf(arg 1)さらに:警告メッセージ:In data.matrix(x):強制によって導入されたNA
ただし、stringsAsFactors = FALSE
引数で実行されます。