Как да направя Ненаблюдавано клъстериране с Керас

Алгоритмите за задълбочено обучение са добри в картографирането на входа за извеждане на дадени маркирани набори от данни благодарение на изключителната му способност да изразява нелинейни представи. Този вид задачи са известни като класификация, докато някой трябва да маркира тези данни. Независимо дали етикетирането на изображения на XRay или теми за новини, това зависи от човешката намеса и може да стане доста скъпо, тъй като наборите от данни се увеличават.

Анализът на клъстери или клъстерирането е една от неподдържаната техника за машинно обучение, не изисква етикетирани данни. Това прави, като групира набори от данни по техните прилики.

Защо трябва да се интересувате от клъстер или анализ на клъстери? Нека ви покажа няколко идеи.

Приложения на клъстеринг

  • Система за препоръки, като изучава историята на покупките на потребителите, клъстериращ модел може да сегментира потребителите по прилики, като ви помага да намерите съмишленици или свързани продукти.
  • В биологията алгоритмите за групиране на последователности се опитват да групират биологични последователности, които по някакъв начин са свързани. Протеините бяха групирани според съдържанието на аминокиселини.
  • Анализ на изображения или видео клъстеринг, за да ги разделите на групи въз основа на приликите.
  • В медицинска база данни всеки пациент може да има различна реална стойност за специфични тестове (например глюкоза, холестерол). Клъстеризацията на пациентите първо може да ни помогне да разберем как трябва да се прави binning на реално оценени характеристики, за да се намали оскъдността на характеристиките и да се подобри точността на задачи за класификация, като прогноза за оцеляване на пациенти с рак.
  • Общ случай на използване, генериране на компактно обобщение на данни за класификация, откриване на модели, генериране на хипотези и тестване.

Както и да е, клъстерингът е ценен актив за всеки учен с данни.

Какво прави добро клъстеризиране

Добрият метод за клъстериране ще създаде висококачествени клъстери, които трябва да имат:

  • Висока вътрешнокласова прилика: сплотеност в рамките на клъстери
  • Ниско междукласово сходство: Отличително между клъстерите

Задайте базова линия с K-Means

Традиционният алгоритъм на K-средства е бърз и приложим за широк спектър от проблеми. Въпреки това, техните показатели за разстояние са ограничени до оригиналното пространство за данни и те са неефективни, когато входната размерност е висока, например изображения.

Да обучим модел K-Means, за да групираме MNIST на ръка написани цифри до 10 клъстера.

Оценената точност на клъстериране на K-Means е 53,2%, по-късно ще я сравним с нашия модел за дълбоко вграждане.

Моделът, който скоро ще представим, представлява няколко части:

  • Автоенкодер, предварително обучен да научи първоначалното сгъстено представяне на неозначените набори от данни.
  • Клъстериращ слой, подреден върху енкодера, за да присвои изхода на кодера на клъстер. Теглата на кластеризиращия слой се инициализират с клъстерни центрове на K-Means въз основа на текущата оценка.
  • Обучете модела на клъстеринг, за да прецизирате кластеризиращия слой и кодира заедно.

Търсите изходния код? Вземете го на моя GitHub.

Предварително тренирайте автоенкодера

Autoencoder е алгоритъм за компресиране на данни, където има две основни части, енкодер и декодер. Задачата на енкодера е да компресира входните данни за функции с по-малък размер. Например, една извадка от 28x28 MNIST изображение има общо 784 пиксела, енкодерът, който изградихме, може да го компресира в масив със само десет числа с плаваща запетая, известни също като характеристиките на изображението. От друга страна, частта за декодер приема компресираните функции като вход и реконструира изображение възможно най-близо до оригиналното изображение. Autoencoder е неподдържан алгоритъм за учене в природата, тъй като по време на обучение той взема само самите изображения и не се нуждае от етикети.

Autoencoder

Автоенкодера, който изграждаме, е един напълно свързан симетричен модел, симетричен за това как изображението се компресира и декомпресира от точно противоположни начини.

Напълно свързан автоенкодер

Ще тренираме автоенкодера за 300 епохи и ще запазим моделните тежести за по-късно.

Клъстер модел

Като тренираме автоенкодера, ние неговата част от енкодера се научихме да компресираме всяко изображение в десет стойности с плаваща запетая. Може би мислите, тъй като входната размерност е намалена до 10, K-средствата трябва да могат да правят клъстерирането оттук? Да, ще използваме K-Means за генериране на клетъчни центроиди, което е 10-те центъра на клъстера в 10-D пространството с функции. Но ние също така ще изградим нашия персонализиран слой за клъстеризиране, за да преобразуваме входните функции във вероятност за етикет на клъстери.

Вероятността се изчислява според t-разпределението на ученика. Т-разпределението, както е използвано в алгоритъма t-SNE, измерва сходството между вградена точка и центроид. И както можете да се досетите, клъстериращият слой действа подобно на K-средства за клъстериране, а теглата на слоя представляват клетъчните центроиди, които могат да се инициализират чрез обучение на K-средство.

Ако сте нов за изграждане на персонализиран слой в Keras, има три задължителни метода, които ще внедрите.

  • build (input_shape), където дефинирате теглата на слоя, в нашия случай 10-те клъстери в 10-D пространство с функция, тоест 10x10 променливи на теглото.
  • call (x), където живее логиката на слоя, именно там се случва преобразуването от характеристиките в магията на клъстерите на етикетите.
  • compute_output_shape (input_shape), посочете тук логиката на преобразуване на формата от входни към изходни форми.

Ето кода на персонализирания клъстер слой,

След това ние подреждаме клъстериращ слой след предварително обучения енкодер, за да формираме модела на клъстериране. За клъстериращия слой ние инициализираме неговите тегла, клъстерните центрове, използвайки k-средства, обучени на функции вектори на всички изображения.

Структура на модела на клъстеризация

Обучение на модела за клъстеринг

Спомагателно разпределение на целта и загуба на дивергенция на KL

Следващата стъпка е да се подобрят едновременно заданието за групиране и представяне на функции. За целта ще дефинираме базирана на центроидни целеви вероятностни разпределения и ще сведем до минимум неговата дивергенция на KL спрямо моделния резултат от клъстеринг.

Бихме искали целевата дистрибуция да има следните свойства.

  • Засилване на прогнозите, т.е. подобряване на чистотата на клъстерите.
  • Поставете повече акцент върху точките от данни, присвоени с голяма увереност.
  • Предотвратявайте големите клъстери да изкривят пространството на скритите функции.

Целевото разпределение се изчислява чрез първо повишаване на q (кодираните вектори на характеристиките) до втората мощност и след това нормализиране по честота на клъстер.

Необходимо е итеративно да се прецизират клъстерите, като се учат от задачите с висока доверие с помощта на помощното разпределение на целите. След определен брой итерации, целевото разпределение се актуализира и клъстерният модел ще бъде обучен да минимизира загубата на дивергенция на KL между целевото разпределение и клъстерния изход. Стратегията за обучение може да се разглежда като форма на самообучение. Както при самоподготовката, ние вземаме първоначален класификатор и без етикет набор от данни, след което маркираме набора от данни с класификатора, за да тренираме неговите прогнози за висока увереност.

Функцията загуба, KL дивергенция или Kullback-Leibler дивергенция е мярка за разликата в поведението между две различни разпределения. Искаме да го сведем до минимум, така че целевото разпределение да бъде възможно най-близко до разпределението на клъстерния изход.

В следващия фрагмент на код целевата дистрибуция се актуализира на всеки 140 тренировъчни итерации.

Ще видите точността на клъстериране постоянно да се увеличава след всяка актуализация.

Показател за оценка

Метрикът казва, че е достигнал 96,2% точност на клъстериране, което е доста добре, като се има предвид, че входовете са изображения без етикет. Нека разгледаме по-подробно как се получава точността.

Този показател взема назначение на клъстер от непрекъснат алгоритъм и присвояване на основна истина и след това намира най-доброто съвпадение между тях.

Най-доброто картографиране може да бъде ефективно изчислено чрез унгарския алгоритъм, който се прилага в научната библиотека на scikit като linear_assignment.

По-лесно е да погледнем матрицата на объркване.

Матрица за объркване

Тук можете бързо да сравните заданието за клъстериране на ръка, например, съвпадение на клъстер 1 с истински етикет 7 или ръкописна цифра „7“ и виза за мен.

Фрагментът на кода за матрица на объркване, показан по-долу.

Прилагане на конволюционен автокодер (експериментален)

Тъй като имаме работа с набори от данни за изображения, си струва да опитате с конволютивен автоенкодер вместо с едно изграждане само с напълно свързани слоеве.

Едно нещо, което си струва да се спомене, за да реконструирате изображението, можете да изберете деконволюционни слоеве (Conv2DTranspose в Керас) или слоеве за разширяване (UpSampling2D) за по-малко проблеми с артефактите. Експерименталният резултат за конволюционни автоенкодери е наличен на моя GitHub.

Заключение и допълнително четене

Научихме се как да се изгради модел на керас за извършване на клъстеризиращ анализ с необелязани набори от данни. Предварително обученият автоенкодер изиграва значителна роля в намаляването на размерите и инициализирането на параметрите, след това слоевият кластериран слой се тренира срещу целево разпределение, за да се прецизира точността допълнително.

Допълнителна информация

Изграждане на Autoencoders в Керас - Официален блог на Keras

Неподдържано дълбоко вграждане за клъстеризиращ анализ - вдъхнови ме да напиша този пост.

Пълният изходен код е на моя GitHub, прочетете до края на бележника, тъй като ще откриете друг алтернативен начин за минимизиране на клъстеринга и загубата на автоенкодер в същото време, който се оказа полезен за подобряване на точността на клъстериране на модела на конволюционното клъстериране.

Първоначално публикуван на www.dlology.com.