精华内容
下载资源
问答
  • python sklearn:聚类-k-means,聚类趋势,簇数确定,测定聚类质量
    万次阅读 多人点赞
    2017-09-21 20:34:23

    1.K-Means算法
    由于具有出色的速度和良好的可扩展性,K-Means聚类算法算得上是最著名的聚类方法。K-Means算
    法是一个重复移动类中心点的过程,把类的中心点,也称重心(centroids),移动到其包含成员的平
    均位置,然后重新划分其内部成员。 是算法计算出的超参数,表示类的数量;K-Means可以自动分
    配样本到不同的类,但是不能决定究竟要分几个类。 必须是一个比训练集样本数小的正整数。
    有时,类的数量是由问题内容指定的。也有一些问题没有指定聚类的数量,最优的聚类
    数量是不确定的。后面我们会介绍一种启发式方法来估计最优聚类数量,称为肘部法则(Elbow
    Method)。
    K-Means的参数是类的重心位置和其内部观测值的位置。与广义线性模型和决策树类似,K-Means参
    数的最优解也是以成本函数最小化为目标。K-Means成本函数公式如下:
    公式

    是第 uk个类的重心位置。成本函数是各个类畸变程度(distortions)之和。每个类的畸变程度等于
    该类重心与其内部成员位置距离的平方和。若类内部的成员彼此间越紧凑则类的畸变程度越小,反
    之,若类内部的成员彼此间越分散则类的畸变程度越大。求解成本函数最小化的参数就是一个重复配
    置每个类包含的观测值,并不断移动类重心的过程。首先,类的重心是随机确定的位置。实际上,重
    心位置等于随机选择的观测值的位置。每次迭代的时候,K-Means会把观测值分配到离它们最近的
    类,然后把重心移动到该类全部成员位置的平均值那里。
    原始数据:
    2004-01-02,17.96,18.68,17.54,18.22
    2004-01-05,18.45,18.49,17.44,17.49
    2004-01-06,17.66,17.67,16.19,16.73
    2004-01-07,16.72,16.75,15.05,15.05
    2004-01-08,15.42,15.68,15.32,15.61
    2004-01-09,16.15,16.88,15.57,16.75
    2004-01-12,17.32,17.46,16.79,16.82
    2004-01-13,16.06,18.33,16.53,18.04
    2004-01-14,17.29,17.03,16.04,16.75
    2004-01-15,17.07,17.31,15.49,15.56
    2004-01-16,15.04,15.44,14.09,15
    2004-01-20,15.77,16.13,15.09,15.21
    2004-01-21,15.63,15.63,14.24,14.34
    2004-01-22,14.02,14.87,14.01,14.71
    2004-01-23,14.73,15.05,14.56,14.84
    2004-01-26,15.78,15.78,14.52,14.55
    2004-01-27,15.28,15.44,14.74,15.35
    2004-01-28,15.37,17.06,15.29,16.78
    2004-01-29,16.88,17.66,16.79,17.14

    2.聚类趋势

    '''
    Created on 2017年9月21日
    
    @author: zawdcxs
    '''
    import numpy as np
    
    #读取数据
    X = []
    f = open('cluster.txt')
    
    for v in f:
        X.append(
            [float(v.split(',')[-2]),
            float(v.split(',')[-1])])
    #转换成numpy array
    X = np.array(X)
    
    #归一化
    a = X[:,:1]/18.68*100
    b = X[:,1:]/17.54*100
    
    X = np.concatenate((a,b),axis = 1)
    
    #随机挑选出5个
    pn = X[np.random.choice(X.shape[0],5,replace = False),:]
    xn = []
    for i in pn:
        distance_min = 100
        for j in X:
            if np.array_equal(i, j):
                continue
            distance = np.linalg.norm(j-i)
            if distance_min>distance:
                distance_min = distance
        xn.append(distance_min)
    
    #随机挑选5个
    qn = X[np.random.choice(X.shape[0],5,replace = False),:]
    yn = []
    for i in qn:
        distance_min = 100
        for j in X:
            if np.array_equal(i, j):
                continue
            distance = np.linalg.norm(j-i)
            if distance_min>distance:
                distance_min = distance
        yn.append(distance_min)
    
    H = float(np.sum(yn))/(float(np.sum(xn))+float(np.sum(yn)))
    print(H)
    

    多次运行结果为:
    0.39576295974300946
    0.45160223964353785
    0.5551196531740811
    0.5949108798784908
    0.6151669123334003
    3.簇数确定
    肘部法则:
    如果问题中没有指定 的值,可以通过肘部法则这一技术来估计聚类数量。肘部法则会把不同 值的
    成本函数值画出来。随着 值的增大,平均畸变程度会减小;每个类包含的样本数会减少,于是样本
    离其重心会更近。但是,随着 值继续增大,平均畸变程度的改善效果会不断减低。 值增大过程
    中,畸变程度的改善效果下降幅度最大的位置对应的 值就是肘部。

    '''
    Created on 2017年9月21日
    
    @author: zawdcxs
    '''
    import numpy as np
    from sklearn.cluster import KMeans
    import matplotlib.pyplot as plt
    
    #读取数据
    X = []
    f = open('cluster.txt')
    
    for v in f:
        X.append(
            [float(v.split(',')[2]),
            float(v.split(',')[3])])
    #转换成numpy array
    X = np.array(X)
    
    distance = []
    k = []
    #簇的数量
    for n_clusters in range(1,19):
        cls = KMeans(n_clusters).fit(X)
    
        #曼哈顿距离
        def manhattan_distance(x,y):
            return np.sum(abs(x-y))
    
        distance_sum = 0
        for i in range(n_clusters):
            group = cls.labels_ == i
            members = X[group,:]
            for v in members:
                distance_sum += manhattan_distance(np.array(v), cls.cluster_centers_[i])
        distance.append(distance_sum)
        k.append(n_clusters)
    plt.scatter(k, distance)
    plt.plot(k, distance)
    plt.xlabel("k")
    plt.ylabel("distance")
    plt.show()
    
    
    

    运行结果
    k与距离的关系

    可以看到k取5时比较合适

    4.测定聚类质量
    K-Means是一种非监督学习,没有标签和其他信息来比较聚类结果。但是,还是有
    一些指标可以评估算法的性能。已经介绍过类的畸变程度的度量方法。下面将介绍另一种聚类
    算法效果评估方法称为轮廓系数(Silhouette Coefficient)。轮廓系数是类的密集与分散程度的评价
    指标。它会随着类的规模增大而增大。彼此相距很远,本身很密集的类,其轮廓系数较大,彼此集
    中,本身很大的类,其轮廓系数较小。轮廓系数是通过所有样本计算出来的,计算每个样本分数的均
    值,计算公式如下:

    这里写图片描述

    a是每一个类中样本彼此距离的均值, b是一个类中样本与其最近的那个类的所有样本的距离的均
    值。下面计算所有对象的轮廓系数的平均值

    '''
    Created on 2017年9月21日
    
    @author: zawdcxs
    '''
    import numpy as np
    from sklearn.cluster import KMeans
    import matplotlib.pyplot as plt
    # 读取数据
    X = []
    f = open('cluster.txt')
    
    for v in f:
        X.append(
            [float(v.split(',')[2]),
            float(v.split(',')[3])])
    # 转换成numpy array
    X = np.array(X)
    
    #把数据和对应的分类数放入聚类函数中进行聚类
    cls = KMeans(n_clusters=6).fit(X)
    
    #类簇的数量
    n_clusters = len(set(cls.labels_))
    
    # 曼哈顿距离
    def manhattan_distance(x, y):
        return np.sum(abs(x - y))
    #计算所有向量的轮廓系数的平均值
    #轮廓系数的和
    sv_sum = 0
    #遍历每一簇
    for i in range(n_clusters):
        a_group = cls.labels_ == i
        a_members = X[a_group,:]
        #遍历每个向量
        for v in a_members:
            # av:v到同一簇其他点的距离的平均值
            distance_sum = 0
            for k in a_members:
                if np.array_equal(v, k):
                    continue
                distance_sum += manhattan_distance(np.array(v), np.array(k))
            av = distance_sum / len(a_members)
            print("cluster_"+str(i)+"_vector_"+str(v)+"av: " + str(av))
            # bv:v到其他所有簇的最小平均距离(从每个簇中挑选一个离v最近的向量)
            distance_sum = 0
            for j in range(n_clusters):
                distance_min = 100
                b_group = cls.labels_ == i
                b_members = X[b_group]
                for m in b_members:
                    if np.array_equal(v, m):
                        continue
                    distance = manhattan_distance(np.array(v), np.array(m))
                    if distance_min > distance:
                        distance_min = distance
                    distance_sum += distance_min
            bv = distance_sum / n_clusters
            print("cluster_"+str(i)+"_vector_"+str(v)+"bv: " + str(bv))   
            sv = float(bv-av)/max(av,bv)
            print("cluster_"+str(i)+"_vector_"+str(v)+"sv: " + str(sv))
            sv_sum += sv
    #所有向量轮廓系数均值
    sv_mean = sv_sum/len(X)
    print("sv_mean: "+str(sv_mean))
    #画图
    markers = ['X','o','*','^','+','1','2','3','4']
    for i in range(n_clusters):
        members = cls.labels_ == i 
        plt.scatter(
            X[members,0], X[members,1], s=60, c='b', marker=markers[i], alpha=0.5)
    plt.title("K-Means")
    plt.show()   
    

    聚类质量计算结果:sv_mean: 0.645681114234 还可以吧
    聚类最后得到的图像

    更多相关内容
  • 为了更好地评价无监督聚类算法的聚类质量,解决因簇中心重叠而导致的聚类评价结果失效等问题,对常用聚类评价指标进行了分析,提出一个新的内部评价指标,将簇间邻近边界点的最小距离平方和与簇内样本个数的乘积作为...
  • 基于改进K-medoids的聚类质量评价指标研究.pdf
  • 一种聚类质量的评价方法及其应用.pdf
  • 基于改进近邻传播算法的聚类质量评价模型.pdf
  • 基于聚类质量的半监督INMF动态社区检测算法.pdf
  • 对于聚类分析中聚类结果的验证,重要的是使用一些客观的度量来评估聚类质量。 该工具提供了此类有效性指标的程序,包括 4 个外部有效性指标和 8 个内部有效性指标:Rand 指标、Adjusted Rand 指标、Silhouette、...
  • 聚类质量评估指标

    千次阅读 2018-03-15 17:48:55
    Calinski-Harabasz分数值ss的数学计算公式是(理论介绍来源于:用scikit-learn学习K-Means聚类):  也就是说,类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数会高。 ...

    Adjusted Rand index 调整兰德系数

    image

    >>> from sklearn import metrics
    >>> labels_true = [0, 0, 0, 1, 1, 1]
    >>> labels_pred = [0, 0, 1, 1, 2, 2]
    
    >>> metrics.adjusted_rand_score(labels_true, labels_pred)  
    0.24
    

    Mutual Information based scores 互信息

    image

    Two different normalized versions of this measure are available, Normalized Mutual Information(NMI) and Adjusted Mutual Information(AMI). NMI is often used in the literature while AMI was proposed more recently and is normalized against chance:

    from sklearn import metrics
     labels_true = [0, 0, 0, 1, 1, 1]
    labels_pred = [0, 0, 1, 1, 2, 2]
    
     metrics.adjusted_mutual_info_score(labels_true, labels_pred)  
    0.22504
    

    .

    Homogeneity, completeness and V-measure

    同质性homogeneity:每个群集只包含单个类的成员。
    完整性completeness:给定类的所有成员都分配给同一个群集。

    >>> from sklearn import metrics
    >>> labels_true = [0, 0, 0, 1, 1, 1]
    >>> labels_pred = [0, 0, 1, 1, 2, 2]
    
    >>> metrics.homogeneity_score(labels_true, labels_pred)  
    0.66...
    
    >>> metrics.completeness_score(labels_true, labels_pred) 
    0.42...
    

    两者的调和平均V-measure:

    >>> metrics.v_measure_score(labels_true, labels_pred)    
    0.51...
    

    .

    Fowlkes-Mallows scores

    The Fowlkes-Mallows score FMI is defined as the geometric mean of the pairwise precision and recall:
    image

    >>> from sklearn import metrics
    >>> labels_true = [0, 0, 0, 1, 1, 1]
    >>> labels_pred = [0, 0, 1, 1, 2, 2]
    >>>
    >>> metrics.fowlkes_mallows_score(labels_true, labels_pred)  
    0.47140...
    

    .

    Silhouette Coefficient 轮廓系数

    image

    >>> import numpy as np
    >>> from sklearn.cluster import KMeans
    >>> kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)
    >>> labels = kmeans_model.labels_
    >>> metrics.silhouette_score(X, labels, metric='euclidean')
    ...                                                      
    0.55...
    

    .

    Calinski-Harabaz Index

    这个计算简单直接,得到的Calinski-Harabasz分数值ss越大则聚类效果越好。Calinski-Harabasz分数值ss的数学计算公式是(理论介绍来源于:用scikit-learn学习K-Means聚类):

    image

     也就是说,类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的Calinski-Harabasz分数会高。
     在scikit-learn中, Calinski-Harabasz Index对应的方法是metrics.calinski_harabaz_score.
    在真实的分群label不知道的情况下,可以作为评估模型的一个指标。
    同时,数值越小可以理解为:组间协方差很小,组与组之间界限不明显。
    与轮廓系数的对比,笔者觉得最大的优势:快!相差几百倍!毫秒级

    >>> import numpy as np
    >>> from sklearn.cluster import KMeans
    >>> kmeans_model = KMeans(n_clusters=3, random_state=1).fit(X)
    >>> labels = kmeans_model.labels_
    >>> metrics.calinski_harabaz_score(X, labels)  
    560.39...

    致敬原创:http://blog.csdn.net/sinat_26917383/article/details/70577710

    展开全文
  • 聚类(六)—— 聚类评估

    千次阅读 2021-08-21 15:49:43
    3.测定聚类质量 聚类趋势的估计 (3) 如果D是均匀分布的,H接近0.5。 聚类簇数的确定 找出正确的簇数依赖于数据集分布的形状和尺度,也依赖于用户要求的聚类分辨率。有许多估计簇数的可能方法。这里简略介绍几...

    主要内容
    聚类分析概述
    K-Means聚类
    层次聚类
    基于密度的聚类
    其他聚类方法
    聚类评估
    小结

    六、聚类评估

    聚类评估用于对在数据集上进行聚类的可行性和被聚类方法产生的结果的质量进行评估。聚类评估主要包括以下任务。
    1.估计聚类趋势
    2.确定数据集中的划分簇数
    3.测定聚类质量

    聚类趋势的估计
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    (3)
    在这里插入图片描述
    如果D是均匀分布的,H接近0.5。

    聚类簇数的确定

    找出正确的簇数依赖于数据集分布的形状和尺度,也依赖于用户要求的聚类分辨率。有许多估计簇数的可能方法。这里简略介绍几种简单但流行和有效的方法。
    在这里插入图片描述

    它基于如下观察:增加簇数有助于降低每个簇的簇内方差之和。这是因为有更多的簇可以捕获更细的数据对象簇,簇中对象之间更为相似。然而,如果形成太多的簇,则降低簇内方差和的边缘效应可能下降,因为把一个凝聚的簇分裂成两个簇只能使簇内方差和的稍微降低。因此,一种选择正确的簇数启发式方法是使用簇内方差和关于簇数曲线的拐点

    聚类质量的测定

    1.外在方法

    有许多度量(如熵、纯度、精度、召回率和F度量)用来评估分类模型的性能。对于分类,度量预测的类标号与实际类标号的对应程度。但是这些度量通过使用簇标号而不是预测的类标号,不需要做较大的改变。

    兰德系数RI 和ARI:
    在这里插入图片描述

    a表示表示在实际类别信息与聚类结果中都是同类别的元素对数,b表示在实际类别信息与聚类结果中都是不同类别的元素对数,分母表示数据集中可以组成的总元素对数。

    兰德系数的值在[0,1]之间,当聚类结果完美匹配时,兰德系数为1。对于随机结果,RI并不能保证分数接近零。为了实现“在聚类结果随机产生的情况下,指标应该接近零”,调整兰德系数(Adjusted rand index)被提出,它具有更高的区分度。

    在这里插入图片描述
    ARI取值范围为[-1,1],负数代表结果不好,值越大意味着聚类结果与真实情况越吻合。ARI可用于聚类算法之间的比较。

    sklearn中的ARI计算

    from sklearn import metrics
    labels_true = [0,0,0,1,1,1]
    labels_pred = [0,0,1,1,2,2]
    print(metrics.adjusted_rand_score(labels_true,labels_pred))
    

    0.24242424242424243

    2.内在方法

    内在方法用于没有基准可用时的聚类质量评估,通过考察簇的分离情况和簇的紧凑度进行聚类评估。

    在这里插入图片描述
    在这里插入图片描述
    sklearn中通过sklearn.metrics.silhouette_score()方法计算聚类的轮廓系数。

    对Iris数据聚类并计算轮廓系数。

    import numpy as np
    from sklearn.cluster import KMeans
    from sklearn import metrics
    from sklearn.metrics import silhouette_score
    from sklearn.datasets import load_iris  # 导入数据集iris
    X = load_iris().data  # 载入数据集
    kmeans_model = KMeans(n_clusters=3,random_state=1).fit(X)
    labels = kmeans_model.labels_
    metrics.silhouette_score(X,labels,metric='euclidean')
    

    0.5528190123564091

    展开全文
  • 机器学习之聚类 1.定义: 聚类指将物理或抽象对象的集合分组为由类似的对象组成的多个类的分析过程。聚类试图将训练集中的样本数据划分为若干个(K个)通常互不相交的子集,每一个子集称为一个“簇”,达到...

    机器学习之聚类

    1.定义:

    聚类指将物理或抽象对象的集合分组为由类似的对象组成的多个类的分析过程。聚类试图将训练集中的样本数据划分为若干个(K个)通常互不相交的子集,每一个子集称为一个“簇”,达到“物以类聚”的效果,即是簇与簇之间的相似度低,簇内相似度高的目的**、

    2.特征:

    聚类属于无监督学习技术:无监督学习是基于缺乏足够的先验知识,因此难以人工标注类别或进行人工类别标注的成本太高的背景。很自然地,我们希望计算机能代我们完成这些工作,或至少提供一些帮助。根据类别未知(没有被标记)的训练样本解决模式识别中的各种问题,称之为无监督学习。
    简而言之:输入数据没有标签的学习称为无监督学习

    3.常见的聚类算法:

    在这里插入图片描述

    4.常见聚类算法的详细介绍:

    A.基于划分的聚类算法之K-means算法

    a.定义:

    k-means算法中的k表示聚类为k个簇,means代表取每一个聚类中数据的均值作为该簇的中心(质心)即用每一个类的质心对该簇进行描述。

    b.实现步骤:

    输入:n个样本集合X;
    输出:样本集合的聚类C;
    1.初始化:令t=0,随机选择K个样本点中心作为初始聚类中心m=(m1,…,ml,…,mk)
    2.对样本进行聚类。对固定的类中心,计算每个样本到类中心的距离,将每个样本指派到与其最近的中心的类中。构成聚类结果C。
    3.计算新的类中心。对聚类结果C,计算当前各个类中的样本均值,作为新的类中心m~
    4.如果集群赋值不再改变,或者达到用户定义的容限或者达到最大迭代数,输出结果,否则回到第2步重复。

    该算法的时间复杂度为:O(tkmn):t为迭代次数,k为簇的数目,n为样本个数,m为样本维数
    该算法的空间复杂度为:O(m(n+k)):k为簇的数目,m为样本维数,n为样本个数

    c.优缺点

    优点:
    1.高效可伸缩,计算复杂度接近于线性。
    2.收敛速度快,可解释性强,原理比较通俗易懂。
    缺点:
    1.K是超参数,一般按照经验来选择(可以先画出数据散点图,贯彻大致可以分为几类)
    2.样本点只能划分到一类当中
    3.受初值和异常点影响,聚类的结果可能不是全局最优而是局部最优

    d.相似性刻画:可以选择距离进行度量,距离越近,相似性越高,下面介绍几种距离
    聚类是距离的计算详情,点击跳转

    常用的距离度量方法有很多种,衡量有序属性的方法包括了闵可夫斯基距离,欧式距离,切比雪夫距离,曼哈顿距离,余弦距离等。

    1.闵科夫斯基距离(Minkowski distance)
    在这里插入图片描述

    2.曼哈顿距离(Manhattan distance)

    当p=1时,闵科夫斯基距离即曼哈顿距离(Manhattan distance)
    在这里插入图片描述
    3 欧式距离(Euclidean distance)

    当p=2时,闵科夫斯基距离即欧式距离(Euclidean distance)
    在这里插入图片描述
    4.切比雪夫距离(Chebyshev distance)
    当p趋于无穷时,闵科夫斯基距离即切比雪夫距离(Chebyshev Distance)

    小结:上述距离之间的关系。
    闵可夫斯基距离,曼哈顿距离,欧式距离以及切比雪夫距离之间的关系图解。图中红线代表曼哈顿距离,绿色代表欧氏距离,也就是直线距离,而蓝色和黄色代表等价的曼哈顿距离
    通俗来讲,想象你在曼哈顿要从一个十字路口开车到另外一个十字路口,驾驶距离是两点间的直线距离吗?显然不是,除非你能穿越大楼。而实际驾驶距离就是这个“曼哈顿距离”,这也是曼哈顿距离名称的来源, 同时,曼哈顿距离也称为城市街区距离(City Block distance)。

    在这里插入图片描述
    5. 余弦距离(Cosine Similarity)
    利用闵可夫斯基度量对高维数据进行聚类通常是无效的,因为样本之间的距离随着维数的增加而增加。余弦距离测量两个矢量之间的夹角,而不是两个矢量之间的幅值差。它适用于高维数据聚类时相似度测量。
    在这里插入图片描述
    6. 马氏距离(Mahalanobis Distance)
    马氏距离,即数据的协方差距离,于欧式距离不同的是它考虑到各属性之间的联系,如考虑性别信息时会带来一条关于身高的信息,因为二者有一定的关联度,而且独立于测量尺度。
    在这里插入图片描述
    其中∑是数据集x,y的协方差矩阵。马氏距离在非奇异变换下是不变的,可用来检测异常值(outliers)。

    e.优化目标:
    误差平方和(SSE):μ为集群的j的重心,如果样本点在集群中w=0,否则w=1在这里插入图片描述

    B.改进的K-Means++算法:

    解决的问题:经典的K-means算法如果初始聚类中心选择不当会导致聚类不良或者收敛缓慢,可以使用K-means++ 算法,将初始中心彼此的距离设置得足够远,带来比经典K-means算法更好地和更一致的效果

    K-Means++算法实现步骤:

    1.初始化空集合M来存储选择的k个重心。
    2.从输入样本中随机选择第一个重心μ(j)然后加入M。
    3.找出不在M中的每个样本x(i)与M中每个点的最小距离的平方
    4.随机选择下一个重心μ,计算加权概率分布
    在这里插入图片描述
    5.重复步骤2和3直至选中k个重心。
    6.继续进行经典的k-均值算法。

    几个重要的概念:

    1.硬聚类:指数据集中每个样本只能划分到一个簇的算法,例如k-means算法。
    2.软聚类:指算法可以将一个样本划分到一个或者多个簇,模糊C-means(FCM)算法。

    一个简单的例子帮助理解模糊FCM:

    假设现在有一群人,要将他们自动分成大人和小孩两类,以身高作为分类标准(若身高大于160cm为大人,小于160cm为小孩)。现有一人身高为100cm,那么根据上述标准,不难判断,他会被划分到小孩一组。但是如果他的身高为159cm,该如何划分呢?

    IDEA1:无论如何159cm总是小于160cm,应该被分到小孩组。
    IDEA2:159cm很接近160cm,更偏离小孩组,应该被分到大人组。

    以上两种说法体现了普通C均值算法(HCM)和模糊C均值算法(FCM)的差异:

    普通C均值算法在分类时有一个硬性标准,根据该标准进行划分,分类结果非此即彼。(IDEA1)
    模糊C均值算法更看重隶属度,即更接近于哪一方,隶属度越高,其相似度越高。(IDEA2)

    由以上叙述不难判断,用模糊C均值算法来进行组类划分会使结果更加准确!

    FCM的优化目标:其中m叫做模糊系数,用于控制模糊程度,m的值越大,集群成员数就越小,集群就越模糊
    在这里插入图片描述
    FCM属于集群的程度(概率):
    在这里插入图片描述

    用肘法求解最佳聚类数:

    肘法的核心思想:随着聚类数k的增大,样本划分会更加精细,每个簇的聚合程度会逐渐提高,那么误差平方和SSE自然会逐渐变小。并且,当k小于真实聚类数时,由于k的增大会大幅增加每个簇的聚合程度,故SSE的下降幅度会很大,而当k到达真实聚类数时,再增加k所得到的聚合程度回报会迅速变小,所以SSE的下降幅度会骤减,然后随着k值的继续增大而趋于平缓,也就是说SSE和k的关系图是一个手肘的形状,而这个肘部对应的k值就是数据的真实聚类数。这也是该方法被称为肘方法的原因。
    肘法的作用:评估给定任务的最佳集群数K

    在这里插入图片描述

    通过轮廓图量化聚类质量:

    定义

    轮廓系数,是用于评价聚类效果好坏的一种指标。可以理解为描述聚类后各个类别的轮廓清晰度的指标。其包含有两种因素——内聚度和分离度。
    内聚度可以理解为反映一个样本点与类内元素的紧密程度。
    分离度可以理解为反映一个样本点与类外元素的紧密程度

    内聚度:样本与集群内部所有其他点的平均距离
    分离度:样本与最近集群内所有样 本之间的平均距离

    轮廓系数计算公式:即集群内聚度与集群分离度之差,除以两者中较 大的那一个
    在这里插入图片描述
    轮廓系数的范围在-1到1之间。如果集群分离度和集群内聚度相等,那么从前面的方程可以看到轮廓系数为0。此外,如果 b>>a,则接近理想的轮廓系数1

    在这里插入图片描述
    在这里插入图片描述

    把集群组织成有层次的树:

    层次聚类:

    凝聚:首先从每个集群包含的单个样本开始,合并最接近的集群,直到只剩一个集群为止

    分裂:首先从包含所有样本的集群开始逐步迭代,将集群分裂为更小的集群,知道每个集群只包含一个样本为止。

    凝聚层次聚类:

    单链接:计算两个集群中最相似的成员之间的距离,然后合并两个集群,其中两个最相似成员之间的距离最小。

    全连接:类似于单链接,但是不是比较每对集群中最相似的成员,而是比较最不相似的成员,然后合并。

    实现步骤:
    1.计算所有样本的距离矩阵
    2.将每个数据点表示为单例集群
    3.根据最不相同的(遥远的)成员之间的距离合并两个最近的集群
    4.更新相似度矩阵
    5.重复2-4直到一个集群保持不变

    在这里插入图片描述

    平均连接法:基于两个集群中所有成员之间的最小平均距离来合并集群

    沃德连接法:基于集群内总SEE增长最小的两个集群

    层次聚类树状图:
    在这里插入图片描述

    热度图: 与层次聚类数通常和热度图连用,使得我们能够用颜色代表样本距离个体的数值

    在这里插入图片描述

    展开全文
  • 聚类评估

    千次阅读 2018-11-11 17:23:18
    聚类概念 聚类是一个把数据对象划分为多个簇或者多个组的过程,使得一个簇内的对象具有很高的相似性,但与其他簇内的对象不相似。聚类算法属于无监督学习 聚类分析概念 聚类分析是一个把数据对象划分为子集的过程,...
  • 聚类算法的评价模型.pdf
  • 聚类 ( Cluster ) 质量 IV . 聚类 ( Cluster ) 质量 测量 V . 聚类 ( Cluster ) 算法要求 VI . 聚类 ( Cluster ) 数据矩阵 VII . 聚类 ( Cluster ) 相似度矩阵 VIII . 聚类 ( Cluster ) 二模矩阵 与 单模矩阵
  • 详解聚类评估

    千次阅读 2019-11-06 10:27:39
    观察聚类误差是否随聚类类别数量的增加而单调变化方法二:Hopkins Statistic(霍普金斯统计量)判定数据簇数方法一:经验法方法二:手肘法方法三:交叉验证法测定聚类质量外在方法(有监督方法)Jaccard Coefficient...
  • 简明聚类分析入门

    2020-06-02 20:58:46
    摘要 : 以“为什么需要聚类分析这一问题”作为引入,逐步阐述聚类分析领域是如何发展的。这篇文章主要阐述聚类分析的四类方法:划分方法、层次方法、基于密度的方法和基于网格的方法的基本原理以及它们中的代表算法...
  • 收稿日期:2007-07-12基金项目:国家自然科学基金资助(50474033)作者简介:冯少荣(1964-),男,副教授,华南理工大学博士研究生,E-mail:shaorong@xmu.edu.cn.一种提高DBSCAN聚类算法质量的新方法冯少荣1,2,肖文俊1(1....
  • 一种提高DBSCAN聚类算法质量的新方法.pdf
  • 输入参数敏感、对内存要求高、数据分布不均匀时影响聚类效果,提出了一种基于遗传方法的DBSCAN算法改进方案数据分区中使用遗传思想的DBSCAN算法(DPDGA)来提高聚类质量。利用遗传算法改进Kmeans算法来获取初始聚类...
  • 十分钟掌握聚类算法的评估指标

    千次阅读 2021-11-13 13:43:16
    一般来说,评估聚类质量有两个标准,内部评估评价指标和外部评估指标。 内部评估的方法 内部评估指标主要基于数据集的集合结构信息从紧致性、分离性、连通性和重叠度等方面对聚类划分进行评价。即基于数据聚类自身...
  • 点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达 本文转自:磐创AI1. 典型聚类算法1.1 基于划分的方法代表:kmeans算法·指定k个聚类中心...
  • 转载:http://blog.sina.com.cn/s/blog_13ec735f50102x6ay.html
  • 我们采用条件熵度量来量化聚类质量和独特性,从而产生分析一致的组合标准。 与其他一些基于信息论的方法不同,我们采用一个计算效率高的非参数熵估计器, 这不对概率分布施加任何假设。 我们提出了一种名为 ...
  • 根据SPSS聚类结果,聚类质量属于“良好”范围,仍有进一步改进和优化的空间。 根据SPSS聚类结果,显著区分两类类簇的变量(重要性>0.6)按重要性大小排序依次是驱动类型、燃油系统、车辆截面与马力因子、价格范围。 ...
  • 原文地址:【阅读原文】 在之前的文章中已经介绍了四大类聚类方法及其典型的算法实现,那么,现在我们所需要做的就是聚类评估。聚类评估的主要任务包括: ...测定聚类质量:对聚类结果进行评价。 一、估计...
  • 聚类分析在客户细分中极为重要。有三类比较常见的聚类模型,K-mean聚类、层次(系统)聚类、最大期望EM算法。在聚类模型建立过程中,一个比较关键的问题是如何评价聚类结果如何,会用一些指标来评价。 本篇笔记来源...
  • 聚类算法总结

    千次阅读 2017-05-23 11:07:07
    聚类是指一种学习方法,即把物理或者抽象对象的集合分组为由彼此类似的对象组成的多个类簇的分析过程。 K-Means算法 K-Means算法是最常用的聚类算法之一,具体步骤如下: 从n个向量对象任意选择K个向量作为初始...
  • 聚类算法与衡量标准

    2021-08-26 10:22:50
    聚类 聚类算法 聚类性能度量 聚类 在前面我们所使用的KNN、SVM、DT等算法中,我们就是根据给定数据集的数据和标签来不断的学习模型参数,最终形成一个合适的模型,然后可以通过该模型去对其他的数据进行预测。但现在...
  • 计算每个点到簇质心的距离平方值,评价聚类质量。 2、导致聚类效果较差的原因有 收敛到了局部最小值,而非全局最小值,也就是还需要继续收敛; 3、用误差平方和SSE来度量聚类效果。 即程序中clusterAssment...
  • DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个出现得比较早(1996年),比较有代表性的基于密度的聚类算法。DBSCAN能够将足够高密度的区域划分成簇,并能在具有噪声的空间数据库中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 29,053
精华内容 11,621
关键字:

聚类质量