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

Примечание. Эта статья является заключительной в серии статей, посвященных классификации данных транспортных точек интереса. В первой статье использовались различные модели машинного обучения для классификации записей на аэропорты, автобусные остановки и железнодорожные станции. Вторая статья была сосредоточена вокруг использования алгоритмов уменьшения характеристик как средства настройки моделей из первой статьи для обеспечения большей точности. В третьей статье использовался классификатор Spark Multilayer Perceptron Classifier для правильной классификации этих записей. Ознакомьтесь с этими статьями, чтобы узнать, как этот проект эволюционировал в поисках наилучшего способа классификации данных POI.

В этой статье будет использоваться классификация ансамблей для правильной классификации записей POI из SafeGraph с использованием шаблонов пешеходного движения. SafeGraph - это поставщик данных, который предоставляет данные о точках интереса для сотен предприятий и категорий. Он предоставляет данные бесплатно ученым. В этом проекте я решил использовать данные шаблонов SafeGraph для классификации записей как различных точек интереса. Схему данных паттернов можно найти здесь: Schema Info

Что такое классификация ансамблей:

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

Ансамблевая классификация данных POI

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

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

  1. Удаление ненужных столбцов: [‘parent_safegraph_place_id’, ’placekey’, ’safegraph_place_id’, ’parent_placekey’, ’parent_placekey’, ’safegraph_brand_ids’, ’sizes’, ‘poi_cbg’]
  2. Создание столбца наземной достоверности, который устанавливает каждую запись как аэропорт, автовокзал, аэропорт или неизвестно
  3. Удаление неизвестных записей для очистки записей, которые невозможно идентифицировать
  4. Горизонтально разнесенные столбцы строк JSON с использованием pyspark
  5. Горизонтально разнесенные столбцы массивов
  6. Использование пакета Sklearn LabelEncoder для преобразования столбца класса

В результате этих преобразований полученные данные выглядят следующим образом и имеют следующие столбцы:

Raw_visit_counts: количество посещений на нашей панели этого POI в течение диапазона дат.

Raw_visitor_counts: количество уникальных посетителей с нашей панели на этот POI в течение диапазона дат.

Distance_from_home: Среднее расстояние от дома, пройденное посетителями (посетителями, чей дом мы определили), в метрах.

Median_dwell: Среднее минимальное время ожидания в минутах.

Сохраненные жилища (увеличены до ‹5, 5–10,11–20,21–60,61–120,121–240): ключ - диапазон минут, а значение - количество посещений, которые были в пределах эта продолжительность

Popularity_by_day (с понедельника по воскресенье): отображение дня недели и количества посещений в каждый день (по местному времени) в течение диапазона дат.

Popularity_by_hour (увеличено до популярности_1-популярность_24): отображение часа дня и количества посещений в каждый час в течение диапазона дат по местному времени. Первый элемент в массиве соответствует часу от полуночи до 1 часа ночи.

Тип_устройства (для iOS и Android): количество посетителей точки интереса, использующей Android и iOS. Отображается только device_type с как минимум 2 устройствами, а любая категория с менее чем 5 устройствами отображается как

Теперь, когда данные готовы к работе, мы можем приступить к аспектам ансамблевого обучения.

В этой части статьи мы будем использовать классификатор голосования Sklearn. Это встроенная модель для ансамблевого обучения в пакете Sklearn. Однако перед тем, как использовать это, нам нужно сначала обучить трех слабых учеников, которых мы используем для этой модели. Мы используем те же модели, что и из первых частей этой серии статей: модель Гаусса наивного Байеса, модель дерева решений и модель K-ближайших соседей.

#Training all three models
from sklearn.neighbors import KNeighborsClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.tree import DecisionTreeClassifier
dtree_model = DecisionTreeClassifier(max_depth = 3).fit(X_train, y_train)
gnb = GaussianNB().fit(X_train, y_train)
knn = KNeighborsClassifier(n_neighbors = 22).fit(X_train, y_train)

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

from sklearn.ensemble import VotingClassifier
estimators=[(‘knn’, knn), (‘gnb’, gnb), (‘dtree_model’, dtree_model)]
ensemble = VotingClassifier(estimators, voting=’hard’)

После обучения и тестирования модели мы получаем следующие результаты:

ensemble.fit(X_train, y_train)
ensemble.score(X_test, y_test)

from sklearn.metrics import confusion_matrix
prediction = ensemble.predict(X_test)
confusion_matrix(y_test, prediction)

plot_confusion_matrix(ensemble, X_test, y_test, normalize=’true’, values_format = ‘.3f’, display_labels=[‘Airport’,’Bus’,’Train’])

Точность этой модели немного ниже, чем у наиболее эффективной модели из моделей, используемых для создания модели классификации ансамбля (0,75 против 0,68). Модель работает намного лучше, чем гауссовская наивная байесовская модель (0,265), и работает на одном уровне с классификатором K-ближайших соседей (0,679). Видя, что модель работает лучше, чем в среднем по этим трем точностям, можно сказать, что использование ансамблевой классификации для этого конкретного набора данных является эффективным способом повышения точности прогнозов. Как и прежде, основной причиной недостатков модели является несбалансированность набора данных и отсутствие записей об автобусной станции. Эта проблема не была решена путем ручной перебалансировки данных, как мы видели в статье о глубоком обучении Spark, поэтому лучший способ действий для будущих попыток классификации - это любой ценой избегать сильно несбалансированных данных или серьезно потерять точность.

Заключение

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

Вопросы?

Я приглашаю вас задать их в канале #safegraphdata SafeGraph Community, бесплатного сообщества Slack для энтузиастов данных. Получайте поддержку, делитесь своей работой или общайтесь с другими участниками ГИС-сообщества. Благодаря сообществу SafeGraph ученые имеют свободный доступ к данным о более чем 7 миллионах предприятий в США, Великобритании и Канаде.