Машинное обучение на C ++

Опубликовано: 23 Июля, 2021

У большинства из нас C ++ является нашим первым языком, но когда дело доходит до чего-то вроде анализа данных и машинного обучения, Python становится нашим основным языком из-за его простоты и множества библиотек предварительно написанных модулей.
Но можно ли использовать C ++ и для машинного обучения? и если да, то как?

Предварительные условия:

  1. Библиотека ускорения C ++: - Это мощная библиотека C ++, используемая для различных целей, таких как большие математические операции и т. Д.
    Вы можете обратиться сюда для установки этой библиотеки
  2. ML pack Библиотека C ++: - Это небольшая и масштабируемая библиотека машинного обучения C ++.
    Вы можете обратиться сюда для установки этой библиотеки.
    Примечание: установите USE_OPENMP = OFF при установке mlpack, не переживайте, в данной ссылке есть руководство о том, как это сделать.
  3. Пример файла данных CSV: - Поскольку библиотека MLpack не имеет встроенного образца данных, мы должны использовать наш собственный образец данных.

Наша модель

Код, который мы пишем, берет простой набор данных векторов и находит ближайшего соседа для каждой точки данных.

Учебная часть выделена

Входные данные: наши входные данные - это файл с именем data.csv, содержащий набор векторных данных.
Файл содержит следующие данные:
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

Код:




#include <mlpack/core.hpp>
#include <mlpack/methods/neighbor_search/neighbor_search.hpp>
  
using namespace std;
using namespace mlpack;
// NeighborSearch and NearestNeighborSort
using namespace mlpack::neighbor;
// ManhattanDistance
using 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] << ". ";
    }
}
  
int main()
{
    mlModel();
    return 0;
}

Запустите приведенный выше код в Терминале / CMD, используя

g ++ knn_example.cpp -o knn_example -std = c ++ 11 -larmadillo -lmlpack -lboost_serialization

с последующим

./knn_example
Выход:
Ближайшим соседом точки 0 является точка 7, а расстояние равно 1.
Ближайшим соседом точки 1 является точка 2, а расстояние равно 0.
Ближайшим соседом точки 2 является точка 1, а расстояние равно 0.
Ближайшим соседом точки 3 является точка 10, а расстояние равно 1.
Ближайшим соседом точки 4 является точка 11, а расстояние равно 1.
Ближайший сосед точки 5 - точка 12, а расстояние равно 1.
Ближайшим соседом точки 6 является точка 12, а расстояние равно 1.
Ближайшим соседом точки 7 является точка 10, а расстояние равно 1.
Ближайшим соседом точки 8 является точка 9, а расстояние равно 0.
Ближайшим соседом точки 9 является точка 8, а расстояние равно 0.
Ближайшим соседом точки 10 является точка 9, а расстояние равно 1.
Ближайшим соседом точки 11 является точка 4, а расстояние равно 1.
Ближайшим соседом точки 12 является точка 9, а расстояние равно 1.