Algorytmy grupowania danych Grupowanie danych wok medoidw przyblione
Algorytmy grupowania danych
Grupowanie danych wokół medoidów przybliżone G – Rough k-medoids Clustering r
W klasycznym algorytmie grupowania wokół medoidów optymalizowana jest wartość zwartości podziału (pogrupowania danych) definiowana jako: gdzie:
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.
OZNACZENIA ORAZ POJĘCIA
ALGORYTM GRUPOWANIA DANYCH PRZYBLIŻONY WOKÓŁ MEDOIDÓW
DWIE KLASY – ICH BRZEG I DOLNE APROKSYMACJE
Jakość grupowania danych: wskaźnik Davies-Bouldin
PRZYKŁADOWE DANE + KOLEJNE ITERACJE ALGORYTMU GRUPOWANIA PRZYBLIŻONEGO WOKÓŁ MEDOIDÓW
public void Change. Medoid. Object(int _m, int _d) { double dd = get. RCPC(); if (dd < rcpc) { _d 1 = _d; _m 1 = _m; rcpc = dd; double[] d 1 = (double[])med. L[_m]; double[] d 2 = (double[])c. L[_d]; med. L. Remove. At(_m); med. L. Insert(_m, d 2); } c. L. Remove. At(_d); c. L. Insert(_d, d 1); med. L. Remove. At(_m); med. L. Insert(_m, d 1); Get. Lower. Upper(); c. L. Remove. At(_d); c. L. Insert(_d, d 2); Display. Image. Data(); } med. L – lista medoidów c. L – lista pozostałych obiektów get. Lower. Upper – przydzielenie punktów do klas – aproksymacje dolne i górne
public void Get. Global. RCPC() { rcpc = Double. Max. Value; for (int i = 0; i < C; i++) { for (int j = 0; j < c. L. Count; j++) { Change. Medoid. Object(i, j); } }
public void Get. Lower. Upper() { int changed = 0; for (int j = 0; j < C; j++) { Clear. Clusters(); Set. Medoids(); if (j == di) continue; for (int i = 0; i < c. L. Count; i++) { if (Math. Abs(dist[j] - dm) < eps) { int di = 0; double dm = Double. Max. Value; Cluster CL = (Cluster)m. Clusters[j]; double[] d 1 = (double[])c. L[i]; CL. Set. Upper(d 1); double[] dist = new double[C]; } for (int j = 0; j < C; j++) { } double[] d 2 = (double[])med. L[j]; if (changed == 0) { Cluster CL = (Cluster)m. Clusters[di]; CL. Set. Lower(d 1); } double d 3 = Distance. Get. Distance(d 1, d 2); dist[j] = d 3; if (dm > d 3) { dm = d 3; di = j; } }
- Slides: 20