使用 NN 的最后一个隐藏层中的 2 个隐藏神经元的输出来可视化 4 类分类任务的结果
数据挖掘
r
分类
神经网络
可视化
2022-03-04 19:27:17
2个回答
我对该主题也有些陌生,但我认为您正在寻找的是自动编码器。我只在 h2o deeplearning 包中使用过它,但它似乎运行良好。
自动编码器背后的想法是从您的输入开始,编码到更少的节点(两个对于视觉表示来说很好),然后解码回您的原始输出(尽可能准确)。
如果自动编码器可以解码回您的输入的准确表示,那么这两个节点中保留了足够的重要信息。然后,您可以在类似于有界 PCA 图的二维图中绘制这两个节点所包含的特征。
此外 - 自动编码器不像 PCA 那样受限于线性。下面是一些代码的快速片段,希望对您有所帮助。
library(h2o)
localH2O = h2o.init(ip = "localhost", port = 54321, startH2O = TRUE, min_mem_size = "3g", max_mem_size = "4g", nthreads = -1)
dat_h2o <- as.h2o(train.df)
unsupervised <-
h2o.deeplearning(x = 24:356, # column numbers to use
training_frame = dat_h2o, # data in H2O format
autoencoder = TRUE, ## unsupervised autoencoding
activation = "Tanh", # or 'Tanh' 'Rectifier' 'WithDropout' node activation function, Tanh seems to work best for autoencoding
hidden = c(5,2,5), # three layers of nodes, with 5/2/5 nodes, respectively
epochs = 1) # max. no. of epochs
## layer 1 corresponds to hidden[1], so it will reduce to 5 variables
## below is roughly similar to using predict(pca.object, newdata)
training_data <- h2o.deepfeatures(unsupervised, dat_h2o, layer = 1)
testing_data <- h2o.deepfeatures(unsupervised, test_h2o, layer = 1)
## explore the second layer with 2 nodes, similar to exploring PC1 vs PC2
train_supervised_features2 = h2o.deepfeatures(unsupervised, dat_h2o, layer=2)
plotdata2 = as.data.frame(train_supervised_features2)
plotdata2$label = as.character(as.vector(dat_h2o[,364]))
## L2 corresponds to layer 2, so use L2
qplot(DF.L2.C1, DF.L2.C2, data = plotdata2, color = label, main = 'Neural network: 5-2-5')
首先,我认为情节很有用。在那个空间里,这些类确实是相当可分离的。
可视化的第一个选项应该是 PCA,尽管正如其他答案中所指出的,它只会考虑特征的线性组合。
如果您想在分类器执行情况的上下文中可视化类的可分离性,您制作的图是一个不错的选择。它表明虽然存在一些混乱(特别是对于绿色),但您可以相当容易地对该图上的每个类进行分组。
相反,如果您想可视化类的自然可分离性,PCA 或低维自动编码器是可行的方法。
不同之处在于,如果您关心的是前者,那么您的表示经过优化以分离类是一件好事。如果你关心后者,自动编码器的无监督性质更合适。

