=== 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>