Wstępne przetwarzanie danych w programach Weka i RapidMiner

do poczytania
  1. Chapter 3 "Data Preprocessing", Jiawei Han, Micheline Kamber and Jian Pei, Data Mining: Concepts and Techniques, 3rd Edition
  2. wprowadzenie do wstępnego przetwarzania danych, Hyon Gyu Lee, Chungbuk National University, Korea
  3. "Data cleaning: Problems and current approaches." Rahm, Erhard, and Hong Hai Do. IEEE Data Engineering Bulletin 23.4 (2000): 3-13.
  4. Data Cleaning Material Collection, obszerna lista dostępnej literatury na temat czyszczenia danych
Weka
  • Uruchom program Weka 3.6
  • Włącz moduł Knowledge Flow
  • Z zakładki DataSources wybierz operator ArffLoader i z menu kontekstowego wybierz opcję Configure…. Wskaż plik z danymi. Zmień nazwę operatora na Load data.
  • Z zakładki Visualization wybierz operator TextViewer i zmień jego nazwę na View data as text.
  • Kliknij prawym klawiszem myszy na operatorze ArffLoader i z menu kontekstowego wybierz opcję dataSet. Na ekranie pojawi się niebieska linia reprezentująca przepływ danych. Kliknij na operatorze TextViewer aby przesłać do niego dane.
  • Kliknij prawym klawiszem myszy na operatorze ArffLoader i z menu kontekstowego wybierz opcję Start loading. Zaobserwuj w logu u dołu strony kiedy proces się zakończy. Po zakończeniu przetwarzania kliknij prawym klawiszem myszy na operatorze TextViewer i z menu kontekstowego wybierz opcję Show results. Przeanalizuj zawartość pliku.
  • Z zakładki Visualization wybierz operator Attribute Summarizer i prześlij do niego dane z operatora ArffLoader. Ponownie uruchom przepływ i po jego zakończeniu z menu kontekstowego operatora Attribute Summarizer wybierz opcję Show summaries. Przeanalizuj rozkłady poszczególnych atrybutów. Czy w wyniku wizualnej inspekcji znajdujesz atrybut który może być istotnie związany z występowaniem stanu chorobowego?
  • Z tej samej zakładki dodaj operator ScatterPlotMatrix i prześlij do niego dane. Ponownie uruchom przepływ i po jego zakończeniu wyświetl wynik działania operatora ScatterPlotMatrix.
  • Zwiększ rozmiar punktu do 3, przesuń suwak o nazwie Jitter o podobną odległość i zaktualizuj widok.
  • Wybierz wykres na przecięciu atrybutów sex i chol. Zwiększ losowy rozrzut punktów i postaraj się zinterpretować wykres.
  • W tej chwili Twój przepływ powinien wyglądać następująco:

  • Zbiór danych nie posiada atrybutu stanowiącego klucz. Z zakładki Filters wybierz operator AddID i prześlij do niego dane z operatora ArffLoader. Z menu kontekstowego operatora AddID wybierz opcję Configure… i zapoznaj się z ogólną postacią okna własności operatora. Sprawdź, co kryje się za przyciskami More i Capabilities
  • W następym kroku dodaj operator AddExpression. Kliknij prawym klawiszem myszy na operatorze AddID i z menu kontekstowego wybierz opcję dataSet, a następnie prześlij dane (uzupełnione o atrybut ID) do operatora AddExpression. Otwórz okno konfiguracji operatora AddExpression i wprowadź formułę (a6^2)/a1. Nazwij nowy atrybut AChidx (age-cholesterol index). Zmień nazwę operatora na Add Age-Chol idx. Uruchom przepływ i obejrzyj graficznie jak wartości nowego atrybutu są skorelowane ze zmienną decyzyjną (atrybut num). Podobny efekt możesz uzyskać za pomocą operatora MathExpression.
  • Aby bardziej upodobnić nasz zbiór danych do rzeczywistych danych dodamy nieco szumu informacyjnego. Umieść w przepływie operator AddNoise i skieruj do niego dane. Skonfiguruj operator w taki sposób, aby w trzecim atrybucie (sex) pojawiło się 25% losowych wartości. Uruchom przepływ i przy pomocy operatora AttributeSummarizer sprawdź efekt dodania szumu.
  • Kolejnym krokiem będzie dyskretyzacja atrybutu age na rozłączne przedziały. Umieść w przepływie operator Discretize i prześlij do niego dane. Zmień nazwę operatora na Create age bins. W ustawieniach operatora wskaż podział drugiego atrybutu na 5 przedziałów. Obejrzyj uzyskany wynik. Następnie wróć do ustawień operatora i zmień flagę UseEqualFrequency na true. Zobacz, jaki tryb dyskretyzacji zadziałał teraz.
  • Kolejnym przydatnym operatorem do wstępnego obejrzenia danych jest operator InterQuantileRange. Dodaj go do przepływu i prześlij do niego dane. Interesuje nas znalezienie nietypowych wartości dla atrybutu chol (szósty atrybut). Zmień parametr Outlier Factor na 1.5 i uruchom przepływ, a następnie obejrzyj wynik działania operatora korzystając z operatora DataVisualizer (zakładka Visualization). Spróbuj podać wartość poziomu cholesterolu, po której pacjent jest uznany za wartość odstającą (ang. outlier).
  • Czasem zachodzi potrzeba zmiany typu atrybutu na flagę. W tym celu posłużymy się operatorem NominalToBinary i zmień jego nazwę na Chest Pain Flag. Dodaj ten operator i prześlij do niego przepływ danych. W konfiguracji operatora wskaż do transformacji czwarty atrybut (cp, ból klatki piersiowej). Obejrzyj wynik.
  • Innym przydatnym operatorem jest NumericCleaner. Umieść go w przepływie, nazwij go Clean cholesterol i prześlij do niego dane. W konfiguracji operatora wskaż chęć wyczyszczenia dziewiątego atrybutu (cp) i zaproponuj zamianę wszystkich wartości bliskich 350 na wartość 350, wykorzystując wartość 10% jako próg tolerancji.
  • Przetwarzasz w tej chwili dane medyczne pacjentek i pacjentów. Takie dane muszą być szczególnie chronione przed niepożądanym dostępem. Wykorzystaj operator Obfuscate w swoim przepływie i zaobserwuj wynik jego działania. Zmień nazwę operatora na Encrypt data.
  • W tej chwili tętno spoczynkowe jest wyrażone w uderzeniach serca na minutę. Dokonajmy przeliczenia wartości tego atrybutu w taki sposób, aby atrybut miał średnią równą 0 i odchylenie standardowe równe 1 (innymi słowy, dokonajmy standaryzacji zmiennej). Dodaj do przepływu operator Standardize i prześlij do niego dane (prześlij dane z operatora Clean cholesterol jeśli chcesz mieć dostęp do rzeczywistych nazw atrybutów i ich wartości. Operator w rzeczywistości dokona standaryzacji wszystkich zmiennych numerycznych. Obejrzyj wynik.
  • W ostatnim kroku usuniemy ze zbioru niektóre przypadki. W pierwszej kolejności dodaj do przepływu operator RemoveFrequentValues i wskaż drugi atrybut (age). Pozostaw tylko 3 najczęściej pojawiające się wartości atrybutu age. Uruchom przepływ i zaobserwuj wynik. Następnie dodaj operator RemoveRange i usuń atrybuty będące flagami binarnymi reprezentującymi poszczególne typy bólu w klatce piersiowej (atrybuty 4-7).
  • Na końcu przejdź do zakładki DataSinks i dodaj operator ArffSaver. Zmień nazwę operatora na Save data i prześlij do niego przepływ. W konfiguracji operatora wskaż nazwę i lokalizację pliku, do którego zapiszesz wynik.
  • Twój ostateczny przepływ powinien wyglądać następująco:


RapidMiner
  • Uruchom program RapidMiner 5.3 i wybierz opcję utworzenia nowego procesu.
  • W okienku Repositories rozwiń gałąź Sample/data, a następnie przeciągnij i upuść na panel głównego procesu zbiór danych Golf
  • Uruchom proces klikając na niebieską strzałkę w pasku narzędziowym lub naciskając klawisz F11.
  • Zapoznaj się z charakterystyką zbioru danych. Kliknij w przycisk radiowy Meta Data View i przeanalizuj strukturę zbioru danych.
  • Przejdź do widoku wykresu (ang. Plot View), jako rodzaj wykresu wybierz Scatter i narysuj zależność między temperaturą i wilgotnością, z uwzględnieniem czy w dany dzień warto grać w golfa (parametr Color Column.
  • Powróć do widoku projektu procesu klikając na ikonę notatnika w pasku narzędziowym. Przejdź do zakładki Operators. W polu filtru wpisz łańcuch znaków normal. Lista dostępnych operatorów ograniczy się do dwóch pozycji. Przeciągnij operator Normalize i upuść go na przepływ danych z operatora Retrieve Golf do rezultatu. Alternatywnie, możesz upuścić operator Normalize gdziekolwiek w panelu edycji procesu, a następnie przeciągnąć przepływ danych z portu wyjściowego (out) operatora Retrieve Golf do portu wejściowego (exa) operatora Normalize. W tym drugim przypadku pamiętaj, aby port wyjściowy exa operatora Normalize połączyć z portem wynikowym res.
  • Zaznacz operator Normalize. Wskaż, że chcesz normalizować jedynie atrybuty numeryczne (attribute filter type = value_type, value type = numeric). Jako metodę normalizacji pozostaw Z-transformation. Uruchom proces i zaobserwuj wynik. Czy potrafisz zgadnąć, co się stało?
  • Zmień rodzaj transformacji na transformację zakresową do zakresu <0,1>. Porównaj otrzymany wynik z transformacją proporcjonalną. Wyłącz operator wybierając z menu kontekstowego opcję Enable operator lub korzystając ze skrótu klawiszowego Ctrl+E.
  • Wróc do zakładki Operators i wyszukaj operatorów o nazwie Discretize…. Najpierw użyj operatora Discretize by Binning aby podzielić temperaturę na trzy przedziały (chłodno, umiarkowanie, ciepło). Następnie dodaj operator Map i za pomocą pola value mappings dokonaj przetłumaczenia nazw zakresów temperatury na wartości opisowe.
  • Wyłącz operator Discretize by Binning i w jego miejsce wstaw operator Discretize by Frequency, również wskazując trzy przedziały dyskretyzacji dla atrybutu Temperature. Alternatywnie, możesz kliknąć prawym klawiszem myszy na operatorze Discretize by Binning i z menu kontekstowego wybrać opcję Replace Operator, nawigując kolejno do Data Transformation/Type Conversion/Discretization/Discretize by Frequency.
  • Wyszukaj operator Detect Outliers (Distance) i dodaj go do procesu. Wskaż, że detekcja wartości odstających odbywa się przez policzenie odległości do trzech najbliższych sąsiadów, oraz że w zbiorze danych występują trzy wartości osobliwe. Uruchom proces i zaobserwuj wynik. Przejdź do widoku wykresu i wybierz jako typ wykresu Scatter 3D Color. Na osiach X i Y umieść temperaturę i wilgotność, na osi Z umieść atrybut outlier, dodatkowo wykorzystując kolor do podkreślenia wartości odstających. Postaraj się znaleźć taką kombinację atrybutów, które przekonująco wskazują, że znalezione dni faktycznie odstają od reszty.
  • Dodaj do procesu operator Nominal to Binominal i wskaż atrybut Outlook jako atrybut do transformacji.
  • Twój ostateczny proces powinien wyglądać następująco:

  • W ostatnim kroku zobaczymy obsługę wartości brakujących w RapidMinerze. Wyłącz wyświetlanie wyniku przetwarzania poprzedniego przepływu, a następnie dodaj operator wczytujący zbiór danych Labor Negotiations (znajduje się w przykładowych danych). Wyświetl zbiór i obejrzyj metadane. Zwróć uwagę na liczbę brakujących wartości w poszczególnych atrybutach.
  • Użyj operatora Replace Missing Values aby zamienić wszystkie brakujące wartości na wartość -1.
  • Oryginalne dane z portu wyjściowego operatora Replace Missing Values prześlij do operatora Impute Missing Values. Wyłącz opcję learn on complete cases i wskaż losową kolejność przetwarzania rekordów ze zbioru. Zauważ, że operator Impute Missing Values jest operatorem dominującym, tj. zawiera w sobie inny operator. Wejdź do wewnątrz operatora Impute Missing Values i jako metodę wyznaczania zamiennika wartości brakującej wybierz operator k-NN. Skonfiguruj operator w taki sposób, aby wartość brakująca była uzupełniana w oparciu o trzech najbliższych sąsiadów i wyliczana za pomocą zmodyfikowanej odległości euklidesowej.
  • Wyślij wyniki działania obu operatorów (Replace Missing Values i Impute Missing Values) na wyjście procesu. Porównaj wykresy histogramów dla atrybutu standby-pay.
 
sum-data.preprocessing.txt · Last modified: 2019/03/22 22:22 by Mikołaj Morzy
 
Except where otherwise noted, content on this wiki is licensed under the following license:Public Domain
Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Debian Driven by DokuWiki