Математическая библиотека для сравнения симуляций в графах данных для языка высокого уровня (например, Javascript)? - PullRequest
2 голосов
/ 19 сентября 2010

Я ищу что-то, что, я думаю, является довольно сложным и, возможно, не существует публично, но, надеюсь, оно существует.

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

x | 1 | 2 | 3 | 4 | 5
y | 12 | 14 | 16 | 8 | 6

Это просто случайный пример.Теперь есть тысячи этих элементов со своим собственным набором значений x и y.Диапазон между одним x и x после этого не является фиксированным и может отличаться для каждого элемента.

Я ищу библиотеку, где я могу подключить все эти наборы X и Y и сказать ейвозвращать такие вещи, как наиболее распространенный элемент (наборы x и y, которые следуют за сопоставимой кривой / прогрессией), и возможность проверить, является ли определенный набор, по меньшей мере, x% сопоставимым с другим набором.

С сопоставимым Iозначает наклон кривой, если вы нарисуете график данных.Таким образом, не на самом деле статические значения, а скорее обнаружение событий, таких как большое увеличение, сопровождаемое медленным снижением и т. Д.

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

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

Ответы [ 5 ]

3 голосов
/ 28 сентября 2010

Снова о Марковском кластере (ing), автором которого я являюсь, и вашим приложением.Вы упоминаете, что вас интересует сходство трендов между объектами.Это обычно рассчитывается с использованием корреляции Пирсона.Если вы используете реализацию mcl из http://micans.org/mcl/,, вы также получите программу 'mcxarray'.Это может быть использовано для вычисления корреляции Пирсона, например, между строками в таблице.Это может быть полезно для вас.Он способен обрабатывать недостающие данные - в упрощенном подходе он просто вычисляет корреляции по тем индексам, для которых доступны значения для обоих.Если у вас есть дополнительные вопросы, я с удовольствием на них отвечу - с оговоркой, которую я обычно хотел бы, чтобы cc отвечал на список рассылки mcl, чтобы они архивировались и были доступны для дальнейшего использования.

2 голосов
/ 28 сентября 2010

Что вам нужно, так это реализация кластера Маркова.Он часто используется для поиска групп похожих последовательностей.Портировать его на Javascript, ну ... Если вы действительно серьезно относитесь к этому анализу, вы отбрасываете Javascript как можно скорее и переходите к R. Javascript не предназначен для выполнения таких вычислений, и он слишком медленный дляЭто.R является статистическим пакетом с большим количеством реализованных.Он также разработан специально для очень быстрых матричных вычислений, и большая часть языка векторизована (то есть вам не нужны циклы for для применения функции к вектору значений, это происходит автоматически)

Длякластеризация markov, отметьте http://www.micans.org/mcl/ Пример реализации: http://www.orthomcl.org/cgi-bin/OrthoMclWeb.cgi

Теперь вам также нужно определить «расстояние» между вашими наборами.Поскольку вас интересуют события, а не значения, вы можете присвоить каждому элементу дополнительный атрибут, представляющий собой вектор с различиями y [i] - y [i-1] (в R: diff (y)).Затем расстояние между двумя предметами можно рассчитать как сумму квадратов разностей между y1 [i] и y2 [i].

Это позволяет вам построить матрицу расстояний для ваших предметов, и на этом вы можетевызовите алгоритм mcl.Если вы не работаете в Linux, вам придется портировать его.

2 голосов
/ 23 сентября 2010

То, что вы хотите сделать, - это ANOVA, или ANALysis Of VAriance.Если вы проведете числа с помощью теста ANOVA, он даст вам информацию о наборе данных, который поможет вам сравнить одно с другим.Мне не удалось найти библиотеку Javascript, которая выполняла бы ANOVA, но есть множество программ, способных на это.Excel может выполнять ANOVA из плагина.R - это бесплатный пакет статистики, который также может выполнять ANOVA.

Надеюсь, это поможет.

1 голос
/ 28 сентября 2010

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

1 голос
/ 23 сентября 2010

Что-то простое (если все графики имеют 5 точек, а x = 1,2,3,4,5 всегда)

  • Возьмем u1 = первую точку y, т.е. y1
  • Взять u2 = y2 - y1
  • ...
  • Взять u5 = y5 - y4

Теперь рассмотрим вектор u как точку в 5-мерном пространстве. Вы можете использовать простые алгоритмы кластеризации, такие как k-means.

РЕДАКТИРОВАТЬ: Вы не должны стремиться к чему-то слишком сложному, пока вы идете с JavaScript. Если вы хотите использовать Java, я могу предложить что-то, основанное на PCA (требующее использования разложения по сингулярным значениям, что слишком сложно для эффективной реализации в JS).

По сути, это выглядит так: Возьмите за ранее (возможно, большое) линейное представление данных, возможно, разности компонентов x, y, абсолютных значений. Например, вы могли бы взять u = (x1, x2 - x1, ..., x5 - x4, y1, y2 - y1, ..., y5 - y4)

Вы вычисляете вектор u для каждого образца. Назовите ui вектор u для i-го образца. Теперь формируем матрицу

M_ {ij} = скалярное произведение ui и uj

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

Соответствующие столбцы матрицы U в SVD дают ортонормированное семейство B_k, k = 1..N. Квадратный i-й компонент B_k дает вам вероятность того, что i-я выборка принадлежит кластеру K.

...