La mayoría de nosotros tenemos C++ como nuestro primer idioma, pero cuando se trata de algo como el análisis de datos y el aprendizaje automático, Python se convierte en nuestro idioma de referencia debido a su simplicidad y muchas bibliotecas de módulos preescritos.
Pero, ¿se puede usar C++ también para el aprendizaje automático? y si es así, ¿cómo?
Requisitos previos:
- Biblioteca C++ Boost: – Es una poderosa biblioteca C++ utilizada para varios propósitos, como grandes operaciones matemáticas, etc.
Puede consultar aquí para la instalación de esta biblioteca - Biblioteca C++ del paquete ML: – Esta es una biblioteca de aprendizaje automático C++ pequeña y escalable.
Puede consultar aquí para la instalación de esta biblioteca.
Nota: configure USE_OPENMP=OFF al instalar mlpack, no se preocupe, el enlace dado tiene una guía sobre cómo hacerlo - Archivo de datos CSV de muestra: – Como la biblioteca MLpack no tiene ningún conjunto de datos de muestra incorporado, tenemos que usar nuestro propio conjunto de datos de muestra.
Nuestro modelo
El código que estamos escribiendo toma un conjunto de datos simple de vectores y encuentra el vecino más cercano para cada punto de datos.
La Parte de Entrenamiento ha sido resaltada
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
Código:
#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] << ".\n"; } } int main() { mlModel(); return 0; }
Ejecute el código anterior en Terminal/CMD usando
g++ knn_example.cpp -o knn_example -std=c++11 -larmadillo -lmlpack -lboost_serialization
seguido por
./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.