diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/class.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/embedded.class.txt similarity index 61% rename from sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/class.txt rename to sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/embedded.class.txt index 843161d8..6437aeae 100644 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/class.txt +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/embedded.class.txt @@ -5,11 +5,11 @@ {method} int main(int argc, const char * argv[]) {{ - float atts[argc-1]; + float features[argc-1]; int i; for (i = 1; i < argc; i++) {{ - atts[i-1] = atof(argv[i]); + features[i-1] = atof(argv[i]); }} - printf("%d", {method_name}(atts)); + printf("%d", {method_name}(features)); return 0; }} \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/method.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/embedded.method.txt similarity index 91% rename from sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/method.txt rename to sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/embedded.method.txt index 334c3e81..2f03add6 100644 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/method.txt +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/embedded.method.txt @@ -1,5 +1,5 @@ {methods} -int {method_name} (float atts[]) {{ +int {method_name} (float features[]) {{ int n_classes = {n_classes}; int classes[n_classes]; int i; diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/embedded.method_calls.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/embedded.method_calls.txt new file mode 100644 index 00000000..084f3390 --- /dev/null +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/embedded.method_calls.txt @@ -0,0 +1 @@ +classes[{method_name}(features)]++; \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/single_method.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/embedded.single_method.txt similarity index 85% rename from sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/single_method.txt rename to sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/embedded.single_method.txt index 77c161e4..c6bc3b0a 100644 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/single_method.txt +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/embedded.single_method.txt @@ -1,4 +1,4 @@ -int {method_name}_{method_id}(float atts[]) {{ +int {method_name}_{method_id}(float features[]) {{ int classes[{n_classes}]; {tree_branches} int class_idx = 0; diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/method_calls.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/method_calls.txt deleted file mode 100644 index 224e1697..00000000 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/c/method_calls.txt +++ /dev/null @@ -1 +0,0 @@ -classes[{method_name}(atts)]++; \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/class.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/embedded.class.txt similarity index 54% rename from sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/class.txt rename to sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/embedded.class.txt index 514b51d1..408e6db5 100644 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/class.txt +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/embedded.class.txt @@ -3,11 +3,11 @@ class {class_name} {{ public static void main(String[] args) {{ if (args.length == {n_features}) {{ - float[] atts = new float[args.length]; + float[] features = new float[args.length]; for (int i = 0, l = args.length; i < l; i++) {{ - atts[i] = Float.parseFloat(args[i]); + features[i] = Float.parseFloat(args[i]); }} - System.out.println({class_name}.{method_name}(atts)); + System.out.println({class_name}.{method_name}(features)); }} }} }} \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/method.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/embedded.method.txt similarity index 86% rename from sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/method.txt rename to sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/embedded.method.txt index c2ef8906..11094e59 100644 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/method.txt +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/embedded.method.txt @@ -1,5 +1,5 @@ {methods} -public static int {method_name}(float[] atts) {{ +public static int {method_name}(float[] features) {{ int n_classes = {n_classes}; int[] classes = new int[n_classes]; {method_calls} diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/embedded.method_calls.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/embedded.method_calls.txt new file mode 100644 index 00000000..5b6841db --- /dev/null +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/embedded.method_calls.txt @@ -0,0 +1 @@ +classes[{class_name}.{method_name}(features)]++; \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/single_method.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/embedded.single_method.txt similarity index 82% rename from sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/single_method.txt rename to sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/embedded.single_method.txt index e9d74742..47b2ff5e 100644 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/single_method.txt +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/embedded.single_method.txt @@ -1,4 +1,4 @@ -public static int {method_name}_{method_id}(float[] atts) {{ +public static int {method_name}_{method_id}(float[] features) {{ int[] classes = new int[{n_classes}]; {tree_branches} int class_idx = 0; @@ -11,4 +11,3 @@ public static int {method_name}_{method_id}(float[] atts) {{ }} return class_idx; }} - diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/method_calls.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/method_calls.txt deleted file mode 100644 index f05f8934..00000000 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/java/method_calls.txt +++ /dev/null @@ -1 +0,0 @@ -classes[{class_name}.{method_name}(atts)]++; \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/class.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/class.txt index 49582d4a..e17a6574 100644 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/class.txt +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/class.txt @@ -1,13 +1,66 @@ -var {class_name} = function() {{ +var {class_name} = function(data) {{ - {method} + var Tree = function(lChilds, rChilds, thresholds, indices, classes) {{ + this.lChilds = lChilds; + this.rChilds = rChilds; + this.thresholds = thresholds; + this.indices = indices; + this.classes = classes; + + this.predict = function(features, node) {{ + if (this.thresholds[node] != -2) {{ + if (features[this.indices[node]] <= this.thresholds[node]) {{ + return this.predict(features, this.lChilds[node]); + }} else {{ + return this.predict(features, this.rChilds[node]); + }} + }} + return findMax(this.classes[node]); + }}; + }}; + + var findMax = function(nums) {{ + var index = 0; + for (var i = 0; i < nums.length; i++) {{ + index = nums[i] > nums[index] ? i : index; + }} + return index; + }}; + + this.trees = Array(); + for (var i = 0; i < data.length; i++) {{ + var tree = new Tree(data[i]['left_childs'], data[i]['right_childs'], + data[i]['thresholds'], data[i]['indices'], + data[i]['classes']); + this.trees.push(tree); + }} + + this.{method_name} = function(features) {{ + var nClasses = this.trees[0].classes.length; + var classes = new Array(nClasses).fill(0); + for (var i = 0; i < trees.length; i++) {{ + classes[trees[i].predict(features)]++; + }} + return findMax(classes); + }}; }}; if (typeof process !== 'undefined' && typeof process.argv !== 'undefined') {{ - if (process.argv.length - 2 == {n_features}) {{ - var argv = process.argv.slice(2); - var prediction = new {class_name}().{method_name}(argv); + if (process.argv.length - 2 === {n_features}) {{ + + // Features: + var features = process.argv.slice(2); + + // Parameters: + var data = [ + {model_data} + ]; + + // Prediction: + var clf = new {class_name}(data); + var prediction = clf.{method_name}(features); console.log(prediction); + }} }} \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/embedded.class.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/embedded.class.txt new file mode 100644 index 00000000..af43c8f3 --- /dev/null +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/embedded.class.txt @@ -0,0 +1,28 @@ +var {class_name} = function() {{ + + var findMax = function(nums) {{ + var index = 0; + for (var i = 0; i < nums.length; i++) {{ + index = nums[i] > nums[index] ? i : index; + }} + return index; + }}; + + var trees = new Array(); + + {method} + +}}; + +if (typeof process !== 'undefined' && typeof process.argv !== 'undefined') {{ + if (process.argv.length - 2 == {n_features}) {{ + + // Features: + var features = process.argv.slice(2); + + // Prediction: + var prediction = new {class_name}().{method_name}(features); + console.log(prediction); + + }} +}} \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/embedded.method.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/embedded.method.txt new file mode 100644 index 00000000..abf7ea08 --- /dev/null +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/embedded.method.txt @@ -0,0 +1,8 @@ +{methods} +this.{method_name} = function(features) {{ + var classes = new Array({n_classes}).fill(0); + for (var i = 0; i < trees.length; i++) {{ + classes[trees[i](features)]++; + }} + return findMax(classes); +}} \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/embedded.method_calls.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/embedded.method_calls.txt new file mode 100644 index 00000000..084f3390 --- /dev/null +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/embedded.method_calls.txt @@ -0,0 +1 @@ +classes[{method_name}(features)]++; \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/embedded.single_method.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/embedded.single_method.txt new file mode 100644 index 00000000..4239ab90 --- /dev/null +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/embedded.single_method.txt @@ -0,0 +1,6 @@ +trees.push(function(features) {{ + var classes = new Array({n_classes}); + {tree_branches} + + return findMax(classes); +}}); diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/method.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/method.txt deleted file mode 100644 index 37b42c49..00000000 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/method.txt +++ /dev/null @@ -1,20 +0,0 @@ -{methods} - -this.{method_name} = function(atts) {{ - var i = 0, n_classes = {n_classes}; - var classes = new Array(n_classes); - for (i = 0; i < n_classes; i++) {{ - classes[i] = 0; - }} - - {method_calls} - - var class_idx = 0, class_val = classes[0]; - for (i = 1; i < n_classes; i++) {{ - if (classes[i] > class_val) {{ - class_idx = i; - class_val = classes[i]; - }} - }} - return class_idx; -}} \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/method_calls.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/method_calls.txt deleted file mode 100644 index 224e1697..00000000 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/method_calls.txt +++ /dev/null @@ -1 +0,0 @@ -classes[{method_name}(atts)]++; \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/single_method.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/single_method.txt deleted file mode 100644 index 31a0f2ff..00000000 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/js/single_method.txt +++ /dev/null @@ -1,12 +0,0 @@ -var {method_name}_{method_id} = function(atts) {{ - var classes = new Array({n_classes}); - {tree_branches} - var i = 0, class_idx = 0, class_val = classes[0]; - for (i = 1; i < {n_classes}; i++) {{ - if (classes[i] > class_val) {{ - class_idx = i; - class_val = classes[i]; - }} - }} - return class_idx; -}}; \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/class.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/embedded.class.txt similarity index 100% rename from sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/class.txt rename to sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/embedded.class.txt diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/method.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/embedded.method.txt similarity index 87% rename from sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/method.txt rename to sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/embedded.method.txt index 3ff2ae3d..1aa142fa 100644 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/method.txt +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/embedded.method.txt @@ -1,5 +1,5 @@ {methods} -public static function {method_name}($atts) {{ +public static function {method_name}($features) {{ $n_classes = {n_classes}; $classes = array_fill(0, $n_classes, 0); {method_calls} diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/embedded.method_calls.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/embedded.method_calls.txt new file mode 100644 index 00000000..d7680388 --- /dev/null +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/embedded.method_calls.txt @@ -0,0 +1 @@ +$classes[{class_name}::{method_name}($features)]++; \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/single_method.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/embedded.single_method.txt similarity index 84% rename from sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/single_method.txt rename to sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/embedded.single_method.txt index 2141abd6..b8c9faec 100644 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/single_method.txt +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/embedded.single_method.txt @@ -1,4 +1,4 @@ -public static function {method_name}_{method_id}($atts) {{ +public static function {method_name}_{method_id}($features) {{ $n_classes = {n_classes}; $classes = array_fill(0, $n_classes, 0); {tree_branches} diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/method_calls.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/method_calls.txt deleted file mode 100644 index c74f916c..00000000 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/php/method_calls.txt +++ /dev/null @@ -1 +0,0 @@ -$classes[{class_name}::{method_name}($atts)]++; \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/class.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/class.txt deleted file mode 100644 index 770598f8..00000000 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/class.txt +++ /dev/null @@ -1,10 +0,0 @@ -class {class_name} - - {method} - -end - -if ARGV.length == {n_features} - atts = ARGV.collect {{ |i| i.to_f }} - puts {class_name}.{method_name}(atts) -end \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/embedded.class.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/embedded.class.txt new file mode 100644 index 00000000..04aa36ee --- /dev/null +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/embedded.class.txt @@ -0,0 +1,10 @@ +class {class_name} + + {method} + +end + +if ARGV.length == {n_features} + features = ARGV.collect {{ |i| i.to_f }} + puts {class_name}.{method_name}(features) +end \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/method.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/embedded.method.txt similarity index 83% rename from sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/method.txt rename to sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/embedded.method.txt index d8c68e05..a7370ed7 100644 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/method.txt +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/embedded.method.txt @@ -1,5 +1,5 @@ {methods} -def self.{method_name} (atts) +def self.{method_name} (features) classes = Array.new({n_classes}, 0) {method_calls} pos_max = classes.each_with_index.select {{|e, i| e==classes.max}}.map &:last diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/embedded.method_calls.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/embedded.method_calls.txt new file mode 100644 index 00000000..b8bf46ab --- /dev/null +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/embedded.method_calls.txt @@ -0,0 +1 @@ +idx = {class_name}.{method_name}(features); classes[idx] = classes[idx] + 1 \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/single_method.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/embedded.single_method.txt similarity index 78% rename from sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/single_method.txt rename to sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/embedded.single_method.txt index 713dee79..6b63ac9c 100644 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/single_method.txt +++ b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/embedded.single_method.txt @@ -1,4 +1,4 @@ -def self.{method_name}_{method_id} (atts) +def self.{method_name}_{method_id} (features) classes = Array.new({n_classes}, 0) {tree_branches} pos_max = classes.each_with_index.select {{|e, i| e==classes.max}}.map &:last diff --git a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/method_calls.txt b/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/method_calls.txt deleted file mode 100644 index d1c88cb1..00000000 --- a/sklearn_porter/estimator/classifier/ExtraTreesClassifier/templates/ruby/method_calls.txt +++ /dev/null @@ -1 +0,0 @@ -idx = {class_name}.{method_name}(atts); classes[idx] = classes[idx] + 1 \ No newline at end of file