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>