使用python实现一个无监督学习聚类算法
时间: 2023-06-16 14:04:33 浏览: 114
好的,我可以帮你实现一个基于K-means的无监督学习聚类算法,以下是代码实现:
```python
import numpy as np
class KMeans:
def __init__(self, n_clusters=8, max_iter=300):
self.n_clusters = n_clusters
self.max_iter = max_iter
def fit(self, X):
self.centroids = X[np.random.choice(X.shape[0], self.n_clusters, replace=False)]
for i in range(self.max_iter):
distances = np.linalg.norm(X[:, np.newaxis, :] - self.centroids, axis=-1)
labels = np.argmin(distances, axis=-1)
new_centroids = np.array([X[labels == j].mean(axis=0) for j in range(self.n_clusters)])
if np.allclose(self.centroids, new_centroids):
break
self.centroids = new_centroids
def predict(self, X):
distances = np.linalg.norm(X[:, np.newaxis, :] - self.centroids, axis=-1)
labels = np.argmin(distances, axis=-1)
return labels
```
这个KMeans类有两个方法:
- `fit`:训练方法,输入数据X,根据KMeans算法对数据进行聚类
- `predict`:预测方法,输入数据X,输出每个数据点所属的簇的标签
使用方法:
```python
X = np.array([[1, 2], [1, 4], [1, 0],
[4, 2], [4, 4], [4, 0]])
kmeans = KMeans(n_clusters=2)
kmeans.fit(X)
labels = kmeans.predict(X)
print(labels) # [0 0 0 1 1 1]
```
这个例子中,我们生成了一个二维数据集X,包含6个点,其中前三个点在同一个簇内,后三个点在同一个簇内,使用KMeans进行聚类,将数据分为两个簇。
阅读全文