[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.

[27][Rekomendacje]

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

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

ODPOWIEDZI

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

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

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

gdzie [0] = styczeń

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Optymalizacja cen produktów wielopoziomowych i sezonowych

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

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

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

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

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

[26][Wizualizacja]

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

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

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

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

ODPOWIEDZI:

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

Wniosek

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

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

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

Jakie techniki wizualizacji najlepiej opisują zestaw danych rekomendacji?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

[025]Bazy Danych]

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

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

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

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

Pytania są następujące:

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

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

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

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

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

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

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

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

Czy to dobry przypadek dla NOSQL?

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

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

* unikalny identyfikator dla każdego zwierzęcia

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

* wolne pole tekstowe z dodatkowymi informacjami

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

* zdjęcie zwierzęcia

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

I:

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

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

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

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

* wykonaj wyszukiwanie tekstu w wolnym polu tekstowym

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

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

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

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

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

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

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

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

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

* całe kolumny można pominąć

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

Ma jednak również wady:

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

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

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

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

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

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

[24]Wybór funkcji

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

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

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

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

Z Wikipedii,

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

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

ODPOWIEDŹ:

Po prostu:

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

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

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

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

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

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

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

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

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

[023][NoSQL]

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

Systemy NoSQL:

* Specjalnie zaprojektowany dla dużego obciążenia

* Natywnie obsługuje skalowanie w poziomie

*Odporne na uszkodzenia

* Przechowuj dane w sposób zdenormalizowany

* Zwykle nie egzekwuj ścisłego schematu bazy danych

* Zwykle nie przechowuj danych w tabeli

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

W przeciwieństwie do RDBMS, system NoSQL:

* Nie gwarantuje spójności danych

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

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

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

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

ODPOWIEDŹ:

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

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

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

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

[022] Modelowanie predykcyjne

Najlepszy model regresji do prognozowania sprzedaży

PYTANIA:

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

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

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

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

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

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

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

Dane mogą wyglądać tak

data.PNG

ODPOWIEDŹ:

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

ODPOWIEDŹ:

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