【RustyML入门】1.2. 安装与Feature配置 1.2. 安装与Feature配置首先你需要在本地安装Rust工具链确保Rust版本是1.89及以上并且cargo已安装。运行以下命令以检查:rustc--versioncargo--version输出应该类似于:rustc 1.96.0 (ac68faa20 2026-05-25) cargo 1.96.0 (30a34c682 2026-05-25)需要注意的是RustyML默认开启全部功能如果你希望精简内容只开启部分也可以在Cargo.toml中手动配置这一点会在之后细讲不用担心。1.2.1. 将 RustyML 加入你的项目如果还没有创建项目的话使用cargo创建一个cargonew my_project# 将my_project替换成你想要的项目名正确运行的输出应该类似于:$ cargo new my_project Creating binary (application) my_project package note: see more Cargo.toml keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.htmlRustyML在crates.io上可以轻松被找到。打开项目里的Cargo.toml在[dependencies]部分写入:[dependencies] rustyml 0.14 ndarray 0.17第一行依赖的意思是使用0.14版本的rustymlcrate使用默认feature(也就是开启全部的feature)这样一来RustyML所有的功能你都可以使用了。第二行依赖的意思是使用0.17版本的ndarraycrate你几乎总是还需要把ndarray作为直接依赖引入因为这个crate是RustyML的依赖RustyML需要它来处理数据。有的使用你用不到RustyML的全部feature你可以通过调整第一行依赖的feature字段来挑选feature组合。几种常见搭配# 不写feature字段代表使用默认feature(全部功能) rustyml 0.14 # 仅神经网络框架 (需要关闭default feature) rustyml { version 0.14, default-features false, features [neural_network] } # 全量machine_learning、neural_network、utils、metrics、math (等价于default) rustyml { version 0.14, features [full] } # 全量外加训练时的终端进度条 rustyml { version 0.14, features [full, show_progress] }7.4 按需裁剪与模块化集成 会深入讲解如何精简feature。1.2.2. Feature 一览表构建由八个 feature 控制。default和full则是feature组合。Feature对应模块内容machine_learningrustyml::machine_learning回归、分类、聚类、降维、异常检测neural_networkrustyml::neural_networkKeras 风格的神经网络架构Sequential、层、优化器、损失函数utilsrustyml::utils标准化、归一化、标签编码、训练/测试集划分metricsrustyml::metrics回归、分类、聚类的评估指标mathrustyml::math数学计算、使用gemmkit等矩阵乘积、确定性并行归约defaultmachine_learningneural_networkutilsmetricsmath不指定任何 feature 时默认启用全部模块fullmachine_learningneural_networkutilsmetricsmath全部模块show_progress无对应模块提供终端进度条显示详见 1.2.6一些表格看不出来的信息machine_learning、neural_network、utils、metrics都会自动启用math。你从不需要在引入别的模块时再手动加上math除非你只想要这个数学计算模块详见 6. 数学工具。rustyml::error统一的Error类型详见1.6 错误处理和rustyml::random全局种子控制见 7.1 可复现性与随机种子只要machine_learning、neural_network或utils有一个开着就会出现。但metrics单独构建或math单独构建时不会因为这两个叶子模块既不返回RustymlResult也不消费随机性。rustyml::tuning运行时并行度开关见 7.3 性能调优与并行无论开哪个feature都会出现。rustyml::prelude模块总是会被编译所以你一直可以从通过它导入内容详见1.5 Prelude与模块导入。1.2.3. 每个 feature 引入哪些第三方 crate下面这个表格展示了RustyML的每个feature都需要使用什么第三方库。就使用来说你完全不需要这些内容不过这里还是列出来以方便你了解RustyML的依赖情况。Feature它激活的第三方 cratemathndarray、ahash、rayon、gemmkit-ndarraymachine_learningndarray、rayon、ndarray-rand、ahash、serde、postcard、thiserror、gemmkit-ndarrayneural_networkndarray、rayon、ndarray-rand、indicatif、serde、postcard、thiserror、gemmkit-ndarrayutilsndarray、rayon、ndarray-rand、ahash、serde、postcard、thiserror、gemmkit-ndarraymetricsndarray、ahash、rayon、gemmkit-ndarrayshow_progressindicatif第三方库版本作用ndarray0.17 rayonfeature serdefeature提供数组类型及相关方法rayon1.12并行计算ndarray-rand0.16为随机初始化提供种子ahash0.8 serdefeature提供标签编码和高速哈希表serde1.0 derivefeature提供模型权重的序列化和反序列化postcard1.1 use-stdfeature提供模型权重的存储和读取thiserror2.0派生Error枚举indicatif0.18画进度条gemmkit0.1默认开启 rayon 并行纯 Rust 的高性能矩阵乘法引擎自行决定串行还是并行、用几个线程经适配器间接引入不作为直接依赖gemmkit-ndarray0.1 epiloguefeature零拷贝的ndarray适配器转置、跨步切片都不用拷贝epilogue让bias/激活函数融合进矩阵乘法矩阵乘法的后端在gemmkit而不是RustyML里它提供GEMMKIT_*环境变量用于针对机器的调优而非通用调度详见 7.3 性能调优与并行。serde、postcard、thiserror是比较重的依赖。把它们去掉只留metrics和/或math可以压缩构建时间并且减少依赖数量例如rustyml { version 0.14, default-features false, features [metrics] }1.2.4. 一个最小的端到端验证在Cargo.toml里面写好依赖之后在src/main.rs里面写代码userustyml::prelude::machine_learning::*;usendarray::array;fnmain(){// 3 个样本2 个特征letxarray![[1.0,2.0],[2.0,3.0],[3.0,4.0]];letyarray![6.0,9.0,12.0];// new(fit_intercept) - Self默认求解器是精确的闭式解// 使用线性回归模型letmutmodelLinearRegression::new(true);model.fit(x,y).unwrap();// 训练模型// 使用训练好的模型进行预测letpredictionsmodel.predict(x).unwrap();println!(predicted {} values,predictions.len());}使用命令cargo run正常输出predicted 3 values1.2.5. 搭配ndarrayRustyML使用ndarray提供的数组类型不论输入还是输出。经典机器学习模块接收Array2f64特征矩阵和Array1f64目标向量神经网络则使用Tensor也就是ArrayDf32别名注意机器学习和工具模块用f64神经网络用f32。RustyML 0.14基于ndarray0.17构建确保你的Cargo.toml文件里ndarray的版本号是0.17。RustyML不会重新导出ndarray的构造函数所以要构造你喂进去的那些数组比如array!、Array2::from_shape_vec、Array::ones得从ndarraycrate里面调用。这就是为什么它必须是Cargo.toml里的依赖。1.3 使用ndarray准备数据讲了估计器期望的那些数组构造写法。1.2.6. 使用show_progress以显示训练进度条show_progress不添加任何类型也不解锁任何模块。启用后终端会有进度条显示已用时间、进度位置和当前损失结束时打印“Training completed”小批量循环fit_with_batches显示的是当前 epoch 里已跑过那些 batch 的平均损失。但进度条并不是你取回损失的途径——无论这个 feature 开没开fit和fit_with_batches都会返回一个每个 epoch 一条损失的History。它买到的是一次长时间的训练还在跑的时候你就能看着这个数字变而不用等调用返回之后才读到。在Cargo.toml中的给rustyml的features加上show_progressrustyml { version 0.14, features [full, show_progress] }再次使用命令cargo run你就能看到进度条由于这个代码里数据比较少所以你可能观察不到进度条的变化输出[00:00:00] ######################################## 1000/1000 | Cost: 0.001324 | Max iterations | Iterations: 1000 predicted 3 values建议只在交互式使用时再打开它。1.2.7. MSRVRustyML最低支持Rust版本是1.89。在更旧的工具链上解析器会拒绝这个crate。使用rustup update stable就可以更新工具链。除此之外没有任何需要配置的东西这就是RustyML的优势。