Обложка канала

Main ML_KZ

Основные посты с чатика про машинное обучение в Казахстане:

Main ML_KZ

4 года назад
Открыть в
Виртуальное собеседование на позицию ML Engineer Решение. Часть 1. 1) Комбинаторика и ТВ@m1ckyro5a) 1.1. посчитайте вероятность того, что среди 5 подбрасываний честной монетки будет ровно 1 орел. Решение: вероятность наступления 5 независимых событий - их произведение то есть (1/2)^5 1.2 посчитайте вероятность того, что первый орел выпадет на четном подбрасывании Решение: - вероятность 2го орла = вероятность 1й решка а второй орел = (1/2)^2 - вероятность 2k-го орла - (1/2)^(2k) = (1/4)^k - вероятность четного орла: сумма геометрической прогрессии со знаменателем 1/4: a_0 / (1 - d) = (1/4) / (1 - 1/4) = 1/3 1.3 оцените вероятность что сумма чисел после броска 2 игральных кубиков будет 5 Решение: Подходящие исходы: <1,4>; <2,3>; <3,2>;<4,1> Всего исходов: 6*6. Ответ: 4/36=1/9 1.4 Оценка максимального правдоподобия Решение от @sultanyaril L(a) = a / (3 ^ a) * a / (4 ^ a) * a / (5 ^ a) = a^3 / 60^a; lnL(a) = lna^3 - ln60^a = 3 lna - a ln60 dlnL(a)/da = 3/a - ln60 = 0 -> a = 3/ln60 = 0.73272 2) Метрики и ТВ@m1ckyro5a) Задача на формулу Байеса, условия были стырены из блога Дъяконова - там же можно найти и решение. В вопросе о метриках хотелось бы услышать вопросы о балансе между False Positive и False Negative ошибках. Например если лечение очень дорогое и болезненное то FP ошибки оч нежелательны, если же ход болезни очень тяжел - то FN. Самый популярный ошибочный ответ - AUC ROC который совсем не подходит потому что данная метрика может быть расчитана когда модель выдает некоторую вероятность или скор. В случае же бинарного предикта как в нашем случае (есть болезнь или нет) AUC ROC не имеет особого смысла. Подходят любые вариации ф-скора скошенного в сторону либо пресижена либо рекола в зависимости от ответов на наводящие вопросы выше. 3.1) Алгоритмы джуниор-миддл (с неким @sneddy) Есть 2 строки, посчитайте сколько минимум символов нужно добавить или убавить, чтобы они стали анаграммами Решение: По сути задание на внимательность, знание структуры данных хэш и синтаксиса питона В целом хотелось увидеть любое верное решение эффективнее чем через лист за квадрат Например забить обе строки в dict отображающий символ в каунт, затем вычесть из каждого уникального каунта первого дикта каунт из второго. Популярная ошибка: не учесть что уникальный символ может встретиться во второй строке, но не встретиться в первой. Если использовать Counter задача превратащается в однострочник - поэтому мы просили не использовать ничего из библиотеки collections
from typing import Dict
def build_dict(input_str: str) -> Dict[str, int]:
    output_dict = {}
    for elem in input_str:
        if elem not in output_dict:
            output_dict[elem] = 0
        output_dict[elem] += 1
    return output_dict
def anagram_distance(s1: str, s2: str) -> int:
    d1 = build_dict(s1)
    d2 = build_dict(s2)
    diff = 0
    for elem, count in d1.items():
        diff += abs(count - d2.get(elem, 0))
    for elem, count in d2.items():
        if elem not in d1:
             diff += count
     return diff