写一个python脚本 基于曼哈顿距离实现KMeans聚类 并保存聚类结果
时间: 2024-05-15 16:18:01 浏览: 111
好的,以下是实现KMeans聚类并保存聚类结果的python脚本:
```python
import numpy as np
import pandas as pd
def manhattan_distance(x1, x2):
"""计算曼哈顿距离"""
return np.sum(np.abs(x1 - x2))
def KMeans(data, K, max_iter=300):
"""
KMeans聚类算法
:param data: 数据集,numpy数组或pandas dataframe
:param K: 聚类数
:param max_iter: 最大迭代次数
:return: labels - 每个样本所属簇的标签
centroids - 簇的中心点坐标
"""
# 随机初始化K个中心点
n_samples, n_features = data.shape
centroids = data[np.random.choice(n_samples, K, replace=False)]
# 初始化样本所属簇的标签
labels = np.zeros(n_samples)
# 迭代KMeans算法
for _ in range(max_iter):
# 为每个样本分配所属簇
for i in range(n_samples):
distances = [manhattan_distance(data[i], centroid) for centroid in centroids]
labels[i] = np.argmin(distances)
# 更新簇的中心点坐标
for k in range(K):
mask = (labels == k)
if np.sum(mask) > 0:
centroids[k] = np.mean(data[mask], axis=0)
return labels, centroids
if __name__ == '__main__':
# 读取数据集
data = pd.read_csv('data.csv', header=None).values
# 聚类
K = 3
labels, centroids = KMeans(data, K)
# 保存聚类结果
results = np.column_stack((data, labels))
pd.DataFrame(results).to_csv('results.csv', header=None, index=None)
```
在这个脚本中,我们使用numpy数组或pandas dataframe作为数据集,实现了基于曼哈顿距离的KMeans聚类算法,并保存了聚类结果。你可以根据需要修改数据集和聚类数K,然后运行脚本即可得到聚类结果。注意,由于我们使用了随机初始化中心点,每次运行结果可能不同。
阅读全文