- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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:
Any help?
Thank you
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,
This is what I am using:
Intel® oneAPI Data Analytics Library (oneDAL) 2021.3.0
Thanks,
Mohammed
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page