python - 在非标记数据集上使用 MLP 进行聚类
问题描述
如何使用多层感知器在未标记的数据集上进行 K-Means 等聚类。我有带标签的 MNIST 数据集,但我想用 MLP 执行聚类算法。任何想法?
解决方案
编辑:如果问题仅限于使用 MLP,我认为您正在寻找可区分的聚类目标。(由于发现质心部分,K-Means 目标不可微)。我认为这不是集群的“主流”方法,但肯定有一些工作可以使用深度网络来优化集群(可微分)目标:
- 具有集群大小约束的可微分深度聚类 :“我们利用最优传输和 k-means 之间的联系,并依靠熵正则化来推导出可用于 (P) 并直接使用 SGD 优化的完全可微的聚类损失”。所以你可以将 SGD 应用于 MLP,MLP 是使用这种损失的最佳架构吗?取决于你的数据。
我可以想到的另一种使用 ANN 的方法是自组织地图(或 Kohonen 地图)。这取决于您对 MLP 的定义有多宽松,您当然可以在输入层和输出特征图之间添加一堆层。
您可以在没有标签的情况下使用自动编码器来执行此操作,尽管这比简单的 MLP 复杂一些:
不过,这可能有点矫枉过正,这实际上取决于问题。考虑首先对您的数据执行 KMeans(无 MLP)。如果问题足够复杂,将数据移动到潜在空间可能会起作用,这基本上就是 word2vec 所做的事情,人们用它进行聚类和各种事情(见这个)
推荐阅读
- spring - 获取 ThreadPoolTaskExecutor 的队列大小并在 Spring Boot 中添加到队列
- python - OpenAI Gym 自定义环境:具有真实值的离散观察空间
- powerbi - 在 UserPrincipalName 的辅助字段上使用 RLS
- javascript - 如何在 JXA 中启动异步后台进程
- php - 使用 mysql 生成当前、30、60、90 天的老化报告
- amazon-web-services - AWS Step函数:如何在状态机中传递静态键值对(不使用类型:传递)?
- hash - 加密图像的深度学习
- scala - 在Scala中动态选择类型类
- java - OnActivityResult 在片段内不起作用。我怎样才能在我的代码上解决这个问题?
- c# - 带有实体框架的 SQLite DATETIME(在 Julian/Real/Double 中)列