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

Я работаю над довольно простым процессом в RapidMiner 5.3.013, который считывает CSV-файл и использует его в качестве тренировочного набора для обучения классификатора дерева решений. Результатом процесса является модель. Второй CSV-файл считывается и используется как немаркированный набор. Модель (рассчитанная ранее) применяется к немаркированному тестовому набору, чтобы правильно его пометить.

Каждая строка файла CSV содержит несколько атрибутов, например:
15, 0, 1555, abc*15, label1.

но некоторые строки обучающей выборки могут быть такими:
15, 0, *, abc*15, label2
Это сделано потому, что третье значение может принимать разные значения, поэтому создатель тренировочного набора использовал звездочку в качестве подстановочного знака вместо значения.

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

Примечания:

  1. звездочка в 4-м поле (abc*15) должна соответствовать буквально, а не как подстановочный знак.
  2. если бы 3-е поле всегда содержало звезды, я мог бы просто не включать его в атрибуты, но это не так. Иногда 3-е поле содержит целочисленные значения, которые должны сопоставляться буквально.
  3. Пробовал оставить поле пустым, не работает

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

Другими словами: Могу ли я указать классификатору не использовать некоторые атрибуты в некоторых записях (строках в CSV)?

Спасибо!


person Chris    schedule 14.04.2015    source источник
comment
В итоге я изменил Java-код создателя модели дерева решений. И это сработало! И я использовал это в своей диссертации :). Я ждал, пока у меня появится свободное время, чтобы правильно написать ответ, но это произойдет не скоро, поэтому этот комментарий - все, что я сделаю сейчас. Если кому-то нужны подробности, спрашивайте, буду рядом.   -  person Chris    schedule 20.11.2015


Ответы (1)


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

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

Это довольно сложно сделать, и я не пробовал этого, но я бы начал с оператора Declare Missing Value, чтобы обнаружить * и сделать их пропавшими без вести. Оттуда я бы использовал оператор Discretize by Binning для преобразования чисел в номинальные значения. Наконец, я бы использовал Replace Missing Values, чтобы изменить отсутствующие значения на номинальное значение, такое как Missing. Вы можете спросить, зачем возиться с первым шагом «Объявить пропавшим без вести» выше? Причина в том, что это позволит работать операции дискретизации, потому что она будет работать только с числами, учитывая, что не числа помечены как отсутствующие.

Результирующий набор примеров затем передается в модель обычным способом. Очевидно, что модель должна иметь возможность работать с номинальными атрибутами (деревья решений).

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

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

person Andrew Chisholm    schedule 16.04.2015
comment
Спасибо за ответ. Не могли бы вы добавить пример или немного больше пояснений, чтобы помочь мне лучше понять решение? ‹‹‹‹разрыв строки›››› Часть 1: я могу предварительно обработать данные (обучающие и тестовые наборы), но что вы подразумеваете под отсутствующим значением? Может быть, подстановочный знак в тренировочном наборе? ‹‹‹‹разрыв строки› ››› Часть 2. То есть вместо того, чтобы рассматривать отдельные значения как номинальные, я мог бы объявить их числовыми и сделать так, чтобы дерево создавало диапазоны, верно? Однако на самом деле это не решает проблему, поскольку подстановочный знак должен соответствовать любому значению, поэтому диапазон будет от 0 до макс. - person Chris; 16.04.2015
comment
Мой предыдущий ответ был немного краток - я отредактирую его напрямую, чтобы он был более автономным. - person Andrew Chisholm; 17.04.2015