[27][Rekomendacje]

PYTANIA: Czy częstotliwość kliknięć ma znaczenie?

Czy budując pozycję, na przykład w przypadku wyszukiwarki lub systemu rekomendacji, warto polegać na częstotliwości kliknięć w celu ustalenia trafności wpisu?

ODPOWIEDZI

Ze swojej strony mogę powiedzieć, że używam częstotliwości kliknięć np. W produktach eCommerce. Jeśli połączysz go z dniami roku, może on nawet przynieść wspaniałe sugestie. tj .: mamy dane historyczne z 1 roku dla 2 produktów (Snowboots [], Sandalettes [])

Snowboots [1024,1253,652,123,50,12,8,4,50,148,345,896]

Sandały [23,50,73,100,534,701,1053,1503,1125,453,213,25]

gdzie [0] = styczeń

Jak widać, snowbooty są częściej wyszukiwane w styczniu niż sandały, więc powinieneś zasugerować snowboots komuś, kto szuka butów na twojej stronie lub w styczniu. Możesz również sprawdzić, czy coś jest „świeże” w tej chwili, np. Kiedy ludzie często klikają nieznany produkt, może to być wgląd w nowy trend lub coś takiego. To tylko kilka przykładów, w których możesz wykorzystać częstotliwość kliknięć jako wgląd. Myślę, że nie ma żadnych zasad dotyczących tego, czego można użyć w zaleceniach, o ile ma to sens.

Czy można użyć częstotliwości kliknięcia, a następnie  tak. Czy można używać tylko częstotliwości kliknięć, a następnie prawdopodobnie nie. Trafność wyszukiwania jest znacznie bardziej skomplikowana niż tylko jedna metryka. Istnieją całe książki na ten temat. Rozszerzenie tej odpowiedzi poza zwykłe tak / nie spowodowałoby, że odpowiedź byłaby zdecydowanie zbyt szeroka (i wyrażona w opinii)

Jak należy obchodzić się z danymi niejawnymi w zaleceniu?

System rekomendacji prowadzi dziennik tego, jakie rekomendacje zostały wydane konkretnemu użytkownikowi i czy ten użytkownik je przyjmuje. To jest jak

gdzie 1 oznacza, że ​​użytkownik zaakceptował zalecenie, a -1 oznacza, że ​​użytkownik nie odpowiedział na zalecenie.

 Jeśli mam zamiar wydać zalecenia dla grupy użytkowników na podstawie dziennika opisanego powyżej i chcę zmaksymalizować wyniki MAP @ 3, jak powinienem postępować z niejawnymi danymi (1 lub -1)?

Moim pomysłem jest traktowanie 1 i -1 jako ocen i przewidywanie oceny za pomocą algorytmów typu maszynowego rozkładania na czynniki. Nie wydaje się to jednak właściwe, biorąc pod uwagę asymetrię niejawnych danych (-1 nie oznacza, że ​​użytkownikowi nie podoba się to zalecenie).

Edycja : Pomyślmy o tym w kontekście metody faktoryzacji macierzy. Jeśli traktujemy -1 i 1 jako oceny, będzie jakiś problem. Na przykład użytkownik 1 lubi film A, który osiąga wysokie wyniki w jednym współczynniku (np. Mając wspaniałą muzykę w tle) w przestrzeni ukrytego czynnika. System zaleca film B, który również osiąga wysokie wyniki w „chwalebnej muzyce w tle”, ale z jakiegoś powodu użytkownik 1 jest zbyt zajęty, aby przyjrzeć się rekomendacji, i mamy film kategorii -1 B. Jeśli po prostu traktujemy 1 lub -1 jednakowo , wtedy system może być zniechęcony do polecania filmu z chwalebnym BGM użytkownikowi 1, podczas gdy użytkownik 1 nadal uwielbia film z chwalebnym BGM. Myślę, że takiej sytuacji należy unikać.

Twój system nie jest tylko przeszkolony w zakresie przedmiotów polecanych, prawda? jeśli tak, masz dużą pętlę sprzężenia zwrotnego. Mam nadzieję, że chcesz uczyć się na podstawie wszystkich kliknięć / wyświetleń. Sugerujesz, że nie patrzenie na przedmiot jest sygnałem negatywnym. Zdecydowanie sugeruję, abyś nie traktował tego w ten sposób. Brak interakcji z czymś jest prawie zawsze najlepiej traktowany jako brak informacji. Jeśli masz wyraźny sygnał, który wskazuje na niechęć, na przykład głosowanie w dół (lub może obejrzałeś 10 sekund filmu i zatrzymał się), być może jest to poprawne. Nie interpretowałbym tych danych wejściowych jako danych podobnych do ratingu. (Chociaż w twoim przypadku możesz uciec od tego.) Zamiast tego pomyśl o nich jak o wadze. Pozwala to zarejestrować względną siłę interakcji dodatnich / ujemnych. Na koniec chciałbym zauważyć, że ten artykuł, chociaż jest prawdopodobnie tym, czego szukasz, nie przewiduje ujemnych wag. W ten sposób można go łatwo rozszerzyć. Jeśli dojdziesz tak daleko, mogę wskazać łatwe rozszerzenie, które już istnieje w dwóch znanych mi implementacjach, w Spark i Oryx.

Utwórz najbardziej „średnią” obserwację podobieństwa cosinus

W systemie rekomendacji używam podobieństwa cosinus do obliczania podobieństw między elementami. Jednak w przypadku przedmiotów z niewielką ilością danych chciałbym podzielić je na kategorie w kategorii „przeciętnej” (w sensie ogólnym nie matematycznym). Aby to osiągnąć, próbuję obecnie utworzyć syntetyczną obserwację reprezentującą ten środek punktu drogi. Na przykład, jeśli były to moje obserwacje (wiersze to obserwacje s, cols to cechy):

Strategia, w której po prostu brałam rzeczywistą średnią wszystkich cech z obserwacji, generowałaby syntetyczny punkt danych, taki jak poniżej, który następnie dołączałam do macierzy przed obliczeniem podobieństwa.

[0,5, 0,25, 0,75, 0,5, 0,25, 0,75, 0,25, 0,75, 0,25]

Chociaż może to działać dobrze w przypadku niektórych wskaźników podobieństwa (np. Odległość L1), jestem pewien, że istnieją znacznie lepsze sposoby na podobieństwo cosinus. Chociaż w tej chwili mam problem z wytłumaczeniem kątów między liniami w przestrzeni o dużych wymiarach. Jakieś pomysły?

Robisz właściwą rzecz. Technicznie to uśrednianie prowadzi do obliczenia środka ciężkości w przestrzeni euklidesowej zbioru N punktów. Środek ciężkości działa całkiem dobrze z podobieństwami cosinusa (cosinus kątów między znormalizowanymi wektorami), np. algorytm Rocchio.

Optymalizacja cen produktów wielopoziomowych i sezonowych

Zakładając, że mogę zaspokoić zapotrzebowanie na zakup określonego produktu o różnych poziomach rynkowych. Przykład: Produkt A to towary niskiej jakości. Produkt B to kolejne towary niskiej jakości. Produkty C i D są towarami średniego poziomu, a produkty E i F są towarami wysokiego poziomu. W zeszłym roku zebraliśmy dane dotyczące następujących 1. Którego okresu (sezon – świąteczny? Nie świąteczny?) Reaguje inny produkt poziomu na podstawie ustalonej ceny? Reakcje odnoszą się do tego, ile% produktu jest sprzedawane w określonym przedziale cenowym 2. Jak szybko reaguje rynek po zakończeniu marketingu? Marketing odbywa się w dniu 10 czerwca, a wszystkie produkty są sprzedawane do 18 czerwca w okresie świątecznym, który miał się wydarzyć w lipcu (zajęło 8 dni w tej cenie, aby zakończyć sprzedaż). Jak nauka danych może skorzystać na poleceniu 1. Jeśli powinniśmy naciskać marketing wcześniej czy później? 2. Czy możemy podwyższyć lub obniżyć cenę? (W oparciu o popyt i stopę zamknięcia?) Czy rozumiem, że analiza danych może pomóc marketerowi w tym aspekcie? W którym kierunku powinienem patrzeć, jeśli chcę się o tym dowiedzieć.

Powinieneś być w stanie zastosować regresję liniową, aby znaleźć korelację między czynnikami, które powodują, że Twoje produkty sprzedają się lepiej (lub gorzej). Istnieje wiele korelacji, z którymi można przetestować w tym zestawie danych. Oto niektóre przykłady:

  1. Jeśli produkt został agresywnie wprowadzony na rynek, czy sprzedaje się szybciej?
  2. Jeśli dostępny jest przedmiot niskiego poziomu, czy sprzedaje się mniej przedmiotów wyższego poziomu?
  3. Jeśli dostępnych jest wiele przedmiotów wyższego poziomu, czy ich liczba jest mniej sprzedawana?

Pamiętaj, że korelacja niekoniecznie oznacza związek przyczynowy. Zawsze myśl o innych czynnikach, które mogą powodować wzrost i spadek sprzedaży. Na przykład możesz sprzedawać więcej przedmiotów na wyższym poziomie w sezonie o rok niż w innym. Ale może to wynikać ze zmian w całej gospodarce, a nie ze zmian cen. Drugą rzeczą, którą możesz zrobić, to przeprowadzić testy A / B na stronach sprzedaży produktów. To zapewnia natychmiastową informację zwrotną. Niektóre przykładowe testy mogą być:

  1. Pokaż użytkownikowi jeden produkt wysokiego poziomu i jeden produkt niskiego poziomu (A). Pokaż użytkownikowi dwa produkty wysokiego poziomu i brak produktów niskiego poziomu (B). Która strona generuje większe przychody?
  2. Wysyłaj e-maile marketingowe dotyczące sprzedaży sezonowej z 5-dniowym wyprzedzeniem do jednej grupy użytkowników (A). Wyślij ten sam e-mail do innego zestawu użytkowników z jednodniowym wyprzedzeniem (B). Istnieje wiele możliwości. Wykorzystaj swoją intuicję i pomyśl o wcześniejszej wiedzy na temat swoich produktów.

[26][Wizualizacja]

Wizualizacja danych odnosi się do technik prezentacji wyników w formie graficznej, takich jak histogramy, wykresy rozrzutu lub wykresy pudełkowe. Wizualizacja danych jest szczególnym wyzwaniem dla danych o wysokiej wymiarowości. Jeśli twoje pytanie dotyczy tylko tego, jak uzyskać określone oprogramowanie, aby uzyskać określony efekt, prawdopodobnie  to nie tutaj.

PYTANIA: Jak ożywić rozwój sieci społecznościowej?

Szukam biblioteki / narzędzia do wizualizacji zmian w sieci społecznościowej po dodaniu do niej nowych węzłów / krawędzi. Jednym z istniejących rozwiązań jest SoNIA: Social Network Image Animator. To pozwala robić filmy. Dokumentacja SoNIA mówi, że obecnie jest zepsuta, a poza tym wolałbym zamiast tego rozwiązanie oparte na JavaScript. Moje pytanie brzmi: czy znasz jakieś narzędzia czy jesteś w stanie wskazać mi biblioteki, które ułatwiłyby to zadanie? Zaraz po opublikowaniu tego pytania zagłębię się w sigma.js, więc rozważ tę bibliotekę. Ogólnie moje dane wejściowe byłyby mniej więcej takie:

Mamy więc trzy punkty w czasie (1, 2, 3), trzy węzły (A, B, C) i trzy krawędzie, które reprezentują triadowe zamknięcie między trzema rozważanymi węzłami. Co więcej, każdy węzeł będzie miał dwa atrybuty (wiek i płeć), dlatego chciałbym mieć możliwość zmiany kształtu / koloru węzłów. Ponadto po dodaniu nowego węzła idealnie byłoby mieć ForceAtlas2 lub podobny algorytm do dostosowania układu wykresu.

ODPOWIEDZI:

Fantazyjne animacje są fajne. Możesz tworzyć animacje za pomocą matplotlib. Ta odpowiedź  wydaje się wskazywać na rozwiązanie python / networkx / matplotlib. Ale D3.js zapewnia interakcję. Jeśli szukasz rozwiązania internetowego, d3.js jest doskonały.

Wniosek

Byłbym szedł w kierunku opcji python / networkx do analizy sieci (ewentualnie, aby na przykład dodać atrybuty do pliku surowych danych). Następnie do wizualizacji i rozpowszechniania D3.js jest idealny. Możesz być zaskoczony, jak łatwo można napisać d3.js, kiedy się w to zagłębisz. Wierzę, że działa nawet w notebooku ipython!

Moim pierwszym przypuszczeniem jest wizualizacja sieci społecznościowej w Tableau. A w szczególności: budowanie wykresów sieciowych w Tableau. Aby dodać sieć, musisz dodać wymiar czasowy do sekcji „Strony” zmienić dynamikę. To jest ekran z linku powyżej.

Okazało się, że zadanie to było dość łatwe do wykonania przy użyciu vis.js. To był najlepszy przykładowy kod, jaki znalazłem.

Jakie techniki wizualizacji najlepiej opisują zestaw danych rekomendacji?

Napisałem prosty rekomendator, który generuje rekomendacje dla użytkowników na podstawie tego, co kliknęli. Polecający generuje plik danych w następującym formacie:

Przeglądałem niektóre wykresy, ale nie jestem pewien, którego użyć, czy też są inne, które lepiej wyświetlą podobieństwa użytkowników z powyższego zestawu danych. Jakieś sugestie? Wizualizację kieruję na użytkowników biznesowych, którzy wcale nie są techniczni. Chciałbym tylko pokazać im łatwy do zrozumienia obraz, który ukazuje, jak podobni są niektórzy użytkownicy, i przekonuję firmę, że dla tych użytkowników system rekomendacji jest przydatny.

Myślę, że szukasz macierzy podobieństwa. Jeśli nie masz danych dotyczących podobieństwa między niektórymi parami, zawsze możesz pozostawić je jako szare lub białe. Będzie to również działać tylko w przypadku zestawów danych wystarczająco małych, aby właściwie zrozumieć, co się dzieje. Powiedziałbym, że maksymalnie 25 wierszy / kolumn. W macierzy podobieństwa współrzędne xiy odpowiadają dwóm rzeczom, które porównujesz, podczas gdy wielkość mapy kolorów reprezentuje podobieństwo

EDYCJA: Jedną rzeczą, którą możesz zrobić, aby zastąpić mapę kolorów, jest wstawka, powiedzmy, kółka o różnych rozmiarach zgodnie z miarą podobieństwa. Możesz też wstawić same liczby, zmieniając rozmiar liczby, gdy zmienia się wielkość tej liczby. Rozmiar zwykle najlepiej sprawdza się w wizualizacjach biznesowych.

Osobiście uważam, że Netflix ma rację. Podziel go na oceny wiarygodności od 1-5 i pokaż swoje rekomendacje na podstawie liczby żółtych gwiazdek. Nie muszą to być gwiazdy, ale te wykresy oparte na ikonach są bardzo łatwe do zinterpretowania i jasno pokazują punkt.

Wizualizacja wykresu z milionem wierzchołków. Jakiego narzędzia najlepiej użyć do wizualizacji (narysowania wierzchołków i krawędzi) wykresu zawierającego 1000000 wierzchołków? Na wykresie jest około 50000 krawędzi. Potrafię obliczyć położenie poszczególnych wierzchołków i krawędzi. Zastanawiam się nad napisaniem programu do generowania pliku svg. Jakieś inne sugestie?

Sugeruję również oprogramowanie Gephi (https://gephi.github.io), które wydaje się być dość potężne. Dodatkowe informacje na temat korzystania z Gephi w dużych sieciach można znaleźć tutaj i, bardziej ogólnie, tutaj. Cytoscape (http://www.cytoscape.org) to alternatywa dla Gephi, będąca kolejną popularną platformą do kompleksowej analizy sieci i wyobrażanie sobie. Jeśli chcesz programowo pracować z sieciami (w tym wizualizacją) w R, Python lub C / C ++, możesz sprawdzić kolekcję bibliotek igraph. Mówiąc o R, możesz zainteresować następujące posty na blogu: na temat używania R z Cytoscape  i na temat używania R z Gephi .

Aby uzyskać obszerne listy oprogramowania do analizy i wizualizacji sieci, w tym niektóre porównania i recenzje, możesz sprawdzić następujące strony:

1)http://wiki.cytoscape.org/Network_analysis_links;

2)http://www.kdnuggets.com/software/social-network-analysis.html;

3) http://www.activatenetworks.net/social-network-analysis-sna-software-review.

https://gephi.github.io/ mówi, że może obsłużyć milion wierzchołków. Jeśli wykres ma 1000000 wierzchołków i tylko 50000 krawędzi, wówczas większość twoich wierzchołków i tak nie będzie miała żadnych krawędzi. W rzeczywistości specyfikacja Gephi jest podwójnym przykładem: „Sieci do 50 000 węzłów i 1 000 000 krawędzi”

Myślę, że Gephi może napotkać problemy z brakiem pamięci, będziesz potrzebował co najmniej 8 GB pamięci RAM. Chociaż liczba krawędzi nie jest bardzo duża. Być może bardziej odpowiednim narzędziem w tym przypadku będzie GraphViz. Jest to narzędzie wiersza polecenia do wizualizacji sieci i przypuszczalnie byłoby bardziej odporne na rozmiar wykresu. Ponadto, jak pamiętam, w GraphViz można użyć wstępnie obliczonych współrzędnych, aby ułatwić obliczenia. Próbowałem znaleźć rzeczywiste przykłady używania GraphViz z dużymi wykresami, ale nie udało się. Chociaż znalazłem podobną dyskusję na temat nauk obliczeniowych.

Jak wykreślić duże internetowe mapy cieplne?

Chcę wykreślić duże mapy cieplne (powiedzmy macierz). Mogę to zrobić w Python / matplotlib.pyplot z pcolor, ale nie jest interaktywny (i potrzebuję interaktywnej mapy cieplnej). Próbowałem z D3.js, ale to, co znalazłem, ma na celu wyświetlanie małych map cieplnych: http://bl.ocks.org/tjdecke/5558084 Naiwne rozszerzanie tego przykładu o większą matrycę (np.) może spowodować awarię przeglądarki internetowej. Czy ktoś może wskazać mi dobry sposób wyświetlania i interakcji z dużymi mapami cieplnymi z technologią internetową: Chcę mieć możliwość interakcji ze stroną internetową lub notatnikiem ipython.

Plotly i Lightning są [podobno] w stanie wizualizować bardzo duże zbiory danych.

[025]Bazy Danych]

Baza danych to zorganizowany zbiór danych. Dane są zazwyczaj organizowane w celu modelowania odpowiednich aspektów rzeczywistości (na przykład dostępności pokoi w hotelach), w sposób, który obsługuje procesy wymagające tych informacji (na przykład znalezienie hotelu z wolnymi miejscami). Duża część stron internetowych i aplikacji opiera się na bazach danych. Są kluczowym składnikiem systemów telekomunikacyjnych, systemów bankowych, gier wideo i niemal każdego innego oprogramowania lub urządzenia elektronicznego, które przechowuje pewną ilość trwałych informacji. Oprócz trwałości systemy baz danych zapewniają szereg innych właściwości, które czynią je wyjątkowo przydatnymi i wygodnymi: niezawodność, wydajność, skalowalność, kontrola współbieżności, abstrakcja danych i języki zapytań wysokiego poziomu. Bazy danych są tak wszechobecne i ważne, że absolwenci informatyki często podają swoją klasę baz danych jako najbardziej przydatną w swojej branży lub karierze absolwenta. Termin „baza danych” nie powinien być mylony z systemem zarządzania bazami danych (DBMS). DBMS to oprogramowanie systemowe używane do tworzenia baz danych i zarządzania nimi oraz zapewniania użytkownikom i aplikacjom dostępu do baz danych. Baza danych jest do DBMS jak dokument do edytora tekstu.

PYTANIA: Czy to porównanie Neo4j z czasem wykonania RDBMS jest prawidłowe?

Relacje na wykresie w naturalny sposób tworzą ścieżki. Zapytanie lub przejście przez wykres obejmuje określone ścieżki. Ze względu na zasadniczo zorientowany na ścieżkę charakter modelu danych, większość operacji opartych na ścieżkach graficznych baz danych jest ściśle dopasowana do sposobu, w jaki dane są ułożone, co czyni je niezwykle wydajnymi. W swojej książce Neo4j in Action, Partner i Vukotic przeprowadzają eksperyment przy użyciu sklepu relacyjnego i Neo4j. Porównanie pokazuje, że baza danych grafów jest znacznie szybsza dla połączonych danych niż sklep relacyjny. Eksperyment Partnera i Vukotic ma na celu znalezienie przyjaciół-przyjaciół w sieci społecznościowej do maksymalnej głębokości pięciu. Biorąc pod uwagę dowolne dwie osoby wybrane losowo, czy istnieje ścieżka, która ich łączy, co najwyżej pięć związków? W przypadku sieci społecznościowej zawierającej 1 000 000 osób, z których każda ma około 50 znajomych, wyniki zdecydowanie sugerują, że bazy danych wykresów są najlepszym wyborem dla połączonych danych, jak widać poniżej

Na głębokości dwa (znajomi znajomych) zarówno relacyjna baza danych, jak i baza danych grafów działają wystarczająco dobrze, abyśmy mogli rozważyć użycie ich w systemie online. Podczas gdy zapytanie Neo4j działa w dwóch trzecich czasu relacyjnego, użytkownik końcowy ledwo zauważyłby różnicę w milisekundach między nimi. Zanim jednak osiągniemy głębokość trzecią (przyjaciel-przyjaciel-przyjaciel), jasne jest, że relacyjna baza danych nie jest w stanie poradzić sobie z zapytaniem w rozsądnych ramach czasowych: trzydzieści sekund potrzebnych do wypełnienia byłoby całkowicie niedopuszczalne dla systemu online. Natomiast czas odpowiedzi Neo4j pozostaje stosunkowo płaski: zaledwie ułamek sekundy, aby wykonać zapytanie – zdecydowanie wystarczająco szybko dla systemu online. Na głębokości czwartej relacyjna baza danych wykazuje paraliżujące opóźnienie, co czyni ją praktycznie bezużyteczną dla systemu online. Czasy Neo4j również nieco się pogorszyły, ale opóźnienie jest na obrzeżach akceptacji dla responsywnego systemu online. Wreszcie na głębokości piątej relacyjna baza danych po prostu trwa zbyt długo, aby ukończyć zapytanie. Natomiast Neo4j zwraca wynik po około dwóch sekundach. Na głębokości piątej okazuje się, że prawie cała sieć jest naszym przyjacielem: w wielu rzeczywistych przypadkach użycia prawdopodobnie skrócilibyśmy wyniki i czasy.

Pytania są następujące:

* Czy to rozsądny test do naśladowania tego, co można znaleźć poza siecią społecznościową? (To znaczy, że prawdziwe sieci społecznościowe zwykle mają na przykład węzły z około 50 przyjaciółmi; wydaje się, że model „wzbogacania się bogatszego” byłby bardziej naturalny dla sieci społecznościowych, choć może się mylić).

* Czy bez względu na naturalność emulacji istnieje powód, by sądzić, że wyniki są wyłączone lub nie można ich odtworzyć?

Patrząc na dokument zatytułowany Anatomia Facebooka, zauważam, że mediana wynosi 100. Patrząc na wykres funkcji skumulowanej, mogę się założyć, że średnia jest wyższa, blisko 200. Więc 50 nie wydaje się tutaj najlepszą liczbą. Myślę jednak, że nie jest to tutaj główny problem.

Głównym problemem jest brak informacji o sposobie korzystania z bazy danych. Wydaje się uzasadnione, że pamięć danych zaprojektowana specjalnie dla struktur grafowych jest bardziej wydajna niż tradycyjne RDBM. Jednak nawet jeśli RDBM nie są zgodne z najnowszymi trendami w zakresie przechowywania danych z wyboru, systemy te ewoluowały w sposób ciągły w wyścigu z wymiarami zestawu danych. Istnieją różne rodzaje możliwych projektów, różne sposoby indeksowania danych, ulepszenia związane z współbieżnością i tak dalej. Podsumowując, uważam, że jeśli chodzi o odtwarzalność, w badaniu brakuje właściwego opisu sposobu zaprojektowania schematu bazy danych. Nie oczekuję, że baza danych zdominuje takiego króla przesłuchań, ale spodziewam się, że przy dobrze dostrojonym projekcie różnice nie będą tak ogromne.

Istnieją dobre / szybkie sposoby modelowania wykresów w RDBMS oraz głupie / wolne sposoby.

* Niektórzy używają sprytnego indeksowania i przechowywanych procesów, handlowania obciążeniem procesora i dostrajanych tabel temp na dyskach RAM dla szybszej prędkości pobierania wykresów.

* Niektórzy używają wstępnie obliczonych ścieżek graficznych (może to być mniej wykonalne w scenariuszu z sieciami społecznościowymi, ale w drzewie z większością węzłów stanowiących węzły liści, jest to całkiem niezły kompromis w stosunku do czasu

* Niektóre z nich po prostu obliczają w pętli, używając niestrunionej tabeli indeksowanej. Z #s wyrzuconych w artykule, który pachnie jak to zrobili (30 sekund – wydajność na dość niewielkim zestawie danych)

Czy to dobry przypadek dla NOSQL?

Obecnie pracuję przed projektem, który mógłbym rozwiązać za pomocą relacyjnej bazy danych w stosunkowo bolesny sposób. Słysząc tyle o NOSQL, zastanawiam się, czy nie ma bardziej odpowiedniego sposobu rozwiązania tego problemu:

Załóżmy, że śledzimy grupę zwierząt w lesie (n ~ 500) i chcielibyśmy prowadzić rejestr obserwacji (jest to fikcyjny scenariusz). Chcielibyśmy przechowywać następujące informacje w bazie danych:

* unikalny identyfikator dla każdego zwierzęcia

* opis zwierzęcia o uporządkowanych polach: gatunek, rodzaj, rodzina,…

* wolne pole tekstowe z dodatkowymi informacjami

* każdy punkt czasowy, w którym został wykryty w pobliżu punktu odniesienia

* zdjęcie zwierzęcia

* wskazanie, czy dwa dane zwierzęta są rodzeństwem

I:

* później mogą pojawiać się dodatkowe funkcje, gdy pojawi się więcej danych

Chcielibyśmy móc wykonywać następujące typy zapytań:

* zwróć wszystkie zauważone zwierzęta w danym przedziale czasu

* zwróć wszystkie zwierzęta z danego gatunku lub rodziny

* wykonaj wyszukiwanie tekstu w wolnym polu tekstowym

Który konkretny system baz danych poleciłbyś? Czy jest jakiś samouczek / przykłady, których mógłbym użyć jako punktu wyjścia?

Trzy tabele: zwierzę, obserwacja i rodzeństwo. Obserwacja ma kolumnę animal_id, która prowadzi do tabeli zwierząt, a tabela rodzeństwa zawiera kolumny animal_1_id i animal_2_id, które wskazują, że dwa zwierzęta są rodzeństwem dla każdego wiersza. Nawet przy 5000 zwierząt i 100000 obserwacji nie sądzę, że czas zapytania będzie stanowić problem dla czegoś takiego jak PostgreSQL dla najbardziej rozsądnych zapytań (oczywiście możesz tworzyć nieuzasadnione zapytania, ale możesz to zrobić w dowolnym systemie).

Nie rozumiem więc, jak to jest „względnie bolesne”. W stosunku do czego? Jedyną złożonością jest tabela z rodzeństwem. W NOSQL możesz przechowywać pełną listę rodzeństwa w rekordzie dla każdego zwierzęcia, ale kiedy dodajesz relację z rodzeństwem, musisz dodać ją do rejestrów zwierząt obu rodzeństwa. Zarysowane przeze mnie podejście do tabeli relacyjnej istnieje tylko raz, ale kosztem przetestowania obu kolumn w celu znalezienia rodzeństwa zwierzęcia. Użyłbym PostgreSQL, a to daje opcję korzystania z PostGIS, jeśli masz dane lokalizacji – jest to geoprzestrzenne rozszerzenie PostgreSQL, które pozwala ci wykonywać zapytania przestrzenne (punkt w wielokącie, punkty w pobliżu punktu itp.), Co może być ty. Naprawdę nie sądzę, że właściwości baz danych NOSQL stanowią dla ciebie problem – nie zmieniasz swojego schematu co dziesięć minut, prawdopodobnie dbasz o to, aby baza danych była zgodna z ACID i nie potrzebujesz czegoś w Internecie skala.

Co sprawia, że ​​kolumny kolumnowe są odpowiednie do analizy danych?

Jakie są zalety kolumnowych magazynów danych, które czynią je bardziej odpowiednimi do analizy danych i analiz?

Baza danych zorientowana na kolumny (= magazyn danych kolumnowych) przechowuje dane z tabeli kolumna po kolumnie na dysku, natomiast zorientowana wierszowo baza danych przechowuje dane tabeli wiersz po rzędzie. Istnieją dwie główne zalety korzystania z bazy danych zorientowanej na kolumny w porównaniu z bazą danych zorientowaną na wiersze. Pierwsza zaleta dotyczy ilości danych, które należy odczytać na wypadek, gdybyśmy wykonali operację tylko na kilku funkcjach. Rozważ proste zapytanie:

Tradycyjny moduł wykonujący czytałby całą tabelę (tj. wszystkie funkcje):

Zamiast tego, stosując nasze podejście oparte na kolumnach, musimy po prostu przeczytać kolumny, którymi jesteśmy  zainteresowani:

To zależy od tego, co robisz. Działanie z  kolumnami ma dwie kluczowe zalety:

* całe kolumny można pominąć

* kompresja długości przebiegu działa lepiej na kolumnach (dla niektórych typów danych; w szczególności z kilkoma odrębnymi wartościami)

Ma jednak również wady:

* wiele algorytmów potrzebuje wszystkich kolumn i zapisuje tylko na raz (np. k-średnie) lub może nawet wymagać obliczenia macierzy odległości parami

* techniki kompresji działają dobrze tylko na rzadkich typach danych i czynnikach, ale niezbyt dobrze na ciągłych danych o podwójnej wartości

* dodatki w sklepach kolumnowych są drogie, więc nie jest idealne do przesyłania strumieniowego / zmiany danych

Przechowywanie kolumnowe jest bardzo popularne w przypadku OLAP, czyli „głupich analiz” (Michael Stonebraker) i oczywiście w przypadku przetwarzania wstępnego, w którym rzeczywiście możesz być zainteresowany odrzuceniem całych kolumn (ale najpierw musisz mieć uporządkowane dane – nie przechowujesz JSON w kolumnie format). Ponieważ układ kolumnowy jest naprawdę ładny np. licząc ile jabłek sprzedałeś w zeszłym tygodniu. W przypadku wielu zastosowań naukowych / do analizy danych właściwym rozwiązaniem są bazy tablicowe (plus oczywiście nieustrukturyzowane dane wejściowe). Na przykład. SciDB i RasDaMan.

W wielu przypadkach (np. głębokie uczenie się) macierze i tablice to typy danych, których potrzebujesz, a nie kolumny. Oczywiście MapReduce itp. Nadal może być przydatny w przetwarzaniu wstępnym. Może nawet dane kolumnowe (ale baza danych macierzy zwykle obsługuje również kompresję podobną do kolumn).

Nie korzystałem z kolumnowej bazy danych, ale użyłem formatu kolumnowego o otwartym kodzie źródłowym o nazwie Parquet i myślę, że korzyści są prawdopodobnie takie same – szybsze przetwarzanie danych, gdy potrzebujesz tylko zapytania do niewielkiego podzbioru dużej liczby kolumn. Miałem zapytanie działające na około 50 terabajtach plików Avro (format pliku zorientowany na wiersze) z 673 kolumnami, co zajęło około półtorej godziny w 140-węzłowym klastrze Hadoop. W przypadku Parkietu to samo zapytanie zajęło około 22 minut, ponieważ potrzebowałem tylko 5 kolumn. Jeśli masz niewielką liczbę kolumn lub używasz dużej części swoich kolumn, nie sądzę, aby kolumna z bazą danych miałaby istotną różnicę w porównaniu z kolumną zorientowaną na wiersz, ponieważ nadal będziesz musiał zasadniczo przeskanować wszystkie swoje dane. Wierzę, że w kolumnowych bazach danych kolumny są przechowywane osobno, podczas gdy w bazach zorientowanych na wiersze są przechowywane osobno. Twoje zapytanie będzie szybsze za każdym razem, gdy będziesz mógł odczytać mniej danych z dysku.

[24]Wybór funkcji

Wybór funkcji, zwany także wyborem atrybutu lub redukcją funkcji, odnosi się do technik identyfikacji podzbioru cech zestawu danych, które są istotne dla danego problemu. Usuwając niepotrzebne i zbędne funkcje, udany wybór funkcji pozwala uniknąć przekleństw wymiarowości i poprawić wydajność, szybkość i interpretację kolejnych modeli. Wybór funkcji obejmuje metody ręczne (takie oparte na wiedzy w dziedzinie) i metody automatyczne. Metody automatyczne są często kategoryzowane według metod filtrowania, pakowania i osadzania.

Podejścia filtrujące dokonują wyboru funkcji jako osobnego kroku wstępnego przetwarzania przed algorytmem uczenia się. Podejścia filtrujące uwzględniają zatem tylko wewnętrzne właściwości danych. Metody filtrowania obejmują testy sumy rang Wilcoxona i testy oparte na korelacji. Podejście owijania wykorzystuje wydajność algorytmu uczenia się do wybierania funkcji. Algorytm wyszukiwania jest „owinięty” wokół algorytmu uczenia się, aby zapewnić odpowiednie przeszukiwanie przestrzeni podzbiorów cech. Jako takie, metody owijania mogą być postrzegane jako przeprowadzanie wyszukiwania hipotez modelu w ramach wyszukiwania podzbioru cech. Przykładami metod owijania są symulowane wyżarzanie i wyszukiwanie wiązki.

Podejścia osadzone obejmują wybór zmiennych jako część procesu szkolenia, przy czym istotność cech uzyskano analitycznie z celu modelu uczenia się. Metody osadzone można postrzegać jako wyszukiwanie w połączonej przestrzeni podzbiorów cech i hipotez. Przykładami metod osadzonych są przyspieszenie i rekurencyjna regresja kalenicy.

PYTANIA: Co to jest redukcja wymiarowości? Jaka jest różnica między wyborem funkcji a ekstrakcją?

Z Wikipedii,

redukcja wymiarów lub redukcja wymiarów to proces zmniejszania liczby rozważanych zmiennych losowych, który można podzielić na wybór cech i ekstrakcję cech.

Jaka jest różnica między wyborem funkcji a ekstrakcją funkcji? Jaki jest przykład zmniejszenia wymiarów w zadaniu przetwarzania języka naturalnego?

ODPOWIEDŹ:

Po prostu:

* wybór funkcji: wybierasz podzbiór oryginalnego zestawu funkcji; podczas

* ekstrakcja funkcji: tworzysz nowy zestaw funkcji z oryginalnego zestawu funkcji.

Przykłady ekstrakcji cech: ekstrakcja konturów na obrazach, ekstrakcja diagramów z tekstu, ekstrakcja fonemów z nagrania tekstu mówionego itp.

Wyodrębnianie cech obejmuje przekształcenie cech, które często nie jest odwracalne, ponieważ niektóre informacje są tracone w procesie zmniejszania wymiarów.

Redukcja wymiarów polega zazwyczaj na wybraniu podstawy lub reprezentacji matematycznej, w ramach której można opisać większość, ale nie całą wariancję danych, zachowując w ten sposób odpowiednie informacje, jednocześnie zmniejszając ilość informacji niezbędnych do reprezentacji. Istnieje wiele technik wykonywania tego, w tym między innymi PCA, ICA i faktoryzacja macierzy. Wykorzystają one istniejące dane i zredukują je do najbardziej dyskryminujących elementów. Wybór funkcji to ręczne wybieranie cech, które są wysoce dyskryminujące. Ma to o wiele więcej wspólnego z inżynierią funkcji niż analizą i wymaga znacznie więcej pracy ze strony naukowca danych. Wymaga to zrozumienia, jakie aspekty zestawu danych są ważne w jakichkolwiek prognozach, a które nie. Wyodrębnianie elementów zwykle obejmuje generowanie nowych elementów, które są kompozytami istniejących elementów. Obie te techniki należą do kategorii inżynierii obiektów. Zasadniczo inżynieria funkcji jest ważna, jeśli chcesz uzyskać najlepsze wyniki, ponieważ obejmuje tworzenie informacji, które mogą nie istnieć w zbiorze danych, oraz zwiększenie stosunku sygnału do szumu.

Wybór funkcji odpowiedzi dotyczy wyboru podzbioru funkcji. Tak więc w NLP byłoby wybranie zestawu konkretnych słów (typowe w NLP jest to, że każde słowo reprezentuje cechę o wartości równej częstotliwości słowa lub innej wadze opartej na TF / IDF lub podobnej). Redukcja wymiarów polega na wprowadzeniu nowej przestrzeni elementów, w której reprezentowane są elementy oryginalne. Nowa przestrzeń ma niższy wymiar niż pierwotna przestrzeń. W przypadku tekstu przykładem może być sztuczka haszująca, w której fragment tekstu jest redukowany do wektora kilku bitów (powiedzmy 16 lub 32) lub bajtów. Niesamowite jest to, że geometria przestrzeni jest zachowana (podana wystarczająca liczba bitów), więc względne odległości między dokumentami pozostają takie same jak w oryginalnej przestrzeni, dzięki czemu można wdrożyć standardowe techniki uczenia maszynowego bez konieczności radzenia sobie z nieograniczonymi (i ogromną liczbą) z) wymiarów znalezionych w tekście.

Czy scikit-learn ma algorytm selekcji do przodu / regresji krokowej?

Pracuję nad problemem ze zbyt wieloma funkcjami, a szkolenie moich modeli trwa zdecydowanie za długo. Zaimplementowałem algorytm wybierania do przodu, aby wybrać funkcje. Zastanawiałem się jednak, czy scikit-learn ma algorytm selekcji do przodu / regresji krokowej?

Nie, sklearn nie wydaje się mieć algorytmu selekcji do przodu. Jednak zapewnia rekurencyjną eliminację cech, która jest chciwym algorytmem eliminacji cech podobnym do sekwencyjnego wybierania wstecznego.

[023][NoSQL]

NoSQL (czasem rozszerzony do „nie tylko sql”) to szeroka klasa systemów zarządzania bazami danych, które różnią się od klasycznego modelu systemu zarządzania relacyjnymi bazami danych (rdbms) w znaczący sposób.

Systemy NoSQL:

* Specjalnie zaprojektowany dla dużego obciążenia

* Natywnie obsługuje skalowanie w poziomie

*Odporne na uszkodzenia

* Przechowuj dane w sposób zdenormalizowany

* Zwykle nie egzekwuj ścisłego schematu bazy danych

* Zwykle nie przechowuj danych w tabeli

* Czasami zapewniają ostateczną spójność zamiast transakcji ACID

W przeciwieństwie do RDBMS, system NoSQL:

* Nie gwarantuje spójności danych

* Zwykle obsługuje ograniczony język zapytań (podzbiór SQL lub inny niestandardowy język zapytań)

* Może nie zapewniać obsługi transakcji / transakcji rozproszonych

* Zwykle nie używaj niektórych zaawansowanych koncepcji RDBMS, takich jak wyzwalacze, widoki, procedury składowane Implementacje NoSQL można podzielić na kategorie

PYTANIA: Jaki jest najlepszy backend NoSQL dla gry mobilnej? Jakiego backendu noSQL najlepiej użyć do gry mobilnej? Użytkownicy mogą wysyłać wiele żądań serwerów, muszą także pobierać historyczne dane użytkowników (np. Kupowanie aplikacji) i analizy zachowań użytkowników.

ODPOWIEDŹ:

Niektóre czynniki, które możesz wziąć pod uwagę:

Znajomość programistów: korzystaj z tego, co znasz Ty lub Twoi programiści. Mongo, Couch, Riak, DynamoDB itp. Mają swoje mocne strony, ale wszystko powinno być w porządku, więc zamiast szukać nieznanego rozwiązania, które może być nieco lepiej, przejdź do znajomego i zaoszczędź sporo czasu na rozwój.

Łatwość wdrożenia w chmurze: na przykład jeśli korzystasz z Amazon AWS, to DynamoDB jest prawdopodobnie doskonałym wyborem. Jasne, możesz użyć Mongo na AWS, ale po co? Inni dostawcy usług w chmurze mają własne preferowane bazy danych, na przykład jeśli korzystasz z Google AppEngine, warto skorzystać z BigTable lub Cloud Datastore.

Twój przypadek użycia wydaje się być zarówno odpowiedni dla NoSQL, jak i niezbyt trudny, ponieważ dane mają naturalną partycję według użytkownika. Myślę, że z technicznego punktu widzenia nie miałbyś nic przeciwko, dlatego omawiam głównie inne czynniki.

[022] Modelowanie predykcyjne

Najlepszy model regresji do prognozowania sprzedaży

PYTANIA:

Mam następujące zmienne wraz z danymi sprzedaży sprzed kilku lat:

* date # simple date, można podzielić na rok, miesiąc itp.

* shipping_time (0-6 tygodni) #0 tygodni oznacza w magazynie, więcej tygodni oznacza, że ​​produkt jest niedostępny, ale przesyłka jest w drodze do magazynu. Dłuższe czasy wysyłki mają znaczący wpływ na sprzedaż.

* salels # amount of products sold. Muszę przewidzieć sprzedaż (która zmienia się sezonowo) biorąc pod uwagę  czas wysyłki.

Jaki byłby prosty model regresji, który dałby rozsądne wyniki? Próbowałem regresji liniowej z samą datą i sprzedażą, ale nie uwzględnia to sezonowości, więc prognoza jest raczej słaba.

Jako miarę dokładności przedstawię losową próbkę danych z danych wejściowych i porównam z wynikiem.

Dodatkowe punkty, jeśli można to łatwo zrobić w python / scipy

Dane mogą wyglądać tak

data.PNG

ODPOWIEDŹ:

To całkiem klasyczny zestaw danych ARIMA. ARIMA jest zaimplementowana w pakiecie StatsModels dla Python. Model ARIMA z korektą sezonową może być najprostszą rozsądnie udaną prognozą dla złożonych szeregów czasowych, takich jak prognozowanie sprzedaży. Być może (prawdopodobnie będzie) konieczne będzie połączenie metody z dodatkową warstwą modelu, aby wykryć dodatkowe fluktuacje poza funkcją autoregresji trendu sprzedaży. Niestety, proste modele regresji liniowej wypadają dość słabo w przypadku danych szeregów czasowych.

ODPOWIEDŹ:

Czy próbowałeś modelowania szeregów czasowych? Jeśli nie, to powinieneś. Próbowałem regresji liniowej z tylko datą i sprzedażą, ale to nie uwzględnia sezonowości. Model średniej ruchomej jest czymś, co dobrze pasuje do twojego zestawu danych. Jednak, gdy mówisz, że twój model wykazuje sezonowość, musisz dostosować średnie kroczące, aby uwzględniało sezonowość. Tak więc najlepszym modelem dla twojego zestawu danych byłby model SARIMA. Jest to tylko model zintegrowanej średniej ruchomej z automatyczną regresją (ARIMA), ale z korektami sezonowymi. Oto jedno z pytań, na które odpowiedziałem, które dodatkowo pomaga zrozumieć niewielkie zmiany sezonowości i trendów, wraz z kodem R.

[021][Definicje](2)

PYTANIE: Czy rozpoczynając karierę jako Data Scientist, wymagane jest doświadczenie w inżynierii oprogramowania?

Jestem studentem na uniwersytecie w Edynburgu, specjalizującym się w uczeniu maszynowym i przetwarzaniu języka naturalnego. Miałem kilka praktycznych kursów dotyczących eksploracji danych, a inne dotyczyły uczenia maszynowego, statystyki bayesowskiej i modeli graficznych. Moje wykształcenie to licencjat z informatyki. Zrobiłem trochę inżynierii oprogramowania i nauczyłem się podstawowych pojęć, takich jak wzorce projektowe, ale nigdy nie brałem udziału w dużym projekcie rozwoju oprogramowania. Miałem jednak projekt eksploracji danych. Moje pytanie brzmi: czy chcąc rozpocząć karierę jako specjalista ds. danych, czy powinienem najpierw ubiegać się o stanowisko analityka danych, czy najpierw powinienem uzyskać tytuł magistra inżyniera oprogramowania, może coś związanego z nauką danych, np. duże zbiory danych rozwój infrastruktury lub oprogramowania do uczenia maszynowego? Obawiam się, że mogę potrzebować dobrych umiejętności inżynierii oprogramowania do nauki danych i nie jestem pewien, czy można je zdobyć, pracując bezpośrednio jako absolwent danych. Co więcej, w tej chwili lubię Data Mining, ale co, jeśli chcę w przyszłości zmienić karierę na inżynierię oprogramowania? To może być trudne, jeśli tak bardzo specjalizuję się w informatyce. Nie byłem jeszcze zatrudniony, więc moja wiedza jest wciąż ograniczona. Wszelkie wyjaśnienia lub porady są mile widziane, ponieważ mam zamiar ukończyć magistra i chcę zacząć ubiegać się o to stanowisko

ODPOWIEDŹ: 1) Myślę, że nie ma potrzeby kwestionować, czy Twoje wykształcenie jest odpowiednie do kariery w informatyce. Stopień CS IMHO jest więcej niż wystarczający dla inżyniera danych z punktu widzenia inżynierii oprogramowania. Powiedziawszy to, wiedza teoretyczna nie jest bardzo pomocna bez dopasowania do praktycznego doświadczenia, dlatego zdecydowanie staram się wzbogacić moje doświadczenie, uczestnicząc w dodatkowych projektach szkolnych, stażach lub projektach open source (być może takich, które koncentrują się na danych / uczeniu maszynowym / sztucznej inteligencji ). 2) Uważam, że twoja obawa przed zbyt wczesnym skupieniem się na analizie danych jest bezpodstawna, o ile będziesz ćwiczyć inżynierię oprogramowania albo w ramach pracy w dziedzinie analizy danych, albo dodatkowo w wolnym czasie. 3) Uważam następującą definicję analityka danych za dość dokładną i mam nadzieję, że będzie ona pomocna w twoim przyszłym sukcesie zawodowym: Analityk danych to ktoś, kto jest lepszy w statystyce niż jakikolwiek inżynier oprogramowania i jest lepszy w inżynierii oprogramowania niż jakikolwiek statystyk.

P.S. Dzisiejsza ogromna liczba różnych zasobów na tematy związane z naukami o danych jest oszałamiająca, ale ten program open source do nauki danych może wypełnić pewne luki między odpowiednimi programami studiów licencjackich i magisterskich a rzeczywistością kariery naukowej w dziedzinie danych (lub przynajmniej zapewnić pewien kierunek dla dalsze badania i może odpowiedzieć na niektóre z Twoich obaw)

Od ogłoszeń o pracy, które widziałem, zależy odpowiedź: Są prace, które mają bardziej techniczny charakter (projektowanie projektów dużych zbiorów danych, przeprowadzanie analiz) lub dokładnie odwrotnie (wykonywanie analiz, przechowywanie itp. to inna praca). Powiedziałbym więc, że NIEKTÓRE umiejętności projektowania oprogramowania są niezwykle przydatne, ale nie potrzebujesz umiejętności tworzenia dużego programu w języku C # / Java. Dlaczego lubię niektóre umiejętności SW, to po prostu to, że Twój kod prawdopodobnie wygląda o wiele lepiej niż kod kogoś, kto nigdy nie programował ze względu na programowanie. Przez większość czasu ten drugi kod jest bardzo trudny do zrozumienia / debugowania dla osób postronnych. Czasami twoja analiza musi być zintegrowana z większym programem, zrozumienie potrzeb programów z pewnością pomaga.

Absolutnie. Zachowaj ostrość swoich umiejętności programistycznych. Możesz to zrobić w programie akademickim, jeśli sam zaimplementujesz wszystkie algorytmy, o których się uczysz. Zastanów się też nad odbyciem stażu

[020][Definicje]

PYTANIE: Przetwarzanie równoległe i rozproszone

Jaka jest (są) różnica(-e) między obliczeniami równoległymi i rozproszonymi? Jeśli chodzi o skalowalność i wydajność, bardzo często spotyka się rozwiązania dotyczące obliczeń w klastrach maszyn, a czasem nazywa się je przetwarzaniem równoległym lub przetwarzaniem rozproszonym. W pewnym sensie obliczenia wydają się zawsze równoległe, ponieważ niektóre rzeczy działają równolegle. Ale czy obliczenia rozproszone są po prostu związane z korzystaniem z więcej niż jednej maszyny, czy też są jakieś dodatkowe cechy, które odróżniają te dwa rodzaje przetwarzania? Czy nie byłoby zbędne stwierdzenie, na przykład, że obliczenia są równoległe ORAZ rozproszone?

ODPOWIEDŹ:

Mówiąc prosto, „równoległe” oznacza jednoczesne działanie na różnych zasobach (procesorach), podczas gdy „rozproszone” oznacza działanie na różnych komputerach, co wiąże się z problemami związanymi z sieciami. Obliczenia równoległe z wykorzystaniem na przykład OpenMP nie są rozproszone, podczas gdy przetwarzanie równoległe z przekazywaniem wiadomości jest często rozproszone. Ustawienie „rozproszonego, ale nie równoległego” oznaczałoby niepełne wykorzystanie zasobów, więc rzadko się go spotyka, ale jest to możliwe koncepcyjnie.

Pojęcia „przetwarzanie równoległe” i „przetwarzanie rozproszone” z pewnością w dużym stopniu się pokrywają, ale można je dalej różnicować. W rzeczywistości zrobiłeś to już w swoim pytaniu, pytając później o „przetwarzanie równoległe” i „przetwarzanie rozproszone”. „Komputer rozproszony” można uznać za bardziej ogólny termin obejmujący „przetwarzanie rozproszone”, a także na przykład „pamięć rozproszona”. Powszechny termin „rozproszony” zwykle odnosi się do pewnego rodzaju przekazu wiadomości w sieci między fizycznie oddzielonymi komputerami. Termin „przetwarzanie równoległe” jest również w trakcie dalszego definiowania, np. poprzez wyraźne rozróżnienie między terminami „równoległy” i „równoległy”, gdzie – z grubsza – pierwszy odnosi się do paralelizmu danych, a drugi do paralelizmu zadań, chociaż nie ma tak naprawdę ścisłych i wiążących definicji.

Można by tak powiedzieć

* „Przetwarzanie rozproszone” zwykle (choć niekoniecznie) oznacza, że ​​jest to również „przetwarzanie równoległe”

* „Przetwarzanie rozproszone” jest bardziej ogólne i obejmuje również aspekty niezwiązane z równoległością

* i oczywiście „obliczanie równoległe” / „przetwarzanie równoległe” nie oznacza, że ​​jest ono „rozproszone”

Odpowiedzi przedstawione do tej pory są bardzo miłe, ale spodziewałem się także, że położę nacisk na szczególną różnicę między przetwarzaniem równoległym a rozproszonym: wykonanym kodem. Biorąc pod uwagę procesy równoległe, wykonywany kod jest taki sam, niezależnie od poziomu równoległości (instrukcja, dane, zadanie). Piszesz pojedynczy kod, który będzie wykonywany przez różne wątki / procesory, np. podczas obliczania produktów macierzy lub generowania permutacji. Z drugiej strony przetwarzanie rozproszone obejmuje wykonywanie różnych algorytmów / programów w tym samym czasie w różnych procesorach (z jednego lub większej liczby komputerów). Takie obliczenia są następnie łączone w wyniki pośrednie / końcowe przy użyciu dostępnych środków komunikacji / synchronizacji danych (pamięć współdzielona, ​​sieć). Ponadto przetwarzanie rozproszone jest bardzo atrakcyjne dla przetwarzania BigData, ponieważ pozwala na wykorzystanie równoległości dysków (zwykle wąskie gardło w przypadku dużych baz danych). Wreszcie, dla poziomu równoległości można go raczej traktować jako ograniczenie synchronizacji. Na przykład, w GPGPU, który jest wieloma danymi z pojedynczej instrukcji (SIMD), równoległość występuje poprzez posiadanie różnych danych wejściowych dla pojedynczej instrukcji, przy czym każda para (data_i, instrukcja) jest wykonywana przez inny wątek. Takie ograniczenie jest takie, że w przypadku rozbieżnych gałęzi konieczne jest odrzucenie wielu niepotrzebnych obliczeń, dopóki wątki się nie zbiegną. W przypadku wątków procesorów zwykle się różnią; jednak można użyć struktur synchronizacyjnych, aby zezwolić na równoczesne wykonanie określonych sekcji kodu.

[019] [Edukacja](2)

PYTANIE: Co sądzisz o certyfikatach Data Science?

Widziałem teraz dwa programy certyfikacji danych naukowych – John Hopkins dostępny w Coursera i Cloudera. Jestem pewien, że są tam inne. Zestaw klas Johna Hopkinsa koncentruje się na R jako zestawie narzędzi, ale obejmuje szereg tematów:

* Programowanie R.

* czyszczenie i uzyskiwanie danych

*Analiza danych

* Powtarzalne badania

* Wnioskowanie statystyczne

* Modele regresji

*Nauczanie maszynowe

* Opracowywanie produktów danych

I coś, co wygląda na zadanie realizacji oparte na projekcie podobne do Cloudera Data Science Challenge Program Cloudera wygląda cienko na powierzchni, ale odpowiada na dwa ważne pytania – „Czy znasz narzędzia”, „Czy możesz zastosować narzędzia w prawdziwym świecie”. Ich program składa się z:

* Wprowadzenie do Data Science

* Egzamin Essentials Data Science

* Data Science Challenge (scenariusz projektu danych z prawdziwego świata)

Nie szukam rekomendacji dotyczącej programu ani porównania jakości. Jestem ciekawy innych certyfikatów, poruszanych tematów i tego, jak poważnie w tym momencie społeczność przegląda certyfikaty DS.

ODPOWIEDŹ:

Zrobiłem pierwsze 2 kursy i planuję też zrobić wszystkie inne. Jeśli nie znasz R, jest to naprawdę dobry program. Co tydzień są zadania i quizy. Wiele osób uważa, że ​​niektóre kursy są bardzo trudne. Będziesz miał trudności, jeśli nie będziesz mieć doświadczenia w programowaniu (nawet jeśli powiedzą, że nie jest to wymagane). Pamiętaj tylko … to nie dlatego, że umiesz prowadzić samochód, jesteś pilotem F1;)

Jestem bardzo ostrożny z potrzebą certyfikatów data science. Termin „naukowiec danych” jest dość niejasny, a dziedzina nauki danych jest w powijakach. Certyfikaty implikują pewien jednolity standard, którego po prostu brakuje w analizie danych, wciąż jest to bardzo dziki zachód. Chociaż certyfikat prawdopodobnie cię nie skrzywdzi, myślę, że lepiej poświęcić swój czas na rozwijanie doświadczenia, aby wiedzieć, kiedy zastosować określone podejście i głębię zrozumienia, aby móc wyjaśnić to podejście nietechnicznej publiczności.

Wspomniane programy certyfikacyjne są naprawdę kursami dla początkujących. Osobiście uważam, że te certyfikaty pokazują tylko upór osoby i mogą być przydatne tylko dla tych, którzy ubiegają się o staże, a nie prawdziwe zadania związane z analizą danych.

[018][Edukacja]

PYTANIE: Kwalifikacje do programów doktoranckich

Yann LeCun wspomniał w swoim AMA, że uważa, że ​​posiadanie doktoratu jest bardzo ważne, aby uzyskać pracę w jednej z najlepszych firm. Mam mistrzów w dziedzinie statystyki, a mój student studiował ekonomię i matematykę stosowaną, ale teraz zajmuję się programami doktoranckimi. Większość programów mówi, że nie ma absolutnie niezbędnych kursów CS; jednak wydaje mi się, że większość przyjętych studentów ma co najmniej bardzo dobre zaplecze CS. Obecnie pracuję jako naukowiec / statystyk danych, ale moja firma zapłaci za kursy. Czy powinienem wziąć udział w kursach inżynierii oprogramowania na lokalnym uniwersytecie, aby stać się silniejszym kandydatem? Jakie jeszcze masz rady dla osoby ubiegającej się o przyjęcie na studia doktoranckie spoza dziedziny CS?

Wziąłem kilka MOOC (Machine Learning, systemy polecające, NLP) i codziennie koduję R / python. Mam duże doświadczenie w programowaniu w językach statystycznych i codziennie wdrażam algorytmy ML. Bardziej interesują mnie rzeczy, gdzie mogę założyć aplikację.

ODPOWIEDŹ:

Gdybym był tobą, wziąłbym MOOC lub dwa, dobrą książkę o strukturach danych i algorytmach, a następnie po prostu koduj jak najwięcej. Możesz na przykład zaimplementować niektóre statystyki lub algorytmy ML; to byłaby dobra praktyka dla ciebie i przydatna dla społeczności. Jednak w przypadku programu doktoranckiego upewniam się również, jakiego rodzaju matematyki używają. Jeśli chcesz zobaczyć, jak to jest na głębokim końcu, przejrzyj dokumenty w JMLR. To pozwoli ci skalibrować się w odniesieniu do teorii; czy potrafisz postępować zgodnie z matematyką? Aha, i nie potrzebujesz doktora do pracy w najlepszych firmach, chyba że chcesz dołączyć do działów badawczych .Ale wtedy poświęcisz więcej czasu na programowanie i będziesz potrzebować dobrych umiejętności kodowania …

ODPOWIEDŹ:

Twój czas prawdopodobnie lepiej spędziłbyś na Kaggle niż na programie doktoranckim. Kiedy czytasz historie zwycięzców (blog Kaggle), zobaczysz, że wymaga to dużej ilości ćwiczeń, a zwycięzcy nie są tylko ekspertami jednej metody. Z drugiej strony bycie aktywnym i posiadanie planu w programie doktoranckim może zapewnić ci połączenia, których w innym przypadku prawdopodobnie byś nie uzyskał. Wydaje mi się, że prawdziwe pytanie dotyczy Ciebie – jakie są powody, dla których chcesz pracować w najlepszej firmie?

ODPOWIEDŹ:

Masz już tytuł magistra statystyki, co jest świetne! Zasadniczo sugerowałbym, aby ludzie wykonywali jak najwięcej statystyk, w szczególności analiza danych bayesowskich. W zależności od tego, co chcesz zrobić ze swoim doktoratem, skorzystasz z podstawowych kursów z dziedziny (dyscyplin) w swoim obszarze zastosowania. Masz już ekonomię, ale jeśli chcesz zajmować się nauką danych na temat zachowań społecznych, wówczas kursy socjologii byłyby cenne. Jeśli chcesz pracować w zapobieganiu oszustwom, to kursy bankowości i transakcji finansowych byłyby dobre. Jeśli chcesz pracować w zakresie bezpieczeństwa informacji, warto wziąć udział w kilku kursach bezpieczeństwa. Są ludzie, którzy twierdzą, że dla naukowców danych nie jest cenne spędzanie czasu na kursach z socjologii lub innych dyscyplin. Ale rozważ ostatni przypadek projektu Google Flu Trends. W tym artykule ich metody zostały ostro skrytykowane za popełnianie błędów, których można uniknąć. Krytycy nazywają to „Big Data Hubris”. Jest jeszcze jeden powód do budowania siły w dyscyplinach nauk społecznych: osobista przewaga konkurencyjna. Wraz ze wzrostem liczby akademickich programów studiów, programów certyfikatów i MOOCs, szalony pęd studentów w kierunku Data Science. Większość przyjdzie z możliwościami podstawowych metod i narzędzi uczenia maszynowego. Doktoranci będą mieli większą głębię i więcej wiedzy teoretycznej, ale wszyscy konkurują o te same rodzaje pracy, zapewniając taką samą wartość. Po tej fali absolwentów spodziewam się, że nie będą w stanie kierować pensjami premium. Ale jeśli potrafisz się wyróżnić dzięki połączeniu formalnego wykształcenia i praktycznego doświadczenia w określonej dziedzinie i obszarze zastosowania, powinieneś być w stanie wyróżnić się z tłumu. (Kontekst: Jestem doktorantem w dziedzinie obliczeniowych nauk społecznych, który kładzie duży nacisk na modelowanie, obliczenia ewolucyjne i dyscypliny nauk społecznych oraz mniejszy nacisk na ML i inne tematy analizy danych empirycznych).