Ограничение в алгоритме Kmeans в python - PullRequest
0 голосов
/ 20 апреля 2020

У меня следующий код, но я не знаю, как я могу установить одно ограничение на расстояние? Например, сгруппируйте в радиусе 2 км.

from sklearn.cluster import KMeans
from sklearn import metrics
import numpy as np

v1=[3, 1, 1, 2, 1, 6, 6, 6, 5, 6, 7, 8, 9, 8, 9, 9, 8]
v2=[5, 4, 6, 6, 5, 8, 6, 7, 6, 7, 1, 2, 1, 2, 3, 2, 3]

x1 = np.array(v1)
x2 = np.array(v2)

X = np.array(list(zip(x1, x2))).reshape(len(x1), 2)
print(X)

import matplotlib.pyplot as plt
plt.plot(v1, v2, 'ro')
plt.axis([1, 9, 1, 8]) #Eje x: de 1 a 9; Eje Y: de 1 a 8
plt.show()

K = 3 
kmeans_model = KMeans(n_clusters=K).fit(X)

for i, l in enumerate(kmeans_model.labels_):
print("(x1,x2) -> Clase")
print("({0},{1}) ->:{2}".format(x1[i], x2[i], l))

С другой стороны, я использовал Pandas также,

from sklearn.cluster import KMeans
from pandas import DataFrame
from sklearn import metrics
import numpy as np

Data = {'e' : [3, 1, 1, 2, 1, 6, 6, 6, 5, 6, 7, 8, 9, 8, 9, 9, 8],
'r' : [5, 4, 6, 6, 5, 8, 6, 7, 6, 7, 1, 2, 1, 2, 3, 2, 3]}

df = DataFrame(Data, columns=['e','r'])
print(df)

kmeans2 = KMeans(n_clusters=1650).fit(df)
centroids = kmeans2.cluster_centers_
print(centroids)
plt.scatter(df['e'], df['r'], c=kmeans2.labels_.astype(float), s=50, alpha=0.5)
plt.scatter(centroids[:,0], centroids[:,1], c='blue', s=50)
plt.show() 

1 Ответ

0 голосов
/ 20 апреля 2020

Почему бы не использовать pandas и назначить группы по условиям для этого случая?

Как-то так

df = pd.DataFrame(data)
df1 = df[df.column2 > 2]
df2 = df[df.column2 <= 2]
...