81
edits
Changes
no edit summary
== Introduction ==
Intel Data Analytics Acceleration Library, also known as Intel DAAL, is a library created by Intel in 2015 to solve problems associated with Big Dataand Machine Learning.<br/>Intel DAAL It is available for Linux, OS X and Windows platforms and it is available for works with the following programming languages: C++, Python, and Java programming platforms.<br/>Intel DAAL It is also optimized to run on a wide range of devices ranging from home computers to data centers and it uses Vectorization to deliver the best performances.<br/>
Intel DAAL helps speed big data analytics by providing highly optimized algorithmic building blocks for all data analysis stages and by supporting different processing modes.
== How Intel DAAL Works ==
Intel DAAL comes pre-bundled with Intel® Parallel Studio XE and Intel® SystemStudio. It is also available as a stand-alone version and can be installed following these [https://software.intel.com/en-us/get-started-with-daal-for-linux instructions].<br/>Intel DAAL is a simple and efficient approach towards solution to solve problems related to Big Data, Machine Learning, and Deep Learning .<br/>The reasoning behind that is because it takes away handles all the hustle of creating complex and efficient tedious algorithms for you and all software developers only have to do is calling functionsworry about feeding the Data and follow the Data Analytics Ecosystem Flow.<br/> Following, there are some pictures that show how Intel DAAL works in greater detail. [[File:Daal-flow.png]] <br/>This picture shows the Data Flow in Intel DAAL.The picture shows the data being fed to the program and all the steps that Intel DAAL goes through when processing the data. [[File:DaalModel.png|500px]] <br/>This picture shows the Intel DAAL provides many functions for Model(Data Management, Algorithms, and Services).This model represents all the functionalities that Intel DAAL offers from grabbing the data to making a final decision. [[File:DAALDataflow.PNG]] <br/>This picture shows how Intel DAAL processes the data. == Intel DAAL in handwritten digit recognition ==A very good type of machine learning problem is handwritten digit recognition. Intel DAAL does a good job at solving this problem by providing several relevant application algorithms such as Support Vector Machine (SVM), Principal Component Analysis (PCA), Naïve Bayes, and Neural Networks. Below there is an example that uses SVM to solve this problem. Recognition is essentially the prediction in the machine learning pipeline.When given a handwritten digit, the system should be able to determine which digit had been written. In order for a system to be able to predict the output with a set of data, it needs a trained model learned from the training data set that would provide the system with the capability to make a calculated prediction. The first step before constructing a training model is to collect training data from the given data within the .csv data set files === Loading Data in Intel DAAL ===Setting Training and Testing Files:<source lang=c++>string trainDatasetFileName = "digits_tra.csv";string trainGroundTruthFileName = "digits_tra_labels.csv";string testDatasetFileName = "digits_tes.csv";string testGroundTruthFileName = "digits_tes_labels.csv";</source> Setting Training and Prediction Models<source lang=c++>services::SharedPtr<svm::training::Batch<> > training(new svm::training::Batch<>());services::SharedPtr<svm::prediction::Batch<> > prediction(new svm::prediction::Batch<>());</source> Setting Training and Prediction Algorithm Models<source lang=c++>services::SharedPtr<multi_class_classifier::training::Result> trainingResult;services::SharedPtr<classifier::prediction::Result> predictionResult;</source> Setting up Kernel Function Parameters for Multi-Class Classifier<source lang=c++>kernel_function::rbf::Batch<> *rbfKernel = new kernel_function::rbf::Batch<>();services::SharedPtr<kernel_function::KernelIface> kernel(rbfKernel);services::SharedPtr<multi_class_classifier::quality_metric_set::ResultCollection> qualityMetricSetResult;</source> Initializing Numeric Tables for Predicted and Ground Truth<source lang=c++>services::SharedPtr<NumericTable> predictedLabels;services::SharedPtr<NumericTable> groundTruthLabels;</source> === Training Data in Intel DAAL ===[[ImageFile:trainpic.jpg]]<br/>Initialize FileDataSource<CSVFeatureManager> to retrieve input data from .csv file <source lang=c++>FileDataSource<CSVFeatureManager> trainDataSource(trainDatasetFileName, DataSource::DaalModeldoAllocateNumericTable, DataSource::doDictionaryFromContext);FileDataSource<CSVFeatureManager> trainGroundTruthSource(trainGroundTruthFileName, DataSource::doAllocateNumericTable, DataSource::doDictionaryFromContext);</source> Load data from files<source lang=c++>trainDataSource.loadDataBlock(nTrainObservations);trainGroundTruthSource.loadDataBlock(nTrainObservations);</source> Initialize algorithm object for SVM training<source lang=c++>multi_class_classifier::training::Batch<> algorithm;</source> Setting algorithm parameters<source lang=c++>algorithm.parameter.nClasses = nClasses;algorithm.parameter.training = training;algorithm.parameter.prediction = prediction;</source> Pass dependent parameters and training data to the algorithm<source lang=c++>algorithm.input.set(classifier::training::data, trainDataSource.getNumericTable());algorithm.input.set(classifier::training::labels, trainGroundTruthSource.getNumericTable());</source> Retrieving results from algorithm<source lang=c++>trainingResult = algorithm.getResult();</source> Serialize the learned model into a disk file. The training data from trainingResult is written to the model.<source lang=c++>ModelFileWriter writer("./model");writer.serializeToFile(trainingResult->get(classifier::training::model));</source> === Testing The Trained Model ===[[File:testpic.jpg]]<br/>Initialize testDataSource to retrieve test data from a .csv file<source lang=c++>FileDataSource<CSVFeatureManager> testDataSource(testDatasetFileName, DataSource::doAllocateNumericTable, DataSource::doDictionaryFromContext);testDataSource.loadDataBlock(nTestObservations);</source> Initialize algorithm object for prediction of SVM values<source lang=c++>multi_class_classifier::prediction::Batch<> algorithm;</source> Setting algorithm parameters<source lang=c++>algorithm.parameter.nClasses = nClasses;algorithm.parameter.training = training;algorithm.parameter.prediction = prediction;</source> Pass into the algorithm the testing data and trained model<source lang=c++>algorithm.input.set(classifier::prediction::data, testDataSource.getNumericTable());algorithm.input.set(classifier::prediction::model,trainingResult->get(classifier::training::model));</source> Retrieve results from algorithm<source lang=c++>predictionResult = algorithm.getResult();</source> === Testing the Quality of the Model ===Initialize testGroundTruth to retrieve ground truth test data from .csv file<source lang=c++>FileDataSource<CSVFeatureManager> testGroundTruth(testGroundTruthFileName, DataSource::doAllocateNumericTable, DataSource::doDictionaryFromContext);testGroundTruth.loadDataBlock(nTestObservations);</source> Retrieve label for ground truth<source lang=c++>groundTruthLabels = testGroundTruth.getNumericTable();</source> Retrieve prediction label<source lang=c++>predictedLabels = predictionResult->get(classifier::prediction::prediction);</source> Create quality metric object to quantitate quality metrics of the classifier algorithm<source lang=c++>multi_class_classifier::quality_metric_set::Batch qualityMetricSet(nClasses);services::SharedPtr<multiclass_confusion_matrix::Input> input = qualityMetricSet.getInputDataCollection()->getInput(multi_class_classifier::quality_metric_set::confusionMatrix);input->set(multiclass_confusion_matrix::predictedLabels, predictedLabels);input->set(multiclass_confusion_matrix::groundTruthLabels, groundTruthLabels);</source> Compute quality<source lang=c++>qualityMetricSet.compute();</source> Retrieve quality results<source lang=c++>qualityMetricSetResult = qualityMetricSet.getResultCollection();</source> <br/>=== SVM Digit Recognition Code Example Output ===[[File:outputDAAL.png|centerjpg|600px 950px]]
== Sources ==
* [https://software.intel.com/en-us/blogs/daal Intel's Blog Post about Intel DAAL]
* [https://software.intel.com/en-us/daal-programming-guide Intel DAAL Guide Book]
* [https://www.codeproject.com/Articles/1151612/A-Performance-Library-for-Data-Analytics-and-Machi Handwritten Digit Recognition Example]
* [https://software.intel.com/en-us/comment/1916392#comment-1916392 Rosario's Question on the Intel Forum]