From 74ea83c0b621a96955835a71be2552d85c77db97 Mon Sep 17 00:00:00 2001 From: rozetko Date: Fri, 14 Sep 2018 18:59:53 +0300 Subject: [PATCH] Reduce amount of required labeled segments for learning #147 (#153) * rm labeled segments amount check && change query range algorithm * review fix * typo fix * minor fix --- .../src/controllers/analytics_controller.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/server/src/controllers/analytics_controller.ts b/server/src/controllers/analytics_controller.ts index 6a29fe8..64ff280 100644 --- a/server/src/controllers/analytics_controller.ts +++ b/server/src/controllers/analytics_controller.ts @@ -74,15 +74,16 @@ async function runTask(task: AnalyticsTask): Promise { * @param segments labeled segments */ function getQueryRangeForLearningBySegments(segments: Segment.Segment[]) { - if(segments.length < 2) { - throw new Error('Need at least 2 labeled segments'); + if(segments.length === 0) { + throw new Error('Need at least 1 labeled segment'); } let from = _.minBy(segments, s => s.from).from; let to = _.maxBy(segments, s => s.to).to; - let diff = to - from; - from -= Math.round(diff); - to = Date.now(); + let now = Date.now(); + let leftOffset = now - to; + from -= Math.round(leftOffset); + to = now; return { from, to }; } @@ -96,8 +97,8 @@ export async function runLearning(id: AnalyticUnit.AnalyticUnitId) { } let segments = await Segment.findMany(id, { labeled: true }); - if(segments.length < 2) { - throw new Error('Need at least 2 labeled segments'); + if(segments.length === 0) { + throw new Error('Need at least 1 labeled segment'); } let segmentObjs = segments.map(s => s.toObject()); @@ -140,8 +141,8 @@ export async function runPredict(id: AnalyticUnit.AnalyticUnitId) { let pattern = unit.type; let segments = await Segment.findMany(id, { labeled: true }); - if(segments.length < 2) { - throw new Error('Need at least 2 labeled segments'); + if(segments.length === 0) { + throw new Error('Need at least 1 labeled segment'); } let { from, to } = getQueryRangeForLearningBySegments(segments);