[020][Definicje]

PYTANIE: Przetwarzanie równoległe i rozproszone

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

ODPOWIEDŹ:

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

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

Można by tak powiedzieć

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

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

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

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

[019] [Edukacja](2)

PYTANIE: Co sądzisz o certyfikatach Data Science?

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

* Programowanie R.

* czyszczenie i uzyskiwanie danych

*Analiza danych

* Powtarzalne badania

* Wnioskowanie statystyczne

* Modele regresji

*Nauczanie maszynowe

* Opracowywanie produktów danych

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

* Wprowadzenie do Data Science

* Egzamin Essentials Data Science

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

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

ODPOWIEDŹ:

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

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

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

[018][Edukacja]

PYTANIE: Kwalifikacje do programów doktoranckich

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

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

ODPOWIEDŹ:

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

ODPOWIEDŹ:

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

ODPOWIEDŹ:

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

[017][Search]

PYTANIA: Jak możemy skutecznie zmierzyć wpływ naszych decyzji dotyczących danych

Przepraszam, jeśli to bardzo szerokie pytanie, chciałbym wiedzieć, jak skuteczne jest testowanie A / B (lub inne metody) skutecznego mierzenia skutków decyzji projektowej. Na przykład możemy analizować interakcje użytkowników lub wyniki kliknięć, decyzje dotyczące zakupu / przeglądania a następnie zmodyfikuj / dostosuj wyniki przedstawione użytkownikowi. Moglibyśmy następnie przetestować skuteczność tej zmiany projektu, poddając losowo 10% użytkowników alternatywnemu modelowi, ale w jaki sposób jest to obiektywne? Jak uniknąć wpływania na użytkownika przez zmianę modelu, na przykład moglibyśmy zdecydować, że wyszukiwane hasła „David Beckham” prawdopodobnie dotyczą futbolu, więc wyniki wyszukiwania są tendencyjne w stosunku do tego, ale równie dobrze możemy powiedzieć, że jego styl życia jest równie istotny, ale to nigdy nie trafia do 10 najlepszych wyników, które są zwracane. Jestem ciekawy, jak sobie z tym poradzić i jak to skutecznie zmierzyć.

Uważam, że grozi ci przepchnięcie modelu, który Twoim zdaniem jest poprawny, a użytkownik zobowiązuje się, co staje się samospełniającą się przepowiednią.

ODPOWIEDŹ: W testach A / B stronniczość jest obsługiwana bardzo dobrze, zapewniając, że odwiedzający są losowo przypisywani do wersji A lub wersji B witryny. Tworzy to niezależne próbki pochodzące z tej samej populacji. Ponieważ grupy są niezależne i średnio różnią się jedynie wersją oglądanej witryny, test mierzy wpływ decyzji projektowej. Nieznaczne: teraz możesz argumentować, że grupa A lub grupa B mogą się różnić w zależności od grupy demograficznej. Zazwyczaj dzieje się tak przez przypadek. Do pewnego stopnia można temu zaradzić losowo dostosowaną kowariantną. Można temu zaradzić, dodając zmienne towarzyszące do modelu, który testuje efekt decyzji projektowej. Należy zauważyć, że wciąż trwa dyskusja na temat właściwego sposobu wykonania tego w społeczności statystyk. Zasadniczo testy A / B to zastosowanie Randomized Control Trial do projektowania stron internetowych. Niektóre osoby nie zgadzają się z dodaniem zmiennych towarzyszących do testu. Inni, tacy jak Frank Harrel (patrz Strategie modelowania regresji) argumentują za zastosowaniem zmiennych towarzyszących w takich modelach. Proponuję następujące sugestie: Zaplanuj badanie z wyprzedzeniem, aby zadbać o jak najwięcej źródeł stronniczości i różnorodności. Niech dane mówią same za siebie. Gdy zdobędziesz więcej danych (np. Dotyczących poszukiwań Davida Beckhama), pozwól, aby zdominowały twoje założenia dotyczące tego, jak powinny wyglądać dane (jak to, jak a posterior dominuje w analizie Bayesa, gdy wielkość próby staje się duża). Upewnij się, że Twoje dane są zgodne z założeniami modelu

[016] Podobieństwo

PYTANIE:

Miara podobieństwa oparta na wielu klasach z hierarchicznej taksonomii? Czy ktoś mógłby polecić dobrą miarę podobieństwa dla obiektów, które mają wiele klas, gdzie każda klasa jest częścią hierarchii? Załóżmy na przykład, że klasy wyglądają następująco:

[Pomiń blok kodu]

1 produkt

1.1 Jajka

1.1.1 Jajka kaczki

1.1.2 Jaja kurze

1.2 Mleko

1.2.1 Mleko krowie

1.2.2 Mleko kozie

2 Wypieki

2.1 Ciasta

2.1.1 Sernik

2.1.2 Czekolada

Obiekt może być oznaczony przedmiotami z powyższego na dowolnym poziomie, np .:

Omlet: jajka, mleko (1.1, 1.2)

Omlet z jajkiem kaczym: jaja kaczki, mleko (1.1.1, 1.2)

Sernik z koziej czekolady mlecznej: mleko kozie, sernik, czekolada (1.2.2, 2.1.1, 2.1.2)

Wołowina: produkcja (1)

Gdyby klasy nie były częścią hierarchii, prawdopodobnie spojrzałbym na podobieństwo cosinus (lub równoważne) między klasami przypisanymi do obiektu, ale chciałbym wykorzystać fakt, że różne klasy z tymi samymi rodzicami również mają pewną wartość podobieństwa (np. w powyższym przykładzie wołowina ma pewne małe podobieństwo do omletu, ponieważ oba mają przedmioty z klasy „1 produkt”). Jeśli to pomoże, hierarchia ma ~ 200 000 klas, z maksymalną głębokością 5.

ODPOWIEDŹ :

Chociaż nie mam wystarczającej wiedzy specjalistycznej, aby doradzić Ci w wyborze najlepszej miary podobieństwa, widziałem wiele z nich w różnych artykułach. Mam nadzieję, że poniższy zbiór prac badawczych będzie przydatny w określeniu optymalnej miary dla twoich badań. Należy pamiętać, że celowo załączyłem papiery, używając zarówno częstych, jak i Bayesowskie podejście do hierarchicznej klasyfikacji, w tym informacji o klasach, w celu zapewnienia szerszego zakresu.

PYTANIE : Zastosowania i różnice dla podobieństwa Jaccard i cosinusoe

Podobieństwo Jaccard i podobieństwo cosinusowe są dwoma bardzo częstymi pomiarami przy porównywaniu podobieństw między przedmiotami. Nie jestem jednak do końca jasne, w której sytuacji najlepiej wybrać inną.

Czy ktoś może pomóc w wyjaśnieniu różnic między tymi dwoma pomiarami (różnica w koncepcji lub zasadzie, a nie definicji lub obliczeniach) i ich preferowanych zastosowaniach?

ODPOWIEDŹ :

Podobieństwo Jaccard Podobieństwo jest podane przez  jacard.PNG, gdzie

p = liczba dodatnich atrybutów dla obu obiektów

q = liczba atrybutów 1 dla i i 0 dla j

r = liczba atrybutów 0 dla i i 1 dla j

Natomiast podobieństwo kosinusowe =  kosinus.PNG

gdzie A i B są wektorami obiektowymi.

Mówiąc prosto, w podobieństwie do kosinusa, liczba wspólnych atrybutów jest dzielona przez całkowitą liczbę możliwych atrybutów. Natomiast w podobieństwie Jaccard liczba wspólnych atrybutów jest dzielona przez liczbę atrybutów, które istnieją w co najmniej jednym z dwóch obiektów. I istnieje wiele innych miar podobieństwa, z których każda ma swoje własne czynniki decentralne. Podejmując decyzję, którego użyć, spróbuj pomyśleć o kilku reprezentatywnych przypadkach i ustal, który indeks dałby najbardziej użyteczne wyniki dla osiągnięcia twojego celu. Na przykład, jeśli masz dwa obiekty, każdy z 10 atrybutami, spośród możliwych 100 atrybutów. Ponadto mają one wszystkie 10 wspólnych cech. W takim przypadku indeks Jaccard będzie wynosił 1, a indeks cosinus wyniesie 0,001. Rozważmy teraz inny scenariusz, w którym obiekt A ma 10 atrybutów, a obiekt B ma 50 atrybutów, ale B ma wszystkie 10 atrybutów, które ma A.

Tutaj wskaźnik Jaccard będzie wynosił 0,2, a wskaźnik cosinus nadal będzie wynosił 0,001. Kluczowe pytanie brzmi zatem, czy ta dodatkowa informacja znalazła odzwierciedlenie w tym przypadku w indeksie Jaccard, czy jest bolesna, czy też nie ma znaczenia. Twój wybór będzie zależeć od tego, które jest najlepsze dla Ciebie

Indeks Cosinus może być użyty do zidentyfikowania plagiatu, ale nie będzie dobrym indeksem do identyfikacji stron lustrzanych w Internecie. Podczas gdy indeks Jaccard będzie dobrym indeksem do identyfikacji witryn lustrzanych, ale nie będzie tak świetny w łapaniu plagiatów makaronów (w większym dokumencie). Oczywiście są to zabawkowe przykłady ilustrujące tę kwestię. Stosując te wskaźniki, musisz dokładnie przemyśleć swój problem i wymyślić, jak zdefiniować podobieństwo.

ODPOWIEDŹ :  Podobieństwo Jaccard jest używane w dwóch typach przypadków binarnych:

  1. Symetryczny, gdzie 1 i 0 mają równe znaczenie (płeć, stan cywilny itp.)
  2. Asymetryczny, gdzie 1 i 0 mają różne poziomy ważności (pozytywny wynik testu na chorobę)

Podobieństwo cosinus jest zwykle używane w kontekście eksploracji tekstu do porównywania dokumentów lub wiadomości e-mail. Jeśli podobieństwo cosinus między dwoma wektorami terminów dokumentu jest wyższe, wówczas oba dokumenty mają większą liczbę wspólnych słów

Inna różnica to 1 – Współczynnik Jaccarda może być użyty jako miara podobieństwa lub odległości, podczas gdy podobieństwo kosinusowe nie ma takich konstrukcji. Podobną rzeczą jest odległość Tonimoto, która jest używana w taksonomii.

[015][ Analiza sieci społecznościowych]

PYTANIE: Jak stosować etykę w Data Science

Ostatnio doszło do furii, gdy Facebook przeprowadzał eksperymenty na swoich użytkownikach, aby sprawdzić, czy mogą zmienić emocje użytkownika, a teraz są w porządku. Chociaż nie jestem zawodowym badaczem danych, czytam o etyce nauki o danych i chciałbym wiedzieć, czy jest to coś, czego specjaliści są nauczani na poziomie akademickim (oczekiwałbym tego), czy coś takiego jest ignorowany lub jest lekko stosowany w świecie zawodowym. Zwłaszcza dla tych, którzy skończyli przypadkowo badaniami danych. Podczas gdy powiązany artykuł dotyczył integralności danych, omówiono także etykę moralną stojącą za zrozumieniem wpływu tworzonych modeli danych oraz wpływu tych modeli, które mogą mieć negatywne skutki, gdy są niewłaściwie używane (czasem nieświadomie) lub gdy modele są niedokładne, ponownie wywołujące niekorzystne wyniki. W artykule omówiono kodeks postępowania i wspomniano o kodeksie postępowania organizacji Data Science Association. Czy to coś, co jest w użyciu? Zasada 7 jest szczególnie interesująca (cytowana z ich strony internetowej):

(a) Osoba, która konsultuje się z naukowcem danych w sprawie możliwości nawiązania relacji klient-naukowiec w odniesieniu do sprawy, jest potencjalnym klientem.

(b) Nawet jeśli nie dojdzie do relacji klient-specjalista ds. danych, specjalista ds. danych, który poznał informacje od potencjalnego klienta, nie może ich wykorzystywać ani ujawniać.

(c) Analityk danych, o którym mowa w ust. (b), nie będzie świadczyć profesjonalnych usług z zakresu analizy danych na rzecz klienta, którego interesy są istotnie niekorzystne w stosunku do interesów potencjalnego klienta w tej samej lub zasadniczo powiązanej branży, jeżeli specjalista ds. danych otrzymał informacje od potencjalnego klienta w tej sprawie może to być bardzo szkodliwe dla tej osoby

Czy to jest praktykowane profesjonalnie? Wielu użytkowników ślepo akceptuje fakt, że otrzymujemy bezpłatną usługę (poczta, sieć społecznościowa, hosting obrazów, platforma blogów itp.) I zgadza się na umowę licencyjną, aby wyświetlać nam reklamy. Wreszcie, w jaki sposób jest to regulowane, często czytam o tym, że użytkownicy są uzbrojeni, gdy zmieniają się warunki usługi, ale wydaje się, że wymaga to organizacji wolności, działań grupowych lub trzeba  reagować na takie rzeczy, zanim coś się stanie. Nawiasem mówiąc, nie osądzam tutaj ani nie twierdzę, że wszyscy badacze danych zachowują się w ten sposób, interesuje mnie to, czego naucza się naukowo i profesjonalnie.

ODPOWIEDŹ :  „Uważam, że etyka w Data Science jest ważna. Istnieje zasadnicza różnica w korzystaniu z danych użytkowników w celu poprawy ich doświadczenia i wyświetlania odpowiednich reklam oraz w wykorzystywaniu danych użytkowników w celu nakłonienia ludzi do klikania reklam w celu uzyskania zysków pieniężnych. Osobiście lubię reklamy które dostarczają mi istotnych informacji, takich jak oferty dotyczące rzeczy, które i tak kupiłbym. Jednak wyświetlanie reklam odchudzających, ponieważ zostałem porzucony, jest przerażające i nieetyczne. Jak zawsze mówi mój przyjaciel Peter, „nie przejmuj się danymi”

[014][ Szereg czasowy]

Szeregi czasowe to dane obserwowane w czasie (w ciągłym czasie lub w dyskretnych przedziałach czasowych). Analiza szeregów czasowych obejmuje identyfikację trendów, rozpoznawanie wzorców czasowych, analizę spektralną i prognozowanie przyszłych wartości na podstawie przeszłości. Istotną cechą metod analizy szeregów czasowych (w przeciwieństwie do bardziej ogólnych metod analizy związków między danymi) jest uwzględnienie możliwości szeregowej korelacji (znanej również jako korelacja czasowa) między danymi. Dodatnia korelacja szeregowa oznacza, że kolejne obserwacje w czasie są blisko siebie, podczas gdy ujemna korelacja szeregowa oznacza, że kolejne obserwacje mają tendencję do oscylacji między skrajnościami. Analiza szeregów czasowych różni się także od analiz bardziej ogólnych procesów stochastycznych, koncentrując się na nieodłącznym kierunku czasu, tworząc potencjalną asymetrię między przeszłością a przyszłością

PYTANIE: Jak scalać dane miesięczne, dzienne i tygodniowe?

Trendy Google zwracają cotygodniowe dane, dlatego muszę znaleźć sposób na połączenie ich z danymi dziennymi / miesięcznymi. Do tej pory zrobiłem podział każdej serii na codzienne dane, na przykład:

z:

2013-03-03 – 2013-03-09 37

do:

2013-03-03 37 2013-03-04 37 2013-03-05 37 2013-03-06 37 2013-03-07 37 2013-03-08 37 2013-03-09 37

Ale to sprawia, że ​​mój problem jest bardzo skomplikowany. Próbowałem przewidzieć wyszukiwania w Google na podstawie wartości z ostatnich 6 miesięcy lub 6 wartości w danych miesięcznych. Codzienne dane oznaczałyby pracę nad 180 przeszłymi wartościami. (Mam 10 lat danych, więc 120 punktów w danych miesięcznych / 500+ w danych tygodniowych / 3500+ w danych dziennych). Innym podejściem byłoby „scalenie” danych dziennych w dane tygodniowe / miesięczne. Ale z tego procesu wynikają pewne pytania. Niektóre dane można uśrednić, ponieważ ich suma coś reprezentuje. Na przykład opady deszczu, ilość deszczu w danym tygodniu będzie sumą kwot na każdy dzień składający się na tygodnie.

W moim przypadku mam do czynienia z cenami, stawkami finansowymi i innymi rzeczami. W przypadku cen powszechne w mojej dziedzinie jest uwzględnianie wielkości wymiany, tak więc tygodniowe dane byłyby średnią ważoną. W przypadku stawek finansowych jest to nieco bardziej skomplikowane, ponieważ niektóre formuły wymagają budowania stawek tygodniowych na podstawie stawek dziennych. Jeśli chodzi o inne rzeczy, nie znam podstawowych właściwości. Myślę, że te właściwości są ważne, aby uniknąć bezsensownych wskaźników (na przykład średnia stóp fianialnych byłaby niecelowa).

Więc trzy pytania:

(1)W przypadku znanych i nieznanych właściwości, jak przejść od danych dziennych do tygodniowych / miesięcznych?

Czuję, że dzielenie danych tygodniowych / miesięcznych na dane dzienne, tak jak zrobiłem, jest nieco błędne, ponieważ wprowadzam ilości, które nie mają sensu w prawdziwym życiu. Więc prawie to samo pytanie:

(2)W przypadku znanych i nieznanych właściwości należy przejść od danych tygodniowych / miesięcznych do dziennych?

I na koniec:

(3)Jeśli otrzymamy dwa szeregi czasowe z różnymi krokami czasowymi, co jest lepsze: Korzystanie z najniższego lub największego kroku czasowego?

Myślę, że jest to kompromis między liczbą danych a złożonością modelu, ale nie widzę żadnego mocnego argumentu do wyboru między tymi opcjami.

Edycja: jeśli znasz narzędzie (w R Python, a nawet Excel), aby zrobić to łatwo, byłoby bardzo mile widziane.

ODPOWIEDZI :

(3) : W przypadku analizy szeregów czasowych należy wykonać obie czynności: uzyskać najwyższy możliwy poziom szczegółowości z codziennym zestawem danych, a także powtórzyć analizę z zestawem miesięcznym. Dzięki miesięcznemu zestawowi danych masz 120 punktów danych, co wystarcza, aby uzyskać model szeregów czasowych nawet przy sezonowości danych.

(1) : Aby uzyskać powiedzmy dane tygodniowe lub miesięczne z danych dziennych, możesz użyć funkcji wygładzania. W przypadku danych finansowych możesz użyć średniej ruchomej lub wygładzania wykładniczego, ale jeśli te nie działają dla twoich danych, możesz użyć funkcji wygładzania splajnu „smooth.spline” w R. Zwrócony model będzie miał mniej hałasu niż oryginalny dzienny zestaw danych, i można uzyskać wartości dla żądanych punktów czasowych. Wreszcie te punkty danych można wykorzystać w analizie szeregów czasowych.

(2) : Aby uzyskać codzienne dane, gdy masz dane miesięczne lub tygodniowe, możesz użyć interpolacji. Po pierwsze, należy znaleźć równanie opisujące dane. W tym celu należy wykreślić dane (np. Cenę w czasie). Kiedy czynniki są znane, na to równanie powinny mieć wpływ te czynniki. Gdy czynniki nie są znane, możesz użyć równania najlepszego dopasowania. Najprostsza byłaby funkcja liniowa lub częściowa funkcja liniowa, ale w przypadku danych finansowych nie zadziała to dobrze. W takim przypadku należy rozważyć częściową interpolację splajnu sześciennego. W R istnieje metoda wykonywania interpolacji danych szeregów czasowych. Tutaj utworzyłbyś wektor z powiedzonymi wartościami tygodniowymi i NA w lukach dla wartości dziennych, a następnie używałeś funkcji „interpNA”, aby uzyskać interpolowane wartości dla NA. Jednak ta funkcja wykorzystuje funkcję „przybliżoną” do uzyskania interpolowanych wartości, która stosuje interpolację liniową lub stałą. Aby wykonać interpolację splajnu sześciennego w R, należy zamiast tego użyć funkcji „splinefun”. Należy pamiętać, że modele szeregów czasowych zwykle dokonują pewnego rodzaju uśrednienia, aby prognozować przyszłe wartości, niezależnie od tego, czy chodzi między innymi o wygładzanie wykładnicze lub metody zintegrowanej średniej ruchomej AutoRegressive (ARIMA). Tak więc model przedziałów czasowych do prognozowania wartości dziennych może nie być najlepszym wyborem, ale modele tygodniowe lub miesięczne mogą być lepsze.

ODPOWIEDŹ :

(1), (2):  Ta sama odpowiedź dla obu: nie możesz tego zrobić dla nieznanych właściwości, a dla znanych właściwości będzie to zależeć od sposobu obliczenia wartości. Jak wspomniałeś: (średnia stopa finansowa byłaby na przykład pozbawiona sensu). Nie ma jednej transformacji, która byłaby odpowiednia we wszystkich przypadkach, niezależnie od tego, czy właściwości / wartości są znane, czy nieznane. Nawet przy znanych właściwościach prawdopodobnie będziesz potrzebować unikalnej transformacji dla każdego typu: średnia, mediana, tryb, min, maks, wartość logiczna itp.

(3) : Gdy tylko jest to możliwe, staraj się zachować pełną szczegółowość najmniejszego możliwego kroku. Zakładając, że wiesz, jak przekształcić wartości, zawsze możesz zrolować kroki (np. Z dnia na miesiąc, z miesiąca na rok) … ale niekoniecznie będziesz w stanie odtworzyć mniejsze kroki od większych po stratnej konwersji.

[013] [Skalowalność]

[013] [Skalowalność]

PYTANIE: Narzędzia do nauki danych za pomocą Scali

Wiem, że Spark jest w pełni zintegrowany ze Scalą. Jest to przypadek użycia specjalnie dla dużych zestawów danych. Jakie inne narzędzia mają dobre wsparcie dla Scali? Czy Scala najlepiej nadaje się do większych zestawów danych? A może nadaje się również do mniejszych zestawów danych?

ODPOWIEDŹ: Krótka odpowiedź. – Scala działa zarówno na małych, jak i dużych danych, ale ich tworzenie i rozwój jest motywowany potrzebą czegoś skalowalnego. Scala to skrót od „Scalable Language”.

Długa odpowiedź – Scala to funkcjonalny język programowania, który działa na JVM. Część „funkcjonalna” to podstawowa różnica w języku, która sprawia, że ​​myślisz inaczej o programowaniu. Jeśli podoba ci się ten sposób myślenia, pozwala on szybko pracować z małymi danymi. Niezależnie od tego, czy ci się to podoba, czy nie, języki funkcjonalne są zasadniczo łatwiejsze do masowego skalowania. Kawałek jvm jest również ważny, ponieważ jvm jest zasadniczo wszędzie, a zatem kod Scala może działać w zasadzie wszędzie. (Zauważ, że jest wiele innych języków napisanych na Jvm i wiele innych funkcjonalnych języków programowania, a języki poza Scalą pojawiają się na obu listach.) Ten wykład daje dobry przegląd motywacji stojących za Scalą.

Re: inne narzędzia, które mają dobre wsparcie Scala:

Jak już wspomniałeś, Spark (dystrybuowalne przetwarzanie wsadowe lepiej w algorytmach iteracyjnych niż jego odpowiednik) jest duży. Wraz z Spark dostarczane są biblioteki Mllib do uczenia maszynowego i GraphX ​​do wykresów.

Zasadniczo nie mogę powiedzieć, czy istnieje konkretny przypadek użycia, dla którego kopiesz (jeśli tak, uczyń go częścią swojego pytania), lub po prostu chcę przeprowadzić ankietę na temat narzędzi do dużych zbiorów danych i zdarzyć się, że znasz trochę Scalę i chcesz zacząć od tego.

ODPOWIEDŹ: ScalaNLP to zestaw bibliotek do uczenia maszynowego i obliczeń numerycznych z obsługą typowych zadań przetwarzania języka naturalnego. http://www.scalanlp.org/

ODPOWIEDŹ: Słuchając prezentacji Martina Oderskiego, twórcy Scali, jest on szczególnie odpowiedni do budowania wysoce skalowalnych systemów poprzez wykorzystanie funkcjonalnych konstrukcji programistycznych w połączeniu z orientacją obiektową i elastyczną składnią. Przydaje się również do opracowywania małych systemów i szybkiego prototypowania, ponieważ zajmuje mniej wierszy kodu niż niektóre inne języki i ma tryb interaktywny do szybkiego przesyłania informacji zwrotnych. Jednym z godnych uwagi frameworków Scala jest Akka, która wykorzystuje model aktora obliczeń współbieżnych. Wiele prezentacji Odersky’ego znajduje się na YouTube, a na wiki.scala-lang.org znajduje się lista narzędzi zaimplementowanych w Scali. Domniemany jest fakt, że narzędzia i frameworki napisane w Scali z natury mają integrację Scali i zwykle Scala API. Następnie można dodawać inne interfejsy API w celu obsługi innych języków zaczynających się na Javie, ponieważ Scala jest już zintegrowana i faktycznie zależy od Javy. Jeśli narzędzie lub środowisko nie jest napisane w Scali, jest mało prawdopodobne, aby oferowało jakiekolwiek wsparcie dla Scali. Dlatego w odpowiedzi na twoje pytanie wskazałem narzędzia i ramy napisane w Scali, a Spark jest jednym z przykładów. Jednak Scala ma obecnie niewielki udział w rynku, ale jego wskaźnik adopcji rośnie, a wysoka stopa wzrostu Spark to zwiększy. Powodem, dla którego używam Scali jest to, że API Spark dla Scali jest bogatsze niż API Java i Python. Głównym powodem, dla którego wolę Scalę, jest to, że jest o wiele bardziej ekspresyjna niż Java, ponieważ umożliwia i ułatwia korzystanie z funkcji jako obiektów i wartości przy jednoczesnym zachowaniu modułowej orientacji obiektowej, co umożliwia tworzenie złożonych i poprawnych programów z dużo mniejszym kodem niż Java, które Wolałem ze względu na szerokie zastosowanie, przejrzystość i doskonałą dokumentację.

[012][Początkujący]

PYTANIA

Jak uczyć się samemu o danych?

Jestem samoukiem i jestem programistą stron internetowych i jestem zainteresowany nauczeniem się danych, ale nie jestem pewien, jak zacząć. W szczególności zastanawiam się:

  1. Jakie dziedziny istnieją w dziedzinie nauki o danych? (np. sztuczna inteligencja, uczenie maszynowe, analiza danych itp.)
  2. Czy są jakieś zajęcia online, które ludzie mogą polecić?
  3. Czy są dostępne projekty, na których mogę ćwiczyć (np. Otwarte zestawy danych).
  4. Czy są jakieś certyfikaty, o które mogę się ubiegać lub które należy wypełnić?

ODPOWIEDŹ: To dość szerokie pytanie, więc prawdopodobnie uzyskasz wiele odpowiedzi. Oto moje zdanie.

  1. Nauka o danych jest interdyscyplinarną dziedziną, o której powszechnie myśli się, że łączy klasyczną statystykę, uczenie maszynowe i informatykę (znowu, to zależy od tego, kogo zapytasz, ale inne mogą obejmować tutaj inteligencję biznesową, a także możliwą wizualizację informacji lub odkrywanie wiedzy; przykład, artykuł w Wikipedii na temat nauki o danych). Dobry specjalista od danych ma również umiejętność rozpoznawania cech charakterystycznych dla domeny, w której pracują. Na przykład naukowiec zajmujący się analizą danych szpitalnych jest znacznie bardziej skuteczny, jeśli ma doświadczenie w informatyce biomedycznej.
  2. Jest tu wiele opcji, w zależności od rodzaju analizy, którą jesteś zainteresowany. Kurs Andrew Ng to pierwszy zasób wymieniony przez większość, i słusznie. Jeśli interesujesz się uczeniem maszynowym, to świetne miejsce początkowe. Jeśli chcesz dogłębnie zgłębić matematykę, Nauka statystyczna to doskonały, ale dość zaawansowany tekst. Istnieje wiele kursów online dostępnych oprócz Ng, ale powinieneś wybrać je z rozwagą dla rodzaju analizy, na której chcesz się skupić i / lub domeny, w której planujesz pracować.
  3. Kaggle. Zacznij od kaggle, jeśli chcesz zagłębić się w rzeczywiste problemy analityczne. Jednak w zależności od Twojego poziomu wiedzy może być lepiej zacząć od prostszego. Project Euler to świetne źródło informacji na temat jednorazowych problemów treningowych, które wciąż używam jako rozgrzewki.
  4. Ponownie, prawdopodobnie zależy to od dziedziny, w której chcesz pracować. Wiem jednak, że Coursera oferuje certyfikat nauki danych, jeśli ukończysz serię kursów związanych z nauką danych. To prawdopodobnie dobre miejsce na rozpoczęcie.

Powodzenia! Jeśli masz jakieś inne pytania, nie wahaj się zadać mi komentarza, a ja postaram się pomóc!

[011][Data Cleaning](2)

PYTANIE: Radzenie sobie z zestawem treningowym o wątpliwej jakości

Większość materiałów, które przeczytałem w przeszłości, zwykle zakłada, że ​​zestaw treningowy jest bezbłędny. Wydaje się jednak, że tak nie jest w przypadku tego, co otrzymałem. Dane, które mają zostać przesłane do zestawu treningowego, są często wątpliwe (nawet nie wiem, jak zacząć oddzielać dobre od złych). Spędziłem znacznie więcej czasu próbując wstępnie przetworzyć pliki w celu zwiększenia ważności danych, niż budować prototyp. Zrzuciłem tylko część danych, które mają być lepsze. Wciąż są dane z innych źródeł, które uzupełniają brakującą część pierwszego zestawu danych treningowych. Biorąc pod uwagę ilość danych, praktycznie nie mogę poświęcić im zbyt wiele czasu. Pytanie brzmi: w jaki sposób ludzie radzą sobie z naprawdę okropnymi, niespójnymi danymi w prawdziwym życiu (zakładając, że pracuję z adresami, w których ludzie często piszą zły kod pocztowy z powodu złego planowania miasta lub braku jasnych instrukcji, źle wpisują nazwę dzielnicy, plus dane zostały „automatycznie skorygowane” przez program Excel, tak że „1-2” staje się „1 lutego” itp.)? W szczególności, w jaki sposób mogę zapewnić jakość klasyfikatora pociągu, biorąc pod uwagę, że zestaw szkoleniowy (i zestaw krzyżowej weryfikacji) ma wątpliwą jakość?

ODPOWIEDŹ: Witamy w prawdziwym świecie nauki o danych. Tutaj zestawy danych nie są tak czyste, jak myślałeś podczas tych kursów / samouczków online. Są super dopracowane i dopracowane. Ale dane ze świata rzeczywistego nie są takie. Etap czyszczenia nazywany jest etapem wstępnego przetwarzania danych. Tak więc niektóre fajne techniki czyszczenia danych to:

  1. Eliminacja kolumn / predyktorów zerowej wariancji: kolumny te nie są ważne i powodują awarię modelu i dopasowania. Wyeliminowanie ich byłoby więc całkowicie sensowne.
  2. Korelowane predyktory: Zmniejszenie poziomu korelacji między predyktorami byłoby bardzo dobrym krokiem w procesie wstępnego przetwarzania.
  3. Skalowanie: Musisz wiedzieć, dlaczego skalowanie jest ważne podczas procesu wstępnego.
  4. Transformacje predyktorów

ODPOWIEDŹ: Możesz użyć technik częściowo nadzorowanego uczenia, w którym masz mały czysty zestaw treningowy i niektóre brudne dane. Rozbudowujesz swoją bazę danych, oceniając, jak dobre są inne dane i włączasz „najlepsze” punkty danych do swojego zestawu treningowego