[BIG DATA] GLOSARIUSZ (XI) : SERIALIZACJA

Podczas pracy nad przekształcaniem danych w coś użytecznego, będzie musiało przechodzić pomiędzy różnymi systemami i prawdopodobnie będzie przechowywane w plikach w różnych punktach. Wszystkie te operacje wymagają pewnego rodzaju serializacji, zwłaszcza że różne etapy przetwarzania prawdopodobnie będą wymagać różnych języków i interfejsów API. Gdy masz do czynienia z bardzo dużą liczbą rekordów, wybory dotyczące sposobu ich reprezentowania i przechowywania mogą mieć ogromny wpływ na wymagania dotyczące pamięci i wydajność.

JSON

Chociaż jest to dobrze znane większości programistów internetowych, JSON (JavaScript Object Notation) dopiero niedawno pojawił się jako popularny format przetwarzania danych. Jego największą zaletą jest to, że mapuje ona trywialnie do istniejących struktur danych w większości języków i ma układ, który jest wystarczająco restrykcyjny, aby utrzymać kod parsowania i projekt schematu prosty, ale z wystarczającą elastycznością, aby wyrazić większość danych w dość naturalny sposób. Jego prostota wiąże się jednak z pewnymi kosztami, szczególnie w zakresie wielkości magazynu. Jeśli reprezentujesz listę obiektów odwzorowujących klucze do wartości, najbardziej intuicyjnym sposobem byłoby użycie indeksowanej tablicy tablic asocjacyjnych. Oznacza to, że ciąg znaków każdego klucza jest przechowywany wewnątrz każdego obiektu, co wiąże się z dużą liczbą zduplikowanych ciągów, gdy liczba unikalnych kluczy jest mała w porównaniu do liczby wartości. Oczywiście są na to ręczne sposoby, zwłaszcza że reprezentacje tekstowe zwykle kompresują się dobrze, ale wiele innych podejść do serializacji będę mówić o próbie połączenia elastyczności JSON z mechanizmem przechowywania, który jest bardziej wydajny pod względem przestrzeni.

BSON

Pierwotnie stworzony przez zespół za MongoDB i nadal używany w silniku pamięci, specyfikacja BSON (Binary JSON) może reprezentować dowolny obiekt JSON w postaci binarnej. Co ciekawe, głównym celem projektu nie była wydajność przestrzenna, ale szybkość konwersji. Dużo czasu analizowania można zapisać podczas ładowania i zapisywania, przechowując liczby całkowite i podwójne w ich natywnych reprezentacjach binarnych, a nie jako ciągi tekstowe. Istnieje również natywna obsługa typów, które nie mają odpowiednika w JSON, jak bloby surowych informacji binarnych i dat.

Thrift

Dzięki rozwiązaniu Thrift możesz wstępnie zdefiniować zarówno strukturę obiektów danych, jak i interfejsy, z których będziesz korzystać, aby z nimi współdziałać. System generuje następnie kod do serializacji i deserializacji danych i funkcji pośredniczących, które implementują punkty wejścia do interfejsów. Generuje wydajny kod dla szerokiej gamy języków, a pod maską oferuje wiele opcji bazowego formatu danych bez wpływu na warstwę aplikacji. Okazało się, że jest popularnym językiem IDL (Interface Definition Language) dla projektów infrastruktury Open Source, takich jak Cassandra i HDFS. Jednak dla mniejszych zespołów pracujących przy lekkich projektach może wydawać się nieco przytłaczający. Podobnie jak języki napisane statycznie, użycie predefiniowanego IDL wymaga poświęcenia trochę czasu w zamian za solidną dokumentację, przyszłe zapobieganie błędom i wzrost wydajności. To sprawia, że ​​wybór jest bardzo zależny od oczekiwanego czasu życia i liczby programistów w twoim projekcie.

Avro

Nowszy konkurent do Thrift, a także pod parasolem Apache, Avro oferuje podobne funkcjonalność, ale z bardzo różnymi kompromisami w zakresie projektowania. Nadal definiujesz schemat swoich danych i interfejsów, z których będziesz korzystać, ale zamiast być trzymany osobno w każdym programie, schemat jest przesyłany wraz z danymi. Dzięki temu można napisać kod, który może obsługiwać dowolne struktury danych, a nie tylko typy znane podczas tworzenia programu. Ta elastyczność wiąże się z kosztem przestrzeni i wydajności podczas kodowania i dekodowania informacji. Schematy Avro są definiowane przy użyciu JSON, który może wydawać się nieco nieporęczny w porównaniu do bardziej specyficznych dla domeny IDL, chociaż istnieje eksperymentalna obsługa bardziej przyjaznego dla użytkownika formatu znanego jako Avro IDL.

Bufory protokołów

Stosowanie systemu opartego na otwartych źródłach, którego Google używa wewnętrznie w większości swoich projektów, to stos buforów protokołów to IDL podobny do oszczędzania. Jedną różnicą jest to, że Thrift zawiera kod klienta sieciowego i kod serwera w wygenerowanych stubach, podczas gdy protobuf ogranicza swój zakres do czystego serializowania i deserializacji. Największym wyróżnikiem tych dwóch projektów jest prawdopodobnie ich baza deweloperów. Chociaż kod jest open source, Google jest głównym źródłem i współudziałem w buforowaniu protokołów, podczas gdy Thrift to bardziej klasyczny projekt oparty na tłumie. Jeśli Twoje wymagania skłaniają się ku stabilności i solidnej dokumentacji, bufory protokołów będą atrakcyjne, natomiast jeśli potrzebujesz bardziej otwartego podejścia opartego na społeczności, Thrift będzie o wiele bardziej atrakcyjny.

[BIG DATA] GLOSARIUSZ (X) : NABYCIE

Większość interesujących publicznych źródeł danych jest słabo zorganizowanych, pełnych hałasu i trudno dostępnych. Prawdopodobnie spędzam więcej czasu na przekształcaniu niechlujnych danych źródłowych w coś użytecznego niż w pozostałych procesach analizy danych, więc jestem wdzięczny, że pojawia się wiele narzędzi, które mogą pomóc.

Google Refine

Google Refine to aktualizacja narzędzia Freebase Gridworks do czyszczenia dużych, nieuporządkowanych arkuszy kalkulacyjnych. Został zaprojektowany, aby ułatwić naprawę najczęstszych błędów napotkanych w tworzonych przez ludzi zestawach danych. Na przykład łatwo jest wykryć i poprawić typowe problemy, takie jak literówki lub niespójności w wartościach tekstowych, i zmienić komórki z jednego formatu na inny. Istnieje również bogate wsparcie dla łączenia danych przez wywoływanie interfejsów API z danymi zawartymi w istniejących wierszach w celu rozszerzenia arkusza kalkulacyjnego o informacje z zewnętrznych źródeł. Dzięki funkcji “Refine” nie można zrobić niczego, czego nie można zrobić za pomocą innych narzędzi, ale jego moc wynika z tego, jak dobrze obsługuje typowy proces wypakowywania i przekształcania. Wydaje się, że to dobry krok w abstrakcji, proces pakowania, który zwykle wymaga wielu kroków w języku skryptowym lub pakietu arkuszy kalkulacyjnych w pojedyncze operacje z rozsądnymi wartościami domyślnymi.

Needlebase

Needlebase zapewnia interfejs “wskaż i kliknij” do wydobywania uporządkowanych informacji ze stron internetowych. Jako użytkownik wybierasz elementy na przykładowej stronie, która zawiera dane, które Cię interesują, a następnie narzędzie wykorzystuje zdefiniowane wzorce do wyciągania informacji z innych stron w witrynie o podobnej strukturze. Na przykład możesz wyodrębnić nazwy produktów i ceny z witryny zakupowej. Za pomocą tego narzędzia możesz znaleźć stronę pojedynczego produktu, wybrać nazwę produktu i cenę, a następnie te same elementy zostaną pobrane dla każdej innej strony zindeksowanej z witryny. Polega ona na tym, że większość stron internetowych generuje się poprzez połączenie szablonów z informacjami pobranymi z bazy danych, a więc ma bardzo spójną strukturę. Po zebraniu danych oferuje kilka funkcji przypominających usługę Google Refine dla usuwania duplikatów i czyszczenia danych. Podsumowując, jest to bardzo potężne narzędzie służące do przekształcania treści internetowych w uporządkowane informacje o bardzo przystępnym interfejsie.

ScraperWiki

ScraperWiki to hostowane środowisko do pisania zautomatyzowanych procesów skanowania publicznego strony internetowe i wyciągnąć uporządkowane informacje ze stron, które opublikowały. Obsługuje cały kod, który normalnie musisz napisać, aby obsługiwać indeksowanie strony internetowe, zapewnia prosty edytor internetowy dla skryptów Ruby, Python lub PHP, oraz automatycznie uruchamia twój robot jako proces w tle. Co naprawdę lubię, to sposób, w jaki większość skryptów jest publikowanych na stronie, więc nowi użytkownicy mają wiele istniejących przykładów na początek, a ponieważ strony internetowe zmieniają swoje struktury, popularne starsze skrobaczki mogą być aktualizowane przez społeczność.

[BIG DATA] GLOSARIUSZ (IX) : WIZUALIZACJA

Jednym z najlepszych sposobów przekazania znaczenia danych jest wyodrębnienie ważnych części i przedstawienie ich graficznie. Jest to przydatne zarówno do użytku wewnętrznego, jako technika eksploracji w celu wykrycia wzorów, które nie są oczywiste z surowych wartości, oraz jako sposób na zwięzłe przedstawienie użytkownikom końcowym zrozumiałych wyników. Ponieważ sieć przerzuciła wykresy ze statycznych obrazów na interaktywne obiekty, linie między prezentacją a eksploracją zostały zamazane. Możliwości nowego medium doprowadziły do ​​niektórych fantastycznych nowych narzędzi, które omówię w tej sekcji.

Gephi

Gephi jest aplikacją typu open source w Javie, która tworzy wizualizacje sieci z danych nieprzetworzonych i wykresów węzłowych. Jest to bardzo przydatne do zrozumienia informacji o sieciach społecznościowych; jeden z założycieli projektu został wynajęty przez LinkedIn, a Gephi jest teraz używany do wizualizacji LinkedIn. Istnieje kilka różnych algorytmów układu, z których każdy ma wiele parametrów, które można dostroić w celu uporządkowania pozycji węzłów w danych. Jeśli chcesz dokonać ręcznych zmian danych wejściowych lub pozycjonowania, możesz to zrobić za pomocą laboratorium danych, a gdy już masz podstawowy wykres, karta podglądu pozwala dostosować dokładny wygląd renderowanego wyniku. Chociaż Gephi jest najbardziej znany ze swojego interfejsu okna, możesz również skryptować wiele jego funkcji za pomocą zautomatyzowanych narzędzi backendu, korzystając z biblioteki narzędziowej.

GraphViz

GraphViz to narzędzie do wizualizacji wykresów sieciowych w wierszu poleceń. Jest głównie używany ogólny schemat blokowy i schematy drzewa, a nie mniej ustrukturyzowane wykresy, z których znany jest Gephi. Powoduje również domyślnie stosunkowo brzydkie wyniki, ale istnieją opcje, aby poprawić czcionki, renderowanie linii i cienie. Pomimo tych kosmetycznych wad, GraphViz wciąż jest bardzo potężnym narzędziem do tworzenia diagramów z danych. Specyfikacja pliku DOT została przyjęta jako format wymiany przez wiele programów, co ułatwia podłączenie do wielu narzędzi i ma zaawansowane algorytmy rozmieszczania nawet ogromnej liczby węzłów.

Processing

Początkowo znany jako język programowania graficznego do tworzenia interaktywnych wizualizacji internetowych. Zgromadził bogaty ekosystem bibliotek, przykładów i dokumentacji, więc możesz znaleźć istniejący szablon dla rodzaju wyświetlania informacji potrzebnych do twoich danych.

Protovis

Protovis to framework JavaScript pełen gotowych do użycia komponentów wizualizacyjnych, takich jak wykresy słupkowe i liniowe, ukierunkowane na siłę układy sieci i inne typowe elementy składowe. Jest świetny jako interfejs wysokiego poziomu do zestawu narzędzi do istniejących szablonów wizualizacyjnych, ale w porównaniu do przetwarzania nie jest łatwo zbudować zupełnie nowe komponenty. Jego twórcy ogłosili niedawno, że Protovis nie będzie już aktywnie rozwijany, ponieważ koncentrują swoje wysiłki na bibliotece D3, która oferuje podobną funkcjonalność, ale w stylu mocno pod wpływem nowej generacji frameworków JavaScript, takich jak jQuery.

Fusion Table

Google stworzył zintegrowany system online, który pozwala przechowywać duże ilości dane w tabelach podobnych do arkuszy kalkulacyjnych i udostępnia narzędzia do przetwarzania i wizualizacji informacji. Jest to szczególnie dobre w przekształcaniu danych geograficznych w atrakcyjne mapy, z możliwością przesyłania własnych niestandardowych konturów KML dla obszarów takich jak okręgi polityczne. Dostępny jest również pełen zestaw tradycyjnych narzędzi do tworzenia wykresów, a także wiele różnych opcji do wykonywania obliczeń na danych. Fusion Tables to potężny system, ale zdecydowanie przeznaczony dla użytkowników dość technicznych; sama różnorodność formantów może na początku być zastraszająca. Jeśli szukasz elastycznego narzędzia do rozpoznawania dużych ilości danych, warto podjąć wysiłek.

Tableau

Pierwotnie tradycyjna aplikacja komputerowa do rysowania wykresów i wizualizacji, Tableau dodała wiele wsparcia dla publikacji online i tworzenia treści. Osadzone wykresy stały się bardzo popularne wśród organizacji prasowych w Internecie, ilustrując wiele historii. Obsługa danych geograficznych nie jest tak szeroka, jak obsługa Fusion, ale Tableau może tworzyć style map, których nie może wyprodukować produkt Google. Jeśli potrzebujesz zaawansowanych funkcji interfejsu pulpitu lub koncentrujesz się na tworzeniu grafiki do profesjonalnej publikacji, Tableau to dobry wybór.

Klasyfikacja: Filtrowanie spamu

Klasyfikacja Binarna

Na samym końcu poprzedniej części szybko przedstawiliśmy przykład klasyfikacji. Użyliśmy wysokości i ciężarów, aby przewidzieć, czy dana osoba jest mężczyzną czy kobietą. Na naszym przykładowym wykresie byliśmy w stanie narysować linię dzielącą dane na dwie grupy: jedną grupę, w której przewidzieliśmy „mężczyznę”, a drugą grupę, w której przewidzieliśmy „kobietę”. Linia ta została nazwana hiperpłaszczyzną oddzielającą, ale odtąd będziemy używać terminu „granica decyzji”, ponieważ będziemy pracować z danymi, których nie można poprawnie sklasyfikować przy użyciu tylko linii prostych. Stworzenie narzędzi ogólnego przeznaczenia, które pozwalają nam radzić sobie z problemami, w których granica decyzji nie jest pojedynczą linią, jest jednym z wielkich osiągnięć uczenia maszynowego. W szczególności jedno podejście, na którym skupimy się później, nazywa się sztuczką jądra, która ma niezwykłą właściwość polegającą na tym, że możemy pracować ze znacznie bardziej wyrafinowanymi granicami decyzyjnymi bez prawie dodatkowych kosztów obliczeniowych. Ale zanim zaczniemy rozumieć, w jaki sposób te granice decyzyjne są ustalane w praktyce, przejrzyjmy niektóre z wielkich pomysłów w klasyfikacji. Zakładamy, że mamy zestaw oznaczonych przykładów kategorii, które chcemy nauczyć się identyfikować. Te przykłady składają się z etykiety, którą nazwiemy również klasą lub typem, oraz szeregu mierzonych zmiennych opisujących każdy przykład. Nazwiemy te funkcje pomiarowe lub predyktory. Kolumny wzrostu i wagi, z którymi pracowaliśmy wcześniej, są przykładami funkcji, których moglibyśmy użyć do odgadnięcia etykiet „męskich” i „żeńskich”, z którymi wcześniej pracowaliśmy. Przykłady klasyfikacji można znaleźć gdziekolwiek ich szukasz:

  • Czy biorąc pod uwagę wyniki mammografii, pacjentkami ma raka piersi?
  • Czy pomiary ciśnienia krwi sugerują, że u pacjenta występuje nadciśnienie?
  • Czy platforma kandydata politycznego sugeruje, że jest kandydatką republikańską lub demokratyczną?
  • Czy zdjęcie przesłane do sieci społecznościowej zawiera twarz?
  • Czy Burza została napisana przez Williama Szekspira czy Francisa Bacona?

W tej części skupimy się na problemach z klasyfikacją tekstu, które są ściśle związane z narzędziami, których możesz użyć, aby odpowiedzieć na ostatnie pytanie z naszej listy. W naszym ćwiczeniu zbudujemy jednak system do decydowania, czy wiadomość e-mail jest spamem czy nieą. Nasze surowe dane pochodzą z publicznego korpusu SpamAssassin, dostępnego do bezpłatnego pobrania na stronie http://spamassassin.apache.org/publiccorpus/. Na etapie nieprzetworzonym zawiera po prostu zawartość nieprzetworzonego e-maila jako zwykły tekst. Ten nieprzetworzony tekst stanowi nasz pierwszy problem. Musimy przekształcić nasze nieprzetworzone dane tekstowe w zestaw funkcji, które opisują pojęcia jakościowe w sposób ilościowy. W naszym przypadku będzie to strategia kodowania 0/1: spam lub nie Na przykład możemy chcieć ustalić, co następuje: „Czy zawieranie tagów HTML zwiększa prawdopodobieństwo, że wiadomość e-mail jest spamem?” Aby odpowiedzieć na to pytanie, potrzebujemy strategii zamiany tekstu w naszym e-mailu na liczby. Na szczęście pakiety do eksploracji tekstu ogólnego przeznaczenia dostępne w R wykonają za nas większość tej pracy. Z tego powodu znaczna część tej części skupi się na budowaniu intuicji dla typów funkcji, z których ludzie korzystali w przeszłości podczas pracy z danymi tekstowymi. Generowanie funkcji jest głównym tematem w obecnych badaniach nad uczeniem maszynowym i wciąż jest bardzo dalekie od automatyzacji w ogólnym zastosowaniu. Obecnie najlepiej jest pomyśleć o funkcjach używanych w ramach słownictwa uczenia maszynowego, z którym lepiej się zapoznasz, wykonując więcej zadań uczenia maszynowego. Tak jak uczenie się słów nowego języka buduje intuicję dla tego, co mogłoby być realistycznie słowem, tak samo poznawanie funkcji, z których ludzie korzystali w przeszłości, buduje intuicję dla tego, które funkcje mogą być pomocne w przyszłości. Podczas pracy z tekstem historycznie najważniejszym rodzajem używanej funkcji była liczba słów. Jeśli uważamy, że tekst tagów HTML jest silnym wskaźnikiem tego, czy wiadomość e-mail jest spamem, możemy wybrać terminy takie jak „html” i „table” i policzyć, jak często występują w jednym typie dokumentu w porównaniu do drugiego. Aby pokazać, jak to podejście będzie działać z publicznym korpusem SpamAssassin, posunęliśmy się do przodu i policzyliśmy liczbę wystąpień terminów „html” i „table”. Tabela pokazuje wyniki.

Dla każdego e-maila w naszym zestawie danych nakreśliliśmy również członkostwo w klasie na powyższym rysunku. Ten wykres nie jest zbyt pouczający, ponieważ zbyt wiele punktów danych w naszym zestawie danych nakłada się. Tego rodzaju problem pojawia się dość często, gdy pracujesz z danymi, które zawierają tylko kilka unikalnych wartości dla jednej lub więcej zmiennych. Ponieważ jest to powtarzający się problem, istnieje standardowe rozwiązanie graficzne: po prostu dodajemy losowy szum do wartości przed wykreśleniem. Hałas ten „rozdzieli” punkty, aby zmniejszyć liczbę przypadków nadmiernego kreślenia. Ten dodatek hałasu nazywa się drżeniem i jest bardzo łatwy do wytworzenia w ggplot2

Ta ostatnia fabuła sugeruje, że moglibyśmy zrobić tak bardzo trudną decyzję, czy e-mail jest spamem, po prostu zliczając liczbę wystąpień terminów „html” i „table”. W praktyce możemy wykonać znacznie lepszą pracę, używając znacznie więcej niż tylko tych dwóch bardzo oczywistych terminów. W rzeczywistości do naszej ostatecznej analizy użyjemy kilku tysięcy terminów. Mimo że będziemy używać tylko danych z liczbą słów, nadal otrzymamy stosunkowo dokładną klasyfikację. W prawdziwym świecie chciałbyś używać innych funkcji poza liczbą słów, takich jak sfałszowane nagłówki, czarne listy adresów IP lub e-mail itp., Ale tutaj chcemy jedynie przedstawić podstawy klasyfikacji tekstu. Zanim przejdziemy dalej, powinniśmy przejrzeć niektóre podstawowe pojęcia prawdopodobieństwa warunkowego i przedyskutować ich związek z klasyfikowaniem wiadomości na podstawie jej tekstu.

[BIG DATA] GLOSARIUSZ (VIII) : MACHINE LEARNING

Kolejna ważna kategoria przetwarzania, systemy uczenia maszynowego automatyzują podejmowanie decyzji dotyczących danych. Korzystają z informacji o szkoleniach, aby zajmować się kolejnymi punktami danych, automatycznie generując wyniki, takie jak rekomendacje lub grupy. Systemy te są szczególnie przydatne, gdy chcesz zamienić wyniki jednorazowej analizy danych w usługę produkcyjną, która będzie wykonywać coś podobnego na nowych danych bez nadzoru. Niektóre z najbardziej znanych zastosowań tych technik są takie, jak rekomendacje produktów Amazon.

WEKA

WEKA jest opartą na Javie strukturą i GUI dla algorytmów uczenia maszynowego. Zapewnia architekturę wtyczek dla naukowców, którzy dodają własne techniki, z interfejsem linii poleceń i okien, co ułatwia zastosowanie ich do własnych danych. Możesz go używać do wykonywania wszystkich czynności, od podstawowego klastrowania do zaawansowanej klasyfikacji, a także wiele narzędzi do wizualizacji wyników. Jest on powszechnie używany jako narzędzie dydaktyczne, ale jest także bardzo przydatny do prototypowania i eksperymentowania poza klasą. Posiada mocny zestaw narzędzi do przetwarzania wstępnego, które ułatwiają ładowanie danych, a następnie masz dużą bibliotekę algorytmów na wyciągnięcie ręki, dzięki czemu możesz szybko wypróbować pomysły, aż znajdziesz rozwiązanie, które działa na twój problem. Interfejs wiersza poleceń pozwala na zastosowanie dokładnie tego samego kodu w sposób automatyczny do produkcji.

Mahout

Mahout jest strukturą open source, która może obsługiwać popularne algorytmy uczenia maszynowego na ogromnych zbiorach danych. Aby osiągnąć tę skalowalność, większość kodu jest napisana jako możliwa do zrównoleglenia praca nad Hadoop. Jest wyposażony w algorytmy do wykonywania wielu typowych zadań, takich jak grupowanie i klasyfikowanie obiektów w grupy, rekomendowanie elementów na podstawie zachowań innych użytkowników i często spotykane atrybuty. Praktycznie rzecz biorąc, struktura ułatwia korzystanie z technik analitycznych w celu implementacji funkcji, takich jak “Rekomendacja” Osoby, które kupiły ten kupiony produkt “na swojej stronie. Jest to intensywnie wykorzystywany projekt z aktywną społecznością programistów i użytkowników. Warto go wypróbować, jeśli masz znaczną liczbę transakcji lub podobnych danych, z których chcesz uzyskać więcej korzyści.

scikits.learn

Trudno znaleźć dobre, gotowe do użycia narzędzia do praktycznej nauki maszyn. Wiele projektów jest skierowanych do studentów i naukowców, którzy chcą uzyskać dostęp do wewnętrznych mechanizmów algorytmów, co może zniechęcać, gdy szukasz więcej czarnej skrzynki do rozwiązania konkretnego problemu. To luka, którą scikits.learn naprawdę pomaga wypełnić. Jest to pięknie udokumentowany i łatwy w użyciu pakiet Pythona oferujący interfejs wysokiego poziomu dla wielu standardowych technik uczenia maszynowego. Gromadzi większość technik, które mieszczą się w standardowej definicji uczenia maszynowego (biorąc zestaw danych treningowych i wykorzystując go do przewidywania czegoś użytecznego na temat danych otrzymanych później) i oferuje popularny sposób ich łączenia i wymiany. To sprawia, że ​​jest to bardzo owocna piaskownica do eksperymentowania i szybkiego prototypowania, z bardzo łatwą ścieżką do używania tego samego kodu w produkcji, gdy działa dobrze.

Wizualizacja relacji między kolumnami

Do tej pory omawialiśmy jedynie strategie przemyślanego przemyślenia poszczególnych kolumn w zbiorze danych. Jest to z pewnością warte zrobienia: często po prostu znajomość kształtu w danych mówi wiele o twoich danych. Obserwacja rozkładu normalnego mówi nam, że możesz używać wartości średniej i mediany zamiennie, a także oznacza, że ​​możesz ufać, że przez większość czasu nie zobaczysz danych o więcej niż trzy standardowe odchylenia od średniej. To wiele do nauczenia się z jednej wizualizacji. Ale cały materiał, który właśnie sprawdziliśmy, jest tym, czego można się spodziewać w tradycyjnej klasie statystyki; nie ma wrażenia aplikacji do uczenia maszynowego, które prawdopodobnie swędzisz, aby zacząć się angażować. Aby przeprowadzić prawdziwe uczenie maszynowe, musimy znaleźć relacje między wieloma kolumnami w naszych danych i wykorzystać te relacje do zrozumienia naszych danych i przewidzenia przyszłości. Niektóre przykłady, które omówimy w trakcie tej książki, obejmują następujące problemy z prognozowaniem:

  • Przewidywanie czyjejś wagi na podstawie jej wzrostu
  • Przewidywanie, czy wiadomość e-mail jest spamem, czy nie używa jej tekstu
  • Przewidywanie, czy użytkownik będzie chciał kupić produkt, którego nigdy wcześniej mu nie proponowałeś

Jak wspomnieliśmy wcześniej, tego rodzaju problemy dzielą się na dwa typy: problemy z regresją, w których należy przewidzieć pewną liczbę, na przykład wagę, biorąc pod uwagę wiele innych liczb, takich jak wzrost; oraz problemy z klasyfikacją, w których należy przypisać etykietę, taką jak spam, podając kilka liczb, na przykład liczbę słów dla spamerskich słów, takich jak „viagra” i „cialis”. Przedstawiamy narzędzia, których możemy użyć do regresji i klasyfikacji, zajmą większość reszty tej książki, ale istnieją dwa motywujące typy wizualizacji danych, które chcielibyśmy, abyś nosił je w głowie, gdy idziemy do przodu. Pierwszym z nich jest stereotypowy obraz regresji. Na obrazie regresji tworzymy wykres rozrzutu naszych danych i widzimy, że istnieje ukryty kształt, który łączy dwie kolumny w zbiorze danych. Wracając do naszych ulubionych danych o wysokościach i wagach, zróbmy wykres rozrzutu wag względem wysokości.

Jeśli ich nie znasz, powinieneś wiedzieć, że wykres rozproszenia to dwuwymiarowy obraz, w którym jeden wymiar odpowiada zmiennej X, a drugi zmiennej Y. Aby tworzyć nasze wykresy rozrzutu, będziemy nadal używać ggplot.

ggplot (heights.weights, aes (x = Height, y = Weight)) + geom_point ()

Wykres rozrzutu generowany przez ggplot pokazano tu

Patrząc na ten obraz, wydaje się całkiem jasne, że istnieje wzorzec odnoszący się do wysokości i ciężarów: ludzie wyżsi również ważą więcej. Jest to intuicyjnie oczywiste, ale opisanie ogólnych strategii znajdowania tego rodzaju wzorców zajmie resztę tego tekstu.

Aby dokładniej zbadać wzór, możemy użyć narzędzia wygładzającego

ggplot2, aby uzyskać wizualne przedstawienie wzorca liniowego, który widzimy:

ggplot (heights.weights, aes (x = Height, y = Weight)) + geom_point () + geom_smooth ()

Nowy wykres rozproszenia z nałożonym gładkim wzorem pokazano tu

geom_smooth wygeneruje prognozy dotyczące masy ludzi na podstawie ich wysokości jako danych wejściowych. W tym przypadku prognozy są po prostu linią pokazaną na niebiesko. Wokół linii znajduje się zacieniony region, który opisuje inne prawdopodobne prognozy, które można by zrobić dla czyjejś wagi na podstawie danych, które widziałeś. W miarę zdobywania kolejnych danych domysły stają się dokładniejsze, a zacieniony region kurczy się. Ponieważ wykorzystaliśmy już wszystkie dane, najlepszym sposobem, aby zobaczyć ten efekt, jest pójście w przeciwnym kierunku: usuń część naszych danych i zobacz, jak wzór staje się coraz słabszy. Wyniki pokazano poniżej

ggplot(heights.weights[1:20,], aes(x = Height, y = Weight)) + geom_point() +

geom_smooth()

ggplot(heights.weights[1:200,], aes(x = Height, y = Weight)) + geom_point() +

geom_smooth()

ggplot(heights.weights[1:2000,], aes(x = Height, y = Weight)) + geom_point() +

geom_smooth()

Przypomnij sobie, że przewidywanie wartości w jednej kolumnie przy użyciu innej kolumny nazywa się regresją, gdy wartości, które próbujesz przewidzieć, to liczby. Natomiast gdy próbujesz przewidzieć etykiety, nazywamy tę klasyfikację. Do klasyfikacji rysunek  jest obrazem, o którym należy pamiętać.

Na tym obrazie pokazaliśmy wysokości i wagi każdej osoby w naszym zbiorze danych, ale zwizualizowaliśmy również ich płeć jako kolor każdego punktu. To wyjaśnia, że w naszych danych widzimy dwie odrębne grupy osób. Aby wygenerować ten obraz w ggplot2, uruchamiamy następujący kod:

ggplot(heights.weights, aes(x = Height, y = Weight, color = Gender)) + geom_point()

Ten obraz jest standardowym obrazem klasyfikacyjnym. Na obrazie klasyfikacyjnym tworzymy wykres rozrzutu naszych danych, ale używamy trzeciej kolumny do pokolorowania punktów różnymi etykietami.

Do naszych danych dotyczących wzrostu i masy ciała dodaliśmy trzecią kolumnę, która przedstawia płeć każdej osoby w naszym zbiorze danych. Patrząc na to zdjęcie, prawdopodobnie wydaje się, że moglibyśmy odgadnąć płeć osoby, używając tylko jej wzrostu i wagi. Zgadywanie na temat zmiennych kategorialnych, takich jak płeć na podstawie innych danych, jest dokładnie tym, co powinna zrobić klasyfikacja, a opiszemy dla niej algorytmy bardziej szczegółowo w następnej części. Na razie pokażemy na rysunku 2-31, jak wyglądałyby wyniki po uruchomieniu standardowego algorytmu klasyfikacji.

Narysowana przez nas linia ma bardzo fantazyjnie brzmiącą nazwę: „oddzielająca hiperpłaszczyzna”. Jest to „oddzielająca” hiperpłaszczyzna, ponieważ dzieli dane na dwie grupy: z jednej strony zgadujesz, że ktoś jest kobietą, biorąc pod uwagę jej wzrost i wagę, az drugiej strony zgadujesz, że jest mężczyzną. To całkiem dobry sposób na zgadywanie; dla tego zestawu danych masz rację przez około 92% czasu. Naszym zdaniem nie jest to złe działanie, gdy używasz tylko najprostszego modelu klasyfikacji, który ma tylko wysokości i wagi jako dane wejściowe do algorytmu prognozowania. W naszych prawdziwych zadaniach związanych z klasyfikacją często mamy dziesiątki, setki, a nawet tysiące danych wejściowych do wykorzystania w przewidywaniu klas. Z tym zestawem danych zdarza się szczególnie łatwo pracować i dlatego zaczęliśmy od niego. To koniec tego rozdziału. Jako zwiastun, który Cię ekscytuje w następnym rozdziale, pokażemy Ci kod R, który wygenerował prognozy, które właśnie zobaczyłeś. Jak widać, nie potrzebujesz prawie żadnego kodu, aby uzyskać dość imponujące wyniki.

heights.weights <- transform(heights.weights, Male = ifelse(Gender == ‘Male’, 1, 0))

logit.model <- glm(Male ~ Height + Weight, data = heights.weights,

family = binomial(link = ‘logit’))

ggplot(heights.weights, aes(x = Weight, y = Height, color = Gender)) +

geom_point() +

stat_abline(intercept = – coef(logit.model)[1] / coef(logit.model)[2],

slope = – coef(logit.model)[3] / coef(logit.model)[2],

geom = ‘abline’,

color = ‘black’)

W następnej części pokażemy dokładniej, jak budujesz własne klasyfikatory za pomocą gotowych narzędzi do uczenia maszynowego.

[BIG DATA] GLOSARIUSZ (VII) : NLP

Przetwarzanie języka naturalnego (NLP) jest podzbiorem przetwarzania danych, który jest tak istotny, że zdobył swoją własną sekcję. Koncentruje się na uporczywym, stworzonym przez ludzi tekście i wydobywaniu znaczących informacji. Jak możesz sobie wyobrazić, ta chaotyczna domena problemowa wywołała wiele różnych podejść, przy czym każde narzędzie jest najbardziej użyteczne dla określonych rodzajów tekstu. Nie ma magicznej kuli, która zrozumie informacje pisane, jak również ludzi, ale jeśli jesteś przygotowany, aby dostosować swoje wykorzystanie wyników, aby poradzić sobie z niektórymi błędami i nie oczekujcie cudów, możecie wyciągnąć potężne wnioski.

Zestaw narzędzi Natural Language

NLTK to zbiór modułów i zestawów danych Pythona, które implementują wspólne techniki przetwarzania języka naturalnego. Oferuje bloki, których potrzebujesz tworzyć bardziej złożone algorytmy dla określonych problemów. Na przykład możesz go użyć do rozbijaj teksty na zdania, łamanie zdania na słowa, wyłóż słowa przez usuwanie często używanych sufiksów (np. -ing z angielskich czasowników) lub słowniki odczytywalne maszynowo rozpoznać synonimy. Ramy są używane przez większość badaczy w terenie, więc będziesz często znajdują nowatorskie podejścia zawarte w modułach lub jako algorytmy zbudowane na jego podstawie moduły. Istnieje również duża liczba kompatybilnych zestawów danych, jak również obszerna dokumentacja. NLTK nie jest skierowany do programistów szukających gotowego rozwiązania problemów związanych z domeną. Jego elastyczność oznacza, że ​​potrzebujesz podstawowej znajomości świata NLP, zanim będziesz mógł tworzyć rozwiązania dla własnych problemów. To nie jest gotowe rozwiązanie, takie jak Boilerpipe czy OpenCalais.

OpenNLP

Napisany w Javie OpenNLP jest alternatywą dla NLTK do przetwarzania języka. To ma silniejsze skupienie się na gotowych rozwiązaniach, z dostępnymi modelami, które ułatwiają wykonywanie zadań, takich jak wyciąganie czasu, osób i nazw organizacji z tekstu. Takie podejście czyni go mniej atrakcyjnym jako struktura nauczania, ale łatwość integracji z Javą oznacza, że ​​jest on bardziej odpowiedni dla aplikacji napisanych w języku. Zawiera wszystkie standardowe komponenty potrzebne do zbudowania własnego kodu przetwarzania języka, przełamywania nieprzetworzonego tekstu do zdań i słów oraz klasyfikowania tych komponentów przy użyciu różnych technik.

Boilerpipe

Jedną z najtrudniejszych części analizy stron internetowych jest usuwanie linków nawigacyjnych, nagłówków, stopek i pasków bocznych do opuszczenia treściowego tekstu. Jeśli cała ta płyta zostanie pozostawiona, analiza będzie wysoce zniekształcona przez powtarzające się nieistotne słowa i wyrażenia z tych sekcji. Boilerpipe jest platformą Java, która wykorzystuje algorytmiczne podejście do wykrywania rzeczywistej treści dokumentu HTML, i dlatego jest doskonałym narzędziem do przetwarzania wstępnego dla dowolnej treści internetowej. Jest skierowany na strony, które wyglądają jak wiadomości, ale okazało się, że działa przyzwoicie dla wielu różnych typów witryn.

OpenCalais

OpenCalais to webowy interfejs API, który pobiera fragment tekstu, wyświetla nazwy podmiotów, o których wie i sugeruje ogólne tagi. Jest to dojrzały projekt prowadzony przez Thomson Reuters i jest szeroko stosowany. Z mojego doświadczenia wynika, że ​​jest najsilniejszy w rozumieniu terminów i zwrotów, które można znaleźć w oficjalnych wiadomościach, jak można się spodziewać po jego dziedzictwie. Z pewnością jest to dobre miejsce na rozpoczęcie, gdy potrzebujesz analizy semantycznej swoich treści, ale wciąż istnieją powody, dla których warto przyjrzeć się alternatywom. Obowiązuje limit 50 000 dziennie dla połączeń i limit 100 KB dla standardowego interfejsu API. Jest to zbywalne z wersją komercyjną, ale obciążenie to jeden z powodów, dla których warto rozważyć uruchomienie czegoś w lokalnym klastrze zamiast dużych ilości danych. Być może konieczne będzie również upewnienie się, że przesyłane treści nie są poufne, chociaż usługa obiecuje, że nie zachowa żadnego z nich. Może również istnieć zestaw terminów lub wyrażeń, które są unikalne dla Twojej domeny problemowej, która nie jest objęta usługą. W takim przypadku lepszym rozwiązaniem może być analizowany parser zbudowany na NLTK lub OpenNLP

Trochę obrazków… Wizualizacja danych eksploracyjnych

Obliczanie numerycznych podsumowań danych jest oczywiście cenne. W końcu to klasyczna statystyka. Ale dla wielu osób liczby nie przekazują informacji, które chcą zobaczyć bardzo skutecznie. Wizualizacja danych jest często bardziej skutecznym sposobem na wykrycie w nich wzorców. W tej sekcji omówimy dwie najprostsze formy wizualizacji danych eksploracyjnych: wizualizacje jednokolumnowe, które podkreślają kształt twoich danych, oraz wizualizacje dwukolumnowe, które podkreślają związek między parami kolumn. Oprócz pokazania narzędzi do wizualizacji danych, opiszemy również niektóre kanoniczne kształty, których możesz się spodziewać, gdy zaczniesz przeglądać dane. Te wyidealizowane kształty, zwane także rozkładami, są standardowymi wzorami, które statystycy badali przez lata. Gdy znajdziesz jeden z tych kształtów w swoich danych, często możesz wyciągać szerokie wnioski na temat swoich danych: jak powstało, jakie abstrakcyjne właściwości będzie miał, i tak dalej. Nawet jeśli uważasz, że kształt, który widzisz, jest tylko niejasnym przybliżeniem twoich danych, standardowe kształty dystrybucyjne mogą dostarczyć bloków konstrukcyjnych, których możesz użyć do zbudowania bardziej złożonych kształtów, które bardziej pasują do twoich danych. To powiedziawszy, zacznijmy od wizualizacji danych o wysokościach i wagach, z którymi pracowaliśmy do tej pory. W rzeczywistości jest to dość złożony zestaw danych, który ilustruje wiele pomysłów, które będziemy napotykać wielokrotnie w tym tekście. Najbardziej typową techniką wizualizacji z jedną kolumną, z której korzystają ludzie, jest histogram. Na histogramie dzielisz zestaw danych na pojemniki, a następnie zliczasz liczbę wpisów w danych, które mieszczą się w każdym z pojemników. Na przykład na rysunku tworzymy histogram z jednocalowymi przedziałami, aby wizualizować nasze dane dotyczące wysokości.

Możemy to zrobić w R w następujący sposób:

library(„ggplot2”)

data.file <- file.path („data”, „01_heights_weights_genders.csv”)

heights.weights <- read.csv (data.file, header = TRUE, sep = ‘,’)

ggplot (heights.weights, aes (x = Height)) + geom_histogram (binwidth = 1)

Natychmiast coś powinno na ciebie wyskoczyć: w twoich danych jest kształt krzywej dzwonowej. Większość wpisów znajduje się w środku danych, blisko średniej i mediany wysokości. Istnieje jednak niebezpieczeństwo, że ten kształt jest iluzją spowodowaną przez rodzaj używanego histogramu.  Jednym ze sposobów sprawdzenia tego jest próba użycia kilku innych przepustowości. To jest coś o czym. pracując z histogramami, zawsze powinieneś o tym pamiętać: stosowane przez Ciebie szerokości bin nakładają na twoją dane zewnętrzną strukturę, jednocześnie ujawniając wewnętrzną strukturę twoich danych. Znalezione wzory, nawet jeśli są prawdziwe, mogą bardzo łatwo zniknąć, jeśli użyjesz niewłaściwych ustawień do zbudowania histogramu. Poniżej odtwarzamy histogram z użyciem pięciocalowych pojemników z następującym kodem R:

ggplot (heights.weights, aes (x = Height)) + geom_histogram (binwidth = 5)

Gdy używamy zbyt szerokiego przedziału, duża część naszych danych zanika. Nadal jest szczyt, ale symetria, którą widzieliśmy wcześniej, wydaje się w większości zanikać. Nazywa się to wygładzaniem. I odwrotny problem, zwany niedopasowaniem, jest równie niebezpieczny. Na rysunku ponownie dostosowujemy szerokość przedziału, tym razem do znacznie mniejszych 0,001 cali:

ggplot (heights.weights, aes (x = Height)) + geom_histogram (binwidth = 0,001)

W tym przypadku nie osiągnęliśmy wygładzenia danych, ponieważ użyliśmy niewiarygodnie małych pojemników. Ponieważ mamy tyle danych, nadal możesz nauczyć się czegoś z tego histogramu, ale zestaw danych ze 100 punktami byłby w zasadzie bezwartościowy, gdybyś użył tego rodzaju powiązania. Ponieważ ustawianie wiązań może być żmudne i ponieważ nawet najlepszy histogram jest zbyt postrzępiony dla naszego gustu, preferujemy alternatywę dla histogramów zwanych szacunkami gęstości jądra (KDE) lub wykresami gęstości. Chociaż wykresy gęstości cierpią z powodu większości tych samych problemów z nadmiernym wygładzaniem i wygładzaniem, które występują w histogramach, generalnie uważamy je za lepsze pod względem estetycznym – szczególnie dlatego, że wykresy gęstości dla dużych zestawów danych przypominają bardziej kształty teoretyczne, których spodziewamy się w naszych danych. Ponadto wykresy gęstości mają pewną przewagę teoretyczną nad histogramami: teoretycznie użycie wykresu gęstości powinno wymagać mniejszej liczby punktów danych, aby ujawnić podstawowy kształt danych niż histogram. Na szczęście wykresy gęstości są tak samo łatwe do wygenerowania w R jak histogramy. Na rysunku tworzymy nasz pierwszy wykres gęstości danych wysokości:

ggplot (heights.weights, aes (x = Height)) + geom_density ()

Gładkość wykresu gęstości pomaga nam odkryć rodzaje wzorów, które osobiście uważamy za trudniejsze do zobaczenia na histogramach. Tutaj wykres gęstości sugeruje, że dane są podejrzanie płaskie przy wartości szczytowej. Ponieważ standardowy kształt krzywej dzwonowej, którego moglibyśmy się spodziewać, nie jest płaski, prowadzi nas to do zastanowienia się, czy w tym zbiorze danych nie kryje się więcej struktur. Jedną rzeczą, którą możesz spróbować zrobić, gdy uważasz, że brakuje Ci struktury, jest podzielenie wykresu na dowolne dostępne zmienne jakościowe. Tutaj używamy płci każdego punktu, aby podzielić nasze dane na dwie części. Następnie na rysunku poniżej tworzymy wykres gęstości, w którym nałożone są dwie gęstości, ale są one ubarwione inaczej, aby wskazać reprezentowaną przez nich płeć:

ggplot (heights.weights, aes (x = Height, fill = Gender)) + geom_density ()

Na tym wykresie nagle widzimy ukryty wzór, którego wcześniej całkowicie brakowało: nie patrzymy na jedną krzywą dzwonkową ale na dwie różne krzywe dzwonka, które częściowo się pokrywają. Nie jest to zaskakujące, ponieważ kobiety i mężczyźni mają różne średnie wysokości. Możemy spodziewać się tej samej struktury krzywej dzwonowej we wzorach dla obu płci. Poniżej tworzymy nowy wykres gęstości dla kolumny wag naszego zestawu danych:

ggplot (heights.weights, aes (x = Weight, fill = Gender)) + geom_density ()

Ponownie widzimy tę samą mieszaninę krzywych dzwonowych w strukturze. W przyszłych sekcjach omówimy bardziej szczegółowo tę mieszankę krzywych dzwonowych, ale warto nadać nazwę strukturze, na którą patrzymy teraz: jest to model mieszany, w którym dwie standardowe rozkłady zostały zmieszane, aby uzyskać dystrybucję niestandardową. Oczywiście musimy jaśniej opisać nasze standardowe rozkłady, aby nadać sens temu zdaniu, więc zacznijmy od naszego pierwszego wyidealizowanego rozkładu danych: rozkładu normalnego, który jest również nazywany rozkładem Gaussa lub krzywą dzwonową. Możemy łatwo zobaczyć przykład normalnego rozkładu, po prostu dzieląc wykres na dwie części, zwane fasetami. Robimy to poniżej z wykresami gęstości, które pokazaliśmy do tej pory, abyś mógł zobaczyć dwie krzywe dzwonowe w oderwaniu od siebie.

 W R możemy zbudować tego rodzaju fasetowany wykres w następujący sposób:

ggplot (heights.weights, aes (x = Weight, fill = Gender)) + geom_density () + facet_grid (Gender ~.)

Gdy to zrobimy, wyraźnie widzimy jedną krzywą dzwonka wyśrodkowaną na 64 ”dla kobiet i inną krzywą dzwonkową wyśrodkowaną na 69” dla mężczyzn. Ta specyficzna krzywa dzwonowa jest rozkładem normalnym, kształtem, który pojawia się tak często, że łatwo jest myśleć, że jest to „normalny” sposób wyświetlania danych. To nie do końca prawda: wiele rzeczy, na których nam zależy, od rocznych dochodów ludzi po codzienne zmiany cen akcji, nie są bardzo dobrze opisane przy użyciu normalnej dystrybucji. Ale rozkład normalny jest bardzo ważny w matematycznej teorii statystyki, więc jest znacznie lepiej rozumiany niż większość innych rozkładów. Na bardziej abstrakcyjnym poziomie rozkład normalny jest tylko rodzajem krzywej dzwonowej. Może to być dowolna z krzywych dzwonka pokazanych na poniższych rysunkach

Na tych wykresach różnią się dwa parametry: średnia rozkładu, która określa środek krzywej dzwonowej i wariancja rozkładu, która określa szerokość krzywej dzwonowej. Powinieneś bawić się z wizualizacją różnych wersji krzywej dzwonowej, grając z parametrami w poniższym kodzie, aż poczujesz się komfortowo z wyglądem krzywej dzwonowej. Aby to zrobić, graj z wartościami m i s w kodzie pokazanym tutaj:

m <- 0

s <- 1

ggplot (data.frame (X = rnorm (100000, m, s)), aes (x = X)) + geom_density ()

Wszystkie krzywe, które można wygenerować za pomocą tego kodu, mają ten sam podstawowy kształt; zmiana m i s jedynie przesuwa środek i kurczy się lub powiększa szerokość. Jak widać na powyższych rysunkach, dokładny kształt krzywych będzie się różnił, ale ich ogólny kształt jest spójny. Niestety, zobaczenie tego ogólnego kształtu dzwonu nie wystarczy, aby powiedzieć, że Twoje dane są normalne, ponieważ istnieją inne rozkłady w kształcie dzwonu, z których jeden opiszemy za chwilę. Na razie zróbmy krótką lekcję żargonu, ponieważ normalny rozkład pozwala nam zdefiniować kilka jakościowych pomysłów na temat kształtu danych. Najpierw wróćmy do tematu trybów, które odkładaliśmy do tej pory. Jak powiedzieliśmy wcześniej, tryb ciągłej listy liczb nie jest dobrze zdefiniowany, ponieważ żadne liczby się nie powtarzają. Ale tryb ma czytelną interpretację wizualną: kiedy tworzysz wykres gęstości, trybem danych jest szczyt dzwonu. Na przykład spójrz na rysunek

Oszacowanie trybów wizualnych jest znacznie łatwiejsze w przypadku wykresu gęstości niż w przypadku histogramu, co jest jednym z powodów, dla których wolimy wykresy gęstości niż histogramy. A tryby mają sens niemal natychmiast, gdy patrzysz na wykresy gęstości, podczas gdy często mają one bardzo niewielki sens, jeśli próbujesz pracować bezpośrednio z liczbami. Teraz, gdy zdefiniowaliśmy tryb, powinniśmy wskazać, że jedną z cech definiujących rozkład normalny jest to, że ma on pojedynczy tryb, który jest również średnią i medianą danych, które opisuje . Natomiast wykres podobny do pokazanego tu

,

ma dwa tryby, a wykres

ma trzy tryby. Kiedy mówimy o liczbie trybów, które widzimy w naszych danych, użyjemy następujących terminów: rozkład z jednym trybem jest jednomodalny, rozkład z dwoma trybami jest bimodalny, a rozkład z dwoma lub więcej trybami jest multimodalny. Kolejne ważne jakościowe rozróżnienie można wprowadzić między danymi symetrycznymi a danymi wypaczonymi. Rysunki

 i

pokazują obrazy danych symetrycznych i przekrzywionych, aby wyjaśnić te terminy. Rozkład symetryczny ma ten sam kształt, niezależnie od tego, czy przesuniesz się na lewo od trybu, czy na prawo od trybu. Rozkład normalny ma tę właściwość, która mówi nam, że równie dobrze możemy zobaczyć dane znajdujące się poniżej trybu, jak i dane powyżej tego trybu. Natomiast drugi wykres, zwany rozkładem gamma, jest przekrzywiony w prawo, co oznacza, że ​​znacznie bardziej prawdopodobne jest zobaczenie skrajnych wartości po prawej stronie trybu niż skrajnych wartości po lewej stronie tryb. Ostatnie jakościowe rozróżnienie, które wprowadzimy, to między danymi cienkościennymi a danymi gruboziarnistymi. W sekundę pokażemy standardowy wykres, który ma zilustrować to rozróżnienie, ale to rozróżnienie jest prawdopodobnie łatwiejsze do sformułowania. Cienkoziarnisty rozkład zwykle daje wartości, które nie są daleko od średniej; powiedzmy, że robi to w 99% przypadków. Na przykład rozkład normalny daje wartości, które są nie większe niż trzy standardowe odchylenia od średniej w około 99% przypadków. Natomiast inny rozkład w kształcie dzwonu zwany rozkładem Cauchy’ego wytwarza tylko 90% jego wartości w tych trzech granicach odchylenia standardowego. I w miarę oddalania się od wartości średniej, dwa typy rozkładów stają się jeszcze bardziej różne: rozkład normalny prawie nigdy nie wytwarza wartości, które są o sześć standardowych odchyleń od średniej, podczas gdy Cauchy zrobi to prawie 5% czas. Kanoniczne obrazy, które są zwykle używane do wyjaśnienia tego rozróżnienia między cienkim normalnym a grubym Cauchy, pokazano na rysunkach

i

Uważamy jednak, że dzięki intuicyjnemu generowaniu dużej ilości danych z obu tych dystrybucji uzyskasz bardziej intuicyjne zrozumienie i zobaczysz wyniki dla siebie. R sprawia, że ​​jest to dość łatwe, dlatego powinieneś spróbować:

set.seed(1)

normal.values <- rnorm(250, 0, 1)

cauchy.values <- rcauchy(250, 0, 1)

range(normal.values)

range(cauchy.values)

Wykreślenie ich sprawi, że kwestia będzie bardziej zrozumiała:

ggplot (data.frame (X = normal.values), aes (x = X)) + geom_density ()

ggplot (data.frame (X = wartości cauchy.)), aes (x = X)) + geom_density ()

Aby zakończyć tą część o rozkładzie normalnym i jego kuzynce rozkładzie Cauchy’ego, jeszcze raz podsumujmy jakościowe właściwości normalnego: jest on jednomodalny, symetryczny i ma kształt dzwonu z cienkimi ogonami. Cauchy jest unimodalny i symetryczny, i ma kształt dzwonu z ciężkimi ogonami. Po rozkładzie normalnym są jeszcze dwa obrazy kanoniczne, które chcemy wam pokazać, zanim zamkniemy tę sekcję na wykresach gęstości: łagodnie przekrzywiony rozkład zwany gamma i bardzo przekrzywiony rozkład zwany wykładniczym. Wykorzystamy oba później, ponieważ występują one w rzeczywistych danych, ale warto je teraz opisać, aby zilustrować skośność wizualnie. Zacznijmy od rozkładu gamma.

gamma .values<- rgamma (100000, 1, 0,001)

ggplot (data.frame (X = wartości gamma), aes (x = X)) + geom_density ()

Wynikowy wykres danych gamma pokazano tu

Jak widać, rozkład gamma jest przekrzywiony w prawo, co oznacza, że ​​mediana i średnia mogą czasami być zupełnie inne. Na rysunku

pokazaliśmy wyniki niektórych osób, które graliśmy w grę Canabalt na iPhone’a. Ten prawdziwy zestaw danych wygląda niezwykle podobnie do danych, które mogłyby zostać wygenerowane przez teorię rozkładu gamma. Założymy się również, że zobaczysz tego rodzaju kształt na wykresach gęstości dla wyników w wielu innych grach, więc wydaje się, że jest to szczególnie przydatne narzędzie teoretyczne, które masz na swoim pasku, jeśli chcesz analizować dane gry.

Inną rzeczą, o której należy pamiętać, jest to, że rozkład gamma daje tylko wartości dodatnie. Kiedy opiszemy, jak używać stochastycznych narzędzi optymalizacyjnych pod koniec i, bardzo pozytywna dystrybucja będzie bardzo przydatna. Ostatnim rozkładem, który opiszemy, jest rozkład wykładniczy, który jest dobrym przykładem silnie wypaczonego rozkładu. Przykładowy zestaw danych zaczerpnięty z rozkładu wykładniczego pokazano na rysunku

Ponieważ tryb rozkładu wykładniczego występuje przy wartości zerowej, jest prawie tak, jakbyś odciął dodatnią połowę dzwonu, aby utworzyć krzywą wykładniczą. Ten rozkład pojawia się dość często, gdy najczęstszą wartością w zbiorze danych jest zero i mogą wystąpić tylko wartości dodatnie. Na przykład korporacyjne centra telefoniczne często stwierdzają, że czas między otrzymywanymi połączeniami wygląda jak rozkład wykładniczy. Gdy zdobędziesz większą znajomość danych i dowiesz się więcej o teoretycznych rozkładach, które badali statystycy, te rozkłady będą ci bardziej znane – szczególnie dlatego, że te same nieliczne rozkłady pojawiają się w kółko. W tej chwili tak naprawdę zabierasz tę sekcję prostym terminom jakościowym, których możesz użyć, aby opisać swoje dane innym: jednomodalny kontra multimodalny, symetryczny kontra skośny i cienki lub gruby.