введение:

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

Однако во время моего опыта работы с курсами Kaggle я столкнулся с трудностями в понимании представленных концепций и примеров. Понимая, что другие могут столкнуться с подобными проблемами, я взял на себя инициативу упростить курс для вас. Я исследовал и предоставил объяснения по темам, которые, возможно, были неясны.

После прочтения этой статьи ваш следующий шаг — применить полученные знания на практике, решая упражнения на уроках. Выполнив их, вы сможете получить сертификат. Это ссылка на курс: https://www.kaggle.com/code/ryanholbrook/clustering-with-k-means

Урок 4 курса разработки функций Kaggle, который называется «Кластеризация с помощью k-средних», посвящен разработке функций в задачах обучения без учителя. Неконтролируемое обучение — это метод машинного обучения, который решает проблемы с немаркированными наборами данных, что означает, что у вас нет цели найти взаимодействия между этой целью и функциями вашего набора данных, когда вы разрабатываете функции (на уровне предварительной обработки вашего жизненного цикла машинного обучения). В неразмеченных наборах данных алгоритмы машинного обучения пытаются найти закономерности в наборах данных. Иногда выявление шаблонов приводит к поиску и формированию кластеров в наборе данных, что означает помещение схожих точек данных в одну группу. А k-means — это модель машинного обучения, которую мы используем для кластеризации.

Итак, как мы находим взаимодействия с предсказаниями?

Ну, мы просто используем кластерные метки. Мы присваиваем метку кластерам и добавляем ее как функцию.

Ярлыки кластера как функция

Кластеризация может применяться к отдельным функциям или к нескольким:

  1. Кластеризация, применяемая к вещественному признаку (некатегориальному), называется «биннингом🗑️» или «дискретизацией» (преобразование непрерывных значений в дискретные аналоги). Это означает группировку похожих значений в ячейки или категории. Например, на рисунке функция «Год постройки» разделена на 3 категории: приблизительно категория или кластер 1 — это годы до 1943 года, кластер 2 — между 1943 и 1981 годами, а кластер 0 — это годы с 1981 года.
  2. Когда кластеризация применяется к нескольким функциям, это похоже на «многомерное объединение🗑️» или «векторное квантование» (квантование — это процесс отображения непрерывных бесконечных значений в меньший набор дискретных конечных значений). Например, на рисунке кластеризация применяется к двум функциям (долгота и широта). Дома сгруппированы по обоим этим признакам в 6 групп.

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

На следующем рисунке в курсе показано, как будет выглядеть набор данных, когда к нему будет добавлена ​​функция «кластер». Как показано, эта функция категорична.

Если вы добавили функцию (как на картинке выше) в свой набор данных, вы выполнили разработку функций, поздравляю👏.

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

Итак, почему мы добавляем метки кластера?

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

Например:

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

Кластеризация k-средних

Почему k-means: K-means — это один из многих существующих алгоритмов кластеризации, и он используется здесь, потому что объяснение разработки признаков с помощью этой модели является простым и интуитивно понятным.

Объяснение алгоритма. Кластеризация по методу k-средних выполняется путем измерения схожести точек данных. Это вычисляется с помощью евклидова расстояния, которое является обычным расстоянием по прямой (с двумя точками (x1, y1) и (x2, y2) в 2D-пространстве: расстояние = sqrt ((x2 — x1)² + (y2 — y1)², эта формула может быть расширена до более высоких измерений).

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

Затем каждая точка в наборе данных назначается кластеру, центроид которого находится ближе всего к этой точке.

«k» в «k-средних» — это количество центроидов (то есть кластеров), которые он создает. Вы сами определяете k.

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

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

Алгоритм двухэтапного процесса. Алгоритм начинается со случайной инициализации некоторого предопределенного числа центроидов (n_clusters — сокращение от числа кластеров). Затем он повторяет эти две операции:

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

Он повторяет эти два шага до тех пор, пока центроиды больше не перестанут двигаться или пока не пройдет некоторое максимальное количество итераций (max_iter — сокращение от максимального количества итераций).

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

Примечания, которые следует помнить о параметрах:

  1. Возможно, вам придется увеличить max_iter для большого количества кластеров.
  2. Или вам может потребоваться увеличить n_init для сложного набора данных.
  3. Обычно единственный параметр, который вам нужно выбрать самостоятельно, — это n_clusters(k). Лучшее разбиение набора функций зависит от модели, которую вы используете, и от того, что вы пытаетесь предсказать, поэтому лучше настроить его, как любой гиперпараметр (например, с помощью перекрестной проверки).

Пример:

Функции «Широта» и «Долгота» используются вместе с функцией «MedInc» (средний доход) в наборе данных о жилье в Калифорнии для создания экономических сегментов в разных регионах Калифорнии.

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

  1. В этой ячейке после импорта matplotlib, pandas, seaborn и sklearn.cluster (для k-средних) мы устанавливаем стиль графика «морской-белый», потому что Seaborn поставляется с рядом настраиваемых тем и высокоуровневым интерфейсом для управления внешним видом фигур matplotlib, поскольку в matplotlib может быть трудно понять, какие настройки нужно настроить для получения привлекательного графика.
  2. После этого plt.rc() предназначен для изменения некоторых параметров matplotlib по умолчанию, что обеспечивает автоматическую настройку макета фигуры, что означает настройку размера и интервала фигуры для размещения элементов в обозначенной области фигуры.
  3. А для следующего plt.rc() с параметром «оси» вы можете изменить различные свойства осей, такие как линии сетки, метки, пределы, деления и т. д.
  4. И, наконец, мы читаем из CSV-файла с именем «housing.csv», расположенного в каталоге «../input/fe-course-data», и присваиваем его переменной с именем «df». Файл читается с помощью библиотеки pandas, а полученные данные сохраняются в кадре данных pandas. А следующая строка присваивает подмножество столбцов из DataFrame «df» переменной с именем «X». В подмножество включены столбцы «MedInc», «Широта» и «Долгота». Функция «.loc» используется для выбора указанных столбцов путем предоставления списка имен столбцов, разделенных запятыми, в квадратных скобках. И, распечатав заголовок этого фрейма данных, мы получим следующую таблицу.

Мы не используем нормализацию в нашем наборе данных здесь, но это хорошая идея для k-средних, поскольку она чувствительна к масштабу.

  1. С помощью функции KMeans мы сначала определили модель и указали количество кластеров равным 6.
  2. kmeans.fit_predict() применяет алгоритм кластеризации KMeans к функциям в DataFrame «X». Метод fit_predict() подгоняет модель кластеризации к данным и возвращает метки кластеров, назначенные каждой точке данных в «X». Эти метки кластеров основаны на центроидах кластеров, сгенерированных алгоритмом. И он присваивает метки кластеров, возвращенные `fit_predict()`, столбцу «Cluster» в «X».
  3. А следующая строка присваивает преобразованный категориальный тип данных обратно столбцу «Cluster» в DataFrame «X».

Теперь с диаграммой рассеяния и коробчатой ​​диаграммой мы видим, насколько эффективной была кластеризация:

диаграмма рассеяния:

  1. «sns.relplot()» — это функция из библиотеки seaborn, которая используется для создания реляционного графика, в частности графика рассеяния или линейного графика, с одной непрерывной переменной.
  2. «x» и «y»: эти параметры указывают имена столбцов или переменные из DataFrame, которые будут использоваться в качестве переменных оси x и оси y соответственно.
  3. «оттенок»: этот параметр позволяет нам указать другой столбец или переменную из DataFrame, которая будет использоваться для цветового кодирования точек данных на графике на основе различных категорий. Он позволяет визуально различать определенные группы данных.

На этом графике мы видим, что алгоритм создал отдельные сегменты для областей с более высоким доходом в тех же местах.

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