Как закодировать класс с 24 000 категорий?


10

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

  • Если я LabelEncoder()эти 24K гены
  • а потом OneHotEncoder()их ...

Собираются ли 24 000 колонок для того, чтобы время обучения керасу было необоснованным для четырехъядерного процессора i7 с тактовой частотой 2,2 ГГц?

Если так, есть ли другой подход к кодированию, который я могу использовать с этим?

Должен ли я как-то попытаться выделить слой моей модели для этой функции?

Означает ли это, что мне нужны 24K входных узлов?


Почему бы не изучить представление с помощью VAE? Я действительно думаю, что в изучении последовательности генов представление (как это делается в НЛП) будет иметь большой смысл по сравнению с простым PCA ...
n1tk

Ответы:


10

Да, использование горячего кодирования для функций 24 КБ требует 24 000 узлов ввода. Однако это не должно быть проблемой для Keras (или любой другой библиотеки глубокого обучения). Обработка естественного языка часто использует горячее кодирование слов с размером словарного запаса в одном и том же поле.

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

Время тренировки не должно быть необоснованным.


Спасибо за проверку вменяемости.
HashRocketSyntax

Я заметил, что вы упомянули слой, а не PCA в sklearn. Вы бы порекомендовали автоэнкодеры как форму уменьшения размерности?
HashRocketSyntax

2
Вы упомянули, что используете Keras, так что вы используете какую-то нейронную сеть, верно? Если где-то в вашей сети у вас есть слой с меньшим количеством узлов, чем ваш вход, сеть автоматически выполняет уменьшение размерности. Я предполагаю, что у вас есть только один (или небольшое количество) выходов регрессии. Таким образом, один простой способ состоит в том, чтобы иметь входной слой (d = 24k), один или несколько промежуточных слоев (d = 1k или что-то подобное) и ваш выходной слой (d = 1).
С. Идуколи

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

6

Встраивание сущностей для категориальных переменных ( оригинальный пейджер ) будет очень подходящим подходом. Читайте здесь или здесь . Я на самом деле положил кусочки кода здесь и там и сделал полную реализацию, см. Это репозиторий git, Это легко обрабатывает очень высокие кардинальные категориальные переменные, используя нейронные сети. Я не буду перечислять плюсы и минусы OHE, вы просто гуглите его, но один из его главных недостатков, особенно. если у вас очень высокая кардинальная категориальная переменная, то это излишне увеличивает ваше пространство признаков, что, на мой взгляд, не идеально. И что более важно, ОНЕ, насколько мне известно, не учитывает семантические отношения между категориями, если такие отношения существуют! Тем не менее, Entity Embedding является концепцией Word Embedding в NLP, веса, которые изучаются для кодирования категорий, могут потенциально захватывать внутрикатегориальные отношения.


3

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

« Машинное обучение для интеграции данных в биологии и медицине: принципы, практика и возможности» , Zitnika et al. охватывает различные методы инженерии генов.


Спасибо, имеет смысл. Сократите пространство признаков до количества соответствующих генов (и регуляторных зон в wgs).
HashRocketSyntax

Это слишком сложный вопрос, чтобы спросить, какое уменьшение размерности вы бы порекомендовали: PCA, коллектор, кластеризация / плотность, какая-то нейронная сеть?
HashRocketSyntax
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.