Введение в K-средних
Урок 9 из 19 курса Введение в машинное обучение на Coddy.
K-means — один из самых простых и наиболее широко используемых алгоритмов кластеризации. Он направлен на разделение n наблюдений на k кластеров, в которых каждое наблюдение относится к кластеру с ближайшим средним значением (центроидом), служащим прототипом кластера. Допустим, у вас есть куча разных фруктов, и вы хотите разложить их по корзинам в зависимости от их типа, но у вас нет этикеток. K-means помогает сделать именно это, но с точками данных вместо фруктов!

Incheol, CC BY-SA 4.0, через Wikimedia Commons
Как работает K-Means?
Алгоритм следует простой и эффективной итеративной процедуре для разделения набора данных на k кластеров.
- Инициализация центроидов: Сначала выберите
kточек из набора данных в качестве начальных центроидов. Эти точки могут быть выбраны случайным образом или на основе определенной стратегии. - Назначение кластеров: Для каждой точки в наборе данных найдите ближайший центроид (используя меры расстояния, такие как евклидово расстояние) и отнесите точку к этому кластеру.
- Обновление центроидов: Как только все точки распределены по кластерам, пересчитайте центроиды, взяв среднее значение всех точек в каждом кластере.
- Повторение шагов 2 и 3: Вышеуказанные шаги повторяются до тех пор, пока центроиды не перестанут значительно изменяться. Это означает, что алгоритм сошелся, и кластеры стабильны.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Задание
ЛегкоОпределение оптимального количества кластеров, k, является важным шагом. Для этого существуют различные методы, одним из самых популярных среди которых является метод локтя (Elbow Method).
Этот метод предполагает непрерывный запуск K-means в итерациях от k=1 до k=n. Для каждого значения k мы вычисляем значение суммы квадратов внутрикластерных расстояний (WCSS).
У каждого кластера есть центроид, WCSS — это сумма всех квадратов расстояний от центроида.
Создайте функцию с именем wcss, которая получает список точек данных (принадлежащих одному кластеру) и возвращает wcss этого кластера. Выполните следующие шаги:
Найдите центроид — центроид — это точка, представляющая среднее положение всех точек в кластере:

Например, вот список из двух 3D-точек:(1, 2 ,3), (4, 5, 6). Центроид равен:(1 + 4) / 2 = 2.5, (2 + 5) / 2 = 3.5, (3 + 6) / 2 = 4.5, >> (2.5, 3.5, 4.5)- Вычислите евклидово расстояние (Euclidian distance) между каждой точкой и центроидом
- Верните сумму всех расстояний, деленную на количество точек
Попробуйте сами
def euclidian_distance(point_a, point_b):
return (sum([(point_a[i] - point_b[i])**2 for i in range(len(point_a))]))**0.5
def wcss(points):
# Напишите код здесьВсе уроки раздела Введение в машинное обучение
Потренируйтесь самостоятельно: Онлайн-компилятор Python