Вопрос

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

A  B  C  D  E  Result
1  2  b  5  3  X
1  2  c  5  4  X
1  2  e  5  2  X

Мы принимаем предмет и получаем его значения для AE, а затем попробуем соответствовать правилам последовательно. Если кто -то соответствует, мы возвращаем первый результат.

C - дискретное значение, которое может быть любым из AE. Остальные просто целые числа.

Набор правил был автоматически сгенерирован из нашей старой системы и имеет чрезвычайно большое количество правил (~ 25 миллионов). Старые правила были, если утверждения, например,

result("X") if $A >= 1 && $A <= 10 && $C eq 'A';

Как вы можете видеть, старые правила часто даже не используют некоторые функции и не принимают диапазоны. Некоторые более раздражают:

result("Y") if ($A == 1 && $B == 2) || ($A == 2 && $B == 4);

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

A  B  C    D  E    Result
1  2  bce  5  2-4  X

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

A  B  C   Result
1  2  a   X
1  2  b   X
(repeat a few hundred times)
2  4  a   X  
2  4  b   X
(ditto)

В идеальном мире это будет два правила:

A  B  C  Result
1  2  *  X
2  4  *  X

То есть: не только алгоритм определит взаимосвязь между A и B, но также выведет, что C - это шум (не важно для правила)

У кого -нибудь есть представление о том, как решить эту проблему? Любой язык или библиотека-это честная игра, так как я ожидаю, что это будет в основном одноразовым процессом. Заранее спасибо.

Это было полезно?

Решение

Проверьте Weka машинное обучение LIB для Java. Анкет API немного крут, но он очень полезен. В целом, вы, кажется, хотите,-это алгоритм машинного обучения, который именно содержит Weka. Вы, очевидно, ищете что -то относительно простое для интерпретации (вы упоминаете, что хотите, чтобы это выводило отношения между A и B, и сказать вам, что C - это просто шум.) Вы можете попробовать дерево решений, например J48, как эти обычно легко визуализировать/интерпретировать.

Другие советы

Двадцать пять миллионов правил? Сколько функций? Сколько значений на функцию? Можно ли перецитироваться через все комбинации в практическое время? Если вы можете, вы можете начать с разделения правил на группы по результату.

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

Карта имеет два использования. Один из них: Исследование автоматических методов для алгоритма Quine-McCluskey. В этой области было проведено много работы. Есть даже несколько доступных программ, хотя, вероятно, ни одна из них не будет иметь дело с картой Кано размера, который вы собираетесь сделать.

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

-Ал

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top