Классификация захваченных данных в неизвестном формате?

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

Если у меня есть следующие строки данных:

132T339G1P112S
164T897F5A498S
144T989B9B223T
155T928X9Z554T
...

вы можете начать делать следующие выводы:

  • возможно, все строки имеют длину 14 символов
  • 4-й, 8-й, 10-й и 14-й символы всегда могут быть буквами, а остальные — цифрами.
  • первый символ всегда может быть «1»
  • 4-й символ всегда может быть буквой «Т»
  • 14-й символ может быть ограничен только «S» или «T»
  • и так далее...

По мере того, как вы будете получать все больше и больше выборок реальных данных, некоторые из этих «правил» могут исчезнуть; если вы видите длинную строку из 15 символов, то у вас есть доказательства того, что 1-е «правило» неверно. Однако, учитывая достаточно большую выборку строк длиной ровно 14 символов, вы можете начать предполагать, что «все строки имеют длину 14 символов», и присвоить числовое значение вашей степени достоверности (с соответствующим набором предположений относительно факта что вы видите достаточно случайный набор всех возможных захваченных данных).

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

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

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

Полагаю, что Python или Java (или, возможно, Perl или R), возможно, являются «распространенными» языками, которые, скорее всего, будут иметь такие библиотеки, и, возможно, некоторые биоинформатические библиотеки делают подобные вещи. Мне действительно все равно, какой язык я должен использовать; Мне нужно решить проблему любым возможным способом.

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


person monch1962    schedule 19.05.2010    source источник


Ответы (2)


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

Что, я думаю, вам нужно сделать, так это запрограммировать компьютер с определенными типами правил, которые он может идентифицировать. Например, вы можете написать сценарий, определяющий правила вида «Длина строки всегда равна X». Или даже «N-й символ всегда X» не будет слишком сложным. Я заметил, что примеры правил, которые вы упомянули, имеют именно эту форму, так что это не слишком далеко от человеческого анализа ;-) На самом деле, если вы знаете или можете предположить, что выбор символа, который появляется в данная позиция основана только на позиционном индексе, вы можете использовать свои данные для оценки вероятности того, что данный символ появится в данном месте, что будет похоже на более общую версию «N-й символ всегда X».

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

person David Z    schedule 19.05.2010
comment
Спасибо за ваш ответ. Если действительно нет лучшего варианта, чем построить большую кучу операторов if с явными параметрами, то я отмечу ваш ответ как принятый. Тем не менее, я склонен думать, что, вероятно, что-то есть, например. Биоинформатика Python или библиотеки NLTK, которые могут подойти - я просто недостаточно знаю об этих областях, чтобы составить подходящий вопрос. - person monch1962; 19.05.2010
comment
Вы правы, может быть что-то лучше, чем список операторов if или их эквивалент, но я сомневаюсь, что вы найдете что-то намного лучше. Это касается области искусственного интеллекта — не то чтобы я был экспертом в этом или чем-то еще, но я знаю, что разработка ИИ все еще довольно примитивна. - person David Z; 20.05.2010

Попробуйте Weka с алгоритмами кластеризации. Алгоритмы кластеризации находят закономерности в данных без надзора. У Weka также есть инкрементальные кластеризаторы. Именно то, что вы хотите, я думаю.

И это Ява.

person Allen    schedule 23.05.2010
comment
Я должен добавить, что вашу проблему можно описать как проблему кластеризации. - person Allen; 24.05.2010