В качестве примера я предполагаю, что вы измеряете температуру, ветер и осадку. Мы будем называть эти элементы «функциями». Поэтому допустимыми значениями могут быть:
- Температура: от -50 до 100F (я в Миннесоте, США)
- Ветер: от 0 до 120 миль / час (не уверен, что это реально, но потерпите меня)
- Precip: от 0 до 100
Начните с нормализации ваших данных. Temp имеет диапазон 150 единиц, Wind 120 единиц и Precip 100 единиц. Умножьте свои единицы ветра на 1.25 и Precip на 1.5, чтобы сделать их примерно такими же «масштабными», как и ваши временные. Вы можете придумать здесь и сделать правила, которые оценивают одну функцию как более ценную, чем другие. В этом примере ветер может иметь огромный диапазон, но обычно остается в меньшем диапазоне, поэтому вы хотите взвесить его меньше, чтобы предотвратить искажение результатов.
Теперь представьте каждое измерение как точку в многомерном пространстве. Этот пример измеряет трехмерное пространство (темп, ветер, ось). Приятно то, что если мы добавим больше функций, мы просто увеличим размерность нашего пространства, но математика останется прежней. В любом случае, мы хотим найти исторические точки, наиболее близкие к нашей текущей точке. Самый простой способ сделать это - Евклидово расстояние . Поэтому измерьте расстояние от нашей текущей точки до каждой исторической точки и соблюдайте ближайшие совпадения:
for each historicalpoint
distance = sqrt(
pow(currentpoint.temp - historicalpoint.temp, 2) +
pow(currentpoint.wind - historicalpoint.wind, 2) +
pow(currentpoint.precip - historicalpoint.precip, 2))
if distance is smaller than the largest distance in our match collection
add historicalpoint to our match collection
remove the match with the largest distance from our match collection
next
Это подход грубой силы. Если бы у вас было время, вы могли бы стать намного интереснее. Многомерные данные могут быть представлены в виде деревьев, таких как kd-деревья или r-деревья . Если у вас много данных, сравнение вашего текущего наблюдения с каждым историческим наблюдением будет слишком медленным. Деревья ускоряют поиск. Возможно, вы захотите взглянуть на Кластеризация данных и Поиск ближайшего соседа .
Приветствие.