[37][Klastrowanie]

PYTANIA

Grupowanie unikalnych użytkowników według useragent, ip, session_id

Biorąc pod uwagę dane dostępu do witryny w postaci session_id, ip, user_agent i opcjonalnie znacznik czasu, zgodnie z poniższymi warunkami, w jaki sposób najlepiej zgrupować sesje w unikalnych użytkowników? session_id: to identyfikator nadawany każdemu nowemu odwiedzającemu. Nie wygasa jednak, jeśli użytkownik nie akceptuje plików cookie / usuwa pliki cookie / zmienia przeglądarkę / zmienia urządzenie, nie będzie już rozpoznawany Adres IP może być współużytkowany przez różnych użytkowników (Wyobraź sobie darmową kawiarnię Wi-Fi lub zmianę adresu IP przez Twojego dostawcę usług internetowych), i często będą mieli co najmniej 2, dom i praca. User_agent to wersja przeglądarki + systemu operacyjnego, umożliwiająca rozróżnienie urządzeń. Na przykład użytkownik prawdopodobnie będzie korzystał zarówno z telefonu, jak i laptopa, ale raczej nie będzie korzystał z laptopów z systemem Windows i Apple. Jest mało prawdopodobne, aby ten sam identyfikator sesji miał wielu użytkowników.

Oczywiście mówimy o założeniach, ale chodzi o to, aby zbliżyć się do rzeczywistości tak, jak to możliwe. Na przykład, jeśli napotkamy ten sam adres IP i identyfikator użytkownika w ograniczonym przedziale czasowym z innym identyfikatorem session_id, można założyć, że jest to ten sam użytkownik, z pewnymi wyjątkami dotyczącymi krawędzi.

Edycja: język, w którym problem został rozwiązany, nie ma znaczenia, dotyczy głównie logiki, a nie implementacji. Pseudokod jest w porządku.

Edycja: ze względu na powolny charakter skrzypiec możesz alternatywnie czytać / uruchamiać mysql:

select session_id, floor(rand()*256*256*256*256) as ip_num , floor(rand()*1000) as user_agent_id

from

(select 1+a.nr+10*b.nr as session_id, ceil(rand()*3) as nr

from

(select 1 as nr union all select 2 union all select 3 union all select 4 union all select 5

union all select 6 union all select 7 union all select 8 union all select 9 union all select 0)a

join

(select 1 as nr union all select 2 union all select 3 union all select 4 union all select 5

union all select 6 union all select 7 union all select 8 union all select 9 union all select 0)b

order by 1

)d

inner join

(select 1 as nr union all select 2 union all select 3 union all select 4 union all select 5

union all select 6 union all select 7 union all select 8 union all select 9 )e

on d.nr>=e.nr

ODPOWIEDZI:

Jedną z możliwości, jest zdefiniowanie „stabilnego użytkownika”. Dla podanych informacji możesz sobie wyobrazić utworzenie id_użytkownika, który jest skrótem adresu IP i niektórych informacji o kliencie użytkownika (pseudo-kod):

uid = MD5Hash (ip + UA.device + UA.model)

Następnie oflagujesz te identyfikatory jako „stabilne” lub „niestabilne” na podstawie heurystyki użytkowania, którą obserwujesz dla użytkowników. Może to być próg liczby wizyt w danym oknie czasowym, czas przechowywania plików cookie, pewne działania końcowe w witrynie (zdaję sobie sprawę, że nie zostało to określone w Twoim oryginalnym dzienniku) itp.

Chodzi o to, aby oddzielić użytkowników, którzy nie opuszczają plików cookie, od tych, którzy to robią. Stąd możesz przypisać session_ids do stabilnych UID z twoich logów. Będziesz wtedy miał „resztki” session_ids dla niestabilnych użytkowników, co do których jesteś stosunkowo niepewny. Być może sesje są nadmiernie lub niedostatecznie liczone, przypisując zachowanie wielu osobom, gdy jest tylko jedna itd. Ale to jest co najmniej ograniczone do użytkowników, których jesteś teraz „mniej pewny”. Następnie wykonujesz analizy na stabilnej grupie i projektujesz ją na niestabilną grupę. Weźmy na przykład liczbę użytkowników, znasz całkowitą liczbę sesji, ale nie masz pewności, ilu użytkowników wygenerowało te sesje. Możesz znaleźć # sesji / unikalnego stabilnego użytkownika i użyć go do wyświetlenia „szacunkowej” liczby unikalnych użytkowników w niestabilnej grupie, ponieważ znasz liczbę sesji przypisanych do tej grupy.

projected_num_unstable_users = num_sess_unstable / num_sess_per_stable_uid

To nie pomaga w dochodzeniu na poziomie użytkownika dotyczącym niestabilnych użytkowników, ale możesz przynajmniej uzyskać przebieg z kohorty stabilnych użytkowników, którzy utrzymują się przez pewien czas. Za pomocą różnych metod możesz projektować zachowanie i zaliczać się do niestabilnej grupy. Powyżej jest prostym przykładem czegoś, co możesz chcieć wiedzieć. Ogólnym pomysłem jest ponowne zdefiniowanie zestawu użytkowników, których zachowanie jest pewne, zmierzenie tego, co chcesz zmierzyć, i wykorzystanie pewnych podstawowych prawd (liczba wyszukiwań, odwiedzin, kliknięć itp.) W celu wyświetlenia w nieznanej przestrzeni użytkownika i oszacowania im. Jest to długotrwały problem związany z unikalnym liczeniem użytkowników, logowaniem itp.… W przypadku usług, które nie wymagają logowania.

Z tymi danymi niewiele możesz zrobić, ale to, co niewiele możesz zrobić, nie zależy od uczenia maszynowego. Tak, sesje z tego samego adresu IP, ale różni użytkownicy użytkownika są prawie na pewno różnymi użytkownikami. Sesje z tym samym adresem IP i User-Agent to zwykle ten sam użytkownik, z wyjątkiem serwerów proxy / punktów dostępu Wi-Fi. Te, które możesz zidentyfikować, patrząc na rozkład liczby sesji według adresu IP, aby zidentyfikować prawdopodobne „zagregowane” adresy IP. Sesje z tego samego IP / User-Agent, które nakładają się w czasie, są prawie na pewno różne. Aby dodatkowo rozróżnić użytkowników, potrzebujesz więcej informacji. Na przykład witryny lub adresy IP, z którymi łączy się użytkownik, byłyby bardzo mocną podstawą do rozróżnienia sesje. Następnie możesz przejść do bardziej wyrafinowanej nauki, aby dowiedzieć się, kiedy sesje są tymi samymi lub różnymi użytkownikami.

K-średnie vs. K-średnie online

K-średnich jest dobrze znanym algorytmem do tworzenia klastrów, ale istnieje również wariant online takiego algorytmu (K-średnich online). Jakie są zalety i wady tych podejść i kiedy należy je preferować?

K-średnie online (bardziej znane jako sekwencyjne k-średnie) i tradycyjne k-średnie są bardzo podobne. Różnica polega na tym, że k-średnich online umożliwia aktualizację modelu po otrzymaniu nowych danych. Online k-średnich należy używać, gdy oczekujesz, że dane będą odbierane jeden po drugim (a może w kawałkach). Umożliwia to aktualizację modelu w miarę uzyskiwania dodatkowych informacji na jego temat. Wadą tej metody jest to, że zależy ona od kolejności otrzymywania danych

Oryginalna publikacja k-średnie MacQueena (pierwsza, która używa nazwy „kmeans”) jest algorytmem online.  Po przypisaniu każdego punktu średnia jest stopniowo aktualizowana za pomocą prostej formuły średniej ważonej (stara średnia jest ważona n, nowa obserwacja jest ważona 1, jeśli średnia miała n obserwacji wcześniej). O ile mi wiadomo, miało to również być pojedyncze przejście tylko przez dane, chociaż można to wielokrotnie powtarzać w trywialny sposób, aby ponownie przypisać punkty do zbieżności. MacQueen zwykle zbiera mniej iteracji niż Lloyds, jeśli dane są tasowane (ponieważ aktualizuje średnią szybciej!). Na zamówionych danych może to mieć problemy. Z drugiej strony wymaga więcej obliczeń dla każdego obiektu, więc każda iteracja trwa nieco dłużej (oczywiście dodatkowe operacje matematyczne).

 Grupowanie danych z długimi ogonami / pareto przed grupowaniem

Chcę zgrupować zestaw danych o długich ogonach / pareto w kilka przedziałów (w rzeczywistości numer przedziału nie jest jeszcze określony). Czy mogę zastosować jakieś algorytmy lub modele?

Istnieje kilka podejść. Możesz zacząć od drugiego.

Partycjonowanie równej szerokości (odległość):

* Dzieli zakres na N przedziałów o równej wielkości: jednolita siatka

* jeśli A i B są najniższą i najwyższą wartością atrybutu, szerokość przedziałów będzie wynosić: W = (B-A) / N.

* Najprostsze – Wartości odstające mogą zdominować prezentację – Przekrzywione dane nie są odpowiednio obsługiwane.

Podział na jednakową głębokość (częstotliwość):

* Dzieli zakres na N przedziałów, z których każdy zawiera w przybliżeniu taką samą liczbę próbek

* Dobre skalowanie danych

* Zarządzanie atrybutami kategorycznymi może być trudne.

Inne metody

* Ranga: Ranga liczby to jej wielkość w stosunku do innych wartości zmiennej numerycznej. Najpierw sortujemy listę wartości, a następnie przypisujemy pozycję wartości jako jej pozycję. Te same wartości otrzymują tę samą rangę, ale obecność zduplikowanych wartości wpływa na szeregi kolejnych wartości (np. 1,2,3,3,5). Ranga jest solidną metodą grupowania z jedną główną wadą, wartości mogą mieć różne stopnie na różnych listach.

* Kwantyle (mediana, kwartyle, percentyle, …): Kwantyle są również bardzo duże ale użyteczne metody grupowania, ale jak Ranga, jedna wartość może mieć inny kwantyl, jeśli lista wartości się zmieni.

* Funkcje matematyczne: Na przykład binowanie logarytmiczne jest skuteczną metodą dla zmiennych numerycznych o silnie przekrzywionym rozkładzie (np. Dochód).

Binning oparty na Entropii

Metoda oparta na entropii wykorzystuje podejście podzielone. Entropia (lub treść informacyjna) jest obliczana na podstawie etykiety klasy. Intuicyjnie znajduje najlepszy podział, dzięki czemu pojemniki są tak czyste, jak to możliwe, to znaczy większość wartości w pojemniku odpowiada tej samej etykiecie klasy. Formalnie charakteryzuje się znalezieniem podziału z maksymalnym zyskiem informacji.

Jaki jest najlepszy algorytm Data Mining do prognozowania na podstawie pojedynczej zmiennej?

Mam zmienną, której wartość chciałbym przewidzieć i chciałbym użyć tylko jednej zmiennej jako predyktora. Na przykład przewiduj natężenie ruchu na podstawie pogody. Początkowo myślałem o użyciu map samoorganizujących się (SOM), które wykonują bez nadzoru klastrowanie + regresję. Ponieważ jednak ma on istotny składnik redukcji wymiarów, uważam go za bardziej odpowiedni dla dużej liczby zmiennych. Czy warto używać go dla jednej zmiennej jako predyktora? Być może istnieją bardziej odpowiednie techniki dla tego prostego przypadku: w tytule mojego pytania użyłem „Data Mining” zamiast „uczenia maszynowego”, ponieważ myślę, że może regresja liniowa mogłaby wykonać zadanie…

Powszechną zasadą w uczeniu maszynowym jest wypróbowanie prostych rzeczy w pierwszej kolejności. Do przewidywania zmiennych ciągłych nie ma nic bardziej podstawowego niż prosta regresja liniowa. „Prosty” w nazwie oznacza, że ​​używana jest tylko jedna zmienna predykcyjna (+ przecięcie, oczywiście):

y = b0 + x * b1

gdzie b0 jest przecięciem, a b1 jest nachyleniem. Na przykład możesz przewidzieć zużycie lemoniady w parku na podstawie temperatury:

cons = b0 + temp * b1

Temperatura jest dobrze zdefiniowaną zmienną ciągłą. Ale jeśli mówimy o czymś bardziej abstrakcyjnym, takim jak „pogoda”, trudniej jest zrozumieć, w jaki sposób mierzymy i kodujemy. Można powiedzieć, że pogoda przyjmuje wartości {okropne, złe, normalne, dobre, doskonałe} i przypisuje wartości liczbowe od -2 do +2 (co oznacza, że ​​„doskonała” pogoda jest dwa razy lepsza niż „dobra”). Ale co, jeśli pogodę podają słowa {błyszcząca, deszczowa, chłodna, …}? Nie możemy uporządkować tych zmiennych. Takie zmienne nazywamy kategorycznymi. Ponieważ nie ma naturalnego porządku między różnymi kategoriami, nie możemy zakodować ich jako jednej zmiennej liczbowej (a regresja liniowa oczekuje tylko liczb), ale możemy zastosować tak zwane kodowanie zastępcze: zamiast jednej zmiennej pogodowej używamy 3 zmiennych – [weather_shiny, weather_rainy, weather_cool], z których tylko jedna może przyjąć wartość 1, i inne powinny przyjmować wartość 0. W rzeczywistości będziemy musieli upuścić jedną zmienną z powodu kolinearności. Model przewidywania ruchu na podstawie pogody może więc wyglądać następująco:

traffic = b0 + weather_shiny * b1 + weather_rainy * b2 # weather_cool spadł tam, gdzie b1 lub b2 wynosi 1 lub oba są równe 0. Zauważ, że możesz również napotkać nieliniową zależność między zmiennymi predykcyjnymi i przewidywanymi (możesz to łatwo sprawdzić, wykreślając (x, y) pary). Najprostszym sposobem radzenia sobie z nim bez odmowy modelu liniowego jest użycie funkcji wielomianu – wystarczy dodać wielomiany swojej funkcji jako nowe funkcje. Na przykład. na przykład temperatura (w przypadku zmiennych zastępczych tak nie jest i ma sens, ponieważ 1 ^ n i 0 ^ n są nadal 1 i 0 dla dowolnego n):

traffic = b0 + temp * b1 + temp ^ 2 * b2 [+ temp ^ 3 * b3 + …]

Korzystanie z klastrowania w przetwarzaniu tekstu

Chcę stworzyć algorytm do klasyfikacji tekstu. Załóżmy, że mam duży zestaw tekstu i artykułów. Powiedzmy, że około 5000 zwykłych tekstów. Najpierw używam prostej funkcji do określenia częstotliwości wszystkich czterech i więcej słów znakowych. Następnie używam tego jako cechy każdej próbki treningowej. Teraz chcę, aby mój algorytm mógł grupować zestawy szkoleniowe zgodnie z ich funkcjami, czyli tutaj jest częstotliwość każdego słowa w artykule. (Zauważ, że w tym przykładzie każdy artykuł by to zrobił , mają swoją unikalną cechę, ponieważ każdy artykuł ma inną funkcję, na przykład artykuł ma 10 „wody i 23„ czystej ”, a inny ma 8„ polityki ”i 14„ dźwigni ”). Czy możesz zasugerować najlepszy możliwy algorytm grupowania dla tego przykładu?

Analizując słowa, pomyśl, że „komputer”, „komputery”, „komputeryzacja”… reprezentują jedną koncepcję, a więc tylko jedną cechę. Bardzo ważne dla poprawnej analizy. Mówiąc o algorytmie klastrowania, możesz użyć hierarchicznego klastrowania. Na każdym etapie algo łączysz 2 najbardziej podobne teksty zgodnie z ich cechami (na przykład za pomocą miary odmienności, na przykład odległości euklidesowej). Dzięki takiemu współczynnikowi podobieństwa możesz znaleźć najlepszą liczbę klastrów, a tym samym najlepszą klaster dla swoich tekstów i artykułów.

Jeśli chcesz podążać swoją dotychczasową ścieżką, sugeruję znormalizowanie częstotliwości każdego terminu według jego popularności w całym korpusie, dlatego promowane są rzadkie, a zatem przewidujące słowa. Następnie użyj losowych rzutów, aby zmniejszyć wymiary bardzo długich wektorów do rozmiarów, aby algorytm grupowania działał lepiej (nie chcesz grupować w przestrzeniach o dużych wymiarach). Istnieją jednak inne sposoby modelowania tematów.

Nie można powiedzieć, że jest najlepsza, ale ukryta analiza semantyczna może być jedną z opcji. Zasadniczo opiera się na współwystępowaniu, musisz najpierw go zważyć.

http://en.wikipedia.org/wiki/Latent_semantic_analysis

http://lsa.colorado.edu/papers/dp1.LSAintro.pdf

Problem polega na tym, że LSA nie ma solidnego wsparcia statystycznego.

Szybkie k-średnie jak algorytm dla 10 ^ 10 punktów?

Szukam k-średnie do  grupowanie na zbiorze punktów 10-wymiarowych. Haczyk: jest 10 ^ 10 punktów. Szukam tylko środka i wielkości największych klastrów (powiedzmy od 10 do 100 klastrów); Nie dbam o to, w jakim klastrze kończy się każdy punkt. Używanie k-średnich nie jest ważne; Właśnie szukam podobnego efektu, każdy przybliżony średni k lub związany z nim algorytm byłby świetny (minibatch-SGD oznacza…). Ponieważ GMM jest w pewnym sensie tym samym problemem co k-znaczy, robienie GMM na danych o tym samym rozmiarze jest również interesujące. W tej skali podpróbkowanie danych prawdopodobnie nie zmienia znacząco wyniku: szanse znalezienia tych samych 10 najlepszych klastrów przy użyciu 1/10000 próbki danych są bardzo dobre. Ale nawet wtedy jest to problem 10 ^ 6 punktów, który jest na / poza krawędzią możliwą do przełknięcia.

k-średnie opiera się na średnich. Modeluje klastry za pomocą środków, dlatego poprawa poprzez dodanie większej ilości danych jest marginalna. Błąd średniej oceny zmniejsza się o 1 / sqrt (n); więc dodając więcej danych opłaca się coraz mniej… Strategie dla tak dużych danych zawsze opierają się na próbkowaniu: jeśli chcesz podprogramowego środowiska wykonawczego, musisz próbkować! W rzeczywistości Mini-Batch-Kmeans itp. Robią dokładnie to: wielokrotnie próbkując z zestawu danych. Jednak próbkowanie (w szczególności próbkowanie bezstronne) również nie jest całkowicie bezpłatne… zazwyczaj musisz odczytać dane liniowo, aby pobrać próbkę, ponieważ nie masz losowego dostępu do indywidualnych rekordów. Wybrałbym algorytm MacQueena. To jest online; domyślnie wykonuje pojedyncze przełożenie danych (chociaż popularne jest iterowanie). Dystrybucja nie jest łatwa, ale myślę, że możesz sobie pozwolić na liniowy odczyt swoich danych, powiedz 10 razy z dysku SSD?

Jako komentarz boczny zauważ, że użycie k-średnich dla danych 10D może skończyć się nigdzie zgodnie z przekleństwem wymiarowości. Oczywiście różni się nieco w zależności od charakteru danych, ale kiedy próbowałem ustalić próg, w którym K-Means zaczyna zachowywać się dziwnie w odniesieniu do wymiaru, otrzymałem coś w rodzaju 7D. Po 7 wymiarach zaczęło brakować poprawnych klastrów (moje dane zostały wygenerowane ręcznie zgodnie z 4 dobrze oddzielonymi rozkładami Gaussa i użyłem funkcji kmeans MATLAB do mojego małego eksperymentu).

Jak utworzyć klastry danych pozycji?

Zadaję to pytanie, ponieważ poprzednie nie było zbyt pomocne i zapytałem o inne rozwiązanie tego samego problemu.

Problem Mam pozycje boczne, xcoord, pojazdów w czasie, które zostały zarejestrowane jako odległości od prawej krawędzi drogi. Można to zobaczyć dla jednego pojazdu poniżej wątek:

autko.PNG (do tłumaczenia)

Każdy punkt na wykresie reprezentuje pozycję przedniego środka pojazdu. Kiedy pojazd zmienia pas (numery pasów nie pokazano), następuje drastyczna zmiana pozycji, jak widać po „Początku zmiany pasa” na wykresie. Dane leżące u podstaw tego wykresu są następujące:

Vehicle.ID Frame.ID xcoord Lane

1 2 13 16,46700 2

2 2 14 16,44669 2

3 2 15 16,42600 2

4 2 16 16.40540 2

5 2 17 16,38486 2

6 2 18 16,36433 2

Chcę zidentyfikować początkowe i końcowe punkty danych zmiany linii, grupując dane, jak pokazano na wykresie. Punkty danych na wykresie zaznaczone na czerwono są bardziej do siebie podobne, ponieważ różnica między nimi jest mniejsza w porównaniu do punktów danych na środku

które widzą duże różnice w pozycji (xcoord). Moje pytania brzmią: czy można zastosować jakąkolwiek technikę grupowania, aby segmentować te dane w taki sposób że mogę zidentyfikować punkt początkowy i końcowy zmiany pasa? Jeśli tak, która technika byłaby najbardziej odpowiednia? Używam R. Wcześniej próbowałem grupowania hierarchicznego, ale nie wiem, jak go zastosować w tym kontekście.

Wątpię, aby którykolwiek z algorytmów klastrowania działał dobrze. Zamiast tego powinieneś przyjrzeć się: segmentacji (tak, to coś innego), w szczególności wykrywaniu zmiany segmentacji szeregów czasowych (jak powiedziałeś, najpierw jest raczej stały rozkład, potem zmiana, a potem raczej stały rozkład, regresja segmentowa może również działać: spróbuj znaleźć najlepsze dopasowanie, które jest stałe, liniowo zmieniające się i stałe ponownie. Zasadniczo w tym ograniczonym modelu należy zoptymalizować cztery parametry: średnia przed i po + początku i końcu przejścia.

[36][R]

R to język i środowisko dla obliczeń statystycznych i grafiki. Jest to projekt GNU podobny do języka S i środowiska opracowanego w Bell Laboratories (dawniej AT&T, obecnie Lucent Technologies) przez Johna Chambersa i współpracowników. R można uznać za inną implementację S. Istnieje kilka ważnych różnic, ale wiele kodu napisanego dla przebiegów S niezmienionych pod R. R zapewnia szeroki zakres statystyczny (modelowanie liniowe i nieliniowe, klasyczne testy statystyczne, analiza szeregów czasowych, klasyfikacja, grupowanie,…) i techniki graficzne, i jest wysoce rozszerzalny. Język S jest często nośnikiem wyboru w badaniach metodologii statystycznej, a R zapewnia ścieżkę Open Source do uczestnictwa w tym działaniu. Jedną z mocnych stron R jest łatwość tworzenia dobrze zaprojektowanych wykresów o jakości publikacji, w tym symboli matematycznych i wzorów w razie potrzeby. Wiele uwagi poświęcono domyślnym ustawieniom niewielkich opcji graficznych, ale użytkownik zachowuje pełną kontrolę. R został stworzony przez Rossa Ihakę i Roberta Gentlemana, a teraz jest rozwijany przez zespół R Development Core Team. Środowisko R można łatwo rozszerzyć dzięki systemowi pakowania w CRAN. R jest dostępny jako Wolne Oprogramowanie na zasadach GNU Fundacji Wolnego Oprogramowania

Ogólna licencja publiczna w formie kodu źródłowego. Kompiluje i działa na wielu różnych platformach UNIX i podobnych systemach (w tym FreeBSD i Linux), Windows i Mac OS.

PYTANIA:

Programowe uruchamianie skryptu R.

Mam skrypt R, który generuje raport na podstawie bieżącej zawartości bazy danych. Ta baza danych stale się zmienia, a rekordy są dodawane / usuwane wiele razy każdego dnia. Jak mogę poprosić komputer, aby uruchamiał to codziennie o 4 rano, aby rano czekał na mnie aktualny raport? A może chcę, aby uruchomił się ponownie po dodaniu pewnej liczby nowych rekordów do bazy danych. Jak mogę to zautomatyzować? Powinienem wspomnieć, że korzystam z systemu Windows, ale mógłbym łatwo umieścić ten skrypt na moim komputerze z systemem Linux, jeśli uprości to ten proces.

ODPOWIEDZI:

W systemie Windows użyj harmonogramu zadań, aby ustawić uruchamianie zadania, na przykład codziennie o 4:00. Daje to wiele innych opcji dotyczących częstotliwości itp.

Jak mogę poprosić komputer, aby uruchamiał to codziennie o 4 rano, aby rano czekał na mnie aktualny raport? Możesz skonfigurować cronjob w systemie Linux. Są one uruchamiane o ustalonej godzinie, jeśli komputer jest włączony. Aby to zrobić, otwórz terminal i wpisz:

crontab -e

I dodaj:

00 4 * * * r źródło (/ home / FilePath /…/ myRscript.R)

Jakie są ograniczenia pamięci R.

Jedną z moich krytyk pedagogiki uczenia statystycznego (SL) jest brak uwzględnienia wydajności obliczeń w ocenie różnych technik modelowania. Z naciskiem na ładowanie i weryfikację krzyżową w celu dostrojenia / przetestowania modeli, SL wymaga dużej mocy obliczeniowej. Dodaj do tego osadzone ponowne próbkowanie

w technikach takich jak tworzenie worków i boosting, a masz widmo piekła obliczeniowego do nadzorowanego uczenia się dużych zbiorów danych. W rzeczywistości ograniczenia pamięci R nakładają dość surowe ograniczenia na rozmiar modeli, które można dopasować za pomocą najlepszych metod, takich jak losowe lasy. Chociaż SL dobrze wykonuje kalibrację wydajności modelu w stosunku do małych zestawów danych, dobrze byłoby zrozumieć wydajność w porównaniu z kosztem obliczeniowym większych danych. Jakie są ograniczenia pamięci R. i czy nakładają poważne ograniczenia na rozmiar modeli, które można dopasować przy użyciu najbardziej skutecznych metod, takich jak losowe lasy?

R wykonuje wszystkie obliczenia w pamięci systemu, tj. w pamięci RAM. Dlatego pojemność pamięci RAM jest bardzo ważnym ograniczeniem dla operacji intensywnie obliczeniowych w R. Po przezwyciężeniu tego ograniczenia dane są obecnie przechowywane w systemach HDFS, w których dane nie są ładowane do pamięci, a program jest zamiast tego uruchamiany, program przechodzi do danych i wykonuje operacje, pokonując w ten sposób ograniczenia pamięci.

RHadoop (https://github.com/RevolutionAnalytics/RHadoop/wiki) to złącze, którego szukasz. Jeśli chodzi o wpływ na algorytmy wymagające intensywnych obliczeń, losowe lasy / drzewa decyzyjne / zespoły na znacznej ilości danych (z mojego doświadczenia co najmniej 50 000 obserwacji) zajmują dużo pamięci i są znacznie powolne. Aby przyspieszyć ten proces, paralelizacja jest właściwą drogą, a paralelizacja jest z natury dostępna w Hadoop! Właśnie tam Hadoop jest naprawdę wydajny. Jeśli więc wybierasz metody złożone, które wymagają dużej mocy obliczeniowej i są wolne, warto wypróbować system HDFS, który zapewnia znaczną poprawę wydajności.

R wykonuje wszystkie obliczenia w pamięci, więc nie można wykonać operacji na zestawie danych większym niż dostępna ilość pamięci RAM. Istnieją jednak biblioteki umożliwiające przetwarzanie bigdata przy użyciu R i jedną z popularnych bibliotek do przetwarzania bigdata, takich jak Hadoop.

Błąd R przy użyciu pakietu tm (eksploracja tekstu)

Próbuję użyć pakietu tm do konwersji wektora ciągów tekstowych na element corpus. Mój kod wygląda mniej więcej tak Korpus (d1 $ Tak), gdzie d1 $ Tak jest czynnikiem ze 124 poziomami, z których każdy zawiera ciąg tekstowy. Na przykład d1 $ Tak [246] = „Abyśmy mogli wydostać łódź!” Otrzymuję następujący błąd: „Błąd: dziedziczy (x,„ Źródło ”) nie jest PRAWDA” Nie jestem pewien, jak temu zaradzić.

Musisz powiedzieć Corpusowi, jakiego źródła używasz. Wypróbuj:

Korpus (VectorSource (d1 $ Tak))

Czy musisz znormalizować dane podczas budowania drzew decyzyjnych przy użyciu R?

Nasz zestaw danych w tym tygodniu ma 14 atrybutów, a każda kolumna ma bardzo różne wartości. Jedna kolumna ma wartości poniżej 1, a druga kolumna ma wartości od trzech do czterech pełnych cyfr. Nauczyliśmy się normalizacji w zeszłym tygodniu i wygląda na to, że powinieneś normalizować dane, gdy mają one bardzo różne wartości. Czy w przypadku drzew decyzyjnych sprawa jest taka sama? Nie jestem tego pewien, ale czy normalizacja wpłynie na wynikowe drzewo decyzyjne z tego samego zestawu danych? Nie wydaje się tak, ale …

Żadna monotoniczna transformacja nie ma wpływu na najczęściej spotykane typy drzew decyzyjnych. Tak długo, jak zachowujesz porządek, drzewa decyzyjne są takie same (oczywiście przez to samo drzewo rozumiem tę samą strukturę decyzyjną, a nie te same wartości dla każdego testu w każdym węźle drzewa). Powodem tego jest to, jak działają zwykłe funkcje zanieczyszczenia. Aby znaleźć najlepszy podział, przeszukuje każdy wymiar (atrybut) punkt podziału, który jest w zasadzie klauzulą ​​if, która grupuje wartości docelowe odpowiadające instancjom, których wartość testowa jest mniejsza niż wartość podziału, a po prawej wartości większe niż równe. Dzieje się tak w przypadku atrybutów numerycznych (co moim zdaniem jest twoim przypadkiem, ponieważ nie wiem, jak znormalizować atrybut nominalny). Teraz możesz zauważyć, że kryteria są mniejsze lub większe niż. Co oznacza, że ​​rzeczywista informacja z atrybutów w celu znalezienia podziału (i całego drzewa) to tylko kolejność wartości. Co oznacza, że ​​dopóki przekształcisz swoje atrybuty w taki sposób, że pierwotne uporządkowanie jest zarezerwowane, otrzymasz to samo drzewo. Nie wszystkie modele są niewrażliwe na tego rodzaju transformację. Na przykład modele regresji liniowej dają takie same wyniki, jeśli pomnożymy atrybut przez coś innego niż zero. Otrzymasz różne współczynniki regresji, ale przewidywana wartość będzie taka sama. Nie dzieje się tak, gdy weźmiesz dziennik tej transformacji. Na przykład w przypadku regresji liniowej normalizacja jest bezużyteczna, ponieważ zapewni ten sam wynik. Jednak nie jest tak w przypadku karanej regresji liniowej, takiej jak regresja kalenicy. W karanych regresjach liniowych do współczynników stosowane jest ograniczenie. Chodzi o to, że ograniczenie jest stosowane do sumy funkcji współczynników. Teraz, jeśli napompujesz atrybut, współczynnik zostanie spuszczony, co oznacza, że ​​w końcu kara za ten współczynnik zostanie sztucznie zmodyfikowana. W takiej sytuacji normalizujesz atrybuty, aby każdy współczynnik był ograniczeniem „sprawiedliwie”. Mam nadzieję, że to pomoże

Wizualizuj poziomy wykres pola w R

Mam taki zestaw danych. Dane zostały zebrane za pomocą kwestionariusza i zamierzam przeprowadzić analizę danych eksploracyjnych.

windows <- c(“yes”, “no”,”yes”,”yes”,”no”)

sql <- c(“no”,”yes”,”no”,”no”,”no”)

excel <- c(“yes”,”yes”,”yes”,”no”,”yes”)

salary <- c(100,200,300,400,500 )

test<- as.data.frame (cbind(windows,sql,excel,salary),stringsAsFactors=TRUE)

test[,”salary”] <- as.numeric(as.character(test[,”salary”] ))

Mam zmienną wynikową (wynagrodzenie) w moim zbiorze danych i kilka zmiennych wejściowych (narzędzia). Zacznijmy od stworzenia fałszywego zestawu danych.

software = sample(c(“Windows”,”Linux”,”Mac”), n=100, replace=T)

salary = runif(n=100,min=1,max=100)

test = data.frame(software, salary)

To powinno stworzyć test ramki danych, który będzie wyglądał mniej więcej tak:

Pomiń wynagrodzenie za oprogramowanie blokowe

1 Windows 96,697217

2 Linux 29,770905

3 Windows 94.249612

4 Mac 71.188701

5 Linux 94,028326

6 Linux 7.482632

7 Mac 98,841689

8 komputerów Mac 81,152623

9 Windows 54,073761

10 Windows 1.707829

EDYCJA na podstawie komentarza Uwaga: jeśli dane nie istnieją już w powyższym formacie, można je zmienić na ten format. Weźmy ramkę danych podaną w pierwotnym pytaniu i załóżmy, że ramka danych nazywa się raw_test.

windows sql excel salary

1 yes no yes 100

2 no yes yes 200

3 yes no yes 300

4 yes no no 400

5 no no yes 500

Teraz, używając funkcji / metody topienia z pakietu przekształcania w R, najpierw utwórz test ramki danych (który zostanie wykorzystany do ostatecznego wydruku) w następujący sposób:

# use melt to convert from wide to long format

test = melt(raw_test,id.vars=c(“salary”))

# subset to only select where value is “yes”

test = subset(test, value == ‘yes’)

# replace column name from “variable” to “software”

names(test)[2] = “software”

Teraz otrzymasz test ramki danych, który wygląda następująco:

wartość oprogramowania wynagrodzeń

1 100 windows yes

3 300 windows yes

4 400 windows yes

7 200 sql yes

11 100 excel yes

12 200 excel yes

13 300 excel yes

15 500 excel yes

Po utworzeniu zestawu danych. Teraz wygenerujemy fabułę. Najpierw utwórz wykres słupkowy po lewej w oparciu o liczbę programów reprezentujących stopień wykorzystania.

p1 <- ggplot(test, aes(factor(software))) + geom_bar() + coord_flip()

Next, create the boxplot on the right.

p2 <- ggplot(test, aes(factor(software), salary)) + geom_boxplot() + coord_flip()

Na koniec umieść oba te wykresy obok siebie

require(‘gridExtra’)

grid.arrange(p1,p2,nrow=1)

To powinno stworzyć wykres taki jak:

Będziesz musiał utworzyć kolumnę zawierającą informacje o oprogramowaniu – na przykład nazwij to oprogramowanie, a kolumna wynagrodzenia ma odpowiednią pensję, więc coś w rodzaju

Wynagrodzenie za oprogramowanie

Software Salary

Microsoft 100

Microsoft 300

Microsoft 400

SQL 200

i tak dalej… możesz wydrukować poniższy kod

p <- ggplot(test, aes(factor(software), salary))

p + geom_boxplot() + coord_flip()

Testowanie oprogramowania dla Data Science w R.

Często używam Nosa, Toxa lub Unittesta podczas testowania mojego kodu python,

 szczególnie gdy musi być zintegrowany z innymi modułami lub innymi częściami kodu. Jednak teraz, kiedy odkryłem, że używam R więcej niż pytona do modelowania i programowania ML. Uświadomiłem sobie, że tak naprawdę nie testuję mojego kodu R (a co ważniejsze, naprawdę nie wiem, jak to zrobić dobrze). Moje pytanie brzmi: jakie są dobre pakiety, które pozwalają testować kod R w podobny sposób, jak Nose, Tox lub Unittest w Pythonie. Docenione zostaną również dodatkowe odniesienia, takie jak samouczki. Punkty bonusowe za pakiety w R podobne do

  1. Hipoteza

lub

  1. Funkcja Forge

Pakiety do testów jednostkowych i testów asertywnych, które są aktywnie utrzymywane: Pakiety do testów jednostkowych

  1. test: więcej informacji na temat korzystania można znaleźć tutaj lub na github
  2. Uruchom: strona Cran

Pakiety dla asercji:

  1. twierdzą, że: informacje na github
  2. Asertywny: Asertywny ma wiele dostępnych podpakietów na wypadek, gdyby nie wszystkie były potrzebne. sprawdź Cran
  3. assertr: informacje na temat github
  4. gwarant: informacje na temat github
  5. tester: informacje na temat github

Jest kwestią preferencji, czego chcesz użyć do asercji. Przeczytaj tę stronę bioprzewodnika, aby uzyskać więcej informacji na temat różnicy między RUnit i tym testem.

[35][TEXT MINING]

PYTANIA

Jak stworzyć listę powiązanych słów na podstawie początkowych słów kluczowych?

Ostatnio widziałem fajną funkcję, która była kiedyś dostępna w Arkuszach Google: zaczynasz od napisania kilku powiązanych słów kluczowych w kolejnych komórkach, powiedz: „niebieski”, „zielony”, „żółty”, i automatycznie generuje podobne słowa kluczowe (w tym przypadku , inne kolory). Chciałbym to odtworzyć we własnym programie. Zastanawiam się nad użyciem Freebase i działałoby to intuicyjnie:

  1. Pobierz listę podanych słów w Freebase;
  2. Znajdź ich „wspólny mianownik (-y)” i na tej podstawie zbuduj metrykę odległości;
  3. Ranguj inne pojęcia na podstawie ich „odległości” od oryginalnych słów kluczowych;
  4. Wyświetl następne najbliższe pojęcia.

Ponieważ nie znam tej dziedziny, moje pytania są następujące:

Czy jest na to lepszy sposób?

Jakie narzędzia są dostępne dla każdego kroku?

ODPOWIEDZI

Algorytm word2vec może być dobrym sposobem na uzyskanie większej liczby elementów dla listy podobnych słów. Jest to nienadzorowany algorytm „głębokiego uczenia się”, który został wcześniej zademonstrowany przy użyciu danych szkoleniowych opartych na Wikipedii (skrypty pomocnicze są dostępne na stronie kodowej Google). Obecnie istnieją implementacje C i Python. Ten samouczek Radima Řehůřka, autora biblioteki modelowania tematów Gensim, jest doskonałym miejscem do rozpoczęcia. Demonstracja „jednego tematu” w samouczku jest dobrym przykładem przywracania podobnych słów do pojedynczego terminu (spróbuj wyszukać „czerwony” lub „żółty”). Powinno być możliwe rozszerzenie tej techniki, aby znaleźć słowa, które mają największe ogólne podobieństwo do zestawu słów wejściowych.

Czy rozważałeś podejście oparte na częstotliwości, wykorzystujące proste współwystępowanie słów w ciałach? Przynajmniej tego widziałem większość ludzi do tego. Myślę, że może to być krótko omówione w książce Manninga i Schütze, i wydaje mi się, że pamiętam coś takiego jak zadanie domowe z powrotem w szkole… Na tym etapie: uszereguj inne koncepcje na podstawie ich „odległości” od oryginalnych słów kluczowych; Istnieje kilka wskaźników podobieństwa semantycznego, które można sprawdzić. Oto link do niektórych slajdów, które przygotowałem dla projektu klasowego przy użyciu kilku takich wskaźników podobieństwa w WordNet

Uczenie się funkcji bez nadzoru dla NER

Wdrożyłem system NER z wykorzystaniem algorytmu CRF z moimi ręcznie wykonanymi funkcjami, które dawały całkiem dobre wyniki. Chodzi o to, że użyłem wielu różnych funkcji, w tym tagów POS i lematów. Teraz chcę zrobić ten sam NER dla innego języka. Problem polega na tym, że nie mogę używać tagów POS i lematów. Zacząłem czytać artykuły o głębokim uczeniu się i uczeniu się funkcji bez nadzoru. Moje pytanie brzmi, czy można zastosować metody uczenia funkcji bez nadzoru za pomocą algorytmu CRF. Czy ktoś próbował tego i uzyskał dobry wynik? Czy jest jakiś artykuł lub samouczek na ten temat. Nadal nie rozumiem w pełni tego sposobu tworzenia funkcji, więc nie chcę spędzać zbyt wiele czasu na czymś, co nie zadziała. Tak więc każda informacja byłaby naprawdę pomocna. Stworzenie całego systemu NER opartego na głębokim uczeniu się to na razie trochę za dużo. Z góry dziękuję.

Tak, można całkowicie połączyć uczenie się bez nadzoru z modelem CRF. W szczególności polecam zbadanie możliwości wykorzystania funkcji word2vec jako danych wejściowych do CRF. Word2vec ćwiczy rozróżnianie między słowami, które są odpowiednie dla danego kontekstu, a słowami, które są losowo wybrane. Wybrane wagi modelu można następnie interpretować jako gęstą reprezentację wektorową danego słowa. Te gęste wektory mają atrakcyjną właściwość, że słowa, które są semantycznie lub składniowo podobne, mają podobne reprezentacje wektorowe. Podstawowa arytmetyka wektorów ujawnia nawet kilka interesujących wyuczonych związków między słowami. Na przykład wektor („Paryż”) – wektor („Francja”) + wektor („Włochy”) daje wektor bardzo podobny do wektora („Rzym”). Na wysokim poziomie można uznać reprezentacje word2vec za podobne do reprezentacji LDA lub LSA, w tym sensie, że można przekształcić rzadki wektor wejściowy w gęsty wektor wyjściowy, który zawiera informacje o podobieństwie słów. W tym przypadku LDA i LSA są również ważnymi opcjami uczenia się funkcji bez nadzoru – zarówno próbują reprezentować słowa jako kombinacje „tematów”, jak i gęstą reprezentację słów. W przypadku tekstu w języku angielskim Google dystrybuuje modele word2vec wstępnie wyszkolone na ogromnym 100-miliardowym zestawie danych Google News, ale w przypadku innych języków musisz wyszkolić swój własny model.

Grupowanie ciągów wewnątrz ciągów?

Nie jestem pewien, czy poprawnie sformułowałem pytanie. Zasadniczo chcę: załóżmy, że mam listę 1000 ciągów, które wyglądają tak:

cvzxcvzxstringcvzcxvz

otortorotrstringgrptprt

vmvmvmeopstring2vmrprp

vccermpqpstring2rowerm

proorororstring3potrprt

mprto2435string3famerpaer

itp.

Chciałbym wyodrębnić te ponownie powtarzające się ciągi, które występują na liście. Jakiego rozwiązania powinienem użyć? Czy ktoś wie o algorytmie, który mógłby to zrobić?

Interesujące pytanie! Nie spotkałem się z tym wcześniej, więc oto rozwiązanie, które właśnie wymyśliłem, inspirowane podejściem przyjętym w dokumencie word2vec:

  1. Zdefiniuj pary podobieństwo na podstawie najdłuższego wspólnego podłańcucha (LCS) lub LCS znormalizowanego przez produkty o długości łańcucha. Buforuj to w macierzy dla każdej rozważanej pary ciągów, ponieważ jest to kosztowne do obliczenia. Weź również pod uwagę przybliżenia.
  2. Znajdź osadzenie euklidesowe (być może hipersferalne?), Które minimalizuje błąd (odległość euklidesowa w przypadku korzystania z kuli i iloczyn kropkowy w przypadku korzystania z kuli). Załóżmy losową inicjalizację i zastosuj metodę optymalizacji opartą na gradiencie, biorąc jakobian błędu.
  3. Teraz masz osadzanie przestrzeni Hilberta, więc klastruj, używając wybranego algorytmu! Odpowiedź pytanie, jak grupować wiele podciągów: większość złożoności leży w pierwszym etapie; obliczenia LCS, więc zależy to od tego, jak skutecznie to zrobisz. Miałem szczęście z algorytmami genetycznymi. W każdym razie to, co zrobiłbyś w tym przypadku, to zdefiniowanie wektora podobieństwa zamiast skalara, którego elementami są najdłuższe k-pary LCS; zobacz tę dyskusję dla algorytmów. Następnie zdefiniowałbym błąd przez sumę błędów odpowiadających każdemu podciągowi. Coś, o czym nie wspomniałem, to sposób wyboru wymiaru osadzania. Artykuł word2vec może dostarczyć pewnej heurystyki; zobacz tę dyskusję. Pamiętam, że używali dość dużych spacji, rzędu 1000 wymiarów, ale optymalizowali coś bardziej skomplikowanego, więc sugeruję zacząć od R ^ 2 i posuwać się w górę. Oczywiście, będziesz chciał zastosować wyższą wymiarowość dla wielu przypadków LCS.

Etyczne i ekonomiczne skalowanie skalowania danych

Niewiele rzeczy w życiu sprawia mi przyjemność, jak skrobanie uporządkowanych i nieustrukturyzowanych danych z Internetu i wykorzystywanie ich w moich modelach. Na przykład zestaw narzędzi Data Science Toolkit (lub RDSTK dla programistów R) pozwala mi pobrać wiele dobrych danych opartych na lokalizacji przy użyciu adresów IP lub adresów, a wtyczka tm.webmining.plug dla pakietu tm sprawia, że ​​skrobanie danych finansowych i wiadomości jest proste. Kiedy wychodzę poza takie (częściowo) ustrukturyzowane dane, zwykle używam XPath. Jednak ciągle dławią mnie ograniczenia liczby zapytań, które możesz zadawać. Myślę, że Google ogranicza mnie do około 50 000 żądań na 24 godziny, co jest problemem dla Big Data.

Z technicznego punktu widzenia obejście tych limitów jest łatwe – wystarczy zmienić adresy IP i usunąć inne identyfikatory ze swojego środowiska. Jednak dotyczy to zarówno kwestii etycznych, jak i finansowych (tak myślę?). Czy istnieje rozwiązanie, które przeoczam?

W przypadku wielu interfejsów API (większość, które widziałem) ratelimiting jest funkcją twojego klucza API lub poświadczeń OAuth. (Google, Twitter, NOAA, Yahoo, Facebook itp.) Dobrą wiadomością jest to, że nie musisz sfałszować adresu IP, wystarczy wymienić dane uwierzytelniające, gdy osiągną limit prędkości. Trochę bezwstydnej autopromocji tutaj, ale napisałem specjalnie pakiet Pythona do radzenie sobie z tym problemem.

https://github.com/rawkintrevo/angemilner

https://pypi.python.org/pypi/angemilner/0.2.0

Wymaga demona mongodb i zasadniczo tworzysz stronę dla każdego ze swoich kluczy. Masz więc 4 adresy e-mail, każdy z osobnym kluczem. Po załadowaniu klucza określ maksymalną liczbę połączeń dziennie i minimalny czas między kolejnymi uruchomieniami.

Załaduj klucze:

z angemilner importuj APIKeyLibrarian

l = APIKeyLibrarian ()

l.new_api_key („twój_znaczony_klucz1”, „noaa”, 1000, .2)

l.new_api_key („twój_znaczony_klucz2”, „noaa”, 1000, .2)

Następnie po uruchomieniu skrobaczki, na przykład interfejsu API NOAA:

url = „http://www.ncdc.noaa.gov/cdo-web/api/v2/stations”

ładunek = {„limit”: 1000,

„datasetid”: „GHCND”,

„data rozpoczęcia”: „1999-01-01”}

r = requests.get (adres URL, parametry = ładunek, nagłówki = {‘token’: ‘twój_klucz_znacznika ”})

staje się:

url = „http://www.ncdc.noaa.gov/cdo-web/api/v2/stations”

ładunek = {„limit”: 1000,

„datasetid”: „GHCND”,

„data rozpoczęcia”: „1999-01-01”}

r = requests.get (adres URL, parametry = ładunek, nagłówki = {‘token’: l.check_out_api_key (‘noaa’) [‘key’]})

więc jeśli masz 5 kluczy, l.check_out_api_key zwraca klucz, który ma najmniejsze użycie i czeka, aż upłynie wystarczająco dużo czasu na jego ponowne użycie. Na koniec, aby zobaczyć, jak często Twoje klucze były używane / pozostały dostępny dostęp:

pprint (l.summary ())

Nie napisałem tego dla R, ponieważ większość skrobania odbywa się w Pythonie (większość MOJE skrobanie). Można go łatwo przenieść. W ten sposób można technicznie obejść ograniczenia stawek. Etycznie…

 Wyodrębnij najbardziej pouczające części tekstu z dokumentów

Czy są jakieś artykuły lub dyskusje na temat wyodrębnienia części tekstu, która zawiera najwięcej informacji o bieżącym dokumencie. Na przykład mam duży zbiór dokumentów z tej samej domeny. Istnieją fragmenty tekstu zawierające kluczowe informacje, o których mówi pojedynczy dokument. Chcę wyodrębnić niektóre z tych części i wykorzystać je jako podsumowanie tekstu. Czy jest jakaś przydatna dokumentacja na temat tego, jak osiągnąć coś takiego? Byłoby naprawdę pomocne, gdyby ktoś mógł skierować mnie we właściwym kierunku, czego powinienem szukać lub czytać, aby uzyskać wgląd w pracę, która mogła być już wykonana w tym zakresie dziedzina przetwarzania języka naturalnego.

To, co opisujesz, często osiąga się za pomocą prostej kombinacji TF-IDF i wyciągu podsumowującego. W skrócie, TF-IDF informuje o względnej ważności każdego słowa w każdym dokumencie, w porównaniu do reszty korpusu. W tym momencie masz ocenę każdego słowa w każdym dokumencie, co odpowiada jego „znaczeniu”. Następnie możesz użyć tych pojedynczych ocen słów do obliczenia łącznej oceny każdego zdania, sumując wyniki każdego słowa w każdym zdaniu. Na koniec, po prostu weź najwyższe N ​​zdań z każdego dokumentu jako podsumowanie. Na początku tego roku stworzyłem iPython Notebook, którego kulminacją jest implementacja tego w Pythonie przy użyciu NLTK i Scikit-learn

Jaka jest alternatywna nazwa „danych nieustrukturyzowanych”?

Obecnie piszę swoją pracę magisterską i przez pewien czas – z powodu braku odpowiedniej alternatywy – utknąłem w „nieuporządkowanych danych” za odniesienie do naturalnego, swobodnie płynącego tekstu, np. artykuły z Wikipedii. Ta nomenklatura niepokoiła mnie od samego początku, ponieważ otwiera debatę, w którą nie chcę wchodzić. Mianowicie, że „nieustrukturyzowany” implikuje, że język naturalny nie ma struktury, czego nie ma – najbardziej oczywistą jest składnia. Daje również negatywne wrażenie, ponieważ jest przeciwieństwem „ustrukturyzowanego”, który jest uznawany za pozytywny. Nie jest to przedmiotem mojej pracy, choć sama „nieuporządkowana” część odgrywa ważną rolę. Całkowicie zgadzam się z autorem tego artykułu, ale on nie proponuje żadnej innej alternatywy dla „bogatych danych”, co nie obejmuje mojego punktu. Chodzi mi o to, aby w tekście brakowało tradycyjnej bazy danych (np. Tabelarycznej) danych, przy czym każdy kawałek ma wyraźny typ danych i semantykę, które są łatwe do interpretacji za pomocą programów komputerowych. Oczywiście chciałbym zawęzić tę definicję do terminu, ale jak dotąd nie udało mi się wymyślić lub odkryć akceptowalnej taksonomii w literaturze.

Nie jest dobrym pomysłem przeciwdziałanie „danym niestrukturalnym” na, powiedzmy, danych tabelarycznych (jak w „danych nie tabelarycznych”), ponieważ trzeba będzie również wyeliminować inne alternatywy (np. „Dane nie-tabelaryczne, nie-graficzme i… dane ”). „Zwykły tekst” (- mój wybór), „nieprzetworzony tekst” lub „surowe dane” brzmią dobrze.

[34][NLP]

PYTANIA

Utajony przydział Dirichleta a hierarchiczny proces Dirichleta

Utajone przydzielanie Dirichleta (LDA) i hierarchiczny proces Dirichleta (HDP) to procesy modelowania tematów. Główną różnicą jest to, że LDA wymaga podania liczby tematów, a HDP nie. Dlaczego to jest tak? A jakie są różnice, zalety i wady obu metod modelowania tematów?

ODPOWIEDZI:

HDP jest rozszerzeniem LDA, zaprojektowanym w celu rozwiązania przypadku, gdy liczba składników mieszaniny (liczba „tematów” w kategoriach modelowania dokumentów) nie jest z góry znana. To jest powód, dla którego istnieje różnica. Używając LDA do modelowania dokumentów, każdy „temat” traktuje się jako rozkład słów w znanym słownictwie. Dla każdego dokumentu sporządzana jest mieszanina tematów z dystrybucji Dirichleta, a następnie każde słowo w dokumencie jest niezależnym rysunkiem z tej mieszaniny (to znaczy, wybierając temat, a następnie wykorzystując go do wygenerowania słowa). W przypadku HDP (stosowanego do modelowania dokumentów) stosuje się również proces Dirichleta, aby uchwycić niepewność co do liczby tematów. Tak więc wybierany jest wspólny rozkład podstawowy, który reprezentuje nieskończenie nieskończony zestaw możliwych tematów dla korpusu, a następnie skończony rozkład tematów dla każdego dokumentu jest próbkowany z tego rozkładu podstawowego. Jeśli chodzi o zalety i wady, HDP ma tę zaletę, że maksymalna liczba tematów może być nieograniczona i wyciągnięta z danych, a nie określona z góry. Wydaje mi się, że jego wdrożenie jest bardziej skomplikowane i niepotrzebne w przypadku, gdy dopuszczalna jest ograniczona liczba tematów.

Anegdotycznie nigdy nie byłem pod wrażeniem wyników z hierarchicznej LDA. Po prostu wydaje się, że nie ma optymalnego poziomu szczegółowości przy wyborze liczby tematów. Osiągnąłem znacznie lepsze wyniki, uruchamiając kilka iteracji zwykłej LDA, ręcznie sprawdzając wygenerowane tematy, decydując, czy zwiększyć, czy zmniejszając liczbę tematów i kontynuując iterację, aż uzyskam ziarnistość, której szukam. Pamiętaj: hierarchiczna LDA nie może odczytać twojego umysłu… nie wie, do czego właściwie zamierzasz użyć modelowania tematów. Podobnie jak w przypadku klastrowania k-średnich, powinieneś wybrać k, który najlepiej pasuje do twojego przypadku użycia.

Co to jest model generatywny i dyskryminacyjny? W jaki sposób są używane do przetwarzania języka naturalnego?

To pytanie dotyczy algorytmu generatywnego vs. dyskryminacyjnego, ale czy ktoś może podać przykład różnicy między tymi formami w przypadku przetwarzania języka naturalnego? Jak wykorzystywane są modele generatywne i dyskryminacyjne w NLP?

Powiedzmy, że przewidujesz temat dokumentu, biorąc pod uwagę jego słowa. Model generatywny opisuje prawdopodobieństwo każdego tematu i prawdopodobne słowa. W ten sposób mówi się, że dokumenty są „generowane” przez świat – temat pojawia się zgodnie z pewną dystrybucją, słowa powstają z powodu tematu, masz dokument. Klasyfikacja dokumentów słów W na temat T polega na maksymalizacji prawdopodobieństwa połączenia: P (T, W) = P (W | T) P (T)

Model dyskryminacyjny działa jedynie poprzez opisanie prawdopodobieństwa, że ​​dany temat uzyska dane słowa. Nie mówi nic o tym, jak prawdopodobne są same słowa lub tematy. Zadaniem jest bezpośrednie modelowanie P (T | W) i znalezienie T, który to maksymalizuje. Te podejścia nie dotyczą bezpośrednio P (T) ani P (W).

Rozdzielczość korelacji dla tekstów niemieckich

Czy ktoś zna bibliotekę do rozwiązywania korekt dotyczących tekstów niemieckich?

O ile mi wiadomo, OpenNLP i Standord NLP nie są w stanie wykonać rozwiązywania korelacji dla tekstów niemieckich. Jedyne znane mi narzędzie to CorZu, które jest biblioteką Pythona.

Bart, narzędzie typu open source, które było używane w kilku językach, w tym w języku niemieckim. Dostępne na stronie internetowej Sucre to narzędzie opracowane na Uniwersytecie w Stuttgarcie. Nie wiem czy jest dostępny z łatwością.

Dokładność Stanford NER

Przeprowadzam rozpoznawanie nazwanego podmiotu za pomocą Stanford NER. Z powodzeniem przeszkoliłem i przetestowałem mój model. Teraz chcę wiedzieć:

1) Jaki jest ogólny sposób pomiaru dokładności modelu NER? Na przykład, jakie techniki lub podejścia są stosowane?

2) Czy w STANFORD NER jest jakaś wbudowana metoda oceny dokładności?

Aby ocenić jakość wyników systemu NER, zdefiniowano kilka miar. Chociaż dokładność na poziomie tokena jest jedną z możliwości, ma dwa problemy: ogromna większość tokenów w tekście świata rzeczywistego nie jest częścią nazw jednostek, jak to zwykle definiuje się, więc dokładność linii bazowej (zawsze przewiduj „nie byt”) to ekstrawagancko wysoka, zwykle> 90%; i błędnie przewidując pełny zakres nazwy bytu

nie jest odpowiednio karany (znalezienie tylko imienia osoby, gdy następuje jej nazwisko, jest oceniane jako dokładność ½). Na konferencjach akademickich, takich jak CoNLL, określono wariant wyniku F1 następująco:

* Precyzja to liczba przewidywanych zakresów nazw jednostek, które dokładnie pokrywają się z zakresami w złotych danych oceny standardowej. To znaczy. gdy przewiduje się [Person Hans] [Person Blick], ale wymagana jest [Person Hans Blick], precyzja dla przewidywanej nazwy wynosi zero. Precyzja jest następnie uśredniana dla wszystkich przewidywanych nazw jednostek.

* Recall to podobnie liczba nazw w złotym standardzie, które pojawiają się dokładnie w tym samym miejscu w prognozach.

* Wynik F1 jest średnią harmoniczną tych dwóch.

Z powyższej definicji wynika, że ​​każda prognoza, która nie trafi w pojedynczy żeton, zawiera fałszywy żeton lub ma niewłaściwą klasę, „nie zdobywa punktów”, tj. Nie przyczynia się ani do precyzji, ani do przywołania.

[33][Zbiory danych]

Zestawy danych to ustrukturyzowane pliki danych w dowolnym formacie, gromadzone wraz z dokumentacją wyjaśniającą ich produkcję lub wykorzystanie

PYTANIA:

Publicznie dostępne zestawy danych

Jednym z najczęstszych problemów w nauce o danych jest zbieranie danych z różnych źródeł w jakoś oczyszczonym (częściowo ustrukturyzowanym) formacie i łączenie wskaźników z różnych źródeł w celu przeprowadzenia analizy wyższego poziomu. Patrząc na wysiłki innych ludzi, wydaje się, że wiele osób w tej dziedzinie wykonuje nieco powtarzalną pracę. Na przykład analiza tweetów, postów na Facebooku, artykułów w Wikipedii itp. jest częścią wielu problemów z dużymi danymi. Niektóre z tych zestawów danych są dostępne przy użyciu publicznych interfejsów API udostępnianych przez witrynę dostawcy, ale zwykle brakuje niektórych cennych informacji lub wskaźników w tych interfejsach API i każdy musi ponownie wykonywać te same analizy. Na przykład, chociaż użytkownicy korzystający z klastrów mogą zależeć od różnych przypadków użycia i wybranych funkcji, to jednak bazowe grupowanie użytkowników Twittera / Facebooka może być przydatne w wielu aplikacjach Big Data, które nie są udostępniane przez interfejs API ani dostępne publicznie w niezależnych danych zestawy. Czy istnieje jakaś strona z indeksem lub publicznie dostępnym zestawem danych zawierającym cenne zestawy danych, które można ponownie wykorzystać w rozwiązywaniu innych problemów z dużymi danymi? Mam na myśli coś takiego jak GitHub (lub grupa witryn / publicznych zestawów danych lub przynajmniej obszerna lista) dla nauki danych. Jeśli nie, jakie są powody braku takiej platformy do nauki danych? Wartość handlowa danych, musisz często aktualizować zestawy danych…? Czy nie możemy opracować modelu open source do udostępniania zbiorów danych dla naukowców zajmujących się danymi?

ODPOWIEDZI:

W rzeczywistości istnieje bardzo rozsądna lista publicznie dostępnych zestawów danych, obsługiwanych przez różne przedsiębiorstwa / źródła. Tutaj jest kilka z nich:

* Publiczne zestawy danych w Amazon WebServices

* Repozytorium częstych wdrożeń zestawów wydobywczych;

* Repozytorium uczenia maszynowego UCI;

* KDnuggets – duża lista wielu publicznych repozytoriów.

Teraz dwie kwestie dotyczące twojego pytania. Pierwszy dotyczy zasad udostępniania baz danych. Z własnego doświadczenia wynika, że ​​istnieją pewne bazy danych, których nie można udostępnić publicznie, zarówno w celu ograniczenia prywatności (jak w przypadku niektórych informacji z sieci społecznościowych), jak i dotyczących informacji rządowych (takich jak bazy danych systemu opieki zdrowotnej). Kolejna kwestia dotyczy użycia / zastosowania zestawu danych. Chociaż niektóre bazy danych mogą być przetwarzane ponownie w celu dostosowania do potrzeb aplikacji, byłoby dobrze, gdybyś miał jakąś fajną organizację zbiorów danych według celu. Taksonomia powinna obejmować wykres społeczny , analizę, eksplorację zestawów przedmiotów, klasyfikacja i wiele innych obszarów badań.

Kaggle.com, dom miłośników nowoczesnej nauki i uczenia maszynowego :), otworzył własne repozytorium zbiorów danych.

Istnieje wiele otwartych zestawów danych, jednym z nich często jest przeoczony data.gov. Jak wspomniano wcześniej, Freebase jest świetny

Publicznie dostępne zestawy danych / interfejsy API sieci społecznościowych

Jako rozszerzenie naszej wspaniałej listy publicznie dostępnych zestawów danych chciałbym wiedzieć, czy istnieje jakaś lista publicznie dostępnych interfejsów API indeksowania / indeksowania sieci społecznościowych. Byłoby bardzo miło, gdyby wraz z linkiem do zestawu danych / API dodano charakterystykę dostępnych danych. Takimi informacjami powinny być między innymi: nazwa sieci społecznościowej; jaki rodzaj informacji użytkownika dostarcza (posty, profil, sieć przyjaźni,…); czy pozwala na indeksowanie treści za pośrednictwem interfejsu API (i szybkość: 10 / min, 1k / miesiąc,…); czy po prostu zapewnia migawkę całego zestawu danych. Wszelkie sugestie i dalsze cechy, które należy dodać, są bardzo mile widziane.

Kilka słów o interfejsach API sieci społecznościowych. Około rok temu napisałem recenzję interfejsów API popularnych sieci społecznościowych dla badaczy. Niestety jest po rosyjsku. Oto podsumowanie:

Twitter (https://dev.twitter.com/docs/api/1.1)

* prawie wszystkie dane o tweetach / tekstach i użytkownikach są dostępne;

* brak danych socjodemograficznych;

* świetny streaming API: przydatny do przetwarzania tekstu w czasie rzeczywistym;

* wiele opakowań dla języków programowania;

* uzyskanie struktury sieci (połączeń) jest możliwe, ale czasochłonne (1 żądanie na 1 minutę).

Facebook (https://developers.facebook.com/docs/reference/api/)

* limity stawek: około 1 żądanie na sekundę;

* dobrze udokumentowany, obecny piaskownica;

* FQL (podobny do SQL) i graficzny interfejs API „regularny odpoczynek”;

* obecne dane o przyjaźni i cechy socjodemograficzne;

* wiele danych jest poza horyzontem zdarzeń: tylko dane znajomych i znajomych znajomych są mniej lub bardziej kompletne, prawie nic nie można było zbadać na temat losowego użytkownika;

* kilka dziwnych błędów API i wygląda na to, że nikt się tym nie przejmuje (np. niektóre funkcje dostępne przez FQL, ale nie przez synonim Graph API).

Instagram (http://instagram.com/developer/)

* limity stawek: 5000 wniosków na godzinę;

* API w czasie rzeczywistym (jak Streaming API dla Twittera, ale ze zdjęciami) – połączenie z nim jest trochę trudne: używane są połączenia zwrotne;

* brak danych socjodemograficznych;

* zdjęcia, dostępne filtry danych;

* nieoczekiwane niedoskonałości (np. możliwe jest zebranie tylko 150 komentarzy do postu / zdjęcia).

Foursquare (https://developer.foursquare.com/overview/)

* limity stawek: 5000 wniosków na godzinę;

* królestwo danych geoprzestrzennych 🙂

* dość zamknięte z powodu problemów związanych z prywatnością. Aby zebrać dane do zameldowania, należy zbudować złożony parser współpracujący z interfejsami API 4sq, bit.ly i twitter;

* ponownie: brak danych socjodemograficznych.

Google+ (https://developers.google.com/+/api/latest/) około 5 żądań na sekundę (spróbuj zweryfikować); główne metody: działania i ludzie;

* podobnie jak na Facebooku, wiele danych osobowych przypadkowego użytkownika jest ukrytych;

* brak danych połączeń użytkownika.

I poza konkursem: sprawdziłem sieci społecznościowe dla rosyjskich czytelników, a sieć nr 1 tutaj to vk.com. Jest przetłumaczony na wiele języków, ale popularny tylko w Rosji i innych krajach WNP. Link do dokumentacji API: http://vk.com/dev/. I z mojego punktu widzenia jest to

najlepszy wybór do badań domowych mediów społecznościowych. Przynajmniej w Rosji. Dlatego:

* limity stawek: 3 wnioski na sekundę;

* dostępne publiczne dane tekstowe i medialne;

* dostępne dane socjodemograficzne: dla losowego poziomu dostępności użytkownika wynosi około 60-70%;

* dostępne są również połączenia między użytkownikami: dostępne są prawie wszystkie dane o przyjaźni dla przypadkowego użytkownika;

* niektóre specjalne metody: np. istnieje metoda uzyskania statusu online / offline dla konkretnego użytkownika w czasie rzeczywistym i można stworzyć harmonogram dla jego odbiorców

Nie jest to sieć społecznościowa, ale Stackexchange publikuje okresowo zrzut całej bazy danych:

* Zrzut danych Stackexchange hostowany na archive.org

* Post opisujący schemat zrzutu bazy danych

Możesz wyodrębnić niektóre informacje społecznościowe, analizując, którzy użytkownicy pytają się i odpowiadają sobie nawzajem. Jedną fajną rzeczą jest to, że ponieważ posty są otagowane, możesz łatwo analizować społeczności podrzędne.

Przykład z Niemiec: Xing strona podobna do linksin, ale ograniczona do krajów niemieckojęzycznych. Link do centrali programisty: https://dev.xing.com/overview Zapewnia dostęp do: profili użytkowników, rozmów między użytkownikami (ograniczone do samego użytkownika), ogłoszeń o pracy, kontaktów i kontaktów, wiadomości z sieci i niektórych interfejs geolokalizacji. Tak, ma interfejs API, ale nie znalazłem informacji o stawce. Wydaje mi się jednak, że niektóre informacje są ograniczone do zgody użytkownika.

Interaktywne wykresy podczas rejestrowania danych

Chcę tworzyć wykresy i interaktywnie eksplorować dane na żywo / stale mierzone. Istnieje wiele opcji, a plot.ly jest najbardziej przyjazny dla użytkownika. Plot.ly ma fantastyczny i łatwy w użyciu interfejs użytkownika (łatwo skalowalny, dostosowywalny, łatwo powiększalny / dopasowujący się do ekranu), ale nie obsługuje dużych zbiorów danych, które zbieram. Czy ktoś zna jakieś alternatywy? Mam MATLAB, ale nie mam wystarczającej liczby licencji, aby uruchomić to i jednocześnie rozwijać program. Wiem, że LabVIEW byłby świetną opcją, ale obecnie jest on zbyt kosztowny. Z góry dziękuję!

W tej odpowiedzi założyłem, że wolisz rozwiązania typu open source od wizualizacji dużych zbiorów danych. To założenie opiera się na szczegółach budżetowych z twojego pytania. Jest jednak jedno wyłączenie – poniżej dodam odniesienie do jednego produktu komercyjnego, który moim zdaniem może być korzystny w twoim przypadku (pod warunkiem, że możesz sobie na to pozwolić). Zakładam również, że rozwiązania oparte na przeglądarce są dopuszczalne (wolałbym je, chyba że masz określone sprzeczne wymagania). Oczywiście jako pierwszy kandydat jako rozwiązanie twojego problemu rozważę bibliotekę JavaScript D3.js: http://d3js.org. Jednak pomimo elastyczności i innych korzyści, myślę, że to rozwiązanie jest zbyt niskie. Dlatego polecam przyjrzeć się następującym projektom open source do wizualizacji dużych zbiorów danych, które są wystarczająco wydajne i elastyczne, ale działają w wyższym poziomie abstrakcji (niektóre z nich oparte są na fundamencie D3.js, a czasem nazywane są stosem wizualizacji D3.js).

Bokeh – oparta na Pythonie interaktywna biblioteka wizualizacji, która obsługuje duże zbiory danych i dane strumieniowe: http://bokeh.pydata.org

Flot – interaktywna biblioteka wizualizacji oparta na JavaScript, skoncentrowana na jQuery: http://www.flotcharts.org

NodeBox – unikalny system szybkiej wizualizacji danych (nie oparty na przeglądarce, ale wielojęzyczny i wieloplatformowy), oparty na generatywnym projekcie i wizualnym programowaniu funkcjonalnym: https://www.nodebox.net

Processing- kompletny system programistyczny z własnym językiem programowania, bibliotekami, wtyczkami itp., Zorientowany na treści wizualne: https://www.processing.org (umożliwia wykonywanie programów przetwarzających w przeglądarce za pośrednictwem http: // processingjs. org)

Crossfilter – oparta na JavaScript biblioteka interaktywnej wizualizacji dużych danych według Square (bardzo szybka wizualizacja dużych zbiorów danych na wielu odmianach): http://square.github.io/crossfilter

bigvis – pakiet R do analizy eksploracyjnej dużych zbiorów danych (sam w sobie nie biblioteka wizualizacji, ale może być przydatny do przetwarzania dużych zbiorów danych / agregacji, wygładzania / przed wizualizacją z wykorzystaniem różnych opcji grafiki R): https://github.com/hadley/bigvis

prefuse – interaktywna biblioteka wizualizacji oparta na Javie: http://prefuse.org

Lumify – platforma do integracji, analizy i wizualizacji dużych zbiorów danych (interesująca funkcja: obsługuje Semantic Web): http://lumify.io

Osobno chciałbym wspomnieć o dwóch projektach analizy i wizualizacji dużych zbiorów danych o otwartym kodzie źródłowym, skoncentrowanych na danych grafowych / sieciowych (z pewnym wsparciem dla przesyłania danych tego typu): Cytoscape i Gephi. Jeśli interesują Cię inne, bardziej szczegółowe (obsługa map itp.) Lub komercyjne (podstawowe bezpłatne poziomy), projekty i produkty, zobacz tą niesamowitą kompilację, którą starannie opracowałem, aby wymyślić główną listę powyżej i przeanalizować: http://blog.profitbricks.com/39-data-visualization-tools-for-big-data. Wreszcie, jak obiecałem na początku, Zoomdata – produkt komercyjny, który, jak sądzę, może warto zajrzeć na: http://www.zoomdata.com. Powodem, dla którego go wykluczyłem z mojej kompilacji oprogramowania typu open source, jest jego wbudowana obsługa platform big data. W szczególności Zoomdata zapewnia konektory danych dla Cloudera Impala, Amazon Redshift, MongoDB, Spark i Hadoop, a także wyszukiwarki, główne silniki baz danych i dane przesyłane strumieniowo. Oświadczenie: Nie mam żadnego związku z Zoomdata – byłem pod wrażeniem ich szerokiej gamy opcji łączności (które mogą cię drogo kosztować, ale to kolejny aspekt analizy tego tematu).

Skąd ten nowojorski dziennikarz otrzymał swoje dane z wyszukiwarki Google?

Mam nadzieję, że jest to pytanie odpowiednie dla SO.

Artykuł, o którym mowa: http://www.nytimes.com/2015/01/25/opinion/sunday/sethstephens-davidowitz-search-for-sex.html O ile wiem, jedyne publicznie dostępne dane z wyszukiwarki Google pochodzą z interfejsu API Trends. Strona pomocy stwierdza, że ​​liczby na wykresie odzwierciedlają liczbę wyszukiwań przeprowadzonych dla określonego terminu w stosunku do całkowitej liczby wyszukiwań przeprowadzonych w Google w czasie. Nie reprezentują bezwzględnych liczb operacji wyszukiwania, ponieważ dane są znormalizowane i prezentowane w skali od 0-100. Jednak w artykule autor podaje (bezwzględne) „średnie miesięczne wyszukiwania”. Źródło jest podane jako: Wszystkie miesięczne liczby wyszukiwania są przybliżone i pochodzą z anonimowej i zagregowanej aktywności w sieci.

Źródło: analiza danych Google przez (autora)

Skąd więc wziął tę „anonimową i zagregowaną aktywność internetową”?

Google AdWords. To ma absolutną liczbę wyszukiwań.

Dane dostępne w branży

Zaczynam pracę magisterską i chcę zrobić system wykrywania usterek przy użyciu technik uczenia maszynowego. Potrzebuję zestawów danych do mojej pracy magisterskiej, ale nie wiem, skąd mogę je uzyskać. Szukam danych historycznych dotyczących operacji / konserwacji / usterek dowolnego rodzaju maszyny w przemyśle naftowym i gazowym (wiertarki, wtryskiwacze pary itp.) lub w przedsiębiorstwach elektrycznych (transformatory, generatory itp.).

Publicznie dostępne zestawy danych, w tym Amazon, KDnuggets, Stanford, Twitter, Freebase, Google Public i inne.

[32][Wydajność]

PYTANIA

Jaka jest najbardziej wydajna technika indeksowania danych?

Jak wszyscy wiemy, istnieją pewne techniki indeksowania danych, których używają dobrze znane aplikacje indeksujące, takie jak Lucene (dla java) lub Lucene.NET (dla .NET), MurMurHash, B + Tree itp. Dla obiektu bez Sql / Object Oriented Database (którą próbuję napisać / grać trochę w C#), jaką technikę sugerujesz? Czytałem o MurMurhash-2, a zwłaszcza komentarze v3 mówią, że Murmur jest bardzo szybki. Również Lucene.Net ma na ten temat dobre komentarze. Ale co z ich śladami pamięci w ogóle?

Czy jest jakieś wydajne rozwiązanie, które zużywa mniej miejsca (i oczywiście jeśli preferowane jest szybsze) niż Lucene lub Murmur? Czy powinienem napisać specjalną strukturę indeksu, aby uzyskać najlepsze wyniki? Jeśli spróbuję napisać własną, to czy istnieje jakakolwiek akceptowana skala dobrego indeksowania, coś w rodzaju 1% węzła danych lub 5% węzła danych? Każda przydatna wskazówka zostanie doceniona.

 ODPOWIEDZI

Myślę, że pomieszałeś niektóre rzeczy w swoim pytaniu. Lucene (nic nie wiem o Lucene.NET, ale przypuszczam, że jest tak samo) to biblioteka używana do analizy, dzielenia na tokeny i przechowywania dokumentów w celu późniejszego ich wyszukania i odzyskania. Lucene ma dość stary, ale skuteczny model, wykorzystuje odwrócone drzewa do wyszukiwania i wyszukiwania dokumentów. Bez dalszych szczegółów, wszystkie dokumenty są podzielone na tokeny (warunki), a dla każdego terminu jest utrzymywana struktura danych, która przechowuje wszystkie dokumenty zawierające dany termin. Jako strukturę danych można zastosować BTree, tablicę skrótów i w najnowszych ważnych wersjach możesz to zrobić , nawet podłącz własne struktury danych. BTree jest rodzajem struktury danych drzewa, która jest odpowiednia do pracy z dużymi fragmentami danych i często służy do przechowywania na dysku uporządkowanych struktur przypominających trele. W przypadku pamięci inne drzewa działają lepiej. Murmur hash, to rodzina funkcji hash używanych w tabeli hash. Implementacja tabeli skrótów nie jest ważna, może to być standardowa implementacja łańcuchowa lub bardziej zaawansowany schemat adresowania skrótów. Chodzi o to, że tabele skrótów pozwalają szybko uzyskać klucz z nieuporządkowanego zestawu kluczy i mogą odpowiadać na zadania takie jak: czy ten klucz jest częścią tego zestawu kluczy? jaka jest wartość związana z tym kluczem? Teraz wróć do głównego problemu. Masz jedną bibliotekę (Lucene), a do struktur danych obie struktury danych są używane w Lucene. Teraz widzisz, że na te pytania nie można odpowiedzieć, ponieważ nie są one porównywalne. Jednak w odniesieniu do twojego śladu i wydajności część pytania. Przede wszystkim musisz wiedzieć, jakie operacje musisz wdrożyć. Czy potrzebujesz tylko wartości dla klucza, czy też musisz znaleźć wszystkie elementy w zakresie? Innymi słowy, potrzebujesz zamówienia czy nie? Jeśli tak, to drzewo może pomóc. Jeśli tego nie zrobisz, zamiast tego można użyć szybszej tabeli skrótów. Czy masz dużo danych, które nie pasują do pamięci? Jeśli tak, pomogłoby rozwiązanie oparte na dysku (jak BTree). Jeśli Twoje dane mieszczą się w pamięci, użyj najszybszego rozwiązania w pamięci i użyj dysku tylko jako magazynu (o innej strukturze, o wiele prostszej).

Jak przyspieszyć przekazywanie wiadomości między węzłami obliczeniowymi?

Zajmuję się tworzeniem aplikacji rozproszonej, a ponieważ została zaprojektowana, podczas przetwarzania będzie mnóstwo komunikacji. Ponieważ komunikacja jest już tak szeroko rozłożona na cały proces, jak to możliwe, zastanawiam się, czy istnieją jakieś standardowe rozwiązania poprawiające wydajność warstwy przekazywania wiadomości w mojej aplikacji. Jakie zmiany / ulepszenia mogę zastosować do mojego kodu, aby skrócić czas wysyłania wiadomości? Za to, co jest tego warte, komunikuję się do 10 GB między 9 węzłami obliczeniowymi, a środowisko, którego używam, jest zaimplementowane w OpenMPI.

ODPOWIEDZI

Buforowanie rzeczy jest na ogół dobre, jeśli możesz, ale uważam, że jest nieco kruche, ponieważ jest to bardzo zależne od tego, jaka dokładnie jest twoja aplikacja. Kompresja danych to kolejna bardzo solidna sugestia, ale mam wrażenie, że oba te przyspieszenia będą względnie marginalne. Może nawet 2-5x, ale byłbym bardzo zaskoczony, gdyby byli szybsi. Przy założeniu, że czyste we / wy (zapis do / odczyt z pamięci) nie jest twoim ograniczającym czynnikiem (jeśli tak, prawdopodobnie nie będziesz dużo szybszy), zrobiłbym silną wtyczkę dla zeromq. Słowami twórców:

Wzięliśmy normalne gniazdo TCP, wstrzyknęliśmy mu mieszaninę radioaktywnych izotopów skradzionych z tajnego sowieckiego projektu badań atomowych, zbombardowaliśmy go promieniami kosmicznymi z 1950 roku i włożyliśmy w ręce uzależnionego od narkotyków autora komiksu ze źle ukrytym fetysz wyłupiastych mięśni spandeksowych. Tak, gniazda ØMQ to światowi superbohaterowie świata sieciowego.

Choć może to być trochę dramatyczne, gniazda zeromq są moim zdaniem jednym z najbardziej niesamowitych programów, jakie świat sieci komputerowych stworzył od kilku lat. Nie jestem pewien, czego używasz w tej chwili do przekazywania wiadomości, ale jeśli używasz czegoś tradycyjnego, takiego jak rabbitmq, możesz zobaczyć przyspieszenie wielu rzędów wielkości (osobiście zauważyłem około 500x, ale zależy dużo architektury). Sprawdź tutaj kilka podstawowych testów porównawczych.

Jeśli oczekujesz (lub stwierdzisz), że węzły żądają tych samych danych więcej niż raz, być może mógłbyś skorzystać ze strategii buforowania? Zwłaszcza tam, gdzie niektóre dane są wykorzystywane znacznie częściej niż inne, więc możesz kierować reklamy tylko na najczęściej używane informacje. Jeśli dane są zmienne, potrzebujesz również sposobu, aby potwierdzić, że nie uległy one zmianie od ostatniego żądania, które jest tańsze niż jego powtórzenie. Jest to dodatkowo skomplikowane, jeśli każdy węzeł ma swoją własną pamięć podręczną. W zależności od charakteru systemu i zadań możesz rozważyć dodanie węzła dedykowanego do udostępniania informacji między węzłami przetwarzającymi i zbudowanie pojedynczej pamięci podręcznej na tym węźle. Na przykład, kiedy może to być dobry pomysł, załóżmy, że pobieram niektóre dane ze zdalnego magazynu danych przez połączenie o niskiej przepustowości i mam pewne zadania wymagające tych danych, które są dystrybuowane wyłącznie między węzłami lokalnymi. Na pewno nie chcę, aby każdy węzeł żądał informacji osobno przez to połączenie o niskiej przepustowości, o które wcześniej mógł poprosić inny węzeł. Ponieważ moje lokalne operacje we / wy są znacznie tańsze niż moje operacje we / wy przez połączenie o niskiej przepustowości, mogę dodać węzeł między węzłami przetwarzającymi a zdalnym źródłem, który działa jak serwer pośredni. Ten węzeł pobierałby żądania od węzłów przetwarzających, komunikował się ze zdalnym magazynem danych i buforował często żądane dane, aby zminimalizować wykorzystanie tego połączenia o niskiej przepustowości. Podstawowe pojęcia, które mogą mieć zastosowanie w konkretnym przypadku, to:

* Wyeliminuj lub zmniejsz zbędne I / O;

* Skorzystaj z kompromisów między zużyciem pamięci a czasem obliczeniowym;

* Nie wszystkie wejścia / wyjścia są sobie równe.

Scikit Learn Regresja Logistyczna Wyciek pamięci

Jestem ciekawy, czy ktoś na to wpadł. Mam zestaw danych z około 350 tys. Próbek, każda z 4k rzadkimi funkcjami. Niski poziom wypełnienia wynosi około 0,5%. Dane są przechowywane w obiekcie scipy.sparse.csr.csr_matrix, z dtype = ‘numpy.float64’. Używam tego jako danych wejściowych do klasyfikatora regresji logistycznej sklearn. Dokumentacja wskazuje, że rzadkie macierze CSR są akceptowalnymi danymi wejściowymi dla tego klasyfikatora. Jednak, kiedy trenuję klasyfikator, mam bardzo niską wydajność pamięci; użycie pamięci przez mój proces eksploduje z ~ 150 MB, aby wypełnić całą dostępną pamięć, a następnie wszystko zatrzymuje się, gdy następuje zamiana pamięci na dysk. Czy ktoś wie, dlaczego ten klasyfikator może rozszerzyć macierz rzadką do macierzy gęstej? Obecnie używam domyślnych parametrów klasyfikatora w ramach zaktualizowanej dystrybucji anakody. Dzięki!

scipy .__ version__ = „0.14.0”

sklearn .__ version__ = „0.15.2”

Ok, skończyło się to sytuacją RTFM, chociaż w tym przypadku był to komunikat o błędzie RTF. Podczas uruchamiania tego nadal pojawiał się następujący błąd: DataConversionWarning: Wektor kolumnowy y został przekazany, gdy oczekiwano tablicy 1d. Proszę zmienić kształt. Zakładałem, że ponieważ miało to związek z wektorem docelowym, a ponieważ było to tylko ostrzeżenie, to po prostu po cichu zmieniłoby mój wektor docelowy na 1-D. Jednak gdy jawnie przekonwertowałem mój wektor docelowy na 1-D, moje problemy z pamięcią zniknęły. Najwyraźniej posiadanie wektora docelowego w niepoprawnej formie spowodowało, że zamienił on moje wektory wejściowe w gęste wektory z wektorów rzadkich. Wyciągnięta lekcja: postępuj zgodnie z zaleceniami, gdy sklearn „sugeruje”, że coś robisz.

[31][Algorytmy]

PYTANIA: Czy regresja logistyczna jest w rzeczywistości algorytmem regresji?

Zazwyczaj definicja regresji (o ile mi wiadomo) przewiduje ciągłą zmienną wyjściową z danego zestawu zmiennych wejściowych. Regresja logistyczna jest algorytmem klasyfikacji binarnej, więc daje wyniki jakościowe. Czy to naprawdę algorytm regresji? Jeśli tak, to dlaczego?

ODPOWIEDZI:

Tak, regresja logistyczna jest algorytmem regresji i przewiduje ciągły wynik: prawdopodobieństwo zdarzenia. To, że używamy go jako binarnego klasyfikatora, wynika z interpretacji wyniku.

Szczegóły : Regresja logistyczna jest rodzajem uogólnionego modelu regresji liniowej.

W zwykłym modelu regresji liniowej wynik ciągły y modeluje się jako sumę iloczynu predyktorów i ich efektu:

y = b_0 + b_1 * x_1 + b_2 * x_2 + … b_n * x_n + e

gdzie e jest błędem.

Uogólnione modele liniowe nie modelują bezpośrednio. Zamiast tego używają transformacji, aby rozszerzyć domenę y na wszystkie liczby rzeczywiste. Ta transformacja nazywa się funkcją link. W przypadku regresji logistycznej funkcją łącza jest funkcja logit (zazwyczaj patrz uwaga poniżej). Funkcja logowania jest zdefiniowana jako

ln (t / (1 + y))

Formą regresji logistycznej jest zatem:

ln (t / (1 + y)) = b_0 + b_1 * x_1 + b_2 * x_2 + … b_n * x_n + e

gdzie y jest prawdopodobieństwem zdarzenia. Fakt, że używamy go jako binarnego klasyfikatora, wynika z interpretacji wyniku.

Uwaga: probit to kolejna funkcja łącza używana do regresji logistycznej, ale najczęściej używana jest logit.

Czy istnieją jakieś nienadzorowane algorytmy uczenia się danych sekwencyjnych?

Każda obserwacja w moich danych była zbierana z różnicą 0,1 sekundy. Nie nazywam tego szeregiem czasowym, ponieważ nie ma znacznika daty i godziny. W przykładach algorytmów grupowania (znalazłem online) i PCA przykładowe dane mają 1 obserwację na przypadek i nie są mierzone w czasie. Ale moje dane zawierają setki obserwacji zbieranych co 0,1 sekundy na pojazd i jest wiele pojazdów.

To, co masz, to sekwencja wydarzeń według czasu, więc nie wahaj się nazwać to Szeregiem Czasowym!

Grupowanie w szeregi czasowe ma 2 różne znaczenia:

  1. Segmentacja szeregów czasowych, tzn. Chcesz podzielić poszczególne szeregi czasowe na różne przedziały czasowe zgodnie z wewnętrznymi podobieństwami.
  2. Grupowanie szeregów czasowych, tzn. Masz kilka szeregów czasowych i chcesz znaleźć różne klastry zgodnie z podobieństwami między nimi.

Zakładam, że masz na myśli drugi, a oto moja propozycja:

Masz wiele pojazdów i wiele obserwacji na pojazd, tj. masz wiele pojazdów.

Masz więc kilka macierzy (każdy pojazd jest macierzą), a każda macierz zawiera N wierszy (Liczba obserwacji) i T kolumn (punkty czasowe). Jedną z sugestii może być zastosowanie PCA do każdej matrycy, aby zmniejszyć wymiarowość i obserwować dane w przestrzeni PC i sprawdzić, czy istnieją znaczące relacje między różnymi obserwacjami w obrębie matrycy (pojazdu). Następnie możesz umieścić każdą obserwację dla wszystkich pojazdów na sobie i zrobić matrycę i zastosować do tego PCA, aby zobaczyć relacje pojedynczej obserwacji między różnymi pojazdami. Jeśli nie masz wartości ujemnych, zdecydowanie zaleca się faktoryzację macierzy i redukcję wymiarów danych matrycowych. Inną sugestią może być umieszczenie wszystkich macierzy jeden na drugim i zbudowanie tensora NxMxT, gdzie N to liczba pojazdów, M to liczba obserwacji, a T to sekwencja czasowa i zastosowanie dekompozycji Tensor, aby zobaczyć relacje globalnie. Bardzo przyjemne podejście do klastrowania szeregów czasowych zostało przedstawione w tym artykule, w którym wdrożenie jest ciche od samego początku.

Mam nadzieję, że to pomogło!

Powodzenia 🙂

Jak wspomniałeś, masz na myśli segmentację szeregów czasowych. Dodaję to do odpowiedzi. Segmentacja szeregów czasowych jest jedynym problemem klastrowym, który ma podstawową prawdę do oceny. Rzeczywiście, rozważasz rozkład generowania poza szeregami czasowymi i analizujesz go. Zdecydowanie polecam to, to, to, to, to i tam, gdzie twój problem jest kompleksowo badany. Szczególnie ostatni i praca doktorska.

Powodzenia!

Z jakich algorytmów lub metod można wykryć wartość odstającą z tego zestawu danych?

Załóżmy, że mam zestaw danych: Kwota pieniędzy (100, 50, 150, 200, 35, 60, 50, 20, 500). Szukałem w Google informacji o technikach, które można wykorzystać do znalezienia możliwej wartości odstającej w tym zbiorze danych, ale skończyło się to zdezorientowane. Moje pytanie brzmi: jakich algorytmów, technik lub metod można użyć do wykrycia możliwej wartości odstającej w tym zbiorze danych?

PS: Weź pod uwagę, że dane nie mają normalnego rozkładu. Dzięki.

Prostym podejściem byłoby użycie tego samego, co robi wykresy pudełkowe: z dala od 1,5 (mediana-q1) lub 1,5 (q3-mediana) = wartość odstająca. Uważam to za przydatne w wielu przypadkach, nawet jeśli nie jest idealne i może zbyt proste. Ma tę zaletę, że nie zakłada normalności.

Jednym ze sposobów myślenia o wykrywaniu wartości odstających jest to, że tworzysz model predykcyjny, a następnie sprawdzasz, czy punkt mieści się w zakresie prognoz. Z teoretycznego punktu widzenia możesz zobaczyć, jak bardzo każda obserwacja zwiększa entropię twojego modelu. Jeśli traktujesz te dane jako zbiór liczb i nie masz proponowanego modelu ich generowania, równie dobrze możesz spojrzeć na średnią. Jeśli masz pewność, że liczby nie są normalnie dystrybuowane, nie możesz składać oświadczeń jak daleko „od” jest dana liczba od średniej, ale możesz po prostu spojrzeć na nią w wartościach bezwzględnych. Stosując to, możesz wziąć średnią wszystkich liczb, a następnie wykluczyć każdą liczbę i wziąć średnią pozostałych. Jakakolwiek średnia najbardziej różni się od średniej globalnej, jest największą wartością odstającą. Oto kilka python:

def avg(a):

return sum(a)/len(a)

l = [100, 50, 150, 200, 35, 60 ,50, 20, 500]

m = avg(l)

for idx in range(len(l)):

print(“outlier score of {0}: {1}”.format(l[idx], abs(m – avg([elem for i, elem in enumerate(l) if i!=idx]))))

>> 

outlier score of 100: 4

outlier score of 50: 10

outlier score of 150: 3

outlier score of 200: 9

outlier score of 35: 12

outlier score of 60: 9

outlier score of 50: 10

outlier score of 20: 14

outlier score of 500: 46

[30][Hadoop]

W projekcie Apache Hadoop opracowano oprogramowanie typu open source do niezawodnego, skalowalnego przetwarzania rozproszonego.

„Hadoop” zazwyczaj odnosi się do oprogramowania w projekcie, które implementuje platformę analizy danych mapreduce, a także rozproszony system plików (HDFS), który ją stanowi. Od wersji 0.23 Hadoop posiada autonomiczny menedżer zasobów: yarn. Ten menedżer zasobów ułatwia korzystanie z innych modułów oprócz silnika MapReduce, takich jak: Ambari, internetowe narzędzie do udostępniania, zarządzania i monitorowania klastrów Apache Hadoop, które obejmuje obsługę Hadoop HDFS, Hadoop MapReduce, Hive, HCatalog, HBase, ZooKeeper, Oozie, Pig i Sqoop. Ambari zapewnia również pulpit nawigacyjny do przeglądania stanu klastrów, takich jak mapy cieplne i możliwość wizualnego przeglądania aplikacji MapReduce, Pig i Hive wraz z funkcjami do diagnozowania ich charakterystyk wydajności w przyjazny dla użytkownika sposób:

Avro, system serializacji danych oparty na schematach JSON.

Cassandra, replikowany, odporny na awarie, zdecentralizowany i skalowalny system bazy danych.

Chukwa: System gromadzenia danych do zarządzania dużymi systemami rozproszonymi.

HBase, skalowalna, rozproszona baza danych, która obsługuje ustrukturyzowane przechowywanie danych dla dużych tabel.

Hive, infrastruktura hurtowni danych, która zapewnia podsumowanie danych i zapytania ad hoc.

Mahout, biblioteka algorytmów uczenia maszynowego zgodnych z paradygmatem M / R.

Pig, platforma / język programowania do tworzenia zadań równoległych

Storm, system przetwarzania w czasie rzeczywistym i przetwarzania strumieniowego

ZooKeeper, system koordynujący rozproszone węzły, podobny do Google Chubby

Oozie, system planowania przepływu pracy do zarządzania zadaniami Apache Hadoop.

Spark, szybki i ogólny silnik do przetwarzania danych na dużą skalę.

Flink, szybki i niezawodny silnik przetwarzania danych na dużą skalę.

PYTANIA:

 Jaka jest różnica między Hadoop a noSQL?

Słyszałem o wielu narzędziach / strukturach pomagających ludziom w przetwarzaniu ich danych (środowisko dużych zbiorów danych). Jeden nazywa się Hadoop, a drugi to koncepcja noSQL. Jaka jest różnica w punkcie przetwarzania? Czy się uzupełniają?

ODPOWIEDZI:

NoSQL to sposób na przechowywanie danych, które nie wymagają żadnej relacji. Kluczem jest prostota konstrukcji i możliwość skalowania w poziomie, jednym ze sposobów przechowywania danych jest: projektowanie par wartości. To nadaje się do przetwarzania podobnego do Hadoop. Korzystanie z bazy danych NoSQL naprawdę zależy od typu problemu, który występuje.

Hadoop to system przeznaczony do przechowywania i przetwarzania ogromnych ilości danych. Jest to rozproszony system plików dfs. Powodem tego jest to, że jego konstrukcja jest tak ważna, że ​​zakłada założenie, że awarie sprzętu są powszechne, tworząc w ten sposób wiele kopii tej samej informacji i rozprowadzając ją na wielu maszynach i stojakach, więc jeśli ktoś się zepsuje, nie ma problemu, my mam jeszcze dwie kopie. Oto świetny link do Hadoop również z wikipedii, zobaczysz, że moim zdaniem jest to nie tylko przechowywanie, ale także przetwarzanie: Hadoop

Można przenosić algorytmy zmniejszania mapy napisane dla MongoDB Hadoop później?

W naszej firmie mamy bazę danych MongoDB zawierającą wiele nieustrukturyzowanych danych, na których musimy uruchamiać algorytmy zmniejszania mapy w celu generowania raportów i innych analiz. Mamy do wyboru dwa podejścia do wdrożenia wymaganych analiz:

  1. Jednym z podejść jest wyodrębnienie danych z MongoDB do klastra Hadoop i wykonanie analizy całkowicie na platformie Hadoop. Wymaga to jednak znacznych inwestycji w przygotowanie platformy (oprogramowania i sprzętu) oraz wykształcenie zespołu do pracy z Hadoop i pisania zadań zmniejszania mapy.
  2. Innym podejściem jest po prostu włożenie wysiłku w zaprojektowanie algorytmów zmniejszania mapy i uruchomienie algorytmów w funkcjach zmniejszania mapy MongoDB. W ten sposób możemy stworzyć początkowy prototyp końcowego systemu, który może generować raporty. Wiem, że funkcje redukcji map MongoDB są znacznie wolniejsze w porównaniu do Hadoop, ale obecnie dane nie są tak duże, że czyni to jeszcze wąskim gardłem, przynajmniej nie przez następne sześć miesięcy.

Pytanie polega na tym, że korzystając z drugiego podejścia i pisząc algorytmy dla MongoDB, można je później przenieść do Hadoop przy niewielkiej potrzebie modyfikacji i przeprojektowaniu algorytmu? MongoDB obsługuje tylko JavaScript, ale różnice w języku programowania są łatwe do opanowania. Czy istnieją jednak fundamentalne różnice w modelu MongoDB i Hadoop z redukcją mapy, który może zmusić nas do przeprojektowania algorytmów w celu przeniesienia do Hadoop?

ODPOWIEDŹ:

Jeśli wykonasz prototyp używając tylko mongo, na pewno będzie zadanie tłumaczenia. Kiedy uruchomisz zadanie MapReduce na mongodb, ma ono wbudowane źródło danych i strukturę. Kiedy ostatecznie przekonwertujesz na hadoop, twoje struktury danych mogą nie wyglądać tak samo. Możesz wykorzystać złącze mongodb-hadoop, aby uzyskać dostęp do danych mongo bezpośrednio z poziomu hadoop, ale nie będzie to tak proste, jak mogłoby się wydawać. Czas, aby dowiedzieć się, jak dokładnie przeprowadzić konwersję w najbardziej optymalny sposób, raz łatwiej będzie uzasadnić ,że masz prototyp na miejscu, IMO. Podczas gdy będziesz musiał przetłumaczyć funkcje mapreduce, podstawowy pseudokod powinien mieć zastosowanie do obu systemów. W MongoDB nie znajdziesz niczego, co można zrobić przy użyciu Javy lub które jest znacznie bardziej skomplikowane w Javie.

Możesz używać algorytmów zmniejszania mapy w Hadoop bez programowania ich w Javie. Nazywa się to streamingiem i działa jak potokowanie Linux. Jeśli uważasz, że możesz przenieść swoje funkcje do odczytu i zapisu na terminalu, powinno działać dobrze. Oto przykładowy wpis na blogu, który pokazuje, jak korzystać z funkcji zmniejszania mapy napisanych w Pythonie w Hadoop.

Możesz także utworzyć połączenie MongoDB-Hadoop

Czy Amazon RedShift zastępuje Hadoop dla danych ~ 1XTB?

Hadoop i jego ekosystem są bardzo popularne. Jednak w praktyce, gdy wiele zestawów danych znajduje się w zakresie terabajtów, nie jest rozsądniej używać Amazon RedShift do odpytywania dużych zestawów danych, zamiast spędzać czas i wysiłek na budowie klastra Hadoop? W jaki sposób Amazon Redshift wypada w porównaniu z Hadoop pod względem złożoności konfiguracji, kosztów i wydajności?

Różnią się znacznie pod wieloma względami i nie sądzę, że Redshift zastąpi Hadoop. –Function. Na Redshift nie można uruchamiać niczego innego niż SQL. Co najważniejsze, nie można uruchamiać żadnych niestandardowych funkcji w Redshift. W Hadoop możesz, używając wielu języków (Java, Python, Ruby … nazywasz to). Na przykład NLP w Hadoop jest łatwe, podczas gdy w Redshift jest mniej lub bardziej niemożliwe. To znaczy. istnieje wiele rzeczy, które możesz zrobić w Hadoop, ale nie w Redshift. To chyba najważniejsza różnica. -Wykonanie zapytania o profil wydajności w trybie Redshift jest w większości przypadków znacznie wydajniejsze niż w Hadoop. Jednak ta wydajność pochodzi z indeksowania, które jest wykonywane, gdy dane są ładowane do Redshift (używam tutaj terminu indeksowanie bardzo luźno). Dlatego świetnie jest, jeśli załadujesz dane raz i wykonasz wiele zapytań, ale jeśli chcesz na przykład wykonać tylko jedno zapytanie, możesz stracić ogólną wydajność.

Które rozwiązanie wygrywa pod względem kosztów, zależy od sytuacji (np. wydajności), ale prawdopodobnie potrzebujesz sporo zapytań, aby uczynić go tańszym niż Hadoop (a dokładniej elastyczna redukcja mapy Amazon). Na przykład, jeśli wykonujesz OLAP, jest bardzo prawdopodobne, że Redshift wychodzi taniej. Jeśli wykonujesz codzienne partie ETL, bardziej prawdopodobne jest, że Hadoop będzie tańszy. Powiedziawszy to, zastąpiliśmy część naszej ETL, która została wykonana w Hive to Redshift, i to było całkiem wspaniałym doświadczeniem; głównie ze względu na łatwość rozwoju. Silnik zapytań Redshift jest oparty na PostgreSQL i jest bardzo dojrzały w porównaniu do Hive. Jego właściwości ACID ułatwiają uzasadnienie, a szybszy czas reakcji pozwala na przeprowadzenie większej liczby testów. To świetne narzędzie, ale nie zastąpi Hadoop.

EDYCJA: Jeśli chodzi o złożoność konfiguracji, powiedziałbym nawet, że dzięki Hadoop jest łatwiej, jeśli używasz EMR AWS. Ich narzędzia są tak dojrzałe, że uruchomienie zadania Hadoop jest absurdalnie proste. Narzędzia i mechanizmy związane z działaniem Redshift nie są jeszcze tak dojrzałe. Na przykład Redshift nie jest w stanie poradzić sobie z ładowaniem podtrzymującym, dlatego musisz wymyślić coś, co zamieni to w partię ładunków, co może zwiększyć złożoność twojego ETL.

Obecny limit rozmiaru dla Amazon Redshift to 128 węzłów lub 2 PB skompresowanych danych. Może być około 6PB nieskompresowany, chociaż przebieg różni się dla kompresji. Zawsze możesz nas poinformować, jeśli potrzebujesz więcej.

Osobiście nie sądzę, że tak trudno jest skonfigurować klaster hadoop, ale wiem, że czasem jest to bolesne, gdy zaczynasz. Ograniczenia rozmiaru HDFS znacznie przekraczają TB (czy miałeś na myśli eksabajt?). Jeśli się nie mylę, skaluje się do yottabajtów lub innego pomiaru, dla którego nawet nie znam tego słowa. Cokolwiek to jest, jest naprawdę duże. Narzędzia takie jak Redshift mają swoje miejsce, ale zawsze martwię się o rozwiązania specyficzne dla dostawcy. Moją główną troską jest  zawsze „co mam zrobić, gdy jestem niezadowolony z ich usług?” – Mogę przejść do wyszukiwarki Google i przenieść swoją analizę do paradygmatu lub przejść do hadoop i przenieść tę samą pracę do tego systemu. Tak czy inaczej, będę musiał nauczyć się czegoś nowego i dużo pracy przy tłumaczeniu. Biorąc to pod uwagę, miło jest móc przesłać zestaw danych i szybko rozpocząć pracę – szczególnie, jeśli to, co robię, ma krótki cykl życia. Amazon wykonał dobrą robotę, rozwiązując problem bezpieczeństwa danych. Jeśli chcesz uniknąć hadoopa, zawsze będzie alternatywa. Ale praca z tym nie jest wcale taka trudna.

Jakie są przypadki użycia dla Apache Spark vs. Hadoop?

Z Hadoop 2.0 i YARN Hadoop prawdopodobnie nie jest już związany tylko rozwiązaniami zmniejszającymi mapę. Z tym postępem, jakie są przypadki użycia Apache Spark vs Hadoop, biorąc pod uwagę, że oba siedzą na szczycie HDFS? Przeczytałem dokumentację wprowadzającą do Spark, ale jestem ciekawy, czy ktoś napotkał problem, który był bardziej wydajny i łatwiejszy do rozwiązania w przypadku Spark w porównaniu do Hadoop.

Hadoop oznacza HDFS, YARN, MapReduce i wiele innych rzeczy. Czy masz na myśli Spark vs MapReduce? Ponieważ Spark działa na / z Hadoop, co jest raczej celem. Głównym powodem używania Spark jest szybkość, a wynika to z faktu, że jego wykonanie może przechowywać dane w pamięci między etapami, a nie zawsze utrzymywać HDFS po mapie lub zmniejszeniu. Ta zaleta jest bardzo wyraźna w przypadku obliczeń iteracyjnych, które mają dziesiątki etapów, z których każdy dotyka tych samych danych. Tutaj rzeczy mogą być „100x” szybsze. W przypadku prostych, jednoprzebiegowych zadań podobnych do ETL, dla których zaprojektowano MapReduce, generalnie nie jest to szybsze. Innym powodem używania Spark jest jego ładniejszy język wysokiego poziomu w porównaniu do MapReduce. Zapewnia funkcjonalny widok podobny do programowania, który naśladuje Scalę, co jest o wiele ładniejsze niż pisanie kodu MapReduce. (Chociaż musisz albo użyć Scali, albo zaadaptować nieznacznie rozwinięte API Java lub Python dla Spark). Crunch and Cascading już teraz zapewniają podobną abstrakcję na MapReduce, ale wciąż jest to obszar, w którym Spark jest miły. Wreszcie Spark ma jeszcze młode, ale obiecujące podprojekty dla ML, analizy wykresów i streamingu, które ujawniają podobny, spójny API. Z MapReduce musiałbyś w tym celu zwrócić się do kilku innych projektów (Mahout, Giraph, Storm). Miło jest mieć go w jednym opakowaniu, choć jeszcze nie jest „wypiekany”. Dlaczego nie używałbyś Spark? parafrazując siebie:

* Spark to przede wszystkim Scala z przeniesionymi interfejsami API Java; MapReduce może być bardziej przyjazny i bardziej natywny dla programistów Java

* Obecnie istnieje więcej wiedzy MapReduce niż Spark

* Do zadań równoległych do danych, jednoprzebiegowych, podobnych do ETL zaprojektowano MapReduce,

* MapReduce jest lżejszy w porównaniu do odpowiednika Spark

Spark jest dość dojrzały, podobnie jak YARN, ale Spark-on-YARN jest wciąż całkiem nowy. Oba mogą nie być jeszcze optymalnie zintegrowane. Na przykład do niedawna nie sądzę, aby Spark mógł poprosić YARN o przydziały na podstawie liczby rdzeni? Oznacza to, że MapReduce może być łatwiejszy do zrozumienia, zarządzania i dostrojenia

Przetwarzanie danych przechowywanych w Redshift

Obecnie używamy Redshift jako hurtowni danych, z czego jesteśmy bardzo zadowoleni. Mamy jednak teraz obowiązek uczenia maszynowego na podstawie danych w naszym magazynie. Biorąc pod uwagę ilość danych, najlepiej byłoby wykonać obliczenia w tym samym miejscu, co dane, zamiast je przesuwać, ale nie wydaje się możliwe dzięki Redshift. Patrzyłem na MADlib, ale nie jest to opcja, ponieważ Redshift nie obsługuje UDF (czego wymaga MADlib). Obecnie zastanawiam się nad przeniesieniem danych do EMR i przetwarzaniem ich za pomocą biblioteki uczenia maszynowego Apache Spark (a może H20, Mahout lub cokolwiek innego). Więc moje pytania to:

  1. czy jest lepszy sposób?
  2. Jeśli nie, jak mam udostępnić dane Sparkowi? Do tej pory zidentyfikowałem następujące opcje: użyj Sqoop, aby załadować go do HDFS, użyj DBInputFormat, zrób eksport Redshift do S3 i każ Sparkowi pobrać go stamtąd. Jakie są zalety / wady dla tych różnych podejść (i innych) podczas korzystania ze Spark?

Pamiętaj, że jest to nauka wsadowa offline, ale chcielibyśmy móc to zrobić tak szybko, jak to możliwe, abyśmy mogli szybko iterować eksperymenty.

Nowa usługa Amazon Machine Learning Service może działać dla Ciebie. Działa bezpośrednio z Redshift i może być dobrym sposobem na rozpoczęcie. Jeśli chcesz przetwarzać za pomocą EMR, możesz użyć polecenia UNLOAD Redshift, aby wyładować dane na S3. Spark na EMR może następnie uzyskać do niego bezpośredni dostęp bez konieczności wciągania go do HDFS.

[29][SVM]

PYTANIA:

Jaki jest związek między maszyną SVM a utratą zawiasów?

Mój kolega i ja próbujemy ogarnąć różnicę między regresją logistyczną a maszyną SVM. Najwyraźniej optymalizują różne funkcje celu. Czy maszyna SVM jest tak prosta, jak stwierdzenie, że jest klasyfikatorem dyskryminującym, który po prostu optymalizuje utratę zawiasów? A może jest to bardziej skomplikowane? W jaki sposób wektory pomocnicze wchodzą w grę? Co ze zmiennymi luzu? Dlaczego nie masz głębokiej SVM, tak jak nie możesz mieć głębokiej sieci neuronowej z funkcjami aktywacji sigmoidalnej?

ODPOWIEDZI:

Oba są modelami dyskryminującymi, tak. Funkcja utraty regresji logistycznej jest koncepcyjnie funkcją wszystkich punktów. Prawidłowo sklasyfikowane punkty bardzo niewiele dodają do funkcji straty, dodając więcej, jeśli znajdują się blisko granicy. Punkty w pobliżu granicy są zatem ważniejsze dla straty i dlatego decydują o tym, jak dobra jest granica. SVM wykorzystuje utratę zawiasów, która koncepcyjnie kładzie nacisk na punkty graniczne. Coś dalej niż najbliższe punkty nic nie przyczynia się do utraty z powodu „zawiasu” (maks.) Funkcji. Te najbliższe punkty to po prostu wektory pomocnicze. Dlatego faktycznie ogranicza się do wybrania granicy, która tworzy największy margines – odległość do najbliższego punktu. Teoria jest taka, że ​​przypadek agraniczny jest wszystkim, co naprawdę ma znaczenie dla uogólnienia. Minusem jest to, że utrata zawiasów nie jest różnicowalna, ale to tylko oznacza, że ​​potrzeba więcej matematyki, aby odkryć, jak zoptymalizować ją za pomocą mnożników Lagrange’a. Naprawdę nie radzi sobie z przypadkiem, gdy danych nie da się rozdzielić liniowo. Zmienne luzu to sztuczka, która pozwala na włączenie tej możliwości do problemu optymalizacji.

[28][Narzędzia]

PYTANIA

Interfejs API prognoz Google: Jakie metody szkolenia / przewidywania Google Interfejs API prognoz?

Nie mogę znaleźć żadnych szczegółów na temat algorytmów predykcyjnych działających za interfejsem API. Do tej pory zebrałem informacje, że pozwalają one podać kroki przetwarzania wstępnego w formacie PMML

ODPOWIEDZI:

Jeśli spojrzysz na specyfikacje PMML, zobaczysz, jakie masz opcje (takie jak ModelTree, NaiveBayes, Neural Nets i tak dalej).

Użytkownik może korzystać z różnych metod. Dokumentacja pomocy technicznej zawiera wskazówki i porady dotyczące tego, kiedy jeden lub drugi model jest najbardziej odpowiedni.

Google nie publikuje modeli, których używają, ale w szczególności nie obsługują modeli ze specyfikacji PMML. Jeśli przyjrzysz się uważnie dokumentacji na tej stronie, zauważysz, że wybór modelu w schemacie jest wyszarzony, co wskazuje, że jest to nieobsługiwana funkcja schematu. Dokumentacja wyjaśnia, że ​​domyślnie użyje modelu regresji do danych treningowych, który ma odpowiedzi numeryczne, oraz nieokreślonego modelu kategoryzacji dla danych szkoleniowych, których wynikiem są odpowiedzi tekstowe. Interfejs API Google Prediction obsługuje również modele hostowane (chociaż obecnie dostępnych jest tylko kilka modeli demonstracyjnych) oraz modele określone za pomocą transformacji PMML. Dokumentacja zawiera przykład modelu zdefiniowanego przez transformację PMML. (Na tej stronie znajduje się również informacja, że ​​PMML… Elementy modelu nie są obsługiwane). Standard PMML, który Google częściowo obsługuje, to wersja 4.0.1.

Czy potrzebujesz maszyny wirtualnej jako narzędzia do praktyki danych?

Jestem zupełnie nowy w dziedzinie nauki o danych, chcę się w to wgryźć, a jest tam tak wiele narzędzi. Na tych maszynach wirtualnych jest dużo oprogramowania, ale nie udało mi się znaleźć żadnego porównania obok siebie.

To początek moich badań, ale jeśli ktoś mógłby mi powiedzieć, że ktoś jest obiektywnie bardziej bogaty w funkcje, ma większą społeczność wsparcia i jest przydatny na początku, to by to bardzo pomogło: datasciencetoolKIT.org -> vm jest w chwiejnej chmurze (4 GB) i wydaje się bardziej „hip” z R, notebookiem iPython i innymi przydatnymi narzędziami wiersza poleceń (html-> txt, json-> xml itp.).

ODPOWIEDZI:

Potrzebujesz maszyny wirtualnej?

Należy pamiętać, że maszyna wirtualna jest emulacją oprogramowania własnej lub innej konfiguracji sprzętowej maszyny, która może obsługiwać systemy operacyjne. Mówiąc najprościej, działa jako warstwa interfejsu między wirtualnym systemem operacyjnym a własnym systemem operacyjnym, który następnie komunikuje się ze sprzętem niższego poziomu, aby zapewnić obsługę wirtualnego systemu operacyjnego. Oznacza to dla Ciebie:

Minusy

Wsparcie sprzętowe

Wadą technologii maszyn wirtualnych jest to, że obsługuje tylko sprzęt obsługiwany zarówno przez hiperwizora maszyny wirtualnej, jak i system operacyjny gościa. Nawet jeśli system operacyjny gościa obsługuje sprzęt fizyczny, widzi tylko sprzęt wirtualny prezentowany przez maszynę wirtualną. Drugim aspektem obsługi sprzętu wirtualnego jest sprzęt prezentowany systemowi-gościowi. Bez względu na sprzęt w hoście, sprzęt prezentowany w środowisku gościa jest zwykle taki sam (z wyjątkiem procesora, który pokazuje). Na przykład VMware GSX Server przedstawia kartę AMD PCnet32 Fast Ethernet lub zoptymalizowaną, zastrzeżoną kartę sieciową VMware, w zależności od wyboru. Karta sieciowa na hoście nie ma znaczenia. Serwer VMware GSX wykonuje translację między kartą sieciową środowiska gościa a kartą sieciową hosta. Jest to świetne do standaryzacji, ale oznacza również, że sprzęt hosta, którego VMware nie rozumie, nie będzie obecny w środowisku gościa.

Kara za wyniki

Technologia maszyn wirtualnych nakłada ograniczenie wydajności na uruchomienie dodatkowej warstwy powyżej fizycznego sprzętu, ale poniżej systemu operacyjnego gościa. Kara za wydajność różni się w zależności od użytego oprogramowania do wirtualizacji i uruchomionego oprogramowania gościa. To jest znaczące.

Plusy

Izolacja

Jednym z kluczowych powodów zastosowania wirtualizacji jest izolowanie aplikacji od siebie. Uruchamianie wszystkiego na jednej maszynie byłoby świetnie, gdyby wszystko działało, ale wiele razy powoduje niepożądane interakcje, a nawet bezpośrednie konflikty. Przyczyną często są problemy z oprogramowaniem lub wymagania biznesowe, takie jak potrzeba izolowanych zabezpieczeń. Maszyny wirtualne umożliwiają izolowanie każdej aplikacji (lub grupy aplikacji) we własnym środowisku piaskownicy. Maszyny wirtualne mogą działać na tej samej maszynie fizycznej (co upraszcza zarządzanie sprzętem IT), ale są wyświetlane jako niezależne maszyny dla uruchomionego oprogramowania. Do wszystkich celów i celów – z wyjątkiem wydajności, maszyny wirtualne są maszynami niezależnymi. Jeśli jedna maszyna wirtualna ulegnie awarii z powodu błędu aplikacji lub systemu operacyjnego, pozostałe będą nadal działać, zapewniając usługi potrzebne Twojej firmie do sprawnego funkcjonowania.

Normalizacja

Kolejną kluczową korzyścią zapewnianą przez maszyny wirtualne jest standaryzacja. Sprzęt prezentowany w systemie operacyjnym gościa jest w większości jednolity, zwykle z CPU jako jedynym komponentem, który jest „tranzytowy” w tym sensie, że gość widzi to, co znajduje się na hoście. Standaryzowana platforma sprzętowa zmniejsza koszty wsparcia i zwiększa udział zasobów informatycznych, które można przeznaczyć na realizację celów, które zapewnią firmie przewagę konkurencyjną. Maszyny hosta mogą być różne (jak w rzeczywistości często są, gdy sprzęt jest nabywany w różnym czasie), ale maszyny wirtualne będą wyglądać tak samo we wszystkich z nich.

Łatwość testowania

Maszyny wirtualne umożliwiają łatwe testowanie scenariuszy. Obecnie większość oprogramowania maszyn wirtualnych zapewnia migawki i funkcje przywracania. Oznacza to, że możesz zatrzymać maszynę wirtualną, utworzyć migawkę, wykonać więcej operacji na maszynie wirtualnej, a następnie cofać się raz za razem, aż zakończysz testowanie. Jest to bardzo przydatne do tworzenia oprogramowania, ale jest również przydatne do administrowania systemem. Administratorzy mogą wykonać migawkę systemu i zainstalować oprogramowanie lub wprowadzić zmiany konfiguracji, które, jak podejrzewają, mogą zdestabilizować system. Jeśli oprogramowanie instaluje się lub zmiany działają, administrator może zatwierdzić aktualizacje. Jeśli aktualizacje uszkodzą lub zniszczą system, administrator może je wycofać. Maszyny wirtualne ułatwiają także testowanie scenariuszy, umożliwiając sieci wirtualne. Na przykład w VMware Workstation można skonfigurować wiele maszyn wirtualnych w sieci wirtualnej z konfigurowalnymi parametrami, takimi jak utrata pakietów z powodu przeciążenia i opóźnienia. W ten sposób możesz przetestować aplikacje wrażliwe na czas lub wrażliwe na obciążenie, aby zobaczyć, jak działają pod obciążeniem symulowanego dużego obciążenia pracą.

Mobilność

Maszyny wirtualne można łatwo przenosić między maszynami fizycznymi. Większość dostępnego obecnie oprogramowania maszyn wirtualnych przechowuje cały dysk w środowisku gościa jako pojedynczy plik w środowisku hosta. Funkcje migawki i wycofywania są implementowane poprzez przechowywanie zmiany stanu w osobnym pliku w informacjach o hoście. Jeden plik reprezentuje cały dysk środowiska gościa, co sprzyja mobilności maszyn wirtualnych. Przeniesienie maszyny wirtualnej na inną maszynę fizyczną jest tak proste, jak przeniesienie pliku dysku wirtualnego i niektórych plików konfiguracyjnych na inną maszynę fizyczną. Wdrożenie innej kopii maszyny wirtualnej jest tym samym, co przeniesienie maszyny wirtualnej, tyle że zamiast przenoszenia plików, kopiujesz je.

Jakiej maszyny wirtualnej powinienem użyć, jeśli zaczynam?

Data Science Box lub Data Science Toolbox to twoje najlepsze nakłady, jeśli dopiero zaczynasz naukę danych. Mają podstawowe oprogramowanie, którego będziesz potrzebować, a podstawową różnicą jest wirtualne środowisko, w którym każde z nich może działać. DSB może działać na AWS, podczas gdy DST może działać na Virtual Box (najczęściej używanym narzędziu do maszyn wirtualnych).

ODPOWIEDZI :

W większości przypadków praktykujący badacz danych tworzy własne środowisko pracy na komputerze osobistym instalując preferowane pakiety oprogramowania. Zwykle jest to wystarczające i wydajne wykorzystanie zasobów obliczeniowych, ponieważ aby uruchomić maszynę wirtualną (VM) na głównej maszynie, musisz przeznaczyć na nią znaczną część pamięci RAM. Oprogramowanie będzie działało zauważalnie wolniej zarówno na głównej, jak i wirtualnej maszynie, chyba że będzie dużo pamięci RAM. Ze względu na ten wpływ na szybkość nie jest często używane maszyny wirtualne jako główne środowisko pracy, ale są dobrym rozwiązaniem w kilku przypadkach, gdy istnieje potrzeba dodatkowego środowiska pracy.

Maszyny wirtualne należy brać pod uwagę, gdy:

  1. Istnieje potrzeba łatwej replikacji wielu identycznych środowisk komputerowych podczas nauczania kursu lub prezentacji na konferencji.
  2. Istnieje potrzeba zapisania i odtworzenia dokładnego środowiska dla eksperymentu lub obliczenia.
  3. Istnieje potrzeba uruchomienia innego systemu operacyjnego lub przetestowania rozwiązania na narzędziu, które działa na innym systemie operacyjnym.
  4. Chcemy wypróbować pakiet narzędzi programowych przed zainstalowaniem ich na głównym komputerze. Na przykład. istnieje możliwość zainstalowania instancji Hadoop (CDH) na maszynie wirtualnej podczas kursu Wprowadzenie do Hadoop na Udacity.
  5. Maszyny wirtualne są czasami używane do szybkiego wdrażania w chmurze, takich jak AWS EC, Rackspace itp.

Maszyny wirtualne wymienione w pierwotnym pytaniu są wykonane jako łatwe do zainstalowania pakiety oprogramowania do analizy danych. Jest ich więcej niż dwa. Ten post na blogu autorstwa Jeroen Janssens zawiera porównanie co najmniej czterech:

  1. Zestaw narzędzi do analizy danych
  2. Wyszukiwanie w sieci społecznościowej
  3. Zestaw narzędzi do analizy danych
  4. Data Science Box

Księgowość przebiegów i wyników eksperymentów

Jestem naukowcem i lubię testować realne rozwiązania, więc często przeprowadzam wiele eksperymentów. Na przykład, jeśli obliczam wynik podobieństwa między dokumentami, może chciałbym wypróbować wiele miar. W rzeczywistości dla każdego pomiaru może być konieczne wykonanie kilku przebiegów w celu przetestowania wpływu niektórych parametrów. Do tej pory śledziłem wejścia przebiegów i ich wyniki, zapisując wyniki w plikach z tak dużą ilością informacji o wejściach. Problem polega na tym, że uzyskanie określonego wyniku staje się czasem wyzwaniem, nawet jeśli próbuję dodać informacje wejściowe do nazwy pliku. Próbowałem użyć arkusza kalkulacyjnego z linkami do wyników, ale to nie robi dużej różnicy. Jakich narzędzi / procesów używasz do prowadzenia ksiąg swoich eksperymentów?

Niedawno natknąłem się na podobny problem: jak zarządzać wydobywaniem różnych funkcji z dużego zestawu danych, nie wiedząc z góry, jakie byłyby wszystkie. (Nawet wielokrotne obliczanie średnich wartości byłoby kosztowne obliczeniowo.) Ponadto, w jaki sposób zarządzałbym prognozami na podstawie różnych zestawów cech? Oznacza to, że jeśli dodam nową funkcję, skąd mam wiedzieć, które modele trenować na nowych funkcjach? Mogłoby to szybko przerwać śnieżkę w ogromny bałagan. Moje obecne rozwiązanie polega na śledzeniu tego wszystkiego w lokalnej bazie danych NoSQL (MongoDB). Na przykład, mogę mieć funkcje kolekcji, z których każda pozycja ma nazwę, opis sposobu obliczenia funkcji, plik python, który uruchomił ekstrakcję itp. Podobnie modele kolekcji zawierają modele działające na danych. Każdy wpis może mieć nazwę, listę funkcji, które zostały użyte do wyszkolenia modelu, jego ostateczne parametry, przewidywane wartości w przetrzymywanym zestawie testowym, miary dotyczące wydajności modelu itp. Z mojego punktu widzenia ma to liczba korzyści:

* Zapisując prognozy, mogę je później wykorzystać w zestawieniach predykcyjnych.

* Ponieważ śledzę, które funkcje zostały użyte, wiem, które z nich wymagają ponownego przeszkolenia, gdy wydobywam więcej funkcji.

* Zapisując opisy modeli, zapewniam, że zawsze wiem, czego próbowałem. Nigdy nie muszę się zastanawiać: „Czy wypróbowałem LASSO z parametrami regularyzacji ustawionymi przez gridsearch CV?” Zawsze mogę to sprawdzić i przekonać się, jak udany.

Z twojego pytania wynika, że ​​możesz dostosować to podejście do przebiegu problemu. Zainstaluj Mongo lub inną wybraną bazę danych, a następnie zapisz każdy przebieg eksperymentalny, jego dane wejściowe, wyniki i wszystko, co chcesz śledzić w trakcie realizacji projektu. Przynajmniej powinno to być znacznie łatwiejsze do wykonania zapytania niż arkusza kalkulacyjnego.

Czy badacze danych używają Excela?

Uważałbym się za naukowca danych czeladnika. Jak większość (tak myślę), robiłem pierwsze wykresy i pierwsze agregacje w liceum i na studiach, używając Excela. Po ukończeniu, szkoły średniej i ,7-letniego doświadczenia zawodowego szybko podjąłem to, co ja uważamy za bardziej zaawansowane narzędzia, takie jak SQL, R, Python, Hadoop, LaTeX itp. Prowadzimy rozmowy kwalifikacyjne na stanowisko specjalisty ds. danych, a jeden kandydat reklamuje się jako „starszy specjalista ds. danych” (obecnie bardzo burzliwy termin) z +15  lata doświadczenia. Zapytany, jaki jest jego ulubiony zestaw narzędzi, odpowiedział, że to Excel. Wziąłem to za dowód, że nie był tak doświadczony, jak twierdziłby jego życiorys, ale nie był pewien. W końcu to, że nie jest to moje ulubione narzędzie, nie oznacza, że ​​nie należy ono do innych osób. Czy doświadczeni naukowcy danych używają programu Excel? Czy możesz założyć, że nie masz doświadczenia w korzystaniu z programu Excel?

Większość nietechnicznych osób często używa programu Excel jako zamiennika bazy danych. Myślę, że to źle, ale do zaakceptowania. Jednak ktoś, kto podobno ma doświadczenie w analizie danych, po prostu nie może używać programu Excel jako swojego głównego narzędzia (z wyjątkiem oczywistego zadania polegającego na pierwszym spojrzeniu na dane). Wynika to z faktu, że Excel nigdy nie był przeznaczony do tego rodzaju analiz, w związku z czym niezwykle łatwo jest popełniać błędy w programie Excel (nie oznacza to, że nie jest niewiarygodnie łatwo popełniać inny rodzaj błędów przy użyciu innych narzędzi, ale

Excel jeszcze bardziej pogarsza sytuację.) Podsumowując, czego nie ma i jest niezbędny do każdej analizy:

  1. Odtwarzalność. Analiza danych musi być odtwarzalna.
  2. Kontrola wersji. Dobry dla współpracy, a także dla powtarzalności. Zamiast używać xls, użyj csv (wciąż bardzo złożony i ma wiele przypadków brzegowych, ale parsery csv są obecnie dość dobre).
  3. Testowanie. Jeśli nie masz testów, Twój kod jest uszkodzony. Jeśli kod jest uszkodzony, analiza jest gorsza niż bezużyteczna.
  4. Konserwowalność.
  5. Dokładność. Dokładności numerycznej, dokładnej analizy dat, między innymi, naprawdę brakuje w Excelu.

Czy doświadczeni naukowcy danych używają programu Excel?

Widziałem kilku doświadczonych naukowców zajmujących się danymi, którzy używają Excela – albo ze względu na swoje preferencje, albo ze względu na specyfikę ich miejsca pracy i środowiska IT (na przykład wiele instytucji finansowych używa Excela jako głównego narzędzia przynajmniej do modelowania). Myślę jednak, że najbardziej doświadczeni badacze danych uznają potrzebę korzystania z narzędzi, które są optymalne dla określonych zadań, i stosują to podejście.

Czy możesz założyć, że nie masz doświadczenia w korzystaniu z programu Excel? Nie, nie możesz. Jest to następstwem moich wyżej wymienionych myśli. Analiza danych nie oznacza automatycznie dużych zbiorów danych – program Excel jest w stanie wykonać wiele prac związanych z analizą danych. Powiedziawszy to, jeśli specjalista ds. Danych (nawet doświadczony) nie ma wiedzy (przynajmniej podstawowej) o nowoczesnych narzędziach do analizy danych, w tym o dużych danych, jest to nieco niepokojące. Wynika to z faktu, że eksperymenty są głęboko zakorzenione w naturze nauki o danych, ponieważ eksploracyjna analiza danych jest jej istotną, a nawet kluczową częścią. Dlatego osoba, która nie ma ochoty eksplorować innych narzędzi w swojej dziedzinie, mogłaby zająć niższą pozycję wśród kandydatów w ogólnej zdolności do zajmowania stanowiska w dziedzinie danych (oczywiście jest to dość niejasne, ponieważ niektórzy ludzie bardzo szybko się uczą nowy materiał, a ponadto ludzie mogli nie mieć okazji zaspokoić swojego zainteresowania innymi narzędziami z różnych powodów osobistych lub w miejscu pracy). Podsumowując, uważam, że najlepsza odpowiedź doświadczonego badacza danych na pytanie dotyczące preferowanego narzędzia jest następująca: Moim preferowanym narzędziem jest narzędzie optymalne, czyli takie, które najlepiej pasuje do danego zadania.

Program Excel dopuszcza tylko bardzo małe dane i nie zawiera niczego, co byłoby wystarczająco przydatne i elastyczne do uczenia maszynowego, a nawet do kreślenia. Wszystko, co bym zrobił w Excelu, to wpatrywanie się w podzbiór danych, aby po raz pierwszy rzucić okiem na wartości, aby upewnić się, że nie umknie mi nic widocznego dla oka. Tak więc, jeśli jego ulubionym narzędziem jest Excel, może to sugerować, że rzadko zajmuje się uczeniem maszynowym, statystykami, większymi rozmiarami danych lub zaawansowanym drukowaniem. Ktoś taki jak ten nie nazwałbym Data Scientist. Oczywiście tytuły nie mają znaczenia i wiele zależy od twoich wymagań. W każdym razie nie oceniaj na podstawie doświadczeń lub CV. Widziałem CV i znałem ludzi za tym. Nie zakładaj. Przetestuj go! Powinieneś być wystarczająco dobry, aby przygotować test. Wykazano, że same wywiady są prawie bezużyteczne w celu ustalenia umiejętności (pokazują jedynie osobowość). Przygotuj bardzo prosty nadzorowany test uczenia się i pozwól mu korzystać z dowolnego narzędzia, jakie tylko zechce. A jeśli chcesz najpierw przesłuchać ludzi podczas wywiadu, zapytaj go o bardzo podstawowe, ale ważne informacje na temat statystyki lub uczenia maszynowego. Coś, o czym wie każdy z obecnych pracowników.