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