原创文章,转载请注明
matlab中的kmeans工具使用kmeans算法对数据进行分类,帮助文档举的第二个例子的结尾处讲到: You can determine how well separated the clusters are by passing idx to silhouette.
那么这个silhouette函数究竟有什么含义。
silhouette的中文意思指的是轮廓、剪影,正如上面那句英文所讲,它的计算结果可以表征分类结果的好坏。
每个点的silhouette值都表示相比于其他簇,这个点与本簇内的其他点的相似程度。对于第i个点,其silhouette值Si的计算公式如下:
Si=(bi-ai)/max(ai,bi)
式中的ai指的是第i点与同簇中的其他点的距离平均值,bi指的是第i点与不同簇中的其他点的距离平均值的最小值,举个例子,数据集X被分为了k类,第i个点属于第1类,分别求出第i个点距离其他k-1个簇的点的距离平均值为bi1,bi2,bi3……bik-1,bi就是这k-1个值中的最小值。
从Si的定义就可以看出其代表的含义,bi越大,ai越小,Si越大,也就表示第i个点与同簇内的点相似程度越高,与不同簇的点相异程度越高,分类结果越好。
如果大部分的点Si值较高,那么分类策略就是合适的;如果大部分点Si值较小或者是负值,分类效果不好,可能是由于簇太多或太少引起的。
matlab中的kmeans工具使用kmeans算法对数据进行分类,帮助文档举的第二个例子的结尾处讲到: You can determine how well separated the clusters are by passing idx to silhouette.
那么这个silhouette函数究竟有什么含义。
silhouette的中文意思指的是轮廓、剪影,正如上面那句英文所讲,它的计算结果可以表征分类结果的好坏。
每个点的silhouette值都表示相比于其他簇,这个点与本簇内的其他点的相似程度。对于第i个点,其silhouette值Si的计算公式如下:
Si=(bi-ai)/max(ai,bi)
式中的ai指的是第i点与同簇中的其他点的距离平均值,bi指的是第i点与不同簇中的其他点的距离平均值的最小值,举个例子,数据集X被分为了k类,第i个点属于第1类,分别求出第i个点距离其他k-1个簇的点的距离平均值为bi1,bi2,bi3……bik-1,bi就是这k-1个值中的最小值。
从Si的定义就可以看出其代表的含义,bi越大,ai越小,Si越大,也就表示第i个点与同簇内的点相似程度越高,与不同簇的点相异程度越高,分类结果越好。
如果大部分的点Si值较高,那么分类策略就是合适的;如果大部分点Si值较小或者是负值,分类效果不好,可能是由于簇太多或太少引起的。
