Comparing version 1.0.2 to 1.0.3
@@ -1,1 +0,1 @@ | ||
var jssvm=jssvm||{};!function(t){t.small=function(){for(var t=.5,s=1*t+1;s>1;)s=1*(t/=2)+1;return 2*t*2},t.quickSort=function(s,i){t._quickSort(s,0,s.length-1,i)},t._quickSort=function(s,i,r,a){if(!(i>=r)){var h=t._partition(s,i,r,a);t._quickSort(s,i,h-1,a),t._quickSort(s,h+1,r,a)}},t._partition=function(s,i,r,a){for(var h=s[i],e=i,n=r+1;;){for(;a(h,s[++e])>0&&!(e>=r););for(;a(h,s[--n])<0&&!(n<=i););if(e>=n)break;t._exchange(s,e,n)}return t._exchange(s,i,n),n},t._exchange=function(t,s,i){var r=t[s];t[s]=t[i],t[i]=r},t.deltaStep=function(t){var s=Math.sqrt(this.small()),i=Math.max(1,Math.abs(t)),r=Math.max(0,Math.abs(s*i));return t<0&&(r=-r),r},t.dotProduct=function(t,s){for(var i=0,r=s.length,a=0;a<r;++a)i+=t[a]*s[a];return i},t.gaussian=function(s,i,r,a){for(var h=i.length,e=0,n=0;n<h;++n){var o=r[n];e+=i[n]*t._gaussian(s,o,a,h)}return e},t._gaussian=function(s,i,r,a){for(var h=[],e=0;e<a;++e)h.push(s[e]-i[e]);var n=t.dotProduct(h,h);return Math.exp(-n/(r*r))};var s=function(t){(t=t||{}).iterations||(t.iterations=1e3),t.alpha||(t.alpha=.01),t.C||(t.C=5),t.trace||(t.trace=!1),this.iterations=t.iterations,this.alpha=t.alpha,this.C=t.C,this.trace=t.trace};s.prototype.fit=function(t){this.dim=t[0].length;for(var s=t.length,i=[],r=[],a=0;a<s;++a){var h=t[a],e=[],n=h[h.length-1];e.push(1);for(var o=0;o<h.length-1;++o)e.push(h[o]);i.push(e),r.push(n)}this.theta=[];for(f=0;f<this.dim;++f)this.theta.push(0);for(var l=0;l<this.iterations;++l){for(var u=this.grad(i,r,this.theta),f=0;f<this.dim;++f)this.theta[f]=this.theta[f]-this.alpha*u[f];this.trace&&console.log("cost: "+this.cost(i,r,this.theta))}var c=this.transform(t);this.threshold=null;for(var s=t.length,a=0;a<s;++a)1==t[a][this.dim-1]&&(null==this.threshold||this.threshold>c[a])&&(this.threshold=c[a]);return{theta:this.theta,cost:this.cost(i,r,this.theta),threshold:this.threshold,config:{alpha:this.alpha,C:this.C,iterations:this.iterations,trace:this.trace}}},s.prototype.smallStep=function(s,i){return t.deltaStep(s[i])},s.prototype.grad=function(t,s,i){for(var r=[],a=this.cost(t,s,i),h=0;h<this.dim;++h){var e=this.smallStep(i,h),n=i[h];i[h]+=e;var o=this.cost(t,s,i);i[h]=n,r.push((o-a)/2)}return r},s.prototype.cost=function(s,i,r){for(var a=s.length,h=0,e=0;e<a;++e){var n=s[e],o=i[e];h+=this.C*(o*this.cost1(n,o,r)+(1-o)*this.cost0(n,o,r))}return h+=t.dotProduct(r,r)/2,h/=a},s.prototype.cost1=function(s,i,r){var a=t.dotProduct(s,r);return a>1?0:1-a},s.prototype.cost0=function(s,i,r){var a=t.dotProduct(s,r);return a<-1?0:1+a},s.prototype.transform=function(s){if(s[0].length){for(var i=[],r=0;r<s.length;++r){var a=this.transform(s[r]);i.push(a)}return i}var h=[];h.push(1);for(var e=0;e<s.length;++e)h.push(s[e]);return t.dotProduct(h,this.theta)},t.LinearSvm=s;var i=function(t){(t=t||{}).iterations||(t.iterations=1e3),t.alpha||(t.alpha=.01),t.C||(t.C=5),t.trace||(t.trace=!1),t.sigma||(t.sigma=1),this.iterations=t.iterations,this.alpha=t.alpha,this.C=t.C,this.trace=t.trace,this.sigma=t.sigma};i.prototype.fit=function(t){this.dim=t[0].length;for(var s=t.length,i=[],r=[],a=0;a<s;++a){var h=t[a],e=[],n=h[h.length-1];e.push(1);for(var o=0;o<h.length-1;++o)e.push(h[o]);i.push(e),r.push(n)}this.theta=[],this.L=[];for(f=0;f<this.dim;++f)this.theta.push(0),this.L.push(i[f]);for(var l=0;l<this.iterations;++l){for(var u=this.grad(i,r,this.theta),f=0;f<this.dim;++f)this.theta[f]=this.theta[f]-this.alpha*u[f];this.trace&&console.log("cost: "+this.cost(i,r,this.theta))}var c=this.transform(t);this.threshold=null;for(var s=t.length,a=0;a<s;++a)1==t[a][this.dim-1]&&(null==this.threshold||this.threshold>c[a])&&(this.threshold=c[a]);return{theta:this.theta,L:this.L,cost:this.cost(i,r,this.theta),threshold:this.threshold,config:{alpha:this.alpha,C:this.C,iterations:this.iterations,trace:this.trace,sigma:this.sigma}}},i.prototype.smallStep=function(s,i){return t.deltaStep(s[i])},i.prototype.grad=function(t,s,i){for(var r=[],a=this.cost(t,s,i),h=0;h<this.dim;++h){var e=this.smallStep(i,h),n=i[h];i[h]+=e;var o=this.cost(t,s,i);i[h]=n,r.push((o-a)/2)}return r},i.prototype.cost=function(s,i,r){for(var a=s.length,h=0,e=0;e<a;++e){var n=s[e],o=i[e];h+=this.C*(o*this.cost1(n,o,r)+(1-o)*this.cost0(n,o,r))}return h+=t.dotProduct(r,r)/2,h/=a},i.prototype.cost1=function(s,i,r){var a=t.gaussian(s,r,this.L,this.sigma);return a>1?0:1-a},i.prototype.cost0=function(s,i,r){var a=t.gaussian(s,r,this.L,this.sigma);return a<-1?0:1+a},i.prototype.transform=function(s){if(s[0].length){for(var i=[],r=0;r<s.length;++r){var a=this.transform(s[r]);i.push(a)}return i}var h=[];h.push(1);for(var e=1;e<this.dim;++e)h.push(s[e-1]);return t.gaussian(h,this.theta,this.L,this.sigma)},t.KernelSvm=i;var r=function(s){(s=s||{}).kernel||(s.kernel="linear"),s.sigma||(s.sigma=1),this.kernel=s.kernel,"linear"==s.kernel?this.classifier=new t.LinearSvm(s):"gaussian"==s.kernel?this.classifier=new t.KernelSvm(s):this.classifier=new t.LinearSvm(s)};r.prototype.fit=function(t){var s=this.classifier.fit(t);return s.kernel=this.kernel,s},r.prototype.transform=function(t){return this.classifier.transform(t)>this.classifier.threshold?1:0},t.BinarySvmClassifier=r;var a=function(t){(t=t||{}).alpha||(t.alpha=.01),t.iterations||(t.iterations=1e3),t.C||(t.C=5),t.kernel||(t.kernel="linear"),t.sigma||(t.sigma=1),this.alpha=t.alpha,this.C=t.C,this.iterations=t.iterations,this.sigma=t.sigma,this.kernel=t.kernel};a.prototype.fit=function(s,i){this.dim=s[0].length;var r=s.length;if(!i){i=[];for(f=0;f<r;++f){for(var a=!1,h=s[f][this.dim-1],e=0;e<i.length;++e)if(h==i[e]){a=!0;break}a||i.push(h)}}this.classes=i,this.classifiers={};for(var n={},o=0;o<this.classes.length;++o){var l=this.classes[o];"linear"==this.kernel?this.classifiers[l]=new t.LinearSvm({alpha:this.alpha,C:this.C,iterations:this.iterations}):"gaussian"==this.kernel?this.classifiers[l]=new t.KernelSvm({alpha:this.alpha,C:this.C,iterations:this.iterations,sigma:this.sigma}):this.classifiers[l]=new t.LinearSvm({alpha:this.alpha,C:this.C,iterations:this.iterations});for(var u=[],f=0;f<r;++f){for(var c=[],e=0;e<this.dim-1;++e)c.push(s[f][e]);c.push(s[f][this.dim-1]==l?1:0),u.push(c)}n[l]=this.classifiers[l].fit(u)}return n.kernel=this.kernel,n},a.prototype.transform=function(t){if(t[0].length){for(var s=[],i=0;i<t.length;++i){var r=this.transform(t[i]);s.push(r)}return s}for(var a=0,h="",e=0;e<this.classes.length;++e){var n,o=this.classes[e];a<=(n=this.classifiers[o].transform(t)-this.classifiers[o].threshold)&&(a=n,h=o)}return h},t.MultiClassSvmClassifier=a}(jssvm),module&&(module.exports=jssvm); | ||
var jssvm=jssvm||{};!function(t){t.small=function(){for(var t=.5,s=1*t+1;s>1;)s=1*(t/=2)+1;return 2*t*2},t.quickSort=function(s,i){t._quickSort(s,0,s.length-1,i)},t._quickSort=function(s,i,r,a){if(!(i>=r)){var h=t._partition(s,i,r,a);t._quickSort(s,i,h-1,a),t._quickSort(s,h+1,r,a)}},t._partition=function(s,i,r,a){for(var h=s[i],e=i,n=r+1;;){for(;a(h,s[++e])>0&&!(e>=r););for(;a(h,s[--n])<0&&!(n<=i););if(e>=n)break;t._exchange(s,e,n)}return t._exchange(s,i,n),n},t._exchange=function(t,s,i){var r=t[s];t[s]=t[i],t[i]=r},t.deltaStep=function(t){var s=Math.sqrt(this.small()),i=Math.max(1,Math.abs(t)),r=Math.max(0,Math.abs(s*i));return t<0&&(r=-r),r},t.dotProduct=function(t,s){for(var i=0,r=s.length,a=0;a<r;++a)i+=t[a]*s[a];return i},t.gaussian=function(s,i,r,a){for(var h=i.length,e=0,n=0;n<h;++n){var o=r[n];e+=i[n]*t._gaussian(s,o,a,h)}return e},t._gaussian=function(s,i,r,a){for(var h=[],e=0;e<a;++e)h.push(s[e]-i[e]);var n=t.dotProduct(h,h);return Math.exp(-n/(r*r))};var s=function(t){(t=t||{}).iterations||(t.iterations=1e3),t.alpha||(t.alpha=.01),t.C||(t.C=5),t.trace||(t.trace=!1),this.iterations=t.iterations,this.alpha=t.alpha,this.C=t.C,this.trace=t.trace};s.prototype.fit=function(t){this.dim=t[0].length;for(var s=t.length,i=[],r=[],a=0;a<s;++a){var h=t[a],e=[],n=h[h.length-1];e.push(1);for(var o=0;o<h.length-1;++o)e.push(h[o]);i.push(e),r.push(n)}this.theta=[];for(f=0;f<this.dim;++f)this.theta.push(0);for(var l=0;l<this.iterations;++l){for(var u=this.grad(i,r,this.theta),f=0;f<this.dim;++f)this.theta[f]=this.theta[f]-this.alpha*u[f];this.trace&&console.log("cost: "+this.cost(i,r,this.theta))}var c=this.transform(t);this.threshold=null;for(var s=t.length,a=0;a<s;++a)1==t[a][this.dim-1]&&(null==this.threshold||this.threshold>c[a])&&(this.threshold=c[a]);return{theta:this.theta,cost:this.cost(i,r,this.theta),threshold:this.threshold,config:{alpha:this.alpha,C:this.C,iterations:this.iterations,trace:this.trace}}},s.prototype.smallStep=function(s,i){return t.deltaStep(s[i])},s.prototype.grad=function(t,s,i){for(var r=[],a=this.cost(t,s,i),h=0;h<this.dim;++h){var e=this.smallStep(i,h),n=i[h];i[h]+=e;var o=this.cost(t,s,i);i[h]=n,r.push((o-a)/2)}return r},s.prototype.cost=function(s,i,r){for(var a=s.length,h=0,e=0;e<a;++e){var n=s[e],o=i[e];h+=this.C*(o*this.cost1(n,o,r)+(1-o)*this.cost0(n,o,r))}return h+=t.dotProduct(r,r)/2,h/=a},s.prototype.cost1=function(s,i,r){var a=t.dotProduct(s,r);return a>1?0:1-a},s.prototype.cost0=function(s,i,r){var a=t.dotProduct(s,r);return a<-1?0:1+a},s.prototype.transform=function(s){if(s[0].length){for(var i=[],r=0;r<s.length;++r){var a=this.transform(s[r]);i.push(a)}return i}var h=[];h.push(1);for(var e=0;e<s.length;++e)h.push(s[e]);return t.dotProduct(h,this.theta)},t.LinearSvm=s;var i=function(t){(t=t||{}).iterations||(t.iterations=1e3),t.alpha||(t.alpha=.01),t.C||(t.C=5),t.trace||(t.trace=!1),t.sigma||(t.sigma=1),this.iterations=t.iterations,this.alpha=t.alpha,this.C=t.C,this.trace=t.trace,this.sigma=t.sigma};i.prototype.fit=function(t){this.dim=t[0].length;for(var s=t.length,i=[],r=[],a=0;a<s;++a){var h=t[a],e=[],n=h[h.length-1];e.push(1);for(var o=0;o<h.length-1;++o)e.push(h[o]);i.push(e),r.push(n)}this.theta=[],this.L=[];for(f=0;f<this.dim;++f)this.theta.push(0),this.L.push(i[f]);for(var l=0;l<this.iterations;++l){for(var u=this.grad(i,r,this.theta),f=0;f<this.dim;++f)this.theta[f]=this.theta[f]-this.alpha*u[f];this.trace&&console.log("cost: "+this.cost(i,r,this.theta))}var c=this.transform(t);this.threshold=null;for(var s=t.length,a=0;a<s;++a)1==t[a][this.dim-1]&&(null==this.threshold||this.threshold>c[a])&&(this.threshold=c[a]);return{theta:this.theta,L:this.L,cost:this.cost(i,r,this.theta),threshold:this.threshold,config:{alpha:this.alpha,C:this.C,iterations:this.iterations,trace:this.trace,sigma:this.sigma}}},i.prototype.smallStep=function(s,i){return t.deltaStep(s[i])},i.prototype.grad=function(t,s,i){for(var r=[],a=this.cost(t,s,i),h=0;h<this.dim;++h){var e=this.smallStep(i,h),n=i[h];i[h]+=e;var o=this.cost(t,s,i);i[h]=n,r.push((o-a)/2)}return r},i.prototype.cost=function(s,i,r){for(var a=s.length,h=0,e=0;e<a;++e){var n=s[e],o=i[e];h+=this.C*(o*this.cost1(n,o,r)+(1-o)*this.cost0(n,o,r))}return h+=t.dotProduct(r,r)/2,h/=a},i.prototype.cost1=function(s,i,r){var a=t.gaussian(s,r,this.L,this.sigma);return a>1?0:1-a},i.prototype.cost0=function(s,i,r){var a=t.gaussian(s,r,this.L,this.sigma);return a<-1?0:1+a},i.prototype.transform=function(s){if(s[0].length){for(var i=[],r=0;r<s.length;++r){var a=this.transform(s[r]);i.push(a)}return i}var h=[];h.push(1);for(var e=1;e<this.dim;++e)h.push(s[e-1]);return t.gaussian(h,this.theta,this.L,this.sigma)},t.KernelSvm=i;var r=function(s){(s=s||{}).kernel||(s.kernel="linear"),s.sigma||(s.sigma=1),this.kernel=s.kernel,"linear"==s.kernel?this.classifier=new t.LinearSvm(s):"gaussian"==s.kernel?this.classifier=new t.KernelSvm(s):this.classifier=new t.LinearSvm(s)};r.prototype.fit=function(t){var s=this.classifier.fit(t);return s.kernel=this.kernel,s},r.prototype.transform=function(t){return this.classifier.transform(t)>this.classifier.threshold?1:0},t.BinarySvmClassifier=r;var a=function(t){(t=t||{}).alpha||(t.alpha=.01),t.iterations||(t.iterations=1e3),t.C||(t.C=5),t.kernel||(t.kernel="linear"),t.sigma||(t.sigma=1),this.alpha=t.alpha,this.C=t.C,this.iterations=t.iterations,this.sigma=t.sigma,this.kernel=t.kernel};a.prototype.fit=function(s,i){this.dim=s[0].length;var r=s.length;if(!i){i=[];for(f=0;f<r;++f){for(var a=!1,h=s[f][this.dim-1],e=0;e<i.length;++e)if(h==i[e]){a=!0;break}a||i.push(h)}}this.classes=i,this.classifiers={};for(var n={},o=0;o<this.classes.length;++o){var l=this.classes[o];"linear"==this.kernel?this.classifiers[l]=new t.LinearSvm({alpha:this.alpha,C:this.C,iterations:this.iterations}):"gaussian"==this.kernel?this.classifiers[l]=new t.KernelSvm({alpha:this.alpha,C:this.C,iterations:this.iterations,sigma:this.sigma}):this.classifiers[l]=new t.LinearSvm({alpha:this.alpha,C:this.C,iterations:this.iterations});for(var u=[],f=0;f<r;++f){for(var c=[],e=0;e<this.dim-1;++e)c.push(s[f][e]);c.push(s[f][this.dim-1]==l?1:0),u.push(c)}n[l]=this.classifiers[l].fit(u)}return n.kernel=this.kernel,n},a.prototype.transform=function(t){if(t[0].length){for(var s=[],i=0;i<t.length;++i){var r=this.transform(t[i]);s.push(r)}return s}for(var a=0,h="",e=0;e<this.classes.length;++e){var n,o=this.classes[e];a<=(n=this.classifiers[o].transform(t)-this.classifiers[o].threshold)&&(a=n,h=o)}return h},t.MultiClassSvmClassifier=a}(jssvm);var module=module||{};module&&(module.exports=jssvm); |
{ | ||
"name": "js-svm", | ||
"version": "1.0.2", | ||
"version": "1.0.3", | ||
"description": "Package implements linear svm and kernel svm that supports binary and mult-class classification", | ||
@@ -5,0 +5,0 @@ "author": "Xianshun Chen", |
@@ -576,4 +576,5 @@ var jssvm = jssvm || {}; | ||
var module = module || {}; | ||
if(module) { | ||
module.exports = jssvm; | ||
} |
40932
748