В машинном обучении мы часто сталкиваемся с географическими или геопространственнымиданными, такими как широта и долгота, которые используются в качестве признаков. Некоторые другие геопространственные данные могут включать город, код города и другие объекты, которые могут обогащать скрытые взаимосвязи между переменными.

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

Сценарий

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

Данные

Были предоставлены данные о жилье, которые включают широту и долготу.

Прямое кодирование этих координат вместе с остальными функциями привело к 85%-му показателю «R в квадрате», что неплохо. Однако я хотел улучшить производительность модели, извлекая функции из точек местоположения.

Кластеризация с помощью Kmeans

Существуют и другие методы извлечения признаков из координат местоположения. Можно использовать геоэнкодеры для извлечения названия города, расстояния от города и прочего. Однако это может потребовать больших вычислительных затрат и времени, в зависимости от объема данных.

Другой метод — кластеризация через Kmeans. Этот метод предлагает быструю и простую реализацию извлечения признаков. Ниже приведен пример кода реализации.

В приведенном выше коде я произвольно выбрал 50 кластеров, что оказалось достаточно хорошим числом, соответствовал данным и нанес их на график вместе с центрами кластеров. Предпоследняя строка — это фактическое извлечение признаков с использованием метода «fit_transform», который дает данные, преобразованные на расстоянии кластера, с измерениями «n_samples by n_clusters». В таблице ниже приведен образец преобразованных данных.

На приведенном ниже графике показано фактическое положение домов вместе с центром кластеров.

Эффективность модели

В этой задаче использовались две модели; Sklearn ElasticNetCV и XGBoostRegressor с платформы XGBoost. Последний дал лучшие результаты с показателем R в квадрате 90%, который значительно улучшился после применения извлечения геопространственных признаков.

Ранжирование объектов показывает, что эти пространственные объекты сыграли важную роль в повышении производительности модели.

Вывод:

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

Возможные оптимизации

Один из возможных способов оптимизации этого метода — найти наилучшее число k кластеров в kmeans, используя «метод локтя». Однако я оставлю это упражнение для вас, чтобы вы могли попробовать его в своих проектах.

Дайте знать, если у вас появятся вопросы. Просто оставьте комментарий ниже. ☺

Вот ссылка на полный код, https://github.com/eanunez/tutorials/blob/master/XGBoostRegressor_housing.ipynb