Исправление известного смещения в собранных данных - PullRequest
0 голосов
/ 06 апреля 2009

Хорошо, вот проблема, аналогичная моей проблеме (ниже я подробно остановлюсь на реальной проблеме, но я думаю, что эту аналогию будет легче понять).

У меня есть странная двусторонняя монета, которая выпадает только на головы (случайным образом) 1 на каждые 1001 броска (остальная часть - хвосты). Другими словами, на каждые 1000 хвостов, которые я вижу, будет 1 голова.

У меня есть своеобразное заболевание, когда я замечаю только 1 из каждых 1000 хвостов, которые вижу, но я замечаю каждую голову, и поэтому мне кажется, что частота появления головы или хвоста равна 0,5. Конечно, я знаю об этом заболевании и его влиянии, поэтому могу компенсировать его.

Кто-то теперь дает мне новую монету, и я заметил, что скорость замечать головы теперь составляет 0,6. Учитывая, что моя болезнь не изменилась (я все еще замечаю только 1 на каждые 1000 хвостов), как мне рассчитать фактическое отношение голов к хвостам, которое производит эта новая монета?


Хорошо, так в чем же проблема? Ну, у меня есть куча данных, состоящих из ввода и вывода, которые равны 1 и 0. Я хочу научить управляемый алгоритм машинного обучения прогнозировать ожидаемый результат (с плавающей запятой между 0 и 1) с учетом входных данных. Проблема в том, что 1 очень редки, и это приводит к искажению внутренней математики, потому что она становится очень восприимчивой к ошибкам округления - даже при использовании высокоточной математики с плавающей точкой.

Итак, я нормализую данные, случайно пропустив большинство из 0 тренировочных выборок, чтобы было примерно равное соотношение 1 и 0. Конечно, это означает, что теперь выходные данные алгоритма машинного обучения больше не предсказывают вероятность, т.е. вместо того, чтобы предсказывать 0,001, как следует, теперь он предсказал бы 0,5.

Мне нужен способ преобразовать выходные данные алгоритма машинного обучения обратно в вероятность в исходном обучающем наборе.

Примечание автора (2015-10-07): Позже я обнаружил, что этот метод обычно известен как "понижающая выборка"

1 Ответ

2 голосов
/ 06 апреля 2009

Вы рассчитываете следующее

calculatedRatio = heads / (heads + tails / 1000)

и вам нужно

realRatio = heads / (heads + tails)

Решение обоих уравнений для хвостов дает следующие уравнения.

tails = 1000 / calculatedRatio - 1000
tails = 1 / realRatio - 1

Сочетание обоих дает следующее.

1000 / calculateRatio - 1000 = 1 / realRatio - 1

И, наконец, решение для realRatio.

realRatio = 1 / (1000 / calculatedRatio - 999)

Кажется, правильно. Рассчитанный коэффициент 0,5 дает реальный коэффициент 1/1001, 0,6 дает 3/2003.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...