KubraParmak's picture
Upload 3 files
4485004 verified
|
Raw
History Blame Contribute Delete
2.02 kB
---
license: mit
tags:
- scikit-learn
- tabular-classification
- voting-classifier
- digit-recognition
- image-classification
pipeline_tag: image-classification
---
# Digit Image Classification Model
A Voting Classifier (SVM + Random Forest + KNN) predicting handwritten digits (0–9) from 8×8 pixel images.
## Dataset
Trained on the [sklearn digits dataset](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_digits.html) — 1797 samples, 64 features (8×8 grayscale pixel values, range 0–16).
## Preprocessing
- Features standardized with `StandardScaler`, fit on the training split only.
- Dimensionality reduced with `PCA` (n_components=0.95 — 95% variance retained), reducing 64 features to ~40 components.
## Model
Hard voting ensemble of three classifiers, each tuned via `GridSearchCV`:
| Classifier | Best Params |
|---|---|
| SVM | `C`, `kernel` searched over `[0.1, 1, 10]` × `["linear", "rbf"]` |
| Random Forest | `n_estimators` searched over `[50, 100, 200]` |
| KNN | `n_neighbors` searched over `[3, 5, 7]` |
## Files
- `digit_classifier_artifact.joblib`: dict with `{"model", "scaler", "pca"}`.
- `digit-image-classification.ipynb`: full notebook (preprocessing, GridSearchCV, VotingClassifier, evaluation).
## Usage
```python
import joblib
import numpy as np
from huggingface_hub import hf_hub_download
path = hf_hub_download(repo_id="KubraParmak/digit-classifier-model", filename="digit_classifier_artifact.joblib")
artifact = joblib.load(path)
scaler = artifact["scaler"]
pca = artifact["pca"]
model = artifact["model"]
# X: numpy array of shape (n_samples, 64), pixel values in range 0–16
X_scaled = scaler.transform(X)
X_pca = pca.transform(X_scaled)
predictions = model.predict(X_pca)
```
## Performance
Test accuracy: **0.97** (VotingClassifier, hard voting, 5-fold CV).
## Live Demo
See `KubraParmak/digit-image-classification` for an interactive Gradio demo.