(Подход снизу вверх)

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

KMeans - это алгоритм обучения без учителя. Кластеризация K-средних - это алгоритм классификации, используемый для автоматического разделения большой группы на более мелкие.

Это происходит при обучении без учителя, поскольку здесь нет ярлыков, только соотношение роста и веса. Но что за хитрость KMeans?

Насколько вы знаете, это алгоритм кластеризации,
Подождите, посмотрите это

Ты, человек, можешь найти здесь три кластера? Потрясающие!

Наша машина также может находить кластеры, а KMeans - один из алгоритмов поиска кластеров. Сама машина не может найти, надо ее учить!

Итак, что делает KMeans - это находит кластеры (лучший способ определить количество кластеров - указать вручную, сколько кластеров в данных, или методом локтя. В восторге? Еще 4 минуты, и я окуплюсь!

Это код для поиска кластеров в данных с помощью sklearn.cluster.KMeans

Запустив этот код, мы получим следующее…

Что происходит под капотом?

Но знаете что, в этом алгоритме всего 3 шага. Всего 3!

Шаг 0: произвольно инициализируйте 3 точки, потому что мы знаем, что есть 3 кластера!

(Если мы не знаем кластеров, мы можем найти их методом локтя или экспериментируя, визуализируя вручную)

Этап 1. Этап назначения кластера

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

Шаг 2: переместить шаг центроида

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

Это повторяется до тех пор, пока алгоритм не сойдется. Сходится означает, что после повторения алгоритма центроид и его точки существенно не изменяются!

Это легко сделать с помощью python sklearn.clusterKMeans, но здесь мы поймем, что происходит под капотом!

Первое изображение, которое вы видели, также было построено через кластеры, сформированные KMeans.

Это было всего лишь теорией, хотите со мной немного углубиться? Да ладно, будет весело!

Подробное описание шагов

На этапе назначения кластера мы минимизируем функцию стоимости, т.е.

Пусть каждый пример (обучающие точки) будет x¹, x², x³,…, x ^ m, а μ¹, μ²,…, μ ^ k представляют собой число центроида кластера, а k быть количеством кластеров.

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

Что теперь за функция стоимости?
Функция стоимости - это квадратная ошибка расстояния между точкой данных и центроидом, мы минимизируем эту ошибку,
Функция стоимости (J) = 1 / m ( Σ || xi - μk || ²)
Зачем уменьшать квадрат? Хороший вопрос, на самом деле это просто условность! :п

c: = min || xi - μk || ²
(Обратите внимание. Значение k, которое минимизирует функцию стоимости, присваивается c)

Мы минимизируем среднеквадратичное расстояние между точкой данных и центроидом кластера.

Алгоритм, Сердце!

Повторяйте, пока алгоритм не сойдется {
# m - количество примеров; k - номер центроида; xi - точка данных; ci - это значение K (кластер), которое минимизирует стоимость!

Для i: = от 1 до m

ci: = индекс (от 1 до K) центра тяжести кластера, ближайший к xi

Для k = 1 до K

μk: = среднее количество баллов, присвоенных кластеру k

}

Шаг назначения кластера сводится к минимуму J (функция стоимости) относительно c¹, c²,… удерживая μ¹, μ², ..;
Шаг перемещения кластера выбирает значение μ, которое минимизирует J (функция стоимости)

Большая проблема с KMeans

Мы знаем, что инициализируем центроид кластера случайным образом, но возможно, что KMeans может в конечном итоге сходиться к различным решениям в зависимости от того, как инициализируются кластеры.
Если у нас неудачная случайная инициализация, мы можем застрять на локальных оптимумах

Итак, чтобы увеличить шансы найти наилучшую возможную кластеризацию, нам нужно выполнить множественную случайную инициализацию, то есть инициализировать KMeans много времени и выбрать кластеризацию, которая дала наименьшие затраты J.

Все эти шаги выполняет алгоритм sklearn.cluster.KMeans под капотом!

Если вы хотите увидеть это в действии, посетите этот замечательный сайт Стэнфорда.

Вопросов? Комментарии? Подключаемся в Твиттер! или
напишите письмо на адрес [email protected]