【RustyML入门】1.5. Prelude与模块导入
1.5. Prelude与模块导入
1.5.1. 把名字引入作用域的三种方式
从prelude导入全部内容
userustyml::prelude::*;这会把所有的内容导入到当前作用域中,适合于快速上手写代码,不需要去找内容的具体位置。
从prelude选择特定模块的内容引入
prelude拆成四个子模块,可以按需导入:
userustyml::prelude::machine_learning::*;// 经典机器学习估计器、trait和共享枚举userustyml::prelude::neural_network::*;// Sequential、History、Tensor、层、损失函数、优化器userustyml::prelude::metrics::*;// 评估指标函数和类型userustyml::prelude::utils::*;// standardize、normalize、缩放器、编码器、划分当你写的文件明显只属于一个领域时,就用这种写法。
通过精确路径来导入
use rustyml::machine_learning::LinearRegression; use rustyml::traits::{Fit, Predict}; use rustyml::metrics::r2_score;长期维护的库代码应该优先用这种。
1.5.2. prelude重新导出了什么
prelude是一份手工挑选的清单,它只重导出常用的内容,下面的表格展示了prelude下不同模块重导出的具体内容。
机器学习
| 分组 | 条目 |
|---|---|
| 估计器trait | Fit,Predict,Transform,FitTransform |
| 共享枚举 | DistanceCalculationMetric,RegularizationType,KernelType |
| 回归 | LinearRegression,LeastSquaresSolver |
| 线性分类 | LogisticRegression,generate_polynomial_features |
| 近邻 | KNN,WeightingStrategy |
| 决策树 | DecisionTree,DecisionTreeParams,Algorithm |
| SVM | SVC,LinearSVC |
| 判别分析 | LDA,DiscriminantSolver,Shrinkage |
| 聚类 | KMeans,DBSCAN,MeanShift,estimate_bandwidth |
| 降维 | PCA,KernelPCA,EigenSolver,SVDSolver |
| 流形 | TSNE,TSNEMethod,Init |
| 异常检测 | IsolationForest,Contamination |
神经网络
| 分组 | 条目 |
|---|---|
| Tensor | Tensor(ArrayD<f32>的别名) |
| 模型 | Sequential |
| 训练历史 | History(每个 epoch 一条损失,fit的返回值) |
| 核心层 | Dense,Flatten,Activation |
| 激活层 | Linear,ReLU,Sigmoid,Softmax,Tanh |
| 卷积 | Conv1D,Conv2D,Conv3D,DepthwiseConv2D,SeparableConv2D,PaddingType |
| 池化 | MaxPooling1D/2D/3D,AveragePooling1D/2D/3D,GlobalMaxPooling1D/2D/3D,GlobalAveragePooling1D/2D/3D |
| 循环 | SimpleRNN,LSTM,GRU |
| 正则化 | Dropout,SpatialDropout1D/2D/3D,GaussianDropout,GaussianNoise |
| 归一化 | BatchNormalization,LayerNormalization,LayerNormalizationAxis,GroupNormalization,InstanceNormalization |
| 损失函数 | MeanSquaredError,MeanAbsoluteError,BinaryCrossEntropy,CategoricalCrossEntropy,SparseCategoricalCrossEntropy |
| 优化器 | SGD,Adam,AdamW,RMSprop,AdaGrad |
注意RMSprop的大小写(小写的p)。激活函数有两种写法:一种是调用独立层ReLU/Softmax/Linear/Sigmoid/Tanh。另一种是在支持输入Activation枚举的层里选择一个变体(Activation::ReLU、Activation::Softmax、Activation::Linear、Activation::Sigmoid、Activation::Tanh)或者用一个独立激活层作为输入(它们impl Layer并可Into<Activation>)。
举个例子:Dense::new的一个参数是activation: impl Into<Activation>,你既可以传进去一个Activation枚举的变体,也可以传进去一个独立激活层:Dense::new(3, 8, Activation::ReLU)与Dense::new(3, 8, ReLU::new())等价。
评估指标
| 分组 | 条目 |
|---|---|
| 类型 | ConfusionMatrix,MulticlassConfusionMatrix,Average |
| 回归 | mean_squared_error,root_mean_squared_error,mean_absolute_error,median_absolute_error,mean_absolute_percentage_error,r2_score,explained_variance_score |
| 分类 | accuracy,roc_auc,roc_curve,precision_recall_curve,average_precision,log_loss,cohen_kappa,top_k_accuracy |
| 聚类 | adjusted_rand_index,adjusted_mutual_info,normalized_mutual_info,homogeneity_score,completeness_score,v_measure_score,fowlkes_mallows_score,silhouette_score,davies_bouldin_score,calinski_harabasz_score |
和其余模块的错误传播设计不同,指标函数在遇到错误时会直接panic,这是为了保持轻量所设置的,详见5. 模型评估。参数顺序是(y_true, y_pred),与scikit-learn一致。
工具函数
| 分组 | 条目 |
|---|---|
| 缩放 | standardize,StandardizationAxis,normalize,NormalizationAxis,NormalizationOrder,StandardScaler,MinMaxScaler,MaxAbsScaler,RobustScaler,Normalizer |
| 标签编码 | to_categorical,to_categorical_with_mapping,to_sparse_categorical |
| 数据划分 | train_test_split,train_test_split_stratified |
| Trait | Fit,Predict,Transform,FitTransform |
1.5.3. Feature 开关决定 prelude 的内容
rustyml::prelude模块总会被编译,但每个子模块必须得在对应模块的feature开启之后才会出现。所以use rustyml::prelude::*不等于RustyML的所有内容,它等于的是你开启的feature的所有功能,每个feature的内容详见1.2 安装与 Feature 配置。
| 启用的 feature | rustyml::prelude::*包含什么 |
|---|---|
machine_learning | 经典估计器、trait和共享枚举 |
neural_network | Sequential、History、Tensor、层、损失函数、优化器 |
metrics | 指标函数和混淆矩阵类型 |
utils | standardize、normalize、整族缩放器、编码器、划分函数、估计器trait |
default(五个模块全开) | 所有模块 |
full | 所有模块 |
1.5.4. 使用全限路径
建议通过docs.rs/rustyml查看内容的具体位置,下面是主要类型的查找表:
| 类型 / 函数 | 全限定路径 |
|---|---|
LinearRegression,LogisticRegression | rustyml::machine_learning:: |
KNN,DecisionTree,SVC,LinearSVC,LDA | rustyml::machine_learning:: |
KMeans,DBSCAN,MeanShift | rustyml::machine_learning:: |
PCA,KernelPCA,TSNE,IsolationForest,Contamination | rustyml::machine_learning:: |
Fit,Predict,Transform,FitTransform | rustyml::traits::(也在rustyml::machine_learning::与rustyml::utils::下重新导出) |
DistanceCalculationMetric | rustyml::machine_learning::或rustyml::math:: |
Sequential,History | rustyml::neural_network::sequential:: |
Tensor | rustyml::neural_network:: |
Dense,Flatten,Activation | rustyml::neural_network::layers:: |
Adam,SGD,AdamW,RMSprop,AdaGrad | rustyml::neural_network::optimizers:: |
MeanSquaredError、CategoricalCrossEntropy等 | rustyml::neural_network::losses:: |
accuracy、mean_squared_error、r2_score等 | rustyml::metrics:: |
ConfusionMatrix,MulticlassConfusionMatrix,Average | rustyml::metrics:: |
standardize,StandardizationAxis | rustyml::utils::standardize:: |
StandardScaler,MinMaxScaler,MaxAbsScaler,RobustScaler,Normalizer | rustyml::utils::(定义在rustyml::utils::scaler::) |
normalize,NormalizationAxis,NormalizationOrder | rustyml::utils::normalize:: |
train_test_split,train_test_split_stratified | rustyml::utils::train_test_split:: |
to_categorical、to_sparse_categorical等 | rustyml::utils::label_encoding:: |
Error,RustymlResult | rustyml::error:: |
set_global_seed,clear_global_seed | rustyml::(或rustyml::random::) |
