GANFS: GAN-Based Feature Selection
A Python library for feature selection using Generative Adversarial Networks. GANFS trains a GAN on your data and uses perturbation-based sensitivity analysis on the discriminator to rank and select the most important features.
Installation
Install via PyPI (Recommended):
pip install ganfs
Install from GitHub (Latest Development Version):
pip install git+https://github.com/patelharsh15/GANFS-GAN-based-feature-selection.git
From source:
git clone https://github.com/patelharsh15/GANFS-GAN-based-feature-selection.git
cd GANFS-GAN-based-feature-selection
pip install -e .
Quick Start
from ganfs import GANFS
import pandas as pd
# Load your dataset
df = pd.read_csv("my_data.csv")
X = df.drop("label", axis=1)
y = df["label"]
# Initialize and train GANFS
selector = GANFS(epochs=200, batch_size=4096)
selector.fit(X, y)
# View feature ranking
ranking = selector.get_feature_ranking()
print(ranking)
# Select top 20 features
X_selected = selector.transform(X, k=20)
# Save/load trained models
selector.save("my_ganfs_model")
loaded = GANFS.load("my_ganfs_model")
API Reference
GANFS Class
Constructor Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
epochs |
int | 500 | Number of GAN training epochs |
batch_size |
int | 4096 | Batch size for GAN training |
learning_rate |
float | 0.001 | Adam optimizer learning rate |
label_smoothing |
tuple | (0.9, 0.1) | Label smoothing for (real, fake) |
perturbation_mode |
str | 'dynamic' | 'dynamic' or 'static' perturbation scaling |
perturbation_factors |
list | [0.5, 1.0, 2.0, 5.0, 10.0] | Perturbation multipliers |
checkpoint_dir |
str/None | None | Directory for training checkpoints |
verbose |
bool | True | Print progress information |
random_state |
int/None | None | Random seed for reproducibility |
patience |
int/None | None | Early stopping patience (epochs to wait) |
generator_hidden_layers |
tuple | (64, 128) | Generator Dense layer architecture |
discriminator_hidden_layers |
tuple | (128, 64) | Discriminator Dense layer architecture |
Methods
| Method | Description |
|---|---|
fit(X, y) |
Train GAN and compute feature sensitivities |
transform(X, k) |
Select top-K features from X |
fit_transform(X, y, k) |
Fit and transform in one step |
get_feature_ranking() |
Get DataFrame of features ranked by sensitivity |
get_feature_pairs_from_data(X, top_n) |
Analyze synergistic feature pair interactions |
save(path) |
Save trained model to disk |
GANFS.load(path) |
Load a saved model from disk |
Usage with scikit-learn
from ganfs import GANFS
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# Feature selection
selector = GANFS(epochs=200)
selector.fit(X_train, y_train)
X_train_selected = selector.transform(X_train, k=20)
X_test_selected = selector.transform(X_test, k=20)
# Downstream classification
clf = RandomForestClassifier()
clf.fit(X_train_selected, y_train)
accuracy = accuracy_score(y_test, clf.predict(X_test_selected))
print(f"Accuracy with top-20 GANFS features: {accuracy:.4f}")
How It Works
-
GAN Training — A Generator-Discriminator pair is trained on the feature data. The Generator learns to produce realistic synthetic samples, while the Discriminator learns to distinguish real from fake.
-
Sensitivity Analysis — After training, each feature is perturbed (using dynamic perturbation magnitudes scaled to each feature's natural granularity) and the discriminator's response is measured. Features that cause the largest output changes are the most discriminative.
-
Feature Ranking — Features are ranked by their average sensitivity scores across multiple perturbation levels and directions.
-
Feature Selection — The top-K features can be selected for downstream tasks (classification, regression, etc.).
Project Structure
├── ganfs/ # Python package source code
│ ├── __init__.py # Public API
│ ├── ganfs.py # Main GANFS class
│ ├── models.py # Generator & Discriminator networks
│ ├── sensitivity.py # Sensitivity analysis functions
│ └── utils.py # GPU setup & preprocessing utilities
├── pyproject.toml # Package build configuration
└── research_archive/ # Original research files and experiments
├── GAN Algo Final.ipynb # Original research notebook
├── benchmarking.ipynb # Benchmarking vs traditional methods
├── training_checkpoints/ # Saved model checkpoints
├── feature_pair_interactions.csv
└── feature_sensitivity_results.csv
Dataset Setup (for reproducing research results)
The original research uses the CIC-DDoS2019 dataset. The dataset files are too large (~12 GB) to host on GitHub.
Download Instructions
- Visit the CIC-DDoS2019 dataset page
- Request access and download the following CSV files:
DrDoS_DNS.csv,DrDoS_LDAP.csv,DrDoS_MSSQL.csv,DrDoS_NTP.csvDrDoS_NetBIOS.csv,DrDoS_SNMP.csv,DrDoS_SSDP.csv,DrDoS_UDP.csv
- Place all files in a
CIC-DDoS2019/folder at the repository root - Update the
base_pathin the notebook to"./CIC-DDoS2019/"
Requirements
- Python 3.8+
- TensorFlow 2.x (GPU support recommended)
- NumPy, Pandas, scikit-learn
Citation
If you use GANFS in your research, please cite our paper:
@misc{patel2025ganfs,
title={GANFS: GAN-based Feature Selection for Machine Learning},
author={Harsh Patel},
year={2025},
eprint={2504.18566},
archivePrefix={arXiv},
primaryClass={cs.LG},
url={https://arxiv.org/abs/2504.18566},
}
Acknowledgments
This project uses the CIC-DDoS2019 dataset provided by the Canadian Institute for Cybersecurity, University of New Brunswick.
If you use the dataset, please cite the original authors:
Iman Sharafaldin, Arash Habibi Lashkari, Saqib Hakak, and Ali A. Ghorbani,
"Developing Realistic Distributed Denial of Service (DDoS) Attack Dataset and Taxonomy",
IEEE 53rd International Carnahan Conference on Security Technology, Chennai, India, 2019.
License
MIT License — see LICENSE for details.
Metadata
Release files for ganfs 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| ganfs-0.2.1.tar.gz | 19.4 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ganfs-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 37.0 kB
Release files / ganfs-0.2.1.tar.gz
| Download URL | ganfs-0.2.1.tar.gz |
|---|---|
| Size | 19.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d544ca78e88075dccc52c3bdbc22378320f8f8f1961512a8bf65f4bcec74b34e
|
|
BLAKE2b-256 checksum How to use checksums |
896b02b2ae88487d3044cbf75a86bf4d033f13cca44c2d2f744607d2c9b0fad7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency logRelease files / ganfs-0.2.1-py3-none-any.whl
| Download URL | ganfs-0.2.1-py3-none-any.whl |
|---|---|
| Size | 17.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3e9e716c4755e313d9ee3751b922112910033beed88ccc1bbc7d9ebb33c06ab4
|
|
BLAKE2b-256 checksum How to use checksums |
9c5537514bf2bdf525bcfba5cecde5be0cf5574eebebea7c219ba5c204ba47af
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency logSecurity for ganfs 0.2.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for ganfs-0.2.1.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.