В приведенном ниже коде они используют autoencoder в качестве контролируемой кластеризации или классификации, поскольку у них есть метки данных. http://amunategui.github.io/anomaly-detection-h2o/ Но могу ли я использовать autoencoder для данных кластера, если у меня не было его меток? С уважениемМогу ли я использовать autoencoder для кластеризации?
ответ
Глубокоузнающий автокодировщик - это всегда неконтролируемое обучение. «Контролируемая» часть статьи, на которую вы ссылаетесь, - это оценка того, насколько она хороша.
Следующий пример (взято из главы 7 моей книги «Практическое машинное обучение с помощью H2O», где я пытаюсь использовать все неконтролируемые 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
. Я выбрал только два скрытых узлов, так что я мог бы построить кластеры:
Результаты будут меняться при каждом запуске. Вы можете (может быть) получить лучшие результаты со сложными автокодировщиками или использовать более скрытые узлы (но тогда вы не можете их нарисовать). Здесь я чувствовал, что результаты были ограничены данными.
BTW, я сделал выше сюжет с этим кодом:
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.)
В некоторых аспектах кодирования данных и кластеризации данных разделяют некоторые перекрывающиеся теорий. В результате вы можете использовать Autoencoders для группировки (кодирования) данных.
Простым примером для визуализации является наличие набора данных обучения, которые, как вы подозреваете, имеют два основных класса. Такие, как данные истории избирателей для республиканцев и демократов. Если вы возьмете Autoencoder и закодируете его на два измерения, то зарисуйте его на диаграмме рассеяния, эта кластеризация станет более понятной. Ниже приведен пример из одной из моих моделей. Вы можете увидеть заметное разделение между двумя классами, а также немного ожидаемого перекрытия.
Код можно найти here
Этот метод не требует только два двоичных классов, можно также готовить на столько разных классов, как вы хотите. Два поляризованных класса просто легче визуализировать.
Этот метод не ограничивается двумя выходными размерами, которые были предназначены только для удобства построения. На самом деле вам может показаться трудным сопоставить определенные пространства больших размеров с таким маленьким пространством.
В случаях, когда размер в кодированном (кластерном) слое больше по размеру, не так ясно, что «визуализировать» кластеры объектов. Здесь становится немного сложнее, так как вам придется использовать некоторую форму контролируемого обучения для сопоставления закодированных (кластерных) функций с вашими учебными метками.
Пара способов определения того, к какому классу относятся, состоит в том, чтобы перекачивать данные в алгоритм кластеризации. Или, что я предпочитаю делать, это взять закодированные векторы и передать их в стандартную нейронную сеть распространения обратной ошибки.Обратите внимание, что в зависимости от ваших данных вы можете обнаружить, что достаточно просто перекачать данные прямо в нейронную сеть с обратной распространенностью.
Спасибо, Даррен, за это объяснение. Если я использую более двух скрытых слоев, как я могу построить результаты? Спасибо – forever
@forever Вы можете использовать 'hidden = c (32,2,32)', что означает 32 нейрона, затем 2, а затем вернуться к 32. Затем вы извлекаете средний слой с помощью 'f <- h2o.deepfeatures (m, tfidf, layer = 2) ' –
Как узнать, использую ли я правильные параметры ?. Как я могу построить ошибку против эпох? – forever