Популярные вопросы для интервью по науке о данных, любезно предоставленные Интернетом, теперь с ответами.

1. В чем разница между HAVING и WHERE в SQL-запросе?

Предложения WHERE и HAVING используются в запросах SQL для фильтрации записей на основе заданных условий. Однако у них есть несколько ключевых отличий.

Разница между HAVING и WHERE в SQL-запросе заключается в том, что WHERE используется для фильтрации записей до того, как будут сделаны какие-либо группировки, а HAVING используется для фильтрации значений из группы после группировки. Например, если вы хотите выбрать имена людей, которые зарабатывают более 100 000 долларов, вы должны использовать такое предложение WHERE:

SELECT name, last_name 
FROM persons 
WHERE year_income > 100000;

Но если вы хотите выбрать фамилии семей, чей общий доход превышает 100 000 долларов, вы должны использовать предложение HAVING, подобное этому:

SELECT last_name, SUM(year_income) AS family_income 
FROM persons 
GROUP BY last_name 
HAVING SUM(year_income) > 100000;

Запрос может содержать как предложение WHERE, так и предложение HAVING. В этом случае предложение WHERE применяется к отдельным строкам, а предложение HAVING — к группам или столбцам.

2. Как Python справляется со сборкой мусора и управлением памятью?

Python выполняет сборку мусора и управление памятью с помощью системы под названием сборка мусора. Сборка мусора — это процесс освобождения интерпретатором неиспользуемой и нежелательной памяти для наших программ. Python использует подсчет ссылок в качестве основного метода сборки мусора. Подсчет ссылок означает, что интерпретатор отслеживает, сколько ссылок указывает на объект в памяти. Когда на объект не ссылаются, это означает, что он больше не нужен программе и может быть удален.

Однако сам по себе подсчет ссылок не может справиться с некоторыми случаями циклических ссылок, когда два или более объекта ссылаются друг на друга и создают цикл. Например:

a = []
b = []
a.append(b)
b.append(a)

В этом случае и a, и b имеют по одной ссылке, но они недоступны для какой-либо другой части программы. Чтобы справиться с этими случаями, Python также использует сборщик мусора поколений. Это система, которая периодически сканирует все объекты в памяти и проверяет, доступны они или нет. Если они недоступны, они помечаются для удаления. Сборщик мусора поколений делит объекты на три поколения в зависимости от того, как долго они находятся в памяти. Вновь созданные объекты начинаются с первого поколения (поколение 0), а объекты, пережившие процесс сборки мусора, переходят к более старому поколению (поколению 1 или 2). Старшие поколения сканируются реже, чем младшие, так как в них больше шансов найти долгоживущие объекты.

3. Как вы следите за последними тенденциями / как бы вы представили это здесь?

Это довольно открытый вопрос, лично я бы упомянул множество информационных бюллетеней, за которыми я следил вместе с создателями технического контента в LinkedIn и YouTube, подключил свои сертификаты MOOC и, наконец, упомянул бы сообщества в Slack и Discord.

Что касается моих любимых информационных бюллетеней, вы можете просмотреть мою статью о них:



4. Как вы отслеживаете производительность модели с течением времени?

Чтобы отслеживать производительность модели с течением времени, вам необходимо отслеживать различные показатели, отражающие, насколько хорошо ваша модель достигает намеченных целей и как она ведет себя в производственной среде. Некоторые из общих показателей для мониторинга:

  1. Точность
  2. Отзывать
  3. Точность

Вы можете использовать такие инструменты, как матрицы путаницы и отчет о классификации sklearn, чтобы определить производительность вашей модели. Чтобы обеспечить оптимальную производительность вашей модели, вы можете

  1. Установите график повторного обучения модели и отслеживайте производительность модели до и после повторного обучения. Такой подход гарантирует, что модель обновляется новыми данными, что может помочь повысить ее точность с течением времени.
  2. Отслеживайте производительность модели в режиме реального времени, чтобы обнаруживать любые аномалии или неожиданное поведение. Это можно сделать с помощью инструментов мониторинга, которые регистрируют входные данные, выходные данные и показатели производительности модели в режиме реального времени.

Не существует универсального метода, подходящего для всех, но я нашел эти статьи на эту тему интересными:





5. Опишите разницу между обычным случайным лесом и методом повышения градиента, таким как XGBoost?

Оба алгоритма создают деревья решений, и оба являются «ансамблевыми» моделями. Разница заключается в базовом алгоритме. XGBoost означает «Экстремальное повышение градиента» и использует алгоритм повышения, а Random Forest использует бэггинг.

  • Случайные леса создают набор деревьев решений, каждое из которых обучается на случайном подмножестве данных и функций. Окончательный прогноз получается путем усреднения (для регрессии) или голосования (для классификации) прогнозов всех отдельных деревьев. Случайные леса легко распараллеливаются, устойчивы к переоснащению и хорошо обрабатывают пропущенные значения и выбросы. Однако они могут быть медленными для обучения и тестирования, трудными для интерпретации и менее точными, чем повышение градиента для некоторых задач.
  • Повышение градиента создает последовательность деревьев решений, каждое из которых обучается на остаточных ошибках предыдущих деревьев. Окончательный прогноз получается путем сложения (для регрессии) или умножения (для классификации) прогнозов всех отдельных деревьев. Повышение градиента может обеспечить более высокую точность и производительность, чем случайные леса, в некоторых задачах, особенно при использовании оптимизированных реализаций, таких как XGBoost. Однако они могут быть склонны к переоснащению, чувствительны к гиперпараметрам и труднее распараллеливать, чем случайные леса.

Если бы у меня был выбор, я бы попробовал оба и посмотрел, какой из них работает лучше.

6. Опишите переоснащение

Переобучение — это явление, которое возникает, когда модель машинного обучения обучается на наборе данных до такой степени, что она начинает соответствовать шуму в данных, а не основному шаблону. Другими словами, модель становится слишком сложной и начинает запоминать обучающие данные вместо того, чтобы обобщать новые, невидимые данные. В результате модель может хорошо работать на обучающих данных, но не будет хорошо работать на тестовых или проверочных данных. Переобучение — это распространенная проблема в машинном обучении, которая может быть вызвана слишком сложной моделью, слишком большим объемом обучения или недостаточным количеством данных. Чтобы уменьшить переоснащение:

  1. Дополнительные данные (PS: также ответ на вопрос ниже)
  2. Меньшая сложность (вы можете изменить гиперпараметры, чтобы сделать модель менее сложной).
  3. Больше регуляризации

7. Как вы обрабатываете коррелированные признаки в задаче регрессии?

Коррелированные функции — это функции, которые имеют сильную линейную связь друг с другом, что означает, что они имеют тенденцию изменяться вместе предсказуемым образом. Например, рост и вес являются взаимосвязанными характеристиками, поскольку более высокие люди, как правило, весят больше, чем более низкие. Вы можете проверить корреляцию, но извлечь ковариацию между функциями. Сильно коррелированные признаки могут привести к переподгонке моделей и, как правило, нежелательны. Ты можешь

  1. Отбросьте одну из связанных функций (выбор функции)
  2. Создавайте новые функции, которые собирают больше информации или вариаций данных, или преобразуйте коррелированные функции в некоррелированные (разработка функций).
  3. Выполните уменьшение размерности (например, PCA)

8. Чем обратное распространение отличается в RNN и ANN?

Основная причина различия заключается в том, что RNN предназначены для обработки последовательных данных, где выходные данные одного шага возвращаются в качестве входных данных для следующего шага.

В ИНС обратное распространение применяется к каждому слою с прямой связью, когда информация течет от входного слоя к выходному слою. Веса обновляются на основе ошибок, рассчитанных между прогнозируемым выходом и истинным выходом. Процесс обратного распространения в ИНС прост и может быть эффективно выполнен с использованием матричного умножения. К сожалению, из-за петель в сетевой архитектуре RNN простое обратное распространение не работает. RNN используют вариант обратного распространения, называемый обратным распространением во времени (BPTT), для обучения сети. BPTT разворачивает сеть во времени, по сути создавая глубокую нейронную сеть с общими весами для разных временных шагов. Затем ошибки распространяются назад во времени через каждый временной шаг, позволяя сети учиться на прошлых и текущих входных данных.

Одной из проблем использования обратного распространения в RNN является проблема исчезновения и взрыва градиента, когда градиент становится либо слишком маленьким, либо слишком большим для эффективного распространения по сети. Для решения этой проблемы было разработано несколько методов, таких как отсечение градиента и использование механизмов стробирования, таких как долговременная кратковременная память (LSTM) и Gated Recurrent Units (GRU).

Если вы нашли это полезным, рассмотрите возможность хлопать 👏для меня!

Если нет 😞, обратная связь всегда приветствуется! Если вы нашли что-то не так или считаете, что у вас есть лучший ответ, дайте мне знать!

Подписывайтесь на меня: LinkedIn || Гитхаб



Вопросы любезно предоставлены хорошими людьми на Reddit.

СТАНЬТЕ ПИСАТЕЛЕМ на MLearning.ai