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