Должен ли алгоритм K-средних работать так долго? - PullRequest
0 голосов
/ 26 апреля 2020
from sklearn.cluster import KMeans
from sklearn import metrics
import pandas as pd
from scipy.spatial.distance import cdist
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv('cluster.csv')

print (df.loc[:,['Location ID','Latitude','Longitude']])
x1 = np.array(df.loc[:,['Latitude']])
x2 = np.array(df.loc[:,['Longitude']])

plt.plot()
plt.xlim([0, 10])
plt.ylim([0, 10])
plt.title('Dataset')
plt.scatter(x1, x2)
plt.show()

# create new plot and data
plt.plot()
X = np.array(list(zip(x1, x2))).reshape(len(x1), 2)
colors = ['b', 'g', 'r']
markers = ['o', 'v', 's']

# k means determine k
distortions = []
K = range(1,15738)
for k in K:
    kmeanModel = KMeans(n_clusters=k).fit(X)
    kmeanModel.fit(X)
    distortions.append(sum(np.min(cdist(X, kmeanModel.cluster_centers_, 'euclidean'), axis=1)) / X.shape[0])

# Plot the elbow
plt.plot(K, distortions, 'bx-')
plt.xlabel('k')
plt.ylabel('Distortion')
plt.title('The Elbow Method showing the optimal k')
plt.show()

Я пытаюсь найти оптимальное количество кластеров, используя кривую локтя. Это работает, когда я устанавливаю диапазон K, чтобы сказать 10 или 100. Но 15 000+ - это то, где я никогда не смог этого сделать. Даже оставив это на ночь.

Так есть ли другой метод, который я могу использовать, чтобы найти кривую локтя?

...