Różnica między używaniem RMSE i nDCG do oceny systemów rekomendujących
Jakiego rodzaju miary błędów podają RMSE i nDCG podczas oceny systemu rekomendacji i skąd mam wiedzieć, kiedy stosować jeden nad drugim? Gdybyś mógł podać przykład, kiedy używać każdego z nich, byłoby to również świetne!
nDCG służy do oceny złotej listy rankingowej (zazwyczaj ocenianej przez ludzi) w porównaniu z listą rankingową wyników. Im większa jest korelacja między dwiema listami rankingowymi, tj. Im bardziej podobne są rangi odpowiednich pozycji na obu listach, tym wartość nDCG jest bliższa 1.
RMSE (Root Mean Squared Error) jest zwykle używany do oceny problemów z regresją, w których wynik (przewidywana wartość skalarna) jest porównywany z prawdziwą wartością skalarną wyjściową dla danego punktu danych.
Tak więc, jeśli po prostu rekomendujesz partyturę (na przykład rekomendujesz ocenę filmu), użyj RMSE. Natomiast jeśli polecasz listę pozycji (na przykład listę powiązanych filmów), użyj nDCG.
nDCG jest miernikiem rankingu, a RMSE nim nie jest. W kontekście systemów rekomendujących użyjesz miernika rankingu, gdy twoje oceny są niejawne (np. Przedmiot pominięty a produkt zużyty), a nie jawny (użytkownik podaje rzeczywistą liczbę, a la Netflix).
Wybór wskaźnika uczenia się
Obecnie pracuję nad wdrożeniem Stochastic Gradient Descent (SGD) dla sieci neuronowych za pomocą propagacji wstecznej i chociaż rozumiem jej cel, mam kilka pytań dotyczących wyboru wartości współczynnika uczenia się.
* Czy tempo uczenia się jest powiązane z kształtem gradientu błędu, ponieważ dyktuje on tempo opadania?
* Jeśli tak, w jaki sposób wykorzystujesz te informacje do podjęcia decyzji o wartości?
* Jeśli nie jest to, jakie wartości mam wybrać i jak mam je wybrać?
* Wygląda na to, że chciałbyś mieć małe wartości, aby uniknąć przekroczenia wartości, ale jak wybrać taką, aby nie utknąć na lokalnych minimach lub zbyt długo zejść?
* Czy ma sens posiadanie stałego wskaźnika uczenia się, czy też powinienem użyć jakiejś metryki, aby zmienić jej wartość, gdy zbliżam się do minimum w gradiencie?
W skrócie: Jak wybrać kurs nauki dla SGD?
Poniżej znajduje się bardzo dobra uwaga (strona 12) dotycząca szybkości uczenia się w sieciach neuronowych (propagacja wsteczna) autorstwa Andrew Ng. Znajdziesz szczegółowe informacje dotyczące współczynnika uczenia się. http://web.stanford.edu/class/cs294a/sparseAutoencoder_2011new.pdf
Jeśli chodzi o Twój czwarty punkt, masz rację, że zwykle trzeba wybrać „zrównoważony” współczynnik uczenia się, który nie powinien ani przekraczać, ani zbiegać zbyt wolno. Można wykreślić współczynnik uczenia się w.r.t. zejście funkcji kosztu w celu zdiagnozowania / dostrojenia. W praktyce Andrew zwykle używa algorytmu L-BFGS (wspomnianego na stronie 12), aby uzyskać „dostatecznie dobry” współczynnik uczenia się.
Szukam na przykład stosów infrastruktury / przepływów pracy / potoków
Próbuję zrozumieć, jak wszystkie komponenty „dużych zbiorów danych” współgrają ze sobą w przypadku użycia w świecie rzeczywistym, np. hadoop, monogodb / nosql, storm, kafka,… Wiem, że to dość szeroka gama narzędzi używanych do różnych typów, ale chciałbym dowiedzieć się więcej o ich interakcji w aplikacjach, np. myślenie maszynowe dla aplikacji, aplikacji internetowej, sklepu internetowego. Mam odwiedzających / sesję, dane transakcji itp. I przechowuję je; ale jeśli chcę wydawać zalecenia w locie, nie mogę uruchamiać powolnej mapy / zmniejszać zadań związanych z tym w dużej bazie danych dzienników, które mam. Gdzie mogę dowiedzieć się więcej o aspektach infrastruktury? Myślę, że większość narzędzi mogę używać samodzielnie, ale podłączanie ich do siebie wydaje się sztuką samą w sobie. Czy są dostępne publiczne przykłady / przypadki użycia itp.? Rozumiem, że poszczególne potoki silnie zależą od przypadku użycia i użytkownika, ale tylko przykłady będą dla mnie bardzo przydatne.
Aby zrozumieć różne sposoby integracji uczenia maszynowego z aplikacjami produkcyjnymi, myślę, że warto przyjrzeć się projektom open source i artykułom / postom na blogach firm opisujących ich infrastrukturę. Wspólnym motywem, który mają te systemy, jest oddzielenie uczenia modelu od aplikacji modelowej. W systemach produkcyjnych aplikacja modelu musi być szybka, rzędu 100s ms, ale istnieje większa swoboda w tym, jak często należy aktualizować dopasowane parametry modelu (lub quivalent).
Ludzie korzystają z szerokiej gamy rozwiązań do szkolenia i wdrażania modeli:
* Zbuduj model, a następnie wyeksportuj go i wdróż za pomocą PMML
-AirBnB opisuje szkolenie modelu w R / Python i wdrażanie .Modele PMML za pośrednictwem OpenScoring.
-Pattern. Wzorzec to projekt związany z kaskadowaniem, który może wykorzystywać język PMML i wdrażać modele predykcyjne.
* Zbuduj model w MapReduce i uzyskaj dostęp do wartości w niestandardowym systemie
-Conjecture to projekt open source firmy Etsy, który umożliwia szkolenie modeli za pomocą Scalding, łatwiejsze w użyciu opakowanie Scala wokół MapReduce i wdrażanie za pośrednictwem PHP.
-Kiji to projekt open source firmy WibiData, który umożliwia ocenianie modeli (aplikacji) w czasie rzeczywistym, a także funkcjonalność utrwalania danych użytkownika i modeli szkoleniowych na tych danych za pośrednictwem skalowania.
Skorzystaj z systemu online, który pozwala na ciągłą aktualizację parametrów modelu.
-Google wydało świetny artykuł na temat wspólnego filtrowania online, które wdrożyli w celu radzenia sobie z rekomendacjami w Google News.
Jedno z najbardziej szczegółowych i jasnych wyjaśnień dotyczących konfigurowania złożonego potoku analitycznego pochodzi od ludzi z Twitch.
Podają szczegółowe motywacje dotyczące wyboru architektury gromadzenia, transportu, koordynacji, przetwarzania, przechowywania i wykorzystywania ich danych. Fascynująca lektura!
Airbnb i Etsy niedawno opublikowały szczegółowe informacje o swoich przepływach pracy.
Jakie są implikacje dla trenowania zbioru drzew z wysokim stronniczym zbiorem danych?
Mam wysoce stronniczy binarny zbiór danych – mam 1000 razy więcej przykładów klasy negatywnej niż pozytywnej. Chciałbym wyszkolić zbiór drzew (taki jak Extra Random Trees lub Random Forest) na tych danych, ale trudno jest stworzyć zestawy danych szkoleniowych, które zawierają wystarczającą liczbę przykładów pozytywnych klas. Jakie byłyby konsekwencje zastosowania metody losowania warstwowego w celu znormalizowania liczby pozytywnych i negatywnych przykładów? Innymi słowy, czy złym pomysłem jest, na przykład, sztuczne zawyżanie (przez ponowne próbkowanie) liczby pozytywnych przykładów klas w zbiorze uczącym?
Tak, to problematyczne. Jeśli przesadzisz mniejszość, ryzykujesz nadmiernym dopasowaniem. Jeśli podpróbujesz większość, ryzykujesz pominięciem aspektów klasy większości. Próbkowanie warstwowe jest równoważne przypisywaniu niejednolitych kosztów błędnej klasyfikacji. Alternatywy:
(1) Niezależne próbkowanie kilku podzbiorów z klasy większości i tworzenie wielu klasyfikatorów poprzez łączenie każdego podzbioru ze wszystkimi danymi klas mniejszości, jak sugeruje odpowiedź z @Debasis i opisano w tym artykule EasyEnsemble,
(2) SMOTE (Synthetic Minority Oversampling Technique) lub SMOTEBoost (łączące SMOTE ze wzmocnieniem) w celu stworzenia syntetycznych instancji klasy mniejszościowej poprzez tworzenie najbliższych sąsiadów w przestrzeni funkcji. SMOTE jest zaimplementowany w R w pakiecie DMwR.
Poleciłbym szkolenie na bardziej zrównoważonych podzbiorach danych. Trenowanie losowego lasu na zestawach losowo wybranych pozytywnych przykładów z podobną liczbą próbek negatywnych. W szczególności, jeśli cechy rozróżniające wykazują dużą zmienność, będzie to dość skuteczne i pozwoli uniknąć nadmiernego dopasowania. Jednak w rozwarstwieniu ważne jest, aby znaleźć równowagę, ponieważ nadmierne dopasowanie może stać się problemem niezależnie od tego. Sugerowałbym, aby zobaczyć, jak model radzi sobie z całym zbiorem danych, a następnie stopniowo zwiększać stosunek próbek pozytywnych do negatywnych, zbliżając się do równego stosunku, i wybierać ten, który maksymalizuje miernik wydajności na niektórych reprezentatywnych danych. Ten artykuł wydaje się dość istotny ttp: //statistics.berkeley.edu/sites/default/files/techreports/
666.pdf mówi o ważonym Losowym Lesie, który w większym stopniu penalizuje błędną klasyfikację klasy mniejszości.
Szybkim, łatwym i często skutecznym sposobem podejścia do tej nierównowagi byłoby losowe podpróbkowanie większej klasy (która w twoim przypadku jest klasą ujemną), przeprowadzenie klasyfikacji N wiele razy ze składnikami z dwóch klas (jednej pełnej, a drugiej podpróbka) i podają średnie wartości metryki, przy czym średnia jest obliczana na podstawie N (powiedzmy 1000) iteracji. Bardziej metodycznym podejściem byłoby wykonanie algorytmu Mapping Convergence (MC), który obejmuje identyfikację podzbioru silnie ujemnych próbek za pomocą jednoklasowego klasyfikatora, takiego jak OSVM lub SVDD, a następnie iteracyjne wykonanie klasyfikacji binarnej zbioru silnie negatywnych i pozytywnych próbek.
Czy GLM to model statystyczny czy uczenia maszynowego?
Myślałem, że uogólniony model liniowy (GLM) będzie uważany za model statystyczny, ale znajomy powiedział mi, że niektóre artykuły klasyfikują go jako technikę uczenia maszynowego. Który z nich jest prawdziwy (lub bardziej precyzyjny)? Wszelkie wyjaśnienia będą mile widziane
GLM jest absolutnie modelem statystycznym, ale modele statystyczne i techniki uczenia maszynowego nie wykluczają się wzajemnie. Ogólnie statystyki bardziej dotyczą wnioskowania o parametrach, podczas gdy w uczeniu maszynowym przewidywanie jest ostatecznym celem.
Jeśli chodzi o przewidywanie, statystyki i nauki o uczeniu maszynowym zaczęły rozwiązywać ten sam problem z różnych perspektyw. Zasadniczo statystyka zakłada, że dane zostały wygenerowane przez dany model stochastyczny. Zatem z perspektywy statystycznej zakłada się model i przy różnych założeniach, błędy są traktowane, a parametry modelu i inne pytania są wywnioskowane. Uczenie maszynowe pochodzi z perspektywy informatyki. Modele są algorytmiczne i zwykle wymaga się bardzo niewielu założeń dotyczących danych. Pracujemy z przestrzenią hipotez i błędem uczenia się. Najlepszy opis uczenia maszynowego, jaki znalazłem, znajduje się w książce Toma Mitchella zatytułowanej Machine Learning. Aby uzyskać bardziej wyczerpujący i kompletny pomysł dotyczący dwóch kultur, możesz przeczytać artykuł Leo Broimana zatytułowany Modelowanie statystyczne: dwie kultury Jednak należy dodać, że nawet jeśli te dwie nauki zaczynały z różnych perspektyw, teraz obie z nich dzielą uczciwe ilość powszechnej wiedzy i technik. Dlaczego, ponieważ problemy były takie same, ale narzędzia były inne. Więc teraz uczenie maszynowe jest głównie traktowane z perspektywy statystycznej (patrz książka Hastie, Tibshirani, Friedman The Elements of Statistical Learning from a machine
punkt widzenia uczenia się z potraktowaniem statystycznym i być może książka Kevina P. Murphy’ego Machine Learning: A probabilistyczna perspektywa, by wymienić tylko kilka z najlepszych dostępnych obecnie książek). Nawet historia rozwoju tej dziedziny pokazuje korzyści płynące z tego połączenia
perspektywy. Opiszę dwa wydarzenia. Pierwszym jest stworzenie drzew CART, które zostało stworzone przez Breimana na solidnym tle statystycznym. Mniej więcej w tym samym czasie Quinlan opracował ID3, C45, See5 i tak dalej, pakiet drzew decyzyjnych z bardziej informatycznym zapleczem. Teraz zarówno te rodziny drzew, jak i metody zespołowe, takie jak worki i lasy, stają się całkiem podobne.
Druga historia dotyczy wzmocnienia. Początkowo zostały opracowane przez Freunda i Shapire’a, kiedy odkryli AdaBoost. Wybory dotyczące projektowania AdaBoost były dokonywane głównie z perspektywy obliczeniowej. Nawet autorzy nie rozumieli dobrze, dlaczego to działa.
Dopiero 5 lat później Breiman (ponownie!) Opisał model adaboost z perspektywy statystycznej i wyjaśnił, dlaczego to działa. Od tego czasu różni wybitni naukowcy, z oboma typami doświadczeń, dalej rozwijali te pomysły, prowadząc do Plejad algorytmów wzmacniających, takich jak zwiększanie logistyczne, zwiększanie gradientowe, łagodne zwiększanie i tak dalej. Trudno teraz myśleć o zwiększaniu bez solidnego tła statystycznego. GLM to rozwój statystyczny. Jednak nowe metody Bayesa umieszczają ten algorytm również w środowisku uczenia maszynowego. Dlatego uważam, że oba twierdzenia mogą być słuszne, ponieważ interpretacja i sposób traktowania tego, jak to działa, mogą być różne.
Oprócz odpowiedzi Bena subtelne rozróżnienie między modelami statystycznymi a modelami uczenia maszynowego polega na tym, że w modelach statystycznych przed utworzeniem modelu wyraźnie decydujesz o strukturze równania wyjściowego. Model jest zbudowany w celu obliczenia parametrów / współczynników.
Weźmy na przykład model liniowy lub GLM,
y = a1x1 + a2x2 + a3x3
Twoje zmienne niezależne to x1, x2, x3, a współczynniki do określenia to a1, a2, a3. W ten sposób definiujesz strukturę swojego równania przed zbudowaniem modelu i obliczasz a1, a2, a3. Jeśli uważasz, że y jest w jakiś sposób skorelowane z x2 w sposób nieliniowy, możesz spróbować czegoś takiego.
y = a1x1 + a2 (x2) ^ 2 + a3x3.
W ten sposób wprowadzasz ograniczenie w zakresie struktury wyjściowej. Z natury modele statystyczne są modelami liniowymi, chyba że jawnie zastosujesz transformacje, takie jak sigmoida lub jądro, aby uczynić je nieliniowymi (GLM i SVM). W przypadku modeli uczenia maszynowego rzadko określa się strukturę wyników, a algorytmy, takie jak drzewa decyzyjne, są z natury nieliniowe i działają wydajnie. W przeciwieństwie do tego, co zauważył Ben, modele uczenia maszynowego to nie tylko przewidywanie, lecz także klasyfikacja, regresja itp., Które można wykorzystać do prognozowania, które są również wykonywane przez różne modele statystyczne.
Word2Vec do rozpoznawania nazwanych jednostek
Chcę skorzystać z implementacji word2vec Google, aby zbudować system rozpoznawania jednostek o określonej nazwie. Słyszałem, że rekurencyjne sieci neuronowe z wsteczną propagacją przez strukturę dobrze nadają się do zadań rozpoznawania nazwanych jednostek, ale nie udało mi się znaleźć przyzwoitej implementacji ani przyzwoitego samouczka dla tego typu modelu. Ponieważ pracuję z nietypowym korpusem, standardowe narzędzia NER w NLTK i podobne działały bardzo słabo i wygląda na to, że będę musiał wyszkolić własny system. Krótko mówiąc, jakie zasoby są dostępne dla tego rodzaju problemu? Czy jest dostępna standardowa rekurencyjna implementacja sieci neuronowej?
Zamiast „rekurencyjnych sieci neuronowych z propagacją wsteczną” można rozważyć podejście zastosowane przez Frantziego i in. glin. w National Center for Text Mining (NaCTeM) na University of Manchester for Termine (patrz: http://www.nactem.ac.uk/index.php i http://personalpages.manchester.ac.uk/staff/sophia. ananiadou / IJODL2000.pdf) Zamiast głębokich sieci neuronowych „łączą informacje językowe i statystyczne”. Dwie ostatnie publikacje wykorzystują architekturę głębokiego uczenia o nazwie CharWNN, aby rozwiązać ten problem. CharWNN został po raz pierwszy użyty do uzyskania najnowocześniejszych wyników (bez ręcznie wykonanych funkcji) w tagowaniu części mowy (POS) w korpusie angielskim. Drugi artykuł tego samego autora wykorzystuje tę samą (lub podobną) architekturę do przewidywania, czy słowo należy do 10 klas nazwanych jednostek, z widocznymi wynikami najnowszej wiedzy.
Jakiego modelu statystycznego należy użyć, aby przeanalizować prawdopodobieństwo, że pojedyncze zdarzenie wpłynęło na dane dotyczące zmian w czasie.
Próbuję znaleźć formułę, metodę lub model do analizy prawdopodobieństwa, że określone zdarzenie wpłynęło na niektóre dane dotyczące zmian w czasie. Trudno mi się dowiedzieć, czego szukać w Google. Oto przykładowy scenariusz: Wyobraź sobie, że jesteś właścicielem firmy, która ma średnio 100 klientów dziennie. Pewnego dnia decydujesz, że chcesz zwiększyć liczbę klientów przychodzących codziennie do Twojego sklepu, więc robisz szalony wyczyn przed sklepem, aby zwrócić na siebie uwagę. W ciągu następnego tygodnia widzisz średnio 125 klientów dziennie. W ciągu następnych kilku miesięcy ponownie decydujesz, że chcesz zdobyć więcej klientów i być może utrzymać je nieco dłużej, więc próbujesz innych przypadkowych rzeczy, aby przyciągnąć więcej klientów do swojego sklepu. Niestety, nie jesteś najlepszym marketerem, a niektóre z twoich taktyk mają niewielki lub żaden wpływ, a inne mają nawet negatywny wpływ.
Jakiej metodologii mogę użyć do określenia prawdopodobieństwa, że jedno zdarzenie wpłynie pozytywnie lub negatywnie na liczbę klientów, którzy przychodzą do sklepu? W pełni zdaję sobie sprawę, że korelacja niekoniecznie oznacza związek przyczynowy, ale jakich metod mogę użyć, aby określić prawdopodobny wzrost lub spadek codziennego spaceru klienta po określonym wydarzeniu? Nie jestem zainteresowany analizowaniem, czy istnieje korelacja między twoimi próbami zwiększenia liczby klientów przychodzących, ale raczej, czy jedno zdarzenie, niezależne od wszystkich innych, miało wpływ.
Zdaję sobie sprawę, że ten przykład jest dość wymyślny i uproszczony, więc podam również krótki opis rzeczywistych danych, których używam:
Próbuję określić wpływ, jaki dana agencja marketingowa wywiera na witrynę swojego klienta, gdy publikuje nowe treści, prowadzi kampanie w mediach społecznościowych itp. W przypadku jednej określonej agencji mogą mieć od 1 do 500 klientów. Każdy klient ma
witryny o wielkości od 5 stron do znacznie ponad 1 miliona. W ciągu ostatnich 5 lat każda agencja opisywała całą swoją pracę dla każdego klienta, w tym rodzaj wykonanej pracy, liczbę stron internetowych w witrynie, na które miało to wpływ, liczbę spędzonych godzin itp. powyższe dane, które zgromadziłem w hurtowni danych (umieszczone w zestawie schematów gwiazda / płatek śniegu), muszę określić, jak prawdopodobne było, że jakakolwiek praca (jedno zdarzenie w czasie) miała wpływ na ruch trafiający na dowolne / wszystkie strony, na które ma wpływ określona praca. Stworzyłem modele dla 40 różnych typów treści, które można znaleźć na stronie internetowej, które opisują typowy wzorzec ruchu, jaki może wystąpić na stronie o tym typie zawartości od daty uruchomienia do chwili obecnej. Znormalizowana względem odpowiedniego modelu, muszę określić najwyższą i najniższą liczbę zwiększonych lub zmniejszonych odwiedzających daną stronę otrzymaną w wyniku wykonania określonej pracy.
Chociaż mam doświadczenie z podstawową analizą danych (regresja liniowa i wielokrotna, korelacja itp.), Nie wiem, jak podejść do rozwiązania tego problemu. Podczas gdy w przeszłości zazwyczaj analizowałem dane z wieloma pomiarami dla danej osi (na przykład temperatura vs pragnienie vs zwierzę i określałem wpływ na pragnienie, jakie ma podwyższona temperatura u zwierząt), czuję, że powyżej próbuję przeanalizować wpływ pojedynczego zdarzenia w pewnym momencie dla nieliniowego, ale przewidywalnego (lub przynajmniej możliwego do modelowania),
zestaw danych podłużnych. Jestem zdumiony :(. Każda pomoc, wskazówki, wskazówki, zalecenia lub wskazówki byłyby niezwykle pomocne i byłbym wdzięczny na zawsze!
W czasach moich analityków danych ten typ problemu był dość typowy. Zasadniczo każdy w marketingu wpadłby na szalony pomysł, że sprzedaż wyższej kadrze jako jedno zdarzenie, które zwiększy KPI o 2000%. Przełożeni akceptowali ich, a potem rozpoczynali „test”. Wyniki wróciły, a kierownictwo zrzuciło je do analityków danych, aby ustalić, co zadziałało i kto to zrobił. Krótka odpowiedź brzmi: naprawdę nie możesz wiedzieć, czy nie został on uruchomiony jako losowy test w stylu A / B w podobnych okresach. Ale zdaję sobie sprawę, jak ułomna jest ta odpowiedź, zwłaszcza jeśli fakt, że nie ma czystej odpowiedzi, nie ma znaczenia dla pilności przyszłych decyzji biznesowych. Oto kilka technik, których użyłbym, aby uratować analizę w tej sytuacji, pamiętaj, że jest to bardziej sztuka niż nauka.
* Uchwyty Uchwyt to coś, co istnieje w danych, którego możesz się trzymać. Z tego, co mi mówisz w swojej sytuacji, masz wiele informacji o tym, kim jest agencja marketingowa, kiedy próbowała taktyki i do której witryny ją zastosowała. To jest twój punkt wyjścia i
informacje takie jak ta będą kamieniem węgielnym Twojej analizy.
* Metodologia Metodologia prawdopodobnie będzie miała największy wpływ na to, którym agencjom przypisuje się wszelkie zyski, więc będziesz musiał upewnić się, że jest ona jasno zarysowana, a wszyscy interesariusze zgadzają się, że ma to sens. Jeśli nie możesz tego zrobić, ludziom trudno będzie zaufać twojej analizie. Przykładem tego są konwersje. Powiedzmy, że dział marketingu kupuje kilka potencjalnych klientów i trafiają na naszą stronę docelową, śledzimy je przez 3 dni, a jeśli w tym czasie dokonają zakupu, uznamy je za przekonwertowane. Dlaczego 3 dni, dlaczego nie 5 lub 1? To nie jest ważne, o ile wszyscy się zgadzają, teraz masz definicję, na której możesz zbudować.
* Porównania Idealnie byłoby, gdybyś miał fajny test A / B, aby udowodnić ostateczną zależność. Zakładam, że brakuje ci tych danych, ale możesz się czegoś nauczyć z prostego porównania podobnych danych. Kiedy firmy próbują określić skuteczność reklamy radiowej, często wyświetlają reklamy w miesiącach offsetowych na tym samym rynku lub przez kilka miesięcy na jednym rynku i porównują to z wynikami na innym, ale podobnym rynku. To nie uchodzi za naukę, ale nawet przy całym tym hałasie silne wyniki będą prawie zawsze zauważalne. Połączyłbym je w twoim przypadku, aby określić, jak długo trwa wydarzenie, aby zarejestrować efekt. Gdy masz już dane z tego okresu, porównaj je z modelowaną prognozą ruchu, wzrostem z tygodnia na tydzień, z miesiąca na miesiąc itp., Co pozwoli na sensowne porównanie agencji i różnych okresów.
* Pragmatyzm Dążeniem jest być w stanie zapewnić głębokie zrozumienie przyczyny i skutku, ale prawdopodobnie nie jest to realistyczne. Ze względu na to, jak chaotyczne czynniki zewnętrzne wpływają na twoją analizę, jesteś
nieustannie napotykamy na pytanie: czy to wydarzenie zwiększyło wolumen / sprzedaż / liczbę kliknięć, czy w ogóle zrobienie czegoś przyniosłoby ten sam efekt? Najlepszą radą, jaką mogę w tej sprawie, jest ustalenie bardzo realistycznych celów dla tego, czego szukasz
pomiar. Dobrym punktem wyjścia jest, w ramach posiadanej metodologii, które wydarzenie miało największy wpływ. Kiedy już je otworzysz, stamtąd.
Podsumowanie
Po rozważeniu wszystkich tych aspektów możesz przystąpić do tworzenia ogólnego rozwiązania, które można następnie zautomatyzować. Zaletą projektowania rozwiązania w ten sposób jest to, że logika biznesowa jest już wbudowana. Dzięki temu Twoje wyniki będą znacznie bardziej przystępne i intuicyjne dla nietechnicznych liderów biznesu.
Edycja: Ostrzeżenie, zostawiam wiadomość, ale moja odpowiedź wydaje się błędna, sprawdź komentarz poniżej! Nie jestem ekspertem, ale wydaje mi się, że głównym problemem jest odpowiedź na pytanie: czy jakieś zdarzenie wpłynęło na liczbę trafień w określonym dniu? Ale nie wiem, jak traktować wiele zdarzeń, więc spróbuję odpowiedzieć na to pytanie: Czy zdarzenie X wpłynęło na liczbę trafień w określonym dniu? Na co można odpowiedzieć za pomocą testowania hipotez z wartościami p (co naukowcy robią, aby ocenić na przykład, czy lek wpływa na chorobę, czy nie). Używając wartości p, można określić, czy liczba trafień w danym dniu była po prostu przypadkowa i akceptowalna w normalnych okolicznościach, czy też musi odpowiadać zmianie w modelu. Więcej o wartościach p przeczytasz w Otwartym wprowadzeniu do Statistics Book. Stamtąd dowiedziałem się o nich więcej. Następnie pozostałe części problemu dotyczą tego, jak zidentyfikować swoje zdarzenia i obliczyć niezbędne parametry, aby odpowiedzieć na twoje pytanie (średnia / mediana, wariancja itp.), A także jak zachować to aktualne i działające.
Jak dobrać algorytmy do metod zespołowych?
Istnieje ogólne zalecenie, że algorytmy w kombinacjach uczenia się w zespołach powinny mieć inny charakter. Czy istnieje tabela klasyfikacyjna, skala lub jakieś reguły, które pozwalają ocenić, jak daleko są od siebie algorytmy? Jakie są najlepsze kombinacje?
Ogólnie w zespole starasz się łączyć opinie wielu klasyfikatorów. Pomysł jest jak poproszenie grupy ekspertów o to samo. Otrzymujesz wiele opinii i później musisz połączyć ich odpowiedzi (np. Za pomocą schematu głosowania). Aby ta sztuczka zadziałała, klasyfikatory różnią się od siebie, czyli nie chcesz dwukrotnie pytać tego samego „eksperta” o tę samą rzecz. W praktyce klasyfikatory nie muszą być różne w sensie innego algorytmu. Możesz wytrenować ten sam algorytm z innym podzbiorem danych lub innym podzbiorem funkcji (lub obydwoma). Jeśli używasz różnych zestawów treningowych, otrzymujesz różne modele i różne „niezależne” klasyfikatory. Nie ma złotej zasady określającej, co ogólnie działa najlepiej. Musisz spróbować sprawdzić, czy istnieje poprawa dla twojego konkretnego problemu.
Z reguły proponuję trzy różne opcje:
* Użyj techniki uczenia się w workach, podobnej do tej, po której stosuje się Random Forest. Technika ta umożliwia uczenie „małych” klasyfikatorów, które widzą niewielką część całych danych. Następnie prosty schemat głosowania (jak w Random Forest) doprowadzi Cię do bardzo interesującej i solidnej klasyfikacji.
* Użyj dowolnej techniki związanej z łączeniem informacji lub fuzją probabilistyczną. Jest to bardzo odpowiednie rozwiązanie, aby połączyć różne prawdopodobieństwa z różnych klasyfikatorów.
* Moja ostatnia sugestia to użycie logiki rozmytej, bardzo odpowiedniego narzędzia do prawidłowego łączenia informacji z perspektywy probabilistycznej (przynależności). Wybór konkretnych metod lub strategii będzie w ogromnym stopniu zależał od danych.
Binarny model klasyfikacji rzadkich / stronniczych danych
Mam zbiór danych z następującymi specyfikacjami:
* Zbiór danych treningowych z 193176 próbkami z 2821 pozytywami
* Zestaw danych testowych z 82887 próbkami z 673 pozytywami
* Istnieje 10 funkcji.
Chcę przeprowadzić klasyfikację binarną (powiedzmy 0/1). Problem, z którym się zmagam, polega na tym, że dane są bardzo stronnicze lub raczej skąpe. Po normalizacji i skalowaniu danych wraz z inżynierią funkcji i przy użyciu kilku różnych algorytmów, są to najlepsze wyniki, jakie mogłem osiągnąć:
średni błąd kwadratowy: 0,00804710026904
Macierz zamieszania: [[82214 667]
[0 6]]
czyli tylko 6 poprawnych trafień pozytywnych. To używa regresji logistycznej. Oto różne rzeczy. Próbowałem z tym:
* Różne algorytmy, takie jak RandomForest, DecisionTree, SVM
* Zmiana wartości parametrów w celu wywołania funkcji
* Pewna inżynieria funkcji oparta na intuicji, obejmująca funkcje złożone
Teraz moje pytania to:
- Co mogę zrobić, aby zwiększyć liczbę pozytywnych trafień?
- Jak można ustalić, czy w takim przypadku występuje overfit? (Próbowałem kreślić itp.)
- W którym momencie można by wywnioskować, czy jest to najlepsze możliwe dopasowanie, jakie mogłem mieć? (co wydaje się smutne, biorąc pod uwagę tylko 6 trafień na 673)
- Czy istnieje sposób, aby sprawić, by pozytywne instancje próbki ważyły więcej, aby rozpoznawanie wzorców poprawiło się, prowadząc do większej liczby trafień?
- Które wykresy graficzne mogą pomóc wykryć wartości odstające lub jakąś intuicję co do tego, który wzór będzie najlepiej pasował?
Używam biblioteki scikit-learn w Pythonie i wszystkie implementacje są funkcjami bibliotecznymi.
Oto wyniki z kilkoma innymi algorytmami:
Losowy klasyfikator lasu (n_estimators = 100)
[[82211 667]
[3 6]]
Drzewa decyzyjne:
[[78611 635]
[3603 38]]
- Czy od czasu przeprowadzania klasyfikacji binarnej próbowałeś dostosować próg klasyfikacji? Ponieważ twój algorytm wydaje się raczej niewrażliwy, spróbuję go obniżyć i sprawdzić, czy jest poprawa.
- Zawsze możesz użyć krzywych uczenia się lub wykresu jednego parametru modelu względem błędu uczenia i walidacji, aby określić, czy model jest nadmiernie dopasowany. Wygląda na to, że w twoim przypadku jest to niedopasowane, ale to tylko intuicja.
- Cóż, ostatecznie zależy to od zbioru danych i różnych modeli, które wypróbowałeś. W tym momencie i bez dalszych testów nie może być jednoznacznej odpowiedzi.
- Nie twierdząc, że jesteś ekspertem w temacie, istnieje wiele różnych technik, które możesz zastosować (wskazówka: pierwszy link w google), ale moim zdaniem powinieneś najpierw upewnić się, że wybrałeś swoją funkcję kosztów, aby reprezentuje to, czego faktycznie szukasz.
- Nie jesteś pewien, co masz na myśli mówiąc o intuicji wzorowej, czy możesz to rozwinąć? A propos, jakie były twoje wyniki przy użyciu różnych algorytmów, które wypróbowałeś? Czy były inne?
Obsługa regularnie rosnącego zestawu funkcji
Pracuję nad systemem wykrywania oszustw. Na tym polu regularnie pojawiają się nowe oszustwa, więc na bieżąco trzeba dodawać nowe funkcje do modelu. Zastanawiam się, jak najlepiej sobie z tym poradzić (z perspektywy procesu deweloperskiego)? Samo dodanie nowej funkcji do wektora cech i ponowne szkolenie klasyfikatora wydaje się być naiwnym podejściem, ponieważ zbyt dużo czasu zostanie poświęcone na ponowne nauczenie się starych funkcji. Zastanawiam się nad wytrenowaniem klasyfikatora dla każdej cechy (lub kilku powiązanych cech), a następnie połączeniem wyników tych klasyfikatorów z ogólnym klasyfikatorem. Czy są jakieś wady tego podejścia? Jak mogę wybrać algorytm dla ogólnego klasyfikatora?
W idealnym świecie zachowujesz wszystkie swoje dane historyczne i rzeczywiście uruchamiasz nowy model z nową funkcją wyodrębnioną wstecz z danych historycznych. Twierdziłbym, że zasoby obliczeniowe wydane na to są w rzeczywistości całkiem przydatne. Czy to naprawdę problem? Tak, jest to powszechnie akceptowana technika tworzenia zespołu klasyfikatorów i łączenia ich
wyniki. Możesz zbudować nowy model równolegle tylko na nowych funkcjach i przeciętnie w jego prognozach. Powinno to zwiększyć wartość, ale nigdy nie uchwycisz interakcji między nowymi i starymi funkcjami w ten sposób, ponieważ nigdy nie pojawią się one razem w klasyfikatorze.
Oto pomysł, który właśnie wyskoczył niespodziewanie – co zrobić, jeśli użyjesz losowego próbkowania podprzestrzeni (jak w rzeczywistości zasugerował już Sean Owen), aby wyszkolić kilka nowych klasyfikatorów za każdym razem, gdy pojawi się nowa funkcja (używając losowego podzbioru funkcji, w tym nowy zestaw funkcji). Możesz trenować te modele również na podzbiorze próbek, aby zaoszczędzić trochę czasu na szkolenie. W ten sposób możesz mieć nowe klasyfikatory, które mogą przyjmować zarówno nowe, jak i stare funkcje, i zachowując jednocześnie stare klasyfikatory. Możesz nawet, używając techniki walidacji krzyżowej, mierzyć wydajność każdego klasyfikatora, po pewnym czasie zabić te najgorsze, aby uniknąć rozdętego modelu.
Jakie są standardowe sposoby obliczania odległości między plikami dokumentów?
Kiedy mówię „dokument”, mam na myśli strony internetowe, takie jak artykuły z Wikipedii i wiadomości. Wolę odpowiedzi, które zawierają albo waniliowe, leksykalne metryki odległości, albo najnowocześniejsze semantyczne metryki odległości, z silniejszą preferencją dla tych ostatnich. Jest na to wiele różnych sposobów, w zależności od tego, ile dokładnie informacji semantycznych chcesz zachować i jak łatwo tokenizować dokumenty (dokumenty html byłyby prawdopodobnie dość trudne do tokenizacji, ale można sobie wyobrazić coś z tagami i kontekstem .) Niektóre z nich zostały wspomniane przez ffriend, a wektory akapitowe użytkownika1133029 są naprawdę solidne, ale pomyślałem, że zagłębię się w plusy i minusy różnych podejść.
Odległość cosinusowa – wypróbowana, prawdziwa odległość cosinusowa jest prawdopodobnie najpowszechniejszą miarą odległości używaną ogólnie w wielu dziedzinach. Mając to na uwadze, jest bardzo mało informacji dotyczących odległości cosinusowych, które w rzeczywistości można odwzorować z powrotem na cokolwiek semantyczne, co wydaje się nie być idealne w tej sytuacji.
Odległość Levenshteina – znana również jako odległość edycji, jest zwykle używana na poziomie pojedynczego tokena (słowa, bigramy itp.). Generalnie nie polecałbym tej metryki, ponieważ nie tylko odrzuca ona wszelkie informacje semantyczne, ale także bardzo podobnie traktuje bardzo różne zmiany słów, ale jest to niezwykle powszechna metryka za tego typu rzeczy
LSA – jest częścią dużego arsenału technik służących do oceny podobieństwa dokumentów zwanego modelowaniem tematycznym. LSA wyszedł z mody całkiem niedawno iz mojego doświadczenia wynika, że nie jest to najmocniejsze podejście do modelowania tematycznego, ale jest stosunkowo proste do wdrożenia i ma kilka wdrożeń open source
LDA – jest również techniką używaną do modelowania tematycznego, ale różni się od LSA tym, że w rzeczywistości uczy się wewnętrznych reprezentacji, które wydają się być bardziej płynne i intuicyjne. Ogólnie rzecz biorąc, wyniki uzyskane z LDA są lepsze do modelowania podobieństwa dokumentów niż LSA, ale nie są tak dobre, aby nauczyć się silnego rozróżniania tematów.
Alokacja Pachinko – to naprawdę zgrabne rozszerzenie oprócz LDA. Ogólnie jest to po prostu znacznie ulepszona wersja LDA, z jedynym minusem jest to, że trenowanie zajmuje nieco więcej czasu, a implementacje open-source są nieco trudniejsze do zdobycia
word2vec – Google pracuje nad serią technik inteligentnego redukowania słów i dokumentów do bardziej rozsądnych wektorów niż rzadkie wektory uzyskiwane za pomocą technik takich jak Count Vectorizers i TF-IDF. Word2vec jest świetny, ponieważ ma wiele implementacji open source. Gdy już mamy wektor, można zastosować dowolną inną metrykę podobieństwa (np. Odległość cosinus) ze znacznie większą skutecznością.
* doc2vec – znany również jako wektory akapitowe, jest to najnowszy i największy z serii artykułów Google, poświęcony gęstym reprezentacjom wektorowym dokumentów. Biblioteka gensim w Pythonie ma implementację word2vec, która jest na tyle prosta, że można ją dość rozsądnie wykorzystać do zbudowania doc2vec, ale pamiętaj o licencji, jeśli chcesz iść tą drogą Mam nadzieję, że to pomoże, daj mi znać, jeśli masz jakieś pytania.
Istnieje wiele semantycznych miar odległości, z których każda ma swoje wady i zalety. Oto tylko kilka z nich:
* odległość cosinusowa, iloczyn skalarny między wektorami cech dokumentu; * LSA, inny model oparty na wektorze, ale wykorzystujący SVD do usuwania szumów z oryginalnej macierzy dokumentów terminowych;
* Oparty na WordNet, zweryfikowany przez człowieka, choć trudno go rozszerzyć.
Zacznij od najprostszego podejścia, a następnie przejdź dalej w oparciu o problemy w Twoim konkretnym przypadku.
Wydaje się, że najnowszym stanem techniki są „wektory akapitowe” wprowadzone w niedawnym artykule:
http://cs.stanford.edu/~quocle/paragraph_vector.pdf. Odległość kosinusowa / euklidesowa między wektorami akapitu prawdopodobnie działałaby lepiej niż jakiekolwiek inne podejście. Prawdopodobnie nie jest to jeszcze możliwe z powodu braku implementacji open source. Kolejną najlepszą rzeczą jest odległość cosinusowa między wektorami LSA lub odległość cosinusowa między surowymi wektorami BOW. Czasami lepiej jest wybrać różne schematy ważenia, takie jak TFIDF.