SimProcess is a Python framework for analyzing time series data, extracting features, and classifying signals as real or simulated.
- Feature Extraction: Extract statistical features from time series data
- Noise Analysis: Extract noise features from signals using various filtering methods
- Model Training: Train SVM models to classify signals
- Model Evaluation: Evaluate model performance with detailed metrics
- Model Transfer: Apply trained models to new datasets (transferability)
- Visualization: Generate plots for feature importance, prediction distribution, and model performance
- Command-line Interface: Unified CLI for all operations
- Python 3.7+
- Required packages: scikit-learn, pandas, numpy, matplotlib, tsfresh, scipy, joblib
- Clone the repository:
git clone https://github.com/donadelden/SimProcess.git
cd simprocess- Install the required packages:
pip install -r requirements.txt- Install the package in development mode:
pip install -e .SimProcess provides a unified command-line interface that supports multiple operations.
python main.py [command] [options]extract: Extract features from CSV filestrain: Train a classification modelevaluate: Evaluate a trained modelanalyze: Analyze new data using a trained model
The extract command processes raw signal data to extract features for model training.
python main.py extract --data-dir <DATA_DIRECTORY> --column <COLUMN_NAME> --output <OUTPUT_FILE>--data-diror-d: Directory containing CSV files with raw signal data
--columnor-c: Column to extract features from (if not specified, all columns will be used)--outputor-o: Output CSV file path (default: combined__features.csv)--windowor-w: Window size for feature extraction (default: 20)--renameor-r: Rename the column prefix in output features--no-noise: Disable noise feature extraction--filter: Filter type ('moving_average', 'butterworth', 'savgol', 'kalman') (default: kalman)--cutoff: Cutoff frequency for Butterworth filter (default: 0.1)--fs: Sampling frequency for Butterworth filter (default: 1.0)--poly-order: Polynomial order for Savitzky-Golay filter (default: 2)--process-variance: Process variance parameter for Kalman filter (default: 1e-5)--measurement-variance: Measurement variance parameter for Kalman filter (default: 1e-1)--epsilon: Epsilon value for filtering outliers (default: 0.10)--all-columns: Extract features from all suitable columns in the dataset
Extract features from a specific column:
python main.py extract --data-dir data/raw_signals --column V1Extract features from all suitable columns:
python main.py extract --data-dir data/raw_signals --all-columns --output combined_all_features.csvUse Butterworth filter for noise extraction:
python main.py extract --data-dir data/raw_signals --column V1 --filter butterworth --cutoff 0.05 --fs 2.0Important Note: Always specify the full path when using relative directories:
python main.py extract --data-dir ./data/raw_signals --column V1The train command creates a model that can classify signals as real or simulated using extracted features.
python main.py train --input <FEATURES_FILE> --model <OUTPUT_MODEL> [options]--inputor-i: Input features CSV file for training
--modelor-m: Path to save the trained model (default: simprocess_model.joblib)--reportor-r: Path to save evaluation report (default: evaluation_report.csv)--training-mode: Type of training approach ('advanced', 'feature-reduction') (default: advanced)--fast-mode: Training speed mode (0=full, 1=reduced, 2=minimal) (default: 1)--balancing-ratio: Class balancing ratio for SMOTE (default: 0.9)--features-to-keep: Number of top features to keep (default: 11)--max-features: Maximum number of features to use in feature reduction mode (default: 20)--dynamic: Test on dynamic data--no-eval: Skip saving evaluation report
Basic training with default parameters:
python main.py train --input ./combined_V1_features.csvSave model to a specific location:
python main.py train --input ./combined_V1_features.csv --model ./models/V1_model.joblibTrain using feature reduction approach:
python main.py train --input ./combined_V1_features.csv --training-mode feature-reduction --max-features 15Train with more extensive grid search (slower but potentially more accurate):
python main.py train --input ./combined_V1_features.csv --fast-mode 0Important Note: Always include ./ when specifying files in the current directory to prevent path-related errors:
python main.py train --input ./combined_V1_features.csvpython main.py extract --data-dir ./data/signals --column V1 --window 20 --filter kalmanThis will create a file named combined_V1_features.csv in the current directory.
python main.py train --input ./combined_V1_features.csv --model ./models/V1_model.joblibpython main.py evaluate --model ./models/V1_model.joblib --input ./test_features.csv --output-dir ./evaluationpython main.py analyze --model ./models/V1_model.joblib --input ./new_signal.csv --column V1For detailed information on evaluate and analyze commands, refer to the remaining sections of the documentation.
You can also use SimProcess as a library in your Python code:
from simprocess.features import process_csv_files
from simprocess.model import train_with_features, analyze_with_model
# Extract features
process_csv_files(
data_directory='./data/signals',
output_file='features.csv',
target_column='V1',
window_size=10
)
# Train a model
train_with_features(
features_file='./features.csv',
model_path='./model.joblib',
train_ratio=0.8
)
# Analyze new data
is_real, confidence, metrics = analyze_with_model(
model_path='./model.joblib',
input_file='./new_signal.csv',
target_column='V1',
output_dir='./analysis_results',
extract_noise=True,
filter_type='savgol'
)
print(f"Classification: {'REAL' if is_real else 'SIMULATED'} with {confidence:.1f}% confidence")
print(f"Windows classified as real: {metrics['real_windows']}/{metrics['total_windows']} ({metrics['real_windows']/metrics['total_windows']*100:.1f}%)")MIT License