Обзор

Машинное обучение scikit-learn для Python предоставляет полезную функциональность для оценки моделей и выбора оптимального набора переменных или функций (scikit-learn.org). Фактически, набор инструментов предоставляет ряд классов, специально предназначенных для того, чтобы помочь разработчикам моделей выбрать набор независимых независимых переменных или признаков. Например, выбор признаков предлагает инструменты для исключения признаков с низкой дисперсией, выбора признаков на основе одномерных статистических тестов, рекурсивного исключения признаков и выбора признаков путем выбора из модели. Все эти подходы могут предоставить полезные и эффективные способы выбора основного набора объясняющих или независимых переменных.

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

Подход

В этом подходе используются классы моделирования scikit-learn для создания большого количества моделей, а затем DataFrames от panda для их изучения. В этом примере это будет продемонстрировано с использованием моделей линейной регрессии, примененных к набору данных о ценах на жилье в Бостоне, доступному через scikit-learn.

Двухэтапный процесс, подробно описанный в коде в конце поста,

  1. Создайте функцию оценки модели, которая
  • Создает модель линейной регрессии, используя класс LinearRegression scikit-learn, и объявляет список model_library.
  • Устанавливает цикл for с помощью itertools для определения всех возможных комбинаций функций между минимумом и максимумом, и для каждой комбинации функций подбирает и оценивает модель линейной регрессии с этим набором функций, X, и целевой переменной, y
  • Добавляет вывод в список словарей и возвращает DataFrame

2. Используйте DataFrame для изучения моделей путем сортировки, извлечения значений и построения графиков.

Изучение моделей и наборов функций

Теперь, когда переменные модели, коэффициенты и оценки хранятся в DataFrame (model_df), мы можем использовать функциональность pandas для изучения результатов. В этом случае мы оценили 8 191 набор комбинаций функций, который представляет собой количество 13 моделей с одной функцией плюс количество моделей с двумя функциями и так далее до подсчета модели с 1 13 функциями. Количество моделей можно найти, изучив форму результирующего DataFrame или выполнив комбинаторные вычисления.

Первым шагом в изучении моделей может быть сортировка этого кадра данных (model_df) по показателю перекрестной проверки CV_R2. Если мы сделаем это, мы увидим, что наиболее эффективная модель линейной регрессии имеет 10 функций из 13 возможных и достигает CV_R2 = 0,505. Мы также можем рассмотреть модель с наихудшими показателями, которая в данном случае оказалась моделью с одной независимой переменной с фиктивной переменной CHAS или Charles River в качестве единственного признака.

Также интересно построить графики моделей по количеству функций в зависимости от их оценок перекрестной проверки. Из этого графика мы можем сделать несколько полезных наблюдений. Во-первых, существует большое количество моделей, для которых показатели перекрестной проверки отрицательны. Хотя этого не произойдет с оценками R², это может произойти, когда данные разделены и модели оцениваются на тестовых данных. Во-вторых, мы можем интуитивно понять преимущества добавления переменных, сравнивая оценки модели на каждом шаге по оси Y. Например, мы можем видеть, как модель с 13 функциями сравнивается с распределением баллов среди моделей с 12 функциями. В-третьих, наблюдается некоторая согласованность среди лучших оценок для моделей, имеющих как минимум 8 функций. Это можно увидеть, изучив вертикальную синюю линию, проведенную через лучшую модель оценки (10 признаков). Лучшие модели с 8 функциями приближаются к этому значению с CV_R2 топ-модели на уровне 0,492. В-четвертых, лучшая модель с двумя функциями работает почти так же хорошо с CV_R2 = 0,430. В данном случае это PTRATIO или соотношение учеников и учителей по городам и LSTAT или процент более низкого статуса переменных населения. Наконец, мы можем использовать диаграмму, чтобы понять самые неэффективные комбинации. В случае двух переменных, это ZN или доля жилых земель, зонированных для участков площадью более 25 000 квадратных футов, и DIS или взвешенные расстояния до пяти характеристик центров занятости Бостона.

Соображения

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

Во-вторых, этот процесс может потребовать значительных вычислительных ресурсов, особенно если объекты или наборы данных велики. В этом примере моему компьютеру потребовалось 113 секунд для обработки данных о ценах на жилье в Бостоне. Однако потребности в вычислениях быстро растут по мере увеличения размеров объектов, и это может стать непрактичным при различных больших размерах.

Вывод

Несмотря на то, что для выбора функций доступен ряд инструментов, может быть полезно выбирать функции на основе их производительности в различных комбинациях моделей. Один из способов сделать это — создать функции, которые путем грубой силы рассматривают широкий спектр моделей, а затем использовать подход для оценки связанных наборов функций. Здесь мы продемонстрировали, что в Python-библиотеках scikit-learn и pandas есть полезные классы для такой задачи.

использованная литература