Задача машинного обучения: программа диагностики в Java / Groovy (DataMining, машинное обучение) - PullRequest
19 голосов
/ 03 декабря 2009

Я планирую разработать программу на Java, которая будет обеспечивать диагностику. Набор данных разделен на две части: одну для обучения, а другую для тестирования. Моя программа должна научиться классифицировать по данным обучения (кстати, которые содержат ответ на 30 вопросов каждый в новом столбце, каждая запись в новой строке, последний столбец будет диагноз 0 или 1, в части тестирования столбца диагностики данных будет пустым набор данных содержит около 1000 записей), а затем делать прогнозы при тестировании части данных: /

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

Я думал о Java Machine Learning Библиотека или Java Data Mining Package но я не уверен, что это верное направление ...? и я до сих пор не знаю, как справиться с этим вызовом ...

Пожалуйста, сообщите.

Всего наилучшего!

Ответы [ 5 ]

13 голосов
/ 03 декабря 2009

Я настоятельно рекомендую вам использовать Weka для вашей задачи
Это набор алгоритмов машинного обучения с дружественным интерфейсом, который облегчает множество различных стратегий выбора функций и моделей
Вы можете сделать много действительно сложных вещей, используя это, не занимаясь программированием или математикой
Производители также опубликовали довольно хороший учебник , в котором объясняются практические аспекты интеллектуального анализа данных
Как только вы освоите его, вы сможете использовать его API для интеграции любого из его классификаторов в свои собственные Java-программы

7 голосов
/ 03 декабря 2009

Привет Как сказал Ганн Бирнер, это проблема классификации. Лучший алгоритм классификации для ваших потребностей, который я знаю, это алгоритм Росса Квинлана. Это концептуально очень легко понять.

Для стандартных реализаций алгоритмов классификации лучше всего подходит Weka. http://www.cs.waikato.ac.nz/ml/weka/. Я изучал Weka, но не использовал, так как обнаружил это слишком поздно.

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

http://www.run.montefiore.ulg.ac.be/~francois/software/jaDTi/

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

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

Чтобы создать такое приложение, я создал документ PMML из своего обучающего набора и создал движок Java, который перебирает каждый узел дерева, запрашивая у пользователя ввод (текст / радио / список) и используя значения как входные данные для следующего возможного предиката узла.

Стандарт PMML можно найти здесь: http://www.dmg.org/ Здесь вам нужна только TreeModel. Плагин NetBeans XML - это хороший редактор с поддержкой схем для разработки PMML. Altova XML может работать лучше, но стоит $$.

Можно также использовать СУБД для хранения вашего набора данных и автоматического создания PMML! Я этого не пробовал.

Удачи в вашем проекте, пожалуйста, дайте мне знать, если вам нужны дополнительные материалы.

6 голосов
/ 03 декабря 2009

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

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

Удачи!

Обновление: я согласен с другим комментатором, что Рассел и Норвиг - отличная книга ИИ, в которой обсуждается кое-что из этого. В книге Бишопа «Распознавание образов и машинное обучение» подробно обсуждаются вопросы классификации, если вас интересуют нюансы и грязные детали.

6 голосов
/ 03 декабря 2009

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

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

Я бы взглянул на некоторые стандартные тексты, такие как Russel & Norvig («Искусственный интеллект: современный подход») и другие введения в ИИ / машинное обучение, и посмотрел, сможете ли вы легко адаптировать упомянутые алгоритмы к ваши конкретные данные. См. Также O'Reilly, «Программирование коллективного разума», где приведен пример кода Python из одного или двух алгоритмов, которые могут быть адаптированы к вашему случаю.

Если вы умеете читать по-испански, мексиканское издательство Alfaomega также опубликовало в последние годы различные полезные материалы, связанные с ИИ.

3 голосов
/ 16 декабря 2009

Ваша задача классическая для нейронных сетей, которые предназначены прежде всего для точного решения задач классификации. Нейронная сеть имеет довольно простую реализацию на любом языке, и она является «основным направлением» «машинного обучения», ближе к ИИ, чем что-либо другое. Вы просто внедряете (или получаете существующую реализацию) стандартную нейронную сеть, например, многослойную сеть с обучением по обратному распространению ошибок, и даете ей примеры обучения в цикле. Через некоторое время такого обучения вы начнете работать на реальных примерах. Вы можете прочитать больше о нейронных сетях, начиная с здесь: http://en.wikipedia.org/wiki/Neural_network http://en.wikipedia.org/wiki/Artificial_neural_network Также вы можете получить ссылки на многие готовые реализации здесь: http://en.wikipedia.org/wiki/Neural_network_software

...