Машинное обучение: количественная оценка неопределенности в отношении недостающих данных

Мой вопрос касается конкретной проблемы классификации, которая у меня есть.

Мои тренировочные данные полны и не имеют пропущенных данных. Я могу построить любую модель классификации (SVM, Случайный лес и т. Д.), Чтобы получить хорошие результаты. До сих пор свиньи не летают в тропосфере.

Проблема в том, что я хочу применить эти модели к данным с отсутствующими функциями. Я не заинтересован в вменении любого рода. Мне бы хотелось, чтобы показатель "неопределенности" увеличивался при увеличении количества отсутствующих функций, и я все еще хочу, чтобы модель показала результат (даже при высокой неопределенности). Например, для одной записи, если 5 из 10 объектов являются пустыми данными, модель даст класс, но с неопределенностью 50% (в идеале я могу указать, насколько "важна" каждая переменная).

Я не сталкивался ни с чем подобным онлайн, и я искал некоторое время. Спасибо за вашу помощь!

1 ответ

Решение

Почему это конкретный вопрос?

Начнем с очень простой модели - линейной (f(x) = sign(<w,x> + b)). Предположим также, что теперь нам дан вектор с отсутствующим значением. x_i=N/A и что соответствующий вес не равен нулю (w_i != 0); без потери общности пусть w_i>0, тогда мы можем видеть, что я всегда могу "вменять" x_i так мало (очень, очень отрицательное значение, как -10e10000) что модель ответит -1 и симметрично, настолько большое значение, что он будет выводить +1, Для того, чтобы сделать прогноз (а в дальнейшем - дать количественную оценку определенности), нам необходимо предположить возможные значения x_i, Я надеюсь, что этот простой пример показывает, что без каких-либо допущений мы потерялись - мы не можем ничего сделать, никаких предсказаний, никакой определенности - ничего. Это очень известный факт в машинном обучении - у нас не может быть прогноза без смещения, вызванного моделью. В данном случае - мы моделируем недостающие значения.

Что мы можем сделать?

Нам нужно договориться о том, какими могут быть ценности. Есть много вариантов:

  • мы можем предположить равномерное распределение, например, если это категориальная переменная со значениями M, мы ставим вероятность 1/M для каждого возможного случая. Если это что-то между 0 и 1, мы можем использовать равномерное распределение в таком диапазоне. В таком случае нам нужны ограниченные значения. Если значения не ограничены - равномерного распределения нет.
  • мы предполагаем некоторое бесконечное распределение поддержки, например, простое гауссовское, которое либо произвольно (0-среднее, 1-е число), либо получено из данных (эмпирическое среднее + эмпирическое стандартное).
  • мы делаем вывод о некотором сложном распределении, возможно, используя непараметрическую оценку (KDE) или даже условные распределения, вытекающие из других измерений.

Хорошо, чем это отличается от вменения данных? Вменение данных предполагает заполнение пропущенного значения, оно дает вам точку. Здесь я говорю о том, чтобы думать о нашей точке зрения с отсутствующими значениями как о вероятностном распределении - так что это скорее байесовский подход. Теперь это уже не точка данных, это бесконечное облако точек различной плотности.

Как применить классическую технику ML на дистрибуции?

К сожалению, здесь все становится сложным, так как это совершенно конкретный вопрос модели. Поэтому в зависимости от того, какой тип классификатора / регрессора вы используете - вам нужен другой подход. Простейшим случаем будет случайный лес, поэтому я сосредоточусь на этом, а позже приведу менее эффективное, но более общее решение для любой модели.

Случай случайного леса

В деревьях решений каждый узел является решением по некоторой функции. Таким образом, чтобы сделать прогноз нашего "распределения", мы просто помещаем точку в процесс принятия решения - если узел запрашивает существующую функцию - мы обрабатываем ее нормально. Что делать, когда нас спрашивают об отсутствующей функции? Мы разделяем выполнение и вычисляем оба пути, но с весами, вычисленными из внешнего распределения и порога в узле. Например, давайте предположим, что мы выбрали равномерное распределение на [0,1], и порог теперь равен 0,75 (это означает, что этот узел спрашивает, является ли отсутствующее значение <0,75 или>=0,75). Мы разделяем вычисления и проверяем предсказание на обе части, та, которая имеет решение <0,75, получает вес 0,75 (так как она является интегральной INT_{0}^{0.75} pdf(x) dx, где pdf(x) это наше равномерное распределение) и второй путь получает вес 0,25. В конце мы получаем ожидаемое значение. В чем наша уверенность? Вы вычисляете как обычно или выполняете более сложный анализ доверительных интервалов.

Общий метод

Наиболее общий метод (который может использоваться для любой модели как черный ящик) - это метод Монте-Карло. У нас есть наш дистрибутив pdf(x), поэтому мы повторяем выборку из этого распределения, классифицируем и записываем выходные данные. В конце - мы собираем голоса и получаем классификацию и доверие. Псевдокод следует

function CLASSIFY_WIT_NA(x, probability_model, model, k=1000):
  pdf <- probability_model(x.missing_values)
  predictions <- empty set
  for i=1 to k
    x' ~ pdf
    prediction <- model(x')
    predictions.add(prediction)

  class <- most_common_element_of(predictions)
  confidence <- count(class, predictions) / k
Другие вопросы по тегам