✍️ Разбираем задачи прошедшей недели
1️⃣ По умолчанию для новых тензоров в PyTorch параметр requires_grad установлен в False. Он указывает, нужно ли вычислять градиенты для тензора во время операций обратного распространения ошибки. Чтобы добиться этого, следует явно установить requires_grad=True при создании тензора.
2️⃣ Для классической линейной регрессии действует предположение о том, что дисперсия ошибок модели остаётся постоянной на протяжении всех значений независимых переменных. Гетероскедастичность — это нарушение данного предположения. То есть наличие гетероскедастичности можно заподозрить, если отклонения наблюдений от линии выборочной регрессии (остатки) достаточно сильно различаются.
3️⃣ Здесь нужно считать так:
- Первое умножение весов и прибавление смещений: 2*1 + 1 и 2*2 — 5 —> 3 и -1.
- Первое применение Relu: relu(3) = 3 и relu(-1) = 0.
- Второе умножение весов и прибавление смещений: 3*-2 + 0*4 = —6. —6 + 10 = 4.
- Второе применение Relu: relu(4) = 4.
4️⃣ Название Adam можно расшифровать как ADAptive Momentum. Этот метод объединяет две идеи: использование момента и адаптивных скоростей обучения. Вместо того чтобы адаптировать скорость обучения параметров на основе среднего первого момента, как в RMSProp, Adam также использует среднее значение вторых моментов градиентов.
5️⃣ Хорошее объяснение для этой задачи было дано в комментариях.
#разбор_задач
1️⃣ По умолчанию для новых тензоров в PyTorch параметр requires_grad установлен в False. Он указывает, нужно ли вычислять градиенты для тензора во время операций обратного распространения ошибки. Чтобы добиться этого, следует явно установить requires_grad=True при создании тензора.
2️⃣ Для классической линейной регрессии действует предположение о том, что дисперсия ошибок модели остаётся постоянной на протяжении всех значений независимых переменных. Гетероскедастичность — это нарушение данного предположения. То есть наличие гетероскедастичности можно заподозрить, если отклонения наблюдений от линии выборочной регрессии (остатки) достаточно сильно различаются.
3️⃣ Здесь нужно считать так:
- Первое умножение весов и прибавление смещений: 2*1 + 1 и 2*2 — 5 —> 3 и -1.
- Первое применение Relu: relu(3) = 3 и relu(-1) = 0.
- Второе умножение весов и прибавление смещений: 3*-2 + 0*4 = —6. —6 + 10 = 4.
- Второе применение Relu: relu(4) = 4.
4️⃣ Название Adam можно расшифровать как ADAptive Momentum. Этот метод объединяет две идеи: использование момента и адаптивных скоростей обучения. Вместо того чтобы адаптировать скорость обучения параметров на основе среднего первого момента, как в RMSProp, Adam также использует среднее значение вторых моментов градиентов.
5️⃣ Хорошее объяснение для этой задачи было дано в комментариях.
#разбор_задач
👍7
✍️ Очередной воскресный разбор задач
1️⃣ Log Loss — это одна из функций потерь, используемая в задаче классификации. Основывается на вероятностной модели. Чтобы вычислить вероятность получения исходной выборки согласно предсказаниям модели, перемножаются вероятности каждого отдельного y при условии набора признаков x. Получившуюся таким образом функцию правдоподобия нужно максимизировать. Однако максимизировать произведение достаточно сложно, поэтому берётся логарифм. Кроме того, выражение преобразуется для того, чтобы от задачи максимизации перейти к задаче минимизации.
Причина, по которой Log Loss сильнее штрафует за уверенные и неверные прогнозы, заключается в свойствах логарифмической функции. Когда модель делает уверенное предсказание (то есть, pi близко к 1 для истинного класса 1 или pi близко к 0 для истинного класса 0), и это предсказание верно, логарифмический компонент приближается к 0, что приводит к меньшему значению потерь. Однако, если модель делает уверенное, но ошибочное предсказание (pi близко к 1, когда истинный класс 0, или pi близко к 0, когда истинный класс 1), логарифмический компонент стремится к бесконечности.
2️⃣ Рассмотрим, как работают операторы and и or в Python.
▪️and возвращает первый операнд, если он ложен, иначе возвращает второй операнд.
▪️or возвращает первый операнд, если он истинен, иначе возвращает второй операнд.
Таким образом, в этой задаче в переменную a (5 and 10) запишется 10. В переменную b (5 or 10) запишется 5. Верным ответом будет 30.
3️⃣ В данном объединении используется метод outer. Он работает как FULL JOIN в SQL, то есть полное внешнее объединение. Включаются все строки из обеих таблиц. Если совпадений по ключу нет, в результирующем DataFrame для отсутствующих значений вставляется NaN.
#разбор_задач
1️⃣ Log Loss — это одна из функций потерь, используемая в задаче классификации. Основывается на вероятностной модели. Чтобы вычислить вероятность получения исходной выборки согласно предсказаниям модели, перемножаются вероятности каждого отдельного y при условии набора признаков x. Получившуюся таким образом функцию правдоподобия нужно максимизировать. Однако максимизировать произведение достаточно сложно, поэтому берётся логарифм. Кроме того, выражение преобразуется для того, чтобы от задачи максимизации перейти к задаче минимизации.
Причина, по которой Log Loss сильнее штрафует за уверенные и неверные прогнозы, заключается в свойствах логарифмической функции. Когда модель делает уверенное предсказание (то есть, pi близко к 1 для истинного класса 1 или pi близко к 0 для истинного класса 0), и это предсказание верно, логарифмический компонент приближается к 0, что приводит к меньшему значению потерь. Однако, если модель делает уверенное, но ошибочное предсказание (pi близко к 1, когда истинный класс 0, или pi близко к 0, когда истинный класс 1), логарифмический компонент стремится к бесконечности.
2️⃣ Рассмотрим, как работают операторы and и or в Python.
▪️and возвращает первый операнд, если он ложен, иначе возвращает второй операнд.
▪️or возвращает первый операнд, если он истинен, иначе возвращает второй операнд.
Таким образом, в этой задаче в переменную a (5 and 10) запишется 10. В переменную b (5 or 10) запишется 5. Верным ответом будет 30.
3️⃣ В данном объединении используется метод outer. Он работает как FULL JOIN в SQL, то есть полное внешнее объединение. Включаются все строки из обеих таблиц. Если совпадений по ключу нет, в результирующем DataFrame для отсутствующих значений вставляется NaN.
#разбор_задач
❤4
✍️ Разбираем задачи прошедшей недели
1️⃣ В строковых литералах Python обратный слеш \ используется для экранирования специальных символов, таких как \n для новой строки или \t для табуляции. В данном случае двойной обратный слеш \\ интерпретируется как один обратный слеш, а символ t после него остаётся просто буквой. Вывод будет — '2\t4'.
2️⃣ Кросс-валидация, по сути, эмулирует наличие тестовой выборки, которая не участвует в обучении, но для которой известны правильные ответы. При этом можно систематически изменять гиперпараметры модели, чтобы найти такую комбинацию, которая даёт лучшую производительность на разных подмножествах данных. Это обычно достигается с помощью таких методов, как Grid Search или Random Search.
3️⃣ Функция np.linalg.solve(A, b) решает систему уравнений, которая выглядит так:
3x1+x2=9
x1+2x2=8
Её решением будет [2. 3.]
#разбор_задач
1️⃣ В строковых литералах Python обратный слеш \ используется для экранирования специальных символов, таких как \n для новой строки или \t для табуляции. В данном случае двойной обратный слеш \\ интерпретируется как один обратный слеш, а символ t после него остаётся просто буквой. Вывод будет — '2\t4'.
2️⃣ Кросс-валидация, по сути, эмулирует наличие тестовой выборки, которая не участвует в обучении, но для которой известны правильные ответы. При этом можно систематически изменять гиперпараметры модели, чтобы найти такую комбинацию, которая даёт лучшую производительность на разных подмножествах данных. Это обычно достигается с помощью таких методов, как Grid Search или Random Search.
3️⃣ Функция np.linalg.solve(A, b) решает систему уравнений, которая выглядит так:
3x1+x2=9
x1+2x2=8
Её решением будет [2. 3.]
#разбор_задач
👍6
✍️ Воскресный разбор задач
Сегодня рассмотрим одну задачу, которая поднимает любопытный вопрос.
🔹 При выполнении кода np.array(0) / np.array(0) Python выдаст предупреждение о делении на ноль и вернёт nan (Not a Number). Это стандартное поведение для таких операций.
🔹 При выполнении операции целочисленного деления np.array(0) // np.array(0) Python также сгенерирует предупреждение, но выведет ноль. Это не совсем нормальное поведение. И разработчики NumPy об этом знают.
В репозитории проекта существует issue с описанием проблемы. Автор поясняет, что целью было реализовать поведение при делении на ноль у целых чисел, у которых нет nan. Было решено просто взять рандомное значение (0) и возвращать его вместо nan. Однако, по мнению автора, это может порождать неожиданные проблемы, так как отловить ошибку становится затруднительно. С ним, впрочем, другие члены команды не согласны. Issue открыт до сих пор. Поэтому единственный выход — помнить о таком исключении.
#разбор_задач
Сегодня рассмотрим одну задачу, которая поднимает любопытный вопрос.
🔹 При выполнении кода np.array(0) / np.array(0) Python выдаст предупреждение о делении на ноль и вернёт nan (Not a Number). Это стандартное поведение для таких операций.
🔹 При выполнении операции целочисленного деления np.array(0) // np.array(0) Python также сгенерирует предупреждение, но выведет ноль. Это не совсем нормальное поведение. И разработчики NumPy об этом знают.
В репозитории проекта существует issue с описанием проблемы. Автор поясняет, что целью было реализовать поведение при делении на ноль у целых чисел, у которых нет nan. Было решено просто взять рандомное значение (0) и возвращать его вместо nan. Однако, по мнению автора, это может порождать неожиданные проблемы, так как отловить ошибку становится затруднительно. С ним, впрочем, другие члены команды не согласны. Issue открыт до сих пор. Поэтому единственный выход — помнить о таком исключении.
#разбор_задач
👍4❤1