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

for*_*ver 5 autoencoder deep-learning h2o

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

Dar*_*ook 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)
Run Code Online (Sandbox Code Playgroud)

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

最简单的自动编码器输出

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

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

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
Run Code Online (Sandbox Code Playgroud)

(PS原始数据来自Brandon Rose关于使用NLTK的优秀文章.)