Вопрос

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

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

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

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


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

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

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

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

Это было полезно?

Решение

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

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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top