我可以使用autoencoder进行群集吗?

时间:2016-11-24 06:20:41

标签: deep-learning h2o autoencoder

在下面的代码中,他们使用自动编码器作为监督聚类或分类,因为它们具有数据标签。 http://amunategui.github.io/anomaly-detection-h2o/ 但是,如果我没有标签,我可以使用自动编码器对数据进行聚类吗? 此致

2 个答案:

答案 0 :(得分:6)

深度学习自动编码器总是无人监督学习。 "监督"您链接到的文章的一部分是评估它的效果。

以下示例(摘自我的书,实用机器学习与H2O的第7章,我在同一数据集上尝试所有H2O无监督算法 - 请原谅插件)需要563个功能,并尝试对它们进行编码只有两个隐藏的节点。

m <- h2o.deeplearning(
  2:564, training_frame = tfidf,
  hidden = c(2), auto-encoder = T, activation = "Tanh"
  )
f <- h2o.deepfeatures(m, tfidf, layer = 1)

第二个命令提取隐藏的节点权重。 f是一个数据框,包含两个数字列,tfidf源数据中每一行都有一行。我只选择了两个隐藏节点,以便绘制聚类:

simplest autoencoder output

每次运行结果都会发生变化。您可以(可能)使用堆叠自动编码器或使用更多隐藏节点(但是您无法绘制它们)获得更好的结果。在这里,我觉得结果受到数据的限制。

顺便说一下,我用这段代码制作了上面的情节:

d <- as.matrix(f[1:30,]) #Just first 30, to avoid over-cluttering
labels <- as.vector(tfidf[1:30, 1])
plot(d, pch = 17) #Triangle
text(d, labels, pos = 3) #pos=3 means above

(P.S。原始数据来自Brandon Rose's excellent article on using NLTK。)

答案 1 :(得分:0)

在某些方面,编码数据和聚类数据共享一些重叠理论。因此,您可以使用自动编码器对数据进行聚类(编码)。

可视化的一个简单示例是,如果您有一组怀疑有两个主要类的训练数据。例如共和党人和民主人士的选民历史数据。如果您使用自动编码器并将其编码为二维,则将其绘制在散点图上,此聚类变得更加清晰。以下是我的一个模型的示例结果。您可以看到两个类之间明显的分割以及一些预期的重叠。 Clustered Voter Data

可以找到代码here

此方法不需要两个二进制类,您也可以根据需要训练多个不同的类。两个极化类更容易可视化。

此方法不限于两个输出维度,仅用于绘制方便性。实际上,您可能会发现难以将某些大尺寸空间有意义地映射到如此小的空间。

如果编码(聚类)图层的尺寸较大,则“可视化”特征聚类的效果不明显。这是更困难的地方,因为您必须使用某种形式的监督学习来将编码(群集)功能映射到您的训练标签。

确定哪些类功能所属的几种方法是将数据泵入knn-clustering算法。或者,我更喜欢做的是采用编码向量并将它们传递给标准的反向误差传播神经网络。请注意,根据您的数据,您可能会发现仅将数据直接泵入反向传播神经网络就足够了。