Skip to content

kro0l1k/RobustICA

Repository files navigation

RobustICA

πŸ“ Project Structure

Core Implementation Files

RICA.py

The main implementation of the RICA (Robust Independent Component Analysis) algorithm. Contains:

  • JAX-based implementation with GPU/Metal acceleration support
  • SignatureComputer class for computing signature moments
  • ContrastCalculator class for delta computation and contrast functions
  • Optimizer class implementing the RICA optimization algorithm
  • Utility functions for error computation and matrix operations

continuity_moduli.py

Implementation of theoretical analysis classes for testing Theorems 4.3 and 4.6:

  • ContinuityModuli class for continuity moduli of Theorem 4.3
  • RobustnessModuli class for the constants of Theorem 4.6

sample_different_S.py

Signal generation utilities with support for various time series types:

  • SignalGenerator class for synthetic signal creation
  • Support for IID, Ornstein-Uhlenbeck (OU), Moving Average, and ARMA processes
  • Signal confounding methods (multiplicative, additive, talking pairs, etc.)

SOBI.py

Implementation of SOBI (Second-Order Blind Identification) algorithm for comparison with RICA. Adapted from https://github.com/davidrigie/sobi/blob/master/sobi/sobi.py

Experimental Scripts

robustness_test.py

Comprehensive robustness analysis script:

  • Multi-algorithm comparison (RICA, FastICA, SOBI)
  • Various confounding strength testing
  • Statistical analysis and visualization

different_S_43.py

Extended testing for different signal types and Theorem 4.3 validation.

perturbation_and_delta.py

Analysis of perturbation effects and delta parameter relationships.

plot_what_confounding_does.py

Visualization tool for understanding the effects of signal confounding:

  • Comparison of original vs. confounded signals
  • Delta parameter analysis across confounding levels

Application Folders

cocktail_party/

Real-world application of ICA to the cocktail party problem:

  • Audio Files: gray.mp3, goethe.mp3, kordian.mp3 - Source audio signals
  • cocktail_party.py - Main cocktail party separation implementation
  • robustness_cocktail_party.py - Robustness analysis with real audio data
  • unmix_cocktail_party.py - Audio unmixing utilities
  • generate_unmixed_mp3.py - Generate separated audio outputs

Visualization and Results

point_cloud.ipynb

Jupyter notebook for point cloud visualization and comparison to FastICA for a two-dimensional i.i.d. signal.

Configuration

requirements.txt

Project dependencies:

numpy
matplotlib
scikit-learn
scipy
statsmodels
signax
jax<0.6.0
jaxlib<0.6.0

πŸ“Š Key Features

  • JAX Integration: High-performance computing with GPU/Metal acceleration
  • Multiple Signal Types: Support for IID, OU, and ARMA processes
  • Identifiability Criteria checks: Allows for testing of mean stationarity and the diagonal third-order identifiability condition.
  • Comprehensive Testing: Extensive robustness and theoretical validation

Installation

Quick Installation

For CPU-only systems:

pip install -e .

For NVIDIA GPU systems (CUDA):

pip install -e ".[cuda]"

For Apple Silicon systems:

pip install -e ".[metal]"

Manual Installation

1. Basic Dependencies

pip install numpy>=1.26.4 scikit-learn>=1.3.2 signax==0.2.1 statsmodels

2. Choose JAX Backend

For NVIDIA GPU (CUDA 12):

pip install "jax[cuda12_pip]>=0.4.25" "jaxlib[cuda12_pip]>=0.4.25"

For Apple Silicon (Metal):

pip install jax-metal>=0.0.6 jax==0.4.24 jaxlib==0.4.23

For CPU only:

pip install jax>=0.4.25 jaxlib>=0.4.25

Verification

After installation, run:

python -c "import jax; print('Available devices:', jax.devices())"

Running RICA on a simple example

python RICA.py

Troubleshooting

CUDA Issues

  • Ensure NVIDIA drivers are installed
  • Verify CUDA 12 compatibility
  • Try: nvidia-smi to check GPU status

Metal Issues

  • Only works on Apple Silicon Macs (M1/M2/M3/M4)
  • Ensure macOS is up to date
  • Implement a fallback to cpu.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors