Package smile.ica

Class ICA

java.lang.Object
smile.ica.ICA
All Implemented Interfaces:
Serializable

public class ICA extends Object implements Serializable
Independent Component Analysis (ICA) is a computational method for separating a multivariate signal into additive components. FastICA is an efficient algorithm for ICA invented by Aapo Hyvärinen.

Like most ICA algorithms, FastICA seeks an orthogonal rotation of prewhitened data, through a fixed-point iteration scheme, that maximizes a measure of non-Gaussianity of the rotated components. Non-gaussianity serves as a proxy for statistical independence, which is a very strong condition and requires infinite data to verify. To measure non-Gaussianity, FastICA relies on a non-quadratic nonlinear function f(u), its first derivative g(u), and its second derivative g2(u).

A simple application of ICA is the cocktail party problem, where the underlying speech signals are separated from a sample data consisting of people talking simultaneously in a room. Usually the problem is simplified by assuming no time delays or echoes.

An important note to consider is that if N sources are present, at least N observations (e.g. microphones if the observed signal is audio) are needed to recover the original signals.

References

  1. Aapo Hyvärinen: Fast and robust fixed-point algorithms for independent component analysis, 1999
  2. Aapo Hyvärinen, Erkki Oja: Independent component analysis: Algorithms and applications, 2000
See Also:
  • Field Details

    • components

      public final double[][] components
      The independent components (row-wise).
  • Method Details

    • fit

      public static ICA fit(double[][] data, int p)
      Fits independent component analysis.
      Parameters:
      data - training data. The number of columns corresponding with the number of samples of mixed signals and the number of rows corresponding with the number of independent source signals.
      p - the number of independent components.
      Returns:
      the model.
    • fit

      public static ICA fit(double[][] data, int p, Properties params)
      Fits independent component analysis.
      Parameters:
      data - training data. The number of columns corresponding with the number of samples of mixed signals and the number of rows corresponding with the number of independent source signals.
      p - the number of independent components.
      params - the hyperparameters.
      Returns:
      the model.
    • fit

      public static ICA fit(double[][] data, int p, DifferentiableFunction contrast, double tol, int maxIter)
      Fits independent component analysis.
      Parameters:
      data - training data.
      p - the number of independent components.
      contrast - the contrast function which is capable of separating or extracting independent sources from a linear mixture. It must be a non-quadratic non-linear function that has second-order derivative.
      tol - the tolerance of convergence test.
      maxIter - the maximum number of iterations.
      Returns:
      the model.