zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    POJ 3904 Sky Code (容斥原理)
    HDU 4334 Trouble (暴力)
    UVA 10325 The Lottery( 容斥原理)
    HDU 2841 Visible Trees 数论+容斥原理
    UVA11806-Cheerleaders(容斥原理+二进制)
    HDU1695 GCD (欧拉函数+容斥原理)
    HDU 5651 xiaoxin juju needs help (组合数)
    最大子矩阵和 51Nod 1051 模板题
    最大子段和 模板题 51Nod 1049
    51Nod 1006 最长公共子序列Lcs问题 模板题
  • 原文地址:https://www.cnblogs.com/hany-postq473111315/p/12671890.html
Copyright © 2011-2022 走看看