Scikit learn - это * самый * доступный пакет для стандартных моделей машинного обучения на Python. Он не только предоставляет большинство основных алгоритмов, которые вы хотели бы использовать на практике (например, GBM, случайные леса, логистическая / линейная регрессия), но также предоставляет широкий спектр преобразований для предварительной обработки функций (например, кодирование Onehot, кодирование меток) как а также метрики и другие удобные функции для отслеживания производительности модели. Но все равно будут моменты, когда вам нужно будет сделать что-то немного другое. В этих случаях я часто все еще хочу работать в рамках общего API scikit learn. Использование scikit learn API дает два основных преимущества:

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

К счастью, действительно просто реализовать индивидуальную модель, чтобы она могла работать как стандартная модель scikit-learn.

Реализация собственной модели 🚀

Внедрение пользовательской модели в API scikit-learn может быть выполнено с использованием приведенных ниже каркасных классов - один для классификации, а другой для регрессии. По сути, все, что вы хотите сделать, можно добавить в методы init, fit, predict и predict_proba (для классификаторов). Унаследовав BaseEstimator, ClassifierMixin/RegressorMixin, класс будет иметь возможность взаимодействия с другими классами scikit-learn и может использоваться в конвейерах scikit-learn.

В этом посте вы можете увидеть, как я использовал эту структуру для определения пользовательских моделей scikit-learn на практике. Например, эта модель ниже создает классификатор логистической регрессии в древовидном пространстве:

В этом случае я объединяю несколько моделей scikit-learn. Вы можете видеть, что метод fit поместит aGradientBoostedClassifier на входах, использует эту подобранную модель для преобразования входов, один "горячий" кодирует это преобразование, а затем соответствует LogisticRegression на выходе. Обернуть это в единую настраиваемую модель намного проще, чем определять каждый из этих шагов по отдельности.

Спасибо за чтение - надеюсь, вы нашли это полезным.