python+sklearn实现凝聚层次算法

本文所用文件的链接

链接:https://pan.baidu.com/s/1RWNVHuXMQleOrEi5vig_bQ
提取码:p57s

凝聚层次算法

首先假定每个样本都是一个独立的聚类, 如果统计出来的聚类数大于期望的聚类数, 则从每个样本出发, 寻找离自己最近的另外一个样本, 与之聚集, 形成更大的聚类. 同时另总聚类数减少, 不断重复以上过程, 直到统计出来的聚类总数达到期望值为止.

凝聚层次算法的特点:

  1. 凝聚数量必须事先已知. 可以借助于某些指标, 优选参数.
  2. 没有聚类中心的概念, 因此只能在训练集中划分聚类, 但不能对训练集以外的未知样本确定其归属.
  3. 在确定被凝聚样本时, 除了以距离作为条件以外, 还可以根据连续性来确定被聚集的样本.

凝聚层次相关API:

# 构建凝聚层次聚类模型
model = sc.AgglomerativeClustering(
        n_clusters=4)
pred_y = model.fit_predict(x)

案例:

"""
demo06_agglomerative_clustering.py 
凝聚层次算法
"""
import numpy as np
import sklearn.cluster as sc
import matplotlib.pyplot as mp
import sklearn.neighbors as nb

x = np.loadtxt('../ml_data/multiple3.txt', 
	delimiter=',')

# 凝聚层次实现聚类划分
model = sc.AgglomerativeClustering(
			n_clusters=4)
pred_y = model.fit_predict(x)

mp.figure('AgglomerativeClustering', facecolor='lightgray')
mp.title('AgglomerativeClustering', fontsize=16)
mp.xlabel('X',fontsize=14)
mp.ylabel('Y',fontsize=14)
mp.tick_params(labelsize=10)
mp.scatter(x[:,0], x[:,1], c=pred_y, cmap='jet',
		label='points')
mp.legend()


# 凝聚层次实现聚类划分 以连续性为条件
# 近邻筛选器
conn = nb.kneighbors_graph(
	   x, 10, include_self=False)
model = sc.AgglomerativeClustering(
			linkage='average',
			n_clusters=4, connectivity=conn)
pred_y = model.fit_predict(x)

mp.figure('AgglomerativeClustering2', facecolor='lightgray')
mp.title('AgglomerativeClustering2', fontsize=16)
mp.xlabel('X',fontsize=14)
mp.ylabel('Y',fontsize=14)
mp.tick_params(labelsize=10)
mp.scatter(x[:,0], x[:,1], c=pred_y, cmap='jet',
		label='points')
mp.legend()
mp.show()

通过距离凝聚出的结果:
python+sklearn实现凝聚层次算法_第1张图片
通过连续性凝聚的结果:
python+sklearn实现凝聚层次算法_第2张图片

你可能感兴趣的:(聚类,算法,机器学习,python,聚类算法)