use of org.apache.ignite.ml.math.distances.EuclideanDistance in project ignite by apache.
the class IgniteFuzzyCMeansDistributedClustererBenchmark method test.
/**
* {@inheritDoc}
*/
@Override
public boolean test(Map<Object, Object> ctx) throws Exception {
// Create IgniteThread, we must work with SparseDistributedMatrix inside IgniteThread
// because we create ignite cache internally.
IgniteThread igniteThread = new IgniteThread(ignite.configuration().getIgniteInstanceName(), this.getClass().getSimpleName(), new Runnable() {
/**
* {@inheritDoc}
*/
@Override
public void run() {
// IMPL NOTE originally taken from FuzzyCMeansExample.
// Distance measure that computes distance between two points.
DistanceMeasure distanceMeasure = new EuclideanDistance();
// "Fuzziness" - specific constant that is used in membership calculation (1.0+-eps ~ K-Means).
double exponentialWeight = 2.0;
// Condition that indicated when algorithm must stop.
// In this example algorithm stops if memberships have changed insignificantly.
BaseFuzzyCMeansClusterer.StopCondition stopCond = BaseFuzzyCMeansClusterer.StopCondition.STABLE_MEMBERSHIPS;
// Maximum difference between new and old membership values with which algorithm will continue to work.
double maxDelta = 0.01;
// The maximum number of FCM iterations.
int maxIterations = 50;
// Number of steps of primary centers selection (more steps more candidates).
int initializationSteps = 2;
// Number of K-Means iteration that is used to choose required number of primary centers from candidates.
int kMeansMaxIterations = 50;
// Create new distributed clusterer with parameters described above.
FuzzyCMeansDistributedClusterer clusterer = new FuzzyCMeansDistributedClusterer(distanceMeasure, exponentialWeight, stopCond, maxDelta, maxIterations, null, initializationSteps, kMeansMaxIterations);
// Create sample data.
double[][] points = shuffle((int) (DataChanger.next()));
// Initialize matrix of data points. Each row contains one point.
int rows = points.length;
int cols = points[0].length;
// Create the matrix that contains sample points.
SparseDistributedMatrix pntMatrix = new SparseDistributedMatrix(rows, cols, StorageConstants.ROW_STORAGE_MODE, StorageConstants.RANDOM_ACCESS_MODE);
// Store points into matrix.
pntMatrix.assign(points);
// Call clusterization method with some number of centers.
// It returns model that can predict results for new points.
int numCenters = 4;
FuzzyCMeansModel mdl = clusterer.cluster(pntMatrix, numCenters);
// Get centers of clusters that is computed by Fuzzy C-Means algorithm.
mdl.centers();
pntMatrix.destroy();
}
});
igniteThread.start();
igniteThread.join();
return true;
}
use of org.apache.ignite.ml.math.distances.EuclideanDistance in project ignite by apache.
the class IgniteFuzzyCMeansLocalClustererBenchmark method test.
/**
* {@inheritDoc}
*/
@Override
public boolean test(Map<Object, Object> ctx) throws Exception {
// IMPL NOTE originally taken from FuzzyLocalCMeansExample.
// Distance measure that computes distance between two points.
DistanceMeasure distanceMeasure = new EuclideanDistance();
// "Fuzziness" - specific constant that is used in membership calculation (1.0+-eps ~ K-Means).
double exponentialWeight = 2.0;
// Condition that indicated when algorithm must stop.
// In this example algorithm stops if memberships have changed insignificantly.
BaseFuzzyCMeansClusterer.StopCondition stopCond = BaseFuzzyCMeansClusterer.StopCondition.STABLE_MEMBERSHIPS;
// Maximum difference between new and old membership values with which algorithm will continue to work.
double maxDelta = 0.01;
// The maximum number of FCM iterations.
int maxIterations = 50;
// Create new local clusterer with parameters described above.
FuzzyCMeansLocalClusterer clusterer = new FuzzyCMeansLocalClusterer(distanceMeasure, exponentialWeight, stopCond, maxDelta, maxIterations, null);
// Create sample data.
double[][] points = shuffle((int) (DataChanger.next()));
// Create the matrix that contains sample points.
DenseLocalOnHeapMatrix pntMatrix = new DenseLocalOnHeapMatrix(points);
// Call clusterization method with some number of centers.
// It returns model that can predict results for new points.
int numCenters = 4;
FuzzyCMeansModel mdl = clusterer.cluster(pntMatrix, numCenters);
// Get centers of clusters that is computed by Fuzzy C-Means algorithm.
mdl.centers();
return true;
}
use of org.apache.ignite.ml.math.distances.EuclideanDistance in project ignite by apache.
the class KNNClassificationTest method testBinaryClassificationWithSmallestKTest.
/**
*/
public void testBinaryClassificationWithSmallestKTest() {
IgniteUtils.setCurrentIgniteName(ignite.configuration().getIgniteInstanceName());
double[][] mtx = new double[][] { { 1.0, 1.0 }, { 1.0, 2.0 }, { 2.0, 1.0 }, { -1.0, -1.0 }, { -1.0, -2.0 }, { -2.0, -1.0 } };
double[] lbs = new double[] { 1.0, 1.0, 1.0, 2.0, 2.0, 2.0 };
LabeledDataset training = new LabeledDataset(mtx, lbs);
KNNModel knnMdl = new KNNModel(1, new EuclideanDistance(), KNNStrategy.SIMPLE, training);
Vector firstVector = new DenseLocalOnHeapVector(new double[] { 2.0, 2.0 });
assertEquals(knnMdl.apply(firstVector), 1.0);
Vector secondVector = new DenseLocalOnHeapVector(new double[] { -2.0, -2.0 });
assertEquals(knnMdl.apply(secondVector), 2.0);
}
use of org.apache.ignite.ml.math.distances.EuclideanDistance in project ignite by apache.
the class KNNClassificationTest method testBinaryClassificationFarPointsWithSimpleStrategy.
/**
*/
public void testBinaryClassificationFarPointsWithSimpleStrategy() {
IgniteUtils.setCurrentIgniteName(ignite.configuration().getIgniteInstanceName());
double[][] mtx = new double[][] { { 10.0, 10.0 }, { 10.0, 20.0 }, { -1, -1 }, { -2, -2 }, { -1.0, -2.0 }, { -2.0, -1.0 } };
double[] lbs = new double[] { 1.0, 1.0, 1.0, 2.0, 2.0, 2.0 };
LabeledDataset training = new LabeledDataset(mtx, lbs);
KNNModel knnMdl = new KNNModel(3, new EuclideanDistance(), KNNStrategy.SIMPLE, training);
Vector vector = new DenseLocalOnHeapVector(new double[] { -1.01, -1.01 });
assertEquals(knnMdl.apply(vector), 2.0);
}
use of org.apache.ignite.ml.math.distances.EuclideanDistance in project ignite by apache.
the class KNNClassificationTest method testLargeKValue.
/**
*/
public void testLargeKValue() {
IgniteUtils.setCurrentIgniteName(ignite.configuration().getIgniteInstanceName());
double[][] mtx = new double[][] { { 10.0, 10.0 }, { 10.0, 20.0 }, { -1, -1 }, { -2, -2 }, { -1.0, -2.0 }, { -2.0, -1.0 } };
double[] lbs = new double[] { 1.0, 1.0, 1.0, 2.0, 2.0, 2.0 };
LabeledDataset training = new LabeledDataset(mtx, lbs);
try {
new KNNModel(7, new EuclideanDistance(), KNNStrategy.SIMPLE, training);
fail("SmallTrainingDatasetSizeException");
} catch (SmallTrainingDatasetSizeException e) {
return;
}
fail("SmallTrainingDatasetSizeException");
}
Aggregations