我们可以通过对一系列曲目进行聚类来创建歌曲的自动播放列表,我们可以展示如何自动创建相似歌曲的子组。通过我们现有的歌曲知识,我们能够验证该聚类练习的结果。

但是,如果我们对数据没有这种先验知识怎么办?如果数据甚至都没有被标记怎么办(在许多实际的聚类案例中就是这种情况)?即使是这样,如果这些标签最初对我们没有意义,该怎么办?有很多我从未听说过的艺术家,如果我们要对数千首曲目进行分组,那么手动验证每个集群显然是不切实际的。在这些情况下,我们需要某种数学方法来衡量聚类的'成功'程度。

为了探索如何做到这一点,我们再次转向Spotify的API。假设我们从四个完全不同的播放列表中选取歌曲:Rap UK

Smooth Jazz

Classical Essentials

Essential K-Pop

如果我们将它们合并到一个数据集中,则无监督的机器学习算法应该能够将其歌曲分组为四个群集,这些群集在某种程度上类似于原始的四个播放列表。

在开始之前,我们确实可能需要检查一下我们的假设,即来自这些不同播放列表的歌曲确实'与众不同'。当然,在单个图表上同时可视化两个以上的特征是一项挑战。但是,如果我们绘制所有功能的散布矩阵,并按播放列表进行颜色编码,则可以看到有很多度量组合可以证明每种流派的独特特征。

我们在上中看到,在Scikit-Learn中运行聚类算法非常简单:

#We scale the data to ensure that#feature units don't impact distancesfrom sklearn.preprocessing import StandardScalersclaer = StandardScaler()X_scaled = scaler.fit_transform(X)#This scaled data can then be fed into the HAC algorithmfrom sklearn.cluster import AgglomerativeClustering#We can tell it how many clusters we're aiming foragg_clust = AgglomerativeClustering(n_clusters=4)assigned_clusters = agg_clust.fit_predict(X_scaled)

我们还看到,HAC具有三个不同的'链接标准',即该算法将群集逐渐连接在一起的方法:ward(默认):选择两个聚类,以所有聚类中的方差增加最小的方式合并。通常,这会导致大小相当相等的群集。complete(或最大链接):合并两个点之间最大距离最小的两个聚类。·average:合并所有点之间平均距离最小的两个聚类。

让我们看看这三个链接标准如何处理类型播放列表数据集。我们用矩阵表示结果,显示每个播放列表的歌曲在每个群集中所占的百分比(群集被任意命名为' A',' B',' C'和' D')。

当然,如果聚类是完美的,我们希望矩阵的每一行和每一列都恰好包含一个100%的条目(当然,它不需要成对角线,因为聚类名称的分配是任意的)。

默认的'向后'链接试图最小化群集中的方差,尽管这四个群集都有一些泄漏,但在所有四种类型中都表现出色。

'完全'链接显然效果不佳。它已将许多数据集放入群集A。群集C由一首说唱歌曲组成。

'平均'链接与'完全'链接具有类似的问题。许多数据点已放置在一个群集中,其中两个群集由一首歌曲组成。

值得一提的是,还有另一种常见的聚类类型,即K-Means,其工作原理略有不同。HAC通过将它们合并在一起来迭代地减少聚类的数量,而K-Means聚类保持固定数量的聚类(名义上的k),但是迭代地更改每个聚类的成员。

每个群集的'中心'由带有黑色' +'号的'大'标记表示。所有点都分配给它们最接近中心的聚类。在此分配步骤之后,将重新计算群集中心以包括新成员,然后发生另一个重新分配步骤。如果在重新分配步骤中没有点更改聚类,则算法结束(动画:)。

K-Means很容易在Python中实现:#We scale the data to ensure that#feature units don't impact distancesfrom sklearn.preprocessing import StandardScalersclaer = StandardScaler()X_scaled = scaler.fit_transform(X)#This scaled data can then be fed into the K-Means alorithmfrom sklearn.cluster import KMeans#We can tell it how many clusters we're aiming forkm_clust = KMeans(n_clusters=4)assigned_clusters = km_clust.fit_predict(X_scaled)

如果将K-Means聚类应用于播放列表数据集,则会得到以下信息:

与使用'ward'链接的HAC算法一样,K-Means聚类在大多数算法中都做得很好,一些爵士乐和说唱歌曲对K-Pop来说是'错误的'。

尽管这些矩阵可以很好地'盯住'我们的结果,但它们在数学上还不够严格。让我们考虑一些指标,这些指标实际上可以帮助我们为集群质量分配一个数字。

调整后的Rand Index(兰德指数)

该是对经典兰德指数的变化,并试图表达什么群集分配比例是'正确'。通过考虑所有样本对,并根据预测的真实聚类对分配在预测的相同或不同聚类中的对进行计数,并针对随机机会进行调整,计算出两个不同聚类之间的相似性度量。

可以使用Scikit-Learn评估此(以及我们将考虑的其他指标)。

from sklearn import metricsmetrics.adjusted_rand_score(predicted_labels, actual)

调整后的兰德指数限制在-1和1之间。接近1表示好,而接近-1表示差。

我们看到K均值和Ward Linkage得分很高。基于我们先前观察到的矩阵,我们期望得到这一结果。

Fowlkes Mallows Score

该是相似的,在尽可能多的,它会告诉你哪个集群分配是'正确'的程度。特别是,它计算精度和召回率之间的几何平均值。它的范围是0到1,值越高越好。metrics.fowlkes_mallows_score(predicted_labels,actual)

我们的排名与调整后的兰德指数相似,这是我们期望的,因为它们是尝试回答同一问题的两种方法。

值得注意的是,我们需要了解原始标签才能计算这些指标。鉴于处理无标签数据是无监督学习的主要用例之一,因此我们需要一些其他指标来评估聚类结果,而无需引用'真实'标签。

假设我们从三个单独的聚类分析中得到以下结果。

显然,我们可以使集群更加'紧密'。是否可以通过某种方式将这种'紧度'归因于数字?

轮廓分数

该试图描述一个数据点的相似程度在其集群的其他数据点,相对于数据点并不在其集群(这是汇聚了所有数据点来获得总体集群分数)。换句话说,它考虑了集群在空间中的'区别度'-实际上人们可以使用任何'距离'度量来计算分数。

它的范围是-1和1。接近-1表示群集不正确,而接近+1则表示每个群集都非常密集。

metrics.silhouette_score(scaled_feature_data,cluster_labels)

我们看到,所有聚类都没有超高的轮廓分数。有趣的是,我们看到平均链接集群的得分最高。但是请记住,该算法产生了两个群集,每个群集仅包含一个数据点,这在现实情况下不太可能是理想的结果(这是一个教训,您通常不能依靠单个指标来做出决策算法的质量!)

Calinski Harabaz指数

所述Calinski Harabaz指数是相对于点的数据点的方差相比,在其它簇的点的比率,对所述方差中的集群。由于我们希望第一部分较高,而第二部分较低,因此需要较高的CH指数。与我们看到的其他指标不同,此分数没有界限。metrics.calinski_harabasz_score(scaled_feature_data,cluster_labels)

在这里,我们看到我们的K均值和Ward Linkage算法得分很高。完全和平均链接算法因具有一个或两个较大的聚类而受到惩罚,这将具有较高水平的内部方差。

kmeans及模型评估指标_如何评估聚类模型?兰德指数、轮廓系数、Calinski Harabaz指数...相关推荐

  1. auuc 评估指标_广告中增益模型理解

    由于工作的需要,广告增益越来越进入到我们的视野当中,收益永远是广告主评价广告投放的重要标准,但是这种收益也慢慢被认为有两种. 一种是广告投放所带来的直接收益,比如用户A广告投放后的cvr为3%,用户B ...

  2. r型聚类典型指标_六种GAN评估指标的综合评估实验,迈向定量评估GAN的重要一步...

    论文:An empirical study on evaluation metrics of generative adversarial networks 论文链接:https://arxiv.or ...

  3. 六种GAN评估指标的综合评估实验,迈向定量评估GAN的重要一步

    作者:Qiantong Xu.Gao Huang.Yang Yuan.Chuan Guo.Yu Sun.Felix Wu.Kilian Weinberger 生成对抗网络的评估目前仍以定性评估和一些可 ...

  4. K-means聚类原理实现 优缺点 轮廓系数 调优Canopy算法

    Kmeans聚类是我最早接触的,也是最简单的机器学习聚类算法了.它是一种无监督学习算法. 原理: 还是先简单过一下Kmeans聚类的过程吧.不像模像样地罗列个一二三四,直接口述一下过程就好:比如我们要 ...

  5. kmeans及模型评估指标_聚类分析的过程和两个常用的聚类算法

    聚类分析过程 一般聚类分析的数据源是需要相对干净的,即需要做统一的特征清洗.特征变换过程,即空值.非法值.异常值.类别变量等的处理.主要过程如下: 数据采集:我们可以认为是统一的ETL过程,这里涉及埋 ...

  6. kmeans及模型评估指标_机器学习模型评估指标总结

    常用机器学习算法包括分类.回归.聚类等几大类型,以下针对不同模型总结其评估指标 一.分类模型 常见的分类模型包括:逻辑回归.决策树.朴素贝叶斯.SVM.神经网络等,模型评估指标包括以下几种: (1)二 ...

  7. kmeans及模型评估指标_基于K-MEANS聚类模型和RFM价值分类模型的订单交易用户价值分析...

    用户数据化运营是互联网运营工作必备工作之一,且产品的生存必须有用户.而会员价价值度是用来评估用户的价值情况,是区分会员价值的重要性模型和参考依据,也是衡量不同营销效果的关键指标之一,我们可以通过复购率 ...

  8. kmeans及模型评估指标_模型评估常用指标

    一. ROC曲线和AUC值 在逻辑回归.随机森林.GBDT.XGBoost这些模型中,模型训练完成之后,每个样本都会获得对应的两个概率值,一个是样本为正样本的概率,一个是样本为负样本的概率.把每个样本 ...

  9. kmeans及模型评估指标_使用sklearn评估器构建聚类模型

    原标题:使用sklearn评估器构建聚类模型 作者:徐瑶佳 来源:人工智能学习圈 工作内容: 聚类算法是在没有给定划分类别的情况下,根据数据样本的相似度进行样本分组的一种算法.聚类算法过程是无监督的, ...

最新文章

  1. pytorch2——Pytorch基础数据结构——张量(深度之眼)
  2. yolov5 tensorrt
  3. ElementUI中el-form实现表单重置以及将方法抽出为全局方法
  4. 如何提升代码可读性?阿里发布16条设计规约
  5. JS 中判断一个对象是否为数组对象?
  6. carbondata与mysql_Apache CarbonData 1.4.0 中文文档
  7. Redis百万级别数据迁移
  8. php编码函数 base58,php – Base58编码Peercoin公钥的步骤
  9. c语言定义一个strcmp函数,定义一个strcmp函数实现两个字符串比较,函数原型为int strcmp(char * p1,...
  10. python基本数据类型——set
  11. apk 反编译_安卓apk反编译、重新打包、签名全过程
  12. BIM族库下载——Revit栏杆族库
  13. 学习《机器学习100天》第27天 什么是神经网络? | 深度学习,第1章
  14. 大学生就业观念的调查与分析
  15. speedoffice(Word)文字怎么添加下划线
  16. 【ELK解决方案】ELK集群+RabbitMQ部署方案以及快速开发RabbitMQ生产者与消费者基础服务...
  17. 如何用计算机做样本抽样,抽样设计和样本抽选.doc
  18. 数据库考研信息管理系统
  19. “35岁,我退休了”:关于中年危机,这是最靠谱的回答
  20. c语言循环教案,C语言教学(七-上)for循环

热门文章

  1. 关于docker 意外停止,重新快速启动措施
  2. 别再说你不会!java嵌入式开发教程
  3. java关联宠物商店项目_Java实现宠物商店管理
  4. 要嫁就嫁个37度男人(转载)
  5. 计算机桌面任务栏怎样显示输入法,电脑任务栏上不显示切换输入法图标怎么办...
  6. 【Relax人生法则之躺平方法论】如何优雅地躺平?那些看似无足轻重,实则细思极恐的毒鸡汤。
  7. Cocos Creator 新手引导制作
  8. 模拟电子技术基础笔记(4)——晶体三极管
  9. 研发漫画之二:救火还需纵火犯
  10. C语言学习完后,C++与Java我应该怎么选择