k-means聚类算法python
时间: 2023-09-25 15:15:38 浏览: 91
k-means聚类算法是一种常用的无监督学习算法,它可以将数据集分为k个不同的类别。下面是使用Python实现k-means聚类算法的代码:
```python
import numpy as np
class KMeans:
def __init__(self, k=2, max_iter=100):
self.k = k
self.max_iter = max_iter
def fit(self, X):
self.centroids = X[np.random.choice(X.shape[0], self.k, replace=False)]
for i in range(self.max_iter):
clusters = [[] for _ in range(self.k)]
# Assign data points to clusters
for x in X:
distances = [np.linalg.norm(x - c) for c in self.centroids]
cluster_idx = np.argmin(distances)
clusters[cluster_idx].append(x)
prev_centroids = self.centroids.copy()
# Update centroids
for i, cluster in enumerate(clusters):
if len(cluster) == 0:
continue
self.centroids[i] = np.mean(cluster, axis=0)
# Check if centroids have converged
if np.allclose(prev_centroids, self.centroids, rtol=1e-4):
break
def predict(self, X):
distances = [np.linalg.norm(X - c, axis=1) for c in self.centroids]
cluster_idx = np.argmin(distances, axis=0)
return cluster_idx
```
代码中的KMeans类包含了两个方法:fit和predict。fit方法用于训练模型,而predict方法用于预测数据点的类别。
在fit方法中,我们首先随机选择k个数据点作为初始聚类中心,然后迭代执行以下操作:
1. 将每个数据点分配到最近的聚类中心。
2. 更新聚类中心为每个聚类的平均值。
3. 检查聚类中心是否收敛,如果是则结束迭代。
在predict方法中,我们计算每个数据点到每个聚类中心的距离,选择距离最近的聚类中心作为该数据点的类别。
使用k-means聚类算法对数据进行聚类的步骤如下:
```python
# Generate random data
X = np.random.randn(100, 2)
# Create KMeans object and fit data
kmeans = KMeans(k=3)
kmeans.fit(X)
# Predict cluster labels for new data
new_data = np.array([[0, 0], [1, 1], [2, 2]])
labels = kmeans.predict(new_data)
print(labels)
```
输出结果为:
```
[1 1 2]
```
这表示第一个数据点属于第二个聚类,第二个数据点也属于第二个聚类,第三个数据点属于第三个聚类。
阅读全文