Первая реакция на К означает: «Все? Это намного проще, чем я ожидал!»
По сути, это два шага.
- Назначить точки данных ближайшему центроиду
- Переместите центроид в середину точек данных.
И повторить. Элегантно просто!
В материалах курса (Stanford/Coursera Machine Learning) мы применяем K-средства в качестве метода сжатия изображений. В частности, чтобы сгруппировать цвета в группы K (в результате в изображении используется только K цветов). Я решил сделать это с изображением Тома Уэйтса.
Группируя цвета, представленные в нашем изображении, мы уменьшаем количество данных, необходимых для представления изображения. По своей сути это метод сжатия с потерями, поэтому качество изображения будет теряться с увеличением размера файла.
Код не будет предоставлен, чтобы оставаться на хорошей стороне Кодекса чести Coursera.
С моим алгоритмом, настроенным на выполнение 20 итераций и K равным 16, мы получили хорошо сгруппированное сжатое изображение без явных признаков застревания на локальных минимумах.
Очевидно, что чем ниже значение K, тем сильнее будет сжато наше изображение, что приведет к ухудшению качества. Давайте попробуем значение K, равное 64.
Понятно, что видимых искажений цвета гораздо меньше, однако в результате у нас остается больший размер файла. Заметно отсутствие красного (посмотрите на щеки), так что вполне возможно, что в этом прогоне мы столкнулись с проблемой локального оптимума. Эту проблему можно довольно легко решить с помощью цикла оптимизации, который пытается выполнить различные прогоны процесса кластеризации со случайными начальными точками центроида (выбирая ту, которая имеет наименьшую конечную стоимость), но, поскольку это требует очень много времени и, в конечном счете, не нужно для процесса обучения, Я пропущу это.
Что я выучил
Фактическая механика кластеризации K Means действительно намного проще, чем я ожидал. Неконтролируемое обучение было чем-то, к чему я пришел почти совсем недавно, и я был рад видеть, что до сих пор все было ясно и легко для понимания.
Что осталось узнать
В этом конкретном сценарии K-Means кажется крайне неэффективным способом сжатия изображения по сравнению с традиционными методами. Я, конечно, не эксперт по сжатию изображений, но из того немногого, что я знаю, кажется, что для использования такого подхода к сжатию изображений, в частности, потребуются особые причины для этого. Хотя я вижу бесчисленное множество приложений для кластеризации и неконтролируемого обучения в общем смысле, я, возможно, захочу выяснить, был ли этот конкретный пример просто примером или существует эффективный вариант использования этого подхода для изображений.