Как лучше всего добиться линейной регрессии с помощью CEP? Мы попробовали два разных варианта.
Мы хотим, чтобы алгоритм работал в режиме реального времени.
Базовый код для обоих подходов:
create context IntervalSpanning3Seconds start @now end after 30 sec;
create schema measure (
temperature float,
water float,
_hours float,
persons float,
production float
);
@Name("gattering_measures")
insert into measure
select
cast(getNumber(m,"measurement.bsk_mymeasurement.temperature.value"),
float) as temperature,
cast(getNumber(m, "measurement.bsk_mymeasurement.water.value"), float) as water,
cast(getNumber(m, "measurement.bsk_mymeasurement._hours.value"), float) as _hours,
cast(getNumber(m, "measurement.bsk_mymeasurement.persons.value"), float) as persons,
cast(getNumber(m, "measurement.bsk_mymeasurement.production.value"),float) as production
from MeasurementCreated m
where m.measurement.type = "bsk_mymeasurement";
<сильный>1. Использование функции stat:linest
@Name("get_data")
context IntervalSpanning3Seconds
select * from measure.stat:linest(water,production,_hours,persons,temperature)
output snapshot when terminated;
EDIT: Проблема здесь в том, что кажется, что "get_data" выполняется для каждого измерения, а не для всего набора измерений.
<сильный>2. Получить данные и передать функцию JavaScript.
create expression String exeReg(data) [
var f = f(data)
function f(d){
.....
// return the linear regression as a string
}
return f
];
@Name("get_data")
insert into CreateEvent
select
"bsk_outcome_linear_regression" as type,
exeReg(m) as text,
....
from measure m;
РЕДАКТИРОВАТЬ: Здесь я хотел бы знать, какой тип переменной передается в функцию exeReg() и как мне ее повторять? пример был бы хорош.
Я буду признателен за любую помощь.