使用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;
编辑:这里的问题是它似乎是" 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()函数的变量的类型是什么以及我应该如何迭代它?例子很好。
我会感激任何帮助。
答案 0 :(得分:0)
使用JavaScript意味着脚本为它接收的每个集合计算新结果(重新计算)。 #lineest数据窗口不是重新计算,而是一个不错的选择。或者,如果您要使用某些代码,则可以向引擎添加自定义聚合函数或自定义数据窗口。下面是脚本在需要脚本时如何接收多个事件的情况。
create expression String exeReg(data) [
.... script here...
];
select exeReg(window(*)) ....
from measure#time(10 seconds);