Kmeans算法实例包含数据和代码
时间: 2024-05-08 18:20:42 浏览: 76
以下是一个Kmeans算法的Python实现示例:
```python
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
# 生成随机数据
X, _ = make_blobs(n_samples=1000, centers=4, random_state=42)
# 定义Kmeans类
class KMeans:
def __init__(self, n_clusters=4, max_iter=100, random_state=42):
self.n_clusters = n_clusters
self.max_iter = max_iter
self.random_state = random_state
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.sqrt(((X - self.centroids[:, np.newaxis])**2).sum(axis=2))
labels = np.argmin(distances, axis=0)
for j in range(self.n_clusters):
self.centroids[j, :] = X[labels == j, :].mean(axis=0)
def predict(self, X):
distances = np.sqrt(((X - self.centroids[:, np.newaxis])**2).sum(axis=2))
return np.argmin(distances, axis=0)
# 实例化Kmeans类
kmeans = KMeans(n_clusters=4, max_iter=100, random_state=42)
# 拟合数据
kmeans.fit(X)
# 预测数据
y_pred = kmeans.predict(X)
# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y_pred)
plt.scatter(kmeans.centroids[:, 0], kmeans.centroids[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()
```
在上面的代码中,我们使用 `make_blobs` 函数生成1000个数据点,分为4个簇。然后我们定义了一个 `KMeans` 类,包含 `fit` 和 `predict` 方法,用于拟合和预测数据。在 `fit` 方法中,我们随机初始化簇心,然后迭代更新簇心和数据点的标签,直到达到最大迭代次数或者收敛。在 `predict` 方法中,我们根据簇心的位置计算每个数据点与簇心的距离,并返回距离最近的簇心的标签。最后,我们使用 `scatter` 函数可视化数据和簇心的位置。
阅读全文