… И прибил это!

Позвольте мне предупредить вас. Это будет долгое чтение. Вы можете просмотреть некоторые части, но я настоятельно рекомендую вам не делать этого, потому что то, что я поделился здесь, является ЗОЛОТО (если я могу так сказать).

Большинство из вас, возможно, знакомы с чрезвычайно долгим процессом собеседования в компаниях FANG (Facebook, Amazon, Netflix и Google). Это может быть мучительно долго, тянуться вечно. У меня было в общей сложности 4 собеседования с Amazon (на разные должности), и мне удалось получить должность Data Scientist на моем последнем (которое само по себе состояло из 5 собеседований). В этой статье я объясню, как я готовился к успешному собеседованию и какие ресурсы использовал.

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

Если вам интересно узнать, на что был похож настоящий процесс собеседования, перейдите к этой очень популярной статье Мои вопросы и ответы на интервью Amazon Data Scientist!

Знать основы кодирования

Если вы специалист по данным или разработчик программного обеспечения, то я предполагаю, что вы уже знакомы с основами кодирования на Python и SQL. Для собеседования на Data Scientist, по моему опыту, я не встречал слишком много компаний, которые сосредотачиваются на каком-либо другом языке кодирования, однако я бы добавил, что наличие Spark в вашем резюме — это хороший плюс.

Теперь, когда я говорю базовый, я имею в виду довольно простой — например, для SQL вы должны знать, как:

  • Выбрать определенные столбцы из таблицы
  • Соединение двух таблиц (внутреннее соединение, левое соединение, правое соединение и внешнее соединение)
  • Совокупные результаты (сумма, среднее, максимальное, минимальное)
  • Использование оконных функций в SQL
  • Манипулировать датами

Для Python узнайте, как:

  • Работа с фреймами данных, например чтение, объединение, слияние, фильтрация
  • Управление датами и форматирование дат
  • Манипуляции со строками, такие как использование выражений регулярных выражений, поиск того, что содержит строка
  • Эффективно используйте циклы (это может быть отдельной темой)
  • Работа со списками и словарями
  • Создание функций и классов в Python

Для Python я нашел эту статью полезной: https://realpython.com/courses/python-coding-interviews-tips-best-practices/

Важно, чтобы вы хорошо разбирались в SQL и Python для собеседований по программированию.

Знать алгоритмы и концепцию машинного обучения

Для должности Data Scientist это абсолютно обязательно. Вы не сможете преуспеть, если не будете знать все тонкости основных алгоритмов. Вы должны хорошо разбираться в наиболее часто используемых моделях и алгоритмах машинного обучения, понимать, как они работают, а также их преимущества и недостатки. Я не могу не подчеркнуть этого достаточно; попытайтесь найти и узнать, почему модель работает и почему она может дать сбой. Здесь я перечислил наиболее распространенные темы, а ближе к концу статьи дал более подробные примечания по некоторым из этих тем.

  • Линейная регрессия
  • Логистическая регрессия
  • Вектор поддержки
  • Случайный лес
  • Повышение (Ада и градиент)
  • Алгоритмы кластеризации (k-средние, плотность, гауссовский)
  • Автокодировщики
  • Прогнозирование временных рядов (базовый уровень)
  • LSTM и уровни внимания
  • Байесовская теорема
  • Детали алгоритма градиентного спуска
  • Настройка гиперпараметров
  • Одно горячее кодирование против кодирования меток
  • Статистические распределения
  • Алгоритм обнаружения аномалий

Знайте свои структуры данных и алгоритмы

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

  • Обозначение большого O
  • Бинарный поиск
  • Массивы и связанный список
  • Сортировка выбором
  • Быстрая сортировка
  • Пузырьковая сортировка
  • Сортировка слиянием
  • Хеш-таблица

Это замечательная книга, которая поможет вам разобраться в структурах данных и алгоритмах, Алгоритмы Grokking: иллюстрированное руководство для программистов и других любознательных.

Сделайте несколько хороших заметок перед собеседованием

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

Вы можете использовать то, что лучше всего подходит для вас.

Подробные примечания по темам машинного обучения

Линейная регрессия

Большинство моих заметок по линейной регрессии основаны на книге Введение в статистическое обучение.

Логистическая регрессия

Вот хорошая статья на эту тему: https://christophm.github.io/interpretable-ml-book/logistic.html

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

Как и линейная регрессия, логистическая регрессия работает лучше, когда вы удаляете атрибуты, не связанные с выходной переменной, а также атрибуты, которые очень похожи (коррелируют) друг с другом. Таким образом, разработка признаков играет важную роль в производительности логистики, а также линейной регрессии. Еще одно преимущество логистической регрессии заключается в том, что ее невероятно легко внедрить и очень эффективно обучать. Обычно я начинаю с модели логистической регрессии в качестве эталона и пробую использовать более сложные алгоритмы.

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

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

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

Тем не менее, некоторые другие предположения все еще применимы.

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

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

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

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

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

Случайный лес

Это замечательная статья о Random Forest: https://builtin.com/data-science/random-forest-algorithm

Кластеризация

Есть 2 ключевых преимущества использования GMM. Во-первых, GMM намного более гибкие с точки зрения кластерной ковариации, чем K-Means; из-за параметра стандартного отклонения кластеры могут принимать любую форму эллипса, а не ограничиваться кругами. K-Means на самом деле является частным случаем GMM, в котором ковариация каждого кластера по всем измерениям приближается к 0. Во-вторых, поскольку GMM использует вероятности, они могут иметь несколько кластеров на точку данных. Таким образом, если точка данных находится в середине двух перекрывающихся кластеров, мы можем просто определить ее класс, сказав, что она принадлежит X-процент к классу 1 и Y-процент к классу 2. То есть GMM поддерживают смешанное членство.

Усиление градиента

Это хорошая статья для понимания Gradient Boosting: https://explained.ai/gradient-boosting/

Автокодировщик

Автоэнкодеры — это метод обучения без учителя, в котором мы используем нейронные сети для задачи обучения представлений. В частности, мы разработаем архитектуру нейронной сети таким образом, чтобы мы создали узкое место в сети, которое приводит к сжатому представлению исходных данных. Если бы входные признаки были независимы друг от друга, это сжатие и последующая реконструкция были бы очень сложной задачей. Однако, если в данных существует какая-то структура (т. е. корреляции между входными функциями), эту структуру можно изучить и, следовательно, использовать при принудительной передаче входных данных через узкое место сети.

Как показано выше, мы можем взять немаркированный набор данных и сформулировать его как задачу обучения с учителем, задача которой заключается в выводе x̂ , реконструкции исходного ввода x. Эту сеть можно обучить, минимизируя ошибку реконструкции, (x,x̂), которая измеряет различия между нашим первоначальным вводом и последующей реконструкцией. Узкое место — это ключевой атрибут нашей сети; без наличия информационного узкого места наша сеть могла бы легко научиться просто запоминать входные значения, передавая эти значения по сети (показано ниже).

Примечание. На самом деле, если бы мы построили линейную сеть (т. е. без использования нелинейных функций активации на каждом уровне), мы бы наблюдали такое же снижение размерности, как и в PCA

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

Градиентный спуск

Градиентный спуск — это алгоритм оптимизации для нахождения локального минимума дифференцируемой функции. Градиентный спуск просто используется для нахождения значений параметров функции (коэффициентов), которые минимизируют функцию стоимости, насколько это возможно.

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

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

Типы градиентного спуска

ПАКЕТНЫЙ ГРАДИЕНТНЫЙ СПУСК: Пакетный градиентный спуск, также называемый ванильным градиентным спуском, вычисляет ошибку для каждого примера в наборе обучающих данных, но модель обновляется только после оценки всех обучающих примеров. Весь этот процесс подобен циклу и называется тренировочной эпохой.

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

СТОХАСТИЧЕСКИЙ ГРАДИЕНТНЫЙ СПУСК: Напротив, стохастический градиентный спуск (SGD) делает это для каждого обучающего примера в наборе данных, то есть он обновляет параметры для каждого обучающего примера один за другим. В зависимости от проблемы это может сделать SGD быстрее, чем пакетный градиентный спуск. Одним из преимуществ является то, что частые обновления позволяют нам иметь довольно подробную информацию о скорости улучшения.

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

МИНИ-ПАКЕТНЫЙ ГРАДИЕНТНЫЙ СПУСК: Мини-пакетный градиентный спуск — это метод перехода, поскольку он представляет собой комбинацию концепций SGD и пакетного градиентного спуска. Он просто разбивает набор обучающих данных на небольшие пакеты и выполняет обновление для каждого из этих пакетов. Это создает баланс между надежностью стохастического градиентного спуска и эффективностью пакетного градиентного спуска.

Обычный размер мини-пакета варьируется от 50 до 256, но, как и для любого другого метода машинного обучения, здесь нет четкого правила, поскольку оно различается для разных приложений. Это алгоритм перехода к обучению нейронной сети, и это наиболее распространенный тип градиентного спуска в глубоком обучении.

Одно горячее кодирование и кодирование меток

Итак, как мы должны обрабатывать категориальные переменные? Как оказалось, существует несколько способов обработки категориальных переменных. В этой статье я расскажу о двух наиболее широко используемых методах:

  • Кодировка этикетки
  • Горячее кодирование

Кодировка ярлыка

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

Давайте посмотрим, как реализовать кодировку меток в Python с помощью библиотеки scikit-learn, а также разберемся с проблемами, связанными с кодировкой меток.

Давайте сначала импортируем необходимые библиотеки и набор данных:

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

Теперь давайте реализуем кодировку меток в Python:

# Import label encoder 
from sklearn import preprocessing 
# label_encoder object knows how to understand word labels. 
label_encoder = preprocessing.LabelEncoder() 
# Encode labels in column ‘Country’. 
data[‘Country’]= label_encoder.fit_transform(data[‘Country’]) 
print(data.head())

Проблемы с кодировкой меток

В приведенном выше сценарии названия стран не имеют порядка или ранга. Но при кодировании меток названия стран ранжируются по алфавиту. В связи с этим существует очень высокая вероятность того, что модель отражает отношения между такими странами, как Индия ‹ Япония ‹ США.

Это то, чего мы не хотим! Так как же нам преодолеть это препятствие? А вот и концепция One-Hot Encoding

Горячее кодирование

One-Hot Encoding — еще один популярный метод обработки категориальных переменных. Он просто создает дополнительные функции на основе количества уникальных значений в категориальной функции. Каждое уникальное значение в категории будет добавлено как функция.

В этом методе кодирования каждая категория представлена ​​в виде однократного вектора. Давайте посмотрим, как реализовать однократное кодирование в Python:

# importing one hot encoder 
from sklearn from sklearn.preprocessing import OneHotEncoder 
# creating one hot encoder object 
onehotencoder = OneHotEncoder() 
#reshape the 1-D country array to 2-D as fit_transform expects 2-D and finally fit the object 
X = onehotencoder.fit_transform(data.Country.values.reshape(-1,1)).toarray() 
#To add this back into the original dataframe 
dfOneHot = pd.DataFrame(X, columns = [“Country_”+str(int(i)) for i in range(data.shape[1])]) 
df = pd.concat([data, dfOneHot], axis=1) 
#droping the country column 
df= df.drop([‘Country’], axis=1) 
#printing to verify 
print(df.head())

Проблемы горячего кодирования: ловушка фиктивной переменной

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

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

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

Одним из распространенных способов проверки мультиколлинеарности является коэффициент инфляции дисперсии (VIF):

  • VIF=1, очень низкая мультиколлинеарность
  • VIF‹5, умеренная мультиколлинеарность
  • VIF›5, Экстремальная мультиколлинеарность (это то, чего мы должны избегать)

Обнаружение аномалий

Под наблюдением

Данные обучения помечаются как «номинальные» или «аномальные».

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

Популярные алгоритмы машинного обучения для структурированных данных:

  • Опорное векторное машинное обучение
  • k-ближайшие соседи (KNN)
  • Байесовские сети
  • Деревья решений

Очистить

В настройке «Чистый» все данные считаются «номинальными», и они загрязнены «аномальными» точками.

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

Без присмотра

В настройках «Неконтролируемый» данные обучения не помечены и состоят из «номинальных» и «аномальных» точек.

Самый сложный случай, и постоянно растущий случай для разработчиков моделей в постоянно увеличивающихся объемах темных данных, — это неконтролируемый экземпляр. Наборы данных в неконтролируемом случае не имеют своих частей, помеченных как номинальные или аномальные. Нет никакой исходной истины, от которой можно было бы ожидать результата. Модель должна показать моделисту, что является аномальным, а что номинальным.

Наиболее распространенными задачами в неконтролируемом обучении являются кластеризация, репрезентативное обучение и оценка плотности. Во всех этих случаях мы хотим изучить неотъемлемую структуру наших данных без использования явно заданных меток. — Девин Сони

При настройке «Неконтролируемый» требуется другой набор инструментов для упорядочивания неструктурированных данных. В неструктурированных данных основная цель состоит в том, чтобы создать кластеры из данных, а затем найти несколько групп, которые не принадлежат друг другу. На самом деле все алгоритмы обнаружения аномалий представляют собой некую форму приблизительной оценки плотности.

Популярные алгоритмы машинного обучения для неструктурированных данных:

  • Самоорганизующиеся карты (SOM)
  • К-означает
  • C-значит
  • Мета-алгоритм максимизации ожидания (EM)
  • Теория адаптивного резонанса (АРТ)
  • Одноклассовая машина опорных векторов

Из слайдов лекций доктора Диттериха стратегии обнаружения аномалий в случае неконтролируемой установки разбиты на два случая:

Там, где машинное обучение не подходит, лучшие алгоритмы обнаружения, не связанные с ML, включают:

  • IFOR: Изолированный лес (Лиу и др., 2008 г.)
  • LODA: Облегченный онлайн-детектор аномалий (Певный, 2016)

Это хорошая статья для обнаружения аномалий: https://www.bmc.com/blogs/machine-learning-anomaly-detection/

Настройка гиперпараметров

Перекрестная проверка случайного поиска

Обычно у нас есть только смутное представление о лучших гиперпараметрах, и поэтому лучший подход к сужению нашего поиска — это оценка широкого диапазона значений для каждого гиперпараметра. Используя метод RandomizedSearchCV Scikit-Learn, мы можем определить сетку диапазонов гиперпараметров и случайным образом выбрать из сетки, выполняя K-Fold CV с каждой комбинацией значений.

from sklearn.model_selection import RandomizedSearchCV
# Number of trees in random forest
n_estimators = [int(x) for x in np.linspace(start = 200, stop = 2000, num = 10)]
# Number of features to consider at every split
max_features = [‘auto’, ‘sqrt’]
# Maximum number of levels in tree
max_depth = [int(x) for x in np.linspace(10, 110, num = 11)]
max_depth.append(None)
# Minimum number of samples required to split a node
min_samples_split = [2, 5, 10]
# Minimum number of samples required at each leaf node
min_samples_leaf = [1, 2, 4]
# Method of selecting samples for training each tree
bootstrap = [True, False]# Create the random grid
random_grid = {‘n_estimators’: n_estimators,
‘max_features’: max_features,
‘max_depth’: max_depth,
‘min_samples_split’: min_samples_split,
‘min_samples_leaf’: min_samples_leaf,
‘bootstrap’: bootstrap}pprint(random_grid){‘bootstrap’: [True, False],
‘max_depth’: [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, None],
‘max_features’: [‘auto’, ‘sqrt’],
‘min_samples_leaf’: [1, 2, 4],
‘min_samples_split’: [2, 5, 10],
‘n_estimators’: [200, 400, 600, 800, 1000, 1200, 1400, 1600, 1800, 2000]}
# Use the random grid to search for best hyperparameters
# First create the base model to tune
rf = RandomForestRegressor()
# Random search of parameters, using 3 fold cross validation,
# search across 100 different combinations, and use all available cores
rf_random = RandomizedSearchCV(estimator = rf, param_distributions = random_grid, n_iter = 100, cv = 3, verbose=2, random_state=42, n_jobs = -1)
# Fit the random search model
rf_random.fit(train_features, train_labels)

Наиболее важными аргументами в RandomizedSearchCV являются n_iter, который контролирует количество различных комбинаций, которые нужно попробовать, и cv, который представляет собой количество сгибов, используемых для перекрестной проверки (мы используем 100 и 3 соответственно). Большее количество итераций покроет более широкое пространство поиска, а большее количество cv-кратностей уменьшит вероятность переобучения, но увеличение каждого из них увеличит время выполнения. Машинное обучение — это область компромиссов, и соотношение производительности и времени является одним из самых фундаментальных.

Мы можем просмотреть лучшие параметры, подобрав случайный поиск:

rf_random.best_params_{‘bootstrap’: True,
‘max_depth’: 70,
‘max_features’: ‘auto’,
‘min_samples_leaf’: 4,
‘min_samples_split’: 10,
‘n_estimators’: 400}

Поиск в сетке с перекрестной проверкой

Случайный поиск позволил нам сузить диапазон для каждого гиперпараметра. Теперь, когда мы знаем, на чем сосредоточить поиск, мы можем явно указать каждую комбинацию параметров, которые нужно попробовать. Мы делаем это с помощью GridSearchCV, метода, который вместо случайной выборки из распределения оценивает все комбинации, которые мы определяем. Чтобы использовать поиск по сетке, мы создаем другую сетку на основе лучших значений, полученных при случайном поиске:

from sklearn.model_selection import GridSearchCV
# Create the parameter grid based on the results of random search
param_grid = {
‘bootstrap’: [True],
‘max_depth’: [80, 90, 100, 110],
‘max_features’: [2, 3],
‘min_samples_leaf’: [3, 4, 5],
‘min_samples_split’: [8, 10, 12],
‘n_estimators’: [100, 200, 300, 1000]
}
# Create a based model
rf = RandomForestRegressor()# Instantiate the grid search model
grid_search = GridSearchCV(estimator = rf, param_grid = param_grid,
cv = 3, n_jobs = -1, verbose = 2)

Точность и полнота

Отзыв или способность модели находить все соответствующие случаи в наборе данных.

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

Точность или способность модели классификации идентифицировать только соответствующие точки данных.

Функции потерь

Какую функцию потерь использовать?

Регрессия:

Потеря среднеквадратичной ошибки

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

Средняя потеря абсолютной ошибки

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

Бинарная классификация:

Кросс-энтропия

  • Кросс-энтропия вычисляет оценку, которая суммирует среднюю разницу между фактическим и прогнозируемым распределениями вероятностей для предсказания класса 1. Оценка минимизируется, и идеальное значение кросс-энтропии равно 0.

Потеря шарнира

  • Альтернативой кросс-энтропии для задач двоичной классификации является функция потери шарнира, в первую очередь разработанная для использования с моделями машины опорных векторов (SVM).
  • Он предназначен для использования с бинарной классификацией, где целевые значения находятся в наборе {-1, 1}.
  • Функция потери шарнира побуждает примеры иметь правильный знак, назначая больше ошибок, когда есть разница в знаке между фактическими и предсказанными значениями класса.
  • Отчеты о производительности с потерей шарнира неоднозначны, что иногда приводит к лучшей производительности, чем кросс-энтропия, в задачах бинарной классификации.

Мультиклассовая классификация:

  • Многоклассовая кросс-энтропия

Бонусный совет

Я нашел эту ссылку Git очень полезной, она очень подробная, но быстрый просмотр этого Git хорош, https://github.com/khanhnamle1994/cracking-the-data-science-interview

Последние слова

Я поделился всем, что использовал, и всем, чему научился. Итак, я очень надеюсь, что эта статья окажется для вас полезной, и желаю всего наилучшего в подготовке к предстоящему интервью!