Data Science | Вопросы собесов
Открыть в Telegram
Сайт: https://easyoffer.ru/ Все каналы: t.me/+xGeAw6ckJ4liYzQy Контакт для рекламы: @sendme_ads
Больше4 876
Подписчики
-224 часа
-97 дней
-2630 дней
Архив постов
Как зарабатывать на мобильной игре
Как привлекать пользователей, работать с монетизацией и развивать мобильную игру в 2026 году?
Обсудим вместе с экспертами игровой индустрии России на RuStore Mobile GameDev Conf. 2 ноября, Москва + онлайн.
Участие бесплатное, по регистрации
Зарегистрироваться
#реклама 16+
rustore.ru
О рекламодателе
🤔 Сравнение архитектуры RNN, CNN, трансформера?
RNN обрабатывает данные последовательно и хорошо работает с временными рядами или текстами, но страдает от проблем с градиентами и плохо масштабируется. CNN извлекает локальные признаки через свёртки, изначально предназначен для изображений, но может применяться к тексту. Трансформер использует механизм внимания, обрабатывает всё параллельно и учитывает контекст целиком, что делает его эффективным в работе с языком и последовательностями.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Капсульная коллекция в Т-Шопе
Повод порадовать себя и разнообразить гардероб. Смотри, какие вещи созданы для плавного перехода из будней в выходные.
Посмотреть каталог
#реклама
tbank-online.com
О рекламодателе
🤔 Зачем нужен self super?
В Python self и super() используются в контексте классов и объектно-ориентированного программирования (ООП). Они играют важные роли в определении и управлении поведением классов и их экземпляров.
🚩self
self — это ссылка на текущий экземпляр класса. Используется внутри методов класса для доступа к атрибутам и методам этого же объекта. Это не ключевое слово в Python, а просто соглашение между программистами о названии первого аргумента метода в классе. Использование self позволяет однозначно указать, что операция или вызов метода относится к текущему объекту.
class Car:
def __init__(self, make, model):
self.make = make
self.model = model
def display_info(self):
print(f"Автомобиль {self.make} модель {self.model}")
car = Car("Toyota", "Corolla")
car.display_info() # Вывод: Автомобиль Toyota модель Corolla
🚩super()
super() используется для вызова методов родительского класса. Это полезно, когда происходит наследование, и вы хотите расширить или изменить поведение методов в наследуемом классе, при этом не переопределяя родительскую функциональность полностью. super() возвращает временный объект родительского класса, через который можно вызывать его методы.
class Vehicle:
def __init__(self, category):
self.category = category
class Car(Vehicle):
def __init__(self, make, model):
super().__init__('Transport') # Вызов __init__ родительского класса
self.make = make
self.model = model
car = Car("Toyota", "Corolla")
print(car.category) # Вывод: Transport
Ставь 👍 и забирай 📚 Базу знаний🤔 Что такое map оценка?
MAP (Mean Average Precision) — это метрика, используемая для оценки качества ранжирования в задачах, где важен порядок релевантных результатов. Она вычисляется как среднее значение Average Precision (AP) для нескольких запросов, где AP измеряет точность на каждой позиции релевантного элемента. MAP часто применяется в системах поиска и рекомендаций для оценки точности ранжированных ответов.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Чем нейросеть отличается от бустинга над линейными моделями?
Нейросети и бустинг над линейными моделями представляют собой два сильно различающихся подхода к машинному обучению. Оба подхода могут использоваться для решения задач классификации и регрессии, но их архитектуры, способы обучения и области применения значительно отличаются.
🚩Нейросети
Это мощные вычислительные системы, вдохновлённые структурой и функционированием мозга. Они состоят из слоёв узлов, соединённых синапсами с весами, которые могут обучаться и адаптироваться к различным данным.
🟠Глубина и сложность
Нейросети могут включать множество слоёв (глубокие нейросети), что позволяет им улавливать сложные иерархические закономерности в данных.
🟠Нелинейность
Благодаря применению нелинейных активационных функций, нейросети могут моделировать сложные нелинейные отношения между входными и выходными данными.
🟠Обучение
Обычно обучаются с использованием методов, основанных на градиентном спуске, таких как обратное распространение ошибок.
🟠Приложения
Особенно успешны в задачах, связанных с обработкой изображений, звука, видео и последовательностей данных благодаря специализированным архитектурам (CNN для изображений, RNN для временных рядов).
🚩Бустинг над линейными моделями
Это метод ансамблевого обучения, который улучшает прогностическую способность путём последовательного обучения набора более слабых моделей, каждая из которых стремится исправить ошибки предыдущих моделей.
🟠Слабые ученики
Бустинг часто использует простые модели (например, небольшие деревья решений или линейные модели) как "слабых учеников".
🟠Последовательное обучение
Модели добавляются последовательно, и каждая новая модель фокусируется на тех аспектах данных, которые были обработаны предыдущими моделями недостаточно хорошо.
🟠Линейные модели
Если бустинг применяется над линейными моделями, это означает использование линейных моделей как базовых учеников, которые в совокупности стремятся уловить более сложные зависимости в данных через ансамбль.
🟠Применение
Эффективен в задачах с табличными данными, где важны точность и интерпретируемость, таких как кредитный скоринг или прогнозирование оттока клиентов.
🚩Основные различия
🟠Структурная сложность
Нейросети, как правило, обладают более сложной структурой, чем ансамбли линейных моделей в бустинге.
🟠Область применения
Нейросети лучше работают с данными, требующими обработки больших объемов неструктурированной информации (изображения, текст, звук), в то время как бустинг над линейными моделями чаще используется для структурированных табличных данных.
🟠Интерпретируемость
Бустинг над линейными моделями обычно обеспечивает лучшую интерпретируемость по сравнению с нейросетями, так как последние из-за своей сложности и глубины могут вести себя как "чёрные ящики".
🟠Обучение и вычислительные ресурсы
Нейросети часто требуют значительных вычислительных ресурсов, особенно для больших данных и глубоких архитектур, в то время как бустинг может быть более эффективен с точки зрения вычислений, особенно при использовании линейных моделей.
Ставь 👍 и забирай 📚 Базу знаний
🤔 При свёртке картинки HxW матрицей 3x3, что получится в итоге?
Результирующий размер изображения будет (H−2)×(W−2)(H-2) \times (W-2), если не использовать дополнение, так как свёртка "обрезает" края.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Примеры моделей с большим смещением и большой дисперсией?
В машинном обучении примеры моделей, демонстрирующих большое смещение (bias) или большую дисперсию (variance), иллюстрируют различные аспекты переобучения и недообучения.
🚩Модели с Большим Смещением (High Bias)
Часто слишком упрощены, что приводит к недообучению. Они не способны захватывать сложность или основные закономерности в данных.
🟠Линейная регрессия
Хотя линейная регрессия может быть мощным инструментом для предсказания, она предполагает линейную зависимость между входными и выходными переменными. Если истинная зависимость в данных носит нелинейный характер, линейная модель не сможет адекватно моделировать данные и будет иметь высокое смещение.
🟠Логистическая регрессия
Подобно линейной регрессии, логистическая регрессия предполагает линейное разделение классов. В случаях, когда классы не разделимы линейно, модель будет иметь высокое смещение и не сможет корректно классифицировать данные.
🚩Модели с Большой Дисперсией (High Variance)
Обычно слишком сложные, с большим количеством параметров относительно объёма обучающих данных. Это может привести к переобучению, когда модель хорошо работает на обучающих данных, но плохо генерализует на новых данных.
🟠Деревья решений
Деревья решений, особенно без ограничения глубины или других методов регуляризации, склонны к переобучению. Они могут создавать очень сложные структуры, которые идеально подходят под обучающие данные, включая шум, но не обобщаются на новые данные.
🟠Нейронные сети
Большие и глубокие нейронные сети могут обладать очень высокой дисперсией, особенно если количество обучающих примеров недостаточно для их сложности. Они способны улавливать сложнейшие закономерности и взаимосвязи, но могут "запоминать" данные, на которых они были обучены, вместо того чтобы изучать обобщающие закономерности.
Ставь 👍 и забирай 📚 Базу знаний
🤔 Как строится дерево?
Дерево решений строится путем рекурсивного деления данных на подмножества на основе наилучших признаков, которые уменьшают неопределенность (например, с использованием информации энтропии или критерия Джини). Каждый узел в дереве представляет решение на основе одного признака, а ветви — возможные исходы. Процесс деления продолжается до тех пор, пока все данные в узлах не будут однородными или не будет достигнуто ограничение глубины. Листья дерева содержат финальные предсказания для данных.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Как batch norm помогает в обучении моделей?
Batch Normalization (нормализация батчей) — это техника, которая улучшает обучение нейронных сетей путем нормализации промежуточных слоев. Это помогает ускорить обучение и делает модель более устойчивой. Впервые она была представлена в статье "Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift" (2015) Сергеем Иоффе и Кристианом Шиллером.
🚩Как работает Batch Normalization?
🟠Нормализация данных:
В каждой мини-партии (batch) данных нормализация применяется к активациям нейронов. Это означает, что среднее значение активаций по партии становится равным нулю, а стандартное отклонение — единице.
🟠Обратное масштабирование и смещение:
После нормализации вводятся два параметра: \( \gamma \) и \( \beta \), которые масштабируют и смещают нормализованные значения: Эти параметры позволяют модели сохранить способность к обучению любых функций, независимо от нормализации.
🚩Плюсы
➕Ускорение обучения:
Нормализация уменьшает внутренний коварный сдвиг (internal covariate shift), что позволяет использовать более высокие скорости обучения.
➕Стабилизация градиентов:
Нормализация помогает избежать проблем с затухающими и взрывающимися градиентами, делая обучение более стабильным.
➕Регуляризация:
Batch Normalization оказывает легкий регуляризационный эффект, снижая необходимость использования других регуляризационных методов, таких как Dropout.
➕Меньшая зависимость от начальной инициализации:
Нормализация делает модель менее чувствительной к начальной инициализации параметров, упрощая настройку гиперпараметров.
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, BatchNormalization, Activation
from tensorflow.keras.optimizers import Adam
# Создание модели
model = Sequential()
# Добавление слоев с Batch Normalization
model.add(Dense(64, input_shape=(784,)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dense(64))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dense(10, activation='softmax'))
# Компиляция модели
model.compile(optimizer=Adam(), loss='categorical_crossentropy', metrics=['accuracy'])
# Обучение модели
# model.fit(x_train, y_train, batch_size=32, epochs=10, validation_data=(x_val, y_val))
Ставь 👍 и забирай 📚 Базу знанийХотите разобраться, как создаются Telegram-боты?
Telegram-бот кажется простым для пользователя, но как он получает сообщение и решает, что ответить?
На открытом уроке разберём этот процесс на практике. Преподаватель в режиме лайвкодинга создаст бота на Python с библиотекой aiogram — от первого запуска до рабочего диалога с кнопками.
Вы узнаете, как получить токен, обрабатывать команды и сообщения, добавлять кнопки и ответы на действия пользователя.
В конце проверите работу готового бота прямо в Telegram. Урок подойдёт начинающим Python-разработчикам. 10 ноября в 20:00 МСК.
Зарегистрироваться
#реклама 16+
otus.ru
О рекламодателе
🤔 Как валидировать временные ряды?
Валидация по времени включает разбиение данных на интервалы с учётом временной последовательности. Методы: time series split (скользящее окно), расширяемое окно или кросс-валидация по времени.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔 Что такое AUC ?
Это метрика, используемая для оценки качества бинарного классификатора. Она измеряет площадь под кривой ROC (Receiver Operating Characteristic). ROC-кривая строится по совокупности всех возможных порогов классификации и отражает отношение истинно положительных срабатываний (True Positive Rate, TPR) к ложноположительным срабатываниям (False Positive Rate, FPR).
🚩ROC-кривая
Ось Y показывает True Positive Rate (TPR), также известный как Recall или Sensitivity
\text{TPR} = \frac{TP}{TP + FN}
Ось X показывает False Positive Rate (FPR)
\text{FPR} = \frac{FP}{FP + TN}
AUC (Area Under the ROC Curve)
Это числовое значение, представляющее площадь под ROC-кривой. Значение AUC варьируется от 0 до 1, где:
0.5 означает, что модель не лучше случайного угадывания.
1 означает, что модель идеально разделяет положительные и отрицательные классы.
Чем выше значение AUC, тем лучше модель различает между положительными и отрицательными примерами.
🚩Плюсы
➕Инвариантность к порогу классификации
Оценивает модель по всем возможным порогам, а не только по одному фиксированному порогу.
➕Сравнение моделей
Позволяет сравнивать разные модели и их способность различать между положительными и отрицательными примерами.
➕Робустность к дисбалансу классов
Хорошо работает даже в случае несбалансированных классов.
import numpy as np
from sklearn.metrics import roc_curve, auc, roc_auc_score
import matplotlib.pyplot as plt
# Пример истинных меток классов
y_true = [0, 0, 1, 1, 0, 1, 0, 0, 1, 1]
# Пример предсказанных вероятностей для положительного класса
y_scores = [0.1, 0.4, 0.35, 0.8, 0.2, 0.7, 0.1, 0.3, 0.9, 0.6]
# Вычисление ROC-кривой
fpr, tpr, thresholds = roc_curve(y_true, y_scores)
# Вычисление AUC
roc_auc = auc(fpr, tpr)
roc_auc_sklearn = roc_auc_score(y_true, y_scores)
print(f"AUC: {roc_auc}")
print(f"AUC (sklearn): {roc_auc_sklearn}")
# Построение ROC-кривой
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label=f'ROC curve (area = {roc_auc:.2f})')
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic (ROC)')
plt.legend(loc='lower right')
plt.show()
Ставь 👍 и забирай 📚 Базу знанийКакие ИИ-инструменты брать в работу и для каких задач?
После этого урока картина станет понятнее: что подходит для ежедневных задач Python-разработчика, а что можно не пробовать.
19 ноября в 20:00 онлайн. разберем примеры из реальной разработки и поговорим о том, как не тратить время зря.
📚Курс «Python-разработчик. Продвинутый уровень» стартует 30 ноября.
Зарегистрироваться
#реклама 16+
otus.ru
О рекламодателе
🤔 Какие магические методы в python знаешь?
Магические методы в Python — это специальные методы, которые начинаются и заканчиваются двойным подчеркиванием. Примеры включают `__init__` (конструктор класса), `__str__` (представление объекта в виде строки), `__len__` (возвращает длину объекта) и `__getitem__` (обращение к элементам по индексу). Также есть методы, такие как `__add__` для перегрузки операторов и `__call__`, позволяющий объекту вести себя как функция. Эти методы позволяют кастомизировать поведение объектов Python.
Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
🤔Зачем нужен yield вместо return в функции?
Ключевое слово yield используется для создания генератора, который является разновидностью итератора. В отличие от обычных функций, которые возвращают значения с помощью
return и завершают своё выполнение, функции с yield возвращают генератор, который при каждом вызове продолжает выполнение функции с того места, где было сделано последнее yield.
🚩Плюсы
➕Экономия памяти
Генераторы вычисляют значения по требованию (lazy evaluation), что позволяет им обрабатывать даже очень большие последовательности данных, не загружая всю последовательность в память. Это особенно полезно для обработки больших файлов или потоков данных.
➕Удобство в управлении состоянием
Функции с yield удобны, когда нужно управлять сложным состоянием внутри функции. Функция может "замораживать" своё состояние между вызовами и продолжать выполнение с того места, где она остановилась.
➕Составление итераторов
Создание итератора с помощью yield значительно упрощается по сравнению с классами итераторов, которые требуют определения методов __iter__() и __next__().
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
# Создание генератора для первых 10 чисел Фибоначчи
fib_gen = fibonacci(10)
# Итерация по генератору
for num in fib_gen:
print(num)
Ставь 👍 и забирай 📚 Базу знаний🔥 Скрытые вакансии с удаленной работой для DS / ML, которые нигде больше не публикуются. Напрямую от компаний, с контактами рекрутеров.
🔹 Data Science ML | Вакансии
🔹 Data Engineer | Вакансии
🔹 Аналитик Данных | Вакансии
🔸 Все каналы с вакансиями
Нейросети для бизнеса с оплатой в рублях от NetAngels
NetAngels AI Studio – единый API к языковым моделям.
-Работайте по официальному договору
-Пополняйте баланс безналичным расчётом в рублях с расчётного счёта компании
-Получайте закрывающие документы автоматически через Диадок
Выбирайте российский агрегатор нейросетей от NetAngels!
Получить консультацию
#реклама 16+
netangels.ru
О рекламодателе
🤔 Каким образом память в питоне ощищается и выделяется?
В Python память выделяется и очищается с использованием механизмов управления памятью, таких как счетчик ссылок и сборка мусора (garbage collection).
🚩Выделение памяти
🟠Куча (Heap)
Python использует кучу для динамического выделения памяти объектам. Куча управляется менеджером памяти Python.
🟠Менеджер памяти
Менеджер памяти Python выделяет память из кучи и распределяет ее для объектов. Он отслеживает свободные и занятые блоки памяти.
🟠Создание объектов
Когда создается новый объект, менеджер памяти выделяет необходимый блок памяти из кучи. Каждый объект имеет заголовок, который содержит метаинформацию, такую как тип объекта и счетчик ссылок, и область данных, где хранятся значения.
🚩Очистка памяти
🟠Счетчик ссылок (Reference Counting)
Каждый объект в Python имеет счетчик ссылок, который отслеживает количество ссылок на этот объект. Счетчик ссылок увеличивается, когда создается новая ссылка на объект, и уменьшается, когда ссылка удаляется. Когда счетчик ссылок объекта становится равным нулю, объект считается неиспользуемым и подлежит удалению.
🟠Сборка мусора (Garbage Collection)
Python использует сборщик мусора для управления памятью и удаления неиспользуемых объектов. Основной алгоритм сборки мусора в Python основан на обнаружении циклических ссылок, которые невозможно удалить с помощью простого счетчика ссылок.
🟠Обнаружение циклов
Сборщик мусора периодически просматривает объекты и их ссылки, чтобы найти циклы (группы объектов, ссылающихся друг на друга). Объекты, которые не имеют внешних ссылок (счетчик ссылок равен нулю) и находятся в цикле, считаются неиспользуемыми и удаляются.
import sys
import gc
# Создание объекта и проверка счетчика ссылок
a = [1, 2, 3]
print(sys.getrefcount(a)) # Обычно возвращает 2, так как есть ссылка a и временная ссылка для вызова функции
# Увеличение счетчика ссылок
b = a
print(sys.getrefcount(a)) # Теперь возвращает 3, так как есть ссылки a, b и временная ссылка для вызова функции
# Уменьшение счетчика ссылок
del b
print(sys.getrefcount(a)) # Теперь возвращает 2, так как ссылка b удалена
# Принудительный запуск сборщика мусора
gc.collect()
🚩Память и большие данные
При работе с большими объемами данных полезно использовать более эффективные структуры данных и библиотеки, такие как numpy, которые позволяют более эффективно управлять памятью.
import numpy as np
# Создание большого массива с использованием numpy
large_array = np.zeros((1000, 1000))
Ставь 👍 и забирай 📚 Базу знанийОткрытый урок: бизнес-логика в микросервисах
Разработка в микросервисах — это не только разбиение на сервисы, но и грамотное распределение логики.
22 октября в 19:00 мск — открытый урок для разработчиков и архитекторов. Узнаете, где должна жить бизнес-логика. Запишитесь!
Зарегистрироваться
#реклама 16+
otus.ru
О рекламодателе
