示例请求:python 中的无监督深度学习
Posted
技术标签:
【中文标题】示例请求:python 中的无监督深度学习【英文标题】:Example Request: unsupervised deep learning in python 【发布时间】:2017-02-17 09:58:07 【问题描述】:上下文
我对神经网络比较陌生,想了解能够在学习表示之后进行类预测的聚类方法。
自动编码器/rbms/深度信念网络的一些在线教程通常有一个监督 fit() 调用,例如 fit(X,y) 或 Pipeline(rbm,logistic)。看: http://www.pyimagesearch.com/2014/09/22/getting-started-deep-learning-python/
http://scikit-learn.org/stable/auto_examples/neural_networks/plot_rbm_logistic_classification.html
我想探索隐藏层对未标记数据的影响,因此像 k-means 这样的算法还不够。
请求
很高兴看到一个调用类似于 fit(X) 和 predict(Y) 的 Python 示例,其中 X 和 Y 是 未标记 数据集。这个想法是 predict() 通过找到一个“最接近”的类来运行,该类由 fit() 中学习的表示确定。
我当然不指望一个完整的实施,但相关资源将不胜感激。
例如,在http://deeplearning.net/tutorial/DBN.html,似乎我们可以建立一个DBN。有对应的 predict() 方法吗?
附录
一个有点相关的问题:
Getting the learned representation of the data from the unsupervised learning in pylearn2
【问题讨论】:
如果没有标签,预测函数的输出应该是什么? 【参考方案1】:在 python 深度学习包中,您通常必须先定义模型的架构,然后训练(fit)它。
我能想到的最简单的 Auto-Encoders 应用是在 keras 中
您首先需要定义隐藏(压缩)表示的大小。
hidden_dim = 32
进行必要的导入
from keras.layers import Input, Dense
from keras.models import Model
然后定义模型的架构
input = Input(shape=(xxx,))
encode = Dense(hidden_dim, activation='relu')(input)
decode = Dense(xxx, activation='sigmoid')(encode)
autoencoder = Model(input, decode)
上面的 xxx 是您输入的维度。例如,如果您想在 MNIST 数据集(包含 28x28 图像)上训练自动编码器,则 xxx 将为 28x28=784。
现在使用您选择的成本函数和优化器编译您的模型
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
现在要训练您的无监督模型,您应该将相同的图像放置为输入和输出。一些方法也会在输出中增加噪音,但我会留给你。假设 X 是您的训练数据并且 X_val 是您的验证数据。根据需要调整超参数。
autoencoder.fit(X, X, epochs=100, batch_size=32, shuffle=True, validation_data=(X_val, X_val)
然后假设你有一个名为 X_test 的测试集,你可以让你的模型尝试并重现它。
y_hat = autoencoder.predict(X_test)
TL;DR 这比使用 sklearn 更难做,但基本步骤是:
定义您的网络架构(层、激活、形状等) 编译模型(定义成本函数和优化器) 根据数据拟合模型(同时定义训练参数) 根据测试输入预测输出。获取内部表示
为了现在回答您的第二个问题,您需要分别定义编码器和解码器
encoder = Model(input, encode)
encoded_input = Input(shape=(hidden_dim,))
decoder_layer = autoencoder.layers[-1]
decoder = Model(encoded_input, decoder_layer(encoded_input))
现在只需通过您的编码器和解码器传递一个测试输入(我们称之为原始)
hidden_representation = encoder.predict(original)
recreation = decoder.predict(hidden_representation)
您还可以使用隐藏表示甚至编码器层来生成另一种算法(例如监督算法)的输入
【讨论】:
以上是关于示例请求:python 中的无监督深度学习的主要内容,如果未能解决你的问题,请参考以下文章
《异常检测——从经典算法到深度学习》18 USAD:多元时间序列的无监督异常检测
《异常检测——从经典算法到深度学习》18 USAD:多元时间序列的无监督异常检测
《异常检测——从经典算法到深度学习》18 USAD:多元时间序列的无监督异常检测