From cd8f52e33cad7c1e909b858333a9132e4b03a4a7 Mon Sep 17 00:00:00 2001 From: Darius Morawiec Date: Sun, 22 Oct 2017 22:56:28 +0200 Subject: [PATCH] Refactor SVC implementation and templates --- .../estimator/classifier/SVC/js/basics.ipynb | 223 ++++++++++++------ .../estimator/classifier/SVC/js/basics.py | 207 +++++++++++----- .../classifier/SVC/templates/java/method.txt | 2 +- .../SVC/templates/js/binary.classes.txt | 5 - .../SVC/templates/js/binary.decisions.txt | 9 - .../SVC/templates/js/binary.kernel.linear.txt | 11 - .../SVC/templates/js/binary.kernel.poly.txt | 11 - .../SVC/templates/js/binary.kernel.rbf.txt | 11 - .../templates/js/binary.kernel.sigmoid.txt | 14 -- .../classifier/SVC/templates/js/class.txt | 35 ++- .../classifier/SVC/templates/js/ends.txt | 4 - .../classifier/SVC/templates/js/method.txt | 130 +++++++++- .../SVC/templates/js/multi.classes.txt | 21 -- .../SVC/templates/js/multi.decisions.txt | 14 -- .../SVC/templates/js/multi.kernel.linear.txt | 11 - .../SVC/templates/js/multi.kernel.poly.txt | 11 - .../SVC/templates/js/multi.kernel.rbf.txt | 11 - .../SVC/templates/js/multi.kernel.sigmoid.txt | 14 -- .../classifier/SVC/templates/js/starts.txt | 12 - 19 files changed, 450 insertions(+), 306 deletions(-) delete mode 100644 sklearn_porter/estimator/classifier/SVC/templates/js/binary.classes.txt delete mode 100644 sklearn_porter/estimator/classifier/SVC/templates/js/binary.decisions.txt delete mode 100644 sklearn_porter/estimator/classifier/SVC/templates/js/binary.kernel.linear.txt delete mode 100644 sklearn_porter/estimator/classifier/SVC/templates/js/binary.kernel.poly.txt delete mode 100644 sklearn_porter/estimator/classifier/SVC/templates/js/binary.kernel.rbf.txt delete mode 100644 sklearn_porter/estimator/classifier/SVC/templates/js/binary.kernel.sigmoid.txt delete mode 100644 sklearn_porter/estimator/classifier/SVC/templates/js/ends.txt delete mode 100644 sklearn_porter/estimator/classifier/SVC/templates/js/multi.classes.txt delete mode 100644 sklearn_porter/estimator/classifier/SVC/templates/js/multi.decisions.txt delete mode 100644 sklearn_porter/estimator/classifier/SVC/templates/js/multi.kernel.linear.txt delete mode 100644 sklearn_porter/estimator/classifier/SVC/templates/js/multi.kernel.poly.txt delete mode 100644 sklearn_porter/estimator/classifier/SVC/templates/js/multi.kernel.rbf.txt delete mode 100644 sklearn_porter/estimator/classifier/SVC/templates/js/multi.kernel.sigmoid.txt delete mode 100644 sklearn_porter/estimator/classifier/SVC/templates/js/starts.txt diff --git a/examples/estimator/classifier/SVC/js/basics.ipynb b/examples/estimator/classifier/SVC/js/basics.ipynb index 446b07da..b96d6156 100644 --- a/examples/estimator/classifier/SVC/js/basics.ipynb +++ b/examples/estimator/classifier/SVC/js/basics.ipynb @@ -22,14 +22,14 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "(150, 4) (150,)\n" + "((150, 4), (150,))\n" ] } ], @@ -37,9 +37,10 @@ "from sklearn.datasets import load_iris\n", "\n", "iris_data = load_iris()\n", - "X, y = iris_data.data, iris_data.target\n", + "X = iris_data.data\n", + "y = iris_data.target\n", "\n", - "print X.shape, y.shape" + "print(X.shape, y.shape)" ] }, { @@ -51,19 +52,19 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,\n", - " decision_function_shape=None, degree=3, gamma=0.001, kernel='rbf',\n", + " decision_function_shape='ovr', degree=3, gamma=0.001, kernel='rbf',\n", " max_iter=-1, probability=False, random_state=0, shrinking=True,\n", " tol=0.001, verbose=False)" ] }, - "execution_count": 3, + "execution_count": 2, "metadata": {}, "output_type": "execute_result" } @@ -84,7 +85,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 3, "metadata": { "scrolled": false }, @@ -93,91 +94,168 @@ "name": "stdout", "output_type": "stream", "text": [ - "// Array.prototype.fill polyfill:\n", - "[].fill||(Array.prototype.fill=function(a){for(var b=Object(this),c=parseInt(b.length,10),d=arguments[1],e=parseInt(d,10)||0,f=0>e?Math.max(c+e,0):Math.min(e,c),g=arguments[2],h=void 0===g?c:parseInt(g)||0,i=0>h?Math.max(c+h,0):Math.min(h,c);i>f;f++)b[f]=a;return b});\n", + "var SVC = function(nClasses, vectors, coefficients, intercepts, weights, kernel, gamma, coef0, degree) {\n", "\n", - "var Brain = function() {\n", + " this.nClasses = nClasses;\n", + " this.classes = new Array(nClasses);\n", + " for (var i = 0; i < nClasses; i++) {\n", + " this.classes[i] = i;\n", + " }\n", + " this.vectors = vectors;\n", + " this.coefficients = coefficients;\n", + " this.intercepts = intercepts;\n", + " this.weights = weights;\n", + " this.kernel = kernel.toUpperCase();\n", + " this.gamma = gamma;\n", + " this.coef0 = coef0;\n", + " this.degree = degree;\n", "\n", - " this.predict = function(atts) {\n", - " var i, j, k, d, l;\n", - " \n", - " var n_svs = [50, 50, 50];\n", - " var svs = [[5.0999999999999996, 3.5, 1.3999999999999999, 0.20000000000000001], [4.9000000000000004, 3.0, 1.3999999999999999, 0.20000000000000001], [4.7000000000000002, 3.2000000000000002, 1.3, 0.20000000000000001], [4.5999999999999996, 3.1000000000000001, 1.5, 0.20000000000000001], [5.0, 3.6000000000000001, 1.3999999999999999, 0.20000000000000001], [5.4000000000000004, 3.8999999999999999, 1.7, 0.40000000000000002], [4.5999999999999996, 3.3999999999999999, 1.3999999999999999, 0.29999999999999999], [5.0, 3.3999999999999999, 1.5, 0.20000000000000001], [4.4000000000000004, 2.8999999999999999, 1.3999999999999999, 0.20000000000000001], [4.9000000000000004, 3.1000000000000001, 1.5, 0.10000000000000001], [5.4000000000000004, 3.7000000000000002, 1.5, 0.20000000000000001], [4.7999999999999998, 3.3999999999999999, 1.6000000000000001, 0.20000000000000001], [4.7999999999999998, 3.0, 1.3999999999999999, 0.10000000000000001], [4.2999999999999998, 3.0, 1.1000000000000001, 0.10000000000000001], [5.7999999999999998, 4.0, 1.2, 0.20000000000000001], [5.7000000000000002, 4.4000000000000004, 1.5, 0.40000000000000002], [5.4000000000000004, 3.8999999999999999, 1.3, 0.40000000000000002], [5.0999999999999996, 3.5, 1.3999999999999999, 0.29999999999999999], [5.7000000000000002, 3.7999999999999998, 1.7, 0.29999999999999999], [5.0999999999999996, 3.7999999999999998, 1.5, 0.29999999999999999], [5.4000000000000004, 3.3999999999999999, 1.7, 0.20000000000000001], [5.0999999999999996, 3.7000000000000002, 1.5, 0.40000000000000002], [4.5999999999999996, 3.6000000000000001, 1.0, 0.20000000000000001], [5.0999999999999996, 3.2999999999999998, 1.7, 0.5], [4.7999999999999998, 3.3999999999999999, 1.8999999999999999, 0.20000000000000001], [5.0, 3.0, 1.6000000000000001, 0.20000000000000001], [5.0, 3.3999999999999999, 1.6000000000000001, 0.40000000000000002], [5.2000000000000002, 3.5, 1.5, 0.20000000000000001], [5.2000000000000002, 3.3999999999999999, 1.3999999999999999, 0.20000000000000001], [4.7000000000000002, 3.2000000000000002, 1.6000000000000001, 0.20000000000000001], [4.7999999999999998, 3.1000000000000001, 1.6000000000000001, 0.20000000000000001], [5.4000000000000004, 3.3999999999999999, 1.5, 0.40000000000000002], [5.2000000000000002, 4.0999999999999996, 1.5, 0.10000000000000001], [5.5, 4.2000000000000002, 1.3999999999999999, 0.20000000000000001], [4.9000000000000004, 3.1000000000000001, 1.5, 0.10000000000000001], [5.0, 3.2000000000000002, 1.2, 0.20000000000000001], [5.5, 3.5, 1.3, 0.20000000000000001], [4.9000000000000004, 3.1000000000000001, 1.5, 0.10000000000000001], [4.4000000000000004, 3.0, 1.3, 0.20000000000000001], [5.0999999999999996, 3.3999999999999999, 1.5, 0.20000000000000001], [5.0, 3.5, 1.3, 0.29999999999999999], [4.5, 2.2999999999999998, 1.3, 0.29999999999999999], [4.4000000000000004, 3.2000000000000002, 1.3, 0.20000000000000001], [5.0, 3.5, 1.6000000000000001, 0.59999999999999998], [5.0999999999999996, 3.7999999999999998, 1.8999999999999999, 0.40000000000000002], [4.7999999999999998, 3.0, 1.3999999999999999, 0.29999999999999999], [5.0999999999999996, 3.7999999999999998, 1.6000000000000001, 0.20000000000000001], [4.5999999999999996, 3.2000000000000002, 1.3999999999999999, 0.20000000000000001], [5.2999999999999998, 3.7000000000000002, 1.5, 0.20000000000000001], [5.0, 3.2999999999999998, 1.3999999999999999, 0.20000000000000001], [7.0, 3.2000000000000002, 4.7000000000000002, 1.3999999999999999], [6.4000000000000004, 3.2000000000000002, 4.5, 1.5], [6.9000000000000004, 3.1000000000000001, 4.9000000000000004, 1.5], [5.5, 2.2999999999999998, 4.0, 1.3], [6.5, 2.7999999999999998, 4.5999999999999996, 1.5], [5.7000000000000002, 2.7999999999999998, 4.5, 1.3], [6.2999999999999998, 3.2999999999999998, 4.7000000000000002, 1.6000000000000001], [4.9000000000000004, 2.3999999999999999, 3.2999999999999998, 1.0], [6.5999999999999996, 2.8999999999999999, 4.5999999999999996, 1.3], [5.2000000000000002, 2.7000000000000002, 3.8999999999999999, 1.3999999999999999], [5.0, 2.0, 3.5, 1.0], [5.9000000000000004, 3.0, 4.2000000000000002, 1.5], [6.0, 2.2000000000000002, 4.0, 1.0], [6.0999999999999996, 2.8999999999999999, 4.7000000000000002, 1.3999999999999999], [5.5999999999999996, 2.8999999999999999, 3.6000000000000001, 1.3], [6.7000000000000002, 3.1000000000000001, 4.4000000000000004, 1.3999999999999999], [5.5999999999999996, 3.0, 4.5, 1.5], [5.7999999999999998, 2.7000000000000002, 4.0999999999999996, 1.0], [6.2000000000000002, 2.2000000000000002, 4.5, 1.5], [5.5999999999999996, 2.5, 3.8999999999999999, 1.1000000000000001], [5.9000000000000004, 3.2000000000000002, 4.7999999999999998, 1.8], [6.0999999999999996, 2.7999999999999998, 4.0, 1.3], [6.2999999999999998, 2.5, 4.9000000000000004, 1.5], [6.0999999999999996, 2.7999999999999998, 4.7000000000000002, 1.2], [6.4000000000000004, 2.8999999999999999, 4.2999999999999998, 1.3], [6.5999999999999996, 3.0, 4.4000000000000004, 1.3999999999999999], [6.7999999999999998, 2.7999999999999998, 4.7999999999999998, 1.3999999999999999], [6.7000000000000002, 3.0, 5.0, 1.7], [6.0, 2.8999999999999999, 4.5, 1.5], [5.7000000000000002, 2.6000000000000001, 3.5, 1.0], [5.5, 2.3999999999999999, 3.7999999999999998, 1.1000000000000001], [5.5, 2.3999999999999999, 3.7000000000000002, 1.0], [5.7999999999999998, 2.7000000000000002, 3.8999999999999999, 1.2], [6.0, 2.7000000000000002, 5.0999999999999996, 1.6000000000000001], [5.4000000000000004, 3.0, 4.5, 1.5], [6.0, 3.3999999999999999, 4.5, 1.6000000000000001], [6.7000000000000002, 3.1000000000000001, 4.7000000000000002, 1.5], [6.2999999999999998, 2.2999999999999998, 4.4000000000000004, 1.3], [5.5999999999999996, 3.0, 4.0999999999999996, 1.3], [5.5, 2.5, 4.0, 1.3], [5.5, 2.6000000000000001, 4.4000000000000004, 1.2], [6.0999999999999996, 3.0, 4.5999999999999996, 1.3999999999999999], [5.7999999999999998, 2.6000000000000001, 4.0, 1.2], [5.0, 2.2999999999999998, 3.2999999999999998, 1.0], [5.5999999999999996, 2.7000000000000002, 4.2000000000000002, 1.3], [5.7000000000000002, 3.0, 4.2000000000000002, 1.2], [5.7000000000000002, 2.8999999999999999, 4.2000000000000002, 1.3], [6.2000000000000002, 2.8999999999999999, 4.2999999999999998, 1.3], [5.0999999999999996, 2.5, 3.0, 1.1000000000000001], [5.7000000000000002, 2.7999999999999998, 4.0999999999999996, 1.3], [6.2999999999999998, 3.2999999999999998, 6.0, 2.5], [5.7999999999999998, 2.7000000000000002, 5.0999999999999996, 1.8999999999999999], [7.0999999999999996, 3.0, 5.9000000000000004, 2.1000000000000001], [6.2999999999999998, 2.8999999999999999, 5.5999999999999996, 1.8], [6.5, 3.0, 5.7999999999999998, 2.2000000000000002], [7.5999999999999996, 3.0, 6.5999999999999996, 2.1000000000000001], [4.9000000000000004, 2.5, 4.5, 1.7], [7.2999999999999998, 2.8999999999999999, 6.2999999999999998, 1.8], [6.7000000000000002, 2.5, 5.7999999999999998, 1.8], [7.2000000000000002, 3.6000000000000001, 6.0999999999999996, 2.5], [6.5, 3.2000000000000002, 5.0999999999999996, 2.0], [6.4000000000000004, 2.7000000000000002, 5.2999999999999998, 1.8999999999999999], [6.7999999999999998, 3.0, 5.5, 2.1000000000000001], [5.7000000000000002, 2.5, 5.0, 2.0], [5.7999999999999998, 2.7999999999999998, 5.0999999999999996, 2.3999999999999999], [6.4000000000000004, 3.2000000000000002, 5.2999999999999998, 2.2999999999999998], [6.5, 3.0, 5.5, 1.8], [7.7000000000000002, 3.7999999999999998, 6.7000000000000002, 2.2000000000000002], [7.7000000000000002, 2.6000000000000001, 6.9000000000000004, 2.2999999999999998], [6.0, 2.2000000000000002, 5.0, 1.5], [6.9000000000000004, 3.2000000000000002, 5.7000000000000002, 2.2999999999999998], [5.5999999999999996, 2.7999999999999998, 4.9000000000000004, 2.0], [7.7000000000000002, 2.7999999999999998, 6.7000000000000002, 2.0], [6.2999999999999998, 2.7000000000000002, 4.9000000000000004, 1.8], [6.7000000000000002, 3.2999999999999998, 5.7000000000000002, 2.1000000000000001], [7.2000000000000002, 3.2000000000000002, 6.0, 1.8], [6.2000000000000002, 2.7999999999999998, 4.7999999999999998, 1.8], [6.0999999999999996, 3.0, 4.9000000000000004, 1.8], [6.4000000000000004, 2.7999999999999998, 5.5999999999999996, 2.1000000000000001], [7.2000000000000002, 3.0, 5.7999999999999998, 1.6000000000000001], [7.4000000000000004, 2.7999999999999998, 6.0999999999999996, 1.8999999999999999], [7.9000000000000004, 3.7999999999999998, 6.4000000000000004, 2.0], [6.4000000000000004, 2.7999999999999998, 5.5999999999999996, 2.2000000000000002], [6.2999999999999998, 2.7999999999999998, 5.0999999999999996, 1.5], [6.0999999999999996, 2.6000000000000001, 5.5999999999999996, 1.3999999999999999], [7.7000000000000002, 3.0, 6.0999999999999996, 2.2999999999999998], [6.2999999999999998, 3.3999999999999999, 5.5999999999999996, 2.3999999999999999], [6.4000000000000004, 3.1000000000000001, 5.5, 1.8], [6.0, 3.0, 4.7999999999999998, 1.8], [6.9000000000000004, 3.1000000000000001, 5.4000000000000004, 2.1000000000000001], [6.7000000000000002, 3.1000000000000001, 5.5999999999999996, 2.3999999999999999], [6.9000000000000004, 3.1000000000000001, 5.0999999999999996, 2.2999999999999998], [5.7999999999999998, 2.7000000000000002, 5.0999999999999996, 1.8999999999999999], [6.7999999999999998, 3.2000000000000002, 5.9000000000000004, 2.2999999999999998], [6.7000000000000002, 3.2999999999999998, 5.7000000000000002, 2.5], [6.7000000000000002, 3.0, 5.2000000000000002, 2.2999999999999998], [6.2999999999999998, 2.5, 5.0, 1.8999999999999999], [6.5, 3.0, 5.2000000000000002, 2.0], [6.2000000000000002, 3.3999999999999999, 5.4000000000000004, 2.2999999999999998], [5.9000000000000004, 3.0, 5.0999999999999996, 1.8]];\n", - " var coeffs = [[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -0.0, -1.0, -0.0, -1.0, -0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -0.0, -0.0, -1.0, -1.0, -1.0, -0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -0.0, -0.0, -1.0, -1.0, -1.0, -0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], [1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0]];\n", - " var inters = [0.043376922607421875, 0.11445245146751404, -0.0031709671020507812];\n", - " var classes = [0, 1, 2];\n", - " \n", - " // exp(-y|x-x'|^2)\n", - " var kernels = new Array(150),\n", - " kernel;\n", - " for (i = 0; i < 150; i++) {\n", - " kernel = 0.;\n", - " for (j = 0; j < 4; j++) {\n", - " kernel += Math.pow(svs[i][j] - atts[j], 2);\n", - " }\n", - " kernels[i] = Math.exp(-0.001 * kernel);\n", + " this.predict = function(features) {\n", + " \n", + " var kernels = new Array(vectors.length);\n", + " var kernel;\n", + " switch (this.kernel) {\n", + " case 'LINEAR':\n", + " // \n", + " for (var i = 0; i < this.vectors.length; i++) {\n", + " kernel = 0.;\n", + " for (var j = 0; j < this.vectors[i].length; j++) {\n", + " kernel += this.vectors[i][j] * features[j];\n", + " }\n", + " kernels[i] = kernel;\n", + " }\n", + " break;\n", + " case 'POLY':\n", + " // (y+r)^d\n", + " for (var i = 0; i < this.vectors.length; i++) {\n", + " kernel = 0.;\n", + " for (var j = 0; j < this.vectors[i].length; j++) {\n", + " kernel += this.vectors[i][j] * features[j];\n", + " }\n", + " kernels[i] = Math.pow((this.gamma * kernel) + this.coef0, this.degree);\n", + " }\n", + " break;\n", + " case 'RBF':\n", + " // exp(-y|x-x'|^2)\n", + " for (var i = 0; i < this.vectors.length; i++) {\n", + " kernel = 0.;\n", + " for (var j = 0; j < this.vectors[i].length; j++) {\n", + " kernel += Math.pow(this.vectors[i][j] - features[j], 2);\n", + " }\n", + " kernels[i] = Math.exp(-this.gamma * kernel);\n", + " }\n", + " break;\n", + " case 'SIGMOID':\n", + " // tanh(y+r)\n", + " for (var i = 0; i < this.vectors.length; i++) {\n", + " kernel = 0.;\n", + " for (var j = 0; j < this.vectors[i].length; j++) {\n", + " kernel += this.vectors[i][j] * features[j];\n", + " }\n", + " kernels[i] = Math.tanh((this.gamma * kernel) + this.coef0);\n", + " }\n", + " break;\n", " }\n", - " \n", - " var starts = new Array(3);\n", - " for (i = 0; i < 3; i++) {\n", + " \n", + " var starts = new Array(this.nClasses);\n", + " for (var i = 0; i < this.nClasses; i++) {\n", " if (i != 0) {\n", " var start = 0;\n", - " for (j = 0; j < i; j++) {\n", - " start += n_svs[j];\n", + " for (var j = 0; j < i; j++) {\n", + " start += this.weights[j];\n", " }\n", " starts[i] = start;\n", " } else {\n", " starts[0] = 0;\n", " }\n", " }\n", - " var ends = new Array(3);\n", - " for (i = 0; i < 3; i++) {\n", - " ends[i] = n_svs[i] + starts[i];\n", + " \n", + " var ends = new Array(this.nClasses);\n", + " for (var i = 0; i < this.nClasses; i++) {\n", + " ends[i] = this.weights[i] + starts[i];\n", " }\n", - " var decisions = new Array(3);\n", - " for (i = 0, d = 0, l = 3; i < l; i++) {\n", - " for (j = i + 1; j < l; j++) {\n", - " var tmp = 0.;\n", - " for (k = starts[j]; k < ends[j]; k++) {\n", - " tmp += kernels[k] * coeffs[i][k];\n", + " \n", + " if (this.nClasses == 2) {\n", + " \n", + " for (var i = 0; i < kernels.length; i++) {\n", + " kernels[i] = -kernels[i];\n", + " }\n", + " \n", + " var decision = 0.;\n", + " for (var k = starts[1]; k < ends[1]; k++) {\n", + " decision += kernels[k] * this.coefficients[0][k];\n", + " }\n", + " for (var k = starts[0]; k < ends[0]; k++) {\n", + " decision += kernels[k] * this.coefficients[0][k];\n", + " }\n", + " decision += this.intercepts[0];\n", + " \n", + " if (decision > 0) {\n", + " return 0;\n", + " }\n", + " return 1;\n", + " \n", + " } else {\n", + " \n", + " var decisions = new Array(this.nClasses);\n", + " for (var i = 0, d = 0, l = this.nClasses; i < l; i++) {\n", + " for (var j = i + 1; j < l; j++) {\n", + " var tmp = 0.;\n", + " for (var k = starts[j]; k < ends[j]; k++) {\n", + " tmp += this.coefficients[i][k] * kernels[k];\n", + " }\n", + " for (var k = starts[i]; k < ends[i]; k++) {\n", + " tmp += this.coefficients[j - 1][k] * kernels[k];\n", + " }\n", + " decisions[d] = tmp + this.intercepts[d];\n", + " d++;\n", " }\n", - " for (k = starts[i]; k < ends[i]; k++) {\n", - " tmp += kernels[k] * coeffs[j - 1][k];\n", + " }\n", + " \n", + " var votes = new Array(this.intercepts.length);\n", + " for (var i = 0, d = 0, l = this.nClasses; i < l; i++) {\n", + " for (var j = i + 1; j < l; j++) {\n", + " votes[d] = decisions[d] > 0 ? i : j;\n", + " d++;\n", " }\n", - " decisions[d] = tmp + inters[d];\n", - " d++;\n", " }\n", - " }\n", - " var votes = new Array(3);\n", - " for (i = 0, d = 0, l = 3; i < l; i++) {\n", - " for (j = i + 1; j < l; j++) {\n", - " votes[d] = decisions[d] > 0 ? i : j;\n", - " d++;\n", + " \n", + " var amounts = new Array(this.nClasses).fill(0);\n", + " for (var i = 0, l = votes.length; i < l; i++) {\n", + " amounts[votes[i]] += 1;\n", " }\n", - " }\n", - " \n", - " var amounts = new Array(3).fill(0);\n", - " for (i = 0, l = 3; i < l; i++) {\n", - " amounts[votes[i]] += 1;\n", - " }\n", - " \n", - " var class_val = -1, class_idx = -1;\n", - " for (i = 0, l = 3; i < l; i++) {\n", - " if (amounts[i] > class_val) {\n", - " class_val = amounts[i];\n", - " class_idx = i;\n", + " \n", + " var classVal = -1, classIdx = -1;\n", + " for (var i = 0, l = amounts.length; i < l; i++) {\n", + " if (amounts[i] > classVal) {\n", + " classVal = amounts[i];\n", + " classIdx= i;\n", + " }\n", " }\n", + " return this.classes[classIdx];\n", + " \n", " }\n", - " return classes[class_idx];\n", - " };\n", + " }\n", "\n", "};\n", "\n", "if (typeof process !== 'undefined' && typeof process.argv !== 'undefined') {\n", - " if (process.argv.length - 2 == 4) {\n", - " var argv = process.argv.slice(2);\n", - " var prediction = new Brain().predict(argv);\n", + " if (process.argv.length - 2 === 4) {\n", + "\n", + " // Features:\n", + " var features = process.argv.slice(2);\n", + "\n", + " // Parameters:\n", + " var vectors = [[5.0999999999999996, 3.5, 1.3999999999999999, 0.20000000000000001], [4.9000000000000004, 3.0, 1.3999999999999999, 0.20000000000000001], [4.7000000000000002, 3.2000000000000002, 1.3, 0.20000000000000001], [4.5999999999999996, 3.1000000000000001, 1.5, 0.20000000000000001], [5.0, 3.6000000000000001, 1.3999999999999999, 0.20000000000000001], [5.4000000000000004, 3.8999999999999999, 1.7, 0.40000000000000002], [4.5999999999999996, 3.3999999999999999, 1.3999999999999999, 0.29999999999999999], [5.0, 3.3999999999999999, 1.5, 0.20000000000000001], [4.4000000000000004, 2.8999999999999999, 1.3999999999999999, 0.20000000000000001], [4.9000000000000004, 3.1000000000000001, 1.5, 0.10000000000000001], [5.4000000000000004, 3.7000000000000002, 1.5, 0.20000000000000001], [4.7999999999999998, 3.3999999999999999, 1.6000000000000001, 0.20000000000000001], [4.7999999999999998, 3.0, 1.3999999999999999, 0.10000000000000001], [4.2999999999999998, 3.0, 1.1000000000000001, 0.10000000000000001], [5.7999999999999998, 4.0, 1.2, 0.20000000000000001], [5.7000000000000002, 4.4000000000000004, 1.5, 0.40000000000000002], [5.4000000000000004, 3.8999999999999999, 1.3, 0.40000000000000002], [5.0999999999999996, 3.5, 1.3999999999999999, 0.29999999999999999], [5.7000000000000002, 3.7999999999999998, 1.7, 0.29999999999999999], [5.0999999999999996, 3.7999999999999998, 1.5, 0.29999999999999999], [5.4000000000000004, 3.3999999999999999, 1.7, 0.20000000000000001], [5.0999999999999996, 3.7000000000000002, 1.5, 0.40000000000000002], [4.5999999999999996, 3.6000000000000001, 1.0, 0.20000000000000001], [5.0999999999999996, 3.2999999999999998, 1.7, 0.5], [4.7999999999999998, 3.3999999999999999, 1.8999999999999999, 0.20000000000000001], [5.0, 3.0, 1.6000000000000001, 0.20000000000000001], [5.0, 3.3999999999999999, 1.6000000000000001, 0.40000000000000002], [5.2000000000000002, 3.5, 1.5, 0.20000000000000001], [5.2000000000000002, 3.3999999999999999, 1.3999999999999999, 0.20000000000000001], [4.7000000000000002, 3.2000000000000002, 1.6000000000000001, 0.20000000000000001], [4.7999999999999998, 3.1000000000000001, 1.6000000000000001, 0.20000000000000001], [5.4000000000000004, 3.3999999999999999, 1.5, 0.40000000000000002], [5.2000000000000002, 4.0999999999999996, 1.5, 0.10000000000000001], [5.5, 4.2000000000000002, 1.3999999999999999, 0.20000000000000001], [4.9000000000000004, 3.1000000000000001, 1.5, 0.10000000000000001], [5.0, 3.2000000000000002, 1.2, 0.20000000000000001], [5.5, 3.5, 1.3, 0.20000000000000001], [4.9000000000000004, 3.1000000000000001, 1.5, 0.10000000000000001], [4.4000000000000004, 3.0, 1.3, 0.20000000000000001], [5.0999999999999996, 3.3999999999999999, 1.5, 0.20000000000000001], [5.0, 3.5, 1.3, 0.29999999999999999], [4.5, 2.2999999999999998, 1.3, 0.29999999999999999], [4.4000000000000004, 3.2000000000000002, 1.3, 0.20000000000000001], [5.0, 3.5, 1.6000000000000001, 0.59999999999999998], [5.0999999999999996, 3.7999999999999998, 1.8999999999999999, 0.40000000000000002], [4.7999999999999998, 3.0, 1.3999999999999999, 0.29999999999999999], [5.0999999999999996, 3.7999999999999998, 1.6000000000000001, 0.20000000000000001], [4.5999999999999996, 3.2000000000000002, 1.3999999999999999, 0.20000000000000001], [5.2999999999999998, 3.7000000000000002, 1.5, 0.20000000000000001], [5.0, 3.2999999999999998, 1.3999999999999999, 0.20000000000000001], [7.0, 3.2000000000000002, 4.7000000000000002, 1.3999999999999999], [6.4000000000000004, 3.2000000000000002, 4.5, 1.5], [6.9000000000000004, 3.1000000000000001, 4.9000000000000004, 1.5], [5.5, 2.2999999999999998, 4.0, 1.3], [6.5, 2.7999999999999998, 4.5999999999999996, 1.5], [5.7000000000000002, 2.7999999999999998, 4.5, 1.3], [6.2999999999999998, 3.2999999999999998, 4.7000000000000002, 1.6000000000000001], [4.9000000000000004, 2.3999999999999999, 3.2999999999999998, 1.0], [6.5999999999999996, 2.8999999999999999, 4.5999999999999996, 1.3], [5.2000000000000002, 2.7000000000000002, 3.8999999999999999, 1.3999999999999999], [5.0, 2.0, 3.5, 1.0], [5.9000000000000004, 3.0, 4.2000000000000002, 1.5], [6.0, 2.2000000000000002, 4.0, 1.0], [6.0999999999999996, 2.8999999999999999, 4.7000000000000002, 1.3999999999999999], [5.5999999999999996, 2.8999999999999999, 3.6000000000000001, 1.3], [6.7000000000000002, 3.1000000000000001, 4.4000000000000004, 1.3999999999999999], [5.5999999999999996, 3.0, 4.5, 1.5], [5.7999999999999998, 2.7000000000000002, 4.0999999999999996, 1.0], [6.2000000000000002, 2.2000000000000002, 4.5, 1.5], [5.5999999999999996, 2.5, 3.8999999999999999, 1.1000000000000001], [5.9000000000000004, 3.2000000000000002, 4.7999999999999998, 1.8], [6.0999999999999996, 2.7999999999999998, 4.0, 1.3], [6.2999999999999998, 2.5, 4.9000000000000004, 1.5], [6.0999999999999996, 2.7999999999999998, 4.7000000000000002, 1.2], [6.4000000000000004, 2.8999999999999999, 4.2999999999999998, 1.3], [6.5999999999999996, 3.0, 4.4000000000000004, 1.3999999999999999], [6.7999999999999998, 2.7999999999999998, 4.7999999999999998, 1.3999999999999999], [6.7000000000000002, 3.0, 5.0, 1.7], [6.0, 2.8999999999999999, 4.5, 1.5], [5.7000000000000002, 2.6000000000000001, 3.5, 1.0], [5.5, 2.3999999999999999, 3.7999999999999998, 1.1000000000000001], [5.5, 2.3999999999999999, 3.7000000000000002, 1.0], [5.7999999999999998, 2.7000000000000002, 3.8999999999999999, 1.2], [6.0, 2.7000000000000002, 5.0999999999999996, 1.6000000000000001], [5.4000000000000004, 3.0, 4.5, 1.5], [6.0, 3.3999999999999999, 4.5, 1.6000000000000001], [6.7000000000000002, 3.1000000000000001, 4.7000000000000002, 1.5], [6.2999999999999998, 2.2999999999999998, 4.4000000000000004, 1.3], [5.5999999999999996, 3.0, 4.0999999999999996, 1.3], [5.5, 2.5, 4.0, 1.3], [5.5, 2.6000000000000001, 4.4000000000000004, 1.2], [6.0999999999999996, 3.0, 4.5999999999999996, 1.3999999999999999], [5.7999999999999998, 2.6000000000000001, 4.0, 1.2], [5.0, 2.2999999999999998, 3.2999999999999998, 1.0], [5.5999999999999996, 2.7000000000000002, 4.2000000000000002, 1.3], [5.7000000000000002, 3.0, 4.2000000000000002, 1.2], [5.7000000000000002, 2.8999999999999999, 4.2000000000000002, 1.3], [6.2000000000000002, 2.8999999999999999, 4.2999999999999998, 1.3], [5.0999999999999996, 2.5, 3.0, 1.1000000000000001], [5.7000000000000002, 2.7999999999999998, 4.0999999999999996, 1.3], [6.2999999999999998, 3.2999999999999998, 6.0, 2.5], [5.7999999999999998, 2.7000000000000002, 5.0999999999999996, 1.8999999999999999], [7.0999999999999996, 3.0, 5.9000000000000004, 2.1000000000000001], [6.2999999999999998, 2.8999999999999999, 5.5999999999999996, 1.8], [6.5, 3.0, 5.7999999999999998, 2.2000000000000002], [7.5999999999999996, 3.0, 6.5999999999999996, 2.1000000000000001], [4.9000000000000004, 2.5, 4.5, 1.7], [7.2999999999999998, 2.8999999999999999, 6.2999999999999998, 1.8], [6.7000000000000002, 2.5, 5.7999999999999998, 1.8], [7.2000000000000002, 3.6000000000000001, 6.0999999999999996, 2.5], [6.5, 3.2000000000000002, 5.0999999999999996, 2.0], [6.4000000000000004, 2.7000000000000002, 5.2999999999999998, 1.8999999999999999], [6.7999999999999998, 3.0, 5.5, 2.1000000000000001], [5.7000000000000002, 2.5, 5.0, 2.0], [5.7999999999999998, 2.7999999999999998, 5.0999999999999996, 2.3999999999999999], [6.4000000000000004, 3.2000000000000002, 5.2999999999999998, 2.2999999999999998], [6.5, 3.0, 5.5, 1.8], [7.7000000000000002, 3.7999999999999998, 6.7000000000000002, 2.2000000000000002], [7.7000000000000002, 2.6000000000000001, 6.9000000000000004, 2.2999999999999998], [6.0, 2.2000000000000002, 5.0, 1.5], [6.9000000000000004, 3.2000000000000002, 5.7000000000000002, 2.2999999999999998], [5.5999999999999996, 2.7999999999999998, 4.9000000000000004, 2.0], [7.7000000000000002, 2.7999999999999998, 6.7000000000000002, 2.0], [6.2999999999999998, 2.7000000000000002, 4.9000000000000004, 1.8], [6.7000000000000002, 3.2999999999999998, 5.7000000000000002, 2.1000000000000001], [7.2000000000000002, 3.2000000000000002, 6.0, 1.8], [6.2000000000000002, 2.7999999999999998, 4.7999999999999998, 1.8], [6.0999999999999996, 3.0, 4.9000000000000004, 1.8], [6.4000000000000004, 2.7999999999999998, 5.5999999999999996, 2.1000000000000001], [7.2000000000000002, 3.0, 5.7999999999999998, 1.6000000000000001], [7.4000000000000004, 2.7999999999999998, 6.0999999999999996, 1.8999999999999999], [7.9000000000000004, 3.7999999999999998, 6.4000000000000004, 2.0], [6.4000000000000004, 2.7999999999999998, 5.5999999999999996, 2.2000000000000002], [6.2999999999999998, 2.7999999999999998, 5.0999999999999996, 1.5], [6.0999999999999996, 2.6000000000000001, 5.5999999999999996, 1.3999999999999999], [7.7000000000000002, 3.0, 6.0999999999999996, 2.2999999999999998], [6.2999999999999998, 3.3999999999999999, 5.5999999999999996, 2.3999999999999999], [6.4000000000000004, 3.1000000000000001, 5.5, 1.8], [6.0, 3.0, 4.7999999999999998, 1.8], [6.9000000000000004, 3.1000000000000001, 5.4000000000000004, 2.1000000000000001], [6.7000000000000002, 3.1000000000000001, 5.5999999999999996, 2.3999999999999999], [6.9000000000000004, 3.1000000000000001, 5.0999999999999996, 2.2999999999999998], [5.7999999999999998, 2.7000000000000002, 5.0999999999999996, 1.8999999999999999], [6.7999999999999998, 3.2000000000000002, 5.9000000000000004, 2.2999999999999998], [6.7000000000000002, 3.2999999999999998, 5.7000000000000002, 2.5], [6.7000000000000002, 3.0, 5.2000000000000002, 2.2999999999999998], [6.2999999999999998, 2.5, 5.0, 1.8999999999999999], [6.5, 3.0, 5.2000000000000002, 2.0], [6.2000000000000002, 3.3999999999999999, 5.4000000000000004, 2.2999999999999998], [5.9000000000000004, 3.0, 5.0999999999999996, 1.8]];\n", + " var coefficients = [[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -0.0, -1.0, -0.0, -1.0, -0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -0.0, -0.0, -1.0, -1.0, -1.0, -0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -0.0, -0.0, -1.0, -1.0, -1.0, -0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], [1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0]];\n", + " var intercepts = [0.043376922607421875, 0.11445245146751404, -0.0031709671020507812];\n", + " var weights = [50, 50, 50];\n", + "\n", + " // Prediction:\n", + " var clf = new SVC(3, vectors, coefficients, intercepts, weights, \"rbf\", 0.001, 0.0, 3);\n", + " var prediction = clf.predict(features);\n", " console.log(prediction);\n", + "\n", " }\n", "}\n" ] @@ -186,9 +264,10 @@ "source": [ "from sklearn_porter import Porter\n", "\n", - "output = Porter(clf, language='js').export()\n", + "porter = Porter(clf, language='js')\n", + "output = porter.export()\n", "\n", - "print output" + "print(output)" ] } ], diff --git a/examples/estimator/classifier/SVC/js/basics.py b/examples/estimator/classifier/SVC/js/basics.py index 72cbf0c4..ee7b985f 100644 --- a/examples/estimator/classifier/SVC/js/basics.py +++ b/examples/estimator/classifier/SVC/js/basics.py @@ -6,100 +6,179 @@ iris_data = load_iris() -X, y = iris_data.data, iris_data.target +X = iris_data.data +y = iris_data.target clf = svm.SVC(C=1., gamma=0.001, kernel='rbf', random_state=0) clf.fit(X, y) -output = Porter(clf, language='js').export() +porter = Porter(clf, language='js') +output = porter.export() print(output) """ -// Array.prototype.fill polyfill: -[].fill||(Array.prototype.fill=function(a){for(var b=Object(this),c=parseInt(b.length,10),d=arguments[1],e=parseInt(d,10)||0,f=0>e?Math.max(c+e,0):Math.min(e,c),g=arguments[2],h=void 0===g?c:parseInt(g)||0,i=0>h?Math.max(c+h,0):Math.min(h,c);i>f;f++)b[f]=a;return b}); +var SVC = function(nClasses, vectors, coefficients, intercepts, weights, kernel, gamma, coef0, degree) { -var Brain = function() { - - this.predict = function(atts) { - var i, j, k, d, l; - - var n_svs = [50, 50, 50]; - var svs = [[5.0999999999999996, 3.5, 1.3999999999999999, 0.20000000000000001], [4.9000000000000004, 3.0, 1.3999999999999999, 0.20000000000000001], [4.7000000000000002, 3.2000000000000002, 1.3, 0.20000000000000001], [4.5999999999999996, 3.1000000000000001, 1.5, 0.20000000000000001], [5.0, 3.6000000000000001, 1.3999999999999999, 0.20000000000000001], [5.4000000000000004, 3.8999999999999999, 1.7, 0.40000000000000002], [4.5999999999999996, 3.3999999999999999, 1.3999999999999999, 0.29999999999999999], [5.0, 3.3999999999999999, 1.5, 0.20000000000000001], [4.4000000000000004, 2.8999999999999999, 1.3999999999999999, 0.20000000000000001], [4.9000000000000004, 3.1000000000000001, 1.5, 0.10000000000000001], [5.4000000000000004, 3.7000000000000002, 1.5, 0.20000000000000001], [4.7999999999999998, 3.3999999999999999, 1.6000000000000001, 0.20000000000000001], [4.7999999999999998, 3.0, 1.3999999999999999, 0.10000000000000001], [4.2999999999999998, 3.0, 1.1000000000000001, 0.10000000000000001], [5.7999999999999998, 4.0, 1.2, 0.20000000000000001], [5.7000000000000002, 4.4000000000000004, 1.5, 0.40000000000000002], [5.4000000000000004, 3.8999999999999999, 1.3, 0.40000000000000002], [5.0999999999999996, 3.5, 1.3999999999999999, 0.29999999999999999], [5.7000000000000002, 3.7999999999999998, 1.7, 0.29999999999999999], [5.0999999999999996, 3.7999999999999998, 1.5, 0.29999999999999999], [5.4000000000000004, 3.3999999999999999, 1.7, 0.20000000000000001], [5.0999999999999996, 3.7000000000000002, 1.5, 0.40000000000000002], [4.5999999999999996, 3.6000000000000001, 1.0, 0.20000000000000001], [5.0999999999999996, 3.2999999999999998, 1.7, 0.5], [4.7999999999999998, 3.3999999999999999, 1.8999999999999999, 0.20000000000000001], [5.0, 3.0, 1.6000000000000001, 0.20000000000000001], [5.0, 3.3999999999999999, 1.6000000000000001, 0.40000000000000002], [5.2000000000000002, 3.5, 1.5, 0.20000000000000001], [5.2000000000000002, 3.3999999999999999, 1.3999999999999999, 0.20000000000000001], [4.7000000000000002, 3.2000000000000002, 1.6000000000000001, 0.20000000000000001], [4.7999999999999998, 3.1000000000000001, 1.6000000000000001, 0.20000000000000001], [5.4000000000000004, 3.3999999999999999, 1.5, 0.40000000000000002], [5.2000000000000002, 4.0999999999999996, 1.5, 0.10000000000000001], [5.5, 4.2000000000000002, 1.3999999999999999, 0.20000000000000001], [4.9000000000000004, 3.1000000000000001, 1.5, 0.10000000000000001], [5.0, 3.2000000000000002, 1.2, 0.20000000000000001], [5.5, 3.5, 1.3, 0.20000000000000001], [4.9000000000000004, 3.1000000000000001, 1.5, 0.10000000000000001], [4.4000000000000004, 3.0, 1.3, 0.20000000000000001], [5.0999999999999996, 3.3999999999999999, 1.5, 0.20000000000000001], [5.0, 3.5, 1.3, 0.29999999999999999], [4.5, 2.2999999999999998, 1.3, 0.29999999999999999], [4.4000000000000004, 3.2000000000000002, 1.3, 0.20000000000000001], [5.0, 3.5, 1.6000000000000001, 0.59999999999999998], [5.0999999999999996, 3.7999999999999998, 1.8999999999999999, 0.40000000000000002], [4.7999999999999998, 3.0, 1.3999999999999999, 0.29999999999999999], [5.0999999999999996, 3.7999999999999998, 1.6000000000000001, 0.20000000000000001], [4.5999999999999996, 3.2000000000000002, 1.3999999999999999, 0.20000000000000001], [5.2999999999999998, 3.7000000000000002, 1.5, 0.20000000000000001], [5.0, 3.2999999999999998, 1.3999999999999999, 0.20000000000000001], [7.0, 3.2000000000000002, 4.7000000000000002, 1.3999999999999999], [6.4000000000000004, 3.2000000000000002, 4.5, 1.5], [6.9000000000000004, 3.1000000000000001, 4.9000000000000004, 1.5], [5.5, 2.2999999999999998, 4.0, 1.3], [6.5, 2.7999999999999998, 4.5999999999999996, 1.5], [5.7000000000000002, 2.7999999999999998, 4.5, 1.3], [6.2999999999999998, 3.2999999999999998, 4.7000000000000002, 1.6000000000000001], [4.9000000000000004, 2.3999999999999999, 3.2999999999999998, 1.0], [6.5999999999999996, 2.8999999999999999, 4.5999999999999996, 1.3], [5.2000000000000002, 2.7000000000000002, 3.8999999999999999, 1.3999999999999999], [5.0, 2.0, 3.5, 1.0], [5.9000000000000004, 3.0, 4.2000000000000002, 1.5], [6.0, 2.2000000000000002, 4.0, 1.0], [6.0999999999999996, 2.8999999999999999, 4.7000000000000002, 1.3999999999999999], [5.5999999999999996, 2.8999999999999999, 3.6000000000000001, 1.3], [6.7000000000000002, 3.1000000000000001, 4.4000000000000004, 1.3999999999999999], [5.5999999999999996, 3.0, 4.5, 1.5], [5.7999999999999998, 2.7000000000000002, 4.0999999999999996, 1.0], [6.2000000000000002, 2.2000000000000002, 4.5, 1.5], [5.5999999999999996, 2.5, 3.8999999999999999, 1.1000000000000001], [5.9000000000000004, 3.2000000000000002, 4.7999999999999998, 1.8], [6.0999999999999996, 2.7999999999999998, 4.0, 1.3], [6.2999999999999998, 2.5, 4.9000000000000004, 1.5], [6.0999999999999996, 2.7999999999999998, 4.7000000000000002, 1.2], [6.4000000000000004, 2.8999999999999999, 4.2999999999999998, 1.3], [6.5999999999999996, 3.0, 4.4000000000000004, 1.3999999999999999], [6.7999999999999998, 2.7999999999999998, 4.7999999999999998, 1.3999999999999999], [6.7000000000000002, 3.0, 5.0, 1.7], [6.0, 2.8999999999999999, 4.5, 1.5], [5.7000000000000002, 2.6000000000000001, 3.5, 1.0], [5.5, 2.3999999999999999, 3.7999999999999998, 1.1000000000000001], [5.5, 2.3999999999999999, 3.7000000000000002, 1.0], [5.7999999999999998, 2.7000000000000002, 3.8999999999999999, 1.2], [6.0, 2.7000000000000002, 5.0999999999999996, 1.6000000000000001], [5.4000000000000004, 3.0, 4.5, 1.5], [6.0, 3.3999999999999999, 4.5, 1.6000000000000001], [6.7000000000000002, 3.1000000000000001, 4.7000000000000002, 1.5], [6.2999999999999998, 2.2999999999999998, 4.4000000000000004, 1.3], [5.5999999999999996, 3.0, 4.0999999999999996, 1.3], [5.5, 2.5, 4.0, 1.3], [5.5, 2.6000000000000001, 4.4000000000000004, 1.2], [6.0999999999999996, 3.0, 4.5999999999999996, 1.3999999999999999], [5.7999999999999998, 2.6000000000000001, 4.0, 1.2], [5.0, 2.2999999999999998, 3.2999999999999998, 1.0], [5.5999999999999996, 2.7000000000000002, 4.2000000000000002, 1.3], [5.7000000000000002, 3.0, 4.2000000000000002, 1.2], [5.7000000000000002, 2.8999999999999999, 4.2000000000000002, 1.3], [6.2000000000000002, 2.8999999999999999, 4.2999999999999998, 1.3], [5.0999999999999996, 2.5, 3.0, 1.1000000000000001], [5.7000000000000002, 2.7999999999999998, 4.0999999999999996, 1.3], [6.2999999999999998, 3.2999999999999998, 6.0, 2.5], [5.7999999999999998, 2.7000000000000002, 5.0999999999999996, 1.8999999999999999], [7.0999999999999996, 3.0, 5.9000000000000004, 2.1000000000000001], [6.2999999999999998, 2.8999999999999999, 5.5999999999999996, 1.8], [6.5, 3.0, 5.7999999999999998, 2.2000000000000002], [7.5999999999999996, 3.0, 6.5999999999999996, 2.1000000000000001], [4.9000000000000004, 2.5, 4.5, 1.7], [7.2999999999999998, 2.8999999999999999, 6.2999999999999998, 1.8], [6.7000000000000002, 2.5, 5.7999999999999998, 1.8], [7.2000000000000002, 3.6000000000000001, 6.0999999999999996, 2.5], [6.5, 3.2000000000000002, 5.0999999999999996, 2.0], [6.4000000000000004, 2.7000000000000002, 5.2999999999999998, 1.8999999999999999], [6.7999999999999998, 3.0, 5.5, 2.1000000000000001], [5.7000000000000002, 2.5, 5.0, 2.0], [5.7999999999999998, 2.7999999999999998, 5.0999999999999996, 2.3999999999999999], [6.4000000000000004, 3.2000000000000002, 5.2999999999999998, 2.2999999999999998], [6.5, 3.0, 5.5, 1.8], [7.7000000000000002, 3.7999999999999998, 6.7000000000000002, 2.2000000000000002], [7.7000000000000002, 2.6000000000000001, 6.9000000000000004, 2.2999999999999998], [6.0, 2.2000000000000002, 5.0, 1.5], [6.9000000000000004, 3.2000000000000002, 5.7000000000000002, 2.2999999999999998], [5.5999999999999996, 2.7999999999999998, 4.9000000000000004, 2.0], [7.7000000000000002, 2.7999999999999998, 6.7000000000000002, 2.0], [6.2999999999999998, 2.7000000000000002, 4.9000000000000004, 1.8], [6.7000000000000002, 3.2999999999999998, 5.7000000000000002, 2.1000000000000001], [7.2000000000000002, 3.2000000000000002, 6.0, 1.8], [6.2000000000000002, 2.7999999999999998, 4.7999999999999998, 1.8], [6.0999999999999996, 3.0, 4.9000000000000004, 1.8], [6.4000000000000004, 2.7999999999999998, 5.5999999999999996, 2.1000000000000001], [7.2000000000000002, 3.0, 5.7999999999999998, 1.6000000000000001], [7.4000000000000004, 2.7999999999999998, 6.0999999999999996, 1.8999999999999999], [7.9000000000000004, 3.7999999999999998, 6.4000000000000004, 2.0], [6.4000000000000004, 2.7999999999999998, 5.5999999999999996, 2.2000000000000002], [6.2999999999999998, 2.7999999999999998, 5.0999999999999996, 1.5], [6.0999999999999996, 2.6000000000000001, 5.5999999999999996, 1.3999999999999999], [7.7000000000000002, 3.0, 6.0999999999999996, 2.2999999999999998], [6.2999999999999998, 3.3999999999999999, 5.5999999999999996, 2.3999999999999999], [6.4000000000000004, 3.1000000000000001, 5.5, 1.8], [6.0, 3.0, 4.7999999999999998, 1.8], [6.9000000000000004, 3.1000000000000001, 5.4000000000000004, 2.1000000000000001], [6.7000000000000002, 3.1000000000000001, 5.5999999999999996, 2.3999999999999999], [6.9000000000000004, 3.1000000000000001, 5.0999999999999996, 2.2999999999999998], [5.7999999999999998, 2.7000000000000002, 5.0999999999999996, 1.8999999999999999], [6.7999999999999998, 3.2000000000000002, 5.9000000000000004, 2.2999999999999998], [6.7000000000000002, 3.2999999999999998, 5.7000000000000002, 2.5], [6.7000000000000002, 3.0, 5.2000000000000002, 2.2999999999999998], [6.2999999999999998, 2.5, 5.0, 1.8999999999999999], [6.5, 3.0, 5.2000000000000002, 2.0], [6.2000000000000002, 3.3999999999999999, 5.4000000000000004, 2.2999999999999998], [5.9000000000000004, 3.0, 5.0999999999999996, 1.8]]; - var coeffs = [[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -0.0, -1.0, -0.0, -1.0, -0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -0.0, -0.0, -1.0, -1.0, -1.0, -0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -0.0, -0.0, -1.0, -1.0, -1.0, -0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], [1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0]]; - var inters = [0.043376922607421875, 0.11445245146751404, -0.0031709671020507812]; - var classes = [0, 1, 2]; + this.nClasses = nClasses; + this.classes = new Array(nClasses); + for (var i = 0; i < nClasses; i++) { + this.classes[i] = i; + } + this.vectors = vectors; + this.coefficients = coefficients; + this.intercepts = intercepts; + this.weights = weights; + this.kernel = kernel.toUpperCase(); + this.gamma = gamma; + this.coef0 = coef0; + this.degree = degree; - // exp(-y|x-x'|^2) - var kernels = new Array(150), - kernel; - for (i = 0; i < 150; i++) { - kernel = 0.; - for (j = 0; j < 4; j++) { - kernel += Math.pow(svs[i][j] - atts[j], 2); - } - kernels[i] = Math.exp(-0.001 * kernel); + this.predict = function(features) { + + var kernels = new Array(vectors.length); + var kernel; + switch (this.kernel) { + case 'LINEAR': + // + for (var i = 0; i < this.vectors.length; i++) { + kernel = 0.; + for (var j = 0; j < this.vectors[i].length; j++) { + kernel += this.vectors[i][j] * features[j]; + } + kernels[i] = kernel; + } + break; + case 'POLY': + // (y+r)^d + for (var i = 0; i < this.vectors.length; i++) { + kernel = 0.; + for (var j = 0; j < this.vectors[i].length; j++) { + kernel += this.vectors[i][j] * features[j]; + } + kernels[i] = Math.pow((this.gamma * kernel) + this.coef0, this.degree); + } + break; + case 'RBF': + // exp(-y|x-x'|^2) + for (var i = 0; i < this.vectors.length; i++) { + kernel = 0.; + for (var j = 0; j < this.vectors[i].length; j++) { + kernel += Math.pow(this.vectors[i][j] - features[j], 2); + } + kernels[i] = Math.exp(-this.gamma * kernel); + } + break; + case 'SIGMOID': + // tanh(y+r) + for (var i = 0; i < this.vectors.length; i++) { + kernel = 0.; + for (var j = 0; j < this.vectors[i].length; j++) { + kernel += this.vectors[i][j] * features[j]; + } + kernels[i] = Math.tanh((this.gamma * kernel) + this.coef0); + } + break; } - - var starts = new Array(3); - for (i = 0; i < 3; i++) { + + var starts = new Array(this.nClasses); + for (var i = 0; i < this.nClasses; i++) { if (i != 0) { var start = 0; - for (j = 0; j < i; j++) { - start += n_svs[j]; + for (var j = 0; j < i; j++) { + start += this.weights[j]; } starts[i] = start; } else { starts[0] = 0; } } - var ends = new Array(3); - for (i = 0; i < 3; i++) { - ends[i] = n_svs[i] + starts[i]; + + var ends = new Array(this.nClasses); + for (var i = 0; i < this.nClasses; i++) { + ends[i] = this.weights[i] + starts[i]; } - var decisions = new Array(3); - for (i = 0, d = 0, l = 3; i < l; i++) { - for (j = i + 1; j < l; j++) { - var tmp = 0.; - for (k = starts[j]; k < ends[j]; k++) { - tmp += kernels[k] * coeffs[i][k]; + + if (this.nClasses == 2) { + + for (var i = 0; i < kernels.length; i++) { + kernels[i] = -kernels[i]; + } + + var decision = 0.; + for (var k = starts[1]; k < ends[1]; k++) { + decision += kernels[k] * this.coefficients[0][k]; + } + for (var k = starts[0]; k < ends[0]; k++) { + decision += kernels[k] * this.coefficients[0][k]; + } + decision += this.intercepts[0]; + + if (decision > 0) { + return 0; + } + return 1; + + } else { + + var decisions = new Array(this.nClasses); + for (var i = 0, d = 0, l = this.nClasses; i < l; i++) { + for (var j = i + 1; j < l; j++) { + var tmp = 0.; + for (var k = starts[j]; k < ends[j]; k++) { + tmp += this.coefficients[i][k] * kernels[k]; + } + for (var k = starts[i]; k < ends[i]; k++) { + tmp += this.coefficients[j - 1][k] * kernels[k]; + } + decisions[d] = tmp + this.intercepts[d]; + d++; } - for (k = starts[i]; k < ends[i]; k++) { - tmp += kernels[k] * coeffs[j - 1][k]; + } + + var votes = new Array(this.intercepts.length); + for (var i = 0, d = 0, l = this.nClasses; i < l; i++) { + for (var j = i + 1; j < l; j++) { + votes[d] = decisions[d] > 0 ? i : j; + d++; } - decisions[d] = tmp + inters[d]; - d++; } - } - var votes = new Array(3); - for (i = 0, d = 0, l = 3; i < l; i++) { - for (j = i + 1; j < l; j++) { - votes[d] = decisions[d] > 0 ? i : j; - d++; + + var amounts = new Array(this.nClasses).fill(0); + for (var i = 0, l = votes.length; i < l; i++) { + amounts[votes[i]] += 1; } - } - - var amounts = new Array(3).fill(0); - for (i = 0, l = 3; i < l; i++) { - amounts[votes[i]] += 1; - } - - var class_val = -1, class_idx = -1; - for (i = 0, l = 3; i < l; i++) { - if (amounts[i] > class_val) { - class_val = amounts[i]; - class_idx = i; + + var classVal = -1, classIdx = -1; + for (var i = 0, l = amounts.length; i < l; i++) { + if (amounts[i] > classVal) { + classVal = amounts[i]; + classIdx= i; + } } + return this.classes[classIdx]; + } - return classes[class_idx]; - }; + } }; if (typeof process !== 'undefined' && typeof process.argv !== 'undefined') { - if (process.argv.length - 2 == 4) { - var argv = process.argv.slice(2); - var prediction = new Brain().predict(argv); + if (process.argv.length - 2 === 4) { + + // Features: + var features = process.argv.slice(2); + + // Parameters: + var vectors = [[5.0999999999999996, 3.5, 1.3999999999999999, 0.20000000000000001], [4.9000000000000004, 3.0, 1.3999999999999999, 0.20000000000000001], [4.7000000000000002, 3.2000000000000002, 1.3, 0.20000000000000001], [4.5999999999999996, 3.1000000000000001, 1.5, 0.20000000000000001], [5.0, 3.6000000000000001, 1.3999999999999999, 0.20000000000000001], [5.4000000000000004, 3.8999999999999999, 1.7, 0.40000000000000002], [4.5999999999999996, 3.3999999999999999, 1.3999999999999999, 0.29999999999999999], [5.0, 3.3999999999999999, 1.5, 0.20000000000000001], [4.4000000000000004, 2.8999999999999999, 1.3999999999999999, 0.20000000000000001], [4.9000000000000004, 3.1000000000000001, 1.5, 0.10000000000000001], [5.4000000000000004, 3.7000000000000002, 1.5, 0.20000000000000001], [4.7999999999999998, 3.3999999999999999, 1.6000000000000001, 0.20000000000000001], [4.7999999999999998, 3.0, 1.3999999999999999, 0.10000000000000001], [4.2999999999999998, 3.0, 1.1000000000000001, 0.10000000000000001], [5.7999999999999998, 4.0, 1.2, 0.20000000000000001], [5.7000000000000002, 4.4000000000000004, 1.5, 0.40000000000000002], [5.4000000000000004, 3.8999999999999999, 1.3, 0.40000000000000002], [5.0999999999999996, 3.5, 1.3999999999999999, 0.29999999999999999], [5.7000000000000002, 3.7999999999999998, 1.7, 0.29999999999999999], [5.0999999999999996, 3.7999999999999998, 1.5, 0.29999999999999999], [5.4000000000000004, 3.3999999999999999, 1.7, 0.20000000000000001], [5.0999999999999996, 3.7000000000000002, 1.5, 0.40000000000000002], [4.5999999999999996, 3.6000000000000001, 1.0, 0.20000000000000001], [5.0999999999999996, 3.2999999999999998, 1.7, 0.5], [4.7999999999999998, 3.3999999999999999, 1.8999999999999999, 0.20000000000000001], [5.0, 3.0, 1.6000000000000001, 0.20000000000000001], [5.0, 3.3999999999999999, 1.6000000000000001, 0.40000000000000002], [5.2000000000000002, 3.5, 1.5, 0.20000000000000001], [5.2000000000000002, 3.3999999999999999, 1.3999999999999999, 0.20000000000000001], [4.7000000000000002, 3.2000000000000002, 1.6000000000000001, 0.20000000000000001], [4.7999999999999998, 3.1000000000000001, 1.6000000000000001, 0.20000000000000001], [5.4000000000000004, 3.3999999999999999, 1.5, 0.40000000000000002], [5.2000000000000002, 4.0999999999999996, 1.5, 0.10000000000000001], [5.5, 4.2000000000000002, 1.3999999999999999, 0.20000000000000001], [4.9000000000000004, 3.1000000000000001, 1.5, 0.10000000000000001], [5.0, 3.2000000000000002, 1.2, 0.20000000000000001], [5.5, 3.5, 1.3, 0.20000000000000001], [4.9000000000000004, 3.1000000000000001, 1.5, 0.10000000000000001], [4.4000000000000004, 3.0, 1.3, 0.20000000000000001], [5.0999999999999996, 3.3999999999999999, 1.5, 0.20000000000000001], [5.0, 3.5, 1.3, 0.29999999999999999], [4.5, 2.2999999999999998, 1.3, 0.29999999999999999], [4.4000000000000004, 3.2000000000000002, 1.3, 0.20000000000000001], [5.0, 3.5, 1.6000000000000001, 0.59999999999999998], [5.0999999999999996, 3.7999999999999998, 1.8999999999999999, 0.40000000000000002], [4.7999999999999998, 3.0, 1.3999999999999999, 0.29999999999999999], [5.0999999999999996, 3.7999999999999998, 1.6000000000000001, 0.20000000000000001], [4.5999999999999996, 3.2000000000000002, 1.3999999999999999, 0.20000000000000001], [5.2999999999999998, 3.7000000000000002, 1.5, 0.20000000000000001], [5.0, 3.2999999999999998, 1.3999999999999999, 0.20000000000000001], [7.0, 3.2000000000000002, 4.7000000000000002, 1.3999999999999999], [6.4000000000000004, 3.2000000000000002, 4.5, 1.5], [6.9000000000000004, 3.1000000000000001, 4.9000000000000004, 1.5], [5.5, 2.2999999999999998, 4.0, 1.3], [6.5, 2.7999999999999998, 4.5999999999999996, 1.5], [5.7000000000000002, 2.7999999999999998, 4.5, 1.3], [6.2999999999999998, 3.2999999999999998, 4.7000000000000002, 1.6000000000000001], [4.9000000000000004, 2.3999999999999999, 3.2999999999999998, 1.0], [6.5999999999999996, 2.8999999999999999, 4.5999999999999996, 1.3], [5.2000000000000002, 2.7000000000000002, 3.8999999999999999, 1.3999999999999999], [5.0, 2.0, 3.5, 1.0], [5.9000000000000004, 3.0, 4.2000000000000002, 1.5], [6.0, 2.2000000000000002, 4.0, 1.0], [6.0999999999999996, 2.8999999999999999, 4.7000000000000002, 1.3999999999999999], [5.5999999999999996, 2.8999999999999999, 3.6000000000000001, 1.3], [6.7000000000000002, 3.1000000000000001, 4.4000000000000004, 1.3999999999999999], [5.5999999999999996, 3.0, 4.5, 1.5], [5.7999999999999998, 2.7000000000000002, 4.0999999999999996, 1.0], [6.2000000000000002, 2.2000000000000002, 4.5, 1.5], [5.5999999999999996, 2.5, 3.8999999999999999, 1.1000000000000001], [5.9000000000000004, 3.2000000000000002, 4.7999999999999998, 1.8], [6.0999999999999996, 2.7999999999999998, 4.0, 1.3], [6.2999999999999998, 2.5, 4.9000000000000004, 1.5], [6.0999999999999996, 2.7999999999999998, 4.7000000000000002, 1.2], [6.4000000000000004, 2.8999999999999999, 4.2999999999999998, 1.3], [6.5999999999999996, 3.0, 4.4000000000000004, 1.3999999999999999], [6.7999999999999998, 2.7999999999999998, 4.7999999999999998, 1.3999999999999999], [6.7000000000000002, 3.0, 5.0, 1.7], [6.0, 2.8999999999999999, 4.5, 1.5], [5.7000000000000002, 2.6000000000000001, 3.5, 1.0], [5.5, 2.3999999999999999, 3.7999999999999998, 1.1000000000000001], [5.5, 2.3999999999999999, 3.7000000000000002, 1.0], [5.7999999999999998, 2.7000000000000002, 3.8999999999999999, 1.2], [6.0, 2.7000000000000002, 5.0999999999999996, 1.6000000000000001], [5.4000000000000004, 3.0, 4.5, 1.5], [6.0, 3.3999999999999999, 4.5, 1.6000000000000001], [6.7000000000000002, 3.1000000000000001, 4.7000000000000002, 1.5], [6.2999999999999998, 2.2999999999999998, 4.4000000000000004, 1.3], [5.5999999999999996, 3.0, 4.0999999999999996, 1.3], [5.5, 2.5, 4.0, 1.3], [5.5, 2.6000000000000001, 4.4000000000000004, 1.2], [6.0999999999999996, 3.0, 4.5999999999999996, 1.3999999999999999], [5.7999999999999998, 2.6000000000000001, 4.0, 1.2], [5.0, 2.2999999999999998, 3.2999999999999998, 1.0], [5.5999999999999996, 2.7000000000000002, 4.2000000000000002, 1.3], [5.7000000000000002, 3.0, 4.2000000000000002, 1.2], [5.7000000000000002, 2.8999999999999999, 4.2000000000000002, 1.3], [6.2000000000000002, 2.8999999999999999, 4.2999999999999998, 1.3], [5.0999999999999996, 2.5, 3.0, 1.1000000000000001], [5.7000000000000002, 2.7999999999999998, 4.0999999999999996, 1.3], [6.2999999999999998, 3.2999999999999998, 6.0, 2.5], [5.7999999999999998, 2.7000000000000002, 5.0999999999999996, 1.8999999999999999], [7.0999999999999996, 3.0, 5.9000000000000004, 2.1000000000000001], [6.2999999999999998, 2.8999999999999999, 5.5999999999999996, 1.8], [6.5, 3.0, 5.7999999999999998, 2.2000000000000002], [7.5999999999999996, 3.0, 6.5999999999999996, 2.1000000000000001], [4.9000000000000004, 2.5, 4.5, 1.7], [7.2999999999999998, 2.8999999999999999, 6.2999999999999998, 1.8], [6.7000000000000002, 2.5, 5.7999999999999998, 1.8], [7.2000000000000002, 3.6000000000000001, 6.0999999999999996, 2.5], [6.5, 3.2000000000000002, 5.0999999999999996, 2.0], [6.4000000000000004, 2.7000000000000002, 5.2999999999999998, 1.8999999999999999], [6.7999999999999998, 3.0, 5.5, 2.1000000000000001], [5.7000000000000002, 2.5, 5.0, 2.0], [5.7999999999999998, 2.7999999999999998, 5.0999999999999996, 2.3999999999999999], [6.4000000000000004, 3.2000000000000002, 5.2999999999999998, 2.2999999999999998], [6.5, 3.0, 5.5, 1.8], [7.7000000000000002, 3.7999999999999998, 6.7000000000000002, 2.2000000000000002], [7.7000000000000002, 2.6000000000000001, 6.9000000000000004, 2.2999999999999998], [6.0, 2.2000000000000002, 5.0, 1.5], [6.9000000000000004, 3.2000000000000002, 5.7000000000000002, 2.2999999999999998], [5.5999999999999996, 2.7999999999999998, 4.9000000000000004, 2.0], [7.7000000000000002, 2.7999999999999998, 6.7000000000000002, 2.0], [6.2999999999999998, 2.7000000000000002, 4.9000000000000004, 1.8], [6.7000000000000002, 3.2999999999999998, 5.7000000000000002, 2.1000000000000001], [7.2000000000000002, 3.2000000000000002, 6.0, 1.8], [6.2000000000000002, 2.7999999999999998, 4.7999999999999998, 1.8], [6.0999999999999996, 3.0, 4.9000000000000004, 1.8], [6.4000000000000004, 2.7999999999999998, 5.5999999999999996, 2.1000000000000001], [7.2000000000000002, 3.0, 5.7999999999999998, 1.6000000000000001], [7.4000000000000004, 2.7999999999999998, 6.0999999999999996, 1.8999999999999999], [7.9000000000000004, 3.7999999999999998, 6.4000000000000004, 2.0], [6.4000000000000004, 2.7999999999999998, 5.5999999999999996, 2.2000000000000002], [6.2999999999999998, 2.7999999999999998, 5.0999999999999996, 1.5], [6.0999999999999996, 2.6000000000000001, 5.5999999999999996, 1.3999999999999999], [7.7000000000000002, 3.0, 6.0999999999999996, 2.2999999999999998], [6.2999999999999998, 3.3999999999999999, 5.5999999999999996, 2.3999999999999999], [6.4000000000000004, 3.1000000000000001, 5.5, 1.8], [6.0, 3.0, 4.7999999999999998, 1.8], [6.9000000000000004, 3.1000000000000001, 5.4000000000000004, 2.1000000000000001], [6.7000000000000002, 3.1000000000000001, 5.5999999999999996, 2.3999999999999999], [6.9000000000000004, 3.1000000000000001, 5.0999999999999996, 2.2999999999999998], [5.7999999999999998, 2.7000000000000002, 5.0999999999999996, 1.8999999999999999], [6.7999999999999998, 3.2000000000000002, 5.9000000000000004, 2.2999999999999998], [6.7000000000000002, 3.2999999999999998, 5.7000000000000002, 2.5], [6.7000000000000002, 3.0, 5.2000000000000002, 2.2999999999999998], [6.2999999999999998, 2.5, 5.0, 1.8999999999999999], [6.5, 3.0, 5.2000000000000002, 2.0], [6.2000000000000002, 3.3999999999999999, 5.4000000000000004, 2.2999999999999998], [5.9000000000000004, 3.0, 5.0999999999999996, 1.8]]; + var coefficients = [[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -0.0, -1.0, -0.0, -1.0, -0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -0.0, -0.0, -1.0, -1.0, -1.0, -0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -0.0, -0.0, -1.0, -1.0, -1.0, -0.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0], [1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0]]; + var intercepts = [0.043376922607421875, 0.11445245146751404, -0.0031709671020507812]; + var weights = [50, 50, 50]; + + // Prediction: + var clf = new SVC(3, vectors, coefficients, intercepts, weights, "rbf", 0.001, 0.0, 3); + var prediction = clf.predict(features); console.log(prediction); + } } """ diff --git a/sklearn_porter/estimator/classifier/SVC/templates/java/method.txt b/sklearn_porter/estimator/classifier/SVC/templates/java/method.txt index a13c3ca4..311c37a3 100644 --- a/sklearn_porter/estimator/classifier/SVC/templates/java/method.txt +++ b/sklearn_porter/estimator/classifier/SVC/templates/java/method.txt @@ -120,7 +120,7 @@ public int {method_name}(double[] features) {{ classIdx= i; }} }} - return classes[classIdx]; + return this.classes[classIdx]; }} }} \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/SVC/templates/js/binary.classes.txt b/sklearn_porter/estimator/classifier/SVC/templates/js/binary.classes.txt deleted file mode 100644 index b43cd59c..00000000 --- a/sklearn_porter/estimator/classifier/SVC/templates/js/binary.classes.txt +++ /dev/null @@ -1,5 +0,0 @@ - -if (decision > 0) {{ - return 0; -}} -return 1; diff --git a/sklearn_porter/estimator/classifier/SVC/templates/js/binary.decisions.txt b/sklearn_porter/estimator/classifier/SVC/templates/js/binary.decisions.txt deleted file mode 100644 index 35a657e2..00000000 --- a/sklearn_porter/estimator/classifier/SVC/templates/js/binary.decisions.txt +++ /dev/null @@ -1,9 +0,0 @@ - -var decision = 0.; -for (k = starts[1]; k < ends[1]; k++) {{ - decision += kernels[k] * coeffs[0][k]; -}} -for (k = starts[0]; k < ends[0]; k++) {{ - decision += kernels[k] * coeffs[0][k]; -}} -decision += inters[0]; diff --git a/sklearn_porter/estimator/classifier/SVC/templates/js/binary.kernel.linear.txt b/sklearn_porter/estimator/classifier/SVC/templates/js/binary.kernel.linear.txt deleted file mode 100644 index 32ca0fab..00000000 --- a/sklearn_porter/estimator/classifier/SVC/templates/js/binary.kernel.linear.txt +++ /dev/null @@ -1,11 +0,0 @@ - -// -var kernels = new Array({0}), - kernel; -for (i = 0; i < {0}; i++) {{ - kernel = 0.; - for (j = 0; j < {1}; j++) {{ - kernel += svs[i][j] * atts[j]; - }} - kernels[i] = -kernel; -}} diff --git a/sklearn_porter/estimator/classifier/SVC/templates/js/binary.kernel.poly.txt b/sklearn_porter/estimator/classifier/SVC/templates/js/binary.kernel.poly.txt deleted file mode 100644 index 44738c6a..00000000 --- a/sklearn_porter/estimator/classifier/SVC/templates/js/binary.kernel.poly.txt +++ /dev/null @@ -1,11 +0,0 @@ - -// (y+r)^d -var kernels = new Array({0}), - kernel; -for (i = 0; i < {0}; i++) {{ - kernel = 0.; - for (j = 0; j < {1}; j++) {{ - kernel += svs[i][j] * atts[j]; - }} - kernels[i] = -Math.pow(({2} * kernel) + {3}, {4}); -}} diff --git a/sklearn_porter/estimator/classifier/SVC/templates/js/binary.kernel.rbf.txt b/sklearn_porter/estimator/classifier/SVC/templates/js/binary.kernel.rbf.txt deleted file mode 100644 index 8227489e..00000000 --- a/sklearn_porter/estimator/classifier/SVC/templates/js/binary.kernel.rbf.txt +++ /dev/null @@ -1,11 +0,0 @@ - -// exp(-y|x-x'|^2) -var kernels = new Array({0}), - kernel; -for (i = 0; i < {0}; i++) {{ - kernel = 0.; - for (j = 0; j < {1}; j++) {{ - kernel += Math.pow(svs[i][j] - atts[j], 2); - }} - kernels[i] = -Math.exp(-{2} * kernel); -}} diff --git a/sklearn_porter/estimator/classifier/SVC/templates/js/binary.kernel.sigmoid.txt b/sklearn_porter/estimator/classifier/SVC/templates/js/binary.kernel.sigmoid.txt deleted file mode 100644 index aadaa959..00000000 --- a/sklearn_porter/estimator/classifier/SVC/templates/js/binary.kernel.sigmoid.txt +++ /dev/null @@ -1,14 +0,0 @@ - -// Math.tanh polyfill: -Math.tanh=Math.tanh||function(a){{if(a===1/0)return 1;if(a===-(1/0))return-1;var b=Math.exp(2*a);return(b-1)/(b+1)}}; - -// tanh(y+r) -var kernels = new Array({0}).fill(0), - kernel; -for (i = 0; i < {0}; i++) {{ - kernel = 0.; - for (j = 0; j < {1}; j++) {{ - kernel += svs[i][j] * atts[j]; - }} - kernels[i] = -Math.tanh(({2} * kernel) + {3}); -}} diff --git a/sklearn_porter/estimator/classifier/SVC/templates/js/class.txt b/sklearn_porter/estimator/classifier/SVC/templates/js/class.txt index ce156880..22a97a1d 100644 --- a/sklearn_porter/estimator/classifier/SVC/templates/js/class.txt +++ b/sklearn_porter/estimator/classifier/SVC/templates/js/class.txt @@ -1,16 +1,39 @@ -// Array.prototype.fill polyfill: -[].fill||(Array.prototype.fill=function(a){{for(var b=Object(this),c=parseInt(b.length,10),d=arguments[1],e=parseInt(d,10)||0,f=0>e?Math.max(c+e,0):Math.min(e,c),g=arguments[2],h=void 0===g?c:parseInt(g)||0,i=0>h?Math.max(c+h,0):Math.min(h,c);i>f;f++)b[f]=a;return b}}); +var {class_name} = function(nClasses, vectors, coefficients, intercepts, weights, kernel, gamma, coef0, degree) {{ -var {class_name} = function() {{ + this.nClasses = nClasses; + this.classes = new Array(nClasses); + for (var i = 0; i < nClasses; i++) {{ + this.classes[i] = i; + }} + this.vectors = vectors; + this.coefficients = coefficients; + this.intercepts = intercepts; + this.weights = weights; + this.kernel = kernel.toUpperCase(); + this.gamma = gamma; + this.coef0 = coef0; + this.degree = degree; {method} }}; 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: + {vectors} + {coefficients} + {intercepts} + {weights} + + // Prediction: + var clf = new {class_name}({n_classes}, vectors, coefficients, intercepts, weights, "{kernel}", {gamma}, {coef0}, {degree}); + var prediction = clf.{method_name}(features); console.log(prediction); + }} }} \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/SVC/templates/js/ends.txt b/sklearn_porter/estimator/classifier/SVC/templates/js/ends.txt deleted file mode 100644 index dca9f94f..00000000 --- a/sklearn_porter/estimator/classifier/SVC/templates/js/ends.txt +++ /dev/null @@ -1,4 +0,0 @@ -var ends = new Array({0}); -for (i = 0; i < {0}; i++) {{ - ends[i] = n_svs[i] + starts[i]; -}} diff --git a/sklearn_porter/estimator/classifier/SVC/templates/js/method.txt b/sklearn_porter/estimator/classifier/SVC/templates/js/method.txt index 34c130ad..a4b01d9c 100644 --- a/sklearn_porter/estimator/classifier/SVC/templates/js/method.txt +++ b/sklearn_porter/estimator/classifier/SVC/templates/js/method.txt @@ -1,4 +1,126 @@ -this.{method_name} = function(atts) {{ - var i, j, k, d, l; - {decicion} -}}; \ No newline at end of file +this.{method_name} = function(features) {{ + + var kernels = new Array(vectors.length); + var kernel; + switch (this.kernel) {{ + case 'LINEAR': + // + for (var i = 0; i < this.vectors.length; i++) {{ + kernel = 0.; + for (var j = 0; j < this.vectors[i].length; j++) {{ + kernel += this.vectors[i][j] * features[j]; + }} + kernels[i] = kernel; + }} + break; + case 'POLY': + // (y+r)^d + for (var i = 0; i < this.vectors.length; i++) {{ + kernel = 0.; + for (var j = 0; j < this.vectors[i].length; j++) {{ + kernel += this.vectors[i][j] * features[j]; + }} + kernels[i] = Math.pow((this.gamma * kernel) + this.coef0, this.degree); + }} + break; + case 'RBF': + // exp(-y|x-x'|^2) + for (var i = 0; i < this.vectors.length; i++) {{ + kernel = 0.; + for (var j = 0; j < this.vectors[i].length; j++) {{ + kernel += Math.pow(this.vectors[i][j] - features[j], 2); + }} + kernels[i] = Math.exp(-this.gamma * kernel); + }} + break; + case 'SIGMOID': + // tanh(y+r) + for (var i = 0; i < this.vectors.length; i++) {{ + kernel = 0.; + for (var j = 0; j < this.vectors[i].length; j++) {{ + kernel += this.vectors[i][j] * features[j]; + }} + kernels[i] = Math.tanh((this.gamma * kernel) + this.coef0); + }} + break; + }} + + var starts = new Array(this.nClasses); + for (var i = 0; i < this.nClasses; i++) {{ + if (i != 0) {{ + var start = 0; + for (var j = 0; j < i; j++) {{ + start += this.weights[j]; + }} + starts[i] = start; + }} else {{ + starts[0] = 0; + }} + }} + + var ends = new Array(this.nClasses); + for (var i = 0; i < this.nClasses; i++) {{ + ends[i] = this.weights[i] + starts[i]; + }} + + if (this.nClasses == 2) {{ + + for (var i = 0; i < kernels.length; i++) {{ + kernels[i] = -kernels[i]; + }} + + var decision = 0.; + for (var k = starts[1]; k < ends[1]; k++) {{ + decision += kernels[k] * this.coefficients[0][k]; + }} + for (var k = starts[0]; k < ends[0]; k++) {{ + decision += kernels[k] * this.coefficients[0][k]; + }} + decision += this.intercepts[0]; + + if (decision > 0) {{ + return 0; + }} + return 1; + + }} else {{ + + var decisions = new Array(this.nClasses); + for (var i = 0, d = 0, l = this.nClasses; i < l; i++) {{ + for (var j = i + 1; j < l; j++) {{ + var tmp = 0.; + for (var k = starts[j]; k < ends[j]; k++) {{ + tmp += this.coefficients[i][k] * kernels[k]; + }} + for (var k = starts[i]; k < ends[i]; k++) {{ + tmp += this.coefficients[j - 1][k] * kernels[k]; + }} + decisions[d] = tmp + this.intercepts[d]; + d++; + }} + }} + + var votes = new Array(this.intercepts.length); + for (var i = 0, d = 0, l = this.nClasses; i < l; i++) {{ + for (var j = i + 1; j < l; j++) {{ + votes[d] = decisions[d] > 0 ? i : j; + d++; + }} + }} + + var amounts = new Array(this.nClasses).fill(0); + for (var i = 0, l = votes.length; i < l; i++) {{ + amounts[votes[i]] += 1; + }} + + var classVal = -1, classIdx = -1; + for (var i = 0, l = amounts.length; i < l; i++) {{ + if (amounts[i] > classVal) {{ + classVal = amounts[i]; + classIdx= i; + }} + }} + return this.classes[classIdx]; + + }} +}} \ No newline at end of file diff --git a/sklearn_porter/estimator/classifier/SVC/templates/js/multi.classes.txt b/sklearn_porter/estimator/classifier/SVC/templates/js/multi.classes.txt deleted file mode 100644 index 75e12b0b..00000000 --- a/sklearn_porter/estimator/classifier/SVC/templates/js/multi.classes.txt +++ /dev/null @@ -1,21 +0,0 @@ -var votes = new Array({0}); -for (i = 0, d = 0, l = {1}; i < l; i++) {{ - for (j = i + 1; j < l; j++) {{ - votes[d] = decisions[d] > 0 ? i : j; - d++; - }} -}} - -var amounts = new Array({1}).fill(0); -for (i = 0, l = {0}; i < l; i++) {{ - amounts[votes[i]] += 1; -}} - -var class_val = -1, class_idx = -1; -for (i = 0, l = {1}; i < l; i++) {{ - if (amounts[i] > class_val) {{ - class_val = amounts[i]; - class_idx = i; - }} -}} -return classes[class_idx]; diff --git a/sklearn_porter/estimator/classifier/SVC/templates/js/multi.decisions.txt b/sklearn_porter/estimator/classifier/SVC/templates/js/multi.decisions.txt deleted file mode 100644 index aea1a8a9..00000000 --- a/sklearn_porter/estimator/classifier/SVC/templates/js/multi.decisions.txt +++ /dev/null @@ -1,14 +0,0 @@ -var decisions = new Array({0}); -for (i = 0, d = 0, l = {1}; i < l; i++) {{ - for (j = i + 1; j < l; j++) {{ - var tmp = 0.; - for (k = starts[j]; k < ends[j]; k++) {{ - tmp += kernels[k] * coeffs[i][k]; - }} - for (k = starts[i]; k < ends[i]; k++) {{ - tmp += kernels[k] * coeffs[j - 1][k]; - }} - decisions[d] = tmp + inters[d]; - d++; - }} -}} diff --git a/sklearn_porter/estimator/classifier/SVC/templates/js/multi.kernel.linear.txt b/sklearn_porter/estimator/classifier/SVC/templates/js/multi.kernel.linear.txt deleted file mode 100644 index 1ce78f82..00000000 --- a/sklearn_porter/estimator/classifier/SVC/templates/js/multi.kernel.linear.txt +++ /dev/null @@ -1,11 +0,0 @@ - -// -var kernels = new Array({0}), - kernel; -for (i = 0; i < {0}; i++) {{ - kernel = 0.; - for (j = 0; j < {1}; j++) {{ - kernel += svs[i][j] * atts[j]; - }} - kernels[i] = kernel; -}} diff --git a/sklearn_porter/estimator/classifier/SVC/templates/js/multi.kernel.poly.txt b/sklearn_porter/estimator/classifier/SVC/templates/js/multi.kernel.poly.txt deleted file mode 100644 index 0f07d4b7..00000000 --- a/sklearn_porter/estimator/classifier/SVC/templates/js/multi.kernel.poly.txt +++ /dev/null @@ -1,11 +0,0 @@ - -// (y+r)^d -var kernels = new Array({0}), - kernel; -for (i = 0; i < {0}; i++) {{ - kernel = 0.; - for (j = 0; j < {1}; j++) {{ - kernel += svs[i][j] * atts[j]; - }} - kernels[i] = Math.pow(({2} * kernel) + {3}, {4}); -}} diff --git a/sklearn_porter/estimator/classifier/SVC/templates/js/multi.kernel.rbf.txt b/sklearn_porter/estimator/classifier/SVC/templates/js/multi.kernel.rbf.txt deleted file mode 100644 index 5fde553a..00000000 --- a/sklearn_porter/estimator/classifier/SVC/templates/js/multi.kernel.rbf.txt +++ /dev/null @@ -1,11 +0,0 @@ - -// exp(-y|x-x'|^2) -var kernels = new Array({0}), - kernel; -for (i = 0; i < {0}; i++) {{ - kernel = 0.; - for (j = 0; j < {1}; j++) {{ - kernel += Math.pow(svs[i][j] - atts[j], 2); - }} - kernels[i] = Math.exp(-{2} * kernel); -}} diff --git a/sklearn_porter/estimator/classifier/SVC/templates/js/multi.kernel.sigmoid.txt b/sklearn_porter/estimator/classifier/SVC/templates/js/multi.kernel.sigmoid.txt deleted file mode 100644 index e516484e..00000000 --- a/sklearn_porter/estimator/classifier/SVC/templates/js/multi.kernel.sigmoid.txt +++ /dev/null @@ -1,14 +0,0 @@ - -// Math.tanh polyfill: -Math.tanh=Math.tanh||function(a){{if(a===1/0)return 1;if(a===-(1/0))return-1;var b=Math.exp(2*a);return(b-1)/(b+1)}}; - -// tanh(y+r) -var kernels = new Array({0}).fill(0), - kernel; -for (i = 0; i < {0}; i++) {{ - kernel = 0.; - for (j = 0; j < {1}; j++) {{ - kernel += svs[i][j] * atts[j]; - }} - kernels[i] = Math.tanh(({2} * kernel) + {3}); -}} diff --git a/sklearn_porter/estimator/classifier/SVC/templates/js/starts.txt b/sklearn_porter/estimator/classifier/SVC/templates/js/starts.txt deleted file mode 100644 index 3babe11a..00000000 --- a/sklearn_porter/estimator/classifier/SVC/templates/js/starts.txt +++ /dev/null @@ -1,12 +0,0 @@ -var starts = new Array({0}); -for (i = 0; i < {0}; i++) {{ - if (i != 0) {{ - var start = 0; - for (j = 0; j < i; j++) {{ - start += n_svs[j]; - }} - starts[i] = start; - }} else {{ - starts[0] = 0; - }} -}}