var mlFunct = function(mlData, resultData){ // Formatting of data for(i = 0; i < mlData.length; ++i ) { var month = mlData[i].toString(); month = month.slice(4,7); mlData[i] = [month]; } decisionData = deepcopy(mlData); var dt = new ml.DecisionTree({ data : mlData, result : resultData }); dt.build(); //dt.print(); console.log( "\nTree Depth:" + dt.getDepth() ); //dt.prune(1.0); // 1.0 : mingain. decisionTree = dt; var data = null; if( callback != null ) data = callback(); if( callbackRender != null ) callbackRender( data ); }
const postBox = function*(){ const data = yield; //map to data and result arrays for ml lib input //nick, gender, date of birth, country const d = fp.reduce( (a,u) => ({ data: a.data.concat( [ [ u.nickname.length, u.gender, +moment(u.dob), u.country ] ] ) , result: a.result.concat(u.seeking) }) , {data: [], result: []} ) (data); //build - would prefer to send this off to a worker, to smoothen things out... no time const tree = new ml.DecisionTree( d ); tree.build(); //avoid overfitting, by trading correctness in this case for robustness and simplicity tree.prune(0.1); //init values to classify const newUser = [qs("#nick").value.length, qs("#gender").value, +moment(qs("#dob").value), qs("#country").value]; //update listeners update(newUser, qs('#nick'), 0, tree); }
['google','France','yes',23], ['digg','USA','yes',24], ['kiwitobes','France','yes',23], ['google','UK','no',21], ['(direct)','New Zealand','no',12], ['(direct)','UK','no',21], ['google','USA','no',24], ['slashdot','France','yes',19], ['digg','USA','no',18,], ['google','UK','no',18,], ['kiwitobes','UK','no',19], ['digg','New Zealand','yes',12], ['slashdot','UK','no',21], ['google','UK','yes',18], ['kiwitobes','France','yes',19]]; var result = ['None','Premium','Basic','Basic','Premium','None','Basic','Premium','None','None','None','None','Basic','None','Basic','Basic']; var dt = new ml.DecisionTree({ data : data, result : result }); dt.build(); // dt.print(); console.log("Classify : ", dt.classify(['(direct)','USA','yes',5])); dt.prune(1.0); // 1.0 : mingain. dt.print();