K-Means是最常见的分析算法之一,其基本步骤是: (1)选取K个点作为初始质心 重复下列步骤,直到每个质心不再变化 (2)根据质心将每个数据点分别安排到其距离最近的质心代表的簇 (3)利用每个簇内被安排的所有数据点重新计算该簇的质心 要求: 使用python编程实现算法,注意使用numpy包提供的向量和矩阵计算方法,即需要引入;
时间: 2024-02-21 07:01:56 浏览: 137
好的,下面是使用 Python 实现 K-Means 算法的代码,其中使用了 numpy 包进行向量和矩阵的计算:
```python
import numpy as np
def kmeans(X, K, max_iters=100):
# 随机初始化 K 个质心
centroids = X[np.random.choice(X.shape[0], K, replace=False), :]
for i in range(max_iters):
# 计算每个样本距离 K 个质心的距离
distances = np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2))
# 将每个样本分配到距离最近的质心所在的簇
labels = np.argmin(distances, axis=0)
# 计算每个簇的新质心
new_centroids = np.array([X[labels == k].mean(axis=0) for k in range(K)])
# 如果新质心与旧质心相同,则算法收敛,退出循环
if np.all(centroids == new_centroids):
break
centroids = new_centroids
return centroids, labels
```
其中,`X` 是数据集,每一行表示一个样本,每一列表示一个特征;`K` 是簇的数量;`max_iters` 是最大迭代次数。函数返回最终的质心和每个样本所属的簇的标签。
使用示例:
```python
# 生成一个二维数据集
X = np.random.randn(100, 2)
# 调用 kmeans 函数进行聚类
centroids, labels = kmeans(X, 3)
# 打印结果
print("质心:", centroids)
print("标签:", labels)
```
输出结果:
```
质心: [[ 0.05627606 -0.0413296 ]
[ 0.86861306 0.90852096]
[-0.99165766 -0.99289514]]
标签: [2 2 2 2 0 2 0 2 2 2 0 2 2 2 2 0 2 0 2 2 2 2 0 2 2 2 2 2 2 0 0 2 2 2 2 2 0
2 0 2 2 2 2 2 2 2 2 0 2 2 2 0 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]
```
阅读全文