Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Algorytmy grupowania danych
2
Grupowanie danych wokół medoidów przybliżone
– Rough k-medoids Clustering Gr
3
W klasycznym algorytmie grupowania wokół medoidów optymalizowana
jest wartość zwartości podziału (pogrupowania danych) definiowana jako: gdzie:
5
W przybliżonym algorytmie k-medoidów, standardowe pojęcie zwartości
pogrupowania zastąpione zostaje pojęciem przybliżonej zwartości pogrupowania danych. Przybliżona zwartość podziału – pogrupowania określa oddzielnie wpływ obiektów znajdujących się w dolnej aproksymacji klasy – skupienia od wpływu wywieranego przez obiekty znajdujące się na brzegu badanej klasy. Pojęcia dolnej i górnej aproksymacji oraz brzegu opierają się na pojęciach teorii zbiorów przybliżonych.
6
OZNACZENIA ORAZ POJĘCIA
7
ALGORYTM GRUPOWANIA DANYCH PRZYBLIŻONY WOKÓŁ MEDOIDÓW
10
DWIE KLASY – ICH BRZEG I DOLNE APROKSYMACJE
11
Jakość grupowania danych:
wskaźnik Davies-Bouldin
12
PRZYKŁADOWE DANE + KOLEJNE ITERACJE ALGORYTMU GRUPOWANIA
PRZYBLIŻONEGO WOKÓŁ MEDOIDÓW
17
cL – lista pozostałych obiektów
public void ChangeMedoidObject(int _m, int _d) { double[] d1 = (double[])medL[_m]; double[] d2 = (double[])cL[_d]; medL.RemoveAt(_m); medL.Insert(_m,d2); cL.RemoveAt(_d); cL.Insert(_d, d1); GetLowerUpper(); DisplayImageData(); double dd = getRCPC(); if (dd < rcpc) { _d1 = _d; _m1 = _m; rcpc = dd; } medL.RemoveAt(_m); medL.Insert(_m, d1); cL.RemoveAt(_d); cL.Insert(_d, d2); medL – lista medoidów cL – lista pozostałych obiektów getLowerUpper – przydzielenie punktów do klas – aproksymacje dolne i górne
18
public void GetGlobalRCPC()
{ rcpc = Double.MaxValue; for (int i = 0; i < C; i++) for (int j = 0; j < cL.Count; j++) ChangeMedoidObject(i, j); }
19
for (int j = 0; j < C; j++) { if (j == di) continue;
public void GetLowerUpper() { ClearClusters(); SetMedoids(); for (int i = 0; i < cL.Count; i++) int di = 0; double dm = Double.MaxValue; double[] d1 = (double[])cL[i]; double[] dist = new double[C]; for (int j = 0; j < C; j++) double[] d2 = (double[])medL[j]; double d3 = Distance.GetDistance(d1, d2); dist[j] = d3; if (dm > d3) dm = d3; di = j; } int changed = 0; for (int j = 0; j < C; j++) { if (j == di) continue; if (Math.Abs(dist[j] - dm) < eps) Cluster CL = (Cluster)mClusters[j]; CL.SetUpper(d1); } if (changed == 0) Cluster CL = (Cluster)mClusters[di]; CL.SetLower(d1);
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.