#profiling #optimisation #python #speed #sklearn #bollocks
Эскалёрновские волшебники-программисты в деле. Столкнулся с неприемлемо низкой скоростью построения отчёта классификационных метрик на 8M примеров. 15 секунд, ну куда это годится? Проверил кирпичики расчётов по нисходящей. Матрица ошибок считается за полторы секунды. Это чем же надо угандошить процессор, чтобы простое деление пары чисел и упаковка в словарь выполнялись больше 10 секунд и делали расчёты в ДЕСЯТЬ раз длиннее? Такое и специально не сразу сделаешь.
Эскалёрновские волшебники-программисты в деле. Столкнулся с неприемлемо низкой скоростью построения отчёта классификационных метрик на 8M примеров. 15 секунд, ну куда это годится? Проверил кирпичики расчётов по нисходящей. Матрица ошибок считается за полторы секунды. Это чем же надо угандошить процессор, чтобы простое деление пары чисел и упаковка в словарь выполнялись больше 10 секунд и делали расчёты в ДЕСЯТЬ раз длиннее? Такое и специально не сразу сделаешь.
😁1
#optimisation #sklearn #python #numba #codegems
Итак, то, что у кудесников машинного обучения считается 15 СЕКУНД, на самом деле должно занимать 50 МИЛЛИСЕКУНД. Но зато они сотни строк качественного кода написали, наверное, покрытого тестами, и прочим. Почему я считаю это важным? Да потому что мне предстоит обсчитывать сотни моделей, и оказалось, что качество обучения (classification report, roc auc, калибрация по всему сету + в разбивке по группам) на test set оценивается для 1 модели.. 5 минут, и основным тормозом был classification_report. Мне вовсе не улыбается платить за кластер, ожидающий сотни и тысячи раз по 5 минут. Спасибо, что у нас хотя бы есть numpy и numba. Без нумбы, кстати, этот код на языке программирования, созданном "гениальным" Ван Россумом, выполняется даже не знаю сколько, я прождал минут 5-10 и забил.
Скорее всего, напрасная трата времени, но всё же запостил issue. Как обычно, похерят, видимо.
Итак, то, что у кудесников машинного обучения считается 15 СЕКУНД, на самом деле должно занимать 50 МИЛЛИСЕКУНД. Но зато они сотни строк качественного кода написали, наверное, покрытого тестами, и прочим. Почему я считаю это важным? Да потому что мне предстоит обсчитывать сотни моделей, и оказалось, что качество обучения (classification report, roc auc, калибрация по всему сету + в разбивке по группам) на test set оценивается для 1 модели.. 5 минут, и основным тормозом был classification_report. Мне вовсе не улыбается платить за кластер, ожидающий сотни и тысячи раз по 5 минут. Спасибо, что у нас хотя бы есть numpy и numba. Без нумбы, кстати, этот код на языке программирования, созданном "гениальным" Ван Россумом, выполняется даже не знаю сколько, я прождал минут 5-10 и забил.
Скорее всего, напрасная трата времени, но всё же запостил issue. Как обычно, похерят, видимо.
👍1😁1
#sklearn #metrics #optimization #numba
В гитхабе sklearn-а началась некая дискуссия о том, нужны ли быстрые метрики или даже использование Numba в sklearn. Возможно, у Вас тоже есть своё мнение?
В гитхабе sklearn-а началась некая дискуссия о том, нужны ли быстрые метрики или даже использование Numba в sklearn. Возможно, у Вас тоже есть своё мнение?
GitHub
Speed up classification_report · Issue #26808 · scikit-learn/scikit-learn
Describe the workflow you want to enable I'm concerned with slow execution speed of the classification_report procedure which makes it barely suitable for production-grade workloads. On a 8M sa...
❤🔥3
#sklearn #mlgems
Лучшие практики sklearn, для новичков и среднего уровня.
https://www.youtube.com/watch?v=WkqM0ndr42c
Лучшие практики sklearn, для новичков и среднего уровня.
https://www.youtube.com/watch?v=WkqM0ndr42c
YouTube
My top 50 scikit-learn tips
If you already know the basics of scikit-learn, but you want to be more efficient and get up-to-date with the latest features, then THIS is the video for you.
My name is Kevin Markham, and I've been teaching Machine Learning in Python with scikit-learn for…
My name is Kevin Markham, and I've been teaching Machine Learning in Python with scikit-learn for…
#mlgems #sklearn #pipelines
Столкнулся с ситуацией, когда есть конвейер sklearn/imblearn с препроцессингом (удаление, нормализация некоторых столбцов), в конце бустинг, поддерживающий задание отдельного eval_set ( catboost, xgboost). К eval_set конвейер, конечно же, не применяется, т.к. pipeline про eval_set знает только то, что это ещё один из параметров для модели в конце списка. Как быть? Тестирую пока решение с промежуточным конвейером, только пытаюсь сделать его более эффективным.
Столкнулся с ситуацией, когда есть конвейер sklearn/imblearn с препроцессингом (удаление, нормализация некоторых столбцов), в конце бустинг, поддерживающий задание отдельного eval_set ( catboost, xgboost). К eval_set конвейер, конечно же, не применяется, т.к. pipeline про eval_set знает только то, что это ещё один из параметров для модели в конце списка. Как быть? Тестирую пока решение с промежуточным конвейером, только пытаюсь сделать его более эффективным.
Stack Overflow
Sklearn pass fit() parameters to xgboost in pipeline
Similar to How to pass a parameter to only one part of a pipeline object in scikit learn? I want to pass parameters to only one part of a pipeline. Usually, it should work fine like:
estimator =
estimator =
#featureselection #rfe
Понравилась идея recursive feature elimination, решил добавить этот метод в сравнение. Идея с фиксированным количеством фичей, как в RFE, мне кажется странной. Конечно же, оптимальное число можно определить только на кросс-валидации. И тут sklearn опять обделался. RFECV не работает с датафреймами и тем более категориальными фичам. В этом фреймворке вообще хоть что-то есть для реальной жизни и рабочих нагрузок?
Бюджета времени нет. Девелоперам предлагается, видимо, на глазок манипулировать параметром min_features_to_select, или просто забить на SLA. Ну а как реализован поиск оптимального количества признаков? Лезем в код:
# Build an RFE object, which will evaluate and score each possible
# feature count, down to self.min_features_to_select
Полный перебор! А это ТОЧНО оптимальный метод, когда мы оптимизируем функцию от 1 переменной с 1 глобальным экстремумом? Нет, серьёзно, блять, в 2023-м? Да какой нам искусственный интеллект. У нас же "натурального" нету. Пишу свой RFECV, короче.
Понравилась идея recursive feature elimination, решил добавить этот метод в сравнение. Идея с фиксированным количеством фичей, как в RFE, мне кажется странной. Конечно же, оптимальное число можно определить только на кросс-валидации. И тут sklearn опять обделался. RFECV не работает с датафреймами и тем более категориальными фичам. В этом фреймворке вообще хоть что-то есть для реальной жизни и рабочих нагрузок?
Бюджета времени нет. Девелоперам предлагается, видимо, на глазок манипулировать параметром min_features_to_select, или просто забить на SLA. Ну а как реализован поиск оптимального количества признаков? Лезем в код:
# Build an RFE object, which will evaluate and score each possible
# feature count, down to self.min_features_to_select
Полный перебор! А это ТОЧНО оптимальный метод, когда мы оптимизируем функцию от 1 переменной с 1 глобальным экстремумом? Нет, серьёзно, блять, в 2023-м? Да какой нам искусственный интеллект. У нас же "натурального" нету. Пишу свой RFECV, короче.
😁1
#earlystopping #transformedtarget #sklearn #improvement
Никогда такого не было, и вот опять: трансформация таргета в sklearn несовместима с кастомными валидационными множествами для ранней остановки, которые обычно используются в современных бустингах. Скорее всего, как принято, найдут 100 причин этого не делать, но всё же запостил feature request.
Никогда такого не было, и вот опять: трансформация таргета в sklearn несовместима с кастомными валидационными множествами для ранней остановки, которые обычно используются в современных бустингах. Скорее всего, как принято, найдут 100 причин этого не делать, но всё же запостил feature request.
GitHub
TransformedTargetRegressor with Early Stopping: transforming user-supplied validation sets in fit_params, too · Issue #27808 ·…
Describe the workflow you want to enable Many advanced regressors (CatBoost, XGBoost, LightGBM to name a few) support providing custom early stopping dataset(s) to their fit methods. Not all of the...
#skorch #huggingface #sklearn #peft #lora #zeroshot #fewshot #mixedprecision
Marriage made in Heaven
https://www.youtube.com/watch?v=y_n7BjDCS-M
Marriage made in Heaven
https://www.youtube.com/watch?v=y_n7BjDCS-M
YouTube
Bossan - Extend your scikit-learn workflow with Hugging Face and skorch | PyData Amsterdam 2023
Discover how to bridge the gap between traditional machine learning and the rapidly evolving world of AI with skorch. This package integrates the Hugging Face ecosystem while adhering to the familiar scikit-learn API. We will explore fine-turing of pre-trained…
#sklearn #imblanced #resampling #calibration
Этот Лемэтр зарубил много моих оптимизационных инициатив в sklearn, кстати.
Из новшеств: cost-sensitive learning, metadata routing. Английский докладчика понимается с трудом, но пытливый ум при желании разберётся )
https://www.youtube.com/watch?v=Gjrz4YCp6l8
Этот Лемэтр зарубил много моих оптимизационных инициатив в sklearn, кстати.
Из новшеств: cost-sensitive learning, metadata routing. Английский докладчика понимается с трудом, но пытливый ум при желании разберётся )
https://www.youtube.com/watch?v=Gjrz4YCp6l8
YouTube
Guillaume Lemaitre - Get the best from your scikit-learn classifier | PyData Global 2023
www.pydata.org
When operating a classifier in a production setting (i.e. predictive phase), practitioners are interested in potentially two different outputs: a "hard" decision used to leverage a business decision or/and a "soft" decision to get a confidence…
When operating a classifier in a production setting (i.e. predictive phase), practitioners are interested in potentially two different outputs: a "hard" decision used to leverage a business decision or/and a "soft" decision to get a confidence…
#sklearn #dataframes
Оказывается, есть инициатива унификации библиотек работы с датафреймами. И её поддерживают в sklearn.
"Enhancement All estimators now recognizes the column names from any dataframe that adopts the DataFrame Interchange Protocol. Dataframes that return a correct representation through np.asarray(df) is expected to work with our estimators and functions."
"Python users today have a number of great choices for dataframe libraries. From Pandas and cuDF to Vaex, Koalas, Modin, Ibis, and more. Combining multiple types of dataframes in a larger application or analysis workflow, or developing a library which uses dataframes as a data structure, presents a challenge though. Those libraries all have different APIs, and there is no standard way of converting one type of dataframe into another."
Похожая идея с использованием массивов Array API:
"Python users have a wealth of choice for libraries and frameworks for numerical computing, data science, machine learning, and deep learning. New frameworks pushing forward the state of the art in these fields are appearing every year. One unintended consequence of all this activity and creativity has been fragmentation in multidimensional array (a.k.a. tensor) libraries - which are the fundamental data structure for these fields. Choices include NumPy, Tensorflow, PyTorch, Dask, JAX, CuPy, MXNet, Xarray, and others.
The APIs of each of these libraries are largely similar, but with enough differences that it’s quite difficult to write code that works with multiple (or all) of these libraries. This array API standard aims to address that issue, by specifying an API for the most common ways arrays are constructed and used.
Why not simply pick an existing API and bless that as the standard?"
Оказывается, есть инициатива унификации библиотек работы с датафреймами. И её поддерживают в sklearn.
"Enhancement All estimators now recognizes the column names from any dataframe that adopts the DataFrame Interchange Protocol. Dataframes that return a correct representation through np.asarray(df) is expected to work with our estimators and functions."
"Python users today have a number of great choices for dataframe libraries. From Pandas and cuDF to Vaex, Koalas, Modin, Ibis, and more. Combining multiple types of dataframes in a larger application or analysis workflow, or developing a library which uses dataframes as a data structure, presents a challenge though. Those libraries all have different APIs, and there is no standard way of converting one type of dataframe into another."
Похожая идея с использованием массивов Array API:
"Python users have a wealth of choice for libraries and frameworks for numerical computing, data science, machine learning, and deep learning. New frameworks pushing forward the state of the art in these fields are appearing every year. One unintended consequence of all this activity and creativity has been fragmentation in multidimensional array (a.k.a. tensor) libraries - which are the fundamental data structure for these fields. Choices include NumPy, Tensorflow, PyTorch, Dask, JAX, CuPy, MXNet, Xarray, and others.
The APIs of each of these libraries are largely similar, but with enough differences that it’s quite difficult to write code that works with multiple (or all) of these libraries. This array API standard aims to address that issue, by specifying an API for the most common ways arrays are constructed and used.
Why not simply pick an existing API and bless that as the standard?"
❤1⚡1