接着上一篇内容来讲,本次要实现K-Medoide聚类方法对waveform数据以及图像的分割。
K-Medoide聚类方法原理可参照 https://blog.csdn.net/qq_36076233/article/details/72991055
简而言之,K-Medoide就是将K-means求平均的方式替换成将各簇中所有点依次作为中心点对该簇所有点求距离之和进行遍历,最终距离之和最小的作为新的中心点即可。
优点:当存在噪音和孤立点时, PAM 比 k-平均方法更健壮。 这是因为中心点不象平均值那么容易被极端数据影响。
缺点:PAM对于小数据集工作得很好, 但不能很好地用于大数据集,每次迭代O(k(n-k)2 ),其中 n 是数据对象数目, k 是聚类数。
下面又进入代码环节:
import random
import pandas as pd
import numpy as np
import tool
#设置精度小数点后两位
np.set_printoptions(precision=2)
#读取文件
df=pd.read_csv("waveform.data",header = None)
#增加20%的高斯噪声
for x in range(5000*22*0.2):
i = random.randint(0,21)
j = random.randint(0,4999)
df[i][j] += random.gauss(0,0.5) #均值维0,方差为0.5的高斯噪声
#随机选择三个中心点作为初始质心
i1 = random.randint(0,21) #列标0-21
j1 = random.randint(0,4998) #行标0-4999
cent1 = df[i1][j1]
i2 = random.randint(0,21)
j2 = random.randint(0,4998)
cent2 = df[i2][j2]
i3 = random.randint(0,21) #列标0-21
j3 = random.randint(0,4998) #行标0-4999
cent3 = df[i3][j3]
#聚类存储