Machine Learning in C++

30 Jun, 2019
Most of us have C++ as our First Language but when it comes to something like Data Analysis and Machine Learning, Python becomes our go-to Language because of its simplicity and plenty of libraries of pre-written Modules.But can C++ be used for Machine Learning too? and If yes, then how?
Pre-requisites:
C++ Boost Library:- It is a powerful C++ library used for various purposes like big Maths Operations, etc.You can refer here for installation of this LibraryML pack C++ Library:- This is a small and Scalable C++ Machine Learning Library.You can refer here for the installation of this Library.Note: set USE_OPENMP=OFF when installing mlpack, don’t sweat, given link has guide on how to do thatSample CSV Data File:- As MLpack library does not have any inbuilt Sample Dataset so we have to use our own Sample Dataset.
C++ Boost Library:- It is a powerful C++ library used for various purposes like big Maths Operations, etc.You can refer here for installation of this Library
ML pack C++ Library:- This is a small and Scalable C++ Machine Learning Library.You can refer here for the installation of this Library.Note: set USE_OPENMP=OFF when installing mlpack, don’t sweat, given link has guide on how to do that
Sample CSV Data File:- As MLpack library does not have any inbuilt Sample Dataset so we have to use our own Sample Dataset.
The Code we are writing takes a simple dataset of vectors and finds the nearest neighbour for each data point.
The Training Part has been highlighted
Input : Our Input is a file named data.csv containing a dataset of vectors
The File Contains the Following Data:
3, 3, 3, 3, 0
3, 4, 4, 3, 0
3, 4, 4, 3, 0
3, 3, 4, 3, 0
3, 6, 4, 3, 0
2, 4, 4, 3, 0
2, 4, 4, 1, 0
3, 3, 3, 2, 0
3, 4, 4, 2, 0
3, 4, 4, 2, 0
3, 3, 4, 2, 0
3, 6, 4, 2, 0
2, 4, 4, 2, 0

Code:
#include <mlpack/core.hpp>#include <mlpack/methods/neighbor_search/neighbor_search.hpp>  using namespace std;using namespace mlpack;// NeighborSearch and NearestNeighborSortusing namespace mlpack::neighbor;// ManhattanDistanceusing namespace mlpack::metric;  void mlModel(){    // Armadillo is a C++ linear algebra library;     // mlpack uses its matrix data type.    arma::mat data;      /*    data::Load is used to import data to the mlpack,     It takes 3 parameters,        1. Filename = Name of the File to be used        2. Matrix = Matrix to hold the Data in the File        3. fatal = true if you want it to throw an exception         if there is an issue    */    data::Load("data.csv", data, true);      /*    Create a NeighborSearch model. The parameters of the     model are specified with templates:        1. Sorting method: "NearestNeighborSort" - This         class sorts by increasing distance.        2. Distance metric: "ManhattanDistance" - The         L1 distance, the sum of absolute distances.        3. Pass the reference dataset (the vectors to         be searched through) to the constructor.     */    NeighborSearch<NearestNeighborSort, ManhattanDistance> nn(data);    // in the above line we trained our model or     // fitted the data to the model    // now we will predict      arma::Mat<size_t> neighbors; // Matrices to hold    arma::mat distances; // the results      /*    Find the nearest neighbors. Arguments are:-        1. k = 1, Specify the number of neighbors to find        2. Matrices to hold the result, in this case,         neighbors and distances    */    nn.Search(1, neighbors, distances);    // in the above line we find the nearest neighbor      // Print out each neighbor and its distance.    for (size_t i = 0; i < neighbors.n_elem; ++i)    {        std::cout << "Nearest neighbor of point " << i << " is point "                  << neighbors[i] << " and the distance is "                   << distances[i] << ".\n";    }}  int main(){    mlModel();    return 0;}
Run the above code in Terminal/CMD using
g++ knn_example.cpp -o knn_example -std=c++11 -larmadillo -lmlpack -lboost_serialization

followed by
./knn_example

Output:
Nearest neighbor of point 0 is point 7 and the distance is 1.
Nearest neighbor of point 1 is point 2 and the distance is 0.
Nearest neighbor of point 2 is point 1 and the distance is 0.
Nearest neighbor of point 3 is point 10 and the distance is 1.
Nearest neighbor of point 4 is point 11 and the distance is 1.
Nearest neighbor of point 5 is point 12 and the distance is 1.
Nearest neighbor of point 6 is point 12 and the distance is 1.
Nearest neighbor of point 7 is point 10 and the distance is 1.
Nearest neighbor of point 8 is point 9 and the distance is 0.
Nearest neighbor of point 9 is point 8 and the distance is 0.
Nearest neighbor of point 10 is point 9 and the distance is 1.
Nearest neighbor of point 11 is point 4 and the distance is 1.
Nearest neighbor of point 12 is point 9 and the distance is 1.

C++
Machine Learning
Machine Learning
CPP
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Set in C++ Standard Template Library (STL)
Priority Queue in C++ Standard Template Library (STL)
vector erase() and clear() in C++
Substring in C++
unordered_map in C++ STL
Naive Bayes Classifiers
ML | Linear Regression
Linear Regression (Python Implementation)
Reinforcement learning
Removing stop words with NLTK in Python