updated super simple examples with comments and new interface

nix
Pierre Alexandre Tremblay 6 years ago
parent 1225b37714
commit fc0f762a3d

@ -13,7 +13,7 @@ Routine{
/*** KDTREE ***/ /*** KDTREE ***/
~tree = FluidKDTree.new(s) ~tree = FluidKDTree.new(s)
~tree.index(~ds,action:{"Done indexing".postln}) ~tree.fit(~ds,action:{"Done indexing".postln})
k = 5; //play with this k = 5; //play with this
( (
@ -32,6 +32,7 @@ Routine{
~kmeans = FluidKMeans.new(s) ~kmeans = FluidKMeans.new(s)
~nClusters = 4; //play with this ~nClusters = 4; //play with this
~kmeans.fit(~ds,~nClusters,100,action:{"Done fitting".postln}) ~kmeans.fit(~ds,~nClusters,100,action:{"Done fitting".postln})
( (
Routine{ Routine{
10.do{|i| 10.do{|i|
@ -45,6 +46,7 @@ Routine{
~labels = FluidLabelSet(s,\simple1label); ~labels = FluidLabelSet(s,\simple1label);
~kmeans.predict(~ds,~labels, {|x| ("Size of each cluster" + x).postln}) ~kmeans.predict(~ds,~labels, {|x| ("Size of each cluster" + x).postln})
( (
Routine{ Routine{
var n; var n;

@ -15,15 +15,15 @@ Routine{
/*** KDTREE ***/ /*** KDTREE ***/
~tree = FluidKDTree.new(s) ~tree = FluidKDTree.new(s)
~tree.index(~ds,action:{"Done indexing".postln}) ~tree.fit(~ds,action:{"Done indexing".postln})
k = 5; //play with this k = 5; //play with this
( (
Routine{ Routine{
10.do{|i| 10.do{|i|
~point.set(0,i*10); ~point.set(0,i*2);
s.sync; s.sync;
("Neighbours for point" + (i*10)).postln; ("Neighbours for point" + (i*2)).postln;
~tree.kNearest(~point, k, {|x| ("Labels:" + x).postln}); ~tree.kNearest(~point, k, {|x| ("Labels:" + x).postln});
~tree.kNearestDist(~point,k,{|x| ("Distances:" + x).postln}) ~tree.kNearestDist(~point,k,{|x| ("Distances:" + x).postln})
} }

@ -1,46 +1,63 @@
s.reboot s.reboot
~urn = { |n=31416, min=0,max=31415| (min..max).scramble.keep(n) }; ~urn = { |n=31416, min=0,max=31415| (min..max).scramble.keep(n) };
// creates 200 indices, then values of the output of a fundion with a predictable shape of a sinewave
n = 200 n = 200
~idx = ~urn.value(n) ~idx = ~urn.value(n)
~data = n.collect{|i|sin(~idx[i]/5000)} ~data = n.collect{|i|sin(~idx[i]/5000)}
// creates the dataset with these associated indices and values
( (
~simpleInput = FluidDataSet(s,\simpleInput,1); ~simpleInput = FluidDataSet(s,\simpleInput,1);
~simpleOutput = FluidDataSet(s,\simpleOutput,1); ~simpleOutput = FluidDataSet(s,\simpleOutput,1);
b = Buffer.alloc(s,1,1); b = Buffer.alloc(s,1,1);
~mappingviz = Buffer.alloc(s,31416,1); ~mappingviz = Buffer.alloc(s,512);
) )
( (
Routine{ Routine{
n.do{|i| n.do{|i|
b.set(0,~idx[i]); b.set(0,~idx[i]);
s.sync; s.sync;
~simpleInput.addPoint(i.asString,b,{("Added Input" + i).postln}); ~simpleInput.addPoint(i.asString,b,{("Added Input" + i).postln});
b.set(0,~data[i]); b.set(0,~data[i]);
s.sync; s.sync;
~simpleOutput.addPoint(i.asString,b,{("Added Output" + i).postln}); ~simpleOutput.addPoint(i.asString,b,{("Added Output" + i).postln});
~mappingviz.set(~idx[i].asInt,~data[i]) ~mappingviz.set((~idx[i]/61).asInt,~data[i])
} }
}.play }.play
) )
(
~simpleInput.clear; //look at the seeing material
~simpleOutput.clear;
)
3%2
~mappingviz.plot(minval:-1,maxval:1) ~mappingviz.plot(minval:-1,maxval:1)
~mappingresult = Buffer.alloc(s,31416,1); //create a buffer to query
~mappingresult = Buffer.alloc(s,512);
//make the process then fit the data
~knn = FluidKNN(s) ~knn = FluidKNN(s)
~knn.index(~simpleInput,action:{"index done".postln}) ~knn.fit(~simpleInput,action:{"fitting done".postln})
// query 512 points along the line (slow because of all that sync'ing)
( (
k = 1; // change to see how many points the system uses to regress
Routine{
512.do{|i|
b.set(0,i*61);
s.sync;
~knn.regressPoint(b,~simpleOutput,k,action:{|d|~mappingresult.set(i,d);});
s.sync;
i.postln;
}
}.play
)
512.do{|i| // look at the interpolated values
b.set(0,i); ~mappingresult.plot
~knn.regress(b,~simpleOutput,1,action:{|d|~mappingresult.set(i,d)});
// if(i%512 == 0, {i.postln; s.sync},{}); // clears both datasets
} (
~simpleInput.clear;
~simpleOutput.clear;
) )
Loading…
Cancel
Save