sklearn之基于凝聚层次算法的聚类

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

            凝聚层次算法的特点:
                1.聚类数k必须事先已知。借助某些评估指标,优选最好的聚类数。
                2.没有聚类中心的概念,因此只能在训练集中划分聚类,但不能对训练集以外的未知样本确定其聚类归属。不能预测。
                3.在确定被凝聚的样本时,除了以距离作为条件以外,还可以根据连续性来确定被聚集的样本。

            凝聚层次算法相关API:
                # 凝聚层次聚类器
                model = sc.AgglomerativeClustering(n_clusters=4)
                pred_y = model.fit_predict(x)   # 返回值为当前样本所属类别

    案例:重新加载multiple3.txt,使用凝聚层次算法进行聚类划分。

'''

import numpy as np
import matplotlib.pyplot as mp
import sklearn.cluster as sc

# 读取数据,绘制图像
x = np.loadtxt('./ml_data/multiple3.txt', unpack=False, dtype='f8', delimiter=',')
print(x.shape)

# 基于Agglomerativeclustering完成聚类
model = sc.AgglomerativeClustering(n_clusters=4)
pred_y = model.fit_predict(x)
print(pred_y)

# 画图显示样本数据
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], s=80, c=pred_y, cmap='brg', label='Samples')
mp.legend()
mp.show()


输出结果:

(200, 2)
[1 1 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1
 3 0 2 1 3 0 2 1 3 0 2 1 3 0 0 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 1
 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 0 3 0 2 1 3 0 2 1 3 0 2 1 3 0
 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1 1 0 2
 1 1 0 2 1 3 0 2 1 3 0 3 1 3 0 2 1 3 0 2 1 1 0 2 1 3 0 2 1 3 0 2 1 3 0 2 1
 3 0 2 1 3 0 2 1 3 0 2 1 3 0 2]

  

posted @ 2019-07-21 08:56  一如年少模样  阅读(4855)  评论(0编辑  收藏  举报