Class KohonenUpdateAction

java.lang.Object
org.apache.commons.math3.ml.neuralnet.sofm.KohonenUpdateAction
All Implemented Interfaces:
UpdateAction

public class KohonenUpdateAction extends Object implements UpdateAction
Update formula for Kohonen's Self-Organizing Map.
The update method modifies the features w of the "winning" neuron and its neighbours according to the following rule: wnew = wold + α e(-d / σ) * (sample - wold) where
  • α is the current learning rate,
  • σ is the current neighbourhood size, and
  • d is the number of links to traverse in order to reach the neuron from the winning neuron.

This class is thread-safe as long as the arguments passed to the constructor are instances of thread-safe classes.
Each call to the update method will increment the internal counter used to compute the current values for
  • the learning rate, and
  • the neighbourhood size.
Consequently, the function instances that compute those values (passed to the constructor of this class) must take into account whether this class's instance will be shared by multiple threads, as this will impact the training process.
Since:
3.3
  • Field Details

  • Constructor Details

    • KohonenUpdateAction

      public KohonenUpdateAction(DistanceMeasure distance, LearningFactorFunction learningFactor, NeighbourhoodSizeFunction neighbourhoodSize)
      Parameters:
      distance - Distance function.
      learningFactor - Learning factor update function.
      neighbourhoodSize - Neighbourhood size update function.
  • Method Details

    • update

      public void update(Network net, double[] features)
      Updates the network in response to the sample features.
      Specified by:
      update in interface UpdateAction
      Parameters:
      net - Network.
      features - Training data.
    • getNumberOfCalls

      public long getNumberOfCalls()
      Retrieves the number of calls to the update method.
      Returns:
      the current number of calls.
    • attemptNeuronUpdate

      private boolean attemptNeuronUpdate(Neuron n, double[] features, double learningRate)
      Tries to update a neuron.
      Parameters:
      n - Neuron to be updated.
      features - Training data.
      learningRate - Learning factor.
      Returns:
      true if the update succeeded, true if a concurrent update has been detected.
    • updateNeighbouringNeuron

      private void updateNeighbouringNeuron(Neuron n, double[] features, double learningRate)
      Atomically updates the given neuron.
      Parameters:
      n - Neuron to be updated.
      features - Training data.
      learningRate - Learning factor.
    • findAndUpdateBestNeuron

      private Neuron findAndUpdateBestNeuron(Network net, double[] features, double learningRate)
      Searches for the neuron whose features are closest to the given sample, and atomically updates its features.
      Parameters:
      net - Network.
      features - Sample data.
      learningRate - Current learning factor.
      Returns:
      the winning neuron.
    • computeFeatures

      private double[] computeFeatures(double[] current, double[] sample, double learningRate)
      Computes the new value of the features set.
      Parameters:
      current - Current values of the features.
      sample - Training data.
      learningRate - Learning factor.
      Returns:
      the new values for the features.