Агрегирование автоматически сгенерированных векторов объектов - PullRequest
1 голос
/ 19 января 2010

У меня есть система классификации, которая, к сожалению, должна быть расплывчатой ​​по соображениям работы. Скажем, у нас есть 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

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

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

Набор правил был автоматически сгенерирован из нашей старой системы и имеет чрезвычайно большое количество правил (~ 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

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

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 является шумом (не важно для правила)

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

Ответы [ 3 ]

1 голос
/ 20 января 2010

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

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

Карта имеет два использования. Первый: исследовать автоматизированные методы для алгоритма Куайна-МакКласки. Много работы было проделано в этой области. Есть даже несколько доступных программ, хотя, вероятно, ни одна из них не будет иметь дело с картой Карно того размера, который вы собираетесь сделать.

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

-Аль.

1 голос
/ 20 января 2010

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

0 голосов
/ 19 января 2010

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

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

...