diff --git a/src/helper_files/helper_tests.pl b/src/helper_files/helper_tests.pl index 476d26b34e9fbadae91853b2f20ca2083c0c0e05..a870e5d9997a9570a920e9087f73a4142cb599dd 100644 --- a/src/helper_files/helper_tests.pl +++ b/src/helper_files/helper_tests.pl @@ -10,7 +10,7 @@ :- begin_tests(b). -test(matrix, fail) :- +test(matrix) :- open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), take_csv_row(File, skipFirstRow, 2, Records), print(Records), diff --git a/src/methods/dbscan/dbscan.cpp b/src/methods/dbscan/dbscan.cpp index 54a8f4609054fbdc5c0796044b535034f24b1ba6..b9edf104886d72a76bc593e6719e91512ff39379 100644 --- a/src/methods/dbscan/dbscan.cpp +++ b/src/methods/dbscan/dbscan.cpp @@ -20,35 +20,32 @@ using namespace mlpack::metric; template<typename RangeSearchType = range::RangeSearch<>, typename PointSelectionPolicy = OrderedPointSelection> -void initAndCluster(double epsilon, SP_integer minPoints, SP_integer batchMode, float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, - float **assignmentsArr, SP_integer *assignmentsArrSize, float **centroidsMatArr, SP_integer *centroidsMatColNum, SP_integer *centroidsMatRowNum) +void initAndCluster(double epsilon, SP_integer minPoints, + SP_integer batchMode, + float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, + float **assignmentsArr, SP_integer *assignmentsArrSize, + float **centroidsMatArr, SP_integer *centroidsMatColNum, SP_integer *centroidsMatRowNum) { // convert the Prolog arrays to arma::mat mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); + + // create the ReturnVector + Row< size_t > assignmentsReturnVector; + // create the ReturnMat + mat centroidsReturnMat; + - // get the ReturnVector - arma::Row<size_t> toReturnVector; - - // get the ReturnMat - mat toReturnMat; - - DBSCAN<RangeSearchType, PointSelectionPolicy>(epsilon, minPoints, (batchMode == 1)).Cluster(data, toReturnVector, toReturnMat); - - // return the Vector lenght - *assignmentsArrSize = toReturnVector.n_elem; + DBSCAN<RangeSearchType, PointSelectionPolicy>(epsilon, minPoints, (batchMode == 1)).Cluster(data, assignmentsReturnVector, centroidsReturnMat); - // return the Vector as Array - *assignmentsArr = convertToArray(toReturnVector); - // return the Matrix dimensions - *centroidsMatColNum = toReturnMat.n_cols; - *centroidsMatRowNum = toReturnMat.n_rows; + // return the Vector + returnVectorInformation(assignmentsReturnVector, assignmentsArr, assignmentsArrSize); - // return the Matrix as one long Array - *centroidsMatArr = convertToArray(toReturnMat); + // return the Matrix + returnMatrixInformation(centroidsReturnMat, centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } -// TODO: + // input: const double epsilon, // const size_t minPoints, // const bool batchMode = true, @@ -60,136 +57,179 @@ void initAndCluster(double epsilon, SP_integer minPoints, SP_integer batchMode, // arma::mat & centroids // output: // description: -void dbscan(double epsilon, SP_integer minPoints, SP_integer batchMode, char const *selectionType, char const *treeType, float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, - float **assignmentsArr, SP_integer *assignmentsArrSize, float **centroidsMatArr, SP_integer *centroidsMatColNum, SP_integer *centroidsMatRowNum) +// This is a one predicate model where you configure the model with the input parameters and get returned the results in the same predicate. +// +void dbscan(double epsilon, SP_integer minPoints, + SP_integer batchMode, + char const *selectionType, char const *treeType, + float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, + float **assignmentsArr, SP_integer *assignmentsArrSize, + float **centroidsMatArr, SP_integer *centroidsMatColNum, SP_integer *centroidsMatRowNum) { if(strcmp(selectionType, "ordered") == 0) { - cout << "ordered" << endl; if (strcmp(treeType, "kd") == 0) { - cout << "kd" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::KDTree>, OrderedPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::KDTree>, OrderedPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else if (strcmp(treeType, "r") == 0) { - cout << "r" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::RTree>, OrderedPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::RTree>, OrderedPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else if (strcmp(treeType, "r_star") == 0) { - cout << "r_star" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::RStarTree>, OrderedPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::RStarTree>, OrderedPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else if (strcmp(treeType, "x") == 0) { - cout << "x" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::XTree>, OrderedPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::XTree>, OrderedPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else if (strcmp(treeType, "hilbert_r") == 0) { - cout << "hilbert_r" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::HilbertRTree>, OrderedPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::HilbertRTree>, OrderedPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else if (strcmp(treeType, "r_plus") == 0) { - cout << "r_plus" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::RPlusTree>, OrderedPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::RPlusTree>, OrderedPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else if (strcmp(treeType, "r_plus_plus") == 0) { - cout << "r_plus_plus" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::RPlusPlusTree>, OrderedPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::RPlusPlusTree>, OrderedPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else if (strcmp(treeType, "cover") == 0) { - cout << "cover" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::CoverTree>, OrderedPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::CoverTree>, OrderedPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else if (strcmp(treeType, "ball") == 0) { - cout << "ball" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::BallTree>, OrderedPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::BallTree>, OrderedPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else { - cout << "wrong treeType input" << endl; + raisePrologDomainExeption(treeType, 5, "The given TreeType is unkown!", "dbscan"); + return; } } else if (strcmp(selectionType, "random") == 0) { - cout << "random" << endl; if (strcmp(treeType, "kd") == 0) { - cout << "kd" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::KDTree>, RandomPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::KDTree>, RandomPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else if (strcmp(treeType, "r") == 0) { - cout << "r" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::RTree>, RandomPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::RTree>, RandomPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else if (strcmp(treeType, "r_star") == 0) { - cout << "r_star" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::RStarTree>, RandomPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::RStarTree>, RandomPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else if (strcmp(treeType, "x") == 0) { - cout << "x" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::XTree>, RandomPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::XTree>, RandomPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else if (strcmp(treeType, "hilbert_r") == 0) { - cout << "hilbert_r" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::HilbertRTree>, RandomPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::HilbertRTree>, RandomPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else if (strcmp(treeType, "r_plus") == 0) { - cout << "r_plus" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::RPlusTree>, RandomPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::RPlusTree>, RandomPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else if (strcmp(treeType, "r_plus_plus") == 0) { - cout << "r_plus_plus" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::RPlusPlusTree>, RandomPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::RPlusPlusTree>, RandomPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else if (strcmp(treeType, "cover") == 0) { - cout << "cover" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::CoverTree>, RandomPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::CoverTree>, RandomPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else if (strcmp(treeType, "ball") == 0) { - cout << "ball" << endl; - initAndCluster<RangeSearch<EuclideanDistance, mat, tree::BallTree>, RandomPointSelection>(epsilon, minPoints, batchMode, dataMatArr, dataMatSize, dataMatRowNum, assignmentsArr, assignmentsArrSize, - centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); + initAndCluster<RangeSearch<EuclideanDistance, mat, tree::BallTree>, RandomPointSelection>(epsilon, minPoints, + batchMode, + dataMatArr, dataMatSize, dataMatRowNum, + assignmentsArr, assignmentsArrSize, + centroidsMatArr, centroidsMatColNum, centroidsMatRowNum); } else { - cout << "wrong treeType input" << endl; + raisePrologDomainExeption(treeType, 5, "The given TreeType is unkown!", "dbscan"); + return; } } else { - cout << "wrong selectionType input" << endl; + raisePrologDomainExeption(selectionType, 4, "The given SelectionType is unkown!", "dbscan"); + return; } -} \ No newline at end of file +} diff --git a/src/methods/dbscan/dbscan.pl b/src/methods/dbscan/dbscan.pl index 271dff8c9aa8d1bd3a871df682c75f6ff2c65841..3fc5743cc6dff107291ba17c57d6d7d0b6c75d2a 100644 --- a/src/methods/dbscan/dbscan.pl +++ b/src/methods/dbscan/dbscan.pl @@ -1,4 +1,4 @@ -:- module(dbscan, [dbscan/13]). +:- module(dbscan, [dbscan/10]). %% requirements of library(struct) :- load_files(library(str_decl), @@ -20,7 +20,7 @@ %% double epsilon %% int minPoints %% bool batchMode => (1)true / (0)false -%% str selectionType => "orderd", "random" +%% str selectionType => "ordered", "random" %% str treeType => "kd", "r", "r_star", "x", "hilbert_r", "r_plus", "r_plus_plus", "cover", "ball" %% mat data => data(float_array), dataSize, dataRowNum %% @@ -31,11 +31,18 @@ %% --Description-- %% This is a one predicate model where you configure the model with the input parameters and get returned the results in the same predicate. %% -foreign(dbscan, c, dbscan( +float32, +integer, +integer, +foreign(dbscan, c, dbscanI( +float32, +integer, +integer, +string, +string, +pointer(float_array), +integer, +integer, -pointer(float_array), -integer, -pointer(float_array), -integer, -integer)). +dbscan(Epsilon, MinPoints, BatchMode, SelectionType, TreeType, DataList, DataRows, AssignList, CentroidsList, ZCols) :- + Epsilon > 0, + MinPoints > 0, + convert_list_to_float_array(DataList, DataRows, array(Xsize, Xrownum, X)), + dbscanI(Epsilon, MinPoints, BatchMode, SelectionType, TreeType, X, Xsize, Xrownum, Y, Ysize, Z, ZCols, ZRows), + convert_float_array_to_list(Y, Ysize, AssignList), + convert_float_array_to_2d_list(Z, ZCols, ZRows, CentroidsList). %% Defines the functions that get connected from main.cpp diff --git a/src/methods/dbscan/dbscan_test.pl b/src/methods/dbscan/dbscan_test.pl index 965aaf969540fa27a7d58258eba2e84f363c7f35..112d030011396c38970006f2f7d8c98873521ad9 100644 --- a/src/methods/dbscan/dbscan_test.pl +++ b/src/methods/dbscan/dbscan_test.pl @@ -1,48 +1,197 @@ + +:- module(dbscan_tests, [run_dbscan_tests/0]). + :- use_module(library(plunit)). :- use_module(dbscan). :- use_module('../../helper_files/helper.pl'). -:- begin_tests(lists). - -test(dbscanKDTree) :- - convert_list_to_float_array([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5, 1.4, 3.0, 2.1, 0.1],4, array(Xsize, Xrownum, X)), - dbscan(0.7, 1, 1, ordered, kd, X, Xsize, Xrownum, Assign, Assignsize, Centroids, Centroidscolnum, Centroidsrownum), - print(Assignsize), - convert_float_array_to_list(Assign, Assignsize, ResultsAssign), - print(ResultsAssign), - print(Centroidscolnum), - convert_float_array_to_2d_list(Centroids, Centroidscolnum, Centroidsrownum, Results), - print(Results). -test(dbscanRTree) :- - convert_list_to_float_array([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5, 1.4, 3.0, 2.1, 0.1],4, array(Xsize, Xrownum, X)), - dbscan(0.7, 1, 1, ordered, r, X, Xsize, Xrownum, Assign, Assignsize, Centroids, Centroidscolnum, Centroidsrownum), - print(Assignsize), - convert_float_array_to_list(Assign, Assignsize, ResultsAssign), - print(ResultsAssign), - print(Centroidscolnum), - convert_float_array_to_2d_list(Centroids, Centroidscolnum, Centroidsrownum, Results), - print(Results). -test(dbscanRStarTree) :- - convert_list_to_float_array([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5, 1.4, 3.0, 2.1, 0.1],4, array(Xsize, Xrownum, X)), - dbscan(0.7, 1, 1, ordered, r_star, X, Xsize, Xrownum, Assign, Assignsize, Centroids, Centroidscolnum, Centroidsrownum), - print(Assignsize), - convert_float_array_to_list(Assign, Assignsize, ResultsAssign), - print(ResultsAssign), - print(Centroidscolnum), - convert_float_array_to_2d_list(Centroids, Centroidscolnum, Centroidsrownum, Results), - print(Results). - -test(dbscanrandomKDTree) :- - convert_list_to_float_array([5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5, 1.4, 3.0, 2.1, 0.1],4, array(Xsize, Xrownum, X)), - dbscan(0.7, 1, 1, random, kd, X, Xsize, Xrownum, Assign, Assignsize, Centroids, Centroidscolnum, Centroidsrownum), - print(Assignsize), - convert_float_array_to_list(Assign, Assignsize, ResultsAssign), - print(ResultsAssign), - print(Centroidscolnum), - convert_float_array_to_2d_list(Centroids, Centroidscolnum, Centroidsrownum, Results), - print(Results). - - -:- end_tests(lists). \ No newline at end of file +%% +%% TESTING predicate dbscan/10 +%% +:- begin_tests(dbscan). + +%% Failure Tests + +test(dbscan_Negative_Epsilon, fail) :- + dbscan(-1, 1, 0, ordered, kd, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _). + +test(dbscan_Negative_MinPoints, fail) :- + dbscan(1, -1, 0, ordered, kd, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _). + +test(dbscan_wrong_Selection_Input, [error(domain_error('The given SelectionType is unkown!', wrongSelection), _)]) :- + dbscan(1.0, 1, 0, wrongSelection, kd, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _). + +test(dbscan_wrong_TreeType_Input_With_Orderd_Selection, [error(domain_error('The given TreeType is unkown!', wrongTree), _)]) :- + dbscan(1.0, 1, 0, ordered, wrongTree, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _). + +test(dbscan_wrong_TreeType_Input_With_Random_Selection, [error(domain_error('The given TreeType is unkown!', wrongTree), _)]) :- + dbscan(1.0, 1, 0, random, wrongTree, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, _, _, _). + + +%% Successful Tests + +test(dbscan_KD_CSV) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,30, Data), + dbscan(1.0, 1, 0, ordered, kd, Data, 4, AssignList, CentroidsList, _), + dbscan(1.0, 1, 0, random, kd, Data, 4, AssignListRand, CentroidsListRand, _), + print('\nOrdered'), + print(AssignList), + print('\nOrdered'), + print(CentroidsList), + print('\nRandom'), + print(AssignListRand), + print('\nRandom'), + print(CentroidsListRand). + +test(dbscan_R_CSV) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,30, Data), + dbscan(1.0, 1, 0, ordered, r, Data, 4, AssignList, CentroidsList, _), + dbscan(1.0, 1, 0, random, r, Data, 4, AssignListRand, CentroidsListRand, _), + print('\nOrdered'), + print(AssignList), + print('\nOrdered'), + print(CentroidsList), + print('\nRandom'), + print(AssignListRand), + print('\nRandom'), + print(CentroidsListRand). + +test(dbscan_RSTAR_CSV) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,30, Data), + dbscan(1.0, 1, 0, ordered, r_star, Data, 4, AssignList, CentroidsList, _), + dbscan(1.0, 1, 0, random, r_star, Data, 4, AssignListRand, CentroidsListRand, _), + print('\nOrdered'), + print(AssignList), + print('\nOrdered'), + print(CentroidsList), + print('\nRandom'), + print(AssignListRand), + print('\nRandom'), + print(CentroidsListRand). + +test(dbscan_X_CSV) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,30, Data), + dbscan(1.0, 1, 0, ordered, x, Data, 4, AssignList, CentroidsList, _), + dbscan(1.0, 1, 0, random, x, Data, 4, AssignListRand, CentroidsListRand, _), + print('\nOrdered'), + print(AssignList), + print('\nOrdered'), + print(CentroidsList), + print('\nRandom'), + print(AssignListRand), + print('\nRandom'), + print(CentroidsListRand). + +test(dbscan_Hilbert_R_CSV) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,30, Data), + dbscan(1.0, 1, 0, ordered, hilbert_r, Data, 4, AssignList, CentroidsList, _), + dbscan(1.0, 1, 0, random, hilbert_r, Data, 4, AssignListRand, CentroidsListRand, _), + print('\nOrdered'), + print(AssignList), + print('\nOrdered'), + print(CentroidsList), + print('\nRandom'), + print(AssignListRand), + print('\nRandom'), + print(CentroidsListRand). + +test(dbscan_RPlus_CSV) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,30, Data), + dbscan(1.0, 1, 0, ordered, r_plus, Data, 4, AssignList, CentroidsList, _), + dbscan(1.0, 1, 0, random, r_plus, Data, 4, AssignListRand, CentroidsListRand, _), + print('\nOrdered'), + print(AssignList), + print('\nOrdered'), + print(CentroidsList), + print('\nRandom'), + print(AssignListRand), + print('\nRandom'), + print(CentroidsListRand). + +test(dbscan_RPlusPlus_CSV) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,30, Data), + dbscan(1.0, 1, 0, ordered, r_plus_plus, Data, 4, AssignList, CentroidsList, _), + dbscan(1.0, 1, 0, random, r_plus_plus, Data, 4, AssignListRand, CentroidsListRand, _), + print('\nOrdered'), + print(AssignList), + print('\nOrdered'), + print(CentroidsList), + print('\nRandom'), + print(AssignListRand), + print('\nRandom'), + print(CentroidsListRand). + +test(dbscan_Cover_CSV) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,30, Data), + dbscan(1.0, 1, 0, ordered, cover, Data, 4, AssignList, CentroidsList, _), + dbscan(1.0, 1, 0, random, cover, Data, 4, AssignListRand, CentroidsListRand, _), + print('\nOrdered'), + print(AssignList), + print('\nOrdered'), + print(CentroidsList), + print('\nRandom'), + print(AssignListRand), + print('\nRandom'), + print(CentroidsListRand). + + +test(dbscan_Ball_CSV) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,30, Data), + dbscan(1.0, 1, 0, ordered, ball, Data, 4, AssignList, CentroidsList, _), + dbscan(1.0, 1, 0, random, ball, Data, 4, AssignListRand, CentroidsListRand, _), + print('\nOrdered'), + print(AssignList), + print('\nOrdered'), + print(CentroidsList), + print('\nRandom'), + print(AssignListRand), + print('\nRandom'), + print(CentroidsListRand). + + +%% Some use cases +test(dbscan_Orderd_KD) :- + dbscan(1.0, 1, 0, ordered, kd, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, AssignList, CentroidsList, _), + print(AssignList), + print('\n'), + print(CentroidsList). + +test(dbscan_Orderd_KD_CSV) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + dbscan(1.0, 1, 0, ordered, kd, Data, 4, AssignList, CentroidsList, _), + print(AssignList), + print('\n'), + print(CentroidsList). + +test(dbscan_Random_KD) :- + dbscan(3.2, 4, 1, random, kd, [5.1,3.5,1.4,4.9,3.0,1.4,4.7,3.2,1.3,4.6,3.1,1.5], 3, [0.0,0.0,0.0,0.0], [[4.824999809265137,3.200000047683716,1.399999976158142]], _). + +test(dbscan_Random_KD_CSV) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,10, Data), + dbscan(3.2, 4, 1, random, kd, Data, 4, [0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0], [[4.860000133514404,3.309999942779541,1.4500000476837158,0.2199999988079071]], _). + +test(dbscan_Random_RSTAR_CSV) :- + open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris2.csv', read, File), + take_csv_row(File, skipFirstRow,100, Data), + dbscan(1.0, 10, 1, random, r_star, Data, 4, AssignList, CentroidsList, _), + print(AssignList), + print('\n'), + print(CentroidsList). + +:- end_tests(dbscan). + +run_dbscan_tests :- + run_tests. diff --git a/test_all.pl b/test_all.pl index 1ac5d5be8eaff93af999e1d35c6e2a69c73bee93..7b5dc51e503bdc3dbdd21445811efc902defc895 100644 --- a/test_all.pl +++ b/test_all.pl @@ -2,11 +2,14 @@ :- use_module('src/methods/adaboost/adaboost_test.pl'). +:- use_module('src/methods/dbscan/dbscan_test.pl'). + :- use_module('src/methods/sparse_coding/sparse_coding_test.pl'). :- use_module('src/helper_files/helper_tests.pl'). run :- run_adaboost_tests, + run_dbscan_tests, run_sparse_coding_tests, run_helper_tests. \ No newline at end of file