scikit-learn - 聚类经纬度数据
问题描述
我正在尝试将我的 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()
解决方案
显然,您的索引有问题。
您绘制的结果是不可能通过这两个属性的 k-means 绘制的。导致这种影响的不是噪声鲁棒性——即使那样,k-mrans 簇也必然是 Voronoi 细胞。
您使用不同的属性或不同的行索引。所以错误在你的调用中,而不是在 k-means 中。
推荐阅读
- sqlite - SQLITE3 GROUP BY "周年纪念日"
- node.js - 使用 axios 的 HTTPrequest 导致 CORS 错误
- espocrm - 如何在 epsocrm 中更改特定登录页面图像的位置
- c# - 如何修复减法、乘法和除法 C# 的代码
- javascript - 如何根据提交而不是合并的拉取请求配置发布起草者
- javascript - 设置间隔功能
- elasticsearch - 按数组项或空数组过滤
- python - 为什么 request.method 没有被调用?
- reactjs - 如何使用 TypeScript 以类型安全的方式访问 React 子元素道具?
- python - 如何从 CSV 解析日期时间?