Как я могу получить функцию плотности вероятности из регрессионного случайного леса?

Я использую случайный лес для задачи регрессии, чтобы предсказать значения меток Test-Y для данного набора Test-X (новые значения функций). Модель прошла обучение по заданному Train-X (функции) и Train-Y (метки). "randomForest" из R очень хорошо подходит для прогнозирования числовых значений Test-Y. Но это не все, чего я хочу.

Вместо числа я хочу использовать случайный лес для получения функции плотности вероятности. Я искал решение в течение нескольких дней, и вот что я нашел до сих пор:

  1. "randomForest" не производит вероятности для регрессии, но только в классификации. (через "Предсказание" и настройку type = prob).

  2. Использование "QuantregForest" предоставляет хороший способ создания и визуализации интервалов прогнозирования. Но все еще не функция плотности вероятности!

Любая другая мысль по этому поводу?

2 ответа

Решение

Пожалуйста, смотрите predict.all параметр predict.randomForest функция.

library("ggplot2")
library("randomForest")

data(mpg)
rf = randomForest(cty ~ displ + cyl + trans, data = mpg)

# Predict the first car in the dataset
pred = predict(rf, newdata = mpg[1, ],  predict.all = TRUE)
hist(pred$individual)

Гистограмма 500 "элементарных" предсказаний выглядит так:

Вы также можете использовать quantregForest с очень тонкой сеткой квантилей, преобразовать их в "накопительную функцию распределения (cdf)" с R-функцией ecdf и преобразовать этот cdf в оценку плотности с помощью оценщика плотности ядра.

Другие вопросы по тегам