Входные данные:
-> особенности футболки (цвет, логотип и т. Д.)
-> маржа прибыли
Я натренировал случайный лес на вышеуказанных и Y и добился разумной точности на тестовых данных. Так что я
.
Теперь я хотел бы найти то есть распределение вероятностей X объектов, учитывая, что я ожидаю такой большой прибыли.
Как мне сделать это со случайным лесом (или любой другой дискриминационной моделью)?
Одним из предложений для меня может быть начать с генеративной модели, а не дискриминационной модели. Но, насколько я понимаю, генеративная модель обычно требует большого количества данных для обучения, разве что это делает некоторые очень ограничительные предположения, такие как условная независимость в случае наивного Байеса?
Другое предложение может состоять в том, чтобы просто переключить и Y и обучить дискриминационную модель. Теперь X будет маржой прибыли, а Y - особенностями рубашки. P ( Y | X ) будет напрямую давать мне распределение вероятностей характеристик футболки с учетом целевой прибыли. Но такой подход мне не кажется правильным, так как я всегда думал, что X - случайные переменные, а Y - эффект.
Кроме того, из того, что я слышал, подобный вопрос был задан для открытия лекарств, и были разработаны алгоритмы, которые придумывают новые лекарства-кандидаты, которые имеют высокую степень успеха. Может ли кто-нибудь указать мне на исследование литературы в этой области?
Обновить:
Я пришел через это , и это , которое говорит о Gans используется для обнаружения наркотиков. Генеративное adversial сеть , кажется , как хорошо подходит для моей постановки задачи , так что я читал о них. Но я понял одну вещь: GAN генерирует образцы без присмотра. Они пытаются произвести выборку, которая как сначала захватывает базовое распределение X, а затем производит выборку из этого распределения. Но меня интересует X | Y. X и Y определены выше. Должен ли я изучать что - то другое , чем Gans? Любые указатели , пожалуйста?
Контрольный вопрос:
Представьте, что у меня есть тренировка ГАН, которая научилась делать футболки (пример выходных X). Как я могу получить топ-5 рубашек для данного Y?
Ответы:
Этот ответ был значительно изменен по сравнению с первоначальной формой. Недостатки моего первоначального ответа будут обсуждаться ниже, но если вы хотите примерно увидеть, как этот ответ выглядел до того, как я сделал крупное редактирование, взгляните на следующую записную книжку: https://nbviewer.jupyter.org/github. /dmarx/data_generation_demo/blob/54be78fb5b68218971d2568f1680b4f783c0a79a/demo.ipynb
Оценка максимального правдоподобия
... и почему это не работает здесь
В моем первоначальном ответе я предложил использовать метод MCMC для оценки максимального правдоподобия. Как правило, MLE является хорошим подходом к поиску «оптимальных» решений условных вероятностей, но здесь у нас есть проблема: поскольку мы используем дискриминационную модель (в данном случае случайный лес), наши вероятности рассчитываются относительно границ решения , На самом деле не имеет смысла говорить об «оптимальном» решении для модели, подобной этой, потому что, как только мы отойдем достаточно далеко от границы класса, модель будет просто предсказывать их для всего. Если у нас достаточно классов, некоторые из них могут быть полностью «окружены», и в этом случае это не будет проблемой, но классы на границе наших данных будут «максимизированы» значениями, которые не всегда выполнима.
Чтобы продемонстрировать, я собираюсь использовать некоторый удобный код, который вы можете найти здесь , который предоставляет
GenerativeSampler
класс, который оборачивает код из моего исходного ответа, некоторый дополнительный код для этого лучшего решения и некоторые дополнительные функции, с которыми я играл (некоторые из которых работают некоторые, которые этого не делают, что я, вероятно, не буду вдаваться в здесь.В этой визуализации x - это реальные данные, а интересующий нас класс - зеленый. Точки, соединенные линией, представляют собой образцы, которые мы нарисовали, и их цвет соответствует порядку, в котором они были взяты, с их «утонченной» последовательностью, обозначенной цветовой меткой справа.
Как вы можете видеть, сэмплер довольно быстро отклонился от данных, а затем просто повисает довольно далеко от значений пространства пространственных объектов, которые соответствуют любым реальным наблюдениям. Очевидно, это проблема.
Один из способов обмануть нас - изменить функцию предложения, чтобы функции могли принимать значения, которые мы действительно наблюдали в данных. Давайте попробуем это и посмотрим, как это меняет поведение нашего результата.
Введите правило Байеса
После того, как вы травили меня быть менее рука Волнистым с математикой здесь, я играл с этим изрядным (отсюда мне строящим
GenerativeSampler
вещью), и я столкнулся проблемы , которые я выложил выше. Я чувствовал себя очень, очень глупо , когда я сделал эту реализацию, но , очевидно , что вы просите призывы к применению правила Байеса , и я прошу прощения за то , что пренебрежительно ранее.Если вы не знакомы с правилом Байеса, это выглядит так:
Во многих приложениях знаменатель является константой, которая действует как масштабирующий член, чтобы гарантировать, что числитель интегрируется в 1, поэтому правило часто пересчитывается таким образом:
Или в простом английском языке: «задний пропорционально предшествующие времена правдоподобного».
Выглядит знакомо? Как насчет сейчас:
Да, это именно то, к чему мы работали ранее, построив оценку для MLE, которая привязана к наблюдаемому распределению данных. Я никогда не думал о правилах Байеса таким образом, но это имеет смысл, поэтому спасибо, что дали мне возможность открыть для себя эту новую перспективу.
Итак, сделав это понимание того, что нам нужно включить априор для данных, давайте сделаем это путем подгонки стандартного KDE и посмотрим, как это изменит наш результат.
И вот, у вас это есть: большой черный 'X' - это наша оценка MAP (эти контуры - KDE на задней стороне).
источник
Один из способов продвижения вперед может быть:
Создайте нейронную сеть с прямой связью, которая, учитывая Y (вероятно, вы хотите ее нормализовать), предсказывает X. Таким образом, выход модели (последний слой) будет набором нейронов softmax для каждого объекта. Таким образом, если функция 1 (например, цвет) имеет 4 варианта, вы примените softmax к четырем нейронам и сделаете то же самое для каждой функции.
Тогда вашей функцией потерь может быть сумма (или линейная комбинация, если вы предпочитаете) перекрестной энтропии для каждого признака.
источник