--- 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.