Кластеризация лат длинных данных - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь кластеризовать и разделить свои латинские данные на 12 различных областей, однако алгоритм kmeans не работает.Я пробовал только 2 кластера, и он так сильно сломался (картинка прилагается), что даже 12 не работал хорошо. Я знаю, что kmeans чувствителен к шуму, и я также убрал его

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from collections import Counter
df = pd.read_csv("all.csv");
df = df.dropna()
df = df.loc[ ~(df["area"]=="FarEast")]

df["Latitude"] = df["Latitude"].astype(float)
df["Longitude"] = df["Longitude"].astype(float)
df = df.drop(df.nsmallest(4,"Longitude").index)
X=df.loc[:,['Latitude','Longitude']]

X = X.reset_index()
id_n=2
kmeans = KMeans(n_clusters=id_n, random_state=0).fit(X)
id_label=kmeans.labels_
#plot result
ptsymb = np.array(['b.','r.','m.','g.','c.','k.','b*','r*','m*','r^']);
plt.figure(figsize=(12,12))
plt.ylabel('Longitude', fontsize=12)
plt.xlabel('Latitude', fontsize=12)

# import itertools
# marker = itertools.cycle((',', '+', '.', 'o', '*')) 



for i in range(id_n):
    cluster=np.where(id_label==i)[0]
    plt.plot(X.Latitude[cluster].values,X.Longitude[cluster].values,ptsymb[i])
plt.show()

Cluster Images

1 Ответ

0 голосов
/ 14 марта 2019

Очевидно, что с индексированием что-то не так.

Результат, который вы построили, равен невозможно с помощью k-средних для этих двух атрибутов. Это не шумоустойчивость, которая вызывает такие эффекты - даже тогда кластеры k-mrans обязательно будут клетками Вороного.

Либо вы использовали разные атрибуты, либо разные индексы строк. Итак, ошибка где-то в вашем вызове, а не в k-средних.

...