Orange

Jakiś czas temu Mateusz Kula napisał mi o bibliotece Orange [http://orange.biolab.si/open-source/], narzędzie do ,visual programming’ na licencji GPL. Nie jestem fanem programowania wizualnego [R rulez], ale warto wiedzieć co w trawie piszczy. Graficzny edytor przepływu przetwarzania dostępny w Orange robi zresztą pozytywne wrażenie.

Mateusz napisał dłuższe wprowadzenie na temat Orange, wklejone poniżej. Można na jego podstawie zorientować się o co chodzi z tą pomarańczą.
Miłego czytania.

Mateusz Kula

Stale rosnąca moc komputerów pozwala na wykonywanie coraz bardziej zaawansowanych obliczeń i analiz nawet na domowych komputerach, czego dobrym przykładem jest niniejszy blog traktujący o wyłuskiwaniu ciekawych i istotnych informacji z publicznie dostępnych wielkich ilości danych i analizy dokonywane przez jego autorów. Algorytmy analityczne stają się coraz bardziej wyrafinowane a dzięki szybko rosnącej mocy obliczeniowej znajdują coraz szersze zastosowanie w biznesie, nauce, medycynie i wielu innych dziedzinach życia. Data Mining (zwane też eksploracją danych) zostało wybrane przez MIT Technology Review jako jedną z dziesięciu technologii mających zmienić świat. Znalezione w danych prawidłowości mogą służyć zwiększeniu skuteczności kampanii marketingowych, mogą pomóc dobierać odpowiednie leki chorym a także pozwalają na oszczędzanie sporych sum pieniędzy poprzez optymalizację łańcuchów dostaw, stanów magazynowych i wielu innych aspektów działalności gospodarczej. Z powodu wielu możliwości jakie daje Data Mining a jednocześnie z powodu dużego stopnia komplikacji rozważanych problemów powstałe komercyjne pakiety oprogramowania wymagają długotrwałego szkolenia aby móc sprawnie ich używać a jednocześnie ich koszt jest barierą nie do przejścia dla wielu osób zajmujących się analizą danych amatorsko bądź w niewielkim zakresie (np. mały biznes)
Odpowiedzią środowiska akademickiego na drogie pakiety oprogramowania jest język programowania R, powstały w 1993 roku i rozwijany przez wiele osób na całym świecie. Jest to bardzo dobre narzędzie do statystycznej analizy danych, data miningu, a także niezliczonym innym zastosowaniom do czego przyczyniła się dynamiczna i zaangażowana społeczność tworząca niezliczoną ilość bibliotek i narzędzi towarzyszących R. Z mojego punktu widzenia mimo wszystkich wymienionych zalet R posiada jedną dość istotną z punktu widzenia amatorów wadę a jest nią ścieżka nauki prowadząca do swobodnego uzyskiwania pożądanych rezultatów, która może początkowo wydawać się bardzo stroma i żmudna, przez co może być dla wielu osób zniechęcająca.

Krótko o Orange

Pakiet oprogramowania, który chciałbym przedstawić i do zapoznania z którym namawiam nazywa się Orange. Jest to oprogramowania darmowe, rozwijane na zasadzie Open Source i pomimo iż swoimi możliwościami i funkcjonalnością nie może się równać z pakietami komercyjnymi ani z R, to jednak ma w sobie coś co czyni go niezmiernie godnym uwagi a jest nim przyjazność i łatwość obsługi. Osiągnięto to dzięki zastosowaniu paradygmatu programowania wizualnego, znanego od dawna w innych gałęziach technik informacyjnych. Programowanie wizualne oznacza iż tworzymy analizę danych poprzez ułożenie, techniką pociągnij i upuść, elementów symbolizujących pewne operacje, zwanych też widgetami, które po upuszczeniu można skonfigurować (menu konfiguracji pojawia się po dwukrotnym klinknięciu myszką na widgecie), a następnie połączyć liniami wyznaczającymi możliwe kierunki przepływu danych. Wraz z komponentami dostępnymi w dodatkowych pakietach, dostępnych jest w sumie ponad 100 widgetów.

Przykładowy diagram pokazany jest na rysunku poniżej. Przedstawia on wczytanie danych z pliku, przeprowadzenie opisowej analizy atrybutów oraz poklasyfikowanie i wyrysowanie drzewa klasyfikującego. To dość sporo jak na kilka kliknięć myszką, nieprawdaż?

Orange to nie tylko programowanie wizualne. Pakiet można obsłużyć używając komend w języku python a także wywoływać je z innych skryptów. W tym samym języku można też tworzyć dodatkowe widgety i algorytmy. Możliwe jest również pisanie komponentów w języku c++ ale wymaga to o wiele większej wiedzy zarówno na temat samego pakietu jak i programowania per se. Niestety, dokumentacja pakietu nie powala i pomimo iż większość komponentów jest opisana oraz dostępne są tutoriale jak napisać swój własny komponent i jak użyć Orange z poziomu shella pythonowego to istnieje wiele komponentów nie opisanych w ogóle bądź posiadających zdezaktualizowaną dokumentację. Niedostępne są też szczegółowe opisy użytych w komponentach algorytmów. Właśnie niepełna dokumentacja i brak dobrego wprowadzenia do pakietu były tym co spowodowało, że zdecydowałem się poświęcić nieco czasu stworzenie serii wpisów o różnych aspektach używania Orange poczynając od niniejszego wprowadzenia.
Jako ciekawostkę raczej można odnotować iż twórcy pracują nad wersją online pakietu Orange, jednak w mojej ocenie, ze względu na zbyt małą funkcjonalność i niedojrzałość oprogramowanie to nie jest jeszcze przystosowane do jakiegokolwiek użycia, oczywiście na bieżąco monitoruję rozwój tego pakietu i jak tylko stwierdzę, że jest wart przedstawienia to napiszę kolejny post poświęcony właśnie jemu.

Komponenty

Orange zawiera wiele gotowych do użycia widgetów znajdujących się w głównym menu, pogrupowanych według funkcji które mają spełniać.
Dostępne są następujące grupy:

  • Data – Wczytywanie i wstępna obróbka danych
  • Visualize – Wizualizacja danych
  • Classify – Algorytmy klasyfikujące
  • Regression – Algorytmy dokonujące regresji
  • Evaluate – Ewaluacja dokładności algorytmów z grupy klasyfikatorów
  • Unsupervised – Uczenie nienadzorowane
  • Associate – Poszukiwanie reguł asocjacyjnych

Ponieważ Orange jest rozszerzalnym oprogramowaniem istnieje wiele modułów rozszerzających jego możliwości oraz zawierających dodatkowe komponenty. Ze strony Orange można pobrać (zakładka Add-ons) kilka pakietów z widgetami, oto kilka z nich które wydają mi się szczególnie interesujące:

Orange-Bioinformatics

Pakiet rozszerzający Orange o zastosowania bioinformatyczne, umożliwiając użytkownikom zarządzanie mikromacierzami oraz danymi genomowymi.

Orange-Multitarget

Dodaje widgety pozwalające na klasyfikację zbiorów danych należących do wielu klas.
Wspiera następujące techniki klasyfikacji danych:

  • Binarna Relewancja (chyba nie powinienem tego tłumaczyć na Polski)
  • Drzewa
  • Sieci neuronowe
  • Częściowa metoda najmniejszych kwadratów

Orange-Network

Pakiet zawierający widgety do analizy i wizualizacji sieci.

Orange-NMF

Orange NMF dostarcza algorytmów typu non-negative matrix factorization algorithms (NMF), pakiet wykorzystuje z bibliotekę NIMFA oraz wydajne algorytmy singular value decomposition (rSVD). Zawiera widgety potrafiące radzić sobie z brakującymi danymi w macierzach wejściowych, ich normalizacją, przeglądaniem i określeniem jakości współczynników zwróconych przez algorytmy faktoryzacji macierzy.

Orange-Reliability

Pakiet udostępniający ocenę niezawodności, regresji oraz predykcji.

Orange-Text

Pakiet służący wyszukiwaniu prawidłowości w tekście, do analizy tekstu, tworzenie rankingu stron (algorytmy page rank)

Zbiory danych

W przypadku domyślnej instalacji dostarczone wraz z oprogramowaniem zbiory danych znajdziemy w folderze C:\Python27\Lib\site-packages\Orange\datasets. Dane znajdują się w plikach tekstowych o rozszerzeniu .tab a do każdego zbioru dostarczany jest również plik HTML, który można otworzyć w przeglądarce internetowej, zawierający opis danych z informacją o źródle z którego pochodzą, krótki opis czego dotyczą a także kilka wyliczonych wartości podsumowujących takich jak średnia, mediana bądź ilość przypadków. Z plików tych można również się dowiedzieć czy w danych występują niepełne obserwacje, co jak wiadomo jest bardzo istotne przy podejmowaniu się analizy danych.

Przykładowa analiza

Mam nadzieję, że udało mi się nie zanudzić nikogo nieco przydługawym wstępem. Przejdziemy teraz do przeprowadzenia prostej analizy danych z użyciem metod uczenia nienadzorowanego. Wykorzystamy komponenty ładujące przykładowe dane, badające i rysujące rozkłady parametrów, algorytmy klasyfikujące a ostatecznie sprawdzimy który klasyfikator najlepiej poradził sobie z postawionym zadaniem. Mam nadzieję, że brzmi interesująco, zatem do dzieła!
Analizę przeprowadzimy używając przykładowego zbioru danych o kwiatach irysa, który jest data miningowym odpowiednikiem znanego z języków programowania programu „Hello World” a więc najprostszym możliwym przykładem od którego dobrze i wygodnie jest zacząć naukę. Irys rozpatrywany jest pod względem przynależności do jednego z trzech gatunków: setosa, versicolor oraz virginica. Przynależność stwierdza się poprzez analizę fizycznych wymiarów części kwiata.
Kwiaty irysa w bazie posiadają pięć parametrów, z których pierwsze cztery są wartościami zmiennoprzecinkowymi pochodzącymi z pomiarów – długość liścia, szerokość liścia, długość płatka oraz szerokość płatka. Ostatnia z wartości jest przyporządkowaniem danego kwiata do danego gatunku, jest to wartość realizująca wiedzę ekspercką, służy ona weryfikacji poczynionych predykcji.
Poniżej widoczny jest nagłówek pliku iris.tab przedstawiający parametry, ich typy (c, d, class) oraz dwa pierwsze wiersze z danymi kwiatów.

Jak każdą analizę zaczniemy od pobrania danych, w naszym przypadku będą to dane z pliku iris.tab.
Aby pobrać dane z pliku należy przeciągnąć myszką na obszar roboczy ikonę “File” a następnie dwukrotnie ją kliknąć. Powinniśmy ujrzeć menu pozwalające na wybranie pliku do analizy. Domyślny folder powinien być ustawiony na datasets, gdyby jednak się zdarzyło, że tak nie jest to Orange instaluje zbiory danych pod taką ścieżką: C:\Python27\Lib\site-packages\Orange\datasets
Po wybraniu pliku należy zamknąć okienko gdyż dane są już załadowane.


Rysunek 1 File

Następnie możemy przyjrzeć się danym, które pobraliśmy a służą do tego komponenty Info wyświetlający informacje o danych w pliku oraz Data table pokazujący jakie konkretnie dane występują na tym etapie przetwarzania. Po przeciągnięciu ich na obszar roboczy należy je dwukrotnie kliknąć aby uzyskać podgląd danych.


Rysunek 2 Data table oraz Info

Na etapie analizy eksploracyjnej, którą właśnie wykonujemy, warto prześledzić dystrybucje parametrów, do czego służą komponenty Distributions, Attributes Statistics oraz Scatterplot.


Rysunek 3 Distributions


Rysunek 4 Attribute statistics


Rysunek 5 Scatter plot

Zachęcam do poeksperymentowania z tymi komponentami z dogłębniejszemu przyjrzeniu się rozkładom parametrów i poszukania prawidłowości w danych, a wiele z nich w widoku wykresu rozrzutu (scatter plot) nasuwa się samo.
Dodajmy teraz pierwszy z algorytmów klasyfikujących – Classification tree, a do niego podłączmy komponent Classification tree graph służący do przeglądania wygenerowanego drzewa decyzyjnego.

W naszym przykładzie zaczyna brać udział coraz to więcej komponentów ale jak na kilka kliknięć myszką efekty wydają się być ciekawe, gdyż poniżej widzimy już gotowe drzewo klasyfikacji kwiatów irysa (dostępne po dwukrotnym kliknięciu na komponencie classification tree graph). Oto kilka rzeczy które możemy z przedstawionego wykresu odczytać idąc od góry:
Początkowo zbiór zawiera po 1/3 kwiatów każdego gatunku. Algorytm dokonał podziału na podstawie parametru petal width z wartością 0.8. Kwiaty z mniejszą wartością parametru zostały sklasyfikowane jako setosa i jest to 100% kwiatów tego rodzaju. Następnie podział został dokonany ponownie na podstawie parametru petal width lecz tym razem z wartością podziału 1.75 i kwiaty z wartością powyżej zostały sklasyfikowane jako virginica (97.8% kwiatów sklasyfikowanych w ten sposób to virginica), natomiast pozostałe w 90.7% są kwiatami versicolor, lecz algorytm dokonuje dalszego podziału wykorzystując tym razem parametr petal length. Dalej mam nadzieję, że każdy już będzie w stanie sam odczytać z wykresu jak postępowała klasyfikacja.

Jak widać z widoku drzewa nie wszystkie kwiaty udało się poprawnie sklasyfikować za pomocą drzewa klasyfikacji, dlatego zachęcam do przebadania kilku klasyfikatorów za pomocą komponentu test learners. W przykładzie użyłem algorytmów k Nearest Neighbours, Naive Bayes, Majority oraz poznanego już Classification Tree. Należy zwrócić uwagę na kolejność połączeń, gdyż teraz to Test Learners pobiera dane z komponentu File, natomiast sam staje się jednocześnie źródłem danych dla klasyfikatorów jak i pobiera od nich efekty klasyfikacji. Test Learners poniżej podłączony jest jedynie do wyjść klasyfikatorów co w przypadku użycia tego komponentu, mimo iż może mało intuicyjne, jest poprawne. Zauważyć można jeszcze komponenty Confusion Matrix i ROC Analysis, o nich parę słów powiem za chwilę.

W najprostszym ujęciu można powiedzieć iż Test Learners dostarcza statystycznych miar poprawności działania algorytmów klasyfikujących. Pozwala on na wybranie spośród kilku parametrów:

  • Classification accuracy
  • Sensitivity
  • Specificity
  • Area under ROC
  • Information score
  • F-measure
  • Precision
  • Recall
  • Brier score

Opis charakterystyk wymagałby dość obszernego opisu, dlatego też zainteresowanych ich znaczeniem zachęcam do zajrzenia do poniższych linków:
http://en.wikipedia.org/wiki/Receiver_operating_characteristic
http://link.springer.com/article/10.1023%2FA%3A1022642017308
http://en.wikipedia.org/wiki/F-measure#Performance_measures
http://en.wikipedia.org/wiki/Brier_score

Przy ocenie użyteczności klasyfikatora użyteczna jest macierz krzyżową (Confusion Matrix), dająca wgląd w zależności pomiędzy porównanie danymi sklasyfikowanych i danymi referencyjnymi (pochodzącymi np. od eksperta w danej dziedzinie, które w naszym przypadku pochodzi z pola iris z oryginalnego zbioru danych). Confusion Matrix może być ważne w podejmowaniu decyzji o wyborze klasyfikatora w problemach, w których błędne sklasyfikowanie bądź niesklasyfikowanie obiektu obarczone są różnymi wagami punktów błędu jak np. w przypadku klasyfikowaniu potencjalnych pacjentów i rozpoznawaniu chorób.

Ostatnim z przedstawianych komponentów jest ROC Analysis przedstawiający jakość klasyfikatora poprzez wykreślenie zależności parametru wynikowego Sensitivity w zależności od 1 – Specificity. Linia biegnąca od punktu 0, 0 do punktu 1, 1 jest klasyfikatorem polegającym na losowym przyporządkowywaniu. Wykres dla klasyfikatora idealnego przebiegałby od punktu 0,0, pionowo do punktu 0,1 a następnie poziomo do punktu 1, 1 co oznaczałoby, że zawsze klasyfikował by wszystkie wystąpienia poprawnie nie tylko nie popełniając błędów ale także nie omijał by żadnych instancji danej klasy. W uproszczeniu można przyjąć iż ogólnie lepszy jest klasyfikator posiadający większe pole pod krzywą ROC.

Na zakończenie

I tak dotrwaliśmy do końca. Za pomocą kilku kliknięć myszką udało nam się wczytać przykładowe dane, przeanalizować rozkład parametrów, zbudowaliśmy drzewo klasyfikacyjne i porównaliśmy efekt jego sprawność ze sprawnością działania kilku innych klasyfikatorów. To dość sporo jak na jeden artykuł i zero! linii kodu,
Mam nadzieję iż udało mi się zaintrygować parę osób, gdyż właśnie przygotowuję kolejny artykuł na temat instalacji klasyfikatora C4.5 w pakiecie Orange.
W razie pytań bądź sugestii piszcie na mój adres email mateusz kropka kula małpa outlook kropka com.

6 myśli na temat “Orange”

  1. Programowanie wizualne nie jest w tym obszarze niczym nowym, więc raczej nie może być traktowane jako wyróżnik. Ważniejsza jest rzeczywista łatwość obsługi (z tym bywa różnie), wielość dostępnych algorytmów i szybkość działania.
    Czy pakiet który opisujesz można już możliwościami porównać do takich klasyków jak WEKA czy RapidMiner?

  2. Mam całĸiem spore doświadczenie z tym pakietem. Razem ze studentami przystępowaliśmy ogarnialiśmy na nim kilka projektów. Muszę przyznać, że w łatwości obsługi bije na głowę Wekę i trochę Rapid Minera. Bardzo użyteczne jest to, że bardzo łatwo można oskryptować go pythonem dookoła. Jeżeli chcesz coś sprawdzić “na szybko” gorąco polecam to narzędzie. Niemniej jednak przy większych zbiorach danych warto jednak sięgnąć po inne biblioteki jako, że jest kilka bugów w tym systemie (może w tej aktualnej wersji i tylko przy większych zbiorach) ale na poważnie nie udało nam się z tego skorzystać.

    1. @MichalMeina, napisz może więcej jakie to były błędy/problemy. Ułatwi to innym żeglugę po nieznanych morzach ;-)

  3. Największe problemy w wersji dla linuska (nie wiem jak w windowsie):

    1. w jakiś sposób orange robi cache komponentów przy zapisywaniu w xml (!) więc jak masz ćwierć miliona wierszy to następne uruchomienie orange-canvas się po prostu nie wykona (wystarczy usunąc katalog ~/.orange

    2. defaultowo liczby zapisywane są z dokładnością do 3 miejsc po przecinku – trzeba przepuscić potok przez skrypt w pythonie który zmieni domyślną precyzje table.domain.features[i].number_of_decimals = ??

    3. garbage collection (ale to raczej wina pythona) jakoś niezbyt dobrze działa (albo jakis wyciek pamięci) ale praca z dużą ilością danych zżera pamieć ekspresowo

    4. niektóre algorytmy są uruchamiane z pythona i tam też pamięc nie jest zbyt dobrze zarządzana, więc np. uczenie klasyfikatora może Ci zajć pół dnia poczym nagle stwierdzić, że nie ma wystarczającej ilosći pamięci dla danych parametrów (polecam użyć implementacje z sklearn – są tam podobne rzeczy)

    5. ładowanie większej ilośći danych lepiej napisać samego (np. przy użyciu cPickle)

    generalnie orange do obejrzenia niewielkich danych <10k wierszy (powiedzmy tak na oko) się nadaje idealnie, ale jak już coś policzyc na poważnie to warto jednak użyć orange jako bibliotek do pythona

  4. @Michal Mackiewicz
    Zgadzam się, że programowanie wizualne nie jest niczym nowym w tej tematyce, natomiast jest ogromnym ułatwieniem w porównaniu do klasycznego R (co prawda istnieją dodatki red-r oraz rkward ale na tym etapie ich rozwoju bym ich nie polecał). Jeżeli chodzi o jakość obsługi to moje doświadczenia są bardzo pozytywne, w odróżnieniu od wspomnianej przez Pana WEKI. Z RapidMinerem dopiero się zapoznaję więc ciężko mi jeszcze ocenić który z nich jest łatwiejszy bądź posiada więcej funkcji, natomiast na pewno co jest dla mnie dużą zaletą Orange to możliwość wykonania dowolnego skryptu i łatwość dodawania własnych widgetów.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">