Как вы измеряете сходство между двумя сериями данных? - PullRequest
3 голосов
/ 04 декабря 2011

Мне нужно найти измерение сходства между двумя массивами данных.Вы можете называть измерение сходства, как хотите, разницу, корреляцию и т. Д.

Например:

 1, 2, 3, 4, 5 < Series 1
 2, 3, 4, 5, 6 < Series 2

Должно быть гораздо больше похожим друг на друга, чем эти 2 серии:

 1, 2, 3, 4, 5 < Series 1
 1, 1, 5, 8, 7 < Series 2

Есть предложения?

Доступен ли для него исходный код?

Ответы [ 3 ]

2 голосов
/ 04 декабря 2011

Вы можете рассчитать образец коэффициента корреляции Пирсона-момента произведения : «Вышеприведенная формула предлагает удобный однопроходный алгоритм для расчета выборочных корреляций». Напишите цикл для вычисления суммы (xi), суммы (yi), суммы (xi ^ 2), суммы (yi ^ 2) и суммы (xi * yi). Затем введите эти суммы в формулу.

0 голосов
/ 21 февраля 2014

Еще один способ сделать это - рассчитать взаимную информацию, для этого есть набор инструментов в matlab и C http://www.cs.man.ac.uk/~pococka4/MIToolbox.html

0 голосов
/ 04 декабря 2011

Если ваше определение сходства состоит в том, сколько элементов существует, вы можете использовать пересечение множеств:

std::multiset<int> Series1 = std::multiset({ 1, 2, 3, 4, 5 });
std::multiset<int> Series2 = std::multiset({ 2, 3, 4, 5, 6 });
std::multiset<int> Intersection;

std::set_intersection(Series1.begin(), Series1.end(),
                      Series2.begin(), Series2.end(),
                      std::back_inserter(Intersection));

int similarity = Intersection.size(); // = 4
...