• Nie Znaleziono Wyników

Algorytmy grupowania danych

N/A
N/A
Protected

Academic year: 2021

Share "Algorytmy grupowania danych"

Copied!
20
0
0

Pełen tekst

(1)

Algorytmy grupowania danych

(2)

G r

Grupowanie danych wokół medoidów przybliżone

– Rough k-medoids Clustering

(3)

W klasycznym algorytmie grupowania wokół medoidów optymalizowana jest wartość zwartości podziału (pogrupowania danych) definiowana jako:

gdzie:

(4)
(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

(8)
(9)
(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

(13)
(14)
(15)
(16)
(17)

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)

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);

}

}

}

(20)

Cytaty

Powiązane dokumenty

Dla wszystkich obiektów klasy Ksiazka powinna zostać wywołana metoda PrzedstawSie(), natomiast dla obiektów klasy Film na ekran powinno zostać wypisane nazwisko reżysera oraz

Powiemy, że algorytm Alg działający w strukturze danych S jest całkowicie poprawny ze względu na specyfikację &lt;wp,wk&gt; wttw dla wszystkich danych w strukturze S

Problem Dany jest ciąg rosnący e[1],..,e[n] oraz element x pewnej przestrzeni liniowo uporządkowanej &lt;E, &gt;. Następnie porównujemy x z kolejnymi elementami ciągu

(3) Jeżeli tak otrzymane drzewo nie jest częściowo uporządkowane, to przechodząc wzdłuż drogi od liścia x do korzenia, poprawić etykiety zamieniając etykietę ojca z

Powiemy, że problem jest rozstrzygalny, jeśli istnieje algorytm, który dla dowolnych danych x po skończonej liczbie kroków daje rozwiązanie problemu. W przeciwnym

Każde drzewo decyzyjne dla algorytmu sortującego ciąg n- elementowy przez porównywanie elementów, ma co najmniej wysokość log

Obliczanie wartości wyrażeń.. Czytamy kolejno znaki wyrażenia i kolejne argumenty operacji wpisujemy na stos argumentów, a kolejno spotkane operacje wpisujemy na stos

Zadanie Do zbioru reprezentowanego przez drzewo D dołączyć element e, o ile nie należy on jeszcze do etykiet drzewa D.... Zastosowanie: wyszukiwanie