用python写一个聚类算法
时间: 2023-06-30 18:10:44 浏览: 62
好的,我可以为您介绍一个基于Python的聚类算法:K-Means聚类算法。
K-Means算法是一种基于距离的聚类算法,它将样本数据分成K个互不相交的簇,使簇内的样本相似度较高,簇间的样本相似度较低。下面是一个简单的K-Means算法的Python实现:
```python
import numpy as np
def kmeans(X, k, max_iter=100):
# X: 样本数据,k: 簇的数量,max_iter: 最大迭代次数
n, m = X.shape # n: 样本数量,m: 样本维度
centroids = X[np.random.choice(n, k, replace=False)] # 初始化聚类中心
for i in range(max_iter):
# 计算每个样本到每个聚类中心的距离
dists = np.linalg.norm(X[:, np.newaxis, :] - centroids, axis=2)
# 分配样本到距离最近的聚类中心
labels = np.argmin(dists, axis=1)
# 更新聚类中心
for j in range(k):
centroids[j] = np.mean(X[labels == j], axis=0)
return labels, centroids
```
这里使用了numpy库来进行向量化计算,加快了算法的运行速度。使用方法如下:
```python
X = np.random.randn(100, 2) # 随机生成100个2维样本数据
labels, centroids = kmeans(X, 3) # 聚类成3个簇
```
其中,labels为每个样本所属的簇的标签,centroids为聚类中心的坐标。您可以根据需要进行修改和优化。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)