使用IDEC的无监督群集

时间:2020-01-14 14:11:07

标签: machine-learning keras cluster-analysis autoencoder unsupervised-learning

在研究无监督的聚类模型时,我遇到了一些问题,希望四处寻找意见。 基本上,我试图使用IDEC(https://www.ijcai.org/proceedings/2017/0243.pdf)来根据客户的统计信息和网站上的习惯对客户进行分组。该算法首先使用预训练的自动编码器的编码器部分来降低客户特征的维数,然后将它们聚类到一个较低维的潜在空间中,这样做是为了避免(或总之减少)对用户特征的诅咒问题。维度。 为了使客户之间有更多的隔离,我将其功能分为3个主要类别,并在每个类别上训练了3个独立的模型:网站上的交易频率,花费的资金(流动性)和产品类型(报价)(所有功能)是数字,为简洁起见,我使用了虚拟名称);因此最终将根据这3个类别对客户进行分类(例如,Client1:“ 012”,Client2:“ 102”)。 但是,第一个问题是在训练模型时出现的:首先,我开始在整个功能空间上测试IDEC模型,结果发现大多数情况都很好,但是当我介绍这3个类别时,自动编码器的训练开始变得很奇怪(我必须在这里说,我对机器学习还是一个相对较新的东西,仍然有很多东西要学习,所以请原谅我松散使用的术语):在实践中,训练神经网络导致波动的训练和验证错误,在一种情况下,验证错误低于培训之一。所使用的自动编码器对所有3个单独的模型都具有相同的配置,并且基于Van Der Maaten的建议设置[input-500-500-2000-10]。

在这里显示的频率情况下,验证误差开始略有上升,表明过度拟合,但随后又减小,直到稳定为止。这正常吗?培训有效吗?还是我必须改变一些东西? enter image description here

在这里显示的花钱情况下,除了初始波动较大之外,培训的行为还很正常,错误会收敛到一个稳定的解决方案。 enter image description here

然而,真正的难题在这里出现:在引用的情况下,产品类型的错误被颠倒了,验证错误开始时比培训错误要低,即使它们最终收敛到相似的值,我仍然发现非常奇怪,无法解释为什么会这样。有任何见解吗?enter image description here

训练后,出现了更多问题:当是时候使用预先训练的权重对客户进行聚类时,模型似乎并没有像应该的那样分离聚类,在某些情况下,该模型将客户分为2个甚至1个组,甚至是专门要求将它们分为3个不同的组,如下所示。

为了可视化群集,我从10维空间到2D和3D都使用了PCA和t-SNE,星星代表群集中心。 通过使用编码器预测潜在空间来获取这些值,并基于每个值的聚类层预测来分配颜色。

此可视化使用了PCA。按照出现的顺序,我们有频率,流动性和报价。 如前所述,将频率分为2组而不是3组,并且在所有2种情况下,群集没有很好地分离。 enter image description here enter image description here

使用t-SNE会带来更多问题,因为所有群集都混合在一起而没有明显的连贯性: enter image description here enter image description here

我在这里包括一个3的最终模型的方案: enter image description here

关于如何改善局势的任何想法? 回顾一下:我想根据客户的3个主要类别对其进行聚类。该模型有效,但我不确定其效率或有效性,因为训练有点不稳定,聚类充其量似乎有些不稳定,分离性差,在某些情况下也无法形成3个不同的聚类。 我应该放弃IDEC并使用其他不同类型的无监督学习吗?我想尝试一下它,因为它在高维空间(我有64个维)中保证了更高的精度,但是如果建议使用其他技术,我会尝试一下。 再次感谢任何见解,如果我遗漏了您需要了解的内容,请随时提问。这是我在网站上的第一个问题,希望我做得不是太差。

谢谢您的阅读,欢呼!

0 个答案:

没有答案
相关问题