美文网首页
大师兄的数据分析学习笔记(二十七):聚类(三)

大师兄的数据分析学习笔记(二十七):聚类(三)

作者: superkmi | 来源:发表于2022-09-23 20:47 被阅读0次

    大师兄的数据分析学习笔记(二十六):聚类(二)
    大师兄的数据分析学习笔记(二十八):聚类(四)

    五、层次聚类法

    • 层次聚类法就是对给定数据对象的集合进行层次分解,根据分层分解采用的分解策略。
    • 也就是将距离最近的数据一层一层的连起来。
    • 衡量距离的方法有以下几种:
    1. 最短距离:以距离最近的两点衡量距离。
    2. 最长距离:以距离最远的两点衡量距离。
    3. 平均距离:以平均距离衡量距离。
    4. Ward法:以平方残差和ESS=\sum_{i=1}^n{x_i^2}-\frac{1}{n}(\sum_{i=1}^nx_i)^2衡量距离。
    • 算法优点:聚类灵活。
    • 算法缺点:计算复杂,离群点影响大。
    >>>import numpy as np
    >>>import matplotlib.pyplot as plt
    >>>from sklearn.datasets import make_circles,make_blobs,make_moons
    >>>from sklearn.cluster import AgglomerativeClustering
    
    >>>n_samples = 1000
    >>>circles = make_circles(n_samples=n_samples,factor=0.5,noise=0.05)
    >>>moons = make_moons(n_samples=n_samples,noise=0.05)
    >>>blobs = make_blobs(n_samples=n_samples,random_state=8,center_box=(-1,1),cluster_std=0.1)
    >>>random_data = np.random.rand(n_samples,2),None
    >>>colours = "bgrcmyk"
    >>>data = [circles,moons,blobs,random_data]
    >>>models = [("None",None),("Agglomerative",AgglomerativeClustering(n_clusters=3,linkage="ward"))]
    
    >>>fig = plt.figure()
    
    >>>for inx,clt in enumerate(models):
    >>>    clt_name,clt_entity = clt
    >>>    for i,dataset in enumerate(data):
    >>>        X,Y = dataset
    >>>        if not clt_entity:
    >>>            clt_res = [0 for item in range(len(X))]
    >>>        else:
    >>>            clt_entity.fit(X)
    >>>            clt_res = clt_entity.labels_.astype(int)
    >>>        fig.add_subplot(len(models),len(data),inx*len(data)+i+1)
    >>>        plt.title(clt_name)
    >>>        [plt.scatter(X[p,0],X[p,1],color=colours[clt_res[p]]) for p in range(len(X))]
    >>>plt.show()
    

    相关文章

      网友评论

          本文标题:大师兄的数据分析学习笔记(二十七):聚类(三)

          本文链接:https://www.haomeiwen.com/subject/powjortx.html