FastICA example

Import the spectrochempy API package

import spectrochempy as scp

Load, prepare and plot the dataset

Here we use a dataset from Jaumot et al. [2005]

X = scp.read("matlabdata/als2004dataset.MAT")[-1]

X.title = "absorbance"
X.units = "absorbance"
X.set_coordset(None, None)
X.y.title = "elution time"
X.x.title = "wavelength"
X.y.units = "hours"
X.x.units = "cm^-1"
_ = X.plot()
plot fast ica

Create and fit a FastICA object

As argument of the object constructor we define log_level to "INFO" to obtain verbose output during fit, and we set the number of component to use at 4.

ica = scp.FastICA(n_components=4)
_ = ica.fit(X)

Get the mixing system and source spectral profiles

The mixing system \(A\) and the source spectral profiles \(S^T\) can be obtained as follows (the Sklearn equivalents - also valid with Scpy - are indicated as comments

A = ica.A  # or model.transform()
St = ica.St  # or model.mixing.T

Plot them

# sphinx_gallery_thumbnail_number = 3

_ = A.T.plot(title="Mixing System", colormap=None)
_ = St.plot(title="Sources spectral profiles", colormap=None)
  • Mixing System
  • Sources spectral profiles

Reconstruct the dataset

The dataset can be reconstructed from these matrices and the mean:

X_hat_a = scp.dot(A, St) + X.mean(dim=0).data
_ = X_hat_a.plot(title=r"$\hat{X} = \bar{X} + A S^t$")
$\hat{X} = \bar{X} + A S^t$

Or using the transform() method:

X_hat_b = ica.inverse_transform()
_ = X_hat_b.plot(title="$\hat{X} =$ ica.inverse_transform()")
$\hat{X} =$ ica.inverse_transform()

Finally, the quality of the reconstriction can be checked by plotmerit()

_ = ica.plotmerit(nb_traces=15)
FastICA plot of merit

This ends the example ! The following line can be uncommented if no plot shows when running the .py script

# scp.show()

Total running time of the script: ( 0 minutes 1.332 seconds)

Gallery generated by Sphinx-Gallery