Библиотека собеса по Data Science | вопросы с собеседований
4.32K subscribers
424 photos
10 videos
1 file
408 links
Вопросы с собеседований по Data Science и ответы на них.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/7dfb7235

Для обратной связи: @proglibrary_feeedback_bot

Наши каналы: https://t.me/proglibrary/9197
Download Telegram
🧮📐 15 гениев, которые изменили мир математики навсегда

В нашей новой статье читайте о том, как 15 величайших математических умов в истории, от древнегреческого гения Фалеса до современного революционера Мандельброта, своими открытиями в алгебре, геометрии, теории чисел и других областях навсегда изменили облик математики и мира.

🔗 Читать статью
🔗 Зеркало
🤖 Напоминаем, что у нас есть еженедельная email-рассылка, посвященная последним новостям и тенденциям в мире искусственного интеллекта.

В ней:
● Новости о прорывных исследованиях в области машинного обучения и нейросетей
● Материалы о применении ИИ в разных сферах
● Статьи об этических аспектах развития технологий
● Подборки лучших онлайн-курсов и лекций по машинному обучению
● Обзоры инструментов и библиотек для разработки нейронных сетей
● Ссылки на репозитории с открытым исходным кодом ИИ-проектов
● Фильмы, сериалы и книги

👉Подписаться👈
В чём разница между частотной вероятностью и байесовской вероятностью?

Это два разных подхода к интерпретации вероятности, которые часто противопоставляются.

🔹Частотная вероятность
Основывается на идее долгосрочной стабильности частот событий. В этой интерпретации вероятность события определяется как предел относительной частоты его наблюдения в серии однородных независимых испытаний. То есть этот подход предполагает, что вероятность может быть объективно измерена путём повторения эксперимента в одинаковых условиях множество раз.
Пример: вы бросаете справедливый шестигранный кубик большое количество раз и подсчитываете, сколько раз выпадает шестёрка. Если вы бросите кубик 600 раз и обнаружите, что шестёрка выпала 100 раз, то по частотному подходу вероятность выпадения шестёрки на этом кубике будет 100/600 или 1/6.

🔹Байесовская вероятность
Байесовский подход рассматривает вероятность как меру уверенности или степени веры в наступление события. Для определения степени уверенности при получении новой информации в байесовской теории используется теорема Байеса.
Пример: допустим, что у вас есть редкая болезнь, которая встречается у 1 из 10000 человек. Тест на эту болезнь имеет чувствительность 99% (вероятность того, что тест окажется положительным у больного человека) и специфичность 99% (вероятность того, что тест окажется отрицательным у здорового человека). Если ваш тест на болезнь оказался положительным, байесовская вероятность того, что вы действительно больны, будет рассчитываться с учётом этих данных и априорной вероятности заболевания (1/10000), что даст вам другое и, возможно, менее интуитивное значение вероятности, чем простая интерпретация результата теста.

#теория_вероятностей
Что такое отчёт о классификации (classification report)? Как его интерпретировать?

По сути, отчёт о классификации — это сводка о производительности модели-классификатора, представляющая различные метрики. Вот эти метрики:

🔹Точность (Precision) — отношение истинно положительных предсказаний к общему числу предсказанных положительных.
Precision = TP/(TP+FP)
🔹Полнота (Recall) — отношение истинно положительных предсказаний к общему числу фактических положительных.
Recall = TP / (TP + FN)
🔹F1-мера — гармоническое среднее точности и полноты.
F1-мера = 2 * (Точность * Полнота) / (Точность + Полнота)

где,
TP = Истинно положительный
TN = Истинно отрицательный
FP = Ложноположительный
FN = Ложноотрицательный

Отчёт о классификации можно создать, например, с помощью библиотеки scikit-learn, используя функцию classification_report. В такой отчёт также включён показатель support, который указывает на количество фактических вхождений класса в наборе данных.

#машинное_обучение
Какова связь между собственными значениями и собственными векторами в PCA (методе главных компонент)?

В PCA собственные значения и собственные векторы играют ключевую роль в преобразовании исходных данных в новую систему координат.

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

Связь между ними определяется как:

A*V = lambda*V, где
A = ковариационная матрица, полученная из исходной матрицы признаков
V = собственный вектор
lambda = собственное значение.

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

#машинное_обучение
#линейная_алгебра
🐍🗺️ Геокодирование для Data Scientists: вводное руководство с примерами

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

В новой статье разбираем три различных способа геокодирования с помощью Geopy.

🔗 Читать статью
🔗 Зеркало
Почему XGBoost в среднем показывает производительность лучше, чем Случайный лес (Random Forest)?

На самом деле оба алгоритма могут давать хорошие результаты, но XGBoost чаще используется в ML-соревнованиях для достижения наивысшего балла. У этого алгоритма есть несколько полезных свойств:

▫️XGBoost включает в себя механизмы регуляризации. Это помогает уменьшить переобучение и улучшить обобщающую способность модели.
▫️XGBoost строит деревья последовательно: каждое новое дерево исправляет ошибки, сделанные предыдущим.Random Forest же строит деревья параллельно с использованием метода усреднения. Последовательная коррекция ошибок в XGBoost часто приводит к лучшей производительности на многих задачах.
▫️У XGBoost более гибкие гиперпараметры, что улучшает его настройку под датасет.

#машинное_обучение
Хардкорный курс по математике для тех, кто правда любит математику!

Начать с вводных занятий можно здесь, ответив всего на 4 вопроса – https://proglib.io/w/7889d59a

Что вас ждет:

– Вводный урок от CPO курса

– Лекции с преподавателями ВМК МГУ по темам: теория множеств, непрерывность функции, основные формулы комбинаторики, матрицы и операции над ними, градиентный спуск

– Практические задания для закрепления материала и ссылки на дополнительные материалы.

⚡️ Переходите и начинайте учиться уже сегодня – https://proglib.io/w/7889d59a
Please open Telegram to view this post
VIEW IN TELEGRAM
Расскажите про линейные модели: где используются и как обучаются?

Такие модели выявляют линейные зависимости в данных. Наиболее известны линейная и логистическая регрессии. Первая применяется для предсказания значения зависимой переменной, для задачи регрессии. Вторая — для задач классификации.

🎓 Обучение линейных моделей можно проводить с помощью градиентного спуска. Для линейной и логистической регрессии процесс обучения имеет схожие шаги, но различается используемой функцией потерь.
▪️Линейная регрессия.
Её обучение заключается в нахождении оптимальных коэффициентов, или весов, перед признаками в уравнении прямой. Чтобы найти веса с помощью градиентного спуска, сначала нужно инициализировать вектор весов случайными числами. Затем нужно вычислить градиент функции потерь (обычно MSE — среднеквадратичное отклонение) и обновить веса, вычитая из них произведение градиента с learning rate. Шаги повторяют, например, до тех пор, как функция потерь не стабилизируется.
▪️Логистическая регрессия.
Главное отличие от линейной регрессии заключается в функции потерь — здесь используется log-loss (логарифмическая функция потерь). Процедура обновления весов остается схожей.

#машинное_обучение
🐍 Задача про умножение матриц

Условие: Вам даны две матрицы, нужно написать функцию для их умножения. Матрицы могут быть квадратными или прямоугольными.

Решение: Напишем решение на чистом Python
def matrix_multiply(A, B):
# Сначала проверим, можем ли мы вообще перемножить эти матрицы
if len(A[0]) != len(B):
raise ValueError("Number of A columns must equal number of B rows.")

# Инициализируем результирующую матрицу, заполненную нулями
result = [[0 for _ in range(len(B[0]))] for _ in range(len(A))]

# Перемножим матрицы
for i in range(len(A)):
for j in range(len(B[0])):
for k in range(len(B)):
result[i][j] += A[i][k] * B[k][j]

return result

# Проверим функцию на примере
A = [[1, 2, 3],
[4, 5, 6]]

B = [[7, 8],
[9, 10],
[11, 12]]

result = matrix_multiply(A, B)
for row in result:
print(row)


#программирование
#линейная_алгебра
Перечислите этапы разработки ML-приложения

1️⃣ Постановка задачи
На этом этапе также стоит определиться с метриками (бизнес-метриками и DS-метриками), чтобы в дальнейшем оценивать модель. Помимо этого, можно идентифицировать все свои ограничения.
2️⃣ Сбор и предобработка данных
Сюда же относится этап генерации новых признаков. Не исключено, что к этому этапу придётся неоднократно возвращаться.
3️⃣ Разведочный анализ данных
На этом этапе нужно тщательно изучить данные, сформулировать гипотезы.
4️⃣ Обучение модели
Сначала стоит строить бейзлайн — модель без параметров. После этого можно настраивать модели и тестировать их.
5️⃣ Развёртывание ML-модели
На этом этапе необходимо перевести код в промышленный вид. Возможно придётся добавить бэкенд, фронтенд и др. Тут же обычно проводится A/B-тестирование.
6️⃣ Поддержка модели
Стоит подключить dashboard для отслеживания метрик, механизмы для мониторинга работы ML-модели, чтобы вовремя отлавливать ошибки.

#машинное_обучение
🧑‍💻 Статьи для IT: как объяснять и распространять значимые идеи

Напоминаем, что у нас есть бесплатный курс для всех, кто хочет научиться интересно писать — о программировании и в целом.

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

Для кого: для авторов, копирайтеров и просто программистов, которые хотят научиться интересно рассказывать о своих проектах.

👉Материалы регулярно дополняются, обновляются и корректируются. А еще мы отвечаем на все учебные вопросы в комментариях курса.
Как бы вы разработали инструмент распознавания капчи?

Разберём все этапы такого проекта.

✔️ Сбор данных
Необходимо найти датасет с изображениями капчи. Самый простой подходящий набор изображений можно найти, например, на Kaggle. Если нужна специфичная система, то следует заняться сбором картинок самостоятельно.
✔️ Предобработка изображений
Можно преобразовать изображения в подходящий для обработки формат, например, сделать их чёрно-белыми. Также можно расширить датасет, просто изменив уже имеющиеся картинки: повернуть, отразить, исказить и др.
✔️ Выбор и тренировка модели
Самый очевидный выбор — свёрточная нейронная сеть (CNN). Обученную сеть следует проверить на отдельном наборе данных.
✔️ Развёртывание модели
Нужно внедрить модель в приложение или систему, где она будет использоваться. Здесь следует отталкиваться от среды.

#машинное_обучение
Напишите линейную регрессию на Python с нуля

Это один из самых простых алгоритмов. Он включает следующие шаги:
1️⃣ Инициализация параметров.
2️⃣ Вычисление предсказаний.
3️⃣ Вычисление функции потерь.
4️⃣ Обновление параметров с помощью градиентного спуска.
5️⃣ Повторение до сходимости.
import numpy as np

class LinearRegression:
def __init__(self, learning_rate=0.01, n_iters=1000):
self.learning_rate = learning_rate
self.n_iters = n_iters

def fit(self, X, y):
n_samples, n_features = X.shape
self.weights = np.zeros(n_features)
self.bias = 0

for _ in range(self.n_iters):
model_preds = self.predict(X)
dw = (1 / n_samples) * np.dot(X.T, (model_preds - y))
db = (1 / n_samples) * np.sum(model_preds - y)

self.weights -= self.learning_rate * dw
self.bias -= self.learning_rate * db

def predict(self, X):
return np.dot(X, self.weights) + self.bias


#машинное_обучение
#программирование
Please open Telegram to view this post
VIEW IN TELEGRAM
Что делает метод Монте-Карло?

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

Можно также рассматривать метод Монте-Карло как вероятностную модель, которая способна включать в прогнозирование элемент неопределённости или случайности. Это даёт более чёткую картину, чем детерминированный прогноз. Например, для прогнозирования финансовых рисков нужен анализ десятков или сотен факторов. Финансовые аналитики используют моделирование методом Монте-Карло для определения вероятности каждого возможного исхода.

Процесс моделирования состоит из таких шагов:
▫️Создание математической модели.
▫️Определение входных значений.
▫️Создание большого набора случайных выборок на основе распределения выбранных данных.
▫️Проведение расчётов.
▫️Анализ результатов.

Нередко модели машинного обучения используются для тестирования и подтверждения результатов моделирования методом Монте-Карло.

#теория_вероятностей
Самые полезные каналы для программистов в одной подборке!

Сохраняйте себе, чтобы не потерять 💾

🔥Для всех

Библиотека программиста — новости, статьи, досуг, фундаментальные темы
Книги для программистов
IT-мемы
Proglib Academy — тут мы рассказываем про обучение и курсы

#️⃣C#

Книги для шарпистов | C#, .NET, F#
Библиотека шарписта — полезные статьи, новости и обучающие материалы по C#
Библиотека задач по C# — код, квизы и тесты
Библиотека собеса по C# — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Вакансии по C#, .NET, Unity Вакансии по PHP, Symfony, Laravel

☁️DevOps

Библиотека devops’а — полезные статьи, новости и обучающие материалы по DevOps
Вакансии по DevOps & SRE
Библиотека задач по DevOps — код, квизы и тесты
Библиотека собеса по DevOps — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования

🐘PHP

Библиотека пхпшника — полезные статьи, новости и обучающие материалы по PHP
Вакансии по PHP, Symfony, Laravel
Библиотека PHP для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по PHP — код, квизы и тесты

🐍Python

Библиотека питониста — полезные статьи, новости и обучающие материалы по Python
Вакансии по питону, Django, Flask
Библиотека Python для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Python — код, квизы и тесты

Java

Библиотека джависта — полезные статьи по Java, новости и обучающие материалы
Библиотека Java для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Java — код, квизы и тесты
Вакансии для java-разработчиков

👾Data Science

Книги для дата сайентистов | Data Science
Библиотека Data Science — полезные статьи, новости и обучающие материалы по Data Science
Библиотека Data Science для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Data Science — код, квизы и тесты
Вакансии по Data Science, анализу данных, аналитике, искусственному интеллекту

🦫Go

Книги для Go разработчиков
Библиотека Go разработчика — полезные статьи, новости и обучающие материалы по Go
Библиотека Go для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по Go — код, квизы и тесты
Вакансии по Go

🧠C++

Книги для C/C++ разработчиков
Библиотека C/C++ разработчика — полезные статьи, новости и обучающие материалы по C++
Библиотека C++ для собеса — тренируемся отвечать на каверзные вопросы во время интервью и технического собеседования
Библиотека задач по C++ — код, квизы и тесты
Вакансии по C++

💻Другие профильные каналы

Библиотека фронтендера
Библиотека мобильного разработчика
Библиотека хакера
Библиотека тестировщика

💼Каналы с вакансиями

Вакансии по фронтенду, джаваскрипт, React, Angular, Vue
Вакансии для мобильных разработчиков
Вакансии по QA тестированию
InfoSec Jobs — вакансии по информационной безопасности

📁Чтобы добавить папку с нашими каналами, нажмите 👉сюда👈

🤖Также у нас есть боты:
Бот с IT-вакансиями
Бот с мероприятиями в сфере IT

Мы в других соцсетях:
🔸VK
🔸YouTube
🔸Дзен
🔸Facebook *
🔸Instagram *

* Организация Meta запрещена на территории РФ
Верно ли, что классический градиентный спуск всегда найдёт глобальный минимум функции потерь и выдаст оптимальные параметры?

Нет, неверно.

Градиентный спуск эффективно работает на выпуклых функциях. В этом случае любой локальный минимум автоматически является глобальным. Однако без выпуклости данный метод оптимизации ничего не гарантирует. При этом невыпуклые функции встречаются повсеместно, в том числе в машинном обучении.

Нередко при обучении градиентный спуск застревает в локальном минимуме и не может найти глобальный. Это означает, что найденное решение может не быть оптимальным. Для того, чтобы снизить вероятность такого исхода, применяются разные техники. Однако 100-процентной гарантии не дают и они.

К вышеуказанным техникам относятся:
▫️выбор удачных начальных параметров;
▫️модификации градиентного спуска (стохастический градиентный спуск (SGD), градиентный спуск с моментом и др.).

#машинное_обучение
Напишите код, который будет иллюстрировать Закон больших чисел (ЗБЧ)

ЗБЧ утверждает, что при увеличении количества попыток случайная величина стремится к своему математическому ожиданию. Для иллюстрации возьмём подбрасывание честной монетки. Математическое ожидание выпадения орла равно 0.5. С увеличением числа подбрасываний среднее значение количества выпавших орлов должно приближаться к 0.5.
import random
import matplotlib.pyplot as plt

total_flips = 0
numerical_probability = []
H_count = 0

for i in range(0, 5000):
new_flip = random.choice(['H', 'T'])
total_flips += 1
if new_flip == 'H':
H_count += 1
numerical_probability.append(H_count / total_flips)

plt.figure(figsize=(10, 6))
plt.plot(numerical_probability, label='Численная вероятность орла')
plt.axhline(y=0.5, color='r', linestyle='-', label='Математическое ожидание (0.5)')
plt.xlabel("Количество бросков")
plt.ylabel("Численная вероятность орла")
plt.title("Закон больших чисел: Подбрасывание монеты")
plt.legend()

plt.show()


#программирование
#теория_вероятностей
Зачем нужно масштабирование признаков? Как бы вы его провели?

Допустим, у нас есть линейная регрессия с двумя независимыми переменными, у которых совершенно разный масштаб. Например, значения одного признака находятся в диапазоне от 0 до 100, а второго — от 0 до 1. Чтобы подстроиться под такие признаки, модель подберёт коэффициенты так, что первый будет небольшим, а второй — большим.

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

Есть несколько способов масштабирования:
▫️Нормализация.
В данном случае все значения будут находиться в диапазоне от 0 до 1.
▫️Стандартизация.
Масштабирует значения с учётом стандартного отклонения.

Для нормализации, например, можно использовать метод MinMaxScaler из scikit-learn. Для стандартизации в этой же библиотеке есть метод StandardScaler.

#машинное_обучение
🤖 Напоминаем, что у нас есть еженедельная email-рассылка, посвященная последним новостям и тенденциям в мире искусственного интеллекта.

В ней:
● Новости о прорывных исследованиях в области машинного обучения и нейросетей
● Материалы о применении ИИ в разных сферах
● Статьи об этических аспектах развития технологий
● Подборки лучших онлайн-курсов и лекций по машинному обучению
● Обзоры инструментов и библиотек для разработки нейронных сетей
● Ссылки на репозитории с открытым исходным кодом ИИ-проектов
● Фильмы, сериалы и книги

👉Подписаться👈