Подготовка к собеседованию на Machine Learning Engineer
Менторы
Специалисты своей области, которые смогут помочь вам
Middle .Net Developer
Senior Product Manager
Middle Python Developer
Ведущий программист
Backend Software Engineer (PHP)
Senior .NET/C# developer
Middle DevOps Engineer | Tbilisi, Georgia
Middle C# .NET
Senior PHP-разработчик
Middle python developer
Каналы
Полезные Telegram каналы и чаты
Транскрипция видео:
Привет меня зовут Саша я Junior У меня есть профильное образование Я закончил МГТУ по специальности пригодная информатика во время учебы 8 меня заинтересовали статистика базы данных дальше я уже пошла на всякие курсы Чтобы как-то больше углубляться в эти сферы наткнулась на машине обучения вообще не знаю что такое [музыка] долгое время не обращали внимание эти курсы потом нашла на специализацию я решила попробовать и с тех пор вот так втянулась уже прошло после этого несколько лет я прошла целый кучу онлайн
00:00:03 - 00:01:35
курсов на степике курсерия закончила также Яндекс практику по специальности аналитик данных и сейчас вот обучаюсь карта курсах на остатке очень круто очень много онлайн курсов ты уже работаешь Да ты не работаю Я сейчас активно ищу как раз работал вот вообще у меня есть такой релевантный в эти сфере я работала что-то вроде и никельщиком человеком компьютерщиком городской библиотеке но недавно уволилась теперь вот полноценный еще работу дописать понял Ну надеюсь сегодняшнее собеседование тебе поможет в поисках
00:00:56 - 00:02:30
что же Давай начнем Давай начнем просто С простых каких-то вопросов Какие структуры данных Ты знаешь с какими работала в чем заключается их суть а ну в питоне есть Начнем с того что изменяемые неизменяемый да типы данных Если брать неизменяемые то есть такие как строки последовательность остальные последовательности питания множество Ну вроде бы все изменяемость и неизменяемость сказала хорошо действительно верно назвала основные структуры Какие из них изменяемые и какие неизменяемые Окей А с какими тебе чаще всего
00:01:43 - 00:03:07
приходилось работать ну это списки Ну естественно info стандартный чаще всего с ними иногда типа множество реже можешь рассказать что такое дикт как он работает для чего это словарь в котором можно получить значение по ключу положить туда его и получать вот так что у него есть такая интересная особенность Что Ключ должен быть обязательно неизменяемого типа потому что под капотом считается хэш функция для всех ключей в словаре и это позволяет нам инициализировать быстрый поиск по ключа поэтому словарь дает нам возможность
00:02:36 - 00:04:12
быстро обращаться к элементам правильно писал работу словаря и отдельно прям порадовало что рассказала про ему табельное исключение То есть то что ключи должны быть неизменными объектами это та вещь которая может простреливать в реальном коде и очень хорошо если кандидат Действительно это знает Да это очень хороший ответ Спасибо тогда Ну окей спасибо Я предлагаю сейчас решить небольшую задачку связанную со структурой данных вот я написал на экране и функцию сейчас я ее отформатирую по пинтоновский
00:03:27 - 00:04:45
функция делает следующее она принимает список на вход или любой другой объект который есть метод но в целом не важно и добавляет двое конец И вот я или Мой коллега написали вот такой код и нас интересует вопрос что будет лежать в массиве C После выполнения кода на строчках 5-8 такие задачи про передачу функцию объекта по ссылке это прям классика задач ПРО ссылочную модель их могут Вполне себе спросить на любом собеседовании чисто для того чтобы проверить кандидат знает вообще как она устроено или нет И владеет ли кандидат
00:04:06 - 00:05:34
всякими подводными камнями которые могут случиться при работе со списками Поэтому такие задачи в разных вариациях Обязательно будут встречаться на первых порах Ну Начнем с того что список если мы так Сначала мы создаем список После этого мы присваиваем списку R1 это же списка они получаются у нас ссылаются на одно значение после этого переменную C переменной B точнее вызываем функцию функцию Передаем туда наш массив наш список переменной C Мы тоже вызываем функцию Передаем туда наш список R1 получается
00:04:51 - 00:06:18
при первом вызове функции у нас список добавляется двойка список при втором вызове функции у нас опять же в этот список получается что еще раз добавится двойка потому что ну насколько я понимаю потому что он особо списка R1 ссылается на один объект очень хорошо что это проговорила действительно в конце будут две двойки Да и тогда что будет цена на выходе Так что у нас получается ну две двойки получается Если писать до этого Да все верно Это правильный ответ мы быстро разобрались с этой задачей тогда я предлагаю
00:05:46 - 00:07:11
переходить к следующей тут уже придется не интерпретировать код а самой какой-то его написать нам нужно написать функцию написать функцию Давай название придумаем написать функцию сумма в ту которая принимает на вход массив это лист и какое-то число Target int Будем считать что массив состоит из нутов и нам нужно вернуть пару чисел Ну пусть будет тепло которое который в сумме Дали бы число таргетов если таких чисел нет то вернуть [музыка] там например просто пустой тюпол или или вернуть на Ну давай просто пусто идти
00:06:34 - 00:08:20
упал у таких задач бывает вообще много вариантов и обычно ими как раз проверяют то как человек владеет алгоритмами И вообще мысли которые человек может делать потому что одно дело когда кандидат проверяет какие-то ограниченные условия другое дело когда кандидат просто бросается к первому решению третье это вообще если человек заранее будет думать А как можно это решить оптимально задача сходу кажется простой но она вообще может выразиться в кучу всяких мыслей Эти мысли как раз таки помогают увидеть Каким образом человек
00:07:34 - 00:08:39
подходит к задаче Поэтому такие Казалось бы простые вещи могут спрашивать очень-очень часто здесь как раз таки будут хотеть слышать Ваши рассуждения только вы подходите самого начала проблеме Если тебе удобно мы можем сначала обсудить какую-то логику решения потом ее заходить Ну или если ты хочешь сразу писать то можно не так [музыка] нам нужно просмотреть все значения и найти средних те которые дадут сумме Таргет очень хорошо что проговаривает свое понимание задачи Потому что когда слышишь задачу на собеседовании очень
00:08:08 - 00:09:23
легко ее понять не так понять не так какую-то тонкость и поэтому проговорить это вслух то как ты это понял и воспринял это очень хорошая защита от всевозможного рода непоняток вообще здесь Было бы хорошо еще попробовать какие-то примеры от себя сказать и потом спросить интервью Правильно ли я понял и правильно ли на этих примерах будет оно работать Именно таким образом я сейчас скажу обязательно два числа и выдать на вход из этих двух чисел Так ну здесь нужно какой-то цикл написать однозначно только мы хотим написать функцию поэтому
00:08:48 - 00:10:08
давай будем писать канонично и Давай я тебе какой-то один пример добавлю по поводу того как это может выглядеть вот у нас на вход поддается массив вот такой и Target 13 тогда мы должны к примеру вернуть Да вот так либо подходят две пары и я в примере вернул две пары Давай для начала будем возвращать хотя бы одну а потом подумаем как можно модифицировать решение если что Так ну вот я если честно затопила и мне пока что какое-то такое прям банальное решение приходит голову можно пройтись по элементам попробовать его сложить
00:09:43 - 00:11:14
Каждый элемент с со всеми остальными получается Ну давай начнем с банального это всегда подход метод перебора вообще вполне годится особенно если сходу не получается придумать что-то умное перебирать просто все варианты и проверять подходит Они под ответ или нет это нормальная тема Да давай мы банальное решение напишем самое простое которое Тебе в голову приходит а это всегда вариант и мы потом модифицируем его если придумаем на всякий случай предупрежу что у тебя массив называется AR в [музыка]
00:10:49 - 00:12:17
так здесь можно запускать я правильно понимаю нет здесь код запускать К сожалению нельзя Это просто доска для написания про запуск кода обычно на собеседованиях его не запускают на каких-то прям компьютерах или машинах Все что делается это интервьюер проверяет код в голове он его прогоняет Затем он подставляет какие-то возможные ограниченные случаи какие-то особые кейсы при которых алгоритм может развалиться проверяет то насколько написаны кандидатом алгоритм будет устойчив к такому роду плохим
00:13:09 - 00:14:16
данным Давай попробуем если ты считаешь что оно готово и душе если решение готово Извини что если я перебил вдруг нет она и точно не готова Окей тогда я дам тебе время подумать как как бы как ты будешь считать что она готова говорить про вопросы готовы или нет абсолютно нормально брать паузу прямо так и говорить что пока я думаю что решение не готово и дайте мне немножечко подумать торопиться ни в коем случае не надо потому что если поторопиться то можно очень много наломать дров и лучше лишний
00:13:42 - 00:14:53
раз посидеть проверить Все ли правильно сделано прогнать на каких-то тестовых данных теперь мне кажется что должно сработать Вот как раз таки в тот момент когда вы говорите что решение готово интервью садится его проверять то есть уже полноценно запуская свои какие-то тестовые случаи голове прогоняя против каких-то ограниченных условий и вот здесь надо быть очень осторожным Потому что когда вы говорите готово лучше действительно лишний раз все это проверить из того что я здесь вижу стоило проверить на пробных данных то
00:14:33 - 00:15:33
есть в голове придумать какие-то примеры подставить их прям алгоритм который получился и самостоятельно поискать возможные проблемы помимо этого тогда вы думаете что горитм готов стоит проверить а не использовали ли вы каких-то функций или методов которые в принципе нет в частности у листа нету метода дроп и на это обратят внимание скорее всего при разборе потому что на собеседовании по коду ожидается что вы будете писать работающий код помимо этого из того что бросается в глаза здесь переменная и
00:15:03 - 00:16:00
будет продвигаться по Range то есть на будет бежать по индексам а же будет бежать по самим значениям потому что написано же в массиве и еще что тут видно сразу то что EOS у нас происходит таким не очень хорошим способом в том плане что если мы встречаем элемент который нам не подходит то мы печатаем Table А вообще говоря можем встретить такой элемент неподходящего очень много раз и мы будем писать этот Table несколько раз это исправляется очень легко надо EOS просто вынести как бы логически на несколько
00:15:31 - 00:16:36
блоков ниже то есть вынести его из цикла но опять же такие ошибки очень легко совершить из-за невнимательности может быть из-за того что растеряешься поэтому опять же стоит лишний раз остановиться чуть-чуть под успокоиться и проверить алгоритм от начала до конца если сказать что алгоритм полностью готов то интервьюер имеет полное право уже самостоятельно обращать внимание на эти ошибки находить их но и скорее всего это пойдет не в плюс Когда будет приниматься решение об оценке этапа собственно мы
00:16:03 - 00:17:02
это как раз дальше Увидим что нарцисс будет прогонять это решение в голове но это по-хорошему должен делать сам кандидат Давай попробуем прогнать это в голове Мы берем наш массив на первую итерации цикла у нас будет 0 потому что мы идем по индексам цикла дальше Мы берем Допустим мы дропаем этот элемент и берем дроп им тот элемент первый элемент будет второй здесь тогда мы будем складывать 0 0 и 3 и сравнивать его с наргитом но у нас вообще нету нуля в массиве то есть мы здесь складываем и оно равно
00:16:33 - 00:18:24
нулю здесь мы уже бежим значением так-то смотрим исправили ошибку серии это хорошо но стоит помнить что любое исправление которое было продиктовано самим интервьюером оно будет скорее идти как минус OK у нас не равно таргету Значит мы перейдем вот в эту ветку и будем и распечатаем пустой получается что мы его распечатали рано потому что мы не проверили все элементы и давай Принт заменим на Return это все-таки функция она возвращает значение Я думаю что так будет более Красиво и правильно Так ну вот мы нашли еще одну неточность
00:17:30 - 00:19:05
Давай придумаем как ее поправить вообще писать функции и использовать retur открывает немножечко такой хороший способ Если вы пользуетесь Return и у вас есть какой-нибудь такой кейс или алгоритм в духе что вот мы ищем что-то в цикле for И если мы это совсем не находим то нам надо вот прыгнуть какой-то Особый случай То есть если совсем-совсем ни разу не вошли в условия Ничего не нашли то нам надо как-то отдельно сделать retur Вот таких случаях можно сделать просто Return в конце и там будет гарантироваться что если вы не
00:18:25 - 00:19:24
дошли то вы ни разу не вошли на прошлых итерациях Потому что есть вы вошли то вы уже вышли из функций отработал бы retur это такой полезный трюк его можно использовать когда проектировать алгоритмы Ну получается при вызове при грузови оператора retur мы выходим из функции поэтому можно просто если у нас ни одно ни разусловия не выполнилось можно получается мои функции можно воткнуть здесь ниже и тогда мы выведем в итоге пустой если до этого не вывелось ни одна из пар Да ну кажется у тебя тогда что-то
00:19:03 - 00:20:25
да с количеством отступов потому что да здесь еще вот теперь теперь кажется это пофиксили Давай смотреть что получится [музыка] Окей смотрим прогонять код после любого исправления Нужно точно так же как и когда написали в первый раз но опять же Это должен делать не интервьюер А сам кандидат по-хорошему это то что ожидается при решении на полный балл мы идем так складываем это элемент массива с житом Кроме этого получаем Таргет и Допустим мы попали на три и десять Но тогда мы вернем один 10 такое явление происходит К сожалению
00:19:56 - 00:21:42
часто Когда какое-то исправление сделанное на ходу сделанное как-нибудь терапев ломает все как раз таки вот здесь и произошло что нашли ошибку и исправили и от того что мы ее исправили в одном месте она поломала что-то в другом месте То есть у нас возникла по сути новая ошибка И именно поэтому после каждого исправления какого-либо надо проверять не только тот участок Где вы исправили но и вообще весь остальной код именно делать это у себя в голове опять же не торопиться Если вы чувствуете что что-то нужно Тут прям тщательно думать
00:21:03 - 00:22:05
можно сказать что я хотел бы немножечко подумать о Действительно ли это исправляет Действительно ли это не исправляет и это будет совершенно нормально интервью расскажет конечно Подумайте вы посидите минутку или две спокойненько все это посчитаете и в конце вы дадите свой вердикт Можно ли это проверять можно это считать решением или нет Если вы выясните что ваше исправление ничего не исправила так и говорите смело Что опять же я посмотрел Мне кажется это не исправила давайте я еще сижу посижу подумаю пишу как это
00:21:34 - 00:22:29
лучше сделать интервью не будет на вас давить не придется Если вы хотите поспешить и чувствуете Что на вас давят Или например вам кажется что вот вам уже подсказывают значит что-то не так значит надо быстрее быстрее что мы там условно может быть перешли в какую-то стадию блиц-опроса такого не будет на вас не давят все нормально вам дали какой-то идеальное исправление но это не означает что Вы теперь будете Все идеи вытаскивать из интервьюера опять же чем больше кандидат скажет сам тем больше ему это уйдет в
00:22:02 - 00:23:02
плюс поэтому не стоит торопиться не стоит переживать и не ставить целью перед собой быстро исправиться если вам указали на какие-то недостатки решения это конечно всегда страшно это очень страшно когда интервьюер говорит ваши ошибки но не нужно впадать панику нужно держать себя и не делать какие-то поспешные исправления а посидеть и тщательно обдумать так хорошо давай теперь снова проверять у нас будет на первой итерации естественно мы ничего не получим нас интересует Вторая мы идем три выбрасываем тройку будем складывать 3 +
00:22:47 - 00:23:55
1 Дальше мы будем складывать 3 + 5 нет 3 плюс 8 нет 3 плюс 10 13 вернем Окей супер [музыка] OK это решение у нас перебирает практически все возможные пары элементов в массиве и это как бы не супер оптимально потому что можно может быть можно сделать Быстрее давай с тобой подумаем как это решение можно ускорить какие у тебя идеи есть когда говорят про ускорение алгоритма обычно ждут использования какой-то другой структуры данных или совсем другого алгоритма такого чтобы снизить асимптотику решения
00:23:21 - 00:25:05
то есть условно если у вас было n квадрат превратить его каким-то образом обычно интервью я заранее знает какая синтетика будет оптимально у решения алгоритма если они видят что предложенные кандидатом вариант не подходит под эту симпточку похуже то они могут начать говорить как раз что как это можно ускорить Как вы думаете какие здесь можно сделать оптимизации и все в этом духе обычное решение виде там импортировать библиотеку и реализовать точно такой же алгоритм но там у нас C плюс под капотом они обычно не
00:24:13 - 00:25:10
устраивают ждут все-таки именно то что вы предложите какую-то новую структуру или алгоритм [музыка] я не помню но есть точно какая-то функция библиотеки которая перемножает элементы последовательности и вот можно собрать все комбинации чисел сравнить их starget можно тогда Слушай если у тебя нет идей это вполне мог Мы можем просто двигаться дальше если у нас останется время вернуться к этой задаче и еще пару рассуждать Ну на данный момент вроде бы нет здесь стоит сделать ремарку что Саша еще не приступала к моменту записи
00:24:42 - 00:26:21
собеседования к блоку по собеседованиям и алгоритмам поэтому абсолютно нормально что она не смогла дать оптимизированные решения и или же там предложить оценку Асим точке алгоритма Это совершенно нормально было на тот момент Ну и наверное последний заключительный вопрос от меня давай вот про метод дроп говорим небольшая Ремарка в целом На мой взгляд во время собеседования не обязательно помнить синтаксис всех методов списках и так далее их очень много и запомнились просто нереально Но если ты там предполагая что
00:25:49 - 00:27:13
какого-то объекта есть какой-то метод и ты не уверена есть он или нет это всегда хорошая практика проговорить что этот метод на твой взгляд будет делать это вполне нормально [музыка] все верят что ты сможешь это написать и Давай в этом случае мы тоже проговорим вот метод Drop что он делает с массивом твоей интерпретации моей интерпретации он удаляет из списка значение Ну удаляет элемент по значению элементы по значению Хорошо он удаляет все элементы или только первое вхождение первое вхождение Окей хорошо тогда это
00:26:31 - 00:27:52
зафиксировали Давай зачитаем это решение и пойдем дальше к вопросам про машинное обучение в целом все очень понравилось задача Решала очень Бойко и ошибки по большому счету были такие скорее в духе Не доглядела это часто случается когда нету большого опыта в решении задач или прохождение собеседований очень легко растеряться я сам много терялся когда только начинал здесь помогает практика практиковаться в решении и готовить те задачи которые чаще всего встречаются какие-то классические вещи по поводу
00:27:11 - 00:28:24
процесса хотелось бы дополнительно сказать что за полчаса обычно успевают решить как раз одну задачу и это в целом идет так интервьюер ставит задачу кандидату объясняют ее условия Затем он приводит какие-то примеры как это должно выглядеть на каких конкретных данных после этого интервьюер спрашивают у кандидата какие у него есть мысли какая у него есть идея алгоритма этот алгоритм обсуждается устно то есть кандидат устно проговаривает вот что мы будем делать как это будет выглядеть алгоритмически
00:27:49 - 00:28:55
То есть тут в цикле проходимся тут там сравниваем с этим Если это так то двигаем вот сюда заводим переменную счетчик Но это все обговаривается именно устно интервьюер это слушает указывает на какие-то сильные места на какие-то слабые места в основном он говорит те вещи которые можно улучшить оптимизировать спрашивать может быть какие-то вопросы про краевые случаи Как обрабатывать после этого кандидат Может предложить более оптимальное решение придумать какую-то оптимизацию на месте может придумать какие есть граничные условия
00:28:21 - 00:29:18
как их надо обходить аккуратно но и после того как это все обсудили то есть кандидат ответил интервью на эти вопросы или может быть не ответил и сказал что Ну пока Ничего в голову не лезет Давайте как-то вот так хотят напишем после этого приступают непосредственно кодированию алгоритма то есть написание кода который реализует тот алгоритм который только что обсудили и на котором сошлись Ну и самом конце когда вы написали этот алгоритм вы прогоняете его в голове проверяйте его на хороших данных на
00:28:50 - 00:29:40
плохих на каких-то краевых данных который находится в диапазоне разрешенных говорить Интервью после этого что вы все это финальный вариант после чего интервью начинает смотреть на ваш код прогонять его в голове точно также подставлять какие-то краевые случаи хорошие данные плохие данные искать какие-то недостатки и после этого он при необходимости укажет вам на ошибки или какие-то недочеты и будет смотреть на то смогли вы их исправить Как вы их исправили и потребовались дополнительные подсказки при исправлении
00:29:15 - 00:30:16
Ну естественно то сколько вы еще дополнительных ошибок вы могли допустить при исправлении Если все будет хорошо то Вас могут вообще не оказаться недочетов вам скажу что все правильно И это будет замечательно опять же обычно за полчаса решает одну задачу Но если идти очень Бойко то можно успеть решить и две Ну либо одну задачу и пообсуждать какие-то особенности языка если это входит в программу интервью Что такое линейный модели допустим Линейная регрессия как она работает и в чем ее преимущество и
00:29:46 - 00:30:44
недостатки по сравнению с кэна Ну Начнем с того что линейные модели это такие модели которые представляют все зависимости в наших данных виде линейную функцию с помощью какой-то линии Вот одна из линейных моделей это Линейная репрессия она дает прогноз с помощью постановки к значением наших признаков каких-то коэффициентов бета и добавление свободного коэффициента бета нулевое вот таким образом мы получаем чтобы найти коэффициент теперь нам нужно ввести как функция качества фокусного качества показывает насколько
00:30:14 - 00:31:34
наша модель ошибается в среднем по всей выборке Ну по своей сути функционального качества это усредненный лосос Это ошибка модели на одном объекте Какой самый популярный лосс качество в у нас влияние на регрессии Ну наверное если мы решаем регрессии Ну нет не меньше квадратов Вот mse это средне квадратичная ошибка Она рассчитывается как разность нашего таргета до целевого целевой переменной прогноз возведенная в квадрат Ну и усредненный противный объект Всем привет Меня зовут Никита Я преподаватель блока
00:31:06 - 00:32:39
машинного обучения на курсе стартамент я буду время от времени появляться В данном видео Чтобы давать некоторые комментарии по ответу кандидата то есть Александр в целом мне понравилось ее описание того что такое Линейная модель То есть была Дана некоторая интуиция что Ну вот Линейная модель это какая-то линия хотя лучше говорить все-таки гипер плоскость Но даже такой ответ он достаточно хорошо льстится беседующему понравилось что было озвучена некоторая функциональная форма линейной модели а скажем вот там коэффициентики умножаются
00:31:58 - 00:33:06
на признаки добавляются свободной вот получаем какое-то уравнение В целом это все звучало достаточно в тему к месту и достаточно правильно как можно пополнить данный ответ Чтобы он ну был близок к идеальным во-первых в зависимости от того что конкретно спрашивал собеседующий может понадобиться некоторая детализация для разных задач скажем регрессии и классификации То есть если постановка вопросов в целом была Опишите линейные модели в чем их преимущества и недостатки по сравнению с какими-то другими моделями скажем из
00:32:32 - 00:33:38
метрического семейства то хорошо было бы сказать не просто про линейную регрессию но и про логистическую регрессию или скажем иначе Как произошло и в данном интервью А что является совсем малюсеньким крошечным минусом ответа Александры а Складывается ощущение что кандидат под линейной моделью подразумевает только линейную регрессию с минимизацией средней квадратичного функционала наверняка это не так и пока что общее впечатление складывается что начало достаточно бодренькое что вообще такое кнн порассуждаем
00:33:05 - 00:34:16
какие-то здесь Видишь плюсы минусы линейные модели они всегда будут апраксимироваться зависимости как линия но она может быть по своей природе не линейной Вот и в этом случае Линейная модель тоже будет работать хуже чем КНР это у нас получается метрический подход он работает как к ближайших соседей он по-другому называется мы для каждого объекта находим его ближайших соседей доводим понятия расстояние до других объектов находим самый ближайший в каком-то количестве и Исходя из этого берем Таргет КНР в этом плане
00:33:39 - 00:35:12
будет лучшая практимировать какую-то зависимость если она будет не менее какой-то произвольный другой формы но у меня нет моделей в этом плане есть еще такой плюс они могут в тренды вот если в наших данных есть какой-то тренд до наша модель каким-то образом движется в будущее так скажем то Линейная регрессия лучше предскажет тренд этого не сможет Да все так [музыка] наверное у меня еще такой вопрос Представь что у тебя Ты обучила алгоритм ближайшие соседи если вообще можно обучить здесь тренировочный выборка то
00:34:43 - 00:36:16
обучал нелинейная модель тебе пришел новый тестовый объект и мы Априори знаем Неважно как что значение этого теста объекта не лежит в тренировочных выборке то есть мы не видели такого таргета до этого но при этом признаки это как-то более-менее отображает Как ты считаешь Какая модель в данном случае приведет себя лучше Линейная или КНР и почему но мне кажется что в этом случае Линейная модель Лучше нам предскажет такой объект которого не было обучающей выборки вот почему Ну банально как мне кажется
00:35:32 - 00:37:04
такого объекта даже может не быть соседи да вот или могут быть какие-то очень далекие соседи у которых будет совсем другие уже значения таргетов в таком случае ошибка будет большой а случае линейной модели регрессии мы будем проецировать объект напрямую чтобы получить для него прогноз в таком случае Наверное он будет ближе к реальности чем у Canon Окей ответ засчитывается Давай перейдем дальше переходя уже конкретно К сравнению линейных моделей Ну давайте договоримся о линейной регрессии с кнн Александр
00:36:42 - 00:38:03
ответила ну превосходно мне очень понравился Ее ответ как минимум потому что она но вот самые такие яркие явные отличия обоих алгоритмов выделил действительно линейные модели плохие тем что они буквально линейные только такие зависимости они умеют оценивать они достаточно слабенькие если у нас нелинейные какие-то сложные закономерности между признаками и таргетами Зато в них содержится достаточно большой плюсик что они умеют экстраполировать они действительно умеют в тренды То есть если зависимость между
00:37:25 - 00:38:32
признаками и таргетами А хотя бы около Линейная или хотя бы имеет какое-то направление то есть какой-то тренд А тогда Линейная модель будет в себе это учитывать и даже на новых там тестовых данных А примерно похожих на Train она будет работать достаточно хорошо если сфокусироваться на методе ближайших соседей то действительно он может восстанавливать зависимость практически любой сложности особенно когда у нас в данных нет выбросов но зато он Никаким образом не умеет в экстраполяцию скажем если все данные у нас лежали в каком-то
00:37:58 - 00:39:08
маленьком кружочке а новые данные начинают появляться из овальчика рядом то вот здесь вот прогнозы вообще будут ужасными потому что А у нас каждый раз кн будет сравнивать объекты новые соседями изначального кружочка и соответственно таргеты давать А по старым данным до представим произошел какой-то структурный сдвиг фичи у нас в объектах поменялись Они совсем стали какими-то разными новыми кн вот прям совсем плохо с этим справится линейные регрессия Скорее всего тоже Ну не есть хотя бы какой-то шанс верно определить
00:38:33 - 00:39:39
тренд если ну скажем он сохранился совсем я чуть-чуть я бы дополнил ответ Александре следующим комментарием что кнн Несмотря на все свои минусы он достаточно гибкий потому что в нем большое количество гиперпараметров которые так или иначе могут в контексте вопроса про экстраполяцию влиять на обобщающую способность модели скажем количество соседей перевзвешивание соседей например с помощью гаусовского ядра или скажем способ с помощью которого мы ищем соседей то есть какая-то Метрика скажем там менковского с параметром 2 или
00:39:06 - 00:40:20
минковского с параметром 1 которая позволяет нам определить какой из объектов является соседнем ко второму в линейных же моделях единственный гиперпараметр который мы ограничены вот в самом базовом сценарии он следующий это коэффициент регуляции им немножко сложнее а манипулировать и Он всего лишь один также Отвечая на дополнительные вопросы про Какая модель будет лучше на новом объекте который вы там откуда-то возник здесь можно ответить совершенно по-разному На мой взгляд А вот действительно есть некоторая базовая
00:39:43 - 00:40:51
такая парадигма общая что линейные модели хорошо экстраполирует В отличие от кн а но в любом случае здесь стоило бы наверное добавить следующий комментарий что а все зависит от данных если у данных есть какое-то направление есть какой-то тренд то однозначно Линейная модель окажется скорее всего лучше но так или иначе можно всегда подобрать какой-то пример набора данных Где будет аномальный объект на котором будет лучше справляться Canon то есть Контр примеров достаточно много но хотя вот если следовать некоторой общей
00:40:17 - 00:41:26
парадигме то все-таки мы предпочтение даем здесь линейным моделям что вот они на новых данных скорее всего справится плохо но лучше чем какие-то другие подходы особенно метрические в целом на собеседование считается плюсом Если вы можете рассуждать в терминах Да но если что-то по-другому то результат другой в целом Если вы разные сценарии готовы рассмотреть описать дать какие-то Контр примеры это вам будет прям плюс огромный плюс в карму и собеседующий обязательно это оценят и обсудим деревья можешь сказать пожалуйста что такое
00:40:52 - 00:42:07
жадный алгоритм построения дерева как он работает Для чего нужен Какая за ним логика построения дерева заключается в том что мы каждый раз когда строим разбиение выбираем какой-то мы поступаем расстояние с наилучшим в качестве как бы снижением хаотичности вот какая-то меряем У нас есть критерий качества и критерии информативности критерием информативности как раз таки оценивает насколько хаотично данные расположены в какой-то вершине критерий качества оценивает прирост как раз таки в ну приростент
00:41:28 - 00:43:06
Вы можете примеры привести критерий информативности в случае классификации это может быть энтропия или Джинни в случае регрессии можно использовать дисперсию например вот а критерии качество в этом случае будет выступать разностью между критерием информативности до разбиения и после то есть слева и с правой стороны после разбиения там еще это нужно умножить на вес взвесить критерии информативности после избиения так как у нас разное количество объектов попадает в левую правую сторону Да все так
00:42:35 - 00:44:00
тогда у меня такой вопрос немножко с подвохом смотри нам известно что в целом дерево может разбить любую выбор куда идеального качества просто потому что она жадно обучается сказала как это критерии это позволяют сделать Ну и мы как дата сайдинг ты можешь замерить качество на трее это конечно спорно и не всегда нужно делать но все-таки мы можем такое сделать и получим стало процентов если все сделали правильно вопрос может ли быть такая ситуация что у нас качество на троение оказалось не сто процентов хотя мы
00:43:19 - 00:44:55
обучали дерево правильную и тут нет никаких ошибок Если да то в каких ситуациях Ну мне кажется что мы если наше дерево никак не будем ограничивать не запрещать ему строить бесконечное количество вершин бесконечное количество листьев или там строить односторонние деревья если мы ничего из этого делать не будем строить обычные двух странник деревья Сколь угодно глубокие то мне кажется что такое дерево может абсолютно любую зависимости программировать разрезать пространство поэтому мне кажется что если дерево
00:44:15 - 00:45:36
никак не ограничивать то наверное она все равно рано или поздно выбьет сто процентов качества настроение а вот В каких случаях дерево Не сможет понять [музыка] однозначно В какой лист отправлять данный объект если возможно формулировка чуть кривая задай вопрос Если значит в какой лист отправлять объект Ну может быть если Давай попробуем переформулировать это совсем точная формулировка В каком случае дерево ошибок нет сейчас сама подумаю как бы это правильно спросить вот Представь у нас есть объект мы его можем отправить
00:45:06 - 00:46:31
[музыка] в лист где по мнению дерева лежат объекты того же класса В каком случае [музыка] мы ошибемся сто процентов Можно ли придумать такой выборку например подсказка в которой мы куда бы его не отправили сто процентов ошибся Я даже не знаю тогда порассуждаем вместе у тебя здесь гипотеза Подожди если только наш объект сразу несколько классом Как вариант Но я думаю что такого такое может быть Ну такое конечно такое может быть у нас жданный когда размещаются людьми это может быть ошибка и как тогда
00:46:04 - 00:47:36
если у нас один и тот же объект принадлежит к разным классам А как это выборке может случиться Ну наверное как ты сказала это может быть ошибка в данных просто Ну да у нас один и тот же объект продублируется два раза и тогда куда бы отправили Мы всегда ошибемся и качество не будет сто процентов круто [музыка] гипотеза она оказалась верной касательно вопроса про алгоритм жадного построения решающего дерева Александра в целом ответила тоже очень хорошо я абсолютно все понял что она сказала и она это
00:47:20 - 00:48:35
предоставила достаточно доступным языком Я думаю что это одно из наверно лучших объяснений данного алгоритма который я когда-либо слышал чуть-чуть опять-таки чуть-чуть не хватило следующего использования терминов например предикат листовая внутренняя вершина корень дерево и так далее и тому подобное но в целом все было достаточно классно то есть Александра помимо того что писала сам алгоритм Рассказала про то что такое критерий информативности критерий качества Я упомянула про перевзвешивания до объектов
00:48:01 - 00:49:07
точнее метрик на количество объектах в следующих вершинах и так далее То есть в целом ответ был достаточно полным понятным и классным можно было может быть еще добавить что когда мы используем жадные алгоритм то получается Мега глубокое дерево с скажем достаточно низкой обобщающей способностью то есть переобученная но в целом Это совершенно не критично потому что соответствующий вопрос дополнительный не был задан это уж такие тебя добавляю что можно было сразу полезть вперед выскочиться и чуть-чуть дать
00:48:33 - 00:49:44
какой-нибудь дополнительный комментарий касательно случае когда жадное дерево имеет качество не сто процентов скажем не нулевое масло [музыка] это действительно случай когда у одного объекта несколько таргетов как и сказал Мерседес как и додумалась сама Александра это может произойти в случае ошибочного за Нет данных они могут в действительности восстанавливаться людьми А может произойти какая-то ошибка случайно задвоение но и в принципе даже без каких-то ошибок такое может происходить вот Представьте что мы с
00:49:10 - 00:50:17
вами имеем какую-то рекомендательную систему которая там используют контентный подход и берет фичи по пользователю и по посту в соцсети в один момент времени пользователь может лайкнуть пост во второй момент времени он может его проигнорировать если мы в признак вам пространстве вообще время никак не задействуем то это будет по факту те же самые объекты тот же юзер тот же объект просто как бы ну в разное время лайкнутые А время мы не учли но будет у них разные торги то одинаковые двух объектов то есть такой сценарий вполне
00:49:43 - 00:50:49
возможен В таком случае решающее дерево не сможет однозначно какой-то правильный ответ дать просто потому что у нас как бы ну два правильных ответа решающее дерево она там бьет А наша базовая признаков пространство на простейшие множество там линии квадратики кубы и так далее и соответственно вот попадет эта точка просто с двумя значениями в какую-то финальную листовую вершину и прогноз будет какой-то ну скажем в случае mse в случае регрессии Будет средняя в случае классификации будет вероятность как доля каждого класса но
00:50:16 - 00:51:27
все равно однозначный какой-то ответ дать не получится чтобы вот качество было идеально и я тогда предлагаю сейчас перейти к королю вопросов на собеседованиях про градиентный бустинг первое знаешь ли ты что это за алгоритм наслышана Да а почему он называется градиентом Ну Начнем с того что бустинг это ансамбль состоящий из какого-то количества базовых моделей и эти модели обучаются последовательно одна за одной и каждая новая модель обучается на отступах которые есть ошибка предыдущих моделей на наших объекты то есть разница между
00:50:52 - 00:52:26
прогнозам предыдущих моделей и таргетов на это разности каждого модификация Бусинка когда мы в качестве отступа Мы хотим нашлось минимизировать Да как бы всегда поэтому мы в качестве этого общества берем не просто разность таргета и прогнозы наших моделей Мы берем Вектор антиградиента от лоссов предыдущих наших моделей прогнозы предыдущих моделей и пытаемся его практимировать прогнозам нашей модели которые мы стараемся добавить вот потом это все умножаем на какой-то коэффициент который мы тоже подбираем при обучении чтобы
00:51:40 - 00:53:13
наш тарге да И вот вектора антиградиенты которые постарались приблизить были одного порядка и таким образом получаем прогноз новые модели Слушай вопрос а мы Градиент на который мы обучаем базовую модель и потом добавляем с коэффициентикам по какой перемены берем то есть ну Градиент это производная Мы всегда имеем какую-то функцию и переменную которыми дифференцируем вот что это за переменная Ну как я уже сказала это ложь прогноз супер В чем особенность градиентного бустинга то есть Может быть ты знаешь
00:52:30 - 00:53:53
какие-то недостатки Ну он же во-первых склонен при обучении потому что он обладает высоким смещением Да и нет он обладает низким смещением но высоким разбросом во-первых это недостатков из особенностей как раз таки то что мы берем производную от лучше позволяет нам как раз таки вот функциональный характер учитывать при обучении и таким образом лучше апраксинировать наш отступы да и лучше предсказывать Таргет это особенно хорошо работает при каких-то несимметричных осах вопрос про бустинги в особенности про то чем
00:53:13 - 00:54:58
градиентные отличаются от обычного это действительно классика на большинстве собеседований во-первых эти вопросы они наверное самые часто задаваемые а во-вторых они наверное самые сложные потому что тема по правде говоря нетривиальная Но наш кандидат Александра достаточно хорошо справилась с ответом на данный вопрос все основные тезисы которые нужны были по крайней мере я услышал Мерседеса думаю тоже действительно градиентный бустинг от обычного отличается тем что мы каждую новую модель обучаем не просто на
00:54:17 - 00:55:19
ошибках предыдущей композиции А на некотором отступи Да мы хотим а Добавить новый алгоритм таким образом чтобы наш лосс как бы стремился к нулю все быстрее быстрее это логика совершенно любой задачи тогда мы рассуждаем следующим образом Каким бы образом добавить нам новый алгоритм представим что совершенно любое значение добавить к нашим прогнозам тогда давайте как раз таки сделаем какую-то какой-то Вектор идут этого шага по нашим прогнозам А чтобы лосс наилучшим образом стремился к нулю То есть он минимизировался а лучшим образом
00:54:48 - 00:56:03
это ровная идея которая содержится вот такой парадигме В такой концепции как градиентный спуск то есть по факту Чем отличается градиентный спуск от обычного до ровно тем что каждый раз когда мы добавляем новую базовую модель в нашу композицию мы стараемся сделать такой Шаг в пространстве наших прогнозов То есть когда мы совершенно любой чисел как нашим прогнозам можем добавить чтобы лосс наилучшим образом уменьшился Ну или увеличился до в зависимости от того минимизируем мы или максимизируем А это
00:55:25 - 00:56:27
концепция она зашита ровно в чем в градиентном спуске поэтому по факту что мы делаем градиентный спуск в пространстве прогнозов наших моделей Я как раз таки позволяет нам получать какие-то достаточно и композиции и действительно как и сказала Александра учитывать функциональный вид глобального лосса который мы оптимизируем здесь сразу же можно было добавить дополнить свой ответ некоторым Ну хотя бы перечислением основных реализации современного градиентного бустинга это КАД буст их же Boost Light jbm Но опять-таки это не
00:55:56 - 00:57:08
обязательно Это просто как бы сделал Наверное я из минусов опять-таки могу выделить один маленький это то что было произнесено что градиентный Бусинка обладает высоким разбросом и низким смещением это действительно примерно так но с некоторыми пояснениями Давайте посмотрим что будет дальше Слушая Что такое смещение и разброс И почему они низкие или высокие градиентного [музыка] Ну Начнем с того что это мощность алгоритма Да это то насколько он хорошо Может приблизиться именно к истине зависимости данных разброс это
00:56:33 - 00:57:57
такая штука если бы мы взяли какую-то одну модель будет скопировали нашу выборку обучили много раз одну и ту же модель на разных стопированных под выборках измерили бы дисперсию между прогнозами модели на каждом объекте на каком-то одном объекте то мы получили разброс разброс это мера показывающая насколько разные предсказания может давать наши модели одному объекту вот это она оценивает чувствительность алгоритма к выбросам шуму и так далее у градиентного бустинга как раз таки смещение диска потому что
00:57:16 - 00:58:37
мы обучаемся на отступах мы как бы все больше и больше приближаемся к стене зависимости но разброс увеличивается просто потому что нашего вот в какой-то момент он становится совсем сложным и качество начинает падать на тесте с этим можно бороться добавляя регуляцию Как бустинг можно регулировать но к сожалению я не знаю я просто знаю что можно это Окей концепция то есть смещение разброса которые обсуждался в контексте градиентного спуска это одна из ключевых тем классического машинного обучения и вот
00:57:56 - 00:59:32
она вот примерно с градиентным спуском рядышком они стоят А самое сложное и в целом то как дала Александра ответ мне очень понравилось основная интуиция того как точнее что это за сущность и как их измерять да То есть даже практическая какая-то концепция потому как измерить байс и veriance у какой-то модели было дано вот это все в целом Я ставлю этому оценку 4 с плюсом из четырех с плюсом так вот возвращаясь градиентом у бустингу Александра верно ответила что каждый раз когда мы добавляем новую базовую модель
00:58:47 - 00:59:57
смещение у нас падает потому что модель становится все лучше ведь новое Исправляет ошибки предыдущих разброс немножко но увеличивается ровно Потому что сама модель становится все сложнее и сложнее Но вот Представьте какой-то раздутое большое а вот ровно это может быть результатом работы градиентного бустинга а они зачастую оказываются переобученными так вот ровно поэтому когда строят градиентный бустинг в качестве базовых моделей выбирают такие у которых достаточно маленький разброс например неглубокие деревья Поэтому вот
00:59:22 - 01:00:26
эта прибавка в разбросе она как бы не чувствуется но в любом случае даже если мы берем совсем какие-то простые модели вот там не глубокое дерево дерево с глубиной 2 в любом случае если мы будем до бесконечности строить градиентный бустинг То есть все Добавляйте Добавляйте добавлять в композицию а базовые модели рано или поздно качество работы нашей нашего алгоритма на тесте будет ухудшаться ну скажем в начале ошибка у нас будет падать модель у нас будет все лучше и лучше а потом в какой-то момент вот этот вот
00:59:54 - 01:00:58
сдвиг в разбросе будет компенсироваться тем что у нас в принципе получается какая-то адекватная модель она начнется все сложнее и сложнее и обобщающая стоимость у нее будет как бы падать и соответственно будет увеличиваться разброс потому что она будет становиться все важнее и важнее Поэтому говоря о недостатках градиентного бустинга а действительно можно получить в итоге модель с большим разбросом можно перебрать немножко с количеством базовых моделей и получить совсем что-то сложное то есть сложнее чем истинная зависимость
01:00:25 - 01:01:29
между признаками и таргетом Но это та вещь которую можно контролировать можно просто валидироваться на количестве или просто замерять качество на каждой итерации на трении на тесте и в итоге выбирать какую-то золотую середину то есть в целом это недостаток градиентного бустинга но такой есть некоторые оговоркой что его достаточно легко решить во-первых берем в качестве базовых моделей А такие у которых низкий разброс скажем глубокие деревья во-вторых просто выбираем лучший параметр N который нам как раз таки
01:00:58 - 01:02:00
позволяют выбрать практически любые библиотеки а вот Окей возвращаюсь к минусам бустинга это все-таки что какие у него Ну во-первых он долгий дорогой вот он требует много Это то что он склонен при обучении Ну наверное все что я могу назвать Смотри Представь что у тебя есть тренировочный выборка которых нет отрицательных значений То есть у тебя регрессия ты предсказываешь не знаю цену на товары товары Они разные но все они стоят положительное количество денег и даже жвачку из-за стоит 1 рубль и вопрос может ли бустинг вдруг дать
01:01:29 - 01:03:23
отрицательные показания предсказание Я думаю что может потому что мы чтобы получить прогноз суммируем все вот эти вот получившийся отступы я думаю что прогноз может быть Окей А что насчет экстраполяции то есть Представь что у тебя появился новый товар его он стоит сильно дороже чем остальные в таких выборки нет Какое предсказание даст клиент допустим Ну я тут затрудняюсь ответить Окей это на самом деле у меня из вопросов на этом все в целом последние два вопроса Мерседеса они так или иначе связаны с тем насколько
01:02:31 - 01:04:07
градиентные бустинг умеет экстраполировать зависимости да то есть у нас здесь были какие-то объектики появился новый как бы аномальный что будет старгитом он какой-то адекватное значение примет или там будет гигантская ошибка это вот все про экстраполяцию да то есть про то а может ли наша модель на более расширенном наборе данных с каким-то новыми значениями давать хороший прогнозы на практике с опытом Да и в целом по теории для себя сформировал следующий ответ на данные вопросы про там отрицательное значение и про
01:03:53 - 01:04:59
экстраполяцию в целом градиентный бустинг ничего не ограничивает давать прогнозы вне тех значений которые мы наблюдали на тренировочной выборке просто напросто потому что ну смотрите У нас может быть совершенно разный лосс у нас просто напросто на каком-то объекте может быть настолько большой отступ что случайно на какой-то итерации на второй или на 3 данный объект вылетит там в отрицательные числа Хотя по всем объектам и наблюдали таргеты только положительные то есть в целом нет никаких ограничений у бустинга он
01:04:26 - 01:05:32
немножко но все-таки умеет экстраполировать как раз таки за счет того что мы используем вот эти самые отступы Да и строим модели с низким разбросом то есть совсем простенькие какие-то если бы мы на каждом шаге строили там скажем как вариант на форесте Мега сложные глубокие деревья тогда конечно у нас же не появился бы никогда отрицательный прогноз если все таргеты На трене у нас положительные Ну потому что у нас бы просто все деревья там идеально какие-то подвыборки размечали Но когда у нас простенькие то
01:04:59 - 01:06:00
мы получаем на некоторых объектах Вполне себе можем получить какие-то очень большие отступы и чтобы их исправить прогноз следующей базовой модели может быть настолько критичным что прогноз по какому-то объекту вылетит за нолик если изначально у него там Таргет скажем около нуля и в этом ничего как бы критичного нет конечно градиенты бустинг не Экспо полирует так как Линейная модель Но все-таки этим свойством он немножко но обладает общее впечатление по ответам Александры следующая она достаточно хорошо справилась На мой
01:05:29 - 01:06:31
взгляд с далеко не самыми простыми вопросами по классическому машинному обучению Я бы посоветовал немножко быть в себе уверенной и в итоге я думаю что все получится я желаю кандидату большой удачи и успехов на работе
01:06:01 - 01:06:33