1️⃣ Как устроен dict в Python?
dict в Python — это хеш-таблица с открытой адресацией. Пары (ключ, значение) хранятся в массивах, размер которых увеличивается при заполнении ~2/3. Ключ хешируется через hash(), индекс определяется по хешу. С Python 3.6+ ключи и значения хранятся раздельно (split table) для экономии памяти.
Коллизии решаются квадратичным пробингом: при совпадении ячеек ищется следующая свободная по формуле (hash + perturb) & mask, где perturb уменьшается на каждом шаге. Это помогает избежать кластеризации и сохранять эффективность.
2️⃣ Как кросс-валидация помогает в борьбе с переобучением?
Кросс-валидация — это способ оценки обобщающей способности модели: данные делятся на K частей, модель обучается на K−1 и проверяется на оставшейся, повторяя процесс K раз. Это позволяет:
- выявить переобучение (если валидационные ошибки выше тренировочных);
- получить более стабильную метрику качества;
- подобрать устойчивые гиперпараметры;
- использовать данные эффективнее (вся выборка участвует в обучении и проверке).
3️⃣ Как работать с пропущенными данными?
Как работать с пропущенными данными (по частоте использования):
1. Удаление — строки или столбцы, если пропусков мало или колонка бесполезна соответсвенно.
2. Простая статистика по признакам — среднее, медиана, мода, константа и другие.
3. Маскирование — добавить `is_missing` признак, пропуски заменить фикс-значением.
4. Иммутация по другим фичам — KNN, деревья, SMOTE. Точнее, но дольше и сложнее.
5. Модели с поддержкой NaN — CatBoost, XGBoost и др. умеют обрабатывать NaN сами.
6. Генеративные методы — VAE, GAN, редко и сложно, для особых задач.
#собеседования_MLinside