Библиотека дата-сайентиста | Data Science, Machine learning, анализ данных, машинное обучение
18.5K subscribers
2.36K photos
119 videos
64 files
4.81K links
Все самое полезное для дата сайентиста в одном канале.

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

Курс по ML: https://clc.to/4hNluQ

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

РКН: https://gosuslugi.ru/snet/67a5b03124c8ba6dcaa121c9
Download Telegram
Что такое бутстреп и где он используется?

Бутстрепом (bootstrap) называют процесс генерации подвыборок с помощью семплирования с возвращением (когда один и тот же элемент может быть выбран более одного раза).

Рассмотрим пример: у нас есть урна с пятью шарами, пронумерованными от 1 до 5. Это наша выборка. Чтобы сформировать подвыборки, мы:
🎱 вытаскиваем шар из урны и записываем его номер;
🎱 возвращаем шар в урну;
🎱 перемешиваем шары и снова вытаскиваем рандомный;
🎱 делаем так до тех пор, пока не получим равное исходному количество номеров шаров в подвыборке.

Бутстреп, например, лежит в основе бэггинга — метода ансамблевых алгоритмов. В целом, обучение модели на различных подвыборках из исходных данных позволяет оценить вариабельность её производительности.

#вопросы_с_собеседований
👍9🔥6👏2🥰1
Чем градиентный бустинг на деревьях отличается от случайного леса?

Здесь достаточно вспомнить базовые принципы построения этих двух алгоритмов.

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

#вопросы_с_собеседований
🔥5👍3😁3
👨‍💻 Как провести отбор признаков при построении модели?

Можно исходить из нескольких соображений:

✍️ Первым делом можно убрать те признаки, значения у которых практически не меняются. Такие фичи не содержат информации. В целом, можно отбрасывать признаки, дисперсия которых ниже определённой границы.
✍️ Можно делать выбор в пользу лучших признаков по результатам статистических тестов. Подробнее тут.
✍️ Можно сначала построить baseline модель для оценки признаков. Она должна явно показывать важность использованных фичей. На роль такой модели подойдут, например, Random Forest или линейная модель с Lasso-регуляризацией.
✍️ Наконец можно использовать метод перебора. Нужно по очереди обучать модель на разных подмножествах фичей. Этот способ самый вычислительно сложный, но надёжный.

#вопросы_с_собеседований
12
Объясните, как работает градиентный бустинг?

Градиентный бустинг используется для задач как классификации, так и регрессии. Это алгоритм, который объединяет прогнозы слабых моделей для создания сильной модели.

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

✔️Вот простой пример: допустим, что предсказание первой модели на 5 больше настоящего значения. Если бы следующая новая модель выдавала ответ -5, то сумма ответов этих двух моделей оказалась бы идеальной.

Почему «градиентный»? Потому что каждая очередная модель в ансамбле обучается предсказывать отрицательный градиент (или антиградиент) функции потерь на основе предсказания предыдущей модели.

#вопросы_с_собеседований
👍15
Как вы обработали бы разреженные данные?

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

В разреженном векторе было бы неплохо уменьшить некоторые веса до нуля. Можно рассмотреть L1 регуляризацию. Она приведёт многие неинформативные коэффициенты в модели к нулю.

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

#вопросы_с_собеседований
👍121
Какова вычислительная сложность механизма self-attention?

В оригинальной статье Attention Is All You Need есть таблица со сравнением Complexity per Layer (сложность на слой) нового механизма self-attention и других архитектур. Указано, что для self-attention это значение составляет O(n^2 * d), где d — это размерность векторного представления.

В статье есть один нюанс. Авторы не учитывали сложность вычисления матриц Q, V и K (query, value и key). Их значения были взяты из скрытых состояний RNN. Поэтому идёт «чистый» расчёт для слоя Attention.

#вопросы_с_собеседований
👍93🔥1
Какие существуют модификации KNN?

Метод k-ближайших соседей, или k-nearest neighbors (KNN), — довольно простой и легко интерпретируемый алгоритм. Он работает, идентифицируя k объектов обучающего набора данных, которые находятся ближе всего к объекту, который нужно классифицировать или для которого нужно предсказать значение.

Как алгоритм можно модифицировать?

🔹Выбор метрики
Во-первых, можно использовать разные функции расстояния для вычисления дистанции между объектами. Это могут быть Манхэттенская метрика, метрика Минковского, косинусное расстояние, расстояние Жаккара.
🔹Взвешенный KNN
Решает главный недостаток оригинального алгоритма: он никак не учитывает расстояния до соседних объектов, хотя эта информация может быть полезной. В этой модификации чем ближе сосед, тем больше его вклад в принятие решения. Это позволяет уменьшить влияние «далёких» соседей.
🔹Адаптивный KNN
В этой версии алгоритма значение k может адаптироваться в зависимости от локальной плотности данных. Это означает, что для объектов в разреженных областях пространства будет использоваться большее значение k, а в плотных областях — меньшее.

#вопросы_с_собеседований
👍145😁2🤩21
Вам дали список чисел. Напишите функцию, которая вернёт выбросы

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

✔️ Вычислим квартили.
Так мы получим Q1 (первый квартиль) и Q3 (третий квартиль). Тогда IQR — это размах между первым и третьим квартилями (Q3 - Q1).
✔️ Определим выбросы.
Как правило, выбросами считаются точки данных, которые находятся ниже Q1 - 1.5 * IQR или выше Q3 + 1.5 * IQR.

Вот пример функции, реализующей такой алгоритм:
import numpy as np

def find_outliers(data):
sorted_data = sorted(data)

Q1 = np.percentile(sorted_data, 25)
Q3 = np.percentile(sorted_data, 75)

IQR = Q3 - Q1

lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

outliers = [x for x in sorted_data if x < lower_bound or x > upper_bound]

return outliers


#вопросы_с_собеседований
Please open Telegram to view this post
VIEW IN TELEGRAM
23👍14🔥41
Какие допущения есть у линейной регрессии?

Линейная регрессия — это, в сущности, статистический метод, который позволяет описать связь между переменными. Этот метод валиден, если выполняются четыре предположения:

1️⃣ Между независимой переменной x и зависимой переменной y существует линейная зависимость.
2️⃣ Между последовательными остатками (или разницей между фактическими и предсказанными значениями) нет корреляции. Это чаще всего случается в данных временных рядов.
3️⃣ Должна соблюдаться гомоскедастичность. То есть дисперсия остатков обязана быть одинаковой. Иными словами, разность между реальным и предсказанным значениями, должна оставаться в определённом известном диапазоне.
4️⃣ Остатки должны быть нормально распределены.

#вопросы_с_собеседований
12👍2😁1
Как выбрать количество скрытых слоёв и нейронов в нейросети?

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

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

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

На практике бывает полезно начать с простой модели и постепенно увеличивать её сложность до достижения желаемой производительности.

#вопросы_с_собеседований
👍9
Какие существуют методы аугментации для текстов?

Аугментацией называют процесс модификации существующих данных для создания новых образцов и расширения тренировочного набора. Обычно об аугментации говорят в контексте компьютерного зрения. Самый простой способ расширить набор картинок на основе существующих — это исказить их разными методами. Но что делать, если стоит задача получить новые образцы текста для NLP? Есть несколько способов.

Замена синонимом
Это самый простой метод перефразировать предложение. Однако реализовать его на большом массиве текстов может быть нелегко, так как не все синонимы являются корректной заменой (многое, например, зависит от контекста).

Сокращения
Можно применять общепринятые сокращения. Например, вместо «так как» — «т.к.». Существуют библиотеки для подобных аугментаций.

Использование векторных представлений слов
Случайные слова можно заменять на близкие к ним в пространстве векторных представлений (embeddings). Это, своего рода, альтернатива простой замене на синонимы.

Использование контекстных представлений
Кроме классических представлений (Word2Vec, GloVe), можно использовать те, которые учитывают контекст слова. Подойдут, например, модели на базе трансформеров.

Замена и удаление несущественного/существенного
В одной из работ Unsupervised Data Augmentation предлагается заменять несущественные слова, которые определены как слова с маленьким значением TF-IDF. В другой работе наоборот предлагается заменять самые значимые слова. Так, в задаче определения сентимента можно находить самое «сентиментное» слово и удалять его (например, слова «отличный», «превосходный», «классный», «улётный» и т.п.).

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

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

Генеративные модели
Можно синтезировать новые тексты с помощью генеративных моделей, тех же GPT.

#вопросы_с_собеседований
👍11
Чем отличаются друг от друга Transfer learning, Fine-tuning и Multi-task learning?

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

▫️Fine-tuning
Идея похожа на Transfer learning, однако Fine-tuning подразумевает корректировку параметров предобученной модели по всем слоям или по какой-то их части. Для корректировки используется новый набор данных, подходящий для вашей конкретной задачи.

▫️Multi-task learning
Этот подход предполагает одновременное обучение модели для решения нескольких задачах. Это позволяет улучшить обобщающую способность за счёт совместного извлечения признаков.

#вопросы_с_собеседований
7👍1
✍️ Опишите алгоритм обратного распространения ошибки

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

Алгоритм таков:

▪️Начинаем с вычисления ошибки на выходе модели. Это обычно разница между предсказанным значением и истинным значением.
▪️Затем вычисляется градиент, то есть вектор частных производных функции ошибки по выходному слою.
▪️Движение идёт обратно через слои модели. На каждом слое используется цепное правило для вычисления градиента ошибки по весам слоя.
▪️После того, как градиенты вычислены, веса модели корректируются в направлении, противоположном градиенту, чтобы уменьшить ошибку.
▪️Процесс повторяется до тех пор, пока модель не достигнет желаемой производительности или не сойдётся.

#вопросы_с_собеседований
👍10