100 вопросов для подготовки к собесу Data Science |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
МЕНЮ Главная страница Поиск Регистрация на сайте Помощь проекту Архив новостей ТЕМЫ Новости ИИ Голосовой помощник Разработка ИИГородские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Искусственный интеллект Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Нейронные сети начинающим Психология ИИ Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Творчество ИИ Техническое зрение Чат-боты Авторизация |
2023-12-30 17:21 Доброго времени суток! Представляю вашему вниманию чек-лист из 100 вопросов по Data Science. Вопросы покрывают 5 областей: SQL, Python, Machine Learning, статистику и собственно саму DS. Кому это вообще может быть полезно:
Собрал здесь самые частые вопросы с собесов на позицию джуна Data Science, получился так сказать 95% доверительный интервал всех возможных вопросов. Так что если разобраться в этих вопросах, с большой вероятностью Авито, Тинькофф и что у нас там ещё делает DS примет вас к себе на борт. А если с синдромом самозванца проблем нет, то смело пробивайтесь в FAANG* (*MAANG), успехов) Ну и в качестве интерлюдии, гениальная схема о том, как изучать DS. Нет, ну правда же) Кстати, если вам реально хочется изучать Data Science, массу годного контента вы найдёте в моём тг канале — это разборы заданий с собесов и масса полезных инструментов. А вот телеграм канал для тех, кто хочет изучить машинное обучение — нейронные сети, машинное обучение, Python. Вот ещё папка с годными ресурсами по Python и МО — поможет в подготовке к собесу и работе в области DS. Параллельно к этой статье я запилил ролик с разбором части этих вопросов (в основном по Python), прошу — https://youtu.be/6Pk4OgdNxXQ Тут посты с вопросами по машинному обучению. Ок, переходим к вопросам. Поехали! Содержание Секция "Статистика" Что такое нормальное распределение? Средняя проектная оценка в группе из 10 учеников получилась 7, а медиана 8. Как так получилось? Чему больше доверять? Какова вероятность заражения пациента, если его тест позитивен, а вероятность заболевания в его стране составляет 0.1%? Что такое центральная предельная теорема? В чем заключается ее практический смысл? Какие примеры набора данных с негауссовым распределением вы можете привести? Что такое метод максимизации подобия? Вы баллотируетесь на пост, в выборке из 100 избирателей 60 будут голосовать за вас. Можете ли вы быть уверены в победе? Как оценить статистическую значимость анализа? Сколько всего путей, по которым мышь может добраться до сыра, перемещаясь только по линиям клетки? В чем разница между линейной и логистической регрессией? Приведите три примера распределений с длинным хвостом. Почему они важны в задачах классификации и регрессии? Суть закона больших чисел Что показывает p-значение (значимая вероятность) Что такое биномиальная формула вероятности? Счетчик Гейгера записывает 100 радиоактивных распадов за 5 минут. Найдите приблизительный 95% интервал для количества распадов в час. Как рассчитать необходимый размер выборки? В каких случаях вы бы использовали MSE и MAE? Когда медиана лучше описывает данные, чем среднее арифметическое? В чём разница между модой, медианой и матожиданием Секция "SQL" В чем заключается разница между MySQL и SQL Server? Что делает UNION? В чем заключается разница между UNION и UNION ALL? Как оптимизировать SQL-запросы? Выведите список сотрудников с зарплатой выше, чем у руководителя Какие оконные функции существуют? Найдите список ID отделов с максимальной суммарной зарплатой сотрудников В чём разница между CHAR и VARCHAR? Выберите самую высокую зарплату, не равную максимальной зарплате из таблицы Чем отличаются SQL и NoSQL? В чём разница между DELETE и TRUNCATE? Пронумеруйте строки в таблице employee Пронумеруйте строки в таблице в разрезе отдела по зарплате Какие есть уровни изоляции транзакций? Секция "Python" Какие отличия есть у Series и DataFrame в Pandas? Напишите функцию, которая определяет количество шагов для преобразования одного слова в другое В чём преимущества массивов NumPy по сравнению с (вложенными) списками python? В чём отличие между map, apply и applymap в Pandas? Самый простой способ реализовать скользящее среднее с помощью NumPy Поддерживает ли Python регулярные выражения? Продолжи: "try, except, ..." Как построить простую модель логистической регрессии на Python? Как выбрать строки из DataFrame на основе значений столбцов? Как узнать тип данных элементов из массива NumPy? В чём отличие loc от iloc в Pandas? Напишите код, который строит все N-граммы на основе предложения Каковы возможные способы загрузки массива из текстового файла данных в Python? Чем отличаются многопоточное и многопроцессорное приложение? Как можно использовать groupby + transform? Напишите финальные значения A0, ..., A7 Чем отличаются mean() и average() в NumPy? Приведите пример использования filter и reduce над итерируемым объектом Как объединить два массива NumPy? Напишите однострочник, который будет подсчитывать количество заглавных букв в файле Как бы вы очистили датасет с помощью Pandas? array и ndarray — в чём отличия? Вычислите минимальный элемент в каждой строке 2D массива Как проверить, является ли набор данных или временной ряд случайным? В чём разница между pivot и pivot_table? Реализуйте метод k-средних с помощью SciPy Какие есть варианты итерирования по строкам объекта DataFrame? Что такое декоратор? Как написать собственный? Секция "Data Science" Что такое сэмплирование? Сколько методов выборки вы знаете? Чем корреляция отличается от ковариации? Что такое кросс-валидация? Какие проблемы она призвана решить? Что такое матрица ошибок? Для чего она нужна? Как преобразование Бокса-Кокса улучшает качество модели? Какие методы можно использовать для заполнения пропущенных данных, и каковы последствия невнимательного заполнения данных? Что такое ROC-кривая? Что такое AUC? Что такое полнота (recall) и точность (precision)? Как бы вы справились с разными формами сезонности при моделировании временных рядов? Какие ошибки вы можете внести, когда делаете выборку? Что такое RCA (root cause analysis)? Как отличить причину от корреляции? Что такое выброс и внутренняя ошибка? Объясните, как их обнаружить, и что бы вы делали, если нашли их в наборе данных? Что такое A/B-тестирование? В каких ситуациях общая линейная модель неудачна? Является ли подстановка средних значений вместо пропусков допустимым? Почему? Есть данные о длительности звонков. Разработайте план анализа этих данных. Как может выглядеть распределение этих данных? Как бы вы могли проверить, подтверждаются ли ваши ожидания? Секция "Machine Learning" Что такое векторизация TF/IDF? Что такое переобучение и как его можно избежать? Вам дали набор данных твитов, задача – предсказать их тональность (положительная или отрицательная). Как бы вы проводили предобработку? Расскажите про SVM В каких случаях вы бы предпочли использовать SVM, а не Случайный лес (и наоборот)? Каковы последствия установки неправильной скорости обучения? Объясните разницу между эпохой, пакетом (batch) и итерацией. Почему нелинейная функция Softmax часто бывает последней операцией в сложной нейронной сети? Объясните и дайте примеры коллаборативной фильтрации, фильтрации контента и гибридной фильтрации В чем разница между bagging и boosting для ансамблей? Как выбрать число k для алгоритма кластеризации «метод k-средних» (k-Means Clustering), не смотря на кластеры? Как бы вы могли наиболее эффективно представить данные с пятью измерениями? Что такое ансамбли, и чем они полезны? В вашем компьютере 5Гб ОЗУ, а вам нужно обучить модель на 10-гигабайтовом наборе данных. Как вы это сделаете? Всегда ли методы градиентного спуска сходятся в одной и той же точке? Что такое рекомендательные системы? Объясните дилемму смещения-дисперсии (bias-variance tradeoff) и приведите примеры алгоритмов с высоким и низким смещением. Что такое PCA, и чем он может помочь? Объясните разницу между методами регуляризации L1 и L2. Секция "Статистика" Вообще, если вы думаете, что матаном, производными и вычислением градиента мучают только свежеиспечённых выпускников-стажёров, то это не совсем так. Вот, гляньте на задания с собеседования в ВТБ (спасибо Вадим) на позицию Data Science. В целом, задания простые, но из-за отсутствия практики с ними могут быть проблемки. Так что на всякий случай перед собеседованием вспомните подобные базовые штуки из анализа, линейки, теорвера и прочих. Да и вообще, учите матан — не зря же Миша Ломоносов говорил, что это ум в порядок приводит) Перед тем, как перейти к разным вопросам по статистике и т.д. можно пройти вот такой замечательный тест, насколько в голове ещё сохранились основы (тест позаимствован из статьи) Что такое нормальное распределение? А что, вдруг кандидат не знает ?\_(?)_/? Нормальное распределение (Гаусса) задаётся такой функцией плотности вероятности:
тут параметр — математическое ожидание (среднее значение), медиана и мода распределения, а параметр — среднеквадратическое отклонение, — дисперсия распределения. А это график нормального распределения и процент попадания случайной величины на отрезки, равные среднеквадратическому отклонению. Кстати, если хочется блеснуть на собесе, можно упомянуть обобщённую формулу нормального распределения: Отрисовать это можно так: Средняя проектная оценка в группе из 10 учеников получилась 7, а медиана 8. Как так получилось? Чему больше доверять? Это простой вопрос. Если средняя оценка в группе – 7, а медиана – 8, это может означать, что в группе есть несколько учеников, которые получили довольно низкие оценки, что снизило среднюю оценку, но при этом большинство учеников получили более высокие оценки, что повысило медиану. Доверять в данном случае можно обоим показателям, но важно учитывать их интерпретацию. Средняя оценка подвержена влиянию крайних значений, так что если в группе есть несколько учеников с низкими оценками, это существенно снизит среднюю оценку. Медиана же отражает значение, которое разделяет выборку на две равные части, и не подвержена такому влиянию крайних значений. Чему больше доверять - зависит от цели анализа данных. Если интересует общая картина и средний уровень успеваемости группы, то лучше использовать среднюю оценку. Если же интересует типичный уровень успеваемости учеников, то лучше использовать медиану. Какова вероятность заражения пациента, если его тест позитивен, а вероятность заболевания в его стране составляет 0.1%? Для решения этой задачи нам нужно знать чувствительность и специфичность теста. Чувствительность теста - это вероятность того, что тест даст положительный результат у зараженного пациента. Специфичность теста - это вероятность того, что тест даст отрицательный результат у незараженного пациента. Допустим, что у нашего теста чувствительность 95% и специфичность 99%. Это означает, что из 100 зараженных пациентов тест правильно определит 95, а из 100 незараженных пациентов тест правильно определит 99. Теперь мы можем использовать формулу Байеса для вычисления вероятности заражения при положительном тесте: где - вероятность получить положительный тест при наличии заражения, - вероятность заражения в популяции, - общая вероятность получить положительный тест. Подставляя значения, получаем: Таким образом, вероятность заражения пациента при положительном тесте составляет около 8.7%. Что такое центральная предельная теорема? В чем заключается ее практический смысл? Пока не далеко ушли от нормального распределения, обсудим центральную предельную теорему (ЦПТ). В общем, центральная предельная теорема (ЦПТ) говорит о том, что сумма достаточно большого количества слабо зависимых случайных величин с примерно одинаковыми масштабами имеет распределение, близкое к нормальному. Центральная предельная теорема важна, поскольку она используется при проверке гипотез и расчете доверительных интервалов. Практическая мощь ЦПТ в том, что она позволяет использовать нормальное распределение для аппроксимации суммы случайных величин при любом распределении величин. Это облегчает анализ и позволяет делать выводы о средних значениях и доверительных интервалах. Нет точного ответа, насколько большим должен быть размер выборки, чтобы можно было применить ЦПТ, но в целом это зависит от асимметрии распределения выборки:
Какие примеры набора данных с негауссовым распределением вы можете привести? Можно сразу привести такие примеры:
А вообще, если подробнее, то существует множество распределений, которые отличаются от нормального:
Что такое метод максимизации подобия? Во-первых, это один из методов оценки параметров статистической модели. Он основан на максимизации функции подобия, которая измеряет, насколько хорошо модель соответствует наблюдаемым данным. Метод используется для оценки параметров модели путем выбора таких значений параметров, которые максимизируют вероятность получения наблюдаемых данных при условии данной модели. Всё это держится на принципе максимального правдоподобия — «оценки параметров модели должны быть выбраны так, чтобы вероятность получения наблюдаемых данных была максимальной» Метод используется для оценки таких параметров моделей, как линейная регрессия, логистическая регрессия, скрытые марковские модели и другие. А вот так выглядит сам процесс максимизации подобия:
Вы баллотируетесь на пост, в выборке из 100 избирателей 60 будут голосовать за вас. Можете ли вы быть уверены в победе?
В нашей задаче Таким образом, при доверительном интервале 95% вы можете расслабиться, только если ничего не имеете против победы с минимальным перевесом. В противном случае придется добиться 61 голоса из 100 опрошенных, чтобы не беспокоиться. Как оценить статистическую значимость анализа? Суть статистической значимости состоит в определении того, существует ли реальное основание в разнице между выбранными для исследования показателями, или это случайность? С данным понятием тесно связаны «нулевая» и «альтернативная» гипотезы. Нулевая гипотеза гласит, что внесение коррективов ничего не поменяет, то есть сравниваемые объекты равнозначны в своих свойствах и нет смысла что-либо менять. Суть исследования заключается в опровержении гипотезы. Альтернативная (исследовательская) гипотеза подразумевает сравнение, в результате которого один объект показывает себя эффективнее, чем другой. Одним из распространенных методов оценки статистической значимости является использование t-теста. t-тест позволяет сравнить средние значения двух групп и определить, есть ли статистически значимая разница между ними. Результаты t-теста представляются в виде значения t-статистики и p-значения. t-статистика - это мера разницы между средними значениями двух групп. Чем больше значение t-статистики, тем больше разница между группами. p**-значение** - это вероятность получить наблюдаемую разницу между группами, если на самом деле разницы нет. Если p-значение меньше заданного уровня значимости (обычно 0,05), то разница считается статистически значимой. Для оценки статистической значимости анализа можно использовать следующие шаги:
Итак, для оценки статистической значимости нужно провести проверку гипотезы. Сначала определяют нулевую и альтернативную гипотезы. Затем рассчитывают Сколько всего путей, по которым мышь может добраться до сыра, перемещаясь только по линиям клетки? Внезапно задача, да ещё какая-то странная. Есть идеи, как можно посчитать все пути? Это задание удивительно напоминает одно из задание ОГЭ по информатике. Решается просто, ничего особенного. Отмечаем узлы, мышь использует 2 команды: вправо и вверх, в каждом узле отмечаем число — сумму чисел из других узлов, откуда можно попасть в этот. Таким образом мы первый раз получаем число 2 — потому что в текущий узел можно попасть из узлов с числами 1, поэтому 1+1. И так мы делаем, пока не дойдём до последнего узла, получаем 5005. Задание, кстати, позаимствовано из «Data Science для карьериста») В чем разница между линейной и логистической регрессией? Если сразу к ответу — линейную регрессию можно использовать для прогнозирования непрерывной зависимой переменной по шкале значений. Логистическая регрессия используется, когда ожидается результат бинарной операции (например, «да» или «нет»).
Линейная регрессия – это статистический метод, в котором линия (или n-мерная плоскость в случае множества параметров) подстраивается под данные. Он используется для регрессии – когда целевое значение представляет собой действительное число. К линейной регрессии допускается 4 основных допущения:
Логистическая регрессия – это метод классификации. Это трансформация линейной регрессии посредством функции сигмоиды, возвращающей вероятность соответствия входного набора классу 0 или классу 1. Приведите три примера распределений с длинным хвостом. Почему они важны в задачах классификации и регрессии? Три практических примера: степенной закон, закон Парето и продажи продуктов (например, продукты-бестселлеры против обычных). При решении задач классификации и регрессии важно не забывать о распределении с длинным хвостом, поскольку редко встречающиеся значения составляют существенную часть выборки. Это влияет на выбор метода обработки выбросов. Кроме того, некоторые методики машинного обучения предполагают, что данные распределены нормально. Вообще, выбрать нужное распределение не проблема, ведь их существует уйма: Суть закона больших чисел Если очень просто — при увеличении количества реальных попыток случайная величина стремится к своему теоретически вычисленному ожидаемому значению (к матожиданию). Бросим игральный кубик десять раз. Затем запишем среднее значение всех десяти бросков: сложим все выпавшие очки и поделим на 10. После этого подбросим снова, но теперь уже серией из двадцати бросков, и также запишем среднее. Сумму выпавших очков поделим на 20. Закон больших чисел утверждает, что при увеличении количества бросков от серии к серии среднее арифметическое всех выпавших в ней очков будет стремиться к определённому числу, которое называется математическим ожиданием. Для игрального кубика оно равно среднему арифметическому очков на его шести гранях: Что показывает p-значение (значимая вероятность) Значимая вероятность — это величина, применяемая при статистической проверке гипотез. Представляет собой вероятность того, что значение проверочной статистики используемого критерия (t-статистики Стьюдента, F-статистики Фишера и т.д.), вычисленное по выборке, превысит установленное p-значение. Другими словами, p-значение – это наименьшее значение уровня значимости (т.е. вероятности отказа от справедливой гипотезы), для которого вычисленная проверочная статистика ведет к отказу от нулевой гипотезы. Обычно p-значение сравнивают с общепринятыми стандартными уровнями значимости 0,005 или 0,01. P-значение используется для проверки значимости результатов после статистического теста гипотезы. P-значения помогают анализирующему делать выводы и всегда находятся в диапазоне между 0 и 1.
Итак, если p-value — это вероятность получить такие или более выраженные различия при условии, что в генеральной совокупности никаких различий на самом деле нет, то какое, на ваш взгляд, верное утверждение:
Давайте разберём все ответы по порядку: 1 утверждение — пример ошибки корреляции: факт значимой взаимосвязи двух переменных ничего не говорит нам о причинах и следствиях. Может быть, это более агрессивные люди предпочитают проводить время за компьютерными играми, а вовсе не компьютерные игры делают людей агрессивнее. 2 утверждение. Всё дело в том, что мы изначально принимаем за данное, что никаких различий на самом деле нет. И, держа это в уме как факт, рассчитываем значение p-value. Поэтому правильная интерпретация: «Если предположить, что агрессивность и компьютерные игры никак не связаны, то вероятность получить такие или еще более выраженные различия составила 0.04». 3 утверждение. А что делать, если мы получили незначимые различия? Значит ли это, что никакой связи между исследуемыми переменными нет? Нет, это означает лишь то, что различия, может быть, и есть, но наши результаты не позволили их обнаружить. 4 утверждение. Это напрямую связано с самим определением p-value. 0.04 — это вероятность получить такие или ещё более экстремальные различия. Оценить вероятность получить именно такие различия, как в нашем эксперименте, в принципе невозможно! Вот такие подводные камни могут скрываться в интерпретации такого показателя, как p-value. Поэтому очень важно понимать механизмы, заложенные в основании методов анализа и расчета основных статистических показателей. Подробное объяснение, что такое p-value Что такое биномиальная формула вероятности? Биномиальная формула вероятности — используется для вычисления вероятности того, что определенное количество событий произойдет в серии независимых испытаний с 2 возможными исходами. Формула выглядит следующим образом: Биномиальный закон распределения широко используется в Data Science для моделирования случайных событий с 2 исходами. Вот примеры генерации чисел и построения графика. Генерация случайных чисел с биномиальным распределением. Этот код генерирует 100 случайных чисел с биномиальным распределением с параметрами n=10 и p=0.5: Визуализация биномиального распределения. Биномиальное распределение с параметрами n=10 и p=0.5 можно воспроизвести так: Счетчик Гейгера записывает 100 радиоактивных распадов за 5 минут. Найдите приблизительный 95% интервал для количества распадов в час.
То есть, доверительный интервал равен Как рассчитать необходимый размер выборки? Вспомним пару терминов для начала.
При неизвестной величине генеральной совокупности, когда результат отражается в виде показателя относительной доли, число элементов выборки, обеспечивающее количественную репрезентативность, может быть вычислено по формуле:
где — доверительный коэффициент, показывающий, какова вероятность того, что размеры показателя не будут выходить за границы предельной ошибки, — доля единиц наблюдения, обладающих изучаемым признаком, — доля единиц наблюдения, не обладающих изучаемым признаков, — допустимая ошибка выборки. Если используется выборка без возврата и размер генеральной совокупности известен, то для определения необходимого размера случайной выборки при использования относительных величин (долей) применяется формула:
где — число наблюдений генеральной совокупности Неплохая статья на Хабре — Как определить размер выборки? В каких случаях вы бы использовали MSE и MAE? MSE (средняя квадратичная ошибка) — это оценка среднего значения квадрата ошибок, различие между предсказанием и фактическим значением. Эту метрику удобно использовать для выявления аномалий. MSE применяется в ситуациях, когда нам надо подчеркнуть большие ошибки и выбрать модель, которая дает меньше больших ошибок прогноза. Грубые ошибки становятся заметнее за счет того, что ошибку прогноза мы возводим в квадрат. MSE сильнее штрафует за большие отклонения по сравнению со MAE, и поэтому более чувствителен к выбросам.
MAE (средняя абсолютная ошибка) — это оценка того, насколько близки предсказания к фактическим значениями. Эта метрика менее чувствительна к выбросам и может дать общее представление о качестве модели. А ещё она выдает результат, который проще интерпретировать.
Итог: если у нас сильные аномалии в значениях, то используем MAE; если аномалий мало, можно использовать MSE. Неплохая лекция от ИТМО — Оценка качества в задачах классификации и регрессии Когда медиана лучше описывает данные, чем среднее арифметическое? Сильные стороны среднего арифметического:
Минусы:
Медиана — это мера центральной тенденции, которая представляет собой серединное значение набора данных, расположенного в порядке от меньшего к большему. Например, в наборе данных {3, 7, 12, 16, 19} медианой будет 12. Плюсы:
Минусы:
В общем, отдавать предпочтение медиане или среднему — это зависит от качества выборки. Когда в данных значительное количество выбросов в положительную или отрицательную сторону, медиана искажается не так сильно, как среднее значение. Ну и медиана в некоторых случаях считается быстрее. В чём разница между модой, медианой и матожиданием Мода - это значение, которое встречается наиболее часто в наборе данных. Если есть несколько значений, которые встречаются одинаковое количество раз и чаще всего, то набор данных считается мультимодальным. Мода полезна для определения наиболее типичного значения в наборе данных. Медиана - это среднее значение, которое разделяет набор данных на две равные части. Для нахождения медианы, данные сортируются по возрастанию или убыванию, и значение, находящееся посередине, выбирается в качестве медианы. Если набор данных имеет четное количество значений, то медиана будет средним значением двух центральных значений. Математическое ожидание (среднее значение) - это сумма всех значений в наборе данных, деленная на количество значений. Математическое ожидание представляет собой среднее значение, которое можно использовать для оценки центральной тенденции данных. Оно чувствительно к выбросам и может быть искажено экстремальными значениями. Предположим, у нас есть следующий набор данных: {2, 4, 6, 6, 8}
Если распределение симметричное, то мода, математическое ожидание и медиана совпадают. А вот при асимметрии распределения медиана смещается от моды в сторону более длинного «хвоста». При этом медиана всегда меньше математического ожидания. Секция "SQL" В чем заключается разница между MySQL и SQL Server? Давайте сразу к сути, вот в этой табличке можно увидеть все важные отличия:
Ну вот и всё, собственно, это самые основные различия между MySQL и SQL Server. Что делает UNION? В чем заключается разница между UNION и UNION ALL? В языке SQL операция UNION применяется для объединения двух наборов строк, возвращаемых SQL-запросами. Оба запроса должны возвращать одинаковое число столбцов, и столбцы с одинаковым порядковым номером должны иметь совместимые типы данных. Скажем, у нас есть вот такие 2 таблицы sales2005 и sales2006. При выполнении такого SQL-запроса получается результирующий набор, однако порядок строк может произвольно меняться, поскольку ключевое выражение В результате отобразятся две строки с Иваном, так как эти строки различаются значениями в столбцах. Но при этом в результате присутствует лишь одна строка с Алексеем, поскольку значения в столбцах полностью совпадают. Применение даст следующий результат, выводимый без упорядочивания ввиду отсутствия выражения Итак, подводя итог, между UNION и UNION ALL такие отличия UNION:
UNION ALL:
Как оптимизировать SQL-запросы? Если сразу перейти к ответу, то вот пара практических приёмов.
Вот ещё несколько советов, часть перекликается с приёмами выше. 1. Выберите правильный тип данных для столбца Каждый столбец таблицы в SQL имеет связанный тип данных. Вы можете выбирать из целых чисел, дат, переменных, логических значений, текста и т.д. При разработке важно выбрать правильный тип данных. Числа должны быть числового типа, даты должны быть датами и т.д. Это чрезвычайно важно для индексации. Взглянем сюда: Этот запрос извлекает идентификатор и имя сотрудника с идентификатором 2. Табличные переменные и объединения Когда у вас есть сложные запросы, такие как получение заказов для клиентов, вместе с их именами и датами заказа, вам нужно нечто большее, чем простой оператор выбора. В этом случае мы получаем данные из таблиц клиентов и заказов. Вот где вступают в силу объединения. Глянем на пример соединения: Табличные переменные — это локальные переменные, которые временно хранят данные и обладают всеми свойствами локальных переменных. Не используйте табличные переменные в объединениях, как SQL видит их как одну строку. Несмотря на то, что они быстрые, табличные переменные плохо работают в соединениях. 3. Используйте условное предложение WHERE Условные предложения С условным предложением 4. Используйте SET NOCOUNT ON При выполнении операций С В этом примере ниже мы предотвращаем отображение сообщения о количестве затронутых строк. 5. Избегайте ORDER BY, GROUP BY и DISTINCT Использование 6. Полностью уточняйте имена объектов базы данных Цель использования полностью определенных имен объектов базы данных — устранить двусмысленность. Полное имя объекта выглядит так: Когда у вас есть доступ к нескольким базам данных, схемам и таблицам, становится важным указать, к чему вы хотите получить доступ. Вам не нужно этого делать, если вы не работаете с большими базами данных с несколькими пользователями и схемами, но это хорошая практика. Поэтому вместо использования такого оператора: Вам следует использовать: 7. Узнайте, как полностью защитить свой код Базы данных хранят всевозможную информацию, что делает их основными целями атак. Распространенные атаки включают SQL-инъекции, когда пользователь вводит инструкцию SQL вместо имени пользователя и извлекает или изменяет вашу базу данных. Примеры SQL-инъекций: Допустим, у вас есть это, вы textuserIDполучите ввод от пользователя. Вот как это может пойти не так: Поскольку Вы можете защитить свою базу данных от SQL-инъекций, используя параметризованные операторы, проверки ввода, очистку ввода и т. Д. Как вы защищаете свою базу данных, зависит от СУБД. Вам нужно будет разобраться в своей СУБД и ее проблемах безопасности, чтобы вы могли писать безопасный код. 8. используйте LAG и LEAD для последовательных строк Функция Функция LEAD делает то же самое, но и для следующей строки. Отказ от использования самостоятельных соединений повышает производительность, поскольку уменьшается количество операций чтения. Но, вы должны проверить, как LEAD и LAG влияют на производительность запросов. Хорошая статья по оптимизации SQL-запросов Выведите список сотрудников с зарплатой выше, чем у руководителя Сразу напишем этот SQL-запрос: Данный SQL-запрос выбирает все столбцы из таблицы "employee" для записей, где зарплата сотрудника больше зарплаты его начальника. Запрос использует две таблицы "employee a" и "employee b", где "b.id" равно "a.chief_id". Этот запрос позволяет найти сотрудников, у которых зарплата выше, чем у их начальников. Он использует связь между таблицами "employee a" и "employee b" по полю "chief_id", чтобы сравнить зарплаты сотрудников и их начальников. Например, если у нас такая таблица "employee":
то результатом выполнения данного запроса будет:
Таким образом, запрос выбирает сотрудников, у которых зарплата выше, чем у их начальников, и возвращает все столбцы для этих сотрудников. Неплохое видео в тему, кстати — Карьера в DATA SCIENCE: TOP-50 Вопросов на собеседовании // PART 1 Какие оконные функции существуют? В SQL есть пара оконных функций; они позволяют выполнять вычисления и агрегирование данных внутри определенного окна или группы строк. Их 3 группы: агрегирующие (сумма, количество, минимум...), ранжирующие, функции смещения. Вот основные:
Вообще, это не все оконные функции, их больше. А какие ещё функции вы знаете?) Найдите список ID отделов с максимальной суммарной зарплатой сотрудников Нужный SQL-запрос выглядит так: Этот SQL-запрос выполняет несколько действий. Первая часть с ключевым словом Затем осуществляется основной запрос: В этой части запроса выбираются Вот в принципе и всё, этот SQL-запрос возвращает идентификаторы отделов, у которых сумма зарплат всех сотрудников является максимальной среди всех отделов. В чём разница между CHAR и VARCHAR? CHAR и VARCHAR - это два разных типа данных для хранения символьных строк в SQL. Вот их отличия: CHAR:
VARCHAR:
Итого, разница между CHAR и VARCHAR:
А вот так это можно использовать, простецкий пример: Тут мы создаем таблицу Выберите самую высокую зарплату, не равную максимальной зарплате из таблицы Запрос, который нам нужен будет выглядеть как-то так: Разберём, что тут происходит. Запрос выполняет поиск второй по величине зарплаты среди сотрудников в таблице
Таким образом, результатом выполнения данного запроса будет вторая по величине зарплата среди всех сотрудников в таблице Ну а работает запрос как-то так. Скажем, в таблице
Тогда результат будет:
Чем отличаются SQL и NoSQL? Зачем этот вопрос тут? Ну, это очень здорово, когда разраб не привязан к одной технологии и понимает, что не SQL единым. В некоторых ситуациях лучше использовать NoSQL-решения, гибкость и умение выбирать стек с учётом задачи поднимает разработчика в топ. Начнём пожалуй с плюсов SQL:
Какие же отличия между SQL и NoSQL?
С SQL-решениями все знакомы, поэтому приведу примеры популярных NoSQL БД: MongoDB - популярная база данных NoSQL. Это документо-ориентированная база данных, простая в использовании и масштабируемая. MongoDB также очень гибкая, позволяющая хранить широкий спектр типов данных. Они могут работать с большими данными. Cassandra - еще одна популярная база данных NoSQL. Это база данных, ориентированная на столбцы, которая разработана для обеспечения высокой доступности и масштабируемости. Cassandra часто используется для хранения больших объемов данных. HBase - это база данных, ориентированная на столбцы, построенная на основе файловой системы Hadoop. HBase разработана для масштабируемости и производительности. HBase часто используется для анализа данных в режиме реального времени. Redis - это надежная база данных in-memory, которая часто используется для кэширования. Redis быстра и может использоваться для многих приложений. Неплохое сравнение SQL и NoSQL на Хабре В чём разница между DELETE и TRUNCATE? И DELETE, и TRUNCATE используются для удаления данных из таблицы. Но они имеют большие отличия. DELETE используется для удаления одной/нескольких строк из таблицы. Она является частью языка DML (Data Manipulation Language) и позволяет удалить строки, удовлетворяющие определенному условию. Здесь все строки из таблицы Команда TRUNCATE используется для удаления всех строк из таблицы. Она является частью языка DDL (Data Definition Language) и выполняет операцию над всей таблицей, а не над отдельными строками. Тут все строки из таблицы И ещё различия между DELETE и TRUNCATE
Пронумеруйте строки в таблице employee Нам нужен вот этот запрос: Что же тут происходит?
Таким образом, данный запрос возвращает все строки из таблицы Вот в целом и всё. Пронумеруйте строки в таблице в разрезе отдела по зарплате Сразу напишем нужный SQL-запрос, вот он: Этот SQL-запрос выполняет нумерацию (назначает номера) для каждой записи в таблице
Таким образом, данный запрос вернет таблицу, в которой каждая строка будет содержать уникальный номер (последовательный) для каждой записи в каждом отделе в зависимости от их зарплаты, упорядоченной по возрастанию. В целом, запрос довольно простой и несложный, думаю, с ним всё понятно. Какие есть уровни изоляции транзакций? Что ж, в SQL официально существуют различные уровни изоляции транзакций, которые определяют, как одна транзакция видит изменения, внесенные другими транзакциями. Вот они:
Каждая СУБД может иметь свои собственные реализации и названия для этих уровней изоляции. Например, в SQL Server они называются "Read Uncommitted", "Read Committed", "Repeatable Read" и "Serializable". В PostgreSQL они называются "Read Uncommitted", "Read Committed", "Repeatable Read" и "Serializable". Давайте перейдём к практике. Вот пример использования уровня изоляции транзакций в SQL Server: Скажем, чтобы установить уровень изоляции "Read Uncommitted", можно написать такой запрос: Attention: уровень изоляции может быть установлен только в начале транзакции и будет действовать до ее завершения. Это была самая суть по уровням изоляции, а вообще тема довольно глубокая. Годнота с Хабр — Уровни изоляции транзакций с примерами на PostgreSQL Секция "Python" Кто знает, откуда картинка? Как ни крути, рабочая лошадка для Data Science — это Python (вообще ещё есть R с Julia). Поэтому понимать свой рабочий инструмент крайне важно. Недавно я опубликовал статью 100 вопросов для подготовки к собесу Python — если вы ориентируетесь во всех этих вопросах, то скорее всего проблем с Python у вас нет. Разумеется, в DS используется не сырой питон — он уже давно оброс классными библиотеками: NumPy, Pandas, SciPy, Matplotlib, Seaborn, Plotly, Scikit Learn. Ну и всякие TensorFlow и PyTorch для Machine Learning. Овладевание этими либами сильно упростит работу и повысит ваш уровень дата-сайнтиста. Ну а здесь, в этой секции, давайте затронем более специализированные вопросы по Python, вопросы, довольно сильно связанные с DS. Какие отличия есть у Series и DataFrame в Pandas? Сперва пару слов о Series. Тип данных Series в библиотеке Pandas представляет собой одномерный массив с метками, который может содержать данные различных типов, таких как числа, строки, булевы значения и т.д. Series похож на простой словарь типа dict, где имя элемента будет соответствовать индексу, а значение – значению записи. Ну и вот так мы можем работать с Series.
Для Series существует множество разных методов:
Теперь про DataFrame. DataFrame - это одна из основных структур данных в библиотеке Pandas для анализа данных на языке Python. Это двумерная таблица с метками строк и столбцов, где каждый столбец может содержать разные типы данных. Создавать DataFrame можно например так:
Для DataFrame есть масса методов, вот основные:
Ну и наконец, сравним Series и DataFrame:
Кроме того, в DataFrame есть дополнительные возможности, такие как группировка данных, агрегирование, сортировка, фильтрация и многие другие, которых нет в Series. Если остались вопросы, я отсылаю к замечательной документации Напишите функцию, которая определяет количество шагов для преобразования одного слова в другое Интересное задание, наша функция должна принимать на вход 3 аргумента: И при таких аргументах наша функция Поскольку последовательность преобразования будет такой: Что ж, осталось запилить эту функцию. Какие есть варианты? Пишите) В чём преимущества массивов NumPy по сравнению с (вложенными) списками python? Основное преимущество массивов NumPy перед списками Python заключается в том, что NumPy использует более оптимизированную память и имеет более эффективные методы работы с массивами (из-за реализации на C), что делает его подходящим выбором для работы с большими объемами данных и научных вычислений. Например, с NumPy вы можете выполнять бродкастинг (broadcasting), матричные операции и другие векторизованные вычисления с более высокой производительностью, чем при использовании вложенных списков. Некоторые из основных преимуществ NumPy:
Eсли вы работаете с массивами данных, над которыми нужно выполнять научные вычисления, то использование NumPy будет более предпочтительным вариантом, чем использование списков Python. Вообще, это довольно большая тема, но на этом пока остановимся. В чём отличие между map, apply и applymap в Pandas? В библиотеке Pandas есть 3 метода:
Кстати, Таким образом, Самый простой способ реализовать скользящее среднее с помощью NumPy Скользящее среднее (moving average, MA) — функция, значения которой равны некоторому среднему значению исходной функции за предыдущий период. Вот например график исходной функции (синий) и его скользящая средняя (красная) с шириной окна n = 2 Самый простой способ реализовать скользящее среднее с помощью NumPy - использовать функцию Тут мы определяем функцию Attention, в этом примере мы используем режим Поддерживает ли Python регулярные выражения?
Да, Python поддерживает использование регулярных выражений (regex). В стандартной библиотеке Python имеется модуль Вот, кстати, основные компоненты регулярных выражений, лично я довольно часто ими пользуюсь:
Для работы с регулярными выражениями в Python обычно используются строковые литералы с префиксом Здесь функция Продолжи: "try, except, ..." Существует Ну вот собственно и всё Как построить простую модель логистической регрессии на Python? Логистическая регрессия - это метод машинного обучения, используемый для классификации данных. Он использует логистическую функцию для оценки вероятности принадлежности объекта к определенному классу. Что ж, давайте применим логистическую регрессию для классификации тех самых ирисов. Импортируем нужные библиотеки и грузим датасет: Затем мы создаем экземпляр модели логистической регрессии с помощью Теперь мы можем использовать обученную модель для предсказания класса новых данных: Здесь мы создаем массив Также мы можем визуализировать результаты, чтобы увидеть, как модель разделяет классы: Здесь мы создаем сетку точек и используем метод Вот примерно так можно использовать модель логистической регрессии. Неплохое объяснение логистической регрессии от Loginom Как выбрать строки из DataFrame на основе значений столбцов? Другими словами, нам необходимо отфильтровать наш датафрейм и убрать некоторые строки. Вначале создадим нужный датафрейм: Отфильтровать датафрейм мы можем так:
Кстати, вот отличная шпаргалка с основами Pandas И это — Моя шпаргалка по pandas Как узнать тип данных элементов из массива NumPy? Вообще, NumPy поддерживает такие типы данных:
Для того, чтобы посмотреть, какого же типа наши элементы в массиве, мы можем использовать В чём отличие loc от iloc в Pandas? loc:
iloc:
В общем, основное отличие между Скажем, пусть у нас такой DataFrame Сравните работу А вот так они работают со срезами: Напишите код, который строит все N-граммы на основе предложения Вначале можно написать генератор биграмм — это сущий пустяк: Ок, теперь обобщим это на случай N-грамм. Тоже не очень сложно При желании можно использовать всякие библиотечки, типо Вот в принципе и всё с этим вопросом Каковы возможные способы загрузки массива из текстового файла данных в Python? В Python есть уйма способов загрузить текстовый массив, вот пара способов: 1 — Эта функция загружает данные из текстового файла и создает массив data типа 2 — Эта функция также загружает данные из текстового файла и создает массив data типа 3 — Эта функция загружает данные из текстового файла и создает объект 4 — Эта функция загружает данные из текстового файла и создает список 5 — Эта функция загружает данные из текстового файла и создает одномерный массив Чем отличаются многопоточное и многопроцессорное приложение? Многопоточное и многопроцессорное приложения отличаются друг от друга в том, как они используют ресурсы компьютера. В многопроцессорных приложениях каждый процесс имеет свой собственный набор ресурсов, включая память, открытые файлы, сетевые соединения и другие системные ресурсы. В многопоточных приложениях несколько потоков выполняются в рамках одного процесса, используя общие ресурсы. Это означает, что все потоки имеют доступ к общим данным. При правильном использовании оба подхода могут ускорить выполнение программы и улучшить управляемость ею, однако многопоточное приложение может иметь проблемы с блокировками и условиями гонки при доступе к общим ресурсам. В многопроцессорных приложениях каждый процесс защищен от других процессов и обеспечивает более высокую степень изоляции. Так выглядит многопоточность, потоки конкурируют за доступ к ресурсам, памяти и др. в рамках одного процесса А так выглядит многопроцессорность Отличное видео, объясняющее многопроцессорность Как можно использовать groupby + transform? Связка Пример: мы можем использовать команду
В данном примере мы сгруппировали данные по столбцу Напишите финальные значения A0, ..., A7 Такое вот практическое задание, что ж, поехали. В целом, тут всё понятно, обычные list comprehensions, как по мне лучше начинать читать из с внутреннего Можно разве что немного прокомментировать:
Чем отличаются mean() и average() в NumPy? mean() Функция average() Функция При использовании А вот при использовании В общем, основное различие между Приведите пример использования filter и reduce над итерируемым объектом Пример использования В этом примере мы использовали В примере мы использовали Как объединить два массива NumPy? Не будем тянуть, можно начать сразу с полного списка всех фунций Numpy для объединения массивов.
Что ж, на этом всё, это полный список функций в библиотеке Numpy для объединения массивов. Напишите однострочник, который будет подсчитывать количество заглавных букв в файле Для подсчета количества заглавных букв в файле можно использовать следующий однострочник: В этом однострочнике мы открываем файл Однострочники — это вообще очень приятная питонячая радость, есть даже целые книги (рекомендую, легко гуглится Как бы вы очистили датасет с помощью Pandas? Для очистки возьмём реальный датасет, например цен на жилье в России с Kaggle (файл Перед очисткой можно взглянуть на датасет и поставить диагноз: Видим, что набор данных состоит из 30471 строки и 292 столбцов. Ну и ещё нам вывелась информация, , являются ли столбцы числовыми или категориальными признаками и всё такое. 1 проблемка реального датасета — отсутствующие даные Обнаружить пропуски можно при помощи тепловой карты. Видите масштаб проблемы? Жёлтого довольно много, всё это — пропущенные значения. Вместо тепловой карты можно составить список долей отсутствующих записей для каждого признака.
решение проблемы пропусков — отбрасываем пропущенные записи Это решение подходит только в том случае, если недостающие данные не являются информативными. Мы можем создать новый набор данных решение проблемы пропусков — отбрасывание признаков (удаление столбцов) Как и предыдущая техника, отбрасывание признаков может применяться только для неинформативных признаков. В процентном списке, построенном ранее, мы увидели, что признак решение проблемы пропусков — заполнение медианой Для численных признаков можно воспользоваться методом принудительного заполнения пропусков. Например, на место пропуска можно записать среднее или медианное значение, полученное из остальных записей. Для категориальных признаков можно использовать в качестве заполнителя наиболее часто встречающееся значение. Возьмем для примера признак 2 проблемка реального датасета — выбросы (нетипичные данные) Для численных и категориальных признаков используются разные методы изучения распределения, позволяющие обнаружить выбросы. Если признак численный, можно построить гистограмму или коробчатую диаграмму (ящик с усами). Посмотрим на примере уже знакомого нам признака Чтобы изучить особенность поближе, построим коробчатую диаграмму (boxplot). И сразу видим, что есть выброс со значением более 7000. решение проблемы выбросов Выбросы довольно просто обнаружить, но выбор способа их устранения слишком существенно зависит от специфики набора данных и целей проекта. Их обработка во многом похожа на обработку пропущенных данных, которую мы разбирали в предыдущем разделе. Можно удалить записи или признаки с выбросами, либо скорректировать их, либо оставить без изменений. 3 проблемка реального датасета — неинформативные признаки Если признак имеет слишком много строк с одинаковыми значениями, он не несет полезной информации для проекта. Составим список признаков, у которых более 95% строк содержат одно и то же значение:
решение проблемы неинформативных признаков — drop() От неинформативных признаков лучше избавиться — выкидываем их из датасета при помощи Это не все проблемы, с реальными датасетами их больше. Например, это нерелевантные признаки, дубликаты строк, разные регистры символов, разные форматы данных (например дат), очепятки, адреса. Но методы анализа датасета выше могут пригодиться и в этих случаях. Супер подробная статья об очистке и подготовке датасета array и ndarray — в чём отличия? В NumPy многомерные массивы можно создавать с помощью ndarray (N-мерный массив):
Самые важные атрибуты объектов
Очевидные примеры использования array:
Пример использования Вот тут отличная теория по работе с массивами NumPy Вычислите минимальный элемент в каждой строке 2D массива Задание простое, его без проблем можно сделать, написав простой велосипед из цикла и чего-нибудь ещё. Но ведь у нас в NumPy есть функция Итак, возьмём такой 2D массив Ну ок, а дальше мы просто применяем функцию
Как проверить, является ли набор данных или временной ряд случайным? Существует несколько статистических тестов, которые можно использовать для проверки случайности набора данных или временного ряда в Python. Рассмотрим некоторые из них:
Этот тест проверяет, соответствует ли распределение данных равномерному распределению на отрезке [0, 1]. Если p-value больше заданного уровня значимости, то данные можно считать случайными.
Этот тест проверяет, соответствует ли распределение данных нормальному распределению. Если p-value больше заданного уровня значимости, то данные можно считать случайными.
Этот тест проверяет, является ли временной ряд случайным. Если все p-value для заданных лагов больше заданного уровня значимости, то временной ряд можно считать случайным. Неплохая лекция об анализе временных рядов В чём разница между pivot и pivot_table? pivot:
pivot_table:
В общем, основная разница между Реализуйте метод k-средних с помощью SciPy Суть алгоритма k-средних в том, что он стремится минимизировать суммарное квадратичное отклонение точек кластеров от центров этих кластеров.
где — число кластеров, — полученные кластеры, , а — центры масс всех векторов из кластера Проблемки k-means:
Ок, поехали писать код. Реализовать алгоритм k-means в SciPy можно с помощью модуля
Обратите внимание:
Отличная статья с массой примеров по кластерному анализу и k-means в частности Какие есть варианты итерирования по строкам объекта DataFrame? Мы можем итерироваться по строкам объекта DataFrame, то есть брать по очереди строки этого объекта в Pandas с помощью массы вариантов. К примеру, можно использовать Итак, вначале создадим датафрейм Применение всех 3 функций даст аналогичный результат: Что такое декоратор? Как написать собственный? Декоратор в Python - это функция, которая принимает другую функцию в качестве аргумента и расширяет ее функциональность без изменения ее кода. Декораторы могут использоваться для добавления логирования, проверки аутентификации, тайминга выполнения и ещё кучи полезных штук. Вот пример создания декоратора: Этот код создает декоратор Таким образом, написав свой собственный декоратор, вы можете расширить функциональность функций, не изменяя их исходный код. Вот, к примеру, декоратор, который позволяет измерять время выполнения функции: Суть двумя словами: по сути декоратор принимает на вход другую функцию и позволяет её модифицировать снаружи, не меняя внутренней реализации самой функции. Кстати, один из полезнейших декораторов — Ну и неплохая статья — 6 Python декораторов, которые значительно упростят ваш код Секция "Data Science" Кстати, так выглядит граф связи 45 тысяч хаброжителей, сам граф (gexf) лежит тут Что такое сэмплирование? Сколько методов выборки вы знаете? Сэмплирование (a.k.a data sampling) — метод корректировки обучающей выборки с целью балансировки распределения классов в исходном наборе данных. Простая случайная выборка Систематическая выборка (используется фиксированный интервал) Кластеризованная выборка (данные разбиваются на кластеры, выбирается один из кластеров) Выборка с взвешиванием (элементу присваивается вес, вероятность выбора элемента ~ его весу) Стратифицированная выборка (данные делятся на однородные страты, затем из каждой страты берётся выборка) Отличный wiki-конспект от ИТМО по теме Также о методах сэмплирования рассказывается на Medium Чем корреляция отличается от ковариации? Корреляция и ковариация представляют собой меры связи между двумя случайными величинами. Корреляция - это мера силы линейности двух переменных, а ковариация - мера силы корреляции. Уже исходя из этого можно понять некоторые их отличия. Отличие в принимаемых значениях. Значение корреляции имеет место между -1 и +1. Наоборот, значение ковариации лежит между -? и + ?. Инвариантность относительно масштабирования. На ковариацию влияет изменение масштаба, т.е. если все значение одной переменной умножается на постоянную, а все значение другой переменной умножается на аналогичную или другую постоянную, то ковариация изменяется. В отличие от этого, на корреляцию не влияет изменение масштаба. Размерность. Корреляция безразмерна, т. е. это единичная мера взаимосвязи между переменными. В отличие от ковариации, где значение получается произведением единиц двух переменных. Вот самые основные отличия между корреляцией и ковариацией. Что такое кросс-валидация? Какие проблемы она призвана решить? Кросс-валидация — это метод, предназначенный для оценки качества работы модели, широко применяемый в машинном обучении. Он помогает сравнить между собой различные модели и выбрать наилучшую для конкретной задачи. В основе метода лежит разделение исходного множества данных на Перекрестная проверка имеет важное преимущества перед применением одного множества для обучения и одного для тестирования модели: если при каждом проходе оценить выходную ошибку модели и усреднить ее по всем проходам, то полученная ее оценка будет более достоверной. На практике чаще всего выбирается Помимо получения более достоверной оценки, кросс-валидация 1. Оценка производительности модели: кросс-валидация позволяет оценить, насколько хорошо модель обобщает данные и способна предсказывать новые наблюдения. Она помогает избежать проблемы переобучения или недообучения модели. 2. Выбор гиперпараметров: кросс-валидация может использоваться для выбора оптимальных значений гиперпараметров модели (гиперпараметры - это параметры модели, которые не могут быть обучены из данных, и их значения должны быть настроены вручную) 3. Обнаружение переобучения: кросс-валидация может помочь выявить переобучение модели, когда модель слишком хорошо подстраивается под обучающие данные и плохо обобщает новые данные. Путем оценки производительности модели на разных фолдах данных, кросс-валидация может помочь определить, насколько модель способна обобщать. 4. Устойчивость оценок: кросс-валидация позволяет получить более устойчивые оценки производительности модели путем усреднения результатов на разных разбиениях данных. Это особенно полезно, когда у вас есть ограниченное количество данных и вы хотите получить более надежные оценки. 5. Оценка важности признаков: кросс-валидация может использоваться для оценки важности признаков в модели. Путем анализа вклада каждого признака в процессе кросс-валидации, можно определить, какие признаки наиболее значимы для предсказания целевой переменной. Подробная статья от Яндекса о кросс-валидации Что такое матрица ошибок? Для чего она нужна? Матрица ошибок (confusion matrix) - это таблица, которая используется в статистике и Data Science для оценки качества модели машинного обучения. Она позволяет оценить, насколько точно модель классифицирует объекты на разные классы. Выглядит матрица ошибок так:
Тут у нас:
Матрица ошибок позволяет оценить следующие характеристики модели:
Как преобразование Бокса-Кокса улучшает качество модели? Во-первых, преобразование Бокса-Кокса — это метод приблизить распределение к виду Гауссова нормального. Основная идея этого метода состоит в том, чтобы найти такое значение ?, чтобы преобразованные данные были как можно ближе к нормальному распределению:
А теперь давайте пощупаем это преобразование. Вначале построим экспоненциальное распределение: Невооружённым взглядом видно ненормальность распределения. Что ж, используем преобразование Бокса-Кокса как Ну вот, теперь всё по красоте — распределение стало ближе к нормальному. Кстати, функция Какие методы можно использовать для заполнения пропущенных данных, и каковы последствия невнимательного заполнения данных? Данные из реального мира часто имеют пропуски. Есть множество методов для их заполнения. Полное «лечение» – это процесс удаления каждой строки, содержащей значение NA. Это допустимо, если значений NA не очень много, они задевают не очень много строк, и данных достаточно – в противном случае, мы можем потерять что-нибудь важное. В данных из реального мира удаление любых строк, содержащих NA, может привести к потере наблюдаемых паттернов в данных. Если полное удаление пропусков невозможно, существует множество методов их заполнения – такие, как заполнение средним значением, медианой или модой. Какой из них лучше, зависит от контекста. Другой метод – это использовать k ближайших соседей (KNN), чтобы определить ближайших соседей строки с пропущенными данными и использовать среднее значение, медиану или моду для этих соседей. Это обеспечивает большую настраиваемость и управляемость, чем можно добиться использованием статистических значений. Если метод заполнения пропусков реализован неаккуратно, оно может привести к ошибке выборки – любая модель хороша настолько, насколько хороши ее исходные данные, и если данные отклоняются от реальности, то же самое будет с моделью. Существует несколько способов обработки пропущенных данных:
Тут ниже показано распределение значений непрерывной характеристики до заполнения пропусков средним значением и после него: А вот так обстоят дела при заполнении пропусков в распределении дискретной характеристики модой: Как видно, после добавления среднего/моды распределение искажается. Кстати, есть ещё варианты заполнения пропусков на основе регрессионных моделей. Так выглядит заполнение на основе линейной регрессионной модели: А это заполнение пропусков на основе стохастической линейной регрессии: В общем, при наличии пропусков лучший метод – удалить строки с пропусками, поскольку это гарантирует, что мы не добавим никаких ошибок или сдвигов, и, в конечном счете, получим точную и надежную модель. Однако, этот метод можно использовать лишь в тех случаях, когда данных много, а процент пропусков невысок. То есть вариант полного удаления просто не всегда возможен. Неплохая статья от Loginom по теме Что такое ROC-кривая? Что такое AUC? ROC-кривая — кривая рабочих характеристик (Receiver Operating Characteristics curve). Используется для анализа поведения классификаторов при различных пороговых значениях. Позволяет рассмотреть все пороговые значения для данного классификатора. Показывает долю ложно положительных примеров (англ. false positive rate, FPR) в сравнении с долей истинно положительных примеров (англ. true positive rate, TPR). Или можно определить её так: ROC-кривая — это кривая роста процента истинно позитивных результатов по мере роста процента ложных позитивных результатов. Полностью случайное предсказание будет изображаться прямой диагональной линией (черная штриховая линия на рисунке). Оптимальная модель будет как можно более близкой к оси y и к линии «y=1». Одна из метрик того, насколько близка кривая ROC к этим линиям – AUC, или площадь под кривой (Area Under Curve). Чем выше AUC, тем лучше работает модель. ROC-AUC показывает производительность решения задачи классификации при различных пороговых значениях. То есть, насколько точно модель различает разные классы. ROC — это вероятностная кривая, в то время как AUC — это площадь под этой вероятностной кривой. ROC-AUC можно интерпретировать, как вероятность, что случайно выбранный объект будет проранжирован классификатором выше (будет иметь более высокую вероятность быть positive), чем случайно выбранный negative объект. Оценка качества в задачах классификации и регрессии Кстати, неплохое объяснение ROC-AUC есть у miracl6. Что такое полнота (recall) и точность (precision)? Точность можно описать как «процент реально истинных результатов среди тех, которые наша модель посчитала истинными». Или, что то же самое: точность равна доле истинноположительных классификаций к общему числу положительных классификаций. Данная величина часто упоминается как positive predictive value (PPV) или положительное прогностическое значение:
Это очень легко можно объяснить с помощью такой картиночки: Несложно увидеть, что попытка отнести все объекты к одному классу неизбежно приведет к росту и уменьшению значения точности. Полнота, известная еще как чувствительность или доля истинноположительных примеров (TPR — true positive rate), определяется как число истинноположительных классификаций относительно общего числа положительных наблюдений:
В общем, полноту можно рассматривать как способность классификатора обнаруживать определенный класс. Графически полноту можно визуализировать так: Точность и полноту для каждого класса легко определять с помощью матрицы ошибок. Точность равна отношению соответствующего диагонального элемента матрицы и суммы элементов всей строки класса, а полнота — отношению диагонального элемента матрицы и суммы элементов всего столбца класса.
тут — класс, — число элементов столбца (равно числу классов), — номер элемента в столбце, — элемент матрицы ошибок Годная статья с Хабра — Метрики в задачах машинного обучения Очень подробное объяснение на Loginom Как бы вы справились с разными формами сезонности при моделировании временных рядов? В реальных данных временных рядов (например, количества плюшевых мишек, закупаемых на фабрике игрушек) часто встречаются различные виды сезонности, которые могут пересекаться друг с другом. Годичная сезонность, вроде пика перед Рождеством и летнего спада, может сочетаться с месячной, недельной или даже дневной сезонностью. Это делает временной ряд нестационарным, поскольку среднее значение переменной различно для разных периодов времени. При моделировании временных рядов с разными формами сезонности можно использовать различные подходы. Вот несколько методов, которые могут помочь: 1. Модель SARIMA (Seasonal AutoRegressive Integrated Moving Average): SARIMA - это расширение модели ARIMA (AutoRegressive Integrated Moving Average) для учета сезонности в данных. Она позволяет моделировать как обычную авторегрессионную и скользящую среднюю компоненты, так и сезонную компоненту. 2. Модель GARCH (Generalized AutoRegressive Conditional Heteroscedasticity): GARCH - это модель, которая учитывает гетероскедастичность (изменчивость дисперсии) в данных. Она может быть использована вместе с моделью ARMA (AutoRegressive Moving Average) для моделирования сезонности. 3. Декомпозиция временного ряда: Декомпозиция временного ряда позволяет разделить его на трендовую, сезонную и остаточную компоненты. Это может помочь в анализе и моделировании сезонности. Существуют и другие методы типа моделирования с помощью нейронных сетей или использование специализированных алгоритмов машинного обучения. Разумеется, выбор метода зависит от конкретной задачи и доступных данных. Кстати, для моделирования сезонности с использованием модели SARIMA можно использовать такой код на Python: тут у нас Какие ошибки вы можете внести, когда делаете выборку?
Для уменьшения количества ошибок в выборке есть 2 основных метода – это рандомизация, при которой наблюдения выбираются случайным образом, и случайная выборка, при которой каждое наблюдение имеет равный шанс попасть в выборку. Что такое RCA (root cause analysis)? Как отличить причину от корреляции? Анализ причин (root cause analysis, RCA) – метод решения задач, используемый для выявления причин некоторого явления. Корреляция измеряет уровень зависимости между двумя переменными, от К примеру, повышение уровня преступности в Канаде совпадает с повышением продаж мороженого, то есть корреляция между ними положительна. Но это не значит, что одно является следствием другого. Просто и то, и другое происходит, когда становится теплее. Провести анализ причинно-следственных связей можно с помощью проверки гипотез или A/B тестирования. Что такое выброс и внутренняя ошибка? Объясните, как их обнаружить, и что бы вы делали, если нашли их в наборе данных? Выброс (англ. outlier) – это значение в данных, существенно отличающееся от прочих наблюдений. В зависимости от причины выбросов, они могут быть плохими с точки зрения машинного обучения, поскольку ухудшают точность модели. Если выброс вызван ошибкой измерения, важно удалить его из набора данных. Есть пара способов обнаружения выбросов. 1) Z-оценка/стандартные отклонения: если мы знаем, что 99.7% данных в наборе лежат в пределах тройного стандартного отклонения, мы можем найти элементы данных, выходящие за эти пределы. Точно так же, мы можем рассчитать z-оценку каждого элемента, и если она равна +/- 3, это выброс. 2) Межквартильное расстояние (Inter-Quartile Range, IQR) – концепция, положенная в основу ящиков с усами (box plots), которую также можно использовать для нахождения выбросов. МКР – это расстояние между 3-м и 1-м квартилями. После его расчета можно считать значение выбросом, если оно меньше Другие методы включают кластеризацию DBScan, Лес Изоляции и устойчивый случайно-обрубленный лес. Выбросы довольно просто обнаружить, но выбор способа их устранения слишком существенно зависит от специфики набора данных и целей проекта. Их обработка во многом похожа на обработку пропущенных данных — можно удалить записи или признаки с выбросами, либо скорректировать их, либо оставить без изменений. Внутренняя ошибка (inlier) – это наблюдение, лежащее в пределах общего набора данных, но необычное либо ошибочное. Поскольку оно находится там же, где остальные данные, его труднее идентифицировать, чем выброс. Внутренние ошибки обычно можно просто удалить из набора данных. Что такое A/B-тестирование? Вот такой довольно широкий вопрос, что ж, давайте разбираться. A/B-тестирование - это методика, используемая для сравнения двух или более вариантов одного и того же элемента или процесса с целью определить, какой из них дает лучший результат. Этот метод широко применяется в маркетинге, веб-разработке и других областях для принятия решений на основе данных. Основные принципы A/B-тестирования:
Процесс проведения A/B-тестирования включает следующие шаги:
A/B-тестирование может быть использовано для различных целей, таких как оптимизация веб-страниц, улучшение пользовательского опыта, повышение конверсии и многое другое. Этот метод позволяет принимать решения на основе фактических данных и улучшать эффективность различных аспектов бизнеса. Например, в маркетинге A/B-тестирование может быть использовано для сравнения различных версий рекламных объявлений или электронных писем, чтобы определить, какой вариант привлекает больше кликов или конверсий. Допустим, у вас есть интернет-магазин и вы хотите узнать, какой дизайн кнопки "Купить" привлекает больше кликов. Вы можете провести A/B-тестирование следующим образом: Шаг 1: Определение цели
Шаг 2: Выбор элемента для тестирования
Шаг 3: Создание вариантов
Шаг 4: Разделение аудитории
Шаг 5: Запуск теста
Шаг 6: Анализ результатов
Шаг 7: Принятие решения
Шаг 8: Отслеживание и оптимизация
A/B-тестирование является мощным инструментом для принятия решений на основе данных и улучшения различных аспектов бизнеса. Однако, для достоверных результатов, необходимо учитывать статистическую значимость и размер выборки. Подробный пошаговый план проведения A/B-тестирования В каких ситуациях общая линейная модель неудачна? Сперва об общих линейных моделях. Общие линейные модели относятся к обычным моделям линейной регрессии с непрерывной переменной отклика. Они включают в себя множество статистических моделей, таких как одиночная линейная регрессия, множественная линейная регрессия, Anova, Ancova, Manova, Mancova, t-тест и F-тест. Общие линейные модели предполагают, что остатки/ошибки имеют нормальное распределение. Вот некоторые ситуации, где общая линейная модель может быть неудачной:
Это были несколько ситуаций, где общая линейная модель будет не лучшим выбором. Является ли подстановка средних значений вместо пропусков допустимым? Почему? Подстановка средних значений – это метод замены пропусков в наборе данных средними значениями соответствующих признаков. Как правило, подстановка средних значений – не лучший метод, поскольку он не принимает во внимание корреляцию между признаками. Например, у нас есть таблица с данными о возрасте и уровне физической формы, и для 80-летнего человека уровень физической формы пропущен. Если мы возьмем средний уровень физической формы для всех возрастов от 15 до 80 лет, очевидно, что наш 80-летний получит более высокий уровень, чем имеет на самом деле. Кроме того, подстановка средних значений уменьшает дисперсию данных и повышает уровень ошибок. Это приводит к менее точной модели и более узким доверительным интервалам. Есть данные о длительности звонков. Разработайте план анализа этих данных. Как может выглядеть распределение этих данных? Как бы вы могли проверить, подтверждаются ли ваши ожидания? Чтобы очистить, исследовать и представить данные, я бы провел EDA – Exploratory Data Analysis (разведочный анализ данных). В процессе EDA я бы построил гистограмму длительности звонков, чтобы увидеть их распределение. Можно предположить, что длительность звонков следует логнормальному распределению. Длительность звонка не может быть отрицательной, так что нижнее значение равно 0. На другом конце гистограммы будет небольшое количество очень длинных звонков. Чтобы подтвердить, распределена длительность звонков логнормально или нет, мы могли бы использовать график КК (QQPlot). Секция "Machine Learning" Что такое векторизация TF/IDF? TF/IDF (Term Frequency/Inverse Document Frequency) - это метод векторизации текстовых данных, который используется для оценки важности слов в документе или коллекции документов. Он основывается на двух понятиях: частоте терма (TF) и обратной частоте документа (IDF). Частота терма (TF) - это мера того, насколько часто определенное слово встречается в документе. Чем чаще слово встречается, тем больше его вес в документе. Обратная частота документа (IDF) - это мера того, насколько уникально слово является в коллекции документов. Слова, которые встречаются редко в коллекции, имеют более высокий IDF и, следовательно, более высокую важность. Векторизация TF/IDF преобразует текстовые документы в числовые векторы, где каждое слово представлено весом, основанным на его TF и IDF. Это позволяет использовать текстовые данные в алгоритмах машинного обучения, которые требуют числовых входных данных. Вот так можно использовать векторизацию TF/IDF на языке Python с использованием scikit-learn: Ну и конечно же TF/IDF может быть использован в самых разных задачах обработки естественного языка, таких как классификация текстов, кластеризация и информационный поиск. Что такое переобучение и как его можно избежать? Переобучение на примере линейной регрессии Переобучение на примере логистической регрессии Переобучение (англ. overfitting) — негативное явление, возникающее, когда алгоритм обучения вырабатывает предсказания, которые слишком близко или точно соответствуют конкретному набору данных и поэтому не подходят для применения алгоритма к дополнительным данным или будущим наблюдениям. При переобучении небольшая средняя ошибка на обучающей выборке не обеспечивает такую же малую ошибку на тестовой выборке. Вот так средняя ошибка для обучающей и тестовой выборок зависит от объёма датасета при переобучении: С переобучением связаны такие понятия как bias и variance. Bias — ошибка неверных предположений в алгоритме обучения. Высокий bias может привести к недообучению. Variance — ошибка, вызванная большой чувствительностью к небольшим отклонениям в тренировочном наборе. Высокая дисперсия может привести к переобучению. Возможные решения при переобучении
Вам дали набор данных твитов, задача – предсказать их тональность (положительная или отрицательная). Как бы вы проводили предобработку? Поскольку твиты наполнены хэштегами, которые могут представлять важную информацию, и, возможно, создать набор признаков, закодированных унитарным кодом (one-hot encoding), в котором '1' будет означать наличие хэштега, а '0' – его отсутствие. То же самое можно сделать с символами '@' (может быть важно, какому аккаунту адресован твит). В твитах особенно часто встречаются сокращения (поскольку есть лимит количества символов), так что в текстах наверняка будет много намеренно неправильно записанных слов, которые придется восстанавливать. Возможно, само количество неправильно написанных слов также представляет полезную информацию: разозленные люди обычно пишут больше неправильных слов. Удаление пунктуации, хоть оно и является стандартным для NLP, в данном случае можно пропустить, поскольку восклицательные знаки, вопросы, точки и пр. могут нести важную информацию, в сочетании с текстом, в котором они применяются. Можно создать три или большее количество столбцов, в которых будет указано количество восклицательных знаков, вопросительных знаков и точек. Однако перед передачей данных в модель пунктуацию следует убрать из текста. Затем нужно провести лемматизацию и токенизацию текста. В модель следует передать не только чистый текст, но и информацию о хэштегах, '@', неправильно написанных словах и пунктуации. Все это, вероятно, повысит точность предсказаний. Вот как-то так можно провести предобработку твитов. Расскажите про SVM SVM (Метод опорных векторов) – это целый набор алгоритмов, необходимых для решения задач на классификацию и регрессионный анализ. Исходя из того что объект, находящийся в N-мерном пространстве, относится к одному из двух классов, метод опорных векторов строит гиперплоскость с мерностью (N – 1), чтобы все объекты оказались в одной из двух групп. На бумаге это можно изобразить так: есть точки двух разных видов, и их можно линейно разделить. Кроме сепарации точек, данный метод генерирует гиперплоскость таким образом, чтобы она была максимально удалена от самой близкой точки каждой группы. SVM и его модификации помогают решать такие сложные задачи машинного обучения, как сплайсинг ДНК, определение пола человека по фотографии, вывод рекламных баннеров на сайты. Также SVM имеет margin-based функцию потерь. Вы можете оптимизировать функцию потерь, используя методы оптимизации, например, L-BFGS или SGD. Интересная вещь, которую могут выполнять SVM – это изучение классификаторов классов. SVM может использоваться для обучения классификаторов (даже регрессоров). В каких случаях вы бы предпочли использовать SVM, а не Случайный лес (и наоборот)? И SVM, и Случайный лес – мощные алгоритмы классификации. Если данные хорошо очищены и не содержат выбросов, SVM будет хорошим выбором. В противном случае, Случайный лес может суметь адаптироваться к этим данным. SVM (особенно с широким поиском параметров) потребляет намного больше вычислительной мощности, чем Случайные леса, так что при нехватке памяти Случайный лес будет предпочтительнее. Случайный лес также предпочтителен для задач мультиклассовой классификации, тогда как SVM предпочтителен для задач высокой размерности, таких, как классификация текста. Каковы последствия установки неправильной скорости обучения? Довольно общий вопрос, вообще проблем от неправильной скорости обучения может быть масса. Вот некоторые из них:
Это мы разобрали некоторые проблемки, связанные со скоростью обучения. И конечно же, важно подобрать оптимальную скорость обучения для каждой конкретной задачи машинного обучения. Объясните разницу между эпохой, пакетом (batch) и итерацией. Это довольно просто:
Вот собственно и всё. Почему нелинейная функция Softmax часто бывает последней операцией в сложной нейронной сети? Потому, что она принимает вектор действительных чисел и возвращает распределение вероятностей. Какой бы вектор x ни подали на ее вход (неважно, положительных или отрицательных), на выходе будет набор чисел, пригодный в качестве распределения вероятностей: каждый элемент выходного значения будет неотрицательным, и их сумма будет равна 1. Вообще, для начинающих познавать нейронки я всегда рекомендую бесподобные ролики от Дмитрия Коробченко. В том числе он круто объясняет, что такое Softmax. Объясните и дайте примеры коллаборативной фильтрации, фильтрации контента и гибридной фильтрации Коллаборативная фильтрация - это метод рекомендации контента, основанный на собранных данных о предпочтениях пользователей. Он использует информацию о предыдущих действиях пользователей, таких как оценки, рейтинги или история просмотров, чтобы предложить им подходящий контент. Этот метод основывается на предположении, что пользователи с похожими предпочтениями будут заинтересованы в схожем контенте. В качестве примера представим, что у нас есть онлайн-платформа для потокового видео, где пользователи могут оценивать фильмы. Коллаборативная фильтрация может использоваться для рекомендации фильмов пользователям на основе их предыдущих оценок и оценок других пользователей с похожими вкусами. Например, если пользователь А оценил фильм X высоко, а пользователь Б с похожими предпочтениями также оценил фильм X высоко, то система может рекомендовать фильм X пользователю Б. Фильтрация контента - это метод, который используется для отбора и предоставления пользователю контента, соответствующего его интересам, предпочтениям или потребностям. Он основывается на анализе и классификации контента с использованием различных алгоритмов и правил. Предположим, у нас есть новостной сайт, который предлагает пользователю новости на основе его интересов. Фильтрация контента может использоваться для анализа и классификации новостных статей на основе их содержания, тематики или ключевых слов. Например, если пользователь интересуется спортом, система может фильтровать новости и предлагать ему только те статьи, которые относятся к спорту. Гибридная фильтрация - это комбинация различных методов фильтрации, таких как коллаборативная фильтрация и фильтрация контента, для предоставления более точных и персонализированных рекомендаций пользователю. Этот подход позволяет учесть как предпочтения пользователя, так и характеристики контента. Пример. Скажем, что у нас есть интернет-магазин, который предлагает пользователю рекомендации товаров. Гибридная фильтрация может использоваться для анализа предыдущих покупок пользователя (коллаборативная фильтрация) и характеристик товаров (фильтрация контента). Например, система может рекомендовать пользователю товары, которые были приобретены другими пользователями с похожими предпочтениями и имеют характеристики, соответствующие интересам пользователя. Вот как-то так работают все эти виды фильтрации. В чем разница между bagging и boosting для ансамблей? Вспомним, что ансамбль алгоритмов/методов — метод использования нескольких обучающих алгоритмов с целью получения лучшей эффективности прогнозирования, чем от каждого алгоритма по отдельности. Этакое комбо. Работает ансамбль алгоритмов так: Bagging - это bootstrap aggregating. Вы из одной выборки делаете много подвыборок и потом на подвыборках обучаете, создавая устойчивые к выбросам регрессоры и классификаторы. Ключевой аспект, что обучение происходит параллельно. Пусть наша целевая зависимость задаётся как и к ней добавляется ещё нормальный шум . Такой семпл может выглядеть так: Попробуем посмотреть, как выглядят предсказания решающих деревьев глубины 7 и бэггинга над такими деревьями в зависимости от обучающей выборки. Обучим решающие деревья 100 раз на различных случайных семплах размера 20. Возьмём также бэггинг над 10 решающими деревьями глубины 7 в качестве базовых классификаторов и тоже 100 раз обучим его на случайных выборках размера 20. Если изобразить предсказания обученных моделей на каждой из 100 итераций, то можно увидеть примерно такую картину: Видно, что общая дисперсия предсказаний в зависимости от обучающего множества у бэггинга значительно ниже, чем у отдельных деревьев, а в среднем предсказания деревьев и бэггинга не отличаются. Чтобы подтвердить это наблюдение, мы можем изобразить смещение и разброс случайных деревьев и бэггинга в зависимости от максимальной глубины: На графике видно, как значительно бэггинг сократил дисперсию. На самом деле, дисперсия уменьшилась практически в 10 раз, что равняется числу базовых алгоритмов , которые бэггинг использовал для предсказания: Кстати, весь код, с помощью которого получены эти графики лежит тут на гите. Boosting - это итеративные методы улучшения результатов ансамблей, на каждом следующем этапе обучения более важными для функции потерь оказываются плохо классифицированные на предыдущем этапе точки (или точки где предсказанное значение сильнее отличается от экспериментального). Отличие от бэггинга в том, что в бэггинге базовые алгоритмы учатся независимо и параллельно, а в бустинге — последовательно. Каждый следующий базовый алгоритм в бустинге обучается так, чтобы уменьшить общую ошибку всех своих предшественников. Как следствие, итоговая композиция будет иметь меньшее смещение, чем каждый отдельный базовый алгоритм (хотя уменьшение разброса также может происходить). На текущий момент основным видом бустинга с точки зрения применения на практике является градиентный бустинг — о нём можно почитать тут, кстати. Градиентный бустинг сейчас — основное продакшн-решение, если работа происходит с табличными данными (в работе с однородными данными (картинками, текстами) доминируют нейросети). Неплохая теория от ИТМО по этому поводу Супер-подробное объяснение от Яндекса Как выбрать число k для алгоритма кластеризации «метод k-средних» (k-Means Clustering), не смотря на кластеры? Немного про сам метод k-средних Это всеми любимый неконтролируемый алгоритм кластеризации. Учитывая набор данных в виде векторов, мы можем создавать кластеры точек на основе расстояний между ними. Это один из алгоритмов машинного обучения, который последовательно перемещает центры кластеров, а затем группирует точки с каждым центром кластера. Входные данные – количество кластеров, которые должны быть созданы, и количество итераций. Есть два метода выбора значения k для метода k-средних. Первый – это «метод локтя». Строится график зависимости функции потерь от количества кластеров k, и если представить, что график – это «рука», то лучшее значение количества кластеров будет там, где «локоть» этой «руки». В данном случае очевидно, что «локоть» находится при k=3. Однако, это не всегда так очевидно, поэтому в тех случаях, когда это не так, используется метод силуэта. Этот метод использует «рейтинг силуэта», находящийся в диапазоне от -1 до 1 для каждого количества кластеров. Количество кластеров с максимальным рейтингом обычно является оптимальным. Как бы вы могли наиболее эффективно представить данные с пятью измерениями? Что ж, для представления данных с пятью измерениями можно использовать различные методы визуализации, такие как:
Примеры алгоритмов, которые можно использовать для анализа данных с пятью измерениями, включают метод главных компонент (PCA), кластерный анализ, алгоритмы классификации и регрессии, а также нейронные сети. Эти алгоритмы могут помочь выявить зависимости между переменными и предсказать значения целевой переменной на основе имеющихся данных. Говоря о понижении размерности — вот пример в тему: тут, в «Проанализировал комментарии нейросетью» Онигири при анализе комментов переходит от размерности 1536 к 2D и описывает некоторые практические инструменты типо t-SNE (стохастическое вложение соседей с t-распределением). Кстати, насчёт понижения размерности: иногда лучше повысить размерность. Например, это бывает в задачах классификации, когда в более многомерном пространстве "сложный" случай решается 1 гиперплоскостью. Что такое ансамбли, и чем они полезны? Ансамбли – группы алгоритмов, которые «голосуют» для принятия финального решения. Ансамбли успешны, поскольку слабые стороны одной модели могут быть компенсированы сильными сторонами других моделей, это значит, что успешные модели должны быть диверсифицированы. Это также значит, что модели, входящие в ансамбль, должны иметь разные слабые стороны. Исследования показали, что правильно созданные ансамбли дают лучшие результаты, чем одиночные классификаторы (в принципе логично) Держите примеры ансамблей различной структуры и содержания: В вашем компьютере 5Гб ОЗУ, а вам нужно обучить модель на 10-гигабайтовом наборе данных. Как вы это сделаете? Итак, есть несколько вариантов решения проблемы.
В дополнение упомяну, что для SVM может сработать частичное обучение. Набор данных можно разбить на несколько наборов меньшего размера. Поскольку SVM – это алгоритм с низкими вычислительными требованиями, в данном сценарии это может быть лучшим выбором. Если данные не подходят для SVM, можно обучить нейронную сеть с достаточно малым размером пакета (batch size) на сжатом массиве NumPy. В NumPy есть несколько инструментов для сжатия больших наборов данных, которые интегрированы в широко распространенные пакеты нейронных сетей вроде Keras/Tensorflow и PyTorch. Всегда ли методы градиентного спуска сходятся в одной и той же точке? Нет, методы градиентного спуска не всегда сходятся в одной и той же точке. Поскольку пространство ошибок может иметь несколько локальных минимумов, различные методы градиентного спуска могут сходиться в разных точках, в зависимости от их характеристик: выбора начальной точки, формы функции, шага градиентного спуска и других. Стоит однако упомянуть, что при определенном стечении обстоятельств методы градиентного спуска могут сходиться к одной и той же точке. Скажем, если функция выпуклая и гладкая, и шаг градиентного спуска выбран правильно, то методы градиентного спуска могут сойтись к глобальному минимуму функции. Гляньте на работу разных оптимизаторов (методов градиентного спуска) — видно, что не все сходятся. Вот и всё, какой вопрос — такой и ответ. Кстати, неплохая статья на Хабре в тему — Градиентный спуск по косточкам Что такое рекомендательные системы? Очень широкий вопрос. Ну ок, можно начать с формального определения. Рекомендательные системы – это разновидность систем фильтрации информации, которая должна предсказывать предпочтения пользователя. Либо же она предсказывает рейтинги, которые пользователь дал бы товарам. Рекомендательные системы широко используются для фильмов, новостей, научных статей, товаров, музыки и многого другого. Основные подходы к построению рекомендательных систем:
Методы машинного обучения, используемые в рекомендательных системах:
Для оценки качества рекомендательных систем используются метрики, такие как точность, полнота, F1-мера и AUC-ROC. Кроме того, для улучшения качества рекомендаций могут использоваться методы активного обучения, которые позволяют системе запрашивать у пользователя дополнительную информацию о его предпочтениях. Кстати, в апреле Андрей Карпати (тот самый из OpenAI) запилил свою рекомендательную систему и показал, что это не так уж сложно. Делается она так... Объясните дилемму смещения-дисперсии (bias-variance tradeoff) и приведите примеры алгоритмов с высоким и низким смещением. Смещение (bias) – это ошибка, внесенная в вашу модель из-за чрезмерного упрощения алгоритма машинного обучения, которое может привести к недообучению. В процессе обучения модели делаются упрощенные предположения, чтобы сделать целевую функцию более простой для понимания. Алгоритмы машинного обучения с низким смещением включают деревья решений, KNN и SVM. А высоким смещением, в частности, отличаются линейная и логистическая регрессия. Дисперсия (variance) – это ошибка, внесенная в вашу модель сложным алгоритмом машинного обучения, при котором модель усваивает также и шум из тренировочного набора данных, что приводит к плохой точности на тестовом наборе данных. Это может привести к высокой чувствительности и переобучению. Обычно, по мере усложения модели вы увидите снижение ошибки вследствие уменьшения смещения модели. Однако, это происходит только до определенной точки – и если вы будете усложнять свою модель дальше, в конце концов вы ее переобучите. Дилемма bias–variance — конфликт в попытке одновременно минимизировать bias и variance, тогда как уменьшение одного из негативных эффектов, приводит к увеличению другого. Выглядит это как-то так — при небольшой сложности модели мы наблюдаем high bias. При усложнении модели bias уменьшается, но variance увеличится, что приводит к проблеме high variance. Что такое PCA, и чем он может помочь? Метод главных компонент (Principal Component Analysis, PCA) – метод сокращения размерности путем нахождения n ортогональных векторов, представляющих наибольшую вариантность из данных, где n – это размерность, до которой пользователь хочет сократить данные. Эти n векторов служат измерениями для новых данных. PCA может помочь ускорить работу алгоритмов машинного обучения или визуализировать данные слишком большой размерности. А вот последовательное уменьшение 3D — 2D — 1D: Метод главных компонент часто используется для представления многомерной выборки данных на двумерном графике. Для этого полагают и полученные пары значений наносят как точки на график. Проекция на главные компоненты является наименее искаженной из всех линейных проекций многомерной выборки на какую-либо пару осей. Как правило, в осях главных компонент удаётся увидеть наиболее существенные особенности исходных данных, даже несмотря на неизбежные искажения. Например, можно судить о наличии кластерных структур и выбросов. Две оси и отражают «две основные тенденции» в данных. Иногда их удаётся интерпретировать, если внимательно изучить, какие точки на графике являются «самыми левыми», «самыми правыми», «самыми верхними» и «самыми нижними». Этот вид анализа не позволяет делать точные количественные выводы и обычно используется с целью понимания данных. Аналогичную роль играют многомерное шкалирование и карты Кохонена. А вот так выглядит на практике уменьшение размерности с помощью PCA. Возьмём те самые ирисы: Супер-подробная лекция от ВШЭ по PCA с кодом Объясните разницу между методами регуляризации L1 и L2. Регуляризация – метод, который используется в машинном обучении для предотвращения переобучения путем добавления штрафного значения к функции потерь, которую модель пытается минимизировать. Наиболее популярные — L1 и L2 регуляризация. L1 чаще полезна в тех случаях, когда из большого количества признаков необходимо отсеять нерелевантные признаки, обнуляя их. И оставить только те признаки, которые имеют отношение к предсказанию. L2 же используется, когда все признаки имеют отношение к прогнозированию целевого признака, но необходимо уменьшить влияние признаков, которые будут явно выделяться из всего набора признаков при обучении модели. L1 (или регуляризация Лассо) Добавляет штрафной коэффициент пропорциональный абсолютному значению весов модели. В общем, L1 устанавливает малые коэффициенты равными нулю, и добавляет штрафы для больших коэффициентов. В итоге у нас получается простая модель с меньшей вероятностью переобучения. Формула L1 на примере целевой функции модели линейной регрессии:
Сама норма L1 определяется как сумма абсолютных значений весов:
Так мы можем использовать L1-регуляризацию P.S. тут коэффициент прямой = 0 чисто в демонстративных целях. Регуляризация L2 (a.k.a. регуляризация гребня) Добавляет штрафной коэффициент к функции потерь пропорциональный квадрату весов. Таким образом уменьшает веса до нуля, в результате чего получается более плавная модель с меньшими, но ненулевыми весами для всех объектов. L2 полезна для уменьшения влияния на модель шума или выбросов в данных, а так же повышения стабильности модели. Формула L2 на примере целевой функции модели линейной регрессии:
Норма L2 — это обычное Эвклидово расстояние по "обобщённой теореме Пифагора":
Вот так можно использовать L2 Отличное объяснение с примерами про L1 и L2 есть тут, посмотрите А вот здесь супер-понятное объяснение L2 почти на пальцах Ну и финальный вопросов для истинного дата-сайнтиста: "Сколько карандашей используется в Индии?" Пишите ответы и рассуждения в комменты) Кстати, вот годнота для подготовки к собесу. С любовью отбирал каждый источник, каждый читал хотя бы по диагонали. Если впитать хоть часть этого, то можно в своём познании преисполниться:
Кстати, если вам реально хочется изучать Data Science, массу годного контента вы найдёте в моём тг канале — это разборы заданий с собесов и масса полезных инструментов. А вот телеграм канал для тех, кто хочет изучить машинное обучение — Нейронные сети, машинное обучение, python. Вот ещё папка с годными ресурсами по Python — поможет в подготовке к собесу. Параллельно к этой статье я запилил ролик с разбором части этих вопросов, прошу — https://youtu.be/6Pk4OgdNxXQ Источник: habr.com Комментарии: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||