一、进行K-means聚类设计
1.引入库
代码如下(示例):
def k_means_clust(data, num_clust, num_iter, w=3):
## 步骤一: 初始化均值点
centroids = random.sample(list(data), num_clust)
counter = 0
for n in range(num_iter):
counter += 1
# print
# counter
assignments = {} #存储类别0,1,2等类号和所包含的类的号码
# 遍历每一个样本点 i ,因为本题与之前有所不同,多了ind的编码
for ind, i in enumerate(data):
min_dist = float('inf') #最近距离,初始定一个较大的值
closest_clust = None # closest_clust:最近的均值点编号
## 步骤二: 寻找最近的均值点
for c_ind, j in enumerate(centroids): #每个点和中心点的距离,共有num_clust个值
if LB_Keogh(i, j, 3) < min_dist: #循环去找最小的那个
cur_dist = DTWDistance(i, j, w)
if cur_dist < min_dist: #找到了ind点距离c_ind最近
min_dist = cur_dist
closest_clust = c_ind
## 步骤三: 更新 ind 所属簇
# print(closest_clust)
if closest_clust in assignments:
assignments[closest_clust].append(ind)
else:
assignments[closest_clust] = []
assignments[closest_clust].append(ind)
# recalculate centroids of clusters ## 步骤四: 更新簇的均值点
for key in assignments:
clust_sum = 0
for k in assignments[key]:
clust_sum = clust_sum + data[k]
centroids[key] = [m / len(assignments[key]) for m in clust_sum]
return centroids,assignments #返回聚类中心值,和聚类的所有点的数组序号