Лучший способ классифицировать наборы данных со смешанными типами атрибутов

13

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

user900
источник

Ответы:

11

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

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

Indico
источник
2
Еще один голос за уменьшение размерности. Просто некоторые дополнения: Principal Component Analysisили Non-Negative Matrix Factorizationуменьшит количество переменных, обогатит разреженные данные и преобразует все переменные в количественные. Кроме того, оценивая качество модели уменьшения размерности, автор вопроса может оценить полезность текстовых переменных.
Собач
@indico отличный ответ. Не могли бы вы дать нам ссылку в книге или статье, что древовидные алгоритмы лучше работают с данными смешанного типа (категориальные и количественные данные)?
ZelelB
6

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

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

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

Кристофер Лоуден
источник
2

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

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

    Во-первых, нам нужно убедиться, что ответы с одинаковым значением написаны одинаково и относятся к одной и той же категории (например, «на велосипеде», «на велосипеде», «на велосипеде» имеют одинаковое значение). Затем вы можете попробовать еще больше объединить в менее подробные категории (например, объединить «трамвай», «метро» и «автобус» в «Средства общественного транспорта») или даже больше (например, «Прогулка», «Бег», «Велоспорт» в »). Физическая активность ») в зависимости от того, что вы пытаетесь выяснить.

    Вы даже можете поместить несколько различных комбинаций в свой набор данных, и тогда последующие шаги определят, какие из них будут использоваться для анализа. В случаях, когда текстовые данные могут быть «переведены» в упорядоченные переменные, убедитесь, что вы делаете это (например, если у вас есть «small, medium, high», преобразуйте их в «1,2,3»).

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

  3. Примените технику выбора / уменьшения размерности к вашим данным. Вы можете найти полезный обзор таких методов здесь . Если вы используете Python, инструменты sklearn предоставляют вам множество опций (подробнее см. Здесь ). Убедитесь, что вы используете технику, которая также учитывает мультиколлинеарность. Я бы попробовал Анализ основных компонентов или алгоритм на основе дерева.

  4. Для классификации данных я бы выбрал Decision Tree Classifier (также доступен через sklearn ). Он также выполняет выбор характеристик, определяя вес важности для объектов. Вы можете установить уровень детализации в сгенерированном дереве в зависимости от ваших параметров (например, max_depth, min_samples_split). Обязательно настройте уровень детализации на основе перекрестной проверки, чтобы избежать перегрузки.

missrg
источник