Python机器学习实战之K均值聚类
基本介绍
K均值聚类是一种比较常用的聚类方法,其基本思想就是把所有数据分成K个类别,使得同一类别内的数据相似度较高,而不同类别的数据相似度较低。
算法流程
- 初始化K个聚类中心
- 将所有数据点分别归属于离其最近的聚类中心所代表的聚类
- 重新计算每个聚类的聚类中心
- 重复步骤2和步骤3,直到聚类中心不再发生变化
代码实现
下面是一个使用Python实现K均值聚类的示例代码。
from sklearn.cluster import KMeans
import numpy as np
# 读取数据
X = np.loadtxt('data.csv')
# 初始化KMeans模型,设置聚类数为3
kmeans = KMeans(n_clusters=3, random_state=0)
# 使用KMeans模型进行聚类
kmeans.fit(X)
# 打印聚类结果
print(kmeans.labels_)
在这个示例代码中,我们使用sklearn
库中的KMeans
模型来实现K均值聚类。首先,我们从文件中读取数据,并初始化了一个KMeans模型,并设置聚类数为3。接下来,通过调用fit()
方法,我们使用KMeans模型进行聚类,并最终打印出了聚类结果。
下面是一个更加详细的示例代码,它演示了如何使用K均值聚类对图像进行分割。
import numpy as np
import matplotlib.pyplot as plt
from skimage import data
from skimage.segmentation import slic
from skimage.color import label2rgb
# 读取图像
image = data.astronaut()
# 使用SLIC算法对图像进行分割
segments = slic(image, n_segments=100, compactness=10)
# 计算每个分割区域的平均颜色
colors = []
for label in np.unique(segments):
mask = segments == label
color = image[mask].mean(axis=0)
colors.append(color)
# 计算每个像素所属的分割区域
labels = []
for i in range(image.shape[0]):
for j in range(image.shape[1]):
color = image[i, j, :]
distances = np.linalg.norm(colors - color, axis=1)
label = np.argmin(distances)
labels.append(label)
# 将每个像素所属的分割区域转换为与之对应的颜色
colors = np.array(colors)
colored_labels = colors[labels].reshape(image.shape)
# 展示分割结果
fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(8, 4),
sharex=True, sharey=True)
ax[0].imshow(image)
ax[1].imshow(colored_labels)
plt.show()
在这个示例代码中,我们首先读取了一张图像,并使用SLIC算法对图像进行分割。接着,我们计算了每个分割区域的平均颜色,并使用这些颜色来为每个像素分配所属的分割区域。最后,我们根据每个像素所属的分割区域来生成了一个与之对应的颜色图像,并将其展示出来。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python机器学习实战之K均值聚类 - Python技术站