Linfa
linfa (Italian) / sap (English):
The vital circulating fluid of a plant.
linfa
aims to provide a comprehensive toolkit to build Machine Learning applications with Rust.
Kin in spirit to Python's scikitlearn
, it focuses on common preprocessing tasks and classical ML algorithms for your everyday ML tasks.
Documentation: latest Community chat: Zulip
Current state
Where does linfa
stand right now? Are we learning yet?
linfa
currently provides subpackages with the following algorithms:
Name  Purpose  Status  Category  Notes 

clustering  Data clustering  Tested / Benchmarked  Unsupervised learning  Clustering of unlabeled data; contains KMeans, GaussianMixtureModel and DBSCAN 
kernel  Kernel methods for data transformation  Tested  Preprocessing  Maps feature vector into higherdimensional space 
linear  Linear regression  Tested  Partial fit  Contains Ordinary Least Squares (OLS), Generalized Linear Models (GLM) 
elasticnet  Elastic Net  Tested  Supervised learning  Linear regression with elastic net constraints 
logistic  Logistic regression  Tested  Partial fit  Builds twoclass logistic regression models 
reduction  Dimensionality reduction  Tested  Preprocessing  Diffusion mapping and Principal Component Analysis (PCA) 
trees  Decision trees  Experimental  Supervised learning  Linear decision trees 
svm  Support Vector Machines  Tested  Supervised learning  Classification or regression analysis of labeled datasets 
hierarchical  Agglomerative hierarchical clustering  Tested  Unsupervised learning  Cluster and build hierarchy of clusters 
bayes  Naive Bayes  Tested  Supervised learning  Contains Gaussian Naive Bayes 
ica  Independent component analysis  Tested  Unsupervised learning  Contains FastICA implementation 
We believe that only a significant community effort can nurture, build, and sustain a machine learning ecosystem in Rust  there is no other way forward.
If this strikes a chord with you, please take a look at the roadmap and get involved!
BLAS/Lapack backend
At the moment you can choose between the following BLAS/LAPACK backends: openblas
, netblas
or intelmkl
Backend  Linux  Windows  macOS 

OpenBLAS 

   
Netlib 

   
Intel MKL 



For example if you want to use the system IntelMKL library for the PCA example, then pass the corresponding feature:
cd linfareduction && cargo run release example pca features linfa/intelmklsystem
This selects the intelmkl
system library as BLAS/LAPACK backend. On the other hand if you want to compile the library and link it with the generated artifacts, pass intelmklstatic
.
License
Duallicensed to be compatible with the Rust project.
Licensed under the Apache License, Version 2.0 http://www.apache.org/licenses/LICENSE2.0 or the MIT license http://opensource.org/licenses/MIT, at your option. This file may not be copied, modified, or distributed except according to those terms.