K-Means和轮廓系数

这篇具有很好参考价值的文章主要介绍了K-Means和轮廓系数。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

K-Means和轮廓系数

K-means(K均值)是机器学习中一种常见的无监督算法,它能够将未知标签的数据,根据它们的特征分成不同组,每一组数据又称为“簇”,每一簇的中心点称为“质心”。其基本原理过程如下:
1、任意选择K个初始质心(可以不是样本点),为每个样本点找到与其距离最近的质心,并将样本点与质心归为同一簇,从而生成K个簇;
2、当所有样本点都被分完,对于每一个簇,重新计算新的质心(同一簇中所有点的平均坐标值);
3、不断迭代,直到不会质心的位置不发生改变。
因此该算法最核心的参数是K,那么K该如何确定呢?
这里可以引入轮廓系数S:
K-Means和轮廓系数
计算公式如上图所示,其中,a表示样本点与同一簇中所有其他点的平均距离,即样本点与同一簇中其他点的相似度;b表示样本点与下一个最近簇中所有点的平均距离,即样本点与下一个最近簇中其他点的相似度。
K-Means追求的是对于每个簇而言,其簇内差异小,而簇外差异大,轮廓系数S正是描述簇内外差异的关键指标。由公式可知,S取值范围为(-1, 1),当S越接近于1,则聚类效果越好,越接近-1,聚类效果越差。

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
#make_blobs函数是为聚类产生数据集,n_samples表示样本个数,n_features:表示数据的维度,默认为2
#centers:产生数据的中心点,默认值为3,cluster_std为数据集的标准差,浮点数或者浮点数列,默认值为1.0
x, y = make_blobs(n_samples=500,n_features=2,centers=4,random_state=1)

# 绘图,查看数据样本的分布
fig, ax = plt.subplots(1)
fig.set_size_inches(8,6)
ax.scatter(x[:, 0], x[:, 1], marker='o', s=8)
plt.show()

K-Means和轮廓系数
数据集一共由两列特征组成,即横轴和纵轴。实际应用中,数据往往会有许多列特征,一般需要先通过降维算法(如PCA)将多维特征压缩至二维或者三维,才能可视化。观察上图,乍一看,数据应该能被分成4簇,但有的人觉得分成2簇(左下1簇,右上1簇),或者分成3簇(最下面1簇,中间1簇,右上1簇)也是合理的。

那么到底能分成几类呢?这时就需要通过轮廓系数来帮我们确定。

# 给定K值(n_clusters)的范围
n_clusters = range(2, 5)

# 循环绘图
for n in n_clusters:
    # 创建绘图区域
    fig, ax = plt.subplots(1)
    fig.set_size_inches(8, 6)
    
    # 实例化
    cluster = KMeans(n_clusters=n,random_state=10).fit(x)
    # 访问labels_属性,获得聚类结果
    y_pred = cluster.labels_
    # 访问cluster_centers_属性,获得质心坐标
    centroid = cluster.cluster_centers_
    # 计算平均轮廓系数
    silhouette_avg = silhouette_score(x, y_pred)
    
    # 绘制聚类结果
    # y_pred==i会返回布尔数组,从而获得那些被分为同一类的点
    for i in range(n):
        ax.scatter(x[y_pred==i, 0],x[y_pred==i, 1],marker='o',s=8,alpha=0.7)   
    # 绘制质心
    ax.scatter(centroid[:, 0],centroid[:, 1],marker='x',s=30,c='k')   
    # 设置图表标题
    ax.set_title('result of KMeans(n_clusters={})'.format(n))   
    # 设置x轴标题
    ax.set_xlabel('feature_1')    
    # 设置y轴标题
    ax.set_ylabel('feature_2')   
    # 设置总标题,用来描述轮廓系数的值
    plt.suptitle('The average silhouette value is {:.4f}.'.format(silhouette_avg),
                 fontsize=14, fontweight='bold')
    plt.show()

K-Means和轮廓系数
K-Means和轮廓系数
K-Means和轮廓系数
执行代码后,系统帮我们自动生成了3张图,并告诉我们每张图中,K的取值和平均轮廓系数值。可以看到K=2时,S=0.7050;K=3,S=0.5882;K=4,S=0.6505。当数据集被分为4簇时,轮廓系数比为3簇的高,因此我们舍弃K=3。然而当K=2时,得分竟然是最高的,这与我们最初创建数据集时给的真实分类centers=4是不一致的!
这恰恰说明了:

① 轮廓系数确实能帮助我们确定K的取值,并且分数越接近1,越能代表更好的聚类效果;

② 分数最高的K值,并不一定是正确的聚类结果(虽然我们可能并不知道真实的分类);

③ 实际应用中,需要紧密结合轮廓系数与业务需求,才能得到恰当的结果;文章来源地址https://www.toymoban.com/news/detail-424348.html

到了这里,关于K-Means和轮廓系数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • R语言APRIORI关联规则、K-MEANS均值聚类分析中药专利复方治疗用药规律网络可视化...

    应用关联规则、聚类方法等数据挖掘技术分析治疗的中药专利复方组方配伍规律 ( 点击文末“阅读原文”获取完整 代码数据 )。 方法检索治疗中药专利复方,排除外用中药及中西药物合用的复方。最近我们被要求撰写关于用药规律的研究报告,包括一些图形和统计输出。

    2024年02月11日
    浏览(34)
  • MATLAB实现k-means算法(k-均值)对无标签数据进行聚类,并通过肘部法则确定聚类类别

    应一个小伙伴的要求介绍了一下K均值聚类算法。本人也不是很专业,这是之前自学的,如果有错,大家可以提出来,共同进步嘛。   聚类属于非监督学习,K均值聚类是最基础常用的聚类算法。它的基本思想是,通过迭代寻找K个簇(Cluster)的一种划分方案,使得聚类结果

    2023年04月26日
    浏览(48)
  • 【人工智能】— 无监督学习、K-means聚类(K-means clustering)、K-means损失函数,目标函数

    无监督学习是指在没有标签的数据上进行学习,即没有监督信号的指导下进行模型训练。在无监督学习中,我们主要关注从无标签数据中学习出数据的低维结构和隐藏的模式。 通过无标签数据,我们可以预测以下内容: 低维结构:通过无监督学习算法如主成分分析(PCA),

    2024年02月10日
    浏览(41)
  • K-means聚类算法的三种改进(K-means++,ISODATA,Kernel K-means)介绍与对比

      目录  一、概述 二、经典K-means算法 三、K-means++算法 四、ISODATA算法 六、数据集测试       在本篇文章中将对四种聚类算法(K-means,K-means++,ISODATA和Kernel K-means)进行详细介绍,并利用数据集来真实地反映这四种算法之间的区别。       首先需要明确的是上述四种算法都属

    2024年01月23日
    浏览(47)
  • 四种确定K-means最佳聚类个数的方法(K-means++)——附代码

    目录 摘要: 1.K-means算法 2.Calinski-Harabasz Criterion(卡林斯基-哈拉巴斯指标,CH值) 3.Davies-Bouldin Criterion(戴维斯-博尔丁指标,DB值) 4.Gap Value(Gap值) 5.Silhouette Coefficient(轮廓系数) 6.基于Matlab的K-means聚类及最佳聚类数选取结果: 7.本文Matlab代码实现: Kmeans算法中,K值所决

    2024年01月17日
    浏览(46)
  • K-means

    K-meas算法属于无监督学习算法,适用于没有标签的数据集,属于聚类算法。聚类就是把数据对象划分为多个组或簇的过程,使得簇内对象相似度很高,簇间相似度很低。K-means属于聚类算法的一种,除了K-means,还有K-中心点算法,基于层次的方法等等。 算法思想如下: 给定一

    2024年02月12日
    浏览(26)
  • 【K-means聚类】

    聚类 定义:聚类是一种无监督的机器学习方法,它的主要目的是将数据集中的对象(或点)按照它们之间的相似性分组或聚类。这些聚类(或称为簇)中的对象在某种度量下是相似的,而不同聚类中的对象是不同的。简言之,聚类是将相似的对象归为一类,不同的对象归为不

    2024年02月22日
    浏览(42)
  • K-means算法

    K-means算法是一种聚类算法,所谓聚类,即根据相似性原则,将具有较高相似度的数据对象划分至同一类簇,将具有较高相异度的数据对象划分至不同类簇。聚类与分类最大的区别在于,聚类过程为无监督过程,即待处理数据对象没有任何先验知识,而分类过程为有监督过程,

    2024年02月09日
    浏览(37)
  • 【聚类】K-Means聚类

    cluster:簇 这边暂时没有时间具体介绍kmeans聚类的原理。简单来说,就是首先初始化k个簇心;然后计算所有点到簇心的欧式距离,对一个点来说,距离最短就属于那个簇;然后更新不同簇的簇心(簇内 所有点的平均值 ,也就是簇内点的 重心 );循环往复,直至 簇心不变 或

    2024年02月09日
    浏览(34)
  • 机器学习(八) — K-means

    1 definition randomly initialize K cluster centroids μ 1 , μ 2 , ⋯ mu_1, mu_2, cdots μ 1 ​ , μ 2 ​ , ⋯ repeat: assign each point to its closest centroid μ mu μ recompute the centroids(average of the closest point) 2 optimazation objective c ( i ) c^{(i)} c ( i ) = index of cluster to which example x ( i ) x^{(i)} x ( i ) is currently assign

    2024年01月21日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包