# decisioncanvas
A Python library for visualizing machine learning classifier decision boundaries with automatic dimensionality reduction and standardization.
## Overview
decisioncanvas provides a simple, reliable way to create publication-quality visualizations of how classification models separate data. The library automatically handles high-dimensional data through PCA dimensionality reduction and ensures consistent scaling through built-in standardization.
## Key Features
- **Simple API**: Single function call for complete visualization
- **High-dimensional support**: Automatic PCA with explained variance reporting
- **Scikit-learn compatibility**: Works with any scikit-learn classifier
- **Multi-class support**: Handles binary and multi-class classification
- **Built-in preprocessing**: Automatic feature standardization
- **Customizable visualization**: Configurable grid resolution, colors, and styling
- **Educational focus**: Ideal for learning and teaching machine learning concepts
## Installation
```bash
pip install decisioncanvas
```
## Quick Start
```python
from decisioncanvas import plot_decision_boundary
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
# Load data and create model
X, y = load_iris(return_X_y=True)
model = LogisticRegression(max_iter=300)
# Visualize decision boundary
plot_decision_boundary(model, X, y)
```
## Usage Examples
### Basic Classification
```python
from decisioncanvas import plot_decision_boundary
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
# Prepare data
data = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
data.data, data.target, test_size=0.3, random_state=42
)
# Train model
model = LogisticRegression(max_iter=200)
model.fit(X_train, y_train)
# Visualize with custom labels
plot_decision_boundary(
model,
X_train,
y_train,
class_names=data.target_names,
title='Iris Classification Decision Boundary'
)
```
### Advanced Customization
```python
plot_decision_boundary(
model,
X,
y,
grid_resolution=400,
alpha=0.4,
padding=1.5,
title='Custom Decision Boundary Visualization',
figsize=(10, 8)
)
```
## API Reference
### plot_decision_boundary
```python
plot_decision_boundary(
model, X, y,
class_names=None,
standardize=True,
pca_components=2,
grid_resolution=300,
padding=1.0,
cmap_light=None,
cmap_bold=None,
alpha=0.3,
title="Decision Boundary",
fit_model=True,
figsize=(8, 6),
random_state=None
)
```
#### Parameters
| Parameter | Type | Description | Default |
|-----------|------|-------------|---------|
| `model` | estimator | Scikit-learn compatible classifier | Required |
| `X` | array-like | Feature matrix (n_samples, n_features) | Required |
| `y` | array-like | Target labels (n_samples,) | Required |
| `class_names` | list or dict | Custom class labels for legend | None |
| `standardize` | bool | Apply feature standardization | True |
| `pca_components` | int | Number of PCA components for dimensionality reduction | 2 |
| `grid_resolution` | int | Resolution of decision boundary grid | 300 |
| `padding` | float | Padding around data points in plot | 1.0 |
| `cmap_light` | colormap | Colormap for decision regions | None (auto) |
| `cmap_bold` | list | Colors for data points | None (auto) |
| `alpha` | float | Transparency of decision regions | 0.3 |
| `title` | str | Plot title | "Decision Boundary" |
| `fit_model` | bool | Whether to fit the model on provided data | True |
| `figsize` | tuple | Figure size (width, height) | (8, 6) |
| `random_state` | int | Random state for PCA reproducibility | None |
## Use Cases
- **Model evaluation**: Visualize how different classifiers separate your data
- **Educational purposes**: Demonstrate classification concepts in tutorials
- **Research presentations**: Create publication-ready decision boundary plots
- **Debugging**: Identify potential overfitting or data separation issues
## Requirements
- Python >= 3.7
- numpy >= 1.18.0
- scikit-learn >= 0.24.0
- matplotlib >= 3.2.0
## Contributing
Contributions are welcome! Please feel free to submit issues, feature requests, or pull requests.
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull request
## License
This project is licensed under the MIT License - see the LICENSE file for details.
## Authors
- **Krunal Wankhade** - krunal.wankahde1810@gmail.com
- **Parimal Kalpande** - kalpandeparimal60@gmail.com
## Links
- **PyPI**: https://pypi.org/project/decisioncanvas/
- **GitHub**: https://github.com/KrunalWankhade9021/Decesion-Canvas
Raw data
{
"_id": null,
"home_page": "https://github.com/KrunalWankhade9021/Decesion-Canvas",
"name": "decisioncanvas",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": null,
"keywords": "visualization, classifier, decision boundary, matplotlib, scikit-learn",
"author": "Krunal Wankhade, Parimal Kalpande",
"author_email": "krunal.wankahde1810@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/6c/3b/df8e9684f9ec60d1d4b0bd912cd90c0c3c8bd490eca0c6124e44d70ed6d8/decisioncanvas-1.0.1.tar.gz",
"platform": null,
"description": "# decisioncanvas\r\n\r\nA Python library for visualizing machine learning classifier decision boundaries with automatic dimensionality reduction and standardization.\r\n\r\n## Overview\r\n\r\ndecisioncanvas provides a simple, reliable way to create publication-quality visualizations of how classification models separate data. The library automatically handles high-dimensional data through PCA dimensionality reduction and ensures consistent scaling through built-in standardization.\r\n\r\n## Key Features\r\n\r\n- **Simple API**: Single function call for complete visualization\r\n- **High-dimensional support**: Automatic PCA with explained variance reporting \r\n- **Scikit-learn compatibility**: Works with any scikit-learn classifier\r\n- **Multi-class support**: Handles binary and multi-class classification\r\n- **Built-in preprocessing**: Automatic feature standardization\r\n- **Customizable visualization**: Configurable grid resolution, colors, and styling\r\n- **Educational focus**: Ideal for learning and teaching machine learning concepts\r\n\r\n## Installation\r\n\r\n```bash\r\npip install decisioncanvas\r\n```\r\n\r\n## Quick Start\r\n\r\n```python\r\nfrom decisioncanvas import plot_decision_boundary\r\nfrom sklearn.datasets import load_iris\r\nfrom sklearn.linear_model import LogisticRegression\r\n\r\n# Load data and create model\r\nX, y = load_iris(return_X_y=True)\r\nmodel = LogisticRegression(max_iter=300)\r\n\r\n# Visualize decision boundary\r\nplot_decision_boundary(model, X, y)\r\n```\r\n\r\n## Usage Examples\r\n\r\n### Basic Classification\r\n\r\n```python\r\nfrom decisioncanvas import plot_decision_boundary\r\nfrom sklearn.datasets import load_iris\r\nfrom sklearn.model_selection import train_test_split\r\nfrom sklearn.linear_model import LogisticRegression\r\n\r\n# Prepare data\r\ndata = load_iris()\r\nX_train, X_test, y_train, y_test = train_test_split(\r\n data.data, data.target, test_size=0.3, random_state=42\r\n)\r\n\r\n# Train model\r\nmodel = LogisticRegression(max_iter=200)\r\nmodel.fit(X_train, y_train)\r\n\r\n# Visualize with custom labels\r\nplot_decision_boundary(\r\n model,\r\n X_train,\r\n y_train,\r\n class_names=data.target_names,\r\n title='Iris Classification Decision Boundary'\r\n)\r\n```\r\n\r\n### Advanced Customization\r\n\r\n```python\r\nplot_decision_boundary(\r\n model,\r\n X,\r\n y,\r\n grid_resolution=400,\r\n alpha=0.4,\r\n padding=1.5,\r\n title='Custom Decision Boundary Visualization',\r\n figsize=(10, 8)\r\n)\r\n```\r\n\r\n## API Reference\r\n\r\n### plot_decision_boundary\r\n\r\n```python\r\nplot_decision_boundary(\r\n model, X, y,\r\n class_names=None,\r\n standardize=True,\r\n pca_components=2,\r\n grid_resolution=300,\r\n padding=1.0,\r\n cmap_light=None,\r\n cmap_bold=None,\r\n alpha=0.3,\r\n title=\"Decision Boundary\",\r\n fit_model=True,\r\n figsize=(8, 6),\r\n random_state=None\r\n)\r\n```\r\n\r\n#### Parameters\r\n\r\n| Parameter | Type | Description | Default |\r\n|-----------|------|-------------|---------|\r\n| `model` | estimator | Scikit-learn compatible classifier | Required |\r\n| `X` | array-like | Feature matrix (n_samples, n_features) | Required |\r\n| `y` | array-like | Target labels (n_samples,) | Required |\r\n| `class_names` | list or dict | Custom class labels for legend | None |\r\n| `standardize` | bool | Apply feature standardization | True |\r\n| `pca_components` | int | Number of PCA components for dimensionality reduction | 2 |\r\n| `grid_resolution` | int | Resolution of decision boundary grid | 300 |\r\n| `padding` | float | Padding around data points in plot | 1.0 |\r\n| `cmap_light` | colormap | Colormap for decision regions | None (auto) |\r\n| `cmap_bold` | list | Colors for data points | None (auto) |\r\n| `alpha` | float | Transparency of decision regions | 0.3 |\r\n| `title` | str | Plot title | \"Decision Boundary\" |\r\n| `fit_model` | bool | Whether to fit the model on provided data | True |\r\n| `figsize` | tuple | Figure size (width, height) | (8, 6) |\r\n| `random_state` | int | Random state for PCA reproducibility | None |\r\n\r\n## Use Cases\r\n\r\n- **Model evaluation**: Visualize how different classifiers separate your data\r\n- **Educational purposes**: Demonstrate classification concepts in tutorials\r\n- **Research presentations**: Create publication-ready decision boundary plots\r\n- **Debugging**: Identify potential overfitting or data separation issues\r\n\r\n## Requirements\r\n\r\n- Python >= 3.7\r\n- numpy >= 1.18.0\r\n- scikit-learn >= 0.24.0\r\n- matplotlib >= 3.2.0\r\n\r\n## Contributing\r\n\r\nContributions are welcome! Please feel free to submit issues, feature requests, or pull requests.\r\n\r\n1. Fork the repository\r\n2. Create a feature branch\r\n3. Make your changes\r\n4. Add tests if applicable\r\n5. Submit a pull request\r\n\r\n## License\r\n\r\nThis project is licensed under the MIT License - see the LICENSE file for details.\r\n\r\n## Authors\r\n\r\n- **Krunal Wankhade** - krunal.wankahde1810@gmail.com\r\n- **Parimal Kalpande** - kalpandeparimal60@gmail.com\r\n\r\n## Links\r\n\r\n- **PyPI**: https://pypi.org/project/decisioncanvas/\r\n- **GitHub**: https://github.com/KrunalWankhade9021/Decesion-Canvas\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Easy decision boundary visualization for classifiers",
"version": "1.0.1",
"project_urls": {
"Homepage": "https://github.com/KrunalWankhade9021/Decesion-Canvas"
},
"split_keywords": [
"visualization",
" classifier",
" decision boundary",
" matplotlib",
" scikit-learn"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "033e52e67a3858fd9de4ad2f22d1eb4ec4ccba2a9cbe4220e562b03d194ea72b",
"md5": "c2ff2c4ddd5eb314c5ebb5c7fb4e46e9",
"sha256": "a8cb2977fa087d041c40ead11c750d29af33a48211a258187be94d63eae395ba"
},
"downloads": -1,
"filename": "decisioncanvas-1.0.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "c2ff2c4ddd5eb314c5ebb5c7fb4e46e9",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 5604,
"upload_time": "2025-07-27T07:00:02",
"upload_time_iso_8601": "2025-07-27T07:00:02.704832Z",
"url": "https://files.pythonhosted.org/packages/03/3e/52e67a3858fd9de4ad2f22d1eb4ec4ccba2a9cbe4220e562b03d194ea72b/decisioncanvas-1.0.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "6c3bdf8e9684f9ec60d1d4b0bd912cd90c0c3c8bd490eca0c6124e44d70ed6d8",
"md5": "52486dae05f38d037135a1b7c9170947",
"sha256": "d5e627584103e6546ec27232a35401999cf84685644846d7b6d3b5c29a029b1e"
},
"downloads": -1,
"filename": "decisioncanvas-1.0.1.tar.gz",
"has_sig": false,
"md5_digest": "52486dae05f38d037135a1b7c9170947",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 5598,
"upload_time": "2025-07-27T07:00:04",
"upload_time_iso_8601": "2025-07-27T07:00:04.482820Z",
"url": "https://files.pythonhosted.org/packages/6c/3b/df8e9684f9ec60d1d4b0bd912cd90c0c3c8bd490eca0c6124e44d70ed6d8/decisioncanvas-1.0.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-27 07:00:04",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "KrunalWankhade9021",
"github_project": "Decesion-Canvas",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "decisioncanvas"
}