14次发布
0.9.2 | 2024年6月22日 |
---|---|
0.9.1 | 2023年3月10日 |
0.8.0 | 2019年6月7日 |
0.7.1 | 2019年3月16日 |
0.6.2 | 2018年10月6日 |
#52 in 机器学习
每月119次下载
用于2个crate(通过visqol-rs)
130KB
1.5K SLoC
一句话总结
您已使用libSVM训练了SVM,现在您希望在(实时)分类期间获得最高性能,如游戏或VR。
亮点
- 加载几乎所有libSVM类型(C-SVC、ν-SVC、ε-SVR、ν-SVR)和核(线性、多项式、RBF和sigmoid)
- 生成的分类结果与libSVM几乎相同
- 针对SIMD优化,并且可以与Rayon无缝混合
- 完全用Rust编写
- 在分类过程中对密集SVM无分配
- 比libSVM密集SVM快2.5倍到14倍
- 小型模型(例如,128个SV,16个密集属性,线性~500ns)的分类时间极低
- 在Unity和VR项目中成功使用(Windows & Android)
注意:目前需要Rust nightly(2019年3月及以后),因为我们依赖于RFC 2366(可移植SIMD)。一旦该RFC稳定,我们也将进入稳定状态。
用法
使用libSVM(例如,使用工具svm-train
)进行训练,然后使用ffsvm-rust
进行分类。
Rust中使用
// Replace `SAMPLE_MODEL` with a `&str` to your model.
let svm = DenseSVM::try_from(SAMPLE_MODEL)?;
let mut problem = Problem::from(&svm);
let features = problem.features();
features[0] = 0.55838;
features[1] = -0.157895;
features[2] = 0.581292;
features[3] = -0.221184;
svm.predict_value(&mut problem)?;
assert_eq!(problem.solution(), Solution::Label(42));
状态
- 2023年3月10日:为最新的Rust nightly重新激活。
- 2019年6月7日:放弃使用'no
unsafe
',但获得了运行时SIMD选择。 - 2019年3月10日:一旦我们可以从nightly版本中移除,我们将进入beta版本。
- 2018年8月5日:仍然处于alpha版本,但最终在crates.io上。
- 2018年5月27日:我们现在处于alpha版本。在Windows、Mac、Android和Linux上的各种机器和设备上成功内部使用。一旦SIMD稳定并且我们可以交叉编译到WASM,我们将移至beta版本。
- 2017年12月16日:我们现在处于预alpha版本。它可能甚至无法在您的机器上运行。
性能
所有关于 DenseSVM
的性能数据均已在此报告。我们同样支持 SparseSVM
,对于“主要密集”的模型来说运行较慢,而对于“主要稀疏”的模型来说运行更快(通常与libSVM的性能水平相当)。
提示
- 为了实现 x 倍的性能提升,创建多个
Problem
结构,并使用 Rayon的par_iter
进行处理。