Kernel Comparison: Digits Dataset
from sklearn.datasets import load_digits
from sklearn.model_selection import (
train_test_split, cross_val_score
)
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.pipeline import make_pipeline
# 1,797 handwritten digits, 64 features (8x8 px)
X, y = load_digits(return_X_y=True)
X_tr, X_te, y_tr, y_te = train_test_split(
X, y, test_size=0.2, stratify=y, random_state=42
)
kernels = {
"Linear": SVC(kernel='linear', C=1),
"Poly (d=3)": SVC(kernel='poly', degree=3, C=1),
"RBF": SVC(kernel='rbf', C=10, gamma=0.001),
}
for name, svm in kernels.items():
pipe = make_pipeline(StandardScaler(), svm)
cv = cross_val_score(pipe, X_tr, y_tr, cv=5)
pipe.fit(X_tr, y_tr)
test_acc = pipe.score(X_te, y_te)
print(f"{name:12s} CV={cv.mean():.3f} "
f"Test={test_acc:.3f} "
f"SVs={svm.fit(StandardScaler().fit_transform(X_tr), y_tr).n_support_.sum()}")