AI Tools from Intel
Find answers to your toolkit installation, configuration, and get-started questions.

DAAL SVM C++

Mohammed98
Beginner
2,425 Views

Hello,

I have been trying to do SVM classification in C++ and I used DAAL Library but unfortunately, I am getting wrong predictions.

Even when I test the algorithm in the same data that I trained the algorithm on I get, wrong predictions svm_two_class_train_dense.csv and svm_two_class_test_dense.csv have the same values but in a different order.

The code:

 

#include "daal.h"
#include "service.h"

using namespace daal;
using namespace daal::algorithms;
using namespace daal::data_management;

string trainDatasetFileName = "svm_two_class_train_dense.csv";
string testDatasetFileName = "svm_two_class_test_dense.csv";

const size_t nFeatures = 12;

/* Parameters for the SVM kernel function */
kernel_function::KernelIfacePtr kernel(new kernel_function::linear::Batch<>());

/* Model object for the SVM algorithm */
svm::training::ResultPtr trainingResult;
classifier::prediction::ResultPtr predictionResult;
NumericTablePtr testGroundTruth;

void trainModel();
void testModel();
void printResults();

int main(int argc, char** argv) {
string imageName;
double* p;
double test[F];
/*
*Write haralik_features results into CSV files
*/

//WriteToCSV();

trainModel();

testModel();
printResults();

 

return 0;
}

 

void trainModel()
{
/* Initialize FileDataSource<CSVFeatureManager> to retrieve the input data from a .csv file */
FileDataSource<CSVFeatureManager> trainDataSource(trainDatasetFileName, DataSource::notAllocateNumericTable, DataSource::doDictionaryFromContext);

/* Create Numeric Tables for training data and labels */
NumericTablePtr trainData = HomogenNumericTable<>::create(nFeatures, 0, NumericTable::doNotAllocate);
NumericTablePtr trainGroundTruth = HomogenNumericTable<>::create(1, 0, NumericTable::doNotAllocate);
NumericTablePtr mergedData = MergedNumericTable::create(trainData, trainGroundTruth);

/* Retrieve the data from the input file */
trainDataSource.loadDataBlock(mergedData.get());

/* Create an algorithm object to train the SVM model */
svm::training::Batch<float, svm::training::boser> algorithm;

algorithm.parameter.kernel = kernel;
algorithm.parameter.cacheSize = 40000000;

/* Pass a training data set and dependent values to the algorithm */
algorithm.input.set(classifier::training::data, trainData);
algorithm.input.set(classifier::training::labels, trainGroundTruth);

/* Build the SVM model */
algorithm.compute();

/* Retrieve the algorithm results */
trainingResult = algorithm.getResult();
}

void testModel()
{
/* Initialize FileDataSource<CSVFeatureManager> to retrieve the test data from a .csv file */
FileDataSource<CSVFeatureManager> testDataSource(testDatasetFileName, DataSource::notAllocateNumericTable, DataSource::doDictionaryFromContext);

/* Create Numeric Tables for testing data and labels */
NumericTablePtr testData = HomogenNumericTable<>::create(nFeatures, 0, NumericTable::doNotAllocate);
testGroundTruth = HomogenNumericTable<>::create(1, 0, NumericTable::doNotAllocate);
NumericTablePtr mergedData = MergedNumericTable::create(testData, testGroundTruth);

/* Retrieve the data from input file */
testDataSource.loadDataBlock(mergedData.get());

/* Create an algorithm object to predict SVM values */
svm::prediction::Batch<> algorithm;

algorithm.parameter.kernel = kernel;

/* Pass a testing data set and the trained model to the algorithm */
algorithm.input.set(classifier::prediction::data, testData);
algorithm.input.set(classifier::prediction::model, trainingResult->get(classifier::training::model));

/* Predict SVM values */
algorithm.compute();

/* Retrieve the algorithm results */
predictionResult = algorithm.getResult();
}

void printResults()
{
printNumericTables<int, float>(testGroundTruth, predictionResult->get(classifier::prediction::prediction), "Ground truth\t",
"Classification results", "SVM classification results (first 11 observations):", 11);
}

 

 

 

The output:

image1.png

 

Any help?

Thank you

 

0 Kudos
2 Replies
RahulU_Intel
Moderator
2,409 Views

Hi,


Thanks for posting in Intel forums. We are checking on this from our side. Could you please share with us the toolkit you are using and its version?


Thanks and Regards

Rahul



0 Kudos
Mohammed98
Beginner
2,399 Views

Hi,

This is what I am using:

Intel® oneAPI Data Analytics Library (oneDAL) 2021.3.0

Thanks,

Mohammed

0 Kudos
Reply