so it's all about the independent component analysis and linear algebra

let's websearch~? for fastica

https://en.wikipedia.org/wiki/FastICA

1. prewhitening the data
single or multiple component extraction, let's start with multiple

hey they have pseudocode

it always closes down

i gotta break this phone huh i smashed my ipad no more moba for me :D

=== Multiple component extraction ===

The single unit iterative algorithm estimates only one weight vector which extracts a single component. Estimating additional components that are mutually "independent" requires repeating the algorithm to obtain linearly independent projection vectors - note that the notion of  [[Independence (probability theory)|independence]] here refers to maximizing non-Gaussianity in the estimated components. Hyvärinen provides several ways of extracting multiple components with the simplest being the following. Here, <math>\mathbf{1_{M}}</math> is a column vector of 1's of dimension <math>M</math>.

'''Algorithm''' FastICA
:'''Input:''' <math> C </math> Number of desired components
:'''Input:''' <math> \mathbf{X} \in \mathbb{R}^{N \times M} </math> Prewhitened matrix, where each column represents an <math>N</math>-dimensional sample, where <math> C <= N </math>
:'''Output:''' <math> \mathbf{W} \in \mathbb{R}^{N \times C} </math> Un-mixing matrix where each column projects <math> \mathbf{X} </math> onto independent component. 
:'''Output:''' <math> \mathbf{S} \in \mathbb{R}^{C \times M} </math> Independent components matrix, with <math>M</math> columns representing a sample with <math> C </math>  dimensions.
 
  '''for''' p '''in''' 1 to C:
     ''<math>\mathbf{w_p} \leftarrow</math> Random vector of length N''
     '''while''' <math>\mathbf{w_p}</math> changes
         <math>\mathbf{w_p} \leftarrow \frac{1}{M}\mathbf{X} g(\mathbf{w_p}^T \mathbf{X})^T - \frac{1}{M}g'(\mathbf{w_p}^T\mathbf{X})\mathbf{1_{M}} \mathbf{w_p}</math>
         <math>\mathbf{w_p} \leftarrow \mathbf{w_p} - \sum_{j = 1}^{p-1} (\mathbf{w_p}^T\mathbf{w_j})\mathbf{w_j}</math>
         <math>\mathbf{w_p} \leftarrow \frac{\mathbf{w_p}}{\|\mathbf{w_p}\|}</math><br>
  '''output''' <math> \mathbf{W} \leftarrow \begin{bmatrix} \mathbf{w_1},  \dots,  \mathbf{w_C} \end{bmatrix}
             </math><br>
  '''output''' <math> 
             \mathbf{S} \leftarrow \mathbf{W^T}\mathbf{X}</math>