如何在 Python 中使用 K-Means 聚类找到最佳聚类数

2023-12-07

我是聚类算法的新手。我有一个电影数据集,包含 200 多部电影和 100 多个用户。所有用户都至少评价了一部电影。值 1 表示好,0 表示坏,如果注释者别无选择,则值为空白。

我想根据相似的用户的评论对他们进行聚类,这样的想法是,将相似电影评为良好的用户也可能将同一聚类中没有任何用户评为良好的电影评为良好。我使用余弦相似度度量和 k 均值聚类。 csv文件如下所示:

  UserID         M1     M2       M3  ...............  M200                          
  user1          1      0                               0     
  user2          0      1        1                                      
  user3          1      1                               1                                                                         
    .
    .
    .
    .
 user100         1      0        1                                       

我面临的问题是我不知道如何找到该数据集的最佳簇数,然后绘制这些簇的图表。我用 k 均值对它们进行聚类,这没有问题,但我想知道该数据集最稳定或最佳的聚类数量。

我将不胜感激一些帮助..


聚类是无监督机器学习方法的一部分。与监督方法相反,在无监督方法中,没有一种直接的方法可以确定在特定数据集上训练的一组模型中的“最佳”模型。

尽管如此,还是有一些定量措施。其中大多数基于“某个簇中的点之间的相似度比不同簇中的点之间的相似度有多少?”的概念。我建议你看一下 scikit-learn 文档聚类评价。看看所有不需要的技术labels_true(即所有无监督技术)。 一旦您对某个聚类的“优点”有了定量测量,您通常会观察该量在改变聚类数量时如何演变;这种方法称为弯头法.

下面是一些代码,它使用 K-Means 算法处理从 2 到 30 的所有可能的 K 值,计算每个 K 值的各种分数,并将所有分数存储在 DataFrame 中。

seed_random = 1

fitted_kmeans = {}
labels_kmeans = {}
df_scores = []
k_values_to_try = np.arange(2, 31)
for n_clusters in k_values_to_try:
    
    #Perform clustering.
    kmeans = KMeans(n_clusters=n_clusters,
                    random_state=seed_random,
                    )
    labels_clusters = kmeans.fit_predict(X)
    
    #Insert fitted model and calculated cluster labels in dictionaries,
    #for further reference.
    fitted_kmeans[n_clusters] = kmeans
    labels_kmeans[n_clusters] = labels_clusters
    
    #Calculate various scores, and save them for further reference.
    silhouette = silhouette_score(X, labels_clusters)
    ch = calinski_harabasz_score(X, labels_clusters)
    db = davies_bouldin_score(X, labels_clusters)
    tmp_scores = {"n_clusters": n_clusters,
                  "silhouette_score": silhouette,
                  "calinski_harabasz_score": ch,
                  "davies_bouldin_score": db,
                  }
    df_scores.append(tmp_scores)

#Create a DataFrame of clustering scores, using `n_clusters` as index, for easier plotting.
df_scores = pd.DataFrame(df_scores)
df_scores.set_index("n_clusters", inplace=True)

此代码假设所有数字特征都在 DataFrame 中X。 所有集群性能指标都存储在df_scores数据框。 您可以通过绘制列来轻松使用肘法df_scores;例如,如果您想查看 Silhouette Score 的肘部图,您可以使用df_scores["silhouette_score"].plot().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Python 中使用 K-Means 聚类找到最佳聚类数 的相关文章

  • 如何使用 pyinstaller 包含文件?

    我也使用 tkinter 使用 python 3 7 编写了一个程序 由于我使用的是外部图片 因此当我将所有内容编译为一个 exe 时 我需要包含它们 我试过做 add data bg png files 但我仍然收到此错误 tkinter
  • JavaScript 相当于 Python 的参数化 string.format() 函数

    这是 Python 示例 gt gt gt Coordinates latitude longitude format latitude 37 24N longitude 115 81W Coordinates 37 24N 115 81W
  • TF map_fn 或 while_loop 用于不同形状的张量列表

    我想处理不同形状的张量序列 列表 并输出另一个张量列表 考虑每个时间戳上具有不同隐藏状态大小的 RNN 就像是 输入 tf ones 1 2 2 tf ones 2 2 3 tf ones 3 2 1 输出 tf zeros 1 2 4 t
  • 更新 Sqlalchemy 中的多个列

    我有一个在 Flask 上运行的应用程序 并使用 sqlalchemy 与数据库交互 我想用用户指定的值更新表的列 我正在使用的查询是 def update table value1 value2 value3 query update T
  • 在 macOS 中通过 Python 访问进程的压缩 RAM(顶部的 CMPRS)的方法?

    我试图弄清楚如何从 Python 访问任何给定进程占用的实际 RAM 量 我发现 psutil Process PID memory info rss 工作得很好 直到操作系统决定开始压缩某些进程的 RAM 然后 所有的 memory in
  • 当单词以“|”分隔时如何读取文件(埃因霍温)?

    在Python中 我有一个文件 其中的单词由 例如 city state zipcode 我的文件阅读器无法区分单词 另外 我希望我的文件阅读器从第 2 行而不是第 1 行开始 如何让我的文件阅读器分隔单词 import os import
  • 如何在 Python 3 中循环遍历集合,同时从集合中删除项目

    这是我的情况 我有一个list set 哪个并不重要 movieplayer我想调用的对象 preload 功能开启 该预加载函数可以立即返回 但希望将来返回一点 我想存储这个电影播放器 集合 表明它们尚未预加载 然后循环它们 调用prel
  • python是带有字符串的运算符行为[重复]

    这个问题在这里已经有答案了 我无法理解以下行为 我正在创建 2 个字符串 并使用 is 运算符来比较它 对于第一种情况 它的工作方式有所不同 对于第二种情况 它按预期工作 当我使用逗号或空格时 它显示是什么原因False与比较is当没有使用
  • PySide6.1 与 matplotlib 3.4 不兼容

    当我只安装PySide6时 GUI程序运行良好 但是一旦我安装了matplotlib及其依赖包 包括pyqt5 则GUI程序将无法运行并输出以下错误消息 This application failed to start because no
  • django-admin.py makemessages 不起作用

    我正在尝试翻译一个字符串 load i18n trans Well Hello there how are you to Hola amigo que tal 我的 settings py 文件有这样的内容 LOCALE PATHS os
  • 乘以行并按单元格值附加到数据框

    考虑以下数据框 df pd DataFrame X a b c d Y a b d e Z a b c d 1 2 1 3 df 我想在 列中附加数字大于 1 的行 并在该行中的数字减 1 df 最好应该 然后看起来像这样 或者它可能看起来
  • Python 惰性迭代器

    我试图了解迭代器表达式如何以及何时被求值 以下似乎是一个懒惰的表达 g i for i in range 1000 if i 3 i 2 然而 这个在构造上失败了 g line strip for line in open xxx r if
  • PyTorch DataLoader 对并行运行的批次使用相同的随机种子

    有一个bug https tanelp github io posts a bug that plagues thousands of open source ml projects 在 PyTorch Numpy 中 当并行加载批次时Da
  • 使用 numpy 在 python 中执行最大方差旋转

    我正在研究矩阵的主成分分析 我已经找到了如下所示的组件矩阵 A np array 0 73465832 0 24819766 0 32045055 0 3728976 0 58628043 0 63433607 0 72617152 0 5
  • 无法在 python 3.8 上将带有 webapp 的 python 部署到 azure

    我正在尝试使用部署一个测试项目Flask使用以下方法将框架迁移到 Azure 云中Azure CLI https learn microsoft com en us azure app service containers quicksta
  • 更改 Python Cmd 模块处理自动完成的方式

    我有一个 Cmd 控制台 设置为自动完成 Magic the Gathering 收藏管理系统的卡牌名称 它使用文本参数在数据库中查询卡片 并使用结果自动完成 建议卡片 然而 这些卡片名称有多个单词 Cmd 会从last到行尾的空间 例如
  • 在 Django shell 会话期间获取 SQL 查询计数

    有没有办法打印 Django ORM 在 Django shell 会话期间执行的原始 SQL 查询的数量 Django 调试工具栏已经提供了此类信息 例如 5 QUERIES in 5 83MS但如何从 shell 中获取它并不明显 您可
  • python sklearn中的fit方法

    我问自己关于 sklearn 中拟合方法的各种问题 问题1 当我这样做时 from sklearn decomposition import TruncatedSVD model TruncatedSVD svd 1 model fit X
  • 长/宽数据到宽/长

    我有一个数据框 如下所示 import pandas as pd d decil 1 decil 1 decil 2 decil 2 decil 3 decil 3 decil kommune AA BB AA BB AA BB 2010
  • 缓存 Flask-登录 user_loader

    我有这个 login manager user loader def load user id None return User query get id 在我引入 Flask Principal 之前它运行得很好 identity loa

随机推荐

  • Rails 不适用于新项目。显示错误“类 Cipher 的超类不匹配 (TypeError)”

    我的 Rails 和 ruby 目前已更新 rails v gt 导轨 5 0 1 ruby v gt ruby 2 4 0p0 2016 12 24 修订版 57164 x86 64 linux 创建了一个新的 Rails 应用程序 Ra
  • 从 Woocommerce 中的优惠券使用中排除具有 2 个特定属性术语的变体

    如果客户的购物车中有任何具有以下属性条款的特定产品变体 我需要防止使用优惠券 attribute pa style gt swirly attribute pa style gt circle 我查看了适用于限制特定产品和特定类别的 Woo
  • 特定时间码的 ffmpeg vfilter

    我想向某些视频添加水印 但我只希望水印出现在视频中的某些时间码 例如开始 中间 结束 并且仅出现几秒钟 我已经让 ffmpeg 按照此处的说明进行水印 但我不知道如何在不同的时间码打开 关闭水印 这是我用来添加水印的命令 ffmpeg i
  • 在 Powershell 中读取 Excel 工作表

    下面的脚本读取 Excel 文档的工作表名称 我该如何改进它 以便它可以提取每个工作表中 B 列的所有内容 从第 5 行开始 因此第 1 4 行被忽略 并创建一个对象 例如 如果工作表 1 中的 B 列 称为伦敦 具有以下值 Marleyb
  • Java 垃圾收集如何与循环引用一起使用?

    根据我的理解 如果没有其他东西 指向 某个对象 Java 中的垃圾收集会清理一些对象 我的问题是 如果我们有这样的事情会发生什么 class Node public object value public Node next public
  • 从 Eclipse RCP 应用程序中删除“文件、编辑等”菜单

    我想从我的 RCP 应用程序中删除 文件 编辑 源 重构 等菜单 我可以用吗hideActionSet 或者我应该做什么 这是正确的 在你的应用程序工作台窗口顾问 覆盖发布窗口打开 棘手的一点通常是找出要删除的操作集的名称 但您可以使用旧的
  • 正则表达式空白字符会导致注入吗?

    如果我想验证a的输入
  • EF 5 AddOrUpdate 重复数据

    这是种子方法中的代码 var city new City Name A var nh new List
  • 选择日期后,显示错误的月份[重复]

    这个问题在这里已经有答案了 我正在使用日期选择器 但每当我选择任何日期时 它都会显示 1 个月 例如 如果我选择 12 12 2016 它将显示在文本框中 12 11 2016 如果我选择 3 1 2017 它将显示 3 0 2017 这是
  • 我无法在任何地方访问我的数组对象,如何快速访问它们?

    如何在另一个函数中访问我的数组对象 即来自 arr 和电子邮件的数组对象 到目前为止 当我调用 auth auth 函数时 我只能访问 else 语句内的数组对象 我想知道如何才能做到这一点 let store CNContactStore
  • HttpListener - 如何将 WebException HTTP 304“未修改”错误发送回浏览器?

    如果我使用 HttpListener 如何将 WebException 304 错误模拟回浏览器 也就是说 我收到了对 HttpListener 的请求 然后获得了 HttpListenerContext 那么从现在开始 我将如何模仿 安排
  • 与 JPA 的数据库独立字符串比较

    我正在使用 JPA Hibernate 作为提供者 和底层 MySQL 数据库 我有一张表 其中包含德国所有街道的名称 每个街道名称都有一个唯一的编号 对于一项任务 我必须找出姓名的编号 为此 我编写了一个 JPQL 查询 如下所示 SEL
  • 使用 R 绘图在 R 中绘制点图

    生成具有这样两个因素的点图的最佳方法是什么 最好使用标准 R 图 而不是 ggplot 并从 2x2 数据框生成 水平线应该是手段 我尝试过克利夫兰点图 但无法弄清楚如何获取两个数据系列并让点抖动 下面的代码应该可以解决这个问题 set s
  • 为 Firebase 云消息传递 PHP 生成 OAUTH 令牌

    我有一个 PHP 页面 我用它来向我开发的移动应用程序的用户发送通知 该页面直到上个月都工作正常 然后它给了我这个错误 multicast id 5174063503598899354 成功 0 失败 1 canonical ids 0 结
  • Kivy:已弃用功能的替代方案

    我正在尝试适应这个code但我仍然是第一步 因为我不理解大多数称为 like like 的功能可选数据项 Adapter 列表适配器 or 可选视图 当我在 kivy 网站上查找它们时 我发现它们被列为已弃用 我在 Kivy 网站上找不到这
  • 如何为每个商店对象提供自己的库存数组列表?

    发现这个很难 基本上我有三个类 Store 类 Stock 类 然后是 GUI 类 创建商店时 我希望它有自己的 arrayList 以便我可以向其中添加多个库存对象 通过 GUI 完成 我尝试只包含所需的基本代码 已删除 getter 方
  • 如何对元组数组进行排序?

    如何实现 或创建 元组列表的数组排序 以下内容是从我的代码中收集到的 本质上我创建了一个元组数组 并通过 for 循环填充它 之后我尝试对其进行排序 var myStringArray String Int nil myStringArra
  • 内置 python 函数的时间/空间复杂度

    split strip open 内置 python 函数 的时间 空间复杂度是多少 有谁知道我可以在哪里查找这些函数的时间 空间复杂度 确切的答案将取决于输入到函数中的属性 最简单的找出方法可能是检查这些函数的源代码 python 源代码
  • 如何使用 ffmpeg 在大型复杂过滤器上 concat 之前应用 1:1 SAR

    我使用 ffmpeg 以类似于以下的方式连接视频 我的输入遇到了一个奇怪的错误 Parsed concat 0 000000002a05bb80 Input link in10 v0 parameters size 1280x720 SAR
  • 如何在 Python 中使用 K-Means 聚类找到最佳聚类数

    我是聚类算法的新手 我有一个电影数据集 包含 200 多部电影和 100 多个用户 所有用户都至少评价了一部电影 值 1 表示好 0 表示坏 如果注释者别无选择 则值为空白 我想根据相似的用户的评论对他们进行聚类 这样的想法是 将相似电影评