Scikit learn 对lat-long数据进行聚类

Scikit learn 对lat-long数据进行聚类,scikit-learn,cluster-analysis,latitude-longitude,Scikit Learn,Cluster Analysis,Latitude Longitude,我正试图将我的lat-long数据聚类并划分为12个不同的区域,但是kmeans算法把时间搞砸了。我只试了两个集群,结果坏得很厉害(附图),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 =

我正试图将我的lat-long数据聚类并划分为12个不同的区域,但是kmeans算法把时间搞砸了。我只试了两个集群,结果坏得很厉害(附图),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()

很明显,您的索引有问题

您在这两个属性上绘制的结果是不可能的。造成这种影响的并不是噪声鲁棒性——即使如此,k-mrans簇也必然是Voronoi细胞


要么使用不同的属性,要么使用不同的行索引。因此,错误在调用中的某个地方,而不是在k-means中。

尝试搜索。您的问题可能已经得到了回答(有许多类似问题的链接)