Краткий обзор лучших хитов 🎸
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, чтобы получать периодические обновления с полезными ресурсами данных.
Удачного обучения! 👍