Властелин машин
@dt_analytic
Всё о передовых инструментах исследования и трюках продуктивности, чтобы стать крутым аналитиком и специалистом по машинному обучению на Python.
419 posts
машинное обучение

DBSCAN для кластеризации и обнаружения аномалий

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

Неочевидные способы подбора количества групп для агломеративной кластеризации

В этой задаче библиотека scikit-learn нам не поможет, поэтому обратимся к SciPy. Для начала следует воспользоваться функцией linkage из scipy.cluster.hierarchy, которая и проведет процесс кластеризации (ранее я разбирал ее работу). В третьей колонке она возвращает дистанцию между объединяемыми кластерами (из первого и второго столбцов). На ее основании можно и задать предельный порог, после которого дистанция считается существенной и кластера перестают объединяться:

Градиентный бустинг с библиотекой H2O

Рассмотрим, какие параметры имеет класс H2OGradientBoostingEstimator для решения задач машинного обучения, как обучать и тестировать модель. В качестве примера загрузим данные о заболеваемости раком через метод load_breast_cancer из sklearn (подробнее о получении датасетов с использованием библиотеки):

Функции sklearn, с которыми понимание работы дерева решений сильно облегчится 

Рассмотрим пример построения дерева решений и работы модели на примере классификации цветков Ириса:

Оценка влияния признаков на модель, о которой незаслуженно забывают

Ключам никогда не сообщают, какую дверь им предстоит открыть (Сергей Лукьяненко). Для оценки влияния признаков на модель машинного обучения следует использовать разные способы. Одним из ключевых является обучение модели на парах признаков и визуализация границ принятия решений. Конечно, хотелось бы подавать для этого все признаки, тем более, что именно так они включаются в итоговую модель (а не отдельными парами). Однако ввиду ограниченности человеческого восприятия приходится чем-то пренебрегать. В качестве демонстрационного примера посмотрим на границы логистической регрессии при классификации цветков Ириса:

Раскрываем суть регрессии через смысл коэффициентов

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

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

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

Корректное использование сида при сравнении моделей на кросс-валидации

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

Smote для борьбы с дисбалансом в классах

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

Группировка по выборкам для временных рядов в sklearn

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