Data Science

K-znamená shlukování

K-znamená shlukování

Kód tohoto blogu je spolu s datovou sadou k dispozici na následujícím odkazu https: // github.com / shekharpandey89 / k-means

K-Means shlukování je algoritmus strojového učení bez dozoru. Pokud porovnáme algoritmus shlukování bez dohledu K-Means s supervizovaným algoritmem, není nutné trénovat model s označenými daty. Algoritmus K-Means se používá ke klasifikaci nebo seskupení různých objektů na základě jejich atributů nebo funkcí do K počtu skupin. Zde je K celé číslo. K-Means vypočítá vzdálenost (pomocí vzorce vzdálenosti) a poté najde minimální vzdálenost mezi datovými body a centroidním klastrem pro klasifikaci dat.

Pojďme pochopit K-Means pomocí malého příkladu pomocí 4 objektů a každý objekt má 2 atributy.

Název_objektu Atribut_X Atribut_Y
M1 1 1
M2 2 1
M3 4 3
M4 5 4

K znamená řešení numerického příkladu:

K vyřešení výše uvedeného numerického problému pomocí K-Means musíme postupovat podle následujících kroků:

Algoritmus K-Means je velmi jednoduchý. Nejprve musíme zvolit libovolné náhodné číslo K a poté zvolit centroidy nebo střed klastrů. Pro výběr centroidů můžeme pro inicializaci zvolit libovolný náhodný počet objektů (záleží na hodnotě K).

Základní kroky algoritmu K-Means jsou následující:

  1. Pokračuje v běhu, dokud se žádné objekty nepohnou ze svých středisek (stabilní).
  2. Nejprve náhodně vybereme některé centroidy.
  3. Poté určíme vzdálenost mezi každým objektem a centroidy.
  4. Seskupení objektů na základě minimální vzdálenosti.

Každý objekt má tedy dva body jako X a Y a představují v prostoru grafu následující:

Abychom vyřešili náš výše uvedený problém, zpočátku zvolíme hodnotu K = 2 jako náhodnou.

Krok 1: Zpočátku jsme jako centroidy vybrali první dva objekty (1, 1) a (2, 1). Níže uvedený graf ukazuje to samé. Těmto centroidům říkáme C1 (1, 1) a C2 (2,1). Zde můžeme říci, že C1 je skupina_1 a C2 je skupina_2.

Krok 2: Nyní vypočítáme každý datový bod objektu na centroidy pomocí euklidovského vzorce vzdálenosti.

Pro výpočet vzdálenosti použijeme následující vzorec.

Vypočítáme vzdálenost od objektů k centroidům, jak je znázorněno na následujícím obrázku.

Takže jsme vypočítali vzdálenost každého datového bodu objektu pomocí výše uvedené metody vzdálenosti, nakonec jsme dostali matici vzdálenosti, jak je uvedeno níže:

DM_0 =

0 1 3.61 5 C1 = (1,1)

cluster1

group_1
1 0 2.83 4.24 C2 = (2,1)

cluster2

group_2
A B C D
1 2 4 5   X
1 1 3 4   Y

Nyní jsme vypočítali hodnotu vzdálenosti každého objektu pro každé těžiště. Například body objektu (1,1) mají hodnotu vzdálenosti k c1 je 0 a c2 je 1.

Protože z výše uvedené matice vzdálenosti zjistíme, že objekt (1, 1) má vzdálenost ke shluku1 (c1) je 0 a ke shluku2 (c2) je 1. Objekt je tedy blízko samotného clusteru1.

Podobně, pokud zkontrolujeme objekt (4, 3), vzdálenost ke shluku1 je 3.61 a cluster2 je 2.83. Takže objekt (4, 3) se přesune do clusteru2.

Podobně, pokud zkontrolujete objekt (2, 1), vzdálenost k clusteru 1 je 1 a ke clusteru 2 je 0. Tento objekt se tedy přesune na cluster2.

Nyní podle jejich hodnoty vzdálenosti seskupujeme body (shlukování objektů).

G_0 =

A B C D
1 0 0 0   group_1
0 1 1 1   group_2

Nyní podle jejich hodnoty vzdálenosti seskupíme body (shlukování objektů).

A nakonec bude graf vypadat níže po seskupení (G_0).

Iterace_1: Nyní budeme počítat nové centroidy, protože se počáteční skupiny změnily z důvodu vzorce vzdálenosti, jak je znázorněno v G_0. Takže skupina_1 má pouze jeden objekt, takže její hodnota je stále c1 (1,1), ale skupina_2 má 3 objekty, takže její nová hodnota těžiště je

Takže nové c1 (1,1) a c2 (3.66, 2.66)

Nyní musíme znovu vypočítat celou vzdálenost k novým centroidům, jak jsme vypočítali dříve.

DM_1 =

0 1 3.61 5 C1 = (1,1)

cluster1

group_1
3.14 2.36 0.47 1.89 C2 = (3.66,2.66)

cluster2

group_2
A B C D
1 2 4 5   X
1 1 3 4   Y

Iteration_1 (shlukování objektů): Nyní jsme ji jménem nového výpočtu matice vzdáleností (DM_1) seskupili podle toho. Posuneme tedy objekt M2 ze skupiny_2 do skupiny_1 jako pravidlo minimální vzdálenosti na centroidy a zbytek objektu bude stejný. Nové shlukování bude tedy uvedeno níže.

G_1 =

A B C D
1 1 0 0   group_1
0 0 1 1   group_2

Nyní musíme znovu vypočítat nové centroidy, protože oba objekty mají dvě hodnoty.

Nové centroidy tedy budou

Poté, co získáme nové centroidy, bude shlukování vypadat níže:

c1 = (1.5, 1)

c2 = (4.5, 3.5)

Iteration_2: Opakujeme krok, ve kterém vypočítáme novou vzdálenost každého objektu k novým vypočítaným centroidům. Po výpočtu tedy získáme následující matici vzdálenosti pro iteraci_2.

DM_2 =

0.5 0.5 3.20 4.61 C1 = (1.5, 1)

cluster1

group_1
4.30 3.54 0.71 0.71 C2 = (4.5, 3.5)

cluster2

group_2

ABECEDA

A B C D
1 2 4 5   X
1 1 3 4   Y

Opět děláme přiřazení klastrů na základě minimální vzdálenosti, jako jsme to dělali dříve. Poté jsme dostali shlukovací matici, která je stejná jako G_1.

G_2 =

A B C D
1 1 0 0   group_1
0 0 1 1   group_2

Jako tady, G_2 == G_1, takže není nutná žádná další iterace a my se zde můžeme zastavit.

Implementace K-Means pomocí Pythonu:

Nyní budeme implementovat algoritmus K-means v pythonu. K implementaci K-means použijeme slavnou datovou sadu Iris, která je open-source. Tato datová sada má tři různé třídy. Tato datová sada má v zásadě čtyři funkce: Sepální délka, šířka sepalu, délka okvětního lístku a šířka okvětního lístku. Poslední sloupec řekne název třídy daného řádku jako setosa.

Datová sada vypadá takto:

Pro implementaci pythonu k-means musíme importovat požadované knihovny. Takže importujeme Pandy, Numpy, Matplotlib a také KMeans ze sklearnu.clutser, jak je uvedeno níže:

Čteme Iris.csv datová sada pomocí metody read_csv panda a zobrazí prvních 10 výsledků pomocí metody head.

Nyní čteme pouze ty funkce datové sady, které jsme potřebovali k trénování modelu. Čteme tedy všechny čtyři funkce datových sad (délka sepalu, šířka sepalu, délka okvětního lístku, šířka okvětního lístku). Za tímto účelem jsme předali čtyři hodnoty indexu [0, 1, 2, 3] do funkce iloc datového rámce pandy (df), jak je znázorněno níže:

Nyní náhodně zvolíme počet klastrů (K = 5). Vytvoříme objekt třídy K-means a poté do ní vložíme naši x datovou sadu pro trénink a predikci, jak je znázorněno níže:

Nyní si představíme náš model s náhodnou hodnotou K = 5. Vidíme jasně pět shluků, ale vypadá to, že to není přesné, jak je znázorněno níže.

Naším dalším krokem je tedy zjistit, zda byl počet klastrů přesný nebo ne. A k tomu používáme metodu Elbow. Metoda Elbow se používá ke zjištění optimálního počtu klastru pro konkrétní datovou sadu. Tato metoda bude použita ke zjištění, zda byla hodnota k = 5 správná nebo ne, protože nedostáváme jasné shlukování. Poté přejdeme k následujícímu grafu, který ukazuje, že hodnota K = 5 není správná, protože optimální hodnota spadá mezi 3 nebo 4.

Nyní spustíme výše uvedený kód znovu s počtem klastrů K = 4, jak je znázorněno níže:

Nyní budeme vizualizovat výše uvedené seskupování nových sestavení K = 4. Níže uvedená obrazovka ukazuje, že nyní se shlukování provádí prostřednictvím k-means.

Závěr

Studovali jsme tedy algoritmus K-means v numerickém i pythonovém kódu. Také jsme viděli, jak můžeme zjistit počet klastrů pro konkrétní datovou sadu. Někdy metoda Elbow nemůže poskytnout správný počet klastrů, takže v takovém případě existuje několik metod, které si můžeme vybrat.

Hry Nainstalujte si nejnovější Dolphin Emulator pro Gamecube a Wii na Linuxu
Nainstalujte si nejnovější Dolphin Emulator pro Gamecube a Wii na Linuxu
Emulátor Dolphin vám umožní hrát vybrané hry Gamecube a Wii na osobních počítačích se systémem Linux (PC). Jako volně dostupný herní emulátor s otevř...
Hry Jak používat GameConqueror Cheat Engine v Linuxu
Jak používat GameConqueror Cheat Engine v Linuxu
Tento článek popisuje průvodce používáním cheatovacího modulu GameConqueror v systému Linux. Mnoho uživatelů, kteří hrají hry v systému Windows, často...
Hry Nejlepší emulátory herních konzolí pro Linux
Nejlepší emulátory herních konzolí pro Linux
Tento článek uvádí seznam populárního softwaru pro emulaci herních konzolí, který je k dispozici pro Linux. Emulace je vrstva softwarové kompatibility...