Первая реакция на К означает: «Все? Это намного проще, чем я ожидал!»

По сути, это два шага.

  • Назначить точки данных ближайшему центроиду
  • Переместите центроид в середину точек данных.

И повторить. Элегантно просто!

В материалах курса (Stanford/Coursera Machine Learning) мы применяем K-средства в качестве метода сжатия изображений. В частности, чтобы сгруппировать цвета в группы K (в результате в изображении используется только K цветов). Я решил сделать это с изображением Тома Уэйтса.

Группируя цвета, представленные в нашем изображении, мы уменьшаем количество данных, необходимых для представления изображения. По своей сути это метод сжатия с потерями, поэтому качество изображения будет теряться с увеличением размера файла.

Код не будет предоставлен, чтобы оставаться на хорошей стороне Кодекса чести Coursera.

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

Очевидно, что чем ниже значение K, тем сильнее будет сжато наше изображение, что приведет к ухудшению качества. Давайте попробуем значение K, равное 64.

Понятно, что видимых искажений цвета гораздо меньше, однако в результате у нас остается больший размер файла. Заметно отсутствие красного (посмотрите на щеки), так что вполне возможно, что в этом прогоне мы столкнулись с проблемой локального оптимума. Эту проблему можно довольно легко решить с помощью цикла оптимизации, который пытается выполнить различные прогоны процесса кластеризации со случайными начальными точками центроида (выбирая ту, которая имеет наименьшую конечную стоимость), но, поскольку это требует очень много времени и, в конечном счете, не нужно для процесса обучения, Я пропущу это.

Что я выучил

Фактическая механика кластеризации K Means действительно намного проще, чем я ожидал. Неконтролируемое обучение было чем-то, к чему я пришел почти совсем недавно, и я был рад видеть, что до сих пор все было ясно и легко для понимания.

Что осталось узнать

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