Aspiring Data Science
385 subscribers
465 photos
12 videos
12 files
2.16K links
Заметки экономиста о программировании, прогнозировании и принятии решений, научном методе познания.
Контакт: @fingoldo

I call myself a data scientist because I know just enough math, economics & programming to be dangerous.
Download Telegram
#profiling #optimisation #python #speed #sklearn #bollocks

Эскалёрновские волшебники-программисты в деле. Столкнулся с неприемлемо низкой скоростью построения отчёта классификационных метрик на 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. Как обычно, похерят, видимо.
👍1😁1
#sklearn #metrics #optimization #numba

В гитхабе sklearn-а началась некая дискуссия о том, нужны ли быстрые метрики или даже использование Numba в sklearn. Возможно, у Вас тоже есть своё мнение?
❤‍🔥3
#mlgems #sklearn #pipelines

Столкнулся с ситуацией, когда есть конвейер sklearn/imblearn с препроцессингом (удаление, нормализация некоторых столбцов), в конце бустинг, поддерживающий задание отдельного eval_set ( catboost, xgboost). К eval_set конвейер, конечно же, не применяется, т.к. pipeline про eval_set знает только то, что это ещё один из параметров для модели в конце списка. Как быть? Тестирую пока решение с промежуточным конвейером, только пытаюсь сделать его более эффективным.
#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, короче.
😁1
#earlystopping #transformedtarget #sklearn #improvement

Никогда такого не было, и вот опять: трансформация таргета в sklearn несовместима с кастомными валидационными множествами для ранней остановки, которые обычно используются в современных бустингах. Скорее всего, как принято, найдут 100 причин этого не делать, но всё же запостил feature request.
#sklearn #imblanced #resampling #calibration

Этот Лемэтр зарубил много моих оптимизационных инициатив в sklearn, кстати.

Из новшеств: cost-sensitive learning, metadata routing. Английский докладчика понимается с трудом, но пытливый ум при желании разберётся )

https://www.youtube.com/watch?v=Gjrz4YCp6l8
#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?"
11