use of smile.math.distance.EuclideanDistance in project smile by haifengl.
the class ValidationTest method testTest_3args_2.
/**
* Test of test method, of class Validation.
*/
@Test
public void testTest_3args_2() {
System.out.println("test");
ArffParser parser = new ArffParser();
parser.setResponseIndex(6);
try {
AttributeDataset data = parser.parse(smile.data.parser.IOUtils.getTestDataFile("weka/cpu.arff"));
double[] datay = data.toArray(new double[data.size()]);
double[][] datax = data.toArray(new double[data.size()][]);
Math.standardize(datax);
int n = datax.length;
int m = 3 * n / 4;
double[][] x = new double[m][];
double[] y = new double[m];
double[][] testx = new double[n - m][];
double[] testy = new double[n - m];
int[] index = Math.permutate(n);
for (int i = 0; i < m; i++) {
x[i] = datax[index[i]];
y[i] = datay[index[i]];
}
for (int i = m; i < n; i++) {
testx[i - m] = datax[index[i]];
testy[i - m] = datay[index[i]];
}
double[][] centers = new double[20][];
RadialBasisFunction[] rbf = SmileUtils.learnGaussianRadialBasis(x, centers, 2);
RBFNetwork<double[]> rkhs = new RBFNetwork<>(x, y, new EuclideanDistance(), rbf, centers);
double rmse = Validation.test(rkhs, testx, testy);
System.out.println("RMSE = " + rmse);
} catch (Exception ex) {
System.err.println(ex);
}
}
use of smile.math.distance.EuclideanDistance in project smile by haifengl.
the class LinearSearchSpeedTest method testUSPS.
/**
* Test of nearest method, of class LinearSearch.
*/
@Test
public void testUSPS() {
System.out.println("USPS");
double[][] x = null;
double[][] testx = null;
long start = System.currentTimeMillis();
DelimitedTextParser parser = new DelimitedTextParser();
parser.setResponseIndex(new NominalAttribute("class"), 0);
try {
AttributeDataset train = parser.parse("USPS Train", smile.data.parser.IOUtils.getTestDataFile("usps/zip.train"));
AttributeDataset test = parser.parse("USPS Test", smile.data.parser.IOUtils.getTestDataFile("usps/zip.test"));
x = train.toArray(new double[train.size()][]);
testx = test.toArray(new double[test.size()][]);
} catch (Exception ex) {
System.err.println(ex);
}
double time = (System.currentTimeMillis() - start) / 1000.0;
System.out.format("Loading USPS: %.2fs%n", time);
LinearSearch<double[]> naive = new LinearSearch<>(x, new EuclideanDistance());
start = System.currentTimeMillis();
for (int i = 0; i < testx.length; i++) {
naive.nearest(testx[i]);
}
time = (System.currentTimeMillis() - start) / 1000.0;
System.out.format("NN: %.2fs%n", time);
start = System.currentTimeMillis();
for (int i = 0; i < testx.length; i++) {
naive.knn(testx[i], 10);
}
time = (System.currentTimeMillis() - start) / 1000.0;
System.out.format("10-NN: %.2fs%n", time);
start = System.currentTimeMillis();
List<Neighbor<double[], double[]>> n = new ArrayList<>();
for (int i = 0; i < testx.length; i++) {
naive.range(testx[i], 8.0, n);
n.clear();
}
time = (System.currentTimeMillis() - start) / 1000.0;
System.out.format("Range: %.2fs%n", time);
}
use of smile.math.distance.EuclideanDistance in project smile by haifengl.
the class MPLSHSpeedTest method testUSPS.
/**
* Test of nearest method, of class KDTree.
*/
@Test
public void testUSPS() {
System.out.println("USPS");
double[][] x = null;
double[][] testx = null;
long start = System.currentTimeMillis();
DelimitedTextParser parser = new DelimitedTextParser();
parser.setResponseIndex(new NominalAttribute("class"), 0);
try {
AttributeDataset train = parser.parse("USPS Train", smile.data.parser.IOUtils.getTestDataFile("usps/zip.train"));
AttributeDataset test = parser.parse("USPS Test", smile.data.parser.IOUtils.getTestDataFile("usps/zip.test"));
x = train.toArray(new double[train.size()][]);
testx = test.toArray(new double[test.size()][]);
} catch (Exception ex) {
System.err.println(ex);
}
double time = (System.currentTimeMillis() - start) / 1000.0;
System.out.format("Loading USPS: %.2fs%n", time);
start = System.currentTimeMillis();
MPLSH<double[]> lsh = new MPLSH<>(256, 100, 3, 4.0);
for (double[] xi : x) {
lsh.put(xi, xi);
}
double[][] train = new double[500][];
int[] index = Math.permutate(x.length);
for (int i = 0; i < train.length; i++) {
train[i] = x[index[i]];
}
LinearSearch<double[]> naive = new LinearSearch<>(x, new EuclideanDistance());
lsh.learn(naive, train, 8.0);
time = (System.currentTimeMillis() - start) / 1000.0;
System.out.format("Building LSH: %.2fs%n", time);
start = System.currentTimeMillis();
for (int i = 0; i < testx.length; i++) {
lsh.nearest(testx[i]);
}
time = (System.currentTimeMillis() - start) / 1000.0;
System.out.format("NN: %.2fs%n", time);
start = System.currentTimeMillis();
for (int i = 0; i < testx.length; i++) {
lsh.knn(testx[i], 10);
}
time = (System.currentTimeMillis() - start) / 1000.0;
System.out.format("10-NN: %.2fs%n", time);
start = System.currentTimeMillis();
List<Neighbor<double[], double[]>> n = new ArrayList<>();
for (int i = 0; i < testx.length; i++) {
lsh.range(testx[i], 8.0, n);
n.clear();
}
time = (System.currentTimeMillis() - start) / 1000.0;
System.out.format("Range: %.2fs%n", time);
}
use of smile.math.distance.EuclideanDistance in project smile by haifengl.
the class RBFNetworkTest method testCPU.
/**
* Test of learn method, of class RBFNetwork.
*/
@Test
public void testCPU() {
System.out.println("CPU");
ArffParser parser = new ArffParser();
parser.setResponseIndex(6);
try {
AttributeDataset data = parser.parse(smile.data.parser.IOUtils.getTestDataFile("weka/cpu.arff"));
double[] datay = data.toArray(new double[data.size()]);
double[][] datax = data.toArray(new double[data.size()][]);
Math.standardize(datax);
int n = datax.length;
int k = 10;
CrossValidation cv = new CrossValidation(n, k);
double rss = 0.0;
for (int i = 0; i < k; i++) {
double[][] trainx = Math.slice(datax, cv.train[i]);
double[] trainy = Math.slice(datay, cv.train[i]);
double[][] testx = Math.slice(datax, cv.test[i]);
double[] testy = Math.slice(datay, cv.test[i]);
double[][] centers = new double[20][];
RadialBasisFunction[] basis = SmileUtils.learnGaussianRadialBasis(trainx, centers, 5.0);
RBFNetwork<double[]> rbf = new RBFNetwork<>(trainx, trainy, new EuclideanDistance(), basis, centers);
for (int j = 0; j < testx.length; j++) {
double r = testy[j] - rbf.predict(testx[j]);
rss += r * r;
}
}
System.out.println("10-CV MSE = " + rss / n);
} catch (Exception ex) {
System.err.println(ex);
}
}
use of smile.math.distance.EuclideanDistance in project smile by haifengl.
the class RBFNetworkTest method test2DPlanes.
/**
* Test of learn method, of class RBFNetwork.
*/
@Test
public void test2DPlanes() {
System.out.println("2dplanes");
ArffParser parser = new ArffParser();
parser.setResponseIndex(10);
try {
AttributeDataset data = parser.parse(smile.data.parser.IOUtils.getTestDataFile("weka/regression/2dplanes.arff"));
double[] datay = data.toArray(new double[data.size()]);
double[][] datax = data.toArray(new double[data.size()][]);
//Math.normalize(datax);
int n = datax.length;
int k = 10;
CrossValidation cv = new CrossValidation(n, k);
double rss = 0.0;
for (int i = 0; i < k; i++) {
double[][] trainx = Math.slice(datax, cv.train[i]);
double[] trainy = Math.slice(datay, cv.train[i]);
double[][] testx = Math.slice(datax, cv.test[i]);
double[] testy = Math.slice(datay, cv.test[i]);
double[][] centers = new double[20][];
RadialBasisFunction[] basis = SmileUtils.learnGaussianRadialBasis(trainx, centers, 5.0);
RBFNetwork<double[]> rbf = new RBFNetwork<>(trainx, trainy, new EuclideanDistance(), basis, centers);
for (int j = 0; j < testx.length; j++) {
double r = testy[j] - rbf.predict(testx[j]);
rss += r * r;
}
}
System.out.println("10-CV MSE = " + rss / n);
} catch (Exception ex) {
System.err.println(ex);
}
}
Aggregations