IndependentComponentAnalysis Class 
Namespace: Accord.Statistics.Analysis
[SerializableAttribute] public class IndependentComponentAnalysis : MultipleTransformBase<double[], double>, IMultivariateAnalysis, IAnalysis, IParallel, ISupportsCancellation, IUnsupervisedLearning<MultivariateLinearRegression, double[], double[]>
The IndependentComponentAnalysis type exposes the following members.
Name  Description  

IndependentComponentAnalysis(Double)  Obsolete.
Constructs a new Independent Component Analysis.
 
IndependentComponentAnalysis(Double, AnalysisMethod)  Obsolete.
Constructs a new Independent Component Analysis.
 
IndependentComponentAnalysis(Double, IndependentComponentAlgorithm)  Obsolete.
Constructs a new Independent Component Analysis.
 
IndependentComponentAnalysis(AnalysisMethod, IndependentComponentAlgorithm) 
Constructs a new Independent Component Analysis.
 
IndependentComponentAnalysis(Double, AnalysisMethod, IndependentComponentAlgorithm)  Obsolete.
Constructs a new Independent Component Analysis.
 
IndependentComponentAnalysis(Double, AnalysisMethod, IndependentComponentAlgorithm)  Obsolete.
Constructs a new Independent Component Analysis.

Name  Description  

Algorithm 
Gets or sets the
FastICA algorithm used by the analysis.
 
Components 
Gets the Independent Components in a objectoriented structure.
 
Contrast 
Gets or sets the
Contrast function to be used by the analysis.
 
DemixingMatrix 
Gets a matrix containing the demixing coefficients for
the original source data being analyzed. Each column
corresponds to an independent component.
 
Iterations 
Gets or sets the maximum number of iterations
to perform. If zero, the method will run until
convergence.
 
Means 
Gets the column means of the original data.
 
Method 
Gets or sets the normalization method used for this analysis.
 
MixingMatrix 
Gets a matrix containing the mixing coefficients for
the original source data being analyzed. Each column
corresponds to an independent component.
 
NumberOfInputs 
Gets the number of inputs accepted by the model.
(Inherited from TransformBaseTInput, TOutput.)  
NumberOfOutputs 
Gets the number of outputs generated by the model.
(Inherited from TransformBaseTInput, TOutput.)  
Overwrite 
Gets or sets whether calculations will be performed overwriting
data in the original source matrix, using less memory.
 
ParallelOptions 
Gets or sets the parallelization options for this algorithm.
 
Result  Obsolete.
Gets the resulting projection of the source
data given on the creation of the analysis
into the space spawned by independent components.
 
Source  Obsolete.
Source data used in the analysis.
 
StandardDeviation 
Gets the column standard deviations of the original data.
 
Token 
Gets or sets a cancellation token that can be used
to cancel the algorithm while it is running.
 
Tolerance 
Gets or sets the maximum absolute change in
parameters between iterations that determine
convergence.
 
WhiteningMatrix 
Gets the whitening matrix used to transform
the original data to have unit variance.

Name  Description  

Adjust(Double, Boolean) 
Obsolete
 
Adjust(Single, Boolean) 
Obsolete
 
Combine(Double)  Obsolete.
Combines components into a single mixture (mixing).
 
Combine(Single)  Obsolete.
Combines components into a single mixture (mixing).
 
Compute  Obsolete.
Computes the Independent Component Analysis algorithm.
 
Compute(Int32)  Obsolete.
Computes the Independent Component Analysis algorithm.
 
Equals  Determines whether the specified object is equal to the current object. (Inherited from Object.)  
Finalize  Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)  
GetHashCode  Serves as the default hash function. (Inherited from Object.)  
GetType  Gets the Type of the current instance. (Inherited from Object.)  
Learn 
Learns a model that can map the given inputs to the desired outputs.
 
MemberwiseClone  Creates a shallow copy of the current Object. (Inherited from Object.)  
Separate(Double)  Obsolete.
Separates a mixture into its components (demixing).
 
Separate(Single)  Obsolete.
Separates a mixture into its components (demixing).
 
ToString  Returns a string that represents the current object. (Inherited from Object.)  
Transform(TInput) 
Applies the transformation to an input, producing an associated output.
(Inherited from MultipleTransformBaseTInput, TOutput.)  
Transform(TInput) 
Applies the transformation to a set of input vectors,
producing an associated set of output vectors.
(Inherited from MultipleTransformBaseTInput, TOutput.)  
Transform(TInput, TOutput) 
Applies the transformation to an input, producing an associated output.
(Inherited from MultipleTransformBaseTInput, TOutput.)  
Transform(Double, Double) 
Applies the transformation to an input, producing an associated output.
(Overrides MultipleTransformBaseTInput, TOutputTransform(TInput, TOutput).) 
Name  Description  

HasMethod 
Checks whether an object implements a method with the given name.
(Defined by ExtensionMethods.)  
IsEqual  Compares two objects for equality, performing an elementwise comparison if the elements are vectors or matrices. (Defined by Matrix.)  
ToT 
Converts an object into another type, irrespective of whether
the conversion can be done at compile time or not. This can be
used to convert generic types to numeric types during runtime.
(Defined by ExtensionMethods.) 
Independent Component Analysis is a computational method for separating a multivariate signal (or mixture) into its additive subcomponents, supposing the mutual statistical independence of the nonGaussian source signals.
When the independence assumption is correct, blind ICA separation of a mixed signal gives very good results. It is also used for signals that are not supposed to be generated by a mixing for analysis purposes.
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) are needed to get the original signals.
References:
// Let's create a random dataset containing // 5000 samples of two dimensional samples. // double[][] source = Jagged.Random(5000, 2); // Now, we will mix the samples the dimensions of the samples. // A small amount of the second column will be applied to the // first, and viceversa. // double[][] mix = { new double[] { 0.25, 0.25 }, new double[] { 0.25, 0.75 }, }; // mix the source data double[][] input = source.Multiply(mix); // Now, we can use ICA to identify any linear mixing between the variables, such // as the matrix multiplication we did above. After it has identified it, we will // be able to revert the process, retrieving our original samples again // Create a new Independent Component Analysis var ica = new IndependentComponentAnalysis() { Algorithm = IndependentComponentAlgorithm.Parallel, Contrast = new Logcosh() }; // Learn the demixing transformation from the data MultivariateLinearRegression demix = ica.Learn(input); // Now, we can retrieve the mixing and demixing matrices that were // used to alter the data. Note that the analysis was able to detect // this information automatically: double[][] mixingMatrix = ica.MixingMatrix; // same as the 'mix' matrix double[][] revertMatrix = ica.DemixingMatrix; // inverse of the 'mix' matrix // We can use the regression to recover the separate sources double[][] result = demix.Transform(input);