diff --git a/js/demo/ml1.js b/js/demo/ml1.js new file mode 100644 index 0000000..43faa79 --- /dev/null +++ b/js/demo/ml1.js @@ -0,0 +1,159 @@ +var Ml = require('/opt/JAM/lib/libml'); + +// KNN +console.log(Ml) +var data = [ +[0, 0, 0], [0, 1, 1], [1, 1, 0], [2, 2, 2], [1, 2, 2], [3, 2, 2], [3, 5, 6] +] +var results = [ +'a', 'a', 'a', 'b', 'b', 'c', 'c' +] +var model1 = Ml.learn({x:data,y:results,algorithm:Ml.ML.KNN,distance:Ml.ML.EUCL}); +console.log(model1) +var prediction1 = Ml.classify(model1,[[1.81, 1.81, 1.81], [0.5, 0.5, 0.5]]); +console.log(Ml.ML.KNN,prediction1) + +// DTI +var model2 = Ml.learn({x:data,y:results,algorithm:Ml.ML.DTI,eps:0.2}); +console.log(Ml.print(model2)) +var prediction2 = Ml.classify(model2,[[1.81, 1.81, 1.81], [0.5, 0.5, 0.5]]); +console.log(Ml.ML.DTI,prediction2) + +// MLP +var x = [[0.4, 0.5, 0.5, 0., 0., 0.], + [0.5, 0.3, 0.5, 0., 0., 0.], + [0.4, 0.5, 0.5, 0., 0., 0.], + [0., 0., 0.5, 0.3, 0.5, 0.], + [0., 0., 0.5, 0.4, 0.5, 0.], + [0., 0., 0.5, 0.5, 0.5, 0.]]; +var y = [[1, 0], + [1, 0], + [1, 0], + [0, 1], + [0, 1], + [0, 1]]; + +var mlp1 = new Ml.learn({ + x : x, + y : y, + labels:['a','b'], + hidden_layers : [4,4,5], + lr : 0.6, + epochs : 20000, + algorithm:Ml.ML.MLP, + verbose:1 +}); +a = [[0.5, 0.5, 0., 0., 0., 0.], + [0., 0., 0., 0.5, 0.5, 0.], + [0.5, 0.5, 0.5, 0.5, 0.5, 0.]]; + +console.log(Ml.ML.MLP,Ml.classify(mlp1,a)); +console.log(Ml.ML.MLP,Ml.classify(mlp1,a[0])); + +var x = [[0.004, 0.005, 0.005, 0., 0., 0.], + [0.005, 0.003, 0.005, 0., 0., 0.], + [0.004, 0.005, 0.005, 0., 0., 0.], + [0., 0., 0.005, 0.003, 0.005, 0.], + [0., 0., 0.005, 0.004, 0.005, 0.], + [0., 0., 0.005, 0.005, 0.005, 0.]]; +var y = ['a', + 'a', + 'a', + 'b', + 'b', + 'b']; + +var mlp2 = new Ml.learn({ + x : x, + y : y, + features:['f1','f2','f3','f4','f5','f6'], + labels:['a','b'], + hidden_layers : [4,4,5], + lr : 0.6, + epochs : 20000, + algorithm:Ml.ML.MLP, + normalize:true, + bipolar:true, + verbose:1 +}); + + + +console.log(Ml.ML.MLP,Ml.classify(mlp2,{f1:0.005,f2:0.005,f3:0,f4:0,f5:0,f6:0})); + +// SVM +var x = [[0.4, 0.5, 0.5, 0., 0., 0.], + [0.5, 0.3, 0.5, 0., 0., 0.01], + [0.4, 0.8, 0.5, 0., 0.1, 0.2], + [1.4, 0.5, 0.5, 0., 0., 0.], + [1.5, 0.3, 0.5, 0., 0., 0.], + [0., 0.9, 1.5, 0., 0., 0.], + [0., 0.7, 1.5, 0., 0., 0.], + [0.5, 0.1, 0.9, 0., -1.8, 0.], + [0.8, 0.8, 0.5, 0., 0., 0.], + [0., 0.9, 0.5, 0.3, 0.5, 0.2], + [0., 0., 0.5, 0.4, 0.5, 0.], + [0., 0., 0.5, 0.5, 0.5, 0.], + [0.3, 0.6, 0.7, 1.7, 1.3, -0.7], + [0., 0., 0.5, 0.3, 0.5, 0.2], + [0., 0., 0.5, 0.4, 0.5, 0.1], + [0., 0., 0.5, 0.5, 0.5, 0.01], + [0.2, 0.01, 0.5, 0., 0., 0.9], + [0., 0., 0.5, 0.3, 0.5, -2.3], + [0., 0., 0.5, 0.4, 0.5, 4], + [0., 0., 0.5, 0.5, 0.5, -2]]; + +var y = [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1,1,1]; + +var svm = Ml.learn({ + x : x, + y : y, + C : 1.1, // default : 1.0. C in SVM. + tol : 1e-5, // default : 1e-4. Higher tolerance --> Higher precision + max_passes : 20, // default : 20. Higher max_passes --> Higher precision + alpha_tol : 1e-5, // default : 1e-5. Higher alpha_tolerance --> Higher precision + + kernel : { type: "polynomial", c: 1, d: 5}, + // default : {type : "gaussian", sigma : 1.0} + // {type : "gaussian", sigma : 0.5} + // {type : "linear"} // x*y + // {type : "polynomial", c : 1, d : 8} // (x*y + c)^d + // Or you can use your own kernel. + // kernel : function(vecx,vecy) { return dot(vecx,vecy);} + algorithm:Ml.ML.SVM +}); + +console.log(svm.algorithm,Ml.classify(svm,[1.3, 1.7, 0.5, 0.5, 1.5, 0.4])); + + +// C4.5 +var CLASS1='CL1',CLASS2='CL2',A='A',B='B',C='C',True=true,False=false; +var data = [ +[A,70,True,CLASS1], +[A,90,True,CLASS2], +[A,85,False,CLASS2], +[A,95,False,CLASS2], +[A,70,False,CLASS1], +[B,90,True,CLASS1], +[B,78,False,CLASS1], +[B,65,True,CLASS1], +[B,75,False,CLASS1], +[C,85,True,CLASS1], +[C,80,True,CLASS2], +[C,70,True,CLASS2], +[C,80,False,CLASS1], +[C,80,False,CLASS1], +[C,96,False,CLASS1], +]; +var c45 = Ml.learn({ + data:data, + algorithm:Ml.ML.C45 +}); + +var testData = [ + [B,71,False], + [C,70,True], + [C,75,True], + [C,95,True], + ]; +console.log(c45.algorithm,Ml.classify(c45,testData));