精华内容
下载资源
问答
  • 含义轮廓系数(Silhouette Coefficient),是聚类效果好坏的一种评价方式。可见轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优。计算步骤1)对于簇中的每个向量,分别计算它们的轮廓系数。对于...

    含义

    轮廓系数(Silhouette Coefficient),是聚类效果好坏的一种评价方式。

    可见轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优。

    计算步骤

    1)对于簇中的每个向量,分别计算它们的轮廓系数。

    对于其中的一个点 i 来说:

    计算 簇内不相似度a(i):i向量到同簇内其他点不相似程度的平均值,体现凝聚度

    计算 簇间不相似度b(i):i向量到其他簇的平均不相似程度的最小值,体现分离度

    那么第i个对象的轮廓系数就为:

    si接近1,则说明样本i聚类合理;si接近-1,则说明样本i更应该分类到另外的簇;若si 近似为0,则说明样本i在两个簇的边界上。

    2)将所有点的轮廓系数求平均,就是该聚类结果总的轮廓系数。

    python实现

    # -*- coding: utf-8 -*-

    import pandas as pd

    import numpy as np

    from sklearn.cluster import KMeans

    from sklearn import metrics

    #假如我要构造一个聚类数为10的聚类器

    estimator = KMeans(n_clusters=10, random_state=777)#构造聚类器,设定随机种子

    estimator.fit(kmeans_data_tf)#聚类

    r1 = pd.Series(estimator.labels_).value_counts() #统计各个类别的数目

    r2 = pd.DataFrame(estimator.cluster_centers_) #找出聚类中心

    r = pd.concat([r2, r1], axis = 1) #横向连接(0是纵向),得到聚类中心对应的类别下的数目

    r.columns = list(kmeans_data_tf.columns) + [u'类别数目'] #重命名表头

    print(r)

    print("轮廓系数:", metrics.silhouette_score(kmeans_data_tf, estimator.labels_, metric='euclidean'))

    标签:系数,python,算法,estimator,pd,聚类,import,轮廓

    来源: https://blog.csdn.net/qq_14997473/article/details/96840513

    展开全文
  • DBSCAN聚类Python程序及评价轮廓系数import pandas aspdbeer =pd.read_csv('C:/Users/zhao/Desktop/data.txt', sep=' ') # 导入数据print(beer)fromsklearn.cluster import DBSCANX =beer[["colories","sodium",...

    DBSCAN聚类Python程序及评价轮廓系数

    import pandas aspd

    beer =pd.read_csv('C:/Users/zhao/Desktop/data.txt', sep='     ')  # 导入数据

    print(beer)

    fromsklearn.cluster import DBSCAN

    X =beer[["colories","sodium","alcohol","cost"]]

    db =DBSCAN(eps=10, min_samples=2).fit(X)  # 设置半径为10,最小样本量为2,建模

    labels =db.labels_   # 聚类,将每个实例的簇标签放入labels序列

    beer['cluster_db']= labels  # 在数据集最后一列加上经过DBSCAN聚类后的结果

    beer.sort_values('cluster_db')

    print(beer.groupby('cluster_db').mean())  # 查看根据DBSCAN聚类后的分组统计结果(均值)

    print(pd.plotting.scatter_matrix(X,c=beer.cluster_db.tolist(), figsize = (10,10), s=100))  # 画出在不同两个指标下样本的分布情况

    # 可以从这个图里观察聚类效果的好坏,但是当数据量很大,或者指标很多的时候,观察起来就会非常麻烦。

    from sklearnimport metrics  # 就是下面这个函数可以计算轮廓系数

    score =metrics.silhouette_score(X,beer.cluster_db)

    print(score)

    注:轮廓系数

    将待分类数据分为了 k 个簇 ,对于簇中的每个向量,分别计算它们的轮廓系数。

    对于其中的一个点 i 来说:

    计算 a(i) = average(i向量到所有它属于的簇中其它点的距离)

    计算 b(i) = min (i向量到与它相邻最近的一簇内的所有点的平均距离)

    那么 i 向量轮廓系数就为:

    acffa1bf9cd48dcded4b6f8eed0c2ee5.png

    981dba29a3390d36c9495289817b2ec7.png

    可见轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优。

    将所有点的轮廓系数求平均,就是该聚类结果总的轮廓系数

    a(i): i向量到同一簇内其他点不相似程度的平均值

    b(i): i向量到其他簇的平均不相似程度的最小值

    若si 近似为0,则说明样本i在两个簇的边界上

    当簇内只有一点时,我们定义轮廓系数s(i)为0

    轮廓系数的优点:

    ①轮廓系数为-1时表示聚类结果不好,为+1时表示簇内实例之间紧凑,为0时表示有簇重叠。

    ②轮廓系数越大,表示簇内实例之间紧凑,簇间距离大

    轮廓系数的缺点:

    对于簇结构为凸的数据轮廓系数值高,而对于簇结构非凸需要使用DBSCAN进行聚类的数据,轮廓系数值低,因此,轮廓系数不应该用来评估不同聚类算法之间的优劣,比如Kmeans聚类结果与DBSCAN聚类结果之间的比较

    展开全文
  • 轮廓系数(Silhouette Coefficient),是聚类效果好坏的一种评价方式。 轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优。 计算步骤 1)对于簇中的每个向量,分别计算它们的轮廓系数。 ...

    含义

    轮廓系数(Silhouette Coefficient),是聚类效果好坏的一种评价方式。     

    轮廓系数的值是介于 [-1,1] ,越趋近于1代表内聚度和分离度都相对较优。

    计算步骤

    1)对于簇中的每个向量,分别计算它们的轮廓系数。

          对于其中的一个点 i 来说:

          计算 簇内不相似度a(i) :i向量到同簇内其他点不相似程度平均值,体现凝聚度

          计算 簇间不相似度b(i) :i向量到其他簇平均不相似程度最小值,体现分离度

          那么第i个对象的轮廓系数就为:

          si接近1,则说明样本i聚类合理;si接近-1,则说明样本i更应该分类到另外的簇;若si 近似为0,则说明样本i在两个簇的边界上。

    2)所有点的轮廓系数求平均,就是该聚类结果总的轮廓系数。


    python实现

    # -*- coding: utf-8 -*-
    import pandas as pd
    import numpy as np
    from sklearn.cluster import KMeans
    from sklearn import metrics
    
    #假如我要构造一个聚类数为10的聚类器
    estimator = KMeans(n_clusters=10, random_state=777)#构造聚类器,设定随机种子
    estimator.fit(kmeans_data_tf)#聚类
    
    r1 = pd.Series(estimator.labels_).value_counts()  #统计各个类别的数目
    r2 = pd.DataFrame(estimator.cluster_centers_)     #找出聚类中心
    r = pd.concat([r2, r1], axis = 1) #横向连接(0是纵向),得到聚类中心对应的类别下的数目
    r.columns = list(kmeans_data_tf.columns) + [u'类别数目'] #重命名表头
    print(r)
    print("轮廓系数:", metrics.silhouette_score(kmeans_data_tf, estimator.labels_, metric='euclidean'))

     

    展开全文
  • 1 R语言中的分群质量——轮廓系数 因为先前惯用R语言,那么来看看R语言中的分群质量评估,节选自笔记︱多种常见聚类模型以及分群质量评估(聚类注意事项、使用技巧): 没有固定标准,一般会...

    之前关于聚类题材的博客有以下两篇:
    1、 笔记︱多种常见聚类模型以及分群质量评估(聚类注意事项、使用技巧)
    2、k-means+python︱scikit-learn中的KMeans聚类实现
    .


    1 R语言中的分群质量——轮廓系数

    因为先前惯用R语言,那么来看看R语言中的分群质量评估,节选自笔记︱多种常见聚类模型以及分群质量评估(聚类注意事项、使用技巧)

    没有固定标准,一般会3-10分群。或者用一些指标评价,然后交叉验证不同群的分群指标。
    一般的指标:轮廓系数silhouette(-1,1之间,值越大,聚类效果越好)(fpc包),兰德指数rand;R语言中有一个包用30种方法来评价不同类的方法(NbClust),但是速度较慢
    商业上的指标:分群结果的覆盖率;分群结果的稳定性;分群结果是否从商业上易于理解和执行
    轮廓系数旨在将某个对象与自己的簇的相似程度和与其他簇的相似程度进行比较。轮廓系数最高的簇的数量表示簇的数量的最佳选择。
    这里写图片描述
    一般来说,平均轮廓系数越高,聚类的质量也相对较好。在这,对于研究区域的网格单元,最优聚类数应该是2,这时平均轮廓系数的值最高。但是,聚类结果(k=2)的 SSE 值太大了。当 k=6 时,SEE 的值会低很多,但此时平均轮廓系数的值非常高,仅仅比 k=2 时的值低一点。因此,k=6 是最佳的选择。
    .


    2 python中的分群质量

    主要参考来自官方文档:Clustering

    部分内容来源于:机器学习评价指标大汇总
    个人比较偏好的三个指标有:Calinski-Harabaz Index(未知真实index的模型评估)、Homogeneity, completeness and V-measure(聚类数量情况)、轮廓系数

    1.1 Adjusted Rand index 调整兰德系数

    这里写图片描述

    >>> 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

    .

    1.2 Mutual Information based scores 互信息

    这里写图片描述
    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

    .

    1.3 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...

    .

    1.4 Fowlkes-Mallows scores

    The Fowlkes-Mallows score FMI is defined as the geometric mean of the pairwise precision and recall:
    这里写图片描述

    >>> 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...

    .

    1.5 Silhouette Coefficient 轮廓系数

    这里写图片描述

    >>> 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...

    .

    1.6 Calinski-Harabaz Index

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

    这里写图片描述
     也就是说,类别内部数据的协方差越小越好,类别之间的协方差越大越好,这样的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...

    公众号“素质云笔记”定期更新博客内容:

    这里写图片描述

    展开全文
  •   本文介绍两种聚类评估方法,轮廓系数(Silhouette Coefficient)以及标准化互信息(NMI),并且用Python实现。 导航效果评估综述轮廓系数互信息参考文章 效果评估综述   这里直接贴上 聚类算法初探(七)聚类...
  • 用scikit-learn进行k-means聚类,默认使用欧式距离,为了用余弦距离作为度量,找了一个在... 另外,为了确定一个合理的聚类系数,采用轮廓系数作为衡量标准: 轮廓系数取值为[-1, 1],其值越大越好。from sklearn...
  • python实现六大分群质量评估指标(兰德系数、互信息、轮廓系数) 1 R语言中的分群质量——轮廓系数 因为先前惯用R语言,那么来看看R语言中的分群质量评估,节选自笔记︱多种常见聚类模型以及分群质量评估(聚类注意...
  • python——k-means聚类(余弦距离,用轮廓系数确定聚类系数K)发布时间:2018-05-14 23:04,浏览次数:1799, 标签:pythonmeans用scikit-learn进行k-means聚类,默认使用欧式距离,为了用余弦距离作为度量,找了一个在...
  • 轮廓系数前言是什么?为什么?由此可得:怎么用?不适用示例 前言 在机器学习中,无监督学习算法中聚类算法算作相对重要的一部分算法。也常在低资源和无标注的情况下使用。 其中KMeans作为聚类算法中的一种,充当着...
  • 官方接口说明:...6,6,0]] y=[0,0,0,1] print("轮廓系数:", metrics.silhouette_score(cdist_dtw(X), y,metric="precomputed")) 运行结果:
  • 然后把样本点分配到离他们最近的类,在通过迭代吧该类的重心移到该类全部成员位置的平均值那里,以此类推进行迭代,但由于没有固定的类别标记,所以类别的数量和聚类的效果就需要我们通过肘部法则和轮廓系数进行判断...
  • 转载:http://blog.sina.com.cn/s/blog_13ec735f50102x6ay.html
  • 1 R语言中的分群质量——轮廓系数因为先前惯用R语言,那么来看看R语言中的分群质量评估,节选自笔记︱多种常见聚类模型以及分群质量评估(聚类注意事项、使用技巧): 没有固定标准,一般会3-10分群。或者用一些...
  • 本文运用SSE(簇内误方差)和轮廓系数两种检验方法,对三、(2)python实现完整的K-means算法进行K值检验。 完整代码如下: (1) SSE。 SSE利用计算误方差和,来实现对不同K值的选取后,每个K值对应簇内的点到中心点的...

空空如也

空空如也

1 2 3 4 5 6
收藏数 104
精华内容 41
关键字:

python轮廓系数

python 订阅