Dane wejściowe:
-> cechy koszulki (kolor, logo itp.)
-> marża zysku
Trenowałem losowy las na powyższych i Y i osiągnąłem rozsądną dokładność na danych testowych. Więc mam
.
Chciałbym teraz znaleźć tj. Rozkład prawdopodobieństwa cech X, biorąc pod uwagę, że oczekuję tak dużej marży zysku.
Jak to zrobić za pomocą losowego lasu (lub innego dyskryminującego modelu)?
Jedną z sugestii dla mnie może być rozpoczęcie od modelu generatywnego, a nie dyskryminacyjnego. Ale, rozumiem, że model generatywny wymaga zwykle dużej ilości danych do trenowania, chyba że przyjmą pewne bardzo restrykcyjne założenia, takie jak warunkowa niezależność w przypadku Naive Bayes?
Ponadto z tego, co słyszałem, postawiono podobne pytanie dotyczące odkrywania leków i opracowano algorytmy, które wymyślają nowe kandydujące leki, które mają duży sukces. Czy ktoś może skierować mnie do zbadania literatury w tej dziedzinie?
Aktualizacja:
Natknąłem się na to i to, co mówi o GAN wykorzystywanych do odkrywania narkotyków. Generatywne sieci przeciwne wydają się dobrze pasować do mojego opisu problemu, więc czytałem o nich. Ale zrozumiałem, że GAN generuje próbki bez nadzoru. Próbują wytworzyć próbkę, która jest jak najpierw wychwytywanie podstawowego rozkładu X, a następnie pobieranie próbek z tego rozkładu. Ale interesuje mnie X | Y. X i Y są zdefiniowane powyżej. Czy powinienem odkrywać coś innego niż GAN? Jakieś wskazówki proszę?
Dalsze pytanie:
Wyobraź sobie, że mam przeszkolony GAN, który nauczył się robić koszulki (próbka wyjściowa X). Jak mogę zdobyć 5 najlepszych koszulek dla danego Y?
źródło
Odpowiedzi:
Ta odpowiedź została znacznie zmodyfikowana w stosunku do pierwotnej postaci. Wady mojej oryginalnej odpowiedzi zostaną omówione poniżej, ale jeśli chcesz z grubsza zobaczyć, jak ta odpowiedź wyglądała, zanim dokonałem dużej edycji, spójrz na następujący notatnik: https://nbviewer.jupyter.org/github /dmarx/data_generation_demo/blob/54be78fb5b68218971d2568f1680b4f783c0a79a/demo.ipynb
Oszacowanie maksymalnego prawdopodobieństwa
... i dlaczego tu nie działa
W mojej pierwotnej odpowiedzi techniką, którą zasugerowałem, było użycie MCMC w celu oszacowania maksymalnego prawdopodobieństwa. Ogólnie rzecz biorąc, MLE jest dobrym podejściem do znalezienia „optymalnych” rozwiązań prawdopodobieństw warunkowych, ale mamy tutaj problem: ponieważ stosujemy model dyskryminacyjny (w tym przypadku las losowy), nasze prawdopodobieństwa są obliczane w odniesieniu do granic decyzji . Mówienie o „optymalnym” rozwiązaniu takiego modelu nie ma sensu, ponieważ gdy znajdziemy się wystarczająco daleko od granicy klasy, model po prostu przewidzi takie dla wszystkiego. Jeśli mamy wystarczającą liczbę klas, niektóre z nich mogą być całkowicie „otoczone”, w takim przypadku nie będzie to stanowić problemu, ale klasy na granicy naszych danych zostaną „zmaksymalizowane” przez wartości, które niekoniecznie są wykonalne.
Aby to zademonstrować, wykorzystam kod wygody, który można znaleźć tutaj , który zapewnia
GenerativeSampler
klasę, która otacza kod z mojej oryginalnej odpowiedzi, trochę dodatkowego kodu dla tego lepszego rozwiązania oraz kilka dodatkowych funkcji, z którymi się bawiłem (niektóre z nich działają , niektóre które nie), których prawdopodobnie nie będę tutaj wchodził.W tej wizualizacji x to prawdziwe dane, a klasa, którą jesteśmy zainteresowani, jest zielona. Kropki połączone linią to narysowane przez nas próbki, a ich kolor odpowiada kolejności, w jakiej zostały pobrane, a ich „cieńsza” pozycja sekwencji jest podana na etykiecie paska koloru po prawej stronie.
Jak widać, próbnik dość szybko oddzielił się od danych, a następnie po prostu odstaje dość daleko od wartości przestrzeni cech, które odpowiadają rzeczywistym obserwacjom. Oczywiście jest to problem.
Jednym ze sposobów, w jaki możemy oszukiwać, jest zmiana naszej funkcji propozycji, aby umożliwić funkcjom przyjmowanie wartości, które faktycznie zaobserwowaliśmy w danych. Spróbujmy i zobaczmy, jak to zmienia zachowanie naszego wyniku.
Wprowadź regułę Bayesa
Po tym, jak zaśmieciliście mnie, że mam mniej kłopotów z matematyką, bawiłem się z tym dość sporą kwotą (stąd budowałem ten
GenerativeSampler
przedmiot) i napotkałem problemy, które przedstawiłem powyżej. Kiedy zdałem sobie z tego sprawę, czułem się naprawdę, naprawdę głupio, ale oczywiście to, o co prosisz o wezwania do zastosowania reguły Bayesa, przepraszam za wcześniejsze lekceważenie.Jeśli nie znasz zasady Bayesa, wygląda to tak:
W wielu aplikacjach mianownik jest stałą, która działa jak składnik skalujący, aby zapewnić, że licznik zintegruje się z 1, więc reguła jest często przekształcana w ten sposób:
Lub zwykłym angielskim: „a posterior jest proporcjonalne do prawdopodobieństwa wcześniejszego”.
Wygląda podobnie? A teraz:
Tak, dokładnie nad tym pracowaliśmy wcześniej, konstruując oszacowanie dla MLE, które jest zakotwiczone w obserwowanym rozkładzie danych. Nigdy nie myślałem o rządzeniu Bayes w ten sposób, ale ma to sens, więc dziękuję za umożliwienie mi odkrycia tej nowej perspektywy.
Po zapoznaniu się z tym wnioskiem, że musimy uwzględnić wcześniejsze dane, zróbmy to, instalując standardowe KDE i zobaczmy, jak to zmienia nasz wynik.
I oto masz: duży czarny „X” jest naszym oszacowaniem na mapie (te kontury są KDE tylnego).
źródło
Jednym ze sposobów przejścia do przodu może być:
Utwórz sieć neuronową ze sprzężeniem zwrotnym, która, biorąc pod uwagę Y (prawdopodobnie chcesz ją znormalizować), przewiduje X. Tak więc wyjście modelu (ostatniej warstwy) byłoby zestawem neuronów softmax dla każdej cechy. Więc jeśli funkcja 1 (np. Kolor) ma 4 opcje, zastosujesz softmax na czterech neuronach i zrobisz to samo dla każdej funkcji.
Wtedy twoją funkcją straty może być suma (lub kombinacja liniowa, jeśli wolisz) entropii krzyżowej dla każdej cechy.
źródło