使用 UMAP 和 HDBScan 进行集群

2024-01-26

我有大量的文本数据,大约有 5000 人输入。我使用 Doc2vec 为每个人分配了一个向量,使用 UMAP 缩减为二维,并使用 HDBSCAN 突出显示其中包含的组。目的是突出具有相似主题相似性的组。这导致了如下所示的散点图。

这看起来可以接受。然而,当我在 Bokeh 中使用相同的数据(为了创建交互式图表)时,输出看起来非常不同。尽管使用与以前相同的坐标和组,但以前看到的清晰分组消失了。相反,图表一片混乱,颜色全部混合在一起。

当应用过滤器来选择随机组时,这些点在整个图中分布得相当均匀,并且无论如何都不像一个有凝聚力的“组”。例如,第 41 组在图的每个角附近都有点。

使用以下代码将文档向量简化为 X、Y 坐标:

clusterable_embedding = umap.UMAP(
n_neighbors=150,
min_dist=0,
n_components=2,
random_state=42,
repulsion_strength=1.0,).fit_transform(model.dv.vectors)

并使用此代码分配组:

labels = hdbscan.HDBSCAN(
min_samples=1,
min_cluster_size=10,
).fit_predict(clusterable_embedding)

使用以下代码生成的具有清晰组的 Matplotlib 图:

clustered = (labels >= 0)
from matplotlib.pyplot import figure
figure(figsize=(10, 10), dpi=80)
plt.scatter(clusterable_embedding[~clustered, 0],
            clusterable_embedding[~clustered, 1],
            c=(0.5, 0.5, 0.5),
            s=10,
            alpha=0.5)
plt.scatter(clusterable_embedding[clustered, 0],
            clusterable_embedding[clustered, 1],
            c=(labels[clustered]),
            s=20,
            cmap='Spectral');

然后将其插入到 Pandas Dataframe 中:

for item in list(clusterable_embedding[clustered]):
    x = item[0]
    y = item[1]
    group = labels[int(len(all_data))]
    topic = topiclist(group)
    all_data.loc[len(all_data)] = [x, y, group, topic] 

并创建了散景图:

datasource = ColumnDataSource(all_data)

yfig = figure(
    plot_width=600,
    plot_height=600,
    tools=('pan, wheel_zoom, reset')
)

yfig.add_tools(HoverTool(tooltips="""
<div>
    <div>
        <span style='font-size: 16px; color: #224499'>Group: </span>
        <span style='font-size: 18px'>@group</span>
    </div>
    <div>
        <span style='font-size: 16px; color: #224499'>Topic: </span>
        <span style='font-size: 18px'>@topic</span>
    </div>
</div>
"""))

color_mapper = LinearColorMapper(palette='Magma256', low=min(groups), high=max(groups))
    
yfig.circle(
    'x',
    'y',
    source=datasource,
    color={'field': 'group', 'transform': color_mapper},
    line_alpha=0.6,
    fill_alpha=0.6,
    size=4
)
show(yfig)

我在这里做错了什么吗?或者这是技术或数据的限制?初始图中的彩色组是否真的按其组进行分组,如果是这样,为什么散景图中的彩色组没有按组分组?

任何帮助都将不胜感激。


None

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

使用 UMAP 和 HDBScan 进行集群 的相关文章

随机推荐

  • Koa 发送响应后运行代码

    为了优化响应延迟 需要执行以下工作after响应已发送回客户端 但是 我似乎可以在发送响应后运行代码的唯一方法是使用setTimeout 有没有更好的办法 也许在发送响应后在某个地方插入代码 或者在某个地方异步运行代码 这是一些代码 koa
  • 实体框架 4:继承和关联

    我确实从提供跟踪的基类派生出我的实体 Since User源自于TrackableBase and TrackableBase与 关联User 我收到错误 无法确定相关操作的有效顺序 由于外键约束 模型 可能存在依赖关系 要求或存储生成的值
  • OData分页与skip和top - 如何知道没有更多数据?

    我有 OData 源 它实现了 skip and top参数 返回的实体数量为 x 假设我只有 250 个实体 然后我尝试像这样进行分页 https example com EntitySet top 30 skip 220 如果我的跳过超
  • 使用 jaxb 验证复杂对象中的嵌套对象

    我有一个像这样的对象的 xml 表示 OrderList has list of 订单 每个订单都有一个商品列表 我想验证我的商品 如果无效 我想将它们从订单中删除 如果所有商品都无效 那么我会从订单列表中删除该订单 我已经能够验证订单列表
  • 将包含 JSON 对象数组的 Spark 数据帧列转换为多行

    我有一个流式 JSON 数据 其结构可以用下面的案例类来描述 case class Hello A String B Array Map String String 相同的示例数据如下 A B ABC C 1 D 1 C 2 D 4 XYZ
  • Spritekit - 不从 SKTextureAtlas 加载 @3x 图像

    由于我的示例项目被删除 我认为这会更容易测试 我将发布一些代码和图像来说明我的观点 这是示例图像 我的图集设置 我的启动图像设置 我将这些精灵添加到场景中的代码 override func didMoveToView view SKView
  • 如何在 Blazor Hybrid 中的 muddatagrid 列中增加模型的值

    如何增加 muddatagrid 列中模型的值 如果我按 olus 图标 它将增加所有数量 建议我一种可以与 onclick eventcallback 一起使用的方法 我还需要将其增加 0 5
  • 如何模拟 URLSession.DataTaskPublisher

    我该如何嘲笑URLSession DataTaskPublisher 我有课Proxy需要注入一个URLSessionProtocol protocol URLSessionProtocol func loadData from url U
  • 如何将密码从文件传递到mysql命令?

    我有一个 shell 脚本 它使用外部文件中的一个参数调用 mysql 命令 它看起来像这样 我也在其他资源中看到了这个示例 mysql user root password cat root mysql 有点不工作 无法连接到 MySQL
  • Android 操作栏(如 Twitter 示例)

    实现 Twitter 示例 UI 模式等操作栏的最佳方法是什么 Android 版 Twitter 深入了解 Android 不断演变的 UI 模式 模式4 操作栏http android developers blogspot com 2
  • 在 Powershell 中写入十六进制转义字符

    有没有办法在Powershell中写这样的东西 Linux 将与 Perl 一起使用 char foo x41 我需要在我的一个程序中输入一些不可打印的字符 你可以这样做将 int 转换为 char 带十进制数 foo 65 as char
  • HttpClient GetAsync 方法 403 错误

    我正在尝试简单地显示 github 存储库 网址 https api github com search repositories q pluralsight https api github com search repositories
  • 使用cmd命令打开pwsh而不退出

    我正在尝试启动一个 Powershell 窗口 使用以下命令启动 ssh 会话 pwsh exe noexit Command ssh
  • 如何在 LINQ 中对单个联接中的多个字段进行左联接

    我正在尝试对 LINQ 执行这个简单的 sql 查询 但它给了我错误 这是需要转换为 LINQ 的 SQL 查询 DECLARE groupID int SET groupID 2 SELECT FROM dbo Person p LEFT
  • C++ 中两个向量的逐元素乘法

    我试图用两个向量进行以下数学运算 v1 a1 a2 a3 a4 a5 v2 b1 b2 b3 b4 b5 想要计算 v a2 b2 a3 b3 a4 b4 a5 b5 请注意 我不想要新向量中的第一个元素 我想知道是否有一种比 for 循环
  • Mongo shell 中的 NumberLong 算术

    如何在 Mongo shell 中对 NumberLong 值执行精确算术 据我了解 Javascript 只有一种数字类型 number 通常限制为 54 位浮点精度 使用 例如 标准加法的直接算术显示将强制转换为较低精度类型 gt Nu
  • 向 geom_bar() / geom_col() 条添加图案或纹理?

    有时 我需要某种用于 geom bar geom col 条的图案或纹理 即用于黑白打印 例如 以下内容对于某些人来说可能很难查看 library ggplot2 library dplyr warn conflicts FALSE lib
  • 设置标头并使用 $http POST 发送数据到 pocket api 返回 CORS

    无法向 pocket api 发送 http post 请求以获取请求令牌 我已经拿到消费者密钥了 问题似乎出在设置标头和发送请求中的数据 在浏览器中查看请求时 不会显示任何标头和数据 配置请求 var req method POST ur
  • 从整数的商中获取双精度值

    int velMperMin 667 int distM 70 double movT distM velMperMin 60 movtT必须等于6 30 但它是0 您需要将除法的操作数之一转换为双精度值 像这样 double movT d
  • 使用 UMAP 和 HDBScan 进行集群

    我有大量的文本数据 大约有 5000 人输入 我使用 Doc2vec 为每个人分配了一个向量 使用 UMAP 缩减为二维 并使用 HDBSCAN 突出显示其中包含的组 目的是突出具有相似主题相似性的组 这导致了如下所示的散点图 这看起来可以