用python生成一段代码:输入数据和质心,用kmeans算法将数据分类,k=2
时间: 2024-05-03 16:22:02 浏览: 106
数据挖掘与数据分析应用案例 数据挖掘算法实践 基于Python的Kmeans聚类算法的原理及优化算法.docx
好的,以下是使用Python实现的kmeans算法的代码,它可以将数据划分为2个类别:
```python
import random
# 计算欧氏距离
def distance(p1, p2):
return sum([(p1[i] - p2[i])**2 for i in range(len(p1))])**0.5
# 获取数据集的质心
def get_centroids(data, k):
centroids = []
for _ in range(k):
centroids.append(random.choice(data))
return centroids
# 分类数据
def classify(data, centroids):
clusters = {}
for point in data:
distances = [distance(point, centroid) for centroid in centroids]
cluster = distances.index(min(distances))
if cluster not in clusters:
clusters[cluster] = []
clusters[cluster].append(point)
return clusters
# 更新质心
def update_centroids(clusters):
centroids = []
for cluster in clusters.values():
centroid = [sum(point[i] for point in cluster)/len(cluster) for i in range(len(cluster[0]))]
centroids.append(centroid)
return centroids
# 检查质心是否相同
def same_centroids(centroids1, centroids2):
return sorted(centroids1) == sorted(centroids2)
# 主函数
def kmeans(data, k=2):
centroids1 = get_centroids(data, k)
while True:
clusters = classify(data, centroids1)
centroids2 = update_centroids(clusters)
if same_centroids(centroids1, centroids2):
break
centroids1 = centroids2
return clusters
# 测试
data = [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
clusters = kmeans(data, 2)
print(clusters)
```
其中,`data`表示待分类的数据集,`k`表示分成几类。在这个例子中,我们仅仅测试了几个样例数据。您可以将这段代码复制到您的编辑器中,运行它和更多的数据进行测试。
阅读全文