package ids.test;
import ids.clustering.algorithm.HMRFKmeans;
import ids.clustering.algorithm.HMRFKmeansParams;
import ids.clustering.model.Distance;
import ids.clustering.utils.ClusterValidation;
import ids.utils.CommonUtils;
public class TestHMRFKmeans {
// data set
private static double[][] data;
private static double[][] cdata;
private static int n = 0;
private static int dim = 0;
private static int k = 0;
// utilities
private static CommonUtils utils = new CommonUtils(true);
// constraints
private static double[][] constraints;
public static void main(String[] args) {
System.out.println("Start testing HMRF-Kmeans");
// test find unique function from common utils
//TestUnique();
// cluster it with HMRF-Kmeans
//TestBasicKMEANS();
// cluster it with HMRF-Kmeans with constraints
TestConstraints();
// cluster categorical part of Heart data set
//TestCategoricalClustering();
}
public static void TestCategoricalClustering() {
cdata = getCategoricalData();
HMRFKmeansParams par = new HMRFKmeansParams();
par.distanceFunction = Distance.MATCH;
HMRFKmeans kmeans = new HMRFKmeans(cdata, 2, par);
kmeans.cluster();
// find db index
ClusterValidation valid = new ClusterValidation();
double db = valid.findDBIndex(cdata, kmeans.getIDX(), kmeans.getCentroids(), k, par.distanceFunction);
System.out.println("DB index: " + db);
}
public static void TestUnique() {
cdata = getCategoricalData();
double[] col_vector = new double[cdata.length];
for (int i = 0; i < col_vector.length; i++) col_vector[i] = cdata[i][1];
//UniqueResult ur = utils.findUnique(col_vector);
}
public static void TestBasicKMEANS() {
data = getData();
k = 2;
HMRFKmeansParams par = new HMRFKmeansParams();
par.verbose = false;
par.distanceFunction = Distance.SQEUCLIDEAN;
HMRFKmeans kmeans = new HMRFKmeans(data, k, par);
kmeans.cluster();
// find db index
ClusterValidation valid = new ClusterValidation();
double db = valid.findDBIndex(data, kmeans.getIDX(), kmeans.getCentroids(), k, Distance.SQEUCLIDEAN);
System.out.println("DB index: " + db);
}
public static void TestConstraints() {
data = getData();
constraints = getConstraints();
HMRFKmeansParams par = new HMRFKmeansParams();
par.constraints = constraints;
par.verbose = false;
par.useTC = true;
par.max_number_of_iterations = 2;
HMRFKmeans kmeans = new HMRFKmeans(data, k, par);
kmeans.cluster();
}
// get data
private static double[][] getData() {
if (data==null) {
n = 270;
dim = 6;
k = 2;
data = utils.readDataFile("C:\\_Research\\Datasets\\Heart\\ndata_p.data", n, dim);
}
return data;
}
// get categorical data
private static double[][] getCategoricalData() {
if (cdata==null) {
n = 270;
dim = 7;
k = 2;
cdata = utils.readDataFile("C:\\_Research\\Datasets\\Heart\\cdata.data", n, dim);
}
return cdata;
}
// get constraints
private static double[][] getConstraints() {
if (constraints==null) {
constraints = utils.readDataFile("C:\\_Research\\Datasets\\Iris\\constraints.data", 7, 3);
}
return constraints;
}
}