Wolfram Function Repository
Instant-use add-on functions for the Wolfram Language
Function Repository Resource:
Decompose a matrix into Independent Component Analysis matrix factors
ResourceFunction["IndependentComponentAnalysis"][mat,k] decomposes the matrix mat into k components. | |
ResourceFunction["IndependentComponentAnalysis"][mat,k,opts] decomposes mat using the options opts. |
"InitialUnmixingMatrix" | Automatic | initial un-mixing matrix |
"NegEntropyFactor" | 1 | negative entropy factor |
"NonGaussianityFunction" | Automatic | non-Gaussianity measure function |
"RowNorm" | False | whether to normalize the matrix rows at each step |
MaxSteps | 200 | maximum steps of the ICA interation process |
PrecisionGoal | 6 | precision goal |
Here is a random integer matrix:
In[1]:= |
Out[3]= |
Here are the Independent Component Analysis matrix factors:
In[4]:= |
Out[4]= |
Here is the matrix product of the obtained factors:
In[5]:= |
Out[8]= |
Here is a random matrix with its first two columns having much larger magnitudes than the rest:
In[9]:= |
Plot the values:
In[10]:= |
Out[10]= |
Compute the ICA matrix factors:
In[11]:= |
Here is the relative error of the approximation by the obtained matrix factorization:
In[12]:= |
Out[12]= |
Here is the relative error for the first three columns:
In[13]:= |
Out[13]= |
Here are comparison plots:
In[14]:= |
Out[14]= |
Using the option "InitialUnmixingMatrix", we can influence the results by providing initial un-mixing matrix for ICA's iteration process. Here we compute ICA with different initial un-mixing matrices:
In[15]:= |
Plot the results:
In[16]:= |
Out[16]= |
ICA is essentially a Gram-Schmidt process that considers two signals to be orthogonal if their difference is Gaussian noise.
Here we compute ICA with different non-Gaussianity measure functions:
In[17]:= |
Plot the results:
In[18]:= |
Out[18]= |
Note that we used a small number of steps in order to obtain similar but different results. Using a sufficiently large number of steps (say, 20) we get almost the same results (with the matrix mat).
Here are signal generating functions:
In[19]:= |
Here is a mixing matrix:
In[20]:= |
Form a matrix of the signals:
In[21]:= |
Out[21]= |
Plot the values:
In[22]:= |
Out[22]= |
Create and plot the mixed signals matrix:
In[23]:= |
Out[23]= |
Find the ICA decomposition:
In[24]:= |
Approximation norm:
In[25]:= |
Out[25]= |
Visualize the ICA-identified source signals:
In[26]:= |
Out[26]= |
The ICA computations can be sensitive to the presence of outliers. Here we add a small number of outliers to the original mixed signals:
In[27]:= |
Out[27]= |
Here we apply ICA to the new mixed signals:
In[28]:= |
We see that the found components are not that good compared to the components found for the original mixed signals data:
In[29]:= |
Out[29]= |
This work is licensed under a Creative Commons Attribution 4.0 International License