Klastrowanie jest jednym z podstawowych narzędzi w analizie danych, pozwalającym na grupowanie podobnych obiektów w zbiory (klastry). Jedną z najczęściej używanych metod klastrowania jest algorytm K-średnich (K-means), który dzieli dane na określoną liczbę grup na podstawie ich podobieństw. W kontekście dużych zbiorów danych, takich jak nasz przykład – zbiór danych o percepcji trzęsień ziemi – K-średnich okazuje się być bardzo efektywną metodą, dającą praktyczne rezultaty. W tym rozdziale zaprezentujemy, jak za pomocą funkcji MATLAB zbudować model klastrowania na podstawie tego zbioru danych.
Zbiór danych o percepcji trzęsień ziemi zawiera 472 obserwacje i 10 cech, jednak ze względu na rozmiar, w projekcie użyjemy tylko pięciu z nich: wiek (age), liczba członków rodziny (family_member), piętro (floor), wstrząsy (shock) i strach (fear). Do klastrowania wykorzystamy pierwsze 300 obserwacji, podczas gdy pozostałe 172 posłużą jako dane testowe.
Aby zacząć, tworzymy nowy plik skryptu o nazwie Earthquake_KM_Func.m. Poniżej znajdują się poszczególne kroki kodu, który będzie użyty do zbudowania modelu klastrowania:
-
Ścieżka do pliku danych: Określamy pełną ścieżkę do zmodyfikowanego zbioru danych Earthquake Emotion.csv, którą będziemy wykorzystywać w projekcie.
-
Wczytanie danych: Za pomocą funkcji
readtable()wczytujemy dane do zmiennejTw formacie komórkowym. -
Określenie liczby obserwacji: Zmienna
Njest ustawiana na 300, co oznacza, że do klastrowania będziemy wykorzystywać pierwsze 300 obserwacji z pełnego zbioru danych (472 obserwacje). -
Wybór cech: Z danych wybieramy tylko pięć cech, które będą użyte w klastrowaniu. Każda cecha (kolumna w tabeli) jest konwertowana na wartości numeryczne przy pomocy funkcji
table2array(), co jest niezbędne do dalszego procesu klastrowania. -
Tworzenie macierzy wejściowej: Na podstawie wybranych zmiennych tworzymy macierz
X, która stanowi dane wejściowe do algorytmu K-średnich. -
Wybór dwóch cech do wizualizacji: Aby lepiej zrozumieć proces klastrowania, wybieramy dwie cechy (wiek i liczba członków rodziny), które będziemy wizualizować na wykresie.
-
Rysowanie wykresu: Za pomocą funkcji
plot()przedstawiamy dane w postaci wykresu, gdzie na osi poziomej umieszczony jest numer obserwacji, a na osi pionowej – wartości wybranych cech (wiek i liczba członków rodziny). -
Algorytm K-średnich: Używamy funkcji
kmeans()do przeprowadzenia klastrowania na podstawie danych w macierzyX, z liczbą klastrów ustawioną na 3. Funkcja ta zwraca dwa wyniki:idx– indeksy przypisania do klastrów dla każdej obserwacji orazC– współrzędne centroidów klastrów. -
Wizualizacja wyników: Tworzymy wykres, na którym wyświetlane są przypisane do klastrów dane oraz centroidy. Różne kolory oznaczają różne grupy, a centra klastrów są zaznaczone za pomocą krzyży.
Po wykonaniu powyższych kroków, użytkownik otrzyma dokładny obraz tego, jak przebiegają procesy klastrowania w zbiorze danych o percepcji trzęsień ziemi.
Kluczowe aspekty procesu klastrowania
Ważnym elementem, który należy zrozumieć, są dwie zmienne: idx oraz C. Pierwsza z nich to wektor indeksów, który przypisuje każdą obserwację do odpowiedniego klastra. Wartości w wektorze idx to liczby odpowiadające numerom klastrów – w naszym przypadku są to liczby 1, 2 lub 3. Przykładowo, obserwacja numer 1 może zostać przypisana do klastra 1, a obserwacja numer 2 do klastra 2.
Z kolei C to macierz centroidów, gdzie każda z trzech linii reprezentuje środek klastra, a kolumny to średnie wartości dla poszczególnych cech. Macierz ta pozwala na wyznaczenie centralnych punktów klastrów w przestrzeni wielowymiarowej.
Co ważne przy stosowaniu tej metody?
Klastrowanie metodą K-średnich wymaga kilku rzeczy do uwzględnienia:
-
Wybór odpowiedniej liczby klastrów (k): Jednym z wyzwań w procesie K-średnich jest wybór optymalnej liczby klastrów. Zbyt mała liczba może prowadzić do nadmiernego uogólnienia danych, podczas gdy zbyt duża liczba klastrów może spowodować nadmierne rozbicie danych na zbyt wiele grup.
-
Skalowanie danych: Ważne jest, aby dane były odpowiednio skalowane przed zastosowaniem algorytmu. Algorytm K-średnich jest wrażliwy na różnice w skali zmiennych. W przypadku niektórych cech, takich jak wiek czy liczba członków rodziny, mogą występować znaczne różnice w skali, co może wpłynąć na wyniki klastrowania.
-
Inicjalizacja centroidów: Choć algorytm K-średnich jest stosunkowo prosty, jego wyniki mogą być silnie zależne od inicjalizacji centroidów. Czasami różne początkowe punkty centroidów mogą prowadzić do różnych wyników klastrowania, co w przypadku dużych danych może być problematyczne.
-
Interpreting results: Po wykonaniu klastrowania istotne jest zrozumienie, co reprezentują poszczególne klastry. W przypadku naszego zbioru danych o percepcji trzęsień ziemi, klastery mogą odzwierciedlać różne grupy ludzi, różnie reagujących na wstrząsy i mających różne poziomy strachu czy obaw. Analiza wyników klastrowania pozwala na lepsze zrozumienie tych reakcji.
Jak zbudować model klasteryzacji za pomocą funkcji MATLAB: przykład zastosowania dla danych dotyczących cukrzycy
Wykorzystanie algorytmów klasteryzacji opartych na mieszankach gaussowskich (GMM) w MATLAB pozwala na efektywne grupowanie danych w oparciu o ich rozkład i zależności. Przyjrzymy się krok po kroku, jak stworzyć taki model, używając funkcji MATLAB i danych o pacjentach z cukrzycą. Proces ten obejmuje kilka kluczowych etapów: przygotowanie danych, konfigurację parametrów modelu, generowanie siatki dla wizualizacji oraz interpretację wyników.
Pierwszym krokiem jest załadowanie danych, które w tym przypadku znajdują się w pliku CSV. W przykładzie dane zawierają informacje o poziomie glukozy oraz wskaźniku masy ciała (BMI). Wartości te zostają wyciągnięte z tabeli, tworząc macierz wejściową , w której każdemu wierszowi odpowiadają dane jednej osoby. Następnie, aby skonfigurować algorytm, używamy funkcji statset() w celu ustawienia maksymalnej liczby iteracji (w tym przypadku 1000) oraz określamy typ macierzy kowariancji jako diagonalny. Użycie pełnej macierzy kowariancji, zamiast diagonalnej, może być opcjonalne w zależności od potrzeby dokładniejszego modelowania współzależności między cechami.
Aby wizualizować wyniki klasteryzacji, definiujemy długość siatki na 500 punktów. Korzystając z funkcji linspace(), tworzymy dwie wektory (dla glukozy i BMI), a następnie przy użyciu funkcji meshgrid() generujemy dwuwymiarową siatkę. Tak uzyskane współrzędne posłużą do obliczeń oraz wizualizacji wyników modelu GMM.
Kolejnym krokiem jest dopasowanie modelu GMM do danych. Używamy funkcji fitgmdist(), która na podstawie zadanych danych i liczby klastrów (w tym przypadku 2) generuje model mieszanki gaussowskich. Dla każdej próbki danych, funkcja cluster() przypisuje ją do odpowiedniego klastra, wskazując, który składnik mieszanki miał największą prawdopodobieństwo danej obserwacji. Wynikiem jest wektor z indeksami klastrów, który umożliwia późniejsze przypisanie każdego punktu danych do jednego z klastrów.
Aby ocenić, jak dobrze model GMM pasuje do danych, obliczamy odległości Mahalanobisa między punktami na siatce a środkami rozkładów gaussowskich w modelu. W tym celu używamy funkcji mahal(), która pozwala obliczyć te odległości dla wszystkich punktów w siatce. Na ich podstawie ustalamy próg odległości, który pozwoli na wizualizację obszarów odpowiadających poszczególnym komponentom mieszanki. Dzięki temu możemy na wykresie przedstawić elipsy, które reprezentują obszary prawdopodobieństwa dla każdej z grup.
Wizualizacja wyników odbywa się przy użyciu funkcji gscatter(), która tworzy wykres rozrzutu, grupując dane według ich przypisanych indeksów klastrów. Następnie, przy użyciu kolejnych funkcji rysujących, dodajemy do wykresu obszary odpowiadające rozkładom gaussowskim, a także zaznaczamy średnie wartości dla obu klastrów. Dzięki temu użytkownik może łatwo zobaczyć, jak dane zostały pogrupowane i które punkty należą do poszczególnych klas.
Ważnym elementem analizy jest również interpretacja wyników, które przedstawiają się w postaci dwóch klastrów, odpowiadających dwóm komponentom GMM. W przykładzie, który omawiamy, dane dotyczące glukozy zostały przypisane do jednego klastra, a dane dotyczące BMI do drugiego. Na podstawie takiej analizy możemy wyciągnąć wnioski o relacjach między tymi dwoma zmiennymi, a także lepiej zrozumieć strukturę danych w kontekście problemu, który rozwiązujemy.
Ostatecznie, choć algorytmy klasteryzacji takie jak GMM pozwalają na efektywne grupowanie danych, warto pamiętać, że ich jakość i przydatność zależą od kilku czynników. Przede wszystkim należy odpowiednio dobrać liczbę klastrów, która może wymagać eksperymentowania i analizy wyników z różnych prób. Ponadto, dobór typu macierzy kowariancji (diagonalna czy pełna) może mieć istotny wpływ na jakość modelu, zwłaszcza w przypadku, gdy cechy danych są ze sobą silnie skorelowane. Analiza wizualna, oparta na wykresach rozrzutu oraz elipsach, pozwala na lepsze zrozumienie struktury danych, ale nie zawsze dostarcza pełnej odpowiedzi na pytanie, dlaczego dane zostały pogrupowane w ten, a nie inny sposób.
Podsumowując, choć techniki takie jak GMM stanowią potężne narzędzie w analizie danych, ich pełne zrozumienie i efektywne wykorzystanie wymaga uwzględnienia wielu aspektów, takich jak odpowiedni dobór parametrów, analiza wyników oraz weryfikacja przyjętych założeń.
Jak stworzyć początkowy model systemu FIS dla prognozowania cen akcji?
Proces tworzenia modelu FIS (Fuzzy Inference System) przy użyciu narzędzia Neuro-Fuzzy Designer rozpoczyna się od wczytania odpowiednich danych i ustalenia parametrów dla poszczególnych funkcji członkowskich. Aby rozpocząć, klikamy przycisk „Generate FIS” w sekcji Generate FIS. Domyślny sposób podziału danych, Grid partition, powinien być zachowany bez zmian, ponieważ chcemy stworzyć początkowy model na tym ustawieniu. Po utworzeniu wstępnego modelu, przechodzimy do wyboru liczby funkcji członkowskich (MF) dla czterech wejść: OPEN, HIGH, LOW oraz VOLUME. W tym przypadku zdecydowano się na cztery funkcje członkowskie dla każdego z wejść, a w polu „Numbers of MFs” pozostawiono domyślne wartości: 4, 3, 3, 3. Funkcje członkowskie dla tych zmiennych ustawiono jako gaussowskie (gaussmf), a typ funkcji członkowskiej dla wyjścia ustawiono jako liniowy.
Po wygenerowaniu modelu FIS, należy zapisać go w przestrzeni roboczej lub pliku, wybierając odpowiednią opcję w menu File, a następnie eksportując go do Workspace lub File. Nazwę pliku można ustawić na ANFIS_Stock_App.
Następnie przystępujemy do treningu modelu, wykorzystując technologię sieci neuronowych adaptacyjnych (Adaptive Neural Network). Aby to zrobić, należy zmienić liczbę epok z 3 na 60 w odpowiednim polu „Epochs” i wybrać metodę optymalizacji – backpropagation. Po kliknięciu „Train Now” rozpocznie się proces treningowy, który będzie przebiegał zgodnie z wybranymi ustawieniami.
Po zakończeniu treningu modelu, aby zweryfikować jego poprawność, należy przeprowadzić testy porównawcze wyników modelu. W tym celu wybieramy dane kontrolne (Checking data) i uruchamiamy testowanie, klikając przycisk „Test Now”. Otrzymane wyniki pozwolą na ocenę, jak dobrze model odwzorowuje rzeczywiste wartości z zestawu testowego.
Kolejnym krokiem jest przeanalizowanie struktury modelu ANFIS, klikając przycisk „Structure” w sekcji ANFIS Info. Struktura ta wyświetli cztery wejścia (OPEN, HIGH, LOW, VOLUME), z których każde ma przypisane odpowiednią liczbę funkcji członkowskich (3 lub 4). Ponadto, wszystkie zasady wewnętrzne oraz zasady wyjściowe są generowane automatycznie przez system ANFIS.
Dla jeszcze dokładniejszej analizy, można otworzyć widok reguł w menu „View” i zaobserwować, jak model ANFIS reaguje na zmiany wartości wejściowych w czasie rzeczywistym. Dzięki temu możliwe jest uzyskanie aktualnych prognoz dla zmiennych, takich jak CLOSE.
Jeśli chcesz sprawdzić wszystkie funkcje członkowskie, należy udać się do opcji „Edit” i przejrzeć szczegóły poszczególnych MF. Na końcu, po zakończeniu procesu treningu, warto obejrzeć powierzchnię ANFIS, klikając „View|Surface” i analizując wykresy przedstawiające zmienność wyników w zależności od różnych wejść.
Po zakończeniu etapu trenowania i weryfikacji modelu, możemy przystąpić do oceny i walidacji naszej prognozy cen akcji. Aby to zrobić, użyjemy nowego zbioru danych testowych, na przykład z Google Stock Price. Porównamy przewidywane ceny akcji z rzeczywistymi danymi z kolumny CLOSE w zestawie testowym. Za pomocą odpowiednich funkcji, takich jak „readtable()” i „evalfis()”, będziemy mogli wczytać dane testowe, przeprowadzić normalizację oraz obliczyć prognozy na podstawie wcześniej wytrenowanego modelu ANFIS.
Pamiętajmy, że podczas testowania i oceny modelu, istotne jest przeprowadzenie normalizacji danych wejściowych, ponieważ ceny akcji często mają dużą zmienność, a sama prognoza dotyczy raczej trendów niż dokładnych wartości. Normalizacja pozwala na zrównanie skal wejściowych danych, co znacznie poprawia jakość prognoz.
Ważnym krokiem w procesie oceny modelu jest porównanie prognoz z rzeczywistymi wartościami na wykresie, aby ocenić, jak dokładnie nasz model ANFIS odwzorowuje rzeczywiste dane. Dzięki temu możemy zwrócić uwagę na ewentualne błędy lub rozbieżności i poprawić działanie modelu w przyszłości.

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский