3个版本 (稳定版)

1.1.1 2020年4月1日
1.0.0 2018年3月18日
0.1.0 2018年3月10日

#212 in 机器学习

MIT 许可证

38KB
294

RusticSOM

Rust库用于自组织映射(SOM)。

Status Open Source Love License Build Status

使用此包

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_ratesigma。默认情况是

new_value = old_value / (1 + current_iteration/total_iterations)

neighbourhood_function 是一个可选函数指针,它接受三个参数:一个表示SOM大小的类型为 (usize, usize) 的元组,另一个表示获胜神经元的位置的类型为 (usize, usize) 的元组,以及一个表示 sigmaf32。它返回一个包含获胜神经元邻居权重的二维数组,即以 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次

SOM1


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

SOM2

符号 表示
圆形 setosa
正方形 versicolor
菱形 virginica

依赖关系

~2.3–3.5MB
~64K SLoC