Математическая статистика и машинное обучение для наук о жизни

Как настроить гиперпараметры tSNE

Три простых правила создания красивых графиков tSNE

Это второй пост из колонки Математическая статистика и машинное обучение для наук о жизни. В первом посте мы обсуждали, подходят ли и где в науках о жизни у нас есть большие данные. for Machine / Deep Learning, и подчеркнул, что Single Cell - один из самых многообещающих ресурсов Big Data. t-распределенное стохастическое встраивание соседей (tSNE) - это метод нелинейного уменьшения размерности машинного обучения, который является центральным для анализа данных отдельной ячейки. Однако выбор гиперпараметров для tSNE может сбивать с толку новичков.

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

Как эффективно использовать tSNE

Когда я преподаю курс секвенирования одноклеточной РНК (scRNAseq), я постоянно получаю вопросы о чувствительности tSNE к гиперпараметрам, таким как недоумение. Вопросы обычно навеяны этим фантастическим постом о проблемах с интерпретацией графиков tSNE.

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

Если вы проведете анализ scRNAseq, вы не избежите популярной функции Rtsne и пакета R, который основан на реализации Barnes-Hut C ++ оригинального алгоритма tSNE. Функция Rtsne имеет три основных гиперпараметра:

  1. initial_dims (по умолчанию 50) при условии, что pca = TRUE
  2. недоумение (по умолчанию 30)
  3. max_iter (по умолчанию 1000)

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

Как выбрать оптимальное количество ПК?

scRNAseq - это многомерные данные (~ 20 000 измерений / генов), в то время как tSNE испытывает трудности при работе с большими размерами. Поэтому обычно вы хотите уменьшить начальное количество измерений линейно, например, PCA или нелинейно, например, Автоэнкодер (см., Например, здесь) до 30-50 скрытых переменных (initial_dims) и использует это как новый набор данных для подачи в tSNE. Здесь для простоты мы будем использовать PCA для уменьшения предразмерности, поскольку PCA отлично отделяет сигнал от шума. Давайте построим график процентной дисперсии, объясняемой основными компонентами (ПК), используя данные scRNAseq из Рак-ассоциированные фибробласты (CAF):

Знакомо, не правда ли? Однако сколько основных компонентов (ПК) мы должны оставить для ввода в tSNE, то есть какое значение должно принимать initial_dims: 20, 30, 50 или, может быть, больше? Здесь возникает дилемма: 1) если мы выберем слишком много ПК, мы включим «шумные» ПК из хвоста графика, однако 2) если мы выберем слишком мало ПК, мы можем потерять сигнал из данных. Чтобы принять это решение, мы напоминаем, что рандомизация - друг специалиста по анализу данных, и мы будем сравнивать наблюдаемую дисперсию, объясненную компьютерами, с перестановочной дисперсией. Для этого мы перемешиваем элементы матрицы выражения, выполняем PCA и проверяем, как будет выглядеть приведенный выше график для переставленной матрицы:

Красная кривая на первом графике - это среднее значение перестановочной дисперсии, объясненной ПК, это можно рассматривать как «зону шума». Другими словами, точка, в которой наблюдаемая дисперсия (зеленая кривая) совпадает с переставленной дисперсией (красная кривая), определяет, сколько информативных компьютеров у нас есть в наших данных. Более того, поскольку у нас есть вектор переставленных дисперсий, можно вычислить p-значение того, как наблюдаемая дисперсия отличается от перестановочной дисперсии для каждого ПК. В случае CAF мы заключаем, что 30 ПК следует оставить для tSNE, а остальные следует игнорировать, поскольку их значения попадают в «зону шума».

Как выбрать оптимальную сложность?

Недоумение - это, пожалуй, самый сбивающий с толку гиперпараметр tSNE. Автор tSNE, Лоренс ван дер Маатен, упоминает в FAQ: Типичные значения для недоумения находятся в диапазоне от 5 до 50. Мне сразу приходит в голову один очевидный вопрос: Для скольких точек данных? Что, если у меня 10 000 ячеек, стоит ли мне использовать недоумение в диапазоне от 5 до 50? . В следующем предложении FAQ Лоренс ван дер Маатен добавляет:

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

Это звучит разумно, но какой должна быть функциональная форма недоумения в зависимости от количества ячеек, чтобы фиксировать как локальные, так и глобальные структуры данных? Чтобы ответить на этот вопрос, год назад я собрал 43 набора данных scRNAseq, которые в то время были общедоступными, многие из них были загружены отсюда. Valentine Svensson имеет еще один исчерпывающий и гораздо более обновленный список из 500 наборов данных scRNAseq. Для каждого из 43 наборов данных я сделал несколько графиков tSNE с уровнем сложности от 3 до N / 3 (максимальная сложность по умолчанию в функции Rtsne), N - количество ячеек. Для набора данных CAFs это выглядело так:

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

Зависимость от логарифмической шкалы выглядит линейной, подходя к линейной модели, которую я получил, log (Perp) = -0,179 + 0,51 * log (N). Обратите внимание на коэффициент 1/2 перед log (N), это означает, что недоумение возрастает как Perp ~ N ^ (1/2). Позже я понял, что этот степенной закон очень похож на практическое правило выбора оптимального K в алгоритме K - ближайших соседей (KNN). Действительно, в машинном обучении KNN широко принято (см., Например, здесь), что оптимальное значение K ~ N ^ (1/2). Поскольку за недоумением стоит интуиция, сколько соседей может ощутить каждая точка данных, это подтверждает степенной закон, полученный выше.

Теперь попробуем аналитически вывести этот степенной закон. Поскольку tSNE основан на минимизации дивергенции Кульбака-Лейблера (KL), то, может быть, оптимальная сложность может быть найдена из минимума KL? Однако, если мы построим график зависимости KL от недоумения при других фиксированных параметрах, он монотонно убывает.

Таким образом, не существует минимума KL в отношении недоумения, и KL всегда будет предпочитать более высокие затруднения, несмотря на то, что мы знаем, что слишком большие затруднения приведут к одному большому скоплению точек без какой-либо кластеризации. Поэтому нам необходимо создать еще одну функцию Score , которая включает KL и дополнительный вклад, который штрафует KL за слишком большие затруднения. Предполагая, что KL ведет себя как 1 / Perplexity, простой функцией, всегда имеющей минимум, будет Score ~ ​​1 / Perplexity + Perplexity. Однако недоумение обычно является большим числом, поэтому в функции Score будет доминировать второй член. Простой трюк, чтобы сделать оба вклада одинаковыми по порядку величины, - это нормализовать второй член на количество ячеек N. Наконец, чтобы найти минимум Score, мы вычисляем его производную по Perplexity и приравниваем к нуль. Решение этого уравнения приводит к недоумению ~ N ^ (1/2).

Несмотря на то, что эмпирический способ получения степенного закона, недоумение ~ N ^ (1/2), нельзя рассматривать как надлежащее исследование, он помогает развить интуицию относительно концепции недоумения и его связи с количество ячеек. С другой стороны, многое в tSNE основано на чистой интуиции и практических правилах, поскольку tSNE не имеет прочного математического фона в отличие от UMAP. Поэтому, если вы не уверены, какую сложность использовать для вашего конкретного набора данных, попробуйте N ^ (1/2), и вы не будете слишком отклонены.

Как выбрать оптимальное количество итераций?

Когда дело доходит до количества итераций, необходимых для сходимости tSNE, простейшей рекомендацией может быть чем больше итераций, тем лучше. Однако практически это невозможно для больших наборов данных, так как, возможно, придется ждать несколько дней, чтобы получить, например, 10 000 итераций. Напротив, если вы используете слишком мало итераций, кластеры могут быть не видны, и вы обычно обнаруживаете огромное скопление точек данных в центре вашего графика tSNE. Что делать в этом случае? Что ж, если вы внимательно посмотрите на графики tSNE, доступные в литературе, вы заметите, что наибольшее расстояние между точками данных составляет порядка ~ 100. Это простое практическое правило показывает, что алгоритм достиг сходимости, и дальнейшее увеличение количества итераций лишь незначительно изменит график. Для набора данных CAF мы можем наблюдать, как масштаб охватывает всего несколько единиц в начале обучения и увеличивается до ~ 60 единиц для большего количества итераций, таких как max_iter = 1000, это также приводит к более четкой кластеризации.

Резюме

В этом посте мы узнали, что, несмотря на то, что tSNE может быть чувствительным в отношении своих гиперпараметров, существуют простые правила для получения красивых графиков tSNE для данных scRNAseq. Оптимальное количество компьютеров для ввода в tSNE можно найти с помощью рандомизации матрицы выражений. Оптимальная сложность может быть рассчитана по количеству ячеек в соответствии с простым степенным законом Неопределенность ~ N ^ (1/2). Наконец, оптимальное количество итераций должно обеспечивать максимальное расстояние между точками данных, равное ~ 100 единиц.

В комментариях ниже дайте мне знать, какие анализы в разделе Науки о жизни кажутся вам особенно загадочными, и я постараюсь рассмотреть их в этой колонке. Следуйте за мной на Медиуме Николай Осколков, в Twitter @NikolayOskolkov и подключайтесь в Linkedin. Я планирую написать следующий пост на тему Выполнение кластеризации без указания количества кластеров, следите за обновлениями.