6 releases

0.3.2 May 1, 2023
0.3.1 Mar 20, 2023
0.3.0 Nov 9, 2022
0.2.1 May 9, 2022
0.1.0 Sep 26, 2020

#37 in Machine learning

Download history 659/week @ 2023-11-02 1134/week @ 2023-11-09 579/week @ 2023-11-16 719/week @ 2023-11-23 642/week @ 2023-11-30 697/week @ 2023-12-07 713/week @ 2023-12-14 409/week @ 2023-12-21 439/week @ 2023-12-28 412/week @ 2024-01-04 781/week @ 2024-01-11 680/week @ 2024-01-18 434/week @ 2024-01-25 400/week @ 2024-02-01 510/week @ 2024-02-08 602/week @ 2024-02-15

2,030 downloads per month
Used in 10 crates (8 directly)


23K SLoC


User guide | API | Notebooks

Machine Learning in Rust


To start getting familiar with the new smartcore v0.3 API, there is now available a Jupyter Notebook environment repository. Please see instructions there, contributions welcome see CONTRIBUTING.



Welcome to smartcore, machine learning in Rust!

smartcore features various classification, regression and clustering algorithms including support vector machines, random forests, k-means and DBSCAN, as well as tools for model selection and model evaluation.

smartcore provides its own traits system that extends Rust standard library, to deal with linear algebra and common computational models. Its API is designed using well recognizable patterns. Extra features (like support for ndarray structures) is available via optional features.

Getting Started

To start using smartcore latest stable version simply add the following to your Cargo.toml file:

smartcore = "*"

To start using smartcore development version with latest unstable additions:

smartcore = { git = "https://github.com/smartcorelib/smartcore", branch = "development" }

There are different features that can be added to the base library, for example to add sample datasets:

smartcore = { git = "https://github.com/smartcorelib/smartcore", features = ["datasets"] }

Check smartcore's Cargo.toml for available features.

Using Jupyter

For quick introduction, Jupyter Notebooks are available here. You can set up a local environment to run Rust notebooks using EVCXR following these instructions.

First Example

For example, you can use this code to fit a K Nearest Neighbors classifier to a dataset that is defined as standard Rust vector:

// DenseMatrix definition
use smartcore::linalg::basic::matrix::DenseMatrix;
// KNNClassifier
use smartcore::neighbors::knn_classifier::*;
// Various distance metrics
use smartcore::metrics::distance::*;

// Turn Rust vector-slices with samples into a matrix
let x = DenseMatrix::from_2d_array(&[
   &[1., 2.],
   &[3., 4.],
   &[5., 6.],
   &[7., 8.],
   &[9., 10.]]);
// Our classes are defined as a vector
let y = vec![2, 2, 2, 3, 3];

// Train classifier
let knn = KNNClassifier::fit(&x, &y, Default::default()).unwrap();

// Predict classes
let y_hat = knn.predict(&x).unwrap();


Supported algorithms

All machine learning algorithms are grouped into these broad categories:

  • Clustering, unsupervised clustering of unlabeled data.
  • Matrix Decomposition, various methods for matrix decomposition.
  • Linear Models, regression and classification methods where output is assumed to have linear relation to explanatory variables
  • Ensemble Models, variety of regression and classification ensemble models
  • Tree-based Models, classification and regression trees
  • Nearest Neighbors, K Nearest Neighbors for classification and regression
  • Naive Bayes, statistical classification technique based on Bayes Theorem
  • SVM, support vector machines

Linear Algebra traits system

For an introduction to smartcore's traits system see this notebook


~32K SLoC