A következő legjobb alternatíva a Kmeans korlátainak leküzdésére

szia mindenkinek, hogy vagytok? hasonlóképpen ma bemutatom Önnek a klaszterezés egyik hatékony algoritmusát/modelljét, amelyet röviden Gauss-keverékmodelleknek (GMM)nek neveznek. De előtte először is értsük meg, miért a GMM a következő legjobb klaszterezési modell, összehasonlítva a Kmeans-szel.

Kmeans:

A Kmeans az elvárások maximalizálásaként ismert iteratív megközelítést alkalmazza. EM röviden.Az EM folyamata magában foglalja

  1. Véletlenszerűen rendeljen hozzá néhány fürtközpontot
  2. Addig ismételje a 3. és 4. lépést, amíg tovább nem konvergál.
  3. E-Step: rendeljen pontokat a legközelebbi klaszterközponthoz
  4. M-Step: állítsa be a klaszterközéppontokat az átlagra

Egyszerű szavakkal:

  1. Határozza meg a K értéket könyök módszerrel, és rendelje hozzá K-t (a klaszterek számát)
  2. Véletlenszerűen rendeljen minden adatpontot egy fürthöz
  3. Határozza meg a klaszter súlypontjait
  4. Határozza meg az egyes adatpontok távolságát a súlypontoktól, és rendeljen hozzá minden pontot a legközelebbi klaszter súlypontjához a minimális távolság alapján.
  5. Számítsa ki újra a klaszter centroidokat.
  6. Ismételje meg a 4. és 5. lépést, amíg el nem érjük azt a globális optimumot, ahol nincs lehetőség javításra

Gyakori hátrányok:

A Kmeans lassan működhet nagy adatkészlet esetén. Mivel a Kmeans minden iterációjának hozzá kell férnie az adatkészlet minden pontjához, így az algoritmus viszonylag lassú lesz a mintaadatok számának növekedésével.

A Kmeans egyik legnagyobb hátránya, hogy a klaszterek számát előre ki kell választani. Ez gyakori kihívás, mert a Kmeans nem tudja megtanulni a klaszterek számát az adatokból.

Mindazonáltal megoldottam a K fürtök számának meghatározását a Kmeans esetében, tekintse meg cikkemet autoelbow vagy látogassa meg a pypi.org webhelyet, és keressen rá az autoeblow

Ha előre haladunk, lássuk röviden

Mi az az elvárás-maximalizálás?

EM azaz elvárás- A maximalizálás egy statisztikai algoritmus a megfelelő modellparaméterek megtalálására. Jellemzően EM-et használunk, ha az adatokból hiányzó értékek vannak, vagyis az adatok hiányosak.

Ezeket a hiányzó értékeket/változókat látens változóknak nevezzük

Az EM megpróbálja a meglévő adatok alapján meghatározni ezeknek a változóknak az optimális értékét, majd megkeresi a modell paramétereit, és ezek alapján frissítjük a látens változó értékeit.

2 lépésből álló E-Step-et tartalmaz: a rendelkezésre álló adatok segítségével megbecsülik (kitalálják) a látens értékek értékét, és az E-lépésből származó becsült értékeken az M-Step frissíti a paramétereket.

Az elvárás-maximalizálás számos algoritmuson alapul, beleértve a Gauss-keverék modelleket és a Kmean-eket

Rengeteg cikk található az Elvárás-Maximalizálás E és M lépésének megértésére szolgáló algoritmikus módszeren.

Lássuk a gyakorlatban a GM-modelleket, hogy megtaláljuk a klasztereket

Egy Gauss-féle keverékmodell (GMM) megpróbálja megtalálni a többdimenziós Gauss-valószínűségi eloszlások keverékét. és mivel a GMM valószínűségi modellt tartalmaz, meg lehet találni az adott klaszterhez való tartozásának valószínűségét.

A GMM segít leküzdeni a rugalmasság hiányát a Kmeans klaszter alakjában, amelyet később a tanfolyam során látni fogunk, valamint a valószínűségi klaszter-hozzárendelés hiányát is.

A GMM azonban kissé nehézkes az eredmények értelmezése.

A K-Means elsősorban 2 paramétert használ: a K klaszterek számát és a centroidokat, valamint a GMM 3 paramétert: a K klaszterek számát, az átlagot és a klaszterek kovarianciait.

#create a dummy dataset

X, y_true = make_blobs(n_samples=400, centers=4, cluster_std=0.60, random_state=0)
X = X[:, ::-1] # flip axes for better plotting
rng = np.random.RandomState(13)
X_stretched = np.dot(X, rng.randn(2, 2))

A GMM alkalmazása előtt hozzon létre egy felhasználó által definiált plot függvényt, amely segít megérteni a klaszter alakját a GMM és a Kmeans segítségével

#Gmm
from matplotlib.patches import Ellipse
def plot_gmm(gmm, X, label=True, ax=None):
    def draw_ellipse(position, covariance, ax=None, **kwargs):
        ax = ax or plt.gca()
if covariance.shape == (2, 2):
            U, s, Vt = np.linalg.svd(covariance)
            angle = np.degrees(np.arctan2(U[1, 0], U[0, 0]))
            width, height = 2 * np.sqrt(s)
        else:
            angle = 0
            width, height = 2 * np.sqrt(covariance)
for nsig in range(1, 4):
            ax.add_patch(Ellipse(
                position, nsig * width, nsig * height,
                angle, **kwargs
            ))
    
    ax = ax or plt.gca()
    labels = gmm.fit(X).predict(X)
    if label:
        ax.scatter(X[:, 0], X[:, 1], c=labels, s=7, cmap='viridis', zorder=2) 
    else:
        ax.scatter(X[:, 0], X[:, 1], s=7, zorder=2)
    
    ax.axis('equal')
    w_factor = 0.2 / gmm.weights_.max()
    for pos, covar, w in zip(gmm.means_, gmm.covariances_, gmm.weights_):
        draw_ellipse(pos, covar, alpha=w * w_factor)
#keams
from scipy.spatial.distance import cdist
def plot_kmeans(kmeans, X, ax=None):
    labels = kmeans.fit_predict(X)
# plot the input data
    plt.figure(dpi=175)
    ax = ax or plt.gca()
    ax.axis('equal')
    ax.scatter(X[:, 0], X[:, 1], c=labels, s=7, cmap='viridis', zorder=2)
# plot the representation of the k-means model
    centers = kmeans.cluster_centers_
    radii = [
        cdist(X[labels == i], [center]).max()
        for i, center in enumerate(centers)
    ]
    for c, r in zip(centers, radii):
        ax.add_patch(plt.Circle(
            c, r, fc='#DDDDDD', lw=3, alpha=0.5, zorder=1
        ))

Kmeans

kmeans = KMeans(n_clusters=4, random_state=0).fit(X_stretched)
labels_knn = kmeans.predict(X_stretched)
plot_kmeans(kmeans, X_stretched)

GMM

from sklearn.mixture import GaussianMixture
gmm = GaussianMixture(n_components=4, covariance_type='full', random_state=42).fit(X_stretched)
labels_gmm = gmm.predict(X_stretched)
plt.figure(dpi=175)
plot_gmm(gmm, X_stretched)

Jól észrevehetjük a Kmeans és a GMM alakját. A Kmean-ek kör alakúra korlátozódnak.

Mivel a GMM egy valószínűségi modell, a valószínűségeket a segítségével is megkaphatjuk

probabilities = gmm.predict_proba(X_stretched)
probabilities

Itt vagyunk, mind a 4 klaszter a valószínűségekkel együtt. Ez nagyon hasznos, és rugalmasságot biztosít az eredmények küszöb alapján történő kiszűréséhez.

Ez az, gratulálunk, most a GMM-et a Kmeans következő legjobb alternatívájaként adjuk elő, remélem tetszett.

Ha többet szeretne megtudni a fürtözés fejlett típusairól, kövesse a másik A-Z Klaszterezés című cikkemet



Néhány alternatív internetes jelenlétem: a Facebook, Instagram, Udemy, a Blogger, az Issuu és még sok más.

A Quora oldalon is elérhető @ https://www.quora.com/profile/Rupak-Bob-Roy

Szép napot. Hamarosan beszélünk.