https://github.com/ralfbiedert/ffsvm
FFSVM stands for "Really Fast Support Vector Machine"
https://github.com/ralfbiedert/ffsvm
libsvm machine-learning rust svm-library
Last synced: 6 months ago
JSON representation
FFSVM stands for "Really Fast Support Vector Machine"
- Host: GitHub
- URL: https://github.com/ralfbiedert/ffsvm
- Owner: ralfbiedert
- License: mit
- Created: 2017-12-10T16:52:20.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2024-12-14T16:04:25.000Z (over 1 year ago)
- Last Synced: 2025-03-31T15:19:13.821Z (about 1 year ago)
- Topics: libsvm, machine-learning, rust, svm-library
- Language: Rust
- Homepage:
- Size: 864 KB
- Stars: 75
- Watchers: 4
- Forks: 11
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![crates.io-badge]][crates.io-url]
[![docs.rs-badge]][docs.rs-url]
![license-badge]
[![rust-version-badge]][rust-version-url]
[![rust-build-badge]][rust-build-url]
## In One Sentence
You trained an SVM using [libSVM](https://github.com/cjlin1/libsvm), now you want the highest possible performance during (real-time) classification, like games or VR.
## Highlights
* loads almost all [libSVM](https://github.com/cjlin1/libsvm) types (C-SVC, ν-SVC, ε-SVR, ν-SVR) and kernels (linear, poly, RBF and sigmoid)
* produces practically same classification results as libSVM
* optimized for [SIMD](https://github.com/rust-lang/rfcs/pull/2366) and can be mixed seamlessly with [Rayon](https://github.com/rayon-rs/rayon)
* written in 100% safe Rust
* allocation-free during classification for dense SVMs
* **2.5x - 14x faster than libSVM for dense SVMs**
* extremely low classification times for small models (e.g., 128 SV, 16 dense attributes, linear ~ 500ns)
* successfully used in **Unity and VR** projects (Windows & Android)
## Usage
Train with [libSVM](https://github.com/cjlin1/libsvm) (e.g., using the tool `svm-train`), then classify with `ffsvm-rust`.
From Rust:
```rust
// Replace `SAMPLE_MODEL` with a `&str` to your model.
let svm = DenseSVM::try_from(SAMPLE_MODEL)?;
let mut fv = FeatureVector::from(&svm);
let features = fv.features();
features[0] = 0.55838;
features[1] = -0.157895;
features[2] = 0.581292;
features[3] = -0.221184;
svm.predict_value(&mut fv)?;
assert_eq!(fv.label(), Label::Class(42));
```
## Status
* **December 14, 2024**: **After 7+ years, finally ported to stable**.🎉🎉🎉
* **March 10, 2023**: Reactivated for latest Rust nightly.
* **June 7, 2019**: Gave up on 'no `unsafe`', but gained runtime SIMD selection.
* **March 10, 2019**: As soon as we can move away from nightly we'll go beta.
* **Aug 5, 2018**: Still in alpha, but finally on crates.io.
* **May 27, 2018**: We're in alpha. Successfully used internally on Windows, Mac, Android and Linux
on various machines and devices. Once SIMD stabilizes and we can cross-compile to WASM
we'll move to beta.
* **December 16, 2017**: We're in pre-alpha. It will probably not even work on your machine.
## Performance

All performance numbers reported for the `DenseSVM`. We also have support for `SparseSVM`s, which are slower
for "mostly dense" models, and faster for "mostly sparse" models (and generally on the performance level of libSVM).
[See here for details.](https://github.com/ralfbiedert/ffsvm-rust/blob/master/docs/performance.md)
#### Tips
* Compile your project with `target-cpu=native` for a massive speed boost (e.g., check our `.cargo/config.toml` how
you can easily do that for your project). Note, due to how Rust works, this is only used for application
(or dynamic FFI libraries), not library crates wrapping us.
* For an x-fold performance increase, create a number of `Problem` structures, and process them with [Rayon's](https://docs.rs/rayon/1.0.3/rayon/) `par_iter`.
## FAQ
[See here for details.](https://github.com/ralfbiedert/ffsvm-rust/blob/master/docs/FAQ.md)
[crates.io-badge]: https://img.shields.io/crates/v/ffsvm.svg
[crates.io-url]: https://crates.io/crates/ffsvm
[license-badge]: https://img.shields.io/badge/license-MIT-blue.svg
[docs.rs-badge]: https://docs.rs/ffsvm/badge.svg
[docs.rs-url]: https://docs.rs/ffsvm/
[rust-version-badge]: https://img.shields.io/badge/rust-1.83%2B-blue.svg?maxAge=3600
[rust-version-url]: https://github.com/ralfbiedert/ffsvm
[rust-build-badge]: https://github.com/ralfbiedert/ffsvm/actions/workflows/rust.yml/badge.svg
[rust-build-url]: https://github.com/ralfbiedert/ffsvm/actions/workflows/rust.yml