Как использовать данные описания в многоклассовой классификации (снижение размерности)

Вопрос или проблема

В настоящее время я работаю с набором данных из 55 тысяч записей и семи столбцов (один целевой переменной), три из которых являются номинальными категориальными. Другие три – это поля ‘описания’ с высокой кардинальностью, что ожидаемо в случае описательных данных:

in>>
df[['size description', 'weight Description', 'height Description']].nunique()

out>>
 size Description       4066
 weight Description      736
 height Description     3173
 dtype: int64

некоторые примеры этих значений могут быть:

   Продукт                  Описание продукта
  ---------               ------------------------
   Мяч                   Круглая прыгучая игрушка для детей
   Бита                  Палка, которую дети используют для отбивания мяча
   Картинг красный/черный Маленькое моторизованное транспортное средство для детей
   Картинг синий/зеленый  Маленькое моторизованное транспортное средство для детей
   Гаечный ключ          Инструмент для затягивания или ослабления болтов
   Трещотка              Инструмент для затягивания или ослабления болтов
   Кресло-реклайнер      Мягкое сиденье для отдыха

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

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

Вещи, которые я рассматривал:

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

  2. One-hot кодирование кажется маловероятным решением, так как оно раздувает форму набора данных с (55300, 6) до (55300, 65223) из-за высокой кардинальности других переменных. Однако, я все равно попробовал это и получил 98% точность на моем тестовом наборе, но очень плохие результаты на выборке валидации вне образца (5 тыс. записей, 0-5% точность). Похоже на явное переобучение и, следовательно, это не жизнеспособно.

  3. Хеширование, по какой-то причине, не применяется к одному из столбцов, но я предполагаю, что оно все же может быть жизнеспособным. Мне просто нужно выяснить, почему оно не хеширует все мои признаки (полагаю, это будет лучше всего подходить для отдельного вопроса?)

  4. PCA – может быть жизнеспособно, но если я правильно понимаю, кардинальность после one-hot кодирования слишком велика, и PCA выдаст ошибку. Если честно, я еще не пробовал это.

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

Спасибо всем, кто может поделиться своими мыслями/мнениями.

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

  • Каждое значение описания можно представить вектором признаков, по одному для каждого слова из полного словаря (то есть для всех значений этого поля).
  • Значение каждого признака может быть логическим (то есть, встречается ли это слово в данном описании) или, что лучше, весом TF-IDF для слова.
  • Очевидно, это приведет к слишком большому количеству признаков, поэтому нужно выбрать наиболее релевантные. Эта часть сильно экспериментальна, возможно, вам придется попробовать различные варианты, чтобы найти правильный:
    • Избавьтесь от стоп-слов, так как они не несут семантической информации.
    • Отбросьте все слова, которые встречаются только один раз, а также, вероятно, все слова, которые встречаются меньше какого-то минимального частотного порога $N$ (попробуйте с $N=2,3,4…). Логика заключается в том, что редкие слова с большей вероятностью вызовут переобучение, чем действительно помогут в классификации.
    • Кроме того, вы можете использовать общую селекцию признаков (например, прирост информации) или кластеризацию признаков.

[ устаревший ответ на первую версию вопроса ]

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

  • три с половиной дюйма, три и 1/2 дюйма -> мин 3.4 – макс 3.6
  • 27.6234 дюйма -> мин 27.6234 – макс 27.6234
  • высокий -> большой диапазон высоких значений
  • низкий, немного низкий -> большой диапазон низких значений

Обычно способов выразить числа словами не так много, должно быть достаточно нескольких шаблонов, чтобы охватить все варианты. Для других нестандартных случаев, таких как “немного низкий”, я бы начал с изучения их распределения в данных: если значение достаточно часто (например, вероятно, “низкий”, “высокий”), то вручную предопределить диапазон. Значения, которые нечасты, можно игнорировать, например, заменив на NA (поскольку они нечасты, это не должно сильно повлиять на данные).

Ваши выводы относительно кодирования меток, one-hot кодирования и т.п. довольно точны. Для работы с описательными данными, преобразование каждого описания в значимый вектор определенно помогает.

Значимые векторы – это векторы, которые улавливают суть того, что говорится в описаниях.

Например,

футбол = "круглая прыгучая игрушка для детей, чтобы пинать"
баскетбол = "круглая прыгучая игрушка для детей, чтобы дриблинговать"
свеча зажигания = "устройство для доставки электрического тока от системы зажигания в камеру сгорания двигателя с искровым зажиганием"

Значимые векторы будут иметь свойства, такие как,

dist(vector(футбол), vector(баскетбол)) < dist(vector(футбол), vector(свеча зажигания))

Для представления векторов обученного на общих английских корпусах, такие свойства как следующие проявляются –

vector('король') - vector('мужчина') + vector('женщина') = vector('королева')

Word2Vec – это эффективный способ вычисления векторов слов – векторов, которые захватывают значение отдельных слов. Для использования Word2Vec вы можете либо –

  1. Использовать векторы, полученные путем предобучения Word2Vec на большом публичном корпусе (например, Википедия). Поскольку ваши описания содержат слова, которые не имеют специфического значения для вашего домена, это может казаться предпочтительным. Однако этот метод имеет недостаток. В духе получения точных представлений для всего словаря английского языка, эти обученные векторы, как правило, имеют высокую размерность (300 и 1000 более распространены), что может сделать их непригодными для вашей задачи.
  2. Обучать Word2Vec на собственном словаре. С помощью этого метода вы можете установить размеры обученных векторов так, чтобы они улавливали значения слов, но не раздували вашу пространственную задачу.

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

Реализация Word2Vec и Doc2Vec в Gensim имеет довольно простой API, который вы можете быстро изучить для использования в вашей конкретной задаче.

.

Ответ или решение

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

Основная часть:
1. Анализ данных:
Прежде чем приступить к преобразованию описаний, важно провести анализ данных для выявления уникальных значений, повторяющихся шаблонов и характерных особенностей текста. Это позволит более осмысленно выбрать метод преобразования данных.

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

– TF-IDF (Term Frequency-Inverse Document Frequency): Этот метод позволяет взвешивать слова на основе их частоты как в конкретном документе, так и в целом массиве данных. Это помогает выделить значимые слова и снизить вес распространённых терминов, таких как “и”, “в”, и т.д.

3. Уменьшение размерности:
Поскольку результат работы TF-IDF может обладать высокой размерностью, необходимо применить методы уменьшения размерности:

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

4. Использование современных методов:
Современные подходы к обработке текстов предусматривают использование предобученных векторов слов, таких как Word2Vec. Этот метод позволяет получить числовые представления, учитывающие семантическую близость слов. Вы можете использовать предобученные модели или обучить собственную на вашей коллекции описаний.

– Doc2Vec: Расширенный вариант Word2Vec, способный учитывать порядок слов. Этот метод особенно полезен для тех случаев, когда контекст и порядок слов в тексте имеют значение.

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

Заключение:
Работа с описательными данными в задаче многоклассовой классификации представляет собой вызов, но при надлежащем подходе позволяет значительно улучшить качество модели. Используя методы преобразования текста в векторы, такие как TF-IDF и Word2Vec, и применяя умные методы уменьшения размерности, вы сможете создать более устойчивую и обобщающую модель для вашей задачи. Внедряя данные стратегии, вы сможете эффективно агрегировать неструктурированные текстовые данные, улучшая предсказательность вашей модели.

Оцените материал
Добавить комментарий

Капча загружается...