Python 实现分层聚类算法

'''
1.将所有样本都看作各自一类
2.定义类间距离计算公式
3.选择距离最小的一堆元素合并成一个新的类
4.重新计算各类之间的距离并重复上面的步骤
5.直到所有的原始元素划分成指定数量的类

程序要点:
1.生成测试数据
    sklearn.datasets.make_blobs
2.系统聚类算法
    sklearn.cluster.AgglomerativeClustering
3.必须满足该条件不然会报错(自定义函数中的参数)
    assert 1 <= n_clusters <= 4
4.颜色,红绿蓝黄
r g b y
5. o * v +
    散点图的形状
6.[] 内可以为条件表达式,输出数组中满足条件的数据
    data[predictResult == i]
7.访问 x 轴,y 轴坐标
    subData[:,0] subData[:,1]
8.plt.scatter(x轴,y轴,c,marker,s=40)
    colors = "rgby"
    markers = "o*v+"
    c 颜色 c=colors[i]
    marker 形状 marker=markers[i]
9.生成随机数据并返回样本点及标签
data,labels = make_blobs(n_samples=200,centers=4)
    make_blobs 为 sklearn.datasets.make_blobs 库
    n_samples 为需要的样本数量
    centers 为标签数
'''
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import AgglomerativeClustering
def AgglomerativeTest(n_clusters):
    assert 1 <= n_clusters <= 4
    predictResult = AgglomerativeClustering(
        n_clusters=n_clusters,
        affinity='euclidean',
        linkage='ward'
    ).fit_predict(data)
    # 定义绘制散点图时使用的颜色和散点符号
    colors = "rgby"
    markers = "o*v+"
    # 依次使用不同的颜色和符号绘制每个类的散点图
    for i in range(n_clusters):
        subData = data[predictResult == i]
        plt.scatter(
            subData[:,0],
            subData[:,1],
            c = colors[i],
            marker = markers[i],
            s = 40
        )
    plt.show()
# 生成随机数据,200个点,4类标签,返回样本及标签
data , labels = make_blobs(n_samples=200,centers=4)
print(data)
AgglomerativeTest(2)

2020-04-10

posted @ 2020-04-10 10:46  CodeYaSuo  阅读(2735)  评论(0编辑  收藏  举报