pub struct Node2Vec { /* private fields */ }Expand description
Builder for configuring and running the Node2Vec algorithm.
Construct with Node2Vec::new, chain optional parameters, then call Node2Vec::fit.
§Example
use rune_node2vec::Node2Vec;
let model = Node2Vec::new()
.embedding_dim(64)
.walk_length(40)
.num_walks(5)
.p(1.0)
.q(0.5)
.n_epochs(3)
.random_seed(7);Implementations§
Source§impl Node2Vec
impl Node2Vec
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates a new Node2Vec instance with sensible defaults.
| Parameter | Default |
|---|---|
embedding_dim | 128 |
walk_length | 80 |
num_walks | 10 |
window_size | 10 |
p | 1.0 |
q | 1.0 |
n_epochs | 1 |
learning_rate | 0.025 |
neg_samples | 5 |
random_seed | 42 |
§Example
use rune_node2vec::Node2Vec;
let model = Node2Vec::new();Sourcepub fn embedding_dim(self, d: usize) -> Self
pub fn embedding_dim(self, d: usize) -> Self
Dimensionality of each output embedding vector. Defaults to 128.
§Example
use rune_node2vec::Node2Vec;
let model = Node2Vec::new().embedding_dim(64);Sourcepub fn walk_length(self, l: usize) -> Self
pub fn walk_length(self, l: usize) -> Self
Number of nodes in each random walk. Defaults to 80.
§Example
use rune_node2vec::Node2Vec;
let model = Node2Vec::new().walk_length(40);Sourcepub fn num_walks(self, n: usize) -> Self
pub fn num_walks(self, n: usize) -> Self
Number of walks generated from each node. Defaults to 10.
§Example
use rune_node2vec::Node2Vec;
let model = Node2Vec::new().num_walks(5);Sourcepub fn window_size(self, w: usize) -> Self
pub fn window_size(self, w: usize) -> Self
Skip-gram context window half-width. Defaults to 10.
Each centre node is paired with all nodes within window_size positions
on either side in the walk.
§Example
use rune_node2vec::Node2Vec;
let model = Node2Vec::new().window_size(5);Sourcepub fn p(self, p: f64) -> Self
pub fn p(self, p: f64) -> Self
Return parameter controlling the likelihood of revisiting a node. Defaults to 1.0.
Low p encourages the walk to backtrack; high p pushes the walk forward.
Clamped to a minimum of 1e-9.
§Example
use rune_node2vec::Node2Vec;
let model = Node2Vec::new().p(0.5);Sourcepub fn q(self, q: f64) -> Self
pub fn q(self, q: f64) -> Self
In-out parameter controlling the walk’s tendency to explore. Defaults to 1.0.
Low q favours DFS-like exploration of the graph; high q favours BFS-like
local neighbourhood traversal. Clamped to a minimum of 1e-9.
§Example
use rune_node2vec::Node2Vec;
let model = Node2Vec::new().q(2.0);Sourcepub fn n_epochs(self, n: usize) -> Self
pub fn n_epochs(self, n: usize) -> Self
Number of training epochs over all walks. Defaults to 1.
§Example
use rune_node2vec::Node2Vec;
let model = Node2Vec::new().n_epochs(5);Sourcepub fn learning_rate(self, lr: f64) -> Self
pub fn learning_rate(self, lr: f64) -> Self
Initial SGD learning rate; decays linearly to 0.0001 × initial_lr. Defaults to 0.025.
§Example
use rune_node2vec::Node2Vec;
let model = Node2Vec::new().learning_rate(0.01);Sourcepub fn neg_samples(self, n: usize) -> Self
pub fn neg_samples(self, n: usize) -> Self
Number of negative samples drawn per positive (centre, context) pair. Defaults to 5.
§Example
use rune_node2vec::Node2Vec;
let model = Node2Vec::new().neg_samples(10);Sourcepub fn random_seed(self, s: u64) -> Self
pub fn random_seed(self, s: u64) -> Self
Seed for the internal Xorshift64 PRNG. Identical seeds produce identical embeddings.
Defaults to 42.
§Example
use rune_node2vec::Node2Vec;
let model = Node2Vec::new().random_seed(123);Sourcepub fn fit(&self, n_nodes: usize, edges: &[(usize, usize)]) -> EmbedResult
pub fn fit(&self, n_nodes: usize, edges: &[(usize, usize)]) -> EmbedResult
Computes Node2Vec embeddings for an undirected graph.
n_nodes is the total number of nodes (indices 0..n_nodes). edges is a
slice of undirected (u, v) pairs; each edge is added in both directions.
Self-loops are ignored.
Every node receives an embedding regardless of whether it has any edges. Isolated nodes are not visited during walk training and keep their random initial embedding.
§Panics
Panics if any node index in edges is ≥ n_nodes.
§Example
use rune_node2vec::Node2Vec;
// Two connected triangles sharing no edge.
let edges = vec![
(0, 1), (1, 2), (2, 0),
(3, 4), (4, 5), (5, 3),
];
let result = Node2Vec::new()
.embedding_dim(16)
.num_walks(5)
.walk_length(20)
.n_epochs(3)
.random_seed(42)
.fit(6, &edges);
assert_eq!(result.embeddings.len(), 6);
assert!(result.embeddings.iter().all(|e| e.len() == 16));