Краткий обзор лучших хитов 🎸

Scikit-learn уже много лет является основной библиотекой машинного обучения Python. Переход на версию 1.0 не принес много серьезных изменений, но он включает исправления ошибок, несколько новых функций, некоторые ускорения и целую кучу очистки API. 🧹

Более согласованный API замечателен как для новых, так и для существующих пользователей. В этой статье я подробно расскажу об изменениях, чтобы вы знали, как воспользоваться преимуществами версии 1.0. 🎉

Новые особенности

Теперь scikit-learn, давайте создадим B-сплайны с preprocessing.SplineTransformer. Я думаю о сплайнах как о более мелких полиномиальных преобразованиях. Как видно на графике ниже, сплайны помогают избежать нелепых экстраполяций, которые вы часто наблюдаете с многочленами высокой степени.

Джеймс и др. посвящены сплайнам в недавно обновленном пробном камне машинного обучения Введение в статистическое обучение, 2-е издание.

Улучшения OneHot Encoder 🎉

Мое любимое изменение 1.0 - OneHotEncoder. Теперь вы можете отбросить первую категорию, которая возникнет в результате кодирования, И шаг преобразования может принимать значения, которых он раньше не видел. В частности, Feature preprocessing.OneHotEncoder теперь поддерживает handle_unknown='ignore' AND drop='first'. Это усовершенствование особенно полезно, если вы хотите сделать вывод с помощью своей модели.

Панды Любовь 🐼❤️

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

Теперь, когда вы передаете DataFrame оценщику и подгоняете по вызову, оценщик сохраняет имена функций в атрибуте feature_names_in_. Между тем, get_feature_names_out был добавлен в API преобразователя, чтобы возвращать имена выходных функций. Обратите внимание, что get_feature_names устарел.

get_feature_names_out пока работает не со всеми трансформаторами, но работает с ColumnTransformer. Например, вот как можно OneHotEncode категориальные столбцы из набора данных подсказок и вернуться в DataFrame с именами столбцов, которые имеют смысл:

# ... read in tips dataset and split into train and test sets
from sklearn.compose import make_column_transformer
from sklearn.preprocessing import OneHotEncoder
ohe = OneHotEncoder(
    sparse=False, 
    drop='if_binary', 
    handle_unknown='ignore', 
)
tfd = make_column_transformer(
    (ohe, ['sex', 'smoker', 'day', 'time']),   
    remainder='passthrough',
)
X_train_encoded = tfd.fit_transform(X_train)
X_train_encoded = pd.DataFrame(
    X_train_encoded, 
    columns=tfd.get_feature_names_out()
)

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

Последовательность

Укажите squared_error для параметров потерь или критериев, где вы могли указать то же самое с другим именем в прошлом.

То же самое и с прохождением absolute_error. Возможно, вы использовали mae или что-то подобное в прошлом, но теперь вам просто нужно пройти absolute_error.

Разделение

Опция normalize в linear_model алгоритмах, таких как LinearRegression, Lasso и Ridge, теперь устарела. Чтобы получить такое же поведение, сначала загрузите ваши функции вStandardScaler(with_mean=False), прежде чем передавать преобразованные данные в вашу линейную модель. Это изменение позволяет разделить задачи предварительной обработки и моделирования.

Гибкость 💪

Я учу своих студентов использовать metrics.plot_confusion_matrix и metrics.plot_precision_recall_curve, чтобы быстро построить матрицу путаницы или кривую точности-отзыва. В более старых версиях вам приходилось передавать классификатор и данные scikit-learn. Это часто приводило к дублированию подгонки модели.

С 1.0 вы все еще можете подогнать модель и построить результаты за один шаг, или вы можете просто передать выходные данные модели и получить свои графики.

В частности, metrics.ConfusionMatrixDisplay теперь имеет два метода класса: from_estimator и from_predictions, так что вы можете выбрать, помещать ли и строить или просто строить. Точно так же metrics.PrecisionRecallDisplay имеет методы from_estimator и from_predictions для создания кривой точности-отзыва.

Подобно усовершенствованным функциям построения графиков, описанным выше, Scikit-learn calibration.CalibrationDisplay теперь может строить калибровочные кривые с помощью методов from_estimator или from_predictions.

Если у вас уже есть прогнозируемые вероятности от predict_proba, используйте from_predictions.

В противном случае передайте экземпляр вашего классификатора соответствия и данные X и Y в from_estimator.

Два других улучшения API могут обеспечить большую гибкость ваших рабочих процессов.

Рекурсивное исключение признаков сокращает их количество, итеративно удаляя наименее ценные признаки в соответствии с указанным алгоритмом. В прошлом вы не могли легко передать аргументы оценщику, используемому RFE. Теперь с feature_selection.RFE.fit это возможно. 🚀

Мне нравится исправлять пропущенные значения заранее, но если вы этого не сделаете, preprocessing.OrdinalEncoder может принять отсутствующие значения. Как удобно. 🙂

Выпускной 🎓

HistGradientBoostingClassifier и HistGradientBoostingRegressor больше не являются экспериментальными, поэтому вам не нужно их специально импортировать.

Повышение скорости 🚀

Я просто упомяну, что есть ряд улучшений скорости. Меня больше всего радует повышение на preprocessing.PolynomialFeatures.

Требуются ключевые слова… иногда

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

Сворачивать

На этом заканчиваются мои лучшие хиты из выпуска версии 1.0. Таким образом, в версии 1.0 есть некоторые приятные изменения, но я думаю, что дополнения в версии 0.24 были более существенными. Ознакомьтесь с моим руководством по этим изменениям здесь - держу пари, вы узнаете что-то новое. 😀

Попробуй это

Обновите до последней стабильной версии scikit-learn с pip install -U scikit-learn.

Большое спасибо разработчикам проекта и всем, кто внес свой вклад в релиз! Ознакомьтесь с полным списком изменений здесь.

Надеюсь, вы нашли это руководство по существенным изменениям в scikit-learn 1.0 полезным. Если да, поделитесь этим в своих любимых социальных сетях. 😀

Я пишу о данных, машинном обучении, Python и других интересных темах. Если вам это нравится, читайте больше здесь и подпишитесь на мою информационную рассылку Data Awesome, чтобы получать периодические обновления с полезными ресурсами данных.

Удачного обучения! 👍