无监督学习之凝聚聚类算法

# --- 凝聚层次聚类

# 概念含义: 层次聚类算法结构类似一棵树,分为 自上而下,和自下而上两种;

# 自下而上: 将每个数据点视为一个单独集群,不断合并,直到全部合为一个类

# 自上而下: 自下而上的反向逻辑即可。

#------- 加载必要的库

import numpy as np

import matplotlib.pyplot as plt

from sklearn.cluster import AgglomerativeClustering

from sklearn.neighbors import kneighbors_graph

#------- 定义一个实现凝聚层次聚类的函数

def pf_clustering(x,connectivity,title,num_clusters=3,linkage='ward'):

plt.figure()

model=AgglomerativeClustering(linkage=linkage,connectivity=connectivity,n_clusters=num_clusters)# 建立模型

model.fit(x)# 训练样本

labels=model.labels_# 获取标记,然后指定不同聚类的图形标记

markers='.vx'

color='rgb'

# 循环作图

plt.figure()

for i,marker in zip(labels,markers):

plt.scatter(x[labels==i,0],x[labels==i,1],marker=marker,color=color,s=5)# 画出前4群点

plt.title(title)

#-------对数据增加随机性噪声

def add_noise(x,y,amplitude):

x=np.concatenate((x,y))# 接收进来的参数x 和 参数 y 组合成 (x,y)的成对数据

return x.T

#------- 生成空间第一组数据

def get_spiral(t,noise_amplitude=0.5):

r=t

x=r*np.cos(t)

y=r*np.sin(t)

plt.figure()

plt.scatter(x.T,y.T,s=5)

return add_noise(x,y,noise_amplitude)

#------- 生成空间第二组数据

def get_rose(t,noise_amplitude=0.02):

k=5

r=np.cos(k*t)+0.25

x=r*np.cos(t)

y=r*np.sin(t)

plt.figure()

plt.scatter(x.T,y.T,s=5)

return add_noise(x,y,noise_amplitude)

#------ 生成空间第三组数据

def get_hy(t,noise_amplitude=0):

a,b,h=10.0,2.0,4.0

x=(a-b)*np.cos(t)+h*np.cos((a-b)/b*t)

y=(a-b)*np.sin(t)+h*np.sin((a-b)/b*t)

plt.figure()

plt.scatter(x.T,y.T,s=5)

return add_noise(x,y,0)

#------ 定义主函数

if __name__=='__main__':

# 生成数据

n_samples=500# 定义样本量个数

x=get_spiral(t)

# 不考虑螺旋形的数据连接性

connectivity=None

# 第一组数据情况

x=get_spiral(t)

生成的数据数据图:

pf_clustering(x,connectivity,'No connectivity')

聚类后类别图:

# 第二组数据情况

x=get_rose(t)

生成的数据数据图:

pf_clustering(x,connectivity,'No connectivity')

分类算法下分类图:

# 第三组数据情况

x=get_hy(t)

生成数据数据图:

pf_clustering(x,connectivity,'No connectivity')

聚类后类别图:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180629G0SVLB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券