Heaviside Compression#

This example demonstrates Tabular Compression using signal data with step functions (Heaviside-like patterns).

Problem Description#

Goal: Compress and reconstruct signal data, discovering underlying patterns.

Input:

  • Signal samples with step-like (Heaviside) patterns

  • High-dimensional measurements per sample

Output:

  • Compressed representation (learned automatically)

  • Reconstruction of original signal

This example showcases:

  • Dimensionality reduction

  • Pattern discovery in latent space

  • Autoencoder capabilities

Dataset#

The dataset contains:

  • x_train.csv — Training signal samples

  • No separate output file (compression learns to reconstruct input)

Building the Model#

  1. Launch NeurEco and select Tabular Compression

  2. Load x_train.csv as input (no output file needed)

  3. Set compression parameters: - Compression tolerance: 0.01 (1% error) - Minimum compression coefficients: 1

  4. Click BUILD

  5. Observe the learned compression dimension

Analyzing Compression Coefficients#

One of the most interesting aspects of compression is analyzing the latent space. With the settings above, NeurEco typically finds 2 compression coefficients for this dataset. The Compressor model provides a built-in method for visualization.

Visualizing coefficient relationships:

# Load the complete model (or encoder)
model = Tabular.Compressor()
model.load("./heaviside_model/complete.ednn")

# 2D visualization of latent space
model.plot_compression_coefficients(
    data_to_compress=x_train,
    neurons_ids=[0, 1],
    title="Latent Space Visualization",
    save_path="latent_space_2d.png"
)

The latent space typically shows a sun-like pattern radiating from the center outward, revealing the underlying structure of the Heaviside signals.

Coloring by signal amplitude:

You can color points by data properties to reveal patterns:

# Compute amplitudes for each sample
amplitudes = np.array([np.max(sample) for sample in x_train])

# Create class labels based on amplitude threshold
classes = np.where(amplitudes > 0.2, "high", "low")

# Plot compression coefficients colored by amplitude class
model.plot_compression_coefficients(
    data_to_compress=x_train,
    neurons_ids=[0, 1],
    data_labels=list(classes),
    title="Latent Space by Signal Amplitude"
)

This visualization shows how signals with different amplitudes are distributed in the compressed space.

Visualizing Reconstruction Quality#

# Select a few samples
sample_indices = [0, 10, 20]

fig, axes = plt.subplots(len(sample_indices), 1, figsize=(12, 8))

for idx, sample_idx in enumerate(sample_indices):
    original = x_train[sample_idx]
    reconstructed = model.evaluate(x_train[sample_idx:sample_idx+1])[0]

    axes[idx].plot(original, 'b-', label='Original', alpha=0.7)
    axes[idx].plot(reconstructed, 'r--', label='Reconstructed', alpha=0.7)
    axes[idx].set_title(f'Sample {sample_idx}')
    axes[idx].legend()

plt.tight_layout()
plt.savefig('reconstruction_comparison.png')
plt.show()

Expected Results#

After training:

  • Significant compression — a big reduction in dimensions depending on the build settings (compress_tolerance)

  • Low reconstruction error — Within the specified tolerance

Key Takeaways#

This example demonstrates:

  1. Automatic dimensionality reduction — NeurEco finds the optimal latent dimension

  2. Pattern discovery — Latent space visualization reveals data structure

  3. Separate encoder/decoder — Useful for IoT and distributed systems

  4. Reconstruction quality — Controlled by compression tolerance

Variations to Try#

  • Adjust compress_tolerance and observe the effect on latent dimension

  • Try different compress_decompress_size_ratio for IoT scenarios

  • Use clustering to analyze discovered patterns

  • Compare reconstruction quality across different samples