k-means算法示例代码python
时间: 2023-10-30 15:05:27 浏览: 67
主要介绍了Python中基于K-means聚类算法的图像分割的示例代码。以下是该示例代码的一部分:
```python
import numpy as np
from sklearn.cluster import KMeans
# 生成示例数据
X = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
# 创建KMeans对象
kmeans = KMeans(n_clusters=2, random_state=0)
# 使用数据进行聚类
kmeans.fit(X)
# 打印聚类结果
print(kmeans.labels_)
```
在上述示例代码中,首先导入了所需的库,然后创建了一个包含示例数据的数组X。接下来,创建了一个KMeans对象,并设置了聚类数目为2。然后,利用数据X对KMeans对象进行训练,最后打印出聚类结果。
注意:为了运行示例代码,需要安装scikit-learn库。
相关问题
k-means聚类算法代码python
以下是Python中的k-means聚类算法示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
def kmeans(X, K, max_iters):
centroids = X[np.random.choice(len(X), K, replace=False)]
for i in range(max_iters):
# 计算每个点属于哪个簇
C = np.argmin(np.sqrt(((X - centroids[:, np.newaxis])**2).sum(axis=2)), axis=0)
# 重新计算簇中心点
centroids = np.array([X[C == k].mean(axis=0) for k in range(K)])
return C, centroids
# 生成数据
np.random.seed(42)
X = np.random.randn(50, 2)
# 聚类
C, centroids = kmeans(X, K=3, max_iters=100)
# 可视化
plt.scatter(X[:, 0], X[:, 1], c=C)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='X', s=200, linewidths=3, color='r')
plt.show()
```
说明:
- `X`:需要聚类的数据,每一行代表一个样本;
- `K`:簇的数量;
- `max_iters`:最大迭代次数;
- `centroids`:簇中心点;
- `C`:每个点属于的簇的索引。
python的K-means算法代码
### 回答1:
以下是Python实现的K-means算法代码:
```python
import numpy as np
import matplotlib.pyplot as plt
def kmeans(X, K, max_iters=20):
centroids = X[np.random.choice(np.arange(len(X)), K), :]
for i in range(max_iters):
C = np.zeros(len(X))
for j in range(len(X)):
distances = np.linalg.norm(X[j] - centroids, axis=1)
cluster = np.argmin(distances)
C[j] = cluster
for k in range(K):
centroids[k] = X[C == k].mean(axis=0)
return C, centroids
# 生成数据
np.random.seed(0)
X1 = np.random.randn(100, 2) + np.array([2, 2])
X2 = np.random.randn(100, 2) + np.array([-2, -2])
X3 = np.random.randn(100, 2) + np.array([2, -2])
X4 = np.random.randn(100, 2) + np.array([-2, 2])
X = np.vstack([X1, X2, X3, X4])
# 调用kmeans函数
C, centroids = kmeans(X, 4)
# 绘制结果
plt.scatter(X[:, 0], X[:, 1], c=C)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=200, linewidths=3, color='r')
plt.show()
```
其中,`X`是一个$n\times m$的矩阵,其中$n$是数据点的数量,$m$是每个数据点的维度。`K`是聚类的数量,`max_iters`是最大迭代次数。函数返回一个长度为$n$的向量`C`,其中的每个元素表示该数据点所属的聚类编号,以及一个$K\times m$的矩阵`centroids`,其中的每行表示一个聚类的中心点。
### 回答2:
K-means算法是一种常用的聚类算法,在Python中可以使用scikit-learn库中的KMeans模块进行实现。以下是K-means算法的Python代码示例:
```
# 导入所需的库
from sklearn.cluster import KMeans
import numpy as np
# 创建样本数据
X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]])
# 创建并拟合K-means模型
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
# 获取每个样本所属的簇
labels = kmeans.labels_
# 获取每个簇的中心点坐标
centroids = kmeans.cluster_centers_
# 输出结果
print("每个样本所属的簇:", labels)
print("簇的中心点坐标:", centroids)
```
以上代码将创建一个包含6个样本的数据集X,其中每个样本有2个特征。接下来,使用KMeans函数创建一个K-means模型,并使用fit函数拟合数据。通过调整n_clusters参数的值可以指定需要聚类的簇的数量。然后,可以使用labels_属性获取每个样本所属的簇,并使用cluster_centers_属性获取每个簇的中心点坐标。最后,输出每个样本所属的簇和簇的中心点坐标。
需要注意的是,K-means算法的结果可能受到初始聚类中心的影响。可以通过设置random_state参数来固定随机种子,以使结果可重复。
### 回答3:
K-means算法是一种常用的聚类算法,可以将数据集分为k个不同的簇。下面是一个用Python实现K-means算法的示例代码:
```python
import numpy as np
def k_means(data, k, max_iters):
# 随机选择k个样本作为初始聚类中心
centers = data[np.random.choice(data.shape[0], k, replace=False)]
for _ in range(max_iters):
# 计算每个样本与聚类中心的距离
distances = np.linalg.norm(data[:, np.newaxis] - centers, axis=-1)
# 分配每个样本到离其最近的聚类中心
labels = np.argmin(distances, axis=-1)
# 更新聚类中心为每个簇的平均值
centers = np.array([data[labels == i].mean(axis=0) for i in range(k)])
return centers, labels
# 测试
data = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]])
k = 2
max_iters = 10
centers, labels = k_means(data, k, max_iters)
print("聚类中心:")
print(centers)
print("样本标签:")
print(labels)
```
该代码实现了K-means算法,首先随机选择k个样本作为初始聚类中心,然后迭代更新聚类中心和样本标签,直到达到最大迭代次数。最终输出聚类中心和样本标签。在给定的数据集中,将数据分为2个簇,并输出了每个簇的聚类中心和样本标签。