k-means聚类算法实例
时间: 2023-09-05 07:13:39 浏览: 111
k-means是一种常见的聚类算法,它将数据分成k个簇,每个簇内的数据点相似度较高,而不同簇之间的相似度较低。它的基本思想是:将数据点分成k个簇,使得每个簇内的点与该簇内所有点的距离之和最小。
下面是一个简单的k-means聚类算法的实例:
1. 首先,随机选择k个数据点作为初始簇中心点。
2. 对于每个数据点,计算其与每个簇中心点之间的距离,并将其分配到距离最近的簇中。
3. 对于每个簇,重新计算该簇的中心点,即将该簇中所有数据点的坐标取平均值作为新的中心点。
4. 重复步骤2和步骤3,直到簇中心点不再发生变化或达到最大迭代次数。
下面是Python代码实现一个简单的k-means聚类算法:
```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 随机生成数据
data = pd.DataFrame(np.random.randn(100, 2))
# 设置簇数K
K = 3
# 随机选择K个数据点作为初始簇中心点
centroids = data.sample(n=K)
# 初始化簇分配结果
clusters = pd.Series(np.zeros(len(data)))
# 设置最大迭代次数
max_iter = 10
# 迭代计算
for i in range(max_iter):
# 对于每个数据点,计算其与每个簇中心点之间的距离,并将其分配到距离最近的簇中
for j in range(len(data)):
distances = [np.linalg.norm(data.iloc[j] - centroids[k]) for k in range(K)]
cluster = np.argmin(distances)
clusters[j] = cluster
# 对于每个簇,重新计算该簇的中心点
for k in range(K):
centroids.iloc[k] = data[clusters == k].mean()
# 可视化结果
colors = ['red', 'green', 'blue']
for k in range(K):
plt.scatter(data[clusters == k][0], data[clusters == k][1], c=colors[k])
plt.scatter(centroids[0], centroids[1], c='black', marker='x')
plt.show()
```
这段代码首先随机生成了100个二维数据点,然后随机选择3个数据点作为初始簇中心点。接着,它通过迭代计算不断更新簇分配结果和簇中心点,直到簇中心点不再发生变化或达到最大迭代次数。最后,它将结果可视化出来。
运行结果可能会每次都不同,但一般情况下,我们会得到三个不同颜色的簇中心点和对应的数据点。
阅读全文