Ошибка R в glmnet: NA/NaN/Inf при вызове сторонней функции
Я пытаюсь создать модель, используя glmnet, (в настоящее время с помощью cv, чтобы найти значение лямбда), и я получаю ошибку NA/NaN/Inf in foreign function call (arg 5)
, Я считаю, что это как-то связано со значениями NA в моем наборе данных, потому что когда я удаляю все точки данных с помощью NA, команда выполняется успешно.
У меня сложилось впечатление, что glmnet может обрабатывать значения NA. Я не уверен, откуда исходит ошибка:
> res <- cv.glmnet(features.mat, as.factor(tmp[,"outcome"]), family="binomial")
Error in lognet(x, is.sparse, ix, jx, y, weights, offset, alpha, nobs, :
NA/NaN/Inf in foreign function call (arg 5)
Набор данных выглядит примерно так:
> head(features.mat)
6 x 8 sparse Matrix of class "dgCMatrix"
a b c e f g h i
1 1 1 138 NA NA 15 NA .
4 1 3 171 NA NA 17 NA .
7 1 1 156 NA NA 5 NA .
8 1 4 97 NA NA 7 NA .
9 1 1 219 NA NA 11 NA .
10 1 . 263 NA NA 20 NA .
> head(as.factor(tmp[,"outcome"]))
[1] 0 0 0 0 0 0
Levels: 0 1
4 ответа
Дополнение: Если вы получаете эту ошибку, не имея NA в вашем фрейме данных, вы, вероятно, не определили свою входную матрицу с помощью функции model.matrix.
x <- model.matrix( ~ ., Data)
Я знаю, что это не ответ на ваш вопрос, но у меня была та же ошибка, что и у вас, и я нашел это решение. Так что это может быть полезно для других.
Типы данных Chars, преобразованные в коэффициенты, не могут поддерживаться для cv.glmnet, как указано выше, не могут обрабатывать NA. Используйте либо as.numeric, либо as.double.
Обратите внимание, что это также происходит, если вы включаете функцию даты. У меня нет NA, но есть эта ошибка. Когда я удалил переменную даты, все работало нормально.