首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不使用距离矩阵而不是聚类算法来面对聚类算法呢?

为什么不使用距离矩阵而不是聚类算法来面对聚类算法呢?
EN

Stack Overflow用户
提问于 2019-04-02 01:11:58
回答 2查看 734关注 0票数 1

我当时正在读dlib的人脸聚类代码,注意到这个过程是这样的:

  1. 利用训练后的网络将人脸转换为矢量
  2. 基于距离的中文耳语聚类算法

当试图对大量(>10,000)图像进行聚类时,中文耳语聚类可能需要相当长的时间。

在这篇吡咯搜索文章中,作者使用另一种聚类算法DBSCAN按人对多幅图像进行分组。

由于神经网络生成的向量可以用来计算两面之间的相似性,那么,如果只计算一个欧氏距离矩阵,然后搜索所有满足置信阈值的值(例如,70%置信度x< 0.3 ),岂不是更好?

为什么要使用聚类算法,因为您只需比较每一张脸和每一张脸,就可以确定哪一张是同一个人?DBSCAN和中文耳语聚类都比计算距离矩阵花费的时间长得多。根据我的30,000幅图片的数据集,“时代”杂志:

C-耳语-5分钟

距离矩阵+搜索-10-20秒

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-02 06:15:27

DBSCAN实际上只需要比计算距离矩阵稍微长一点(当实现正确时,99%的计算是距离计算),而使用索引有时要快得多,因为如果索引能够修剪计算,则不需要每个成对的距离。

但是你不能仅仅从距离矩阵中“读出”集群。那里的数据可能是矛盾的:人脸检测器可能认为A和B相似,B类似于C,而A和C则不同!那你是做什么的?聚类算法试图解决这种情况。例如,单链路,在较小程度上,DBSCAN将使A和C成为相同的集群,而完全的链接将决定AB或BC。

票数 2
EN

Stack Overflow用户

发布于 2019-04-02 02:36:04

实际上,dlib的实现所做的事情与您所想的非常相似。这里是代码。它首先检查每对,然后拒绝距离大于阈值的对。这正是你提议的。但是,它正在对结果进行精细的聚类。那么,什么会改变呢?

如果数据点分离得很好,那么简单地按距离进行切断就可以了。但是,如果数据点彼此非常接近,这个问题就变得非常困难。想象一下一维功能。数据点是0到10之间的整数位置,如果距离最多为1.5,则希望将两个数据点放在一个集群中。那你会怎么做?如果你从一对开始,你可以形成一个集群。但是,如果你选择一个相邻的点,你会发现它会比你的阈值更接近你已经在集群中的一个点,而比另一个点的阈值更大。聚类就是解决这种模糊性的问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55465574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档