#classic #ml
Сегодня буду рассказывать о том, что такое предвзятостьo градиентов, и как эту проблему решает CatBoost.
Предвзятость градиентов — это серьезная проблема в градиентном бустинге, которая приводит к переобучению модели. Суть проблемы в том, что градиенты, используемые на каждом шаге обучения, оцениваются на тех же данных, на которых строится текущая модель. Это создает смещение в распределении градиентов и ухудшает качество модели.
Классические подходы (XGBoost, LightGBM) используют двухэтапный процесс:
1. Выбор структуры дерева
2. Расчет значений в листьях
При этом значения в листьях рассчитываются как приближения градиентов или шагов Ньютона.
CatBoost предлагает принципиально иной метод борьбы с предвзятостью:
1. Отдельные модели для каждого примера:
- Для каждого обучающего примера создается отдельная модель
- Эти модели никогда не обновляются с помощью градиента этого примера
- Позволяет получить несмещенные оценки градиентов
2. Использование случайных перестановок:
- Данные случайным образом переставляются несколько раз
- Для каждой перестановки строятся отдельные модели
- Это повышает устойчивость алгоритма
3. Оптимизация вычислений:
- Все модели используют одинаковую структуру деревьев
- Используется эффективный алгоритм подсчета приближений
- Сокращается количество необходимых вычислений
Алгоритм CatBoost:
1. Создает несколько случайных перестановок данных
2. Для каждой перестановки:
- Строит отдельные модели без использования текущего примера
- Вычисляет градиенты на основе этих моделей
- Использует их для оценки результирующего дерева
Преимущества подхода CatBoost
1. Снижение переобучения:
- Несмещенные оценки градиентов
- Использование нескольких перестановок
- Более стабильная работа на разных данных
2. Эффективность:
- Оптимизированное хранение данных
- Параллельные вычисления
- Разумный баланс между качеством и скоростью
3. Универсальность:
- Работает с разными типами данных
- Адаптируется под различные задачи
- Предотвращает переобучение на сложных наборах данных
P.S. Схему рисовал сам для вас😊
Сегодня буду рассказывать о том, что такое предвзятостьo градиентов, и как эту проблему решает CatBoost.
Предвзятость градиентов — это серьезная проблема в градиентном бустинге, которая приводит к переобучению модели. Суть проблемы в том, что градиенты, используемые на каждом шаге обучения, оцениваются на тех же данных, на которых строится текущая модель. Это создает смещение в распределении градиентов и ухудшает качество модели.
Классические подходы (XGBoost, LightGBM) используют двухэтапный процесс:
1. Выбор структуры дерева
2. Расчет значений в листьях
При этом значения в листьях рассчитываются как приближения градиентов или шагов Ньютона.
CatBoost предлагает принципиально иной метод борьбы с предвзятостью:
1. Отдельные модели для каждого примера:
- Для каждого обучающего примера создается отдельная модель
- Эти модели никогда не обновляются с помощью градиента этого примера
- Позволяет получить несмещенные оценки градиентов
2. Использование случайных перестановок:
- Данные случайным образом переставляются несколько раз
- Для каждой перестановки строятся отдельные модели
- Это повышает устойчивость алгоритма
3. Оптимизация вычислений:
- Все модели используют одинаковую структуру деревьев
- Используется эффективный алгоритм подсчета приближений
- Сокращается количество необходимых вычислений
Алгоритм CatBoost:
1. Создает несколько случайных перестановок данных
2. Для каждой перестановки:
- Строит отдельные модели без использования текущего примера
- Вычисляет градиенты на основе этих моделей
- Использует их для оценки результирующего дерева
Преимущества подхода CatBoost
1. Снижение переобучения:
- Несмещенные оценки градиентов
- Использование нескольких перестановок
- Более стабильная работа на разных данных
2. Эффективность:
- Оптимизированное хранение данных
- Параллельные вычисления
- Разумный баланс между качеством и скоростью
3. Универсальность:
- Работает с разными типами данных
- Адаптируется под различные задачи
- Предотвращает переобучение на сложных наборах данных
P.S. Схему рисовал сам для вас
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤝1
#hypex
Новый релиз!
https://github.com/sb-ai-lab/HypEx/releases/tag/v1.0.2
Справедливости ради скорость АА теста совсем не только я ускорял, но и Ваня с Настей. Я больше ревьюил, замерял, рефакторил, ну и код заливал.
Но гайз, если вы пользуетесь нашей либой...
😜 Там ускорение в 2000 раз на 2 млн. записей
⏳Долгие процессы стали гораздо более удобными, благодаря появлению прогресс баров.
👩💻 Да и смотреть на результаты теперь приятнее благодаря форматированию в резюме
🔫 Не говоря уже про исправленные ошибки
В общем, все бегом обновляться 😊
Новый релиз!
https://github.com/sb-ai-lab/HypEx/releases/tag/v1.0.2
Справедливости ради скорость АА теста совсем не только я ускорял, но и Ваня с Настей. Я больше ревьюил, замерял, рефакторил, ну и код заливал.
Но гайз, если вы пользуетесь нашей либой...
⏳Долгие процессы стали гораздо более удобными, благодаря появлению прогресс баров.
В общем, все бегом обновляться 😊
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
#ml
Поговорим сегодня про имбалансное обучение.
Думаю, что все знакомы с проблемой: отношение 1 к 0 1/70, мажоритарный класс ломает эвристики, ломает метрики... В общем, к этому всему нужно особое внимание и особые подходы.
В общих чертах, что можно делать:
1. Оверсемплить
2. Андерсемплить
3. Комбинировать овер и андерсэмплинг
4. Использовать специальные модели со встроенным в алгоритм сэмплированием
5. Использовать метрики устойчивые к дисбалансу и дополнительные инструменты анализа
6. Настраивать лосс-функции моделей, чтобы она лучше училась на миноритарном классе.
В дальнейшем планирую больше раскрывать тему и рассказывать о практике применения различных приемов.
Поговорим сегодня про имбалансное обучение.
Думаю, что все знакомы с проблемой: отношение 1 к 0 1/70, мажоритарный класс ломает эвристики, ломает метрики... В общем, к этому всему нужно особое внимание и особые подходы.
В общих чертах, что можно делать:
1. Оверсемплить
2. Андерсемплить
3. Комбинировать овер и андерсэмплинг
4. Использовать специальные модели со встроенным в алгоритм сэмплированием
5. Использовать метрики устойчивые к дисбалансу и дополнительные инструменты анализа
6. Настраивать лосс-функции моделей, чтобы она лучше училась на миноритарном классе.
В дальнейшем планирую больше раскрывать тему и рассказывать о практике применения различных приемов.
🤔2
Forwarded from Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение
Выбросы могут быть ошибками сбора, а могут — ключом к инсайту. Главное — заметить их вовремя и обработать правильно.
🎯 Вот промт, чтобы системно подойти к проблеме:
У меня есть датафрейм с числовыми признаками. Помоги:
– Найти выбросы с помощью стандартных методов: Z-оценка, IQR, Tukey fences, modified Z-score
– Построить визуализации: boxplot, scatter, histogram, isolation forest
– Разделить признаки по плотности выбросов
– Предложить: удалять выбросы, каппировать, логарифмировать, заменять
– Проверить, влияют ли выбросы на корреляции и важность признаков
– Обнаружить мультипризнаковые выбросы (multivariate outliers) с помощью: Mahalanobis distance, One-Class SVM, Isolation Forest
Посоветуй стратегии для ML:
– оставлять как есть
– обработать в препроцессинге
– использовать модели, устойчивые к выбросам (например, robust regression)
Библиотека дата-сайентиста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
#open_source #ml #classic
Сегодня узнал из поста другой DS группы, который вы уже, возможно, видели о либе interpret. Мне тот пост не понравился, поэтому я решил написать свой 😅
Из крутого:
1. Специальный интерпретируемый GBM, разработанный Microsoft и другие glass-box модели 🔮
2. Полный набор инструментов для объяснения black-box моделей в одном месте🤔
3. Удобные встроенные интерактивные визуализации👀
Если дойдут руки попробовать, расскажу что как. Вообще довольно давно есть мысль взять какую-нибудь интересную задачу с открытыми данными, как бенчмарк всякого MLного. Если у вас такие есть, кидайте в комменты ☺️
Сегодня узнал из поста другой DS группы, который вы уже, возможно, видели о либе interpret. Мне тот пост не понравился, поэтому я решил написать свой 😅
Из крутого:
1. Специальный интерпретируемый GBM, разработанный Microsoft и другие glass-box модели 🔮
2. Полный набор инструментов для объяснения black-box моделей в одном месте
3. Удобные встроенные интерактивные визуализации
Если дойдут руки попробовать, расскажу что как. Вообще довольно давно есть мысль взять какую-нибудь интересную задачу с открытыми данными, как бенчмарк всякого MLного. Если у вас такие есть, кидайте в комменты ☺️
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - interpretml/interpret: Fit interpretable models. Explain blackbox machine learning.
Fit interpretable models. Explain blackbox machine learning. - interpretml/interpret
Forwarded from HypEx (Дмитрий Тихомиров)
Пока вы отдыхали (а может, считали часами АА-тесты на старой версии), мы не сидели сложа руки — выпуск версии 1.0.2 оказался мощным апдейтом:
- АА-тест теперь летает! Ускорение — от «в несколько раз» до «ого-го» на больших датасетах. (в 2000 раз быстрее на 2 млн строк)
- Т-тест стал умнее — теперь можно применять поправку Уэлча при неравных группах.
- Matching стал гибче — можно подбирать не одного, а сразу n-близнецов (наконец-то 💥).
- Результаты стали чище и понятнее — формат отчётов по АА/АБ/Matching обновили, добавили новые метрики.
🐞 Исправили баги:
- корректное сравнение в мэтчинге
- краши при константных значениях
- краши при дисбалансе
- проблема с КС-тестом
📚 Туториалы тоже не забыли — дописали, обновили, структурировали.
Да, релиз вышел 2 недели назад. Но мы — как хорошие исследователи: сначала проверим, протестим, допишем, потом и расскажем.
Пробуйте и пишите фидбек!
github.com/sb-ai-lab/hypex
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - sb-ai-lab/HypEx: Fast and customizable framework for automatic and quick Causal Inference in Python
Fast and customizable framework for automatic and quick Causal Inference in Python - sb-ai-lab/HypEx
🔥2
Полезное и актуальная, как раз думал, как по-красивее сделать иммутацию.
👍2
Forwarded from Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение
Пропущенные данные — распространённая проблема в реальных проектах. Причины могут быть разными: ошибки при сборе, повреждение файлов, неполные опросы и прочее.
Представляем три продвинутых способа иммутации пропусков с использованием Pandas и Scikit-learn:
Использует модели, например, Байесовскую регрессию или случайный лес, чтобы последовательно заполнять пропуски, обучаясь на известных данных.
from sklearn.experimental import enable_iterative_imputer
from sklearn.impute import IterativeImputer
iterative_imputer = IterativeImputer(random_state=42, max_iter=10)
df_imputed = pd.DataFrame(iterative_imputer.fit_transform(df), columns=df.columns)
print(df_imputed.isnull().sum().sum()) # Пропусков больше нет
Можно менять модель, например, использовать RandomForestRegressor для иммутации.
Заполняет пропуски, опираясь на похожие строки с известными значениями. Вес соседей можно задавать по расстоянию или равномерно.
from sklearn.impute import KNNImputer
knn_imputer = KNNImputer(n_neighbors=5, weights='distance')
df_knn = pd.DataFrame(knn_imputer.fit_transform(df), columns=df.columns)
print(df_knn.isnull().sum().sum())
Запускаем разные иммутационные модели, получаем несколько вариантов заполненных данных, а затем выбираем лучший результат, ориентируясь на ключевые признаки:
from sklearn.linear_model import BayesianRidge
from sklearn.ensemble import ExtraTreesRegressor, RandomForestRegressor
imputers = {
'bayesian_ridge': IterativeImputer(estimator=BayesianRidge(), random_state=42),
'extra_trees': IterativeImputer(estimator=ExtraTreesRegressor(n_estimators=10, random_state=42), random_state=42),
'rf_regressor': IterativeImputer(estimator=RandomForestRegressor(n_estimators=10, random_state=42), random_state=42)
}
imputed_datasets = {}
for name, imputer in imputers.items():
imputed_datasets[name] = pd.DataFrame(imputer.fit_transform(df), columns=df.columns)
print(f"{name}: Средний доход = {imputed_datasets[name]['income'].mean():.2f}")
— KNN хорошо подходит для небольших числовых датасетов, но требует ресурсов на больших.
— Ансамблевые методы дают лучшее качество, но сложнее и тяжелее в вычислениях.
— MICE — золотая середина для многих задач.
Библиотека дата-сайентиста #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒2
Forwarded from Представляешь,
создатели TikTok выкатили БЕСПЛАТНЫЙ аналог Cursor, еще и OPEN-SOURCE
ByteDance (да-да, те самые) выложили на GitHub исходники Trae Agent — ИИ-ассистента для программистов, который умеет писать код, править баги, задавать сам себе вопросы и даже запускать команды в терминале.
То есть буквально как Cursor, но с открытым кодом и без подписки на $60.
Что умеет:
- редактирует файлы и пишет коммиты,
- сам решает, что делать: рефакторить, тестить или гуглить,
- работает с GPT-4, Claude, OpenRouter и даже Doubao (внезапно),
- сохраняет «траекторию» своих действий — можно проверить, что он натворил.
Ссылка на GitHub: тык
@your_tech
ByteDance (да-да, те самые) выложили на GitHub исходники Trae Agent — ИИ-ассистента для программистов, который умеет писать код, править баги, задавать сам себе вопросы и даже запускать команды в терминале.
То есть буквально как Cursor, но с открытым кодом и без подписки на $60.
Что умеет:
- редактирует файлы и пишет коммиты,
- сам решает, что делать: рефакторить, тестить или гуглить,
- работает с GPT-4, Claude, OpenRouter и даже Doubao (внезапно),
- сохраняет «траекторию» своих действий — можно проверить, что он натворил.
Ссылка на GitHub: тык
@your_tech
#LLM
Сейчас произошел акт сравнения LLM с ризонингом.
На арене Deepseek, Алиса PRO и локально поднятая qwq с заданным системным промтом.
Запрос был про то, как можно извлечь фичи из поискового запроса.
Хуже всех оказалась Алиса. Она решила, что я делаю систему поиска и рассказала про то на каких признаках эти системы строятся. Совершенно бесполезная в рамках моего запроса информация.
На втором месте qwq. Она предложила только один способ: классификацию, но написала весь код реализации. Такой ответ может быть связан с системным промптом, в котором написано, что она помощник программиста и должна отвечать определенным образом с листингами.
Ну и Deepseek выдал большую телегу про то, что можно сделать, то есть именно то, что мне было интересно.
UPD пока писал, понял, что я Алисе не сказал пользоваться ризонингом и поиском. Запустил заново с этими атрибутами и ответ получился вполне хорошим. Не таким подробным, как у Deepseek, но коротко и по существу. Что в моем случае даже больше подходит под запрос, что выводит её в итоге на первое место.
Сейчас произошел акт сравнения LLM с ризонингом.
На арене Deepseek, Алиса PRO и локально поднятая qwq с заданным системным промтом.
Запрос был про то, как можно извлечь фичи из поискового запроса.
Хуже всех оказалась Алиса. Она решила, что я делаю систему поиска и рассказала про то на каких признаках эти системы строятся. Совершенно бесполезная в рамках моего запроса информация.
На втором месте qwq. Она предложила только один способ: классификацию, но написала весь код реализации. Такой ответ может быть связан с системным промптом, в котором написано, что она помощник программиста и должна отвечать определенным образом с листингами.
Ну и Deepseek выдал большую телегу про то, что можно сделать, то есть именно то, что мне было интересно.
UPD пока писал, понял, что я Алисе не сказал пользоваться ризонингом и поиском. Запустил заново с этими атрибутами и ответ получился вполне хорошим. Не таким подробным, как у Deepseek, но коротко и по существу. Что в моем случае даже больше подходит под запрос, что выводит её в итоге на первое место.
#open_source #dmdslab
Представляю вам очередную итерацию моих попыток сделать универсальные DS утилки: DmDSLab
Залил это дело в пупи, так что без проблем можете тестить:
Там пока особо полезного ничего нет. Но лично мне сейчас интересны общие относительно удобные структуры данных и функции для чистки данных.
Планирую постепенно дополнять функциями репу и писать доки на wiki.
Буду рад, если кому-то окажется полезным и вдвойне рад обратной связи 😊
Представляю вам очередную итерацию моих попыток сделать универсальные DS утилки: DmDSLab
Залил это дело в пупи, так что без проблем можете тестить:
pip install DmDSLab
Там пока особо полезного ничего нет. Но лично мне сейчас интересны общие относительно удобные структуры данных и функции для чистки данных.
Планирую постепенно дополнять функциями репу и писать доки на wiki.
Буду рад, если кому-то окажется полезным и вдвойне рад обратной связи 😊
Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение
#classic
Попробовал "в бою" IterativeImputer и это немного разочаровательный опыт. На небольших данных я особого сравнения не делал, но это работало. А на больших (на самом деле не очень: в районе пары гигов) эта фигня за 7 часов не посчиталась. Тут, конечно, не без нюансов. Я не занимался особой настройкой, возможно, если более осознано заняться тонкой настройкой, то все отработало бы за более адекватное время, но что-то мне подсказывает, что заниматься тонкой настрой импутера и ждать не вразумительное количество времени без калбэков - это не то, что вы хотите при построении модели.
Я в итоге заполнял данные медианой и все равно получилась вполне себе приличного качества моделька, а импутинг такой занял всего 30 секунд.
// Картинка из небольшого исследоавния со сравнением методов импутинга. Если получится, хочу тоже такое провести.
Попробовал "в бою" IterativeImputer и это немного разочаровательный опыт. На небольших данных я особого сравнения не делал, но это работало. А на больших (на самом деле не очень: в районе пары гигов) эта фигня за 7 часов не посчиталась. Тут, конечно, не без нюансов. Я не занимался особой настройкой, возможно, если более осознано заняться тонкой настройкой, то все отработало бы за более адекватное время, но что-то мне подсказывает, что заниматься тонкой настрой импутера и ждать не вразумительное количество времени без калбэков - это не то, что вы хотите при построении модели.
Я в итоге заполнял данные медианой и все равно получилась вполне себе приличного качества моделька, а импутинг такой занял всего 30 секунд.
// Картинка из небольшого исследоавния со сравнением методов импутинга. Если получится, хочу тоже такое провести.
👍3
Замутил директ по минимальному прайсу. Не знаю зачем, но пусть будет)
Можете туда, например, писать интересующие Вас темы, которые я постараюсь разобрать.
Можете туда, например, писать интересующие Вас темы, которые я постараюсь разобрать.
😁2
Forwarded from Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение
Теперь не нужно писать кастомные CUDA-ядра или лезть в C++ —
cuda.cccl позволяет собирать мощные алгоритмы на Python, используя CUB и Thrust под капотом.Библиотека делится на:
parallel — высокоуровневые, компонуемые алгоритмы над массивами и итераторами.cooperative — блок/варп-ориентированные примитивы для numba.cuda.Почему быстрее:
Кому пригодится:
Установка:
pip install cuda-cccl
👉 Подробнее: https://clc.to/4qFCRQ
Библиотека дата-сайентиста #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
