Първата реакция към K означава: „Това е? Това е много по-просто, отколкото очаквах!“

В основата си това са две стъпки.

  • Присвояване на точки от данни към най-близкия център
  • Преместете центроида в средата на точките с данни.

И повторете. Елегантно семпло!

Материалите на курса (Станфорд/Coursera Machine Learning) ни карат да прилагаме K Means като метод за компресиране на изображения. По-конкретно, за групиране на цветове в K групи (което води до изображение, използващо само K цветове). Избрах да направя това с изображение на Том Уейтс.

Чрез групиране на цветовете, представени в нашето изображение, ние намаляваме количеството данни, необходими за представяне на изображението. Това по своята същност е метод на компресиране със „загуба“, така че качеството на изображението ще се загуби с размера на файла.

Код няма да бъде предоставен, за да остане добрата страна на Кодекса на честта на Coursera.

С моя алгоритъм, настроен да изпълнява 20 итерации и K от 16, завършихме с добре групирано компресирано изображение, без очевидни признаци за засядане в локални минимуми.

Очевидно е, че колкото по-ниска е стойността K, толкова по-компресирано ще бъде нашето изображение, което ще доведе до по-лошо качество. Нека опитаме стойност на K от 64.

Ясно е, че има много по-малко видимо изкривяване на цвета, но в резултат на това оставаме с по-голям размер на файла. Има забележима липса на червено (погледнете бузите), така че е възможно при това изпълнение да сме се сблъскали с локален проблем с оптимума. Това може да бъде решено сравнително лесно с цикъл за оптимизация, който опитва различни изпълнения през процеса на клъстериране с произволни начални центроидни точки (като се избира тази с най-ниската крайна цена), но тъй като би отнело изключително време и в крайна сметка ненужно за процеса на обучение, Ще го пропусна.

Какво научих

Действителната механика зад клъстерирането на K означава наистина е много по-проста, отколкото бих очаквал. Ученето без надзор беше нещо, в което се бях запознал почти съвсем ново и бях щастлив да видя, че досега всичко е ясно и лесно за разбиране.

Какво остава да научите

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