3个版本 (稳定版)
| 1.1.1 | 2020年4月1日 | 
|---|---|
| 1.0.0 | 2018年3月18日 | 
| 0.1.0 | 2018年3月10日 | 
#212 in 机器学习
38KB
294 行
RusticSOM
Rust库用于自组织映射(SOM)。
使用此包
在 Cargo.toml 中将 rusticsom 添加为依赖项
[dependencies]
rusticsom = "1.1.0"
包含包
use rusticsom::SOM;
API
使用 SOM::create 通过以下API调用创建SOM对象,它创建一个具有 length x breadth 细胞的SOM,并接受长度为 inputs 的神经元。
pub fn create(length: usize, breadth: usize, inputs: usize, randomize: bool, learning_rate: Option<f32>, sigma: Option<f32>, decay_function: Option<fn(f32, u32, u32) -> f64>, neighbourhood_function: Option<fn((usize, usize), (usize, usize), f32) -> Array2<f64>>) -> SOM { ... }
randomize 是一个标志,如果为true,则将每个细胞的权重初始化为随机、小的浮点数。
learning_rate 是可选的,是SOM的学习率;默认情况下将是 0.5。
sigma 是可选的,是邻域函数的扩散;默认情况下将是 1.0。
decay_function 是可选的,是一个接受类型为 f32, u32, u32 的函数的函数指针,并返回一个 f64。此函数用于“衰减”learning_rate 和 sigma。默认情况是
new_value = old_value / (1 + current_iteration/total_iterations)
neighbourhood_function 是一个可选函数指针,它接受三个参数:一个表示SOM大小的类型为 (usize, usize) 的元组,另一个表示获胜神经元的位置的类型为 (usize, usize) 的元组,以及一个表示 sigma 的 f32。它返回一个包含获胜神经元邻居权重的二维数组,即以 winner 为中心的数组。默认情况下,将使用高斯函数,它返回“以获胜神经元为中心的高斯函数”。
    pub fn from_json(serialized: &str,  decay_function: Option<fn(f32, u32, u32) -> f64>, neighbourhood_function: Option<fn((usize, usize), (usize, usize), f32) -> Array2<f64>>) -> serde_json::Result<SOM> { ... }
此函数允许使用 SOM::to_json() 导出的SOM json数据创建SOM。
使用 SOM_Object.train_random() 使用输入数据集训练SOM,其中输入数据集的样本以随机顺序选择。
pub fn train_random(&mut self, data: Array2<f64>, iterations: u32) { ... }
从二维数组 data 中随机选择样本,并针对 iterations 迭代进行SOM训练!
使用 SOM_Object.train_batch() 使用输入数据集训练SOM,其中输入数据集的样本以顺序选择。
pub fn train_batch(&mut self, data: Array2<f64>, iterations: u32) { ... }
按顺序从二维数组 data 中选择样本,并针对 iterations 迭代进行SOM训练!
使用 SOM_Object.winner() 查找给定样本的获胜神经元。
pub fn winner(&mut self, elem: Array1<f64>) -> (usize, usize) { ... }
必须与SOM对象一起调用此函数。
需要一个参数,即表示输入样本的1维数组 f64。
返回一个表示SOM中获胜神经元的x和y坐标的类型为 (usize, usize) 的元组。
使用 SOM_Object.winner_dist() 查找给定样本的获胜神经元及其与该获胜神经元的距离。
pub fn winner_dist(&mut self, elem: Array1<f64>) -> ((usize, usize), f64) { ... }
必须与SOM对象一起调用此函数。
需要一个参数,即表示输入样本的1维数组 f64。
返回一个表示SOM中获胜神经元的x和y坐标的类型为 (usize, usize) 的元组。
还返回一个表示输入样本与该获胜神经元距离的 f64。
pub fn activation_response(&self) -> ArrayView2<usize> { ... }
此函数返回SOM的激活图。激活图是一个二维数组,其中每个单元格在 (i, j) 处表示SOM中 (i, j) 单元被选为获胜神经元的次数。
pub fn get_size(&self) -> (usize, usize)
此函数返回一个表示SOM大小的元组。格式为 (length, breadth)。
pub fn distance_map(self) -> Array2<f64> { ... }
返回SOM的距离图,即每个神经元与每个其他神经元的归一化距离。
pub fn to_json(&self) -> serde_json::Result<String> { ... }
以格式化的json(使用 serde_json)返回SOM的内部数据。
主要贡献者
|  | Aditi Srinivas | 
|  | Avinash Shenoy | 
示例
我们在著名的鸢尾花数据集(以csv格式存储在 extras 文件夹中)上测试了这个crate。
使用 /tests/test.rs 中的 t_full_test 函数生成所需输出。以下图表使用Python的matplotlib生成。
使用5 x 5的自组织映射(SOM),训练了250次

使用10 x 10的自组织映射(SOM),训练了1000次

| 符号 | 表示 | 
|---|---|
| 圆形 | setosa | 
| 正方形 | versicolor | 
| 菱形 | virginica | 
依赖关系
~2.3–3.5MB
~64K SLoC