首页 > 解决方案 > 聚类经纬度数据

问题描述

我正在尝试将我的 lat long 数据聚类并划分为 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()

集群图像

标签: scikit-learncluster-analysislatitude-longitude

解决方案


显然,您的索引有问题。

您绘制的结果是不可能通过这两个属性的 k-means 绘制的。导致这种影响的不是噪声鲁棒性——即使那样,k-mrans 簇也必然是 Voronoi 细胞。

您使用不同的属性或不同的行索引。所以错误在你的调用中,而不是在 k-means 中。


推荐阅读