Techniki klasyfikacji danych w środowisku Matlab
Transkrypt
Techniki klasyfikacji danych w środowisku Matlab
Techniki klasyfikacji danych w środowisku Matlab Celem klasyfikacji danych jest zbudowanie modelu klasyfikatora, który w procesie klasyfikacji przydziela kaŜdej próbce testowej wartość atrybutu klasy w oparciu o wartości pozostałych atrybutów – deskryptorów. Klasyfikacja jest metodą eksploracji danych z nadzorem. Drzewo klasyfikacyjne (decyzyjne) składa się z korzenia oraz gałęzi prowadzących z korzenia do węzłów. W węzłach zapisywany jest warunek, który dotyczy obserwacji, zaś na samym dole drzewa znajdują się liście określające klasy. Algorytmem stosowanym do konstrukcji drzew decyzyjnych jest algorytm zachłanny, który tworzy drzewo decyzyjne w rekurencyjny sposób techniką „z góry na dół”, w sposób „dziel i rządź”. Najczęściej stosowanymi algorytmami, są: ID3, C4.5, CART lub CHAID, róŜni je przede wszystkim przyjęte kryterium podziału – sposobu tworzenia nowych węzłów w drzewie. Kryterium podziału powinna minimalizować wystąpienia błędnej klasyfikacji próbek danych. Analiza dyskryminacyjna polega na klasyfikowaniu danych do określonych klas na podstawie poznanych danych. Najczęściej stosowaną metodą dyskryminacji jest liniowa funkcja dyskryminacyjna, która rozdziela dane na zadaną liczbę klas. Podstawowym ograniczeniem tej metody jest załoŜenie liniowej separowalności klas danych. W przypadku, gdy nie zdołamy podzielić danych na klasy za pomocą linii prostej stosujemy inne funkcje dyskryminujące. Tabela 1. Zbiór danych testowych – gatunki irysów. Nazwa zbioru, autor Iris, R.A. Fisher Nazwa pliku Iris.txt Liczba klas 3 Liczba próbek 150 (50 na klasę) Nazwy klas – Iris Setosa, Iris Versicolour, Iris Virginica gatunki irysów Liczba atrybutów 5 (wraz z nazwą klasy) Długość Szerokość listka Długość płatka listka kielicha [cm] [cm] Nazwy atrybutów kielicha [cm] Szerokość płatka [cm] Tabela 2. Zbiór danych testowych – miejsca lokalizacji białek. Protein Localization Sites, Kenta Nakai, Institue of Molecular and Nazwa zbioru, autor Cellular Biology, Osaka, University Nazwa pliku Ecoli.txt Liczba klas 8 Liczba próbek 336 Nazwy klas, liczba cp (cytoplasm) 143 1 próbek z danej klasy Liczba atrybutów Nazwy atrybutów im (inner membrane without signal sequence) 77 pp (perisplasm) 52 imU (inner membrane, uncleavable signal sequence) 35 om (outer membrane) 20 omL (outer membrane lipoprotein) 5 imL (inner membrane lipoprotein) 2 imS (inner membrane, cleavable signal sequence) 2 9 (wraz z nazwą klasy) Nr probki, mcg, gvh, lip, chg, aac, alm1, alm2, nazwa klasy Tabela 3. Zbiór danych testowych – rozpoznawanie gatunków win. Wine recognition data, Institute of Pharmaceutical and Food Analysis Nazwa zbioru, autor and Technologies, Via Brigata Salerno, Italy Nazwa pliku Wine.txt Liczba klas 3 Liczba próbek 178 Klasa1 59 Nazwy klas, liczba Klasa2 71 próbek z danej klasy Klasa3 48 1) Alcohol 2) Malic acid 3) Ash 4) Alcalinity of ash 5) Magnesium 6) Total phenols Liczba atrybutów i 7) Flavanoids nazwy 8) Nonflavanoid phenols 9) Proanthocyanins 10)Color intensity 11)Hue 12)OD280/OD315 of diluted wines 13)Proline Ćwiczenie I Zbiór testowy Iris. a) Wyświetlić informacje statystyczne na temat próbek danych takie jak: - średnia wartość atrybutu - wartość maksymalna atrybutu - wartość minimalna atrybutu - odchylenie standardowe b) Wyświetlić próbki złoŜone z pierwszych dwóch atrybutów – długości i szerokości płatków kielicha - pogrupowane względem nazwy klas, drugi rysunek dla dwóch pozostałych atrybutów. Opisać rysunki. Podpowiedź: funkcje gscatter(), xlabel(), ylabel(). 2 c) Dokonać klasyfikacji uŜywając róŜnych typów analizy dyskryminacyjnej, wyświetlić błąd klasyfikacji. Klasyfikacji dokonać trzykrotnie – dla pierwszych dwóch atrybutów, dwóch kolejnych oraz wszystkich czterech. Dane trenujące i testujące podajemy identyczne. Podpowiedź: wywołanie funkcji classify() [wynik_klasyfikacji, blad_klasyfikacji]=classify (dane_trenujace, dane_testujace, nazwy_klas, typ_funkcji_dyskryminujacej) Typy funkcji dyskryminującej: 'linear', 'quadratic', 'diagLinear', 'diagQuadratic', 'mahalanobis'. d) Dwukrotnie zbudować drzewa klasyfikacyjne zgodnie z danymi wybieranymi do klasyfikacji w powyŜszych punktach. Obliczyć błąd klasyfikacji. Wyświetlić drzewa. Dane trenujące i testujące podajemy identyczne. Podpowiedź: funkcje treefit (), treeval (), treedisp(). Nazwy klas dla drzewa klasyfikacyjnego powinny być zapisane jako łańcuchy znakowe typu danych cell, dlatego teŜ naleŜy w pierwszej kolejności zmienne w kolumnie z nazwą klasy zamienić na typ łańcuchowy, a następnie dokonać konwersji na typ cell. MoŜna tego uniknąć podając typ drzewa w metodzie treefit('method','classification'), ale nie poznamy błędu klasyfikacji. Konwersja danych rzeczywistoliczbowych opisujących nazwy klas na dane typu cell: temp=java_array('java.lang.String', liczba_probek); %utworzenie macierzy danych typu łańcuchowego temp(1)=java.lang.String(num2str(kolumna_nazw_klas(1))); %przykład zamiany pierwszej nazwy klasy o typie rzeczywistoliczbowym na element tablicy typu łańcuchowego nazwa_klasy(1)=cell(temp(1)); %nazwa klasy jest juŜ zmienną typu cell Pozostałe konwersje typów dla pozostałych próbek naleŜy przeprowadzić iteracyjnie. Aby macierz z nazwami klasy była typu kolumnowego jak pozostałe macierze atrybutów naleŜy ją transponować. nazwa_klasy= nazwa_klasy’; Wywołanie funkcji treefit(), utworzenie drzewa klasyfikacyjnego: drzewo=treefit(zbior_trenujacy,nazwy_klas_jako_typ_cell); Wywołanie funkcji treeval(), wyświetlenie wyników klasyfikacji: klasyfikacja = treeval(drzewo,zbior_testowy); Obliczenie błędu klasyfikacji rozpoczynamy od pobrania wartości nazw z drzewa klasyfikacyjnego i następnie porównujemy ciągi łańcuchów nazw. klasy = drzewo.classname(klasyfikacja); blad_klasyfikacji = ~strcmp(klasy,nazwa_klasy); blad_klasyfikacji_w_procentach =sum(blad_klasyfikacji) / liczba_probek e) Porównać błędy klasyfikacji klasyfikatorów. 3 Ćwiczenie II Wykonać porównanie klasyfikatorów analogiczne jak w ćwiczeniu pierwszym dla danych zapisanych w ecoli.txt oraz wine.txt. Dane tworzące klasyfikator i dane trenujące powinny być identyczne (przypadek, gdy nie posiadamy próbek testujących a zamierzamy testować zbudowane klasyfikatory za pomocą danych uczących). Dane przetwarzane to w pierwszej kolejności wszystkie atrybuty a w drugim podejściu klasyfikacji 2 atrybuty wybrane przez uŜytkownika. Podpowiedź. Dane w pliku ecoli.txt zapisane w kolumnie pierwszej oznaczają numerację próbek i naleŜy je pominąć. 4