参考 github 上spark-master中一个K值聚类算法的案例。作了一些改进。先上效果图。
左图是四个服从不同正态分布的点集(颜色区分)组成的数据集,右图是聚类算法重新对数据进行的分类。
1 生成数据
为了简化,使用python生成了四组均值为(2,2),(-2,2),(2,-2),(-2,-2),方差均为2的正态分布随机数。
def genNormalDistributionData(mean, cov, num, tag):
id = np.arange(num)
id.shape = (1, num)
id = id + np.ones(num)*tag*1000
t = np.ones((num, 1))*tag
NDdata = np.random.multivariate_normal(
mean, cov, num)
data = np.concatenate((NDdata, t, id.transpose()), axis=1)
return data
绘制图片
def showPic(path):
data = readData(path)
(row, col) = data.shape
print(row, col)
for i in range(row-1):
if (data[i][2] == 1):
plt.scatter(data[i][0], data[i][1], marker='o', c='r')
if (data[i][2] == 2):
plt.scatter(data[i][0], data[i][1], marker='^', c='b')
if (data[i