Библиотека дата-сайентиста | 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
✍️Что такое проблема «умирающего» ReLU?

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

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

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

#вопросы_с_собеседований
👍141
✍️ Что вы знаете про N-грамные языковые модели?

N-грам (n-gram) языковые модели — это статистические модели, которые предсказывают следующее слово после N-1 слов, основываясь на вероятности их сочетания. Сам по себе N-gram представляет собой последовательность из определённого количества слов. Например, если речь идёт о двух словах, то мы использует биграмы. В такой модели вероятность каждого слова зависит только от предыдущего слова.

Эти модели часто используются в задачах обработки естественного языка (NLP), в том числе в автозаполнении текста, проверке орфографии, машинном переводе. Чем больше значение N, тем точнее модель может предсказывать контекст, но при этом растут вычислительные затраты и требуется больше данных для обучения.

#вопросы_с_собеседований
👍101
Запустится ли этот код на Python 3? Если да, то что он выведет?

sys.allow_boolean_assignment разрешает создавать переменные с именами, зарезервированными под идентификаторы типа bool. Поэтому этот код запустится и выведет «True is False».

Эта настройка введена в известном первоапрельском коммите, который до сих пор остался в коде интерпретатора. Если кандидат об этом знает, можно с уверенностью сказать, что он общается в должных профессиональных кругах и любят углубляться в детали.
#вопросы_с_собеседований
🔥9
Как прочитать данные в DataFrame из файла CSV?

Мы можем создать фрейм данных из файла CSV — «Comma Separated Values (значения, разделенные запятыми)». Это можно сделать с помощью метода read_csv(), который принимает файл csv в качестве параметра:
pandas.read_csv(file_name)

Другой способ сделать это — использовать метод read_table(), который принимает CSV-файл и значение разделителя в качестве параметра:
pandas.read_table(file_name, delimiter)
#вопросы_с_собеседований
🥱10🌚3
Что такое дескрипторы?

Дескрипторы — это механизм в Python, который позволяет настраивать доступ к атрибутам объектов. Они используются для определения поведения при доступе, изменении или удалении атрибута объекта.

Дескрипторы реализуются через три метода:

— __get__(self, instance, owner) вызывается при доступе к атрибуту
— __set__(self, instance, value) вызывается при изменении атрибута
— __delete__(self, instance) вызывается при удалении атрибута

Дескрипторы могут быть определены как отдельный класс или внутри другого класса. Они могут быть использованы для создания свойств, которые имеют специальное поведение при доступе, изменении или удалении.
#вопросы_с_собеседований
👍11😁32
🌲Какие операции с деревьями как структурами данных вы знаете?

Дерево — это иерархическая структура данных, состоящая из узлов, соединённых рёбрами.

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

🔹Insert (вставка)
Если нет ограничений на размещение узла, вставка может быть простым добавлением нового потомка к существующему листу.

🔹Basic Search (обход дерева)
В самой простой форме обход дерева — это рекурсивная функция, которая вызывает саму себя для каждого потомка узла до тех пор, пока не будет найден целевой узел.

🔹Delete (удаление)
Если нужно удалить целое поддерево, это можно сделать, используя метод поиска узла. После того как целевой узел найден, его можно удалить из списка потомков его родителя.

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