聚类算法:将数据集中的对象分组成为几个簇,簇内对象的相似度比簇间对象的相似度高。代码案例
时间: 2024-05-05 15:23:03 浏览: 17
以下是一个简单的聚类算法K-means的Python代码实现:
```python
import numpy as np
class KMeans:
def __init__(self, k=2, max_iterations=100):
self.k = k
self.max_iterations = max_iterations
def fit(self, data):
self.centroids = data[np.random.choice(range(len(data)), self.k, replace=False)]
for i in range(self.max_iterations):
clusters = [[] for _ in range(self.k)]
for point in data:
distances = np.linalg.norm(self.centroids - point, axis=1)
cluster = np.argmin(distances)
clusters[cluster].append(point)
new_centroids = []
for cluster in clusters:
if cluster:
new_centroid = np.mean(cluster, axis=0)
new_centroids.append(new_centroid)
if len(new_centroids) == self.k:
if np.alltrue(new_centroids == self.centroids):
break
self.centroids = new_centroids
def predict(self, data):
distances = np.linalg.norm(self.centroids - data, axis=1)
cluster = np.argmin(distances)
return cluster
```
这里实现了一个KMeans类,其中fit方法用于聚类,predict方法用于预测数据点所在的簇。具体的聚类过程如下:
1. 在数据集中随机选择k个点作为初始聚类中心。
2. 对于每个数据点,计算其到k个聚类中心的距离,并将其分配到距离最近的聚类中心所在的簇。
3. 对于每个簇,重新计算其聚类中心。
4. 重复步骤2和3,直到聚类中心不再改变或达到最大迭代次数。
这里使用了Numpy库来进行向量和矩阵的计算,使得代码更加高效。
相关推荐
![](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)