精华内容
下载资源
问答
  • 轮廓系数

    千次阅读 2018-10-22 19:02:37
    轮廓系数如何计算(图像来源于百度) a(i) :i向量到同一簇内其他点不相似程度的平均值 b(i) :i向量到其他簇的平均不...通过可以知道轮廓系数的如何计算 可以用轮廓系数确定样本在聚类结果中的内聚度和分离度 ...

    轮廓系数如何计算(图像来源于百度)
    在这里插入图片描述

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

    通过图可以知道轮廓系数的如何计算
    可以用轮廓系数确定样本在聚类结果中的内聚度和分离度

    展开全文
  • 手机已成为日常生活中必不可少的通讯配件。 智能手机使用的MMS(多媒体消息服务)对移动图像处理提出了... 在划分中采用谱聚类算法,并使用轮廓系数从所有分类可能性中提取最佳分类。 实验结果证明了该方法的有效性。
  • 通常使用绘制轮廓系数分布和聚类后的数据分布来选择最佳的n_clusters。 from sklearn.cluster import KMeans from sklearn.metrics import silhouette_samples, silhouette_score from sklearn.datasets import ...

    通常使用绘制轮廓系数分布图和聚类后的数据分布图来选择最佳的n_clusters。

    from sklearn.cluster import KMeans
    from sklearn.metrics import silhouette_samples, silhouette_score
    from sklearn.datasets import make_blobs
    import matplotlib.pyplot as plt
    import matplotlib.cm as cm
    import numpy as np
    
    X, y = make_blobs(n_samples=500, n_features=2, centers=4, random_state=1)
    
    n_clusters = 4
    fig, (ax1, ax2) = plt.subplots(1, 2)
    fig.set_size_inches(18, 7)
    ax1.set_xlim([-0.1, 1])
    ax1.set_ylim([0, X.shape[0] + (n_clusters + 1) * 10])
    clusterer = KMeans(n_clusters=n_clusters, random_state=10).fit(X)
    cluster_labels = clusterer.labels_
    
    silhouette_avg = silhouette_score(X, cluster_labels)
    print("For n_clusters =", n_clusters, "The average silhouette_score is :", silhouette_avg)
    
    sample_silhouette_values = silhouette_samples(X, cluster_labels)
    
    y_lower = 10
    
    for i in range(n_clusters):
        ith_cluster_silhouette_values = sample_silhouette_values[cluster_labels == i]
        ith_cluster_silhouette_values.sort()
        size_cluster_i = ith_cluster_silhouette_values.shape[0]
        y_upper = y_lower + size_cluster_i
        color = cm.nipy_spectral(float(i) / n_clusters)
        ax1.fill_betweenx(np.arange(y_lower, y_upper)
                          , ith_cluster_silhouette_values
                          , facecolor=color
                          , alpha=0.7
                          )
        ax1.text(-0.05
                 , y_lower + 0.5 * size_cluster_i
                 , str(i)
                 )
        ax1.text(-0.05
                 , y_lower + 0.5 * size_cluster_i
                 , str(i)
                 )
        y_lower = y_upper + 10
    
    ax1.set_title("The silhouette plot for the various clusters.")
    ax1.set_xlabel("The silhouette coefficient values")
    ax1.set_ylabel("Cluster label")
    ax1.axvline(x=silhouette_avg, color="red", linestyle="--")
    ax1.set_yticks([])
    ax1.set_xticks([-0.1, 0, 0.2, 0.4, 0.6, 0.8, 1])
    colors = cm.nipy_spectral(cluster_labels.astype(float) / n_clusters)
    ax2.scatter(X[:, 0], X[:, 1]
                , marker='o'  # 点的形状
                , s=8  # 点的大小          
                , c=colors)
    centers = clusterer.cluster_centers_
    ax2.scatter(centers[:, 0], centers[:, 1], marker='x',
                c="red", alpha=1, s=200)
    ax2.set_title("The visualization of the clustered data.")
    ax2.set_xlabel("Feature space for the 1st feature")
    ax2.set_ylabel("Feature space for the 2nd feature")
    plt.suptitle(("Silhouette analysis for KMeans clustering on sample data "
                  "with n_clusters = %d" % n_clusters),
                 fontsize=14, fontweight='bold')
    plt.show()
    

    在这里插入图片描述
    这个是n_clusters==4是的cm轮廓图和pyplot点图

    将上面的过程包装成一个循环,可以得到:

    在n_clusters中,加入了一层循环

    from sklearn.cluster import KMeans
    from sklearn.metrics import silhouette_samples, silhouette_score
    from sklearn.datasets import make_blobs
    import matplotlib.pyplot as plt
    import matplotlib.cm as cm
    import numpy as np
    
    X, y = make_blobs(n_samples=500, n_features=2, centers=4, random_state=1)
    
    for n_clusters in [2,3,4,5,6,7]:
        fig, (ax1, ax2) = plt.subplots(1, 2)
        fig.set_size_inches(18, 7)
        ax1.set_xlim([-0.1, 1])
        ax1.set_ylim([0, X.shape[0] + (n_clusters + 1) * 10])
        clusterer = KMeans(n_clusters=n_clusters, random_state=10).fit(X)
        cluster_labels = clusterer.labels_
    
        silhouette_avg = silhouette_score(X, cluster_labels)
        print("For n_clusters =", n_clusters, "The average silhouette_score is :", silhouette_avg)
    
        sample_silhouette_values = silhouette_samples(X, cluster_labels)
    
        y_lower = 10
    
        for i in range(n_clusters):
            ith_cluster_silhouette_values = sample_silhouette_values[cluster_labels == i]
            ith_cluster_silhouette_values.sort()
            size_cluster_i = ith_cluster_silhouette_values.shape[0]
            y_upper = y_lower + size_cluster_i
            color = cm.nipy_spectral(float(i) / n_clusters)
            ax1.fill_betweenx(np.arange(y_lower, y_upper)
                              , ith_cluster_silhouette_values
                              , facecolor=color
                              , alpha=0.7
                              )
            ax1.text(-0.05
                     , y_lower + 0.5 * size_cluster_i
                     , str(i)
                     )
            ax1.text(-0.05
                     , y_lower + 0.5 * size_cluster_i
                     , str(i)
                     )
            y_lower = y_upper + 10
    
        ax1.set_title("The silhouette plot for the various clusters.")
        ax1.set_xlabel("The silhouette coefficient values")
        ax1.set_ylabel("Cluster label")
        ax1.axvline(x=silhouette_avg, color="red", linestyle="--")
        ax1.set_yticks([])
        ax1.set_xticks([-0.1, 0, 0.2, 0.4, 0.6, 0.8, 1])
        colors = cm.nipy_spectral(cluster_labels.astype(float) / n_clusters)
        ax2.scatter(X[:, 0], X[:, 1]
                    , marker='o'  # 点的形状
                    , s=8  # 点的大小          
                    , c=colors)
        centers = clusterer.cluster_centers_
        ax2.scatter(centers[:, 0], centers[:, 1], marker='x',
                    c="red", alpha=1, s=200)
        ax2.set_title("The visualization of the clustered data.")
        ax2.set_xlabel("Feature space for the 1st feature")
        ax2.set_ylabel("Feature space for the 2nd feature")
        plt.suptitle(("Silhouette analysis for KMeans clustering on sample data "
                      "with n_clusters = %d" % n_clusters),
                     fontsize=14, fontweight='bold')
        plt.show()
    
    • 共生成了6组图,左边的图是轮廓系数的取值,每个颜色代表一个簇。
    • 右边的图是聚类分布图。
    • 4个和2个分类情况,需要根据不同的实际情况来分析。(业务水平

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

    展开全文
  • 如果一个簇中的大多数样本具有比较高的轮廓系数,则簇会有较高的总轮廓系数,则整个数据集的平均轮廓系数越高,则聚类是合适的。如果许多样本点具有低轮廓系数甚至负值,则聚类是不合适的,聚类的超参数K可能设定得...

    轮廓系数:

    如果一个簇中的大多数样本具有比较高的轮廓系数,则簇会有较高的总轮廓系数,则整个数据集的平均轮廓系数越高,则聚类是合适的。如果许多样本点具有低轮廓系数甚至负值,则聚类是不合适的,聚类的超参数K可能设定得太大或者太小。

    现在有这样的散点图,如果采用KMeans聚类的话,如何选择合适的n_cluster(簇)呢?
    在这里插入图片描述
    我们先假设n_cluster=4

    from sklearn.cluster import KMeans
    from sklearn.metrics import silhouette_samples, silhouette_score
    import matplotlib.pyplot as plt
    import matplotlib.cm as cm  # colormap
    import numpy as np
    import pandas as pd
    import numpy as np
    from sklearn.datasets import make_blobs
    X,y = make_blobs(n_samples=500, n_features=2,centers=4,random_state=1)  
    #要500个数,特征是两个
    # 先设定我们要分成的簇数
    n_clusters = 4 
    # 创建一个画布,画布上共有一行两列两个图
    fig, (ax1,ax2) = plt.subplots(1,2)
    # 画布尺寸
    fig.set_size_inches(18,7)  # 设置尺寸,以英尺为单位
    # 第一个图是我们的轮廓系数图像,是由各个簇的轮廓系数组成的横向条形图
    # 横向条形图的横坐标是我们的轮廓系数取值,纵坐标是我们的每个样本,因为轮过 系数是对于每一个样本进行计算的
    ax1.set_xlim([-0.1,1])  
    #轮廓系数的取值范围为-1到1,但我们至少是希望轮廓系数要大于0的
    #太长的横坐标不利于我们的可视化,所以只设定x轴的取值在[-0.1,1之间]
    ax1.set_ylim([0,X.shape[0] + (n_clusters + 1) * 10])
    # 纵坐标是从0开始的,最大值取到X.shape[0]的取值
    # 但我们希望每个簇能够排在一起,不同簇之间有一定的间隙
    # 因此我们在X.shape[0]上,加上一个距离(n_clusters +1)*10,以便留出间隙
    # 开始建模,调用聚类好的标签
    clusterer = KMeans(n_clusters = n_clusters, random_state=10).fit(X)
    cluster_labels = clusterer.labels_
    # 调用轮廓系数分数 ,注意,silhouette_score生成的是所有样本点的轮廓系数均值
    # 两个需要输入的参数是,特征矩阵X和聚类完毕后的标签
    silhouette_avg = silhouette_score(X, cluster_labels)
    # 用print 来汇报一下结果,现在的簇数量下,整体的轮廓系数究竟有多少
    print("For n_clusters = ", n_clusters,
         "The average silhouette_score is :", silhouette_avg)
    # 调用silhouette_samples,返回每个样本点的轮廓系数,这就是我们的横坐标
    sample_silhouette_values = silhouette_samples(X, cluster_labels)
    # 设定y轴上的初始取值
    y_lower = 10 # 不希望贴着x 轴开始的
    
    # 接下来对每一个簇来进行循环
    for i in range(n_clusters):
        # 从每个样本的轮廓系数结果中抽取出第i个簇的轮廓系数,并对他进行排序
        ith_cluster_silhouette_values = sample_silhouette_values[cluster_labels == i]
        # 注意 .sort()这个命令会改掉原数据的顺序
        ith_cluster_silhouette_values.sort()
        # 查看这一个簇中究竟有多少个样本
        size_cluster_i = ith_cluster_silhouette_values.shape[0]
        # 这一个簇在y轴上的取值,应该是由初始值(y_lower)开始,到初始值+这个簇中的样本数量结束(y_upper)
        y_upper = y_lower + size_cluster_i
        # colormap中,使用小数来调用颜色的函数。
        # 在nipy_spectral([输入任意小数来代表一个颜色])
        # 我们希望每个簇的颜色是不同的
        color = cm.nipy_spectral(float(i)/n_clusters)
        
        #开始填充子图1中的内容
        #fill_between 是填充曲线与直角之间的空间的函数
        #fill_betweenx 的直角是在纵坐标上
        #fill_betweeny 的范围是在横坐标上
        #fill_betwwenx的参数应该输入(纵坐标的下限,纵坐标的上限,x轴上的取值,柱状图的颜色)
        ax1.fill_betweenx(np.arange(y_lower, y_upper)
                         ,ith_cluster_silhouette_values #对应的横坐标的取值
                         ,facecolor=color 
                         ,alpha=0.7 #透明度
                         )
        # 为每个簇的轮廓系数写上簇的编号,并且让簇的编号显示坐标轴上每个条形图的中间位置
        #text的参数为(要显示编号的位置的横坐标,要显示编号的位置的纵坐标,要显示的编号内容)
        ax1.text(-0.05
                ,y_lower + 0.5 * size_cluster_i  # 编号放在....中间
                ,str(i)
                )
        # 为下一个簇计算新的y轴上的初始值,是每一次迭代之后,y的上限再加上10
        # 来保证不同簇的图像之间显示有空隙
        y_lower = y_upper + 10
    
     # 给图1 加上标题,横坐标轴和纵坐标轴的标签
    ax1.set_title("The silhouette plot for the various clusters")
    ax1.set_xlabel("The silhouette coefficient values")
    ax1.set_ylabel("Cluster label")
    
    # 把整个数据集上的轮廓系数的均值以虚线的形式放入我们的图中
    ax1.axvline(x=silhouette_avg, color="red", linestyle="--")
    # 让y轴不显示任何刻度
    ax1.set_yticks([])
    # 让x轴上的刻度显示为我们规定的列表
    ax1.set_xticks([-0.1,0,0.2,0.4,0.6,0.8,1])
    # 画第二个图
    colors = cm.nipy_spectral(cluster_labels.astype(float)/n_clusters)
    ax2.scatter(X[:,0],X[:,1]
               ,marker='o'
               ,s=8
               ,c=colors
               )
    #把生成的质心放到图像中去
    centers = clusterer.cluster_centers_
    ax2.scatter(centers[:,0],centers[:,1],marker='x',
               c="red",alpha=1,s=200)
    # 为图二设置标题等
    ax2.set_title("The visualization of the clustered data.")
    ax2.set_xlabel("Feature space for the 1st feature")
    ax2.set_ylabel("Feature space for the 2nd feature")
    
    # 为整个图设置标题
    plt.suptitle(("Silhouette analysis for KMeans clustering on sample data"
                ,"With n_clusters = %d" % n_clusters),
                 fontsize=14,fontweight='bold')
    plt.show()
    

    结果如下在这里插入图片描述

    最后,我们可以写一个大循环来寻求n=2~7(例如)之间时,聚类情况,通过轮廓系数来选择最好的n_cluster的取值。

    最后的图是这样的(后面还有图,截不全了):
    在这里插入图片描述

    展开全文
  • 提出一种基于Contourlet变换域子带内系数相关性的图像压缩算法。通过互信息量的计算,发现Contourlet变换域子带内紧邻的系数之间存在较强的相关性,并且在不同的分解子带中系数之间的相关性强弱呈现出位置上的各向...
  • 在学习使用k-means算法进行负载聚类分析时看到了这样的,查了之后大仙是用轮廓系数来评估分类结果的准确度或者称合适度。 定义 轮廓系数结合了凝聚度和分离度,其计算步骤如下: 1.对于第i个对象,计算它到...

    在学习使用k-means算法进行负载聚类分析时看到了这样的图,查了之后是用轮廓系数来评估分类结果的准确度或者称合适度。
    这里写图片描述

    silhouette 是一个衡量一个结点与它属聚类相较于其它聚类的相似程度。
    取值范围-1到1,值越大表明这个结点更匹配其属聚类而不与相邻的聚类匹配。
    如果大多数结点都有很高的silhouette value,那么聚类适当。若许多点都有低或者负的值,说明分类过多或者过少。
    定义
    轮廓系数结合了凝聚度和分离度,其计算步骤如下:
    1.对于第i个对象,计算它到所属簇中所有其他对象的平均距离,记为ai(体现凝聚度)
    2.对于第i个对象和不包含该对象的任意簇,记为bi(体现分离度)
    3.第i个对象的轮廓系数为si=(bi-ai)/max(ai,bi)
    scikit-learn 中的轮廓系数
    对应 scikit-learn 方法是 sklearn.metrics.silhouette_score。该方法是计算所有样本的平均值,另一个方法 silhouette_samples 会返回所有样本的轮廓系数。在文档中提到,轮廓系数需要聚类数大于2,小于(样本数-1)。方法包括几个参数,最终返回一个 float 的轮廓系数,通常是在全部样本上的。

    X:二维样本,通常为[n_samples, n_features],当 metric 设置为”precomputed”时,应为[n_samples, n_samples]方阵
    labels:一维矩阵,每个样本所属簇的 label
    metric:预计算”precomputed”,或者为一个可调用的函数计算两个实例之间的距离。如果为 string,则必须是metrics.pairwise.pairwise_distances 中 metric 可选的(‘cityblock’, ‘cosine’, ‘euclidean’, ‘l1’, ‘l2’, ‘manhattan’ 或‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘correlation’, ‘dice’, ‘hamming’, ‘jaccard’, ‘kulsinski’, ‘mahalanobis’, ‘matching’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’)——好多啊。
    sample_size:随机取样一部分计算平均值,int 类型
    random_state:当sample_size 为非空时用来生成随机采样。给定一个种子,或者使用 numpy.RandomState
    **kwds:其他可选的 key-value 参数

    参考
    http://buptguo.com/2016/05/31/learn-ml-from-scikit-learn-silhouette-analysis/
    https://blog.csdn.net/u014470581/article/details/51166758

    展开全文
  • 针对淡水鱼种类的自动识别问题,利用机器视觉技术,提出一种基于鱼体背部轮廓相关系数算法的鱼体种类识别方法。首先根据采集的鲫、草鱼、鳊、鲤四种淡水鱼图片,将图像处理方法应用到鱼体背部轮廓的提取上,并采用...
  • 本文提出了一种新的基于全局和局部加权符号压力(SPF)的主动轮廓模型(ACM),用于分割各种类型的图像。 首先,通过引入标准化的全局最小绝对差作为全局内部和外部区域拟合中心的系数,定义了一个新的全局加权SPF...
  • 图像的低频主要反映诸如纹理和轮廓细节之类的信息。 真实的人脸图像和重新捕获的图像之间的差异可以通过DCT系数的低频来描述。 DCT转换具有简单和低复杂度的特点,可以在普通的消费类移动设备上快速执行。 大量实验...
  • 然后对两种图像的低频系数采用加权与平均相结合的系数融合方案直接融合,对两种图像的带通方向子带系数采用伪随机傅里叶矩阵进行观测后将观测值 进行加权融合,再对融合后的带通方向子带观测值进行系数重构,...
  • 研制了作为飞机设备、具有实时数据分析能力的小型...系统设计的目的是在飞机上面和下面测绘气溶胶后向散射系数的两维轮廓图。此激光雷达是为表征气溶胶的光学特性以及其空间和时间的变易性而研制的大型系统的一部分。
  • 它通常通过对小波变换系数进行阈值化来获得结果,然后通过边缘跟踪对其进行跟踪。 通常,阈值会影响边缘定位的准确性,而额外的边缘跟踪会增加复杂性。 为了克服这些缺点,在本文中,我们提出了一种轮廓提取与边缘...
  • 系数作为参考点的轮廓特征。针对商标图像的尺度空间进行极值点检测,并对检测到的极值点进行特征描述,该特征描 述即为商标图像的 SIFT特征描述。最后,SIFT特征与轮廓特征进行特征融合,并将融合后的组合特征作为对...
  • 该系统在最细节尺度子空间采用轮廓波变换,而在其他子空间采用小波变换,以变换域子带系数的能量和标准偏差序列作为特征向量,Canberra距离为相似度标准。采用Brodatz纹理数据库中的109幅640×640的纹理图像为实验...
  • 然后,结合统计信息的符号压力函数和全局信息的符号压力函数(简称“双符号压力函数”),通过增加组合的权值系数,设计新的水平集演化方程;最后,将双符号压力函数引入到二值选择和高斯滤波正则化水平集模型中,...
  • 方法 该混合模型将 Chan-Vese(CV)模型和基于交叉熵的活动轮廓模型的外部能量约束项相结合,并赋予归一化调节比例系数。通过计算轮廓曲线内外区域像素灰度的方差和交叉熵,指导曲线逼近目标边缘。为了加速混合模型的...
  • 该方法首先对噪声图像进行Contourlet变换,得到不同尺度、不同方向上的子带系数,再根据子带系数的能量关系采用改进的Bayes Shrink自适应阈值对图像进行去噪处理。实验结果表明:这种方法提高了图像的PSNR值,增强了...
  • 针对红外图像对比度低、噪声大等特点,提出了一种基于人类视觉系统的亮度掩蔽和对比度掩蔽特性的非下采样轮廓波变换(NSCT)域红外图像增强算法,在NSCT 域中定义一种带参数的对比度,对高频系数计算其带参数的对比度...
  • 基于基于加权区域的压力(RBPF),我们提出了一种新的自适应主动轮廓模型(ACM),该模型用于SAR图像分割。 首先,将内部和外部区域的像素灰度的归一化类内方差用作内部和外部区域的灰度描述的新系数。 然后,构造...
  • 针对基于非下采样轮廓波变换(NSCT) 的图像融合算法存在计算复杂度较高的问题, 提出一种基于NSCT 和压缩感知的图像融合方法. 首先根据压缩感知理论的特点将其应用于图像融合领域, 并采用Min-TV 的方法重构图像; 然后...
  • 在无下采样Contourlet变换和小波变换的基础上,针对低、高频系数的特点,提出一种新的基于无下采样轮廓小波变换的图像融合算法。该算法对无下采样轮廓小波分解后的低频部分采用了选择与加权平均的融合规则进行融合,...
  • Snake模型分割图像时要求初始化轮廓线位于目标图像特征附近,且处理弱边界与深度凹陷区域的能力较弱,为此提出一种基于改进自仿射映射系统与参数活动轮廓的医学图像分割算法。首先,使用高斯滤波器对给定图像进行...
  • 根据系数重要性,对低频系数采用新的排列结构,采用SPIHT编码思想完成图像压缩。实验结果表明,提出的混合域图像编码方法是一种高效的图像压缩算法,其压缩效果明显优于SPIHT、WBCT等图像压缩方案(特别是低比特率下...
  • :为了提高图像融合的效率和质量,该文提出一种基于快速非下采样轮廓波变换(NSCT)和4 方向稀疏表示 的图像融合算法。该方法首先对源图像进行快速NSCT 分解,生成一系列低通和高通子带。对于低频子带,利用 自适应...
  • 算法中对图像非冗余轮廓系数各子带系数分布进行统计分析, 通过对变换系数的重新组合, 构造了有利于图像编码的空间方向树结构, 并统计验证了其零树特性, 采用分级树集合分裂和阈值量化达到图像质量可伸缩的嵌入式...
  • 针对这些缺陷, 在改进Heaviside函数的基础上, 引入全局高斯拟合项, 并且对局部高斯拟合项和全局高斯拟合项的权重系数均采用自适应的方法进行调整, 得到基于局部和全局高斯拟合的主动轮廓分割模型。改进模型不仅能...
  • S变换结合了窗口傅里叶变换和小波变换的优点,适合于解调具有非平稳特性的变形条纹。实际应用时,S变换处理的对象为离散条纹。计算S变换系数时,利用了信号的傅里叶谱的平移形式,即将相邻频域周期内的频谱信息...
  • 提出了两种在相位轮廓术中使用离散小波变换提取条纹相位的方法:单次分解法和多次分解法。前者用多分辨率分析的多孔算法计算变形条纹解析信号的离散小波变换, 寻找每一位置的小波系数在尺度方向上的模极大值点, 通过...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 175
精华内容 70
关键字:

轮廓系数图