@@ -0,0 +1,2487 @@
+/*k-means clustering*/%0Avar Kmeans=(function namespace()%7B%0A    function init(k,data,attributes,initMethod)%7B%0A        config.k=k;%0A        config.data=data;%0A        config.attributes=attributes;%0A        config.groups.length=k;%0A        for(var i=0;i%3Ck;i++)%7B%0A            config.groups%5Bi%5D=%5B%5D;%0A        %7D%0A        config.initMethod=initMethod%7C%7C0;%0A    %7D%0A    /*PublicMethod*/%0A    init.prototype.initialize=function(centroid)%7B%0A        if(config.initMethod==init.initOption.Assign)%7B%0A            config.centroid=centroid;%0A        %7D%0A    %7D;%0A    init.prototype.assignment=function()%7B%0A        for(var i=0;i%3Cconfig.data.length;i++)%7B%0A            var min=Infinity;%0A            var minj=-1;%0A            for(var j=0;j%3Cconfig.k;j++)%7B%0A                var d=getDistance(config.data%5Bi%5D,config.data%5Bconfig.centroid%5Bj%5D%5D);%0A                if(d%3Cmin)%7B%0A                    min=d;%0A                    minj=j;%0A                %7D%0A            %7D%0A            config.groups%5Bminj%5D.push(i);%0A        %7D%0A    %7D;%0A    init.prototype.update=function()%7B%0A        config.oldCentroid=config.centroid.slice();%0A        config.centroid.length=0;%0A        config.centroid.length=config.k;%0A        //each group%0A        for(var i=0;i%3Cconfig.k;i++)%7B%0A            var mean=%7B%7D;%0A            //each attribute%0A            for(var j=0;j%3Cconfig.attributes.length;j++)%7B%0A                var sum=0;%0A                for(var m=0;m%3Cconfig.groups%5Bi%5D.length;m++)%7B%0A                    sum+=config.data%5Bconfig.groups%5Bi%5D%5Bm%5D%5D%5Bconfig.attributes%5Bj%5D%5D;%0A                %7D%0A                sum/=config.attributes.length;%0A                mean%5Bconfig.attributes%5Bj%5D%5D=sum;%0A            %7D%0A            var min=Infinity;%0A            var minj=-1;%0A            for(var j=0;j%3Cconfig.data.length;j++)%7B%0A                var d=getDistance(mean,config.data%5Bj%5D);%0A                if(d%3Cmin)%7B%0A                    min=d;%0A                    minj=j;%0A                %7D%0A            %7D%0A            config.centroid%5Bi%5D=minj;%0A        %7D%0A    %7D;%0A    /*PrivateMethod*/%0A    function getDistance(a,b)%7B%0A        var sum=0;%0A        for(var i=0;i%3Cconfig.attributes.length;i++)%7B%0A            sum+=Math.pow(a%5Bconfig.attributes%5Bi%5D%5D-b%5Bconfig.attributes%5Bi%5D%5D,2);%0A        %7D%0A        return sum;%0A    %7D%0A    /*PublicAttribute*/%0A    init.initOption=%7B%0A        Assign:0,%0A        Forgy:1,%0A        RandomPartition:2,%0A    %7D;%0A    /*PrivateAttribute*/%0A    var config=%7B%0A        k:0,%0A        data:%5B%5D,%0A        attributes:%5B%5D,%0A        groups:%5B%5D,%0A        oldCentroid:%5B%5D,%0A        centroid:%5B%5D,%0A        initMethod:-1,%0A    %7D;%0A    return init;%0A%7D());

update k-means