mirror of
https://github.com/The-Art-of-Hacking/h4cker.git
synced 2024-09-15 22:02:24 +00:00
52 lines
1.7 KiB
Markdown
52 lines
1.7 KiB
Markdown
|
Sure! Here's a Python script that demonstrates Independent Component Analysis (ICA) using the scikit-learn library:
|
||
|
|
||
|
```python
|
||
|
import numpy as np
|
||
|
from sklearn.decomposition import FastICA
|
||
|
import matplotlib.pyplot as plt
|
||
|
|
||
|
# Generate data
|
||
|
np.random.seed(0)
|
||
|
n_samples = 2000
|
||
|
time = np.linspace(0, 8, n_samples)
|
||
|
|
||
|
s1 = np.sin(2 * time) # Signal 1: sinusoidal signal
|
||
|
s2 = np.sign(np.sin(3 * time)) # Signal 2: square signal
|
||
|
|
||
|
S = np.c_[s1, s2]
|
||
|
S += 0.2 * np.random.normal(size=S.shape) # Add noise
|
||
|
|
||
|
# Mix data
|
||
|
A = np.array([[1, 1], [0.5, 2]]) # Mixing matrix
|
||
|
X = np.dot(S, A.T) # Generate observations
|
||
|
|
||
|
# ICA
|
||
|
ica = FastICA(n_components=2)
|
||
|
S_ = ica.fit_transform(X) # Reconstruct signals
|
||
|
A_ = ica.mixing_ # Estimated mixing matrix
|
||
|
|
||
|
# Plot results
|
||
|
plt.figure(figsize=(8, 6))
|
||
|
|
||
|
models = [X, S, S_]
|
||
|
names = ['Observations (mixed signals)',
|
||
|
'True Sources',
|
||
|
'ICA estimated sources']
|
||
|
|
||
|
colors = ['red', 'steelblue']
|
||
|
|
||
|
for i, (model, name) in enumerate(zip(models, names), 1):
|
||
|
plt.subplot(3, 1, i)
|
||
|
plt.title(name)
|
||
|
for sig, color in zip(model.T, colors):
|
||
|
plt.plot(sig, color=color)
|
||
|
|
||
|
plt.tight_layout()
|
||
|
plt.show()
|
||
|
```
|
||
|
|
||
|
This script demonstrates ICA by generating two mixed signals, `s1` and `s2`, adding noise, and then applying ICA to separate the original signals. The original signals are represented by the `S` matrix, and the observed mixed signals are stored in the `X` matrix. The `FastICA` class from scikit-learn is used to perform ICA.
|
||
|
|
||
|
The script plots three subplots: the observed mixed signals, the true sources, and the estimated sources achieved through ICA.
|
||
|
|
||
|
Make sure to install required dependencies (scikit-learn, numpy, matplotlib) before running the script.
|