k均值聚类python代码
时间: 2023-07-22 07:23:10 浏览: 63
下面是一个简单的 k 均值聚类的 Python 代码示例:
```python
import numpy as np
from sklearn.cluster import KMeans
# 随机生成数据
X = np.random.rand(100, 2)
# 创建一个 KMeans 对象,指定聚类数量为 3
kmeans = KMeans(n_clusters=3)
# 训练模型
kmeans.fit(X)
# 获取聚类结果
labels = kmeans.labels_
# 获取聚类中心
centers = kmeans.cluster_centers_
```
这段代码使用了 `sklearn` 库中的 `KMeans` 类来实现 k 均值聚类算法。首先,我们随机生成了一个 100 行、2 列的数据矩阵 `X`。然后,我们创建了一个 `KMeans` 对象,并将聚类数量设置为 3。接下来,我们用 `fit` 方法训练模型,并用 `labels_` 属性获取聚类结果,用 `cluster_centers_` 属性获取聚类中心。
相关问题
K均值聚类python代码
我可以提供一个K均值聚类的Python代码示例: from sklearn.cluster import KMeans # 导入KMeans模型 # 创建KMeans模型,并设置聚类中心数量为3
kmeans = KMeans(n_clusters=3)
# 将数据拟合到模型中
kmeans.fit(data)
# 计算聚类中心
centroids = kmeans.cluster_centers_
# 计算每个点的预测类别
labels = kmeans.labels_
k均值聚类算法python代码
下面是一个简单的k均值聚类算法实现的Python代码,其中假设数据集为二维点集:
```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 = []
# 初始化聚类中心为前k个样本点
for i in range(self.k):
self.centroids.append(X[i])
# 迭代更新聚类中心
for _ in range(self.max_iter):
# 分配样本点到最近的聚类中心
clusters = [[] for _ in range(self.k)]
for x in X:
distances = [np.linalg.norm(x - c) for c in self.centroids]
closest_centroid_idx = np.argmin(distances)
clusters[closest_centroid_idx].append(x)
# 更新聚类中心为每个簇的平均值
new_centroids = []
for i in range(self.k):
new_centroid = np.mean(clusters[i], axis=0)
new_centroids.append(new_centroid)
# 如果新聚类中心与旧聚类中心相等,提前结束迭代
if np.allclose(self.centroids, new_centroids):
break
self.centroids = new_centroids
def predict(self, X):
y_pred = []
for x in X:
distances = [np.linalg.norm(x - c) for c in self.centroids]
closest_centroid_idx = np.argmin(distances)
y_pred.append(closest_centroid_idx)
return y_pred
```
使用示例:
```python
X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]])
kmeans = KMeans(k=2, max_iter=100)
kmeans.fit(X)
y_pred = kmeans.predict(X)
print(y_pred)
```
输出结果:
```
[0, 0, 0, 1, 1, 1]
```
阅读全文