K-Means clustering ist ein unsupervised machine learning Algorithmus. K-Means versucht, unsere gewählten Daten zu klassifizieren, ohne dass diese gelabelled wurden.
Wähle K (z.B). random Punkte. sogenannte cluster centers, auch genannt centroids.
2. Ordnen jeden Datenpunkt dem nächstgelegenen Cluster zu, indem sein Abstand zu den einzelnen Schwerpunkten berechnet wird.
3. Bestimme das neue Clusterzentrum, indem der Durchschnitt der zugewiesenen Punkte berechnet wird.
4. Wiederhole Schritt 2 und 3 bis sich keine der Clusterzuordnungen mehr ändert.
from matplotlib import pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
In diesem Tutorial generieren wir unsere eigenen Datenpunkte. sklearn.datasets hat eine function (make_blobs), wo random Datenpunkte gezeichnet werden. centers Parameter gibt an, wie viele Anzahl cluster es gibt.
X, y = make_blobs(n_samples = 800, centers = 6, cluster_std = 0.60, random_state = 0)
plt.scatter(X[:,0], X[:,1], s=10, c = 'green') #X[:,0] all x-values of our data points; X[:,1] all y-values of our datapoints
plt.show()
K-Means kann mit Hilfe der sklearn library einfach implementiert werden.
kmeans = KMeans(n_clusters=i, init='k-means++', max_iter=300, n_init=10, random_state=0)
kmeans.fit(X) #compute clusters
In der Clusteranalyse ist die Ellbogenmethode eine Heuristik, die zur Bestimmung der Anzahl der Cluster in einem Datensatz verwendet wird. Die Methode besteht darin, die erklärte Variation als Funktion der Anzahl der Cluster darzustellen und die Krümmung der Kurve als Anzahl der zu verwendenden Cluster auszuwählen.
Dabei misst die inertia, wie gut ein Datensatz geclustered wurde. Sie wird berechnet, indem der Abstand zwischen jedem Datenpunkt und seinem Schwerpunkt gemessen, dieser Abstand quadriert und diese Quadrate über einen Cluster summiert werden. Ein gutes Modell ist ein Modell mit geringer inertia und einer geringen Anzahl von Clustern. Ein Kompromiss, denn mit zunehmendem K nimmt die Trägheit ab.
Ergänze deinen Code.
Wie interpretierst Du den Plot?
wcss = []
for i in range(1, 11):
kmeans = KMeans(n_clusters=i, init='k-means++', max_iter=300, n_init=10, random_state=0)
kmeans.fit(X)
wcss.append(kmeans.inertia_) #Summe der quadrierten Abstände der Stichproben zum nächstgelegenen Clusterzentrum
plt.plot(range(1, 11), wcss)
plt.title('Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('WCSS')
plt.show()
Jetzt sollten die Center der Cluster natürlich noch eingezeichnet werden:
kmeans = KMeans(n_clusters=6, init='k-means++', max_iter=300, n_init=10, random_state=0)
kmeans.fit_predict(X) #Compute cluster centers and predict cluster index for each sample.
plt.scatter(X[:,0], X[:,1])
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=10, c='red')
plt.show()
Setze k-Means mit dem Iris Dataset um.
Tipps
Wie viele clusters haben wir?
Schaue sepal length und width an. Wie können wir auf die predicted class zugreifen?
Wenn Du alleine nicht weiterkommst, ersetze die Fragezeichen mit korrektem Code:
iris = pd.read_csv('IRIS.csv')
X = iris[["sepal_length", "sepal_width", "petal_length", "petal_width"]].values
y = iris["species"].values
kmeans = KMeans(n_clusters =❓, init = 'k-means++', max_iter = 300, n_init = 10, random_state = 0)
y_kmeans = kmeans.fit_predict(❓)
plt.scatter(X[y_kmeans == ❓, 0], X[y_kmeans == ❓, 1], s = 100, c = 'purple', label = 'iris-setosa') #looking at sepal length and width
plt.scatter(X[y_kmeans == ❓, 0], X[y_kmeans == ❓, 1], s = 100, c = 'orange', label = 'Iris-versicolour')
plt.scatter(X[y_kmeans == ❓, 0], X[y_kmeans == ❓, 1], s = 100, c = 'green', label = 'Iris-virginica')
#Plotting the centroids of the clusters
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:,1], s = 100, c = 'red', label = 'Centroids')
plt.legend()
plt.show()