经纬度k-means聚类python
时间: 2024-08-26 11:01:44 浏览: 106
K-means聚类是一种常见的无监督机器学习算法,用于将数据集中的点划分为K个簇。K是指聚类的数量,算法的目标是最小化每个点到其所属簇中心(质心)的距离的平方和。
当处理经纬度数据进行聚类时,需要注意经纬度是球面坐标,如果直接使用普通的欧几里得距离计算可能会得到不准确的结果,因为地球是曲面。在实际应用中,可以使用Haversine距离公式来计算地球上两点之间的距离,以获得更准确的聚类结果。
以下是使用Python实现经纬度数据的K-means聚类的一个简要例子:
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from math import radians, cos, sin, asin, sqrt
def haversine(lon1, lat1, lon2, lat2):
# 将十进制度数转换为弧度
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# Haversine公式计算两点间距离
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat / 2)**2 + cos(lat1) * cos(lat2) * sin(dlon / 2)**2
c = 2 * asin(sqrt(a))
r = 6371 # 地球平均半径,单位为公里
return c * r
# 假设data是一个包含经纬度的numpy数组,其中第一列是经度,第二列是纬度
data = np.array([
[116.46, 39.92],
[117.19, 39.13],
# ... 更多经纬度数据
])
# 使用Haversine公式计算距离
X = np.array([haversine(row[0], row[1], data[:, 0], data[:, 1]) for row in data])
# 数据标准化
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X.reshape(-1, 1))
# 应用K-means算法
kmeans = KMeans(n_clusters=3, random_state=0).fit(X_scaled)
# 输出聚类结果
print(kmeans.labels_)
# 聚类中心点
print(kmeans.cluster_centers_)
在实际应用中,需要根据数据的具体情况调整K值,即聚类的数量。
阅读全文
相关推荐

















