EasyData
1K subscribers
152 photos
10 videos
22 files
83 links
Добро пожаловать!
Меня зовут Мария Жарова, и это мой блог про науку о данных

Лайфхаки из будней MLщика, полезности по Data Science и ответы на вопросы, которые волнуют новичков и не только🌝

Автор @NaNCat
Download Telegram
Привет, друзья!
Поздравляю с нашим профессиональным праздников - 256-м днём в году!
Пока вайбкодинг ещё не вытеснил программеров в Data Science, и пока Python играет одну из ключевых ролей, давайте освежим важные особенности языка, которые часто спрашивают даже у сеньоров на собеседованиях ✍️

1. Python со статической или динамической типизацией?
Напомним разновидности:

- Статическая типизация (C++, Java): тип переменной задаётся заранее и проверяется до запуска программы.
- Динамическая типизация (Python, JavaScript): тип переменной определяется во время выполнения программы - а именно, в момент присваивания. В Python это происходит при исполнении соответствующей строки кода (ведь он интерпретируемый), поэтому одна и та же переменная может в разные моменты хранить объекты разных типов.


2. Разница между генераторами и итераторами?
Вспомним, что итерируемый объект - это то, из чего можно последовательно доставать элементы (список, множество, строка).

Итератор - это «механизм перебора»: объект, который умеет по одному выдавать элементы итерируемого объекта. Для этого у него есть методы iter (возвращает сам итератор) и next возвращает следующий элемент)

Генератор — это удобный способ создать итератор. Его пишут через yield или в виде генераторного выражения. Главное отличие: генератор сам запоминает своё состояние между вызовами и продолжает работу с того места, где остановился.


3. В чем разница между yield и return?
return завершает функцию и возвращает одно значение.

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


4. А что такое декораторы и зачем они нужны?
Декоратор - это вызываемый объект (функция или класс с call), который принимает другую функцию или класс и возвращает «обёрнутую» версию. То есть позволяет добавлять новое поведение к функциям/классам без изменения их кода (примеры: логирование, кеширование, измерение времени работы фунции).


5. Какие бывают пространства имен в Python?
Есть четыре уровня пространств имён:
- Local (локальное внутри функции)
- Enclosing (это локальное пространство переменных внешней функции, к которому может обращаться внутренняя функция, если она определена внутри этой внешней)
- Global (глобальное внутри модуля)
- Built-in (встроенные объекты Python).

Запоминается по правилу LEGB.


6. Как передаются аргументы в функции - по значениям или по ссылке?
В Python аргументы передаются по ссылке на объект, но сами ссылки копируются. Если объект изменяемый (список, словарь) - изменения видны и снаружи функции. Если неизменяемый (int, str, tuple) - создаётся новый объект.


7. Как происходит управление памятью в Python?
Python управляет памятью автоматически: у каждого объекта есть счётчик ссылок - когда на объект больше нет активных ссылок, память освобождается сразу. Для циклических ссылок (когда объекты ссылаются друг на друга) работает отдельный garbage collector, который периодически запускается в фоне.


8. Что такое GIL и разрешена ли многопоточность в Python?
GIL (Global Interpreter Lock) - это глобальная блокировка интерпретатора, которая не позволяет одновременно выполнять код в нескольких потоках. Поэтому для CPU-ограниченных задач многопоточность в Python не даёт прироста. Но она хорошо работает для задач ввода-вывода (I/O) и для вычислений внутри библиотек, реализованных на C/C++ (NumPy или Faiss), которые обходят GIL.


9. Что такое дескриптор?
Дескриптор - это объект с методами set/get/delete который управляет доступом к атрибуту другого класса. На дескрипторах реализованы property, методы класса, статические методы.


10. Как работает менеджер контекста with под капотом?
Менеджер контекста - это объект, у которого определены методы enter и exit. При входе в блок with вызывается enter, при выходе - exit, что гарантирует корректное освобождение ресурсов (например, закрытие файла).


Кто все и так знал - ставьте 🐳

#python@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
124🔥10🐳7🎉3👍1🏆1
Привет, друзья!
Мы привыкли считать, что на табличных данных бустинг не победить: CatBoost, LightGBM и XGBoost долгие годы остаются золотым стандартом. Но последнее время появляется много нейросетевых моделей "из коробки" специально для таблиц, которые даже местами обгоняют классиков. Ниже - подборка трёх наиболее интересных архитектур.

🐱 TabM
Архитектура основана на MLP с параметрически-эффективным ансамблированием. Внутри одной сети обучаются несколько "виртуальных моделей", которые делят общие веса и отличаются только небольшими адаптер-модулями.
Сама модель от Яндекса, на больших бенчмарк-датасетах уверенно конкурирует с CatBoost и LightGBM.
репозиторий на GitHub
статья на arXiv
демо в colab

🐱 TabPFN
Модель на базе трансформера, предобученного на огромном количестве синтетических таблиц. Работает как готовое универсальное решение "из коробки": вы подаёте данные, а она сразу выдаёт предсказания без длительного дообучения. Отлично подходит для малых и средних наборов данных, где нет времени или ресурсов на настройку.
репозиторий на GitHub
официальная страничка решения
демо в colab
статьи: оригинальная и более свежая про улучшенную версию

🐱 SAINT
Transformer-архитектура с вниманием не только по признакам, но и между самими объектами. Дополнительно использует контрастивное предобучение, что помогает лучше выделять структуру данных и устойчиво обучаться.
Особенно хороша на датасетах, где важно учитывать сложные зависимости между объектами, а также для задач с большим числом категориальных признаков.
репозиторий на GitHub
статья на arXiv

Судя по бенчмаркам, эти архитектуры полезны на больших и сложных таблицах с множеством признаков/категорий, где классический бустинг может упираться в ресурсы. На простых или небольших датасетах легендарное Boost-трио пока надёжнее и проще в настройке🐈🐈🐈


Удачных экспериментов и высоких метрик!

#classic_ml@data_easy
#dl@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥107👏2👍1
Привет, друзья!
Сегодня - короткая подборка роадмапов и ресурсов по изучению DS-ML. Всё проверенное и пригодное для подготовки к интервью и планирования обучения.

🐾 Матрицы компетенций от AndersenLab
Показывает, какие навыки ожидаются на разных грейдах и уровнях, удобно для формирования чек-листа роста и оценки прогресса.
ссылка (выбирайте Python в специализации и AI/DS/DE/ML в Skill category)

🐾 Machine Learning Roadmap от MachineLearningMastery
Большая пошаговая инструкция: от математики и базовых алгоритмов до продакшена и MLOps, где расписаны все шаги со ссылками на книги, полезные статьи и курсы.
ссылка

🐾 Deep-ML - практические ML/DL задачки
Онлайн-платформа с наборами реальных задач по ML/DL/NLP/CV. Формат близок к продакшену: нужно думать не только о модели, но и о фичах, пайплайнах, метриках. Есть задания для прокачки инженерных навыков.
ссылка

🐾 NeetCode - roadmap + LeetCode-style подготовка
Сайт, посвященный алгоритмам и структурам данных: задачи собраны в тематические дорожки (arrays, trees, graphs и т.д.), есть разборы и объяснения. По духу похож на LeetCode, но структурированнее и понятнее для быстрой подготовки.
ссылка

😎 Рецепт, как собрать из этого рабочий план:
1. Берём матрицу компетенций, отмечаем свои навыки и пробелы, получаем список приоритетов.
2. По роадмапам строим порядок изучения и выбираем подходящие ресурсы.
3. Подключаем практику: задачи на Deep-ML, вопросы для повторения, тренировка алгоритмов и структур.

А ещё на прошедшей неделе в канале стукнуло 💯 подписчиков!

Спасибо каждому, кто читает, комментирует, задаёт вопросы и просто остаётся здесь.
Этот канал начинался как небольшой личный проект, а превратился в сообщество, где можно вместе учиться и расти в Data Science.
Дальше - больше💜

#карьера@data_easy
Please open Telegram to view this post
VIEW IN TELEGRAM
2🔥18❤‍🔥118🥰21🏆1