Skip to content
Snippets Groups Projects
Commit a6df8c08 authored by Jakhes's avatar Jakhes
Browse files

Updating part of the methods c++ files to the standard of newer methods

parent 4c3f2ba9
No related branches found
No related tags found
No related merge requests found
Showing
with 254 additions and 304 deletions
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
%% --Output-- %% --Output--
%% %%
%% --Description-- %% --Description--
%% Initiates the DrusillaSearch Model but doesnt train it. %% Initiates the DrusillaSearch Model but doesnt train it.
%% trainDrusilla has to be used before searchDrusilla can be used. %% trainDrusilla has to be used before searchDrusilla can be used.
%% %%
foreign(initDrusillaModelNoTrain, c, initDrusillaModelNoTrain(+integer, +integer)). foreign(initDrusillaModelNoTrain, c, initDrusillaModelNoTrain(+integer, +integer)).
...@@ -90,7 +90,7 @@ foreign(trainDrusilla, c, trainDrusilla(+pointer(float_array), +integer, +intege ...@@ -90,7 +90,7 @@ foreign(trainDrusilla, c, trainDrusilla(+pointer(float_array), +integer, +intege
%% --Output-- %% --Output--
%% %%
%% --Description-- %% --Description--
%% Initiates the QDAFNSearch Model but doesnt train it. %% Initiates the QDAFNSearch Model but doesnt train it.
%% trainQDAFN has to be used before searchQDAFN can be used. %% trainQDAFN has to be used before searchQDAFN can be used.
%% %%
foreign(initQDAFNModelNoTrain, c, initQDAFNModelNoTrain(+integer, +integer)). foreign(initQDAFNModelNoTrain, c, initQDAFNModelNoTrain(+integer, +integer)).
......
...@@ -17,8 +17,11 @@ using namespace mlpack::regression; ...@@ -17,8 +17,11 @@ using namespace mlpack::regression;
// Global Variable of the BayesianLinearRegression object so it can be accessed from all functions // Global Variable of the BayesianLinearRegression object so it can be accessed from all functions
BayesianLinearRegression regressor; BayesianLinearRegression regressor;
// input: const bool , const bool , const size_t , const double // input: const bool centerData,
// output: double // const bool scaleData,
// const size_t nIterMax,
// const double tol
// output:
void initModel(SP_integer centerData, SP_integer scaleData, SP_integer nIterMax, double tol) void initModel(SP_integer centerData, SP_integer scaleData, SP_integer nIterMax, double tol)
{ {
regressor = new BayesianLinearRegression((centerData == 1), (scaleData == 1), nIterMax, tol); regressor = new BayesianLinearRegression((centerData == 1), (scaleData == 1), nIterMax, tol);
...@@ -39,119 +42,129 @@ double beta() ...@@ -39,119 +42,129 @@ double beta()
} }
// input: // input:
// output: const arma::colvec & // output: const arma::colvec & dataOffset
float * dataOffset(SP_integer *arraySize) void dataOffset(float **dataOffsetArr, SP_integer *dataOffsetArrSize)
{ {
// save the DataOffset output in colvec // create the ReturnVector
colvec armaDataOffset = regressor.DataOffset(); rowvec dataOffsetReturnVector = regressor.DataOffset();
*arraySize = armaDataOffset.n_elem; // return the Vector
returnVectorInformation(dataOffsetReturnVector, dataOffsetArr, dataOffsetArrSize);
return convertToArray(armaDataOffset);
} }
// input: // input:
// output: const arma::colvec & // output: const arma::colvec & dataScale
float * dataScale(SP_integer *arraySize) void dataScale(float **dataScaleArr, SP_integer *dataScaleArrSize)
{ {
// save the DataScale output in colvec // create the ReturnVector
colvec armaDataScale = regressor.DataScale(); rowvec dataScaleReturnVector = regressor.DataScale();
*arraySize = armaDataScale.n_elem;
return convertToArray(armaDataScale); // return the Vector
returnVectorInformation(dataScaleReturnVector, dataScaleArr, dataScaleArrSize);
} }
// input: // input:
// output: const arma::colvec & // output: const arma::colvec & omega
float * omega(SP_integer *arraySize) void omega(float **omegaArr, SP_integer *omegaArrSize)
{ {
// save the Omega output in colvec // create the ReturnVector
colvec armaOmega = regressor.Omega(); rowvec omegaReturnVector = regressor.Omega();
*arraySize = armaOmega.n_elem; // return the Vector
returnVectorInformation(omegaReturnVector, omegaArr, omegaArrSize);
return convertToArray(armaOmega);
} }
// input: const arma::mat &points, arma::rowvec &predictions // input: const arma::mat &points,
// arma::rowvec &predictions
// output: // output:
void predict(float *pointsArr, SP_integer pointsSize, SP_integer pointsRowNum, float **predicArr, SP_integer *predicSize) void predict(float *pointsMatArr, SP_integer pointsMatSize, SP_integer pointsMatRowNum, float **predictionsArr, SP_integer *predictionsArrSize)
{ {
// convert the Prolog arrays to std::vec for easy conversion to arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(pointsArr, pointsSize, pointsRowNum); mat points = convertArrayToMat(pointsMatArr, pointsMatSize, pointsMatRowNum);
// run the prediction and save the result in arma::rowvec // create the ReturnVector
rowvec predictions; rowvec predictionsReturnVector;
regressor.Predict(data, predictions);
// give back the sizes and the converted results as arrays // run the prediction and save the result in arma::rowvec
*predicSize = predictions.n_elem; regressor.Predict(points, predictionsReturnVector);
*predicArr = convertToArray(predictions); // return the Vector
returnVectorInformation(predictionsReturnVector, predictionsArr, predictionsArrSize);
} }
// input: const arma::mat &points, arma::rowvec &predictions, arma::rowvec &std // input: const arma::mat &points,
// arma::rowvec &predictions,
// arma::rowvec &std
// output: // output:
void predictWithStd(float *pointsArr, SP_integer pointsSize, SP_integer pointsRowNum, float **predicArr, SP_integer *predicSize, float **stdArr, SP_integer *stdSize) void predictWithStd(float *pointsMatArr, SP_integer pointsMatSize, SP_integer pointsMatRowNum, float **predictionsArr, SP_integer *predictionsArrSize, float **stdArr, SP_integer *stdArrSize)
{ {
// convert the Prolog arrays to std::vec for easy conversion to arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(pointsArr, pointsSize, pointsRowNum); mat points = convertArrayToMat(pointsMatArr, pointsMatSize, pointsMatRowNum);
// run the prediction and save the results in arma::rowvecs // create the ReturnVectors
rowvec predictions; rowvec predictionsReturnVector;
rowvec std; rowvec stdReturnVector;
regressor.Predict(data, predictions, std);
// give back the sizes and the converted results as arrays
*predicSize = predictions.n_elem;
*stdSize = std.n_elem;
*predicArr = convertToArray(predictions); // run the prediction and save the result in arma::rowvec
*stdArr = convertToArray(std); regressor.Predict(points, predictionsReturnVector, stdReturnVector);
// return the Vectors
returnVectorInformation(predictionsReturnVector, predictionsArr, predictionsArrSize);
returnVectorInformation(stdReturnVector, stdArr, stdArrSize);
} }
// input: // input:
// output: double // output: double
SP_integer responsesOffset() double responsesOffset()
{ {
return regressor.ResponsesOffset(); return regressor.ResponsesOffset();
} }
// input: const arma::mat &data, const arma::rowvec &responses // input: const arma::mat & data,
// const arma::rowvec & responses
// output: double // output: double
SP_integer rmse(float *matrix, SP_integer matSize, SP_integer matRowNum, float *arr, SP_integer vecSize) double rmse(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, float *responsesArr, SP_integer responsesArrSize)
{ {
// convert the Prolog arrays to arma::rowvec and arma::mat // convert the Prolog array to arma::mat
rowvec responses = convertArrayToRowvec(arr, vecSize); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
mat data = convertArrayToMat(matrix, matSize, matRowNum);
// convert the Prolog array to arma::rowvec
rowvec responsesVector = convertArrayToRowvec(responsesArr, responsesArrSize);
// run the model function and return the error // run the model function and return the error
return regressor.RMSE(data, responses); return regressor.RMSE(data, responsesVector);
} }
// input: const arma::mat &data, const arma::rowvec &responses // input: const arma::mat & data,
// const arma::rowvec & responses
// output: // output:
void train(float *matrix, SP_integer matSize, SP_integer matRowNum, float *arr, SP_integer vecSize) void train(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, float *responsesArr, SP_integer responsesArrSize)
{ {
if(matSize / matRowNum != vecSize) if(dataMatSize / dataMatRowNum != responsesArrSize)
{ {
cout << "Target dim doesnt fit to the Data dim" << endl; cout << "Target dim doesnt fit to the Data dim" << endl;
return; return;
} }
// convert the Prolog arrays to arma::rowvec and arma::mat // convert the Prolog array to arma::mat
rowvec responses = convertArrayToRowvec(arr, vecSize); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
mat data = convertArrayToMat(matrix, matSize, matRowNum);
// convert the Prolog array to arma::rowvec
rowvec responsesVector = convertArrayToRowvec(responsesArr, responsesArrSize);
// run the model function // run the model function
regressor.Train(data, responses); regressor.Train(data, responsesVector);
} }
// input: // input:
// output: double // output: double
SP_integer variance() double variance()
{ {
return regressor.Variance(); return regressor.Variance();
} }
......
...@@ -76,7 +76,7 @@ foreign(beta, c, beta([-float32])). ...@@ -76,7 +76,7 @@ foreign(beta, c, beta([-float32])).
%% --Description-- %% --Description--
%% Get the mean vector computed on the features over the training points. %% Get the mean vector computed on the features over the training points.
%% %%
foreign(dataOffset, c, dataOffset(-integer, [-pointer(float_array)])). foreign(dataOffset, c, dataOffset(-pointer(float_array), -integer)).
%% --Input-- %% --Input--
...@@ -87,7 +87,7 @@ foreign(dataOffset, c, dataOffset(-integer, [-pointer(float_array)])). ...@@ -87,7 +87,7 @@ foreign(dataOffset, c, dataOffset(-integer, [-pointer(float_array)])).
%% --Description-- %% --Description--
%% Get the vector of standard deviations computed on the features over the training points. %% Get the vector of standard deviations computed on the features over the training points.
%% %%
foreign(dataScale, c, dataScale(-integer, [-pointer(float_array)])). foreign(dataScale, c, dataScale(-pointer(float_array), -integer)).
%% --Input-- %% --Input--
...@@ -98,7 +98,7 @@ foreign(dataScale, c, dataScale(-integer, [-pointer(float_array)])). ...@@ -98,7 +98,7 @@ foreign(dataScale, c, dataScale(-integer, [-pointer(float_array)])).
%% --Description-- %% --Description--
%% Get the solution vector. %% Get the solution vector.
%% %%
foreign(omega, c, omega(-integer, [-pointer(float_array)])). foreign(omega, c, omega(-pointer(float_array), -integer)).
%% --Input-- %% --Input--
...@@ -141,7 +141,7 @@ foreign(predictWithStd, c, predictWithStd( +pointer(float_array), +integer, ...@@ -141,7 +141,7 @@ foreign(predictWithStd, c, predictWithStd( +pointer(float_array), +integer,
%% %%
foreign(rmse, c, rmse( +pointer(float_array), +integer, +integer, foreign(rmse, c, rmse( +pointer(float_array), +integer, +integer,
+pointer(float_array), +integer, +pointer(float_array), +integer,
[-integer])). [-float32])).
%% --Input-- %% --Input--
...@@ -152,7 +152,7 @@ foreign(rmse, c, rmse( +pointer(float_array), +integer, +integer, ...@@ -152,7 +152,7 @@ foreign(rmse, c, rmse( +pointer(float_array), +integer, +integer,
%% %%
%% --Description-- %% --Description--
%% Run BayesianLinearRegression. %% Run BayesianLinearRegression.
%% The input matrix (like all mlpack matrices) should be column-major each column is an observation and each row is a dimension. %% The input matrix (like all mlpack matrices) should be column-major each column is an observation and each row is a dimension.
%% %%
foreign(train, c, train( +pointer(float_array), +integer, +integer, foreign(train, c, train( +pointer(float_array), +integer, +integer,
+pointer(float_array), +integer)). +pointer(float_array), +integer)).
...@@ -167,7 +167,7 @@ foreign(train, c, train( +pointer(float_array), +integer, +integer, ...@@ -167,7 +167,7 @@ foreign(train, c, train( +pointer(float_array), +integer, +integer,
%% Get the estimate variance. %% Get the estimate variance.
%% train/5 should be called before. %% train/5 should be called before.
%% %%
foreign(variance, c, variance([-integer])). foreign(variance, c, variance([-float32])).
%% Defines what functions should be connected from main.cpp %% Defines what functions should be connected from main.cpp
foreign_resource(bayesian_linear_regression, [ initModel, foreign_resource(bayesian_linear_regression, [ initModel,
......
...@@ -193,51 +193,3 @@ void dbscan(double epsilon, SP_integer minPoints, SP_integer batchMode, char con ...@@ -193,51 +193,3 @@ void dbscan(double epsilon, SP_integer minPoints, SP_integer batchMode, char con
} }
} }
void takeNumberFunction(SP_integer integerNumber, double doubleNumber, char const *string)
{
}
SP_integer returnNumberFunction()
{
return 7;
}
void takeMatrixFunction(float *givenMatArr, SP_integer givenMatSize, SP_integer givenMatRowNum)
{
// convert the Prolog arrays to arma::mat
mat data = convertArrayToMat(givenMatArr, givenMatSize, givenMatRowNum);
}
void takeArrayFunction(float *givenArr, SP_integer givenArrSize)
{
// convert the Prolog arrays to arma::rowvec
rowvec givenVector = convertArrayToRowvec(givenArr, givenArrSize);
}
void returnMatrixFunction(float **returnMatArr, SP_integer *returnMatColNum, SP_integer *returnMatRowNum)
{
// get the ReturnMat
mat toReturnMat = rowvec(3, 3, fill::ones);
// return the Matrix dimensions
*returnMatColNum = toReturnMat.n_cols;
*returnMatRowNum = toReturnMat.n_rows;
// return the Matrix as one long Array
*returnMatArr = convertToArray(toReturnMat);
}
void returnArrayFunction(float **returnArr, SP_integer *returnArrSize)
{
// get the ReturnVector
rowvec toReturnVector = rowvec(3, fill::ones);
// return the Vector lenght
*returnArrSize = toReturnVector.n_elem;
// return the Vector as Array
*returnArr = convertToArray(toReturnVector);
}
\ No newline at end of file
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
#include <mlpack/methods/nystroem_method/ordered_selection.hpp> #include <mlpack/methods/nystroem_method/ordered_selection.hpp>
#include <mlpack/methods/nystroem_method/random_selection.hpp> #include <mlpack/methods/nystroem_method/random_selection.hpp>
// including helper functions for converting between arma structures and arrays // including helper functions for converting between arma structures and
#include "../../helper_files/helper.hpp" #include "../../helper_files/helper.hpp"
// some of the most used namespaces // some of the most used namespaces
...@@ -64,16 +64,14 @@ void kernel_pca(char const *kernel, SP_integer centerTranformedData, SP_integer ...@@ -64,16 +64,14 @@ void kernel_pca(char const *kernel, SP_integer centerTranformedData, SP_integer
float **eigvecMatArr, SP_integer *eigvecMatColNum, SP_integer *eigvecMatRowNum, float **eigvecMatArr, SP_integer *eigvecMatColNum, SP_integer *eigvecMatRowNum,
SP_integer *newDimension) SP_integer *newDimension)
{ {
// convert the Prolog arrays to arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
// create the ReturnMat // create the ReturnMat
mat transformedDataReturnMat; mat transformedDataReturnMat;
// create the ReturnVector // create the ReturnVector
vec eigvalReturnVector; vec eigvalReturnVector;
// create the ReturnMat // create the ReturnMat
mat eigvecReturnMat; mat eigvecReturnMat;
......
...@@ -35,6 +35,7 @@ void initAndBuildModel(char const *treeType, char const *algorithm, ...@@ -35,6 +35,7 @@ void initAndBuildModel(char const *treeType, char const *algorithm,
mat reference = convertArrayToMat(referenceMatArr, referenceMatSize, referenceMatRowNum); mat reference = convertArrayToMat(referenceMatArr, referenceMatSize, referenceMatRowNum);
// used a good part of how it was used in the .main file
// select the treeType // select the treeType
NSModel<FurthestNS>::TreeTypes tree = NSModel<FurthestNS>::KD_TREE; NSModel<FurthestNS>::TreeTypes tree = NSModel<FurthestNS>::KD_TREE;
...@@ -110,8 +111,6 @@ void searchWithQuery( float *queryMatArr, SP_integer queryMatSize, SP_integer ...@@ -110,8 +111,6 @@ void searchWithQuery( float *queryMatArr, SP_integer queryMatSize, SP_integer
// create the ReturnMat // create the ReturnMat
Mat< size_t > neighborsReturnMat; Mat< size_t > neighborsReturnMat;
// create the ReturnMat
mat distancesReturnMat; mat distancesReturnMat;
...@@ -136,19 +135,15 @@ void searchNoQuery( SP_integer k, ...@@ -136,19 +135,15 @@ void searchNoQuery( SP_integer k,
float **neighborsMatArr, SP_integer *neighborsMatColNum, SP_integer *neighborsMatRowNum, float **neighborsMatArr, SP_integer *neighborsMatColNum, SP_integer *neighborsMatRowNum,
float **distancesMatArr, SP_integer *distancesMatColNum, SP_integer *distancesMatRowNum) float **distancesMatArr, SP_integer *distancesMatColNum, SP_integer *distancesMatRowNum)
{ {
// create the ReturnMat // create the ReturnMats
Mat< size_t > neighborsReturnMat; Mat< size_t > neighborsReturnMat;
// create the ReturnMat
mat distancesReturnMat; mat distancesReturnMat;
nsModelObj.Search((size_t)k, neighborsReturnMat, distancesReturnMat); nsModelObj.Search((size_t)k, neighborsReturnMat, distancesReturnMat);
// return the Matrix // return the Matrices
returnMatrixInformation(neighborsReturnMat, neighborsMatArr, neighborsMatColNum, neighborsMatRowNum); returnMatrixInformation(neighborsReturnMat, neighborsMatArr, neighborsMatColNum, neighborsMatRowNum);
// return the Matrix
returnMatrixInformation(distancesReturnMat, distancesMatArr, distancesMatColNum, distancesMatRowNum); returnMatrixInformation(distancesReturnMat, distancesMatArr, distancesMatColNum, distancesMatRowNum);
} }
\ No newline at end of file
...@@ -37,6 +37,7 @@ void initAndBuildModel(char const *treeType, char const *algorithm, ...@@ -37,6 +37,7 @@ void initAndBuildModel(char const *treeType, char const *algorithm,
mat reference = convertArrayToMat(referenceMatArr, referenceMatSize, referenceMatRowNum); mat reference = convertArrayToMat(referenceMatArr, referenceMatSize, referenceMatRowNum);
// used a good part of how it was used in the .main file
// select the treeType // select the treeType
NSModel<NearestNS>::TreeTypes tree = NSModel<NearestNS>::KD_TREE; NSModel<NearestNS>::TreeTypes tree = NSModel<NearestNS>::KD_TREE;
...@@ -115,18 +116,14 @@ void searchWithQuery( float *queryMatArr, SP_integer queryMatSize, SP_integer ...@@ -115,18 +116,14 @@ void searchWithQuery( float *queryMatArr, SP_integer queryMatSize, SP_integer
// create the ReturnMat // create the ReturnMat
Mat< size_t > neighborsReturnMat; Mat< size_t > neighborsReturnMat;
// create the ReturnMat
mat distancesReturnMat; mat distancesReturnMat;
nsModelObj.Search(move(query), (size_t)k, neighborsReturnMat, distancesReturnMat); nsModelObj.Search(move(query), (size_t)k, neighborsReturnMat, distancesReturnMat);
// return the Matrix // return the Matrices
returnMatrixInformation(neighborsReturnMat, neighborsMatArr, neighborsMatColNum, neighborsMatRowNum); returnMatrixInformation(neighborsReturnMat, neighborsMatArr, neighborsMatColNum, neighborsMatRowNum);
// return the Matrix
returnMatrixInformation(distancesReturnMat, distancesMatArr, distancesMatColNum, distancesMatRowNum); returnMatrixInformation(distancesReturnMat, distancesMatArr, distancesMatColNum, distancesMatRowNum);
} }
...@@ -143,8 +140,6 @@ void searchNoQuery( SP_integer k, ...@@ -143,8 +140,6 @@ void searchNoQuery( SP_integer k,
{ {
// create the ReturnMat // create the ReturnMat
Mat< size_t > neighborsReturnMat; Mat< size_t > neighborsReturnMat;
// create the ReturnMat
mat distancesReturnMat; mat distancesReturnMat;
......
...@@ -17,136 +17,171 @@ using namespace mlpack::regression; ...@@ -17,136 +17,171 @@ using namespace mlpack::regression;
// Global Variable of the LinearRegression object so it can be accessed from all functions // Global Variable of the LinearRegression object so it can be accessed from all functions
LinearRegression regressor; LinearRegression regressor;
// input: const arma::mat &data, const arma::rowvec &responses, const double lambda, const bool intercept // input: const arma::mat &data,
// const arma::rowvec &responses,
// const double lambda,
// const bool intercept
// output: // output:
void initModel(float *matrix, SP_integer matSize, SP_integer matRowNum, float *responses_arr, SP_integer vecSize, double lambda, SP_integer bool_intercept) void initModel(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum,
float *responsesArr, SP_integer responsesArrSize,
double lambda,
SP_integer bool_intercept)
{ {
if(matSize / matRowNum != vecSize) if(dataMatSize / dataMatRowNum != responsesArrSize)
{ {
cout << "Target dim doesnt fit to the Data dim" << endl; cout << "Target dim doesnt fit to the Data dim" << endl;
return; return;
} }
// convert the Prolog arrays to arma::rowvec and arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(matrix, matSize, matRowNum); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
rowvec responses = convertArrayToRowvec(responses_arr, vecSize);
regressor = LinearRegression(data, responses, lambda, bool_intercept); // convert the Prolog array to arma::rowvec
rowvec responsesVector = convertArrayToRowvec(responsesArr, responsesArrSize);
regressor = LinearRegression(data, responsesVector, lambda, bool_intercept);
} }
// input: const arma::mat &data, const arma::rowvec &responses, const arma::rowvec &weights, const double lambda, const bool intercept // input: const arma::mat &data,
// const arma::rowvec &responses,
// const arma::rowvec &weights,
// const double lambda,
// const bool intercept
// output: // output:
void initModelWithWeights(float *matrix, SP_integer matSize, SP_integer matRowNum, float *responses_arr, SP_integer vecSize, float *weights_arr, SP_integer weightsSize, double lambda, SP_integer bool_intercept) void initModelWithWeights(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum,
float *responsesArr, SP_integer responsesArrSize,
float *weightsArr, SP_integer weightsArrSize,
double lambda,
SP_integer bool_intercept)
{ {
if(matSize / matRowNum != vecSize) if(dataMatSize / dataMatRowNum != responsesArrSize)
{ {
cout << "Target dim doesnt fit to the Data dim" << endl; cout << "Target dim doesnt fit to the Data dim" << endl;
return; return;
} }
// convert the Prolog arrays to arma::rowvec and arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(matrix, matSize, matRowNum); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
rowvec responses = convertArrayToRowvec(responses_arr, vecSize); // convert the Prolog array to arma::rowvec
rowvec weights = convertArrayToRowvec(weights_arr, weightsSize); rowvec responsesVector = convertArrayToRowvec(responsesArr, responsesArrSize);
// convert the Prolog array to arma::rowvec
rowvec weightsVector = convertArrayToRowvec(weightsArr, weightsArrSize);
regressor = LinearRegression(data, responses, weights, lambda, bool_intercept); regressor = LinearRegression(data, responsesVector, weightsVector, lambda, bool_intercept);
} }
// input: const arma::mat &points, const arma::rowvec &responses // input: const arma::mat &points,
// const arma::rowvec &responses
// output: double L2SquardError // output: double L2SquardError
double computeError(float *points_mat_arr, SP_integer matSize, SP_integer matRowNum, float *responses_arr, SP_integer vecSize) double computeError(float *pointsMatArr, SP_integer pointsMatSize, SP_integer pointsMatRowNum,
float *responsesArr, SP_integer responsesArrSize)
{ {
if(matSize / matRowNum != vecSize) if(pointsMatSize / pointsMatRowNum != responsesArrSize)
{ {
cout << "Target dim doesnt fit to the Data dim" << endl; cout << "Target dim doesnt fit to the Data dim" << endl;
return 0; return 0;
} }
// convert the Prolog arrays to arma::rowvec and arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(points_mat_arr, matSize, matRowNum); mat points = convertArrayToMat(pointsMatArr, pointsMatSize, pointsMatRowNum);
rowvec responses = convertArrayToRowvec(responses_arr, vecSize); // convert the Prolog array to arma::rowvec
rowvec responsesVector = convertArrayToRowvec(responsesArr, responsesArrSize);
// run the model function // run the model function
return regressor.ComputeError(data, responses); return regressor.ComputeError(points, responsesVector);
} }
// input: // input:
// output: const arma::vec & parameters b vector // output: const arma::vec & parameters b vector
float * parameters(SP_integer *arraySize) void parameters(float **bArr, SP_integer *bArrSize)
{ {
// get b vector // create the ReturnVector
colvec armaDataOffset = regressor.Parameters(); rowvec bReturnVector = regressor.Parameters();
cout << regressor.Parameters() << endl;
cout << armaDataOffset << endl;
// set the b vector length // return the Vector
*arraySize = armaDataOffset.n_elem; returnVectorInformation(bReturnVector, bArr, bArrSize);
// convert b vector to array and return
return convertToArray(armaDataOffset);
} }
// input: arma::vec & new b vector // input: arma::vec & new b vector
// output: // output:
void modifyParameters(float *paramArr, SP_integer paramSize) void modifyParameters(float *newBArr, SP_integer newBArrSize)
{ {
// convert array to arma:: vec // convert the Prolog array to arma::rowvec
rowvec new_B_Vector = convertArrayToRowvec(paramArr, paramSize); vec newBVector = convertArrayToRowvec(newBArr, newBArrSize);
// get parameter b vector ref // get parameter b vector ref
vec& bVector = regressor.Parameters(); vec& bVector = regressor.Parameters();
// set new b vector // set new b vector
bVector = new_B_Vector; bVector = newBVector;
} }
// input: const arma::mat &points, arma::rowvec &predictions // input: const arma::mat &points,
// arma::rowvec &predictions
// output: // output:
void predict(float *pointsArr, SP_integer pointsSize, SP_integer pointsRowNum, float **predicArr, SP_integer *predicSize) void predict(float *pointsMatArr, SP_integer pointsMatSize, SP_integer pointsMatRowNum,
float **predicArr, SP_integer *predicArrSize)
{ {
// convert the Prolog arrays to std::vec for easy conversion to arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(pointsArr, pointsSize, pointsRowNum); mat points = convertArrayToMat(pointsMatArr, pointsMatSize, pointsMatRowNum);
// run the prediction and save the result in arma::rowvec // create the ReturnVector
rowvec predictions; rowvec predicReturnVector;
regressor.Predict(data, predictions);
// give back the sizes and the converted results as arrays // run the predict function on the model
*predicSize = predictions.n_elem; regressor.Predict(points, predicReturnVector);
*predicArr = convertToArray(predictions);
// return the Vector
returnVectorInformation(predicReturnVector, predicArr, predicArrSize);
} }
// input: const arma::mat &data, const arma::rowvec &responses, const bool intercept // input: const arma::mat &data,
// const arma::rowvec &responses,
// const bool intercept
// output: // output:
double train(float *matrix, SP_integer matSize, SP_integer matRowNum, float *responses_arr, SP_integer vecSize, SP_integer bool_intercept) double train(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum,
float *responsesArr, SP_integer responsesArrSize,
SP_integer bool_intercept)
{ {
if(matSize / matRowNum != vecSize) if(dataMatSize / dataMatRowNum != responsesArrSize)
{ {
cout << "Target dim doesnt fit to the Data dim" << endl; cout << "Target dim doesnt fit to the Data dim" << endl;
return 0; return 0;
} }
// convert the Prolog arrays to arma::rowvec and arma::mat // convert the Prolog array to arma::mat
rowvec responses = convertArrayToRowvec(responses_arr, vecSize); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
mat data = convertArrayToMat(matrix, matSize, matRowNum); // convert the Prolog array to arma::rowvec
rowvec responsesVector = convertArrayToRowvec(responsesArr, responsesArrSize);
// run the model train function // run the model train function
return regressor.Train(data, responses, (bool_intercept == 1)); return regressor.Train(data, responsesVector, (bool_intercept == 1));
} }
// input: const arma::mat &data, const arma::rowvec &responses, const arma::rowvec &weights, const bool intercept // input: const arma::mat &data,
// const arma::rowvec &responses,
// const arma::rowvec &weights,
// const bool intercept
// output: // output:
double trainWithWeights(float *matrix, SP_integer matSize, SP_integer matRowNum, float *responses_arr, SP_integer vecSize, float *weights_arr, SP_integer weightsSize, SP_integer bool_intercept) double trainWithWeights(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum,
float *responsesArr, SP_integer responsesArrSize,
float *weightsArr, SP_integer weightsArrSize,
SP_integer bool_intercept)
{ {
if(matSize / matRowNum != vecSize) if(dataMatSize / dataMatRowNum != responsesArrSize)
{ {
cout << "Target dim doesnt fit to the Data dim" << endl; cout << "Target dim doesnt fit to the Data dim" << endl;
return 0; return 0;
} }
// convert the Prolog arrays to arma::rowvec and arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(matrix, matSize, matRowNum); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
rowvec responses = convertArrayToRowvec(responses_arr, vecSize); // convert the Prolog array to arma::rowvec
rowvec weights = convertArrayToRowvec(weights_arr, weightsSize); rowvec responsesVector = convertArrayToRowvec(responsesArr, responsesArrSize);
rowvec weightsVector = convertArrayToRowvec(weightsArr, weightsArrSize);
// run the model train function // run the model train function
return regressor.Train(data, responses, weights, (bool_intercept == 1)); return regressor.Train(data, responsesVector, weightsVector, (bool_intercept == 1));
} }
...@@ -82,7 +82,7 @@ foreign(computeError, c, computeError( +pointer(float_array), +integer, +intege ...@@ -82,7 +82,7 @@ foreign(computeError, c, computeError( +pointer(float_array), +integer, +intege
%% --Description-- %% --Description--
%% Get the parameters (the b vector). %% Get the parameters (the b vector).
%% %%
foreign(parameters, c, parameters([-pointer(float_array)], -integer)). foreign(parameters, c, parameters(-pointer(float_array), -integer)).
%% --Input-- %% --Input--
......
...@@ -29,7 +29,8 @@ LSHSearch lshSearch; ...@@ -29,7 +29,8 @@ LSHSearch lshSearch;
// const size_t bucketSize = 500 // const size_t bucketSize = 500
// output: // output:
// description: // description:
void initModel(float *referenceMatArr, SP_integer referenceMatSize, SP_integer referenceMatRowNum, SP_integer numProj, SP_integer numTables, double hashWidth, SP_integer secondHashSize, SP_integer bucketSize) void initModel(float *referenceMatArr, SP_integer referenceMatSize, SP_integer referenceMatRowNum,
SP_integer numProj, SP_integer numTables, double hashWidth, SP_integer secondHashSize, SP_integer bucketSize)
{ {
// convert the Prolog arrays to arma::mat // convert the Prolog arrays to arma::mat
mat reference = convertArrayToMat(referenceMatArr, referenceMatSize, referenceMatRowNum); mat reference = convertArrayToMat(referenceMatArr, referenceMatSize, referenceMatRowNum);
...@@ -42,7 +43,8 @@ void initModel(float *referenceMatArr, SP_integer referenceMatSize, SP_integer r ...@@ -42,7 +43,8 @@ void initModel(float *referenceMatArr, SP_integer referenceMatSize, SP_integer r
// const arma::Mat< size_t > & realNeighbors // const arma::Mat< size_t > & realNeighbors
// output: double recall percentage [0, 1] // output: double recall percentage [0, 1]
// description: // description:
double computeRecall(float *foundNeighborsMatArr, SP_integer foundNeighborsMatSize, SP_integer foundNeighborsMatRowNum, float *realNeighborsMatArr, SP_integer realNeighborsMatSize, SP_integer realNeighborsMatRowNum) double computeRecall(float *foundNeighborsMatArr, SP_integer foundNeighborsMatSize, SP_integer foundNeighborsMatRowNum,
float *realNeighborsMatArr, SP_integer realNeighborsMatSize, SP_integer realNeighborsMatRowNum)
{ {
// convert the Prolog arrays to arma::mat // convert the Prolog arrays to arma::mat
Mat< size_t > foundNeighbors = conv_to<Mat< size_t >>::from(convertArrayToMat(foundNeighborsMatArr, foundNeighborsMatSize, foundNeighborsMatRowNum)); Mat< size_t > foundNeighbors = conv_to<Mat< size_t >>::from(convertArrayToMat(foundNeighborsMatArr, foundNeighborsMatSize, foundNeighborsMatRowNum));
......
...@@ -30,30 +30,26 @@ using namespace mlpack::meanshift; ...@@ -30,30 +30,26 @@ using namespace mlpack::meanshift;
// bool useSeeds = true // bool useSeeds = true
// output: // output:
// description: // description:
void meanShift(double radius, SP_integer maxIterations, float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, float **assignmentsArr, SP_integer *assignmentsArrSize, void meanShift(double radius, SP_integer maxIterations,
float **centroidsMatArr, SP_integer *centroidsMatColNum, SP_integer *centroidsMatRowNum, SP_integer forceConvergence, SP_integer useSeeds) float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum,
float **assignmentsArr, SP_integer *assignmentsArrSize,
float **centroidsMatArr, SP_integer *centroidsMatColNum, SP_integer *centroidsMatRowNum,
SP_integer forceConvergence,
SP_integer useSeeds)
{ {
// convert the Prolog arrays to arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
// create the ReturnVector
arma::Row<size_t> assignmentsReturnVector;
// create the ReturnMat
mat centroidsReturnMat;
// get the ReturnVector
arma::Row<size_t> toReturnVector;
// get the ReturnMat MeanShift<>(radius, maxIterations).Cluster(data, assignmentsReturnVector, centroidsReturnMat, (forceConvergence == 1), (useSeeds == 1));
mat toReturnMat;
MeanShift<>(radius, maxIterations).Cluster(data, toReturnVector, toReturnMat, (forceConvergence == 1), (useSeeds == 1));
// return the Vector lenght // return the Matrix
*assignmentsArrSize = toReturnVector.n_elem; returnMatrixInformation(centroidsReturnMat, centroidsMatArr, centroidsMatColNum, centroidsMatRowNum);
// return the Vector
// return the Vector as Array returnVectorInformation(assignmentsReturnVector, assignmentsArr, assignmentsArrSize);
*assignmentsArr = convertToArray(toReturnVector);
// return the Matrix dimensions
*centroidsMatColNum = toReturnMat.n_cols;
*centroidsMatRowNum = toReturnMat.n_rows;
// return the Matrix as one long Array
*centroidsMatArr = convertToArray(toReturnMat);
} }
...@@ -39,10 +39,8 @@ void nmf(char const *updateRule, SP_integer maxIterations, double minResidue, ...@@ -39,10 +39,8 @@ void nmf(char const *updateRule, SP_integer maxIterations, double minResidue,
// convert the Prolog arrays to arma::mat // convert the Prolog arrays to arma::mat
mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
// create the ReturnMat // create the ReturnMats
mat WReturnMat; mat WReturnMat;
// create the ReturnMat
mat HReturnMat; mat HReturnMat;
// decide which update rule to use // decide which update rule to use
...@@ -66,9 +64,7 @@ void nmf(char const *updateRule, SP_integer maxIterations, double minResidue, ...@@ -66,9 +64,7 @@ void nmf(char const *updateRule, SP_integer maxIterations, double minResidue,
cout << "wrong updateRule input" << endl; cout << "wrong updateRule input" << endl;
} }
// return the Matrix // return the Matrices
returnMatrixInformation(WReturnMat, WMatArr, WMatColNum, WMatRowNum); returnMatrixInformation(WReturnMat, WMatArr, WMatColNum, WMatRowNum);
// return the Matrix
returnMatrixInformation(HReturnMat, HMatArr, HMatColNum, HMatRowNum); returnMatrixInformation(HReturnMat, HMatArr, HMatColNum, HMatRowNum);
} }
...@@ -35,18 +35,17 @@ void pca(SP_integer scaleData, char const *decompositionPolicy, ...@@ -35,18 +35,17 @@ void pca(SP_integer scaleData, char const *decompositionPolicy,
float **eigValArr, SP_integer *eigValArrSize, float **eigValArr, SP_integer *eigValArrSize,
float **eigVecMatArr, SP_integer *eigVecMatColNum, SP_integer *eigVecMatRowNum) float **eigVecMatArr, SP_integer *eigVecMatColNum, SP_integer *eigVecMatRowNum)
{ {
// convert the Prolog arrays to arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
// create the ReturnMat // create the ReturnMat
mat transformedReturnMat; mat transformedReturnMat;
// create the ReturnVector // create the ReturnVector
vec eigValReturnVector; vec eigValReturnVector;
// create the ReturnMat // create the ReturnMat
mat eigVecReturnMat; mat eigVecReturnMat;
// decide for the decomposition Policy // decide for the decomposition Policy
if (strcmp(decompositionPolicy, "exact") == 0) if (strcmp(decompositionPolicy, "exact") == 0)
{ {
...@@ -69,12 +68,11 @@ void pca(SP_integer scaleData, char const *decompositionPolicy, ...@@ -69,12 +68,11 @@ void pca(SP_integer scaleData, char const *decompositionPolicy,
cout << "wrong decompositionPolicy input" << endl; cout << "wrong decompositionPolicy input" << endl;
} }
// return the Matrix // return the Matrix
returnMatrixInformation(transformedReturnMat, transformedMatArr, transformedMatColNum, transformedMatRowNum); returnMatrixInformation(transformedReturnMat, transformedMatArr, transformedMatColNum, transformedMatRowNum);
// return the Vector // return the Vector
returnVectorInformation(eigValReturnVector, eigValArr, eigValArrSize); returnVectorInformation(eigValReturnVector, eigValArr, eigValArrSize);
// return the Matrix // return the Matrix
returnMatrixInformation(eigVecReturnMat, eigVecMatArr, eigVecMatColNum, eigVecMatRowNum); returnMatrixInformation(eigVecReturnMat, eigVecMatArr, eigVecMatColNum, eigVecMatRowNum);
} }
...@@ -91,11 +89,12 @@ double pcaDimReduction(SP_integer scaleData, char const *decompositionPolicy, ...@@ -91,11 +89,12 @@ double pcaDimReduction(SP_integer scaleData, char const *decompositionPolicy,
SP_integer newDimension, SP_integer newDimension,
float **transformedMatArr, SP_integer *transformedMatColNum, SP_integer *transformedMatRowNum) float **transformedMatArr, SP_integer *transformedMatColNum, SP_integer *transformedMatRowNum)
{ {
// convert the Prolog arrays to arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
double returnValue; double returnValue;
// decide for the decomposition Policy // decide for the decomposition Policy
if (strcmp(decompositionPolicy, "exact") == 0) if (strcmp(decompositionPolicy, "exact") == 0)
{ {
...@@ -119,6 +118,7 @@ double pcaDimReduction(SP_integer scaleData, char const *decompositionPolicy, ...@@ -119,6 +118,7 @@ double pcaDimReduction(SP_integer scaleData, char const *decompositionPolicy,
returnValue = -1.0; returnValue = -1.0;
} }
// return the Matrix // return the Matrix
returnMatrixInformation(data, transformedMatArr, transformedMatColNum, transformedMatRowNum); returnMatrixInformation(data, transformedMatArr, transformedMatColNum, transformedMatRowNum);
...@@ -137,11 +137,12 @@ double pcaVarianceDimReduction(SP_integer scaleData, char const *decompositionPo ...@@ -137,11 +137,12 @@ double pcaVarianceDimReduction(SP_integer scaleData, char const *decompositionPo
double varRetained, double varRetained,
float **transformedMatArr, SP_integer *transformedMatColNum, SP_integer *transformedMatRowNum) float **transformedMatArr, SP_integer *transformedMatColNum, SP_integer *transformedMatRowNum)
{ {
// convert the Prolog arrays to arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
double returnValue; double returnValue;
// decide for the decomposition Policy // decide for the decomposition Policy
if (strcmp(decompositionPolicy, "exact") == 0) if (strcmp(decompositionPolicy, "exact") == 0)
{ {
...@@ -165,6 +166,7 @@ double pcaVarianceDimReduction(SP_integer scaleData, char const *decompositionPo ...@@ -165,6 +166,7 @@ double pcaVarianceDimReduction(SP_integer scaleData, char const *decompositionPo
returnValue = -1.0; returnValue = -1.0;
} }
// return the Matrix // return the Matrix
returnMatrixInformation(data, transformedMatArr, transformedMatColNum, transformedMatRowNum); returnMatrixInformation(data, transformedMatArr, transformedMatColNum, transformedMatRowNum);
......
...@@ -3,54 +3,17 @@ ...@@ -3,54 +3,17 @@
:- use_module(pca). :- use_module(pca).
:- use_module('../../helper_files/helper.pl'). :- use_module('../../helper_files/helper.pl').
reset_Model :-
initModel(1,0,50,0.0001).
:- begin_tests(lists). :- begin_tests(lists).
%% alpha tests test(alpha_after_train) :-
test(alpha_std_init) :- open('/home/afkjakhes/eclipse-workspace/prolog-mlpack-libary/src/data_csv/iris.csv', read, A),
reset_Model, take_csv_row(A, 10, B),
alpha(0). convert_list_to_float_array(B , 10, array(Xsize, Xrownum, X)),
test(alpha_wrong_input, fail) :- pca(0, randomized, X, Xsize, Xrownum, Tansfomed, TCols, TRows, EigVal, EigValSize, EigVec, EigVecCols, EigVecRows),
reset_Model, convert_float_array_to_2d_list(Tansfomed, TCols, TRows, TOut),
alpha(1). convert_float_array_to_list(EigVal, EigValSize, EigValOut),
test(alpha_after_train, A =:= 9223372036854775808) :- convert_float_array_to_2d_list(EigVec, EigVecCols, EigVecRows, EigVecOut),
reset_Model, print(TOut).
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],3, array(Xsize, Xrownum, X)),
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
train(X,Xsize, Xrownum,Y, Ysize),
alpha(A).
%% train tests
test(correct_train) :-
reset_Model,
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],3, array(Xsize, Xrownum, X)),
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
train(X,Xsize, Xrownum,Y, Ysize).
test(false_train, fail) :-
reset_Model,
convert_list_to_float_array([],3, array(Xsize, Xrownum, X)),
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
train(X,Xsize, Xrownum,Y, Ysize).
test(false_train2, fail) :-
reset_Model,
convert_list_to_float_array([],0, array(Xsize, Xrownum, X)),
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
train(X,Xsize, Xrownum,Y, Ysize).
test(false_train3, fail) :-
reset_Model,
convert_list_to_float_array([1,2],0, array(Xsize, Xrownum, X)),
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
train(X,Xsize, Xrownum,Y, Ysize).
test(false_train3, fail) :-
reset_Model,
convert_list_to_float_array([1,2,44,3],3, array(Xsize, Xrownum, X)),
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
train(X,Xsize, Xrownum,Y, Ysize).
test(false_train4) :-
reset_Model,
convert_list_to_float_array([1,2,44,3],2, array(Xsize, Xrownum, X)),
convert_list_to_float_array([0.2,0.2,0.2,0.2], array(Ysize, Y)),
train(X,Xsize, Xrownum,Y, Ysize).
:- end_tests(lists). :- end_tests(lists).
\ No newline at end of file
...@@ -38,25 +38,23 @@ void initModel(double noiseStdDev, SP_integer replicates, SP_integer angles, SP_ ...@@ -38,25 +38,23 @@ void initModel(double noiseStdDev, SP_integer replicates, SP_integer angles, SP_
// util::Timers & timers = IO::GetTimers() // util::Timers & timers = IO::GetTimers()
// output: // output:
// description: // description:
void doRadical(float *xMatArr, SP_integer xMatSize, SP_integer xMatRowNum, float **yMatArr, SP_integer *yMatColNum, SP_integer *yMatRowNum, float **wMatArr, SP_integer *wMatColNum, SP_integer *wMatRowNum) void doRadical(float *xMatArr, SP_integer xMatSize, SP_integer xMatRowNum,
float **yMatArr, SP_integer *yMatColNum, SP_integer *yMatRowNum,
float **wMatArr, SP_integer *wMatColNum, SP_integer *wMatRowNum)
{ {
// convert the Prolog arrays to arma::mat // convert the Prolog array to arma::mat
mat x = convertArrayToMat(xMatArr, xMatSize, xMatRowNum); mat x = convertArrayToMat(xMatArr, xMatSize, xMatRowNum);
// create the ReturnMat // create the ReturnMats
mat yReturnMat; mat yReturnMat;
// create the ReturnMat
mat wReturnMat; mat wReturnMat;
radicalObj.DoRadical(x, yReturnMat, wReturnMat); radicalObj.DoRadical(x, yReturnMat, wReturnMat);
// return the Matrix // return the Matrices
returnMatrixInformation(yReturnMat, yMatArr, yMatColNum, yMatRowNum); returnMatrixInformation(yReturnMat, yMatArr, yMatColNum, yMatRowNum);
// return the Matrix
returnMatrixInformation(wReturnMat, wMatArr, wMatColNum, wMatRowNum); returnMatrixInformation(wReturnMat, wMatArr, wMatColNum, wMatRowNum);
} }
...@@ -68,7 +66,7 @@ void doRadical(float *xMatArr, SP_integer xMatSize, SP_integer xMatRowNum, float ...@@ -68,7 +66,7 @@ void doRadical(float *xMatArr, SP_integer xMatSize, SP_integer xMatRowNum, float
// description: // description:
double doRadical2D(float *xMatArr, SP_integer xMatSize, SP_integer xMatRowNum) double doRadical2D(float *xMatArr, SP_integer xMatSize, SP_integer xMatRowNum)
{ {
// convert the Prolog arrays to arma::mat // convert the Prolog array to arma::mat
mat x = convertArrayToMat(xMatArr, xMatSize, xMatRowNum); mat x = convertArrayToMat(xMatArr, xMatSize, xMatRowNum);
return radicalObj.DoRadical2D(x); return radicalObj.DoRadical2D(x);
......
...@@ -65,13 +65,13 @@ void initModelWithTrainNoWeights(float *dataMatArr, SP_integer dataMatSize, SP_i ...@@ -65,13 +65,13 @@ void initModelWithTrainNoWeights(float *dataMatArr, SP_integer dataMatSize, SP_i
void initModelWithTrainWithWeights(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, float *labelsArr, SP_integer labelsArrSize, SP_integer numClasses, void initModelWithTrainWithWeights(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, float *labelsArr, SP_integer labelsArrSize, SP_integer numClasses,
float *weightsArr, SP_integer weightsArrSize, SP_integer numTrees, SP_integer minimumLeafSize, double minimumGainSplit, SP_integer maximumDepth) float *weightsArr, SP_integer weightsArrSize, SP_integer numTrees, SP_integer minimumLeafSize, double minimumGainSplit, SP_integer maximumDepth)
{ {
// convert the Prolog arrays to arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
// convert the Prolog arrays to arma::rowvec // convert the Prolog array to arma::rowvec
Row< size_t > labelsVector = convertArrayToVec(labelsArr, labelsArrSize); Row< size_t > labelsVector = convertArrayToVec(labelsArr, labelsArrSize);
// convert the Prolog arrays to arma::rowvec // convert the Prolog array to arma::rowvec
rowvec weightsVector = convertArrayToRowvec(weightsArr, weightsArrSize); rowvec weightsVector = convertArrayToRowvec(weightsArr, weightsArrSize);
...@@ -86,7 +86,7 @@ void initModelWithTrainWithWeights(float *dataMatArr, SP_integer dataMatSize, SP ...@@ -86,7 +86,7 @@ void initModelWithTrainWithWeights(float *dataMatArr, SP_integer dataMatSize, SP
// description: // description:
void classifyPoint(float *pointArr, SP_integer pointArrSize, SP_integer *prediction, float **probsArr, SP_integer *probsArrSize) void classifyPoint(float *pointArr, SP_integer pointArrSize, SP_integer *prediction, float **probsArr, SP_integer *probsArrSize)
{ {
// convert the Prolog arrays to arma::rowvec // convert the Prolog array to arma::rowvec
rowvec pointVector = convertArrayToRowvec(pointArr, pointArrSize); rowvec pointVector = convertArrayToRowvec(pointArr, pointArrSize);
// create the ReturnVector // create the ReturnVector
......
...@@ -24,7 +24,8 @@ SoftmaxRegression softmaxRegression; ...@@ -24,7 +24,8 @@ SoftmaxRegression softmaxRegression;
// const bool fitIntercept = false// // const bool fitIntercept = false//
// output: // output:
// description: // description:
void initModelNoTrain(SP_integer inputSize, SP_integer numClasses, SP_integer fitIntercept) void initModelNoTrain(SP_integer inputSize, SP_integer numClasses,
SP_integer fitIntercept)
{ {
softmaxRegression = SoftmaxRegression(inputSize, numClasses, (fitIntercept == 1)); softmaxRegression = SoftmaxRegression(inputSize, numClasses, (fitIntercept == 1));
} }
......
...@@ -32,9 +32,10 @@ SparseCoding sparseCoding; ...@@ -32,9 +32,10 @@ SparseCoding sparseCoding;
void initModelWithTrain(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, void initModelWithTrain(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum,
SP_integer atoms, double lambda1, double lambda2, SP_integer maxIterations, double objTolerance, double newtonTolerance) SP_integer atoms, double lambda1, double lambda2, SP_integer maxIterations, double objTolerance, double newtonTolerance)
{ {
// convert the Prolog arrays to arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
sparseCoding = SparseCoding(data, atoms, lambda1, lambda2, maxIterations, objTolerance, newtonTolerance, RandomInitializer()); sparseCoding = SparseCoding(data, atoms, lambda1, lambda2, maxIterations, objTolerance, newtonTolerance, RandomInitializer());
} }
...@@ -60,14 +61,16 @@ void initModelNoTrain(SP_integer atoms, double lambda1, double lambda2, SP_integ ...@@ -60,14 +61,16 @@ void initModelNoTrain(SP_integer atoms, double lambda1, double lambda2, SP_integ
void encode(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, void encode(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum,
float **codesMatArr, SP_integer *codesMatColNum, SP_integer *codesMatRowNum) float **codesMatArr, SP_integer *codesMatColNum, SP_integer *codesMatRowNum)
{ {
// convert the Prolog arrays to arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
// create the ReturnMat // create the ReturnMat
mat codesReturnMat; mat codesReturnMat;
sparseCoding.Encode(data, codesReturnMat); sparseCoding.Encode(data, codesReturnMat);
// return the Matrix // return the Matrix
returnMatrixInformation(codesReturnMat, codesMatArr, codesMatColNum, codesMatRowNum); returnMatrixInformation(codesReturnMat, codesMatArr, codesMatColNum, codesMatRowNum);
} }
...@@ -80,8 +83,9 @@ void encode(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum, ...@@ -80,8 +83,9 @@ void encode(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum,
// description: // description:
double train(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum) double train(float *dataMatArr, SP_integer dataMatSize, SP_integer dataMatRowNum)
{ {
// convert the Prolog arrays to arma::mat // convert the Prolog array to arma::mat
mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum); mat data = convertArrayToMat(dataMatArr, dataMatSize, dataMatRowNum);
return sparseCoding.Train(data, RandomInitializer()); return sparseCoding.Train(data, RandomInitializer());
} }
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment