Методы разделения и сопоставления с образцом - PullRequest
5 голосов
/ 05 сентября 2011

Я новичок в искусственных нейронных сетях.

Я заинтересован в таком приложении:

table

У меня достаточно большой набор предметов. Каждый объект имеет шесть свойств, обозначаемых как P1 - P6. Каждое свойство имеет значение, которое является символическим значением. Другими словами, в моем примере P1 - P6 может иметь значение из набора {A, B, C, D, E, F}. Они не числовые. (Предположим, A, B, C, D, E, F - цвета; тогда вы поймете мою идею.)

Теперь есть еще одно свойство R, которое меня интересует. Предположим,

R = {G1, G2, G3, G4, G5}

Мне нужно обучить систему для большого набора P1 - P6 и соответствующего R. Теперь я хочу сделать следующее.

  1. У меня есть объект, и я знаю значения от P1 до P6. Мне нужно найти R (Группа, к которой принадлежит объект.)

  2. Чтобы получить желаемый R, какой шаблон мне нужен в P1 - P6. В качестве примера, учитывая, что R = G2, мне нужно выяснить любой паттерн в P1 - P6.

Мои вопросы:

  1. Какие теории / технологии / методы я должен прочитать и узнать, чтобы реализовать 1 и 2 соответственно?

  2. Какие инструменты / библиотеки вы можете порекомендовать, чтобы получить это моделируемый / реализован / протестирован

Ответы [ 3 ]

5 голосов
/ 05 сентября 2011

Как вы описали свою проблему, вам нужно искать различные методы машинного обучения. Если бы это был я, я бы попытался прочитать о k-NN (k ближайших соседей) для классификации. Когда я говорю классификацию, я имею в виду получение R, если вы знаете P1-P6. Это действительно простая техника, и она должна быть здесь полезной.

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

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

Рекомендуемые инструменты действительно зависят от вашего базового языка программирования. Есть замечательный инструмент под названием Orange, основанный на Python, и я предпочитаю его использовать для подобных вещей (особенно с учетом того, что ваши модули Python действительно легко соединить с C / C ++). Если вы предпочитаете Java, есть довольно похожий инструмент под названием Weka, который вы можете использовать. Я думаю, что Weka немного лучше задокументировано, но я не люблю Java, поэтому никогда не пробовал.

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

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

3 голосов
/ 05 сентября 2011

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

Тем не менее, я не знаю ни одного метода в искусственном интеллекте, который бы допускал двустороннюю классификацию (или, другими словами, оба реализуют ваши предпосылки 1 и 2 одновременно). Поскольку все, что вы хотите сделать до сих пор, это иметь двунаправленное отображение P1..P6 <=> R, я бы предложил просто использовать таблицу сопоставления вместо алгоритма искусственного интеллекта. ИИ прекрасно работал бы, если бы вы точно не знали, какой из ваших сэмплов относится к категории A..E в P1..P6.

Если вы настаиваете на использовании ИИ для этого, я бы предложил сначала взглянуть на Перцептрон . Перцептрон состоит из входных, промежуточных и выходных нейронов. Для вашего примера у вас будут входные нейроны P1a..P1e, P2a..P2e, ... и пять выходных нейронов R1..R5. После тренировки вы сможете ввести P1..P6 и получить соответствующий R1..R5 в качестве вывода.

Что касается фреймворков и технологий, я знаю только набор Business Intelligence для Visual Studio, хотя существует множество других фреймворков для ИИ. Поскольку я не использовал ни одного из них (я всегда сам кодировал их на C / C ++), я не могу рекомендовать их.

1 голос
/ 16 сентября 2011

Это похоже на типичную проблему классификации. Если у вас действительно много данных, взгляните на Apache Mahout , который предоставляет распределенные реализации алгоритмов машинного обучения. Если вам нужно что-то менее сложное для создания прототипа, TimBL - хорошая альтернатива.

...