Машинное обучение на C ++
Опубликовано: 23 Июля, 2021
У большинства из нас C ++ является нашим первым языком, но когда дело доходит до чего-то вроде анализа данных и машинного обучения, Python становится нашим основным языком из-за его простоты и множества библиотек предварительно написанных модулей.
Но можно ли использовать C ++ и для машинного обучения? и если да, то как?
Предварительные условия:
- Библиотека ускорения C ++: - Это мощная библиотека C ++, используемая для различных целей, таких как большие математические операции и т. Д.
Вы можете обратиться сюда для установки этой библиотеки - ML pack Библиотека C ++: - Это небольшая и масштабируемая библиотека машинного обучения C ++.
Вы можете обратиться сюда для установки этой библиотеки.
Примечание: установите USE_OPENMP = OFF при установке mlpack, не переживайте, в данной ссылке есть руководство о том, как это сделать. - Пример файла данных 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.