Nasıl düzeltilir: randomforest.default(m, y, …): yabancı işlev çağrısında na/nan/inf
R’de karşılaşabileceğiniz bir hata:
Error in randomForest.default(m, y, ...): NA/NaN/Inf in foreign function call (arg 1)
Bu hata iki nedenden dolayı ortaya çıkabilir:
- Veri setinde NA, NaN veya Inf değerleri var
- Veri kümesindeki değişkenlerden biri bir karakterdir
Bu hatayı düzeltmenin en kolay yolu eksik veri içeren satırları kaldırmak ve karakter değişkenlerini faktör değişkenlerine dönüştürmektir:
#remove rows with missing values df <- na. omitted (df) #convert all character variables to factor variables library (dplyr) df %>% mutate_if(is. character , as. factor )
Bu eğitimde, bu hatanın pratikte nasıl düzeltileceğine dair bir örnek paylaşılmaktadır.
İlgili: R’de Rastgele Ormanlar Nasıl Oluşturulur (Adım Adım)
Hata nasıl yeniden oluşturulur?
R’de aşağıdaki veri çerçevesine rastgele bir orman sığdırmaya çalıştığımızı varsayalım:
library (randomForest)
#create data frame
df <- data. frame (y <- c(30, 29, 30, 45, 23, 19, 9, 8, 11, 14),
x1 <- c('A', 'A', 'B', 'B', 'B', 'B', 'C', 'C', 'C', 'C'),
x2 <- c(4, 4, 5, 7, 8, 7, 9, 6, 13, 15))
#attempt to fit random forest model
model <- randomForest(formula = y ~ ., data = df)
Error in randomForest.default(m, y, ...):
NA/NaN/Inf in foreign function call (arg 1)
x1 veri çerçevesindeki bir karakter değişkeni olduğu için hata alıyoruz.
Veri çerçevesinin yapısını görüntülemek için str() işlevini kullanarak bunu doğrulayabiliriz:
str(df)
'data.frame': 10 obs. of 3 variables:
$ y....c.30..29..30..45: num 30 29 30 45 23 19 9 8 11 14
$ x1....c..A....A....B....B.... : chr "A" "A" "B" "B"
$ x2....c.4..4..5..7..: num 4 4 5 7 8 7 9 6 13 15
Hata nasıl düzeltilir?
Bu hatayı düzeltmek için, her karakter sütununu bir faktör sütununa dönüştürmek üzere dplyr’in mutate_if() işlevini kullanabiliriz:
library (dplyr)
#convert each character column to factor
df = df %>% mutate_if(is. character , as. factor )
Daha sonra rastgele orman modelini veri çerçevesine sığdırabiliriz:
#fit random forest model
model <- randomForest(formula = y ~ ., data = df)
#view summary of model
model
Call:
randomForest(formula = y ~ ., data = df)
Type of random forest: regression
Number of trees: 500
No. of variables tried at each split: 1
Mean of squared residuals: 65.0047
% Var explained: 48.64
Veri çerçevesinde artık karakter değişkeni olmadığından bu sefer herhangi bir hata almıyoruz.
Ek kaynaklar
Aşağıdaki eğitimlerde R’deki diğer yaygın hataların nasıl çözüleceği açıklanmaktadır:
“Koşulun uzunluğu > 1 ve yalnızca ilk öğe kullanılacak” sorununu düzeltme
R’de nasıl düzeltilir: dim(X) pozitif uzunluğa sahip olmalıdır
R’de nasıl düzeltilir: doğru/yanlışın gerekli olduğu yerde eksik değer
Nasıl Düzeltilir: Zorlamanın Getirdiği NA’lar