K-means算法学习(17-4-26)

一、实验目的

1、学习K-means算法,理解算法的原理及其过程。

2、选择合适的实验,进行算法的仿真重现。

二、算法基本原理及其内容

K-means算法是基于原型的、划分的聚类技术。它试图发现用户指定个数(K)的簇(由质心代表)。K-means算法比较简单,基本算法原理如下:

首先,选择K个初始质心,其中K是用户指定的参数,即所期望的簇的个数。每个点指派到最近的质心,而指派到一个质心的点集为一个簇。

然后,根据指派到簇的点,更新每个簇的质心。

重复指派和更新步骤,直到簇不发生变化,或等价地,直到质心不发生变化。

三、实验步骤

那么在计算机编程中,其算法步骤一般如下:

1)随机生成随机点簇

2)从D中随机取k个元素,作为k个簇的各自的中心。

3)分别计算剩下的元素到k个簇中心的相异度,将这些元素分别划归到相异度最低的簇。

4)根据聚类结果,重新计算k个簇各自的中心,计算方法是取簇中所有元素各自维度的算术平均数。

5)将D中全部元素按照新的中心重新聚类。

6)重复第4步,直到聚类结果不再变化。

7)将结果输出。

四、实验结果

import matplotlib.pyplot as plt

import numpy as np

culster1 = np.random.uniform(0.5, 1.5, (2, 20))

culster2 = np.random.uniform(1.5, 2.5, (2, 20))

culster3 = np.random.uniform(1.5, 3.5, (2, 20))

culster4 = np.random.uniform(3.5, 4.5, (2, 20))

x1 = np.hstack((culster1,culster2))

x2 = np.hstack((culster2,culster3))

x = np.hstack((x1,x2)).T

plt.figure()

plt.axis([0, 5, 0, 5])

plt.xlabel(‘x‘)

plt.ylabel(‘y‘)

plt.grid(True)

plt.plot(x[:,0],x[:,1], ‘k.‘, markersize = 12)

from sklearn.cluster import KMeans

from scipy.spatial.distance import cdist

kmeans = KMeans(n_clusters = 2)

kmeans.fit(x)

plt.plot(kmeans.cluster_centers_[:,0],kmeans.cluster_centers_[:,1],‘ro‘)

K = range(1, 10)

meandistortions = []

for k in K:

kmeans =KMeans(n_clusters=k)

kmeans.fit(x)

meandistortions.append(sum(np.min(cdist(x, kmeans.cluster_centers_,‘euclidean‘), axis=1)) / x.shape[0])#选择每行最小距离求和

plt.figure()

plt.grid(True)

plt1 = plt.subplot(2,1,1)

plt1.plot(x[:,0], x[:,1], ‘k.‘)

plt2 = plt.subplot(2,1,2)

plt2.plot(K, meandistortions)

五、实验结果


K-means算法学习(17-4-26)_第1张图片
K-means算法学习(17-4-26)_第2张图片

六、总结

实验主要学习了K-means算法原理及其实现过程的学习。理解了K-means算法核心的内容要点。如何找到质心、计算质心等。但仍存在不足,后续会学习二分K-means算法及其他聚类算法,比较相同点和不同点,比较适用范围及其优劣等。

你可能感兴趣的:(K-means算法学习(17-4-26))