Class: Ai4r::Som::Node
- Inherits:
-
Object
- Object
- Ai4r::Som::Node
- Includes:
- Data::Parameterizable
- Defined in:
- lib/ai4r/som/node.rb
Overview
Represents a node in the self-organizing map grid.
Class Method Summary collapse
-
.create(id, _rows, columns, dimensions, options = {}) ⇒ Object
creates an instance of Node and instantiates the weights.
Instance Method Summary collapse
-
#distance_to_input(input) ⇒ Object
returns the square distance between the current weights and the input the input is a vector/array of the same size as weights at the end, the square root is extracted from the sum of differences.
-
#distance_to_node(node) ⇒ Object
returns the distance in square-form from the instance node to the passed node example: 2 2 2 2 2 2 1 1 1 2 2 1 0 1 2 2 1 1 1 2 2 2 2 2 2 0 being the current node.
-
#instantiate_weight(dimensions, options = {}) ⇒ Object
instantiates the weights to the dimension (of the input vector) for backup reasons, the instantiated weight is stored into @instantiated_weight as well.
Methods included from Data::Parameterizable
#get_parameters, included, #set_parameters
Class Method Details
.create(id, _rows, columns, dimensions, options = {}) ⇒ Object
creates an instance of Node and instantiates the weights
idunique identifier for this node
rowsnumber of rows of the SOM grid
columnsnumber of columns of the SOM grid
dimensionsdimension of the input vector
56 57 58 59 60 61 62 63 64 |
# File 'lib/ai4r/som/node.rb', line 56 def self.create(id, _rows, columns, dimensions, = {}) n = Node.new n.id = id n.distance_metric = [:distance_metric] || :chebyshev n.instantiate_weight dimensions, n.x = id % columns n.y = (id / columns.to_f).to_i n end |
Instance Method Details
#distance_to_input(input) ⇒ Object
returns the square distance between the current weights and the input the input is a vector/array of the same size as weights at the end, the square root is extracted from the sum of differences
98 99 100 101 102 103 104 105 |
# File 'lib/ai4r/som/node.rb', line 98 def distance_to_input(input) dist = 0 input.each_with_index do |i, index| dist += (i - @weights[index])**2 end Math.sqrt(dist) end |
#distance_to_node(node) ⇒ Object
returns the distance in square-form from the instance node to the passed node example: 2 2 2 2 2 2 1 1 1 2 2 1 0 1 2 2 1 1 1 2 2 2 2 2 2 0 being the current node
117 118 119 120 121 122 |
# File 'lib/ai4r/som/node.rb', line 117 def distance_to_node(node) dx = x - node.x dy = y - node.y metric = @distance_metric || :chebyshev DistanceMetrics.send(metric, dx, dy) end |
#instantiate_weight(dimensions, options = {}) ⇒ Object
instantiates the weights to the dimension (of the input vector) for backup reasons, the instantiated weight is stored into @instantiated_weight as well
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/ai4r/som/node.rb', line 74 def instantiate_weight(dimensions, = {}) opts = { range: 0..1, random_seed: nil, seed: nil, rng: nil }.merge() rng = opts[:rng] unless rng seed = opts[:random_seed] || opts[:seed] rng = seed.nil? ? Random.new : Random.new(seed) end range = opts[:range] || (0..1) min = range.first.to_f max = range.last.to_f span = max - min @weights = Array.new dimensions @instantiated_weight = Array.new dimensions @weights.each_index do |index| @weights[index] = min + (rng.rand * span) @instantiated_weight[index] = @weights[index] end end |